⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pimworkbenchadvisor.java

📁 Eclipse RCP下编写的工作管理软件代码
💻 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 + -