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 95148 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
[patch]
progress from EclipseCon
clipboard.txt (text/plain), 14.30 KB, created by
Mik Kersten
on 2008-04-08 00:21:03 EDT
(
hide
)
Description:
progress from EclipseCon
Filename:
MIME Type:
Creator:
Mik Kersten
Created:
2008-04-08 00:21:03 EDT
Size:
14.30 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/tools/org.eclipse.mylyn/org.eclipse.mylyn.context.ui/src/org/eclipse/mylyn/internal/context/ui/BrowseFilteredListener.java,v >retrieving revision 1.19 >diff -u -r1.19 BrowseFilteredListener.java >--- src/org/eclipse/mylyn/internal/context/ui/BrowseFilteredListener.java 1 Mar 2008 21:39:19 -0000 1.19 >+++ src/org/eclipse/mylyn/internal/context/ui/BrowseFilteredListener.java 8 Apr 2008 04:20:14 -0000 >@@ -104,6 +104,9 @@ > } > > public void mouseUp(MouseEvent event) { >+ if (true) { >+ return; >+ } > final InterestFilter filter = getInterestFilter(viewer); > if (filter == null || !(viewer instanceof TreeViewer)) { > return; >Index: src/org/eclipse/mylyn/internal/context/ui/FocusedViewerManager.java >=================================================================== >RCS file: /cvsroot/tools/org.eclipse.mylyn/org.eclipse.mylyn.context.ui/src/org/eclipse/mylyn/internal/context/ui/FocusedViewerManager.java,v >retrieving revision 1.23 >diff -u -r1.23 FocusedViewerManager.java >--- src/org/eclipse/mylyn/internal/context/ui/FocusedViewerManager.java 1 Mar 2008 21:39:19 -0000 1.23 >+++ src/org/eclipse/mylyn/internal/context/ui/FocusedViewerManager.java 8 Apr 2008 04:20:14 -0000 >@@ -10,17 +10,18 @@ > > import java.util.ArrayList; > import java.util.Collections; >-import java.util.HashMap; > import java.util.HashSet; > import java.util.List; > import java.util.Map; > import java.util.Set; >+import java.util.concurrent.ConcurrentHashMap; > import java.util.concurrent.CopyOnWriteArrayList; > > import org.eclipse.core.runtime.IStatus; > import org.eclipse.core.runtime.Status; > import org.eclipse.jface.viewers.AbstractTreeViewer; > import org.eclipse.jface.viewers.ISelection; >+import org.eclipse.jface.viewers.StructuredSelection; > import org.eclipse.jface.viewers.StructuredViewer; > import org.eclipse.jface.viewers.TreeViewer; > import org.eclipse.mylyn.context.core.AbstractContextStructureBridge; >@@ -30,7 +31,15 @@ > import org.eclipse.mylyn.context.core.IInteractionElement; > import org.eclipse.mylyn.context.ui.ContextUiPlugin; > import org.eclipse.mylyn.monitor.core.StatusHandler; >+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.Point; >+import org.eclipse.swt.widgets.Tree; >+import org.eclipse.swt.widgets.TreeItem; > import org.eclipse.ui.ISelectionListener; >+import org.eclipse.ui.IViewPart; > import org.eclipse.ui.IWorkbenchPart; > import org.eclipse.ui.PlatformUI; > >@@ -42,13 +51,81 @@ > */ > public class FocusedViewerManager implements IInteractionContextListener2, ISelectionListener { > >+ enum NodeState { >+ MORE, LESS >+ }; >+ >+ private final class MoveListener implements MouseMoveListener, MouseListener { >+ >+ private final BrowseFilteredListener browseFilteredListener; >+ >+ private TreeItem lastItem; >+ >+ private final TreeViewer viewer; >+ >+ public MoveListener(TreeViewer viewer) { >+ this.viewer = viewer; >+ browseFilteredListener = new BrowseFilteredListener(viewer); >+ } >+ >+ public void mouseMove(MouseEvent e) { >+ Tree tree = (Tree) e.widget; >+ >+ // sample points to find item >+ Point size = tree.getSize(); >+ TreeItem item = null; >+ final int RATE = 17; >+ for (int i = 0; i <= RATE && item == null; i++) { >+ int position = size.y / RATE + (i * size.y / RATE); >+ item = tree.getItem(new Point(position, e.y)); >+ } >+ if (item != null) { >+ item.setData(ID_HOVER, NodeState.LESS); >+ if (lastItem != null && !lastItem.isDisposed() && !lastItem.equals(item)) { >+ lastItem.setData(ID_HOVER, NodeState.MORE); >+ viewer.refresh(item.getData().getClass()); >+ } >+ lastItem = item; >+ } >+ } >+ >+ public void mouseDoubleClick(MouseEvent e) { >+ // ignore >+ >+ } >+ >+ public void mouseDown(MouseEvent e) { >+ Tree tree = (Tree) e.widget; >+ TreeItem item = null; >+ Point size = tree.getSize(); >+ final int RATE = 17; >+ for (int i = 0; i <= RATE && item == null; i++) { >+ int position = size.y / RATE + (i * size.y / RATE); >+ item = tree.getItem(new Point(position, e.y)); >+ } >+ browseFilteredListener.unfilterSelection(viewer, new StructuredSelection(item.getData())); >+// System.err.println(">>>>>>>>> " + item.getData().getClass()); >+ } >+ >+ public void mouseUp(MouseEvent e) { >+ // ignore >+ >+ } >+ } >+ >+ static final String ID_HOVER = "mylyn-hover"; >+ > private final CopyOnWriteArrayList<StructuredViewer> managedViewers = new CopyOnWriteArrayList<StructuredViewer>(); > > private final CopyOnWriteArrayList<StructuredViewer> filteredViewers = new CopyOnWriteArrayList<StructuredViewer>(); > >- private final Map<StructuredViewer, BrowseFilteredListener> listenerMap = new HashMap<StructuredViewer, BrowseFilteredListener>(); >+ private final Map<StructuredViewer, BrowseFilteredListener> listenerMap = new ConcurrentHashMap<StructuredViewer, BrowseFilteredListener>(); >+ >+ private final Map<IWorkbenchPart, StructuredViewer> partToViewerMap = new ConcurrentHashMap<IWorkbenchPart, StructuredViewer>(); > >- private final Map<IWorkbenchPart, StructuredViewer> partToViewerMap = new HashMap<IWorkbenchPart, StructuredViewer>(); >+ private final Map<TreeViewer, MoveListener> decorationMap = new ConcurrentHashMap<TreeViewer, MoveListener>(); >+ >+ private final FilteredChildrenDecorationDrawer customDrawer = new FilteredChildrenDecorationDrawer(); > > /** > * For testing. >@@ -79,6 +156,19 @@ > } > } > >+ public void addFilterDecorations(StructuredViewer viewer, IViewPart viewPart) { >+ if (viewer instanceof TreeViewer) { >+ TreeViewer treeViewer = (TreeViewer) viewer; >+ treeViewer.getTree().addListener(SWT.EraseItem, customDrawer); >+ treeViewer.getTree().addListener(SWT.PaintItem, customDrawer); >+ >+ MoveListener listener = new MoveListener(treeViewer); >+ decorationMap.put(treeViewer, listener); >+ treeViewer.getTree().addMouseMoveListener(listener); >+ treeViewer.getTree().addMouseListener(listener); >+ } >+ } >+ > public void removeManagedViewer(StructuredViewer viewer, IWorkbenchPart viewPart) { > managedViewers.remove(viewer); > partToViewerMap.remove(viewPart); >@@ -89,6 +179,18 @@ > } > } > >+ public void removeFilterDecorations(StructuredViewer viewer, IViewPart viewPart) { >+ if (viewer instanceof TreeViewer) { >+ TreeViewer treeViewer = (TreeViewer) viewer; >+ treeViewer.getTree().removeListener(SWT.EraseItem, customDrawer); >+ treeViewer.getTree().removeListener(SWT.PaintItem, customDrawer); >+ >+ MoveListener listener = decorationMap.remove(treeViewer); >+ treeViewer.getTree().removeMouseMoveListener(listener); >+ treeViewer.getTree().removeMouseListener(listener); >+ } >+ } >+ > public void addFilteredViewer(StructuredViewer viewer) { > if (viewer != null && !filteredViewers.contains(viewer)) { > filteredViewers.add(viewer); >Index: src/org/eclipse/mylyn/context/ui/AbstractFocusViewAction.java >=================================================================== >RCS file: /cvsroot/tools/org.eclipse.mylyn/org.eclipse.mylyn.context.ui/src/org/eclipse/mylyn/context/ui/AbstractFocusViewAction.java,v >retrieving revision 1.21 >diff -u -r1.21 AbstractFocusViewAction.java >--- src/org/eclipse/mylyn/context/ui/AbstractFocusViewAction.java 14 Feb 2008 01:29:40 -0000 1.21 >+++ src/org/eclipse/mylyn/context/ui/AbstractFocusViewAction.java 8 Apr 2008 04:20:14 -0000 >@@ -421,6 +421,8 @@ > } > > try { >+ ContextUiPlugin.getViewerManager().addFilterDecorations(viewer, viewPart); >+ > viewer.getControl().setRedraw(false); > previousFilters.put(viewer, Arrays.asList(viewer.getFilters())); > >@@ -466,6 +468,8 @@ > } > > try { >+ ContextUiPlugin.getViewerManager().removeFilterDecorations(viewer, viewPart); >+ > viewer.getControl().setRedraw(false); > if (viewPart != null && manageFilters) { > if (previousFilters.containsKey(viewer)) { >Index: src/org/eclipse/mylyn/internal/context/ui/CustomTaskListDecorationDrawer.java >=================================================================== >RCS file: src/org/eclipse/mylyn/internal/context/ui/CustomTaskListDecorationDrawer.java >diff -N src/org/eclipse/mylyn/internal/context/ui/CustomTaskListDecorationDrawer.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/mylyn/internal/context/ui/CustomTaskListDecorationDrawer.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,41 @@ >+package org.eclipse.mylyn.internal.context.ui; >+ >+import org.eclipse.mylyn.internal.context.ui.FocusedViewerManager.NodeState; >+import org.eclipse.mylyn.internal.tasks.ui.TasksUiImages; >+import org.eclipse.swt.SWT; >+import org.eclipse.swt.graphics.Image; >+import org.eclipse.swt.widgets.Event; >+import org.eclipse.swt.widgets.Listener; >+ >+/** >+ * @author Mik Kersten >+ */ >+class FilteredChildrenDecorationDrawer implements Listener { >+ >+ private final Image moreImage = TasksUiImages.getImage(TasksUiImages.MORE); >+ >+ /* >+ * 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) { >+ Object data = event.item.getData(); >+ switch (event.type) { >+ case SWT.EraseItem: { >+ // ... >+ break; >+ } >+ case SWT.PaintItem: { >+// System.err.println(">>>> " + event.x + ", " + event.y); >+ NodeState value = (NodeState) event.item.getData(FocusedViewerManager.ID_HOVER); >+ if (value != null && value.equals(NodeState.MORE)) { >+ event.gc.drawImage(moreImage, event.x + event.width + 5, event.y); >+ } else if (value != null && value.equals(NodeState.LESS)) { >+ event.gc.drawImage(TasksUiImages.getImage(TasksUiImages.BLANK), event.x + event.width + 5, event.y); >+ } >+ break; >+ } >+ } >+ } >+} >Index: .refactorings/2008/3/12/refactorings.index >=================================================================== >RCS file: .refactorings/2008/3/12/refactorings.index >diff -N .refactorings/2008/3/12/refactorings.index >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ .refactorings/2008/3/12/refactorings.index 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,4 @@ >+1205966017741 Copy file >+1205966034038 Delete element >+1206045710715 Extract constant 'ID_HOVER' >+1206045869142 Convert anonymous class to nested >Index: .refactorings/2008/3/12/refactorings.history >=================================================================== >RCS file: .refactorings/2008/3/12/refactorings.history >diff -N .refactorings/2008/3/12/refactorings.history >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ .refactorings/2008/3/12/refactorings.history 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,3 @@ >+<?xml version="1.0" encoding="UTF-8"?> >+<session version="1.0">
<refactoring comment="Copy 1 elements(s) to 'eview16'
- Original project: 'org.eclipse.mylyn.context.ui'
- Destination element: 'eview16'
- Original element: 'more.png'" description="Copy file" element1="icons/eview16/more.png" files="1" flags="589830" folders="0" id="org.eclipse.jdt.ui.copy" policy="org.eclipse.jdt.ui.copyResources" stamp="1205966017741" target="/org.eclipse.mylyn.tasks.ui/icons/eview16" units="0" version="1.0"/>
<refactoring accessors="true" comment="Delete 1 element(s) from project 'org.eclipse.mylyn.context.ui'
- Original project: 'org.eclipse.mylyn.context.ui'
- Original element: 'more.png'" description="Delete element" element1="icons/eview16/more.png" elements="0" flags="589830" id="org.eclipse.jdt.ui.delete" resources="1" stamp="1205966034038" subPackages="false" version="1.0"/>
<refactoring comment="Extract constant 'org.eclipse.mylyn.internal.context.ui.FocusedViewerManager.ID_HOVER' from expression '"mylyn-hover"'
- Original project: 'org.eclipse.mylyn.context.ui'
- Constant name: 'ID_HOVER'
- Constant expression: '"mylyn-hover"'
- Declared visibility: 'private'
- Replace occurrences of expression with constant" description="Extract constant 'ID_HOVER'" flags="786432" id="org.eclipse.jdt.ui.extract.constant" input="/src<org.eclipse.mylyn.internal.context.ui{FocusedViewerManager.java" name="ID_HOVER" qualify="false" replace="true" selection="3096 13" stamp="1206045710715" version="1.0" visibility="2"/>
<refactoring comment="Convert anonymous class 'org.eclipse.mylyn.internal.context.ui.FocusedViewerManager.new MouseMoveListener() {...}' in '' to nested class
- Original project: 'org.eclipse.mylyn.context.ui'
- Original element: 'org.eclipse.mylyn.internal.context.ui.FocusedViewerManager.new MouseMoveListener() {...}'
- Class name: 'MoveListener'
- Declared visibility: 'private'
- Declare class 'final'" description="Convert anonymous class to nested" final="true" flags="786434" id="org.eclipse.jdt.ui.convert.anonymous" input="/src<org.eclipse.mylyn.internal.context.ui{FocusedViewerManager.java" name="MoveListener" selection="2936 0" stamp="1206045869142" static="false" version="1.0" visibility="2"/> >+</session> >#P org.eclipse.mylyn.tasks.ui >Index: src/org/eclipse/mylyn/internal/tasks/ui/TasksUiImages.java >=================================================================== >RCS file: /cvsroot/tools/org.eclipse.mylyn/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TasksUiImages.java,v >retrieving revision 1.64 >diff -u -r1.64 TasksUiImages.java >--- src/org/eclipse/mylyn/internal/tasks/ui/TasksUiImages.java 9 Mar 2008 06:56:22 -0000 1.64 >+++ src/org/eclipse/mylyn/internal/tasks/ui/TasksUiImages.java 8 Apr 2008 04:20:15 -0000 >@@ -43,6 +43,8 @@ > > private static final URL baseURL = TasksUiPlugin.getDefault().getBundle().getEntry("/icons/"); > >+ public static final ImageDescriptor MORE = create(T_EVIEW, "more.png"); >+ > public static final ImageDescriptor TASK_ACTIVE = create(T_TOOL, "task-active.gif"); > > public static final ImageDescriptor TASK_ACTIVE_CENTERED = create(T_TOOL, "task-active-centered.gif");
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