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
_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
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
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
* @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
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
addTraverseListener(this);\r
addKeyListener(this);\r
addControlListener(this);\r
+ addMenuDetectListener(this);\r
ScrollBar scrollHor = getHorizontalBar();\r
\r
if (scrollHor != null) {\r
}\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
}\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