changeset 141:9a61fc56eb56

standard tabs complete
author Frank Benoit <benoit@tionex.de>
date Tue, 22 Jan 2008 00:14:17 +0100
parents c3880d67f906
children 62d278f4c20b
files dwtexamples/controlexample/ControlExample.d dwtexamples/controlexample/Tab.d dwtexamples/controlexample/ToolBarTab.d dwtexamples/controlexample/ToolTipTab.d dwtexamples/controlexample/TreeTab.d
diffstat 5 files changed, 128 insertions(+), 88 deletions(-) [+]
line wrap: on
line diff
--- a/dwtexamples/controlexample/ControlExample.d	Mon Jan 21 23:52:45 2008 +0100
+++ b/dwtexamples/controlexample/ControlExample.d	Tue Jan 22 00:14:17 2008 +0100
@@ -59,11 +59,9 @@
 import dwtexamples.controlexample.TabFolderTab;
 import dwtexamples.controlexample.TableTab;
 import dwtexamples.controlexample.TextTab;
-/+
 import dwtexamples.controlexample.ToolBarTab;
 import dwtexamples.controlexample.ToolTipTab;
 import dwtexamples.controlexample.TreeTab;
-+/
 
 
 import tango.core.Exception;
@@ -161,12 +159,10 @@
             new SpinnerTab (this),
             new TabFolderTab (this),
             new TableTab (this),
-            new TextTab (this)
-            /+
+            new TextTab (this),
             new ToolBarTab (this),
             new ToolTipTab (this),
-            new TreeTab (this),
-            +/
+            new TreeTab (this)
         ];
     }
 
--- a/dwtexamples/controlexample/Tab.d	Mon Jan 21 23:52:45 2008 +0100
+++ b/dwtexamples/controlexample/Tab.d	Tue Jan 22 00:14:17 2008 +0100
@@ -71,6 +71,9 @@
 import dwt.widgets.Table;
 import dwt.widgets.TableItem;
 import dwt.widgets.Text;
+import dwt.widgets.Tree;
+import dwt.widgets.TreeItem;
+import dwt.widgets.ToolTip;
 import dwt.widgets.Widget;
 import dwt.widgets.Canvas;
 import dwt.widgets.CoolBar;
@@ -329,6 +332,20 @@
             createSetterGetter( ti, "TopIndex", typeid(int) );
             reflectTypeInfos[ Text.classinfo ] = ti;
         }
