Mercurial > projects > dwt-win
annotate dwt/custom/TableTreeItem.d @ 213:36f5cb12e1a2
Update to SWT 3.4M7
author | Frank Benoit <benoit@tionex.de> |
---|---|
date | Sat, 17 May 2008 17:34:28 +0200 |
parents | ab60f3309436 |
children | a59d51c12b42 |
rev | line source |
---|---|
155 | 1 /******************************************************************************* |
2 * Copyright (c) 2000, 2007 IBM Corporation and others. | |
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 * Port to the D programming language: | |
11 * Frank Benoit <benoit@tionex.de> | |
12 *******************************************************************************/ | |
13 module dwt.custom.TableTreeItem; | |
14 | |
15 | |
16 | |
17 import dwt.DWT; | |
18 import dwt.DWTException; | |
19 import dwt.graphics.Color; | |
20 import dwt.graphics.Font; | |
21 import dwt.graphics.GC; | |
22 import dwt.graphics.Image; | |
23 import dwt.graphics.Rectangle; | |
24 import dwt.widgets.Event; | |
25 import dwt.widgets.Item; | |
26 import dwt.widgets.Table; | |
27 import dwt.widgets.TableItem; | |
28 import dwt.widgets.Widget; | |
29 import dwt.custom.TableTree; | |
30 import dwt.dwthelper.utils; | |
31 | |
32 | |
33 /** | |
34 * A TableTreeItem is a selectable user interface object | |
35 * that represents an item in a hierarchy of items in a | |
36 * TableTree. | |
37 * | |
38 * @deprecated As of 3.1 use Tree, TreeItem and TreeColumn | |
39 */ | |
40 public class TableTreeItem : Item { | |
41 TableItem tableItem; | |
42 TableTree parent; | |
43 TableTreeItem parentItem; | |
44 TableTreeItem [] items; | |
212
ab60f3309436
reverted the char[] to String and use the an alias.
Frank Benoit <benoit@tionex.de>
parents:
155
diff
changeset
|
45 String[] texts; |
155 | 46 Image[] images; |
47 Color background; | |
48 Color foreground; | |
49 Font font; | |
50 bool expanded; | |
51 bool checked; | |
52 bool grayed; | |
53 | |
54 /** | |
55 * Constructs a new instance of this class given its parent | |
56 * (which must be a <code>TableTree</code>) | |
57 * and a style value describing its behavior and appearance. | |
58 * The item is added to the end of the items maintained by its parent. | |
59 * <p> | |
60 * The style value is either one of the style constants defined in | |
61 * class <code>DWT</code> which is applicable to instances of this | |
62 * class, or must be built by <em>bitwise OR</em>'ing together | |
63 * (that is, using the <code>int</code> "|" operator) two or more | |
64 * of those <code>DWT</code> style constants. The class description | |
65 * lists the style constants that are applicable to the class. | |
66 * Style bits are also inherited from superclasses. | |
67 * </p> | |
68 * | |
69 * @param parent a composite control which will be the parent of the new instance (cannot be null) | |
70 * @param style the style of control to construct | |
71 * | |
72 * @exception IllegalArgumentException <ul> | |
73 * <li>ERROR_NULL_ARGUMENT - if the parent is null</li> | |
74 * </ul> | |
75 * @exception DWTException <ul> | |
76 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li> | |
77 * </ul> | |
78 * | |
79 * @see DWT | |
80 * @see Widget#getStyle() | |
81 */ | |
82 public this(TableTree parent, int style) { | |
83 this (parent, style, parent.getItemCount()); | |
84 } | |
85 | |
86 /** | |
87 * Constructs a new instance of this class given its parent | |
88 * (which must be a <code>TableTree</code>, | |
89 * a style value describing its behavior and appearance, and the index | |
90 * at which to place it in the items maintained by its parent. | |
91 * <p> | |
92 * The style value is either one of the style constants defined in | |
93 * class <code>DWT</code> which is applicable to instances of this | |
94 * class, or must be built by <em>bitwise OR</em>'ing together | |
95 * (that is, using the <code>int</code> "|" operator) two or more | |
96 * of those <code>DWT</code> style constants. The class description | |
97 * lists the style constants that are applicable to the class. | |
98 * Style bits are also inherited from superclasses. | |
99 * </p> | |
100 * | |
101 * @param parent a composite control which will be the parent of the new instance (cannot be null) | |
102 * @param style the style of control to construct | |
103 * @param index the index to store the receiver in its parent | |
104 * | |
105 * @exception IllegalArgumentException <ul> | |
106 * <li>ERROR_NULL_ARGUMENT - if the parent is null</li> | |
107 * </ul> | |
108 * @exception DWTException <ul> | |
109 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li> | |
110 * </ul> | |
111 * | |
112 * @see DWT | |
113 * @see Widget#getStyle() | |
114 */ | |
115 public this(TableTree parent, int style, int index) { | |
116 this (parent, null, style, index); | |
117 } | |
118 | |
119 /** | |
120 * Constructs a new instance of this class given its parent | |
121 * (which must be a <code>TableTreeItem</code>) | |
122 * and a style value describing its behavior and appearance. | |
123 * The item is added to the end of the items maintained by its parent. | |
124 * <p> | |
125 * The style value is either one of the style constants defined in | |
126 * class <code>DWT</code> which is applicable to instances of this | |
127 * class, or must be built by <em>bitwise OR</em>'ing together | |
128 * (that is, using the <code>int</code> "|" operator) two or more | |
129 * of those <code>DWT</code> style constants. The class description | |
130 * lists the style constants that are applicable to the class. | |
131 * Style bits are also inherited from superclasses. | |
132 * </p> | |
133 * | |
134 * @param parent a composite control which will be the parent of the new instance (cannot be null) | |
135 * @param style the style of control to construct | |
136 * | |
137 * @exception IllegalArgumentException <ul> | |
138 * <li>ERROR_NULL_ARGUMENT - if the parent is null</li> | |
139 * </ul> | |
140 * @exception DWTException <ul> | |
141 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li> | |
142 * </ul> | |
143 * | |
144 * @see DWT | |
145 * @see Widget#getStyle() | |
146 */ | |
147 public this(TableTreeItem parent, int style) { | |
148 this (parent, style, parent.getItemCount()); | |
149 } | |
150 | |
151 /** | |
152 * Constructs a new instance of this class given its parent | |
153 * (which must be a <code>TableTreeItem</code>), | |
154 * a style value describing its behavior and appearance, and the index | |
155 * at which to place it in the items maintained by its parent. | |
156 * <p> | |
157 * The style value is either one of the style constants defined in | |
158 * class <code>DWT</code> which is applicable to instances of this | |
159 * class, or must be built by <em>bitwise OR</em>'ing together | |
160 * (that is, using the <code>int</code> "|" operator) two or more | |
161 * of those <code>DWT</code> style constants. The class description | |
162 * lists the style constants that are applicable to the class. | |
163 * Style bits are also inherited from superclasses. | |
164 * </p> | |
165 * | |
166 * @param parent a composite control which will be the parent of the new instance (cannot be null) | |
167 * @param style the style of control to construct | |
168 * @param index the index to store the receiver in its parent | |
169 * | |
170 * @exception IllegalArgumentException <ul> | |
171 * <li>ERROR_NULL_ARGUMENT - if the parent is null</li> | |
172 * </ul> | |
173 * @exception DWTException <ul> | |
174 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li> | |
175 * </ul> | |
176 * | |
177 * @see DWT | |
178 * @see Widget#getStyle() | |
179 */ | |
180 public this(TableTreeItem parent, int style, int index) { | |
181 this (parent.getParent(), parent, style, index); | |
182 } | |
183 | |
184 this(TableTree parent, TableTreeItem parentItem, int style, int index) { | |
185 | |
186 items = TableTree.EMPTY_ITEMS; | |
187 texts = TableTree.EMPTY_TEXTS; | |
188 images = TableTree.EMPTY_IMAGES; | |
189 | |
190 super(parent, style); | |
191 this.parent = parent; | |
192 this.parentItem = parentItem; | |
193 if (parentItem is null) { | |
194 | |
195 /* Root items are visible immediately */ | |
196 int tableIndex = parent.addItem(this, index); | |
197 tableItem = new TableItem(parent.getTable(), style, tableIndex); | |
198 tableItem.setData(TableTree.ITEMID, this); | |
199 addCheck(); | |
200 /* | |
201 * Feature in the Table. The table uses the first image that | |
202 * is inserted into the table to size the table rows. If the | |
203 * user is allowed to insert the first image, this will cause | |
204 * the +/- images to be scaled. The fix is to insert a dummy | |
205 * image to force the size. | |
206 */ | |
207 if (parent.sizeImage is null) { | |
208 int itemHeight = parent.getItemHeight(); | |
213 | 209 parent.sizeImage = new Image(parent.getDisplay(), itemHeight, itemHeight); |
155 | 210 GC gc = new GC (parent.sizeImage); |
211 gc.setBackground(parent.getBackground()); | |
212 gc.fillRectangle(0, 0, itemHeight, itemHeight); | |
213 gc.dispose(); | |
214 tableItem.setImage(0, parent.sizeImage); | |
215 } | |
216 } else { | |
217 parentItem.addItem(this, index); | |
218 } | |
219 } | |
220 void addCheck() { | |
221 Table table = parent.getTable(); | |
222 if ((table.getStyle() & DWT.CHECK) is 0) return; | |
223 tableItem.setChecked(checked); | |
224 tableItem.setGrayed(grayed); | |
225 } | |
226 void addItem(TableTreeItem item, int index) { | |
227 if (item is null) DWT.error(DWT.ERROR_NULL_ARGUMENT); | |
228 if (index < 0 || index > items.length) DWT.error(DWT.ERROR_INVALID_ARGUMENT); | |
229 | |
230 /* Now that item has a sub-node it must indicate that it can be expanded */ | |
231 if (items.length is 0 && index is 0) { | |
232 if (tableItem !is null) { | |
233 Image image = expanded ? parent.getMinusImage() : parent.getPlusImage(); | |
234 tableItem.setImage(0, image); | |
235 } | |
236 } | |
237 | |
238 /* Put the item in the items list */ | |
239 TableTreeItem[] newItems = new TableTreeItem[items.length + 1]; | |
240 System.arraycopy(items, 0, newItems, 0, index); | |
241 newItems[index] = item; | |
242 System.arraycopy(items, index, newItems, index + 1, items.length - index); | |
243 items = newItems; | |
244 if (expanded) item.setVisible(true); | |
245 } | |
246 | |
247 /** | |
248 * Returns the receiver's background color. | |
249 * | |
250 * @return the background color | |
251 * | |
252 * @exception DWTException <ul> | |
253 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li> | |
254 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li> | |
255 * </ul> | |
256 * | |
257 * @since 2.0 | |
258 * | |
259 */ | |
260 public Color getBackground () { | |
261 checkWidget (); | |
262 return (background is null) ? parent.getBackground() : background; | |
263 } | |
264 | |
265 /** | |
266 * Returns a rectangle describing the receiver's size and location | |
267 * relative to its parent. | |
268 * | |
269 * @return the receiver's bounding rectangle | |
270 * | |
271 * @exception DWTException <ul> | |
272 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li> | |
273 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li> | |
274 * </ul> | |
275 */ | |
276 public Rectangle getBounds (int index) { | |
277 checkWidget(); | |
278 if (tableItem !is null) { | |
279 return tableItem.getBounds(index); | |
280 } else { | |
281 return new Rectangle(0, 0, 0, 0); | |
282 } | |
283 } | |
284 /** | |
285 * Returns <code>true</code> if the receiver is checked, | |
286 * and false otherwise. When the parent does not have | |
287 * the <code>CHECK style, return false. | |
288 * | |
289 * @return the checked state of the checkbox | |
290 * | |
291 * @exception DWTException <ul> | |
292 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li> | |
293 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li> | |
294 * </ul> | |
295 */ | |
296 public bool getChecked () { | |
297 checkWidget(); | |
298 if (tableItem is null) return checked; | |
299 return tableItem.getChecked(); | |
300 } | |
301 | |
302 /** | |
303 * Returns <code>true</code> if the receiver is grayed, | |
304 * and false otherwise. When the parent does not have | |
305 * the <code>CHECK</code> style, return false. | |
306 * | |
307 * @return the grayed state of the checkbox | |
308 * | |
309 * @exception DWTException <ul> | |
310 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li> | |
311 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li> | |
312 * </ul> | |
313 * | |
314 * @since 2.1 | |
315 */ | |
316 public bool getGrayed () { | |
317 checkWidget(); | |
318 if (tableItem is null) return grayed; | |
319 return tableItem.getGrayed(); | |
320 } | |
321 | |
322 /** | |
323 * Returns <code>true</code> if the receiver is expanded, | |
324 * and false otherwise. | |
325 * <p> | |
326 * | |
327 * @return the expanded state | |
328 */ | |
329 public bool getExpanded () { | |
330 //checkWidget(); | |
331 return expanded; | |
332 } | |
333 | |
334 /** | |
335 * Returns the font that the receiver will use to paint textual information for this item. | |
336 * | |
337 * @return the receiver's font | |
338 * | |
339 * @exception DWTException <ul> | |
340 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li> | |
341 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li> | |
342 * </ul> | |
343 * | |
344 * @since 3.0 | |
345 */ | |
346 public Font getFont () { | |
347 checkWidget (); | |
348 return (font is null) ? parent.getFont() : font; | |
349 } | |
350 /** | |
351 * Returns the foreground color that the receiver will use to draw. | |
352 * | |
353 * @return the receiver's foreground color | |
354 * | |
355 * @exception DWTException <ul> | |
356 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li> | |
357 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li> | |
358 * </ul> | |
359 * | |
360 * @since 2.0 | |
361 * | |
362 */ | |
363 public Color getForeground () { | |
364 checkWidget (); | |
365 return (foreground is null) ? parent.getForeground() : foreground; | |
366 } | |
367 /** | |
368 * Gets the first image. | |
369 * <p> | |
370 * The image in column 0 is reserved for the [+] and [-] | |
371 * images of the tree, therefore getImage(0) will return null. | |
372 * | |
373 * @return the image at index 0 | |
374 * | |
375 * @exception DWTException <ul> | |
376 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li> | |
377 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li> | |
378 * </ul> | |
379 */ | |
380 public override Image getImage () { | |
381 checkWidget(); | |
382 return getImage(0); | |
383 } | |
384 | |
385 /** | |
386 * Gets the image at the specified index. | |
387 * <p> | |
388 * Indexing is zero based. The image can be null. | |
389 * The image in column 0 is reserved for the [+] and [-] | |
390 * images of the tree, therefore getImage(0) will return null. | |
391 * Return null if the index is out of range. | |
392 * | |
393 * @param index the index of the image | |
394 * @return the image at the specified index or null | |
395 */ | |
396 public Image getImage (int index) { | |
397 //checkWidget(); | |
398 if (0 < index && index < images.length) return images[index]; | |
399 return null; | |
400 } | |
401 | |
402 int getIndent() { | |
403 if (parentItem is null) return 0; | |
404 return parentItem.getIndent() + 1; | |
405 } | |
406 | |
407 /** | |
408 * Returns the item at the given, zero-relative index in the | |
409 * receiver. Throws an exception if the index is out of range. | |
410 * | |
411 * @param index the index of the item to return | |
412 * @return the item at the given index | |
413 * | |
414 * @exception IllegalArgumentException <ul> | |
415 * <li>ERROR_INVALID_RANGE - if the index is not between 0 and the number of elements in the list minus 1 (inclusive)</li> | |
416 * </ul> | |
417 * @exception DWTException <ul> | |
418 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li> | |
419 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li> | |
420 * </ul> | |
421 * | |
422 * @since 3.1 | |
423 */ | |
424 public TableTreeItem getItem (int index) { | |
425 checkWidget(); | |
426 int count = items.length; | |
427 if (!(0 <= index && index < count)) DWT.error (DWT.ERROR_INVALID_RANGE); | |
428 return items [index]; | |
429 } | |
430 | |
431 /** | |
432 * Returns the number of items contained in the receiver | |
433 * that are direct item children of the receiver. | |
434 * | |
435 * @return the number of items | |
436 */ | |
437 public int getItemCount () { | |
438 //checkWidget(); | |
439 return items.length; | |
440 } | |
441 | |
442 /** | |
443 * Returns an array of <code>TableTreeItem</code>s which are the | |
444 * direct item children of the receiver. | |
445 * <p> | |
446 * Note: This is not the actual structure used by the receiver | |
447 * to maintain its list of items, so modifying the array will | |
448 * not affect the receiver. | |
449 * </p> | |
450 * | |
451 * @return the receiver's items | |
452 */ | |
453 public TableTreeItem[] getItems () { | |
454 //checkWidget(); | |
455 TableTreeItem[] newItems = new TableTreeItem[items.length]; | |
456 System.arraycopy(items, 0, newItems, 0, items.length); | |
457 return newItems; | |
458 } | |
459 | |
460 TableTreeItem getItem(TableItem tableItem) { | |
461 if (tableItem is null) return null; | |
462 if (this.tableItem is tableItem) return this; | |
463 for (int i = 0; i < items.length; i++) { | |
464 TableTreeItem item = items[i].getItem(tableItem); | |
465 if (item !is null) return item; | |
466 } | |
467 return null; | |
468 } | |
469 | |
470 /** | |
471 * Returns the receiver's parent, which must be a <code>TableTree</code>. | |
472 * | |
473 * @return the receiver's parent | |
474 */ | |
475 public TableTree getParent () { | |
476 //checkWidget(); | |
477 return parent; | |
478 } | |
479 | |
480 /** | |
481 * Returns the receiver's parent item, which must be a | |
482 * <code>TableTreeItem</code> or null when the receiver is a | |
483 * root. | |
484 * | |
485 * @return the receiver's parent item | |
486 */ | |
487 public TableTreeItem getParentItem () { | |
488 //checkWidget(); | |
489 return parentItem; | |
490 } | |
212
ab60f3309436
reverted the char[] to String and use the an alias.
Frank Benoit <benoit@tionex.de>
parents:
155
diff
changeset
|
491 public override String getText () { |
155 | 492 checkWidget(); |
493 return getText(0); | |
494 } | |
495 | |
496 /** | |
497 * Gets the item text at the specified index. | |
498 * <p> | |
499 * Indexing is zero based. | |
500 * | |
501 * This operation will fail when the index is out | |
502 * of range or an item could not be queried from | |
503 * the OS. | |
504 * | |
505 * @param index the index of the item | |
506 * @return the item text at the specified index, which can be null | |
507 */ | |
212
ab60f3309436
reverted the char[] to String and use the an alias.
Frank Benoit <benoit@tionex.de>
parents:
155
diff
changeset
|
508 public String getText(int index) { |
155 | 509 //checkWidget(); |
510 if (0 <= index && index < texts.length) return texts[index]; | |
511 return null; | |
512 } | |
513 | |
514 bool getVisible () { | |
515 return tableItem !is null; | |
516 } | |
517 | |
518 /** | |
519 * Gets the index of the specified item. | |
520 * | |
521 * <p>The widget is searched starting at 0 until an | |
522 * item is found that is equal to the search item. | |
523 * If no item is found, -1 is returned. Indexing | |
524 * is zero based. This index is relative to the parent only. | |
525 * | |
526 * @param item the search item | |
527 * @return the index of the item or -1 if the item is not found | |
528 * | |
529 */ | |
530 public int indexOf (TableTreeItem item) { | |
531 //checkWidget(); | |
532 for (int i = 0; i < items.length; i++) { | |
533 if (items[i] is item) return i; | |
534 } | |
535 return -1; | |
536 } | |
537 | |
538 void expandAll(bool notify) { | |
539 if (items.length is 0) return; | |
540 if (!expanded) { | |
541 setExpanded(true); | |
542 if (notify) { | |
543 Event event = new Event(); | |
544 event.item = this; | |
545 parent.notifyListeners(DWT.Expand, event); | |
546 } | |
547 } | |
548 for (int i = 0; i < items.length; i++) { | |
549 items[i].expandAll(notify); | |
550 } | |
551 } | |
552 int expandedIndexOf (TableTreeItem item) { | |
553 int index = 0; | |
554 for (int i = 0; i < items.length; i++) { | |
555 if (items[i] is item) return index; | |
556 if (items[i].expanded) index += items[i].visibleChildrenCount (); | |
557 index++; | |
558 } | |
559 return -1; | |
560 } | |
561 | |
562 int visibleChildrenCount () { | |
563 int count = 0; | |
564 for (int i = 0; i < items.length; i++) { | |
565 if (items[i].getVisible ()) { | |
566 count += 1 + items[i].visibleChildrenCount (); | |
567 } | |
568 } | |
569 return count; | |
570 } | |
571 | |
572 public override void dispose () { | |
573 if (isDisposed()) return; | |
574 for (int i = items.length - 1; i >= 0; i--) { | |
575 items[i].dispose(); | |
576 } | |
577 super.dispose(); | |
578 if (!parent.inDispose) { | |
579 if (parentItem !is null) { | |
580 parentItem.removeItem(this); | |
581 } else { | |
582 parent.removeItem(this); | |
583 } | |
584 if (tableItem !is null) tableItem.dispose(); | |
585 } | |
586 items = null; | |
587 parentItem = null; | |
588 parent = null; | |
589 images = null; | |
590 texts = null; | |
591 tableItem = null; | |
592 foreground = null; | |
593 background = null; | |
594 font = null; | |
595 } | |
596 | |
597 void removeItem(TableTreeItem item) { | |
598 int index = 0; | |
599 while (index < items.length && items[index] !is item) index++; | |
600 if (index is items.length) return; | |
601 TableTreeItem[] newItems = new TableTreeItem[items.length - 1]; | |
602 System.arraycopy(items, 0, newItems, 0, index); | |
603 System.arraycopy(items, index + 1, newItems, index, items.length - index - 1); | |
604 items = newItems; | |
605 if (items.length is 0) { | |
606 if (tableItem !is null) tableItem.setImage(0, null); | |
607 } | |
608 } | |
609 | |
610 /** | |
611 * Sets the receiver's background color to the color specified | |
612 * by the argument, or to the default system color for the item | |
613 * if the argument is null. | |
614 * | |
615 * @param color the new color (or null) | |
616 * | |
617 * @exception IllegalArgumentException <ul> | |
618 * <li>ERROR_INVALID_ARGUMENT - if the argument has been disposed</li> | |
619 * </ul> | |
620 * @exception DWTException <ul> | |
621 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li> | |
622 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li> | |
623 * </ul> | |
624 * | |
625 * @since 2.0 | |
626 * | |
627 */ | |
628 public void setBackground (Color color) { | |
629 checkWidget (); | |
630 if (color !is null && color.isDisposed ()) { | |
631 DWT.error (DWT.ERROR_INVALID_ARGUMENT); | |
632 } | |
633 if (tableItem !is null) { | |
634 tableItem.setBackground(color); | |
635 } | |
636 background = color; | |
637 } | |
638 | |
639 /** | |
640 * Sets the checked state of the checkbox for this item. This state change | |
641 * only applies if the Table was created with the DWT.CHECK style. | |
642 * | |
643 * @param checked the new checked state of the checkbox | |
644 * | |
645 * @exception DWTException <ul> | |
646 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li> | |
647 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li> | |
648 * </ul> | |
649 */ | |
650 public void setChecked (bool checked) { | |
651 checkWidget(); | |
652 Table table = parent.getTable(); | |
653 if ((table.getStyle() & DWT.CHECK) is 0) return; | |
654 if (tableItem !is null) { | |
655 tableItem.setChecked(checked); | |
656 } | |
657 this.checked = checked; | |
658 } | |
659 | |
660 /** | |
661 * Sets the grayed state of the checkbox for this item. This state change | |
662 * only applies if the Table was created with the DWT.CHECK style. | |
663 * | |
664 * @param grayed the new grayed state of the checkbox; | |
665 * | |
666 * @exception DWTException <ul> | |
667 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li> | |
668 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li> | |
669 * </ul> | |
670 * | |
671 * @since 2.1 | |
672 */ | |
673 public void setGrayed (bool grayed) { | |
674 checkWidget(); | |
675 Table table = parent.getTable(); | |
676 if ((table.getStyle() & DWT.CHECK) is 0) return; | |
677 if (tableItem !is null) { | |
678 tableItem.setGrayed(grayed); | |
679 } | |
680 this.grayed = grayed; | |
681 } | |
682 | |
683 /** | |
684 * Sets the expanded state. | |
685 * <p> | |
686 * @param expanded the new expanded state. | |
687 * | |
688 * @exception DWTException <ul> | |
689 * <li>ERROR_THREAD_INVALID_ACCESS when called from the wrong thread</li> | |
690 * <li>ERROR_WIDGET_DISPOSED when the widget has been disposed</li> | |
691 * </ul> | |
692 */ | |
693 public void setExpanded (bool expanded) { | |
694 checkWidget(); | |
695 if (items.length is 0) return; | |
696 if (this.expanded is expanded) return; | |
697 this.expanded = expanded; | |
698 if (tableItem is null) return; | |
699 parent.setRedraw(false); | |
700 for (int i = 0; i < items.length; i++) { | |
701 items[i].setVisible(expanded); | |
702 } | |
703 Image image = expanded ? parent.getMinusImage() : parent.getPlusImage(); | |
704 tableItem.setImage(0, image); | |
705 parent.setRedraw(true); | |
706 } | |
707 | |
708 /** | |
709 * Sets the font that the receiver will use to paint textual information | |
710 * for this item to the font specified by the argument, or to the default font | |
711 * for that kind of control if the argument is null. | |
712 * | |
713 * @param font the new font (or null) | |
714 * | |
715 * @exception IllegalArgumentException <ul> | |
716 * <li>ERROR_INVALID_ARGUMENT - if the argument has been disposed</li> | |
717 * </ul> | |
718 * @exception DWTException <ul> | |
719 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li> | |
720 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li> | |
721 * </ul> | |
722 * | |
723 * @since 3.0 | |
724 */ | |
725 public void setFont (Font font){ | |
726 checkWidget (); | |
727 if (font !is null && font.isDisposed ()) { | |
728 DWT.error (DWT.ERROR_INVALID_ARGUMENT); | |
729 } | |
730 if (tableItem !is null) { | |
731 tableItem.setFont(font); | |
732 } | |
733 this.font = font; | |
734 } | |
735 /** | |
736 * Sets the receiver's foreground color to the color specified | |
737 * by the argument, or to the default system color for the item | |
738 * if the argument is null. | |
739 * | |
740 * @param color the new color (or null) | |
741 * | |
742 * @since 2.0 | |
743 * | |
744 * @exception IllegalArgumentException <ul> | |
745 * <li>ERROR_INVALID_ARGUMENT - if the argument has been disposed</li> | |
746 * </ul> | |
747 * @exception DWTException <ul> | |
748 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li> | |
749 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li> | |
750 * </ul> | |
751 * | |
752 * @since 2.0 | |
753 * | |
754 */ | |
755 public void setForeground (Color color) { | |
756 checkWidget (); | |
757 if (color !is null && color.isDisposed ()) { | |
758 DWT.error (DWT.ERROR_INVALID_ARGUMENT); | |
759 } | |
760 if (tableItem !is null) { | |
761 tableItem.setForeground(color); | |
762 } | |
763 foreground = color; | |
764 } | |
765 | |
766 /** | |
767 * Sets the image at an index. | |
768 * <p> | |
769 * The image can be null. | |
770 * The image in column 0 is reserved for the [+] and [-] | |
771 * images of the tree, therefore do nothing if index is 0. | |
772 * | |
773 * @param image the new image or null | |
774 * | |
775 * @exception DWTException <ul> | |
776 * <li>ERROR_THREAD_INVALID_ACCESS when called from the wrong thread</li> | |
777 * <li>ERROR_WIDGET_DISPOSED when the widget has been disposed</li> | |
778 * </ul> | |
779 */ | |
780 public void setImage (int index, Image image) { | |
781 checkWidget(); | |
782 int columnCount = Math.max(parent.getTable().getColumnCount(), 1); | |
783 if (index <= 0 || index >= columnCount) return; | |
784 if (images.length < columnCount) { | |
785 Image[] newImages = new Image[columnCount]; | |
786 System.arraycopy(images, 0, newImages, 0, images.length); | |
787 images = newImages; | |
788 } | |
789 images[index] = image; | |
790 if (tableItem !is null) tableItem.setImage(index, image); | |
791 } | |
792 | |
793 /** | |
794 * Sets the first image. | |
795 * <p> | |
796 * The image can be null. | |
797 * The image in column 0 is reserved for the [+] and [-] | |
798 * images of the tree, therefore do nothing. | |
799 * | |
800 * @param image the new image or null | |
801 * | |
802 * @exception DWTException <ul> | |
803 * <li>ERROR_THREAD_INVALID_ACCESS when called from the wrong thread</li> | |
804 * <li>ERROR_WIDGET_DISPOSED when the widget has been disposed</li> | |
805 * </ul> | |
806 */ | |
807 public override void setImage (Image image) { | |
808 setImage(0, image); | |
809 } | |
810 | |
811 /** | |
812 * Sets the widget text. | |
813 * <p> | |
814 * | |
815 * The widget text for an item is the label of the | |
816 * item or the label of the text specified by a column | |
817 * number. | |
818 * | |
819 * @param index the column number | |
820 * @param text the new text | |
821 * | |
822 * @exception IllegalArgumentException <ul> | |
823 * <li>ERROR_NULL_ARGUMENT - if the text is null</li> | |
824 * </ul> | |
825 * @exception DWTException <ul> | |
826 * <li>ERROR_THREAD_INVALID_ACCESS when called from the wrong thread</li> | |
827 * <li>ERROR_WIDGET_DISPOSED when the widget has been disposed</li> | |
828 * </ul> | |
829 */ | |
212
ab60f3309436
reverted the char[] to String and use the an alias.
Frank Benoit <benoit@tionex.de>
parents:
155
diff
changeset
|
830 public void setText(int index, String text) { |
155 | 831 checkWidget(); |
832 if (text is null) DWT.error (DWT.ERROR_NULL_ARGUMENT); | |
833 int columnCount = Math.max(parent.getTable().getColumnCount(), 1); | |
834 if (index < 0 || index >= columnCount) return; | |
835 if (texts.length < columnCount) { | |
212
ab60f3309436
reverted the char[] to String and use the an alias.
Frank Benoit <benoit@tionex.de>
parents:
155
diff
changeset
|
836 String[] newTexts = new String[columnCount]; |
155 | 837 System.arraycopy(texts, 0, newTexts, 0, texts.length); |
838 texts = newTexts; | |
839 } | |
840 texts[index] = text; | |
841 if (tableItem !is null) tableItem.setText(index, text); | |
842 } | |
212
ab60f3309436
reverted the char[] to String and use the an alias.
Frank Benoit <benoit@tionex.de>
parents:
155
diff
changeset
|
843 public override void setText (String string) { |
155 | 844 setText(0, string); |
845 } | |
846 | |
847 void setVisible (bool show) { | |
848 if (parentItem is null) return; // this is a root and can not be toggled between visible and hidden | |
849 if (getVisible() is show) return; | |
850 | |
851 if (show) { | |
852 if (!parentItem.getVisible()) return; // parentItem must already be visible | |
853 // create underlying table item and set data in table item to stored data | |
854 Table table = parent.getTable(); | |
855 int parentIndex = table.indexOf(parentItem.tableItem); | |
856 int index = parentItem.expandedIndexOf(this) + parentIndex + 1; | |
857 if (index < 0) return; | |
858 tableItem = new TableItem(table, getStyle(), index); | |
859 tableItem.setData(TableTree.ITEMID, this); | |
860 tableItem.setImageIndent(getIndent()); | |
861 if (background !is null) tableItem.setBackground(background); | |
862 if (foreground !is null) tableItem.setForeground(foreground); | |
863 if (font !is null) tableItem.setFont(font); | |
864 addCheck(); | |
865 | |
866 // restore fields to item | |
867 // ignore any images in the first column | |
868 int columnCount = Math.max(table.getColumnCount(), 1); | |
869 for (int i = 0; i < columnCount; i++) { | |
870 if (i < texts.length && texts[i] !is null) setText(i, texts[i]); | |
871 if (i < images.length && images[i] !is null) setImage(i, images[i]); | |
872 } | |
873 | |
874 // display the children and the appropriate [+]/[-] symbol as required | |
875 if (items.length !is 0) { | |
876 if (expanded) { | |
877 tableItem.setImage(0, parent.getMinusImage()); | |
878 for (int i = 0, length = items.length; i < length; i++) { | |
879 items[i].setVisible(true); | |
880 } | |
881 } else { | |
882 tableItem.setImage(0, parent.getPlusImage()); | |
883 } | |
884 } | |
885 | |
886 } else { | |
887 | |
888 for (int i = 0, length = items.length; i < length; i++) { | |
889 items[i].setVisible(false); | |
890 } | |
891 // remove row from table | |
892 tableItem.dispose(); | |
893 tableItem = null; | |
894 } | |
895 } | |
896 } |