TMF: add support for popup menu in time chart widgets
authorXavier Raynaud <xavier.raynaud@kalray.eu>
Wed, 12 Sep 2012 15:01:10 +0000 (17:01 +0200)
committerXavier Raynaud <xavier.raynaud@kalray.eu>
Wed, 12 Sep 2012 15:01:10 +0000 (17:01 +0200)
org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/widgets/timegraph/TimeGraphViewer.java
org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/widgets/timegraph/widgets/TimeGraphControl.java

index ca3c629a53698a6acc83a7a1f5c724cfc6a3d2f0..f2a452a54b11bec712614c05061b01460c523959 100644 (file)
@@ -37,6 +37,8 @@ import org.eclipse.swt.events.ControlAdapter;
 import org.eclipse.swt.events.ControlEvent;\r
 import org.eclipse.swt.events.KeyAdapter;\r
 import org.eclipse.swt.events.KeyEvent;\r
+import org.eclipse.swt.events.MenuDetectEvent;\r
+import org.eclipse.swt.events.MenuDetectListener;\r
 import org.eclipse.swt.events.MouseEvent;\r
 import org.eclipse.swt.events.MouseWheelListener;\r
 import org.eclipse.swt.events.SelectionAdapter;\r
@@ -1335,6 +1337,38 @@ public class TimeGraphViewer implements ITimeDataProvider, SelectionListener {
         _verticalScrollBar.setValues(selection, min, max, thumb, increment, pageIncrement);\r
     }\r
 \r
-\r
+       /**\r
+        * @param listener\r
+        * @see org.eclipse.linuxtools.tmf.ui.widgets.timegraph.widgets.TimeGraphControl#addTimeGraphEntryMenuListener(org.eclipse.swt.events.MenuDetectListener)\r
+        */\r
+       public void addTimeGraphEntryMenuListener(MenuDetectListener listener) {\r
+               _stateCtrl.addTimeGraphEntryMenuListener(listener);\r
+       }\r
+\r
+       /**\r
+        * @param listener\r
+        * @see org.eclipse.linuxtools.tmf.ui.widgets.timegraph.widgets.TimeGraphControl#removeTimeGraphEntryMenuListener(org.eclipse.swt.events.MenuDetectListener)\r
+        */\r
+       public void removeTimeGraphEntryMenuListener(MenuDetectListener listener) {\r
+               _stateCtrl.removeTimeGraphEntryMenuListener(listener);\r
+       }\r
+\r
+       /**\r
+        * @param listener\r
+        * @see org.eclipse.linuxtools.tmf.ui.widgets.timegraph.widgets.TimeGraphControl#addTimeEventMenuListener(org.eclipse.swt.events.MenuDetectListener)\r
+        */\r
+       public void addTimeEventMenuListener(MenuDetectListener listener) {\r
+               _stateCtrl.addTimeEventMenuListener(listener);\r
+       }\r
+\r
+       /**\r
+        * @param listener\r
+        * @see org.eclipse.linuxtools.tmf.ui.widgets.timegraph.widgets.TimeGraphControl#removeTimeEventMenuListener(org.eclipse.swt.events.MenuDetectListener)\r
+        */\r
+       public void removeTimeEventMenuListener(MenuDetectListener listener) {\r
+               _stateCtrl.removeTimeEventMenuListener(listener);\r
+       }\r
+\r
+    \r
 \r
 }\r
index 8bce4c89b23c0b5a10f148ddcb15140120d080ad..a77d81b16abc06ced4a10e4ee4bf4469226b89b9 100644 (file)
@@ -38,6 +38,8 @@ import org.eclipse.swt.events.FocusEvent;
 import org.eclipse.swt.events.FocusListener;\r
 import org.eclipse.swt.events.KeyEvent;\r
 import org.eclipse.swt.events.KeyListener;\r
+import org.eclipse.swt.events.MenuDetectEvent;\r
+import org.eclipse.swt.events.MenuDetectListener;\r
 import org.eclipse.swt.events.MouseEvent;\r
 import org.eclipse.swt.events.MouseListener;\r
 import org.eclipse.swt.events.MouseMoveListener;\r
@@ -48,6 +50,7 @@ import org.eclipse.swt.events.SelectionEvent;
 import org.eclipse.swt.events.SelectionListener;\r
 import org.eclipse.swt.events.TraverseEvent;\r
 import org.eclipse.swt.events.TraverseListener;\r
+import org.eclipse.swt.events.TypedEvent;\r
 import org.eclipse.swt.graphics.Color;\r
 import org.eclipse.swt.graphics.Cursor;\r
 import org.eclipse.swt.graphics.GC;\r
@@ -67,7 +70,7 @@ import org.eclipse.swt.widgets.ScrollBar;
  * @author Alvaro Sanchez-Leon\r
  * @author Patrick Tasse\r
  */\r
