Docjar: A Java Source and Docuemnt Enginecom.*    java.*    javax.*    org.*    all    new    plug-in

Quick Search    Search Deep

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 }