View Javadoc

1   /*
2    *  File: EventMonitoringControlPanel.java 
3    *  Copyright (c) 2004-2008  Peter Kliem (Peter.Kliem@jaret.de)
4    *  A commercial license is available, see http://www.jaret.de.
5    *
6    *  This program is free software; you can redistribute it and/or modify
7    *  it under the terms of the GNU General Public License as published by
8    *  the Free Software Foundation; either version 2 of the License, or
9    *  (at your option) any later version.
10   *
11   *  This program is distributed in the hope that it will be useful,
12   *  but WITHOUT ANY WARRANTY; without even the implied warranty of
13   *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14   *  GNU General Public License for more details.
15   *
16   *  You should have received a copy of the GNU General Public License
17   *  along with this program; if not, write to the Free Software
18   *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19   */
20  package de.jaret.examples.timebars.eventmonitoring.swing;
21  
22  import java.awt.Dimension;
23  import java.awt.FlowLayout;
24  import java.awt.event.ActionEvent;
25  import java.awt.event.ActionListener;
26  
27  import javax.swing.JButton;
28  import javax.swing.JCheckBox;
29  import javax.swing.JComboBox;
30  import javax.swing.JPanel;
31  import javax.swing.JSlider;
32  import javax.swing.event.ChangeEvent;
33  import javax.swing.event.ChangeListener;
34  
35  import de.jaret.util.ui.timebars.TimeBarMarkerImpl;
36  import de.jaret.util.ui.timebars.swing.TimeBarViewer;
37  import de.jaret.util.ui.timebars.swing.renderer.BoxTimeScaleRenderer;
38  import de.jaret.util.ui.timebars.swing.renderer.DefaultGridRenderer;
39  import de.jaret.util.ui.timebars.swing.renderer.DefaultTimeScaleRenderer;
40  
41  /***
42   * Control panel for the event monitoring example.
43   * 
44   * @author Peter Kliem
45   * @version $Id: EventMonitoringControlPanel.java 974 2009-12-22 22:15:29Z kliem $
46   */
47  public class EventMonitoringControlPanel extends JPanel {
48      TimeBarViewer _viewer;
49      JSlider _timeScaleSlider;
50      JSlider _rowHeigthSlider;
51      JComboBox _sorterCombo;
52      JComboBox _filterCombo;
53      JComboBox _intervalFilterCombo;
54      TimeBarMarkerImpl _marker;
55      JButton _freisetzenButton;
56  
57      public EventMonitoringControlPanel(TimeBarViewer viewer, TimeBarMarkerImpl marker, int initalSecondsDisplayed) {
58          _viewer = viewer;
59          _marker = marker;
60          this.setPreferredSize(new Dimension(1000, 100));
61          setLayout(new FlowLayout());
62          createControls(initalSecondsDisplayed);
63      }
64  
65      /***
66       * 
67       */
68      private void createControls(int initialSeconds) {
69          final double min = 1; // minimum value for seconds displayed
70          final double max = 3 * 365 * 24 * 60 * 60; // max nummber of seconds displayed (3 years in seconds)
71          final double slidermax = 1000; // slider maximum (does not really matter)
72          _timeScaleSlider = new JSlider(0, (int) slidermax);
73  
74          _timeScaleSlider.setPreferredSize(new Dimension(_timeScaleSlider.getPreferredSize().width * 4, _timeScaleSlider
75                  .getPreferredSize().height));
76          add(_timeScaleSlider);
77  
78          final double b = 1.0 / 100.0; // additional factor to reduce the absolut values in the exponent
79          final double faktor = (min - max) / (1 - Math.pow(2, slidermax * b)); // factor for the exp function
80          final double c = (min - faktor);
81  
82          int initialSliderVal = calcInitialSliderVal(c, b, faktor, initialSeconds);
83          _timeScaleSlider.setValue((int) (slidermax- initialSliderVal));
84  
85          final JCheckBox centeredZoomCheck = new JCheckBox("Zoom around center (when no marker is not visible");
86          add(centeredZoomCheck);
87  
88          _timeScaleSlider.addChangeListener(new ChangeListener() {
89              public void stateChanged(ChangeEvent e) {
90                  final double x = slidermax - (double) _timeScaleSlider.getValue(); // reverse x
91                  double seconds = c + faktor * Math.pow(2, x * b); // calculate the seconds to display
92                  if (_viewer.isDisplayed(_marker.getDate())) {
93                      _viewer.setSecondsDisplayed((int) seconds, _marker.getDate());
94                  } else {
95                      _viewer.setSecondsDisplayed((int) seconds, centeredZoomCheck.isSelected());
96                  }
97              }
98          });
99  
100         _rowHeigthSlider = new JSlider(10, 300);
101         _rowHeigthSlider.setValue(_viewer.getRowHeight());
102         _rowHeigthSlider.addChangeListener(new ChangeListener() {
103             public void stateChanged(ChangeEvent e) {
104                 _viewer.setRowHeight(_rowHeigthSlider.getValue());
105             }
106         });
107         add(_rowHeigthSlider);
108 
109         final JCheckBox optScrollingCheck = new JCheckBox("Optimize scrolling");
110         optScrollingCheck.setSelected(_viewer.getOptimizeScrolling());
111         optScrollingCheck.addActionListener(new ActionListener() {
112             public void actionPerformed(ActionEvent e) {
113                 _viewer.setOptimizeScrolling(optScrollingCheck.isSelected());
114             }
115         });
116         add(optScrollingCheck);
117 
118         final JCheckBox markerInDiagramAreaCheck = new JCheckBox("Allow Marker drag in DiagramArea");
119         markerInDiagramAreaCheck.setSelected(_viewer.getMarkerDraggingInDiagramArea());
120         markerInDiagramAreaCheck.addActionListener(new ActionListener() {
121             public void actionPerformed(ActionEvent e) {
122                 _viewer.setMarkerDraggingInDiagramArea(markerInDiagramAreaCheck.isSelected());
123             }
124         });
125         add(markerInDiagramAreaCheck);
126 
127         final JCheckBox boxTSRCheck = new JCheckBox("BoxTimeScaleRenderer");
128         boxTSRCheck.setSelected(_viewer.getTimeScaleRenderer() instanceof BoxTimeScaleRenderer);
129         boxTSRCheck.addActionListener(new ActionListener() {
130             public void actionPerformed(ActionEvent e) {
131                 if (boxTSRCheck.isSelected()) {
132                     BoxTimeScaleRenderer btscr = new BoxTimeScaleRenderer();
133                     _viewer.setTimeScaleRenderer(btscr);
134                     if (_viewer.getGridRenderer() instanceof DefaultGridRenderer) {
135                         ((DefaultGridRenderer) _viewer.getGridRenderer()).setTickProvider(btscr);
136                     }
137                 } else {
138                     DefaultTimeScaleRenderer dtscr = new DefaultTimeScaleRenderer();
139                     _viewer.setTimeScaleRenderer(dtscr);
140                 }
141             }
142         });
143         add(boxTSRCheck);
144 
145         final JCheckBox regionCheck = new JCheckBox("Enable region select");
146         regionCheck.setSelected(_viewer.getRegionRectEnable());
147         regionCheck.addActionListener(new ActionListener() {
148             public void actionPerformed(ActionEvent e) {
149                 _viewer.setRegionRectEnable(regionCheck.isSelected());
150             }
151         });
152         add(regionCheck);
153 
154         final JCheckBox uniformHeightCheck = new JCheckBox("Use uniform height");
155         uniformHeightCheck.setSelected(_viewer.getUseUniformHeight());
156         uniformHeightCheck.addActionListener(new ActionListener() {
157             public void actionPerformed(ActionEvent e) {
158                 _viewer.setUseUniformHeight(uniformHeightCheck.isSelected());
159             }
160         });
161         add(uniformHeightCheck);
162     }
163 
164     private int calcInitialSliderVal(double c, double b, double faktor, int seconds) {
165 
166         double x = 1 / b * log2((seconds - c) / faktor);
167 
168         return (int) x;
169     }
170 
171     private double log2(double a) {
172         return Math.log(a) / Math.log(2);
173     }
174 
175 }