Re-structure LTTng sub-project as per the Linux Tools guidelines
[deliverable/tracecompass.git] / org.eclipse.linuxtools.lttng.ui / src / org / eclipse / linuxtools / lttng / ui / views / controlflow / ControlFlowView.java
index abc7b479f54cc3c1c1e9e0a05cc5421ee29d7bfd..2a4c345fa192ed9db383ce71cc9a74ae6fc663dc 100644 (file)
@@ -6,7 +6,10 @@
  * accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
  * 
- * Contributors: Alvaro Sanchez-Leon - Initial implementation
+ * Contributors:
+ *   Alvaro Sanchez-Leon - Initial implementation
+ *   Michel Dagenais (michel.dagenais@polymtl.ca) - Reference C implementation, used with permission
+ *   Bernd Hufmann - Bug fixes
  *******************************************************************************/
 package org.eclipse.linuxtools.lttng.ui.views.controlflow;
 
@@ -32,26 +35,27 @@ import org.eclipse.jface.viewers.StructuredViewer;
 import org.eclipse.jface.viewers.TableViewer;
 import org.eclipse.jface.viewers.Viewer;
 import org.eclipse.jface.viewers.ViewerFilter;
-import org.eclipse.linuxtools.lttng.control.LttngCoreProviderFactory;
-import org.eclipse.linuxtools.lttng.event.LttngTimestamp;
-import org.eclipse.linuxtools.lttng.request.ILttngSyntEventRequest;
-import org.eclipse.linuxtools.lttng.state.evProcessor.ITransEventProcessor;
+import org.eclipse.linuxtools.lttng.core.control.LttngCoreProviderFactory;
+import org.eclipse.linuxtools.lttng.core.event.LttngTimestamp;
+import org.eclipse.linuxtools.lttng.core.request.ILttngSyntEventRequest;
+import org.eclipse.linuxtools.lttng.core.state.evProcessor.ITransEventProcessor;
 import org.eclipse.linuxtools.lttng.ui.TraceDebug;
 import org.eclipse.linuxtools.lttng.ui.model.trange.ItemContainer;
 import org.eclipse.linuxtools.lttng.ui.model.trange.TimeRangeEventProcess;
-import org.eclipse.linuxtools.lttng.ui.model.trange.TimeRangeViewerProvider;
 import org.eclipse.linuxtools.lttng.ui.views.common.AbsTimeUpdateView;
 import org.eclipse.linuxtools.lttng.ui.views.common.ParamsUpdater;
 import org.eclipse.linuxtools.lttng.ui.views.controlflow.evProcessor.FlowEventToHandlerFactory;
 import org.eclipse.linuxtools.lttng.ui.views.controlflow.model.FlowModelFactory;
-import org.eclipse.linuxtools.tmf.event.TmfEvent;
-import org.eclipse.linuxtools.tmf.event.TmfTimeRange;
-import org.eclipse.linuxtools.tmf.experiment.TmfExperiment;
-import org.eclipse.linuxtools.tmf.request.ITmfDataRequest.ExecutionType;
-import org.eclipse.linuxtools.tmf.signal.TmfExperimentSelectedSignal;
-import org.eclipse.linuxtools.tmf.signal.TmfRangeSynchSignal;
-import org.eclipse.linuxtools.tmf.signal.TmfSignalHandler;
-import org.eclipse.linuxtools.tmf.signal.TmfTimeSynchSignal;
+import org.eclipse.linuxtools.lttng.ui.views.controlflow.model.FlowTimeRangeViewerProvider;
+import org.eclipse.linuxtools.tmf.core.event.TmfEvent;
+import org.eclipse.linuxtools.tmf.core.event.TmfTimeRange;
+import org.eclipse.linuxtools.tmf.core.experiment.TmfExperiment;
+import org.eclipse.linuxtools.tmf.core.request.ITmfDataRequest.ExecutionType;
+import org.eclipse.linuxtools.tmf.core.signal.TmfExperimentRangeUpdatedSignal;
+import org.eclipse.linuxtools.tmf.core.signal.TmfExperimentSelectedSignal;
+import org.eclipse.linuxtools.tmf.core.signal.TmfRangeSynchSignal;
+import org.eclipse.linuxtools.tmf.core.signal.TmfSignalHandler;
+import org.eclipse.linuxtools.tmf.core.signal.TmfTimeSynchSignal;
 import org.eclipse.linuxtools.tmf.ui.viewers.TmfViewerFactory;
 import org.eclipse.linuxtools.tmf.ui.viewers.timeAnalysis.ITmfTimeFilterSelectionListener;
 import org.eclipse.linuxtools.tmf.ui.viewers.timeAnalysis.ITmfTimeScaleSelectionListener;
