Mercurial > projects > dwt2
comparison org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/provisional/viewers/UnorderedTreeContentProvider.d @ 85:6be48cf9f95c
Work on databinding
author | Frank Benoit <benoit@tionex.de> |
---|---|
date | Sat, 18 Apr 2009 13:54:50 +0200 |
parents | 0a55d2d5a946 |
children |
comparison
equal
deleted
inserted
replaced
84:fcf926c91ca4 | 85:6be48cf9f95c |
---|---|
8 * Contributors: | 8 * Contributors: |
9 * IBM Corporation - initial API and implementation | 9 * IBM Corporation - initial API and implementation |
10 * Stefan Xenos, IBM - initial API and implementation | 10 * Stefan Xenos, IBM - initial API and implementation |
11 *******************************************************************************/ | 11 *******************************************************************************/ |
12 module org.eclipse.jface.internal.databinding.provisional.viewers.UnorderedTreeContentProvider; | 12 module org.eclipse.jface.internal.databinding.provisional.viewers.UnorderedTreeContentProvider; |
13 import org.eclipse.jface.internal.databinding.provisional.viewers.IParentProvider; | |
14 import org.eclipse.jface.internal.databinding.provisional.viewers.TreeNode; | |
13 | 15 |
14 import java.lang.all; | 16 import java.lang.all; |
15 | 17 |
16 import java.util.ArrayList; | 18 import java.util.ArrayList; |
17 import java.util.Collections; | 19 import java.util.Collections; |
43 * @deprecated Use {@link ObservableSetTreeContentProvider} or | 45 * @deprecated Use {@link ObservableSetTreeContentProvider} or |
44 * {@link ObservableListTreeContentProvider} instead. | 46 * {@link ObservableListTreeContentProvider} instead. |
45 */ | 47 */ |
46 public class UnorderedTreeContentProvider : ITreeContentProvider, ITreePathContentProvider { | 48 public class UnorderedTreeContentProvider : ITreeContentProvider, ITreePathContentProvider { |
47 | 49 |
48 private HashMap mapElementToTreeNode = new HashMap(); | 50 private HashMap mapElementToTreeNode; |
49 private LinkedList enqueuedPrefetches = new LinkedList(); | 51 private LinkedList enqueuedPrefetches; |
50 private IParentProvider rootParentProvider = null; | 52 private IParentProvider rootParentProvider = null; |
51 private bool useTreePaths = false; | 53 private bool useTreePaths_ = false; |
52 | 54 |
53 class KnownElementsSet : AbstractObservableSet { | 55 class KnownElementsSet : AbstractObservableSet { |
54 | 56 |
55 protected this() { | 57 protected this() { |
56 super(); | 58 super(); |
85 public Object getElementType() { | 87 public Object getElementType() { |
86 return new Object(); | 88 return new Object(); |
87 } | 89 } |
88 } | 90 } |
89 | 91 |
90 KnownElementsSet elements = new KnownElementsSet(); | 92 KnownElementsSet elements; |
91 | 93 |
92 private ITreeViewerListener expandListener = new class() ITreeViewerListener { | 94 private ITreeViewerListener expandListener; |
95 class ExpandListener : ITreeViewerListener { | |
93 public void treeCollapsed(TreeExpansionEvent event) { | 96 public void treeCollapsed(TreeExpansionEvent event) { |
94 } | 97 } |
95 | 98 |
96 public void treeExpanded(TreeExpansionEvent event) { | 99 public void treeExpanded(TreeExpansionEvent event) { |
97 } | 100 } |
117 * notify the viewer of changes by calling add(...) and remove(...). Using false | 120 * notify the viewer of changes by calling add(...) and remove(...). Using false |
118 * is more efficient, but may not work with TreeViewer subclasses. | 121 * is more efficient, but may not work with TreeViewer subclasses. |
119 */ | 122 */ |
120 public this(IUnorderedTreeProvider provider, | 123 public this(IUnorderedTreeProvider provider, |
121 Object pendingNode, bool useRefresh) { | 124 Object pendingNode, bool useRefresh) { |
125 mapElementToTreeNode = new HashMap(); | |
126 enqueuedPrefetches = new LinkedList(); | |
127 elements = new KnownElementsSet(); | |
128 expandListener = new ExpandListener(); | |
122 this.provider = provider; | 129 this.provider = provider; |
123 this.pendingNode = pendingNode; | 130 this.pendingNode = pendingNode; |
124 this.useRefresh = useRefresh; | 131 this.useRefresh = useRefresh; |
125 } | 132 } |
126 | 133 |
150 * </ul> | 157 * </ul> |
151 * | 158 * |
152 * @param usePaths | 159 * @param usePaths |
153 */ | 160 */ |
154 public void useTreePaths(bool usePaths) { | 161 public void useTreePaths(bool usePaths) { |
155 this.useTreePaths = usePaths; | 162 this.useTreePaths_ = usePaths; |
156 } | 163 } |
157 | 164 |
158 /** | 165 /** |
159 * @param rootParentProvider | 166 * @param rootParentProvider |
160 */ | 167 */ |
179 } | 186 } |
180 if (avoidViewerUpdates is 0) { | 187 if (avoidViewerUpdates is 0) { |
181 if (lastElement || useRefresh) { | 188 if (lastElement || useRefresh) { |
182 doRefresh(element); | 189 doRefresh(element); |
183 } else { | 190 } else { |
184 if (useTreePaths) { | 191 if (useTreePaths_) { |
185 List toRemove = new ArrayList(); | 192 List toRemove = new ArrayList(); |
186 TreePath[] parents = getParents(element); | 193 TreePath[] parents = getParents(element); |
187 for (int i = 0; i < parents.length; i++) { | 194 for (int i = 0; i < parents.length; i++) { |
188 TreePath parent = parents[i]; | 195 TreePath parent = parents[i]; |
189 | 196 |
219 // Handle new parents | 226 // Handle new parents |
220 addParent(element, additions); | 227 addParent(element, additions); |
221 if (useRefresh) { | 228 if (useRefresh) { |
222 doRefresh(element); | 229 doRefresh(element); |
223 } else { | 230 } else { |
224 if (useTreePaths) { | 231 if (useTreePaths_) { |
225 TreePath[] parents = getParents(element); | 232 TreePath[] parents = getParents(element); |
226 for (int i = 0; i < parents.length; i++) { | 233 for (int i = 0; i < parents.length; i++) { |
227 TreePath parent = parents[i]; | 234 TreePath parent = parents[i]; |
228 | 235 |
229 treeViewer.add(parent.createChildPath(element), additions.toArray()); | 236 treeViewer.add(parent.createChildPath(element), additions.toArray()); |
296 | 303 |
297 public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { | 304 public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { |
298 // This should only ever be called for a single viewer | 305 // This should only ever be called for a single viewer |
299 setViewer(viewer); | 306 setViewer(viewer); |
300 | 307 |
301 if (oldInput !is null && newInput !is null && oldInput.equals(newInput)) { | 308 if (oldInput !is null && newInput !is null && oldInput.opEquals(newInput)) { |
302 return; | 309 return; |
303 } | 310 } |
304 | 311 |
305 try { | 312 try { |
306 avoidViewerUpdates++; | 313 avoidViewerUpdates++; |
514 for (Iterator iterator2 = parentPaths.iterator(); iterator2 | 521 for (Iterator iterator2 = parentPaths.iterator(); iterator2 |
515 .hasNext();) { | 522 .hasNext();) { |
516 List parentPath = cast(List) iterator2.next(); | 523 List parentPath = cast(List) iterator2.next(); |
517 | 524 |
518 parentPath.add(parent); | 525 parentPath.add(parent); |
519 result.add(parentPath); | 526 result.add(cast(Object)parentPath); |
520 } | 527 } |
521 } | 528 } |
522 } | 529 } |
523 | 530 |
524 if (containedNode) { | 531 if (containedNode) { |