View Javadoc

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 }