Source code: mas_gui/MA_MenuBar.java
1 /* Copyright 1998 - 2003: Jim Cochrane - see file forum.txt */
2
3 package mas_gui;
4
5 import java.awt.*;
6 import java.awt.event.*;
7 import java.util.Vector;
8 import support.ErrorBox;
9
10 // The Market Analysis GUI menu bar
11 public class MA_MenuBar extends MenuBar {
12 MA_MenuBar(Chart c, DataSetBuilder builder, Vector period_types) {
13 data_builder = builder;
14 chart = c;
15 menu_bar = this;
16 Menu file_menu = new Menu("File");
17 indicator_menu = new Menu("Indicators");
18 Menu view_menu = new Menu("View");
19 indicator_selection = new IndicatorSelection(chart);
20
21 add(file_menu);
22 add(indicator_menu);
23 add(view_menu);
24
25 // File menu items, with shortcuts
26 MenuItem new_window, close_window, mkt_selection, print_cmd;
27 MenuItem indicator_selection_menu, print_all, quit;
28 file_menu.add(new_window = new MenuItem("New Window",
29 new MenuShortcut(KeyEvent.VK_N)));
30 file_menu.add(close_window = new MenuItem("Close Window",
31 new MenuShortcut(KeyEvent.VK_W)));
32 file_menu.addSeparator();
33 file_menu.add(mkt_selection = new MenuItem("Select Tradable",
34 new MenuShortcut(KeyEvent.VK_S)));
35 file_menu.add(indicator_selection_menu =
36 new MenuItem("Select Indicator", new MenuShortcut(KeyEvent.VK_I)));
37 file_menu.addSeparator();
38 file_menu.add(print_cmd = new MenuItem("Print",
39 new MenuShortcut(KeyEvent.VK_P)));
40 file_menu.add(print_all = new MenuItem("Print all",
41 new MenuShortcut(KeyEvent.VK_A)));
42 file_menu.addSeparator();
43 file_menu.add(
44 quit = new MenuItem("Quit", new MenuShortcut(KeyEvent.VK_Q)));
45
46 // Action listeners for file menu items
47 new_window.addActionListener(new ActionListener() {
48 public void actionPerformed(ActionEvent e) {
49 Chart chart = new Chart(new DataSetBuilder(data_builder), null);
50 }
51 });
52 mkt_selection.addActionListener(chart.market_selections);
53 indicator_selection_menu.addActionListener(indicator_selection);
54 close_window.addActionListener(new ActionListener() {
55 public void actionPerformed(ActionEvent e) { chart.close(); }
56 });
57 print_cmd.addActionListener(new ActionListener() {
58 public void actionPerformed(ActionEvent e) {
59 if (! (chart.current_tradable == null ||
60 chart.current_tradable.length() == 0)) {
61 chart.main_pane.print(false);
62 }
63 else {
64 final ErrorBox errorbox = new ErrorBox("Printing error",
65 "Nothing to print", chart);
66 }
67 }});
68 print_all.addActionListener(new ActionListener() {
69 public void actionPerformed(ActionEvent e) {
70 if (! (chart.current_tradable == null ||
71 chart.current_tradable.length() == 0)) {
72 String original_tradable = chart.current_tradable;
73 chart.print_all_charts();
74 chart.request_data((String) original_tradable);
75 }
76 else {
77 final ErrorBox errorbox = new ErrorBox("Printing error",
78 "Nothing to print", chart);
79 }
80 }});
81 quit.addActionListener(new ActionListener() {
82 public void actionPerformed(ActionEvent e) { chart.quit(0); }
83 });
84
85 // View menu items
86 final MenuItem replace_toggle;
87 final Menu period_menu = new Menu();
88 final MenuItem indicator_colors_item = new MenuItem("Indicator Colors",
89 new MenuShortcut(KeyEvent.VK_C));
90 MenuItem next = new MenuItem("Next",
91 new MenuShortcut(KeyEvent.VK_CLOSE_BRACKET));
92 MenuItem previous = new MenuItem("Previous",
93 new MenuShortcut(KeyEvent.VK_OPEN_BRACKET));
94 view_menu.add(replace_toggle = new MenuItem("",
95 new MenuShortcut(KeyEvent.VK_R)));
96 view_menu.add(indicator_colors_item);
97 set_replace_indicator_label(replace_toggle);
98 view_menu.add(period_menu);
99 view_menu.add(next);
100 view_menu.add(previous);
101 setup_period_menu(period_menu, period_types);
102 indicator_colors = new IndicatorColors(chart);
103 // Connect the indicator colors dialog/list with the corresponding
104 // menu item:
105 indicator_colors_item.addActionListener(indicator_colors);
106 // Set up so that the indicator colors dialog/list will be updated
107 // whenever an indicator is selected from the indicator menu item.
108 indicator_selection.addActionListener(indicator_colors);
109 update_indicator_menu();
110
111 // Action listeners for view menu items
112 replace_toggle.addActionListener(new ActionListener() {
113 public void actionPerformed(ActionEvent e) {
114 chart.toggle_indicator_replacement();
115 set_replace_indicator_label(replace_toggle);
116 }
117 });
118 next.addActionListener(new ActionListener() {
119 public void actionPerformed(ActionEvent e) {
120 menu_bar.next_tradable();
121 }
122 });
123 previous.addActionListener(new ActionListener() {
124 public void actionPerformed(ActionEvent e) {
125 menu_bar.previous_tradable();
126 }
127 });
128 }
129
130 // Update the indicator menu and the indicator selection list with the
131 // current indicator list.
132 void update_indicators() {
133 indicator_selection.update_indicators(false);
134 update_indicator_menu();
135 }
136
137 private void update_indicator_menu() {
138 indicator_menu.removeAll();
139 chart.add_indicators(indicator_menu);
140 // Set up so that the indicator colors dialog/list will be
141 // updated whenever an indicator is selected from `indicator_menu':
142 for (int i = 0; i < indicator_menu.getItemCount(); ++i) {
143 indicator_menu.getItem(i).addActionListener(indicator_colors);
144 }
145 }
146
147 private void set_period_type_label(Menu m) {
148 m.setLabel("Period Type (" +
149 chart.current_period_type + ")");
150 }
151
152 private void set_replace_indicator_label(MenuItem item) {
153 if (chart.replace_indicators) {
154 item.setLabel("Replace Indicators [on]");
155 } else {
156 item.setLabel("Replace Indicators [off]");
157 }
158 }
159
160 private void setup_period_menu(final Menu period_menu, Vector ptypes) {
161 MenuItem daily = null, weekly = null, monthly = null,
162 quarterly = null, yearly = null, one_minute = null,
163 two_minute = null, five_minute = null, ten_minute = null,
164 fifteen_minute = null, thirty_minute = null, hourly = null;
165 Vector items = new Vector();
166 Vector other_items = new Vector();
167 String s;
168
169 set_period_type_label(period_menu);
170 for (int i = 0; i < ptypes.size(); ++i) {
171 s = (String) ptypes.elementAt(i);
172 if (s.toLowerCase().equals(daily_period.toLowerCase())) {
173 daily = new MenuItem(s,
174 new MenuShortcut(KeyEvent.VK_D));
175 items.addElement(daily);
176 }
177 else if (s.toLowerCase().equals(weekly_period.toLowerCase())) {
178 weekly = new MenuItem(s,
179 new MenuShortcut(KeyEvent.VK_E));
180 items.addElement(weekly);
181 }
182 else if (s.toLowerCase().equals(monthly_period.toLowerCase())) {
183 monthly = new MenuItem(s,
184 new MenuShortcut(KeyEvent.VK_M));
185 items.addElement(monthly);
186 }
187 else if (s.toLowerCase().equals(quarterly_period.toLowerCase())) {
188 quarterly = new MenuItem(s,
189 new MenuShortcut(KeyEvent.VK_U));
190 items.addElement(quarterly);
191 }
192 else if (s.toLowerCase().equals(yearly_period.toLowerCase())) {
193 yearly = new MenuItem(s,
194 new MenuShortcut(KeyEvent.VK_Y));
195 items.addElement(yearly);
196 }
197 else if (s.toLowerCase().equals(one_minute_period.toLowerCase())) {
198 one_minute = new MenuItem(s,
199 new MenuShortcut(KeyEvent.VK_F));
200 items.addElement(one_minute);
201 }
202 else if (s.toLowerCase().equals(two_minute_period.toLowerCase())) {
203 two_minute = new MenuItem(s,
204 new MenuShortcut(KeyEvent.VK_G));
205 items.addElement(two_minute);
206 }
207 else if (s.toLowerCase().equals(five_minute_period.toLowerCase())) {
208 five_minute = new MenuItem(s,
209 new MenuShortcut(KeyEvent.VK_H));
210 items.addElement(five_minute);
211 }
212 else if (s.toLowerCase().equals(ten_minute_period.toLowerCase())) {
213 ten_minute = new MenuItem(s,
214 new MenuShortcut(KeyEvent.VK_J));
215 items.addElement(ten_minute);
216 }
217 else if (s.toLowerCase().equals(
218 fifteen_minute_period.toLowerCase())) {
219 fifteen_minute = new MenuItem(s,
220 new MenuShortcut(KeyEvent.VK_K));
221 items.addElement(fifteen_minute);
222 }
223 else if (s.toLowerCase().equals(
224 thirty_minute_period.toLowerCase())) {
225 thirty_minute = new MenuItem(s,
226 new MenuShortcut(KeyEvent.VK_L));
227 items.addElement(thirty_minute);
228 }
229 else if (s.toLowerCase().equals(hourly_period.toLowerCase())) {
230 hourly = new MenuItem(s,
231 new MenuShortcut(KeyEvent.VK_O));
232 items.addElement(hourly);
233 }
234 else {
235 MenuItem other;
236 other = new MenuItem(s);
237 items.addElement(other);
238 other_items.addElement(other);
239 }
240 }
241 MenuItem menuitems[] = { daily, weekly, monthly, quarterly, yearly,
242 one_minute, two_minute, five_minute, ten_minute, fifteen_minute,
243 thirty_minute, hourly };
244 for (int i = 0; i < menuitems.length; ++i) {
245 if (menuitems[i] != null) period_menu.add(menuitems[i]);
246 }
247 for (int i = 0; i < other_items.size(); ++i) {
248 period_menu.add((MenuItem) other_items.elementAt(i));
249 }
250 for (int i = 0; i < items.size(); ++i) {
251 final MenuItem item = (MenuItem) items.elementAt(i);
252 item.addActionListener(new ActionListener() {
253 public void actionPerformed(ActionEvent e) {
254 chart.notify_period_type_changed(item.getLabel());
255 set_period_type_label(period_menu);
256 }
257 });
258 }
259 }
260
261 // Change the current tradable to the next one in the tradable list or,
262 // if it is the last one, to the first item in the tradable list.
263 private void next_tradable() {
264 List mlist = chart.market_selections.selection_list;
265 int i = mlist.getSelectedIndex();
266 if (i < 0) {
267 if (mlist.getItemCount() >= 2) i = 1;
268 else i = 0;
269 }
270 else if (mlist.getItemCount() - 1 <= i) {
271 i = 0;
272 } else {
273 ++i;
274 }
275 mlist.select(i);
276 chart.request_data(mlist.getItem(i));
277 }
278
279 // Change the current tradable to the previous one in the tradable list or,
280 // if it is the first one, to the last item in the tradable list.
281 private void previous_tradable() {
282 List mlist = chart.market_selections.selection_list;
283 int i = mlist.getSelectedIndex();
284 if (i <= 0) {
285 i = mlist.getItemCount() - 1;
286 } else {
287 --i;
288 }
289 mlist.select(i);
290 chart.request_data(mlist.getItem(i));
291 }
292
293 private DataSetBuilder data_builder;
294 private Chart chart;
295 private MA_MenuBar menu_bar;
296 private IndicatorSelection indicator_selection;
297 private Menu indicator_menu;
298 private IndicatorColors indicator_colors;
299 public static final String daily_period = "Daily";
300 public static final String weekly_period = "Weekly";
301 public static final String monthly_period = "Monthly";
302 public static final String quarterly_period = "Quarterly";
303 public static final String yearly_period = "Yearly";
304 public static final String one_minute_period = "1-minute";
305 public static final String two_minute_period = "2-minute";
306 public static final String five_minute_period = "5-minute";
307 public static final String ten_minute_period = "10-minute";
308 public static final String fifteen_minute_period = "15-minute";
309 public static final String thirty_minute_period = "30-minute";
310 public static final String hourly_period = "Hourly";
311 }