Lines 10-26
Link Here
|
10 |
|
10 |
|
11 |
import java.util.ArrayList; |
11 |
import java.util.ArrayList; |
12 |
import java.util.Collections; |
12 |
import java.util.Collections; |
13 |
import java.util.HashMap; |
|
|
14 |
import java.util.HashSet; |
13 |
import java.util.HashSet; |
15 |
import java.util.List; |
14 |
import java.util.List; |
16 |
import java.util.Map; |
15 |
import java.util.Map; |
17 |
import java.util.Set; |
16 |
import java.util.Set; |
|
|
17 |
import java.util.concurrent.ConcurrentHashMap; |
18 |
import java.util.concurrent.CopyOnWriteArrayList; |
18 |
import java.util.concurrent.CopyOnWriteArrayList; |
19 |
|
19 |
|
20 |
import org.eclipse.core.runtime.IStatus; |
20 |
import org.eclipse.core.runtime.IStatus; |
21 |
import org.eclipse.core.runtime.Status; |
21 |
import org.eclipse.core.runtime.Status; |
22 |
import org.eclipse.jface.viewers.AbstractTreeViewer; |
22 |
import org.eclipse.jface.viewers.AbstractTreeViewer; |
23 |
import org.eclipse.jface.viewers.ISelection; |
23 |
import org.eclipse.jface.viewers.ISelection; |
|
|
24 |
import org.eclipse.jface.viewers.StructuredSelection; |
24 |
import org.eclipse.jface.viewers.StructuredViewer; |
25 |
import org.eclipse.jface.viewers.StructuredViewer; |
25 |
import org.eclipse.jface.viewers.TreeViewer; |
26 |
import org.eclipse.jface.viewers.TreeViewer; |
26 |
import org.eclipse.mylyn.context.core.AbstractContextStructureBridge; |
27 |
import org.eclipse.mylyn.context.core.AbstractContextStructureBridge; |
Lines 30-36
Link Here
|
30 |
import org.eclipse.mylyn.context.core.IInteractionElement; |
31 |
import org.eclipse.mylyn.context.core.IInteractionElement; |
31 |
import org.eclipse.mylyn.context.ui.ContextUiPlugin; |
32 |
import org.eclipse.mylyn.context.ui.ContextUiPlugin; |
32 |
import org.eclipse.mylyn.monitor.core.StatusHandler; |
33 |
import org.eclipse.mylyn.monitor.core.StatusHandler; |
|
|
34 |
import org.eclipse.swt.SWT; |
35 |
import org.eclipse.swt.events.MouseEvent; |
36 |
import org.eclipse.swt.events.MouseListener; |
37 |
import org.eclipse.swt.events.MouseMoveListener; |
38 |
import org.eclipse.swt.graphics.Point; |
39 |
import org.eclipse.swt.widgets.Tree; |
40 |
import org.eclipse.swt.widgets.TreeItem; |
33 |
import org.eclipse.ui.ISelectionListener; |
41 |
import org.eclipse.ui.ISelectionListener; |
|
|
42 |
import org.eclipse.ui.IViewPart; |
34 |
import org.eclipse.ui.IWorkbenchPart; |
43 |
import org.eclipse.ui.IWorkbenchPart; |
35 |
import org.eclipse.ui.PlatformUI; |
44 |
import org.eclipse.ui.PlatformUI; |
36 |
|
45 |
|
Lines 42-54
Link Here
|
42 |
*/ |
51 |
*/ |
43 |
public class FocusedViewerManager implements IInteractionContextListener2, ISelectionListener { |
52 |
public class FocusedViewerManager implements IInteractionContextListener2, ISelectionListener { |
44 |
|
53 |
|
|
|
54 |
enum NodeState { |
55 |
MORE, LESS |
56 |
}; |
57 |
|
58 |
private final class MoveListener implements MouseMoveListener, MouseListener { |
59 |
|
60 |
private final BrowseFilteredListener browseFilteredListener; |
61 |
|
62 |
private TreeItem lastItem; |
63 |
|
64 |
private final TreeViewer viewer; |
65 |
|
66 |
public MoveListener(TreeViewer viewer) { |
67 |
this.viewer = viewer; |
68 |
browseFilteredListener = new BrowseFilteredListener(viewer); |
69 |
} |
70 |
|
71 |
public void mouseMove(MouseEvent e) { |
72 |
Tree tree = (Tree) e.widget; |
73 |
|
74 |
// sample points to find item |
75 |
Point size = tree.getSize(); |
76 |
TreeItem item = null; |
77 |
final int RATE = 17; |
78 |
for (int i = 0; i <= RATE && item == null; i++) { |
79 |
int position = size.y / RATE + (i * size.y / RATE); |
80 |
item = tree.getItem(new Point(position, e.y)); |
81 |
} |
82 |
if (item != null) { |
83 |
item.setData(ID_HOVER, NodeState.LESS); |
84 |
if (lastItem != null && !lastItem.isDisposed() && !lastItem.equals(item)) { |
85 |
lastItem.setData(ID_HOVER, NodeState.MORE); |
86 |
viewer.refresh(item.getData().getClass()); |
87 |
} |
88 |
lastItem = item; |
89 |
} |
90 |
} |
91 |
|
92 |
public void mouseDoubleClick(MouseEvent e) { |
93 |
// ignore |
94 |
|
95 |
} |
96 |
|
97 |
public void mouseDown(MouseEvent e) { |
98 |
Tree tree = (Tree) e.widget; |
99 |
TreeItem item = null; |
100 |
Point size = tree.getSize(); |
101 |
final int RATE = 17; |
102 |
for (int i = 0; i <= RATE && item == null; i++) { |
103 |
int position = size.y / RATE + (i * size.y / RATE); |
104 |
item = tree.getItem(new Point(position, e.y)); |
105 |
} |
106 |
browseFilteredListener.unfilterSelection(viewer, new StructuredSelection(item.getData())); |
107 |
// System.err.println(">>>>>>>>> " + item.getData().getClass()); |
108 |
} |
109 |
|
110 |
public void mouseUp(MouseEvent e) { |
111 |
// ignore |
112 |
|
113 |
} |
114 |
} |
115 |
|
116 |
static final String ID_HOVER = "mylyn-hover"; |
117 |
|
45 |
private final CopyOnWriteArrayList<StructuredViewer> managedViewers = new CopyOnWriteArrayList<StructuredViewer>(); |
118 |
private final CopyOnWriteArrayList<StructuredViewer> managedViewers = new CopyOnWriteArrayList<StructuredViewer>(); |
46 |
|
119 |
|
47 |
private final CopyOnWriteArrayList<StructuredViewer> filteredViewers = new CopyOnWriteArrayList<StructuredViewer>(); |
120 |
private final CopyOnWriteArrayList<StructuredViewer> filteredViewers = new CopyOnWriteArrayList<StructuredViewer>(); |
48 |
|
121 |
|
49 |
private final Map<StructuredViewer, BrowseFilteredListener> listenerMap = new HashMap<StructuredViewer, BrowseFilteredListener>(); |
122 |
private final Map<StructuredViewer, BrowseFilteredListener> listenerMap = new ConcurrentHashMap<StructuredViewer, BrowseFilteredListener>(); |
|
|
123 |
|
124 |
private final Map<IWorkbenchPart, StructuredViewer> partToViewerMap = new ConcurrentHashMap<IWorkbenchPart, StructuredViewer>(); |
50 |
|
125 |
|
51 |
private final Map<IWorkbenchPart, StructuredViewer> partToViewerMap = new HashMap<IWorkbenchPart, StructuredViewer>(); |
126 |
private final Map<TreeViewer, MoveListener> decorationMap = new ConcurrentHashMap<TreeViewer, MoveListener>(); |
|
|
127 |
|
128 |
private final FilteredChildrenDecorationDrawer customDrawer = new FilteredChildrenDecorationDrawer(); |
52 |
|
129 |
|
53 |
/** |
130 |
/** |
54 |
* For testing. |
131 |
* For testing. |
Lines 79-84
Link Here
|
79 |
} |
156 |
} |
80 |
} |
157 |
} |
81 |
|
158 |
|
|
|
159 |
public void addFilterDecorations(StructuredViewer viewer, IViewPart viewPart) { |
160 |
if (viewer instanceof TreeViewer) { |
161 |
TreeViewer treeViewer = (TreeViewer) viewer; |
162 |
treeViewer.getTree().addListener(SWT.EraseItem, customDrawer); |
163 |
treeViewer.getTree().addListener(SWT.PaintItem, customDrawer); |
164 |
|
165 |
MoveListener listener = new MoveListener(treeViewer); |
166 |
decorationMap.put(treeViewer, listener); |
167 |
treeViewer.getTree().addMouseMoveListener(listener); |
168 |
treeViewer.getTree().addMouseListener(listener); |
169 |
} |
170 |
} |
171 |
|
82 |
public void removeManagedViewer(StructuredViewer viewer, IWorkbenchPart viewPart) { |
172 |
public void removeManagedViewer(StructuredViewer viewer, IWorkbenchPart viewPart) { |
83 |
managedViewers.remove(viewer); |
173 |
managedViewers.remove(viewer); |
84 |
partToViewerMap.remove(viewPart); |
174 |
partToViewerMap.remove(viewPart); |
Lines 89-94
Link Here
|
89 |
} |
179 |
} |
90 |
} |
180 |
} |
91 |
|
181 |
|
|
|
182 |
public void removeFilterDecorations(StructuredViewer viewer, IViewPart viewPart) { |
183 |
if (viewer instanceof TreeViewer) { |
184 |
TreeViewer treeViewer = (TreeViewer) viewer; |
185 |
treeViewer.getTree().removeListener(SWT.EraseItem, customDrawer); |
186 |
treeViewer.getTree().removeListener(SWT.PaintItem, customDrawer); |
187 |
|
188 |
MoveListener listener = decorationMap.remove(treeViewer); |
189 |
treeViewer.getTree().removeMouseMoveListener(listener); |
190 |
treeViewer.getTree().removeMouseListener(listener); |
191 |
} |
192 |
} |
193 |
|
92 |
public void addFilteredViewer(StructuredViewer viewer) { |
194 |
public void addFilteredViewer(StructuredViewer viewer) { |
93 |
if (viewer != null && !filteredViewers.contains(viewer)) { |
195 |
if (viewer != null && !filteredViewers.contains(viewer)) { |
94 |
filteredViewers.add(viewer); |
196 |
filteredViewers.add(viewer); |