Una applicazione RCP può facilmente visualizzare una icona integrata nel vassoio di sistema (tray). A tale icona può poi essere associato un menu' contestuale e delle relative azioni.
Per aggiungere una icona tray ad una applicazione RCP i passi da seguire sono fondamentalmente:
Per aggiungere una icona tray ad una applicazione RCP i passi da seguire sono fondamentalmente:
- ottenere un oggetto Tray dopo aver aperto la finestra principale, quindi dall'interno dell'ApplicationWorkbenchWindowAdvisor;
- si deve creare un TrayItem per ogni icona da visualizzare (tipicamente una sola);
- associare ad ogni item un listener per l'evento MenuDetect (click destro/menu' contestuale) e creare nel modo abituale il menu con le relative azioni e contributi;
- associare ad ogni item un listener per l'evento DefautlSelection per minimizzare/massimizzare la finestra principale (o un'altra parte dell'applicazione) quando l'utente fa click (sinistro) sull'icona nel tray.
- Il codice seguente mostra come configurare il tray in modo semplice, associando al menu' contestuale le azioni About e Exit. Il metodo configureTray dovrebbe essere chiamato nel post-window-open.
private void configureTray(){
// get the workbench window
final IWorkbenchWindow window = this.getWindowConfigurer().getWindow();
// get the tray for the current running system
Tray tray = window.getShell().getDisplay().getSystemTray();
// the tray could be null if the system does not support it
if( tray == null )
return;
// if here I've got a valid tray, create a tray item and configure it with an image
TrayItem trayItem = new TrayItem( tray, SWT.NONE );
// set the icon
ImageRegistry imgRegistry = Activator.getDefault().getImageRegistry();
trayItem.setImage( imgRegistry.get( ... ) );
// set the tooltip
trayItem.setToolTipText("...");
// add a menu listener on the tray element, so that it can
// show the menu
trayItem.addListener( SWT.MenuDetect, new Listener(){
@Override
public void handleEvent(Event event) {
// create a new menu manager
MenuManager manager = new MenuManager();
// create the context menu
Menu trayItemMenu = manager.createContextMenu( window.getShell() );
// add entries to the menu
manager.add( ActionFactory.ABOUT.create(window) );
manager.add( ActionFactory.QUIT.create(window) );
// the menu must be visible
trayItemMenu.setVisible( true );
}
});
// add a listener to the tray icon, so that when the user double clicks
// on the item the window is popped up again and made visible
trayItem.addListener( SWT.DefaultSelection, new Listener(){
@Override
public void handleEvent(Event event) {
Shell windowShell = window.getShell();
if( ! windowShell.isVisible() )
windowShell.setVisible(true);
windowShell.setMinimized(false);
}
});
}
Nessun commento:
Posta un commento