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
.internal
.lttng
.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
.internal
.lttng
.ui
.viewers
.timeAnalysis
.dialogs
.TmfTimeFilterDialog
;
26 import org
.eclipse
.linuxtools
.internal
.lttng
.ui
.viewers
.timeAnalysis
.dialogs
.TmfTimeLegend
;
27 import org
.eclipse
.linuxtools
.internal
.lttng
.ui
.viewers
.timeAnalysis
.model
.ITimeEvent
;
28 import org
.eclipse
.linuxtools
.internal
.lttng
.ui
.viewers
.timeAnalysis
.model
.ITmfTimeAnalysisEntry
;
29 import org
.eclipse
.linuxtools
.internal
.lttng
.ui
.viewers
.timeAnalysis
.model
.TimeEvent
;
30 import org
.eclipse
.linuxtools
.internal
.lttng
.ui
.viewers
.timeAnalysis
.widgets
.ITimeDataProvider
;
31 import org
.eclipse
.linuxtools
.internal
.lttng
.ui
.viewers
.timeAnalysis
.widgets
.TimeScaleCtrl
;
32 import org
.eclipse
.linuxtools
.internal
.lttng
.ui
.viewers
.timeAnalysis
.widgets
.TmfTimeStatesCtrl
;
33 import org
.eclipse
.linuxtools
.internal
.lttng
.ui
.viewers
.timeAnalysis
.widgets
.TmfTimeTipHandler
;
34 import org
.eclipse
.linuxtools
.internal
.lttng
.ui
.viewers
.timeAnalysis
.widgets
.TraceColorScheme
;
35 import org
.eclipse
.linuxtools
.internal
.lttng
.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
;
45 import org
.eclipse
.swt
.widgets
.ScrollBar
;
47 public class TmfTimeAnalysisViewer
implements ITimeAnalysisViewer
, ITimeDataProvider
, SelectionListener
{
50 private long _minTimeInterval
;
51 private long _selectedTime
;
52 private long _beginTime
;
53 private long _endTime
;
58 private long _time0_extSynch
= 0;
59 private long _time1_extSynch
= 0;
60 private boolean _timeRangeFixed
;
61 private int _nameWidthPref
= 200;
62 private int _minNameWidth
= 6;
63 private int _nameWidth
;
64 private Composite _dataViewer
;
66 private TmfTimeStatesCtrl _stateCtrl
;
67 private TimeScaleCtrl _timeScaleCtrl
;
68 private TmfTimeTipHandler _threadTip
;
69 private TraceColorScheme _colors
;
70 private TmfTimeAnalysisProvider _utilImplm
;
72 private boolean _acceptSetSelAPICalls
= false;
73 Vector
<ITmfTimeSelectionListener
> widgetSelectionListners
= new Vector
<ITmfTimeSelectionListener
>();
74 Vector
<ITmfTimeScaleSelectionListener
> widgetTimeScaleSelectionListners
= new Vector
<ITmfTimeScaleSelectionListener
>();
75 Vector
<ITmfTimeFilterSelectionListener
> widgetFilterSelectionListeners
= new Vector
<ITmfTimeFilterSelectionListener
>();
77 // Calender Time format, using Epoch reference or Relative time
79 private boolean calendarTimeFormat
= false;
80 private int borderWidth
= 4;
81 private int timeScaleHeight
= 22;
84 public TmfTimeAnalysisViewer(Composite parent
, TmfTimeAnalysisProvider provider
) {
85 createDataViewer(parent
, provider
);
89 * @see org.eclipse.linuxtools.tmf.ui.widgets.timeAnalysis.api.ITimeAnalysisWidget#display(org.eclipse.linuxtools.tmf.ui.widgets.timeAnalysis.model.TmfTaTrace[])
92 public void display(ITmfTimeAnalysisEntry
[] traceArr
) {
93 modelUpdate(traceArr
);
97 public void display(ITmfTimeAnalysisEntry
[] traceArr
, long start
, long end
,
98 boolean updateTimeBounds
) {
99 modelUpdate(traceArr
, start
, end
, updateTimeBounds
);
102 public void controlMoved(ControlEvent e
) {
106 public void controlResized(ControlEvent e
) {
110 // called from the display order in the API
111 public void modelUpdate(ITmfTimeAnalysisEntry
[] traces
) {
112 if (null != _stateCtrl
) {
114 updateInternalData(traces
);
116 _timeScaleCtrl
.redraw();
120 // called from the display order in the API
121 public void modelUpdate(ITmfTimeAnalysisEntry
[] traces
, long start
,
122 long end
, boolean updateTimeBounds
) {
123 if (null != _stateCtrl
) {
125 updateInternalData(traces
, start
, end
);
126 if (updateTimeBounds
) {
127 _timeRangeFixed
= true;
128 // set window to match limits
129 setStartFinishTime(_time0_
, _time1_
);
132 _timeScaleCtrl
.redraw();
138 public void itemUpdate(ITmfTimeAnalysisEntry parent
, TimeEvent item
) {
139 if (null != parent
&& null != item
) {
140 _stateCtrl
.refreshPartial(parent
, item
);
142 _timeScaleCtrl
.redraw();
146 public void selectionChanged() {
149 protected String
getViewTypeStr() {
150 return "viewoption.threads"; //$NON-NLS-1$
153 int getMarginWidth(int idx
) {
157 int getMarginHeight(int idx
) {
162 _minTimeInterval
= 1;
164 _nameWidth
= Utils
.loadIntOption(getPreferenceString("namewidth"), //$NON-NLS-1$
165 _nameWidthPref
, _minNameWidth
, 1000);
169 Utils
.saveIntOption(getPreferenceString("namewidth"), _nameWidth
); //$NON-NLS-1$
172 protected Control
createDataViewer(Composite parent
,
173 TmfTimeAnalysisProvider utilImplm
) {
175 _utilImplm
= utilImplm
;
176 _colors
= new TraceColorScheme();
177 _dataViewer
= new Composite(parent
, SWT
.NULL
);
178 _dataViewer
.setLayoutData(GridUtil
.createFill());
179 GridLayout gl
= new GridLayout();
180 gl
.marginHeight
= borderWidth
;
182 gl
.verticalSpacing
= 0;
183 gl
.horizontalSpacing
= 0;
184 _dataViewer
.setLayout(gl
);
186 _timeScaleCtrl
= new TimeScaleCtrl(_dataViewer
, _colors
);
187 _timeScaleCtrl
.setTimeProvider(this);
188 _timeScaleCtrl
.setLayoutData(GridUtil
.createHorizontalFill());
189 _timeScaleCtrl
.setHeight(timeScaleHeight
);
191 _stateCtrl
= new TmfTimeStatesCtrl(_dataViewer
, _colors
, _utilImplm
);
193 _stateCtrl
.setTimeProvider(this);
194 _stateCtrl
.addSelectionListener(this);
195 _stateCtrl
.setLayoutData(GridUtil
.createFill());
196 _dataViewer
.addControlListener(new ControlAdapter() {
198 public void controlResized(ControlEvent event
) {
203 _dataViewer
.update();
204 _threadTip
= new TmfTimeTipHandler(parent
.getShell(), _utilImplm
, this);
205 _threadTip
.activateHoverHelp(_stateCtrl
);
209 public void dispose() {
211 _stateCtrl
.dispose();
212 _dataViewer
.dispose();
217 public void resizeControls() {
218 Rectangle r
= _dataViewer
.getClientArea();
223 if (_nameWidth
> width
- _minNameWidth
)
224 _nameWidth
= width
- _minNameWidth
;
225 if (_nameWidth
< _minNameWidth
)
226 _nameWidth
= _minNameWidth
;
229 /** Tries to set most convenient time range for display. */
230 void setTimeRange(Object traces
[]) {
234 for (int i
= 0; i
< traces
.length
; i
++) {
235 ITmfTimeAnalysisEntry entry
= (ITmfTimeAnalysisEntry
) traces
[i
];
236 if (entry
.getStopTime() >= entry
.getStartTime() && entry
.getStopTime() > 0) {
237 if (_beginTime
< 0 || entry
.getStartTime() < _beginTime
) {
238 _beginTime
= entry
.getStartTime();
240 if (entry
.getStopTime() > _endTime
) {
241 _endTime
= entry
.getStopTime();
245 * This is not needed if entry startTime and stopTime are properly set!
246 List<TimeEvent> list = entry.getTraceEvents();
247 int len = list.size();
249 event = (ITimeEvent) list.get(0);
250 if (_beginTime < 0 || event.getTime() < _beginTime) {
251 _beginTime = event.getTime();
253 event = (ITimeEvent) list.get(list.size() - 1);
254 long eventEndTime = event.getTime() + (event.getDuration() > 0 ? event.getDuration() : 0);
255 if (eventEndTime > _endTime) {
256 _endTime = eventEndTime;
266 void setTimeBounds() {
267 //_time0_ = _beginTime - (long) ((_endTime - _beginTime) * 0.02);
268 _time0_
= _beginTime
;
271 // _time1_ = _time0_ + (_endTime - _time0_) * 1.05;
273 // _time0_ = Math.floor(_time0_);
274 // _time1_ = Math.ceil(_time1_);
275 if (!_timeRangeFixed
) {
279 if (_time1
- _time0
< _minTimeInterval
) {
280 _time1
= _time0
+ _minTimeInterval
;
287 void updateInternalData(ITmfTimeAnalysisEntry
[] traces
) {
289 traces
= new ITmfTimeAnalysisEntry
[0];
290 setTimeRange(traces
);
291 refreshAllData(traces
);
299 void updateInternalData(ITmfTimeAnalysisEntry
[] traces
, long start
, long end
) {
301 traces
= new ITmfTimeAnalysisEntry
[0];
302 if ((start
== 0 && end
== 0) || start
< 0 || end
< 0) {
303 // Start and end time are unspecified and need to be determined from
304 // individual processes
305 setTimeRange(traces
);
311 refreshAllData(traces
);
317 private void refreshAllData(ITmfTimeAnalysisEntry
[] traces
) {
319 if (_selectedTime
< _beginTime
) {
320 _selectedTime
= _beginTime
;
321 } else if (_selectedTime
> _endTime
) {
322 _selectedTime
= _endTime
;
324 _stateCtrl
.refreshData(traces
);
325 filterOutNotification();
329 public void setFocus() {
330 if (null != _stateCtrl
)
331 _stateCtrl
.setFocus();
335 public boolean isInFocus() {
336 return _stateCtrl
.isInFocus();
340 public ITmfTimeAnalysisEntry
getSelectedTrace() {
341 return _stateCtrl
.getSelectedTrace();
345 public ISelection
getSelection() {
346 return _stateCtrl
.getSelection();
350 public ISelection
getSelectionTrace() {
351 return _stateCtrl
.getSelectionTrace();
355 public long getTime0() {
360 public long getTime1() {
365 public long getMinTimeInterval() {
366 return _minTimeInterval
;
370 public int getNameSpace() {
375 public void setNameSpace(int width
) {
377 width
= _stateCtrl
.getClientArea().width
;
378 if (_nameWidth
> width
- 6)
379 _nameWidth
= width
- 6;
382 _stateCtrl
.adjustScrolls();
384 _timeScaleCtrl
.redraw();
388 public int getTimeSpace() {
389 int w
= _stateCtrl
.getClientArea().width
;
390 return w
- _nameWidth
;
394 public long getSelectedTime() {
395 return _selectedTime
;
399 public long getBeginTime() {
404 public long getEndTime() {
409 public long getMaxTime() {
414 public long getMinTime() {
422 * org.eclipse.linuxtools.tmf.ui.viewers.timeAnalysis.widgets.ITimeDataProvider
423 * #setStartFinishTimeNotify(long, long)
426 public void setStartFinishTimeNotify(long time0
, long time1
) {
427 setStartFinishTime(time0
, time1
);
428 notifyStartFinishTimeSelectionListeners(time0
, time1
);
433 * @see org.eclipse.linuxtools.tmf.ui.viewers.timeAnalysis.widgets.ITimeDataProvider#notifyStartFinishTime()
436 public void notifyStartFinishTime() {
437 notifyStartFinishTimeSelectionListeners(_time0
, _time1
);
444 * org.eclipse.linuxtools.tmf.ui.viewers.timeAnalysis.widgets.ITimeDataProvider
445 * #setStartFinishTime(long, long)
448 public void setStartFinishTime(long time0
, long time1
) {
450 if (_time0
< _time0_
)
452 if (_time0
> _time1_
)
455 if (_time1
< _time0_
)
457 if (_time1
> _time1_
)
459 if (_time1
- _time0
< _minTimeInterval
)
460 _time1
= _time0
+ _minTimeInterval
;
461 _timeRangeFixed
= true;
462 _stateCtrl
.adjustScrolls();
464 _timeScaleCtrl
.redraw();
468 public void setTimeBounds(long beginTime
, long endTime
) {
469 _beginTime
= beginTime
;
473 _stateCtrl
.adjustScrolls();
477 public void resetStartFinishTime() {
478 setStartFinishTimeNotify(_time0_
, _time1_
);
479 _timeRangeFixed
= false;
483 public void setSelectedTimeInt(long time
, boolean ensureVisible
) {
484 // Trace.debug("currentTime:" + _selectedTime + " new time:" + time);
485 _selectedTime
= time
;
486 if (_selectedTime
> _endTime
) {
487 _endTime
= _selectedTime
;
488 _time1_
= _selectedTime
;
490 if (_selectedTime
< _beginTime
) {
491 _beginTime
= _selectedTime
;
492 _time0_
= _selectedTime
;
497 double timeSpace
= (_time1
- _time0
) * .02;
498 double timeMid
= (_time1
- _time0
) * .1;
499 if (_selectedTime
< _time0
+ timeSpace
) {
500 long dt
= (long) (_time0
- _selectedTime
+ timeMid
);
503 } else if (_selectedTime
> _time1
- timeSpace
) {
504 long dt
= (long) (_selectedTime
- _time1
+ timeMid
);
508 if (_time0
< _time0_
) {
509 _time1
= Math
.min(_time1_
, _time1
+ (_time0_
- _time0
));
511 } else if (_time1
> _time1_
) {
512 _time0
= Math
.max(_time0_
, _time0
- (_time1
- _time1_
));
516 if (_time1
- _time0
< _minTimeInterval
) {
517 _time1
= _time0
+ _minTimeInterval
;
519 _stateCtrl
.adjustScrolls();
521 _timeScaleCtrl
.redraw();
522 if (time0
!= _time0
|| time1
!= _time1
) {
523 notifyStartFinishTimeSelectionListeners(_time0
, _time1
);
528 public void widgetDefaultSelected(SelectionEvent e
) {
529 // TODO: Opening call stack shall be replaced to a configurable view
530 // new OpenCallStackViewAction().openView(false);
531 // Replaced by event notification
532 // updateModelSelection();
533 notifySelectionListeners(TmfTimeSelectionEvent
.Type
.WIDGET_DEF_SEL
);
537 public void widgetSelected(SelectionEvent e
) {
538 // Replace by event notification
539 // updateModelSelection();
540 notifySelectionListeners(TmfTimeSelectionEvent
.Type
.WIDGET_SEL
);
544 public void selectNextEvent() {
545 _stateCtrl
.selectNextEvent();
549 public void selectPrevEvent() {
550 _stateCtrl
.selectPrevEvent();
554 public void selectNextTrace() {
555 _stateCtrl
.selectNextTrace();
559 public void selectPrevTrace() {
560 _stateCtrl
.selectPrevTrace();
564 public void groupTraces(boolean on
) {
565 _stateCtrl
.groupTraces(on
);
569 public void filterTraces() {
570 if (_dataViewer
== null || _dataViewer
.isDisposed())
573 if (TmfTimeFilterDialog
.getTraceFilter(_dataViewer
.getShell(), _stateCtrl
574 .getTraces(), _stateCtrl
.getTraceFilter())) {
575 _stateCtrl
.refreshData();
576 filterOutNotification();
581 public void showLegend() {
582 if (_dataViewer
== null || _dataViewer
.isDisposed())
585 TmfTimeLegend
.open(_dataViewer
.getShell(), _utilImplm
);
588 public void toggleThreadsInteractionDrawing() {
589 _stateCtrl
.toggleTraceInteractionDrawing();
592 public void setThreadJoinDrawing(boolean on
) {
593 _stateCtrl
.setTraceJoinDrawing(on
);
596 public void setThreadWaitDrawing(boolean on
) {
597 _stateCtrl
.setTraceWaitDrawing(on
);
600 public void setThreadReleaseDrawing(boolean on
) {
601 _stateCtrl
.setTraceReleaseDrawing(on
);
604 public boolean getThreadInteractionDrawing() {
605 return _stateCtrl
.getTracesInteractionDrawing();
608 public boolean getThreadJoinDrawing() {
609 return _stateCtrl
.getTraceJoinDrawing();
612 public boolean getThreadWaitDrawing() {
613 return _stateCtrl
.getTraceWaitDrawing();
616 public boolean getThreadReleaseDrawing() {
617 return _stateCtrl
.getTraceReleaseDrawing();
620 protected void select(Object obj
) {
623 // TODO: ThreadDetails Adaption removed, might need replacement
624 // if (obj instanceof ThreadDetails) {
625 // obj = ((ThreadDetails) obj).getThread();
627 if (obj
instanceof ITmfTimeAnalysisEntry
) {
628 // _stateCtrl.selectThread((TsfTmTrace) obj);
633 public void zoomIn() {
638 public void zoomOut() {
639 _stateCtrl
.zoomOut();
642 private String
getPreferenceString(String string
) {
643 return getViewTypeStr() + "." + string
; //$NON-NLS-1$
647 public void addWidgetSelectionListner(ITmfTimeSelectionListener listener
) {
648 widgetSelectionListners
.add(listener
);
652 public void removeWidgetSelectionListner(ITmfTimeSelectionListener listener
) {
653 widgetSelectionListners
.removeElement(listener
);
657 public void addWidgetTimeScaleSelectionListner(
658 ITmfTimeScaleSelectionListener listener
) {
659 widgetTimeScaleSelectionListners
.add(listener
);
663 public void removeWidgetTimeScaleSelectionListner(
664 ITmfTimeScaleSelectionListener listener
) {
665 widgetTimeScaleSelectionListners
.removeElement(listener
);
669 public void setSelectedTime(long time
, boolean ensureVisible
, Object source
) {
670 if (_acceptSetSelAPICalls
== false || this == source
) {
674 setSelectedTimeInt(time
, ensureVisible
);
678 public void setSelectedEvent(ITimeEvent event
, Object source
) {
679 if (_acceptSetSelAPICalls
== false || event
== null || source
== this) {
682 ITmfTimeAnalysisEntry trace
= event
.getEntry();
684 _stateCtrl
.selectItem(trace
, false);
687 setSelectedTimeInt(event
.getTime(), true);
691 public void setSelectedTraceTime(ITmfTimeAnalysisEntry trace
, long time
, Object source
) {
692 if (_acceptSetSelAPICalls
== false || trace
== null || source
== this) {
697 _stateCtrl
.selectItem(trace
, false);
700 setSelectedTimeInt(time
, true);
704 public void setSelectedTrace(ITmfTimeAnalysisEntry trace
) {
709 _stateCtrl
.selectItem(trace
, false);
716 * org.eclipse.linuxtools.tmf.ui.viewers.timeAnalysis.ITimeAnalysisViewer
717 * #setSelectVisTimeWindow(long, long, java.lang.Object)
720 public void setSelectVisTimeWindow(long time0
, long time1
, Object source
) {
721 if (_acceptSetSelAPICalls
== false || source
== this) {
725 setStartFinishTime(time0
, time1
);
727 // update notification time values since we are now in synch with the
728 // external application
729 updateExtSynchTimers();
733 public void setAcceptSelectionAPIcalls(boolean acceptCalls
) {
734 _acceptSetSelAPICalls
= acceptCalls
;
737 private synchronized void notifySelectionListeners(
738 TmfTimeSelectionEvent
.Type rtype
) {
739 // Any listeners out there ?
740 if (widgetSelectionListners
.size() > 0) {
741 // Locate the event selected
742 ISelection selection
= getSelection();
744 if (selection
!= null && !selection
.isEmpty()) {
745 sel
= ((IStructuredSelection
) selection
).getFirstElement();
749 // Notify Selection Listeners
750 TmfTimeSelectionEvent event
= new TmfTimeSelectionEvent(this,
751 rtype
, sel
, getSelectedTime());
753 for (Iterator
<ITmfTimeSelectionListener
> iter
= widgetSelectionListners
754 .iterator(); iter
.hasNext();) {
755 ITmfTimeSelectionListener listener
= (ITmfTimeSelectionListener
) iter
757 listener
.tsfTmProcessSelEvent(event
);
763 public void notifyStartFinishTimeSelectionListeners(long _time0
, long _time1
) {
764 if (widgetTimeScaleSelectionListners
.size() > 0) {
765 // Check if the time has actually changed from last notification
766 if (_time0
!= _time0_extSynch
|| _time1
!= _time1_extSynch
) {
767 // Notify Time Scale Selection Listeners
768 TmfTimeScaleSelectionEvent event
= new TmfTimeScaleSelectionEvent(
769 this, _time0
, _time1
, getTimeSpace(), getSelectedTime());
771 for (Iterator
<ITmfTimeScaleSelectionListener
> iter
= widgetTimeScaleSelectionListners
772 .iterator(); iter
.hasNext();) {
773 ITmfTimeScaleSelectionListener listener
= (ITmfTimeScaleSelectionListener
) iter
775 listener
.tsfTmProcessTimeScaleEvent(event
);
778 // update external synch timers
779 updateExtSynchTimers();
785 * update the cache timers used to identify the need to send a time window
786 * update to external registered listeners
788 private void updateExtSynchTimers() {
789 // last time notification cache
790 _time0_extSynch
= _time0
;
791 _time1_extSynch
= _time1
;
795 public void setTimeCalendarFormat(boolean toAbsoluteCaltime
) {
796 calendarTimeFormat
= toAbsoluteCaltime
;
800 public boolean isCalendarFormat() {
801 return calendarTimeFormat
;
805 public int getBorderWidth() {
810 public void setBorderWidth(int borderWidth
) {
811 if (borderWidth
> -1) {
812 this.borderWidth
= borderWidth
;
813 GridLayout gl
= (GridLayout
)_dataViewer
.getLayout();
814 gl
.marginHeight
= borderWidth
;
819 public int getHeaderHeight() {
820 return timeScaleHeight
;
824 public void setHeaderHeight(int headerHeight
) {
825 if (headerHeight
> -1) {
826 this.timeScaleHeight
= headerHeight
;
827 _timeScaleCtrl
.setHeight(headerHeight
);
832 public int getItemHeight() {
833 if (_stateCtrl
!= null) {
834 return _stateCtrl
.getItemHeight();
840 public void setItemHeight(int rowHeight
) {
841 if (_stateCtrl
!= null) {
842 _stateCtrl
.setItemHeight(rowHeight
);
847 public void setMinimumItemWidth(int width
) {
848 if (_stateCtrl
!= null) {
849 _stateCtrl
.setMinimumItemWidth(width
);
854 public boolean isVisibleVerticalScroll() {
855 if (_stateCtrl
!= null) {
856 _stateCtrl
.isVisibleVerticalScroll();
862 public void setVisibleVerticalScroll(boolean visibleVerticalScroll
) {
863 if (_stateCtrl
!= null) {
864 _stateCtrl
.setVisibleVerticalScroll(visibleVerticalScroll
);
869 public void setNameWidthPref(int width
) {
870 _nameWidthPref
= width
;
878 public int getNameWidthPref(int width
) {
879 return _nameWidthPref
;
883 public void addFilterSelectionListner(ITmfTimeFilterSelectionListener listener
) {
884 widgetFilterSelectionListeners
.add(listener
);
888 public void removeFilterSelectionListner(
889 ITmfTimeFilterSelectionListener listener
) {
890 widgetFilterSelectionListeners
.remove(listener
);
893 private void filterOutNotification() {
894 TmfTimeFilterSelectionEvent event
= new TmfTimeFilterSelectionEvent(this);
895 event
.setFilteredOut(_stateCtrl
.getFilteredOut());
896 for (ITmfTimeFilterSelectionListener listener
: widgetFilterSelectionListeners
) {
897 listener
.tmfTaProcessFilterSelection(event
);
902 * needed in case there's a need to associate a context menu
904 * @return the state control (selection provider)
907 public Control
getControl() {
912 * Get the selection provider
914 * @return the selection provider
917 public ISelectionProvider
getSelectionProvider() {
925 * org.eclipse.linuxtools.tmf.ui.viewers.timeAnalysis.ITimeAnalysisViewer
926 * #waitCursor(boolean)
929 public void waitCursor(boolean waitInd
) {
930 _stateCtrl
.waitCursor(waitInd
);
934 * @see org.eclipse.linuxtools.tmf.ui.viewers.timeAnalysis.ITimeAnalysisViewer#getHorizontalBar()
937 public ScrollBar
getHorizontalBar() {
938 return _stateCtrl
.getHorizontalBar();
942 * @see org.eclipse.linuxtools.tmf.ui.viewers.timeAnalysis.ITimeAnalysisViewer#getVerticalBar()
945 public ScrollBar
getVerticalBar() {
946 return _stateCtrl
.getVerticalBar();
950 * @see org.eclipse.linuxtools.tmf.ui.viewers.timeAnalysis.ITimeAnalysisViewer#setTopIndex(int)
953 public void setTopIndex(int index
) {
954 _stateCtrl
.setTopIndex(index
);