From abb4905b5297bfe2e0e1939c879b1d9a67bd08fa Mon Sep 17 00:00:00 2001 From: Jonathan Rajotte Date: Tue, 8 Nov 2016 16:10:32 -0500 Subject: [PATCH] doc: TmfView pin feature Change-Id: I9a29b1ee928b6857ebbaf46c890b72b4e82ac260 Signed-off-by: Jonathan Rajotte --- .../doc/Developer-Guide.mediawiki | 73 ++++++++++++++++++ .../doc/images/TmfViewPinAction.png | Bin 0 -> 23932 bytes .../doc/User-Guide.mediawiki | 8 ++ .../doc/images/pin_view.gif | Bin 0 -> 358 bytes 4 files changed, 81 insertions(+) create mode 100644 doc/org.eclipse.tracecompass.doc.dev/doc/images/TmfViewPinAction.png create mode 100644 doc/org.eclipse.tracecompass.doc.user/doc/images/pin_view.gif diff --git a/doc/org.eclipse.tracecompass.doc.dev/doc/Developer-Guide.mediawiki b/doc/org.eclipse.tracecompass.doc.dev/doc/Developer-Guide.mediawiki index 1054562653..0a5b6a5caf 100644 --- a/doc/org.eclipse.tracecompass.doc.dev/doc/Developer-Guide.mediawiki +++ b/doc/org.eclipse.tracecompass.doc.dev/doc/Developer-Guide.mediawiki @@ -322,6 +322,7 @@ This tutorial will cover concepts like: * Signal handling (@TmfSignalHandler) * Data requests (TmfEventRequest) * SWTChart integration +* Use of the pin feature '''Note''': Trace Compass 0.1.0 provides base implementations for generating SWTChart viewers and views. For more details please refer to chapter [[#TMF Built-in Views and Viewers]]. @@ -656,6 +657,78 @@ The view is now ready but we need a proper trace to test it. For this example, a In summary, we have implemented a simple TMF view using the SWTChart library. We made use of signals and requests to populate the view at the appropriate time and we formated the time stamps nicely. We also made sure that the time stamp format is updated when the preferences change. +==== Pin feature ==== + +The pin feature allow freezing a view. How it freezes is up to the view itself. Normally a pinned view +will not synchronize on active trace changes, visual time range changes, selection time changes, marker updates etc. + +By default TmfView provides a pin button in its toolbar.
+[[Image:images/TmfViewPinAction.png]]
+ +By default nothing is done on button click, setPinned needs to be overridden to take action on user interaction. It is the view's responsibility to propagate the pinned state to its children (controls, scroll bars, etc.). + +e.g. setPinned from ControlFlowView: +
+    @Override
+    protected synchronized void setPinned(boolean pinned) {
+
+        /* Is pinned */
+        if (pinned) {
+            /* Ignore all outbound and inbound signal */
+            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());
+        }
+
+        boolean enabled = !pinned;
+
+        fFlatAction.setEnabled(enabled);
+        fHierarchicalAction.setEnabled(enabled);
+        fOptimizationAction.setEnabled(enabled);
+        fPreviousEventAction.setEnabled(enabled);
+        fNextEventAction.setEnabled(enabled);
+        fThreadPresentationMenu.setVisible(enabled);
+        fThreadPresentationMenu.markDirty();
+
+        fShowFollowThreadAction = enabled;
+
+        /* Propagate pin state to viewer */
+        if (getTimeGraphCombo() != null) {
+            getTimeGraphCombo().setPinned(pinned);
+        } else {
+            getTimeGraphViewer().setPinned(pinned);
+        }
+
+        redraw();
+    }
+
+
+ +==== Disabling the pin feature ==== + +If one wishes to disable the pin feature the canBePinned method can be overridden to return false. By default this function returns True. + +e.g.: + +
+    @Override
+    protected boolean canBePinned() {
+        return false;
+    }
+
+ == TMF Built-in Views and Viewers == TMF provides base implementations for several types of views and viewers for generating custom X-Y-Charts, Time Graphs, or Trees. They are well integrated with various TMF features such as reading traces and time synchronization with other views. They also handle mouse events for navigating the trace and view, zooming or presenting detailed information at mouse position. The code can be found in the TMF UI plug-in ''org.eclipse.tracecompass.tmf.ui''. See below for a list of relevant java packages: diff --git a/doc/org.eclipse.tracecompass.doc.dev/doc/images/TmfViewPinAction.png b/doc/org.eclipse.tracecompass.doc.dev/doc/images/TmfViewPinAction.png new file mode 100644 index 0000000000000000000000000000000000000000..992b472302b791e53ae03200e1e1b3ef09504cb9 GIT binary patch literal 23932 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

KS zVMIT$&apb?E(rNIVQzdmxU9{%zPV{xv8Ghn_UGkQ$xQ#Ia1EW9aIqo>Gu04RYROuBW+n zc0V3|-t)TTa&YY1*y8B{xIpXeqAZG# zV-C=9{iNB4H-jEy7>A@q(%2ZH!80c~Qg^1hX|AW_kp9GStZRG$x%B2(M6c?NJfZB+ zvLn8WKy$b78?%AoJAR)HbYGe(81-aofcm( z2Nz*-%HgqoU;)bhdVYK3bSa!)ME|_E|5>A_Pj#tEVm#lwLFo&Qj5zIZDYLpZPI4Uf|~J z2WB8C{3$lg?AAc5D`MGlIpOyHT(+=nrx8~&;16qW{Fa!V=*Th6!s1pP*UUzV$(p+WFgF!h zjmuI@L>24lE7~a;Usbo_(^)U(D~AqRoE=R^>v{11pLO}O@oS?lj2K&`@Xhp0UK8}XYQqpy4aak8r1 llz4jZk3E$7Ybt@P>~pz7{<@T&OW#5 z)RWbxo*cdZC3eoamMynhw%$7X>;K2!|G)nE|Ksof*T4S1`~Cm@@BbhF{Qval|JT3&fBgIZ{ont&3m42? zw1A<=j3H5vAxNEJs-5ZVh@x$twOa!hpK6@HJa5&i>8n>x-@dVL|F(|*|Nk>!1ByRc z7#SEW7<53AAU`p%H9O2H@X(R!_gL~;)mtchL&W8mO^)%0ni?AlY{WKS&0$O4*)qxV zXwk`xF#U)b5f%bMTpY~TssR#@hZtGO&5`sRW@@m y;gwcZkyDkEP*pW`(c)E;->^|$P+rr8nO9vyU19G&1tu4UBS()N@$+zGum%8MtEM~v literal 0 HcmV?d00001 -- 2.34.1