1 11 package org.eclipse.ui.internal.browser; 12 13 import java.beans.PropertyChangeEvent ; 14 import java.beans.PropertyChangeListener ; 15 import java.net.MalformedURLException ; 16 import java.net.URL ; 17 18 import org.eclipse.core.runtime.IPath; 19 import org.eclipse.core.runtime.IProgressMonitor; 20 import org.eclipse.jface.action.IAction; 21 import org.eclipse.jface.resource.ImageDescriptor; 22 import org.eclipse.osgi.util.NLS; 23 import org.eclipse.swt.graphics.Image; 24 import org.eclipse.swt.widgets.Composite; 25 import org.eclipse.swt.widgets.Display; 26 import org.eclipse.ui.IActionBars; 27 import org.eclipse.ui.IEditorDescriptor; 28 import org.eclipse.ui.IEditorInput; 29 import org.eclipse.ui.IEditorPart; 30 import org.eclipse.ui.IEditorReference; 31 import org.eclipse.ui.IEditorRegistry; 32 import org.eclipse.ui.IEditorSite; 33 import org.eclipse.ui.IPathEditorInput; 34 import org.eclipse.ui.IWorkbenchPage; 35 import org.eclipse.ui.IWorkbenchWindow; 36 import org.eclipse.ui.PartInitException; 37 import org.eclipse.ui.PlatformUI; 38 import org.eclipse.ui.browser.IWorkbenchBrowserSupport; 39 import org.eclipse.ui.part.EditorPart; 40 44 public class WebBrowserEditor extends EditorPart implements IBrowserViewerContainer { 45 public static final String WEB_BROWSER_EDITOR_ID = "org.eclipse.ui.browser.editor"; 47 protected BrowserViewer webBrowser; 48 protected String initialURL; 49 protected Image image; 50 51 protected TextAction cutAction; 52 protected TextAction copyAction; 53 protected TextAction pasteAction; 54 55 private boolean disposed; 56 private boolean lockName; 57 58 61 public WebBrowserEditor() { 62 super(); 63 } 64 65 68 public void createPartControl(Composite parent) { 69 WebBrowserEditorInput input = getWebBrowserEditorInput(); 70 71 int style = 0; 72 if (input == null || input.isLocationBarLocal()) { 73 style += BrowserViewer.LOCATION_BAR; 74 } 75 if (input == null || input.isToolbarLocal()) { 76 style += BrowserViewer.BUTTON_BAR; 77 } 78 webBrowser = new BrowserViewer(parent, style); 79 80 webBrowser.setURL(initialURL); 81 webBrowser.setContainer(this); 82 83 if (input == null || input.isLocationBarLocal()) { 84 cutAction = new TextAction(webBrowser, TextAction.CUT); 85 copyAction = new TextAction(webBrowser, TextAction.COPY); 86 pasteAction = new TextAction(webBrowser, TextAction.PASTE); 87 } 88 89 if (!lockName) { 90 PropertyChangeListener propertyChangeListener = new PropertyChangeListener () { 91 public void propertyChange(PropertyChangeEvent event) { 92 if (BrowserViewer.PROPERTY_TITLE.equals(event.getPropertyName())) { 93 setPartName((String ) event.getNewValue()); 94 } 95 } 96 }; 97 webBrowser.addPropertyChangeListener(propertyChangeListener); 98 } 99 } 100 101 public void dispose() { 102 if (image != null && !image.isDisposed()) 103 image.dispose(); 104 image = null; 105 106 super.dispose(); 107 disposed = true; 109 } 110 111 public boolean isDisposed() { 112 return disposed; 113 } 114 115 118 public void doSave(IProgressMonitor monitor) { 119 } 121 122 125 public void doSaveAs() { 126 } 128 129 134 public IAction getCopyAction() { 135 return copyAction; 136 } 137 138 143 public IAction getCutAction() { 144 return cutAction; 145 } 146 147 153 protected WebBrowserEditorInput getWebBrowserEditorInput() { 154 IEditorInput input = getEditorInput(); 155 if (input instanceof WebBrowserEditorInput) 156 return (WebBrowserEditorInput) input; 157 return null; 158 } 159 160 165 public IAction getPasteAction() { 166 return pasteAction; 167 } 168 169 172 public void init(IEditorSite site, IEditorInput input) throws PartInitException { 173 Trace.trace(Trace.FINEST, "Opening browser: " + input); if (input instanceof IPathEditorInput) { 175 IPathEditorInput pei = (IPathEditorInput) input; 176 IPath path = pei.getPath(); 177 URL url = null; 178 try { 179 if (path != null) 180 url = path.toFile().toURL(); 181 initialURL = url.toExternalForm(); 182 } catch (Exception e) { 183 Trace.trace(Trace.SEVERE, "Error getting URL to file"); } 185 if (webBrowser != null) { 186 if (initialURL != null) 187 webBrowser.setURL(initialURL); 188 site.getWorkbenchWindow().getActivePage().activate(this); 189 } 190 191 setPartName(path.lastSegment()); 192 if (url != null) 193 setTitleToolTip(url.getFile()); 194 195 Image oldImage = image; 196 ImageDescriptor id = ImageResource.getImageDescriptor(ImageResource.IMG_INTERNAL_BROWSER); 197 image = id.createImage(); 198 199 setTitleImage(image); 200 if (oldImage != null && !oldImage.isDisposed()) 201 oldImage.dispose(); 202 } else if (input instanceof WebBrowserEditorInput) { 204 WebBrowserEditorInput wbei = (WebBrowserEditorInput) input; 205 initialURL = null; 206 if (wbei.getURL() != null) 207 initialURL = wbei.getURL().toExternalForm(); 208 if (webBrowser != null) { 209 webBrowser.setURL(initialURL); 210 site.getWorkbenchWindow().getActivePage().activate(this); 211 } 212 213 setPartName(wbei.getName()); 214 setTitleToolTip(wbei.getToolTipText()); 215 lockName = wbei.isNameLocked(); 216 217 Image oldImage = image; 218 ImageDescriptor id = wbei.getImageDescriptor(); 219 image = id.createImage(); 220 221 setTitleImage(image); 222 if (oldImage != null && !oldImage.isDisposed()) 223 oldImage.dispose(); 224 } else 225 throw new PartInitException(NLS.bind(Messages.errorInvalidEditorInput, input.getName())); 226 227 setSite(site); 228 setInput(input); 229 } 230 231 235 public boolean isDirty() { 236 return false; 237 } 238 239 242 public boolean isSaveAsAllowed() { 243 return false; 244 } 245 246 249 public static void open(WebBrowserEditorInput input) { 250 IWorkbenchWindow workbenchWindow = WebBrowserUIPlugin.getInstance().getWorkbench().getActiveWorkbenchWindow(); 251 IWorkbenchPage page = workbenchWindow.getActivePage(); 252 253 try { 254 IEditorReference[] editors = page.getEditorReferences(); 255 int size = editors.length; 256 for (int i = 0; i < size; i++) { 257 if (WEB_BROWSER_EDITOR_ID.equals(editors[i].getId())) { 258 IEditorPart editor = editors[i].getEditor(true); 259 if (editor != null && editor instanceof WebBrowserEditor) { 260 WebBrowserEditor webEditor = (WebBrowserEditor) editor; 261 WebBrowserEditorInput input2 = webEditor.getWebBrowserEditorInput(); 262 if (input2 == null || input.canReplaceInput(input2)) { 263 editor.init(editor.getEditorSite(), input); 264 return; 265 } 266 } 267 } 268 } 269 270 page.openEditor(input, WebBrowserEditor.WEB_BROWSER_EDITOR_ID); 271 } catch (Exception e) { 272 Trace.trace(Trace.SEVERE, "Error opening Web browser", e); } 274 } 275 276 279 public void setFocus() { 280 if (webBrowser != null) 281 webBrowser.setFocus(); 282 } 283 284 287 public boolean close() { 288 final boolean [] result = new boolean[1]; 289 Display.getDefault().asyncExec(new Runnable () { 290 public void run() { 291 result[0] = getEditorSite().getPage().closeEditor(WebBrowserEditor.this, false); 292 } 293 }); 294 return result[0]; 295 } 296 297 public IActionBars getActionBars() { 298 return getEditorSite().getActionBars(); 299 } 300 301 public void openInExternalBrowser(String url) { 302 final IEditorInput input = getEditorInput(); 303 final String id = getEditorSite().getId(); 304 Runnable runnable = new Runnable () { 305 public void run() { 306 doOpenExternalEditor(id, input); 307 } 308 }; 309 Display display = getSite().getShell().getDisplay(); 310 close(); 311 display.asyncExec(runnable); 312 } 313 314 protected void doOpenExternalEditor(String id, IEditorInput input) { 315 IEditorRegistry registry = PlatformUI.getWorkbench().getEditorRegistry(); 316 String name = input.getName(); 317 IEditorDescriptor [] editors = registry.getEditors(name); 318 IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); 319 320 String editorId = null; 321 for (int i = 0; i < editors.length; i++) { 322 IEditorDescriptor editor = editors[i]; 323 if (editor.getId().equals(id)) 324 continue; 325 editorId = editor.getId(); 326 break; 327 } 328 329 IEditorDescriptor ddesc = registry.getDefaultEditor(name); 330 if (ddesc!=null && ddesc.getId().equals(id)) { 331 int dot = name.lastIndexOf('.'); 332 String ext = name; 333 if (dot!= -1) 334 ext = "*."+name.substring(dot+1); registry.setDefaultEditor(ext, null); 336 } 337 338 if (editorId==null) { 339 if (registry.isSystemExternalEditorAvailable(name)) 342 editorId = IEditorRegistry.SYSTEM_EXTERNAL_EDITOR_ID; 343 } 344 345 if (editorId!=null) { 346 try { 347 page.openEditor(input, editorId); 348 return; 349 } catch (PartInitException e) { 350 } 352 } 353 354 try { 356 URL theURL = new URL (webBrowser.getURL()); 357 IWorkbenchBrowserSupport support = PlatformUI.getWorkbench().getBrowserSupport(); 358 support.getExternalBrowser().openURL(theURL); 359 } 360 catch (MalformedURLException e) { 361 } 363 catch (PartInitException e) { 364 } 366 } 367 } | Popular Tags |