1 /*
2 * File: MilliExample.java
3 * Copyright (c) 2004-2009 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.millis.swt;
21
22 import java.beans.PropertyChangeEvent;
23 import java.beans.PropertyChangeListener;
24
25 import org.eclipse.jface.window.ApplicationWindow;
26 import org.eclipse.swt.SWT;
27 import org.eclipse.swt.layout.GridData;
28 import org.eclipse.swt.layout.GridLayout;
29 import org.eclipse.swt.widgets.Composite;
30 import org.eclipse.swt.widgets.Control;
31 import org.eclipse.swt.widgets.Shell;
32
33 import de.jaret.examples.timebars.millis.model.BreakIntervalFilter;
34 import de.jaret.examples.timebars.millis.model.ModelCreator;
35 import de.jaret.examples.timebars.millis.swt.renderer.GlobalBreakRenderer;
36 import de.jaret.examples.timebars.millis.swt.renderer.MilliGrid;
37 import de.jaret.examples.timebars.millis.swt.renderer.MilliScale;
38 import de.jaret.util.date.JaretDate;
39 import de.jaret.util.ui.timebars.TimeBarMarker;
40 import de.jaret.util.ui.timebars.TimeBarMarkerImpl;
41 import de.jaret.util.ui.timebars.TimeBarMarkerListener;
42 import de.jaret.util.ui.timebars.TimeBarViewerDelegate;
43 import de.jaret.util.ui.timebars.mod.DefaultIntervalModificator;
44 import de.jaret.util.ui.timebars.model.DefaultTimeBarModel;
45 import de.jaret.util.ui.timebars.model.DefaultTimeBarNode;
46 import de.jaret.util.ui.timebars.model.TimeBarModel;
47 import de.jaret.util.ui.timebars.swt.TimeBarViewer;
48 import de.jaret.util.ui.timebars.swt.renderer.DefaultTitleRenderer;
49
50 /***
51 * Example showing millisecond accuracy usage.
52 *
53 * @author Peter Kliem
54 * @version $Id: MilliExample.java 1073 2010-11-22 21:25:33Z kliem $
55 */
56 public class MilliExample extends ApplicationWindow {
57 private TimeBarViewer _tbv;
58 private TimeBarViewer _tbv2;
59
60 public MilliExample() {
61 super(null);
62 }
63
64 protected Control createContents(Composite parent) {
65 GridLayout gridLayout = new GridLayout();
66 gridLayout.numColumns = 1;
67 parent.setLayout(gridLayout);
68
69 // create the model
70 ModelCreator creator = new ModelCreator();
71 TimeBarModel model = creator.createModel();
72
73 // create timebarviewer
74 _tbv = new TimeBarViewer(parent, SWT.H_SCROLL | SWT.V_SCROLL);
75 GridData gd = new GridData(GridData.FILL_BOTH);
76 _tbv.setLayoutData(gd);
77
78
79 _tbv.addIntervalModificator(new DefaultIntervalModificator());
80
81 // turn on milli mode
82 _tbv.setMilliAccuracy(true);
83
84 _tbv.setTimeScalePosition(TimeBarViewer.TIMESCALE_POSITION_TOP);
85 _tbv.setModel(model);
86
87 _tbv.setPixelPerSecond(6000);
88 _tbv.setDrawRowGrid(true);
89
90 // use special grid and timescale renderers
91
92 _tbv.setTimeScaleRenderer(new MilliScale());
93 // _tbv.setTimeScaleRenderer(new DefaultTimeScaleRenderer() {
94 //
95 // protected void initIterators() {
96 // final NumberFormat NF = NumberFormat.getNumberInstance();
97 // NF.setMinimumIntegerDigits(5);
98 // _iterators = new ArrayList<DateIterator>();
99 // _formats = new ArrayList<DateIterator.Format>();
100 //
101 // DateIterator iterator = new MillisecondIterator(1);
102 // _iterators.add(iterator);
103 // _formats.add(DateIterator.Format.LONG);
104 // iterator.setFormatter(new IIteratorFormatter() {
105 // public String getLabel(JaretDate date, Format format) {
106 // return NF.format(date.getDate().getTime());
107 // }
108 // });
109 //
110 // iterator = new MillisecondIterator(10);
111 // _iterators.add(iterator);
112 // _formats.add(DateIterator.Format.LONG);
113 // iterator.setFormatter(new IIteratorFormatter() {
114 // public String getLabel(JaretDate date, Format format) {
115 // return NF.format(date.getDate().getTime());
116 // }
117 // });
118 //
119 // iterator = new MillisecondIterator(100);
120 // _iterators.add(iterator);
121 // _formats.add(DateIterator.Format.LONG);
122 // iterator.setFormatter(new IIteratorFormatter() {
123 // public String getLabel(JaretDate date, Format format) {
124 // return NF.format(date.getDate().getTime());
125 // }
126 // });
127 //
128 // iterator = new MillisecondIterator(500);
129 // _iterators.add(iterator);
130 // _formats.add(DateIterator.Format.LONG);
131 // iterator.setFormatter(new IIteratorFormatter() {
132 // public String getLabel(JaretDate date, Format format) {
133 // return NF.format(date.getDate().getTime());
134 // }
135 // });
136 //
137 // iterator = new SecondIterator(1);
138 // _iterators.add(iterator);
139 // _formats.add(DateIterator.Format.LONG);
140 //
141 // iterator = new SecondIterator(5);
142 // _iterators.add(iterator);
143 // _formats.add(DateIterator.Format.LONG);
144 //
145 // iterator = new SecondIterator(30);
146 // _iterators.add(iterator);
147 // _formats.add(DateIterator.Format.LONG);
148 //
149 // iterator = new MinuteIterator(1);
150 // _iterators.add(iterator);
151 // _formats.add(DateIterator.Format.LONG);
152 //
153 // iterator = new MinuteIterator(10);
154 // _iterators.add(iterator);
155 // _formats.add(DateIterator.Format.LONG);
156 // _upperMap.put(iterator, new DayIterator(1));
157 //
158 // iterator = new MinuteIterator(30);
159 // _iterators.add(iterator);
160 // _formats.add(DateIterator.Format.LONG);
161 // _upperMap.put(iterator, new DayIterator(1));
162 //
163 // iterator = new HourIterator(3);
164 // _iterators.add(iterator);
165 // _formats.add(DateIterator.Format.LONG);
166 // _upperMap.put(iterator, new DayIterator(1));
167 //
168 // iterator = new HourIterator(12);
169 // _iterators.add(iterator);
170 // _formats.add(DateIterator.Format.LONG);
171 // _upperMap.put(iterator, new DayIterator(1));
172 //
173 // iterator = new DayIterator();
174 // _iterators.add(iterator);
175 // _formats.add(DateIterator.Format.LONG);
176 //
177 // iterator = new WeekIterator();
178 // _iterators.add(iterator);
179 // _formats.add(DateIterator.Format.LONG);
180 // _upperMap.put(iterator, new MonthIterator());
181 //
182 // iterator = new MonthIterator();
183 // _iterators.add(iterator);
184 // _formats.add(DateIterator.Format.LONG);
185 // _upperMap.put(iterator, new YearIterator());
186 //
187 // iterator = new YearIterator();
188 // _iterators.add(iterator);
189 // _formats.add(DateIterator.Format.LONG);
190 // }
191 //
192 // });
193
194
195 _tbv.setGridRenderer(new MilliGrid());
196
197
198 // DefaultTimeScaleRenderer dtscr = new DefaultTimeScaleRenderer();
199 // _tbv.setTimeScaleRenderer(dtscr);
200 // DefaultGridRenderer dgr = new DefaultGridRenderer();
201 // dgr.setTickProvider(dtscr);
202 // _tbv.setGridRenderer(dgr);
203
204
205 // configure the title renderer with a background image and set the title
206 DefaultTitleRenderer titleRenderer = new DefaultTitleRenderer();
207 titleRenderer.setBackgroundRscName("/de/jaret/examples/timebars/hierarchy/swt/titlebg.png");
208 _tbv.setTitleRenderer(titleRenderer);
209 _tbv.setTitle("Millis");
210
211 // create a control panel for manipulation
212 MilliControlPanel ctrl = new MilliControlPanel(parent, SWT.NULL, _tbv, null);
213 gd = new GridData(GridData.FILL_HORIZONTAL);
214 ctrl.setLayoutData(gd);
215
216 // configure the variable x scale
217 // activate variable x scale
218 _tbv.setVariableXScale(true);
219 DefaultTimeBarNode scaleRow = (DefaultTimeBarNode) _tbv.getPpsRow();
220
221 // create pps intervals
222 creator.createPPSIntervals(_tbv.getPixelPerSecond(), scaleRow);
223
224
225
226 // setup for breaks in the timescale
227 _tbv.setIntervalFilter(new BreakIntervalFilter(_tbv.getPpsRow()));
228 _tbv.setGlobalAssistantRenderer(new GlobalBreakRenderer());
229
230
231
232
233 // create a second timebarviewer controlling the pps intervals
234 // create timebarviewer
235
236 DefaultTimeBarModel model2 = new DefaultTimeBarModel();
237 model2.addRow(scaleRow);
238
239 _tbv2 = new TimeBarViewer(parent, SWT.H_SCROLL | SWT.V_SCROLL);
240 gd = new GridData(GridData.FILL_BOTH);
241 _tbv2.setLayoutData(gd);
242
243 // retrieve delegate for experimental api
244 TimeBarViewerDelegate delegate2 = (TimeBarViewerDelegate) _tbv2.getData("delegate");
245 // turn on milli mode
246 delegate2.setMilliAccuracy(true);
247
248 _tbv2.setTimeScalePosition(TimeBarViewer.TIMESCALE_POSITION_TOP);
249 _tbv2.setModel(model2);
250
251 _tbv2.setPixelPerSecond(1000.0 / 30.0);
252 _tbv2.setDrawRowGrid(true);
253
254 _tbv2.setGridRenderer(null); // no grid
255 _tbv2.setTimeScaleRenderer(new MilliScale(1000, 10000));
256
257 // allow modifications
258 _tbv2.addIntervalModificator(new DefaultIntervalModificator());
259
260 // configure the title renderer with a background image and set the title
261 _tbv2.setTitleRenderer(titleRenderer);
262 _tbv2.setTitle("Scale");
263
264 // Add a marker that shows the start date of the upper viewer and can be dragged top scroll
265 // the upper viewer
266 final TimeBarMarker marker = new TimeBarMarkerImpl(true, _tbv.getStartDate().copy());
267 _tbv2.addMarker(marker);
268 _tbv.addPropertyChangeListener(new PropertyChangeListener() {
269 public void propertyChange(PropertyChangeEvent evt) {
270 if (evt.getPropertyName().equals("StartDate")) {
271 marker.setDate(((JaretDate) evt.getNewValue()).copy());
272 }
273 }
274 });
275
276 marker.addTimeBarMarkerListener(new TimeBarMarkerListener() {
277 public void markerDescriptionChanged(TimeBarMarker marker, String oldValue, String newValue) {
278 }
279
280 public void markerMoved(TimeBarMarker marker, JaretDate oldDate, JaretDate currentDate) {
281 _tbv.setStartDate(currentDate.copy());
282 }
283 });
284
285 return _tbv;
286 }
287
288
289 protected void configureShell(Shell shell) {
290 super.configureShell(shell);
291 shell.setText(getClass().getName());
292 shell.setSize(1200, 800);
293 }
294
295 public static void main(String[] args) {
296 MilliExample test = new MilliExample();
297 test.setBlockOnOpen(true);
298 test.open();
299 }
300
301
302
303
304 }