1 /*****************************************************************************
2 * Copyright (c) 2007, 2008, 2009, 2010 Intel Corporation, Ericsson
3 * All rights reserved. This program and the accompanying materials
4 * are made available under the terms of the Eclipse Public License v1.0
5 * which accompanies this distribution, and is available at
6 * http://www.eclipse.org/legal/epl-v10.html
9 * Intel Corporation - Initial API and implementation
10 * Ruslan A. Scherbakov, Intel - Initial API and implementation
11 * Alexander N. Alexeev, Intel - Add monitors statistics support
12 * Alvaro Sanchez-Leon - Adapted for TMF
14 * $Id: ThreadStatesView.java,v 1.7 2008/05/19 15:07:21 jkubasta Exp $
15 *****************************************************************************/
17 package org
.eclipse
.linuxtools
.tmf
.ui
.viewers
.timeAnalysis
;
19 import java
.util
.Iterator
;
20 import java
.util
.Vector
;
22 import org
.eclipse
.jface
.viewers
.ISelection
;
23 import org
.eclipse
.jface
.viewers
.ISelectionProvider
;
24 import org
.eclipse
.jface
.viewers
.IStructuredSelection
;
25 import org
.eclipse
.linuxtools
.tmf
.ui
.viewers
.timeAnalysis
.dialogs
.TmfTimeFilterDialog
;
26 import org
.eclipse
.linuxtools
.tmf
.ui
.viewers
.timeAnalysis
.dialogs
.TmfTimeLegend
;
27 import org
.eclipse
.linuxtools
.tmf
.ui
.viewers
.timeAnalysis
.model
.ITimeEvent
;
28 import org
.eclipse
.linuxtools
.tmf
.ui
.viewers
.timeAnalysis
.model
.ITmfTimeAnalysisEntry
;
29 import org
.eclipse
.linuxtools
.tmf
.ui
.viewers
.timeAnalysis
.model
.TimeEvent
;
30 import org
.eclipse
.linuxtools
.tmf
.ui
.viewers
.timeAnalysis
.widgets
.ITimeDataProvider
;
31 import org
.eclipse
.linuxtools
.tmf
.ui
.viewers
.timeAnalysis
.widgets
.TimeScaleCtrl
;
32 import org
.eclipse
.linuxtools
.tmf
.ui
.viewers
.timeAnalysis
.widgets
.TmfTimeStatesCtrl
;
33 import org
.eclipse
.linuxtools
.tmf
.ui
.viewers
.timeAnalysis
.widgets
.TmfTimeTipHandler
;
34 import org
.eclipse
.linuxtools
.tmf
.ui
.viewers
.timeAnalysis
.widgets
.TraceColorScheme
;
35 import org
.eclipse
.linuxtools
.tmf
.ui
.viewers
.timeAnalysis
.widgets
.Utils
;
36 import org
.eclipse
.swt
.SWT
;
37 import org
.eclipse
.swt
.events
.ControlAdapter
;
38 import org
.eclipse
.swt
.events
.ControlEvent
;
39 import org
.eclipse
.swt
.events
.SelectionEvent
;
40 import org
.eclipse
.swt
.events
.SelectionListener
;
41 import org
.eclipse
.swt
.graphics
.Rectangle
;
42 import org
.eclipse
.swt
.layout
.GridLayout
;
43 import org
.eclipse
.swt
.widgets
.Composite
;
44 import org
.eclipse
.swt
.widgets
.Control
;
46 public class TmfTimeAnalysisViewer
implements ITimeAnalysisViewer
, ITimeDataProvider
, SelectionListener
{
49 private long _minTimeInterval
;
50 private long _selectedTime
;
51 private long _beginTime
;
52 private long _endTime
;
57 private long _time0_extSynch
= 0;
58 private long _time1_extSynch
= 0;
59 private boolean _timeRangeFixed
;
60 private int _nameWidthPref
= 200;
61 private int _minNameWidth
= 6;
62 private int _nameWidth
;
63 private Composite _dataViewer
;
65 private TmfTimeStatesCtrl _stateCtrl
;
66 private TimeScaleCtrl _timeScaleCtrl
;
67 private TmfTimeTipHandler _threadTip
;
68 private TraceColorScheme _colors
;
69 private TmfTimeAnalysisProvider _utilImplm
;
71 private boolean _acceptSetSelAPICalls
= false;
72 Vector
<ITmfTimeSelectionListener
> widgetSelectionListners
= new Vector
<ITmfTimeSelectionListener
>();
73 Vector
<ITmfTimeScaleSelectionListener
> widgetTimeScaleSelectionListners
= new Vector
<ITmfTimeScaleSelectionListener
>();
74 Vector
<ITmfTimeFilterSelectionListener
> widgetFilterSelectionListeners
= new Vector
<ITmfTimeFilterSelectionListener
>();
76 // Calender Time format, using Epoch reference or Relative time
78 private boolean calendarTimeFormat
= false;
79 private int borderWidth
= 4;
80 private int timeScaleHeight
= 22;
83 public TmfTimeAnalysisViewer(Composite parent
, TmfTimeAnalysisProvider provider
) {
84 createDataViewer(parent
, provider
);
88 * @see org.eclipse.linuxtools.tmf.ui.widgets.timeAnalysis.api.ITimeAnalysisWidget#display(org.eclipse.linuxtools.tmf.ui.widgets.timeAnalysis.model.TmfTaTrace[])
91 public void display(ITmfTimeAnalysisEntry
[] traceArr
) {
92 modelUpdate(traceArr
);
96 public void display(ITmfTimeAnalysisEntry
[] traceArr
, long start
, long end
,
97 boolean updateTimeBounds
) {
98 modelUpdate(traceArr
, start
, end
, updateTimeBounds
);
101 public void controlMoved(ControlEvent e
) {
105 public void controlResized(ControlEvent e
) {
109 // called from the display order in the API
110 public void modelUpdate(ITmfTimeAnalysisEntry
[] traces
) {
111 if (null != _stateCtrl
) {
113 updateInternalData(traces
);
115 _timeScaleCtrl
.redraw();
119 // called from the display order in the API
120 public void modelUpdate(ITmfTimeAnalysisEntry
[] traces
, long start
,
121 long end
, boolean updateTimeBounds
) {
122 if (null != _stateCtrl
) {
124 updateInternalData(traces
, start
, end
);
125 if (updateTimeBounds
) {
126 _timeRangeFixed
= true;
127 // set window to match limits
128 setStartFinishTime(_time0_
, _time1_
);
131 _timeScaleCtrl
.redraw();
137 public void itemUpdate(ITmfTimeAnalysisEntry parent
, TimeEvent item
) {
138 if (null != parent
&& null != item
) {
139 _stateCtrl
.refreshPartial(parent
, item
);
141 _timeScaleCtrl
.redraw();
145 public void selectionChanged() {
148 protected String
getViewTypeStr() {
149 return "viewoption.threads"; //$NON-NLS-1$
152 int getMarginWidth(int idx
) {
156 int getMarginHeight(int idx
) {
161 _minTimeInterval
= 1;
163 _nameWidth
= Utils
.loadIntOption(getPreferenceString("namewidth"), //$NON-NLS-1$
164 _nameWidthPref
, _minNameWidth
, 1000);
168 Utils
.saveIntOption(getPreferenceString("namewidth"), _nameWidth
); //$NON-NLS-1$
171 protected Control
createDataViewer(Composite parent
,
172 TmfTimeAnalysisProvider utilImplm
) {
174 _utilImplm
= utilImplm
;
175 _colors
= new TraceColorScheme();
176 _dataViewer
= new Composite(parent
, SWT
.NULL
);
177 _dataViewer
.setLayoutData(GridUtil
.createFill());
178 GridLayout gl
= new GridLayout();
179 gl
.marginHeight
= borderWidth
;
181 gl
.verticalSpacing
= 0;
182 gl
.horizontalSpacing
= 0;
183 _dataViewer
.setLayout(gl
);
185 _timeScaleCtrl
= new TimeScaleCtrl(_dataViewer
, _colors
);
186 _timeScaleCtrl
.setTimeProvider(this);
187 _timeScaleCtrl
.setLayoutData(GridUtil
.createHorizontalFill());
188 _timeScaleCtrl
.setHeight(timeScaleHeight
);
190 _stateCtrl
= new TmfTimeStatesCtrl(_dataViewer
, _colors
, _utilImplm
);
192 _stateCtrl
.setTimeProvider(this);
193 _stateCtrl
.addSelectionListener(this);
194 _stateCtrl
.setLayoutData(GridUtil
.createFill());
195 _dataViewer
.addControlListener(new ControlAdapter() {
197 public void controlResized(ControlEvent event
) {
202 _dataViewer
.update();
203 _threadTip
= new TmfTimeTipHandler(parent
.getShell(), _utilImplm
, this);
204 _threadTip
.activateHoverHelp(_stateCtrl
);
208 public void dispose() {
210 _stateCtrl
.dispose();
211 _dataViewer
.dispose();
216 public void resizeControls() {
217 Rectangle r
= _dataViewer
.getClientArea();
222 if (_nameWidth
> width
- _minNameWidth
)
223 _nameWidth
= width
- _minNameWidth
;
224 if (_nameWidth
< _minNameWidth
)
225 _nameWidth
= _minNameWidth
;
228 /** Tries to set most convenient time range for display. */
229 void setTimeRange(Object traces
[]) {
233 for (int i
= 0; i
< traces
.length
; i
++) {
234 ITmfTimeAnalysisEntry entry
= (ITmfTimeAnalysisEntry
) traces
[i
];
235 if (entry
.getStopTime() >= entry
.getStartTime() && entry
.getStopTime() > 0) {
236 if (_beginTime
< 0 || entry
.getStartTime() < _beginTime
) {
237 _beginTime
= entry
.getStartTime();
239 if (entry
.getStopTime() > _endTime
) {
240 _endTime
= entry
.getStopTime();
244 * This is not needed if entry startTime and stopTime are properly set!
245 List<TimeEvent> list = entry.getTraceEvents();
246 int len = list.size();
248 event = (ITimeEvent) list.get(0);
249 if (_beginTime < 0 || event.getTime() < _beginTime) {
250 _beginTime = event.getTime();
252 event = (ITimeEvent) list.get(list.size() - 1);
253 long eventEndTime = event.getTime() + (event.getDuration() > 0 ? event.getDuration() : 0);
254 if (eventEndTime > _endTime) {
255 _endTime = eventEndTime;
265 void setTimeBounds() {
266 //_time0_ = _beginTime - (long) ((_endTime - _beginTime) * 0.02);
267 _time0_
= _beginTime
;
270 // _time1_ = _time0_ + (_endTime - _time0_) * 1.05;
272 // _time0_ = Math.floor(_time0_);
273 // _time1_ = Math.ceil(_time1_);
274 if (!_timeRangeFixed
) {
278 if (_time1
- _time0
< _minTimeInterval
) {
279 _time1
= _time0
+ _minTimeInterval
;
286 void updateInternalData(ITmfTimeAnalysisEntry
[] traces
) {
288 traces
= new ITmfTimeAnalysisEntry
[0];
289 setTimeRange(traces
);
290 refreshAllData(traces
);
298 void updateInternalData(ITmfTimeAnalysisEntry
[] traces
, long start
, long end
) {
300 traces
= new ITmfTimeAnalysisEntry
[0];
301 if ((start
== 0 && end
== 0) || start
< 0 || end
< 0) {
302 // Start and end time are unspecified and need to be determined from
303 // individual processes
304 setTimeRange(traces
);
310 refreshAllData(traces
);
316 private void refreshAllData(ITmfTimeAnalysisEntry
[] traces
) {
318 if (_selectedTime
< _beginTime
) {
319 _selectedTime
= _beginTime
;
320 } else if (_selectedTime
> _endTime
) {
321 _selectedTime
= _endTime
;
323 _stateCtrl
.refreshData(traces
);
324 filterOutNotification();
328 public void setFocus() {
329 if (null != _stateCtrl
)
330 _stateCtrl
.setFocus();
334 public boolean isInFocus() {
335 return _stateCtrl
.isInFocus();
339 public ITmfTimeAnalysisEntry
getSelectedTrace() {
340 return _stateCtrl
.getSelectedTrace();
344 public ISelection
getSelection() {
345 return _stateCtrl
.getSelection();
349 public ISelection
getSelectionTrace() {
350 return _stateCtrl
.getSelectionTrace();
354 public long getTime0() {
359 public long getTime1() {
364 public long getMinTimeInterval() {
365 return _minTimeInterval
;
369 public int getNameSpace() {
374 public void setNameSpace(int width
) {
376 width
= _stateCtrl
.getClientArea().width
;
377 if (_nameWidth
> width
- 6)
378 _nameWidth
= width
- 6;
381 _stateCtrl
.adjustScrolls();
383 _timeScaleCtrl
.redraw();
387 public int getTimeSpace() {
388 int w
= _stateCtrl
.getClientArea().width
;
389 return w
- _nameWidth
;
393 public long getSelectedTime() {
394 return _selectedTime
;
398 public long getBeginTime() {
403 public long getEndTime() {
408 public long getMaxTime() {
413 public long getMinTime() {
421 * org.eclipse.linuxtools.tmf.ui.viewers.timeAnalysis.widgets.ITimeDataProvider
422 * #setStartFinishTimeNotify(long, long)
425 public void setStartFinishTimeNotify(long time0
, long time1
) {
426 setStartFinishTime(time0
, time1
);
427 notifyStartFinishTimeSelectionListeners(time0
, time1
);
432 * @see org.eclipse.linuxtools.tmf.ui.viewers.timeAnalysis.widgets.ITimeDataProvider#notifyStartFinishTime()
435 public void notifyStartFinishTime() {
436 notifyStartFinishTimeSelectionListeners(_time0
, _time1
);
443 * org.eclipse.linuxtools.tmf.ui.viewers.timeAnalysis.widgets.ITimeDataProvider
444 * #setStartFinishTime(long, long)
447 public void setStartFinishTime(long time0
, long time1
) {
449 if (_time0
< _time0_
)
451 if (_time0
> _time1_
)
454 if (_time1
< _time0_
)
456 if (_time1
> _time1_
)
458 if (_time1
- _time0
< _minTimeInterval
)
459 _time1
= _time0
+ _minTimeInterval
;
460 _timeRangeFixed
= true;
461 _stateCtrl
.adjustScrolls();
463 _timeScaleCtrl
.redraw();
467 public void resetStartFinishTime() {
468 setStartFinishTimeNotify(_time0_
, _time1_
);
469 _timeRangeFixed
= false;
473 public void setSelectedTimeInt(long time
, boolean ensureVisible
) {
474 // Trace.debug("currentTime:" + _selectedTime + " new time:" + time);
475 _selectedTime
= time
;
476 if (_selectedTime
> _endTime
) {
477 _endTime
= _selectedTime
;
478 _time1_
= _selectedTime
;
480 if (_selectedTime
< _beginTime
) {
481 _beginTime
= _selectedTime
;
482 _time0_
= _selectedTime
;
487 double timeSpace
= (_time1
- _time0
) * .02;
488 double timeMid
= (_time1
- _time0
) * .1;
489 if (_selectedTime
< _time0
+ timeSpace
) {
490 long dt
= (long) (_time0
- _selectedTime
+ timeMid
);
493 } else if (_selectedTime
> _time1
- timeSpace
) {
494 long dt
= (long) (_selectedTime
- _time1
+ timeMid
);
498 if (_time0
< _time0_
) {
499 _time1
= Math
.min(_time1_
, _time1
+ (_time0_
- _time0
));
501 } else if (_time1
> _time1_
) {
502 _time0
= Math
.max(_time0_
, _time0
- (_time1
- _time1_
));
506 if (_time1
- _time0
< _minTimeInterval
) {
507 _time1
= _time0
+ _minTimeInterval
;
509 _stateCtrl
.adjustScrolls();
511 _timeScaleCtrl
.redraw();
512 if (time0
!= _time0
|| time1
!= _time1
) {
513 notifyStartFinishTimeSelectionListeners(_time0
, _time1
);
518 public void widgetDefaultSelected(SelectionEvent e
) {
519 // TODO: Opening call stack shall be replaced to a configurable view
520 // new OpenCallStackViewAction().openView(false);
521 // Replaced by event notification
522 // updateModelSelection();
523 notifySelectionListeners(TmfTimeSelectionEvent
.Type
.WIDGET_DEF_SEL
);
527 public void widgetSelected(SelectionEvent e
) {
528 // Replace by event notification
529 // updateModelSelection();
530 notifySelectionListeners(TmfTimeSelectionEvent
.Type
.WIDGET_SEL
);
534 public void selectNextEvent() {
535 _stateCtrl
.selectNextEvent();
539 public void selectPrevEvent() {
540 _stateCtrl
.selectPrevEvent();
544 public void selectNextTrace() {
545 _stateCtrl
.selectNextTrace();
549 public void selectPrevTrace() {
550 _stateCtrl
.selectPrevTrace();
554 public void groupTraces(boolean on
) {
555 _stateCtrl
.groupTraces(on
);
559 public void filterTraces() {
560 if (_dataViewer
== null || _dataViewer
.isDisposed())
563 if (TmfTimeFilterDialog
.getTraceFilter(_dataViewer
.getShell(), _stateCtrl
564 .getTraces(), _stateCtrl
.getTraceFilter())) {
565 _stateCtrl
.refreshData();
566 filterOutNotification();
571 public void showLegend() {
572 if (_dataViewer
== null || _dataViewer
.isDisposed())
575 TmfTimeLegend
.open(_dataViewer
.getShell(), _utilImplm
);
578 public void toggleThreadsInteractionDrawing() {
579 _stateCtrl
.toggleTraceInteractionDrawing();
582 public void setThreadJoinDrawing(boolean on
) {
583 _stateCtrl
.setTraceJoinDrawing(on
);
586 public void setThreadWaitDrawing(boolean on
) {
587 _stateCtrl
.setTraceWaitDrawing(on
);
590 public void setThreadReleaseDrawing(boolean on
) {
591 _stateCtrl
.setTraceReleaseDrawing(on
);
594 public boolean getThreadInteractionDrawing() {
595 return _stateCtrl
.getTracesInteractionDrawing();
598 public boolean getThreadJoinDrawing() {
599 return _stateCtrl
.getTraceJoinDrawing();
602 public boolean getThreadWaitDrawing() {
603 return _stateCtrl
.getTraceWaitDrawing();
606 public boolean getThreadReleaseDrawing() {
607 return _stateCtrl
.getTraceReleaseDrawing();
610 protected void select(Object obj
) {
613 // TODO: ThreadDetails Adaption removed, might need replacement
614 // if (obj instanceof ThreadDetails) {
615 // obj = ((ThreadDetails) obj).getThread();
617 if (obj
instanceof ITmfTimeAnalysisEntry
) {
618 // _stateCtrl.selectThread((TsfTmTrace) obj);
623 public void zoomIn() {
628 public void zoomOut() {
629 _stateCtrl
.zoomOut();
632 private String
getPreferenceString(String string
) {
633 return getViewTypeStr() + "." + string
; //$NON-NLS-1$
637 public void addWidgetSelectionListner(ITmfTimeSelectionListener listener
) {
638 widgetSelectionListners
.add(listener
);
642 public void removeWidgetSelectionListner(ITmfTimeSelectionListener listener
) {
643 widgetSelectionListners
.removeElement(listener
);
647 public void addWidgetTimeScaleSelectionListner(
648 ITmfTimeScaleSelectionListener listener
) {
649 widgetTimeScaleSelectionListners
.add(listener
);
653 public void removeWidgetTimeScaleSelectionListner(
654 ITmfTimeScaleSelectionListener listener
) {
655 widgetTimeScaleSelectionListners
.removeElement(listener
);
659 public void setSelectedTime(long time
, boolean ensureVisible
, Object source
) {
660 if (_acceptSetSelAPICalls
== false || this == source
) {
664 setSelectedTimeInt(time
, ensureVisible
);
668 public void setSelectedEvent(ITimeEvent event
, Object source
) {
669 if (_acceptSetSelAPICalls
== false || event
== null || source
== this) {
672 ITmfTimeAnalysisEntry trace
= event
.getEntry();
674 _stateCtrl
.selectItem(trace
, false);
677 setSelectedTimeInt(event
.getTime(), true);
681 public void setSelectedTraceTime(ITmfTimeAnalysisEntry trace
, long time
, Object source
) {
682 if (_acceptSetSelAPICalls
== false || trace
== null || source
== this) {
687 _stateCtrl
.selectItem(trace
, false);
690 setSelectedTimeInt(time
, true);
694 public void setSelectedTrace(ITmfTimeAnalysisEntry trace
) {
699 _stateCtrl
.selectItem(trace
, false);
706 * org.eclipse.linuxtools.tmf.ui.viewers.timeAnalysis.ITimeAnalysisViewer
707 * #setSelectVisTimeWindow(long, long, java.lang.Object)
710 public void setSelectVisTimeWindow(long time0
, long time1
, Object source
) {
711 if (_acceptSetSelAPICalls
== false || source
== this) {
715 setStartFinishTime(time0
, time1
);
717 // update notification time values since we are now in synch with the
718 // external application
719 updateExtSynchTimers();
723 public void setAcceptSelectionAPIcalls(boolean acceptCalls
) {
724 _acceptSetSelAPICalls
= acceptCalls
;
727 private synchronized void notifySelectionListeners(
728 TmfTimeSelectionEvent
.Type rtype
) {
729 // Any listeners out there ?
730 if (widgetSelectionListners
.size() > 0) {
731 // Locate the event selected
732 ISelection selection
= getSelection();
734 if (selection
!= null && !selection
.isEmpty()) {
735 sel
= ((IStructuredSelection
) selection
).getFirstElement();
739 // Notify Selection Listeners
740 TmfTimeSelectionEvent event
= new TmfTimeSelectionEvent(this,
741 rtype
, sel
, getSelectedTime());
743 for (Iterator
<ITmfTimeSelectionListener
> iter
= widgetSelectionListners
744 .iterator(); iter
.hasNext();) {
745 ITmfTimeSelectionListener listener
= (ITmfTimeSelectionListener
) iter
747 listener
.tsfTmProcessSelEvent(event
);
753 public void notifyStartFinishTimeSelectionListeners(long _time0
, long _time1
) {
754 if (widgetTimeScaleSelectionListners
.size() > 0) {
755 // Check if the time has actually changed from last notification
756 if (_time0
!= _time0_extSynch
|| _time1
!= _time1_extSynch
) {
757 // Notify Time Scale Selection Listeners
758 TmfTimeScaleSelectionEvent event
= new TmfTimeScaleSelectionEvent(
759 this, _time0
, _time1
, getTimeSpace(), getSelectedTime());
761 for (Iterator
<ITmfTimeScaleSelectionListener
> iter
= widgetTimeScaleSelectionListners
762 .iterator(); iter
.hasNext();) {
763 ITmfTimeScaleSelectionListener listener
= (ITmfTimeScaleSelectionListener
) iter
765 listener
.tsfTmProcessTimeScaleEvent(event
);
768 // update external synch timers
769 updateExtSynchTimers();
775 * update the cache timers used to identify the need to send a time window
776 * update to external registered listeners
778 private void updateExtSynchTimers() {
779 // last time notification cache
780 _time0_extSynch
= _time0
;
781 _time1_extSynch
= _time1
;
785 public void setTimeCalendarFormat(boolean toAbsoluteCaltime
) {
786 calendarTimeFormat
= toAbsoluteCaltime
;
790 public boolean isCalendarFormat() {
791 return calendarTimeFormat
;
795 public int getBorderWidth() {
800 public void setBorderWidth(int borderWidth
) {
801 if (borderWidth
> -1) {
802 this.borderWidth
= borderWidth
;
803 GridLayout gl
= (GridLayout
)_dataViewer
.getLayout();
804 gl
.marginHeight
= borderWidth
;
809 public int getHeaderHeight() {
810 return timeScaleHeight
;
814 public void setHeaderHeight(int headerHeight
) {
815 if (headerHeight
> -1) {
816 this.timeScaleHeight
= headerHeight
;
817 _timeScaleCtrl
.setHeight(headerHeight
);
822 public int getItemHeight() {
823 if (_stateCtrl
!= null) {
824 return _stateCtrl
.getItemHeight();
830 public void setItemHeight(int rowHeight
) {
831 if (_stateCtrl
!= null) {
832 _stateCtrl
.setItemHeight(rowHeight
);
837 public void setMinimumItemWidth(int width
) {
838 if (_stateCtrl
!= null) {
839 _stateCtrl
.setMinimumItemWidth(width
);
844 public boolean isVisibleVerticalScroll() {
845 if (_stateCtrl
!= null) {
846 _stateCtrl
.isVisibleVerticalScroll();
852 public void setVisibleVerticalScroll(boolean visibleVerticalScroll
) {
853 if (_stateCtrl
!= null) {
854 _stateCtrl
.setVisibleVerticalScroll(visibleVerticalScroll
);
859 public void setNameWidthPref(int width
) {
860 _nameWidthPref
= width
;
868 public int getNameWidthPref(int width
) {
869 return _nameWidthPref
;
873 public void addFilterSelectionListner(ITmfTimeFilterSelectionListener listener
) {
874 widgetFilterSelectionListeners
.add(listener
);
878 public void removeFilterSelectionListner(
879 ITmfTimeFilterSelectionListener listener
) {
880 widgetFilterSelectionListeners
.remove(listener
);
883 private void filterOutNotification() {
884 TmfTimeFilterSelectionEvent event
= new TmfTimeFilterSelectionEvent(this);
885 event
.setFilteredOut(_stateCtrl
.getFilteredOut());
886 for (ITmfTimeFilterSelectionListener listener
: widgetFilterSelectionListeners
) {
887 listener
.tmfTaProcessFilterSelection(event
);
892 * needed in case there's a need to associate a context menu
897 public Control
getControl() {
902 * Get the selection provider
907 public ISelectionProvider
getSelectionProvider() {
915 * org.eclipse.linuxtools.tmf.ui.viewers.timeAnalysis.ITimeAnalysisViewer
916 * #waitCursor(boolean)
919 public void waitCursor(boolean waitInd
) {
920 _stateCtrl
.waitCursor(waitInd
);