]> git.argeo.org Git - gpl/argeo-slc.git/blob - eclipse/plugins/org.argeo.slc.client.rcp/src/org/argeo/slc/client/rcp/ApplicationWorkbenchWindowAdvisor.java
Improve RCP
[gpl/argeo-slc.git] / eclipse / plugins / org.argeo.slc.client.rcp / src / org / argeo / slc / client / rcp / ApplicationWorkbenchWindowAdvisor.java
1 package org.argeo.slc.client.rcp;
2
3 import org.eclipse.swt.SWT;
4 import org.eclipse.swt.graphics.Image;
5 import org.eclipse.swt.graphics.Point;
6 import org.eclipse.swt.widgets.Event;
7 import org.eclipse.swt.widgets.Listener;
8 import org.eclipse.swt.widgets.Menu;
9 import org.eclipse.swt.widgets.MenuItem;
10 import org.eclipse.swt.widgets.Shell;
11 import org.eclipse.swt.widgets.Tray;
12 import org.eclipse.swt.widgets.TrayItem;
13 import org.eclipse.ui.IWorkbenchWindow;
14 import org.eclipse.ui.application.ActionBarAdvisor;
15 import org.eclipse.ui.application.IActionBarConfigurer;
16 import org.eclipse.ui.application.IWorkbenchWindowConfigurer;
17 import org.eclipse.ui.application.WorkbenchWindowAdvisor;
18
19 public class ApplicationWorkbenchWindowAdvisor extends WorkbenchWindowAdvisor {
20
21 private TrayItem trayItem;
22
23 public ApplicationWorkbenchWindowAdvisor(
24 IWorkbenchWindowConfigurer configurer) {
25 super(configurer);
26 }
27
28 public ActionBarAdvisor createActionBarAdvisor(
29 IActionBarConfigurer configurer) {
30 return new ApplicationActionBarAdvisor(configurer);
31 }
32
33 public void preWindowOpen() {
34 IWorkbenchWindowConfigurer configurer = getWindowConfigurer();
35 configurer.setInitialSize(new Point(800, 600));
36 configurer.setShowCoolBar(true);
37 configurer.setShowStatusLine(false);
38 }
39
40 public void postWindowOpen() {
41 initTray();
42 }
43
44 @Override
45 public boolean preWindowShellClose() {
46 // hide but do not dispose if tray is supported
47 if (trayItem != null) {
48 getWindowConfigurer().getWindow().getShell().setVisible(false);
49 return false;
50 } else
51 return true;
52 }
53
54 /** Init tray support */
55 protected void initTray() {
56 IWorkbenchWindow window = getWindowConfigurer().getWindow();
57 final Tray tray = window.getShell().getDisplay().getSystemTray();
58 trayItem = new TrayItem(tray, SWT.NONE);
59 if (trayItem == null)
60 return;
61
62 // image
63 Image trayImage = ClientRcpPlugin.getDefault().getImageRegistry().get(
64 "argeoTrayIcon");
65 trayItem.setImage(trayImage);
66 trayItem.setToolTipText("Argeo SLC");
67
68 // add pop-menu
69 // TODO: contribute more commands
70 trayItem.addListener(SWT.MenuDetect, new Listener() {
71 public void handleEvent(Event event) {
72 IWorkbenchWindow window = getWindowConfigurer().getWindow();
73 Menu menu = new Menu(window.getShell(), SWT.POP_UP);
74 MenuItem exit = new MenuItem(menu, SWT.NONE);
75 exit.setText("Exit");
76 exit.addListener(SWT.Selection, new Listener() {
77 public void handleEvent(Event event) {
78 getWindowConfigurer().getWorkbenchConfigurer()
79 .getWorkbench().close();
80 }
81 });
82 menu.setVisible(true);
83 }
84 });
85
86 // add behavior when clicked upon
87 trayItem.addListener(SWT.Selection, new Listener() {
88 public void handleEvent(Event event) {
89 Shell shell = getWindowConfigurer().getWindow().getShell();
90 if (shell.isVisible()) {
91 if (shell.getMinimized())
92 shell.setMinimized(false);
93 else {
94 shell.setVisible(false);
95 shell.setMinimized(true);
96 }
97 } else {
98 shell.setVisible(true);
99 shell.setActive();
100 shell.setFocus();
101 shell.setMinimized(false);
102 }
103 }
104 });
105 }
106
107 @Override
108 public void dispose() {
109 if (trayItem != null)
110 trayItem.dispose();
111 }
112
113 }