-/*******************************************************************************\r
- * Copyright (c) 2007, 2010 Association for Decentralized Information Management\r
- * in Industry THTH ry.\r
- * All rights reserved. This program and the accompanying materials\r
- * are made available under the terms of the Eclipse Public License v1.0\r
- * which accompanies this distribution, and is available at\r
- * http://www.eclipse.org/legal/epl-v10.html\r
- *\r
- * Contributors:\r
- * VTT Technical Research Centre of Finland - initial API and implementation\r
- *******************************************************************************/\r
-package org.simantics.editors;\r
-\r
-import org.eclipse.core.runtime.IProgressMonitor;\r
-import org.eclipse.jface.resource.ImageDescriptor;\r
-import org.eclipse.jface.resource.JFaceResources;\r
-import org.eclipse.jface.resource.LocalResourceManager;\r
-import org.eclipse.swt.SWT;\r
-import org.eclipse.swt.browser.LocationEvent;\r
-import org.eclipse.swt.browser.LocationListener;\r
-import org.eclipse.swt.browser.ProgressEvent;\r
-import org.eclipse.swt.browser.ProgressListener;\r
-import org.eclipse.swt.browser.StatusTextEvent;\r
-import org.eclipse.swt.browser.StatusTextListener;\r
-import org.eclipse.swt.graphics.Image;\r
-import org.eclipse.swt.layout.FillLayout;\r
-import org.eclipse.swt.layout.GridData;\r
-import org.eclipse.swt.layout.GridLayout;\r
-import org.eclipse.swt.widgets.Composite;\r
-import org.eclipse.swt.widgets.Event;\r
-import org.eclipse.swt.widgets.Label;\r
-import org.eclipse.swt.widgets.Listener;\r
-import org.eclipse.swt.widgets.ProgressBar;\r
-import org.eclipse.swt.widgets.Shell;\r
-import org.eclipse.swt.widgets.Text;\r
-import org.eclipse.swt.widgets.ToolBar;\r
-import org.eclipse.swt.widgets.ToolItem;\r
-import org.eclipse.ui.IEditorInput;\r
-import org.eclipse.ui.IEditorSite;\r
-import org.eclipse.ui.PartInitException;\r
-import org.eclipse.ui.part.EditorPart;\r
-\r
-/**\r
- * Web Browser\r
- * Visiblity of controls (back, forward, url, ...) can be configured with the BrowserInput\r
- * \r
- * @author Marko Luukkainen <Marko.Luukkainen@vtt.fi>\r
- *\r
- */\r
-public class Browser extends EditorPart {\r
-\r
- public static final String ID = "org.simantics.editors.browser";\r
-\r
- org.eclipse.swt.browser.Browser browser;\r
- ToolBar toolbar;\r
- LocalResourceManager resourceManager;\r
-\r
- private final ImageDescriptor BACK_IMAGE = Activator.imageDescriptorFromPlugin(Activator.PLUGIN_ID, "icons/browser/arrow_left.png");\r
- private final ImageDescriptor FORWARD_IMAGE = Activator.imageDescriptorFromPlugin(Activator.PLUGIN_ID, "icons/browser/arrow_right.png");\r
- private final ImageDescriptor STOP_IMAGE = Activator.imageDescriptorFromPlugin(Activator.PLUGIN_ID, "icons/browser/stop.png");\r
- private final ImageDescriptor REFRESH_IMAGE = Activator.imageDescriptorFromPlugin(Activator.PLUGIN_ID, "icons/browser/arrow_rotate_clockwise.png");\r
-\r
- private Shell fsShell;\r
-\r
- public Browser() {\r
-\r
- }\r
-\r
- @Override\r
- public void doSave(IProgressMonitor monitor) {\r
-\r
- }\r
-\r
- @Override\r
- public void doSaveAs() {\r
-\r
- }\r
-\r
- @Override\r
- public void init(IEditorSite site, IEditorInput input)\r
- throws PartInitException {\r
- if (!(input instanceof BrowserInput))\r
- throw new PartInitException("Input must be instance of BrowserInput");\r
- setSite(site);\r
- setInput(input);\r
-\r
- // Set initial part name according to the name given by IEditorInput\r
- setPartName(getEditorInput().getName());\r
- }\r
-\r
- @Override\r
- public boolean isDirty() {\r
- return false;\r
- }\r
-\r
- @Override\r
- public boolean isSaveAsAllowed() {\r
- return false;\r
- }\r
-\r
- @Override\r
- public void createPartControl(Composite parent) {\r
- resourceManager = new LocalResourceManager(JFaceResources.getResources(), parent);\r
- Image backImage = resourceManager.createImage(BACK_IMAGE);\r
- Image forwardImage = resourceManager.createImage(FORWARD_IMAGE);\r
- Image stopImage = resourceManager.createImage(STOP_IMAGE);\r
- Image refreshImage = resourceManager.createImage(REFRESH_IMAGE);\r
-\r
- // http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet128.java\r
- BrowserInput input = (BrowserInput)getEditorInput();\r
- boolean fullscreen = input.isFullscreen();\r
- if (fullscreen) {\r
- fsShell = new Shell(parent.getDisplay());\r
-\r
- fsShell.setLayout(new GridLayout(1,false));\r
- fsShell.setLayout(new FillLayout());\r
- parent = new Composite(fsShell,SWT.NONE);\r
- fsShell.open();\r
- fsShell.setFullScreen(true);\r
- parent.setLayout(new FillLayout());\r
- }\r
-\r
- String url = input.getUrl().toString();\r
- boolean showControls = input.isShowControls();\r
- if (showControls) {\r
- Composite composite = new Composite(parent, SWT.NONE);\r
- GridLayout gridLayout = new GridLayout();\r
- gridLayout.numColumns = 3;\r
- composite.setLayout(gridLayout);\r
- toolbar = new ToolBar(composite, SWT.NONE);\r
- ToolItem itemBack = new ToolItem(toolbar, SWT.PUSH);\r
- itemBack.setText("Back");\r
- itemBack.setImage(backImage);\r
- ToolItem itemForward = new ToolItem(toolbar, SWT.PUSH);\r
- itemForward.setText("Forward");\r
- itemForward.setImage(forwardImage);\r
- ToolItem itemStop = new ToolItem(toolbar, SWT.PUSH);\r
- itemStop.setText("Stop");\r
- itemStop.setImage(stopImage);\r
- ToolItem itemRefresh = new ToolItem(toolbar, SWT.PUSH);\r
- itemRefresh.setText("Refresh");\r
- itemRefresh.setImage(refreshImage);\r
- // ToolItem itemGo = new ToolItem(toolbar, SWT.PUSH);\r
- // itemGo.setText("Go");\r
-\r
- GridData data = new GridData();\r
- data.grabExcessHorizontalSpace = true;\r
- data.grabExcessVerticalSpace = false;\r
- data.horizontalAlignment = SWT.FILL;\r
- data.verticalAlignment = SWT.CENTER;\r
- data.horizontalSpan = 3;\r
- toolbar.setLayoutData(data);\r
-\r
- Label labelAddress = new Label(composite, SWT.NONE);\r
- labelAddress.setText("Address");\r
-\r
- final Text location = new Text(composite, SWT.BORDER);\r
- data = new GridData();\r
- data.horizontalAlignment = GridData.FILL;\r
- data.horizontalSpan = 2;\r
- data.grabExcessHorizontalSpace = true;\r
- location.setLayoutData(data);\r
-\r
- browser = new org.eclipse.swt.browser.Browser(composite, input.getBrowserStyle());\r
-\r
- data = new GridData();\r
- data.grabExcessHorizontalSpace = true;\r
- data.grabExcessVerticalSpace = true;\r
- data.horizontalAlignment = SWT.FILL;\r
- data.verticalAlignment = SWT.FILL;\r
- data.horizontalSpan = 3;\r
- browser.setLayoutData(data);\r
-\r
- final Label statusl = new Label(composite, SWT.NONE);\r
- data = new GridData(GridData.FILL_HORIZONTAL);\r
- data.horizontalSpan = 2;\r
- statusl.setLayoutData(data);\r
-\r
- final ProgressBar progressBar = new ProgressBar(composite, SWT.NONE);\r
- data = new GridData();\r
- data.horizontalAlignment = GridData.END;\r
- progressBar.setLayoutData(data);\r
-\r
- browser.addProgressListener(new ProgressListener() {\r
- @Override\r
- public void changed(ProgressEvent event) {\r
- if (event.total == 0)\r
- return;\r
- int ratio = event.current * 100 / event.total;\r
- progressBar.setSelection(ratio);\r
- }\r
-\r
- @Override\r
- public void completed(ProgressEvent event) {\r
- progressBar.setSelection(0);\r
- }\r
- });\r
- browser.addStatusTextListener(new StatusTextListener() {\r
- @Override\r
- public void changed(StatusTextEvent event) {\r
- statusl.setText(event.text);\r
- }\r
- });\r
- browser.addLocationListener(new LocationListener() {\r
- @Override\r
- public void changed(LocationEvent event) {\r
- if (event.top)\r
- location.setText(event.location);\r
- scheduleSetPartName();\r
- }\r
-\r
- @Override\r
- public void changing(LocationEvent event) {\r
- }\r
- });\r
-\r
- Listener listener = new Listener() {\r
- @Override\r
- public void handleEvent(Event event) {\r
- ToolItem item = (ToolItem) event.widget;\r
- String string = item.getText();\r
- if (string.equals("Back"))\r
- browser.back();\r
- else if (string.equals("Forward"))\r
- browser.forward();\r
- else if (string.equals("Stop"))\r
- browser.stop();\r
- else if (string.equals("Refresh"))\r
- browser.refresh();\r
- // else if (string.equals("Go"))\r
- // browser.setUrl(location.getText());\r
- }\r
- };\r
-\r
- itemBack.addListener(SWT.Selection, listener);\r
- itemForward.addListener(SWT.Selection, listener);\r
- itemStop.addListener(SWT.Selection, listener);\r
- itemRefresh.addListener(SWT.Selection, listener);\r
- } else { // !showControls\r
- browser = new org.eclipse.swt.browser.Browser(parent, input.getBrowserStyle());\r
- browser.addLocationListener(new LocationListener() {\r
- @Override\r
- public void changed(LocationEvent event) {\r
- scheduleSetPartName();\r
- }\r
- @Override\r
- public void changing(LocationEvent event) {\r
- }\r
- });\r
- }\r
-\r
- browser.setUrl(url);\r
-\r
- if (fullscreen) {\r
- fsShell.layout(true, true);\r
- }\r
- }\r
-\r
- protected void scheduleSetPartName() {\r
- browser.getDisplay().asyncExec(new Runnable() {\r
- @Override\r
- public void run() {\r
- if (browser.isDisposed())\r
- return;\r
- String name = getEditorInput().getName();\r
- setPartName(name);\r
- }\r
- });\r
- }\r
-\r
- @Override\r
- public void setFocus() {\r
- browser.setFocus();\r
- }\r
-\r
- @Override\r
- public void dispose() {\r
- if (fsShell != null)\r
- fsShell.dispose();\r
- super.dispose();\r
- }\r
-\r
- public org.eclipse.swt.browser.Browser getBrowser() {\r
- return browser;\r
- }\r
-\r
-}\r
+/*******************************************************************************
+ * Copyright (c) 2007, 2010 Association for Decentralized Information Management
+ * in Industry THTH ry.
+ * 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:
+ * VTT Technical Research Centre of Finland - initial API and implementation
+ *******************************************************************************/
+package org.simantics.editors;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.resource.JFaceResources;
+import org.eclipse.jface.resource.LocalResourceManager;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.browser.LocationEvent;
+import org.eclipse.swt.browser.LocationListener;
+import org.eclipse.swt.browser.ProgressEvent;
+import org.eclipse.swt.browser.ProgressListener;
+import org.eclipse.swt.browser.StatusTextEvent;
+import org.eclipse.swt.browser.StatusTextListener;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.ProgressBar;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.swt.widgets.ToolBar;
+import org.eclipse.swt.widgets.ToolItem;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IEditorSite;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.part.EditorPart;
+
+/**
+ * Web Browser
+ * Visiblity of controls (back, forward, url, ...) can be configured with the BrowserInput
+ *
+ * @author Marko Luukkainen <Marko.Luukkainen@vtt.fi>
+ *
+ */
+public class Browser extends EditorPart {
+
+ public static final String ID = "org.simantics.editors.browser";
+
+ org.eclipse.swt.browser.Browser browser;
+ ToolBar toolbar;
+ LocalResourceManager resourceManager;
+
+ private final ImageDescriptor BACK_IMAGE = Activator.imageDescriptorFromPlugin(Activator.PLUGIN_ID, "icons/browser/arrow_left.png");
+ private final ImageDescriptor FORWARD_IMAGE = Activator.imageDescriptorFromPlugin(Activator.PLUGIN_ID, "icons/browser/arrow_right.png");
+ private final ImageDescriptor STOP_IMAGE = Activator.imageDescriptorFromPlugin(Activator.PLUGIN_ID, "icons/browser/stop.png");
+ private final ImageDescriptor REFRESH_IMAGE = Activator.imageDescriptorFromPlugin(Activator.PLUGIN_ID, "icons/browser/arrow_rotate_clockwise.png");
+
+ private Shell fsShell;
+
+ public Browser() {
+
+ }
+
+ @Override
+ public void doSave(IProgressMonitor monitor) {
+
+ }
+
+ @Override
+ public void doSaveAs() {
+
+ }
+
+ @Override
+ public void init(IEditorSite site, IEditorInput input)
+ throws PartInitException {
+ if (!(input instanceof BrowserInput))
+ throw new PartInitException("Input must be instance of BrowserInput");
+ setSite(site);
+ setInput(input);
+
+ // Set initial part name according to the name given by IEditorInput
+ setPartName(getEditorInput().getName());
+ }
+
+ @Override
+ public boolean isDirty() {
+ return false;
+ }
+
+ @Override
+ public boolean isSaveAsAllowed() {
+ return false;
+ }
+
+ @Override
+ public void createPartControl(Composite parent) {
+ resourceManager = new LocalResourceManager(JFaceResources.getResources(), parent);
+ Image backImage = resourceManager.createImage(BACK_IMAGE);
+ Image forwardImage = resourceManager.createImage(FORWARD_IMAGE);
+ Image stopImage = resourceManager.createImage(STOP_IMAGE);
+ Image refreshImage = resourceManager.createImage(REFRESH_IMAGE);
+
+ // http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet128.java
+ BrowserInput input = (BrowserInput)getEditorInput();
+ boolean fullscreen = input.isFullscreen();
+ if (fullscreen) {
+ fsShell = new Shell(parent.getDisplay());
+
+ fsShell.setLayout(new GridLayout(1,false));
+ fsShell.setLayout(new FillLayout());
+ parent = new Composite(fsShell,SWT.NONE);
+ fsShell.open();
+ fsShell.setFullScreen(true);
+ parent.setLayout(new FillLayout());
+ }
+
+ String url = input.getUrl().toString();
+ boolean showControls = input.isShowControls();
+ if (showControls) {
+ Composite composite = new Composite(parent, SWT.NONE);
+ GridLayout gridLayout = new GridLayout();
+ gridLayout.numColumns = 3;
+ composite.setLayout(gridLayout);
+ toolbar = new ToolBar(composite, SWT.NONE);
+ ToolItem itemBack = new ToolItem(toolbar, SWT.PUSH);
+ itemBack.setText("Back");
+ itemBack.setImage(backImage);
+ ToolItem itemForward = new ToolItem(toolbar, SWT.PUSH);
+ itemForward.setText("Forward");
+ itemForward.setImage(forwardImage);
+ ToolItem itemStop = new ToolItem(toolbar, SWT.PUSH);
+ itemStop.setText("Stop");
+ itemStop.setImage(stopImage);
+ ToolItem itemRefresh = new ToolItem(toolbar, SWT.PUSH);
+ itemRefresh.setText("Refresh");
+ itemRefresh.setImage(refreshImage);
+ // ToolItem itemGo = new ToolItem(toolbar, SWT.PUSH);
+ // itemGo.setText("Go");
+
+ GridData data = new GridData();
+ data.grabExcessHorizontalSpace = true;
+ data.grabExcessVerticalSpace = false;
+ data.horizontalAlignment = SWT.FILL;
+ data.verticalAlignment = SWT.CENTER;
+ data.horizontalSpan = 3;
+ toolbar.setLayoutData(data);
+
+ Label labelAddress = new Label(composite, SWT.NONE);
+ labelAddress.setText("Address");
+
+ final Text location = new Text(composite, SWT.BORDER);
+ data = new GridData();
+ data.horizontalAlignment = GridData.FILL;
+ data.horizontalSpan = 2;
+ data.grabExcessHorizontalSpace = true;
+ location.setLayoutData(data);
+
+ browser = new org.eclipse.swt.browser.Browser(composite, input.getBrowserStyle());
+
+ data = new GridData();
+ data.grabExcessHorizontalSpace = true;
+ data.grabExcessVerticalSpace = true;
+ data.horizontalAlignment = SWT.FILL;
+ data.verticalAlignment = SWT.FILL;
+ data.horizontalSpan = 3;
+ browser.setLayoutData(data);
+
+ final Label statusl = new Label(composite, SWT.NONE);
+ data = new GridData(GridData.FILL_HORIZONTAL);
+ data.horizontalSpan = 2;
+ statusl.setLayoutData(data);
+
+ final ProgressBar progressBar = new ProgressBar(composite, SWT.NONE);
+ data = new GridData();
+ data.horizontalAlignment = GridData.END;
+ progressBar.setLayoutData(data);
+
+ browser.addProgressListener(new ProgressListener() {
+ @Override
+ public void changed(ProgressEvent event) {
+ if (event.total == 0)
+ return;
+ int ratio = event.current * 100 / event.total;
+ progressBar.setSelection(ratio);
+ }
+
+ @Override
+ public void completed(ProgressEvent event) {
+ progressBar.setSelection(0);
+ }
+ });
+ browser.addStatusTextListener(new StatusTextListener() {
+ @Override
+ public void changed(StatusTextEvent event) {
+ statusl.setText(event.text);
+ }
+ });
+ browser.addLocationListener(new LocationListener() {
+ @Override
+ public void changed(LocationEvent event) {
+ if (event.top)
+ location.setText(event.location);
+ scheduleSetPartName();
+ }
+
+ @Override
+ public void changing(LocationEvent event) {
+ }
+ });
+
+ Listener listener = new Listener() {
+ @Override
+ public void handleEvent(Event event) {
+ ToolItem item = (ToolItem) event.widget;
+ String string = item.getText();
+ if (string.equals("Back"))
+ browser.back();
+ else if (string.equals("Forward"))
+ browser.forward();
+ else if (string.equals("Stop"))
+ browser.stop();
+ else if (string.equals("Refresh"))
+ browser.refresh();
+ // else if (string.equals("Go"))
+ // browser.setUrl(location.getText());
+ }
+ };
+
+ itemBack.addListener(SWT.Selection, listener);
+ itemForward.addListener(SWT.Selection, listener);
+ itemStop.addListener(SWT.Selection, listener);
+ itemRefresh.addListener(SWT.Selection, listener);
+ } else { // !showControls
+ browser = new org.eclipse.swt.browser.Browser(parent, input.getBrowserStyle());
+ browser.addLocationListener(new LocationListener() {
+ @Override
+ public void changed(LocationEvent event) {
+ scheduleSetPartName();
+ }
+ @Override
+ public void changing(LocationEvent event) {
+ }
+ });
+ }
+
+ browser.setUrl(url);
+
+ if (fullscreen) {
+ fsShell.layout(true, true);
+ }
+ }
+
+ protected void scheduleSetPartName() {
+ browser.getDisplay().asyncExec(new Runnable() {
+ @Override
+ public void run() {
+ if (browser.isDisposed())
+ return;
+ String name = getEditorInput().getName();
+ setPartName(name);
+ }
+ });
+ }
+
+ @Override
+ public void setFocus() {
+ browser.setFocus();
+ }
+
+ @Override
+ public void dispose() {
+ if (fsShell != null)
+ fsShell.dispose();
+ super.dispose();
+ }
+
+ public org.eclipse.swt.browser.Browser getBrowser() {
+ return browser;
+ }
+
+}