package testrcp.app;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.Rectangle;
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.Shell;
import org.eclipse.swt.widgets.Tray;
import org.eclipse.swt.widgets.TrayItem;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.application.ActionBarAdvisor;
import org.eclipse.ui.application.IActionBarConfigurer;
import org.eclipse.ui.application.IWorkbenchWindowConfigurer;
import org.eclipse.ui.application.WorkbenchWindowAdvisor;
public class ApplicationWorkbenchWindowAdvisor extends WorkbenchWindowAdvisor {
private TrayItem trayItem;//系統(tǒng)托盤對象
private Image trayImage;//系統(tǒng)托盤圖標(biāo)對象
/** 程序的菜單條 */
private ApplicationActionBarAdvisor actionBarAdvisor;
public ApplicationWorkbenchWindowAdvisor(IWorkbenchWindowConfigurer configurer) {
super(configurer);
}
/** 創(chuàng)建菜單條對象 */
public ActionBarAdvisor createActionBarAdvisor(IActionBarConfigurer configurer) {
actionBarAdvisor = new ApplicationActionBarAdvisor(configurer);
return actionBarAdvisor;
}
/** 打開窗口前調(diào)用該方法,對窗口初始化設(shè)置 */
public void preWindowOpen() {
IWorkbenchWindowConfigurer configurer = getWindowConfigurer();
configurer.setInitialSize(new Point(600, 400));
configurer.setShowCoolBar(true);//工具欄
configurer.setShowStatusLine(false);//狀態(tài)欄
configurer.setShowPerspectiveBar(true);//透視圖
configurer.setShowProgressIndicator(true);//進度條
final IWorkbenchWindow window = super.getWindowConfigurer().getWindow();
/** 創(chuàng)建系統(tǒng)托盤 */
trayItem = initTrayItem(window);
/** 如果支持系統(tǒng)托盤,則創(chuàng)建托盤的菜單 */
if(trayItem != null) {
createPopupMenu(window);
}
}
/**
* 創(chuàng)建系統(tǒng)托盤菜單
*
* @param window
* 工作臺窗口對象
*/
private void createPopupMenu(final IWorkbenchWindow window) {
trayItem.addListener(SWT.MenuDetect, new Listener() {
@Override
public void handleEvent(Event event) {
MenuManager trayMenu = new MenuManager();
Menu menu = trayMenu.createContextMenu(window.getShell());
/**
* 調(diào)用fillTrayItem方法創(chuàng)建系統(tǒng)托盤對象,可以直接利用菜單欄中的操作 而不需要,重新創(chuàng)建操作
*/
actionBarAdvisor.fillTrayItem(trayMenu);
menu.setVisible(true);
}
});
}
/**
* 初始化系統(tǒng)托盤對象
*
* @param window
* 工作臺窗口對象
* @return 該程序所對應(yīng)的系統(tǒng)托盤對象
*/
private TrayItem initTrayItem(IWorkbenchWindow window) {
final Tray tray = Display.getCurrent().getSystemTray();
if(tray == null)
return null;
TrayItem trayItem = new TrayItem(tray, SWT.NONE);
trayImage = Activator.getImageDescriptor("icons/logo.gif").createImage();
trayItem.setImage(trayImage);
trayItem.setToolTipText("System Tray");
return trayItem;
}
@Override
public void postWindowOpen() {
//窗口居中顯示
Shell shell = getWindowConfigurer().getWindow().getShell();
Rectangle screenSize = Display.getDefault().getClientArea();
Rectangle frameSize = shell.getBounds();
shell.setLocation((screenSize.width - frameSize.width)/2, (screenSize.height - frameSize.height)/2);
}
/** 釋放窗口,釋放系統(tǒng)托盤 */
public void dispose() {
if (trayImage != null) {
trayImage.dispose();
trayItem.dispose();
}
}
}
posted on 2008-12-05 23:42
Ke 閱讀(914)
評論(0) 編輯 收藏 所屬分類:
eclipse RCP