@@ -91,20 +95,21 @@ public class ControlFlowView extends AbsTimeUpdateView implements
                ITmfTimeSelectionListener, ITmfTimeScaleSelectionListener,
                ITmfTimeFilterSelectionListener {
 
-    public static final String ID = "org.eclipse.linuxtools.lttng.ui.views.controlflow";
+    public static final String ID = "org.eclipse.linuxtools.lttng.ui.views.controlflow"; //$NON-NLS-1$
     
        // ========================================================================
        // Table data
        // ========================================================================
-       private final String PROCESS_COLUMN = "Process";
-       private final String BRAND_COLUMN = "Brand";
-       private final String PID_COLUMN = "PID";
-       private final String TGID_COLUMN = "TGID";
-       private final String PPID_COLUMN = "PPID";
-       private final String CPU_COLUMN = "CPU";
-       private final String BIRTH_SEC_COLUMN = "Birth sec";
-       private final String BIRTH_NSEC_COLUMN = "Birth nsec";
-       private final String TRACE = "TRACE";
+
+    private final String PROCESS_COLUMN    = Messages.getString("ControlFlowView.processColumn"); //$NON-NLS-1$
+       private final String BRAND_COLUMN      = Messages.getString("ControlFlowView.brandColumn"); //$NON-NLS-1$
+       private final String PID_COLUMN        = Messages.getString("ControlFlowView.pidColumn"); //$NON-NLS-1$
+       private final String TGID_COLUMN       = Messages.getString("ControlFlowView.tgidColumn"); //$NON-NLS-1$
+       private final String PPID_COLUMN       = Messages.getString("ControlFlowView.ppidColumn"); //$NON-NLS-1$
+       private final String CPU_COLUMN        = Messages.getString("ControlFlowView.cpuColumn"); //$NON-NLS-1$
+       private final String BIRTH_SEC_COLUMN  = Messages.getString("ControlFlowView.birthSecColumn"); //$NON-NLS-1$
+       private final String BIRTH_NSEC_COLUMN = Messages.getString("ControlFlowView.birthNSecColumn"); //$NON-NLS-1$
+       private final String TRACE             = Messages.getString("ControlFlowView.TraceNameColumn"); //$NON-NLS-1$
 
        private final String[] columnNames = new String[] { PROCESS_COLUMN, /* */
        BRAND_COLUMN,/* */
@@ -137,6 +142,8 @@ public class ControlFlowView extends AbsTimeUpdateView implements
 
        private ViewProcessFilter tableFilter = null;
        private ScrolledComposite scrollFrame = null;
+       
+       private TmfTimeRange initTimeRange = TmfTimeRange.Null;
 
        // private static SimpleDateFormat stimeformat = new SimpleDateFormat(
        // "yy/MM/dd HH:mm:ss");
@@ -167,9 +174,9 @@ public class ControlFlowView extends AbsTimeUpdateView implements
                public void inputChanged(Viewer v, Object oldInput, Object newInput) {
                        this.elements = (ITmfTimeAnalysisEntry[]) newInput;
                        if (elements != null) {
-                               TraceDebug.debug("Total number of processes provided to Control Flow view: " + elements.length);
+                               TraceDebug.debug("Total number of processes provided to Control Flow view: " + elements.length); //$NON-NLS-1$
                        } else {
-                               TraceDebug.debug("New input = null");
+                               TraceDebug.debug("New input = null"); //$NON-NLS-1$
                        }
                }
 
@@ -280,7 +287,7 @@ public class ControlFlowView extends AbsTimeUpdateView implements
                                        return false;
                                }
                        } else {
-                               TraceDebug.debug("Unexpected type of filter element received: "
+                               TraceDebug.debug("Unexpected type of filter element received: " //$NON-NLS-1$
                                                + element.toString());
                        }
                        // Compare element versus a list of filtered out
@@ -491,15 +498,11 @@ public class ControlFlowView extends AbsTimeUpdateView implements
 
                int borderWidth = table.getBorderWidth();
 
-               int itemHeight = table.getItemHeight() + checkForSWTBugItemHeightAdjustement();
+               int itemHeight = table.getItemHeight() + getTableItemHeightAdjustement();
                int headerHeight = table.getHeaderHeight();
                table.getVerticalBar().setVisible(false);
 
-               tsfviewer = TmfViewerFactory.createViewer(sash,
- new TimeRangeViewerProvider(getParamsUpdater()));
-
-               tsfviewer.addWidgetSelectionListner(this);
-               tsfviewer.addWidgetTimeScaleSelectionListner(this);
+               tsfviewer = TmfViewerFactory.createViewer(sash, new FlowTimeRangeViewerProvider(getParamsUpdater()));
 
                // Traces shall not be grouped to allow synchronisation
                tsfviewer.groupTraces(false);
@@ -552,14 +555,16 @@ public class ControlFlowView extends AbsTimeUpdateView implements
                if (experiment != null) {
                        TmfTimeRange experimentTRange = experiment.getTimeRange();
 
-                       // send request and received the adjusted time used
-                       TmfTimeRange adjustedTimeRange = initialExperimentDataRequest(this,
-                                       experimentTRange);
-
-                       // initialize widget time boundaries and filtering parameters
-                       ModelUpdateInit(experimentTRange, adjustedTimeRange, this);
+                       if (experimentTRange != TmfTimeRange.Null) {
+                               // send request and received the adjusted time used
+                               TmfTimeRange adjustedTimeRange = initialExperimentDataRequest(this,
+                                               experimentTRange);
+       
+                               // initialize widget time boundaries and filtering parameters
+                               ModelUpdateInit(experimentTRange, adjustedTimeRange, this);
+                       }
                } else {
-                       TraceDebug.debug("No selected experiment information available");
+                       TraceDebug.debug("No selected experiment information available"); //$NON-NLS-1$
                }
        }
 
