diff --git a/plugins/com.minres.scviewer.e4.application/Application.e4xmi b/plugins/com.minres.scviewer.e4.application/Application.e4xmi index 90b71f5..c289e0d 100644 --- a/plugins/com.minres.scviewer.e4.application/Application.e4xmi +++ b/plugins/com.minres.scviewer.e4.application/Application.e4xmi @@ -1,6 +1,6 @@ - + @@ -134,6 +134,9 @@ + + + diff --git a/plugins/com.minres.scviewer.e4.application/META-INF/MANIFEST.MF b/plugins/com.minres.scviewer.e4.application/META-INF/MANIFEST.MF index aa8d0d8..66f49b5 100644 --- a/plugins/com.minres.scviewer.e4.application/META-INF/MANIFEST.MF +++ b/plugins/com.minres.scviewer.e4.application/META-INF/MANIFEST.MF @@ -38,5 +38,6 @@ Require-Bundle: javax.inject;bundle-version="1.0.0", org.eclipse.equinox.p2.metadata.repository;bundle-version="1.3.400" Bundle-RequiredExecutionEnvironment: JavaSE-11 Import-Package: com.minres.scviewer.database, + javax.annotation;version="1.0.0";resolution:=optional, javax.inject;version="1.0.0" Automatic-Module-Name: com.minres.scviewer.e4.application diff --git a/plugins/com.minres.scviewer.e4.application/icons/accept.png b/plugins/com.minres.scviewer.e4.application/icons/accept.png new file mode 100644 index 0000000..89c8129 Binary files /dev/null and b/plugins/com.minres.scviewer.e4.application/icons/accept.png differ diff --git a/plugins/com.minres.scviewer.e4.application/icons/arrow_redo.png b/plugins/com.minres.scviewer.e4.application/icons/arrow_redo.png new file mode 100644 index 0000000..fdc394c Binary files /dev/null and b/plugins/com.minres.scviewer.e4.application/icons/arrow_redo.png differ diff --git a/plugins/com.minres.scviewer.e4.application/icons/arrow_refresh.png b/plugins/com.minres.scviewer.e4.application/icons/arrow_refresh.png new file mode 100644 index 0000000..0de2656 Binary files /dev/null and b/plugins/com.minres.scviewer.e4.application/icons/arrow_refresh.png differ diff --git a/plugins/com.minres.scviewer.e4.application/icons/arrow_undo.png b/plugins/com.minres.scviewer.e4.application/icons/arrow_undo.png new file mode 100644 index 0000000..6972c5e Binary files /dev/null and b/plugins/com.minres.scviewer.e4.application/icons/arrow_undo.png differ diff --git a/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/Messages.java b/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/Messages.java index 3ca4467..3d88974 100644 --- a/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/Messages.java +++ b/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/Messages.java @@ -83,6 +83,8 @@ public class Messages extends NLS { public static String cursor; public static String cursor_drag; public static String cursor_text; + public static String HelpBrowser_7; + public static String HelpBrowser_8; public static String HelpDialog_0; public static String HelpDialog_1; public static String HelpDialog_2; diff --git a/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/handlers/HelpHandler.java b/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/handlers/HelpHandler.java index 8602148..55e6a9f 100644 --- a/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/handlers/HelpHandler.java +++ b/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/handlers/HelpHandler.java @@ -12,20 +12,21 @@ package com.minres.scviewer.e4.application.handlers; import org.eclipse.e4.core.di.annotations.Execute; import org.eclipse.e4.ui.model.application.MApplication; -import org.eclipse.e4.ui.model.application.ui.basic.MPart; -import org.eclipse.e4.ui.model.application.ui.basic.MWindow; +import org.eclipse.e4.ui.model.application.ui.MUIElement; import org.eclipse.e4.ui.workbench.modeling.EModelService; -import org.eclipse.swt.widgets.Shell; public class HelpHandler { - static final String DIALOG_ID="com.minres.scviewer.e4.application.dialog.onlinehelp"; + static final String DIALOG_ID="com.minres.scviewer.e4.application.dialog.onlinehelp"; //$NON-NLS-1$ + static final String WINDOW_ID="com.minres.scviewer.e4.application.window.help"; //$NON-NLS-1$ @Execute - public void execute(Shell shell, MApplication app, MWindow window, EModelService ms /*@Named("mdialog01.dialog.0") MDialog dialog*/) { - MPart mel = (MPart) ms.find(DIALOG_ID, app); //$NON-NLS-1$ - mel.setToBeRendered(true); - mel.setToBeRendered(false); + public void execute(MApplication app, /*MWindow window,*/ EModelService ms /*@Named("mdialog01.dialog.0") MDialog dialog*/) { +// MPart mel = (MPart) ms.find(DIALOG_ID, app); //$NON-NLS-1$ +// mel.setToBeRendered(true); +// mel.setToBeRendered(false); + MUIElement w = ms.find(WINDOW_ID, app); + if(w!=null) w.setToBeRendered(true); } } diff --git a/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/messages.properties b/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/messages.properties index a8fff7f..9651d86 100644 --- a/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/messages.properties +++ b/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/messages.properties @@ -77,6 +77,8 @@ signal_nan=Signal NaN Value cursor=Cursor cursor_drag=dragged Cursor cursor_text=Cursor Text +HelpBrowser_7=Error initializing help browser +HelpBrowser_8=An error occurred while initializing the help browser: HelpDialog_0=Back HelpDialog_1=Forward HelpDialog_2=Stop diff --git a/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/help/HelpBrowser.java b/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/help/HelpBrowser.java new file mode 100644 index 0000000..1ed125f --- /dev/null +++ b/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/help/HelpBrowser.java @@ -0,0 +1,152 @@ +package com.minres.scviewer.e4.application.parts.help; + +import java.io.File; + +import javax.annotation.PostConstruct; +import javax.inject.Inject; + +import org.eclipse.e4.ui.model.application.ui.basic.MPart; +import org.eclipse.jface.dialogs.Dialog; +import org.eclipse.jface.dialogs.IDialogConstants; +import org.eclipse.jface.dialogs.MessageDialog; +import org.eclipse.jface.resource.ImageDescriptor; +import org.eclipse.jface.resource.ResourceLocator; +import org.eclipse.swt.SWT; +import org.eclipse.swt.SWTError; +import org.eclipse.swt.browser.Browser; +import org.eclipse.swt.browser.LocationListener; +import org.eclipse.swt.browser.ProgressEvent; +import org.eclipse.swt.browser.ProgressListener; +import org.eclipse.swt.graphics.Image; +import org.eclipse.swt.graphics.Point; +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.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 com.minres.scviewer.e4.application.Messages; + +public class HelpBrowser { + + private static void decorateItem(ToolItem item, String label, String imageName) { + String fullpath = File.separator+"icons"+File.separator+imageName; //$NON-NLS-1$ + ImageDescriptor descr = ResourceLocator.imageDescriptorFromBundle("com.minres.scviewer.e4.application", fullpath).orElse(null); //$NON-NLS-1$ + if(descr == null) { + item.setText(label); + } else { + item.setImage(descr.createImage()); + item.setToolTipText(label); + } + item.setData(label); + } + + @Inject + public HelpBrowser() { + + } + + @PostConstruct + protected Control createComposite(Composite container) { + GridLayout gridLayout = new GridLayout(); + gridLayout.numColumns = 3; + container.setLayout(gridLayout); + ToolBar toolbar = new ToolBar(container, SWT.NONE); + ToolItem itemBack = new ToolItem(toolbar, SWT.PUSH); + decorateItem(itemBack, Messages.HelpDialog_0, "arrow_undo.png"); //$NON-NLS-1$ + ToolItem itemForward = new ToolItem(toolbar, SWT.PUSH); + decorateItem(itemForward, Messages.HelpDialog_1, "arrow_redo.png"); //$NON-NLS-1$ + ToolItem itemStop = new ToolItem(toolbar, SWT.PUSH); + decorateItem(itemStop, Messages.HelpDialog_2, "cross.png"); //$NON-NLS-1$ + ToolItem itemRefresh = new ToolItem(toolbar, SWT.PUSH); + decorateItem(itemRefresh, Messages.HelpDialog_3, "arrow_refresh.png"); //$NON-NLS-1$ + ToolItem itemGo = new ToolItem(toolbar, SWT.PUSH); + decorateItem(itemGo, Messages.HelpDialog_4, "accept.png"); //$NON-NLS-1$ + + GridData data = new GridData(); + data.horizontalSpan = 3; + toolbar.setLayoutData(data); + + Label labelAddress = new Label(container, SWT.NONE); + labelAddress.setText(Messages.HelpDialog_5); + + final Text location = new Text(container, SWT.BORDER); + data = new GridData(); + data.horizontalAlignment = GridData.FILL; + data.horizontalSpan = 2; + data.grabExcessHorizontalSpace = true; + location.setLayoutData(data); + + final Browser browser; + try { + browser = new Browser(container, SWT.NONE); + data = new GridData(); + // data.widthHint = 800; + // data.heightHint =600; + data.horizontalAlignment = GridData.FILL; + data.verticalAlignment = GridData.FILL; + data.horizontalSpan = 3; + data.grabExcessHorizontalSpace = true; + data.grabExcessVerticalSpace = true; + browser.setLayoutData(data); + + final Label status = new Label(container, SWT.NONE); + data = new GridData(GridData.FILL_HORIZONTAL); + data.horizontalSpan = 2; + status.setLayoutData(data); + + final ProgressBar progressBar = new ProgressBar(container, SWT.NONE); + data = new GridData(); + data.horizontalAlignment = GridData.END; + progressBar.setLayoutData(data); + + /* event handling */ + Listener listener = event -> { + ToolItem item = (ToolItem) event.widget; + String string = (String) item.getData(); + if (string.equals(Messages.HelpDialog_0)) + browser.back(); + else if (string.equals(Messages.HelpDialog_1)) + browser.forward(); + else if (string.equals(Messages.HelpDialog_2)) + browser.stop(); + else if (string.equals(Messages.HelpDialog_3)) + browser.refresh(); + else if (string.equals(Messages.HelpDialog_4)) + browser.setUrl(location.getText()); + }; + 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(event -> status.setText(event.text)); + browser.addLocationListener(LocationListener.changedAdapter(event -> { if (event.top) location.setText(event.location); })); + itemBack.addListener(SWT.Selection, listener); + itemForward.addListener(SWT.Selection, listener); + itemStop.addListener(SWT.Selection, listener); + itemRefresh.addListener(SWT.Selection, listener); + itemGo.addListener(SWT.Selection, listener); + location.addListener(SWT.DefaultSelection, e -> browser.setUrl(location.getText())); + browser.setUrl(Messages.HelpDialog_6); + } catch (SWTError e) { + MessageDialog.openWarning(container.getDisplay().getActiveShell(), Messages.HelpBrowser_7,Messages.HelpBrowser_8+e.getMessage()); + } + return container; + } + + +} \ No newline at end of file