KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > jimm > datavision > gui > MenuUtils


1 package jimm.datavision.gui;
2 import jimm.datavision.PaperFormat;
3 import jimm.util.I18N;
4 import jimm.util.StringUtils;
5 import java.awt.Font JavaDoc;
6 import java.awt.event.*;
7 import java.util.List JavaDoc;
8 import java.util.Iterator JavaDoc;
9 import javax.swing.*;
10
11 /**
12  * Menu creation utilities.
13  *
14  * @author Jim Menard, <a HREF="mailto:jimm@io.com">jimm@io.com</a>
15  */

16 public class MenuUtils {
17
18 public static JMenu readMenu(String JavaDoc key) {
19     JMenu menu = new JMenu(I18N.get(I18N.MENU_FILE_PREFIX, key));
20     setKeys(menu, key); // Read .keys property; set mnemonic
21
return menu;
22 }
23
24 public static JMenuItem readItem(ActionListener listener, String JavaDoc key,
25                  Font JavaDoc font)
26 {
27     JMenuItem item = new JMenuItem(I18N.get(I18N.MENU_FILE_PREFIX, key));
28     modifyItem(item, listener, key, font);
29     return item;
30 }
31
32 public static JCheckBoxMenuItem readCheckboxItem(ActionListener listener,
33                          String JavaDoc key, Font JavaDoc font)
34 {
35     JCheckBoxMenuItem item =
36     new JCheckBoxMenuItem(I18N.get(I18N.MENU_FILE_PREFIX, key));
37     modifyItem(item, listener, key, font);
38     return item;
39 }
40
41 protected static void modifyItem(JMenuItem item, ActionListener listener,
42                  String JavaDoc key, Font JavaDoc font)
43 {
44     if (listener != null)
45     item.addActionListener(listener);
46     if (font != null)
47     item.setFont(font);
48
49     String JavaDoc val = I18N.getNullIfMissing(I18N.MENU_FILE_PREFIX, key + ".action");
50     if (val != null && val.length() > 0)
51     item.setActionCommand(val);
52
53     val = I18N.getNullIfMissing(I18N.MENU_FILE_PREFIX, key + ".enabled");
54     if (val != null && val.length() > 0
55     && ("false".equalsIgnoreCase(val)
56         || "no".equalsIgnoreCase(val)))
57     item.setEnabled(false);
58
59     setKeys(item, key); // Read .keys property; set mnemonic and accel
60
}
61
62 /**
63  * Adds a single item to a menu.
64  *
65  * @param listener action listener for item; may be <code>null</code>
66  * @param menu the menu
67  * @param key the menu properties file lookup key
68  */

69 public static JMenuItem addToMenu(ActionListener listener, JMenu menu,
70                   String JavaDoc key)
71 {
72     return addToMenu(listener, menu, key, null);
73 }
74
75 /**
76  * Adds a single item to a menu.
77  *
78  * @param listener action listener for item; may be <code>null</code>
79  * @param menu the menu
80  * @param key the menu properties file lookup key
81  * @param font font; may be <code>null</code>
82  */

83 public static JMenuItem addToMenu(ActionListener listener, JMenu menu,
84                   String JavaDoc key, Font JavaDoc font)
85 {
86     JMenuItem item = readItem(listener, key, font);
87     menu.add(item);
88     return item;
89 }
90
91 /**
92  * Adds a single item to a popup menu.
93  *
94  * @param listener action listener for item; may be <code>null</code>
95  * @param menu the menu
96  * @param key the menu properties file lookup key
97  */

98 public static JMenuItem addToMenu(ActionListener listener, JPopupMenu menu,
99                   String JavaDoc key)
100 {
101     return addToMenu(listener, menu, key, null);
102 }
103
104 /**
105  * Adds a single item to a popup menu.
106  *
107  * @param listener action listener for item; may be <code>null</code>
108  * @param menu the menu
109  * @param key the menu properties file lookup key
110  * @param font font; may be <code>null</code>
111  */

112 public static JMenuItem addToMenu(ActionListener listener, JPopupMenu menu,
113                   String JavaDoc key, Font JavaDoc font)
114 {
115     JMenuItem item = readItem(listener, key, font);
116     menu.add(item);
117     return item;
118 }
119
120 /**
121  * Adds a single checkbox item to a menu.
122  *
123  * @param listener action listener for item; may be <code>null</code>
124  * @param menu the menu
125  * @param key the menu properties file lookup key
126  * @param font font; may be <code>null</code>
127  */

128 public static JCheckBoxMenuItem addCheckboxToMenu(ActionListener listener,
129                           JMenu menu, String JavaDoc key,
130                           Font JavaDoc font)
131 {
132     JCheckBoxMenuItem item = readCheckboxItem(listener, key, font);
133     menu.add(item);
134     return item;
135 }
136
137 /**
138  * Adds a single checkbox item to a popup menu.
139  *
140  * @param listener action listener for item; may be <code>null</code>
141  * @param menu the menu
142  * @param key the menu properties file lookup key
143  * @param font font; may be <code>null</code>
144  */

145 public static JCheckBoxMenuItem addCheckboxToMenu(ActionListener listener,
146                           JPopupMenu menu, String JavaDoc key,
147                           Font JavaDoc font)
148 {
149     JCheckBoxMenuItem item = readCheckboxItem(listener, key, font);
150     menu.add(item);
151     return item;
152 }
153
154 /**
155  * Adds an action to a menu.
156  *
157  * @param menu the menu
158  * @param action the action
159  * @param key the menu properties file lookup key
160  */

161 public static JMenuItem addToMenu(JMenu menu, Action action, String JavaDoc key) {
162     JMenuItem item = menu.add(action);
163     setKeys(item, key); // Read .keys property; set mnemonic and accel
164
return item;
165 }
166
167 protected static void setKeys(JMenuItem item, String JavaDoc key) {
168     String JavaDoc keys =
169     I18N.getNullIfMissing(I18N.MENU_FILE_PREFIX, key + ".keys");
170     if (keys == null)
171     return;
172
173     List JavaDoc split = StringUtils.split(keys, " ");
174
175     if (split.size() >= 1) { // Mnemonic key
176
key = (String JavaDoc)split.get(0);
177     item.setMnemonic((int)key.charAt(0));
178     }
179
180     if (split.size() >= 2) { // Accelerator key
181
key = (String JavaDoc)split.get(1);
182     int stroke = (int)key.charAt(0);
183     int mask = ActionEvent.CTRL_MASK;
184     if ("DEL".equals(key)) {
185         stroke = KeyEvent.VK_DELETE;
186         mask = 0;
187     }
188     item.setAccelerator(KeyStroke.getKeyStroke(stroke, mask));
189     }
190 }
191
192 /**
193  * Returns a new align menu.
194  *
195  * @param listener action listener for item; may be <code>null</code>
196  * @param font font; may be <code>null</code>
197  * @return a new menu
198  */

199 public static JMenu buildAlignMenu(ActionListener listener, Font JavaDoc font)
200 {
201     JMenu menu = readMenu("Align.menu");
202
203     MenuUtils.addToMenu(listener, menu, "Align.menu_tops", font);
204     MenuUtils.addToMenu(listener, menu, "Align.menu_middles", font);
205     MenuUtils.addToMenu(listener, menu, "Align.menu_bottoms", font);
206     MenuUtils.addToMenu(listener, menu, "Align.menu_lefts", font);
207     MenuUtils.addToMenu(listener, menu, "Align.menu_centers", font);
208     MenuUtils.addToMenu(listener, menu, "Align.menu_rights", font);
209     MenuUtils.addToMenu(listener, menu, "Align.menu_snap", font);
210
211     return menu;
212 }
213
214 /**
215  * Returns a new size menu.
216  *
217  * @param listener action listener for item; may be <code>null</code>
218  * @param font font; may be <code>null</code>
219  * @return a new menu
220  */

221 public static JMenu buildSizeMenu(ActionListener listener, Font JavaDoc font)
222 {
223     JMenu menu = readMenu("Size.menu");
224
225     MenuUtils.addToMenu(listener, menu, "Size.menu_same_width", font);
226     MenuUtils.addToMenu(listener, menu, "Size.menu_same_height", font);
227     MenuUtils.addToMenu(listener, menu, "Size.menu_same_size", font);
228
229     return menu;
230 }
231
232 /**
233  * Returns a new paper size menu.
234  *
235  * @param listener action button listener for item; may be <code>null</code>
236  * @param currChoice current paper choice (its orientation and name will be
237  * pre-selected)
238  * @param orientationGroup a radio button group for orientations
239  * @param nameGroup a radio button group for names
240  * @return a new menu
241  */

242 public static JMenu buildPaperSizeMenu(ActionListener listener,
243                        PaperFormat currChoice,
244                        ButtonGroup orientationGroup,
245                        ButtonGroup nameGroup)
246 {
247     JMenu menu = readMenu("MenuUtils.menu_paper_size");
248
249     JRadioButtonMenuItem item = null;
250
251     // Portrait
252
String JavaDoc key = "MenuUtils.menu_paper_size_portrait";
253     String JavaDoc str = I18N.get(I18N.MENU_FILE_PREFIX, key);
254     item = new JRadioButtonMenuItem(str);
255
256     String JavaDoc action =
257     I18N.getNullIfMissing(I18N.MENU_FILE_PREFIX, key + ".action");
258     if (action != null && action.length() > 0)
259     item.setActionCommand(action);
260
261     orientationGroup.add(item);
262     if (listener != null) item.addActionListener(listener);
263     if (currChoice.getOrientation() == PaperFormat.PORTRAIT)
264     item.setSelected(true);
265     menu.add(item);
266
267     // Landscape
268
key = "MenuUtils.menu_paper_size_landscape";
269     str = I18N.get(I18N.MENU_FILE_PREFIX, key);
270     item = new JRadioButtonMenuItem(str);
271
272     action = I18N.getNullIfMissing(I18N.MENU_FILE_PREFIX, key + ".action");
273     if (action != null && action.length() > 0)
274     item.setActionCommand(action);
275
276     orientationGroup.add(item);
277     if (listener != null) item.addActionListener(listener);
278     if (currChoice.getOrientation() == PaperFormat.LANDSCAPE)
279     item.setSelected(true);
280     menu.add(item);
281
282     menu.addSeparator();
283
284     // Paper sizes
285
for (Iterator JavaDoc iter = PaperFormat.names(); iter.hasNext();) {
286     String JavaDoc name = (String JavaDoc)iter.next();
287     item = new JRadioButtonMenuItem(name);
288     nameGroup.add(item);
289     if (listener != null) item.addActionListener(listener);
290
291     if (name.equals(currChoice.getName()))
292         item.setSelected(true);
293
294     menu.add(item);
295     }
296
297     return menu;
298 }
299 }
300
Popular Tags