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

Quick Search    Search Deep

Source code: mas_gui/IndicatorListener.java


1   /* Copyright 1998 - 2003: Jim Cochrane - see file forum.txt */
2   
3   package mas_gui;
4   
5   import java.awt.event.*;
6   import java.util.*;
7   import support.*;
8   import graph.DataSet;
9   
10  /** Listener for indicator selection */
11  public class IndicatorListener implements ActionListener {
12    public IndicatorListener(Chart c) {
13      chart = c;
14      data_builder = chart.data_builder;
15      main_pane = chart.main_pane;
16    }
17  
18    public void actionPerformed(java.awt.event.ActionEvent e) {
19      String selection = e.getActionCommand();
20      DataSet dataset, main_dataset;
21      Configuration conf = Configuration.instance();
22      try {
23        String tradable = chart.current_tradable;
24        if (tradable == null || no_change(selection)) {
25          // If no tradable is selected or the selection hasn't changed,
26          // there is nothing to display.
27          return;
28        }
29        if (! (selection.equals(chart.No_upper_indicator) ||
30            selection.equals(chart.No_lower_indicator) ||
31            selection.equals(chart.Volume) ||
32            selection.equals(chart.Open_interest))) {
33          GUI_Utilities.busy_cursor(true, chart);
34          data_builder.send_indicator_data_request(
35            ((Integer) chart.indicators().get(selection)).intValue(),
36            tradable, chart.current_period_type);
37          GUI_Utilities.busy_cursor(false, chart);
38        }
39      }
40      catch (Exception ex) {
41        chart.fatal("Exception occurred: ", ex);
42      }
43      // Set graph data according to whether the selected indicator is
44      // configured to go in the upper (main) or lower (indicator) graph.
45      if (Configuration.instance().upper_indicators().containsKey(selection))
46      {
47        main_dataset = data_builder.last_market_data();
48        if (! chart.current_upper_indicators.isEmpty() &&
49            chart.replace_indicators) {
50          // Remove the old indicator data from the graph (and the
51          // market data).
52          main_pane.clear_main_graph();
53          // Re-attach the market data.
54          chart.link_with_axis(main_dataset, null);
55          main_pane.add_main_data_set(main_dataset);
56          chart.current_upper_indicators.removeAllElements();
57        }
58        chart.current_upper_indicators.addElement(selection);
59        dataset = data_builder.last_indicator_data();
60        dataset.set_dates_needed(false);
61        dataset.set_color(conf.indicator_color(selection, true));
62        chart.link_with_axis(dataset, selection);
63        main_pane.add_main_data_set(dataset);
64      }
65      else if (selection.equals(chart.No_upper_indicator)) {
66        // Remove the old indicator and market data from the graph.
67        main_pane.clear_main_graph();
68        // Re-attach the market data without the indicator data.
69        chart.link_with_axis(data_builder.last_market_data(), null);
70        main_pane.add_main_data_set(data_builder.last_market_data());
71        chart.current_upper_indicators.removeAllElements();
72      }
73      else if (selection.equals(chart.No_lower_indicator)) {
74        main_pane.clear_indicator_graph();
75        chart.current_lower_indicators.removeAllElements();
76        chart.set_window_title();
77      }
78      else {
79        if (selection.equals(chart.Volume)) {
80          dataset = data_builder.last_volume();
81        } else if (selection.equals(chart.Open_interest)) {
82          dataset = data_builder.last_open_interest();
83        } else {
84          dataset = data_builder.last_indicator_data();
85        }
86        if (chart.replace_indicators) {
87          main_pane.clear_indicator_graph();
88          chart.current_lower_indicators.removeAllElements();
89        }
90        dataset.set_color(conf.indicator_color(selection, false));
91        chart.link_with_axis(dataset, selection);
92        chart.current_lower_indicators.addElement(selection);
93        chart.set_window_title();
94        chart.add_indicator_lines(dataset, selection);
95        main_pane.add_indicator_data_set(dataset);
96      }
97      main_pane.repaint_graphs();
98    }
99  
100   // Does `v' contain `s' by value?
101   private boolean vector_has(Vector v, String s) {
102     return Utilities.vector_has(v, s);
103   }
104 
105   // Is a change not needed with selection `s'?
106   private boolean no_change(String s) {
107     boolean result = false;
108 
109     if (! chart.replace_indicators) {
110       if (vector_has(chart.current_upper_indicators, s) ||
111           vector_has(chart.current_lower_indicators, s)) {
112         result = true;
113       }
114     } else {
115       if ((vector_has(chart.current_upper_indicators, s) &&
116           chart.current_upper_indicators.size() == 1) ||
117           (vector_has(chart.current_lower_indicators, s) &&
118           chart.current_lower_indicators.size() == 1)) {
119         result = true;
120       }
121     }
122 
123     return result;
124   }
125 
126   private Chart chart;
127   private DataSetBuilder data_builder;
128   private MA_ScrollPane main_pane;
129 }