diff dwt/custom/TableTree.d @ 41:6337764516f1

Sync dwt/custom with dwt-linux (took copy of complete folder)
author Frank Benoit <benoit@tionex.de>
date Tue, 07 Oct 2008 16:29:55 +0200
parents e831403a80a9
children
line wrap: on
line diff
--- a/dwt/custom/TableTree.d	Tue Oct 07 14:41:31 2008 +0200
+++ b/dwt/custom/TableTree.d	Tue Oct 07 16:29:55 2008 +0200
@@ -7,16 +7,38 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ * Port to the D programming language:
+ *     Frank Benoit <benoit@tionex.de>
  *******************************************************************************/
-module dwt.custom;
+module dwt.custom.TableTree;
+
 
 
-import dwt.*;
-import dwt.events.*;
-import dwt.graphics.*;
-import dwt.widgets.*;
+import dwt.DWT;
+import dwt.DWTException;
+import dwt.events.SelectionEvent;
+import dwt.events.SelectionListener;
+import dwt.events.TreeListener;
+import dwt.graphics.Color;
+import dwt.graphics.Font;
+import dwt.graphics.GC;
+import dwt.graphics.Image;
+import dwt.graphics.ImageData;
+import dwt.graphics.PaletteData;
+import dwt.graphics.Point;
+import dwt.graphics.RGB;
+import dwt.graphics.Rectangle;
+import dwt.widgets.Composite;
+import dwt.widgets.Event;
+import dwt.widgets.Listener;
+import dwt.widgets.Menu;
+import dwt.widgets.Table;
+import dwt.widgets.TableItem;
+import dwt.widgets.TypedListener;
+import dwt.custom.TableTreeItem;
+import dwt.dwthelper.utils;
 
-/** 
+/**
  * A TableTree is a selectable user interface object
  * that displays a hierarchy of items, and issues
  * notification when an item is selected.
@@ -36,31 +58,34 @@
  * <p>
  * Note: Only one of the styles SINGLE, and MULTI may be specified.
  * </p>
- * 
+ *
  * @deprecated As of 3.1 use Tree, TreeItem and TreeColumn
  */
 public class TableTree : Composite {
+
+    alias Composite.computeSize computeSize;
+
     Table table;
-    TableTreeItem[] items = EMPTY_ITEMS;
+    TableTreeItem[] items;
     Image plusImage, minusImage, sizeImage;
 
     /*
     * TableTreeItems are not treated as children but rather as items.
-    * When the TableTree is disposed, all children are disposed because 
+    * When the TableTree is disposed, all children are disposed because
     * TableTree inherits this behaviour from Composite.  The items
     * must be disposed separately.  Because TableTree is not part of
-    * the dwt.widgets module, the method releaseWidget can 
+    * the org.eclipse.swt.widgets module, the method releaseWidget can
     * not be overridden (this is how items are disposed of in Table and Tree).
     * Instead, the items are disposed of in response to the dispose event on the
     * TableTree.  The "inDispose" flag is used to distinguish between disposing
-    * one TableTreeItem (e.g. when removing an entry from the TableTree) and 
+    * one TableTreeItem (e.g. when removing an entry from the TableTree) and
     * disposing the entire TableTree.
     */
     bool inDispose = false;
-    
-    static final TableTreeItem[] EMPTY_ITEMS = new TableTreeItem [0];   
-    static final String[] EMPTY_TEXTS = new String [0]; 
-    static final Image[] EMPTY_IMAGES = new Image [0];
+
+    static final TableTreeItem[] EMPTY_ITEMS;
+    static final String[] EMPTY_TEXTS;
+    static final Image[] EMPTY_IMAGES;
     static final String ITEMID = "TableTreeItemID"; //$NON-NLS-1$
 
 /**
@@ -69,7 +94,7 @@
  * <p>
  * The style value is either one of the style constants defined in
  * class <code>DWT</code> which is applicable to instances of this
- * class, or must be built by <em>bitwise OR</em>'ing together 
+ * class, or must be built by <em>bitwise OR</em>'ing together
  * (that is, using the <code>int</code> "|" operator) two or more
  * of those <code>DWT</code> style constants. The class description
  * lists the style constants that are applicable to the class.
@@ -94,40 +119,43 @@
  */
 public this(Composite parent, int style) {
     super(parent, checkStyle (style));
+    items = EMPTY_ITEMS;
     table = new Table(this, style);
-    Listener tableListener = new Listener() {
+    Listener tableListener = new class() Listener {
         public void handleEvent(Event e) {
             switch (e.type) {
             case DWT.MouseDown: onMouseDown(e); break;
             case DWT.Selection: onSelection(e); break;
             case DWT.DefaultSelection: onSelection(e); break;
             case DWT.KeyDown: onKeyDown(e); break;
+            default:
             }
         }
     };
-    int[] tableEvents = new int[]{DWT.MouseDown, 
-                                   DWT.Selection, 
-                                   DWT.DefaultSelection, 
-                                   DWT.KeyDown};
+    int[] tableEvents = [DWT.MouseDown,
+                                   DWT.Selection,
+                                   DWT.DefaultSelection,
+                                   DWT.KeyDown];
     for (int i = 0; i < tableEvents.length; i++) {
         table.addListener(tableEvents[i], tableListener);
     }
-    
-    Listener listener = new Listener() {
+
+    Listener listener = new class() Listener {
         public void handleEvent(Event e) {
             switch (e.type) {
             case DWT.Dispose: onDispose(e); break;
             case DWT.Resize:  onResize(e); break;
             case DWT.FocusIn: onFocusIn(e); break;
+            default:
             }
         }
     };
-    int[] events = new int[]{DWT.Dispose, 
-                              DWT.Resize, 
-                              DWT.FocusIn};
+    int[] events = [DWT.Dispose,
+                              DWT.Resize,
+                              DWT.FocusIn];
     for (int i = 0; i < events.length; i++) {
         addListener(events[i], listener);
-    }                         
+    }
 }
 
 int addItem(TableTreeItem item, int index) {
@@ -135,13 +163,13 @@
     TableTreeItem[] newItems = new TableTreeItem[items.length + 1];
     System.arraycopy(items, 0, newItems, 0, index);
     newItems[index] = item;
-    System.arraycopy(items, index, newItems, index + 1, items.length - index); 
+    System.arraycopy(items, index, newItems, index + 1, items.length - index);
     items = newItems;
 
     /* Return the index in the table where this table should be inserted */
-    if (index is items.length - 1 ) 
+    if (index is items.length - 1 )
         return table.getItemCount();
-    else 
+    else
         return table.indexOf(items[index+1].tableItem);
 }
 
@@ -207,15 +235,15 @@
     addListener (DWT.Collapse, typedListener);
 }
 private static int checkStyle (int style) {
-    int mask = DWT.LEFT_TO_RIGHT | DWT.RIGHT_TO_LEFT; 
+    int mask = DWT.LEFT_TO_RIGHT | DWT.RIGHT_TO_LEFT;
     style = style & mask;
     return style;
-} 
-public Point computeSize (int wHint, int hHint, bool changed) {
+}
+public override Point computeSize (int wHint, int hHint, bool changed) {
     checkWidget();
     return table.computeSize (wHint, hHint, changed);
 }
-public Rectangle computeTrim (int x, int y, int width, int height) {
+public override Rectangle computeTrim (int x, int y, int width, int height) {
     checkWidget();
     return table.computeTrim(x, y, width, height);
 }
@@ -248,22 +276,22 @@
         notifyListeners(DWT.Expand, event);
     }
 }
