📄 pimworkbenchadvisor.java
字号:
package net.sf.pim.plugin.rcp;
import net.sf.pim.URLUtil;
import net.sf.pim.UiUtil;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.events.ShellAdapter;
import org.eclipse.swt.events.ShellEvent;
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.Tray;
import org.eclipse.swt.widgets.TrayItem;
import org.eclipse.ui.IPerspectiveDescriptor;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.application.IWorkbenchWindowConfigurer;
import org.eclipse.ui.application.WorkbenchAdvisor;
import org.eclipse.ui.application.WorkbenchWindowAdvisor;
import org.eclipse.ui.internal.PerspectiveBarContributionItem;
import org.eclipse.ui.internal.PerspectiveBarManager;
import org.eclipse.ui.internal.WorkbenchPlugin;
import org.eclipse.ui.internal.WorkbenchWindow;
public class PIMWorkbenchAdvisor extends WorkbenchAdvisor {
private TrayItemManager trayManager;
private TrayItem item;
public WorkbenchWindowAdvisor createWorkbenchWindowAdvisor(
IWorkbenchWindowConfigurer configurer) {
return new PIMWindowAdvisor(configurer);
}
@Override
public String getInitialWindowPerspectiveId() {
return "net.sf.pim.plugin.UiPerspective";
}
@Override
public void postStartup() {
super.postStartup();
IWorkbenchWindow activeWorkbenchWindow = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
//2007.01.11 设置同时显示多个透视图标
PerspectiveBarManager barManager=((WorkbenchWindow)activeWorkbenchWindow).getPerspectiveBar();
if(barManager != null){
IPerspectiveDescriptor mailPerspective = WorkbenchPlugin.getDefault().getPerspectiveRegistry().findPerspectiveWithId("MyWork_mail.perspective");
PerspectiveBarContributionItem item=new PerspectiveBarContributionItem(mailPerspective,activeWorkbenchWindow.getActivePage());
barManager.addItem(item);
}
final Shell shell = activeWorkbenchWindow.getShell();
shell.addShellListener(new ShellAdapter() {
public void shellIconified(ShellEvent e) {
shell.setVisible(false);
}
});
createSystemTray();
}
@Override
public boolean preShutdown() {
if(item != null)
item.dispose();
return super.preShutdown();
}
private void createSystemTray() {
Tray tray = Display.getDefault().getSystemTray();
item = new TrayItem(tray, SWT.NONE);
item.setText("MyWork");
item.setToolTipText("Mywork");
Image image = ImageDescriptor.createFromURL(URLUtil.getResourceURL("icons/main.gif")).createImage(Display.getDefault());
item.setImage(image);
this.trayManager = new TrayItemManager();
item.addSelectionListener(this.trayManager);
item.addListener(SWT.MenuDetect, this.trayManager);
}
private class TrayItemManager implements SelectionListener, Listener {
private final class WindowStateListener extends SelectionAdapter {
public void widgetSelected(SelectionEvent e) {
minimizeWindow();
}
}
private final class RestoreWindowListener extends SelectionAdapter {
public void widgetSelected(SelectionEvent e) {
restoreWindow();
}
}
private boolean minimized = false;
private Menu menu;
private MenuItem[] menuItems = new MenuItem[0];
private RestoreWindowListener restoreWindowListener;
private WindowStateListener minimizeWindowListener;
public TrayItemManager() {
this.menu = new Menu(PlatformUI.getWorkbench()
.getActiveWorkbenchWindow().getShell(), SWT.POP_UP);
this.restoreWindowListener = new RestoreWindowListener();
this.minimizeWindowListener = new WindowStateListener();
}
protected void closeApplication() {
UiUtil.getInstance().closeApp();
PlatformUI.getWorkbench().close();
}
public void widgetSelected(SelectionEvent e) {
}
public void widgetDefaultSelected(SelectionEvent e) {
if (this.minimized) {
restoreWindow();
} else {
minimizeWindow();
}
}
protected void minimizeWindow() {
PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell()
.setMinimized(true);
this.minimized = true;
}
protected void restoreWindow() {
Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow()
.getShell();
shell.open();
shell.setMinimized(false);
shell.forceActive();
shell.forceFocus();
this.minimized = false;
}
public void showMenu() {
clearItems();
MenuItem mi;
MenuItem closeItem;
mi = new MenuItem(this.menu, SWT.PUSH);
closeItem = new MenuItem(this.menu, SWT.NONE);
closeItem.setText("退出");
closeItem.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
closeApplication();
}
});
this.menuItems = new MenuItem[] { mi, closeItem };
if (this.minimized) {
mi.setText("还原");
mi.addSelectionListener(this.restoreWindowListener);
} else {
mi.setText("最小化");
mi.addSelectionListener(this.minimizeWindowListener);
}
this.menu.setVisible(true);
}
private void clearItems() {
for (int i = 0; i < this.menuItems.length; i++) {
MenuItem item = this.menuItems[i];
item.removeSelectionListener(this.minimizeWindowListener);
item.removeSelectionListener(this.restoreWindowListener);
this.menuItems[i].dispose();
}
}
public void handleEvent(Event event) {
showMenu();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -