Mercurial > projects > dwt-samples
comparison jface/snippets/Snippet047VirtualLazyTreeViewer.d @ 140:2b4e94cafb85
tabs vs. spaces
author | Frank Benoit <benoit@tionex.de> |
---|---|
date | Thu, 07 Aug 2008 17:16:24 +0200 |
parents | 96a2d0b35360 |
children | 42c3056512ba |
comparison
equal
deleted
inserted
replaced
139:1e91ab2ac6d3 | 140:2b4e94cafb85 |
---|---|
53 */ | 53 */ |
54 public class Snippet047VirtualLazyTreeViewer { | 54 public class Snippet047VirtualLazyTreeViewer { |
55 alias ArrayWrapperT!(IntermediateNode) ArrayWrapperIntermediateNode; | 55 alias ArrayWrapperT!(IntermediateNode) ArrayWrapperIntermediateNode; |
56 alias ArrayWrapperT!(LeafNode) ArrayWrapperLeafNode; | 56 alias ArrayWrapperT!(LeafNode) ArrayWrapperLeafNode; |
57 | 57 |
58 private class MyContentProvider : ILazyTreeContentProvider { | 58 private class MyContentProvider : ILazyTreeContentProvider { |
59 private TreeViewer viewer; | 59 private TreeViewer viewer; |
60 private IntermediateNode[] elements; | 60 private IntermediateNode[] elements; |
61 | 61 |
62 public this(TreeViewer viewer) { | 62 public this(TreeViewer viewer) { |
63 this.viewer = viewer; | 63 this.viewer = viewer; |
64 } | 64 } |
65 | 65 |
66 public void dispose() { | 66 public void dispose() { |
67 | 67 |
68 } | 68 } |
69 | 69 |
70 public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { | 70 public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { |
71 if(cast(ArrayWrapperIntermediateNode) newInput) | 71 if(cast(ArrayWrapperIntermediateNode) newInput) |
72 this.elements = (cast(ArrayWrapperIntermediateNode) newInput).array; | 72 this.elements = (cast(ArrayWrapperIntermediateNode) newInput).array; |
73 } | 73 } |
74 | 74 |
75 /* | 75 /* |
76 * (non-Javadoc) | 76 * (non-Javadoc) |
77 * | 77 * |
78 * @see dwtx.jface.viewers.ILazyTreeContentProvider#getParent(java.lang.Object) | 78 * @see dwtx.jface.viewers.ILazyTreeContentProvider#getParent(java.lang.Object) |
79 */ | 79 */ |
80 public Object getParent(Object element) { | 80 public Object getParent(Object element) { |
81 if (cast(LeafNode)element) | 81 if (cast(LeafNode)element) |
82 return (cast(LeafNode) element).parent; | 82 return (cast(LeafNode) element).parent; |
83 return new ArrayWrapperIntermediateNode(elements); | 83 return new ArrayWrapperIntermediateNode(elements); |
84 } | 84 } |
85 | 85 |
86 /* | 86 /* |
87 * (non-Javadoc) | 87 * (non-Javadoc) |
88 * | 88 * |
89 * @see dwtx.jface.viewers.ILazyTreeContentProvider#updateChildCount(java.lang.Object, | 89 * @see dwtx.jface.viewers.ILazyTreeContentProvider#updateChildCount(java.lang.Object, |
90 * int) | 90 * int) |
91 */ | 91 */ |
92 public void updateChildCount(Object element, int currentChildCount) { | 92 public void updateChildCount(Object element, int currentChildCount) { |
93 | 93 |
94 int length = 0; | 94 int length = 0; |
95 if (cast(IntermediateNode)element) { | 95 if (cast(IntermediateNode)element) { |
96 IntermediateNode node = cast(IntermediateNode) element; | 96 IntermediateNode node = cast(IntermediateNode) element; |
97 length = node.children.length; | 97 length = node.children.length; |
98 } | 98 } |
99 /// TODO: fix me access violation here | 99 /// TODO: fix me access violation here |
100 if(element !is null && elements !is null && (cast(ArrayWrapperIntermediateNode)element) && (cast(ArrayWrapperIntermediateNode)element).array is elements) | 100 if(element !is null && elements !is null && (cast(ArrayWrapperIntermediateNode)element) && (cast(ArrayWrapperIntermediateNode)element).array is elements) |
101 length = elements.length; | 101 length = elements.length; |
102 viewer.setChildCount(element, length); | 102 viewer.setChildCount(element, length); |
103 } | 103 } |
104 | 104 |
105 /* | 105 /* |
106 * (non-Javadoc) | 106 * (non-Javadoc) |
107 * | 107 * |
108 * @see dwtx.jface.viewers.ILazyTreeContentProvider#updateElement(java.lang.Object, | 108 * @see dwtx.jface.viewers.ILazyTreeContentProvider#updateElement(java.lang.Object, |
109 * int) | 109 * int) |
110 */ | 110 */ |
111 public void updateElement(Object parent, int index) { | 111 public void updateElement(Object parent, int index) { |
112 | 112 |
113 Object element; | 113 Object element; |
114 if (cast(IntermediateNode)parent) | 114 if (cast(IntermediateNode)parent) |
115 element = (cast(IntermediateNode) parent).children[index]; | 115 element = (cast(IntermediateNode) parent).children[index]; |
116 | 116 |
117 else | 117 else |
118 element = elements[index]; | 118 element = elements[index]; |
119 viewer.replace(parent, index, element); | 119 viewer.replace(parent, index, element); |
120 updateChildCount(element, -1); | 120 updateChildCount(element, -1); |
121 | 121 |
122 } | 122 } |
123 | 123 |
124 } | 124 } |
125 | 125 |
126 public class LeafNode { | 126 public class LeafNode { |
127 public int counter; | 127 public int counter; |
128 public IntermediateNode parent; | 128 public IntermediateNode parent; |
129 | 129 |
130 public this(int counter, IntermediateNode parent) { | 130 public this(int counter, IntermediateNode parent) { |
131 this.counter = counter; | 131 this.counter = counter; |
132 this.parent = parent; | 132 this.parent = parent; |
133 } | 133 } |
134 | 134 |
135 public String toString() { | 135 public String toString() { |
136 return "Leaf " ~ to!(String)(this.counter); | 136 return "Leaf " ~ to!(String)(this.counter); |
137 } | 137 } |
138 } | 138 } |
139 | 139 |
140 public class IntermediateNode { | 140 public class IntermediateNode { |
141 public int counter; | 141 public int counter; |
142 public LeafNode[] children; | 142 public LeafNode[] children; |
143 | 143 |
144 public this(int counter) { | 144 public this(int counter) { |
145 this.counter = counter; | 145 this.counter = counter; |
146 children = new LeafNode[0]; | 146 children = new LeafNode[0]; |
147 } | 147 } |
148 | 148 |
149 public String toString() { | 149 public String toString() { |
150 return "Node " ~ to!(String)(this.counter); | 150 return "Node " ~ to!(String)(this.counter); |
151 } | 151 } |
152 | 152 |
153 public void generateChildren(int i) { | 153 public void generateChildren(int i) { |
154 children = new LeafNode[i]; | 154 children = new LeafNode[i]; |
155 for (int j = 0; j < i; j++) { | 155 for (int j = 0; j < i; j++) { |
156 children[j] = new LeafNode(j, this); | 156 children[j] = new LeafNode(j, this); |
157 } | 157 } |
158 | 158 |
159 } | 159 } |
160 } | 160 } |
161 | 161 |
162 public this(Shell shell) { | 162 public this(Shell shell) { |
163 final TreeViewer v = new TreeViewer(shell, DWT.VIRTUAL | DWT.BORDER); | 163 final TreeViewer v = new TreeViewer(shell, DWT.VIRTUAL | DWT.BORDER); |
164 v.setLabelProvider(new LabelProvider()); | 164 v.setLabelProvider(new LabelProvider()); |
165 v.setContentProvider(new MyContentProvider(v)); | 165 v.setContentProvider(new MyContentProvider(v)); |
166 v.setUseHashlookup(true); | 166 v.setUseHashlookup(true); |
167 IntermediateNode[] model = createModel(); | 167 IntermediateNode[] model = createModel(); |
168 v.setInput(new ArrayWrapperIntermediateNode(model)); | 168 v.setInput(new ArrayWrapperIntermediateNode(model)); |
169 v.getTree().setItemCount(model.length); | 169 v.getTree().setItemCount(model.length); |
170 | 170 |
171 } | 171 } |
172 | 172 |
173 private IntermediateNode[] createModel() { | 173 private IntermediateNode[] createModel() { |
174 IntermediateNode[] elements = new IntermediateNode[10]; | 174 IntermediateNode[] elements = new IntermediateNode[10]; |
175 | 175 |
176 for (int i = 0; i < 10; i++) { | 176 for (int i = 0; i < 10; i++) { |
177 elements[i] = new IntermediateNode(i); | 177 elements[i] = new IntermediateNode(i); |
178 elements[i].generateChildren(1000); | 178 elements[i].generateChildren(1000); |
179 } | 179 } |
180 | 180 |
181 return elements; | 181 return elements; |
182 } | 182 } |
183 | 183 |
184 } | 184 } |