Fix for bug 373698: Incorrect experiment range.
[deliverable/tracecompass.git] / org.eclipse.linuxtools.tmf.ui / src / org / eclipse / linuxtools / tmf / ui / viewers / timeAnalysis / TmfTimeAnalysisViewer.java
CommitLineData
b0d3496e 1/*****************************************************************************\r
a5823d5f 2 * Copyright (c) 2007, 2008, 2009, 2010 Intel Corporation, Ericsson\r
b0d3496e
ASL
3 * All rights reserved. This program and the accompanying materials\r
4 * are made available under the terms of the Eclipse Public License v1.0\r
5 * which accompanies this distribution, and is available at\r
6 * http://www.eclipse.org/legal/epl-v10.html\r
7 *\r
8 * Contributors:\r
9 * Intel Corporation - Initial API and implementation\r
10 * Ruslan A. Scherbakov, Intel - Initial API and implementation\r
11 * Alexander N. Alexeev, Intel - Add monitors statistics support\r
12 * Alvaro Sanchez-Leon - Adapted for TMF\r
13 *\r
14 * $Id: ThreadStatesView.java,v 1.7 2008/05/19 15:07:21 jkubasta Exp $ \r
15 *****************************************************************************/\r
16\r
17package org.eclipse.linuxtools.tmf.ui.viewers.timeAnalysis;\r
18\r
19import java.util.Iterator;\r
b0d3496e
ASL
20import java.util.Vector;\r
21\r
22import org.eclipse.jface.viewers.ISelection;\r
23import org.eclipse.jface.viewers.ISelectionProvider;\r
24import org.eclipse.jface.viewers.IStructuredSelection;\r
25import org.eclipse.linuxtools.tmf.ui.viewers.timeAnalysis.dialogs.TmfTimeFilterDialog;\r
26import org.eclipse.linuxtools.tmf.ui.viewers.timeAnalysis.dialogs.TmfTimeLegend;\r
27import org.eclipse.linuxtools.tmf.ui.viewers.timeAnalysis.model.ITimeEvent;\r
28import org.eclipse.linuxtools.tmf.ui.viewers.timeAnalysis.model.ITmfTimeAnalysisEntry;\r
41dc35d0 29import org.eclipse.linuxtools.tmf.ui.viewers.timeAnalysis.model.TimeEvent;\r
b0d3496e
ASL
30import org.eclipse.linuxtools.tmf.ui.viewers.timeAnalysis.widgets.ITimeDataProvider;\r
31import org.eclipse.linuxtools.tmf.ui.viewers.timeAnalysis.widgets.TimeScaleCtrl;\r
79a3a76e 32import org.eclipse.linuxtools.tmf.ui.viewers.timeAnalysis.widgets.TmfTimeStatesCtrl;\r
41dc35d0 33import org.eclipse.linuxtools.tmf.ui.viewers.timeAnalysis.widgets.TmfTimeTipHandler;\r
b0d3496e
ASL
34import org.eclipse.linuxtools.tmf.ui.viewers.timeAnalysis.widgets.TraceColorScheme;\r
35import org.eclipse.linuxtools.tmf.ui.viewers.timeAnalysis.widgets.Utils;\r
36import org.eclipse.swt.SWT;\r
37import org.eclipse.swt.events.ControlAdapter;\r
38import org.eclipse.swt.events.ControlEvent;\r
39import org.eclipse.swt.events.SelectionEvent;\r
40import org.eclipse.swt.events.SelectionListener;\r
41import org.eclipse.swt.graphics.Rectangle;\r
a5823d5f 42import org.eclipse.swt.layout.GridLayout;\r
b0d3496e
ASL
43import org.eclipse.swt.widgets.Composite;\r
44import org.eclipse.swt.widgets.Control;\r
45\r
46public class TmfTimeAnalysisViewer implements ITimeAnalysisViewer, ITimeDataProvider, SelectionListener {\r
47\r
48 /** vars */\r
49 private long _minTimeInterval;\r
50 private long _selectedTime;\r
51 private long _beginTime;\r
52 private long _endTime;\r
53 private long _time0;\r
54 private long _time1;\r
55 private long _time0_;\r
56 private long _time1_;\r
6a2ffb7f
ASL
57 private long _time0_extSynch = 0;\r
58 private long _time1_extSynch = 0;\r
b0d3496e
ASL
59 private boolean _timeRangeFixed;\r
60 private int _nameWidthPref = 200;\r
61 private int _minNameWidth = 6;\r
62 private int _nameWidth;\r
63 private Composite _dataViewer;\r
64\r
65 private TmfTimeStatesCtrl _stateCtrl;\r
66 private TimeScaleCtrl _timeScaleCtrl;\r
67 private TmfTimeTipHandler _threadTip;\r
68 private TraceColorScheme _colors;\r
69 private TmfTimeAnalysisProvider _utilImplm;\r
70\r
71 private boolean _acceptSetSelAPICalls = false;\r
72 Vector<ITmfTimeSelectionListener> widgetSelectionListners = new Vector<ITmfTimeSelectionListener>();\r
dfaf8391 73 Vector<ITmfTimeScaleSelectionListener> widgetTimeScaleSelectionListners = new Vector<ITmfTimeScaleSelectionListener>();\r
b0d3496e
ASL
74 Vector<ITmfTimeFilterSelectionListener> widgetFilterSelectionListeners = new Vector<ITmfTimeFilterSelectionListener>();\r
75\r
76 // Calender Time format, using Epoch reference or Relative time\r
77 // format(default\r
78 private boolean calendarTimeFormat = false;\r
a5823d5f 79 private int borderWidth = 4;\r
b0d3496e
ASL
80 private int timeScaleHeight = 22;\r
81\r
82 /** ctor */\r
83 public TmfTimeAnalysisViewer(Composite parent, TmfTimeAnalysisProvider provider) {\r
84 createDataViewer(parent, provider);\r
85 }\r
86\r
87 /* (non-Javadoc)\r
88 * @see org.eclipse.linuxtools.tmf.ui.widgets.timeAnalysis.api.ITimeAnalysisWidget#display(org.eclipse.linuxtools.tmf.ui.widgets.timeAnalysis.model.TmfTaTrace[])\r
89 */\r
d4011df2
FC
90 @Override\r
91 public void display(ITmfTimeAnalysisEntry[] traceArr) {\r
b0d3496e
ASL
92 modelUpdate(traceArr);\r
93 }\r
94\r
d4011df2 95 @Override\r
d712a5f3
FC
96 public void display(ITmfTimeAnalysisEntry[] traceArr, long start, long end,\r
97 boolean updateTimeBounds) {\r
98 modelUpdate(traceArr, start, end, updateTimeBounds);\r
b0d3496e
ASL
99 }\r
100\r
101 public void controlMoved(ControlEvent e) {\r
102 }\r
103\r
d4011df2 104 @Override\r
b0d3496e
ASL
105 public void controlResized(ControlEvent e) {\r
106 resizeControls();\r
107 }\r
108\r
109 // called from the display order in the API\r
110 public void modelUpdate(ITmfTimeAnalysisEntry[] traces) {\r
111 if (null != _stateCtrl) {\r
ce62370f 112 //loadOptions();\r
b0d3496e
ASL
113 updateInternalData(traces);\r
114 _stateCtrl.redraw();\r
115 _timeScaleCtrl.redraw();\r
116 }\r
117 }\r
118\r
119 // called from the display order in the API\r
d712a5f3
FC
120 public void modelUpdate(ITmfTimeAnalysisEntry[] traces, long start,\r
121 long end, boolean updateTimeBounds) {\r
b0d3496e 122 if (null != _stateCtrl) {\r
ce62370f 123 //loadOptions();\r
b0d3496e 124 updateInternalData(traces, start, end);\r
d712a5f3
FC
125 if (updateTimeBounds) {\r
126 _timeRangeFixed = true;\r
127 // set window to match limits\r
71c964eb 128 setStartFinishTime(_time0_, _time1_);\r
d712a5f3
FC
129 } else {\r
130 _stateCtrl.redraw();\r
131 _timeScaleCtrl.redraw();\r
132 }\r
b0d3496e
ASL
133 }\r
134 }\r
135\r
d4011df2 136 @Override\r
b0d3496e
ASL
137 public void itemUpdate(ITmfTimeAnalysisEntry parent, TimeEvent item) {\r
138 if (null != parent && null != item) {\r
139 _stateCtrl.refreshPartial(parent, item);\r
140 _stateCtrl.redraw();\r
141 _timeScaleCtrl.redraw();\r
142 }\r
143 }\r
144\r
145 public void selectionChanged() {\r
146 }\r
147\r
148 protected String getViewTypeStr() {\r
3b38ea61 149 return "viewoption.threads"; //$NON-NLS-1$\r
b0d3496e
ASL
150 }\r
151\r
152 int getMarginWidth(int idx) {\r
153 return 0;\r
154 }\r
155\r
156 int getMarginHeight(int idx) {\r
157 return 0;\r
158 }\r
159\r
160 void loadOptions() {\r
8b9fa226 161 _minTimeInterval = 1;\r
b0d3496e 162 _selectedTime = -1;\r
3b38ea61 163 _nameWidth = Utils.loadIntOption(getPreferenceString("namewidth"), //$NON-NLS-1$\r
b0d3496e
ASL
164 _nameWidthPref, _minNameWidth, 1000);\r
165 }\r
166\r
167 void saveOptions() {\r
3b38ea61 168 Utils.saveIntOption(getPreferenceString("namewidth"), _nameWidth); //$NON-NLS-1$\r
b0d3496e
ASL
169 }\r
170\r
171 protected Control createDataViewer(Composite parent,\r
172 TmfTimeAnalysisProvider utilImplm) {\r
173 loadOptions();\r
174 _utilImplm = utilImplm;\r
175 _colors = new TraceColorScheme();\r
176 _dataViewer = new Composite(parent, SWT.NULL);\r
177 _dataViewer.setLayoutData(GridUtil.createFill());\r
a5823d5f
ASL
178 GridLayout gl = new GridLayout();\r
179 gl.marginHeight = borderWidth;\r
180 gl.marginWidth = 0;\r
181 gl.verticalSpacing = 0;\r
182 gl.horizontalSpacing = 0;\r
183 _dataViewer.setLayout(gl);\r
b0d3496e
ASL
184\r
185 _timeScaleCtrl = new TimeScaleCtrl(_dataViewer, _colors);\r
186 _timeScaleCtrl.setTimeProvider(this);\r
a5823d5f
ASL
187 _timeScaleCtrl.setLayoutData(GridUtil.createHorizontalFill());\r
188 _timeScaleCtrl.setHeight(timeScaleHeight);\r
b0d3496e
ASL
189\r
190 _stateCtrl = new TmfTimeStatesCtrl(_dataViewer, _colors, _utilImplm);\r
191\r
192 _stateCtrl.setTimeProvider(this);\r
193 _stateCtrl.addSelectionListener(this);\r
194 _stateCtrl.setLayoutData(GridUtil.createFill());\r
195 _dataViewer.addControlListener(new ControlAdapter() {\r
4e3aa37d 196 @Override\r
b0d3496e
ASL
197 public void controlResized(ControlEvent event) {\r
198 resizeControls();\r
199 }\r
200 });\r
201 resizeControls();\r
202 _dataViewer.update();\r
203 _threadTip = new TmfTimeTipHandler(parent.getShell(), _utilImplm, this);\r
204 _threadTip.activateHoverHelp(_stateCtrl);\r
205 return _dataViewer;\r
206 }\r
207\r
208 public void dispose() {\r
209 saveOptions();\r
210 _stateCtrl.dispose();\r
211 _dataViewer.dispose();\r
212 _colors.dispose();\r
213 }\r
214\r
d4011df2 215 @Override\r
b0d3496e
ASL
216 public void resizeControls() {\r
217 Rectangle r = _dataViewer.getClientArea();\r
218 if (r.isEmpty())\r
219 return;\r
220\r
221 int width = r.width;\r
222 if (_nameWidth > width - _minNameWidth)\r
223 _nameWidth = width - _minNameWidth;\r
224 if (_nameWidth < _minNameWidth)\r
225 _nameWidth = _minNameWidth;\r
226 }\r
227\r
a5823d5f 228 /** Tries to set most convenient time range for display. */\r
b0d3496e
ASL
229 void setTimeRange(Object traces[]) {\r
230 _endTime = 0;\r
231 _beginTime = -1;\r
ce62370f 232// ITimeEvent event;\r
b0d3496e 233 for (int i = 0; i < traces.length; i++) {\r
a5823d5f
ASL
234 ITmfTimeAnalysisEntry entry = (ITmfTimeAnalysisEntry) traces[i];\r
235 if (entry.getStopTime() >= entry.getStartTime() && entry.getStopTime() > 0) {\r
236 if (_beginTime < 0 || entry.getStartTime() < _beginTime) {\r
237 _beginTime = entry.getStartTime();\r
238 }\r
239 if (entry.getStopTime() > _endTime) {\r
240 _endTime = entry.getStopTime();\r
241 }\r
b0d3496e 242 }\r
ce62370f
FC
243 /*\r
244 * This is not needed if entry startTime and stopTime are properly set!\r
a5823d5f 245 List<TimeEvent> list = entry.getTraceEvents();\r
b0d3496e
ASL
246 int len = list.size();\r
247 if (len > 0) {\r
a5823d5f
ASL
248 event = (ITimeEvent) list.get(0);\r
249 if (_beginTime < 0 || event.getTime() < _beginTime) {\r
250 _beginTime = event.getTime();\r
251 }\r
b0d3496e 252 event = (ITimeEvent) list.get(list.size() - 1);\r
a5823d5f
ASL
253 long eventEndTime = event.getTime() + (event.getDuration() > 0 ? event.getDuration() : 0);\r
254 if (eventEndTime > _endTime) {\r
255 _endTime = eventEndTime;\r
b0d3496e
ASL
256 }\r
257 }\r
ce62370f 258 */\r
b0d3496e
ASL
259 }\r
260\r
261 if (_beginTime < 0)\r
262 _beginTime = 0;\r
263 }\r
264\r
265 void setTimeBounds() {\r
a5823d5f
ASL
266 //_time0_ = _beginTime - (long) ((_endTime - _beginTime) * 0.02);\r
267 _time0_ = _beginTime;\r
b0d3496e
ASL
268 if (_time0_ < 0)\r
269 _time0_ = 0;\r
270 // _time1_ = _time0_ + (_endTime - _time0_) * 1.05;\r
271 _time1_ = _endTime;\r
272 // _time0_ = Math.floor(_time0_);\r
273 // _time1_ = Math.ceil(_time1_);\r
274 if (!_timeRangeFixed) {\r
275 _time0 = _time0_;\r
276 _time1 = _time1_;\r
277 }\r
8b9fa226
ASL
278 if (_time1 - _time0 < _minTimeInterval) {\r
279 _time1 = _time0 + _minTimeInterval;\r
280 }\r
b0d3496e
ASL
281 }\r
282\r
283 /**\r
284 * @param traces\r
285 */\r
286 void updateInternalData(ITmfTimeAnalysisEntry[] traces) {\r
287 if (null == traces)\r
288 traces = new ITmfTimeAnalysisEntry[0];\r
289 setTimeRange(traces);\r
290 refreshAllData(traces);\r
291 }\r
292\r
293 /**\r
294 * @param traces\r
295 * @param start\r
296 * @param end\r
297 */\r
298 void updateInternalData(ITmfTimeAnalysisEntry[] traces, long start, long end) {\r
299 if (null == traces)\r
300 traces = new ITmfTimeAnalysisEntry[0];\r
a5823d5f
ASL
301 if ((start == 0 && end == 0) || start < 0 || end < 0) {\r
302 // Start and end time are unspecified and need to be determined from\r
d712a5f3 303 // individual processes\r
b0d3496e
ASL
304 setTimeRange(traces);\r
305 } else {\r
79a3a76e 306 _beginTime = start;\r
71c964eb 307 _endTime = end;\r
b0d3496e
ASL
308 }\r
309\r
310 refreshAllData(traces);\r
311 }\r
312\r
313 /**\r
314 * @param traces\r
315 */\r
316 private void refreshAllData(ITmfTimeAnalysisEntry[] traces) {\r
317 setTimeBounds();\r
a5823d5f
ASL
318 if (_selectedTime < _beginTime) {\r
319 _selectedTime = _beginTime;\r
320 } else if (_selectedTime > _endTime) {\r
321 _selectedTime = _endTime;\r
322 }\r
b0d3496e
ASL
323 _stateCtrl.refreshData(traces);\r
324 filterOutNotification();\r
325 }\r
326\r
d4011df2 327 @Override\r
b0d3496e
ASL
328 public void setFocus() {\r
329 if (null != _stateCtrl)\r
330 _stateCtrl.setFocus();\r
331 }\r
332\r
d4011df2 333 @Override\r
b0d3496e
ASL
334 public boolean isInFocus() {\r
335 return _stateCtrl.isInFocus();\r
336 }\r
337\r
d4011df2 338 @Override\r
b0d3496e
ASL
339 public ITmfTimeAnalysisEntry getSelectedTrace() {\r
340 return _stateCtrl.getSelectedTrace();\r
341 }\r
342\r
d4011df2 343 @Override\r
b0d3496e
ASL
344 public ISelection getSelection() {\r
345 return _stateCtrl.getSelection();\r
346 }\r
347\r
d4011df2 348 @Override\r
b0d3496e
ASL
349 public ISelection getSelectionTrace() {\r
350 return _stateCtrl.getSelectionTrace();\r
351 }\r
352\r
d4011df2 353 @Override\r
b0d3496e
ASL
354 public long getTime0() {\r
355 return _time0;\r
356 }\r
357\r
d4011df2 358 @Override\r
b0d3496e
ASL
359 public long getTime1() {\r
360 return _time1;\r
361 }\r
362\r
d4011df2 363 @Override\r
b0d3496e
ASL
364 public long getMinTimeInterval() {\r
365 return _minTimeInterval;\r
366 }\r
367\r
d4011df2 368 @Override\r
b0d3496e
ASL
369 public int getNameSpace() {\r
370 return _nameWidth;\r
371 }\r
372\r
d4011df2 373 @Override\r
b0d3496e
ASL
374 public void setNameSpace(int width) {\r
375 _nameWidth = width;\r
376 width = _stateCtrl.getClientArea().width;\r
377 if (_nameWidth > width - 6)\r
378 _nameWidth = width - 6;\r
379 if (_nameWidth < 6)\r
380 _nameWidth = 6;\r
381 _stateCtrl.adjustScrolls();\r
382 _stateCtrl.redraw();\r
383 _timeScaleCtrl.redraw();\r
384 }\r
385\r
d4011df2 386 @Override\r
b0d3496e
ASL
387 public int getTimeSpace() {\r
388 int w = _stateCtrl.getClientArea().width;\r
389 return w - _nameWidth;\r
390 }\r
391\r
d4011df2 392 @Override\r
b0d3496e
ASL
393 public long getSelectedTime() {\r
394 return _selectedTime;\r
395 }\r
396\r
d4011df2 397 @Override\r
b0d3496e
ASL
398 public long getBeginTime() {\r
399 return _beginTime;\r
400 }\r
401\r
d4011df2 402 @Override\r
b0d3496e
ASL
403 public long getEndTime() {\r
404 return _endTime;\r
405 }\r
406\r
d4011df2 407 @Override\r
b0d3496e
ASL
408 public long getMaxTime() {\r
409 return _time1_;\r
410 }\r
411\r
d4011df2 412 @Override\r
b0d3496e
ASL
413 public long getMinTime() {\r
414 return _time0_;\r
415 }\r
416\r
71c964eb
ASL
417 /*\r
418 * (non-Javadoc)\r
419 * \r
420 * @see\r
421 * org.eclipse.linuxtools.tmf.ui.viewers.timeAnalysis.widgets.ITimeDataProvider\r
422 * #setStartFinishTimeNotify(long, long)\r
423 */\r
d4011df2 424 @Override\r
71c964eb
ASL
425 public void setStartFinishTimeNotify(long time0, long time1) {\r
426 setStartFinishTime(time0, time1);\r
b0d3496e
ASL
427 notifyStartFinishTimeSelectionListeners(time0, time1);\r
428 }\r
429\r
8b9fa226
ASL
430\r
431 /* (non-Javadoc)\r
432 * @see org.eclipse.linuxtools.tmf.ui.viewers.timeAnalysis.widgets.ITimeDataProvider#notifyStartFinishTime()\r
433 */\r
d4011df2
FC
434 @Override\r
435 public void notifyStartFinishTime() {\r
8b9fa226
ASL
436 notifyStartFinishTimeSelectionListeners(_time0, _time1);\r
437 }\r
438\r
439 /*\r
71c964eb
ASL
440 * (non-Javadoc)\r
441 * \r
442 * @see\r
443 * org.eclipse.linuxtools.tmf.ui.viewers.timeAnalysis.widgets.ITimeDataProvider\r
444 * #setStartFinishTime(long, long)\r
445 */\r
d4011df2 446 @Override\r
71c964eb 447 public void setStartFinishTime(long time0, long time1) {\r
b0d3496e 448 _time0 = time0;\r
8b9fa226
ASL
449 if (_time0 < _time0_)\r
450 _time0 = _time0_;\r
451 if (_time0 > _time1_)\r
452 _time0 = _time1_;\r
b0d3496e 453 _time1 = time1;\r
8b9fa226
ASL
454 if (_time1 < _time0_)\r
455 _time1 = _time0_;\r
456 if (_time1 > _time1_)\r
457 _time1 = _time1_;\r
b0d3496e 458 if (_time1 - _time0 < _minTimeInterval)\r
8b9fa226 459 _time1 = _time0 + _minTimeInterval;\r
b0d3496e
ASL
460 _timeRangeFixed = true;\r
461 _stateCtrl.adjustScrolls();\r
462 _stateCtrl.redraw();\r
463 _timeScaleCtrl.redraw();\r
464 }\r
465\r
d61e0854
PT
466 @Override\r
467 public void setTimeBounds(long beginTime, long endTime) {\r
468 _beginTime = beginTime;\r
469 _endTime = endTime;\r
470 _time0_ = beginTime;\r
471 _time1_ = endTime;\r
472 _stateCtrl.adjustScrolls();\r
473 _stateCtrl.redraw();\r
474 _timeScaleCtrl.redraw();\r
475 }\r
476\r
d4011df2 477 @Override\r
b0d3496e 478 public void resetStartFinishTime() {\r
71c964eb 479 setStartFinishTimeNotify(_time0_, _time1_);\r
b0d3496e
ASL
480 _timeRangeFixed = false;\r
481 }\r
482\r
d4011df2 483 @Override\r
b0d3496e
ASL
484 public void setSelectedTimeInt(long time, boolean ensureVisible) {\r
485 // Trace.debug("currentTime:" + _selectedTime + " new time:" + time);\r
486 _selectedTime = time;\r
a79913eb
FC
487 if (_selectedTime > _endTime) {\r
488 _endTime = _selectedTime;\r
489 _time1_ = _selectedTime;\r
490 }\r
491 if (_selectedTime < _beginTime) {\r
492 _beginTime = _selectedTime;\r
493 _time0_ = _selectedTime;\r
494 }\r
ce62370f
FC
495 long time0 = _time0;\r
496 long time1 = _time1;\r
b0d3496e
ASL
497 if (ensureVisible) {\r
498 double timeSpace = (_time1 - _time0) * .02;\r
499 double timeMid = (_time1 - _time0) * .1;\r
500 if (_selectedTime < _time0 + timeSpace) {\r
a79913eb 501 long dt = (long) (_time0 - _selectedTime + timeMid);\r
b0d3496e
ASL
502 _time0 -= dt;\r
503 _time1 -= dt;\r
504 } else if (_selectedTime > _time1 - timeSpace) {\r
a79913eb 505 long dt = (long) (_selectedTime - _time1 + timeMid);\r
b0d3496e
ASL
506 _time0 += dt;\r
507 _time1 += dt;\r
508 }\r
a5823d5f 509 if (_time0 < _time0_) {\r
a79913eb 510 _time1 = Math.min(_time1_, _time1 + (_time0_ - _time0));\r
a5823d5f 511 _time0 = _time0_;\r
b0d3496e 512 } else if (_time1 > _time1_) {\r
a79913eb 513 _time0 = Math.max(_time0_, _time0 - (_time1 - _time1_));\r
b0d3496e
ASL
514 _time1 = _time1_;\r
515 }\r
516 }\r
a79913eb
FC
517 if (_time1 - _time0 < _minTimeInterval) {\r
518 _time1 = _time0 + _minTimeInterval;\r
519 }\r
b0d3496e
ASL
520 _stateCtrl.adjustScrolls();\r
521 _stateCtrl.redraw();\r
522 _timeScaleCtrl.redraw();\r
ce62370f
FC
523 if (time0 != _time0 || time1 != _time1) {\r
524 notifyStartFinishTimeSelectionListeners(_time0, _time1);\r
525 }\r
b0d3496e
ASL
526 }\r
527\r
d4011df2 528 @Override\r
b0d3496e
ASL
529 public void widgetDefaultSelected(SelectionEvent e) {\r
530 // TODO: Opening call stack shall be replaced to a configurable view\r
531 // new OpenCallStackViewAction().openView(false);\r
532 // Replaced by event notification\r
533 // updateModelSelection();\r
6e85c58d 534 notifySelectionListeners(TmfTimeSelectionEvent.Type.WIDGET_DEF_SEL);\r
b0d3496e
ASL
535 }\r
536\r
d4011df2 537 @Override\r
b0d3496e
ASL
538 public void widgetSelected(SelectionEvent e) {\r
539 // Replace by event notification\r
540 // updateModelSelection();\r
6e85c58d 541 notifySelectionListeners(TmfTimeSelectionEvent.Type.WIDGET_SEL);\r
b0d3496e
ASL
542 }\r
543\r
d4011df2 544 @Override\r
b0d3496e
ASL
545 public void selectNextEvent() {\r
546 _stateCtrl.selectNextEvent();\r
547 }\r
548\r
d4011df2 549 @Override\r
b0d3496e
ASL
550 public void selectPrevEvent() {\r
551 _stateCtrl.selectPrevEvent();\r
552 }\r
553\r
d4011df2 554 @Override\r
b0d3496e
ASL
555 public void selectNextTrace() {\r
556 _stateCtrl.selectNextTrace();\r
557 }\r
558\r
d4011df2 559 @Override\r
b0d3496e
ASL
560 public void selectPrevTrace() {\r
561 _stateCtrl.selectPrevTrace();\r
562 }\r
563\r
d4011df2 564 @Override\r
b0d3496e
ASL
565 public void groupTraces(boolean on) {\r
566 _stateCtrl.groupTraces(on);\r
567 }\r
568\r
d4011df2 569 @Override\r
b0d3496e
ASL
570 public void filterTraces() {\r
571 if (_dataViewer == null || _dataViewer.isDisposed())\r
572 return;\r
573\r
574 if (TmfTimeFilterDialog.getTraceFilter(_dataViewer.getShell(), _stateCtrl\r
575 .getTraces(), _stateCtrl.getTraceFilter())) {\r
576 _stateCtrl.refreshData();\r
577 filterOutNotification();\r
578 }\r
579 }\r
580\r
d4011df2 581 @Override\r
b0d3496e
ASL
582 public void showLegend() {\r
583 if (_dataViewer == null || _dataViewer.isDisposed())\r
584 return;\r
585\r
586 TmfTimeLegend.open(_dataViewer.getShell(), _utilImplm);\r
587 }\r
588\r
589 public void toggleThreadsInteractionDrawing() {\r
590 _stateCtrl.toggleTraceInteractionDrawing();\r
591 }\r
592\r
593 public void setThreadJoinDrawing(boolean on) {\r
594 _stateCtrl.setTraceJoinDrawing(on);\r
595 }\r
596\r
597 public void setThreadWaitDrawing(boolean on) {\r
598 _stateCtrl.setTraceWaitDrawing(on);\r
599 }\r
600\r
601 public void setThreadReleaseDrawing(boolean on) {\r
602 _stateCtrl.setTraceReleaseDrawing(on);\r
603 }\r
604\r
605 public boolean getThreadInteractionDrawing() {\r
606 return _stateCtrl.getTracesInteractionDrawing();\r
607 }\r
608\r
609 public boolean getThreadJoinDrawing() {\r
610 return _stateCtrl.getTraceJoinDrawing();\r
611 }\r
612\r
613 public boolean getThreadWaitDrawing() {\r
614 return _stateCtrl.getTraceWaitDrawing();\r
615 }\r
616\r
617 public boolean getThreadReleaseDrawing() {\r
618 return _stateCtrl.getTraceReleaseDrawing();\r
619 }\r
620\r
621 protected void select(Object obj) {\r
622 if (obj == null)\r
623 return;\r
624 // TODO: ThreadDetails Adaption removed, might need replacement\r
625 // if (obj instanceof ThreadDetails) {\r
626 // obj = ((ThreadDetails) obj).getThread();\r
627 // }\r
628 if (obj instanceof ITmfTimeAnalysisEntry) {\r
629 // _stateCtrl.selectThread((TsfTmTrace) obj);\r
630 }\r
631 }\r
632\r
d4011df2 633 @Override\r
b0d3496e
ASL
634 public void zoomIn() {\r
635 _stateCtrl.zoomIn();\r
636 }\r
637\r
d4011df2 638 @Override\r
b0d3496e
ASL
639 public void zoomOut() {\r
640 _stateCtrl.zoomOut();\r
641 }\r
642\r
643 private String getPreferenceString(String string) {\r
3b38ea61 644 return getViewTypeStr() + "." + string; //$NON-NLS-1$\r
b0d3496e
ASL
645 }\r
646\r
d4011df2 647 @Override\r
b0d3496e
ASL
648 public void addWidgetSelectionListner(ITmfTimeSelectionListener listener) {\r
649 widgetSelectionListners.add(listener);\r
650 }\r
651\r
d4011df2 652 @Override\r
b0d3496e
ASL
653 public void removeWidgetSelectionListner(ITmfTimeSelectionListener listener) {\r
654 widgetSelectionListners.removeElement(listener);\r
655 }\r
656\r
d4011df2 657 @Override\r
b0d3496e 658 public void addWidgetTimeScaleSelectionListner(\r
dfaf8391 659 ITmfTimeScaleSelectionListener listener) {\r
b0d3496e
ASL
660 widgetTimeScaleSelectionListners.add(listener);\r
661 }\r
662\r
d4011df2 663 @Override\r
b0d3496e 664 public void removeWidgetTimeScaleSelectionListner(\r
dfaf8391 665 ITmfTimeScaleSelectionListener listener) {\r
b0d3496e
ASL
666 widgetTimeScaleSelectionListners.removeElement(listener);\r
667 }\r
668\r
d4011df2 669 @Override\r
b0d3496e
ASL
670 public void setSelectedTime(long time, boolean ensureVisible, Object source) {\r
671 if (_acceptSetSelAPICalls == false || this == source) {\r
672 return;\r
673 }\r
674\r
675 setSelectedTimeInt(time, ensureVisible);\r
676 }\r
677\r
d4011df2 678 @Override\r
b0d3496e
ASL
679 public void setSelectedEvent(ITimeEvent event, Object source) {\r
680 if (_acceptSetSelAPICalls == false || event == null || source == this) {\r
681 return;\r
682 }\r
683 ITmfTimeAnalysisEntry trace = event.getEntry();\r
684 if (trace != null) {\r
685 _stateCtrl.selectItem(trace, false);\r
686 }\r
687\r
688 setSelectedTimeInt(event.getTime(), true);\r
689 }\r
690\r
d4011df2 691 @Override\r
b0d3496e
ASL
692 public void setSelectedTraceTime(ITmfTimeAnalysisEntry trace, long time, Object source) {\r
693 if (_acceptSetSelAPICalls == false || trace == null || source == this) {\r
694 return;\r
695 }\r
696\r
697 if (trace != null) {\r
698 _stateCtrl.selectItem(trace, false);\r
699 }\r
700\r
701 setSelectedTimeInt(time, true);\r
702 }\r
703\r
d4011df2 704 @Override\r
b0d3496e
ASL
705 public void setSelectedTrace(ITmfTimeAnalysisEntry trace) {\r
706 if (trace == null) {\r
707 return;\r
708 }\r
709\r
710 _stateCtrl.selectItem(trace, false);\r
711 }\r
712\r
6a2ffb7f
ASL
713 /*\r
714 * (non-Javadoc)\r
715 * \r
716 * @see\r
717 * org.eclipse.linuxtools.tmf.ui.viewers.timeAnalysis.ITimeAnalysisViewer\r
718 * #setSelectVisTimeWindow(long, long, java.lang.Object)\r
719 */\r
d4011df2 720 @Override\r
b0d3496e
ASL
721 public void setSelectVisTimeWindow(long time0, long time1, Object source) {\r
722 if (_acceptSetSelAPICalls == false || source == this) {\r
723 return;\r
724 }\r
725\r
71c964eb 726 setStartFinishTime(time0, time1);\r
6a2ffb7f
ASL
727\r
728 // update notification time values since we are now in synch with the\r
729 // external application\r
730 updateExtSynchTimers();\r
b0d3496e
ASL
731 }\r
732\r
d4011df2 733 @Override\r
b0d3496e
ASL
734 public void setAcceptSelectionAPIcalls(boolean acceptCalls) {\r
735 _acceptSetSelAPICalls = acceptCalls;\r
736 }\r
737\r
738 private synchronized void notifySelectionListeners(\r
6e85c58d 739 TmfTimeSelectionEvent.Type rtype) {\r
b0d3496e
ASL
740 // Any listeners out there ?\r
741 if (widgetSelectionListners.size() > 0) {\r
742 // Locate the event selected\r
743 ISelection selection = getSelection();\r
744 Object sel = null;\r
745 if (selection != null && !selection.isEmpty()) {\r
746 sel = ((IStructuredSelection) selection).getFirstElement();\r
747 }\r
748\r
749 if (sel != null) {\r
750 // Notify Selection Listeners\r
751 TmfTimeSelectionEvent event = new TmfTimeSelectionEvent(this,\r
752 rtype, sel, getSelectedTime());\r
753\r
754 for (Iterator<ITmfTimeSelectionListener> iter = widgetSelectionListners\r
755 .iterator(); iter.hasNext();) {\r
756 ITmfTimeSelectionListener listener = (ITmfTimeSelectionListener) iter\r
757 .next();\r
758 listener.tsfTmProcessSelEvent(event);\r
759 }\r
760 }\r
761 }\r
762 }\r
763\r
764 public void notifyStartFinishTimeSelectionListeners(long _time0, long _time1) {\r
765 if (widgetTimeScaleSelectionListners.size() > 0) {\r
71c964eb 766 // Check if the time has actually changed from last notification\r
6a2ffb7f 767 if (_time0 != _time0_extSynch || _time1 != _time1_extSynch) {\r
71c964eb
ASL
768 // Notify Time Scale Selection Listeners\r
769 TmfTimeScaleSelectionEvent event = new TmfTimeScaleSelectionEvent(\r
770 this, _time0, _time1, getTimeSpace(), getSelectedTime());\r
771\r
772 for (Iterator<ITmfTimeScaleSelectionListener> iter = widgetTimeScaleSelectionListners\r
773 .iterator(); iter.hasNext();) {\r
774 ITmfTimeScaleSelectionListener listener = (ITmfTimeScaleSelectionListener) iter\r
775 .next();\r
776 listener.tsfTmProcessTimeScaleEvent(event);\r
777 }\r
778\r
6a2ffb7f
ASL
779 // update external synch timers\r
780 updateExtSynchTimers();\r
b0d3496e
ASL
781 }\r
782 }\r
783 }\r
784\r
6a2ffb7f
ASL
785 /**\r
786 * update the cache timers used to identify the need to send a time window\r
787 * update to external registered listeners\r
788 */\r
789 private void updateExtSynchTimers() {\r
790 // last time notification cache\r
791 _time0_extSynch = _time0;\r
792 _time1_extSynch = _time1;\r
793 }\r
794\r
d4011df2 795 @Override\r
b0d3496e
ASL
796 public void setTimeCalendarFormat(boolean toAbsoluteCaltime) {\r
797 calendarTimeFormat = toAbsoluteCaltime;\r
798 }\r
799\r
d4011df2 800 @Override\r
b0d3496e
ASL
801 public boolean isCalendarFormat() {\r
802 return calendarTimeFormat;\r
803 }\r
804\r
d4011df2 805 @Override\r
b0d3496e 806 public int getBorderWidth() {\r
a5823d5f 807 return borderWidth;\r
b0d3496e
ASL
808 }\r
809\r
d4011df2 810 @Override\r
b0d3496e
ASL
811 public void setBorderWidth(int borderWidth) {\r
812 if (borderWidth > -1) {\r
a5823d5f
ASL
813 this.borderWidth = borderWidth;\r
814 GridLayout gl = (GridLayout)_dataViewer.getLayout();\r
815 gl.marginHeight = borderWidth;\r
b0d3496e
ASL
816 }\r
817 }\r
818\r
d4011df2 819 @Override\r
b0d3496e
ASL
820 public int getHeaderHeight() {\r
821 return timeScaleHeight;\r
822 }\r
823\r
d4011df2 824 @Override\r
b0d3496e
ASL
825 public void setHeaderHeight(int headerHeight) {\r
826 if (headerHeight > -1) {\r
827 this.timeScaleHeight = headerHeight;\r
a5823d5f 828 _timeScaleCtrl.setHeight(headerHeight);\r
b0d3496e
ASL
829 }\r
830 }\r
831\r
d4011df2 832 @Override\r
b0d3496e
ASL
833 public int getItemHeight() {\r
834 if (_stateCtrl != null) {\r
835 return _stateCtrl.getItemHeight();\r
836 }\r
837 return 0;\r
838 }\r
839\r
d4011df2 840 @Override\r
b0d3496e
ASL
841 public void setItemHeight(int rowHeight) {\r
842 if (_stateCtrl != null) {\r
843 _stateCtrl.setItemHeight(rowHeight);\r
844 }\r
845 }\r
846\r
ce62370f
FC
847 @Override\r
848 public void setMinimumItemWidth(int width) {\r
849 if (_stateCtrl != null) {\r
850 _stateCtrl.setMinimumItemWidth(width);\r
851 }\r
852 }\r
853 \r
d4011df2 854 @Override\r
b0d3496e
ASL
855 public boolean isVisibleVerticalScroll() {\r
856 if (_stateCtrl != null) {\r
857 _stateCtrl.isVisibleVerticalScroll();\r
858 }\r
859 return false;\r
860 }\r
861\r
d4011df2 862 @Override\r
b0d3496e
ASL
863 public void setVisibleVerticalScroll(boolean visibleVerticalScroll) {\r
864 if (_stateCtrl != null) {\r
865 _stateCtrl.setVisibleVerticalScroll(visibleVerticalScroll);\r
866 }\r
867 }\r
868\r
d4011df2 869 @Override\r
b0d3496e
ASL
870 public void setNameWidthPref(int width) {\r
871 _nameWidthPref = width;\r
872 if (width == 0) {\r
873 _minNameWidth = 0;\r
97e9a5cd 874 _nameWidth = 0;\r
b0d3496e
ASL
875 }\r
876 }\r
877\r
d4011df2 878 @Override\r
b0d3496e
ASL
879 public int getNameWidthPref(int width) {\r
880 return _nameWidthPref;\r
881 }\r
882\r
d4011df2 883 @Override\r
b0d3496e
ASL
884 public void addFilterSelectionListner(ITmfTimeFilterSelectionListener listener) {\r
885 widgetFilterSelectionListeners.add(listener);\r
886 }\r
887\r
d4011df2 888 @Override\r
b0d3496e
ASL
889 public void removeFilterSelectionListner(\r
890 ITmfTimeFilterSelectionListener listener) {\r
891 widgetFilterSelectionListeners.remove(listener);\r
892 }\r
893\r
894 private void filterOutNotification() {\r
895 TmfTimeFilterSelectionEvent event = new TmfTimeFilterSelectionEvent(this);\r
896 event.setFilteredOut(_stateCtrl.getFilteredOut());\r
897 for (ITmfTimeFilterSelectionListener listener : widgetFilterSelectionListeners) {\r
898 listener.tmfTaProcessFilterSelection(event);\r
899 }\r
900 }\r
901\r
902 /**\r
903 * needed in case there's a need to associate a context menu\r
904 * \r
905 * @return\r
906 */\r
d4011df2 907 @Override\r
b0d3496e
ASL
908 public Control getControl() {\r
909 return _stateCtrl;\r
910 }\r
911\r
912 /**\r
913 * Get the selection provider\r
914 * \r
915 * @return\r
916 */\r
d4011df2 917 @Override\r
b0d3496e
ASL
918 public ISelectionProvider getSelectionProvider() {\r
919 return _stateCtrl;\r
920 }\r
41dc35d0
FC
921\r
922 /*\r
923 * (non-Javadoc)\r
924 * \r
925 * @see\r
926 * org.eclipse.linuxtools.tmf.ui.viewers.timeAnalysis.ITimeAnalysisViewer\r
927 * #waitCursor(boolean)\r
928 */\r
d4011df2 929 @Override\r
41dc35d0
FC
930 public void waitCursor(boolean waitInd) {\r
931 _stateCtrl.waitCursor(waitInd);\r
932 }\r
b0d3496e 933}\r
This page took 0.081718 seconds and 5 git commands to generate.