Commit | Line | Data |
---|---|---|
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 | |
17 | package org.eclipse.linuxtools.tmf.ui.viewers.timeAnalysis;\r | |
18 | \r | |
19 | import java.util.Iterator;\r | |
20 | import java.util.List;\r | |
21 | import java.util.Vector;\r | |
22 | \r | |
23 | import org.eclipse.jface.viewers.ISelection;\r | |
24 | import org.eclipse.jface.viewers.ISelectionProvider;\r | |
25 | import org.eclipse.jface.viewers.IStructuredSelection;\r | |
26 | import org.eclipse.linuxtools.tmf.ui.viewers.timeAnalysis.dialogs.TmfTimeFilterDialog;\r | |
27 | import org.eclipse.linuxtools.tmf.ui.viewers.timeAnalysis.dialogs.TmfTimeLegend;\r | |
28 | import org.eclipse.linuxtools.tmf.ui.viewers.timeAnalysis.model.ITimeEvent;\r | |
29 | import org.eclipse.linuxtools.tmf.ui.viewers.timeAnalysis.model.ITmfTimeAnalysisEntry;\r | |
41dc35d0 | 30 | import org.eclipse.linuxtools.tmf.ui.viewers.timeAnalysis.model.TimeEvent;\r |
b0d3496e ASL |
31 | import org.eclipse.linuxtools.tmf.ui.viewers.timeAnalysis.widgets.ITimeDataProvider;\r |
32 | import org.eclipse.linuxtools.tmf.ui.viewers.timeAnalysis.widgets.TimeScaleCtrl;\r | |
79a3a76e | 33 | import org.eclipse.linuxtools.tmf.ui.viewers.timeAnalysis.widgets.TmfTimeStatesCtrl;\r |
41dc35d0 | 34 | import org.eclipse.linuxtools.tmf.ui.viewers.timeAnalysis.widgets.TmfTimeTipHandler;\r |
b0d3496e ASL |
35 | import org.eclipse.linuxtools.tmf.ui.viewers.timeAnalysis.widgets.TraceColorScheme;\r |
36 | import org.eclipse.linuxtools.tmf.ui.viewers.timeAnalysis.widgets.Utils;\r | |
37 | import org.eclipse.swt.SWT;\r | |
38 | import org.eclipse.swt.events.ControlAdapter;\r | |
39 | import org.eclipse.swt.events.ControlEvent;\r | |
40 | import org.eclipse.swt.events.SelectionEvent;\r | |
41 | import org.eclipse.swt.events.SelectionListener;\r | |
42 | import org.eclipse.swt.graphics.Rectangle;\r | |
b0d3496e ASL |
43 | import org.eclipse.swt.widgets.Composite;\r |
44 | import org.eclipse.swt.widgets.Control;\r | |
45 | \r | |
46 | public 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 |