001: package com.csa.lgantt;
002:
003: import java.awt.event.ActionListener;
004: import java.util.Hashtable;
005: import java.util.ResourceBundle;
006: import java.util.StringTokenizer;
007:
008: import javax.swing.JMenu;
009: import javax.swing.JMenuBar;
010: import javax.swing.JMenuItem;
011: import javax.swing.JPopupMenu;
012: import javax.swing.KeyStroke;
013:
014: /**
015: * Generador de menues.
016: * TODO: Convertirlo en una clase dinamica.... mas adelante.
017: *
018: * @author csilva
019: */
020: public class MenuBuilder {
021: private static ResourceBundle bundle = ResourceBundle
022: .getBundle("com.csa.lgantt.Menues");
023:
024: /**
025: * Crea la barra de menues de acuerdo al contenido de
026: * una propiedad.
027: *
028: * @param listener avisar los mensajes de los menues
029: * @return JMenuBar with the items configured and the listeners asociated with this object
030: */
031: public static JMenuBar buildMenuBar(ActionListener listener,
032: String menuName, Hashtable menues) {
033:
034: JMenuBar menuBar = new JMenuBar();
035: menuBar.setOpaque(true);
036:
037: String menuConfig = bundle.getString(menuName);
038: StringTokenizer st = new StringTokenizer(menuConfig, " ");
039: while (st.hasMoreTokens()) {
040: String menuId = st.nextToken();
041: JMenu menu = new JMenu(menuId);
042:
043: String menuDesc = bundle.getString("desc." + menuId);
044: StringTokenizer dt = new StringTokenizer(menuDesc, "|");
045: menu.setText(dt.nextToken());
046: menu.setMnemonic(dt.nextToken().charAt(0));
047:
048: buildMenues(listener, menuId, menu, menues);
049: menuBar.add(menu);
050: }
051: return menuBar;
052: }
053:
054: /**
055: * Construye los items de un menu pulldown.
056: * El menu se obtiene de:
057: * <pre>
058: * menu.<i>menuId</i>= item1 item2
059: * desc.item1 = <i>Text</i>|<i>mnemonic</i>[|<i>accelerator keystroke</i>]
060: * </pre>
061: * @param listener listener a asociar
062: * @param bundle bundle con la descripcion del menu
063: * @param menuId Id del menu
064: * @param menu Menu desde el cual se colgaran los items
065: */
066: static private void buildMenues(ActionListener listener,
067: String menuId, JMenu menu, Hashtable menues) {
068: String sub = bundle.getString("menu." + menuId);
069: StringTokenizer mt = new StringTokenizer(sub, " ");
070: while (mt.hasMoreTokens()) {
071: String itemId = mt.nextToken();
072: if ("-".equals(itemId)) {
073: menu.addSeparator();
074: continue;
075: }
076: // items
077: String itemDesc = bundle.getString("desc." + itemId);
078: StringTokenizer smt = new StringTokenizer(itemDesc, "|");
079: JMenuItem mi = new JMenuItem(itemId);
080: mi.setActionCommand(itemId);
081: mi.setText(smt.nextToken());
082: mi.setMnemonic(smt.nextToken().charAt(0));
083: if (smt.hasMoreElements())
084: mi.setAccelerator(KeyStroke.getKeyStroke(smt
085: .nextToken()));
086: mi.addActionListener(listener);
087: menu.add(mi);
088: menues.put(itemId, mi);
089: }
090: }
091:
092: /**
093: * Construye los items de un menu popup.
094: * El menu se obtiene desde un archivo de propiedades: jgantt.MainMenu
095: * <pre>
096: * menu.<i>menuId</i>= item1 item2
097: * desc.item1 = <i>Text</i>|<i>mnemonic</i>[|<i>accelerator keystroke</i>]
098: * </pre>
099: * @param listener listener a asociar
100: * @param bundle bundle con la descripcion del menu
101: * @param menuId Id del menu
102: * @param menu Menu desde el cual se colgaran los items
103: */
104: public static JPopupMenu buildPopup(ActionListener listener,
105: String menuId) {
106: JPopupMenu popup = new JPopupMenu("popup");
107: String sub = bundle.getString("menu." + menuId);
108: StringTokenizer mt = new StringTokenizer(sub, " ");
109: while (mt.hasMoreTokens()) {
110: String itemId = mt.nextToken();
111: if ("-".equals(itemId)) {
112: popup.addSeparator();
113: continue;
114: }
115: // items
116: String itemDesc = bundle.getString("desc." + itemId);
117: StringTokenizer smt = new StringTokenizer(itemDesc, "|");
118: JMenuItem mi = new JMenuItem(itemId);
119: mi.setActionCommand(itemId);
120: mi.setText(smt.nextToken());
121: mi.setMnemonic(smt.nextToken().charAt(0));
122: if (smt.hasMoreElements())
123: mi.setAccelerator(KeyStroke.getKeyStroke(smt
124: .nextToken()));
125: mi.addActionListener(listener);
126: popup.add(mi);
127: }
128: return popup;
129: }
130:
131: }
|