changeset 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
files snippets/tree/Snippet220.d snippets/treeeditor/Snippet111.d
diffstat 2 files changed, 153 insertions(+), 145 deletions(-) [+]
line wrap: on
line diff
--- a/snippets/tree/Snippet220.d	Sat May 17 13:06:43 2008 +0900
+++ b/snippets/tree/Snippet220.d	Sat May 17 23:26:35 2008 +0200
@@ -37,66 +37,69 @@
 import tango.util.Convert;
 
 import tango.io.Stdout;
+version(JIVE){
+    import jive.stacktrace;
+}
 
 void main() {
-	Display display = new Display();
-	Shell shell = new Shell(display);
-	shell.setBounds(10, 10, 350, 200);
-	Image xImage = new Image (display, 16, 16);
-	GC gc = new GC(xImage);
-	gc.setForeground(display.getSystemColor(DWT.COLOR_RED));
-	gc.drawLine(1, 1, 14, 14);
-	gc.drawLine(1, 14, 14, 1);
-	gc.drawOval(2, 2, 11, 11);
-	gc.dispose();
-	const int IMAGE_MARGIN = 2;
-	final Tree tree = new Tree(shell, DWT.CHECK);
-	tree.setBounds(10, 10, 300, 150);
-	TreeItem item = new TreeItem(tree, DWT.NONE);
-	item.setText("root item");
-	for (int i = 0; i < 4; i++) {
-		TreeItem newItem = new TreeItem(item, DWT.NONE);
-		newItem.setText("descendent " ~ to!(char[])(i));
-		if (i % 2 == 0) newItem.setData(xImage);
-		item.setExpanded(true);
-		item = newItem;
-	}
+    Display display = new Display();
+    Shell shell = new Shell(display);
+    shell.setBounds(10, 10, 350, 200);
+    Image xImage = new Image (display, 16, 16);
+    GC gc = new GC(xImage);
+    gc.setForeground(display.getSystemColor(DWT.COLOR_RED));
+    gc.drawLine(1, 1, 14, 14);
+    gc.drawLine(1, 14, 14, 1);
+    gc.drawOval(2, 2, 11, 11);
+    gc.dispose();
+    const int IMAGE_MARGIN = 2;
+    final Tree tree = new Tree(shell, DWT.CHECK);
+    tree.setBounds(10, 10, 300, 150);
+    TreeItem item = new TreeItem(tree, DWT.NONE);
+    item.setText("root item");
+    for (int i = 0; i < 4; i++) {
+        TreeItem newItem = new TreeItem(item, DWT.NONE);
+        newItem.setText("descendent " ~ to!(char[])(i));
+        if (i % 2 == 0) newItem.setData(xImage);
+        item.setExpanded(true);
+        item = newItem;
+    }
 
-	/*
-	 * NOTE: MeasureItem and PaintItem are called repeatedly.  Therefore it is
-	 * critical for performance that these methods be as efficient as possible.
-	 */
-	tree.addListener(DWT.MeasureItem, new class Listener {
-		public void handleEvent(Event event) {
+    /*
+     * NOTE: MeasureItem and PaintItem are called repeatedly.  Therefore it is
+     * critical for performance that these methods be as efficient as possible.
+     */
+    tree.addListener(DWT.MeasureItem, new class Listener {
+        public void handleEvent(Event event) {
             Stdout("measure").newline;
-			TreeItem item = cast(TreeItem)event.item;
-			Image trailingImage = cast(Image)item.getData();
-			if (trailingImage !is null) {
+            TreeItem item = cast(TreeItem)event.item;
+            Image trailingImage = cast(Image)item.getData();
+            if (trailingImage !is null) {
                 Stdout(" - measure image").newline;
-				event.width += trailingImage.getBounds().width + IMAGE_MARGIN;
-			}
-		}
-	});
-	tree.addListener(DWT.PaintItem, new class Listener {
-		public void handleEvent(Event event) {
+                event.width += trailingImage.getBounds().width + IMAGE_MARGIN;
+            }
+        }
+    });
+    tree.addListener(DWT.PaintItem, new class Listener {
+        public void handleEvent(Event event) {
             Stdout("paint").newline;
-			TreeItem item = cast(TreeItem)event.item;
-			Image trailingImage = cast(Image)item.getData();
-			if (trailingImage !is null) {
+            TreeItem item = cast(TreeItem)event.item;
+            Image trailingImage = cast(Image)item.getData();
+            if (trailingImage !is null) {
                 Stdout(" - draw image").newline;
-				int x = event.x + event.width + IMAGE_MARGIN;
-				int itemHeight = tree.getItemHeight();
-				int imageHeight = trailingImage.getBounds().height;
-				int y = event.y + (itemHeight - imageHeight) / 2;
-				event.gc.drawImage(trailingImage, x, y);
-			}
-		}
-	});
+                int x = event.x + event.width + IMAGE_MARGIN;
+                int itemHeight = tree.getItemHeight();
+                int imageHeight = trailingImage.getBounds().height;
+                int y = event.y + (itemHeight - imageHeight) / 2;
+                event.gc.drawImage(trailingImage, x, y);
+            }
+        }
+    });
 
-	shell.open();
-	while (!shell.isDisposed()) {
-		if (!display.readAndDispatch()) display.sleep();
-	}
-	xImage.dispose();
-	display.dispose();
+    shell.open();
+    while (!shell.isDisposed()) {
+        if (!display.readAndDispatch()) display.sleep();
+    }
+    xImage.dispose();
+    display.dispose();
 }