@@ -585,7 +590,7 @@ public class ControlFlowView extends AbsTimeUpdateView implements
 
        private void fillLocalPullDown(IMenuManager manager) {
                manager.add(new Separator());
-               // manager.add(showLegend);
+               manager.add(showLegend);
                manager.add(new Separator());
                manager.add(resetScale);
                manager.add(nextEvent);
@@ -600,14 +605,14 @@ public class ControlFlowView extends AbsTimeUpdateView implements
        }
 
        private void fillContextMenu(IMenuManager manager) {
-               // manager.add(showLegend);
+               manager.add(showLegend);
                manager.add(new Separator());
                manager.add(resetScale);
                manager.add(nextEvent);
                manager.add(prevEvent);
                manager.add(nextTrace);
                manager.add(prevTrace);
-               // manager.add(showLegend);
+               manager.add(showLegend);
                // manager.add(filterTraces);
                manager.add(zoomIn);
                manager.add(zoomOut);
@@ -617,7 +622,7 @@ public class ControlFlowView extends AbsTimeUpdateView implements
        }
 
        private void fillLocalToolBar(IToolBarManager manager) {
-               // manager.add(showLegend);
+               manager.add(showLegend);
                manager.add(new Separator());
                manager.add(resetScale);
                manager.add(nextEvent);
@@ -647,8 +652,8 @@ public class ControlFlowView extends AbsTimeUpdateView implements
                                .getString("ControlFlowView.Action.Reset.ToolTip")); //$NON-NLS-1$
                resetScale.setImageDescriptor(AbstractUIPlugin
                                .imageDescriptorFromPlugin(Messages
-                                               .getString("ControlFlowView.tmf.UI"),
-                                               "icons/home_nav.gif"));
+                                               .getString("ControlFlowView.tmf.UI"), //$NON-NLS-1$
+                                               "icons/elcl16/home_nav.gif")); //$NON-NLS-1$
 
                // nextEvent
                nextEvent = new Action() {
@@ -665,8 +670,8 @@ public class ControlFlowView extends AbsTimeUpdateView implements
                                .getString("ControlFlowView.Action.NextEvent.Tooltip")); //$NON-NLS-1$
                nextEvent.setImageDescriptor(AbstractUIPlugin
                                .imageDescriptorFromPlugin(Messages
-                                               .getString("ControlFlowView.tmf.UI"),
-                                               "icons/next_event.gif"));
+                                               .getString("ControlFlowView.tmf.UI"), //$NON-NLS-1$
+                                               "icons/elcl16/next_event.gif")); //$NON-NLS-1$
 
                // prevEvent
                prevEvent = new Action() {
@@ -683,8 +688,8 @@ public class ControlFlowView extends AbsTimeUpdateView implements
                                .getString("ControlFlowView.Action.PrevEvent.Tooltip")); //$NON-NLS-1$
                prevEvent.setImageDescriptor(AbstractUIPlugin
                                .imageDescriptorFromPlugin(Messages
-                                               .getString("ControlFlowView.tmf.UI"),
-                                               "icons/prev_event.gif"));
+                                               .getString("ControlFlowView.tmf.UI"), //$NON-NLS-1$
+                                               "icons/elcl16/prev_event.gif")); //$NON-NLS-1$
 
                // nextTrace
                nextTrace = new Action() {
@@ -701,8 +706,8 @@ public class ControlFlowView extends AbsTimeUpdateView implements
                                .getString("ControlFlowView.Action.NextProcess.ToolTip")); //$NON-NLS-1$
                nextTrace.setImageDescriptor(AbstractUIPlugin
                                .imageDescriptorFromPlugin(Messages
-                                               .getString("ControlFlowView.tmf.UI"),
-                                               "icons/next_item.gif"));
+                                               .getString("ControlFlowView.tmf.UI"), //$NON-NLS-1$
+                                               "icons/elcl16/next_item.gif")); //$NON-NLS-1$
 
                // prevTrace
                prevTrace = new Action() {
@@ -719,8 +724,8 @@ public class ControlFlowView extends AbsTimeUpdateView implements
                                .getString("ControlFlowView.Action.PreviousProcess.Tooltip")); //$NON-NLS-1$
                prevTrace.setImageDescriptor(AbstractUIPlugin
                                .imageDescriptorFromPlugin(Messages
-                                               .getString("ControlFlowView.tmf.UI"),
-                                               "icons/prev_item.gif"));
+                                               .getString("ControlFlowView.tmf.UI"), //$NON-NLS-1$
+                                               "icons/elcl16/prev_item.gif")); //$NON-NLS-1$
 
                // showLegend
                showLegend = new Action() {
@@ -750,8 +755,8 @@ public class ControlFlowView extends AbsTimeUpdateView implements
                                .getString("ControlFlowView.Action.Filter.ToolTip")); //$NON-NLS-1$
                filterTraces.setImageDescriptor(AbstractUIPlugin
                                .imageDescriptorFromPlugin(Messages
-                                               .getString("ControlFlowView.tmf.UI"),
-                                               "icons/filter_items.gif"));
+                                               .getString("ControlFlowView.tmf.UI"), //$NON-NLS-1$
+                                               "icons/elcl16/filter_items.gif")); //$NON-NLS-1$
 
                // zoomIn
                zoomIn = new Action() {
@@ -766,8 +771,8 @@ public class ControlFlowView extends AbsTimeUpdateView implements
                zoomIn.setToolTipText(Messages
                                .getString("ControlFlowView.Action.ZoomIn.Tooltip")); //$NON-NLS-1$
                zoomIn.setImageDescriptor(AbstractUIPlugin.imageDescriptorFromPlugin(
-                               Messages.getString("ControlFlowView.tmf.UI"),
-                               "icons/zoomin_nav.gif"));
+                               Messages.getString("ControlFlowView.tmf.UI"), //$NON-NLS-1$
+                               "icons/elcl16/zoomin_nav.gif")); //$NON-NLS-1$
 
                // zoomOut
                zoomOut = new Action() {
@@ -782,8 +787,8 @@ public class ControlFlowView extends AbsTimeUpdateView implements
                zoomOut.setToolTipText(Messages
                                .getString("ControlFlowView.Action.ZoomOut.tooltip")); //$NON-NLS-1$
                zoomOut.setImageDescriptor(AbstractUIPlugin.imageDescriptorFromPlugin(
-                               Messages.getString("ControlFlowView.tmf.UI"),
-                               "icons/zoomout_nav.gif"));
+                               Messages.getString("ControlFlowView.tmf.UI"), //$NON-NLS-1$
+                               "icons/elcl16/zoomout_nav.gif")); //$NON-NLS-1$
 
                // zoomFilter
                zoomFilter = new Action() {
@@ -799,8 +804,8 @@ public class ControlFlowView extends AbsTimeUpdateView implements
                                .getString("ControlFlowView.Action.ZoomFilter.tooltip")); //$NON-NLS-1$
                zoomFilter.setImageDescriptor(AbstractUIPlugin
                                .imageDescriptorFromPlugin(Messages
-                                               .getString("ControlFlowView.tmf.UI"),
-                                               "icons/filter_items.gif"));
+                                               .getString("ControlFlowView.tmf.UI"), //$NON-NLS-1$
+                                               "icons/elcl16/filter_items.gif")); //$NON-NLS-1$
                zoomFilter.setChecked(false);
 
                // PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_ELCL_SYNCED);
