View Javadoc

1   /*
2    *  File: ControlPanel.java 
3    *  Copyright (c) 2004-2007  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.touren;
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.misc.PropertyObservableBase;
36  import de.jaret.util.ui.timebars.TimeBarMarkerImpl;
37  import de.jaret.util.ui.timebars.TimeBarRowFilter;
38  import de.jaret.util.ui.timebars.TimeBarRowSorter;
39  import de.jaret.util.ui.timebars.model.TimeBarRow;
40  import de.jaret.util.ui.timebars.swing.TimeBarViewer;
41  
42  /***
43   * @author Peter Kliem
44   * @version $Id: ControlPanel.java 234 2007-02-10 00:22:45Z olk $
45   */
46  public class ControlPanel extends JPanel implements ChangeListener, ActionListener {
47      TimeBarViewer _viewer;
48      JSlider _timeScaleSlider;
49      JSlider _rowHeigthSlider;
50      JComboBox _sorterCombo;
51      JComboBox _filterCombo;
52      JComboBox _intervalFilterCombo;
53      TimeBarMarkerImpl _marker;
54      JCheckBox _gapCheck;
55      JButton _freisetzenButton;
56  
57      public ControlPanel(TimeBarViewer viewer, TimeBarMarkerImpl marker) {
58          _viewer = viewer;
59          _marker = marker;
60          setLayout(new FlowLayout());
61          createControls();
62      }
63  
64      /***
65       * 
66       */
67      private void createControls() {
68          _timeScaleSlider = new JSlider(50, 5000);
69          _timeScaleSlider.addChangeListener(this);
70          _timeScaleSlider.setValue((int) (_viewer.getPixelPerSecond() * 60.0 * 60.0 * 24));
71          _timeScaleSlider.setPreferredSize(new Dimension(300, 50));
72          add(_timeScaleSlider);
73          _rowHeigthSlider = new JSlider(10, 300);
74          _rowHeigthSlider.addChangeListener(this);
75          _rowHeigthSlider.setValue(_viewer.getRowHeight());
76          add(_rowHeigthSlider);
77  
78          _sorterCombo = new JComboBox();
79          _sorterCombo.addItem("No sorter");
80          _sorterCombo.addItem(new ElementCountSorter());
81          _sorterCombo.addActionListener(this);
82          add(_sorterCombo);
83  
84          _filterCombo = new JComboBox();
85          _filterCombo.addItem("No Filter");
86          _filterCombo.addItem(new ElementGT20Filter());
87          _filterCombo.addActionListener(this);
88          add(_filterCombo);
89          /*
90           * _intervalFilterCombo = new JComboBox(); _intervalFilterCombo.addItem("No Interval Filter");
91           * _intervalFilterCombo.addItem(new UmlaufFilter()); _intervalFilterCombo.addItem(new FahrtFilter());
92           * _intervalFilterCombo.addActionListener(this); add(_intervalFilterCombo);
93           */
94  
95          /*
96           * _freisetzenButton = new JButton(new FreisetzenAction(_viewer.getDelegate().getSelectionModel()));
97           * _freisetzenButton.setText("Freisetzen"); add(_freisetzenButton); DropTargetListener dtl = new
98           * FreisetzenDropTargetListener(); DropTarget dt = new DropTarget(_freisetzenButton, dtl);
99           * 
100          * _gapCheck = new JCheckBox("GapRenderer"); _gapCheck.setSelected(_viewer.getGapRenderer()!=null);
101          * _gapCheck.addActionListener(this); add(_gapCheck);
102          */
103     }
104 
105     /*
106      * (non-Javadoc)
107      * 
108      * @see javax.swing.event.ChangeListener#stateChanged(javax.swing.event.ChangeEvent)
109      */
110     public void stateChanged(ChangeEvent e) {
111         if (e.getSource() == _timeScaleSlider) {
112             double pixPerSecond = (double) _timeScaleSlider.getValue() / (24.0 * 60 * 60);
113             _viewer.setPixelPerSecond(pixPerSecond);
114         } else if (e.getSource() == _rowHeigthSlider) {
115             _viewer.setRowHeight(_rowHeigthSlider.getValue());
116         }
117     }
118 
119     class ElementCountSorter extends PropertyObservableBase implements TimeBarRowSorter {
120         /*
121          * (non-Javadoc)
122          * 
123          * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object)
124          */
125         public int compare(TimeBarRow o1, TimeBarRow o2) {
126             Tour t1 = (Tour) o1;
127             Tour t2 = (Tour) o2;
128             return t2.getIntervals().size() - t1.getIntervals().size();
129         }
130 
131         public String toString() {
132             return "ElementCountSorter";
133         }
134     }
135 
136     class ElementGT20Filter extends PropertyObservableBase implements TimeBarRowFilter {
137         public boolean isInResult(TimeBarRow row) {
138             Tour t = (Tour) row;
139             return t.getIntervals().size() > 15;
140         }
141 
142         public String toString() {
143             return "#Elements > 15";
144         }
145     }
146 
147     public void actionPerformed(ActionEvent e) {
148         if (e.getSource() == _sorterCombo) {
149             Object sel = _sorterCombo.getSelectedItem();
150             if (sel instanceof TimeBarRowSorter) {
151                 _viewer.setRowSorter((TimeBarRowSorter) sel);
152             } else {
153                 _viewer.setRowSorter(null);
154             }
155         } else if (e.getSource() == _filterCombo) {
156             Object sel = _filterCombo.getSelectedItem();
157             if (sel instanceof TimeBarRowFilter) {
158                 _viewer.setRowFilter((TimeBarRowFilter) sel);
159             } else {
160                 _viewer.setRowFilter(null);
161             }
162         }
163     }
164 
165 }