--- a/snippets/treeeditor/Snippet111.d	Sat May 17 13:06:43 2008 +0900
+++ b/snippets/treeeditor/Snippet111.d	Sat May 17 23:26:35 2008 +0200
@@ -35,100 +35,105 @@
 import dwt.custom.TreeEditor;
 
 import dwt.dwthelper.utils : String, substring, Math;
-import std.stdio;
 
 import tango.util.Convert;
+import tango.util.log.Trace;
+version(JIVE){
+    import jive.stacktrace;
+}
 
 void main () {
-	final Display display = new Display ();
-	final Color black = display.getSystemColor (DWT.COLOR_BLACK);
-	Shell shell = new Shell (display);
-	shell.setLayout (new FillLayout ());
-	final Tree tree = new Tree (shell, DWT.BORDER);
-	for (int i=0; i<16; i++) {
-		TreeItem itemI = new TreeItem (tree, DWT.NONE);
-		itemI.setText ("Item " ~ to!(char[])(i));
-		for (int j=0; j<16; j++) {
-			TreeItem itemJ = new TreeItem (itemI, DWT.NONE);
-			itemJ.setText ("Item " ~ to!(char[])(j) );
-		}
-	}
-	final TreeItem [] lastItem = new TreeItem [1];
-	final TreeEditor editor = new TreeEditor (tree);
-	tree.addListener (DWT.Selection, new class Listener {
-		public void handleEvent (Event event) {
-			final TreeItem item = cast(TreeItem) event.item;
-			if (item !is null && item is lastItem [0]) {
-				bool showBorder = true;
-				final Composite composite = new Composite (tree, DWT.NONE);
-				if (showBorder) composite.setBackground (black);
-				final Text text = new Text (composite, DWT.NONE);
-				final int inset = showBorder ? 1 : 0;
-				composite.addListener (DWT.Resize, new class Listener {
-					public void handleEvent (Event e) {
-						Rectangle rect = composite.getClientArea ();
-						text.setBounds (rect.x + inset, rect.y + inset, rect.width - inset * 2, rect.height - inset * 2);
-					}
-				});
-				Listener textListener = new class Listener {
-					public void handleEvent (Event e) {
-						switch (e.type) {
-                        case DWT.FocusOut: {
-                            item.setText (text.getText ());
-                            composite.dispose ();
-                        }
-                        break;
-                        case DWT.Verify: {
-                            String newText = text.getText ();
-                            String leftText = newText.substring (0, e.start);
-                            String rightText = newText.substring (e.end, newText.length);
-                            GC gc = new GC (text);
-                            Point size = gc.textExtent (leftText ~ e.text ~ rightText);
-                            gc.dispose ();
-                            size = text.computeSize (size.x, DWT.DEFAULT);
-                            editor.horizontalAlignment = DWT.LEFT;
-                            Rectangle itemRect = item.getBounds (), rect = tree.getClientArea ();
-                            editor.minimumWidth = Math.max (size.x, itemRect.width) + inset * 2;
-                            int left = itemRect.x, right = rect.x + rect.width;
-                            editor.minimumWidth = Math.min (editor.minimumWidth, right - left);
-                            editor.minimumHeight = size.y + inset * 2;
-                            editor.layout ();
-                        }
-                        break;
-                        case DWT.Traverse: {
-                            switch (e.detail) {
-                            case DWT.TRAVERSE_RETURN:
-                                item.setText (text.getText ());
-                                //FALL THROUGH
-                            case DWT.TRAVERSE_ESCAPE:
-                                composite.dispose ();
-                                e.doit = false;
-                            default:
-                                //no-op
-                            }
-                            break;
-                        }
-                        default:
-                        // no-op
-						}
-					}
-				};
-				text.addListener (DWT.FocusOut, textListener);
-				text.addListener (DWT.Traverse, textListener);
-				text.addListener (DWT.Verify, textListener);
-				editor.setEditor (composite, item);
-				text.setText (item.getText ());
-				text.selectAll ();
-				text.setFocus ();
-			}
-			lastItem [0] = item;
-		}
-	});
-	shell.pack ();
-	shell.open ();
-	while (!shell.isDisposed()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
+
+    Tree tree;
+    Color black;
+    void handleResize (Event e, Composite composite, Text text, int inset ) {
+        Rectangle rect = composite.getClientArea ();
+        text.setBounds (rect.x + inset, rect.y + inset, rect.width - inset * 2, rect.height - inset * 2);
+    }
+    void handleTextEvent (Event e, Composite composite, TreeItem item, TreeEditor editor,Text text, int inset ) {
+        switch (e.type) {
+        case DWT.FocusOut: {
+            item.setText (text.getText ());
+            composite.dispose ();
+        }
+        break;
+        case DWT.Verify: {
+            String newText = text.getText ();
+            String leftText = newText.substring (0, e.start);
+            String rightText = newText.substring (e.end, newText.length);
+            GC gc = new GC (text);
+            Point size = gc.textExtent (leftText ~ e.text ~ rightText);
+            gc.dispose ();
+            size = text.computeSize (size.x, DWT.DEFAULT);
+            editor.horizontalAlignment = DWT.LEFT;
+            Rectangle itemRect = item.getBounds (), rect = tree.getClientArea ();
+            editor.minimumWidth = Math.max (size.x, itemRect.width) + inset* 2;
+            int left = itemRect.x, right = rect.x + rect.width;
+            editor.minimumWidth = Math.min (editor.minimumWidth, right - left);
+            editor.minimumHeight = size.y + inset* 2;
+            editor.layout ();
+        }
+        break;
+        case DWT.Traverse: {
+            switch (e.detail) {
+            case DWT.TRAVERSE_RETURN:
+                item.setText (text.getText ());
+                //FALL THROUGH
+            case DWT.TRAVERSE_ESCAPE:
+                composite.dispose ();
+                e.doit = false;
+            default:
+                //no-op
+            }
+            break;
+        }
+        default:
+        // no-op
+        }
+    }
+    void handleSelection (Event event, TreeItem[] lastItem, TreeEditor editor ) {
+        TreeItem item = cast(TreeItem) event.item;
+        if (item !is null && item is lastItem [0]) {
+            bool showBorder = true;
+            Composite composite = new Composite (tree, DWT.NONE);
+            if (showBorder) composite.setBackground (black);
+            Text text = new Text (composite, DWT.NONE);
+            int inset = showBorder ? 1 : 0;
+            composite.addListener (DWT.Resize, dgListener( &handleResize, composite, text, inset ));
+            Listener textListener = dgListener( &handleTextEvent, composite, item, editor, text, inset);
+            text.addListener (DWT.FocusOut, textListener);
+            text.addListener (DWT.Traverse, textListener);
+            text.addListener (DWT.Verify, textListener);
+            editor.setEditor (composite, item);
+            text.setText (item.getText ());
+            text.selectAll ();
+            text.setFocus ();
+        }
+        lastItem [0] = item;
+    }
+
+    Display display = new Display ();
+    black = display.getSystemColor (DWT.COLOR_BLACK);
+    Shell shell = new Shell (display);
+    shell.setLayout (new FillLayout ());
+    tree = new Tree (shell, DWT.BORDER);
+    for (int i=0; i<16; i++) {
+        TreeItem itemI = new TreeItem (tree, DWT.NONE);
+        itemI.setText ("Item " ~ to!(char[])(i));
+        for (int j=0; j<16; j++) {
+            TreeItem itemJ = new TreeItem (itemI, DWT.NONE);
+            itemJ.setText ("Item " ~ to!(char[])(j) );
+        }
+    }
+    TreeItem [] lastItem = new TreeItem [1];
+    TreeEditor editor = new TreeEditor (tree);
+    tree.addListener (DWT.Selection, dgListener( &handleSelection, lastItem, editor ));
+    shell.pack ();
+    shell.open ();
+    while (!shell.isDisposed()) {
+        if (!display.readAndDispatch ()) display.sleep ();
+    }
+    display.dispose ();
 }
 
+