]> 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
Improve RPM packaging
[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
23 private TrayItem trayItem;
24
25 public SlcSecureWorkbenchWindowAdvisor(
26 IWorkbenchWindowConfigurer configurer, String username) {
27 super(configurer, username);
28 }
29
30 public void postWindowOpen() {
31 initTray();
32 }
33
34 @Override
35 public void preWindowOpen() {
36 getWindowConfigurer().addEditorAreaTransfer(
37 EditorInputTransfer.getInstance());
38 getWindowConfigurer().configureEditorAreaDropListener(
39 new DropTargetAdapter() {
40
41 @Override
42 public void dragEnter(DropTargetEvent event) {
43 System.out.println("DROP enter!!! " + event);
44 }
45
46 @Override
47 public void dragLeave(DropTargetEvent event) {
48 System.out.println("DROP leave!!! " + event);
49 }
50
51 public void drop(DropTargetEvent event) {
52 System.out.println("DROP drop!!! " + event);
53
54 }
55
56 @Override
57 public void dropAccept(DropTargetEvent event) {
58 System.out.println("DROP accept!!! " + event);
59 super.dropAccept(event);
60 }
61
62 });
63 super.preWindowOpen();
64 }
65
66 @Override
67 public boolean preWindowShellClose() {
68 // hide but do not dispose if tray is supported
69 if (trayItem != null) {
70 getWindowConfigurer().getWindow().getShell().setVisible(false);
71 return false;
72 } else
73 return true;
74 }
75
76 /** Init tray support */
77 protected void initTray() {
78 IWorkbenchWindow window = getWindowConfigurer().getWindow();
79 final Tray tray = window.getShell().getDisplay().getSystemTray();
80 trayItem = new TrayItem(tray, SWT.NONE);
81 if (trayItem == null)
82 return;
83
84 // image
85 Image trayImage = ClientRcpPlugin.getDefault().getImageRegistry()
86 .get("argeoTrayIcon");
87 trayItem.setImage(trayImage);
88 trayItem.setToolTipText("Argeo SLC");
89
90 // add pop-menu
91 // TODO: contribute more commands
92 trayItem.addListener(SWT.MenuDetect, new Listener() {
93 public void handleEvent(Event event) {
94 IWorkbenchWindow window = getWindowConfigurer().getWindow();
95 Menu menu = new Menu(window.getShell(), SWT.POP_UP);
96 MenuItem exit = new MenuItem(menu, SWT.NONE);
97 exit.setText("Exit");
98 exit.addListener(SWT.Selection, new Listener() {
99 public void handleEvent(Event event) {
100 getWindowConfigurer().getWorkbenchConfigurer()
101 .getWorkbench().close();
102 }
103 });
104 menu.setVisible(true);
105 }
106 });
107
108 // add behavior when clicked upon
109 trayItem.addListener(SWT.Selection, new Listener() {
110 public void handleEvent(Event event) {
111 Shell shell = getWindowConfigurer().getWindow().getShell();
112 if (shell.isVisible()) {
113 if (shell.getMinimized())
114 shell.setMinimized(false);
115 else {
116 shell.setVisible(false);
117 shell.setMinimized(true);
118 }
119 } else {
120 shell.setVisible(true);
121 shell.setActive();
122 shell.setFocus();
123 shell.setMinimized(false);
124 }
125 }
126 });
127 }
128
129 @Override
130 public void dispose() {
131 if (trayItem != null)
132 trayItem.dispose();
133 }
134
135 }