Mercurial > projects > dwt-mac
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); } /**