blob: 3cdee2a8f4c2fef2c78936450ed05e0c33fa23b2 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004, 2005 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - Initial API and implementation
*******************************************************************************/
package org.eclipse.ui.internal.browser;
import java.net.URL;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IElementFactory;
import org.eclipse.ui.IMemento;
import org.eclipse.ui.IPersistableElement;
import org.eclipse.ui.browser.IWorkbenchBrowserSupport;
/**
* The editor input for the integrated web browser.
*/
public class WebBrowserEditorInput implements IEditorInput,
IPersistableElement, IElementFactory {
// --- constants to pass into constructor ---
// if used, the toolbar will be available
// public static final int SHOW_TOOLBAR = 1 << 1;
// public static final int SHOW_GLOBAL_TOOLBAR = 1 << 2;
// if used, the status bar will be available
// public static final int SHOW_STATUSBAR = 1 << 2;
// if used, the original URL will be saved and
// the page can reopen to the same URL after
// shutting down
// public static final int SAVE_URL = 1 << 5;
// if used, the browser will be transient and will not appear
// in the most recently used file list, nor will it reopen after
// restarting Eclipse
// public static final int TRANSIENT = 1 << 6;
private static final String ELEMENT_FACTORY_ID = "org.eclipse.ui.browser.elementFactory"; //$NON-NLS-1$
private static final String MEMENTO_URL = "url"; //$NON-NLS-1$
private static final String MEMENTO_STYLE = "style"; //$NON-NLS-1$
private static final String MEMENTO_ID = "id"; //$NON-NLS-1$
private URL url;
private int style;
private String id = null;
private String name;
private String tooltip;
/**
* ExternalBrowserInstance editor input for the homepage.
*/
public WebBrowserEditorInput() {
this(null);
}
/**
* WebBrowserEditorInput constructor comment.
*/
public WebBrowserEditorInput(URL url) {
this(url, 0);
}
/**
* WebBrowserEditorInput constructor comment.
*/
public WebBrowserEditorInput(URL url, int style) {
super();
this.url = url;
this.style = style;
}
/**
* WebBrowserEditorInput constructor comment.
*/
public WebBrowserEditorInput(URL url, int style, String browserId) {
super();
this.url = url;
this.style = style;
this.id = browserId;
}
/**
* WebBrowserEditorInput constructor comment.
*/
public WebBrowserEditorInput(URL url, boolean b) {
this(url);
}
public void setName(String n) {
name = n;
}
public void setToolTipText(String t) {
tooltip = t;
}
/**
* Returns true if this page can reuse the browser that the given input is
* being displayed in, or false if it should open up in a new page.
*
* @param input
* org.eclipse.ui.internal.browser.IWebBrowserEditorInput
* @return boolean
*/
public boolean canReplaceInput(WebBrowserEditorInput input) {
Trace.trace(Trace.FINEST, "canReplaceInput " + this + " " + input); //$NON-NLS-1$ //$NON-NLS-2$
// if ((style & FORCE_NEW_PAGE) != 0)
// return false;
// if (input.isToolbarVisible() != isToolbarVisible())
// return false;
// else
if (input.isStatusbarVisible() != isStatusbarVisible())
return false;
else if (id != null) {
String bid = input.getBrowserId();
return id.equals(bid);
} else
return false;
}
/**
* Creates an <code>IElement</code> from the state captured within an
* <code>IMemento</code>.
*
* @param memento
* a memento containing the state for an element
* @return an element, or <code>null</code> if the element could not be
* created
*/
public IAdaptable createElement(IMemento memento) {
URL url2 = null;
int newStyle = 0;
try {
newStyle = memento.getInteger(MEMENTO_STYLE).intValue();
if (newStyle != 0)
url = new URL(memento.getString(MEMENTO_URL));
} catch (Exception e) {
// could not determine the style
}
String id2 = null;
try {
id2 = memento.getString(MEMENTO_ID);
if (id2 != null && id2.length() < 1)
id2 = null;
} catch (Exception e) {
// ignore
}
return new WebBrowserEditorInput(url2, newStyle, id2);
}
/**
* Indicates whether some other object is "equal to" this one. In this case
* it means that the underlying IFolders are equal.
*/
public boolean equals(Object obj) {
if (this == obj)
return true;
if (!(obj instanceof WebBrowserEditorInput))
return false;
WebBrowserEditorInput other = (WebBrowserEditorInput) obj;
if (url != null && !url.equals(obj))
return false;
return canReplaceInput(other);
}
/*
* Returns whether the editor input exists.
*/
public boolean exists() {
if ((style & IWorkbenchBrowserSupport.PERSISTENT) != 0)
return false;
return true;
}
/**
* Returns an object which is an instance of the given class associated with
* this object. Returns <code>null</code> if no such object can be found.
*
* @param adapter
* the adapter class to look up
* @return a object castable to the given class, or <code>null</code> if
* this object does not have an adapter for the given class
*/
public Object getAdapter(Class adapter) {
return null;
}
/**
* Returns the ID of an element factory which can be used to recreate this
* object. An element factory extension with this ID must exist within the
* workbench registry.
*
* @return the element factory ID
*/
public String getFactoryId() {
return ELEMENT_FACTORY_ID;
}
public ImageDescriptor getImageDescriptor() {
return ImageResource
.getImageDescriptor(ImageResource.IMG_INTERNAL_BROWSER);
}
/**
* Returns true if the name is locked and cannot be changed.
*
* @return <code>true</code> if the name of the browser should not change
*/
protected boolean isNameLocked() {
return (name != null);
}
/**
* Returns the name of this editor input for display purposes.
* <p>
* For instance, if the fully qualified input name is
* <code>"a\b\MyFile.gif"</code>, the return value would be just
* <code>"MyFile.gif"</code>.
*
* @return the file name string
*/
public String getName() {
if (name != null)
return name;
return Messages.viewWebBrowserTitle;
}
/*
* Returns an object that can be used to save the state of this editor
* input. @return the persistable element, or <code>null</code> if this
* editor input cannot be persisted
*/
public IPersistableElement getPersistable() {
if ((style & IWorkbenchBrowserSupport.PERSISTENT) == 0)
return null;
return this;
}
public String getToolTipText() {
if (tooltip != null)
return tooltip;
if (url != null)
return url.toExternalForm();
return Messages.viewWebBrowserTitle;
}
/**
* Returns the url.
*
* @return java.net.URL
*/
public URL getURL() {
return url;
}
/**
* Returns the browser id. Browsers with a set id will always & only be
* replaced by browsers with the same id.
*
* @return String
*/
public String getBrowserId() {
return id;
}
/**
* Returns true if the status bar should be shown.
*
* @return boolean
*/
public boolean isStatusbarVisible() {
return (style & IWorkbenchBrowserSupport.STATUS) != 0;
}
/**
* Returns true if the toolbar should be shown.
*
* @return boolean
*/
public boolean isLocationBarLocal() {
return (style & BrowserViewer.LOCATION_BAR) != 0;
}
/*
* public boolean isLocationBarGlobal() { return (style &
* ExternalBrowserInstance.LOCATION_TOOLBAR) != 0; }
*/
public boolean isToolbarLocal() {
return (style & BrowserViewer.BUTTON_BAR) != 0;
}
/*
* public boolean isToolbarGlobal() { return (style &
* ExternalBrowserInstance.BUTTON_TOOLBAR) != 0; }
*/
/**
* Saves the state of an element within a memento.
*
* @param memento
* the storage area for element state
*/
public void saveState(IMemento memento) {
if ((style & IWorkbenchBrowserSupport.PERSISTENT) != 0 && url != null)
memento.putString(MEMENTO_URL, url.toExternalForm());
memento.putInteger(MEMENTO_STYLE, style);
if (id != null)
memento.putString(MEMENTO_ID, id);
}
/**
* Converts this object to a string.
*
* @return java.lang.String
*/
public String toString() {
return "WebBrowserEditorInput[" + url + " " + style + " " + id + "]"; //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
}
}