-public Color getBackground () {
+public override Color getBackground () {
     // This method must be overridden otherwise, in a TableTree in which the first
     // item has no sub items, a grey (Widget background colour) square will appear in
     // the first column of the first item.
     // It is not possible in the constructor to set the background of the TableTree
-    // to be the same as the background of the Table because this interferes with 
+    // to be the same as the background of the Table because this interferes with
     // the TableTree adapting to changes in the System color settings.
     return table.getBackground();
 }
-public Rectangle getClientArea () {
+public override Rectangle getClientArea () {
     return table.getClientArea();
 }
-public Color getForeground () {
+public override Color getForeground () {
     return table.getForeground();
 }
-public Font getFont () {
+public override Font getFont () {
     return table.getFont();
 }
 /**
@@ -347,7 +375,7 @@
     return table.getSelectionCount();
 }
 
-public int getStyle () {
+public override int getStyle () {
     checkWidget();
     return table.getStyle();
 }
@@ -363,23 +391,23 @@
 }
 
 void createImages () {
-    
+
     int itemHeight = sizeImage.getBounds().height;
-    // Calculate border around image. 
+    // Calculate border around image.
     // At least 9 pixels are needed to draw the image
     // Leave at least a 6 pixel border.
     int indent = Math.min(6, (itemHeight - 9) / 2);
     indent = Math.max(0, indent);
-    int size = Math.max (10, itemHeight - 2 * indent); 
+    int size = Math.max (10, itemHeight - 2 * indent);
     size = ((size + 1) / 2) * 2; // size must be an even number
     int midpoint = indent + size / 2;
-    
+
     Color foreground = getForeground();
     Color plusMinus = getDisplay().getSystemColor(DWT.COLOR_WIDGET_NORMAL_SHADOW);
     Color background = getBackground();
-    
+
     /* Plus image */
-    PaletteData palette = new PaletteData(new RGB[]{foreground.getRGB(), background.getRGB(), plusMinus.getRGB()});
+    PaletteData palette = new PaletteData( [ foreground.getRGB(), background.getRGB(), plusMinus.getRGB()]);
     ImageData imageData = new ImageData(itemHeight, itemHeight, 4, palette);
     imageData.transparentPixel = 1;
     plusImage = new Image(getDisplay(), imageData);
@@ -392,9 +420,9 @@
     gc.drawLine(midpoint, indent + 2, midpoint, indent + size - 2);
     gc.drawLine(indent + 2, midpoint, indent + size - 2, midpoint);
     gc.dispose();
-    
+
     /* Minus image */
-    palette = new PaletteData(new RGB[]{foreground.getRGB(), background.getRGB(), plusMinus.getRGB()});
+    palette = new PaletteData([foreground.getRGB(), background.getRGB(), plusMinus.getRGB()]);
     imageData = new ImageData(itemHeight, itemHeight, 4, palette);
     imageData.transparentPixel = 1;
     minusImage = new Image(getDisplay(), imageData);
@@ -420,7 +448,7 @@
 
 /**
  * Gets the index of an item.
- * 
+ *
  * <p>The widget is searched starting at 0 until an
  * item is found that is equal to the search item.
  * If no item is found, -1 is returned.  Indexing
@@ -486,7 +514,7 @@
  *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
  *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
  * </ul>
- * 
+ *
  * @since 3.1
  */
 public TableTreeItem getItem (int index) {
@@ -517,7 +545,7 @@
     TableItem item = table.getItem(point);
     if (item is null) return null;
     return getItem(item);
-    
+
 }
 TableTreeItem getItem(TableItem tableItem) {
     if (tableItem is null) return null;
@@ -542,7 +570,7 @@
             if (item.getItemCount() is 0) return;
             if (item.getExpanded()) {
                 TableTreeItem newSelection = item.getItems()[0];
-                table.setSelection(new TableItem[]{newSelection.tableItem});
+                table.setSelection([newSelection.tableItem]);
                 showItem(newSelection);
                 type = DWT.Selection;
             } else {
@@ -558,7 +586,7 @@
                 if (parent !is null) {
                     int index = parent.indexOf(item);
                     if (index !is 0) return;
-                    table.setSelection(new TableItem[]{parent.tableItem});
+                    table.setSelection([parent.tableItem]);
                     type = DWT.Selection;
                 }
             }
@@ -578,7 +606,7 @@
             item.setExpanded(true);
             type = DWT.Expand;
         }
-    } 
+    }
     if (type is 0) return;
     Event event = new Event();
     event.item = item;
@@ -697,7 +725,7 @@
     checkWidget();
     table.selectAll();
 }
-public void setBackground (Color color) {
+public override void setBackground (Color color) {
     super.setBackground(color);
     table.setBackground(color);
     if (sizeImage !is null) {
@@ -708,19 +736,19 @@
         gc.dispose();
     }
 }
-public void setEnabled (bool enabled) {
+public override void setEnabled (bool enabled) {
     super.setEnabled(enabled);
     table.setEnabled(enabled);
 }
-public void setFont (Font font) {
+public override void setFont (Font font) {
     super.setFont(font);
     table.setFont(font);
 }
-public void setForeground (Color color) {
+public override void setForeground (Color color) {
     super.setForeground(color);
     table.setForeground(color);
 }
-public void setMenu (Menu menu) {
+public override void setMenu (Menu menu) {
     super.setMenu(menu);
     table.setMenu(menu);
 }
@@ -736,7 +764,6 @@
  * @param items the array of items
  *
  * @exception IllegalArgumentException <ul>
- *    <li>ERROR_NULL_ARGUMENT - if the array of items is null</li>
  *    <li>ERROR_INVALID_ARGUMENT - if one of the item has been disposed</li>
  * </ul>
  * @exception DWTException <ul>
@@ -748,7 +775,8 @@
  */
 public void setSelection (TableTreeItem[] items) {
     checkWidget ();
-    if (items is null) DWT.error (DWT.ERROR_NULL_ARGUMENT);
+    // DWT extension: allow null for zero length string
+    //if (items is null) DWT.error (DWT.ERROR_NULL_ARGUMENT);
     int length = items.length;
     if (length is 0 || ((table.getStyle() & DWT.SINGLE) !is 0 && length > 1)) {
         deselectAll();
@@ -762,9 +790,9 @@
     }
     table.setSelection(tableItems);
 }
-public void setToolTipText (String String) {
-    super.setToolTipText(String);
-    table.setToolTipText(String);
+public override void setToolTipText (String string) {
+    super.setToolTipText(string);
+    table.setToolTipText(string);
 }
 
 /**