1 11 package org.eclipse.ui.internal.browser; 12 13 import java.io.File ; 14 import java.net.MalformedURLException ; 15 import java.net.URL ; 16 17 import org.eclipse.core.runtime.IAdaptable; 18 import org.eclipse.core.runtime.IPath; 19 import org.eclipse.jface.viewers.ISelection; 20 import org.eclipse.jface.viewers.IStructuredSelection; 21 import org.eclipse.swt.dnd.DND; 22 import org.eclipse.swt.dnd.DropTarget; 23 import org.eclipse.swt.dnd.FileTransfer; 24 import org.eclipse.swt.dnd.Transfer; 25 import org.eclipse.swt.widgets.Composite; 26 import org.eclipse.ui.IActionBars; 27 import org.eclipse.ui.ISelectionListener; 28 import org.eclipse.ui.IWorkbenchPart; 29 import org.eclipse.ui.PartInitException; 30 import org.eclipse.ui.PlatformUI; 31 import org.eclipse.ui.browser.IWorkbenchBrowserSupport; 32 import org.eclipse.ui.part.ISetSelectionTarget; 33 import org.eclipse.ui.part.ViewPart; 34 35 38 public class WebBrowserView extends ViewPart implements 39 IBrowserViewerContainer, ISetSelectionTarget { 40 public static final String WEB_BROWSER_VIEW_ID = "org.eclipse.ui.browser.view"; 42 protected BrowserViewer viewer; 43 44 protected ISelectionListener listener; 45 46 public void createPartControl(Composite parent) { 47 int style = WebBrowserUtil.decodeStyle(getViewSite().getSecondaryId()); 48 viewer = new BrowserViewer(parent, style); 49 viewer.setContainer(this); 50 51 59 initDragAndDrop(); 60 } 61 62 public void dispose() { 63 if (viewer!=null) 64 viewer.setContainer(null); 65 if (listener != null) 66 removeSelectionListener(); 67 } 68 69 public void setURL(String url) { 70 if (viewer != null) 71 viewer.setURL(url); 72 } 73 74 public void setFocus() { 75 viewer.setFocus(); 76 } 77 78 public boolean close() { 79 try { 80 getSite().getPage().hideView(this); 81 return true; 82 } catch (Exception e) { 83 return false; 84 } 85 } 86 87 public IActionBars getActionBars() { 88 return getViewSite().getActionBars(); 89 } 90 91 public void openInExternalBrowser(String url) { 92 try { 93 URL theURL = new URL (url); 94 IWorkbenchBrowserSupport support = PlatformUI.getWorkbench() 95 .getBrowserSupport(); 96 support.getExternalBrowser().openURL(theURL); 97 } catch (MalformedURLException e) { 98 } catch (PartInitException e) { 100 } 102 } 103 104 public void addSelectionListener() { 105 if (listener != null) 106 return; 107 108 listener = new ISelectionListener() { 109 public void selectionChanged(IWorkbenchPart part, 110 ISelection selection) { 111 onSelectionChange(selection); 112 } 113 }; 114 getSite().getWorkbenchWindow().getSelectionService() 115 .addPostSelectionListener(listener); 116 } 117 118 private void onSelectionChange(ISelection selection) { 119 if (!(selection instanceof IStructuredSelection)) 120 return; 121 IStructuredSelection sel = (IStructuredSelection) selection; 122 Object obj = sel.getFirstElement(); 123 if (obj instanceof IAdaptable) { 124 IAdaptable adapt = (IAdaptable) obj; 125 URL url = getURLFromAdaptable(adapt); 126 if (url!=null) 127 setURL(url.toExternalForm()); 128 } 129 } 130 131 private URL getURLFromAdaptable(IAdaptable adapt) { 132 IPath path = (IPath) adapt.getAdapter(IPath.class); 134 if (path != null) { 135 File file = path.toFile(); 136 if (file.exists() && isWebFile(file.getName())) 137 try { 138 return file.toURL(); 139 } catch (MalformedURLException e) { 140 return null; 141 } 142 } 143 return (URL )adapt.getAdapter(URL .class); 144 } 145 146 public void removeSelectionListener() { 147 if (listener == null) 148 return; 149 getSite().getWorkbenchWindow().getSelectionService() 150 .removePostSelectionListener(listener); 151 listener = null; 152 } 153 154 160 protected boolean isWebFile(String name) { 161 return name.endsWith("html") || name.endsWith("htm") || name.endsWith("gif") || name.endsWith("jpg"); } 164 165 168 protected void initDragAndDrop() { 169 Transfer[] transfers = new Transfer[] { 170 FileTransfer.getInstance() }; 173 174 DropTarget dropTarget = new DropTarget(viewer, DND.DROP_COPY 175 | DND.DROP_DEFAULT); 176 dropTarget.setTransfer(transfers); 177 dropTarget.addDropListener(new WebBrowserViewDropAdapter(viewer)); 178 } 179 180 public void selectReveal(ISelection selection) { 181 onSelectionChange(selection); 182 } 183 } 184 | Popular Tags |