1 /*******************************************************************************
\r
2 * Copyright (c) 2007, 2010 Association for Decentralized Information Management
\r
3 * in Industry THTH ry.
\r
4 * All rights reserved. This program and the accompanying materials
\r
5 * are made available under the terms of the Eclipse Public License v1.0
\r
6 * which accompanies this distribution, and is available at
\r
7 * http://www.eclipse.org/legal/epl-v10.html
\r
10 * VTT Technical Research Centre of Finland - initial API and implementation
\r
11 *******************************************************************************/
\r
12 package org.simantics.editors;
\r
14 import org.eclipse.core.runtime.IProgressMonitor;
\r
15 import org.eclipse.jface.resource.ImageDescriptor;
\r
16 import org.eclipse.jface.resource.JFaceResources;
\r
17 import org.eclipse.jface.resource.LocalResourceManager;
\r
18 import org.eclipse.swt.SWT;
\r
19 import org.eclipse.swt.browser.LocationEvent;
\r
20 import org.eclipse.swt.browser.LocationListener;
\r
21 import org.eclipse.swt.browser.ProgressEvent;
\r
22 import org.eclipse.swt.browser.ProgressListener;
\r
23 import org.eclipse.swt.browser.StatusTextEvent;
\r
24 import org.eclipse.swt.browser.StatusTextListener;
\r
25 import org.eclipse.swt.graphics.Image;
\r
26 import org.eclipse.swt.layout.FillLayout;
\r
27 import org.eclipse.swt.layout.GridData;
\r
28 import org.eclipse.swt.layout.GridLayout;
\r
29 import org.eclipse.swt.widgets.Composite;
\r
30 import org.eclipse.swt.widgets.Event;
\r
31 import org.eclipse.swt.widgets.Label;
\r
32 import org.eclipse.swt.widgets.Listener;
\r
33 import org.eclipse.swt.widgets.ProgressBar;
\r
34 import org.eclipse.swt.widgets.Shell;
\r
35 import org.eclipse.swt.widgets.Text;
\r
36 import org.eclipse.swt.widgets.ToolBar;
\r
37 import org.eclipse.swt.widgets.ToolItem;
\r
38 import org.eclipse.ui.IEditorInput;
\r
39 import org.eclipse.ui.IEditorSite;
\r
40 import org.eclipse.ui.PartInitException;
\r
41 import org.eclipse.ui.part.EditorPart;
\r
45 * Visiblity of controls (back, forward, url, ...) can be configured with the BrowserInput
\r
47 * @author Marko Luukkainen <Marko.Luukkainen@vtt.fi>
\r
50 public class Browser extends EditorPart {
\r
52 public static final String ID = "org.simantics.editors.browser";
\r
54 org.eclipse.swt.browser.Browser browser;
\r
56 LocalResourceManager resourceManager;
\r
58 private final ImageDescriptor BACK_IMAGE = Activator.imageDescriptorFromPlugin(Activator.PLUGIN_ID, "icons/browser/arrow_left.png");
\r
59 private final ImageDescriptor FORWARD_IMAGE = Activator.imageDescriptorFromPlugin(Activator.PLUGIN_ID, "icons/browser/arrow_right.png");
\r
60 private final ImageDescriptor STOP_IMAGE = Activator.imageDescriptorFromPlugin(Activator.PLUGIN_ID, "icons/browser/stop.png");
\r
61 private final ImageDescriptor REFRESH_IMAGE = Activator.imageDescriptorFromPlugin(Activator.PLUGIN_ID, "icons/browser/arrow_rotate_clockwise.png");
\r
63 private Shell fsShell;
\r
70 public void doSave(IProgressMonitor monitor) {
\r
75 public void doSaveAs() {
\r
80 public void init(IEditorSite site, IEditorInput input)
\r
81 throws PartInitException {
\r
82 if (!(input instanceof BrowserInput))
\r
83 throw new PartInitException("Input must be instance of BrowserInput");
\r
87 // Set initial part name according to the name given by IEditorInput
\r
88 setPartName(getEditorInput().getName());
\r
92 public boolean isDirty() {
\r
97 public boolean isSaveAsAllowed() {
\r
102 public void createPartControl(Composite parent) {
\r
103 resourceManager = new LocalResourceManager(JFaceResources.getResources(), parent);
\r
104 Image backImage = resourceManager.createImage(BACK_IMAGE);
\r
105 Image forwardImage = resourceManager.createImage(FORWARD_IMAGE);
\r
106 Image stopImage = resourceManager.createImage(STOP_IMAGE);
\r
107 Image refreshImage = resourceManager.createImage(REFRESH_IMAGE);
\r
109 // http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet128.java
\r
110 BrowserInput input = (BrowserInput)getEditorInput();
\r
111 boolean fullscreen = input.isFullscreen();
\r
113 fsShell = new Shell(parent.getDisplay());
\r
115 fsShell.setLayout(new GridLayout(1,false));
\r
116 fsShell.setLayout(new FillLayout());
\r
117 parent = new Composite(fsShell,SWT.NONE);
\r
119 fsShell.setFullScreen(true);
\r
120 parent.setLayout(new FillLayout());
\r
123 String url = input.getUrl().toString();
\r
124 boolean showControls = input.isShowControls();
\r
125 if (showControls) {
\r
126 Composite composite = new Composite(parent, SWT.NONE);
\r
127 GridLayout gridLayout = new GridLayout();
\r
128 gridLayout.numColumns = 3;
\r
129 composite.setLayout(gridLayout);
\r
130 toolbar = new ToolBar(composite, SWT.NONE);
\r
131 ToolItem itemBack = new ToolItem(toolbar, SWT.PUSH);
\r
132 itemBack.setText("Back");
\r
133 itemBack.setImage(backImage);
\r
134 ToolItem itemForward = new ToolItem(toolbar, SWT.PUSH);
\r
135 itemForward.setText("Forward");
\r
136 itemForward.setImage(forwardImage);
\r
137 ToolItem itemStop = new ToolItem(toolbar, SWT.PUSH);
\r
138 itemStop.setText("Stop");
\r
139 itemStop.setImage(stopImage);
\r
140 ToolItem itemRefresh = new ToolItem(toolbar, SWT.PUSH);
\r
141 itemRefresh.setText("Refresh");
\r
142 itemRefresh.setImage(refreshImage);
\r
143 // ToolItem itemGo = new ToolItem(toolbar, SWT.PUSH);
\r
144 // itemGo.setText("Go");
\r
146 GridData data = new GridData();
\r
147 data.grabExcessHorizontalSpace = true;
\r
148 data.grabExcessVerticalSpace = false;
\r
149 data.horizontalAlignment = SWT.FILL;
\r
150 data.verticalAlignment = SWT.CENTER;
\r
151 data.horizontalSpan = 3;
\r
152 toolbar.setLayoutData(data);
\r
154 Label labelAddress = new Label(composite, SWT.NONE);
\r
155 labelAddress.setText("Address");
\r
157 final Text location = new Text(composite, SWT.BORDER);
\r
158 data = new GridData();
\r
159 data.horizontalAlignment = GridData.FILL;
\r
160 data.horizontalSpan = 2;
\r
161 data.grabExcessHorizontalSpace = true;
\r
162 location.setLayoutData(data);
\r
164 browser = new org.eclipse.swt.browser.Browser(composite, input.getBrowserStyle());
\r
166 data = new GridData();
\r
167 data.grabExcessHorizontalSpace = true;
\r
168 data.grabExcessVerticalSpace = true;
\r
169 data.horizontalAlignment = SWT.FILL;
\r
170 data.verticalAlignment = SWT.FILL;
\r
171 data.horizontalSpan = 3;
\r
172 browser.setLayoutData(data);
\r
174 final Label statusl = new Label(composite, SWT.NONE);
\r
175 data = new GridData(GridData.FILL_HORIZONTAL);
\r
176 data.horizontalSpan = 2;
\r
177 statusl.setLayoutData(data);
\r
179 final ProgressBar progressBar = new ProgressBar(composite, SWT.NONE);
\r
180 data = new GridData();
\r
181 data.horizontalAlignment = GridData.END;
\r
182 progressBar.setLayoutData(data);
\r
184 browser.addProgressListener(new ProgressListener() {
\r
186 public void changed(ProgressEvent event) {
\r
187 if (event.total == 0)
\r
189 int ratio = event.current * 100 / event.total;
\r
190 progressBar.setSelection(ratio);
\r
194 public void completed(ProgressEvent event) {
\r
195 progressBar.setSelection(0);
\r
198 browser.addStatusTextListener(new StatusTextListener() {
\r
200 public void changed(StatusTextEvent event) {
\r
201 statusl.setText(event.text);
\r
204 browser.addLocationListener(new LocationListener() {
\r
206 public void changed(LocationEvent event) {
\r
208 location.setText(event.location);
\r
209 scheduleSetPartName();
\r
213 public void changing(LocationEvent event) {
\r
217 Listener listener = new Listener() {
\r
219 public void handleEvent(Event event) {
\r
220 ToolItem item = (ToolItem) event.widget;
\r
221 String string = item.getText();
\r
222 if (string.equals("Back"))
\r
224 else if (string.equals("Forward"))
\r
226 else if (string.equals("Stop"))
\r
228 else if (string.equals("Refresh"))
\r
230 // else if (string.equals("Go"))
\r
231 // browser.setUrl(location.getText());
\r
235 itemBack.addListener(SWT.Selection, listener);
\r
236 itemForward.addListener(SWT.Selection, listener);
\r
237 itemStop.addListener(SWT.Selection, listener);
\r
238 itemRefresh.addListener(SWT.Selection, listener);
\r
239 } else { // !showControls
\r
240 browser = new org.eclipse.swt.browser.Browser(parent, input.getBrowserStyle());
\r
241 browser.addLocationListener(new LocationListener() {
\r
243 public void changed(LocationEvent event) {
\r
244 scheduleSetPartName();
\r
247 public void changing(LocationEvent event) {
\r
252 browser.setUrl(url);
\r
255 fsShell.layout(true, true);
\r
259 protected void scheduleSetPartName() {
\r
260 browser.getDisplay().asyncExec(new Runnable() {
\r
262 public void run() {
\r
263 if (browser.isDisposed())
\r
265 String name = getEditorInput().getName();
\r
272 public void setFocus() {
\r
273 browser.setFocus();
\r
277 public void dispose() {
\r
278 if (fsShell != null)
\r
283 public org.eclipse.swt.browser.Browser getBrowser() {
\r