X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=eclipse%2Fplugins%2Forg.argeo.slc.client.rcp%2Fsrc%2Forg%2Fargeo%2Fslc%2Fclient%2Frcp%2FApplicationWorkbenchWindowAdvisor.java;h=17250fa5bb1f53fca346988dc96afe210cc66822;hb=c208feddd6ceb7c4a6861e9a49228edc25a13181;hp=e660ccf6418283621b1fe09ca1939d91d0752c14;hpb=ec2e0c1d626acffcca47349e1d1c7ab3d02726a1;p=gpl%2Fargeo-slc.git diff --git a/eclipse/plugins/org.argeo.slc.client.rcp/src/org/argeo/slc/client/rcp/ApplicationWorkbenchWindowAdvisor.java b/eclipse/plugins/org.argeo.slc.client.rcp/src/org/argeo/slc/client/rcp/ApplicationWorkbenchWindowAdvisor.java index e660ccf64..17250fa5b 100644 --- a/eclipse/plugins/org.argeo.slc.client.rcp/src/org/argeo/slc/client/rcp/ApplicationWorkbenchWindowAdvisor.java +++ b/eclipse/plugins/org.argeo.slc.client.rcp/src/org/argeo/slc/client/rcp/ApplicationWorkbenchWindowAdvisor.java @@ -1,6 +1,16 @@ package org.argeo.slc.client.rcp; +import org.eclipse.swt.SWT; +import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.Point; +import org.eclipse.swt.widgets.Event; +import org.eclipse.swt.widgets.Listener; +import org.eclipse.swt.widgets.Menu; +import org.eclipse.swt.widgets.MenuItem; +import org.eclipse.swt.widgets.Shell; +import org.eclipse.swt.widgets.Tray; +import org.eclipse.swt.widgets.TrayItem; +import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.application.ActionBarAdvisor; import org.eclipse.ui.application.IActionBarConfigurer; import org.eclipse.ui.application.IWorkbenchWindowConfigurer; @@ -8,7 +18,10 @@ import org.eclipse.ui.application.WorkbenchWindowAdvisor; public class ApplicationWorkbenchWindowAdvisor extends WorkbenchWindowAdvisor { - public ApplicationWorkbenchWindowAdvisor(IWorkbenchWindowConfigurer configurer) { + private TrayItem trayItem; + + public ApplicationWorkbenchWindowAdvisor( + IWorkbenchWindowConfigurer configurer) { super(configurer); } @@ -19,8 +32,82 @@ public class ApplicationWorkbenchWindowAdvisor extends WorkbenchWindowAdvisor { public void preWindowOpen() { IWorkbenchWindowConfigurer configurer = getWindowConfigurer(); - configurer.setInitialSize(new Point(600, 400)); + configurer.setInitialSize(new Point(800, 600)); configurer.setShowCoolBar(true); configurer.setShowStatusLine(false); } + + public void postWindowOpen() { + initTray(); + } + + @Override + public boolean preWindowShellClose() { + // hide but do not dispose if tray is supported + if (trayItem != null) { + getWindowConfigurer().getWindow().getShell().setVisible(false); + return false; + } else + return true; + } + + /** Init tray support */ + protected void initTray() { + IWorkbenchWindow window = getWindowConfigurer().getWindow(); + final Tray tray = window.getShell().getDisplay().getSystemTray(); + trayItem = new TrayItem(tray, SWT.NONE); + if (trayItem == null) + return; + + // image + Image trayImage = ClientRcpPlugin.getDefault().getImageRegistry().get( + "argeoTrayIcon"); + trayItem.setImage(trayImage); + trayItem.setToolTipText("Argeo SLC"); + + // add pop-menu + // TODO: contribute more commands + trayItem.addListener(SWT.MenuDetect, new Listener() { + public void handleEvent(Event event) { + IWorkbenchWindow window = getWindowConfigurer().getWindow(); + Menu menu = new Menu(window.getShell(), SWT.POP_UP); + MenuItem exit = new MenuItem(menu, SWT.NONE); + exit.setText("Exit"); + exit.addListener(SWT.Selection, new Listener() { + public void handleEvent(Event event) { + getWindowConfigurer().getWorkbenchConfigurer() + .getWorkbench().close(); + } + }); + menu.setVisible(true); + } + }); + + // add behavior when clicked upon + trayItem.addListener(SWT.Selection, new Listener() { + public void handleEvent(Event event) { + Shell shell = getWindowConfigurer().getWindow().getShell(); + if (shell.isVisible()) { + if (shell.getMinimized()) + shell.setMinimized(false); + else { + shell.setVisible(false); + shell.setMinimized(true); + } + } else { + shell.setVisible(true); + shell.setActive(); + shell.setFocus(); + shell.setMinimized(false); + } + } + }); + } + + @Override + public void dispose() { + if (trayItem != null) + trayItem.dispose(); + } + }