comparison snippets/tree/Snippet220.d @ 85:fa286c85e7b8

Fix Snippet111 and add jive to Snippet220
author Frank Benoit <benoit@tionex.de>
date Sat, 17 May 2008 23:26:35 +0200
parents 398aa64a7243
children 4095b64d16f5
comparison
equal deleted inserted replaced
84:398aa64a7243 85:fa286c85e7b8
35 import dwt.widgets.TreeItem; 35 import dwt.widgets.TreeItem;
36 36
37 import tango.util.Convert; 37 import tango.util.Convert;
38 38
39 import tango.io.Stdout; 39 import tango.io.Stdout;
40 version(JIVE){
41 import jive.stacktrace;
42 }
40 43
41 void main() { 44 void main() {
42 Display display = new Display(); 45 Display display = new Display();
43 Shell shell = new Shell(display); 46 Shell shell = new Shell(display);
44 shell.setBounds(10, 10, 350, 200); 47 shell.setBounds(10, 10, 350, 200);
45 Image xImage = new Image (display, 16, 16); 48 Image xImage = new Image (display, 16, 16);
46 GC gc = new GC(xImage); 49 GC gc = new GC(xImage);
47 gc.setForeground(display.getSystemColor(DWT.COLOR_RED)); 50 gc.setForeground(display.getSystemColor(DWT.COLOR_RED));
48 gc.drawLine(1, 1, 14, 14); 51 gc.drawLine(1, 1, 14, 14);
49 gc.drawLine(1, 14, 14, 1); 52 gc.drawLine(1, 14, 14, 1);
50 gc.drawOval(2, 2, 11, 11); 53 gc.drawOval(2, 2, 11, 11);
51 gc.dispose(); 54 gc.dispose();
52 const int IMAGE_MARGIN = 2; 55 const int IMAGE_MARGIN = 2;
53 final Tree tree = new Tree(shell, DWT.CHECK); 56 final Tree tree = new Tree(shell, DWT.CHECK);
54 tree.setBounds(10, 10, 300, 150); 57 tree.setBounds(10, 10, 300, 150);
55 TreeItem item = new TreeItem(tree, DWT.NONE); 58 TreeItem item = new TreeItem(tree, DWT.NONE);
56 item.setText("root item"); 59 item.setText("root item");
57 for (int i = 0; i < 4; i++) { 60 for (int i = 0; i < 4; i++) {
58 TreeItem newItem = new TreeItem(item, DWT.NONE); 61 TreeItem newItem = new TreeItem(item, DWT.NONE);
59 newItem.setText("descendent " ~ to!(char[])(i)); 62 newItem.setText("descendent " ~ to!(char[])(i));
60 if (i % 2 == 0) newItem.setData(xImage); 63 if (i % 2 == 0) newItem.setData(xImage);
61 item.setExpanded(true); 64 item.setExpanded(true);
62 item = newItem; 65 item = newItem;
63 } 66 }
64 67
65 /* 68 /*
66 * NOTE: MeasureItem and PaintItem are called repeatedly. Therefore it is 69 * NOTE: MeasureItem and PaintItem are called repeatedly. Therefore it is
67 * critical for performance that these methods be as efficient as possible. 70 * critical for performance that these methods be as efficient as possible.
68 */ 71 */
69 tree.addListener(DWT.MeasureItem, new class Listener { 72 tree.addListener(DWT.MeasureItem, new class Listener {
70 public void handleEvent(Event event) { 73 public void handleEvent(Event event) {
71 Stdout("measure").newline; 74 Stdout("measure").newline;
72 TreeItem item = cast(TreeItem)event.item; 75 TreeItem item = cast(TreeItem)event.item;
73 Image trailingImage = cast(Image)item.getData(); 76 Image trailingImage = cast(Image)item.getData();
74 if (trailingImage !is null) { 77 if (trailingImage !is null) {
75 Stdout(" - measure image").newline; 78 Stdout(" - measure image").newline;
76 event.width += trailingImage.getBounds().width + IMAGE_MARGIN; 79 event.width += trailingImage.getBounds().width + IMAGE_MARGIN;
77 } 80 }
78 } 81 }
79 }); 82 });
80 tree.addListener(DWT.PaintItem, new class Listener { 83 tree.addListener(DWT.PaintItem, new class Listener {
81 public void handleEvent(Event event) { 84 public void handleEvent(Event event) {
82 Stdout("paint").newline; 85 Stdout("paint").newline;
83 TreeItem item = cast(TreeItem)event.item; 86 TreeItem item = cast(TreeItem)event.item;
84 Image trailingImage = cast(Image)item.getData(); 87 Image trailingImage = cast(Image)item.getData();
85 if (trailingImage !is null) { 88 if (trailingImage !is null) {
86 Stdout(" - draw image").newline; 89 Stdout(" - draw image").newline;
87 int x = event.x + event.width + IMAGE_MARGIN; 90 int x = event.x + event.width + IMAGE_MARGIN;
88 int itemHeight = tree.getItemHeight(); 91 int itemHeight = tree.getItemHeight();
89 int imageHeight = trailingImage.getBounds().height; 92 int imageHeight = trailingImage.getBounds().height;
90 int y = event.y + (itemHeight - imageHeight) / 2; 93 int y = event.y + (itemHeight - imageHeight) / 2;
91 event.gc.drawImage(trailingImage, x, y); 94 event.gc.drawImage(trailingImage, x, y);
92 } 95 }
93 } 96 }
94 }); 97 });
95 98
96 shell.open(); 99 shell.open();
97 while (!shell.isDisposed()) { 100 while (!shell.isDisposed()) {
98 if (!display.readAndDispatch()) display.sleep(); 101 if (!display.readAndDispatch()) display.sleep();
99 } 102 }
100 xImage.dispose(); 103 xImage.dispose();
101 display.dispose(); 104 display.dispose();
102 } 105 }