-public class TimeGraphControl extends TimeGraphBaseControl implements FocusListener, KeyListener, MouseMoveListener, MouseListener, MouseWheelListener, ControlListener, SelectionListener, MouseTrackListener, TraverseListener, ISelectionProvider {\r
+public class TimeGraphControl extends TimeGraphBaseControl implements FocusListener, KeyListener, MouseMoveListener, MouseListener, MouseWheelListener, ControlListener, SelectionListener, MouseTrackListener, TraverseListener, ISelectionProvider, MenuDetectListener {\r
 \r
     private static final int DRAG_NONE = 0;\r
     private static final int DRAG_TRACE_ITEM = 1;\r
@@ -100,6 +103,8 @@ public class TimeGraphControl extends TimeGraphBaseControl implements FocusListe
     private List<SelectionListener> _selectionListeners;\r
     private final List<ISelectionChangedListener> _selectionChangedListeners = new ArrayList<ISelectionChangedListener>();\r
     private final List<ITimeGraphTreeListener> _treeListeners = new ArrayList<ITimeGraphTreeListener>();\r
+    private final List<MenuDetectListener> _timeGraphEntryMenuListeners = new ArrayList<MenuDetectListener>();\r
+    private final List<MenuDetectListener> _timeEventMenuListeners = new ArrayList<MenuDetectListener>();\r
     private final Cursor _dragCursor3;\r
     private final Cursor _WaitCursor;\r
 \r
@@ -172,6 +177,7 @@ public class TimeGraphControl extends TimeGraphBaseControl implements FocusListe
         addTraverseListener(this);\r
         addKeyListener(this);\r
         addControlListener(this);\r
+        addMenuDetectListener(this);\r
         ScrollBar scrollHor = getHorizontalBar();\r
 \r
         if (scrollHor != null) {\r
@@ -459,6 +465,78 @@ public class TimeGraphControl extends TimeGraphBaseControl implements FocusListe
             }\r
         }\r
     }\r
+    \r
+    /**\r
+     * Add a menu listener on {@link ITimeGraphEntry}s\r
+     *\r
+     * @param listener\r
+     *            The listener to add\r
+     */\r
+    public void addTimeGraphEntryMenuListener(MenuDetectListener listener) {\r
+        if (!_timeGraphEntryMenuListeners.contains(listener)) {\r
+               _timeGraphEntryMenuListeners.add(listener);\r
+        }\r
+    }\r
+\r
+    /**\r
+     * Remove a menu listener on {@link ITimeGraphEntry}s\r
+     *\r
+     * @param listener\r
+     *            The listener to remove\r
+     */\r
+    public void removeTimeGraphEntryMenuListener(MenuDetectListener listener) {\r
+        if (_timeGraphEntryMenuListeners.contains(listener)) {\r
+               _timeGraphEntryMenuListeners.remove(listener);\r
+        }\r
+    }\r
+\r
+    /**\r
+     * Menu event callback on {@link ITimeGraphEntry}s\r
+     *\r
+     * @param event\r
+     *            The MenuDetectEvent, with field {@link TypedEvent#data} set to the selected {@link ITimeGraphEntry}\r
+     */\r
+    private void fireMenuEventOnTimeGraphEntry(MenuDetectEvent event) {\r
+        for (MenuDetectListener listener : _timeGraphEntryMenuListeners) {\r
+               listener.menuDetected(event);\r
+        }\r
+    }\r
+    \r
+    /**\r
+     * Add a menu listener on {@link ITimeEvent}s\r
+     *\r
+     * @param listener\r
+     *            The listener to add\r
+     */\r
+    public void addTimeEventMenuListener(MenuDetectListener listener) {\r
+        if (!_timeEventMenuListeners.contains(listener)) {\r
+               _timeEventMenuListeners.add(listener);\r
+        }\r
+    }\r
+\r
+    /**\r
+     * Remove a menu listener on {@link ITimeEvent}s\r
+     *\r
+     * @param listener\r
+     *            The listener to remove\r
+     */\r
+    public void removeTimeEventMenuListener(MenuDetectListener listener) {\r
+        if (_timeEventMenuListeners.contains(listener)) {\r
+               _timeEventMenuListeners.remove(listener);\r
+        }\r
+    }\r
+\r
+    /**\r
+     * Menu event callback on {@link ITimeEvent}s\r
+     *\r
+     * @param event\r
+     *            The MenuDetectEvent, with field {@link TypedEvent#data} set to the selected {@link ITimeEvent}\r
+     */\r
+    private void fireMenuEventOnTimeEvent(MenuDetectEvent event) {\r
+        for (MenuDetectListener listener : _timeEventMenuListeners) {\r
+               listener.menuDetected(event);\r
+        }\r
+    }\r
 \r
     @Override\r
     public ISelection getSelection() {\r
@@ -1887,5 +1965,28 @@ public class TimeGraphControl extends TimeGraphBaseControl implements FocusListe
         }\r
     }\r
 \r
+       @Override\r
+       public void menuDetected(MenuDetectEvent e) {\r
+               if (null == _timeProvider) {\r
+            return;\r
+        }\r
+               Point p = toControl(e.x, e.y);\r
+               int idx = getItemIndexAtY(p.y);\r
+               if (idx >= 0 && idx < _data._expandedItems.length) {\r
+                       Item item = _data._expandedItems[idx];\r
+                       ITimeGraphEntry entry = item._trace;\r
+                       if (entry.hasTimeEvents()) {\r
+                               ITimeEvent event = Utils.findEvent(entry, getTimeAtX(p.x), 2);\r
+                if (event != null) {\r
+                       e.data = event;\r
+                       fireMenuEventOnTimeEvent(e);\r
+                       return;\r
+                }\r
+                       }\r
+                       e.data = entry;\r
+                       fireMenuEventOnTimeGraphEntry(e);\r
+               }\r
+       }\r
+\r
 }\r
 \r
This page took 0.031524 seconds and 5 git commands to generate.