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.fancy.swt;
21
22 import java.util.ArrayList;
23 import java.util.List;
24
25 import org.eclipse.jface.window.ApplicationWindow;
26 import org.eclipse.swt.SWT;
27 import org.eclipse.swt.events.MouseAdapter;
28 import org.eclipse.swt.events.MouseEvent;
29 import org.eclipse.swt.events.SelectionAdapter;
30 import org.eclipse.swt.events.SelectionEvent;
31 import org.eclipse.swt.layout.GridData;
32 import org.eclipse.swt.layout.GridLayout;
33 import org.eclipse.swt.layout.RowLayout;
34 import org.eclipse.swt.widgets.Button;
35 import org.eclipse.swt.widgets.Composite;
36 import org.eclipse.swt.widgets.Control;
37 import org.eclipse.swt.widgets.Label;
38 import org.eclipse.swt.widgets.Scale;
39 import org.eclipse.swt.widgets.Shell;
40
41 import de.jaret.examples.timebars.fancy.model.FancyInterval;
42 import de.jaret.examples.timebars.fancy.model.ModelCreator;
43 import de.jaret.examples.timebars.fancy.swt.renderer.FancyEventRenderer;
44 import de.jaret.examples.timebars.fancy.swt.renderer.FancyGlobalRenderer;
45 import de.jaret.examples.timebars.fancy.swt.renderer.FancyRenderer;
46 import de.jaret.util.date.Event;
47 import de.jaret.util.date.Interval;
48 import de.jaret.util.date.IntervalImpl;
49 import de.jaret.util.date.JaretDate;
50 import de.jaret.util.ui.timebars.TimeBarViewerDelegate;
51 import de.jaret.util.ui.timebars.mod.DefaultIntervalModificator;
52 import de.jaret.util.ui.timebars.model.DefaultTimeBarRowModel;
53 import de.jaret.util.ui.timebars.model.FocussedIntervalListener;
54 import de.jaret.util.ui.timebars.model.IRowHeightStrategy;
55 import de.jaret.util.ui.timebars.model.ITimeBarViewState;
56 import de.jaret.util.ui.timebars.model.TimeBarModel;
57 import de.jaret.util.ui.timebars.model.TimeBarRow;
58 import de.jaret.util.ui.timebars.model.TimeBarSelectionListener;
59 import de.jaret.util.ui.timebars.model.TimeBarSelectionModel;
60 import de.jaret.util.ui.timebars.swt.TimeBarViewer;
61 import de.jaret.util.ui.timebars.swt.renderer.BoxTimeScaleRenderer;
62 import de.jaret.util.ui.timebars.swt.renderer.DefaultTitleRenderer;
63 import de.jaret.util.ui.timebars.swt.util.TimeScaleDragSupport;
64
65 /***
66 * This example will demonstrate some fancy drawing.
67 *
68 * @author Peter Kliem
69 * @version $Id: FancyExample.java 801 2008-12-27 22:44:54Z kliem $
70 */
71 public class FancyExample extends ApplicationWindow {
72 private static TimeBarViewer _tbv;
73
74 public FancyExample() {
75 super(null);
76 }
77
78 protected Control createContents(Composite parent) {
79 GridLayout gridLayout = new GridLayout();
80 gridLayout.numColumns = 1;
81 parent.setLayout(gridLayout);
82
83 TimeBarModel model = ModelCreator.createModel();
84
85 GridData gd = new GridData(GridData.FILL_BOTH);
86
87 _tbv = new TimeBarViewer(parent, SWT.H_SCROLL | SWT.V_SCROLL);
88 _tbv.setLayoutData(gd);
89
90 _tbv.setTimeScalePosition(TimeBarViewer.TIMESCALE_POSITION_TOP);
91 _tbv.setModel(model);
92 _tbv.addIntervalModificator(new DefaultIntervalModificator());
93
94 _tbv.setPixelPerSecond(0.05);
95 _tbv.setDrawRowGrid(true);
96
97 _tbv.setSelectionDelta(6);
98
99
100 DefaultTitleRenderer titleRenderer = new DefaultTitleRenderer();
101 titleRenderer.setBackgroundRscName("/de/jaret/examples/timebars/hierarchy/swt/titlebg.png");
102 _tbv.setTitleRenderer(titleRenderer);
103 _tbv.setTitle("Fancy");
104 _tbv.setTimeScaleRenderer(new BoxTimeScaleRenderer());
105
106
107 _tbv.registerTimeBarRenderer(FancyInterval.class, new FancyRenderer());
108
109 _tbv.registerTimeBarRenderer(Event.class, new FancyEventRenderer());
110
111
112 _tbv.setGlobalAssistantRenderer(new FancyGlobalRenderer());
113
114
115 TimeScaleDragSupport scaleDragger = new TimeScaleDragSupport(_tbv);
116
117
118
119 FancyControlPanel ctrl = new FancyControlPanel(parent, SWT.NULL, _tbv);
120 gd = new GridData(GridData.FILL_HORIZONTAL);
121 ctrl.setLayoutData(gd);
122
123
124
125 _tbv.addMouseListener(new MouseAdapter() {
126 public void mouseDoubleClick(MouseEvent e) {
127 List<Interval> intervals = _tbv.getIntervalsAt(e.x, e.y);
128 if (intervals != null && intervals.size() > 0) {
129 for (Interval interval : intervals) {
130 System.out.println("Doubleclicked: " + interval.toString());
131 FancyInterval fi = (FancyInterval)interval;
132 fi.setState(!fi.getState());
133 }
134 }
135 }
136 });
137
138
139
140 Composite addPanel = new Composite(parent, SWT.NULL);
141 gd = new GridData(GridData.FILL_HORIZONTAL);
142 addPanel.setLayoutData(gd);
143 addPanel.setLayout(new RowLayout());
144
145 final Button addIntervals = new Button(addPanel, SWT.PUSH);
146 addIntervals.setText("Add intervals to selected row");
147 addIntervals.addSelectionListener(new SelectionAdapter() {
148 @Override
149 public void widgetSelected(SelectionEvent e) {
150 List<TimeBarRow> selectedRows = _tbv.getSelectionModel().getSelectedRows();
151 if (selectedRows.size() == 1) {
152
153 List<Interval> intervals = new ArrayList<Interval>();
154 for (int i = 0; i < 5; i++) {
155 Interval interval = new IntervalImpl();
156 JaretDate startDate = _tbv.getStartDate().copy().advanceHours(Math.random() * 10);
157 JaretDate endDate = startDate.copy().advanceHours(Math.random() * 5);
158 interval.setBegin(startDate);
159 interval.setEnd(endDate);
160 intervals.add(interval);
161 }
162
163 ((DefaultTimeBarRowModel) selectedRows.get(0)).addIntervals(intervals);
164 }
165 }
166 });
167
168 final Button clearIntervals = new Button(addPanel, SWT.PUSH);
169 clearIntervals.setText("Clear selected row");
170 clearIntervals.addSelectionListener(new SelectionAdapter() {
171 @Override
172 public void widgetSelected(SelectionEvent e) {
173 List<TimeBarRow> selectedRows = _tbv.getSelectionModel().getSelectedRows();
174 if (selectedRows.size() == 1) {
175
176 _tbv.getSelectionModel().remSelectedIntervals(
177 ((DefaultTimeBarRowModel) selectedRows.get(0)).getIntervals());
178
179 ((DefaultTimeBarRowModel) selectedRows.get(0)).clear();
180 }
181 }
182 });
183 final Button remIntervals = new Button(addPanel, SWT.PUSH);
184 remIntervals.setText("Remove selected intervals");
185 remIntervals.addSelectionListener(new SelectionAdapter() {
186 @Override
187 public void widgetSelected(SelectionEvent e) {
188 List<Interval> selectedIntervals = _tbv.getSelectionModel().getSelectedIntervals();
189 if (selectedIntervals.size() > 0) {
190 selectedIntervals = new ArrayList<Interval>(selectedIntervals);
191
192 _tbv.getSelectionModel().remSelectedIntervals(selectedIntervals);
193
194
195 for (int i = 0; i < _tbv.getModel().getRowCount(); i++) {
196 ((DefaultTimeBarRowModel) _tbv.getModel().getRow(i)).remIntervals(selectedIntervals);
197 }
198 }
199 }
200 });
201 final Button changeIntervals = new Button(addPanel, SWT.PUSH);
202 changeIntervals.setText("Change selected intervals");
203 changeIntervals.addSelectionListener(new SelectionAdapter() {
204 @Override
205 public void widgetSelected(SelectionEvent e) {
206 List<Interval> selectedIntervals = _tbv.getSelectionModel().getSelectedIntervals();
207 if (selectedIntervals.size() > 0) {
208 for (Interval interval : selectedIntervals) {
209
210 interval.setBegin(interval.getBegin().copy().advanceHours(1));
211 }
212 }
213 }
214 });
215
216 addIntervals.setEnabled(false);
217 clearIntervals.setEnabled(false);
218 remIntervals.setEnabled(false);
219 changeIntervals.setEnabled(false);
220 _tbv.getSelectionModel().addTimeBarSelectionListener(new TimeBarSelectionListener() {
221
222 private void check(TimeBarSelectionModel selectionModel) {
223 boolean oneRowSelected = selectionModel.getSelectedRows().size() == 1;
224 addIntervals.setEnabled(oneRowSelected);
225 clearIntervals.setEnabled(oneRowSelected);
226
227 boolean containsIntervals = selectionModel.getSelectedIntervals().size() > 0;
228 remIntervals.setEnabled(containsIntervals);
229 changeIntervals.setEnabled(containsIntervals);
230 }
231
232 public void elementAddedToSelection(TimeBarSelectionModel selectionModel, Object element) {
233 check(selectionModel);
234 }
235
236 public void elementRemovedFromSelection(TimeBarSelectionModel selectionModel, Object element) {
237 check(selectionModel);
238 }
239
240 public void selectionChanged(TimeBarSelectionModel selectionModel) {
241 check(selectionModel);
242 }
243
244 });
245
246
247 final Button heightStrategyCheck = new Button(addPanel, SWT.CHECK);
248 heightStrategyCheck.setText("Height strategy");
249 heightStrategyCheck.setSelection(_tbv.getTimeBarViewState().getRowHeightStrategy() != null);
250 heightStrategyCheck.addSelectionListener(new SelectionAdapter() {
251
252 public void widgetSelected(SelectionEvent e) {
253 if (heightStrategyCheck.getSelection()) {
254 _tbv.getTimeBarViewState().setRowHeightStrategy(new IRowHeightStrategy() {
255 public int calculateRowHeight(TimeBarViewerDelegate delegate,
256 ITimeBarViewState timeBarViewState, TimeBarRow row) {
257 int maxOverlap = timeBarViewState.getDefaultRowHeight();
258 int height = delegate.getMaxOverlapCount(row) * maxOverlap;
259 return height;
260 }
261
262 public boolean overrideDefault() {
263 return true;
264 }
265 });
266 } else {
267 _tbv.getTimeBarViewState().setRowHeightStrategy(null);
268 }
269
270 }
271
272 });
273
274
275 Label l = new Label(addPanel, SWT.NULL);
276 l.setText("Percentage:");
277
278 final Scale percentageScale = new Scale(addPanel, SWT.HORIZONTAL);
279 percentageScale.setMaximum(100);
280 percentageScale.setMinimum(0);
281 percentageScale.setEnabled(false);
282 percentageScale.addSelectionListener(new SelectionAdapter() {
283 public void widgetSelected(SelectionEvent ev) {
284 int val = percentageScale.getSelection();
285 FancyInterval interval = (FancyInterval)_tbv.getFocussedInterval();
286 if (interval != null) {
287 interval.setPercentage(val);
288 }
289 }
290 });
291
292
293 _tbv.addFocussedIntervalListener(new FocussedIntervalListener() {
294 public void focussedIntervalChanged(Object source, TimeBarRow row, Interval interval) {
295 if (interval != null && interval instanceof FancyInterval) {
296 percentageScale.setEnabled(true);
297 percentageScale.setSelection(((FancyInterval)interval).getPercentage());
298 } else {
299 percentageScale.setEnabled(false);
300 }
301 }
302
303 });
304
305
306 return _tbv;
307 }
308
309
310 protected void configureShell(Shell shell) {
311 super.configureShell(shell);
312 shell.setText(getClass().getName());
313 }
314
315 public static void main(String[] args) {
316 FancyExample test = new FancyExample();
317 test.setBlockOnOpen(true);
318 test.open();
319 }
320
321
322
323 }