package org.eparapher.rcp.tray; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.widgets.Display; 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.ToolTip; import org.eclipse.swt.widgets.TrayItem; import org.eclipse.ui.application.IWorkbenchWindowConfigurer; import org.eparapher.core.EParapherManager; import org.eparapher.rcp.actions.CMSSignDocumentAction; import org.eparapher.rcp.actions.ToPDFAndSignDocumentAction; import org.eparapher.rcp.actions.XMLSignDocumentAction; import org.eparapher.rcp.tools.GUIIcons; public class TrayIconManager { private boolean started; private TrayItem trayItem; private ToolTip tip; private Image trayIconImage; private Image trayIconImageGrey; private IWorkbenchWindowConfigurer windowConfigurer; private Menu menu; private MenuItem signfile; private MenuItem signpdffile; private MenuItem signxmlfile; //private MenuItem encfile; private MenuItem preferences; private MenuItem open; private MenuItem exit; public TrayIconManager(IWorkbenchWindowConfigurer wwconfig) { //get the display and image using standard eclipse mechanisms windowConfigurer = wwconfig; started=false; initSystemTray(); } private void initSystemTray() { trayIconImage = GUIIcons.TRAY_ICON_IMG; trayIconImageGrey = new Image(trayIconImage.getDevice(), trayIconImage, SWT.IMAGE_GRAY); Display display = windowConfigurer.getWindow().getWorkbench().getDisplay(); trayItem = new TrayItem(display.getSystemTray(), SWT.NONE); trayItem.setImage(trayIconImageGrey); tip = new ToolTip(new Shell(display), SWT.BALLOON | SWT.ICON_INFORMATION); tip.setText("eParapher"); tip.setAutoHide(true); tip.setMessage("Loading eParapher ..."); tip.setVisible(false); trayItem.setToolTip(tip); //trayItem.setToolTipText("Loading eParapher ..."); //Action Double Click : Show/Hide Main window trayItem.addSelectionListener(new clickOnSystrayIcon()); //Action right clik : show Menu Shell workbenchWindowShell = new Shell(); //windowConfigurer.getWindow().getShell(); // Create a Menu & items. menu = new Menu(workbenchWindowShell, SWT.POP_UP); menu.setEnabled(true); signfile = new MenuItem(menu, SWT.PUSH); signpdffile = new MenuItem(menu, SWT.PUSH); signxmlfile = new MenuItem(menu, SWT.PUSH); //new MenuItem(menu, SWT.SEPARATOR); //encfile = new MenuItem(menu, SWT.PUSH); //menu.add(new Separator()); new MenuItem(menu, SWT.SEPARATOR); preferences = new MenuItem(menu, SWT.PUSH); new MenuItem(menu, SWT.SEPARATOR); open = new MenuItem(menu, SWT.PUSH); exit = new MenuItem(menu, SWT.PUSH); exit.setText("Exit"); exit.setImage(GUIIcons.TRAY_EXIT_IMG); // Do a workbench close in the event handler for exit menu item. exit.addListener(SWT.Selection, new ExitEParapher()); open.setText("Open"); open.setImage(GUIIcons.TRAY_ICON_IMG); // make the workbench visible in the event handler for exit menu item. open.addListener(SWT.Selection, new OpenEParapherGUI()); signfile.setText("Sign a file ..."); signfile.setImage(GUIIcons.FILE_ICON_CMS); signfile.setEnabled(true); signfile.addListener(SWT.Selection, new Listener() { public void handleEvent(Event event) { CMSSignDocumentAction cmssigner = new CMSSignDocumentAction(); cmssigner.run(); } }); signpdffile.setText("Sign a PDF file ..."); signpdffile.setImage(GUIIcons.FILE_ICON_CMS); signpdffile.setEnabled(true); signpdffile.addListener(SWT.Selection, new Listener() { public void handleEvent(Event event) { ToPDFAndSignDocumentAction pdfsigner = new ToPDFAndSignDocumentAction(); pdfsigner.run(); } }); signxmlfile.setText("Sign a XML file ..."); signxmlfile.setImage(GUIIcons.FILE_ICON_CMS); signxmlfile.setEnabled(true); signxmlfile.addListener(SWT.Selection, new Listener() { public void handleEvent(Event event) { XMLSignDocumentAction xmlsigner = new XMLSignDocumentAction(); xmlsigner.run(); } }); //encfile.setText("Encrypt a file ..."); //encfile.setImage(GUIIcons.FILE_ICON_ENC); //encfile.setEnabled(false); //encfile.addListener(SWT.Selection, new Listener() { // public void handleEvent(Event event) { // eParapherTools.infoMessage("Select a file and encrypt it","This shortcut has not been implemented yet.\r\nSorry :p"); // } //}); preferences.setText("Preferences"); preferences.setImage(GUIIcons.PREF_ICON_IMAGE); preferences.addListener(SWT.Selection, new Listener() { public void handleEvent(Event event) { EParapherManager.getInstance().getUI().showeParapherSettings(); } }); trayItem.addListener(SWT.MenuDetect, new Listener() { public void handleEvent(Event event) { menu.setVisible(true); } }); } public void StartupFinished() { trayItem.setImage(trayIconImage); tip.setText("eParapher"); tip.setAutoHide(true); tip.setMessage("eParapher is ready!"); tip.setVisible(true); menu.setEnabled(true); } public void setTooltipMessage(String msg) { tip.setAutoHide(true); tip.setMessage(msg); tip.setVisible(true); } /** * Disable * @param locked */ public void switchState(boolean locked) { if (locked) { trayItem.setImage(trayIconImageGrey); trayItem.setToolTipText("eParapher is locked"); menu.setVisible(false); hideMainGUI(); } else { trayItem.setImage(trayIconImage); trayItem.setToolTipText("eParapher"); menu.setVisible(true); showMainGUI(); } } public void showMainGUI() { Shell workbenchWindowShell = windowConfigurer.getWindow().getShell(); workbenchWindowShell.setVisible(true); workbenchWindowShell.setActive(); workbenchWindowShell.setFocus(); workbenchWindowShell.setMinimized(false); //trayItemIconImage.dispose(); //trayItem.dispose(); } public void hideMainGUI() { Shell workbenchWindowShell = windowConfigurer.getWindow().getShell(); workbenchWindowShell.setVisible(false); workbenchWindowShell.setMinimized(true); } public class clickOnSystrayIcon extends SelectionAdapter { public void widgetDefaultSelected(SelectionEvent e) { Shell workbenchWindowShell = windowConfigurer.getWindow().getShell(); if (!workbenchWindowShell.getVisible()) showMainGUI(); else hideMainGUI(); } } public class ExitEParapher implements Listener { public void handleEvent(Event event) { trayIconImage.dispose(); trayItem.dispose(); open.dispose(); exit.dispose(); menu.dispose(); windowConfigurer.getWorkbenchConfigurer().getWorkbench().close(); } } public class OpenEParapherGUI implements Listener { public void handleEvent(Event event) { Shell workbenchWindowShell = windowConfigurer.getWindow().getShell(); workbenchWindowShell.setVisible(true); workbenchWindowShell.setActive(); workbenchWindowShell.setFocus(); workbenchWindowShell.setMinimized(false); /*trayItemIconImage.dispose(); trayItem.dispose(); trayItem.setVisible(true); open.dispose(); exit.dispose(); menu.dispose();*/ } } }