Partial fix for Bug325016
[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
d4011df2 466 @Override\r
b0d3496e 467 public void resetStartFinishTime() {\r
71c964eb 468 setStartFinishTimeNotify(_time0_, _time1_);\r
b0d3496e
ASL
469 _timeRangeFixed = false;\r
470 }\r
471\r
d4011df2 472 @Override\r
b0d3496e
ASL
473 public void setSelectedTimeInt(long time, boolean ensureVisible) {\r
474 // Trace.debug("currentTime:" + _selectedTime + " new time:" + time);\r
475 _selectedTime = time;\r
476 if (_selectedTime > _endTime)\r
477 _selectedTime = _endTime;\r
478 if (_selectedTime < _beginTime)\r
479 _selectedTime = _beginTime;\r
ce62370f
FC
480 long time0 = _time0;\r
481 long time1 = _time1;\r
b0d3496e
ASL
482 if (ensureVisible) {\r
483 double timeSpace = (_time1 - _time0) * .02;\r
484 double timeMid = (_time1 - _time0) * .1;\r
485 if (_selectedTime < _time0 + timeSpace) {\r
486 double dt = _time0 - _selectedTime + timeMid;\r
487 _time0 -= dt;\r
488 _time1 -= dt;\r
489 } else if (_selectedTime > _time1 - timeSpace) {\r
490 double dt = _selectedTime - _time1 + timeMid;\r
491 _time0 += dt;\r
492 _time1 += dt;\r
493 }\r
a5823d5f
ASL
494 if (_time0 < _time0_) {\r
495 _time1 += _time0_ - _time0;\r
496 _time0 = _time0_;\r
b0d3496e
ASL
497 } else if (_time1 > _time1_) {\r
498 _time0 -= _time1 - _time1_;\r
499 _time1 = _time1_;\r
500 }\r
501 }\r
502 _stateCtrl.adjustScrolls();\r
503 _stateCtrl.redraw();\r
504 _timeScaleCtrl.redraw();\r
ce62370f
FC
505 if (time0 != _time0 || time1 != _time1) {\r
506 notifyStartFinishTimeSelectionListeners(_time0, _time1);\r
507 }\r
b0d3496e
ASL
508 }\r
509\r
d4011df2 510 @Override\r
b0d3496e
ASL
511 public void widgetDefaultSelected(SelectionEvent e) {\r
512 // TODO: Opening call stack shall be replaced to a configurable view\r
513 // new OpenCallStackViewAction().openView(false);\r
514 // Replaced by event notification\r
515 // updateModelSelection();\r
516 notifySelectionListeners(TmfTimeSelectionEvent.type.WIDGET_DEF_SEL);\r
517 }\r
518\r
d4011df2 519 @Override\r
b0d3496e
ASL
520 public void widgetSelected(SelectionEvent e) {\r
521 // Replace by event notification\r
522 // updateModelSelection();\r
523 notifySelectionListeners(TmfTimeSelectionEvent.type.WIDGET_SEL);\r
524 }\r
525\r
d4011df2 526 @Override\r
b0d3496e
ASL
527 public void selectNextEvent() {\r
528 _stateCtrl.selectNextEvent();\r
529 }\r
530\r
d4011df2 531 @Override\r
b0d3496e
ASL
532 public void selectPrevEvent() {\r
533 _stateCtrl.selectPrevEvent();\r
534 }\r
535\r
d4011df2 536 @Override\r
b0d3496e
ASL
537 public void selectNextTrace() {\r
538 _stateCtrl.selectNextTrace();\r
539 }\r
540\r
d4011df2 541 @Override\r
b0d3496e
ASL
542 public void selectPrevTrace() {\r
543 _stateCtrl.selectPrevTrace();\r
544 }\r
545\r
d4011df2 546 @Override\r
b0d3496e
ASL
547 public void groupTraces(boolean on) {\r
548 _stateCtrl.groupTraces(on);\r
549 }\r
550\r
d4011df2 551 @Override\r
b0d3496e
ASL
552 public void filterTraces() {\r
553 if (_dataViewer == null || _dataViewer.isDisposed())\r
554 return;\r
555\r
556 if (TmfTimeFilterDialog.getTraceFilter(_dataViewer.getShell(), _stateCtrl\r
557 .getTraces(), _stateCtrl.getTraceFilter())) {\r
558 _stateCtrl.refreshData();\r
559 filterOutNotification();\r
560 }\r
561 }\r
562\r
d4011df2 563 @Override\r
b0d3496e
ASL
564 public void showLegend() {\r
565 if (_dataViewer == null || _dataViewer.isDisposed())\r
566 return;\r
567\r
568 TmfTimeLegend.open(_dataViewer.getShell(), _utilImplm);\r
569 }\r
570\r
571 public void toggleThreadsInteractionDrawing() {\r
572 _stateCtrl.toggleTraceInteractionDrawing();\r
573 }\r
574\r
575 public void setThreadJoinDrawing(boolean on) {\r
576 _stateCtrl.setTraceJoinDrawing(on);\r
577 }\r
578\r
579 public void setThreadWaitDrawing(boolean on) {\r
580 _stateCtrl.setTraceWaitDrawing(on);\r
581 }\r
582\r
583 public void setThreadReleaseDrawing(boolean on) {\r
584 _stateCtrl.setTraceReleaseDrawing(on);\r
585 }\r
586\r
587 public boolean getThreadInteractionDrawing() {\r
588 return _stateCtrl.getTracesInteractionDrawing();\r
589 }\r
590\r
591 public boolean getThreadJoinDrawing() {\r
592 return _stateCtrl.getTraceJoinDrawing();\r
593 }\r
594\r
595 public boolean getThreadWaitDrawing() {\r
596 return _stateCtrl.getTraceWaitDrawing();\r
597 }\r
598\r
599 public boolean getThreadReleaseDrawing() {\r
600 return _stateCtrl.getTraceReleaseDrawing();\r
601 }\r
602\r
603 protected void select(Object obj) {\r
604 if (obj == null)\r
605 return;\r
606 // TODO: ThreadDetails Adaption removed, might need replacement\r
607 // if (obj instanceof ThreadDetails) {\r
608 // obj = ((ThreadDetails) obj).getThread();\r
609 // }\r
610 if (obj instanceof ITmfTimeAnalysisEntry) {\r
611 // _stateCtrl.selectThread((TsfTmTrace) obj);\r
612 }\r
613 }\r
614\r
d4011df2 615 @Override\r
b0d3496e
ASL
616 public void zoomIn() {\r
617 _stateCtrl.zoomIn();\r
618 }\r
619\r
d4011df2 620 @Override\r
b0d3496e
ASL
621 public void zoomOut() {\r
622 _stateCtrl.zoomOut();\r
623 }\r
624\r
625 private String getPreferenceString(String string) {\r
3b38ea61 626 return getViewTypeStr() + "." + string; //$NON-NLS-1$\r
b0d3496e
ASL
627 }\r
628\r
d4011df2 629 @Override\r
b0d3496e
ASL
630 public void addWidgetSelectionListner(ITmfTimeSelectionListener listener) {\r
631 widgetSelectionListners.add(listener);\r
632 }\r
633\r
d4011df2 634 @Override\r
b0d3496e
ASL
635 public void removeWidgetSelectionListner(ITmfTimeSelectionListener listener) {\r
636 widgetSelectionListners.removeElement(listener);\r
637 }\r
638\r
d4011df2 639 @Override\r
b0d3496e 640 public void addWidgetTimeScaleSelectionListner(\r
dfaf8391 641 ITmfTimeScaleSelectionListener listener) {\r
b0d3496e
ASL
642 widgetTimeScaleSelectionListners.add(listener);\r
643 }\r
644\r
d4011df2 645 @Override\r
b0d3496e 646 public void removeWidgetTimeScaleSelectionListner(\r
dfaf8391 647 ITmfTimeScaleSelectionListener listener) {\r
b0d3496e
ASL
648 widgetTimeScaleSelectionListners.removeElement(listener);\r
649 }\r
650\r
d4011df2 651 @Override\r
b0d3496e
ASL
652 public void setSelectedTime(long time, boolean ensureVisible, Object source) {\r
653 if (_acceptSetSelAPICalls == false || this == source) {\r
654 return;\r
655 }\r
656\r
657 setSelectedTimeInt(time, ensureVisible);\r
658 }\r
659\r
d4011df2 660 @Override\r
b0d3496e
ASL
661 public void setSelectedEvent(ITimeEvent event, Object source) {\r
662 if (_acceptSetSelAPICalls == false || event == null || source == this) {\r
663 return;\r
664 }\r
665 ITmfTimeAnalysisEntry trace = event.getEntry();\r
666 if (trace != null) {\r
667 _stateCtrl.selectItem(trace, false);\r
668 }\r
669\r
670 setSelectedTimeInt(event.getTime(), true);\r
671 }\r
672\r
d4011df2 673 @Override\r
b0d3496e
ASL
674 public void setSelectedTraceTime(ITmfTimeAnalysisEntry trace, long time, Object source) {\r
675 if (_acceptSetSelAPICalls == false || trace == null || source == this) {\r
676 return;\r
677 }\r
678\r
679 if (trace != null) {\r
680 _stateCtrl.selectItem(trace, false);\r
681 }\r
682\r
683 setSelectedTimeInt(time, true);\r
684 }\r
685\r
d4011df2 686 @Override\r
b0d3496e
ASL
687 public void setSelectedTrace(ITmfTimeAnalysisEntry trace) {\r
688 if (trace == null) {\r
689 return;\r
690 }\r
691\r
692 _stateCtrl.selectItem(trace, false);\r
693 }\r
694\r
6a2ffb7f
ASL
695 /*\r
696 * (non-Javadoc)\r
697 * \r
698 * @see\r
699 * org.eclipse.linuxtools.tmf.ui.viewers.timeAnalysis.ITimeAnalysisViewer\r
700 * #setSelectVisTimeWindow(long, long, java.lang.Object)\r
701 */\r
d4011df2 702 @Override\r
b0d3496e
ASL
703 public void setSelectVisTimeWindow(long time0, long time1, Object source) {\r
704 if (_acceptSetSelAPICalls == false || source == this) {\r
705 return;\r
706 }\r
707\r
71c964eb 708 setStartFinishTime(time0, time1);\r
6a2ffb7f
ASL
709\r
710 // update notification time values since we are now in synch with the\r
711 // external application\r
712 updateExtSynchTimers();\r
b0d3496e
ASL
713 }\r
714\r
d4011df2 715 @Override\r
b0d3496e
ASL
716 public void setAcceptSelectionAPIcalls(boolean acceptCalls) {\r
717 _acceptSetSelAPICalls = acceptCalls;\r
718 }\r
719\r
720 private synchronized void notifySelectionListeners(\r
721 TmfTimeSelectionEvent.type rtype) {\r
722 // Any listeners out there ?\r
723 if (widgetSelectionListners.size() > 0) {\r
724 // Locate the event selected\r
725 ISelection selection = getSelection();\r
726 Object sel = null;\r
727 if (selection != null && !selection.isEmpty()) {\r
728 sel = ((IStructuredSelection) selection).getFirstElement();\r
729 }\r
730\r
731 if (sel != null) {\r
732 // Notify Selection Listeners\r
733 TmfTimeSelectionEvent event = new TmfTimeSelectionEvent(this,\r
734 rtype, sel, getSelectedTime());\r
735\r
736 for (Iterator<ITmfTimeSelectionListener> iter = widgetSelectionListners\r
737 .iterator(); iter.hasNext();) {\r
738 ITmfTimeSelectionListener listener = (ITmfTimeSelectionListener) iter\r
739 .next();\r
740 listener.tsfTmProcessSelEvent(event);\r
741 }\r
742 }\r
743 }\r
744 }\r
745\r
746 public void notifyStartFinishTimeSelectionListeners(long _time0, long _time1) {\r
747 if (widgetTimeScaleSelectionListners.size() > 0) {\r
71c964eb 748 // Check if the time has actually changed from last notification\r
6a2ffb7f 749 if (_time0 != _time0_extSynch || _time1 != _time1_extSynch) {\r
71c964eb
ASL
750 // Notify Time Scale Selection Listeners\r
751 TmfTimeScaleSelectionEvent event = new TmfTimeScaleSelectionEvent(\r
752 this, _time0, _time1, getTimeSpace(), getSelectedTime());\r
753\r
754 for (Iterator<ITmfTimeScaleSelectionListener> iter = widgetTimeScaleSelectionListners\r
755 .iterator(); iter.hasNext();) {\r
756 ITmfTimeScaleSelectionListener listener = (ITmfTimeScaleSelectionListener) iter\r
757 .next();\r
758 listener.tsfTmProcessTimeScaleEvent(event);\r
759 }\r
760\r
6a2ffb7f
ASL
761 // update external synch timers\r
762 updateExtSynchTimers();\r
b0d3496e
ASL
763 }\r
764 }\r
765 }\r
766\r
6a2ffb7f
ASL
767 /**\r
768 * update the cache timers used to identify the need to send a time window\r
769 * update to external registered listeners\r
770 */\r
771 private void updateExtSynchTimers() {\r
772 // last time notification cache\r
773 _time0_extSynch = _time0;\r
774 _time1_extSynch = _time1;\r
775 }\r
776\r
d4011df2 777 @Override\r
b0d3496e
ASL
778 public void setTimeCalendarFormat(boolean toAbsoluteCaltime) {\r
779 calendarTimeFormat = toAbsoluteCaltime;\r
780 }\r
781\r
d4011df2 782 @Override\r
b0d3496e
ASL
783 public boolean isCalendarFormat() {\r
784 return calendarTimeFormat;\r
785 }\r
786\r
d4011df2 787 @Override\r
b0d3496e 788 public int getBorderWidth() {\r
a5823d5f 789 return borderWidth;\r
b0d3496e
ASL
790 }\r
791\r
d4011df2 792 @Override\r
b0d3496e
ASL
793 public void setBorderWidth(int borderWidth) {\r
794 if (borderWidth > -1) {\r
a5823d5f
ASL
795 this.borderWidth = borderWidth;\r
796 GridLayout gl = (GridLayout)_dataViewer.getLayout();\r
797 gl.marginHeight = borderWidth;\r
b0d3496e
ASL
798 }\r
799 }\r
800\r
d4011df2 801 @Override\r
b0d3496e
ASL
802 public int getHeaderHeight() {\r
803 return timeScaleHeight;\r
804 }\r
805\r
d4011df2 806 @Override\r
b0d3496e
ASL
807 public void setHeaderHeight(int headerHeight) {\r
808 if (headerHeight > -1) {\r
809 this.timeScaleHeight = headerHeight;\r
a5823d5f 810 _timeScaleCtrl.setHeight(headerHeight);\r
b0d3496e
ASL
811 }\r
812 }\r
813\r
d4011df2 814 @Override\r
b0d3496e
ASL
815 public int getItemHeight() {\r
816 if (_stateCtrl != null) {\r
817 return _stateCtrl.getItemHeight();\r
818 }\r
819 return 0;\r
820 }\r
821\r
d4011df2 822 @Override\r
b0d3496e
ASL
823 public void setItemHeight(int rowHeight) {\r
824 if (_stateCtrl != null) {\r
825 _stateCtrl.setItemHeight(rowHeight);\r
826 }\r
827 }\r
828\r
ce62370f
FC
829 @Override\r
830 public void setMinimumItemWidth(int width) {\r
831 if (_stateCtrl != null) {\r
832 _stateCtrl.setMinimumItemWidth(width);\r
833 }\r
834 }\r
835 \r
d4011df2 836 @Override\r
b0d3496e
ASL
837 public boolean isVisibleVerticalScroll() {\r
838 if (_stateCtrl != null) {\r
839 _stateCtrl.isVisibleVerticalScroll();\r
840 }\r
841 return false;\r
842 }\r
843\r
d4011df2 844 @Override\r
b0d3496e
ASL
845 public void setVisibleVerticalScroll(boolean visibleVerticalScroll) {\r
846 if (_stateCtrl != null) {\r
847 _stateCtrl.setVisibleVerticalScroll(visibleVerticalScroll);\r
848 }\r
849 }\r
850\r
d4011df2 851 @Override\r
b0d3496e
ASL
852 public void setNameWidthPref(int width) {\r
853 _nameWidthPref = width;\r
854 if (width == 0) {\r
855 _minNameWidth = 0;\r
856 }\r
857 }\r
858\r
d4011df2 859 @Override\r
b0d3496e
ASL
860 public int getNameWidthPref(int width) {\r
861 return _nameWidthPref;\r
862 }\r
863\r
d4011df2 864 @Override\r
b0d3496e
ASL
865 public void addFilterSelectionListner(ITmfTimeFilterSelectionListener listener) {\r
866 widgetFilterSelectionListeners.add(listener);\r
867 }\r
868\r
d4011df2 869 @Override\r
b0d3496e
ASL
870 public void removeFilterSelectionListner(\r
871 ITmfTimeFilterSelectionListener listener) {\r
872 widgetFilterSelectionListeners.remove(listener);\r
873 }\r
874\r
875 private void filterOutNotification() {\r
876 TmfTimeFilterSelectionEvent event = new TmfTimeFilterSelectionEvent(this);\r
877 event.setFilteredOut(_stateCtrl.getFilteredOut());\r
878 for (ITmfTimeFilterSelectionListener listener : widgetFilterSelectionListeners) {\r
879 listener.tmfTaProcessFilterSelection(event);\r
880 }\r
881 }\r
882\r
883 /**\r
884 * needed in case there's a need to associate a context menu\r
885 * \r
886 * @return\r
887 */\r
d4011df2 888 @Override\r
b0d3496e
ASL
889 public Control getControl() {\r
890 return _stateCtrl;\r
891 }\r
892\r
893 /**\r
894 * Get the selection provider\r
895 * \r
896 * @return\r
897 */\r
d4011df2 898 @Override\r
b0d3496e
ASL
899 public ISelectionProvider getSelectionProvider() {\r
900 return _stateCtrl;\r
901 }\r
41dc35d0
FC
902\r
903 /*\r
904 * (non-Javadoc)\r
905 * \r
906 * @see\r
907 * org.eclipse.linuxtools.tmf.ui.viewers.timeAnalysis.ITimeAnalysisViewer\r
908 * #waitCursor(boolean)\r
909 */\r
d4011df2 910 @Override\r
41dc35d0
FC
911 public void waitCursor(boolean waitInd) {\r
912 _stateCtrl.waitCursor(waitInd);\r
913 }\r
b0d3496e 914}\r
This page took 0.104649 seconds and 5 git commands to generate.