diff options
author | Judith Gull | 2015-05-26 16:45:10 +0000 |
---|---|---|
committer | Judith Gull | 2015-05-27 11:10:09 +0000 |
commit | 4768aeb7e78427e6f11ba9d2d36b84c7485e3d2f (patch) | |
tree | ae5829a24342580af8373682541517eb71a4fabf | |
parent | 18bb94b650df6a237bdd579bed0b87c40905111b (diff) | |
download | org.eclipse.scout.rt-4768aeb7e78427e6f11ba9d2d36b84c7485e3d2f.tar.gz org.eclipse.scout.rt-4768aeb7e78427e6f11ba9d2d36b84c7485e3d2f.tar.xz org.eclipse.scout.rt-4768aeb7e78427e6f11ba9d2d36b84c7485e3d2f.zip |
Fix: Use mouseup listener to detect node clicks and store item on event
before sending
Problem with selection listener: position not correct
Problem with mouseup listener: incorrect item found when scrolling
Change-Id: I967572cc1f92eec23e1f0489b3c4ef8491935308
Reviewed-on: https://git.eclipse.org/r/48720
Tested-by: Hudson CI
Reviewed-by: Judith Gull <jgu@bsiag.com>
-rw-r--r-- | org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/basic/tree/RwtScoutTree.java | 25 | ||||
-rw-r--r-- | org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/ext/tree/TreeEx.java | 24 |
2 files changed, 41 insertions, 8 deletions
diff --git a/org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/basic/tree/RwtScoutTree.java b/org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/basic/tree/RwtScoutTree.java index ea0709885f..3ab9f5dc72 100644 --- a/org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/basic/tree/RwtScoutTree.java +++ b/org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/basic/tree/RwtScoutTree.java @@ -27,7 +27,6 @@ import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.jface.viewers.TreeExpansionEvent; import org.eclipse.jface.viewers.TreePath; import org.eclipse.jface.viewers.TreeViewer; -import org.eclipse.jface.viewers.ViewerCell; import org.eclipse.rap.rwt.RWT; import org.eclipse.scout.commons.CollectionUtility; import org.eclipse.scout.commons.StringUtility; @@ -69,6 +68,7 @@ import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Menu; +import org.eclipse.swt.widgets.TreeItem; /** * @since 3.8.0 @@ -109,7 +109,8 @@ public class RwtScoutTree extends RwtScoutComposite<ITree> implements IRwtScoutT viewer.addDoubleClickListener(new P_RwtDoubleClickListener()); P_RwtTreeListener treeListener = new P_RwtTreeListener(); - viewer.getTree().addListener(SWT.Selection, treeListener); + //selection events do not contain correct position of the node + viewer.getTree().addListener(SWT.MouseDown, treeListener); viewer.getTree().addListener(SWT.MouseUp, treeListener); viewer.getTree().addListener(SWT.MenuDetect, treeListener); @@ -785,11 +786,10 @@ public class RwtScoutTree extends RwtScoutComposite<ITree> implements IRwtScoutT @Override public void handleEvent(Event event) { switch (event.type) { - case SWT.Selection: { - ViewerCell cell = getUiTreeViewer().getCell(new Point(event.x, event.y)); - if (cell != null && cell.getBounds().contains(event.x, event.y) && cell.getElement() instanceof ITreeNode) { - ITreeNode nodeToClick = (ITreeNode) cell.getElement(); - handleUiNodeClick(nodeToClick, event.button); + case SWT.MouseUp: { + ITreeNode node = findTreeNode(event); + if (node != null) { + handleUiNodeClick(node, event.button); } break; } @@ -804,6 +804,17 @@ public class RwtScoutTree extends RwtScoutComposite<ITree> implements IRwtScoutT } } } + + private ITreeNode findTreeNode(Event event) { + if (event.data instanceof TreeItem) { + TreeItem item = (TreeItem) event.data; + if (item.getData() instanceof ITreeNode) { + return (ITreeNode) item.getData(); + } + } + //not found + return null; + } } private class P_RwtExpansionListener implements ITreeViewerListener { diff --git a/org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/ext/tree/TreeEx.java b/org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/ext/tree/TreeEx.java index deb137ddd0..601c69cc3b 100644 --- a/org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/ext/tree/TreeEx.java +++ b/org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/ext/tree/TreeEx.java @@ -33,7 +33,7 @@ public class TreeEx extends Tree { public TreeEx(Composite parent, int style) { super(parent, style | SWT.FULL_SELECTION); - addListener(SWT.MouseDown, new Listener() { + addListener(SWT.MouseUp, new Listener() { private static final long serialVersionUID = 1L; @Override @@ -44,6 +44,28 @@ public class TreeEx extends Tree { } @Override + public void notifyListeners(int eventType, Event event) { + //add context item to event before the table may change (e.g. scrolling due to node expansion) + if (isClick(event)) { + TreeItem contextItem = getItem(new Point(event.x, event.y)); + Rectangle bounds = contextItem.getBounds(); + + //make sure no item is added for expansion events + if (event.x >= bounds.x) { + if (event.data == null) { + event.data = contextItem; + } + } + + } + super.notifyListeners(eventType, event); + } + + private boolean isClick(Event event) { + return event.type == SWT.MouseDown || event.type == SWT.MouseUp; + } + + @Override protected void checkSubclass() { // allow subclassing } |