From 4aa1a56294c7b08eff1d5bed51f757a3779326c0 Mon Sep 17 00:00:00 2001 From: Mathieu Baudier Date: Mon, 15 Apr 2019 17:44:58 +0200 Subject: [PATCH] Move mini SWT desktop --- .../argeo/cms/desktop/mini/MiniBrowser.java | 109 ----------------- .../org/argeo/swt/desktop/MiniBrowser.java | 115 ++++++++++++++++++ .../org/argeo/swt/desktop}/MiniExplorer.java | 2 +- .../argeo/swt/desktop}/MiniImageViewer.java | 2 +- .../org/argeo/swt/desktop}/MiniTerminal.java | 2 +- .../argeo/swt/desktop}/MiniTextEditor.java | 2 +- 6 files changed, 119 insertions(+), 113 deletions(-) delete mode 100644 rcp/org.argeo.cms.desktop/src/org/argeo/cms/desktop/mini/MiniBrowser.java create mode 100644 rcp/org.argeo.eclipse.ui.rcp/src/org/argeo/swt/desktop/MiniBrowser.java rename rcp/{org.argeo.cms.desktop/src/org/argeo/cms/desktop/mini => org.argeo.eclipse.ui.rcp/src/org/argeo/swt/desktop}/MiniExplorer.java (99%) rename rcp/{org.argeo.cms.desktop/src/org/argeo/cms/desktop/mini => org.argeo.eclipse.ui.rcp/src/org/argeo/swt/desktop}/MiniImageViewer.java (98%) rename rcp/{org.argeo.cms.desktop/src/org/argeo/cms/desktop/mini => org.argeo.eclipse.ui.rcp/src/org/argeo/swt/desktop}/MiniTerminal.java (99%) rename rcp/{org.argeo.cms.desktop/src/org/argeo/cms/desktop/mini => org.argeo.eclipse.ui.rcp/src/org/argeo/swt/desktop}/MiniTextEditor.java (99%) diff --git a/rcp/org.argeo.cms.desktop/src/org/argeo/cms/desktop/mini/MiniBrowser.java b/rcp/org.argeo.cms.desktop/src/org/argeo/cms/desktop/mini/MiniBrowser.java deleted file mode 100644 index 43b3d7818..000000000 --- a/rcp/org.argeo.cms.desktop/src/org/argeo/cms/desktop/mini/MiniBrowser.java +++ /dev/null @@ -1,109 +0,0 @@ -package org.argeo.cms.desktop.mini; - -import java.net.MalformedURLException; -import java.net.URL; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.browser.Browser; -import org.eclipse.swt.browser.LocationEvent; -import org.eclipse.swt.browser.LocationListener; -import org.eclipse.swt.browser.TitleListener; -import org.eclipse.swt.events.SelectionAdapter; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.graphics.Point; -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.Display; -import org.eclipse.swt.widgets.Shell; -import org.eclipse.swt.widgets.Text; - -public class MiniBrowser { - private URL url; - private Text addressT; - private Browser browser; - - public MiniBrowser(Composite parent, int style) { - parent.setLayout(new GridLayout()); - - Composite toolBar = new Composite(parent, SWT.NONE); - toolBar.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); - toolBar.setLayout(new FillLayout()); - addressT = new Text(toolBar, SWT.SINGLE | SWT.BORDER); - // addressT.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); - addressT.addSelectionListener(new SelectionAdapter() { - - @Override - public void widgetDefaultSelected(SelectionEvent e) { - setUrl(addressT.getText().trim()); - } - }); - - browser = new Browser(parent, SWT.WEBKIT); - browser.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); - browser.addLocationListener(new LocationListener() { - - @Override - public void changing(LocationEvent event) { - } - - @Override - public void changed(LocationEvent event) { - try { - MiniBrowser.this.url = new URL(browser.getUrl()); - addressT.setText(url.toString()); - } catch (MalformedURLException e) { - addressT.setText(e.getMessage()); - throw new IllegalArgumentException("Cannot interpet new URL", e); - - } - } - }); - } - - public void setUrl(URL url) { - this.url = url; - if (addressT != null) - addressT.setText(url.toString()); - if (browser != null) - browser.setUrl(url.toString()); - } - - public void setUrl(String url) { - try { - setUrl(new URL(url)); - } catch (MalformedURLException e) { - // try with http - try { - setUrl(new URL("http://"+url)); - return; - } catch (MalformedURLException e1) { - // nevermind... - } - throw new IllegalArgumentException("Cannot interpret URL " + url, e); - } - } - - public void addTitleListener(TitleListener titleListener) { - browser.addTitleListener(titleListener); - } - - public static void main(String[] args) { - Display display = Display.getCurrent() == null ? new Display() : Display.getCurrent(); - Shell shell = new Shell(display, SWT.SHELL_TRIM); - - MiniBrowser miniBrowser = new MiniBrowser(shell, SWT.NONE); - miniBrowser.addTitleListener(e -> shell.setText(e.title)); - String url = args.length > 0 ? args[0] : "http://www.argeo.org"; - miniBrowser.setUrl(url); - - shell.open(); - shell.setSize(new Point(800, 480)); - while (!shell.isDisposed()) { - if (!display.readAndDispatch()) - display.sleep(); - } - } - -} diff --git a/rcp/org.argeo.eclipse.ui.rcp/src/org/argeo/swt/desktop/MiniBrowser.java b/rcp/org.argeo.eclipse.ui.rcp/src/org/argeo/swt/desktop/MiniBrowser.java new file mode 100644 index 000000000..3152db1a9 --- /dev/null +++ b/rcp/org.argeo.eclipse.ui.rcp/src/org/argeo/swt/desktop/MiniBrowser.java @@ -0,0 +1,115 @@ +package org.argeo.swt.desktop; + +import java.util.Observable; +import java.util.function.BiFunction; + +import org.eclipse.swt.SWT; +import org.eclipse.swt.browser.Browser; +import org.eclipse.swt.browser.LocationAdapter; +import org.eclipse.swt.browser.LocationEvent; +import org.eclipse.swt.events.SelectionAdapter; +import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.graphics.Point; +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.Control; +import org.eclipse.swt.widgets.Display; +import org.eclipse.swt.widgets.Shell; +import org.eclipse.swt.widgets.Text; + +/** A minimalistic web browser based on {@link Browser}. */ +public class MiniBrowser implements BiFunction { + @Override + public Control apply(Composite parent, MiniBrowser.Context context) { + parent.setLayout(new GridLayout()); + Control toolBar = createToolBar(parent, context); + toolBar.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); + Control body = createBody(parent, context); + body.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); + return body; + } + + public Control createToolBar(Composite parent, MiniBrowser.Context context) { + Composite toolBar = new Composite(parent, SWT.NONE); + toolBar.setLayout(new FillLayout()); + Text addressT = new Text(toolBar, SWT.SINGLE | SWT.BORDER); + addressT.addSelectionListener(new SelectionAdapter() { + + @Override + public void widgetDefaultSelected(SelectionEvent e) { + String url = addressT.getText().trim(); + context.setUrl(url); + } + }); + context.addObserver((o, v) -> addressT.setText(((Context) o).getUrl().toString())); + return toolBar; + } + + public Control createBody(Composite parent, MiniBrowser.Context context) { + Browser browser = new Browser(parent, SWT.WEBKIT); + browser.addLocationListener(new LocationAdapter() { + @Override + public void changing(LocationEvent event) { + if (!context.getUrl().equals(event.location)) + context.setUrl(event.location); + } + }); + browser.addTitleListener(e -> context.setTitle(e.title)); + context.addObserver((o, v) -> { + String url = ((Context) o).getUrl(); + if (!url.equals(browser.getUrl())) + browser.setUrl(url.toString()); + }); + return browser; + } + + /** The observable context of this web browser. */ + public static class Context extends Observable { + private String url; + private String title = ""; + + public void setUrl(String url) { + this.url = url; + System.out.println(url); + setChanged(); + notifyObservers(url); + } + + public String getUrl() { + return url; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + setChanged(); + notifyObservers(title); + } + + } + + public static void main(String[] args) { + Display display = Display.getCurrent() == null ? new Display() : Display.getCurrent(); + Shell shell = new Shell(display, SWT.SHELL_TRIM); + + MiniBrowser miniBrowser = new MiniBrowser(); + MiniBrowser.Context context = new MiniBrowser.Context(); + miniBrowser.apply(shell, context); + context.addObserver((o, v) -> shell.setText(((Context) o).getTitle())); + String url = args.length > 0 ? args[0] : "http://www.argeo.org"; + context.setUrl(url); + + shell.open(); + shell.setSize(new Point(800, 480)); + while (!shell.isDisposed()) { + if (!display.readAndDispatch()) + display.sleep(); + } + } + +} diff --git a/rcp/org.argeo.cms.desktop/src/org/argeo/cms/desktop/mini/MiniExplorer.java b/rcp/org.argeo.eclipse.ui.rcp/src/org/argeo/swt/desktop/MiniExplorer.java similarity index 99% rename from rcp/org.argeo.cms.desktop/src/org/argeo/cms/desktop/mini/MiniExplorer.java rename to rcp/org.argeo.eclipse.ui.rcp/src/org/argeo/swt/desktop/MiniExplorer.java index d54157487..b88dbff31 100644 --- a/rcp/org.argeo.cms.desktop/src/org/argeo/cms/desktop/mini/MiniExplorer.java +++ b/rcp/org.argeo.eclipse.ui.rcp/src/org/argeo/swt/desktop/MiniExplorer.java @@ -1,4 +1,4 @@ -package org.argeo.cms.desktop.mini; +package org.argeo.swt.desktop; import java.io.IOException; import java.nio.file.DirectoryStream; diff --git a/rcp/org.argeo.cms.desktop/src/org/argeo/cms/desktop/mini/MiniImageViewer.java b/rcp/org.argeo.eclipse.ui.rcp/src/org/argeo/swt/desktop/MiniImageViewer.java similarity index 98% rename from rcp/org.argeo.cms.desktop/src/org/argeo/cms/desktop/mini/MiniImageViewer.java rename to rcp/org.argeo.eclipse.ui.rcp/src/org/argeo/swt/desktop/MiniImageViewer.java index 21adbc33a..d8dd663e7 100644 --- a/rcp/org.argeo.cms.desktop/src/org/argeo/cms/desktop/mini/MiniImageViewer.java +++ b/rcp/org.argeo.eclipse.ui.rcp/src/org/argeo/swt/desktop/MiniImageViewer.java @@ -1,4 +1,4 @@ -package org.argeo.cms.desktop.mini; +package org.argeo.swt.desktop; import java.io.IOException; import java.net.MalformedURLException; diff --git a/rcp/org.argeo.cms.desktop/src/org/argeo/cms/desktop/mini/MiniTerminal.java b/rcp/org.argeo.eclipse.ui.rcp/src/org/argeo/swt/desktop/MiniTerminal.java similarity index 99% rename from rcp/org.argeo.cms.desktop/src/org/argeo/cms/desktop/mini/MiniTerminal.java rename to rcp/org.argeo.eclipse.ui.rcp/src/org/argeo/swt/desktop/MiniTerminal.java index 78a88720b..1280d1d44 100644 --- a/rcp/org.argeo.cms.desktop/src/org/argeo/cms/desktop/mini/MiniTerminal.java +++ b/rcp/org.argeo.eclipse.ui.rcp/src/org/argeo/swt/desktop/MiniTerminal.java @@ -1,4 +1,4 @@ -package org.argeo.cms.desktop.mini; +package org.argeo.swt.desktop; import java.io.BufferedReader; import java.io.IOException; diff --git a/rcp/org.argeo.cms.desktop/src/org/argeo/cms/desktop/mini/MiniTextEditor.java b/rcp/org.argeo.eclipse.ui.rcp/src/org/argeo/swt/desktop/MiniTextEditor.java similarity index 99% rename from rcp/org.argeo.cms.desktop/src/org/argeo/cms/desktop/mini/MiniTextEditor.java rename to rcp/org.argeo.eclipse.ui.rcp/src/org/argeo/swt/desktop/MiniTextEditor.java index cbedb2071..b5582f96c 100644 --- a/rcp/org.argeo.cms.desktop/src/org/argeo/cms/desktop/mini/MiniTextEditor.java +++ b/rcp/org.argeo.eclipse.ui.rcp/src/org/argeo/swt/desktop/MiniTextEditor.java @@ -1,4 +1,4 @@ -package org.argeo.cms.desktop.mini; +package org.argeo.swt.desktop; import java.io.BufferedReader; import java.io.BufferedWriter; -- 2.30.2