]> git.argeo.org Git - gpl/argeo-slc.git/blob - eclipse/plugins/org.argeo.slc.client.rcp/src/main/java/org/argeo/slc/client/rcp/SlcSecureWorkbenchWindowAdvisor.java
8f3913f88943b880e3c6011d7e9052c693a904df
[gpl/argeo-slc.git] / eclipse / plugins / org.argeo.slc.client.rcp / src / main / java / org / argeo / slc / client / rcp / SlcSecureWorkbenchWindowAdvisor.java
1 package org.argeo.slc.client.rcp;
2
3 import org.argeo.security.ui.rcp.SecureWorkbenchWindowAdvisor;
4 import org.eclipse.swt.SWT;
5 import org.eclipse.swt.dnd.DropTargetAdapter;
6 import org.eclipse.swt.dnd.DropTargetEvent;
7 import org.eclipse.swt.graphics.Image;
8 import org.eclipse.swt.widgets.Event;
9 import org.eclipse.swt.widgets.Listener;
10 import org.eclipse.swt.widgets.Menu;
11 import org.eclipse.swt.widgets.MenuItem;
12 import org.eclipse.swt.widgets.Shell;
13 import org.eclipse.swt.widgets.Tray;
14 import org.eclipse.swt.widgets.TrayItem;
15 import org.eclipse.ui.IWorkbenchWindow;
16 import org.eclipse.ui.application.IWorkbenchWindowConfigurer;
17 import org.eclipse.ui.part.EditorInputTransfer;
18
19 /** Set here initial default size of the UI */
20 public class SlcSecureWorkbenchWindowAdvisor extends
21 SecureWorkbenchWindowAdvisor {
22 public final static String IN_TRAY_PROPERTY = "org.argeo.slc.ui.inTray";
23
24 private TrayItem trayItem;
25
26 public SlcSecureWorkbenchWindowAdvisor(
27 IWorkbenchWindowConfigurer configurer, String username) {
28 super(configurer, username);
29 }
30
31 public void postWindowOpen() {
32 String inTray = System.getProperty(IN_TRAY_PROPERTY);
33 if (inTray != null && inTray.equals("true")) {
34 initTray();
35 }
36 }
37
38 @Override
39 public void preWindowOpen() {
40 getWindowConfigurer().addEditorAreaTransfer(
41 EditorInputTransfer.getInstance());
42 getWindowConfigurer().configureEditorAreaDropListener(
43 new DropTargetAdapter() {
44
45 @Override
46 public void dragEnter(DropTargetEvent event) {
47 System.out.println("DROP enter!!! " + event);
48 }
49
50 @Override
51 public void dragLeave(DropTargetEvent event) {
52 System.out.println("DROP leave!!! " + event);
53 }
54
55 public void drop(DropTargetEvent event) {
56 System.out.println("DROP drop!!! " + event);
57
58 }
59
60 @Override
61 public void dropAccept(DropTargetEvent event) {
62 System.out.println("DROP accept!!! " + event);
63 super.dropAccept(event);
64 }
65
66 });
67 super.preWindowOpen();
68 }
69
70 @Override
71 public boolean preWindowShellClose() {
72 // hide but do not dispose if tray is supported
73 if (trayItem != null) {
74 getWindowConfigurer().getWindow().getShell().setVisible(false);
75 return false;
76 } else
77 return true;
78 }
79
80 /** Init tray support */
81 protected void initTray() {
82 IWorkbenchWindow window = getWindowConfigurer().getWindow();
83 Shell shell = window.getShell();
84 final Tray tray = shell.getDisplay().getSystemTray();
85 trayItem = new TrayItem(tray, SWT.NONE);
86 if (trayItem == null)
87 return;
88
89 // image
90 Image trayImage = ClientRcpPlugin.getDefault().getImageRegistry()
91 .get("argeoTrayIcon");
92 trayItem.setImage(trayImage);
93 trayItem.setToolTipText("Argeo SLC");
94
95 // add pop-menu
96 // TODO: contribute more commands
97 trayItem.addListener(SWT.MenuDetect, new Listener() {
98 public void handleEvent(Event event) {
99 IWorkbenchWindow window = getWindowConfigurer().getWindow();
100 Menu menu = new Menu(window.getShell(), SWT.POP_UP);
101 MenuItem exit = new MenuItem(menu, SWT.NONE);
102 exit.setText("Exit");
103 exit.addListener(SWT.Selection, new Listener() {
104 public void handleEvent(Event event) {
105 getWindowConfigurer().getWorkbenchConfigurer()
106 .getWorkbench().close();
107 }
108 });
109 menu.setVisible(true);
110 }
111 });
112
113 // add behavior when clicked upon
114 trayItem.addListener(SWT.Selection, new Listener() {
115 public void handleEvent(Event event) {
116 Shell shell = getWindowConfigurer().getWindow().getShell();
117 if (shell.isVisible()) {
118 if (shell.getMinimized())
119 shell.setMinimized(false);
120 else {
121 shell.setVisible(false);
122 shell.setMinimized(true);
123 }
124 } else {
125 shell.setVisible(true);
126 shell.setActive();
127 shell.setFocus();
128 shell.setMinimized(false);
129 }
130 }
131 });
132
133 // start hidden
134 // shell.setVisible(false);
135 }
136
137 @Override
138 public void dispose() {
139 if (trayItem != null)
140 trayItem.dispose();
141 }
142
143 }