1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package de.jaret.examples.timebars.pdi.swing;
21
22 import java.awt.FlowLayout;
23 import java.awt.datatransfer.DataFlavor;
24 import java.awt.datatransfer.Transferable;
25 import java.awt.dnd.DnDConstants;
26 import java.awt.dnd.DropTargetAdapter;
27 import java.awt.dnd.DropTargetDragEvent;
28 import java.awt.dnd.DropTargetDropEvent;
29 import java.awt.event.ActionEvent;
30 import java.awt.event.ActionListener;
31 import java.util.Iterator;
32 import java.util.List;
33
34 import javax.swing.AbstractAction;
35 import javax.swing.JButton;
36 import javax.swing.JCheckBox;
37 import javax.swing.JComboBox;
38 import javax.swing.JPanel;
39 import javax.swing.JSlider;
40 import javax.swing.event.ChangeEvent;
41 import javax.swing.event.ChangeListener;
42
43 import de.jaret.examples.timebars.pdi.model.Assignment;
44 import de.jaret.examples.timebars.pdi.model.Duty;
45 import de.jaret.util.date.Interval;
46 import de.jaret.util.misc.PropertyObservableBase;
47 import de.jaret.util.ui.timebars.AbstractTimeBarIntervalFilter;
48 import de.jaret.util.ui.timebars.TimeBarIntervalFilter;
49 import de.jaret.util.ui.timebars.TimeBarMarkerImpl;
50 import de.jaret.util.ui.timebars.TimeBarRowFilter;
51 import de.jaret.util.ui.timebars.TimeBarRowSorter;
52 import de.jaret.util.ui.timebars.model.TimeBarRow;
53 import de.jaret.util.ui.timebars.model.TimeBarSelectionListener;
54 import de.jaret.util.ui.timebars.model.TimeBarSelectionModel;
55 import de.jaret.util.ui.timebars.swing.TimeBarViewer;
56 import de.jaret.util.ui.timebars.swing.dnd.IntervalListTransferable;
57 import de.jaret.util.ui.timebars.swing.dnd.RowIntervalTuple;
58 import de.jaret.util.ui.timebars.swing.renderer.DefaultGapRenderer;
59
60 /***
61 * @author Peter Kliem
62 * @version $Id: ControlPanel2.java 426 2007-05-13 15:41:49Z olk $
63 */
64 public class ControlPanel2 extends JPanel implements ChangeListener, ActionListener {
65 TimeBarViewer _viewer;
66 JSlider _timeScaleSlider;
67 JSlider _rowHeigthSlider;
68 JComboBox _sorterCombo;
69 JComboBox _filterCombo;
70 JComboBox _intervalFilterCombo;
71 TimeBarMarkerImpl _marker;
72 JButton _freisetzenButton;
73
74 public ControlPanel2(TimeBarViewer viewer, TimeBarMarkerImpl marker) {
75 _viewer = viewer;
76 _marker = marker;
77 setLayout(new FlowLayout());
78 createControls();
79 }
80
81 /***
82 *
83 */
84 private void createControls() {
85 _timeScaleSlider = new JSlider(50, 500);
86 _timeScaleSlider.addChangeListener(this);
87 _timeScaleSlider.setValue((int) (_viewer.getPixelPerSecond() * 60.0 * 60.0 * 24));
88 add(_timeScaleSlider);
89 _rowHeigthSlider = new JSlider(10, 300);
90 _rowHeigthSlider.addChangeListener(this);
91 _rowHeigthSlider.setValue(_viewer.getRowHeight());
92 add(_rowHeigthSlider);
93
94 _sorterCombo = new JComboBox();
95 _sorterCombo.addItem("No sorter");
96 _sorterCombo.addItem(new FullerSorter());
97 _sorterCombo.addActionListener(this);
98 add(_sorterCombo);
99
100 _filterCombo = new JComboBox();
101 _filterCombo.addItem("No Filter");
102 _filterCombo.addItem(new EmptyFilter());
103 _filterCombo.addActionListener(this);
104 add(_filterCombo);
105
106 _intervalFilterCombo = new JComboBox();
107 _intervalFilterCombo.addItem("No Interval Filter");
108 _intervalFilterCombo.addItem(new OffenFilter());
109 _intervalFilterCombo.addActionListener(this);
110 add(_intervalFilterCombo);
111
112 final JCheckBox gapCheck = new JCheckBox("GapRenderer");
113 gapCheck.setSelected(_viewer.getGapRenderer() != null);
114 gapCheck.addActionListener(new ActionListener() {
115 public void actionPerformed(ActionEvent e) {
116 if (gapCheck.isSelected()) {
117 _viewer.setGapRenderer(new DefaultGapRenderer());
118 } else {
119 _viewer.setGapRenderer(null);
120 }
121 }
122 });
123 add(gapCheck);
124
125 final JCheckBox optScrollingCheck = new JCheckBox("Optimize scrolling");
126 optScrollingCheck.setSelected(_viewer.getOptimizeScrolling());
127 optScrollingCheck.addActionListener(new ActionListener() {
128 public void actionPerformed(ActionEvent e) {
129 _viewer.setOptimizeScrolling(optScrollingCheck.isSelected());
130 }
131 });
132 add(optScrollingCheck);
133
134 }
135
136 public void stateChanged(ChangeEvent e) {
137 if (e.getSource() == _timeScaleSlider) {
138 double pixPerSecond = (double) _timeScaleSlider.getValue() / (24.0 * 60 * 60);
139 _viewer.setPixelPerSecond(pixPerSecond);
140 } else if (e.getSource() == _rowHeigthSlider) {
141 _viewer.setRowHeight(_rowHeigthSlider.getValue());
142 }
143 }
144
145 class FreisetzenAction extends AbstractAction implements TimeBarSelectionListener {
146 TimeBarSelectionModel _selModel;
147
148 public FreisetzenAction(TimeBarSelectionModel selModel) {
149 _selModel = selModel;
150 _selModel.addTimeBarSelectionListener(this);
151 setName("Freisetzen");
152 }
153
154 public void actionPerformed(ActionEvent e) {
155 List selIntervals = _selModel.getSelectedIntervals();
156 Iterator it = selIntervals.iterator();
157 while (it.hasNext()) {
158 Interval interval = (Interval) it.next();
159 if (interval instanceof Assignment) {
160 Assignment v = (Assignment) interval;
161 v.getPersonenDispo().remVerplanung(v);
162 }
163 }
164 }
165
166 public void selectionChanged(TimeBarSelectionModel selectionModel) {
167 setEnabled(selectionModel.hasIntervalSelection());
168 }
169
170 public void elementAddedToSelection(TimeBarSelectionModel selectionModel, Object element) {
171 setEnabled(selectionModel.hasIntervalSelection());
172 }
173
174 public void elementRemovedFromSelection(TimeBarSelectionModel selectionModel, Object element) {
175 setEnabled(selectionModel.hasIntervalSelection());
176 }
177
178 }
179
180 class FreisetzenDropTargetListener extends DropTargetAdapter {
181
182 public void dragOver(DropTargetDragEvent e) {
183 if (e.isDataFlavorSupported(IntervalListTransferable.intervalListFlavor)) {
184 e.acceptDrag(DnDConstants.ACTION_COPY_OR_MOVE);
185 }
186 }
187
188 public void drop(DropTargetDropEvent e) {
189 System.out.println("Freisetzen Drop!");
190 try {
191 Transferable tr = e.getTransferable();
192 DataFlavor[] flavors = tr.getTransferDataFlavors();
193 for (int i = 0; i < flavors.length; i++) {
194 if (flavors[i].equals(IntervalListTransferable.intervalListFlavor)) {
195
196 e.acceptDrop(e.getDropAction());
197 List l = (List) e.getTransferable()
198 .getTransferData(IntervalListTransferable.intervalListFlavor);
199 List intervals = ((RowIntervalTuple) l.get(0)).getIntervals();
200 Iterator it = intervals.iterator();
201 while (it.hasNext()) {
202 Interval interval = (Interval) it.next();
203 if (interval instanceof Assignment) {
204 Assignment v = (Assignment) interval;
205 v.getPersonenDispo().remVerplanung(v);
206 }
207 }
208 e.dropComplete(true);
209 }
210 }
211 } catch (Throwable t) {
212 t.printStackTrace();
213 }
214 e.rejectDrop();
215 }
216 }
217
218 class FullerSorter extends PropertyObservableBase implements TimeBarRowSorter {
219 public int compare(TimeBarRow o1, TimeBarRow o2) {
220 TimeBarRow r1 = (TimeBarRow) o1;
221 TimeBarRow r2 = (TimeBarRow) o2;
222 return r2.getIntervals().size() - r1.getIntervals().size();
223 }
224
225 public String toString() {
226 return "ElementCountSorter";
227 }
228 }
229
230 class EmptyFilter extends PropertyObservableBase implements TimeBarRowFilter {
231 public boolean isInResult(TimeBarRow row) {
232 return row.getIntervals().size() > 0;
233 }
234
235 public String toString() {
236 return "No Empty rows";
237 }
238 }
239
240 class OffenFilter extends AbstractTimeBarIntervalFilter implements TimeBarIntervalFilter {
241 public boolean isInResult(Interval interval) {
242 return ((Duty) interval).getAssignedTo() == null;
243 }
244
245 public String toString() {
246 return "Nur offene Dienste";
247 }
248 }
249
250 public void actionPerformed(ActionEvent e) {
251 if (e.getSource() == _sorterCombo) {
252 Object sel = _sorterCombo.getSelectedItem();
253 if (sel instanceof TimeBarRowSorter) {
254 _viewer.setRowSorter((TimeBarRowSorter) sel);
255 } else {
256 _viewer.setRowSorter(null);
257 }
258 } else if (e.getSource() == _filterCombo) {
259 Object sel = _filterCombo.getSelectedItem();
260 if (sel instanceof TimeBarRowFilter) {
261 _viewer.setRowFilter((TimeBarRowFilter) sel);
262 } else {
263 _viewer.setRowFilter(null);
264 }
265 } else if (e.getSource() == _intervalFilterCombo) {
266 Object sel = _intervalFilterCombo.getSelectedItem();
267 if (sel instanceof TimeBarIntervalFilter) {
268 _viewer.setIntervalFilter((TimeBarIntervalFilter) sel);
269 } else {
270 _viewer.setIntervalFilter(null);
271 }
272 }
273 }
274
275 }