Download
Getting Started
Members
Projects
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
More
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
Toggle navigation
Bugzilla – Attachment 188864 Details for
Bug 175655
[api][context] provide an on-hover affordance to supplement Alt+click navigation
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read
this important communication.
[patch]
updated patch
clipboard.txt (text/plain), 10.18 KB, created by
Shawn Minto
on 2011-02-13 21:13:01 EST
(
hide
)
Description:
updated patch
Filename:
MIME Type:
Creator:
Shawn Minto
Created:
2011-02-13 21:13:01 EST
Size:
10.18 KB
patch
obsolete
>### Eclipse Workspace Patch 1.0 >#P org.eclipse.mylyn.context.ui >Index: src/org/eclipse/mylyn/internal/context/ui/BrowseFilteredListener.java >=================================================================== >RCS file: /cvsroot/mylyn/org.eclipse.mylyn.contexts/org.eclipse.mylyn.context.ui/src/org/eclipse/mylyn/internal/context/ui/BrowseFilteredListener.java,v >retrieving revision 1.22 >diff -u -r1.22 BrowseFilteredListener.java >--- src/org/eclipse/mylyn/internal/context/ui/BrowseFilteredListener.java 14 Feb 2011 00:29:04 -0000 1.22 >+++ src/org/eclipse/mylyn/internal/context/ui/BrowseFilteredListener.java 14 Feb 2011 02:11:54 -0000 >@@ -42,6 +42,8 @@ > > private final StructuredViewer viewer; > >+ private boolean wasExternalClick = false; >+ > public BrowseFilteredListener(StructuredViewer viewer) { > this.viewer = viewer; > } >@@ -78,6 +80,10 @@ > } > } > >+ public void setWasExternalClick(boolean wasExternalClick) { >+ this.wasExternalClick = wasExternalClick; >+ } >+ > public void keyPressed(KeyEvent event) { > // ignore > } >@@ -130,8 +136,9 @@ > unfilter(filter, treeViewer, selectedObject); > } else { > if (event.button == 1) { >- if ((event.stateMask & SWT.MOD1) != 0) { >+ if ((event.stateMask & SWT.MOD1) != 0 || wasExternalClick) { > viewer.refresh(selectedObject); >+ wasExternalClick = false; > } else { > final Object unfiltered = filter.getLastTemporarilyUnfiltered(); > if (unfiltered != null) { >Index: src/org/eclipse/mylyn/internal/context/ui/FocusedViewerManager.java >=================================================================== >RCS file: /cvsroot/mylyn/org.eclipse.mylyn.contexts/org.eclipse.mylyn.context.ui/src/org/eclipse/mylyn/internal/context/ui/FocusedViewerManager.java,v >retrieving revision 1.49 >diff -u -r1.49 FocusedViewerManager.java >--- src/org/eclipse/mylyn/internal/context/ui/FocusedViewerManager.java 8 Jun 2010 23:04:49 -0000 1.49 >+++ src/org/eclipse/mylyn/internal/context/ui/FocusedViewerManager.java 14 Feb 2011 02:11:54 -0000 >@@ -180,6 +180,7 @@ > managedViewers.add(viewer); > partToViewerMap.put(viewPart, viewer); > BrowseFilteredListener listener = new BrowseFilteredListener(viewer); >+ addFilterDecorations(viewer, listener); > listenerMap.put(viewer, listener); > viewer.getControl().addMouseListener(listener); > viewer.getControl().addKeyListener(listener); >@@ -199,9 +200,34 @@ > } > } > >+ private final Map<TreeViewer, FilteredChildrenDecorationDrawer> decorationMap = new HashMap<TreeViewer, FilteredChildrenDecorationDrawer>(); >+ >+ private void removeFilterDecorations(StructuredViewer viewer) { >+ if (viewer instanceof TreeViewer) { >+ TreeViewer treeViewer = (TreeViewer) viewer; >+ >+ FilteredChildrenDecorationDrawer filterViewDrawer = decorationMap.remove(treeViewer); >+ if (filterViewDrawer != null) { >+ filterViewDrawer.dispose(); >+ } >+ } >+ } >+ >+ private void addFilterDecorations(StructuredViewer viewer, BrowseFilteredListener listener) { >+ if (viewer instanceof TreeViewer) { >+ TreeViewer treeViewer = (TreeViewer) viewer; >+ FilteredChildrenDecorationDrawer filteredViewDrawer = new FilteredChildrenDecorationDrawer(treeViewer, >+ listener); >+ decorationMap.put(treeViewer, filteredViewDrawer); >+ filteredViewDrawer.applyToTreeViewer(); >+ >+ } >+ } >+ > public void removeManagedViewer(StructuredViewer viewer, IWorkbenchPart viewPart) { > managedViewers.remove(viewer); > partToViewerMap.remove(viewPart); >+ removeFilterDecorations(viewer); > BrowseFilteredListener listener = listenerMap.get(viewer); > if (listener != null && viewer != null && !viewer.getControl().isDisposed()) { > viewer.getControl().removeMouseListener(listener); >@@ -368,9 +394,8 @@ > if (viewer instanceof TreeViewer > && filteredViewers.contains(viewer) > && hasInterestFilter(viewer, true) >- && ContextUiPlugin.getDefault() >- .getPreferenceStore() >- .getBoolean(IContextUiPreferenceContstants.AUTO_MANAGE_EXPANSION)) { >+ && ContextUiPlugin.getDefault().getPreferenceStore().getBoolean( >+ IContextUiPreferenceContstants.AUTO_MANAGE_EXPANSION)) { > TreeViewer treeViewer = (TreeViewer) viewer; > > // HACK to fix bug 278569: [context] errors with Markers view and active Mylyn task >Index: src/org/eclipse/mylyn/internal/context/ui/FilteredChildrenDecorationDrawer.java >=================================================================== >RCS file: src/org/eclipse/mylyn/internal/context/ui/FilteredChildrenDecorationDrawer.java >diff -N src/org/eclipse/mylyn/internal/context/ui/FilteredChildrenDecorationDrawer.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/mylyn/internal/context/ui/FilteredChildrenDecorationDrawer.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,186 @@ >+package org.eclipse.mylyn.internal.context.ui; >+ >+import org.eclipse.jface.viewers.StructuredSelection; >+import org.eclipse.jface.viewers.TreeViewer; >+import org.eclipse.mylyn.internal.provisional.commons.ui.CommonImages; >+import org.eclipse.swt.SWT; >+import org.eclipse.swt.events.MouseEvent; >+import org.eclipse.swt.events.MouseListener; >+import org.eclipse.swt.events.MouseMoveListener; >+import org.eclipse.swt.graphics.Image; >+import org.eclipse.swt.graphics.Point; >+import org.eclipse.swt.widgets.Event; >+import org.eclipse.swt.widgets.Listener; >+import org.eclipse.swt.widgets.Tree; >+import org.eclipse.swt.widgets.TreeItem; >+ >+/** >+ * @author Mik Kersten >+ */ >+ >+public class FilteredChildrenDecorationDrawer implements Listener { >+ >+ private final class MoveListener implements MouseMoveListener, MouseListener { >+ >+ private TreeItem lastItem; >+ >+ private final TreeViewer viewer; >+ >+ private final BrowseFilteredListener browseFilteredListener2; >+ >+ public MoveListener(TreeViewer viewer, BrowseFilteredListener browseFilteredListener) { >+ this.viewer = viewer; >+ browseFilteredListener2 = browseFilteredListener; >+ } >+ >+ public void mouseMove(MouseEvent e) { >+ Tree tree = (Tree) e.widget; >+ TreeItem item = findItem(tree, e.y); >+ if (item != null) { >+ if (lastItem != null && !lastItem.isDisposed() && !lastItem.equals(item)) { >+ lastItem.setData(ID_HOVER, NodeState.LESS); >+ } >+ >+ item.setData(ID_HOVER, NodeState.MORE); >+ if (lastItem == null || (!lastItem.isDisposed() && !lastItem.equals(item))) { >+ viewer.getTree().redraw(); >+ } >+ lastItem = item; >+ } else { >+ if (lastItem != null && !lastItem.isDisposed() && !lastItem.equals(item)) { >+ lastItem.setData(ID_HOVER, NodeState.LESS); >+ viewer.getTree().redraw(); >+ } >+ lastItem = item; >+ } >+ } >+ >+ public void mouseDoubleClick(MouseEvent e) { >+ // ignore >+ >+ } >+ >+ public void mouseDown(MouseEvent e) { >+ if (!(e.widget instanceof Tree)) { >+ // we only handle tree's >+ return; >+ } >+ >+ Tree tree = (Tree) e.widget; >+ TreeItem item = findItem(tree, e.y); >+ >+ if (item == null) { >+ // we can't do anything if we cant find the tree items >+ return; >+ } >+ >+ boolean shouldUnfilter = false; >+ int selectedX = e.x; >+ int endOfWidget = item.getBounds().x + +item.getBounds().width; >+ if (endOfWidget < selectedX >+ && item.getBounds().x + item.getBounds().width + IMAGE_PADDING + moreImage.getBounds().width > selectedX) { >+ // in the bounds of the image >+ shouldUnfilter = true; >+ } else if (endOfWidget > tree.getSize().x >+ && selectedX > tree.getSize().x - SCROLL_BAR_OFFSET - moreImage.getBounds().width) { >+ // edge of the view >+ shouldUnfilter = true; >+ } >+ >+ // XXX NEED TO MAKE SURE THAT WE DONT AFFECT ALT+CLICK >+ if (shouldUnfilter) { >+ browseFilteredListener.setWasExternalClick(true); >+ browseFilteredListener.unfilterSelection(viewer, new StructuredSelection(item.getData())); >+ } >+ } >+ >+ public void mouseUp(MouseEvent e) { >+ // ignore >+ >+ } >+ } >+ >+ private static final int SCROLL_BAR_OFFSET = 15; >+ >+ private static final int IMAGE_PADDING = 5; >+ >+ // XXX NEED TO CHANGE THE IMAGE! >+ private final Image moreImage = CommonImages.getImage(CommonImages.PART_MAXIMIZE); >+ >+ enum NodeState { >+ MORE, LESS >+ }; >+ >+ private static final String ID_HOVER = "mylyn-hover"; >+ >+ private final TreeViewer treeViewer; >+ >+ private MoveListener listener; >+ >+ private final BrowseFilteredListener browseFilteredListener; >+ >+ public FilteredChildrenDecorationDrawer(TreeViewer treeViewer, BrowseFilteredListener browseFilteredListener) { >+ this.treeViewer = treeViewer; >+ this.browseFilteredListener = browseFilteredListener; >+ } >+ >+ public void applyToTreeViewer() { >+ treeViewer.getTree().addListener(SWT.PaintItem, this); >+ >+ listener = new MoveListener(treeViewer, browseFilteredListener); >+ treeViewer.getTree().addMouseMoveListener(listener); >+ treeViewer.getTree().addMouseListener(listener); >+ } >+ >+ public void dispose() { >+ if (treeViewer.getTree() == null || treeViewer.getTree().isDisposed()) { >+ return; >+ } >+ treeViewer.getTree().removeListener(SWT.PaintItem, this); >+ >+ treeViewer.getTree().removeMouseMoveListener(listener); >+ treeViewer.getTree().removeMouseListener(listener); >+ } >+ >+ /* >+ * NOTE: MeasureItem, PaintItem and EraseItem are called repeatedly. >+ * Therefore, it is critical for performance that these methods be as >+ * efficient as possible. >+ */ >+ public void handleEvent(Event event) { >+ >+ if (!(event.widget instanceof Tree)) { >+ // we only handle tree's >+ return; >+ } >+ >+ switch (event.type) { >+ case SWT.PaintItem: { >+ Tree tree = (Tree) event.widget; >+ TreeItem item = findItem(tree, event.y); >+ if (item == null) { >+ return; >+ } >+ >+ int imageStartX = event.x + event.width + IMAGE_PADDING; >+ >+ NodeState value = (NodeState) item.getData(ID_HOVER); >+ if (value != null && value.equals(NodeState.MORE)) { >+ event.gc.drawImage(moreImage, imageStartX, event.y); >+ } >+ break; >+ } >+ } >+ } >+ >+ private TreeItem findItem(Tree tree, int y) { >+ TreeItem item = null; >+ Point size = tree.getSize(); >+ final int RATE = 17; >+ for (int i = 0; i <= RATE && item == null; i++) { >+ int position = size.x / RATE + (i * size.x / RATE); >+ item = tree.getItem(new Point(position, y)); >+ } >+ return item; >+ } >+}
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 175655
:
95148
| 188864 |
188865
|
188935
|
188936
|
188948
|
188949
|
188965
|
188966
|
189205
|
189232
|
189452