@@ -934,7 +939,7 @@ public class ControlFlowView extends AbsTimeUpdateView implements
                         tableViewer.getTable().getDisplay().asyncExec(new Runnable() {
                             @Override
                             public void run() {
-                                if ((scrollFrame != null) && (!scrollFrame.getDisplay().isDisposed())) {
+                                if ((scrollFrame != null) && (!scrollFrame.isDisposed())) {
                                     updateScrolls(scrollFrame);
                                 }
                             }
@@ -963,13 +968,9 @@ public class ControlFlowView extends AbsTimeUpdateView implements
         */
        private synchronized void resizeTableColumns(Table table) {
                if (table != null) {
-                       Composite parent = table.getParent();
-                       int tableWidthSum = parent.getBorderWidth();
-
                        TableColumn[] columns = table.getColumns();
                        for (TableColumn column : columns) {
                                column.pack();
-                               tableWidthSum += column.getWidth();
                        }
                }
        }
@@ -1046,13 +1047,31 @@ public class ControlFlowView extends AbsTimeUpdateView implements
                        TmfTimeRange experimentTRange = signal.getExperiment()
                                        .getTimeRange();
 
-                       // prepare time intervals in widget
-                       ModelUpdateInit(experimentTRange, experimentTRange, signal
-                                       .getSource());
+                       initTimeRange = TmfTimeRange.Null;
+                       if (experimentTRange != TmfTimeRange.Null) {
+                               // prepare time intervals in widget
+                               ModelUpdateInit(experimentTRange, experimentTRange, signal
+                                               .getSource());
+       
+                               // request initial data
+                               initialExperimentDataRequest(signal
+                                               .getSource(), experimentTRange);
+                       }
+               }
+       }
 
-                       // request initial data
-                       initialExperimentDataRequest(signal
-                                       .getSource(), experimentTRange);
+       @TmfSignalHandler
+       public void experimentRangeUpdated(TmfExperimentRangeUpdatedSignal signal) {
+               if (initTimeRange == TmfTimeRange.Null && signal.getExperiment().equals(TmfExperiment.getCurrentExperiment())) {
+                       TmfTimeRange experimentTRange = signal.getRange();
+
+                       if (experimentTRange != TmfTimeRange.Null) {
+                               // prepare time intervals in widget
+                               ModelUpdateInit(experimentTRange, experimentTRange, signal.getSource());
+
+                               // request initial data
+                               initialExperimentDataRequest(signal.getSource(), experimentTRange);
+                       }
                }
        }
 
@@ -1068,34 +1087,36 @@ public class ControlFlowView extends AbsTimeUpdateView implements
                // user to select the interesting area based on the perspective
                TmfTimeRange initTimeWindow = getInitTRange(experimentTRange);
 
-               dataRequest(initTimeWindow, experimentTRange, true, ExecutionType.FOREGROUND);
+               eventRequest(initTimeWindow, experimentTRange, true, ExecutionType.FOREGROUND);
                if (TraceDebug.isDEBUG()) {
-                       TraceDebug.debug("Initialization request time range is: "
-                                       + initTimeWindow.getStartTime().toString() + "-"
+                       TraceDebug.debug("Initialization request time range is: " //$NON-NLS-1$
+                                       + initTimeWindow.getStartTime().toString() + "-" //$NON-NLS-1$
                                        + initTimeWindow.getEndTime().toString());
                }
 
+               initTimeRange = initTimeWindow;
                return initTimeWindow;
        }
        
-       // *** HACK ***
-       //
-       //
-       //
-       public int checkForSWTBugItemHeightAdjustement() {
-               int returnedAjustement = 0;
-               String desktopSessionName = System.getenv("DESKTOP_SESSION");
-               
-               // Gnome : most common case, no adjustement
-               if ( desktopSessionName.equals("gnome") ) {
-                       returnedAjustement = 0;
-               }
-               // Kde : ajustement of 2 is needed
-               else if ( desktopSessionName.equals("kde") ) {
-                       returnedAjustement = 2;
+       /*
+        * SWT doesn't seem to report correctly the table item height, at least in
+        * the case of KDE.
+        * 
+        * This method provides an adjustment term according to the desktop session.
+        * 
+        * @return Height adjustment 
+        */
+       private int getTableItemHeightAdjustement() {
+               int ajustement = 0;
+               String desktopSession = System.getenv("DESKTOP_SESSION"); //$NON-NLS-1$
+
+               if (desktopSession != null) {
+               if (desktopSession.equals("kde")) { //$NON-NLS-1$
+                   ajustement = 2;
+               }
                }
-               
-               return returnedAjustement;
+
+               return ajustement;
        }
 
        /*
This page took 0.030351 seconds and 5 git commands to generate.