+        {
+            ReflectTypeInfo ti;
+            createSetterGetter( ti, "Message", typeid(int) );
+            createSetterGetter( ti, "Text", typeid(char[]) );
+            reflectTypeInfos[ ToolTip.classinfo ] = ti;
+        }
+        {
+            ReflectTypeInfo ti;
+            createSetterGetter( ti, "ColumnOrder", typeid(int[]) );
+            createSetterGetter( ti, "Selection", typeid(TreeItem[]) );
+            createSetterGetter( ti, "ToolTipText", typeid(char[]) );
+            createSetterGetter( ti, "TopItem", typeid(int) );
+            reflectTypeInfos[ Tree.classinfo ] = ti;
+        }
 
         /+{
             ReflectTypeInfo ti;
--- a/dwtexamples/controlexample/ToolBarTab.d	Mon Jan 21 23:52:45 2008 +0100
+++ b/dwtexamples/controlexample/ToolBarTab.d	Tue Jan 22 00:14:17 2008 +0100
@@ -29,6 +29,10 @@
 import dwt.widgets.ToolItem;
 import dwt.widgets.Widget;
 
+import dwtexamples.controlexample.Tab;
+import dwtexamples.controlexample.ControlExample;
+import tango.util.Convert;
+
 class ToolBarTab : Tab {
     /* Example widgets and groups that contain them */
     ToolBar imageToolBar, textToolBar, imageTextToolBar;
@@ -121,7 +125,7 @@
         item.setToolTipText("DWT.SEPARATOR");
         if (comboChildButton.getSelection ()) {
             Combo combo = new Combo (imageToolBar, DWT.NONE);
-            combo.setItems (new String [] {"250", "500", "750"});
+            combo.setItems (["250", "500", "750"]);
             combo.setText (combo.getItem (0));
             combo.pack ();
             item.setWidth (combo.getSize ().x);
@@ -159,7 +163,7 @@
         item.setToolTipText("DWT.SEPARATOR");
         if (comboChildButton.getSelection ()) {
             Combo combo = new Combo (textToolBar, DWT.NONE);
-            combo.setItems (new String [] {"250", "500", "750"});
+            combo.setItems (["250", "500", "750"]);
             combo.setText (combo.getItem (0));
             combo.pack ();
             item.setWidth (combo.getSize ().x);
@@ -204,7 +208,7 @@
         item.setToolTipText("DWT.SEPARATOR");
         if (comboChildButton.getSelection ()) {
             Combo combo = new Combo (imageTextToolBar, DWT.NONE);
-            combo.setItems (new String [] {"250", "500", "750"});
+            combo.setItems (["250", "500", "750"]);
             combo.setText (combo.getItem (0));
             combo.pack ();
             item.setWidth (combo.getSize ().x);
@@ -235,7 +239,7 @@
         comboChildButton.setText (ControlExample.getResourceString("Combo_child"));
 
         /* Add the listeners */
-        comboChildButton.addSelectionListener (new SelectionAdapter () {
+        comboChildButton.addSelectionListener (new class() SelectionAdapter {
             public void widgetSelected (SelectionEvent event) {
                 recreateExampleWidgets ();
             }
@@ -289,20 +293,20 @@
      * Gets the "Example" widget children.
      */
     Widget [] getExampleWidgets () {
-        return new Widget [] {imageToolBar, textToolBar, imageTextToolBar};
+        return [ cast(Widget) imageToolBar, textToolBar, imageTextToolBar ];
     }
 
     /**
      * Gets the short text for the tab folder item.
      */
-    public String getShortTabText() {
+    public char[] getShortTabText() {
         return "TB";
     }
 
     /**
      * Gets the text for the tab folder item.
      */
-    String getTabText () {
+    char[] getTabText () {
         return "ToolBar";
     }
 
@@ -324,7 +328,7 @@
      * Listens to widgetSelected() events on DWT.DROP_DOWN type ToolItems
      * and opens/closes a menu when appropriate.
      */
-    class DropDownSelectionListener extends SelectionAdapter {
+    class DropDownSelectionListener : SelectionAdapter {
         private Menu    menu = null;
         private bool visible = false;
 
@@ -334,15 +338,15 @@
                 // Lazy create the menu.
                 menu = new Menu(shell);
                 for (int i = 0; i < 9; ++i) {
-                    final String text = ControlExample.getResourceString("DropDownData_" + i);
-                    if (text.length() !is 0) {
+                    final char[] text = ControlExample.getResourceString("DropDownData_" ~ to!(char[])(i));
+                    if (text.length !is 0) {
                         MenuItem menuItem = new MenuItem(menu, DWT.NONE);
                         menuItem.setText(text);
                         /*
                          * Add a menu selection listener so that the menu is hidden
                          * when the user selects an item from the drop down menu.
                          */
-                        menuItem.addSelectionListener(new SelectionAdapter() {
+                        menuItem.addSelectionListener(new class() SelectionAdapter {
                             public void widgetSelected(SelectionEvent e) {
                                 setMenuVisible(false);
                             }
@@ -368,7 +372,7 @@
                     setMenuVisible(false);
                 } else {
                     // Position the menu below and vertically aligned with the the drop down tool button.
-                    final ToolItem toolItem = (ToolItem) event.widget;
+                    final ToolItem toolItem = cast(ToolItem) event.widget;
                     final ToolBar  toolBar = toolItem.getParent();
 
                     Rectangle toolItemBounds = toolItem.getBounds();
--- a/dwtexamples/controlexample/ToolTipTab.d	Mon Jan 21 23:52:45 2008 +0100
+++ b/dwtexamples/controlexample/ToolTipTab.d	Tue Jan 22 00:14:17 2008 +0100
@@ -30,6 +30,9 @@
 import dwt.widgets.TrayItem;
 import dwt.widgets.Widget;
 
+import dwtexamples.controlexample.Tab;
+import dwtexamples.controlexample.ControlExample;
+
 class ToolTipTab : Tab {
 
     /* Example widgets and groups that contain them */
@@ -65,7 +68,7 @@
         toolTipGroup.setText ("ToolTip");
         visibleButton = new Button(toolTipGroup, DWT.CHECK);
         visibleButton.setText(ControlExample.getResourceString("Visible"));
-        visibleButton.addSelectionListener (new SelectionAdapter () {
+        visibleButton.addSelectionListener (new class() SelectionAdapter {
             public void widgetSelected (SelectionEvent event) {
                 setExampleWidgetVisibility ();
             }
@@ -105,7 +108,7 @@
          * its preferred size, and then resizes the shell, we
          * recalculate the preferred size correctly.
          */
-        tabFolderPage.addControlListener(new ControlAdapter() {
+        tabFolderPage.addControlListener(new class() ControlAdapter {
             public void controlResized(ControlEvent e) {
                 setExampleWidgetSize ();
             }
@@ -153,17 +156,17 @@
         showInTrayButton.setEnabled(tray !is null);
 
         /* Add the listeners */
-        autoHideButton.addSelectionListener (new SelectionAdapter () {
+        autoHideButton.addSelectionListener (new class() SelectionAdapter {
             public void widgetSelected (SelectionEvent event) {
                 setExampleWidgetAutoHide ();
             }
         });
-        showInTrayButton.addSelectionListener (new SelectionAdapter () {
+        showInTrayButton.addSelectionListener (new class() SelectionAdapter {
             public void widgetSelected (SelectionEvent event) {
                 showExampleWidgetInTray ();
             }
         });
-        shell.addDisposeListener(new DisposeListener() {
+        shell.addDisposeListener(new class() DisposeListener {
             public void widgetDisposed(DisposeEvent event) {
                 disposeTrayItem();
             }
@@ -190,21 +193,21 @@
      */
     // Tab uses this for many things - widgets would only get set/get, listeners, and dispose.
     Widget[] getExampleWidgets () {
-        return new Widget [] {toolTip1};
+        return [ cast(Widget) toolTip1 ];
     }
 
     /**
      * Returns a list of set/get API method names (without the set/get prefix)
      * that can be used to set/get values in the example control(s).
      */
-    String[] getMethodNames() {
-        return new String[] {"Message", "Text"};
+    char[][] getMethodNames() {
+        return ["Message", "Text"];
     }
 
     /**
      * Gets the text for the tab folder item.
      */
-    String getTabText () {
+    char[] getTabText () {
         return "ToolTip";
     }
 
--- a/dwtexamples/controlexample/TreeTab.d	Mon Jan 21 23:52:45 2008 +0100
+++ b/dwtexamples/controlexample/TreeTab.d	Tue Jan 22 00:14:17 2008 +0100
@@ -38,6 +38,13 @@
 import dwt.widgets.TreeItem;
 import dwt.widgets.Widget;
 
+import dwtexamples.controlexample.Tab;
+import dwtexamples.controlexample.ControlExample;
+import dwtexamples.controlexample.ScrollableTab;
+import tango.text.convert.Format;
+import tango.util.Convert;
+import tango.core.Exception;
+
 class TreeTab : ScrollableTab {
     /* Example widgets and groups that contain them */
     Tree tree1, tree2;
@@ -54,33 +61,18 @@
     Button multipleColumns, moveableColumns, resizableColumns, headerVisibleButton, sortIndicatorButton, headerImagesButton, subImagesButton, linesVisibleButton;
 
     /* Controls and resources added to the "Colors and Fonts" group */
-    static final int ITEM_FOREGROUND_COLOR = 3;
-    static final int ITEM_BACKGROUND_COLOR = 4;
-    static final int ITEM_FONT = 5;
-    static final int CELL_FOREGROUND_COLOR = 6;
-    static final int CELL_BACKGROUND_COLOR = 7;
-    static final int CELL_FONT = 8;
+    static const int ITEM_FOREGROUND_COLOR = 3;
+    static const int ITEM_BACKGROUND_COLOR = 4;
+    static const int ITEM_FONT = 5;
+    static const int CELL_FOREGROUND_COLOR = 6;
+    static const int CELL_BACKGROUND_COLOR = 7;
+    static const int CELL_FONT = 8;
     Color itemForegroundColor, itemBackgroundColor, cellForegroundColor, cellBackgroundColor;
     Font itemFont, cellFont;
 
-    static String [] columnTitles   = {ControlExample.getResourceString("TableTitle_0"),
-           ControlExample.getResourceString("TableTitle_1"),
-           ControlExample.getResourceString("TableTitle_2"),
-           ControlExample.getResourceString("TableTitle_3")};
+    static char[] [] columnTitles;
 
-    static String[][] tableData = {
-            { ControlExample.getResourceString("TableLine0_0"),
-                    ControlExample.getResourceString("TableLine0_1"),
-                    ControlExample.getResourceString("TableLine0_2"),
-                    ControlExample.getResourceString("TableLine0_3") },
-            { ControlExample.getResourceString("TableLine1_0"),
-                    ControlExample.getResourceString("TableLine1_1"),
-                    ControlExample.getResourceString("TableLine1_2"),
-                    ControlExample.getResourceString("TableLine1_3") },
-            { ControlExample.getResourceString("TableLine2_0"),
-                    ControlExample.getResourceString("TableLine2_1"),
-                    ControlExample.getResourceString("TableLine2_2"),
-                    ControlExample.getResourceString("TableLine2_3") } };
+    static char[][][] tableData;
 
     Point menuMouseCoords;
 
@@ -89,6 +81,28 @@
      */
     this(ControlExample instance) {
         super(instance);
+        if( columnTitles.length is 0 ){
+            columnTitles   = [
+                ControlExample.getResourceString("TableTitle_0"),
+                ControlExample.getResourceString("TableTitle_1"),
+                ControlExample.getResourceString("TableTitle_2"),
+                ControlExample.getResourceString("TableTitle_3")];
+        }
+        if( tableData.length is 0 ){
+            tableData = [
+                [ ControlExample.getResourceString("TableLine0_0"),
+                        ControlExample.getResourceString("TableLine0_1"),
+                        ControlExample.getResourceString("TableLine0_2"),
+                        ControlExample.getResourceString("TableLine0_3") ],
+                [ ControlExample.getResourceString("TableLine1_0"),
+                        ControlExample.getResourceString("TableLine1_1"),
+                        ControlExample.getResourceString("TableLine1_2"),
+                        ControlExample.getResourceString("TableLine1_3") ],
+                [ ControlExample.getResourceString("TableLine2_0"),
+                        ControlExample.getResourceString("TableLine2_1"),
+                        ControlExample.getResourceString("TableLine2_2"),
+                        ControlExample.getResourceString("TableLine2_3") ] ];
+        }
     }
 
     /**
@@ -110,7 +124,7 @@
         item = new TableItem(colorAndFontTable, DWT.None);
         item.setText(ControlExample.getResourceString ("Cell_Font"));
 
-        shell.addDisposeListener(new DisposeListener() {
+        shell.addDisposeListener(new class() DisposeListener {
             public void widgetDisposed(DisposeEvent event) {
                 if (itemBackgroundColor !is null) itemBackgroundColor.dispose();
                 if (itemForegroundColor !is null) itemForegroundColor.dispose();
@@ -234,42 +248,42 @@
         subImagesButton.setText (ControlExample.getResourceString("Sub_Images"));
 
         /* Add the listeners */
-        linesVisibleButton.addSelectionListener (new SelectionAdapter () {
+        linesVisibleButton.addSelectionListener (new class() SelectionAdapter {
             public void widgetSelected (SelectionEvent event) {
                 setWidgetLinesVisible ();
             }
         });
-        multipleColumns.addSelectionListener (new SelectionAdapter () {
+        multipleColumns.addSelectionListener (new class() SelectionAdapter {
             public void widgetSelected (SelectionEvent event) {
                 recreateExampleWidgets ();
             }
         });
-        headerVisibleButton.addSelectionListener (new SelectionAdapter () {
+        headerVisibleButton.addSelectionListener (new class() SelectionAdapter {
             public void widgetSelected (SelectionEvent event) {
                 setWidgetHeaderVisible ();
             }
         });
-        sortIndicatorButton.addSelectionListener (new SelectionAdapter () {
+        sortIndicatorButton.addSelectionListener (new class() SelectionAdapter {
             public void widgetSelected (SelectionEvent event) {
                 setWidgetSortIndicator ();
             }
         });
-        moveableColumns.addSelectionListener (new SelectionAdapter () {
+        moveableColumns.addSelectionListener (new class() SelectionAdapter {
             public void widgetSelected (SelectionEvent event) {
                 setColumnsMoveable ();
             }
         });
-        resizableColumns.addSelectionListener (new SelectionAdapter () {
+        resizableColumns.addSelectionListener (new class() SelectionAdapter {
             public void widgetSelected (SelectionEvent event) {
                 setColumnsResizable ();
             }
         });
-        headerImagesButton.addSelectionListener (new SelectionAdapter () {
+        headerImagesButton.addSelectionListener (new class() SelectionAdapter {
             public void widgetSelected (SelectionEvent event) {
                 recreateExampleWidgets ();
             }
         });
-        subImagesButton.addSelectionListener (new SelectionAdapter () {
+        subImagesButton.addSelectionListener (new class() SelectionAdapter {
             public void widgetSelected (SelectionEvent event) {
                 recreateExampleWidgets ();
             }
@@ -316,16 +330,16 @@
             for (int i = 0; i < columnTitles.length; i++) {
                 TreeColumn treeColumn = new TreeColumn(tree1, DWT.NONE);
                 treeColumn.setText(columnTitles[i]);
-                treeColumn.setToolTipText(ControlExample.getResourceString("Tooltip", new String [] {columnTitles[i]}));
+                treeColumn.setToolTipText(Format( ControlExample.getResourceString("Tooltip") , columnTitles[i]));
             }
             tree1.setSortColumn(tree1.getColumn(0));
         }
         for (int i = 0; i < 4; i++) {
             TreeItem item = new TreeItem (tree1, DWT.NONE);
-            setItemText(item, i, ControlExample.getResourceString("Node_" + (i + 1)));
+            setItemText(item, i, ControlExample.getResourceString("Node_" ~ to!(char[])(i + 1)));
             if (i < 3) {
                 TreeItem subitem = new TreeItem (item, DWT.NONE);
-                setItemText(subitem, i, ControlExample.getResourceString("Node_" + (i + 1) + "_1"));
+                setItemText(subitem, i, ControlExample.getResourceString("Node_" ~ to!(char[])(i + 1) ~ "_1"));
             }
         }
         TreeItem treeRoots[] = tree1.getItems ();
@@ -347,13 +361,13 @@
             for (int i = 0; i < columnTitles.length; i++) {
                 TreeColumn treeColumn = new TreeColumn(tree2, DWT.NONE);
                 treeColumn.setText(columnTitles[i]);
-                treeColumn.setToolTipText(ControlExample.getResourceString("Tooltip", new String [] {columnTitles[i]}));
+                treeColumn.setToolTipText(Format( ControlExample.getResourceString("Tooltip"), columnTitles[i]));
                 if (headerImagesButton.getSelection()) treeColumn.setImage(image);
             }
         }
         for (int i = 0; i < 4; i++) {
             item = new TreeItem (tree2, DWT.NONE);
-            setItemText(item, i, ControlExample.getResourceString("Node_" + (i + 1)));
+            setItemText(item, i, ControlExample.getResourceString("Node_" ~ to!(char[])(i + 1)));
             if (multiColumn && subImagesButton.getSelection()) {
                 for (int j = 0; j < columnTitles.length; j++) {
                     item.setImage(j, image);
@@ -363,7 +377,7 @@
             }
             if (i < 3) {
                 TreeItem subitem = new TreeItem (item, DWT.NONE);
-                setItemText(subitem, i, ControlExample.getResourceString("Node_" + (i + 1) + "_1"));
+                setItemText(subitem, i, ControlExample.getResourceString("Node_" ~ to!(char[])(i + 1) ~ "_1"));
                 if (multiColumn && subImagesButton.getSelection()) {
                     for (int j = 0; j < columnTitles.length; j++) {
                         subitem.setImage(j, image);
@@ -396,7 +410,7 @@
         packColumns(tree2);
     }
 
-    void setItemText(TreeItem item, int i, String node) {
+    void setItemText(TreeItem item, int i, char[] node) {
         int index = i % 3;
         if (multipleColumns.getSelection()) {
             tableData [index][0] = node;
@@ -416,7 +430,7 @@
 
         packColumnsButton = new Button (sizeGroup, DWT.PUSH);
         packColumnsButton.setText (ControlExample.getResourceString("Pack_Columns"));
-        packColumnsButton.addSelectionListener(new SelectionAdapter () {
+        packColumnsButton.addSelectionListener(new class() SelectionAdapter {
             public void widgetSelected (SelectionEvent event) {
                 packColumns (tree1);
                 packColumns (tree2);
@@ -460,24 +474,26 @@
      * Gets the "Example" widget children.
      */
     Widget [] getExampleWidgets () {
-        return new Widget [] {tree1, tree2};
+        return [ cast(Widget) tree1, tree2 ];
     }
 
     /**
      * Returns a list of set/get API method names (without the set/get prefix)
      * that can be used to set/get values in the example control(s).
      */
-    String[] getMethodNames() {
-        return new String[] {"ColumnOrder", "Selection", "ToolTipText", "TopItem"};
+    char[][] getMethodNames() {
+        return ["ColumnOrder", "Selection", "ToolTipText", "TopItem"];
     }
 
-    Object[] parameterForType(String typeName, String value, Widget widget) {
+//PORTING_LEFT
+/+
+    Object[] parameterForType(char[] typeName, char[] value, Widget widget) {
         if (typeName.equals("org.eclipse.swt.widgets.TreeItem")) {
             TreeItem item = findItem(value, ((Tree) widget).getItems());
             if (item !is null) return new Object[] {item};
         }
         if (typeName.equals("[Lorg.eclipse.swt.widgets.TreeItem;")) {
-            String[] values = split(value, ',');
+            char[][] values = split(value, ',');
             TreeItem[] items = new TreeItem[values.length];
             for (int i = 0; i < values.length; i++) {
                 TreeItem item = findItem(values[i], ((Tree) widget).getItems());
@@ -488,11 +504,11 @@
         }
         return super.parameterForType(typeName, value, widget);
     }
-
-    TreeItem findItem(String value, TreeItem[] items) {
++/
+    TreeItem findItem(char[] value, TreeItem[] items) {
         for (int i = 0; i < items.length; i++) {
             TreeItem item = items[i];
-            if (item.getText().equals(value)) return item;
+            if (item.getText() == value ) return item;
             item = findItem(value, item.getItems());
             if (item !is null) return item;
         }
@@ -502,7 +518,7 @@
     /**
      * Gets the text for the tab folder item.
      */
-    String getTabText () {
+    char[] getTabText () {
         return "Tree";
     }
 
@@ -742,38 +758,40 @@
      * Sets the initial sort indicator state and adds a listener
      * to cycle through sort states and columns.
      */
-    void initializeSortState (final Tree tree) {
+    void initializeSortState (Tree tree) {
         /* Reset to known state: 'down' on column 0. */
         tree.setSortDirection (DWT.DOWN);
         TreeColumn [] columns = tree.getColumns();
         for (int i = 0; i < columns.length; i++) {
             TreeColumn column = columns[i];
             if (i is 0) tree.setSortColumn(column);
-            SelectionListener listener = new SelectionAdapter() {
+            SelectionListener listener = new class(tree) SelectionAdapter {
+                Tree t;
+                this( Tree t ){ this.t = t; }
                 public void widgetSelected(SelectionEvent e) {
                     int sortDirection = DWT.DOWN;
-                    if (e.widget is tree.getSortColumn()) {
+                    if (e.widget is t.getSortColumn()) {
                         /* If the sort column hasn't changed, cycle down -> up -> none. */
-                        switch (tree.getSortDirection ()) {
+                        switch (t.getSortDirection ()) {
                         case DWT.DOWN: sortDirection = DWT.UP; break;
                         case DWT.UP: sortDirection = DWT.NONE; break;
                         }
                     } else {
-                        tree.setSortColumn((TreeColumn)e.widget);
+                        t.setSortColumn(cast(TreeColumn)e.widget);
                     }
-                    tree.setSortDirection (sortDirection);
+                    t.setSortDirection (sortDirection);
                 }
             };
             column.addSelectionListener(listener);
-            column.setData("SortListener", listener);   //$NON-NLS-1$
+            column.setData("SortListener", cast(Object)listener);   //$NON-NLS-1$
         }
     }
 
-    void resetSortState (final Tree tree) {
+    void resetSortState (Tree tree) {
         tree.setSortDirection (DWT.NONE);
         TreeColumn [] columns = tree.getColumns();
         for (int i = 0; i < columns.length; i++) {
-            SelectionListener listener = (SelectionListener)columns[i].getData("SortListener"); //$NON-NLS-1$
+            SelectionListener listener = cast(SelectionListener)columns[i].getData("SortListener"); //$NON-NLS-1$
             if (listener !is null) columns[i].removeSelectionListener(listener);
         }
     }
@@ -789,11 +807,13 @@
     protected void specialPopupMenuItems(Menu menu, Event event) {
         MenuItem item = new MenuItem(menu, DWT.PUSH);
         item.setText("getItem(Point) on mouse coordinates");
-        final Tree t = (Tree) event.widget;
+        Tree t = cast(Tree) event.widget;
         menuMouseCoords = t.toControl(new Point(event.x, event.y));
-        item.addSelectionListener(new SelectionAdapter() {
+        item.addSelectionListener(new class(t) SelectionAdapter {
+            Tree t;
+            this( Tree t ){ this.t = t; }
             public void widgetSelected(SelectionEvent e) {
-                eventConsole.append ("getItem(Point(" + menuMouseCoords + ")) returned: " + t.getItem(menuMouseCoords));
+                eventConsole.append ("getItem(Point(" ~ menuMouseCoords.toString ~ ")) returned: " ~ (this.t.getItem(menuMouseCoords)).toString);
                 eventConsole.append ("\n");
             };
         });