[290968] Contribution
[deliverable/tracecompass.git] / org.eclipse.linuxtools.tmf.ui / src / org / eclipse / linuxtools / tmf / ui / viewers / timeAnalysis / TmfTimeAnalysisViewer.java
CommitLineData
b0d3496e 1/*****************************************************************************\r
79a3a76e 2 * Copyright (c) 2007, 2008, 2009 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
20import java.util.List;\r
21import java.util.Vector;\r
22\r
23import org.eclipse.jface.viewers.ISelection;\r
24import org.eclipse.jface.viewers.ISelectionProvider;\r
25import org.eclipse.jface.viewers.IStructuredSelection;\r
26import org.eclipse.linuxtools.tmf.ui.viewers.timeAnalysis.dialogs.TmfTimeFilterDialog;\r
27import org.eclipse.linuxtools.tmf.ui.viewers.timeAnalysis.dialogs.TmfTimeLegend;\r
28import org.eclipse.linuxtools.tmf.ui.viewers.timeAnalysis.model.ITimeEvent;\r
29import org.eclipse.linuxtools.tmf.ui.viewers.timeAnalysis.model.ITmfTimeAnalysisEntry;\r
41dc35d0 30import org.eclipse.linuxtools.tmf.ui.viewers.timeAnalysis.model.TimeEvent;\r
b0d3496e
ASL
31import org.eclipse.linuxtools.tmf.ui.viewers.timeAnalysis.widgets.ITimeDataProvider;\r
32import org.eclipse.linuxtools.tmf.ui.viewers.timeAnalysis.widgets.TimeScaleCtrl;\r
79a3a76e 33import org.eclipse.linuxtools.tmf.ui.viewers.timeAnalysis.widgets.TmfTimeStatesCtrl;\r
41dc35d0 34import org.eclipse.linuxtools.tmf.ui.viewers.timeAnalysis.widgets.TmfTimeTipHandler;\r
b0d3496e
ASL
35import org.eclipse.linuxtools.tmf.ui.viewers.timeAnalysis.widgets.TraceColorScheme;\r
36import org.eclipse.linuxtools.tmf.ui.viewers.timeAnalysis.widgets.Utils;\r
37import org.eclipse.swt.SWT;\r
38import org.eclipse.swt.events.ControlAdapter;\r
39import org.eclipse.swt.events.ControlEvent;\r
40import org.eclipse.swt.events.SelectionEvent;\r
41import org.eclipse.swt.events.SelectionListener;\r
42import org.eclipse.swt.graphics.Rectangle;\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
b0d3496e
ASL
57 private boolean _timeRangeFixed;\r
58 private int _nameWidthPref = 200;\r
59 private int _minNameWidth = 6;\r
60 private int _nameWidth;\r
61 private Composite _dataViewer;\r
62\r
63 private TmfTimeStatesCtrl _stateCtrl;\r
64 private TimeScaleCtrl _timeScaleCtrl;\r
65 private TmfTimeTipHandler _threadTip;\r
66 private TraceColorScheme _colors;\r
67 private TmfTimeAnalysisProvider _utilImplm;\r
68\r
69 private boolean _acceptSetSelAPICalls = false;\r
70 Vector<ITmfTimeSelectionListener> widgetSelectionListners = new Vector<ITmfTimeSelectionListener>();\r
dfaf8391 71 Vector<ITmfTimeScaleSelectionListener> widgetTimeScaleSelectionListners = new Vector<ITmfTimeScaleSelectionListener>();\r
b0d3496e
ASL
72 Vector<ITmfTimeFilterSelectionListener> widgetFilterSelectionListeners = new Vector<ITmfTimeFilterSelectionListener>();\r
73\r
74 // Calender Time format, using Epoch reference or Relative time\r
75 // format(default\r
76 private boolean calendarTimeFormat = false;\r
79a3a76e 77 private int timeScaleBoderWidth = 4;\r
b0d3496e
ASL
78 private int timeScaleHeight = 22;\r
79\r
80 /** ctor */\r
81 public TmfTimeAnalysisViewer(Composite parent, TmfTimeAnalysisProvider provider) {\r
82 createDataViewer(parent, provider);\r
83 }\r
84\r
85 /* (non-Javadoc)\r
86 * @see org.eclipse.linuxtools.tmf.ui.widgets.timeAnalysis.api.ITimeAnalysisWidget#display(org.eclipse.linuxtools.tmf.ui.widgets.timeAnalysis.model.TmfTaTrace[])\r
87 */\r
88 public void display(ITmfTimeAnalysisEntry[] traceArr) {\r
89 modelUpdate(traceArr);\r
90 }\r
91\r
79a3a76e
FC
92 public void display(ITmfTimeAnalysisEntry[] traceArr, long start, long end) {\r
93 modelUpdate(traceArr, start, end);\r
b0d3496e
ASL
94 }\r
95\r
96 public void controlMoved(ControlEvent e) {\r
97 }\r
98\r
99 public void controlResized(ControlEvent e) {\r
100 resizeControls();\r
101 }\r
102\r
103 // called from the display order in the API\r
104 public void modelUpdate(ITmfTimeAnalysisEntry[] traces) {\r
105 if (null != _stateCtrl) {\r
106 loadOptions();\r
107 updateInternalData(traces);\r
108 _stateCtrl.redraw();\r
109 _timeScaleCtrl.redraw();\r
110 }\r
111 }\r
112\r
113 // called from the display order in the API\r
79a3a76e 114 public void modelUpdate(ITmfTimeAnalysisEntry[] traces, long start, long end) {\r
b0d3496e
ASL
115 if (null != _stateCtrl) {\r
116 loadOptions();\r
117 updateInternalData(traces, start, end);\r
79a3a76e
FC
118 _stateCtrl.redraw();\r
119 _timeScaleCtrl.redraw();\r
b0d3496e
ASL
120 }\r
121 }\r
122\r
123 public void itemUpdate(ITmfTimeAnalysisEntry parent, TimeEvent item) {\r
124 if (null != parent && null != item) {\r
125 _stateCtrl.refreshPartial(parent, item);\r
126 _stateCtrl.redraw();\r
127 _timeScaleCtrl.redraw();\r
128 }\r
129 }\r
130\r
131 public void selectionChanged() {\r
132 }\r
133\r
134 protected String getViewTypeStr() {\r
135 return "viewoption.threads";\r
136 }\r
137\r
138 int getMarginWidth(int idx) {\r
139 return 0;\r
140 }\r
141\r
142 int getMarginHeight(int idx) {\r
143 return 0;\r
144 }\r
145\r
146 void loadOptions() {\r
79a3a76e 147 _minTimeInterval = 500;\r
b0d3496e
ASL
148 _selectedTime = -1;\r
149 _nameWidth = Utils.loadIntOption(getPreferenceString("namewidth"),\r
150 _nameWidthPref, _minNameWidth, 1000);\r
151 }\r
152\r
153 void saveOptions() {\r
154 Utils.saveIntOption(getPreferenceString("namewidth"), _nameWidth);\r
155 }\r
156\r
157 protected Control createDataViewer(Composite parent,\r
158 TmfTimeAnalysisProvider utilImplm) {\r
159 loadOptions();\r
160 _utilImplm = utilImplm;\r
161 _colors = new TraceColorScheme();\r
162 _dataViewer = new Composite(parent, SWT.NULL);\r
163 _dataViewer.setLayoutData(GridUtil.createFill());\r
b0d3496e
ASL
164\r
165 _timeScaleCtrl = new TimeScaleCtrl(_dataViewer, _colors);\r
166 _timeScaleCtrl.setTimeProvider(this);\r
79a3a76e 167 _timeScaleCtrl.setLayoutData(GridUtil.createFill());\r
b0d3496e
ASL
168\r
169 _stateCtrl = new TmfTimeStatesCtrl(_dataViewer, _colors, _utilImplm);\r
170\r
171 _stateCtrl.setTimeProvider(this);\r
172 _stateCtrl.addSelectionListener(this);\r
173 _stateCtrl.setLayoutData(GridUtil.createFill());\r
174 _dataViewer.addControlListener(new ControlAdapter() {\r
4e3aa37d 175 @Override\r
b0d3496e
ASL
176 public void controlResized(ControlEvent event) {\r
177 resizeControls();\r
178 }\r
179 });\r
180 resizeControls();\r
181 _dataViewer.update();\r
182 _threadTip = new TmfTimeTipHandler(parent.getShell(), _utilImplm, this);\r
183 _threadTip.activateHoverHelp(_stateCtrl);\r
184 return _dataViewer;\r
185 }\r
186\r
187 public void dispose() {\r
188 saveOptions();\r
189 _stateCtrl.dispose();\r
190 _dataViewer.dispose();\r
191 _colors.dispose();\r
192 }\r
193\r
194 public void resizeControls() {\r
195 Rectangle r = _dataViewer.getClientArea();\r
196 if (r.isEmpty())\r
197 return;\r
198\r
79a3a76e
FC
199 // System.out.println("Client Area:" + r);\r
200 // timeScaleBoderWidth = 8;\r
201 // timeScaleHeight = 22;\r
202 _timeScaleCtrl.setBounds(r.x, r.y + timeScaleBoderWidth, r.width,\r
203 timeScaleHeight);\r
204 _stateCtrl.setBounds(r.x, r.y + timeScaleBoderWidth + timeScaleHeight,\r
205 r.width, r.height - timeScaleBoderWidth - timeScaleHeight);\r
b0d3496e
ASL
206 int width = r.width;\r
207 if (_nameWidth > width - _minNameWidth)\r
208 _nameWidth = width - _minNameWidth;\r
209 if (_nameWidth < _minNameWidth)\r
210 _nameWidth = _minNameWidth;\r
211 }\r
212\r
79a3a76e 213 /** Tries to set most convinient time range for display. */\r
b0d3496e
ASL
214 void setTimeRange(Object traces[]) {\r
215 _endTime = 0;\r
216 _beginTime = -1;\r
217 ITimeEvent event;\r
218 for (int i = 0; i < traces.length; i++) {\r
79a3a76e
FC
219 ITmfTimeAnalysisEntry thread = (ITmfTimeAnalysisEntry) traces[i];\r
220 long lastEventTime = thread.getStopTime();\r
221 if (lastEventTime > thread.getStartTime()) {\r
222 if (lastEventTime > _endTime)\r
223 _endTime = lastEventTime;\r
b0d3496e 224 }\r
79a3a76e 225 List<TimeEvent> list = thread.getTraceEvents();\r
b0d3496e
ASL
226 int len = list.size();\r
227 if (len > 0) {\r
b0d3496e 228 event = (ITimeEvent) list.get(list.size() - 1);\r
79a3a76e
FC
229 lastEventTime = event.getTime();\r
230 if (lastEventTime > _endTime) {\r
231 _endTime = lastEventTime;\r
232 long duration = event.getDuration();\r
233 _endTime += duration > 0 ? duration : 1000000;\r
b0d3496e 234 }\r
79a3a76e
FC
235 event = (ITimeEvent) list.get(0);\r
236 if (_beginTime < 0 || _beginTime > event.getTime())\r
237 _beginTime = event.getTime();\r
b0d3496e
ASL
238 }\r
239 }\r
240\r
241 if (_beginTime < 0)\r
242 _beginTime = 0;\r
243 }\r
244\r
245 void setTimeBounds() {\r
79a3a76e 246 _time0_ = _beginTime - (long) ((_endTime - _beginTime) * 0.05);\r
b0d3496e
ASL
247 if (_time0_ < 0)\r
248 _time0_ = 0;\r
249 // _time1_ = _time0_ + (_endTime - _time0_) * 1.05;\r
250 _time1_ = _endTime;\r
251 // _time0_ = Math.floor(_time0_);\r
252 // _time1_ = Math.ceil(_time1_);\r
253 if (!_timeRangeFixed) {\r
254 _time0 = _time0_;\r
255 _time1 = _time1_;\r
256 }\r
b0d3496e
ASL
257 }\r
258\r
259 /**\r
260 * @param traces\r
261 */\r
262 void updateInternalData(ITmfTimeAnalysisEntry[] traces) {\r
263 if (null == traces)\r
264 traces = new ITmfTimeAnalysisEntry[0];\r
265 setTimeRange(traces);\r
266 refreshAllData(traces);\r
267 }\r
268\r
269 /**\r
270 * @param traces\r
271 * @param start\r
272 * @param end\r
273 */\r
274 void updateInternalData(ITmfTimeAnalysisEntry[] traces, long start, long end) {\r
275 if (null == traces)\r
276 traces = new ITmfTimeAnalysisEntry[0];\r
79a3a76e
FC
277 if (end < 1 || start < 1) {\r
278 // End or start time are unspecified\r
b0d3496e
ASL
279 setTimeRange(traces);\r
280 } else {\r
b0d3496e 281 _endTime = end;\r
79a3a76e 282 _beginTime = start;\r
b0d3496e
ASL
283 }\r
284\r
285 refreshAllData(traces);\r
286 }\r
287\r
288 /**\r
289 * @param traces\r
290 */\r
291 private void refreshAllData(ITmfTimeAnalysisEntry[] traces) {\r
292 setTimeBounds();\r
79a3a76e
FC
293 if (_selectedTime < 0 || _selectedTime > _endTime)\r
294 _selectedTime = _endTime;\r
b0d3496e
ASL
295 _stateCtrl.refreshData(traces);\r
296 filterOutNotification();\r
297 }\r
298\r
299 public void setFocus() {\r
300 if (null != _stateCtrl)\r
301 _stateCtrl.setFocus();\r
302 }\r
303\r
304 public boolean isInFocus() {\r
305 return _stateCtrl.isInFocus();\r
306 }\r
307\r
308 public ITmfTimeAnalysisEntry getSelectedTrace() {\r
309 return _stateCtrl.getSelectedTrace();\r
310 }\r
311\r
312 public ISelection getSelection() {\r
313 return _stateCtrl.getSelection();\r
314 }\r
315\r
316 public ISelection getSelectionTrace() {\r
317 return _stateCtrl.getSelectionTrace();\r
318 }\r
319\r
320 public long getTime0() {\r
321 return _time0;\r
322 }\r
323\r
324 public long getTime1() {\r
325 return _time1;\r
326 }\r
327\r
328 public long getMinTimeInterval() {\r
329 return _minTimeInterval;\r
330 }\r
331\r
332 public int getNameSpace() {\r
333 return _nameWidth;\r
334 }\r
335\r
336 public void setNameSpace(int width) {\r
337 _nameWidth = width;\r
338 width = _stateCtrl.getClientArea().width;\r
339 if (_nameWidth > width - 6)\r
340 _nameWidth = width - 6;\r
341 if (_nameWidth < 6)\r
342 _nameWidth = 6;\r
343 _stateCtrl.adjustScrolls();\r
344 _stateCtrl.redraw();\r
345 _timeScaleCtrl.redraw();\r
346 }\r
347\r
348 public int getTimeSpace() {\r
349 int w = _stateCtrl.getClientArea().width;\r
350 return w - _nameWidth;\r
351 }\r
352\r
353 public long getSelectedTime() {\r
354 return _selectedTime;\r
355 }\r
356\r
357 public long getBeginTime() {\r
358 return _beginTime;\r
359 }\r
360\r
361 public long getEndTime() {\r
362 return _endTime;\r
363 }\r
364\r
365 public long getMaxTime() {\r
366 return _time1_;\r
367 }\r
368\r
369 public long getMinTime() {\r
370 return _time0_;\r
371 }\r
372\r
79a3a76e
FC
373 public void setStartFinishTime(long time0, long time1) {\r
374 setStartFinishTimeExt(time0, time1);\r
b0d3496e
ASL
375 notifyStartFinishTimeSelectionListeners(time0, time1);\r
376 }\r
377\r
79a3a76e 378 public void setStartFinishTimeExt(long time0, long time1) {\r
b0d3496e 379 _time0 = time0;\r
79a3a76e
FC
380 if (_time0 < _time0_)\r
381 _time0 = _time0_;\r
b0d3496e 382 _time1 = time1;\r
b0d3496e 383 if (_time1 - _time0 < _minTimeInterval)\r
79a3a76e
FC
384 _time1 = _time0 + _minTimeInterval;\r
385 if (_time1 > _time1_)\r
386 _time1 = _time1_;\r
b0d3496e
ASL
387 _timeRangeFixed = true;\r
388 _stateCtrl.adjustScrolls();\r
389 _stateCtrl.redraw();\r
390 _timeScaleCtrl.redraw();\r
391 }\r
392\r
393 public void resetStartFinishTime() {\r
79a3a76e 394 setStartFinishTime(_time0_, _time1_);\r
b0d3496e
ASL
395 _timeRangeFixed = false;\r
396 }\r
397\r
398 public void setSelectedTimeInt(long time, boolean ensureVisible) {\r
399 // Trace.debug("currentTime:" + _selectedTime + " new time:" + time);\r
400 _selectedTime = time;\r
401 if (_selectedTime > _endTime)\r
402 _selectedTime = _endTime;\r
403 if (_selectedTime < _beginTime)\r
404 _selectedTime = _beginTime;\r
405 if (ensureVisible) {\r
406 double timeSpace = (_time1 - _time0) * .02;\r
407 double timeMid = (_time1 - _time0) * .1;\r
408 if (_selectedTime < _time0 + timeSpace) {\r
409 double dt = _time0 - _selectedTime + timeMid;\r
410 _time0 -= dt;\r
411 _time1 -= dt;\r
412 } else if (_selectedTime > _time1 - timeSpace) {\r
413 double dt = _selectedTime - _time1 + timeMid;\r
414 _time0 += dt;\r
415 _time1 += dt;\r
416 }\r
79a3a76e
FC
417 if (_time0 < 0) {\r
418 _time1 -= _time0;\r
419 _time0 = 0;\r
b0d3496e
ASL
420 } else if (_time1 > _time1_) {\r
421 _time0 -= _time1 - _time1_;\r
422 _time1 = _time1_;\r
423 }\r
424 }\r
425 _stateCtrl.adjustScrolls();\r
426 _stateCtrl.redraw();\r
427 _timeScaleCtrl.redraw();\r
428 }\r
429\r
430 public void widgetDefaultSelected(SelectionEvent e) {\r
431 // TODO: Opening call stack shall be replaced to a configurable view\r
432 // new OpenCallStackViewAction().openView(false);\r
433 // Replaced by event notification\r
434 // updateModelSelection();\r
435 notifySelectionListeners(TmfTimeSelectionEvent.type.WIDGET_DEF_SEL);\r
436 }\r
437\r
438 public void widgetSelected(SelectionEvent e) {\r
439 // Replace by event notification\r
440 // updateModelSelection();\r
441 notifySelectionListeners(TmfTimeSelectionEvent.type.WIDGET_SEL);\r
442 }\r
443\r
444 public void selectNextEvent() {\r
445 _stateCtrl.selectNextEvent();\r
446 }\r
447\r
448 public void selectPrevEvent() {\r
449 _stateCtrl.selectPrevEvent();\r
450 }\r
451\r
452 public void selectNextTrace() {\r
453 _stateCtrl.selectNextTrace();\r
454 }\r
455\r
456 public void selectPrevTrace() {\r
457 _stateCtrl.selectPrevTrace();\r
458 }\r
459\r
460 public void groupTraces(boolean on) {\r
461 _stateCtrl.groupTraces(on);\r
462 }\r
463\r
464 public void filterTraces() {\r
465 if (_dataViewer == null || _dataViewer.isDisposed())\r
466 return;\r
467\r
468 if (TmfTimeFilterDialog.getTraceFilter(_dataViewer.getShell(), _stateCtrl\r
469 .getTraces(), _stateCtrl.getTraceFilter())) {\r
470 _stateCtrl.refreshData();\r
471 filterOutNotification();\r
472 }\r
473 }\r
474\r
475 public void showLegend() {\r
476 if (_dataViewer == null || _dataViewer.isDisposed())\r
477 return;\r
478\r
479 TmfTimeLegend.open(_dataViewer.getShell(), _utilImplm);\r
480 }\r
481\r
482 public void toggleThreadsInteractionDrawing() {\r
483 _stateCtrl.toggleTraceInteractionDrawing();\r
484 }\r
485\r
486 public void setThreadJoinDrawing(boolean on) {\r
487 _stateCtrl.setTraceJoinDrawing(on);\r
488 }\r
489\r
490 public void setThreadWaitDrawing(boolean on) {\r
491 _stateCtrl.setTraceWaitDrawing(on);\r
492 }\r
493\r
494 public void setThreadReleaseDrawing(boolean on) {\r
495 _stateCtrl.setTraceReleaseDrawing(on);\r
496 }\r
497\r
498 public boolean getThreadInteractionDrawing() {\r
499 return _stateCtrl.getTracesInteractionDrawing();\r
500 }\r
501\r
502 public boolean getThreadJoinDrawing() {\r
503 return _stateCtrl.getTraceJoinDrawing();\r
504 }\r
505\r
506 public boolean getThreadWaitDrawing() {\r
507 return _stateCtrl.getTraceWaitDrawing();\r
508 }\r
509\r
510 public boolean getThreadReleaseDrawing() {\r
511 return _stateCtrl.getTraceReleaseDrawing();\r
512 }\r
513\r
514 protected void select(Object obj) {\r
515 if (obj == null)\r
516 return;\r
517 // TODO: ThreadDetails Adaption removed, might need replacement\r
518 // if (obj instanceof ThreadDetails) {\r
519 // obj = ((ThreadDetails) obj).getThread();\r
520 // }\r
521 if (obj instanceof ITmfTimeAnalysisEntry) {\r
522 // _stateCtrl.selectThread((TsfTmTrace) obj);\r
523 }\r
524 }\r
525\r
526 public void zoomIn() {\r
527 _stateCtrl.zoomIn();\r
528 }\r
529\r
530 public void zoomOut() {\r
531 _stateCtrl.zoomOut();\r
532 }\r
533\r
534 private String getPreferenceString(String string) {\r
535 return getViewTypeStr() + "." + string;\r
536 }\r
537\r
538 public void addWidgetSelectionListner(ITmfTimeSelectionListener listener) {\r
539 widgetSelectionListners.add(listener);\r
540 }\r
541\r
542 public void removeWidgetSelectionListner(ITmfTimeSelectionListener listener) {\r
543 widgetSelectionListners.removeElement(listener);\r
544 }\r
545\r
546 public void addWidgetTimeScaleSelectionListner(\r
dfaf8391 547 ITmfTimeScaleSelectionListener listener) {\r
b0d3496e
ASL
548 widgetTimeScaleSelectionListners.add(listener);\r
549 }\r
550\r
551 public void removeWidgetTimeScaleSelectionListner(\r
dfaf8391 552 ITmfTimeScaleSelectionListener listener) {\r
b0d3496e
ASL
553 widgetTimeScaleSelectionListners.removeElement(listener);\r
554 }\r
555\r
556 public void setSelectedTime(long time, boolean ensureVisible, Object source) {\r
557 if (_acceptSetSelAPICalls == false || this == source) {\r
558 return;\r
559 }\r
560\r
561 setSelectedTimeInt(time, ensureVisible);\r
562 }\r
563\r
564 public void setSelectedEvent(ITimeEvent event, Object source) {\r
565 if (_acceptSetSelAPICalls == false || event == null || source == this) {\r
566 return;\r
567 }\r
568 ITmfTimeAnalysisEntry trace = event.getEntry();\r
569 if (trace != null) {\r
570 _stateCtrl.selectItem(trace, false);\r
571 }\r
572\r
573 setSelectedTimeInt(event.getTime(), true);\r
574 }\r
575\r
576 public void setSelectedTraceTime(ITmfTimeAnalysisEntry trace, long time, Object source) {\r
577 if (_acceptSetSelAPICalls == false || trace == null || source == this) {\r
578 return;\r
579 }\r
580\r
581 if (trace != null) {\r
582 _stateCtrl.selectItem(trace, false);\r
583 }\r
584\r
585 setSelectedTimeInt(time, true);\r
586 }\r
587\r
588 public void setSelectedTrace(ITmfTimeAnalysisEntry trace) {\r
589 if (trace == null) {\r
590 return;\r
591 }\r
592\r
593 _stateCtrl.selectItem(trace, false);\r
594 }\r
595\r
b0d3496e
ASL
596 public void setSelectVisTimeWindow(long time0, long time1, Object source) {\r
597 if (_acceptSetSelAPICalls == false || source == this) {\r
598 return;\r
599 }\r
600\r
79a3a76e 601 setStartFinishTimeExt(time0, time1);\r
b0d3496e
ASL
602 }\r
603\r
604 public void setAcceptSelectionAPIcalls(boolean acceptCalls) {\r
605 _acceptSetSelAPICalls = acceptCalls;\r
606 }\r
607\r
608 private synchronized void notifySelectionListeners(\r
609 TmfTimeSelectionEvent.type rtype) {\r
610 // Any listeners out there ?\r
611 if (widgetSelectionListners.size() > 0) {\r
612 // Locate the event selected\r
613 ISelection selection = getSelection();\r
614 Object sel = null;\r
615 if (selection != null && !selection.isEmpty()) {\r
616 sel = ((IStructuredSelection) selection).getFirstElement();\r
617 }\r
618\r
619 if (sel != null) {\r
620 // Notify Selection Listeners\r
621 TmfTimeSelectionEvent event = new TmfTimeSelectionEvent(this,\r
622 rtype, sel, getSelectedTime());\r
623\r
624 for (Iterator<ITmfTimeSelectionListener> iter = widgetSelectionListners\r
625 .iterator(); iter.hasNext();) {\r
626 ITmfTimeSelectionListener listener = (ITmfTimeSelectionListener) iter\r
627 .next();\r
628 listener.tsfTmProcessSelEvent(event);\r
629 }\r
630 }\r
631 }\r
632 }\r
633\r
634 public void notifyStartFinishTimeSelectionListeners(long _time0, long _time1) {\r
635 if (widgetTimeScaleSelectionListners.size() > 0) {\r
79a3a76e 636 // Notify Time Scale Selection Listeners\r
4e3aa37d 637 TmfTimeScaleSelectionEvent event = new TmfTimeScaleSelectionEvent(\r
79a3a76e
FC
638 this, _time0, _time1, getTimeSpace(), getSelectedTime());\r
639\r
dfaf8391 640 for (Iterator<ITmfTimeScaleSelectionListener> iter = widgetTimeScaleSelectionListners\r
79a3a76e 641 .iterator(); iter.hasNext();) {\r
dfaf8391 642 ITmfTimeScaleSelectionListener listener = (ITmfTimeScaleSelectionListener) iter\r
79a3a76e
FC
643 .next();\r
644 listener.tsfTmProcessTimeScaleEvent(event);\r
b0d3496e
ASL
645 }\r
646 }\r
647 }\r
648\r
b0d3496e
ASL
649 public void setTimeCalendarFormat(boolean toAbsoluteCaltime) {\r
650 calendarTimeFormat = toAbsoluteCaltime;\r
651 }\r
652\r
653 public boolean isCalendarFormat() {\r
654 return calendarTimeFormat;\r
655 }\r
656\r
657 public int getBorderWidth() {\r
79a3a76e 658 return timeScaleBoderWidth;\r
b0d3496e
ASL
659 }\r
660\r
661 public void setBorderWidth(int borderWidth) {\r
662 if (borderWidth > -1) {\r
79a3a76e 663 this.timeScaleBoderWidth = borderWidth;\r
b0d3496e
ASL
664 }\r
665 }\r
666\r
667 public int getHeaderHeight() {\r
668 return timeScaleHeight;\r
669 }\r
670\r
671 public void setHeaderHeight(int headerHeight) {\r
672 if (headerHeight > -1) {\r
673 this.timeScaleHeight = headerHeight;\r
b0d3496e
ASL
674 }\r
675 }\r
676\r
677 public int getItemHeight() {\r
678 if (_stateCtrl != null) {\r
679 return _stateCtrl.getItemHeight();\r
680 }\r
681 return 0;\r
682 }\r
683\r
684 public void setItemHeight(int rowHeight) {\r
685 if (_stateCtrl != null) {\r
686 _stateCtrl.setItemHeight(rowHeight);\r
687 }\r
688 }\r
689\r
690 public boolean isVisibleVerticalScroll() {\r
691 if (_stateCtrl != null) {\r
692 _stateCtrl.isVisibleVerticalScroll();\r
693 }\r
694 return false;\r
695 }\r
696\r
697 public void setVisibleVerticalScroll(boolean visibleVerticalScroll) {\r
698 if (_stateCtrl != null) {\r
699 _stateCtrl.setVisibleVerticalScroll(visibleVerticalScroll);\r
700 }\r
701 }\r
702\r
703 public void setNameWidthPref(int width) {\r
704 _nameWidthPref = width;\r
705 if (width == 0) {\r
706 _minNameWidth = 0;\r
707 }\r
708 }\r
709\r
710 public int getNameWidthPref(int width) {\r
711 return _nameWidthPref;\r
712 }\r
713\r
714 public void addFilterSelectionListner(ITmfTimeFilterSelectionListener listener) {\r
715 widgetFilterSelectionListeners.add(listener);\r
716 }\r
717\r
718 public void removeFilterSelectionListner(\r
719 ITmfTimeFilterSelectionListener listener) {\r
720 widgetFilterSelectionListeners.remove(listener);\r
721 }\r
722\r
723 private void filterOutNotification() {\r
724 TmfTimeFilterSelectionEvent event = new TmfTimeFilterSelectionEvent(this);\r
725 event.setFilteredOut(_stateCtrl.getFilteredOut());\r
726 for (ITmfTimeFilterSelectionListener listener : widgetFilterSelectionListeners) {\r
727 listener.tmfTaProcessFilterSelection(event);\r
728 }\r
729 }\r
730\r
731 /**\r
732 * needed in case there's a need to associate a context menu\r
733 * \r
734 * @return\r
735 */\r
736 public Control getControl() {\r
737 return _stateCtrl;\r
738 }\r
739\r
740 /**\r
741 * Get the selection provider\r
742 * \r
743 * @return\r
744 */\r
745 public ISelectionProvider getSelectionProvider() {\r
746 return _stateCtrl;\r
747 }\r
41dc35d0
FC
748\r
749 /*\r
750 * (non-Javadoc)\r
751 * \r
752 * @see\r
753 * org.eclipse.linuxtools.tmf.ui.viewers.timeAnalysis.ITimeAnalysisViewer\r
754 * #waitCursor(boolean)\r
755 */\r
756 public void waitCursor(boolean waitInd) {\r
757 _stateCtrl.waitCursor(waitInd);\r
758 }\r
b0d3496e 759}\r
This page took 0.057456 seconds and 5 git commands to generate.