menupool.java

来自「jrc-src0.4.00源代码发布版(Java客户端框架)」· Java 代码 · 共 170 行

JAVA
170
字号
//Source file: d:\\Program Files\\Rational\\RUPBuilder\\cn\\com\\efly\\clientframe\\core\\container\\MenuPool.java

package efly.clientframe.core.container;

import java.util.Vector;

import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.swt.widgets.Shell;

import efly.clientframe.core.MenuInfo;

/**
 * @author efly
 * @version 1.0.0,11/25/02
 */
public class MenuPool {
	private static MenuPool instance;
	private final MenuNode root = new MenuNode(null);
	private Shell shell = MultiData.getMultiData().getFrame();
	private Menu menuBar = new Menu(shell, SWT.BAR);

	/**
	 * @roseuid 3DD9E41A0154
	 */
	protected MenuPool() {
		shell.setMenuBar(menuBar);
	}

	/**
	 * @return MenuPool
	 * @roseuid 3DD98EB202DC
	 */
	public synchronized static MenuPool getMenuPool() {
		if (instance == null)
			instance = new MenuPool();
		return instance;
	}

	/**
	 * 获得菜单
	 * @param menuPath
	 * @return Menu
	 * @roseuid 3DD990B5003E
	 */
	public Menu acquireMenu(String[] menuPath) {
		Menu menu = null;
		MenuItem item = acquireMenuItem(menuPath);
		if (item != null) {
			menu = item.getMenu();
		}
		if (menu != null) {
			return menu;
		}

		int len = menuPath.length, p = 0;
		MenuNode node = root, temp;

		while (p < len) {
			temp = node.getSubNode(menuPath[p]);
			if (temp == null) {
				MenuItem menuItem;
				if (p == 0)
					menuItem = new MenuItem(menuBar, SWT.CASCADE);
				else
					menuItem =
						new MenuItem(
							node.getMenuInfo().getMenuItem().getMenu(),
							SWT.CASCADE);
				menuItem.setText(menuPath[p]);
				Menu submenu = new Menu(shell, SWT.DROP_DOWN);
				menuItem.setMenu(submenu);
				MenuNode add =
					new MenuNode(new MenuInfo(menuItem, menuPath[p]));
				node.addSubNode(add);
				node = add;
				menu = submenu;
			} else
				node = temp;
			p++;
		}
		return menu;
	}

	/*
		public void validate() {
			iterateNode(root);
		}
	
		private void iterateNode(MenuNode node) {
	
			MenuNode[] nodes = node.getSubNodes();
			if (nodes != null) {
				for (int i = 0; i < nodes.length; i++) {
					iterateNode(nodes[i]);
				}
			}
		}*/

	/**
	 * 获得菜单项
	 * @param menuPath
	 * @return MenuItem
	 */
	private MenuItem acquireMenuItem(String[] menuPath) {
		MenuNode node = acquireMenuNode(menuPath);
		if (node != null)
			return node.getMenuInfo().getMenuItem();
		return null;
	}

	private MenuNode acquireMenuNode(String[] menuPath) {
		int p = 0;
		int len = menuPath.length;
		MenuNode node = root;
		MenuNode temp = null;
		while (p < len && ((temp = node.getSubNode(menuPath[p++])) != null)) {
			node = temp;
		}
		return node == null || temp == null ? null : node;
	}

	private class MenuNode {
		private MenuInfo info;
		private Vector subNodes = new Vector(5);
		public MenuNode(MenuInfo menu) {
			info = menu;
		}

		public MenuInfo getMenuInfo() {
			return info;
		}

		public MenuNode[] getSubNodes() {
			int size = subNodes.size();
			if (size == 0)
				return null;
			MenuNode[] temp = new MenuNode[size];
			for (int i = 0; i < size; i++) {
				temp[i] = (MenuNode) subNodes.elementAt(i);
			}
			return temp;
		}

		public MenuNode getSubNode(String itemName) {
			MenuNode[] temp = getSubNodes();
			if (temp == null)
				return null;
			int size = temp.length;
			String name;
			for (int i = 0; i < size; i++) {
				name = temp[i].getMenuInfo().getItemName();
				if (name.equals(itemName))
					return temp[i];
			}
			return null;
		}

		public void setMenuInfo(MenuInfo menu) {
			info = menu;
		}

		public void addSubNode(MenuNode node) {
			subNodes.addElement(node);

		}
	}
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?