Implement setPinned for Resources View
[deliverable/tracecompass.git] / analysis / org.eclipse.tracecompass.analysis.os.linux.ui / src / org / eclipse / tracecompass / internal / analysis / os / linux / ui / views / resources / ResourcesView.java
index c8ac12f1fd8ba116364129dabbfa1cfcc65b007a..cc6621ab858b23d559bf2c659118f9013884498e 100644 (file)
@@ -28,6 +28,7 @@ import org.eclipse.jdt.annotation.Nullable;
 import org.eclipse.jface.action.IMenuManager;
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.swt.widgets.Composite;
 import org.eclipse.tracecompass.analysis.os.linux.core.kernel.KernelAnalysisModule;
 import org.eclipse.tracecompass.analysis.os.linux.core.signals.TmfCpuSelectedSignal;
 import org.eclipse.tracecompass.internal.analysis.os.linux.core.kernel.Attributes;
@@ -37,11 +38,14 @@ import org.eclipse.tracecompass.internal.analysis.os.linux.ui.actions.UnfollowCp
 import org.eclipse.tracecompass.internal.analysis.os.linux.ui.views.resources.ResourcesEntry.Type;
 import org.eclipse.tracecompass.statesystem.core.ITmfStateSystem;
 import org.eclipse.tracecompass.statesystem.core.interval.ITmfStateInterval;
+import org.eclipse.tracecompass.tmf.core.signal.TmfSignal;
 import org.eclipse.tracecompass.tmf.core.signal.TmfSignalHandler;
+import org.eclipse.tracecompass.tmf.core.signal.TmfSignalManager;
 import org.eclipse.tracecompass.tmf.core.statesystem.TmfStateSystemAnalysisModule;
 import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
 import org.eclipse.tracecompass.tmf.core.trace.TmfTraceContext;
 import org.eclipse.tracecompass.tmf.core.trace.TmfTraceManager;
+import org.eclipse.tracecompass.tmf.core.trace.experiment.TmfExperiment;
 import org.eclipse.tracecompass.tmf.ui.views.timegraph.AbstractStateSystemTimeGraphView;
 import org.eclipse.tracecompass.tmf.ui.widgets.timegraph.model.ITimeEvent;
 import org.eclipse.tracecompass.tmf.ui.widgets.timegraph.model.ITimeGraphEntry;
@@ -69,6 +73,12 @@ public class ResourcesView extends AbstractStateSystemTimeGraphView {
     // Timeout between updates in the build thread in ms
     private static final long BUILD_UPDATE_TIMEOUT = 500;
 
+    /** The tab label */
+    private String fOriginalTabLabel;
+
+    /** Pin state related toggle switch */
+    private boolean fShowFollowCpuActions = true;
+
     // ------------------------------------------------------------------------
     // Constructors
     // ------------------------------------------------------------------------
@@ -98,7 +108,6 @@ public class ResourcesView extends AbstractStateSystemTimeGraphView {
         }
     }
 
-
     /**
      * @since 2.0
      */
@@ -113,10 +122,12 @@ public class ResourcesView extends AbstractStateSystemTimeGraphView {
                     TmfTraceContext ctx = TmfTraceManager.getInstance().getCurrentTraceContext();
                     Integer data = (Integer) ctx.getData(RESOURCES_FOLLOW_CPU);
                     int cpu = data != null ? data.intValue() : -1;
-                    if (cpu >= 0) {
-                        menuManager.add(new UnfollowCpuAction(ResourcesView.this, resourcesEntry.getId(), resourcesEntry.getTrace()));
-                    } else {
-                        menuManager.add(new FollowCpuAction(ResourcesView.this, resourcesEntry.getId(), resourcesEntry.getTrace()));
+                    if (fShowFollowCpuActions) {
+                        if (cpu >= 0) {
+                            menuManager.add(new UnfollowCpuAction(ResourcesView.this, resourcesEntry.getId(), resourcesEntry.getTrace()));
+                        } else {
+                            menuManager.add(new FollowCpuAction(ResourcesView.this, resourcesEntry.getId(), resourcesEntry.getTrace()));
+                        }
                     }
                 }
             }
@@ -135,6 +146,12 @@ public class ResourcesView extends AbstractStateSystemTimeGraphView {
 
     }
 
+    @Override
+    public void createPartControl(Composite parent) {
+        super.createPartControl(parent);
+        fOriginalTabLabel = getPartName();
+    }
+
     // ------------------------------------------------------------------------
     // Internal
     // ------------------------------------------------------------------------
@@ -219,7 +236,10 @@ public class ResourcesView extends AbstractStateSystemTimeGraphView {
                     }
                     List<ITimeEvent> eventList = getEventList(entry, ssq, fullStates, prevFullState, monitor);
                     if (eventList != null) {
-                        /* Start a new event list on first iteration, then append to it */
+                        /*
+                         * Start a new event list on first iteration, then
+                         * append to it
+                         */
                         if (prevFullState == null) {
                             entry.setEventList(eventList);
                         } else {
@@ -442,7 +462,42 @@ public class ResourcesView extends AbstractStateSystemTimeGraphView {
 
     @Override
     protected boolean canBePinned() {
-        //TODO: actionPin is not defined
-        return false;
+        return true;
+    }
+
+    @Override
+    protected synchronized void setPinned(boolean pinned) {
+
+        /* Is pinned */
+        if (pinned) {
+            /* Ignore all outbound and inbound signals */
+            TmfSignalManager.addIgnoredOutboundSignal(this, TmfSignal.class);
+            TmfSignalManager.addIgnoredInboundSignal(this, TmfSignal.class);
+
+            String objectType = Messages.ControlFlowView_TraceLabel;
+            if (getTrace() instanceof TmfExperiment) {
+                objectType = Messages.ControlFlowView_ExperimentLabel;
+            }
+            setPartName(String.format("%s [%s][%s:%s]", fOriginalTabLabel, Messages.ControlFlowView_PinnedLabel, objectType, getTrace().getName())); //$NON-NLS-1$
+        } else {
+            TmfSignalManager.clearIgnoredInboundSignalList(this);
+            TmfSignalManager.clearIgnoredOutboundSignalList(this);
+
+            setPartName(fOriginalTabLabel);
+
+            loadTrace(TmfTraceManager.getInstance().getActiveTrace());
+        }
+
+        fShowFollowCpuActions = !pinned;
+
+        /* Propagate pin state to viewer */
+        if (getTimeGraphCombo() != null) {
+            getTimeGraphCombo().setPinned(pinned);
+        } else {
+            getTimeGraphViewer().setPinned(pinned);
+        }
+
+        redraw();
     }
+
 }
This page took 0.025558 seconds and 5 git commands to generate.