+++ /dev/null
-/**
- * Copyright (c) 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * IBM - Initial API and implementation
- */
-package org.eclipse.webbrowser.internal;
-
-import java.net.URL;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.jface.action.IAction;
-import org.eclipse.jface.dialogs.IDialogConstants;
-import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.core.runtime.*;
-import org.eclipse.core.resources.*;
-import org.eclipse.ui.*;
-import org.eclipse.ui.part.*;
-import org.eclipse.webbrowser.*;
-/**
- * An integrated Web browser, defined as an editor to make
- * better use of the desktop.
- */
-public class WebBrowserEditor extends EditorPart {
- public static final String WEB_BROWSER_EDITOR_ID = "org.eclipse.webbrowser";
- protected WebBrowser webBrowser;
- protected String initialURL;
- protected Image image;
-
- protected TextAction cutAction;
- protected TextAction copyAction;
- protected TextAction pasteAction;
-
- protected IResourceChangeListener resourceListener;
-
- /**
- * WebBrowserEditor constructor comment.
- */
- public WebBrowserEditor() {
- super();
- }
-
- /**
- * Creates the SWT controls for this workbench part.
- * <p>
- * Clients should not call this method (the workbench calls this method at
- * appropriate times).
- * </p>
- * <p>
- * For implementors this is a multi-step process:
- * <ol>
- * <li>Create one or more controls within the parent.</li>
- * <li>Set the parent layout as needed.</li>
- * <li>Register any global actions with the <code>IActionService</code>.</li>
- * <li>Register any popup menus with the <code>IActionService</code>.</li>
- * <li>Register a selection provider with the <code>ISelectionService</code>
- * (optional). </li>
- * </ol>
- * </p>
- *
- * @param parent the parent control
- */
- public void createPartControl(Composite parent) {
- IWebBrowserEditorInput input = getWebBrowserEditorInput();
-
-
- if (input == null || input.isToolbarVisible() == false)
- webBrowser = new WebBrowser(parent, false, input.isStatusbarVisible());
- else {
- webBrowser = new WebBrowser(parent, true, input.isStatusbarVisible());
- cutAction = new TextAction(webBrowser, TextAction.CUT);
- copyAction = new TextAction(webBrowser, TextAction.COPY);
- pasteAction = new TextAction(webBrowser, TextAction.PASTE);
- }
-
- webBrowser.setURL(initialURL);
- webBrowser.editor = this;
- }
-
- public void dispose() {
- if (image != null && !image.isDisposed())
- image.dispose();
- image = null;
-
- if (resourceListener != null)
- ResourcesPlugin.getWorkspace().removeResourceChangeListener(resourceListener);
- }
-
- /* (non-Javadoc)
- * Saves the contents of this editor.
- * <p>
- * Subclasses must override this method to implement the open-save-close lifecycle
- * for an editor. For greater details, see <code>IEditorPart</code>
- * </p>
- *
- * @see IEditorPart
- */
- public void doSave(IProgressMonitor monitor) { }
-
- /* (non-Javadoc)
- * Saves the contents of this editor to another object.
- * <p>
- * Subclasses must override this method to implement the open-save-close lifecycle
- * for an editor. For greater details, see <code>IEditorPart</code>
- * </p>
- *
- * @see IEditorPart
- */
- public void doSaveAs() { }
-
- /**
- * Returns the copy action.
- *
- * @return org.eclipse.jface.action.IAction
- */
- public IAction getCopyAction() {
- return copyAction;
- }
-
- /**
- * Returns the cut action.
- *
- * @return org.eclipse.jface.action.IAction
- */
- public IAction getCutAction() {
- return cutAction;
- }
-
- /**
- * Returns the paste action.
- *
- * @return org.eclipse.jface.action.IAction
- */
- public IAction getPasteAction() {
- return pasteAction;
- }
-
- /**
- * Returns the web editor input, if available.
- *
- * @return org.eclipse.webbrowser.IWebBrowserEditorInput
- */
- protected IWebBrowserEditorInput getWebBrowserEditorInput() {
- IEditorInput input = getEditorInput();
- if (input instanceof IWebBrowserEditorInput)
- return (IWebBrowserEditorInput) input;
- return null;
- }
-
- /* (non-Javadoc)
- * Sets the cursor and selection state for this editor to the passage defined
- * by the given marker.
- * <p>
- * Subclasses may override. For greater details, see <code>IEditorPart</code>
- * </p>
- *
- * @see IEditorPart
- */
- public void gotoMarker(IMarker marker) { }
-
- /* (non-Javadoc)
- * Initializes the editor part with a site and input.
- * <p>
- * Subclasses of <code>EditorPart</code> must implement this method. Within
- * the implementation subclasses should verify that the input type is acceptable
- * and then save the site and input. Here is sample code:
- * </p>
- * <pre>
- * if (!(input instanceof IFileEditorInput))
- * throw new PartInitException("Invalid Input: Must be IFileEditorInput");
- * setSite(site);
- * setInput(editorInput);
- * </pre>
- */
- public void init(IEditorSite site, IEditorInput input) {
- Trace.trace(Trace.FINEST, "Opening browser: " + input);
- if (input instanceof IFileEditorInput) {
- IFileEditorInput fei = (IFileEditorInput) input;
- IFile file = fei.getFile();
- URL url = null;
- try {
- if (file != null && file.exists())
- url = file.getLocation().toFile().toURL();
- } catch (Exception e) {
- Trace.trace(Trace.SEVERE, "Error getting URL to file");
- }
- addResourceListener(file);
- input = new WebBrowserEditorInput(url, WebBrowserEditorInput.SHOW_ALL | WebBrowserEditorInput.SAVE_URL);
- }
- if (input instanceof IWebBrowserEditorInput) {
- IWebBrowserEditorInput wbei = (IWebBrowserEditorInput) input;
- initialURL = null;
- if (wbei.getURL() != null)
- initialURL = wbei.getURL().toExternalForm();
- if (webBrowser != null) {
- webBrowser.setURL(initialURL);
- site.getWorkbenchWindow().getActivePage().bringToTop(this);
- }
-
- setPartName(wbei.getName());
- setTitleToolTip(wbei.getToolTipText());
-
- Image oldImage = image;
- ImageDescriptor id = wbei.getImageDescriptor();
- image = id.createImage();
-
- setTitleImage(image);
- if (oldImage != null && !oldImage.isDisposed())
- oldImage.dispose();
- }
- setSite(site);
- setInput(input);
- }
-
- /* (non-Javadoc)
- * Returns whether the contents of this editor have changed since the last save
- * operation.
- * <p>
- * Subclasses must override this method to implement the open-save-close lifecycle
- * for an editor. For greater details, see <code>IEditorPart</code>
- * </p>
- *
- * @see IEditorPart
- */
- public boolean isDirty() {
- return false;
- }
-
- /* (non-Javadoc)
- * Returns whether the "save as" operation is supported by this editor.
- * <p>
- * Subclasses must override this method to implement the open-save-close lifecycle
- * for an editor. For greater details, see <code>IEditorPart</code>
- * </p>
- *
- * @see IEditorPart
- */
- public boolean isSaveAsAllowed() {
- return false;
- }
-
- /**
- * Returns true if this editor has a toolbar.
- *
- * @return boolean
- */
- public boolean isToolbarVisible() {
- IWebBrowserEditorInput input = getWebBrowserEditorInput();
- if (input == null || input.isToolbarVisible())
- return true;
- else
- return false;
- }
-
- /**
- * Open the input in the internal Web browser.
- */
- public static void open(IWebBrowserEditorInput input) {
- IWorkbenchWindow workbenchWindow = WebBrowserUIPlugin.getInstance().getWorkbench().getActiveWorkbenchWindow();
- IWorkbenchPage page = workbenchWindow.getActivePage();
-
- try {
- IEditorReference[] editors = page.getEditorReferences();
- int size = editors.length;
- for (int i = 0; i < size; i++) {
- if (WEB_BROWSER_EDITOR_ID.equals(editors[i].getId())) {
- IEditorPart editor = editors[i].getEditor(true);
- if (editor != null && editor instanceof WebBrowserEditor) {
- WebBrowserEditor webEditor = (WebBrowserEditor) editor;
- if (input.canReplaceInput(webEditor.getWebBrowserEditorInput())) {
- editor.init(editor.getEditorSite(), input);
- return;
- }
- }
- }
- }
-
- page.openEditor(input, WebBrowserEditor.WEB_BROWSER_EDITOR_ID);
- } catch (Exception e) {
- Trace.trace(Trace.SEVERE, "Error opening Web browser", e);
- }
- }
-
- /**
- * Asks this part to take focus within the workbench.
- * <p>
- * Clients should not call this method (the workbench calls this method at
- * appropriate times).
- * </p>
- */
- public void setFocus() {
- if (webBrowser != null) {
- if (webBrowser.combo != null)
- webBrowser.combo.setFocus();
- else
- webBrowser.browser.setFocus();
- webBrowser.updateHistory();
- }
- }
-
- /**
- * Update the actions.
- */
- protected void updateActions() {
- if (cutAction != null)
- cutAction.update();
- if (copyAction != null)
- copyAction.update();
- if (pasteAction != null)
- pasteAction.update();
- }
-
- /**
- * Close the editor correctly.
- */
- protected void closeEditor() {
- Display.getDefault().asyncExec(new Runnable() {
- public void run() {
- getEditorSite().getPage().closeEditor(WebBrowserEditor.this, false);
- }
- });
- }
-
- /**
- * Adds a resource change listener to see if the file is deleted.
- */
- protected void addResourceListener(final IResource resource) {
- if (resource == null)
- return;
-
- resourceListener = new IResourceChangeListener() {
- public void resourceChanged(IResourceChangeEvent event) {
- try {
- event.getDelta().accept(new IResourceDeltaVisitor() {
- public boolean visit(IResourceDelta delta) {
- IResource res = delta.getResource();
-
- if (res == null || !res.equals(resource))
- return true;
-
- if (delta.getKind() != IResourceDelta.REMOVED)
- return true;
-
- Display.getDefault().asyncExec(new Runnable() {
- public void run() {
- String title = WebBrowserUIPlugin.getResource("%dialogResourceDeletedTitle");
- String message = WebBrowserUIPlugin.getResource("%dialogResourceDeletedMessage", resource.getName());
- String[] labels = new String[] {WebBrowserUIPlugin.getResource("%dialogResourceDeletedIgnore"), IDialogConstants.CLOSE_LABEL};
- MessageDialog dialog = new MessageDialog(getEditorSite().getShell(), title, null, message, MessageDialog.INFORMATION, labels, 0);
-
- if (dialog.open() != 0)
- closeEditor();
- }
- });
- return false;
- }
- });
- } catch (Exception e) {
- Trace.trace(Trace.SEVERE, "Error listening for resource deletion", e);
- }
- }
- };
- ResourcesPlugin.getWorkspace().addResourceChangeListener(resourceListener);
- }
-}
\ No newline at end of file