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 }