]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.editors/src/org/simantics/editors/Browser.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.editors / src / org / simantics / editors / Browser.java
diff --git a/bundles/org.simantics.editors/src/org/simantics/editors/Browser.java b/bundles/org.simantics.editors/src/org/simantics/editors/Browser.java
new file mode 100644 (file)
index 0000000..af9e2cf
--- /dev/null
@@ -0,0 +1,287 @@
+/*******************************************************************************\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