Mercurial > projects > dwt-addons
annotate dwtx/jface/viewers/TreeViewerRow.d @ 90:7ffeace6c47f
Update 3.4M7 to 3.4
author | Frank Benoit <benoit@tionex.de> |
---|---|
date | Sun, 06 Jul 2008 23:30:07 +0200 |
parents | 46a6e0e6ccd4 |
children | 04b47443bb01 |
rev | line source |
---|---|
10 | 1 /******************************************************************************* |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
2 * Copyright (c) 2006, 2008 IBM Corporation and others. |
10 | 3 * All rights reserved. This program and the accompanying materials |
4 * are made available under the terms of the Eclipse Public License v1.0 | |
5 * which accompanies this distribution, and is available at | |
6 * http://www.eclipse.org/legal/epl-v10.html | |
7 * | |
8 * Contributors: | |
9 * IBM Corporation - initial API and implementation | |
10 * Tom Schindl <tom.schindl@bestsolution.at> - initial API and implementation | |
90 | 11 * - fix in bug: 174355,171126,,195908,198035,215069,227421 |
10 | 12 * Port to the D programming language: |
13 * Frank Benoit <benoit@tionex.de> | |
14 *******************************************************************************/ | |
15 | |
16 module dwtx.jface.viewers.TreeViewerRow; | |
17 | |
18 import dwtx.jface.viewers.ViewerRow; | |
19 import dwtx.jface.viewers.TreePath; | |
20 | |
21 import tango.util.collection.LinkSeq; | |
22 | |
23 import dwt.graphics.Color; | |
24 import dwt.graphics.Font; | |
25 import dwt.graphics.Image; | |
26 import dwt.graphics.Rectangle; | |
27 import dwt.widgets.Control; | |
28 import dwt.widgets.Tree; | |
29 import dwt.widgets.TreeItem; | |
30 import dwt.widgets.Widget; | |
31 import dwtx.core.runtime.Assert; | |
32 | |
33 import dwt.dwthelper.utils; | |
34 | |
35 /** | |
36 * TreeViewerRow is the Tree implementation of ViewerRow. | |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
37 * |
10 | 38 * @since 3.3 |
39 * | |
40 */ | |
41 public class TreeViewerRow : ViewerRow { | |
42 private TreeItem item; | |
43 | |
44 /** | |
45 * Create a new instance of the receiver. | |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
46 * |
10 | 47 * @param item |
48 */ | |
49 this(TreeItem item) { | |
50 this.item = item; | |
51 } | |
52 | |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
53 /* |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
54 * (non-Javadoc) |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
55 * |
10 | 56 * @see dwtx.jface.viewers.ViewerRow#getBounds(int) |
57 */ | |
43
ea8ff534f622
Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents:
10
diff
changeset
|
58 public override Rectangle getBounds(int columnIndex) { |
10 | 59 return item.getBounds(columnIndex); |
60 } | |
61 | |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
62 /* |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
63 * (non-Javadoc) |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
64 * |
10 | 65 * @see dwtx.jface.viewers.ViewerRow#getBounds() |
66 */ | |
43
ea8ff534f622
Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents:
10
diff
changeset
|
67 public override Rectangle getBounds() { |
10 | 68 return item.getBounds(); |
69 } | |
70 | |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
71 /* |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
72 * (non-Javadoc) |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
73 * |
10 | 74 * @see dwtx.jface.viewers.ViewerRow#getColumnCount() |
75 */ | |
43
ea8ff534f622
Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents:
10
diff
changeset
|
76 public override int getColumnCount() { |
10 | 77 return item.getParent().getColumnCount(); |
78 } | |
79 | |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
80 /* |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
81 * (non-Javadoc) |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
82 * |
10 | 83 * @see dwtx.jface.viewers.ViewerRow#getItem() |
84 */ | |
43
ea8ff534f622
Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents:
10
diff
changeset
|
85 public override Widget getItem() { |
10 | 86 return item; |
87 } | |
88 | |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
89 /* |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
90 * (non-Javadoc) |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
91 * |
10 | 92 * @see dwtx.jface.viewers.ViewerRow#getBackground(int) |
93 */ | |
43
ea8ff534f622
Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents:
10
diff
changeset
|
94 public override Color getBackground(int columnIndex) { |
10 | 95 return item.getBackground(columnIndex); |
96 } | |
97 | |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
98 /* |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
99 * (non-Javadoc) |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
100 * |
10 | 101 * @see dwtx.jface.viewers.ViewerRow#getFont(int) |
102 */ | |
43
ea8ff534f622
Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents:
10
diff
changeset
|
103 public override Font getFont(int columnIndex) { |
10 | 104 return item.getFont(columnIndex); |
105 } | |
106 | |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
107 /* |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
108 * (non-Javadoc) |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
109 * |
10 | 110 * @see dwtx.jface.viewers.ViewerRow#getForeground(int) |
111 */ | |
43
ea8ff534f622
Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents:
10
diff
changeset
|
112 public override Color getForeground(int columnIndex) { |
10 | 113 return item.getForeground(columnIndex); |
114 } | |
115 | |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
116 /* |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
117 * (non-Javadoc) |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
118 * |
10 | 119 * @see dwtx.jface.viewers.ViewerRow#getImage(int) |
120 */ | |
43
ea8ff534f622
Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents:
10
diff
changeset
|
121 public override Image getImage(int columnIndex) { |
10 | 122 return item.getImage(columnIndex); |
123 } | |
124 | |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
125 /* |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
126 * (non-Javadoc) |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
127 * |
10 | 128 * @see dwtx.jface.viewers.ViewerRow#getText(int) |
129 */ | |
43
ea8ff534f622
Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents:
10
diff
changeset
|
130 public override String getText(int columnIndex) { |
10 | 131 return item.getText(columnIndex); |
132 } | |
133 | |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
134 /* |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
135 * (non-Javadoc) |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
136 * |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
137 * @see dwtx.jface.viewers.ViewerRow#setBackground(int, |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
138 * dwt.graphics.Color) |
10 | 139 */ |
43
ea8ff534f622
Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents:
10
diff
changeset
|
140 public override void setBackground(int columnIndex, Color color) { |
10 | 141 item.setBackground(columnIndex, color); |
142 } | |
143 | |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
144 /* |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
145 * (non-Javadoc) |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
146 * |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
147 * @see dwtx.jface.viewers.ViewerRow#setFont(int, |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
148 * dwt.graphics.Font) |
10 | 149 */ |
43
ea8ff534f622
Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents:
10
diff
changeset
|
150 public override void setFont(int columnIndex, Font font) { |
10 | 151 item.setFont(columnIndex, font); |
152 } | |
153 | |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
154 /* |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
155 * (non-Javadoc) |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
156 * |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
157 * @see dwtx.jface.viewers.ViewerRow#setForeground(int, |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
158 * dwt.graphics.Color) |
10 | 159 */ |
43
ea8ff534f622
Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents:
10
diff
changeset
|
160 public override void setForeground(int columnIndex, Color color) { |
10 | 161 item.setForeground(columnIndex, color); |
162 } | |
163 | |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
164 /* |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
165 * (non-Javadoc) |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
166 * |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
167 * @see dwtx.jface.viewers.ViewerRow#setImage(int, |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
168 * dwt.graphics.Image) |
10 | 169 */ |
43
ea8ff534f622
Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents:
10
diff
changeset
|
170 public override void setImage(int columnIndex, Image image) { |
10 | 171 Image oldImage = item.getImage(columnIndex); |
172 if (image !is oldImage) { | |
173 item.setImage(columnIndex, image); | |
174 } | |
175 } | |
176 | |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
177 /* |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
178 * (non-Javadoc) |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
179 * |
10 | 180 * @see dwtx.jface.viewers.ViewerRow#setText(int, java.lang.String) |
181 */ | |
43
ea8ff534f622
Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents:
10
diff
changeset
|
182 public override void setText(int columnIndex, String text) { |
10 | 183 item.setText(columnIndex, text is null ? "" : text); //$NON-NLS-1$ |
184 } | |
185 | |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
186 /* |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
187 * (non-Javadoc) |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
188 * |
10 | 189 * @see dwtx.jface.viewers.ViewerRow#getControl() |
190 */ | |
43
ea8ff534f622
Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents:
10
diff
changeset
|
191 public override Control getControl() { |
10 | 192 return item.getParent(); |
193 } | |
194 | |
195 | |
43
ea8ff534f622
Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents:
10
diff
changeset
|
196 public override ViewerRow getNeighbor(int direction, bool sameLevel) { |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
197 if (direction is ViewerRow.ABOVE) { |
10 | 198 return getRowAbove(sameLevel); |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
199 } else if (direction is ViewerRow.BELOW) { |
10 | 200 return getRowBelow(sameLevel); |
201 } else { | |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
202 throw new IllegalArgumentException( |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
203 "Illegal value of direction argument."); //$NON-NLS-1$ |
10 | 204 } |
205 } | |
206 | |
207 private ViewerRow getRowBelow(bool sameLevel) { | |
208 Tree tree = item.getParent(); | |
209 | |
210 // This means we have top-level item | |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
211 if (item.getParentItem() is null) { |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
212 if (sameLevel || !item.getExpanded()) { |
10 | 213 int index = tree.indexOf(item) + 1; |
214 | |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
215 if (index < tree.getItemCount()) { |
10 | 216 return new TreeViewerRow(tree.getItem(index)); |
217 } | |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
218 } else if (item.getExpanded() && item.getItemCount() > 0) { |
10 | 219 return new TreeViewerRow(item.getItem(0)); |
220 } | |
221 } else { | |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
222 if (sameLevel || !item.getExpanded()) { |
10 | 223 TreeItem parentItem = item.getParentItem(); |
224 | |
225 int nextIndex = parentItem.indexOf(item) + 1; | |
226 int totalIndex = parentItem.getItemCount(); | |
227 | |
228 TreeItem itemAfter; | |
229 | |
230 // This would mean that it was the last item | |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
231 if (nextIndex is totalIndex) { |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
232 itemAfter = findNextItem(parentItem); |
10 | 233 } else { |
234 itemAfter = parentItem.getItem(nextIndex); | |
235 } | |
236 | |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
237 if (itemAfter !is null) { |
10 | 238 return new TreeViewerRow(itemAfter); |
239 } | |
240 | |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
241 } else if (item.getExpanded() && item.getItemCount() > 0) { |
10 | 242 return new TreeViewerRow(item.getItem(0)); |
243 } | |
244 } | |
245 | |
246 return null; | |
247 } | |
248 | |
249 private ViewerRow getRowAbove(bool sameLevel) { | |
250 Tree tree = item.getParent(); | |
251 | |
252 // This means we have top-level item | |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
253 if (item.getParentItem() is null) { |
10 | 254 int index = tree.indexOf(item) - 1; |
255 TreeItem nextTopItem = null; | |
256 | |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
257 if (index >= 0) { |
10 | 258 nextTopItem = tree.getItem(index); |
259 } | |
260 | |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
261 if (nextTopItem !is null) { |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
262 if (sameLevel) { |
10 | 263 return new TreeViewerRow(nextTopItem); |
264 } | |
265 | |
266 return new TreeViewerRow(findLastVisibleItem(nextTopItem)); | |
267 } | |
268 } else { | |
269 TreeItem parentItem = item.getParentItem(); | |
270 int previousIndex = parentItem.indexOf(item) - 1; | |
271 | |
272 TreeItem itemBefore; | |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
273 if (previousIndex >= 0) { |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
274 if (sameLevel) { |
10 | 275 itemBefore = parentItem.getItem(previousIndex); |
276 } else { | |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
277 itemBefore = findLastVisibleItem(parentItem |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
278 .getItem(previousIndex)); |
10 | 279 } |
280 } else { | |
281 itemBefore = parentItem; | |
282 } | |
283 | |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
284 if (itemBefore !is null) { |
10 | 285 return new TreeViewerRow(itemBefore); |
286 } | |
287 } | |
288 | |
289 return null; | |
290 } | |
291 | |
292 private TreeItem findLastVisibleItem(TreeItem parentItem) { | |
293 TreeItem rv = parentItem; | |
294 | |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
295 while (rv.getExpanded() && rv.getItemCount() > 0) { |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
296 rv = rv.getItem(rv.getItemCount() - 1); |
10 | 297 } |
298 | |
299 return rv; | |
300 } | |
301 | |
302 private TreeItem findNextItem(TreeItem item) { | |
303 TreeItem rv = null; | |
304 Tree tree = item.getParent(); | |
305 TreeItem parentItem = item.getParentItem(); | |
306 | |
307 int nextIndex; | |
308 int totalItems; | |
309 | |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
310 if (parentItem is null) { |
10 | 311 nextIndex = tree.indexOf(item) + 1; |
312 totalItems = tree.getItemCount(); | |
313 } else { | |
314 nextIndex = parentItem.indexOf(item) + 1; | |
315 totalItems = parentItem.getItemCount(); | |
316 } | |
317 | |
318 // This is once more the last item in the tree | |
319 // Search on | |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
320 if (nextIndex is totalItems) { |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
321 if (item.getParentItem() !is null) { |
10 | 322 rv = findNextItem(item.getParentItem()); |
323 } | |
324 } else { | |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
325 if (parentItem is null) { |
10 | 326 rv = tree.getItem(nextIndex); |
327 } else { | |
328 rv = parentItem.getItem(nextIndex); | |
329 } | |
330 } | |
331 | |
332 return rv; | |
333 } | |
334 | |
43
ea8ff534f622
Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents:
10
diff
changeset
|
335 public override TreePath getTreePath() { |
10 | 336 TreeItem tItem = item; |
337 auto segments = new LinkSeq!(Object); | |
338 while (tItem !is null) { | |
339 Object segment = tItem.getData(); | |
340 Assert.isNotNull(segment); | |
341 segments.prepend(segment); | |
342 tItem = tItem.getParentItem(); | |
343 } | |
344 | |
345 return new TreePath(segments.toArray()); | |
346 } | |
347 | |
348 void setItem(TreeItem item) { | |
349 this.item = item; | |
350 } | |
351 | |
43
ea8ff534f622
Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents:
10
diff
changeset
|
352 public override Object clone() { |
10 | 353 return new TreeViewerRow(item); |
354 } | |
355 | |
43
ea8ff534f622
Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents:
10
diff
changeset
|
356 public override Object getElement() { |
10 | 357 return item.getData(); |
358 } | |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
359 |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
360 public int getVisualIndex(int creationIndex) { |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
361 int[] order = item.getParent().getColumnOrder(); |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
362 |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
363 for (int i = 0; i < order.length; i++) { |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
364 if (order[i] is creationIndex) { |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
365 return i; |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
366 } |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
367 } |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
368 |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
369 return super.getVisualIndex(creationIndex); |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
370 } |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
371 |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
372 public int getCreationIndex(int visualIndex) { |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
373 if( item !is null && ! item.isDisposed() && hasColumns() && isValidOrderIndex(visualIndex) ) { |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
374 return item.getParent().getColumnOrder()[visualIndex]; |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
375 } |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
376 return super.getCreationIndex(visualIndex); |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
377 } |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
378 |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
379 /* (non-Javadoc) |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
380 * @see dwtx.jface.viewers.ViewerRow#getTextBounds(int) |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
381 */ |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
382 public Rectangle getTextBounds(int index) { |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
383 return item.getTextBounds(index); |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
384 } |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
385 |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
386 /* (non-Javadoc) |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
387 * @see dwtx.jface.viewers.ViewerRow#getImageBounds(int) |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
388 */ |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
389 public Rectangle getImageBounds(int index) { |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
390 return item.getImageBounds(index); |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
391 } |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
392 |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
393 private bool hasColumns() { |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
394 return this.item.getParent().getColumnCount() !is 0; |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
395 } |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
396 |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
397 private bool isValidOrderIndex(int currentIndex) { |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
398 return currentIndex < this.item.getParent().getColumnOrder().length; |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
399 } |
90 | 400 |
401 int getWidth(int columnIndex) { | |
402 return item.getParent().getColumn(columnIndex).getWidth(); | |
403 } | |
10 | 404 } |