# HG changeset patch # User Frank Benoit # Date 1200876001 -3600 # Node ID e32a6d7506c939f8709f60cbef9ab2dbd11119b4 # Parent e49a0f04c689ad08d315efb41a41385902641bbc Added files for the controlexample, work in progress diff -r e49a0f04c689 -r e32a6d7506c9 dsss.conf --- a/dsss.conf Mon Jan 21 00:26:03 2008 +0100 +++ b/dsss.conf Mon Jan 21 01:40:01 2008 +0100 @@ -36,4 +36,5 @@ [dwtexamples/helloworld/HelloWorld4.d] [dwtexamples/helloworld/HelloWorld5.d] [dwtexamples/addressbook/AddressBook.d] -[t.d] +[dwtexamples/controlexample/ControlExample.d] + diff -r e49a0f04c689 -r e32a6d7506c9 dwtexamples/controlexample/AlignableTab.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dwtexamples/controlexample/AlignableTab.d Mon Jan 21 01:40:01 2008 +0100 @@ -0,0 +1,98 @@ +/******************************************************************************* + * Copyright (c) 2000, 2007 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +module dwtexamples.controlexample.AlignableTab; + + + +import dwt.DWT; +import dwt.events.SelectionAdapter; +import dwt.events.SelectionEvent; +import dwt.events.SelectionListener; +import dwt.layout.GridData; +import dwt.layout.GridLayout; +import dwt.widgets.Button; +import dwt.widgets.Group; +import dwt.widgets.Widget; + +import dwtexamples.controlexample.Tab; +import dwtexamples.controlexample.ControlExample; + +/** + * AlignableTab is the abstract + * superclass of example controls that can be + * aligned. + */ +abstract class AlignableTab : Tab { + + /* Alignment Controls */ + Button leftButton, rightButton, centerButton; + + /* Alignment Group */ + Group alignmentGroup; + + /** + * Creates the Tab within a given instance of ControlExample. + */ + this(ControlExample instance) { + super(instance); + } + + /** + * Creates the "Other" group. + */ + void createOtherGroup () { + super.createOtherGroup (); + + /* Create the group */ + alignmentGroup = new Group (otherGroup, DWT.NONE); + alignmentGroup.setLayout (new GridLayout ()); + alignmentGroup.setLayoutData (new GridData(GridData.HORIZONTAL_ALIGN_FILL | + GridData.VERTICAL_ALIGN_FILL)); + alignmentGroup.setText (ControlExample.getResourceString("Alignment")); + + /* Create the controls */ + leftButton = new Button (alignmentGroup, DWT.RADIO); + leftButton.setText (ControlExample.getResourceString("Left")); + centerButton = new Button (alignmentGroup, DWT.RADIO); + centerButton.setText(ControlExample.getResourceString("Center")); + rightButton = new Button (alignmentGroup, DWT.RADIO); + rightButton.setText (ControlExample.getResourceString("Right")); + + /* Add the listeners */ + SelectionListener selectionListener = new class() SelectionAdapter { + public void widgetSelected(SelectionEvent event) { + if (!(cast(Button) event.widget).getSelection ()) return; + setExampleWidgetAlignment (); + } + }; + leftButton.addSelectionListener (selectionListener); + centerButton.addSelectionListener (selectionListener); + rightButton.addSelectionListener (selectionListener); + } + + /** + * Sets the alignment of the "Example" widgets. + */ + abstract void setExampleWidgetAlignment (); + + /** + * Sets the state of the "Example" widgets. + */ + void setExampleWidgetState () { + super.setExampleWidgetState (); + Widget [] widgets = getExampleWidgets (); + if (widgets.length !is 0) { + leftButton.setSelection ((widgets [0].getStyle () & DWT.LEFT) !is 0); + centerButton.setSelection ((widgets [0].getStyle () & DWT.CENTER) !is 0); + rightButton.setSelection ((widgets [0].getStyle () & DWT.RIGHT) !is 0); + } + } +} diff -r e49a0f04c689 -r e32a6d7506c9 dwtexamples/controlexample/ButtonTab.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dwtexamples/controlexample/ButtonTab.d Mon Jan 21 01:40:01 2008 +0100 @@ -0,0 +1,242 @@ +/******************************************************************************* + * Copyright (c) 2000, 2007 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +module dwtexamples.controlexample.ButtonTab; + + + +import dwt.DWT; +import dwt.events.SelectionAdapter; +import dwt.events.SelectionEvent; +import dwt.events.SelectionListener; +import dwt.layout.GridData; +import dwt.layout.GridLayout; +import dwt.widgets.Button; +import dwt.widgets.Group; +import dwt.widgets.Widget; + +import dwtexamples.controlexample.AlignableTab; +import dwtexamples.controlexample.ControlExample; + +/** + * ButtonTab is the class that + * demonstrates DWT buttons. + */ +class ButtonTab : AlignableTab { + + /* Example widgets and groups that contain them */ + Button button1, button2, button3, button4, button5, button6, button7, button8, button9; + Group textButtonGroup, imageButtonGroup, imagetextButtonGroup; + + /* Alignment widgets added to the "Control" group */ + Button upButton, downButton; + + /* Style widgets added to the "Style" group */ + Button pushButton, checkButton, radioButton, toggleButton, arrowButton, flatButton; + + /** + * Creates the Tab within a given instance of ControlExample. + */ + this(ControlExample instance) { + super(instance); + } + + /** + * Creates the "Control" group. + */ + void createControlGroup () { + super.createControlGroup (); + + /* Create the controls */ + upButton = new Button (alignmentGroup, DWT.RADIO); + upButton.setText (ControlExample.getResourceString("Up")); + downButton = new Button (alignmentGroup, DWT.RADIO); + downButton.setText (ControlExample.getResourceString("Down")); + + /* Add the listeners */ + SelectionListener selectionListener = new class() SelectionAdapter { + public void widgetSelected(SelectionEvent event) { + if (!(cast(Button) event.widget).getSelection()) return; + setExampleWidgetAlignment (); + } + }; + upButton.addSelectionListener(selectionListener); + downButton.addSelectionListener(selectionListener); + } + + /** + * Creates the "Example" group. + */ + void createExampleGroup () { + super.createExampleGroup (); + + /* Create a group for text buttons */ + textButtonGroup = new Group(exampleGroup, DWT.NONE); + GridLayout gridLayout = new GridLayout (); + textButtonGroup.setLayout(gridLayout); + gridLayout.numColumns = 3; + textButtonGroup.setLayoutData (new GridData (DWT.FILL, DWT.FILL, true, true)); + textButtonGroup.setText (ControlExample.getResourceString("Text_Buttons")); + + /* Create a group for the image buttons */ + imageButtonGroup = new Group(exampleGroup, DWT.NONE); + gridLayout = new GridLayout(); + imageButtonGroup.setLayout(gridLayout); + gridLayout.numColumns = 3; + imageButtonGroup.setLayoutData (new GridData (DWT.FILL, DWT.FILL, true, true)); + imageButtonGroup.setText (ControlExample.getResourceString("Image_Buttons")); + + /* Create a group for the image and text buttons */ + imagetextButtonGroup = new Group(exampleGroup, DWT.NONE); + gridLayout = new GridLayout(); + imagetextButtonGroup.setLayout(gridLayout); + gridLayout.numColumns = 3; + imagetextButtonGroup.setLayoutData (new GridData (DWT.FILL, DWT.FILL, true, true)); + imagetextButtonGroup.setText (ControlExample.getResourceString("Image_Text_Buttons")); + } + + /** + * Creates the "Example" widgets. + */ + void createExampleWidgets () { + + /* Compute the widget style */ + int style = getDefaultStyle(); + if (pushButton.getSelection()) style |= DWT.PUSH; + if (checkButton.getSelection()) style |= DWT.CHECK; + if (radioButton.getSelection()) style |= DWT.RADIO; + if (toggleButton.getSelection()) style |= DWT.TOGGLE; + if (flatButton.getSelection()) style |= DWT.FLAT; + if (borderButton.getSelection()) style |= DWT.BORDER; + if (leftButton.getSelection()) style |= DWT.LEFT; + if (rightButton.getSelection()) style |= DWT.RIGHT; + if (arrowButton.getSelection()) { + style |= DWT.ARROW; + if (upButton.getSelection()) style |= DWT.UP; + if (downButton.getSelection()) style |= DWT.DOWN; + } else { + if (centerButton.getSelection()) style |= DWT.CENTER; + } + + /* Create the example widgets */ + button1 = new Button(textButtonGroup, style); + button1.setText(ControlExample.getResourceString("One")); + button2 = new Button(textButtonGroup, style); + button2.setText(ControlExample.getResourceString("Two")); + button3 = new Button(textButtonGroup, style); + button3.setText(ControlExample.getResourceString("Three")); + button4 = new Button(imageButtonGroup, style); + button4.setImage(instance.images[ControlExample.ciClosedFolder]); + button5 = new Button(imageButtonGroup, style); + button5.setImage(instance.images[ControlExample.ciOpenFolder]); + button6 = new Button(imageButtonGroup, style); + button6.setImage(instance.images[ControlExample.ciTarget]); + button7 = new Button(imagetextButtonGroup, style); + button7.setText(ControlExample.getResourceString("One")); + button7.setImage(instance.images[ControlExample.ciClosedFolder]); + button8 = new Button(imagetextButtonGroup, style); + button8.setText(ControlExample.getResourceString("Two")); + button8.setImage(instance.images[ControlExample.ciOpenFolder]); + button9 = new Button(imagetextButtonGroup, style); + button9.setText(ControlExample.getResourceString("Three")); + button9.setImage(instance.images[ControlExample.ciTarget]); + } + + /** + * Creates the "Style" group. + */ + void createStyleGroup() { + super.createStyleGroup (); + + /* Create the extra widgets */ + pushButton = new Button (styleGroup, DWT.RADIO); + pushButton.setText("DWT.PUSH"); + checkButton = new Button (styleGroup, DWT.RADIO); + checkButton.setText ("DWT.CHECK"); + radioButton = new Button (styleGroup, DWT.RADIO); + radioButton.setText ("DWT.RADIO"); + toggleButton = new Button (styleGroup, DWT.RADIO); + toggleButton.setText ("DWT.TOGGLE"); + arrowButton = new Button (styleGroup, DWT.RADIO); + arrowButton.setText ("DWT.ARROW"); + flatButton = new Button (styleGroup, DWT.CHECK); + flatButton.setText ("DWT.FLAT"); + borderButton = new Button (styleGroup, DWT.CHECK); + borderButton.setText ("DWT.BORDER"); + } + + /** + * Gets the "Example" widget children. + */ + Widget [] getExampleWidgets () { + return [ cast(Widget) button1, button2, button3, button4, button5, button6, button7, button8, button9 ]; + } + + /** + * 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). + */ + char[][] getMethodNames() { + return [ cast(char[])"Selection", "Text", "ToolTipText" ]; + } + + /** + * Gets the text for the tab folder item. + */ + char[] getTabText () { + return "Button"; + } + + /** + * Sets the alignment of the "Example" widgets. + */ + void setExampleWidgetAlignment () { + int alignment = 0; + if (leftButton.getSelection ()) alignment = DWT.LEFT; + if (centerButton.getSelection ()) alignment = DWT.CENTER; + if (rightButton.getSelection ()) alignment = DWT.RIGHT; + if (upButton.getSelection ()) alignment = DWT.UP; + if (downButton.getSelection ()) alignment = DWT.DOWN; + button1.setAlignment (alignment); + button2.setAlignment (alignment); + button3.setAlignment (alignment); + button4.setAlignment (alignment); + button5.setAlignment (alignment); + button6.setAlignment (alignment); + button7.setAlignment (alignment); + button8.setAlignment (alignment); + button9.setAlignment (alignment); + } + + /** + * Sets the state of the "Example" widgets. + */ + void setExampleWidgetState () { + super.setExampleWidgetState (); + if (arrowButton.getSelection ()) { + upButton.setEnabled (true); + centerButton.setEnabled (false); + downButton.setEnabled (true); + } else { + upButton.setEnabled (false); + centerButton.setEnabled (true); + downButton.setEnabled (false); + } + upButton.setSelection ((button1.getStyle () & DWT.UP) !is 0); + downButton.setSelection ((button1.getStyle () & DWT.DOWN) !is 0); + pushButton.setSelection ((button1.getStyle () & DWT.PUSH) !is 0); + checkButton.setSelection ((button1.getStyle () & DWT.CHECK) !is 0); + radioButton.setSelection ((button1.getStyle () & DWT.RADIO) !is 0); + toggleButton.setSelection ((button1.getStyle () & DWT.TOGGLE) !is 0); + arrowButton.setSelection ((button1.getStyle () & DWT.ARROW) !is 0); + flatButton.setSelection ((button1.getStyle () & DWT.FLAT) !is 0); + borderButton.setSelection ((button1.getStyle () & DWT.BORDER) !is 0); + } +} diff -r e49a0f04c689 -r e32a6d7506c9 dwtexamples/controlexample/CComboTab.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dwtexamples/controlexample/CComboTab.d Mon Jan 21 01:40:01 2008 +0100 @@ -0,0 +1,127 @@ +/******************************************************************************* + * Copyright (c) 2000, 2007 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +module dwtexamples.controlexample.CComboTab; + + + +import dwt.DWT; +import dwt.custom.CCombo; +import dwt.layout.GridData; +import dwt.layout.GridLayout; +import dwt.widgets.Button; +import dwt.widgets.Group; +import dwt.widgets.Widget; + +class CComboTab : Tab { + + /* Example widgets and groups that contain them */ + CCombo combo1; + Group comboGroup; + + /* Style widgets added to the "Style" group */ + Button flatButton, readOnlyButton; + + static String [] ListData = {ControlExample.getResourceString("ListData1_0"), + ControlExample.getResourceString("ListData1_1"), + ControlExample.getResourceString("ListData1_2"), + ControlExample.getResourceString("ListData1_3"), + ControlExample.getResourceString("ListData1_4"), + ControlExample.getResourceString("ListData1_5"), + ControlExample.getResourceString("ListData1_6"), + ControlExample.getResourceString("ListData1_7"), + ControlExample.getResourceString("ListData1_8")}; + + /** + * Creates the Tab within a given instance of ControlExample. + */ + CComboTab(ControlExample instance) { + super(instance); + } + + /** + * Creates the "Example" group. + */ + void createExampleGroup () { + super.createExampleGroup (); + + /* Create a group for the combo box */ + comboGroup = new Group (exampleGroup, DWT.NONE); + comboGroup.setLayout (new GridLayout ()); + comboGroup.setLayoutData (new GridData (DWT.FILL, DWT.FILL, true, true)); + comboGroup.setText (ControlExample.getResourceString("Custom_Combo")); + } + + /** + * Creates the "Example" widgets. + */ + void createExampleWidgets () { + + /* Compute the widget style */ + int style = getDefaultStyle(); + if (flatButton.getSelection ()) style |= DWT.FLAT; + if (readOnlyButton.getSelection ()) style |= DWT.READ_ONLY; + if (borderButton.getSelection ()) style |= DWT.BORDER; + + /* Create the example widgets */ + combo1 = new CCombo (comboGroup, style); + combo1.setItems (ListData); + if (ListData.length >= 3) { + combo1.setText(ListData [2]); + } + } + + /** + * Creates the "Style" group. + */ + void createStyleGroup () { + super.createStyleGroup (); + + /* Create the extra widgets */ + readOnlyButton = new Button (styleGroup, DWT.CHECK); + readOnlyButton.setText ("DWT.READ_ONLY"); + borderButton = new Button (styleGroup, DWT.CHECK); + borderButton.setText ("DWT.BORDER"); + flatButton = new Button (styleGroup, DWT.CHECK); + flatButton.setText ("DWT.FLAT"); + } + + /** + * Gets the "Example" widget children. + */ + Widget [] getExampleWidgets () { + return new Widget [] {combo1}; + } + + /** + * 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[] {"Editable", "Items", "Selection", "Text", "TextLimit", "ToolTipText", "VisibleItemCount"}; + } + + /** + * Gets the text for the tab folder item. + */ + String getTabText () { + return "CCombo"; + } + + /** + * Sets the state of the "Example" widgets. + */ + void setExampleWidgetState () { + super.setExampleWidgetState (); + flatButton.setSelection ((combo1.getStyle () & DWT.FLAT) !is 0); + readOnlyButton.setSelection ((combo1.getStyle () & DWT.READ_ONLY) !is 0); + borderButton.setSelection ((combo1.getStyle () & DWT.BORDER) !is 0); + } +} diff -r e49a0f04c689 -r e32a6d7506c9 dwtexamples/controlexample/CLabelTab.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dwtexamples/controlexample/CLabelTab.d Mon Jan 21 01:40:01 2008 +0100 @@ -0,0 +1,139 @@ +/******************************************************************************* + * Copyright (c) 2000, 2007 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +module dwtexamples.controlexample.CLabelTab; + + + +import dwt.DWT; +import dwt.custom.CLabel; +import dwt.layout.GridData; +import dwt.layout.GridLayout; +import dwt.widgets.Button; +import dwt.widgets.Group; +import dwt.widgets.Widget; + +class CLabelTab : AlignableTab { + /* Example widgets and groups that contain them */ + CLabel label1, label2, label3; + Group textLabelGroup; + + /* Style widgets added to the "Style" group */ + Button shadowInButton, shadowOutButton, shadowNoneButton; + + /** + * Creates the Tab within a given instance of ControlExample. + */ + CLabelTab(ControlExample instance) { + super(instance); + } + + /** + * Creates the "Example" group. + */ + void createExampleGroup () { + super.createExampleGroup (); + + /* Create a group for the text labels */ + textLabelGroup = new Group(exampleGroup, DWT.NONE); + GridLayout gridLayout = new GridLayout (); + textLabelGroup.setLayout (gridLayout); + gridLayout.numColumns = 3; + textLabelGroup.setLayoutData (new GridData (DWT.FILL, DWT.FILL, true, true)); + textLabelGroup.setText (ControlExample.getResourceString("Custom_Labels")); + } + + /** + * Creates the "Example" widgets. + */ + void createExampleWidgets () { + + /* Compute the widget style */ + int style = getDefaultStyle(); + if (shadowInButton.getSelection ()) style |= DWT.SHADOW_IN; + if (shadowNoneButton.getSelection ()) style |= DWT.SHADOW_NONE; + if (shadowOutButton.getSelection ()) style |= DWT.SHADOW_OUT; + if (leftButton.getSelection ()) style |= DWT.LEFT; + if (centerButton.getSelection ()) style |= DWT.CENTER; + if (rightButton.getSelection ()) style |= DWT.RIGHT; + + /* Create the example widgets */ + label1 = new CLabel (textLabelGroup, style); + label1.setText(ControlExample.getResourceString("One")); + label1.setImage (instance.images[ControlExample.ciClosedFolder]); + label2 = new CLabel (textLabelGroup, style); + label2.setImage (instance.images[ControlExample.ciTarget]); + label3 = new CLabel (textLabelGroup, style); + label3.setText(ControlExample.getResourceString("Example_string") + "\n" + ControlExample.getResourceString("One_Two_Three")); + } + + /** + * Creates the "Style" group. + */ + void createStyleGroup() { + super.createStyleGroup (); + + /* Create the extra widgets */ + shadowNoneButton = new Button (styleGroup, DWT.RADIO); + shadowNoneButton.setText ("DWT.SHADOW_NONE"); + shadowInButton = new Button (styleGroup, DWT.RADIO); + shadowInButton.setText ("DWT.SHADOW_IN"); + shadowOutButton = new Button (styleGroup, DWT.RADIO); + shadowOutButton.setText ("DWT.SHADOW_OUT"); + } + + /** + * Gets the "Example" widget children. + */ + Widget [] getExampleWidgets () { + return new Widget [] {label1, label2, label3}; + } + + /** + * 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[] {"Text", "ToolTipText"}; + } + + /** + * Gets the text for the tab folder item. + */ + String getTabText () { + return "CLabel"; + } + + /** + * Sets the alignment of the "Example" widgets. + */ + void setExampleWidgetAlignment () { + int alignment = 0; + if (leftButton.getSelection ()) alignment = DWT.LEFT; + if (centerButton.getSelection ()) alignment = DWT.CENTER; + if (rightButton.getSelection ()) alignment = DWT.RIGHT; + label1.setAlignment (alignment); + label2.setAlignment (alignment); + label3.setAlignment (alignment); + } + + /** + * Sets the state of the "Example" widgets. + */ + void setExampleWidgetState () { + super.setExampleWidgetState (); + leftButton.setSelection ((label1.getStyle () & DWT.LEFT) !is 0); + centerButton.setSelection ((label1.getStyle () & DWT.CENTER) !is 0); + rightButton.setSelection ((label1.getStyle () & DWT.RIGHT) !is 0); + shadowInButton.setSelection ((label1.getStyle () & DWT.SHADOW_IN) !is 0); + shadowOutButton.setSelection ((label1.getStyle () & DWT.SHADOW_OUT) !is 0); + shadowNoneButton.setSelection ((label1.getStyle () & (DWT.SHADOW_IN | DWT.SHADOW_OUT)) is 0); + } +} diff -r e49a0f04c689 -r e32a6d7506c9 dwtexamples/controlexample/CTabFolderTab.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dwtexamples/controlexample/CTabFolderTab.d Mon Jan 21 01:40:01 2008 +0100 @@ -0,0 +1,465 @@ +/******************************************************************************* + * Copyright (c) 2000, 2007 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +module dwtexamples.controlexample.CTabFolderTab; + + + +import dwt.DWT; +import dwt.custom.CTabFolder; +import dwt.custom.CTabFolder2Adapter; +import dwt.custom.CTabFolderEvent; +import dwt.custom.CTabItem; +import dwt.events.DisposeEvent; +import dwt.events.DisposeListener; +import dwt.events.SelectionAdapter; +import dwt.events.SelectionEvent; +import dwt.graphics.Color; +import dwt.graphics.Font; +import dwt.graphics.FontData; +import dwt.graphics.Image; +import dwt.graphics.RGB; +import dwt.layout.GridData; +import dwt.layout.GridLayout; +import dwt.widgets.Button; +import dwt.widgets.Event; +import dwt.widgets.Group; +import dwt.widgets.Item; +import dwt.widgets.Listener; +import dwt.widgets.TableItem; +import dwt.widgets.Text; +import dwt.widgets.Widget; + +class CTabFolderTab : Tab { + int lastSelectedTab = 0; + + /* Example widgets and groups that contain them */ + CTabFolder tabFolder1; + Group tabFolderGroup, itemGroup; + + /* Style widgets added to the "Style" group */ + Button topButton, bottomButton, flatButton, closeButton; + + static String [] CTabItems1 = {ControlExample.getResourceString("CTabItem1_0"), + ControlExample.getResourceString("CTabItem1_1"), + ControlExample.getResourceString("CTabItem1_2")}; + + /* Controls and resources added to the "Fonts" group */ + static final int SELECTION_FOREGROUND_COLOR = 3; + static final int SELECTION_BACKGROUND_COLOR = 4; + static final int ITEM_FONT = 5; + Color selectionForegroundColor, selectionBackgroundColor; + Font itemFont; + + /* Other widgets added to the "Other" group */ + Button simpleTabButton, singleTabButton, imageButton, showMinButton, showMaxButton, unselectedCloseButton, unselectedImageButton; + + /** + * Creates the Tab within a given instance of ControlExample. + */ + this(ControlExample instance) { + super(instance); + } + + /** + * Creates the "Colors and Fonts" group. + */ + void createColorAndFontGroup () { + super.createColorAndFontGroup(); + + TableItem item = new TableItem(colorAndFontTable, DWT.None); + item.setText(ControlExample.getResourceString ("Selection_Foreground_Color")); + item = new TableItem(colorAndFontTable, DWT.None); + item.setText(ControlExample.getResourceString ("Selection_Background_Color")); + item = new TableItem(colorAndFontTable, DWT.None); + item.setText(ControlExample.getResourceString ("Item_Font")); + + shell.addDisposeListener(new DisposeListener() { + public void widgetDisposed(DisposeEvent event) { + if (selectionBackgroundColor !is null) selectionBackgroundColor.dispose(); + if (selectionForegroundColor !is null) selectionForegroundColor.dispose(); + if (itemFont !is null) itemFont.dispose(); + selectionBackgroundColor = null; + selectionForegroundColor = null; + itemFont = null; + } + }); + } + + void changeFontOrColor(int index) { + switch (index) { + case SELECTION_FOREGROUND_COLOR: { + Color oldColor = selectionForegroundColor; + if (oldColor is null) oldColor = tabFolder1.getSelectionForeground(); + colorDialog.setRGB(oldColor.getRGB()); + RGB rgb = colorDialog.open(); + if (rgb is null) return; + oldColor = selectionForegroundColor; + selectionForegroundColor = new Color (display, rgb); + setSelectionForeground (); + if (oldColor !is null) oldColor.dispose (); + } + break; + case SELECTION_BACKGROUND_COLOR: { + Color oldColor = selectionBackgroundColor; + if (oldColor is null) oldColor = tabFolder1.getSelectionBackground(); + colorDialog.setRGB(oldColor.getRGB()); + RGB rgb = colorDialog.open(); + if (rgb is null) return; + oldColor = selectionBackgroundColor; + selectionBackgroundColor = new Color (display, rgb); + setSelectionBackground (); + if (oldColor !is null) oldColor.dispose (); + } + break; + case ITEM_FONT: { + Font oldFont = itemFont; + if (oldFont is null) oldFont = tabFolder1.getItem (0).getFont (); + fontDialog.setFontList(oldFont.getFontData()); + FontData fontData = fontDialog.open (); + if (fontData is null) return; + oldFont = itemFont; + itemFont = new Font (display, fontData); + setItemFont (); + setExampleWidgetSize (); + if (oldFont !is null) oldFont.dispose (); + } + break; + default: + super.changeFontOrColor(index); + } + } + + /** + * Creates the "Other" group. + */ + void createOtherGroup () { + super.createOtherGroup (); + + /* Create display controls specific to this example */ + simpleTabButton = new Button (otherGroup, DWT.CHECK); + simpleTabButton.setText (ControlExample.getResourceString("Set_Simple_Tabs")); + simpleTabButton.setSelection(true); + simpleTabButton.addSelectionListener (new SelectionAdapter () { + public void widgetSelected (SelectionEvent event) { + setSimpleTabs(); + } + }); + + singleTabButton = new Button (otherGroup, DWT.CHECK); + singleTabButton.setText (ControlExample.getResourceString("Set_Single_Tabs")); + singleTabButton.setSelection(false); + singleTabButton.addSelectionListener (new SelectionAdapter () { + public void widgetSelected (SelectionEvent event) { + setSingleTabs(); + } + }); + + showMinButton = new Button (otherGroup, DWT.CHECK); + showMinButton.setText (ControlExample.getResourceString("Set_Min_Visible")); + showMinButton.setSelection(false); + showMinButton.addSelectionListener (new SelectionAdapter () { + public void widgetSelected (SelectionEvent event) { + setMinimizeVisible(); + } + }); + + showMaxButton = new Button (otherGroup, DWT.CHECK); + showMaxButton.setText (ControlExample.getResourceString("Set_Max_Visible")); + showMaxButton.setSelection(false); + showMaxButton.addSelectionListener (new SelectionAdapter () { + public void widgetSelected (SelectionEvent event) { + setMaximizeVisible(); + } + }); + + imageButton = new Button (otherGroup, DWT.CHECK); + imageButton.setText (ControlExample.getResourceString("Set_Image")); + imageButton.addSelectionListener (new SelectionAdapter () { + public void widgetSelected (SelectionEvent event) { + setImages(); + } + }); + + unselectedImageButton = new Button (otherGroup, DWT.CHECK); + unselectedImageButton.setText (ControlExample.getResourceString("Set_Unselected_Image_Visible")); + unselectedImageButton.setSelection(true); + unselectedImageButton.addSelectionListener (new SelectionAdapter () { + public void widgetSelected (SelectionEvent event) { + setUnselectedImageVisible(); + } + }); + unselectedCloseButton = new Button (otherGroup, DWT.CHECK); + unselectedCloseButton.setText (ControlExample.getResourceString("Set_Unselected_Close_Visible")); + unselectedCloseButton.setSelection(true); + unselectedCloseButton.addSelectionListener (new SelectionAdapter () { + public void widgetSelected (SelectionEvent event) { + setUnselectedCloseVisible(); + } + }); + } + + /** + * Creates the "Example" group. + */ + void createExampleGroup () { + super.createExampleGroup (); + + /* Create a group for the CTabFolder */ + tabFolderGroup = new Group (exampleGroup, DWT.NONE); + tabFolderGroup.setLayout (new GridLayout ()); + tabFolderGroup.setLayoutData (new GridData (DWT.FILL, DWT.FILL, true, true)); + tabFolderGroup.setText ("CTabFolder"); + } + + /** + * Creates the "Example" widgets. + */ + void createExampleWidgets () { + + /* Compute the widget style */ + int style = getDefaultStyle(); + if (topButton.getSelection ()) style |= DWT.TOP; + if (bottomButton.getSelection ()) style |= DWT.BOTTOM; + if (borderButton.getSelection ()) style |= DWT.BORDER; + if (flatButton.getSelection ()) style |= DWT.FLAT; + if (closeButton.getSelection ()) style |= DWT.CLOSE; + + /* Create the example widgets */ + tabFolder1 = new CTabFolder (tabFolderGroup, style); + for (int i = 0; i < CTabItems1.length; i++) { + CTabItem item = new CTabItem(tabFolder1, DWT.NONE); + item.setText(CTabItems1[i]); + Text text = new Text(tabFolder1, DWT.READ_ONLY); + text.setText(ControlExample.getResourceString("CTabItem_content") + ": " + i); + item.setControl(text); + } + tabFolder1.addListener(DWT.Selection, new Listener() { + public void handleEvent(Event event) { + lastSelectedTab = tabFolder1.getSelectionIndex(); + } + }); + tabFolder1.setSelection(lastSelectedTab); + } + + /** + * Creates the "Style" group. + */ + void createStyleGroup() { + super.createStyleGroup (); + + /* Create the extra widgets */ + topButton = new Button (styleGroup, DWT.RADIO); + topButton.setText ("DWT.TOP"); + topButton.setSelection(true); + bottomButton = new Button (styleGroup, DWT.RADIO); + bottomButton.setText ("DWT.BOTTOM"); + borderButton = new Button (styleGroup, DWT.CHECK); + borderButton.setText ("DWT.BORDER"); + flatButton = new Button (styleGroup, DWT.CHECK); + flatButton.setText ("DWT.FLAT"); + closeButton = new Button (styleGroup, DWT.CHECK); + closeButton.setText ("DWT.CLOSE"); + } + + /** + * Gets the list of custom event names. + * + * @return an array containing custom event names + */ + String [] getCustomEventNames () { + return new String [] {"CTabFolderEvent"}; + } + + /** + * Gets the "Example" widget children's items, if any. + * + * @return an array containing the example widget children's items + */ + Item [] getExampleWidgetItems () { + return tabFolder1.getItems(); + } + + /** + * Gets the "Example" widget children. + */ + Widget [] getExampleWidgets () { + return new Widget [] {tabFolder1}; + } + + /** + * Gets the text for the tab folder item. + */ + String getTabText () { + return "CTabFolder"; + } + + /** + * Hooks the custom listener specified by eventName. + */ + void hookCustomListener (final String eventName) { + if (eventName is "CTabFolderEvent") { + tabFolder1.addCTabFolder2Listener (new CTabFolder2Adapter () { + public void close (CTabFolderEvent event) { + log (eventName, event); + } + }); + } + } + + /** + * Sets the foreground color, background color, and font + * of the "Example" widgets to their default settings. + * Also sets foreground and background color of the Node 1 + * TreeItems to default settings. + */ + void resetColorsAndFonts () { + super.resetColorsAndFonts (); + Color oldColor = selectionForegroundColor; + selectionForegroundColor = null; + setSelectionForeground (); + if (oldColor !is null) oldColor.dispose(); + oldColor = selectionBackgroundColor; + selectionBackgroundColor = null; + setSelectionBackground (); + if (oldColor !is null) oldColor.dispose(); + Font oldFont = itemFont; + itemFont = null; + setItemFont (); + if (oldFont !is null) oldFont.dispose(); + } + + /** + * Sets the state of the "Example" widgets. + */ + void setExampleWidgetState () { + super.setExampleWidgetState(); + setSimpleTabs(); + setSingleTabs(); + setImages(); + setMinimizeVisible(); + setMaximizeVisible(); + setUnselectedCloseVisible(); + setUnselectedImageVisible(); + setSelectionBackground (); + setSelectionForeground (); + setItemFont (); + setExampleWidgetSize(); + } + + /** + * Sets the shape that the CTabFolder will use to render itself. + */ + void setSimpleTabs () { + tabFolder1.setSimple (simpleTabButton.getSelection ()); + setExampleWidgetSize(); + } + + /** + * Sets the number of tabs that the CTabFolder should display. + */ + void setSingleTabs () { + tabFolder1.setSingle (singleTabButton.getSelection ()); + setExampleWidgetSize(); + } + /** + * Sets an image into each item of the "Example" widgets. + */ + void setImages () { + bool setImage = imageButton.getSelection (); + CTabItem items[] = tabFolder1.getItems (); + for (int i = 0; i < items.length; i++) { + if (setImage) { + items[i].setImage (instance.images[ControlExample.ciClosedFolder]); + } else { + items[i].setImage (null); + } + } + setExampleWidgetSize (); + } + /** + * Sets the visibility of the minimize button + */ + void setMinimizeVisible () { + tabFolder1.setMinimizeVisible(showMinButton.getSelection ()); + setExampleWidgetSize(); + } + /** + * Sets the visibility of the maximize button + */ + void setMaximizeVisible () { + tabFolder1.setMaximizeVisible(showMaxButton.getSelection ()); + setExampleWidgetSize(); + } + /** + * Sets the visibility of the close button on unselected tabs + */ + void setUnselectedCloseVisible () { + tabFolder1.setUnselectedCloseVisible(unselectedCloseButton.getSelection ()); + setExampleWidgetSize(); + } + /** + * Sets the visibility of the image on unselected tabs + */ + void setUnselectedImageVisible () { + tabFolder1.setUnselectedImageVisible(unselectedImageButton.getSelection ()); + setExampleWidgetSize(); + } + /** + * Sets the background color of CTabItem 0. + */ + void setSelectionBackground () { + if (!instance.startup) { + tabFolder1.setSelectionBackground(selectionBackgroundColor); + } + // Set the selection background item's image to match the background color of the selection. + Color color = selectionBackgroundColor; + if (color is null) color = tabFolder1.getSelectionBackground (); + TableItem item = colorAndFontTable.getItem(SELECTION_BACKGROUND_COLOR); + Image oldImage = item.getImage(); + if (oldImage !is null) oldImage.dispose(); + item.setImage (colorImage(color)); + } + + /** + * Sets the foreground color of CTabItem 0. + */ + void setSelectionForeground () { + if (!instance.startup) { + tabFolder1.setSelectionForeground(selectionForegroundColor); + } + // Set the selection foreground item's image to match the foreground color of the selection. + Color color = selectionForegroundColor; + if (color is null) color = tabFolder1.getSelectionForeground (); + TableItem item = colorAndFontTable.getItem(SELECTION_FOREGROUND_COLOR); + Image oldImage = item.getImage(); + if (oldImage !is null) oldImage.dispose(); + item.setImage (colorImage(color)); + } + + /** + * Sets the font of CTabItem 0. + */ + void setItemFont () { + if (!instance.startup) { + tabFolder1.getItem (0).setFont (itemFont); + setExampleWidgetSize(); + } + /* Set the font item's image to match the font of the item. */ + Font ft = itemFont; + if (ft is null) ft = tabFolder1.getItem (0).getFont (); + TableItem item = colorAndFontTable.getItem(ITEM_FONT); + Image oldImage = item.getImage(); + if (oldImage !is null) oldImage.dispose(); + item.setImage (fontImage(ft)); + item.setFont(ft); + colorAndFontTable.layout (); + } +} diff -r e49a0f04c689 -r e32a6d7506c9 dwtexamples/controlexample/CanvasTab.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dwtexamples/controlexample/CanvasTab.d Mon Jan 21 01:40:01 2008 +0100 @@ -0,0 +1,330 @@ +/******************************************************************************* + * Copyright (c) 2000, 2007 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +module dwtexamples.controlexample.CanvasTab; + + + +import dwt.DWT; +import dwt.events.ControlAdapter; +import dwt.events.ControlEvent; +import dwt.events.PaintEvent; +import dwt.events.PaintListener; +import dwt.events.SelectionAdapter; +import dwt.events.SelectionEvent; +import dwt.graphics.Color; +import dwt.graphics.Font; +import dwt.graphics.GC; +import dwt.graphics.Point; +import dwt.graphics.Rectangle; +import dwt.layout.GridData; +import dwt.layout.GridLayout; +import dwt.widgets.Button; +import dwt.widgets.Canvas; +import dwt.widgets.Caret; +import dwt.widgets.Composite; +import dwt.widgets.Group; +import dwt.widgets.ScrollBar; +import dwt.widgets.TabFolder; +import dwt.widgets.Widget; + +class CanvasTab : Tab { + static final int colors [] = { + DWT.COLOR_RED, + DWT.COLOR_GREEN, + DWT.COLOR_BLUE, + DWT.COLOR_MAGENTA, + DWT.COLOR_YELLOW, + DWT.COLOR_CYAN, + DWT.COLOR_DARK_RED, + DWT.COLOR_DARK_GREEN, + DWT.COLOR_DARK_BLUE, + DWT.COLOR_DARK_MAGENTA, + DWT.COLOR_DARK_YELLOW, + DWT.COLOR_DARK_CYAN + }; + static final String canvasString = "Canvas"; //$NON-NLS-1$ + + /* Example widgets and groups that contain them */ + Canvas canvas; + Group canvasGroup; + + /* Style widgets added to the "Style" group */ + Button horizontalButton, verticalButton, noBackgroundButton, noFocusButton, + noMergePaintsButton, noRedrawResizeButton, doubleBufferedButton; + + /* Other widgets added to the "Other" group */ + Button caretButton, fillDamageButton; + + int paintCount; + int cx, cy; + int maxX, maxY; + + /** + * Creates the Tab within a given instance of ControlExample. + */ + CanvasTab(ControlExample instance) { + super(instance); + } + + /** + * Creates the "Other" group. + */ + void createOtherGroup () { + super.createOtherGroup (); + + /* Create display controls specific to this example */ + caretButton = new Button (otherGroup, DWT.CHECK); + caretButton.setText (ControlExample.getResourceString("Caret")); + fillDamageButton = new Button (otherGroup, DWT.CHECK); + fillDamageButton.setText (ControlExample.getResourceString("FillDamage")); + + /* Add the listeners */ + caretButton.addSelectionListener (new SelectionAdapter () { + public void widgetSelected (SelectionEvent event) { + setCaret (); + } + }); + } + + /** + * Creates the "Example" group. + */ + void createExampleGroup () { + super.createExampleGroup (); + + /* Create a group for the canvas widget */ + canvasGroup = new Group (exampleGroup, DWT.NONE); + canvasGroup.setLayout (new GridLayout ()); + canvasGroup.setLayoutData (new GridData (DWT.FILL, DWT.FILL, true, true)); + canvasGroup.setText ("Canvas"); + } + + /** + * Creates the "Example" widgets. + */ + void createExampleWidgets () { + + /* Compute the widget style */ + int style = getDefaultStyle(); + if (horizontalButton.getSelection ()) style |= DWT.H_SCROLL; + if (verticalButton.getSelection ()) style |= DWT.V_SCROLL; + if (borderButton.getSelection ()) style |= DWT.BORDER; + if (noBackgroundButton.getSelection ()) style |= DWT.NO_BACKGROUND; + if (noFocusButton.getSelection ()) style |= DWT.NO_FOCUS; + if (noMergePaintsButton.getSelection ()) style |= DWT.NO_MERGE_PAINTS; + if (noRedrawResizeButton.getSelection ()) style |= DWT.NO_REDRAW_RESIZE; + if (doubleBufferedButton.getSelection ()) style |= DWT.DOUBLE_BUFFERED; + + /* Create the example widgets */ + paintCount = 0; cx = 0; cy = 0; + canvas = new Canvas (canvasGroup, style); + canvas.addPaintListener(new PaintListener () { + public void paintControl(PaintEvent e) { + paintCount++; + GC gc = e.gc; + if (fillDamageButton.getSelection ()) { + Color color = e.display.getSystemColor (colors [paintCount % colors.length]); + gc.setBackground(color); + gc.fillRectangle(e.x, e.y, e.width, e.height); + } + Point size = canvas.getSize (); + gc.drawArc(cx + 1, cy + 1, size.x - 2, size.y - 2, 0, 360); + gc.drawRectangle(cx + (size.x - 10) / 2, cy + (size.y - 10) / 2, 10, 10); + Point extent = gc.textExtent(canvasString); + gc.drawString(canvasString, cx + (size.x - extent.x) / 2, cy - extent.y + (size.y - 10) / 2, true); + } + }); + canvas.addControlListener(new ControlAdapter() { + public void controlResized(ControlEvent event) { + Point size = canvas.getSize (); + maxX = size.x * 3 / 2; maxY = size.y * 3 / 2; + resizeScrollBars (); + } + }); + ScrollBar bar = canvas.getHorizontalBar(); + if (bar !is null) { + hookListeners (bar); + bar.addSelectionListener(new SelectionAdapter() { + public void widgetSelected(SelectionEvent event) { + scrollHorizontal ((ScrollBar)event.widget); + } + }); + } + bar = canvas.getVerticalBar(); + if (bar !is null) { + hookListeners (bar); + bar.addSelectionListener(new SelectionAdapter() { + public void widgetSelected(SelectionEvent event) { + scrollVertical ((ScrollBar)event.widget); + } + }); + } + } + + /** + * Creates the "Style" group. + */ + void createStyleGroup() { + super.createStyleGroup(); + + /* Create the extra widgets */ + horizontalButton = new Button (styleGroup, DWT.CHECK); + horizontalButton.setText ("DWT.H_SCROLL"); + horizontalButton.setSelection(true); + verticalButton = new Button (styleGroup, DWT.CHECK); + verticalButton.setText ("DWT.V_SCROLL"); + verticalButton.setSelection(true); + borderButton = new Button (styleGroup, DWT.CHECK); + borderButton.setText ("DWT.BORDER"); + noBackgroundButton = new Button (styleGroup, DWT.CHECK); + noBackgroundButton.setText ("DWT.NO_BACKGROUND"); + noFocusButton = new Button (styleGroup, DWT.CHECK); + noFocusButton.setText ("DWT.NO_FOCUS"); + noMergePaintsButton = new Button (styleGroup, DWT.CHECK); + noMergePaintsButton.setText ("DWT.NO_MERGE_PAINTS"); + noRedrawResizeButton = new Button (styleGroup, DWT.CHECK); + noRedrawResizeButton.setText ("DWT.NO_REDRAW_RESIZE"); + doubleBufferedButton = new Button (styleGroup, DWT.CHECK); + doubleBufferedButton.setText ("DWT.DOUBLE_BUFFERED"); + } + + /** + * Creates the tab folder page. + * + * @param tabFolder org.eclipse.swt.widgets.TabFolder + * @return the new page for the tab folder + */ + Composite createTabFolderPage (TabFolder tabFolder) { + super.createTabFolderPage (tabFolder); + + /* + * Add a resize listener to the tabFolderPage so that + * if the user types into the example widget to change + * its preferred size, and then resizes the shell, we + * recalculate the preferred size correctly. + */ + tabFolderPage.addControlListener(new ControlAdapter() { + public void controlResized(ControlEvent e) { + setExampleWidgetSize (); + } + }); + + return tabFolderPage; + } + + /** + * Gets the "Example" widget children. + */ + Widget [] getExampleWidgets () { + return new Widget [] {canvas}; + } + + /** + * 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[] {"ToolTipText"}; + } + + /** + * Gets the text for the tab folder item. + */ + String getTabText () { + return "Canvas"; + } + + /** + * Resizes the maximum and thumb of both scrollbars. + */ + void resizeScrollBars () { + Rectangle clientArea = canvas.getClientArea(); + ScrollBar bar = canvas.getHorizontalBar(); + if (bar !is null) { + bar.setMaximum(maxX); + bar.setThumb(clientArea.width); + bar.setPageIncrement(clientArea.width); + } + bar = canvas.getVerticalBar(); + if (bar !is null) { + bar.setMaximum(maxY); + bar.setThumb(clientArea.height); + bar.setPageIncrement(clientArea.height); + } + } + + /** + * Scrolls the canvas horizontally. + * + * @param scrollBar + */ + void scrollHorizontal (ScrollBar scrollBar) { + Rectangle bounds = canvas.getClientArea(); + int x = -scrollBar.getSelection(); + if (x + maxX < bounds.width) { + x = bounds.width - maxX; + } + canvas.scroll(x, cy, cx, cy, maxX, maxY, false); + cx = x; + } + + /** + * Scrolls the canvas vertically. + * + * @param scrollBar + */ + void scrollVertical (ScrollBar scrollBar) { + Rectangle bounds = canvas.getClientArea(); + int y = -scrollBar.getSelection(); + if (y + maxY < bounds.height) { + y = bounds.height - maxY; + } + canvas.scroll(cx, y, cx, cy, maxX, maxY, false); + cy = y; + } + + /** + * Sets or clears the caret in the "Example" widget. + */ + void setCaret () { + Caret oldCaret = canvas.getCaret (); + if (caretButton.getSelection ()) { + Caret newCaret = new Caret(canvas, DWT.NONE); + Font font = canvas.getFont(); + newCaret.setFont(font); + GC gc = new GC(canvas); + gc.setFont(font); + newCaret.setBounds(1, 1, 1, gc.getFontMetrics().getHeight()); + gc.dispose(); + canvas.setCaret (newCaret); + canvas.setFocus(); + } else { + canvas.setCaret (null); + } + if (oldCaret !is null) oldCaret.dispose (); + } + + /** + * Sets the state of the "Example" widgets. + */ + void setExampleWidgetState () { + super.setExampleWidgetState (); + horizontalButton.setSelection ((canvas.getStyle () & DWT.H_SCROLL) !is 0); + verticalButton.setSelection ((canvas.getStyle () & DWT.V_SCROLL) !is 0); + borderButton.setSelection ((canvas.getStyle () & DWT.BORDER) !is 0); + noBackgroundButton.setSelection ((canvas.getStyle () & DWT.NO_BACKGROUND) !is 0); + noFocusButton.setSelection ((canvas.getStyle () & DWT.NO_FOCUS) !is 0); + noMergePaintsButton.setSelection ((canvas.getStyle () & DWT.NO_MERGE_PAINTS) !is 0); + noRedrawResizeButton.setSelection ((canvas.getStyle () & DWT.NO_REDRAW_RESIZE) !is 0); + doubleBufferedButton.setSelection ((canvas.getStyle () & DWT.DOUBLE_BUFFERED) !is 0); + if (!instance.startup) setCaret (); + } +} diff -r e49a0f04c689 -r e32a6d7506c9 dwtexamples/controlexample/ComboTab.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dwtexamples/controlexample/ComboTab.d Mon Jan 21 01:40:01 2008 +0100 @@ -0,0 +1,156 @@ +/******************************************************************************* + * Copyright (c) 2000, 2007 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package dwtexamples.controlexample; + + + +import dwt.DWT; +import dwt.events.ControlAdapter; +import dwt.events.ControlEvent; +import dwt.layout.GridData; +import dwt.layout.GridLayout; +import dwt.widgets.Button; +import dwt.widgets.Combo; +import dwt.widgets.Composite; +import dwt.widgets.Group; +import dwt.widgets.TabFolder; +import dwt.widgets.Widget; + +class ComboTab extends Tab { + + /* Example widgets and groups that contain them */ + Combo combo1; + Group comboGroup; + + /* Style widgets added to the "Style" group */ + Button dropDownButton, readOnlyButton, simpleButton; + + static String [] ListData = {ControlExample.getResourceString("ListData0_0"), + ControlExample.getResourceString("ListData0_1"), + ControlExample.getResourceString("ListData0_2"), + ControlExample.getResourceString("ListData0_3"), + ControlExample.getResourceString("ListData0_4"), + ControlExample.getResourceString("ListData0_5"), + ControlExample.getResourceString("ListData0_6"), + ControlExample.getResourceString("ListData0_7"), + ControlExample.getResourceString("ListData0_8")}; + + /** + * Creates the Tab within a given instance of ControlExample. + */ + ComboTab(ControlExample instance) { + super(instance); + } + + /** + * Creates the "Example" group. + */ + void createExampleGroup () { + super.createExampleGroup (); + + /* Create a group for the combo box */ + comboGroup = new Group (exampleGroup, DWT.NONE); + comboGroup.setLayout (new GridLayout ()); + comboGroup.setLayoutData (new GridData (DWT.FILL, DWT.FILL, true, true)); + comboGroup.setText ("Combo"); + } + + /** + * Creates the "Example" widgets. + */ + void createExampleWidgets () { + + /* Compute the widget style */ + int style = getDefaultStyle(); + if (dropDownButton.getSelection ()) style |= DWT.DROP_DOWN; + if (readOnlyButton.getSelection ()) style |= DWT.READ_ONLY; + if (simpleButton.getSelection ()) style |= DWT.SIMPLE; + + /* Create the example widgets */ + combo1 = new Combo (comboGroup, style); + combo1.setItems (ListData); + if (ListData.length >= 3) { + combo1.setText(ListData [2]); + } + } + + /** + * Creates the tab folder page. + * + * @param tabFolder org.eclipse.swt.widgets.TabFolder + * @return the new page for the tab folder + */ + Composite createTabFolderPage (TabFolder tabFolder) { + super.createTabFolderPage (tabFolder); + + /* + * Add a resize listener to the tabFolderPage so that + * if the user types into the example widget to change + * its preferred size, and then resizes the shell, we + * recalculate the preferred size correctly. + */ + tabFolderPage.addControlListener(new ControlAdapter() { + public void controlResized(ControlEvent e) { + setExampleWidgetSize (); + } + }); + + return tabFolderPage; + } + + /** + * Creates the "Style" group. + */ + void createStyleGroup () { + super.createStyleGroup (); + + /* Create the extra widgets */ + dropDownButton = new Button (styleGroup, DWT.RADIO); + dropDownButton.setText ("DWT.DROP_DOWN"); + simpleButton = new Button (styleGroup, DWT.RADIO); + simpleButton.setText("DWT.SIMPLE"); + readOnlyButton = new Button (styleGroup, DWT.CHECK); + readOnlyButton.setText ("DWT.READ_ONLY"); + } + + /** + * Gets the "Example" widget children. + */ + Widget [] getExampleWidgets () { + return new Widget [] {combo1}; + } + + /** + * 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[] {"Items", "Orientation", "Selection", "Text", "TextLimit", "ToolTipText", "VisibleItemCount"}; + } + + /** + * Gets the text for the tab folder item. + */ + String getTabText () { + return "Combo"; + } + + /** + * Sets the state of the "Example" widgets. + */ + void setExampleWidgetState () { + super.setExampleWidgetState (); + dropDownButton.setSelection ((combo1.getStyle () & DWT.DROP_DOWN) !is 0); + simpleButton.setSelection ((combo1.getStyle () & DWT.SIMPLE) !is 0); + readOnlyButton.setSelection ((combo1.getStyle () & DWT.READ_ONLY) !is 0); + readOnlyButton.setEnabled(!simpleButton.getSelection()); + } +} diff -r e49a0f04c689 -r e32a6d7506c9 dwtexamples/controlexample/ControlExample.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dwtexamples/controlexample/ControlExample.d Mon Jan 21 01:40:01 2008 +0100 @@ -0,0 +1,308 @@ +/******************************************************************************* + * Copyright (c) 2000, 2007 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +module dwtexamples.controlexample.ControlExample; + +pragma( msg, " === The ControlExample is work in progress ===" ); + + +/+ +import java.io.IOException; +import java.io.InputStream; +import java.text.MessageFormat; +import java.util.MissingResourceException; +import java.util.ResourceBundle; ++/ + +class MessageFormat { + char[] format( char[], ... ); +} + +import dwt.DWT; +import dwt.graphics.Image; +import dwt.graphics.ImageData; +import dwt.graphics.Point; +import dwt.graphics.Rectangle; +import dwt.layout.FillLayout; +import dwt.widgets.Composite; +import dwt.widgets.Display; +import dwt.widgets.Shell; +import dwt.widgets.TabFolder; +import dwt.widgets.TabItem; +import dwt.dwthelper.ResourceBundle; + + +import dwtexamples.controlexample.Tab; +import dwtexamples.controlexample.ButtonTab; +/+ +import dwtexamples.controlexample.CanvasTab; +import dwtexamples.controlexample.ComboTab; +import dwtexamples.controlexample.CoolBarTab; +import dwtexamples.controlexample.DateTimeTab; +import dwtexamples.controlexample.DialogTab; +import dwtexamples.controlexample.ExpandBarTab; +import dwtexamples.controlexample.GroupTab; +import dwtexamples.controlexample.LabelTab; +import dwtexamples.controlexample.LinkTab; +import dwtexamples.controlexample.ListTab; +import dwtexamples.controlexample.MenuTab; +import dwtexamples.controlexample.ProgressBarTab; +import dwtexamples.controlexample.SashTab; +import dwtexamples.controlexample.ScaleTab; ++/ +import dwtexamples.controlexample.ShellTab; +/+ +import dwtexamples.controlexample.SliderTab; +import dwtexamples.controlexample.SpinnerTab; +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; + +public class ControlExample { + private static ResourceBundle resourceBundle; + private ShellTab shellTab; + private TabFolder tabFolder; + private Tab [] tabs; + Image images[]; + + static const int ciClosedFolder = 0, ciOpenFolder = 1, ciTarget = 2, ciBackground = 3, ciParentBackground = 4; + static const char[][] imageLocations = [ cast(char[]) + "closedFolder.gif", //$NON-NLS-1$ + "openFolder.gif", //$NON-NLS-1$ + "target.gif", //$NON-NLS-1$ + "backgroundImage.png", //$NON-NLS-1$ + "parentBackgroundImage.png"]; //$NON-NLS-1$ + static const int[] imageTypes = [ + DWT.ICON, + DWT.ICON, + DWT.ICON, + DWT.BITMAP, + DWT.BITMAP]; + + bool startup = true; + + static this(){ + resourceBundle = ResourceBundle.getBundle("examples_control"); //$NON-NLS-1$ + } + + /** + * Creates an instance of a ControlExample embedded inside + * the supplied parent Composite. + * + * @param parent the container of the example + */ + public this(Composite parent) { + initResources(); + tabFolder = new TabFolder (parent, DWT.NONE); + tabs = createTabs(); + for (int i=0; i monitorArea.width && DWT.getPlatform().equals("carbon")) { + TabItem [] tabItems = instance.tabFolder.getItems(); + for (int i=0; i 0) { + if (vertical) { + size.y = bar.getItem(0).getBounds().height; + } else { + size.x = bar.getItem(0).getWidth(); + } + } + } + coolItem.setMinimumSize(size); + coolItem.setPreferredSize(coolSize); + coolItem.setSize(coolSize); + } + + /* If we have saved state, restore it */ + if (order !is null && order.length is coolBar.getItemCount()) { + coolBar.setItemLayout(order, wrapIndices, sizes); + } else { + coolBar.setWrapIndices(new int[] {1, 3}); + } + + /* Add a listener to resize the group box to match the coolbar */ + coolBar.addListener(DWT.Resize, new Listener() { + public void handleEvent(Event event) { + exampleGroup.layout(); + } + }); + } + + /** + * Creates the "Style" group. + */ + void createStyleGroup() { + super.createStyleGroup(); + + /* Create the extra widgets */ + horizontalButton = new Button (styleGroup, DWT.RADIO); + horizontalButton.setText ("DWT.HORIZONTAL"); + verticalButton = new Button (styleGroup, DWT.RADIO); + verticalButton.setText ("DWT.VERTICAL"); + borderButton = new Button (styleGroup, DWT.CHECK); + borderButton.setText ("DWT.BORDER"); + flatButton = new Button (styleGroup, DWT.CHECK); + flatButton.setText ("DWT.FLAT"); + Group itemGroup = new Group(styleGroup, DWT.NONE); + itemGroup.setLayout (new GridLayout ()); + itemGroup.setLayoutData (new GridData (GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_FILL)); + itemGroup.setText(ControlExample.getResourceString("Item_Styles")); + dropDownButton = new Button (itemGroup, DWT.CHECK); + dropDownButton.setText ("DWT.DROP_DOWN"); + } + + /** + * Disposes the "Example" widgets. + */ + void disposeExampleWidgets () { + /* store the state of the toolbar if applicable */ + if (coolBar !is null) { + sizes = coolBar.getItemSizes(); + wrapIndices = coolBar.getWrapIndices(); + order = coolBar.getItemOrder(); + } + super.disposeExampleWidgets(); + } + + /** + * Gets the "Example" widget children's items, if any. + * + * @return an array containing the example widget children's items + */ + Item [] getExampleWidgetItems () { + return coolBar.getItems(); + } + + /** + * Gets the "Example" widget children. + */ + Widget [] getExampleWidgets () { + return new Widget [] {coolBar}; + } + + /** + * 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[] {"ToolTipText"}; + } + + /** + * Gets the short text for the tab folder item. + */ + public String getShortTabText() { + return "CB"; + } + + /** + * Gets the text for the tab folder item. + */ + String getTabText () { + return "CoolBar"; + } + + /** + * Sets the state of the "Example" widgets. + */ + void setExampleWidgetState () { + super.setExampleWidgetState (); + horizontalButton.setSelection ((coolBar.getStyle () & DWT.HORIZONTAL) !is 0); + verticalButton.setSelection ((coolBar.getStyle () & DWT.VERTICAL) !is 0); + borderButton.setSelection ((coolBar.getStyle () & DWT.BORDER) !is 0); + flatButton.setSelection ((coolBar.getStyle () & DWT.FLAT) !is 0); + dropDownButton.setSelection ((coolBar.getItem(0).getStyle () & DWT.DROP_DOWN) !is 0); + lockedButton.setSelection(coolBar.getLocked()); + if (!instance.startup) setWidgetLocked (); + } + + /** + * Sets the header visible state of the "Example" widgets. + */ + void setWidgetLocked () { + coolBar.setLocked (lockedButton.getSelection ()); + } + + /** + * Listens to widgetSelected() events on DWT.DROP_DOWN type ToolItems + * and opens/closes a menu when appropriate. + */ + class DropDownSelectionListener extends SelectionAdapter { + private Menu menu = null; + private bool visible = false; + + public void widgetSelected(SelectionEvent event) { + // Create the menu if it has not already been created + if (menu is null) { + // Lazy create the menu. + menu = new Menu(shell); + menu.addMenuListener(new MenuAdapter() { + public void menuHidden(MenuEvent e) { + visible = false; + } + }); + for (int i = 0; i < 9; ++i) { + final String text = ControlExample.getResourceString("DropDownData_" + 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() { + public void widgetSelected(SelectionEvent e) { + setMenuVisible(false); + } + }); + } else { + new MenuItem(menu, DWT.SEPARATOR); + } + } + } + + /** + * A selection event will be fired when a drop down tool + * item is selected in the main area and in the drop + * down arrow. Examine the event detail to determine + * where the widget was selected. + */ + if (event.detail is DWT.ARROW) { + /* + * The drop down arrow was selected. + */ + if (visible) { + // Hide the menu to give the Arrow the appearance of being a toggle button. + setMenuVisible(false); + } else { + // Position the menu below and vertically aligned with the the drop down tool button. + final ToolItem toolItem = (ToolItem) event.widget; + final ToolBar toolBar = toolItem.getParent(); + + Rectangle toolItemBounds = toolItem.getBounds(); + Point point = toolBar.toDisplay(new Point(toolItemBounds.x, toolItemBounds.y)); + menu.setLocation(point.x, point.y + toolItemBounds.height); + setMenuVisible(true); + } + } else { + /* + * Main area of drop down tool item selected. + * An application would invoke the code to perform the action for the tool item. + */ + } + } + private void setMenuVisible(bool visible) { + menu.setVisible(visible); + this.visible = visible; + } + } + + /** + * Listens to widgetSelected() events on DWT.DROP_DOWN type CoolItems + * and opens/closes a menu when appropriate. + */ + class CoolItemSelectionListener extends SelectionAdapter { + private Menu menu = null; + + public void widgetSelected(SelectionEvent event) { + /** + * A selection event will be fired when the cool item + * is selected by its gripper or if the drop down arrow + * (or 'chevron') is selected. Examine the event detail + * to determine where the widget was selected. + */ + if (event.detail is DWT.ARROW) { + /* If the popup menu is already up (i.e. user pressed arrow twice), + * then dispose it. + */ + if (menu !is null) { + menu.dispose(); + menu = null; + return; + } + + /* Get the cool item and convert its bounds to display coordinates. */ + CoolItem coolItem = (CoolItem) event.widget; + Rectangle itemBounds = coolItem.getBounds (); + itemBounds.width = event.x - itemBounds.x; + Point pt = coolBar.toDisplay(new Point (itemBounds.x, itemBounds.y)); + itemBounds.x = pt.x; + itemBounds.y = pt.y; + + /* Get the toolbar from the cool item. */ + ToolBar toolBar = (ToolBar) coolItem.getControl (); + ToolItem[] tools = toolBar.getItems (); + int toolCount = tools.length; + + /* Convert the bounds of each tool item to display coordinates, + * and determine which ones are past the bounds of the cool item. + */ + int i = 0; + while (i < toolCount) { + Rectangle toolBounds = tools[i].getBounds (); + pt = toolBar.toDisplay(new Point(toolBounds.x, toolBounds.y)); + toolBounds.x = pt.x; + toolBounds.y = pt.y; + Rectangle intersection = itemBounds.intersection (toolBounds); + if (!intersection.equals (toolBounds)) break; + i++; + } + + /* Create a pop-up menu with items for each of the hidden buttons. */ + menu = new Menu (coolBar); + for (int j = i; j < toolCount; j++) { + ToolItem tool = tools[j]; + Image image = tool.getImage(); + if (image is null) { + new MenuItem (menu, DWT.SEPARATOR); + } else { + if ((tool.getStyle() & DWT.DROP_DOWN) !is 0) { + MenuItem menuItem = new MenuItem (menu, DWT.CASCADE); + menuItem.setImage(image); + String text = tool.getToolTipText(); + if (text !is null) menuItem.setText(text); + Menu m = new Menu(menu); + menuItem.setMenu(m); + for (int k = 0; k < 9; ++k) { + text = ControlExample.getResourceString("DropDownData_" + k); + if (text.length() !is 0) { + MenuItem mi = new MenuItem(m, DWT.NONE); + mi.setText(text); + /* Application code to perform the action for the submenu item would go here. */ + } else { + new MenuItem(m, DWT.SEPARATOR); + } + } + } else { + MenuItem menuItem = new MenuItem (menu, DWT.NONE); + menuItem.setImage(image); + String text = tool.getToolTipText(); + if (text !is null) menuItem.setText(text); + } + /* Application code to perform the action for the menu item would go here. */ + } + } + + /* Display the pop-up menu at the lower left corner of the arrow button. + * Dispose the menu when the user is done with it. + */ + pt = coolBar.toDisplay(new Point(event.x, event.y)); + menu.setLocation (pt.x, pt.y); + menu.setVisible (true); + while (menu !is null && !menu.isDisposed() && menu.isVisible ()) { + if (!display.readAndDispatch ()) display.sleep (); + } + if (menu !is null) { + menu.dispose (); + menu = null; + } + } + } + } +} diff -r e49a0f04c689 -r e32a6d7506c9 dwtexamples/controlexample/CustomControlExample.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dwtexamples/controlexample/CustomControlExample.d Mon Jan 21 01:40:01 2008 +0100 @@ -0,0 +1,61 @@ +/******************************************************************************* + * Copyright (c) 2000, 2006 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +module dwtexamples.controlexample.CustomControlExample; + + +import dwt.layout.FillLayout; +import dwt.widgets.Composite; +import dwt.widgets.Display; +import dwt.widgets.Shell; + + +public class CustomControlExample : ControlExample { + + /** + * Creates an instance of a CustomControlExample embedded + * inside the supplied parent Composite. + * + * @param parent the container of the example + */ + public this(Composite parent) { + super (parent); + } + + /** + * Answers the set of example Tabs + */ + Tab[] createTabs() { + return new Tab [] { + new CComboTab (this), + new CLabelTab (this), + new CTabFolderTab (this), + new SashFormTab (this), + new StyledTextTab (this), + }; + } + + /** + * Invokes as a standalone program. + */ + public static void main(String[] args) { + Display display = new Display(); + Shell shell = new Shell(display); + shell.setLayout(new FillLayout()); + CustomControlExample instance = new CustomControlExample(shell); + shell.setText(getResourceString("custom.window.title")); + setShellSize(instance, shell); + shell.open(); + while (! shell.isDisposed()) { + if (! display.readAndDispatch()) display.sleep(); + } + instance.dispose(); + } +} diff -r e49a0f04c689 -r e32a6d7506c9 dwtexamples/controlexample/DateTimeTab.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dwtexamples/controlexample/DateTimeTab.d Mon Jan 21 01:40:01 2008 +0100 @@ -0,0 +1,130 @@ +/******************************************************************************* + * Copyright (c) 2000, 2007 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +module dwtexamples.controlexample.DateTimeTab; + + + +import dwt.DWT; +import dwt.layout.GridData; +import dwt.layout.GridLayout; +import dwt.widgets.Button; +import dwt.widgets.DateTime; +import dwt.widgets.Group; +import dwt.widgets.Widget; + +class DateTimeTab : Tab { + /* Example widgets and groups that contain them */ + DateTime dateTime1; + Group dateTimeGroup; + + /* Style widgets added to the "Style" group */ + Button dateButton, timeButton, calendarButton, shortButton, mediumButton, longButton; + + /** + * Creates the Tab within a given instance of ControlExample. + */ + this(ControlExample instance) { + super(instance); + } + + /** + * Creates the "Example" group. + */ + void createExampleGroup () { + super.createExampleGroup (); + + /* Create a group for the list */ + dateTimeGroup = new Group (exampleGroup, DWT.NONE); + dateTimeGroup.setLayout (new GridLayout ()); + dateTimeGroup.setLayoutData (new GridData (DWT.FILL, DWT.FILL, true, true)); + dateTimeGroup.setText ("DateTime"); + } + + /** + * Creates the "Example" widgets. + */ + void createExampleWidgets () { + + /* Compute the widget style */ + int style = getDefaultStyle(); + if (dateButton.getSelection ()) style |= DWT.DATE; + if (timeButton.getSelection ()) style |= DWT.TIME; + if (calendarButton.getSelection ()) style |= DWT.CALENDAR; + if (shortButton.getSelection ()) style |= DWT.SHORT; + if (mediumButton.getSelection ()) style |= DWT.MEDIUM; + if (longButton.getSelection ()) style |= DWT.LONG; + if (borderButton.getSelection ()) style |= DWT.BORDER; + + /* Create the example widgets */ + dateTime1 = new DateTime (dateTimeGroup, style); + } + + /** + * Creates the "Style" group. + */ + void createStyleGroup() { + super.createStyleGroup (); + + /* Create the extra widgets */ + dateButton = new Button(styleGroup, DWT.RADIO); + dateButton.setText("DWT.DATE"); + timeButton = new Button(styleGroup, DWT.RADIO); + timeButton.setText("DWT.TIME"); + calendarButton = new Button(styleGroup, DWT.RADIO); + calendarButton.setText("DWT.CALENDAR"); + Group formatGroup = new Group(styleGroup, DWT.NONE); + formatGroup.setLayout(new GridLayout()); + shortButton = new Button(formatGroup, DWT.RADIO); + shortButton.setText("DWT.SHORT"); + mediumButton = new Button(formatGroup, DWT.RADIO); + mediumButton.setText("DWT.MEDIUM"); + longButton = new Button(formatGroup, DWT.RADIO); + longButton.setText("DWT.LONG"); + borderButton = new Button(styleGroup, DWT.CHECK); + borderButton.setText("DWT.BORDER"); + } + + /** + * Gets the "Example" widget children. + */ + Widget [] getExampleWidgets () { + return new Widget [] {dateTime1}; + } + + /** + * 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[] {"Day", "Hours", "Minutes", "Month", "Seconds", "Year"}; + } + + /** + * Gets the text for the tab folder item. + */ + String getTabText () { + return "DateTime"; + } + + /** + * Sets the state of the "Example" widgets. + */ + void setExampleWidgetState () { + super.setExampleWidgetState (); + dateButton.setSelection ((dateTime1.getStyle () & DWT.DATE) !is 0); + timeButton.setSelection ((dateTime1.getStyle () & DWT.TIME) !is 0); + calendarButton.setSelection ((dateTime1.getStyle () & DWT.CALENDAR) !is 0); + shortButton.setSelection ((dateTime1.getStyle () & DWT.SHORT) !is 0); + mediumButton.setSelection ((dateTime1.getStyle () & DWT.MEDIUM) !is 0); + longButton.setSelection ((dateTime1.getStyle () & DWT.LONG) !is 0); + borderButton.setSelection ((dateTime1.getStyle () & DWT.BORDER) !is 0); + } +} diff -r e49a0f04c689 -r e32a6d7506c9 dwtexamples/controlexample/DialogTab.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dwtexamples/controlexample/DialogTab.d Mon Jan 21 01:40:01 2008 +0100 @@ -0,0 +1,503 @@ +/******************************************************************************* + * Copyright (c) 2000, 2007 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +module dwtexamples.controlexample.DialogTab; + + + +import dwt.DWT; +import dwt.events.SelectionAdapter; +import dwt.events.SelectionEvent; +import dwt.events.SelectionListener; +import dwt.graphics.FontData; +import dwt.graphics.RGB; +import dwt.layout.GridData; +import dwt.layout.GridLayout; +import dwt.printing.PrintDialog; +import dwt.printing.PrinterData; +import dwt.widgets.Button; +import dwt.widgets.ColorDialog; +import dwt.widgets.Combo; +import dwt.widgets.DirectoryDialog; +import dwt.widgets.FileDialog; +import dwt.widgets.FontDialog; +import dwt.widgets.Group; +import dwt.widgets.MessageBox; +import dwt.widgets.Text; +import dwt.widgets.Widget; + +class DialogTab : Tab { + /* Example widgets and groups that contain them */ + Group dialogStyleGroup, resultGroup; + Text textWidget; + + /* Style widgets added to the "Style" group */ + Combo dialogCombo; + Button createButton; + Button okButton, cancelButton; + Button yesButton, noButton; + Button retryButton; + Button abortButton, ignoreButton; + Button iconErrorButton, iconInformationButton, iconQuestionButton; + Button iconWarningButton, iconWorkingButton, noIconButton; + Button primaryModalButton, applicationModalButton, systemModalButton; + Button saveButton, openButton, multiButton; + + static String [] FilterExtensions = {"*.txt", "*.bat", "*.doc", "*"}; + static String [] FilterNames = {ControlExample.getResourceString("FilterName_0"), + ControlExample.getResourceString("FilterName_1"), + ControlExample.getResourceString("FilterName_2"), + ControlExample.getResourceString("FilterName_3")}; + + /** + * Creates the Tab within a given instance of ControlExample. + */ + this(ControlExample instance) { + super(instance); + } + + /** + * Handle a button style selection event. + * + * @param event the selection event + */ + void buttonStyleSelected(SelectionEvent event) { + /* + * Only certain combinations of button styles are + * supported for various dialogs. Make sure the + * control widget reflects only valid combinations. + */ + bool ok = okButton.getSelection (); + bool cancel = cancelButton.getSelection (); + bool yes = yesButton.getSelection (); + bool no = noButton.getSelection (); + bool abort = abortButton.getSelection (); + bool retry = retryButton.getSelection (); + bool ignore = ignoreButton.getSelection (); + + okButton.setEnabled (!(yes || no || retry || abort || ignore)); + cancelButton.setEnabled (!(abort || ignore || (yes !is no))); + yesButton.setEnabled (!(ok || retry || abort || ignore || (cancel && !yes && !no))); + noButton.setEnabled (!(ok || retry || abort || ignore || (cancel && !yes && !no))); + retryButton.setEnabled (!(ok || yes || no)); + abortButton.setEnabled (!(ok || cancel || yes || no)); + ignoreButton.setEnabled (!(ok || cancel || yes || no)); + + createButton.setEnabled ( + !(ok || cancel || yes || no || retry || abort || ignore) || + ok || + (ok && cancel) || + (yes && no) || + (yes && no && cancel) || + (retry && cancel) || + (abort && retry && ignore)); + + + } + + /** + * Handle the create button selection event. + * + * @param event org.eclipse.swt.events.SelectionEvent + */ + void createButtonSelected(SelectionEvent event) { + + /* Compute the appropriate dialog style */ + int style = getDefaultStyle(); + if (okButton.getEnabled () && okButton.getSelection ()) style |= DWT.OK; + if (cancelButton.getEnabled () && cancelButton.getSelection ()) style |= DWT.CANCEL; + if (yesButton.getEnabled () && yesButton.getSelection ()) style |= DWT.YES; + if (noButton.getEnabled () && noButton.getSelection ()) style |= DWT.NO; + if (retryButton.getEnabled () && retryButton.getSelection ()) style |= DWT.RETRY; + if (abortButton.getEnabled () && abortButton.getSelection ()) style |= DWT.ABORT; + if (ignoreButton.getEnabled () && ignoreButton.getSelection ()) style |= DWT.IGNORE; + if (iconErrorButton.getEnabled () && iconErrorButton.getSelection ()) style |= DWT.ICON_ERROR; + if (iconInformationButton.getEnabled () && iconInformationButton.getSelection ()) style |= DWT.ICON_INFORMATION; + if (iconQuestionButton.getEnabled () && iconQuestionButton.getSelection ()) style |= DWT.ICON_QUESTION; + if (iconWarningButton.getEnabled () && iconWarningButton.getSelection ()) style |= DWT.ICON_WARNING; + if (iconWorkingButton.getEnabled () && iconWorkingButton.getSelection ()) style |= DWT.ICON_WORKING; + if (primaryModalButton.getEnabled () && primaryModalButton.getSelection ()) style |= DWT.PRIMARY_MODAL; + if (applicationModalButton.getEnabled () && applicationModalButton.getSelection ()) style |= DWT.APPLICATION_MODAL; + if (systemModalButton.getEnabled () && systemModalButton.getSelection ()) style |= DWT.SYSTEM_MODAL; + if (saveButton.getEnabled () && saveButton.getSelection ()) style |= DWT.SAVE; + if (openButton.getEnabled () && openButton.getSelection ()) style |= DWT.OPEN; + if (multiButton.getEnabled () && multiButton.getSelection ()) style |= DWT.MULTI; + + /* Open the appropriate dialog type */ + String name = dialogCombo.getText (); + + if (name.equals (ControlExample.getResourceString("ColorDialog"))) { + ColorDialog dialog = new ColorDialog (shell ,style); + dialog.setRGB (new RGB (100, 100, 100)); + dialog.setText (ControlExample.getResourceString("Title")); + RGB result = dialog.open (); + textWidget.append (ControlExample.getResourceString("ColorDialog") + Text.DELIMITER); + textWidget.append (ControlExample.getResourceString("Result", new String [] {"" + result}) + Text.DELIMITER + Text.DELIMITER); + return; + } + + if (name.equals (ControlExample.getResourceString("DirectoryDialog"))) { + DirectoryDialog dialog = new DirectoryDialog (shell, style); + dialog.setMessage (ControlExample.getResourceString("Example_string")); + dialog.setText (ControlExample.getResourceString("Title")); + String result = dialog.open (); + textWidget.append (ControlExample.getResourceString("DirectoryDialog") + Text.DELIMITER); + textWidget.append (ControlExample.getResourceString("Result", new String [] {"" + result}) + Text.DELIMITER + Text.DELIMITER); + return; + } + + if (name.equals (ControlExample.getResourceString("FileDialog"))) { + FileDialog dialog = new FileDialog (shell, style); + dialog.setFileName (ControlExample.getResourceString("readme_txt")); + dialog.setFilterNames (FilterNames); + dialog.setFilterExtensions (FilterExtensions); + dialog.setText (ControlExample.getResourceString("Title")); + String result = dialog.open(); + textWidget.append (ControlExample.getResourceString("FileDialog") + Text.DELIMITER); + textWidget.append (ControlExample.getResourceString("Result", new String [] {"" + result}) + Text.DELIMITER); + if ((dialog.getStyle () & DWT.MULTI) !is 0) { + String [] files = dialog.getFileNames (); + for (int i=0; i= shells.length) { + Shell [] newShells = new Shell [shells.length + 4]; + System.arraycopy (shells, 0, newShells, 0, shells.length); + shells = newShells; + } + + int orientation = 0; + if (leftToRightButton.getSelection()) orientation |= DWT.LEFT_TO_RIGHT; + if (rightToLeftButton.getSelection()) orientation |= DWT.RIGHT_TO_LEFT; + int radioBehavior = 0; + if (noRadioGroupButton.getSelection()) radioBehavior |= DWT.NO_RADIO_GROUP; + + /* Create the shell and menu(s) */ + Shell shell = new Shell (DWT.SHELL_TRIM | orientation); + shells [shellCount] = shell; + if (barButton.getSelection ()) { + /* Create menu bar. */ + Menu menuBar = new Menu(shell, DWT.BAR | radioBehavior); + shell.setMenuBar(menuBar); + hookListeners(menuBar); + + if (dropDownButton.getSelection() && cascadeButton.getSelection()) { + /* Create cascade button and drop-down menu in menu bar. */ + MenuItem item = new MenuItem(menuBar, DWT.CASCADE); + item.setText(getMenuItemText("Cascade")); + if (imagesButton.getSelection()) item.setImage(instance.images[ControlExample.ciOpenFolder]); + hookListeners(item); + Menu dropDownMenu = new Menu(shell, DWT.DROP_DOWN | radioBehavior); + item.setMenu(dropDownMenu); + hookListeners(dropDownMenu); + + /* Create various menu items, depending on selections. */ + createMenuItems(dropDownMenu, subMenuButton.getSelection(), subSubMenuButton.getSelection()); + } + } + + if (popUpButton.getSelection()) { + /* Create pop-up menu. */ + Menu popUpMenu = new Menu(shell, DWT.POP_UP | radioBehavior); + shell.setMenu(popUpMenu); + hookListeners(popUpMenu); + + /* Create various menu items, depending on selections. */ + createMenuItems(popUpMenu, subMenuButton.getSelection(), subSubMenuButton.getSelection()); + } + + /* Set the size, title and open the shell. */ + shell.setSize (300, 100); + shell.setText (ControlExample.getResourceString("Title") + shellCount); + shell.addPaintListener(new PaintListener() { + public void paintControl(PaintEvent e) { + e.gc.drawString(ControlExample.getResourceString("PopupMenuHere"), 20, 20); + } + }); + shell.open (); + shellCount++; + } + + /** + * Creates the "Control" group. + */ + void createControlGroup () { + /* + * Create the "Control" group. This is the group on the + * right half of each example tab. For MenuTab, it consists of + * the Menu style group, the MenuItem style group and the 'other' group. + */ + controlGroup = new Group (tabFolderPage, DWT.NONE); + controlGroup.setLayout (new GridLayout (2, true)); + controlGroup.setLayoutData (new GridData (GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_FILL)); + controlGroup.setText (ControlExample.getResourceString("Parameters")); + + /* Create a group for the menu style controls */ + styleGroup = new Group (controlGroup, DWT.NONE); + styleGroup.setLayout (new GridLayout ()); + styleGroup.setLayoutData (new GridData (GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_FILL)); + styleGroup.setText (ControlExample.getResourceString("Menu_Styles")); + + /* Create a group for the menu item style controls */ + menuItemStyleGroup = new Group (controlGroup, DWT.NONE); + menuItemStyleGroup.setLayout (new GridLayout ()); + menuItemStyleGroup.setLayoutData (new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_FILL)); + menuItemStyleGroup.setText (ControlExample.getResourceString("MenuItem_Styles")); + + /* Create a group for the 'other' controls */ + otherGroup = new Group (controlGroup, DWT.NONE); + otherGroup.setLayout (new GridLayout ()); + otherGroup.setLayoutData (new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_FILL)); + otherGroup.setText (ControlExample.getResourceString("Other")); + } + + /** + * Creates the "Control" widget children. + */ + void createControlWidgets () { + + /* Create the menu style buttons */ + barButton = new Button (styleGroup, DWT.CHECK); + barButton.setText ("DWT.BAR"); + dropDownButton = new Button (styleGroup, DWT.CHECK); + dropDownButton.setText ("DWT.DROP_DOWN"); + popUpButton = new Button (styleGroup, DWT.CHECK); + popUpButton.setText ("DWT.POP_UP"); + noRadioGroupButton = new Button (styleGroup, DWT.CHECK); + noRadioGroupButton.setText ("DWT.NO_RADIO_GROUP"); + leftToRightButton = new Button (styleGroup, DWT.RADIO); + leftToRightButton.setText ("DWT.LEFT_TO_RIGHT"); + leftToRightButton.setSelection(true); + rightToLeftButton = new Button (styleGroup, DWT.RADIO); + rightToLeftButton.setText ("DWT.RIGHT_TO_LEFT"); + + /* Create the menu item style buttons */ + cascadeButton = new Button (menuItemStyleGroup, DWT.CHECK); + cascadeButton.setText ("DWT.CASCADE"); + checkButton = new Button (menuItemStyleGroup, DWT.CHECK); + checkButton.setText ("DWT.CHECK"); + pushButton = new Button (menuItemStyleGroup, DWT.CHECK); + pushButton.setText ("DWT.PUSH"); + radioButton = new Button (menuItemStyleGroup, DWT.CHECK); + radioButton.setText ("DWT.RADIO"); + separatorButton = new Button (menuItemStyleGroup, DWT.CHECK); + separatorButton.setText ("DWT.SEPARATOR"); + + /* Create the 'other' buttons */ + imagesButton = new Button (otherGroup, DWT.CHECK); + imagesButton.setText (ControlExample.getResourceString("Images")); + acceleratorsButton = new Button (otherGroup, DWT.CHECK); + acceleratorsButton.setText (ControlExample.getResourceString("Accelerators")); + mnemonicsButton = new Button (otherGroup, DWT.CHECK); + mnemonicsButton.setText (ControlExample.getResourceString("Mnemonics")); + subMenuButton = new Button (otherGroup, DWT.CHECK); + subMenuButton.setText (ControlExample.getResourceString("SubMenu")); + subSubMenuButton = new Button (otherGroup, DWT.CHECK); + subSubMenuButton.setText (ControlExample.getResourceString("SubSubMenu")); + + /* Create the "create" and "closeAll" buttons (and a 'filler' label to place them) */ + new Label(controlGroup, DWT.NONE); + createButton = new Button (controlGroup, DWT.NONE); + createButton.setLayoutData (new GridData (GridData.HORIZONTAL_ALIGN_END)); + createButton.setText (ControlExample.getResourceString("Create_Shell")); + closeAllButton = new Button (controlGroup, DWT.NONE); + closeAllButton.setLayoutData (new GridData (GridData.HORIZONTAL_ALIGN_BEGINNING)); + closeAllButton.setText (ControlExample.getResourceString("Close_All_Shells")); + + /* Add the listeners */ + createButton.addSelectionListener(new SelectionAdapter() { + public void widgetSelected(SelectionEvent e) { + createButtonSelected(e); + } + }); + closeAllButton.addSelectionListener(new SelectionAdapter() { + public void widgetSelected(SelectionEvent e) { + closeAllShells (); + } + }); + subMenuButton.addSelectionListener(new SelectionAdapter() { + public void widgetSelected(SelectionEvent e) { + subSubMenuButton.setEnabled (subMenuButton.getSelection ()); + } + }); + + /* Set the default state */ + barButton.setSelection (true); + dropDownButton.setSelection (true); + popUpButton.setSelection (true); + cascadeButton.setSelection (true); + checkButton.setSelection (true); + pushButton.setSelection (true); + radioButton.setSelection (true); + separatorButton.setSelection (true); + subSubMenuButton.setEnabled (subMenuButton.getSelection ()); + } + + /* Create various menu items, depending on selections. */ + void createMenuItems(Menu menu, bool createSubMenu, bool createSubSubMenu) { + MenuItem item; + if (pushButton.getSelection()) { + item = new MenuItem(menu, DWT.PUSH); + item.setText(getMenuItemText("Push")); + if (acceleratorsButton.getSelection()) item.setAccelerator(DWT.MOD1 + DWT.MOD2 + 'P'); + if (imagesButton.getSelection()) item.setImage(instance.images[ControlExample.ciClosedFolder]); + hookListeners(item); + } + + if (separatorButton.getSelection()) { + new MenuItem(menu, DWT.SEPARATOR); + } + + if (checkButton.getSelection()) { + item = new MenuItem(menu, DWT.CHECK); + item.setText(getMenuItemText("Check")); + if (acceleratorsButton.getSelection()) item.setAccelerator(DWT.MOD1 + DWT.MOD2 + 'C'); + if (imagesButton.getSelection()) item.setImage(instance.images[ControlExample.ciOpenFolder]); + hookListeners(item); + } + + if (radioButton.getSelection()) { + item = new MenuItem(menu, DWT.RADIO); + item.setText(getMenuItemText("1Radio")); + if (acceleratorsButton.getSelection()) item.setAccelerator(DWT.MOD1 + DWT.MOD2 + '1'); + if (imagesButton.getSelection()) item.setImage(instance.images[ControlExample.ciTarget]); + item.setSelection(true); + hookListeners(item); + + item = new MenuItem(menu, DWT.RADIO); + item.setText(getMenuItemText("2Radio")); + if (acceleratorsButton.getSelection()) item.setAccelerator(DWT.MOD1 + DWT.MOD2 + '2'); + if (imagesButton.getSelection()) item.setImage(instance.images[ControlExample.ciTarget]); + hookListeners(item); + } + + if (createSubMenu && cascadeButton.getSelection()) { + /* Create cascade button and drop-down menu for the sub-menu. */ + item = new MenuItem(menu, DWT.CASCADE); + item.setText(getMenuItemText("Cascade")); + if (imagesButton.getSelection()) item.setImage(instance.images[ControlExample.ciOpenFolder]); + hookListeners(item); + Menu subMenu = new Menu(menu.getShell(), DWT.DROP_DOWN); + item.setMenu(subMenu); + hookListeners(subMenu); + + createMenuItems(subMenu, createSubSubMenu, false); + } + } + + String getMenuItemText(String item) { + bool cascade = item.equals("Cascade"); + bool mnemonic = mnemonicsButton.getSelection(); + bool accelerator = acceleratorsButton.getSelection(); + char acceleratorKey = item.charAt(0); + if (mnemonic && accelerator && !cascade) { + return ControlExample.getResourceString(item + "WithMnemonic") + "\tCtrl+Shift+" + acceleratorKey; + } + if (accelerator && !cascade) { + return ControlExample.getResourceString(item) + "\tCtrl+Shift+" + acceleratorKey; + } + if (mnemonic) { + return ControlExample.getResourceString(item + "WithMnemonic"); + } + return ControlExample.getResourceString(item); + } + + /** + * Gets the text for the tab folder item. + */ + String getTabText () { + return "Menu"; + } +} diff -r e49a0f04c689 -r e32a6d7506c9 dwtexamples/controlexample/ProgressBarTab.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dwtexamples/controlexample/ProgressBarTab.d Mon Jan 21 01:40:01 2008 +0100 @@ -0,0 +1,183 @@ +/******************************************************************************* + * Copyright (c) 2000, 2007 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +module dwtexamples.controlexample.ProgressBarTab; + + + +import dwt.DWT; +import dwt.layout.GridData; +import dwt.layout.GridLayout; +import dwt.widgets.Button; +import dwt.widgets.Group; +import dwt.widgets.ProgressBar; +import dwt.widgets.Widget; + +class ProgressBarTab : RangeTab { + /* Example widgets and groups that contain them */ + ProgressBar progressBar1; + Group progressBarGroup; + + /* Style widgets added to the "Style" group */ + Button smoothButton; + Button indeterminateButton; + + /** + * Creates the Tab within a given instance of ControlExample. + */ + this(ControlExample instance) { + super(instance); + } + + /** + * Creates the "Example" group. + */ + void createExampleGroup() { + super.createExampleGroup (); + + /* Create a group for the progress bar */ + progressBarGroup = new Group (exampleGroup, DWT.NONE); + progressBarGroup.setLayout (new GridLayout ()); + progressBarGroup.setLayoutData (new GridData (DWT.FILL, DWT.FILL, true, true)); + progressBarGroup.setText ("ProgressBar"); + } + + /** + * Creates the "Example" widgets. + */ + void createExampleWidgets () { + + /* Compute the widget style */ + int style = getDefaultStyle(); + if (horizontalButton.getSelection ()) style |= DWT.HORIZONTAL; + if (verticalButton.getSelection ()) style |= DWT.VERTICAL; + if (smoothButton.getSelection ()) style |= DWT.SMOOTH; + if (borderButton.getSelection ()) style |= DWT.BORDER; + if (indeterminateButton.getSelection ()) style |= DWT.INDETERMINATE; + + /* Create the example widgets */ + progressBar1 = new ProgressBar (progressBarGroup, style); + } + + /** + * Creates the "Style" group. + */ + void createStyleGroup () { + super.createStyleGroup (); + + /* Create the extra widgets */ + smoothButton = new Button (styleGroup, DWT.CHECK); + smoothButton.setText ("DWT.SMOOTH"); + indeterminateButton = new Button (styleGroup, DWT.CHECK); + indeterminateButton.setText ("DWT.INDETERMINATE"); + } + + /** + * Gets the "Example" widget children. + */ + Widget [] getExampleWidgets () { + return new Widget [] {progressBar1}; + } + + /** + * 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[] {"Selection", "ToolTipText"}; + } + + /** + * Gets the short text for the tab folder item. + */ + public String getShortTabText() { + return "PB"; + } + + /** + * Gets the text for the tab folder item. + */ + String getTabText () { + return "ProgressBar"; + } + + /** + * Sets the state of the "Example" widgets. + */ + void setExampleWidgetState () { + super.setExampleWidgetState (); + if (indeterminateButton.getSelection ()) { + selectionSpinner.setEnabled (false); + minimumSpinner.setEnabled (false); + maximumSpinner.setEnabled (false); + } else { + selectionSpinner.setEnabled (true); + minimumSpinner.setEnabled (true); + maximumSpinner.setEnabled (true); + } + smoothButton.setSelection ((progressBar1.getStyle () & DWT.SMOOTH) !is 0); + indeterminateButton.setSelection ((progressBar1.getStyle () & DWT.INDETERMINATE) !is 0); + } + + /** + * Gets the default maximum of the "Example" widgets. + */ + int getDefaultMaximum () { + return progressBar1.getMaximum(); + } + + /** + * Gets the default minimim of the "Example" widgets. + */ + int getDefaultMinimum () { + return progressBar1.getMinimum(); + } + + /** + * Gets the default selection of the "Example" widgets. + */ + int getDefaultSelection () { + return progressBar1.getSelection(); + } + + /** + * Sets the maximum of the "Example" widgets. + */ + void setWidgetMaximum () { + progressBar1.setMaximum (maximumSpinner.getSelection ()); + updateSpinners (); + } + + /** + * Sets the minimim of the "Example" widgets. + */ + void setWidgetMinimum () { + progressBar1.setMinimum (minimumSpinner.getSelection ()); + updateSpinners (); + } + + /** + * Sets the selection of the "Example" widgets. + */ + void setWidgetSelection () { + progressBar1.setSelection (selectionSpinner.getSelection ()); + updateSpinners (); + } + + /** + * Update the Spinner widgets to reflect the actual value set + * on the "Example" widget. + */ + void updateSpinners () { + minimumSpinner.setSelection (progressBar1.getMinimum ()); + selectionSpinner.setSelection (progressBar1.getSelection ()); + maximumSpinner.setSelection (progressBar1.getMaximum ()); + } +} diff -r e49a0f04c689 -r e32a6d7506c9 dwtexamples/controlexample/RangeTab.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dwtexamples/controlexample/RangeTab.d Mon Jan 21 01:40:01 2008 +0100 @@ -0,0 +1,203 @@ +/******************************************************************************* + * Copyright (c) 2000, 2007 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +module dwtexamples.controlexample.RangeTab; + + + +import dwt.DWT; +import dwt.events.SelectionAdapter; +import dwt.events.SelectionEvent; +import dwt.layout.GridData; +import dwt.layout.GridLayout; +import dwt.widgets.Button; +import dwt.widgets.Group; +import dwt.widgets.Spinner; +import dwt.widgets.Widget; + +abstract class RangeTab : Tab { + /* Style widgets added to the "Style" group */ + Button horizontalButton, verticalButton; + bool orientationButtons = true; + + /* Scale widgets added to the "Control" group */ + Spinner minimumSpinner, selectionSpinner, maximumSpinner; + + /** + * Creates the Tab within a given instance of ControlExample. + */ + this(ControlExample instance) { + super(instance); + } + + /** + * Creates the "Control" widget children. + */ + void createControlWidgets () { + /* Create controls specific to this example */ + createMinimumGroup (); + createMaximumGroup (); + createSelectionGroup (); + } + + /** + * Create a group of widgets to control the maximum + * attribute of the example widget. + */ + void createMaximumGroup() { + + /* Create the group */ + Group maximumGroup = new Group (controlGroup, DWT.NONE); + maximumGroup.setLayout (new GridLayout ()); + maximumGroup.setText (ControlExample.getResourceString("Maximum")); + maximumGroup.setLayoutData (new GridData (GridData.FILL_HORIZONTAL)); + + /* Create a Spinner widget */ + maximumSpinner = new Spinner (maximumGroup, DWT.BORDER); + maximumSpinner.setMaximum (100000); + maximumSpinner.setSelection (getDefaultMaximum()); + maximumSpinner.setPageIncrement (100); + maximumSpinner.setIncrement (1); + maximumSpinner.setLayoutData (new GridData (DWT.FILL, DWT.CENTER, true, false)); + + /* Add the listeners */ + maximumSpinner.addSelectionListener(new SelectionAdapter () { + public void widgetSelected (SelectionEvent event) { + setWidgetMaximum (); + } + }); + } + + /** + * Create a group of widgets to control the minimum + * attribute of the example widget. + */ + void createMinimumGroup() { + + /* Create the group */ + Group minimumGroup = new Group (controlGroup, DWT.NONE); + minimumGroup.setLayout (new GridLayout ()); + minimumGroup.setText (ControlExample.getResourceString("Minimum")); + minimumGroup.setLayoutData (new GridData (GridData.FILL_HORIZONTAL)); + + /* Create a Spinner widget */ + minimumSpinner = new Spinner (minimumGroup, DWT.BORDER); + minimumSpinner.setMaximum (100000); + minimumSpinner.setSelection(getDefaultMinimum()); + minimumSpinner.setPageIncrement (100); + minimumSpinner.setIncrement (1); + minimumSpinner.setLayoutData (new GridData (DWT.FILL, DWT.CENTER, true, false)); + + /* Add the listeners */ + minimumSpinner.addSelectionListener (new SelectionAdapter () { + public void widgetSelected (SelectionEvent event) { + setWidgetMinimum (); + } + }); + + } + + /** + * Create a group of widgets to control the selection + * attribute of the example widget. + */ + void createSelectionGroup() { + + /* Create the group */ + Group selectionGroup = new Group(controlGroup, DWT.NONE); + selectionGroup.setLayout(new GridLayout()); + GridData gridData = new GridData(DWT.FILL, DWT.BEGINNING, false, false); + selectionGroup.setLayoutData(gridData); + selectionGroup.setText(ControlExample.getResourceString("Selection")); + + /* Create a Spinner widget */ + selectionSpinner = new Spinner (selectionGroup, DWT.BORDER); + selectionSpinner.setMaximum (100000); + selectionSpinner.setSelection (getDefaultSelection()); + selectionSpinner.setPageIncrement (100); + selectionSpinner.setIncrement (1); + selectionSpinner.setLayoutData (new GridData (DWT.FILL, DWT.CENTER, true, false)); + + /* Add the listeners */ + selectionSpinner.addSelectionListener(new SelectionAdapter() { + public void widgetSelected(SelectionEvent event) { + setWidgetSelection (); + } + }); + + } + + /** + * Creates the "Style" group. + */ + void createStyleGroup () { + super.createStyleGroup (); + + /* Create the extra widgets */ + if (orientationButtons) { + horizontalButton = new Button (styleGroup, DWT.RADIO); + horizontalButton.setText ("DWT.HORIZONTAL"); + verticalButton = new Button (styleGroup, DWT.RADIO); + verticalButton.setText ("DWT.VERTICAL"); + } + borderButton = new Button (styleGroup, DWT.CHECK); + borderButton.setText ("DWT.BORDER"); + } + + /** + * Sets the state of the "Example" widgets. + */ + void setExampleWidgetState () { + super.setExampleWidgetState (); + if (!instance.startup) { + setWidgetMinimum (); + setWidgetMaximum (); + setWidgetSelection (); + } + Widget [] widgets = getExampleWidgets (); + if (widgets.length !is 0) { + if (orientationButtons) { + horizontalButton.setSelection ((widgets [0].getStyle () & DWT.HORIZONTAL) !is 0); + verticalButton.setSelection ((widgets [0].getStyle () & DWT.VERTICAL) !is 0); + } + borderButton.setSelection ((widgets [0].getStyle () & DWT.BORDER) !is 0); + } + } + + /** + * Gets the default maximum of the "Example" widgets. + */ + abstract int getDefaultMaximum (); + + /** + * Gets the default minimim of the "Example" widgets. + */ + abstract int getDefaultMinimum (); + + /** + * Gets the default selection of the "Example" widgets. + */ + abstract int getDefaultSelection (); + + /** + * Sets the maximum of the "Example" widgets. + */ + abstract void setWidgetMaximum (); + + /** + * Sets the minimim of the "Example" widgets. + */ + abstract void setWidgetMinimum (); + + /** + * Sets the selection of the "Example" widgets. + */ + abstract void setWidgetSelection (); +} diff -r e49a0f04c689 -r e32a6d7506c9 dwtexamples/controlexample/SashFormTab.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dwtexamples/controlexample/SashFormTab.d Mon Jan 21 01:40:01 2008 +0100 @@ -0,0 +1,128 @@ +/******************************************************************************* + * Copyright (c) 2000, 2007 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +module dwtexamples.controlexample.SashFormTab; + + + +import dwt.DWT; +import dwt.custom.SashForm; +import dwt.layout.GridData; +import dwt.layout.GridLayout; +import dwt.widgets.Button; +import dwt.widgets.Group; +import dwt.widgets.List; +import dwt.widgets.Text; +import dwt.widgets.Widget; + +class SashFormTab : Tab { + /* Example widgets and groups that contain them */ + Group sashFormGroup; + SashForm form; + List list1, list2; + Text text; + + /* Style widgets added to the "Style" group */ + Button horizontalButton, verticalButton, smoothButton; + + static String [] ListData0 = {ControlExample.getResourceString("ListData0_0"), //$NON-NLS-1$ + ControlExample.getResourceString("ListData0_1"), //$NON-NLS-1$ + ControlExample.getResourceString("ListData0_2"), //$NON-NLS-1$ + ControlExample.getResourceString("ListData0_3"), //$NON-NLS-1$ + ControlExample.getResourceString("ListData0_4"), //$NON-NLS-1$ + ControlExample.getResourceString("ListData0_5"), //$NON-NLS-1$ + ControlExample.getResourceString("ListData0_6"), //$NON-NLS-1$ + ControlExample.getResourceString("ListData0_7")}; //$NON-NLS-1$ + + static String [] ListData1 = {ControlExample.getResourceString("ListData1_0"), //$NON-NLS-1$ + ControlExample.getResourceString("ListData1_1"), //$NON-NLS-1$ + ControlExample.getResourceString("ListData1_2"), //$NON-NLS-1$ + ControlExample.getResourceString("ListData1_3"), //$NON-NLS-1$ + ControlExample.getResourceString("ListData1_4"), //$NON-NLS-1$ + ControlExample.getResourceString("ListData1_5"), //$NON-NLS-1$ + ControlExample.getResourceString("ListData1_6"), //$NON-NLS-1$ + ControlExample.getResourceString("ListData1_7")}; //$NON-NLS-1$ + + + /** + * Creates the Tab within a given instance of ControlExample. + */ + this(ControlExample instance) { + super(instance); + } + void createExampleGroup () { + super.createExampleGroup (); + + /* Create a group for the sashform widget */ + sashFormGroup = new Group (exampleGroup, DWT.NONE); + sashFormGroup.setLayout (new GridLayout ()); + sashFormGroup.setLayoutData (new GridData (DWT.FILL, DWT.FILL, true, true)); + sashFormGroup.setText ("SashForm"); + } + void createExampleWidgets () { + + /* Compute the widget style */ + int style = getDefaultStyle(); + if (horizontalButton.getSelection ()) style |= DWT.H_SCROLL; + if (verticalButton.getSelection ()) style |= DWT.V_SCROLL; + if (smoothButton.getSelection ()) style |= DWT.SMOOTH; + + /* Create the example widgets */ + form = new SashForm (sashFormGroup, style); + list1 = new List (form, DWT.V_SCROLL | DWT.H_SCROLL | DWT.BORDER); + list1.setItems (ListData0); + list2 = new List (form, DWT.V_SCROLL | DWT.H_SCROLL | DWT.BORDER); + list2.setItems (ListData1); + text = new Text (form, DWT.MULTI | DWT.BORDER); + text.setText (ControlExample.getResourceString("Multi_line")); //$NON-NLS-1$ + form.setWeights(new int[] {1, 1, 1}); + } + /** + * Creates the "Style" group. + */ + void createStyleGroup() { + super.createStyleGroup(); + + /* Create the extra widgets */ + horizontalButton = new Button (styleGroup, DWT.RADIO); + horizontalButton.setText ("DWT.HORIZONTAL"); + horizontalButton.setSelection(true); + verticalButton = new Button (styleGroup, DWT.RADIO); + verticalButton.setText ("DWT.VERTICAL"); + verticalButton.setSelection(false); + smoothButton = new Button (styleGroup, DWT.CHECK); + smoothButton.setText ("DWT.SMOOTH"); + smoothButton.setSelection(false); + } + + /** + * Gets the "Example" widget children. + */ + Widget [] getExampleWidgets () { + return new Widget [] {form}; + } + + /** + * Gets the text for the tab folder item. + */ + String getTabText () { + return "SashForm"; //$NON-NLS-1$ + } + + /** + * Sets the state of the "Example" widgets. + */ + void setExampleWidgetState () { + super.setExampleWidgetState (); + horizontalButton.setSelection ((form.getStyle () & DWT.H_SCROLL) !is 0); + verticalButton.setSelection ((form.getStyle () & DWT.V_SCROLL) !is 0); + smoothButton.setSelection ((form.getStyle () & DWT.SMOOTH) !is 0); + } +} diff -r e49a0f04c689 -r e32a6d7506c9 dwtexamples/controlexample/SashTab.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dwtexamples/controlexample/SashTab.d Mon Jan 21 01:40:01 2008 +0100 @@ -0,0 +1,252 @@ +/******************************************************************************* + * Copyright (c) 2000, 2007 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +module dwtexamples.controlexample.SashTab; + + + +import dwt.DWT; +import dwt.events.ControlAdapter; +import dwt.events.ControlEvent; +import dwt.events.SelectionAdapter; +import dwt.events.SelectionEvent; +import dwt.graphics.Rectangle; +import dwt.layout.FillLayout; +import dwt.layout.GridData; +import dwt.widgets.Button; +import dwt.widgets.Composite; +import dwt.widgets.Group; +import dwt.widgets.List; +import dwt.widgets.Sash; +import dwt.widgets.Text; +import dwt.widgets.Widget; + +class SashTab : Tab { + /* Example widgets and groups that contain them */ + Sash hSash, vSash; + Composite sashComp; + Group sashGroup; + List list1, list2, list3; + Text text; + Button smoothButton; + + static String [] ListData0 = {ControlExample.getResourceString("ListData0_0"), + ControlExample.getResourceString("ListData0_1"), + ControlExample.getResourceString("ListData0_2"), + ControlExample.getResourceString("ListData0_3"), + ControlExample.getResourceString("ListData0_4"), + ControlExample.getResourceString("ListData0_5"), + ControlExample.getResourceString("ListData0_6"), + ControlExample.getResourceString("ListData0_7"), + ControlExample.getResourceString("ListData0_8")}; + + static String [] ListData1 = {ControlExample.getResourceString("ListData1_0"), + ControlExample.getResourceString("ListData1_1"), + ControlExample.getResourceString("ListData1_2"), + ControlExample.getResourceString("ListData1_3"), + ControlExample.getResourceString("ListData1_4"), + ControlExample.getResourceString("ListData1_5"), + ControlExample.getResourceString("ListData1_6"), + ControlExample.getResourceString("ListData1_7"), + ControlExample.getResourceString("ListData1_8")}; + + /* Constants */ + static final int SASH_WIDTH = 3; + static final int SASH_LIMIT = 20; + + /** + * Creates the Tab within a given instance of ControlExample. + */ + SashTab(ControlExample instance) { + super(instance); + } + + /** + * Creates the "Example" group. + */ + void createExampleGroup () { + super.createExampleGroup (); + exampleGroup.setLayoutData (new GridData (DWT.FILL, DWT.FILL, true, true)); + exampleGroup.setLayout(new FillLayout()); + + /* Create a group for the sash widgets */ + sashGroup = new Group (exampleGroup, DWT.NONE); + FillLayout layout = new FillLayout(); + layout.marginHeight = layout.marginWidth = 5; + sashGroup.setLayout(layout); + sashGroup.setText ("Sash"); + } + + /** + * Creates the "Example" widgets. + */ + void createExampleWidgets () { + /* + * Create the page. This example does not use layouts. + */ + sashComp = new Composite(sashGroup, DWT.BORDER); + + /* Create the list and text widgets */ + list1 = new List (sashComp, DWT.V_SCROLL | DWT.H_SCROLL | DWT.BORDER); + list1.setItems (ListData0); + list2 = new List (sashComp, DWT.V_SCROLL | DWT.H_SCROLL | DWT.BORDER); + list2.setItems (ListData1); + text = new Text (sashComp, DWT.MULTI | DWT.BORDER); + text.setText (ControlExample.getResourceString("Multi_line")); + + /* Create the sashes */ + int style = getDefaultStyle(); + if (smoothButton.getSelection()) style |= DWT.SMOOTH; + vSash = new Sash (sashComp, DWT.VERTICAL | style); + hSash = new Sash (sashComp, DWT.HORIZONTAL | style); + + /* Add the listeners */ + hSash.addSelectionListener (new SelectionAdapter () { + public void widgetSelected (SelectionEvent event) { + Rectangle rect = vSash.getParent().getClientArea(); + event.y = Math.min (Math.max (event.y, SASH_LIMIT), rect.height - SASH_LIMIT); + if (event.detail !is DWT.DRAG) { + hSash.setBounds (event.x, event.y, event.width, event.height); + layout (); + } + } + }); + vSash.addSelectionListener (new SelectionAdapter () { + public void widgetSelected (SelectionEvent event) { + Rectangle rect = vSash.getParent().getClientArea(); + event.x = Math.min (Math.max (event.x, SASH_LIMIT), rect.width - SASH_LIMIT); + if (event.detail !is DWT.DRAG) { + vSash.setBounds (event.x, event.y, event.width, event.height); + layout (); + } + } + }); + sashComp.addControlListener (new ControlAdapter () { + public void controlResized (ControlEvent event) { + resized (); + } + }); + } + + /** + * Creates the "Size" group. The "Size" group contains + * controls that allow the user to change the size of + * the example widgets. + */ + void createSizeGroup () { + } + + /** + * Creates the "Style" group. + */ + void createStyleGroup() { + super.createStyleGroup (); + + /* Create the extra widgets */ + smoothButton = new Button (styleGroup, DWT.CHECK); + smoothButton.setText("DWT.SMOOTH"); + } + + void disposeExampleWidgets () { + sashComp.dispose(); + sashComp = null; + } + + /** + * Gets the "Example" widget children. + */ + Widget [] getExampleWidgets () { + return new Widget [] {hSash, vSash}; + } + + /** + * 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[] {"ToolTipText"}; + } + + /** + * Gets the text for the tab folder item. + */ + String getTabText () { + return "Sash"; + } + + /** + * Layout the list and text widgets according to the new + * positions of the sashes..events.SelectionEvent + */ + void layout () { + + Rectangle clientArea = sashComp.getClientArea (); + Rectangle hSashBounds = hSash.getBounds (); + Rectangle vSashBounds = vSash.getBounds (); + + list1.setBounds (0, 0, vSashBounds.x, hSashBounds.y); + list2.setBounds (vSashBounds.x + vSashBounds.width, 0, clientArea.width - (vSashBounds.x + vSashBounds.width), hSashBounds.y); + text.setBounds (0, hSashBounds.y + hSashBounds.height, clientArea.width, clientArea.height - (hSashBounds.y + hSashBounds.height)); + + /** + * If the horizontal sash has been moved then the vertical + * sash is either too long or too short and its size must + * be adjusted. + */ + vSashBounds.height = hSashBounds.y; + vSash.setBounds (vSashBounds); + } + /** + * Sets the size of the "Example" widgets. + */ + void setExampleWidgetSize () { + sashGroup.layout (true); + } + + /** + * Sets the state of the "Example" widgets. + */ + void setExampleWidgetState () { + super.setExampleWidgetState (); + smoothButton.setSelection ((hSash.getStyle () & DWT.SMOOTH) !is 0); + } + + /** + * Handle the shell resized event. + */ + void resized () { + + /* Get the client area for the shell */ + Rectangle clientArea = sashComp.getClientArea (); + + /* + * Make list 1 half the width and half the height of the tab leaving room for the sash. + * Place list 1 in the top left quadrant of the tab. + */ + Rectangle list1Bounds = new Rectangle (0, 0, (clientArea.width - SASH_WIDTH) / 2, (clientArea.height - SASH_WIDTH) / 2); + list1.setBounds (list1Bounds); + + /* + * Make list 2 half the width and half the height of the tab leaving room for the sash. + * Place list 2 in the top right quadrant of the tab. + */ + list2.setBounds (list1Bounds.width + SASH_WIDTH, 0, clientArea.width - (list1Bounds.width + SASH_WIDTH), list1Bounds.height); + + /* + * Make the text area the full width and half the height of the tab leaving room for the sash. + * Place the text area in the bottom half of the tab. + */ + text.setBounds (0, list1Bounds.height + SASH_WIDTH, clientArea.width, clientArea.height - (list1Bounds.height + SASH_WIDTH)); + + /* Position the sashes */ + vSash.setBounds (list1Bounds.width, 0, SASH_WIDTH, list1Bounds.height); + hSash.setBounds (0, list1Bounds.height, clientArea.width, SASH_WIDTH); + } +} diff -r e49a0f04c689 -r e32a6d7506c9 dwtexamples/controlexample/ScaleTab.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dwtexamples/controlexample/ScaleTab.d Mon Jan 21 01:40:01 2008 +0100 @@ -0,0 +1,236 @@ +/******************************************************************************* + * Copyright (c) 2000, 2007 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +module dwtexamples.controlexample.ScaleTab; + + + +import dwt.DWT; +import dwt.events.SelectionAdapter; +import dwt.events.SelectionEvent; +import dwt.layout.GridData; +import dwt.layout.GridLayout; +import dwt.widgets.Group; +import dwt.widgets.Scale; +import dwt.widgets.Spinner; +import dwt.widgets.Widget; + +class ScaleTab : RangeTab { + /* Example widgets and groups that contain them */ + Scale scale1; + Group scaleGroup; + + /* Spinner widgets added to the "Control" group */ + Spinner incrementSpinner, pageIncrementSpinner; + + /** + * Creates the Tab within a given instance of ControlExample. + */ + this(ControlExample instance) { + super(instance); + } + + /** + * Creates the "Control" widget children. + */ + void createControlWidgets () { + super.createControlWidgets (); + createIncrementGroup (); + createPageIncrementGroup (); + } + + /** + * Creates the "Example" group. + */ + void createExampleGroup () { + super.createExampleGroup (); + + /* Create a group for the scale */ + scaleGroup = new Group (exampleGroup, DWT.NONE); + scaleGroup.setLayout (new GridLayout ()); + scaleGroup.setLayoutData (new GridData (DWT.FILL, DWT.FILL, true, true)); + scaleGroup.setText ("Scale"); + + } + + /** + * Creates the "Example" widgets. + */ + void createExampleWidgets () { + + /* Compute the widget style */ + int style = getDefaultStyle(); + if (horizontalButton.getSelection ()) style |= DWT.HORIZONTAL; + if (verticalButton.getSelection ()) style |= DWT.VERTICAL; + if (borderButton.getSelection ()) style |= DWT.BORDER; + + /* Create the example widgets */ + scale1 = new Scale (scaleGroup, style); + } + + /** + * Create a group of widgets to control the increment + * attribute of the example widget. + */ + void createIncrementGroup() { + + /* Create the group */ + Group incrementGroup = new Group (controlGroup, DWT.NONE); + incrementGroup.setLayout (new GridLayout ()); + incrementGroup.setText (ControlExample.getResourceString("Increment")); + incrementGroup.setLayoutData (new GridData (GridData.FILL_HORIZONTAL)); + + /* Create the Spinner widget */ + incrementSpinner = new Spinner (incrementGroup, DWT.BORDER); + incrementSpinner.setMaximum (100000); + incrementSpinner.setSelection (getDefaultIncrement()); + incrementSpinner.setPageIncrement (100); + incrementSpinner.setIncrement (1); + incrementSpinner.setLayoutData (new GridData (DWT.FILL, DWT.CENTER, true, false)); + + /* Add the listeners */ + incrementSpinner.addSelectionListener (new SelectionAdapter () { + public void widgetSelected (SelectionEvent e) { + setWidgetIncrement (); + } + }); + } + + /** + * Create a group of widgets to control the page increment + * attribute of the example widget. + */ + void createPageIncrementGroup() { + + /* Create the group */ + Group pageIncrementGroup = new Group (controlGroup, DWT.NONE); + pageIncrementGroup.setLayout (new GridLayout ()); + pageIncrementGroup.setText (ControlExample.getResourceString("Page_Increment")); + pageIncrementGroup.setLayoutData (new GridData (GridData.FILL_HORIZONTAL)); + + /* Create the Spinner widget */ + pageIncrementSpinner = new Spinner (pageIncrementGroup, DWT.BORDER); + pageIncrementSpinner.setMaximum (100000); + pageIncrementSpinner.setSelection (getDefaultPageIncrement()); + pageIncrementSpinner.setPageIncrement (100); + pageIncrementSpinner.setIncrement (1); + pageIncrementSpinner.setLayoutData (new GridData (DWT.FILL, DWT.CENTER, true, false)); + + /* Add the listeners */ + pageIncrementSpinner.addSelectionListener (new SelectionAdapter () { + public void widgetSelected (SelectionEvent event) { + setWidgetPageIncrement (); + } + }); + } + + /** + * Gets the "Example" widget children. + */ + Widget [] getExampleWidgets () { + return new Widget [] {scale1}; + } + + /** + * 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[] {"Selection", "ToolTipText"}; + } + + /** + * Gets the text for the tab folder item. + */ + String getTabText () { + return "Scale"; + } + + /** + * Sets the state of the "Example" widgets. + */ + void setExampleWidgetState () { + super.setExampleWidgetState (); + if (!instance.startup) { + setWidgetIncrement (); + setWidgetPageIncrement (); + } + } + + /** + * Gets the default maximum of the "Example" widgets. + */ + int getDefaultMaximum () { + return scale1.getMaximum(); + } + + /** + * Gets the default minimim of the "Example" widgets. + */ + int getDefaultMinimum () { + return scale1.getMinimum(); + } + + /** + * Gets the default selection of the "Example" widgets. + */ + int getDefaultSelection () { + return scale1.getSelection(); + } + + /** + * Gets the default increment of the "Example" widgets. + */ + int getDefaultIncrement () { + return scale1.getIncrement(); + } + + /** + * Gets the default page increment of the "Example" widgets. + */ + int getDefaultPageIncrement () { + return scale1.getPageIncrement(); + } + + /** + * Sets the increment of the "Example" widgets. + */ + void setWidgetIncrement () { + scale1.setIncrement (incrementSpinner.getSelection ()); + } + + /** + * Sets the minimim of the "Example" widgets. + */ + void setWidgetMaximum () { + scale1.setMaximum (maximumSpinner.getSelection ()); + } + + /** + * Sets the minimim of the "Example" widgets. + */ + void setWidgetMinimum () { + scale1.setMinimum (minimumSpinner.getSelection ()); + } + + /** + * Sets the page increment of the "Example" widgets. + */ + void setWidgetPageIncrement () { + scale1.setPageIncrement (pageIncrementSpinner.getSelection ()); + } + + /** + * Sets the selection of the "Example" widgets. + */ + void setWidgetSelection () { + scale1.setSelection (selectionSpinner.getSelection ()); + } +} diff -r e49a0f04c689 -r e32a6d7506c9 dwtexamples/controlexample/ScrollableTab.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dwtexamples/controlexample/ScrollableTab.d Mon Jan 21 01:40:01 2008 +0100 @@ -0,0 +1,65 @@ +/******************************************************************************* + * Copyright (c) 2000, 2007 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +module dwtexamples.controlexample.ScrollableTab; + + + +import dwt.DWT; +import dwt.widgets.Button; +import dwt.widgets.Widget; + +abstract class ScrollableTab : Tab { + /* Style widgets added to the "Style" group */ + Button singleButton, multiButton, horizontalButton, verticalButton; + + /** + * Creates the Tab within a given instance of ControlExample. + */ + this(ControlExample instance) { + super(instance); + } + + /** + * Creates the "Style" group. + */ + void createStyleGroup () { + super.createStyleGroup (); + + /* Create the extra widgets */ + singleButton = new Button (styleGroup, DWT.RADIO); + singleButton.setText ("DWT.SINGLE"); + multiButton = new Button (styleGroup, DWT.RADIO); + multiButton.setText ("DWT.MULTI"); + horizontalButton = new Button (styleGroup, DWT.CHECK); + horizontalButton.setText ("DWT.H_SCROLL"); + horizontalButton.setSelection(true); + verticalButton = new Button (styleGroup, DWT.CHECK); + verticalButton.setText ("DWT.V_SCROLL"); + verticalButton.setSelection(true); + borderButton = new Button (styleGroup, DWT.CHECK); + borderButton.setText ("DWT.BORDER"); + } + + /** + * Sets the state of the "Example" widgets. + */ + void setExampleWidgetState () { + super.setExampleWidgetState (); + Widget [] widgets = getExampleWidgets (); + if (widgets.length !is 0){ + singleButton.setSelection ((widgets [0].getStyle () & DWT.SINGLE) !is 0); + multiButton.setSelection ((widgets [0].getStyle () & DWT.MULTI) !is 0); + horizontalButton.setSelection ((widgets [0].getStyle () & DWT.H_SCROLL) !is 0); + verticalButton.setSelection ((widgets [0].getStyle () & DWT.V_SCROLL) !is 0); + borderButton.setSelection ((widgets [0].getStyle () & DWT.BORDER) !is 0); + } + } +} diff -r e49a0f04c689 -r e32a6d7506c9 dwtexamples/controlexample/ShellTab.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dwtexamples/controlexample/ShellTab.d Mon Jan 21 01:40:01 2008 +0100 @@ -0,0 +1,306 @@ +/******************************************************************************* + * Copyright (c) 2000, 2006 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +module dwtexamples.controlexample.ShellTab; + + + +import dwt.DWT; +import dwt.events.SelectionAdapter; +import dwt.events.SelectionEvent; +import dwt.events.SelectionListener; +import dwt.layout.GridData; +import dwt.layout.GridLayout; +import dwt.widgets.Button; +import dwt.widgets.Event; +import dwt.widgets.Group; +import dwt.widgets.Listener; +import dwt.widgets.Shell; + +import dwtexamples.controlexample.Tab; +import dwtexamples.controlexample.ControlExample; + + +class ShellTab : Tab { + /* Style widgets added to the "Style" groups, and "Other" group */ + Button noParentButton, parentButton; + Button noTrimButton, closeButton, titleButton, minButton, maxButton, borderButton, resizeButton, onTopButton, toolButton; + Button createButton, closeAllButton; + Button modelessButton, primaryModalButton, applicationModalButton, systemModalButton; + Button imageButton; + Group parentStyleGroup, modalStyleGroup; + + /* Variables used to track the open shells */ + int shellCount = 0; + Shell [] shells = new Shell [4]; + + /** + * Creates the Tab within a given instance of ControlExample. + */ + this(ControlExample instance) { + super(instance); + } + + /** + * Close all the example shells. + */ + void closeAllShells() { + for (int i = 0; i= shells.length) { + Shell [] newShells = new Shell [shells.length + 4]; + System.arraycopy (shells, 0, newShells, 0, shells.length); + shells = newShells; + } + + /* Compute the shell style */ + int style = DWT.NONE; + if (noTrimButton.getSelection()) style |= DWT.NO_TRIM; + if (closeButton.getSelection()) style |= DWT.CLOSE; + if (titleButton.getSelection()) style |= DWT.TITLE; + if (minButton.getSelection()) style |= DWT.MIN; + if (maxButton.getSelection()) style |= DWT.MAX; + if (borderButton.getSelection()) style |= DWT.BORDER; + if (resizeButton.getSelection()) style |= DWT.RESIZE; + if (onTopButton.getSelection()) style |= DWT.ON_TOP; + if (toolButton.getSelection()) style |= DWT.TOOL; + if (modelessButton.getSelection()) style |= DWT.MODELESS; + if (primaryModalButton.getSelection()) style |= DWT.PRIMARY_MODAL; + if (applicationModalButton.getSelection()) style |= DWT.APPLICATION_MODAL; + if (systemModalButton.getSelection()) style |= DWT.SYSTEM_MODAL; + + /* Create the shell with or without a parent */ + if (noParentButton.getSelection ()) { + shells [shellCount] = new Shell (style); + } else { + shells [shellCount] = new Shell (shell, style); + } + final Shell currentShell = shells [shellCount]; + Button button = new Button(currentShell, DWT.PUSH); + button.setBounds(20, 20, 120, 30); + Button closeButton = new Button(currentShell, DWT.PUSH); + closeButton.setBounds(160, 20, 120, 30); + closeButton.setText(ControlExample.getResourceString("Close")); + closeButton.addListener(DWT.Selection, new class() Listener { + public void handleEvent(Event event) { + currentShell.dispose(); + } + }); + + /* Set the size, title, and image, and open the shell */ + currentShell.setSize (300, 100); + currentShell.setText (ControlExample.getResourceString("Title") + shellCount); + if (imageButton.getSelection()) currentShell.setImage(instance.images[ControlExample.ciTarget]); + if (backgroundImageButton.getSelection()) currentShell.setBackgroundImage(instance.images[ControlExample.ciBackground]); + hookListeners (currentShell); + currentShell.open (); + shellCount++; + } + + /** + * Creates the "Control" group. + */ + void createControlGroup () { + /* + * Create the "Control" group. This is the group on the + * right half of each example tab. It consists of the + * style group, the 'other' group and the size group. + */ + controlGroup = new Group (tabFolderPage, DWT.NONE); + controlGroup.setLayout (new GridLayout (2, true)); + controlGroup.setLayoutData (new GridData (GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_FILL)); + controlGroup.setText (ControlExample.getResourceString("Parameters")); + + /* Create a group for the decoration style controls */ + styleGroup = new Group (controlGroup, DWT.NONE); + styleGroup.setLayout (new GridLayout ()); + styleGroup.setLayoutData (new GridData (DWT.FILL, DWT.FILL, false, false, 1, 3)); + styleGroup.setText (ControlExample.getResourceString("Decoration_Styles")); + + /* Create a group for the modal style controls */ + modalStyleGroup = new Group (controlGroup, DWT.NONE); + modalStyleGroup.setLayout (new GridLayout ()); + modalStyleGroup.setLayoutData (new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_FILL)); + modalStyleGroup.setText (ControlExample.getResourceString("Modal_Styles")); + + /* Create a group for the 'other' controls */ + otherGroup = new Group (controlGroup, DWT.NONE); + otherGroup.setLayout (new GridLayout ()); + otherGroup.setLayoutData (new GridData(DWT.FILL, DWT.FILL, false, false)); + otherGroup.setText (ControlExample.getResourceString("Other")); + + /* Create a group for the parent style controls */ + parentStyleGroup = new Group (controlGroup, DWT.NONE); + parentStyleGroup.setLayout (new GridLayout ()); + GridData gridData = new GridData(GridData.HORIZONTAL_ALIGN_FILL); + parentStyleGroup.setLayoutData (gridData); + parentStyleGroup.setText (ControlExample.getResourceString("Parent")); + } + + /** + * Creates the "Control" widget children. + */ + void createControlWidgets () { + + /* Create the parent style buttons */ + noParentButton = new Button (parentStyleGroup, DWT.RADIO); + noParentButton.setText (ControlExample.getResourceString("No_Parent")); + parentButton = new Button (parentStyleGroup, DWT.RADIO); + parentButton.setText (ControlExample.getResourceString("Parent")); + + /* Create the decoration style buttons */ + noTrimButton = new Button (styleGroup, DWT.CHECK); + noTrimButton.setText ("DWT.NO_TRIM"); + closeButton = new Button (styleGroup, DWT.CHECK); + closeButton.setText ("DWT.CLOSE"); + titleButton = new Button (styleGroup, DWT.CHECK); + titleButton.setText ("DWT.TITLE"); + minButton = new Button (styleGroup, DWT.CHECK); + minButton.setText ("DWT.MIN"); + maxButton = new Button (styleGroup, DWT.CHECK); + maxButton.setText ("DWT.MAX"); + borderButton = new Button (styleGroup, DWT.CHECK); + borderButton.setText ("DWT.BORDER"); + resizeButton = new Button (styleGroup, DWT.CHECK); + resizeButton.setText ("DWT.RESIZE"); + onTopButton = new Button (styleGroup, DWT.CHECK); + onTopButton.setText ("DWT.ON_TOP"); + toolButton = new Button (styleGroup, DWT.CHECK); + toolButton.setText ("DWT.TOOL"); + + /* Create the modal style buttons */ + modelessButton = new Button (modalStyleGroup, DWT.RADIO); + modelessButton.setText ("DWT.MODELESS"); + primaryModalButton = new Button (modalStyleGroup, DWT.RADIO); + primaryModalButton.setText ("DWT.PRIMARY_MODAL"); + applicationModalButton = new Button (modalStyleGroup, DWT.RADIO); + applicationModalButton.setText ("DWT.APPLICATION_MODAL"); + systemModalButton = new Button (modalStyleGroup, DWT.RADIO); + systemModalButton.setText ("DWT.SYSTEM_MODAL"); + + /* Create the 'other' buttons */ + imageButton = new Button (otherGroup, DWT.CHECK); + imageButton.setText (ControlExample.getResourceString("Image")); + backgroundImageButton = new Button(otherGroup, DWT.CHECK); + backgroundImageButton.setText(ControlExample.getResourceString("BackgroundImage")); + + /* Create the "create" and "closeAll" buttons */ + createButton = new Button (controlGroup, DWT.NONE); + GridData gridData = new GridData (GridData.HORIZONTAL_ALIGN_END); + createButton.setLayoutData (gridData); + createButton.setText (ControlExample.getResourceString("Create_Shell")); + closeAllButton = new Button (controlGroup, DWT.NONE); + gridData = new GridData (GridData.HORIZONTAL_ALIGN_BEGINNING); + closeAllButton.setText (ControlExample.getResourceString("Close_All_Shells")); + closeAllButton.setLayoutData (gridData); + + /* Add the listeners */ + createButton.addSelectionListener(new class() SelectionAdapter { + public void widgetSelected(SelectionEvent e) { + createButtonSelected(e); + } + }); + closeAllButton.addSelectionListener(new class() SelectionAdapter { + public void widgetSelected(SelectionEvent e) { + closeAllShells (); + } + }); + SelectionListener decorationButtonListener = new class() SelectionAdapter { + public void widgetSelected(SelectionEvent event) { + decorationButtonSelected(event); + } + }; + noTrimButton.addSelectionListener (decorationButtonListener); + closeButton.addSelectionListener (decorationButtonListener); + titleButton.addSelectionListener (decorationButtonListener); + minButton.addSelectionListener (decorationButtonListener); + maxButton.addSelectionListener (decorationButtonListener); + borderButton.addSelectionListener (decorationButtonListener); + resizeButton.addSelectionListener (decorationButtonListener); + applicationModalButton.addSelectionListener (decorationButtonListener); + systemModalButton.addSelectionListener (decorationButtonListener); + + /* Set the default state */ + noParentButton.setSelection (true); + modelessButton.setSelection (true); + backgroundImageButton.setSelection(false); + } + + /** + * Handle a decoration button selection event. + * + * @param event org.eclipse.swt.events.SelectionEvent + */ + public void decorationButtonSelected(SelectionEvent event) { + + /* Make sure if the modal style is DWT.APPLICATION_MODAL or + * DWT.SYSTEM_MODAL the style DWT.CLOSE is also selected. + * This is to make sure the user can close the shell. + */ + Button widget = cast(Button) event.widget; + if (widget is applicationModalButton || widget is systemModalButton) { + if (widget.getSelection()) { + closeButton.setSelection (true); + noTrimButton.setSelection (false); + } + return; + } + if (widget is closeButton) { + if (applicationModalButton.getSelection() || systemModalButton.getSelection()) { + closeButton.setSelection (true); + } + } + /* + * Make sure if the No Trim button is selected then + * all other decoration buttons are deselected. + */ + if (widget.getSelection() && widget !is noTrimButton) { + noTrimButton.setSelection (false); + return; + } + if (widget.getSelection() && widget is noTrimButton) { + if (applicationModalButton.getSelection() || systemModalButton.getSelection()) { + noTrimButton.setSelection (false); + return; + } + closeButton.setSelection (false); + titleButton.setSelection (false); + minButton.setSelection (false); + maxButton.setSelection (false); + borderButton.setSelection (false); + resizeButton.setSelection (false); + return; + } + } + + /** + * Gets the text for the tab folder item. + */ + char[] getTabText () { + return "Shell"; + } +} diff -r e49a0f04c689 -r e32a6d7506c9 dwtexamples/controlexample/SliderTab.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dwtexamples/controlexample/SliderTab.d Mon Jan 21 01:40:01 2008 +0100 @@ -0,0 +1,279 @@ +/******************************************************************************* + * Copyright (c) 2000, 2007 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +module dwtexamples.controlexample.SliderTab; + + + +import dwt.DWT; +import dwt.events.SelectionAdapter; +import dwt.events.SelectionEvent; +import dwt.layout.GridData; +import dwt.layout.GridLayout; +import dwt.widgets.Group; +import dwt.widgets.Slider; +import dwt.widgets.Spinner; +import dwt.widgets.Widget; + +class SliderTab : RangeTab { + /* Example widgets and groups that contain them */ + Slider slider1; + Group sliderGroup; + + /* Spinner widgets added to the "Control" group */ + Spinner incrementSpinner, pageIncrementSpinner, thumbSpinner; + + /** + * Creates the Tab within a given instance of ControlExample. + */ + this(ControlExample instance) { + super(instance); + } + + /** + * Creates the "Control" widget children. + */ + void createControlWidgets () { + super.createControlWidgets (); + createThumbGroup (); + createIncrementGroup (); + createPageIncrementGroup (); + } + + /** + * Creates the "Example" group. + */ + void createExampleGroup () { + super.createExampleGroup (); + + /* Create a group for the slider */ + sliderGroup = new Group (exampleGroup, DWT.NONE); + sliderGroup.setLayout (new GridLayout ()); + sliderGroup.setLayoutData (new GridData (DWT.FILL, DWT.FILL, true, true)); + sliderGroup.setText ("Slider"); + } + + /** + * Creates the "Example" widgets. + */ + void createExampleWidgets () { + + /* Compute the widget style */ + int style = getDefaultStyle(); + if (horizontalButton.getSelection ()) style |= DWT.HORIZONTAL; + if (verticalButton.getSelection ()) style |= DWT.VERTICAL; + if (borderButton.getSelection ()) style |= DWT.BORDER; + + /* Create the example widgets */ + slider1 = new Slider(sliderGroup, style); + } + + /** + * Create a group of widgets to control the increment + * attribute of the example widget. + */ + void createIncrementGroup() { + + /* Create the group */ + Group incrementGroup = new Group (controlGroup, DWT.NONE); + incrementGroup.setLayout (new GridLayout ()); + incrementGroup.setText (ControlExample.getResourceString("Increment")); + incrementGroup.setLayoutData (new GridData (GridData.FILL_HORIZONTAL)); + + /* Create the Spinner widget */ + incrementSpinner = new Spinner (incrementGroup, DWT.BORDER); + incrementSpinner.setMaximum (100000); + incrementSpinner.setSelection (getDefaultIncrement()); + incrementSpinner.setPageIncrement (100); + incrementSpinner.setIncrement (1); + incrementSpinner.setLayoutData (new GridData (DWT.FILL, DWT.CENTER, true, false)); + + /* Add the listeners */ + incrementSpinner.addSelectionListener (new SelectionAdapter () { + public void widgetSelected (SelectionEvent e) { + setWidgetIncrement (); + } + }); + } + + /** + * Create a group of widgets to control the page increment + * attribute of the example widget. + */ + void createPageIncrementGroup() { + + /* Create the group */ + Group pageIncrementGroup = new Group (controlGroup, DWT.NONE); + pageIncrementGroup.setLayout (new GridLayout ()); + pageIncrementGroup.setText (ControlExample.getResourceString("Page_Increment")); + pageIncrementGroup.setLayoutData (new GridData (GridData.FILL_HORIZONTAL)); + + /* Create the Spinner widget */ + pageIncrementSpinner = new Spinner (pageIncrementGroup, DWT.BORDER); + pageIncrementSpinner.setMaximum (100000); + pageIncrementSpinner.setSelection (getDefaultPageIncrement()); + pageIncrementSpinner.setPageIncrement (100); + pageIncrementSpinner.setIncrement (1); + pageIncrementSpinner.setLayoutData (new GridData (DWT.FILL, DWT.CENTER, true, false)); + + /* Add the listeners */ + pageIncrementSpinner.addSelectionListener (new SelectionAdapter () { + public void widgetSelected (SelectionEvent event) { + setWidgetPageIncrement (); + } + }); + } + + /** + * Create a group of widgets to control the thumb + * attribute of the example widget. + */ + void createThumbGroup() { + + /* Create the group */ + Group thumbGroup = new Group (controlGroup, DWT.NONE); + thumbGroup.setLayout (new GridLayout ()); + thumbGroup.setText (ControlExample.getResourceString("Thumb")); + thumbGroup.setLayoutData (new GridData (GridData.FILL_HORIZONTAL)); + + /* Create the Spinner widget */ + thumbSpinner = new Spinner (thumbGroup, DWT.BORDER); + thumbSpinner.setMaximum (100000); + thumbSpinner.setSelection (getDefaultThumb()); + thumbSpinner.setPageIncrement (100); + thumbSpinner.setIncrement (1); + thumbSpinner.setLayoutData (new GridData (DWT.FILL, DWT.CENTER, true, false)); + + /* Add the listeners */ + thumbSpinner.addSelectionListener (new SelectionAdapter () { + public void widgetSelected (SelectionEvent event) { + setWidgetThumb (); + } + }); + } + + /** + * Gets the "Example" widget children. + */ + Widget [] getExampleWidgets () { + return new Widget [] {slider1}; + } + + /** + * 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[] {"Selection", "ToolTipText"}; + } + + /** + * Gets the text for the tab folder item. + */ + String getTabText () { + return "Slider"; + } + + /** + * Sets the state of the "Example" widgets. + */ + void setExampleWidgetState () { + super.setExampleWidgetState (); + if (!instance.startup) { + setWidgetIncrement (); + setWidgetPageIncrement (); + setWidgetThumb (); + } + } + + /** + * Gets the default maximum of the "Example" widgets. + */ + int getDefaultMaximum () { + return slider1.getMaximum(); + } + + /** + * Gets the default minimim of the "Example" widgets. + */ + int getDefaultMinimum () { + return slider1.getMinimum(); + } + + /** + * Gets the default selection of the "Example" widgets. + */ + int getDefaultSelection () { + return slider1.getSelection(); + } + + /** + * Gets the default increment of the "Example" widgets. + */ + int getDefaultIncrement () { + return slider1.getIncrement(); + } + + /** + * Gets the default page increment of the "Example" widgets. + */ + int getDefaultPageIncrement () { + return slider1.getPageIncrement(); + } + + /** + * Gets the default thumb of the "Example" widgets. + */ + int getDefaultThumb () { + return slider1.getThumb(); + } + + /** + * Sets the increment of the "Example" widgets. + */ + void setWidgetIncrement () { + slider1.setIncrement (incrementSpinner.getSelection ()); + } + + /** + * Sets the minimim of the "Example" widgets. + */ + void setWidgetMaximum () { + slider1.setMaximum (maximumSpinner.getSelection ()); + } + + /** + * Sets the minimim of the "Example" widgets. + */ + void setWidgetMinimum () { + slider1.setMinimum (minimumSpinner.getSelection ()); + } + + /** + * Sets the page increment of the "Example" widgets. + */ + void setWidgetPageIncrement () { + slider1.setPageIncrement (pageIncrementSpinner.getSelection ()); + } + + /** + * Sets the selection of the "Example" widgets. + */ + void setWidgetSelection () { + slider1.setSelection (selectionSpinner.getSelection ()); + } + + /** + * Sets the thumb of the "Example" widgets. + */ + void setWidgetThumb () { + slider1.setThumb (thumbSpinner.getSelection ()); + } +} diff -r e49a0f04c689 -r e32a6d7506c9 dwtexamples/controlexample/SpinnerTab.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dwtexamples/controlexample/SpinnerTab.d Mon Jan 21 01:40:01 2008 +0100 @@ -0,0 +1,327 @@ +/******************************************************************************* + * Copyright (c) 2000, 2007 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +module dwtexamples.controlexample.SpinnerTab; + + + +import dwt.DWT; +import dwt.events.ControlAdapter; +import dwt.events.ControlEvent; +import dwt.events.SelectionAdapter; +import dwt.events.SelectionEvent; +import dwt.layout.GridData; +import dwt.layout.GridLayout; +import dwt.widgets.Button; +import dwt.widgets.Composite; +import dwt.widgets.Group; +import dwt.widgets.Spinner; +import dwt.widgets.TabFolder; +import dwt.widgets.Widget; + +class SpinnerTab : RangeTab { + + /* Example widgets and groups that contain them */ + Spinner spinner1; + Group spinnerGroup; + + /* Style widgets added to the "Style" group */ + Button readOnlyButton, wrapButton; + + /* Spinner widgets added to the "Control" group */ + Spinner incrementSpinner, pageIncrementSpinner, digitsSpinner; + + /** + * Creates the Tab within a given instance of ControlExample. + */ + this(ControlExample instance) { + super(instance); + } + + /** + * Creates the "Control" widget children. + */ + void createControlWidgets () { + super.createControlWidgets (); + createIncrementGroup (); + createPageIncrementGroup (); + createDigitsGroup (); + } + + /** + * Creates the "Example" group. + */ + void createExampleGroup () { + super.createExampleGroup (); + + /* Create a group for the spinner */ + spinnerGroup = new Group (exampleGroup, DWT.NONE); + spinnerGroup.setLayout (new GridLayout ()); + spinnerGroup.setLayoutData (new GridData (DWT.FILL, DWT.FILL, true, true)); + spinnerGroup.setText ("Spinner"); + } + + /** + * Creates the "Example" widgets. + */ + void createExampleWidgets () { + + /* Compute the widget style */ + int style = getDefaultStyle(); + if (readOnlyButton.getSelection ()) style |= DWT.READ_ONLY; + if (borderButton.getSelection ()) style |= DWT.BORDER; + if (wrapButton.getSelection ()) style |= DWT.WRAP; + + /* Create the example widgets */ + spinner1 = new Spinner (spinnerGroup, style); + } + + /** + * Create a group of widgets to control the increment + * attribute of the example widget. + */ + void createIncrementGroup() { + + /* Create the group */ + Group incrementGroup = new Group (controlGroup, DWT.NONE); + incrementGroup.setLayout (new GridLayout ()); + incrementGroup.setText (ControlExample.getResourceString("Increment")); + incrementGroup.setLayoutData (new GridData (GridData.FILL_HORIZONTAL)); + + /* Create the Spinner widget */ + incrementSpinner = new Spinner (incrementGroup, DWT.BORDER); + incrementSpinner.setMaximum (100000); + incrementSpinner.setSelection (getDefaultIncrement()); + incrementSpinner.setPageIncrement (100); + incrementSpinner.setIncrement (1); + incrementSpinner.setLayoutData (new GridData (DWT.FILL, DWT.CENTER, true, false)); + + /* Add the listeners */ + incrementSpinner.addSelectionListener (new SelectionAdapter () { + public void widgetSelected (SelectionEvent e) { + setWidgetIncrement (); + } + }); + } + + /** + * Create a group of widgets to control the page increment + * attribute of the example widget. + */ + void createPageIncrementGroup() { + + /* Create the group */ + Group pageIncrementGroup = new Group (controlGroup, DWT.NONE); + pageIncrementGroup.setLayout (new GridLayout ()); + pageIncrementGroup.setText (ControlExample.getResourceString("Page_Increment")); + pageIncrementGroup.setLayoutData (new GridData (GridData.FILL_HORIZONTAL)); + + /* Create the Spinner widget */ + pageIncrementSpinner = new Spinner (pageIncrementGroup, DWT.BORDER); + pageIncrementSpinner.setMaximum (100000); + pageIncrementSpinner.setSelection (getDefaultPageIncrement()); + pageIncrementSpinner.setPageIncrement (100); + pageIncrementSpinner.setIncrement (1); + pageIncrementSpinner.setLayoutData (new GridData (DWT.FILL, DWT.CENTER, true, false)); + + /* Add the listeners */ + pageIncrementSpinner.addSelectionListener (new SelectionAdapter () { + public void widgetSelected (SelectionEvent event) { + setWidgetPageIncrement (); + } + }); + } + + /** + * Create a group of widgets to control the digits + * attribute of the example widget. + */ + void createDigitsGroup() { + + /* Create the group */ + Group digitsGroup = new Group (controlGroup, DWT.NONE); + digitsGroup.setLayout (new GridLayout ()); + digitsGroup.setText (ControlExample.getResourceString("Digits")); + digitsGroup.setLayoutData (new GridData (GridData.FILL_HORIZONTAL)); + + /* Create the Spinner widget */ + digitsSpinner = new Spinner (digitsGroup, DWT.BORDER); + digitsSpinner.setMaximum (100000); + digitsSpinner.setSelection (getDefaultDigits()); + digitsSpinner.setPageIncrement (100); + digitsSpinner.setIncrement (1); + digitsSpinner.setLayoutData (new GridData (DWT.FILL, DWT.CENTER, true, false)); + + /* Add the listeners */ + digitsSpinner.addSelectionListener (new SelectionAdapter () { + public void widgetSelected (SelectionEvent e) { + setWidgetDigits (); + } + }); + } + + /** + * Creates the tab folder page. + * + * @param tabFolder org.eclipse.swt.widgets.TabFolder + * @return the new page for the tab folder + */ + Composite createTabFolderPage (TabFolder tabFolder) { + super.createTabFolderPage (tabFolder); + + /* + * Add a resize listener to the tabFolderPage so that + * if the user types into the example widget to change + * its preferred size, and then resizes the shell, we + * recalculate the preferred size correctly. + */ + tabFolderPage.addControlListener(new ControlAdapter() { + public void controlResized(ControlEvent e) { + setExampleWidgetSize (); + } + }); + + return tabFolderPage; + } + + /** + * Creates the "Style" group. + */ + void createStyleGroup () { + orientationButtons = false; + super.createStyleGroup (); + + /* Create the extra widgets */ + readOnlyButton = new Button (styleGroup, DWT.CHECK); + readOnlyButton.setText ("DWT.READ_ONLY"); + wrapButton = new Button (styleGroup, DWT.CHECK); + wrapButton.setText ("DWT.WRAP"); + } + + /** + * Gets the "Example" widget children. + */ + Widget [] getExampleWidgets () { + return new Widget [] {spinner1}; + } + + /** + * 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[] {"Selection", "ToolTipText"}; + } + + /** + * Gets the text for the tab folder item. + */ + String getTabText () { + return "Spinner"; + } + + /** + * Sets the state of the "Example" widgets. + */ + void setExampleWidgetState () { + super.setExampleWidgetState (); + readOnlyButton.setSelection ((spinner1.getStyle () & DWT.READ_ONLY) !is 0); + wrapButton.setSelection ((spinner1.getStyle () & DWT.WRAP) !is 0); + if (!instance.startup) { + setWidgetIncrement (); + setWidgetPageIncrement (); + setWidgetDigits (); + } + } + + /** + * Gets the default maximum of the "Example" widgets. + */ + int getDefaultMaximum () { + return spinner1.getMaximum(); + } + + /** + * Gets the default minimim of the "Example" widgets. + */ + int getDefaultMinimum () { + return spinner1.getMinimum(); + } + + /** + * Gets the default selection of the "Example" widgets. + */ + int getDefaultSelection () { + return spinner1.getSelection(); + } + + /** + * Gets the default increment of the "Example" widgets. + */ + int getDefaultIncrement () { + return spinner1.getIncrement(); + } + + /** + * Gets the default page increment of the "Example" widgets. + */ + int getDefaultPageIncrement () { + return spinner1.getPageIncrement(); + } + + /** + * Gets the default digits of the "Example" widgets. + */ + int getDefaultDigits () { + return spinner1.getDigits(); + } + + /** + * Sets the increment of the "Example" widgets. + */ + void setWidgetIncrement () { + spinner1.setIncrement (incrementSpinner.getSelection ()); + } + + /** + * Sets the minimim of the "Example" widgets. + */ + void setWidgetMaximum () { + spinner1.setMaximum (maximumSpinner.getSelection ()); + } + + /** + * Sets the minimim of the "Example" widgets. + */ + void setWidgetMinimum () { + spinner1.setMinimum (minimumSpinner.getSelection ()); + } + + /** + * Sets the page increment of the "Example" widgets. + */ + void setWidgetPageIncrement () { + spinner1.setPageIncrement (pageIncrementSpinner.getSelection ()); + } + + /** + * Sets the digits of the "Example" widgets. + */ + void setWidgetDigits () { + spinner1.setDigits (digitsSpinner.getSelection ()); + } + + /** + * Sets the selection of the "Example" widgets. + */ + void setWidgetSelection () { + spinner1.setSelection (selectionSpinner.getSelection ()); + } +} diff -r e49a0f04c689 -r e32a6d7506c9 dwtexamples/controlexample/StyledTextTab.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dwtexamples/controlexample/StyledTextTab.d Mon Jan 21 01:40:01 2008 +0100 @@ -0,0 +1,350 @@ +/******************************************************************************* + * Copyright (c) 2000, 2007 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +module dwtexamples.controlexample.StyledTextTab; + + +import java.io.IOException; +import java.io.InputStream; + + +import dwt.DWT; +import dwt.custom.StyleRange; +import dwt.custom.StyledText; +import dwt.events.ControlAdapter; +import dwt.events.ControlEvent; +import dwt.events.DisposeEvent; +import dwt.events.DisposeListener; +import dwt.events.SelectionAdapter; +import dwt.events.SelectionEvent; +import dwt.events.SelectionListener; +import dwt.graphics.Color; +import dwt.graphics.Image; +import dwt.graphics.ImageData; +import dwt.graphics.Point; +import dwt.layout.GridData; +import dwt.layout.GridLayout; +import dwt.widgets.Button; +import dwt.widgets.Composite; +import dwt.widgets.Display; +import dwt.widgets.Group; +import dwt.widgets.Label; +import dwt.widgets.TabFolder; +import dwt.widgets.Widget; + +class StyledTextTab : ScrollableTab { + /* Example widgets and groups that contain them */ + StyledText styledText; + Group styledTextGroup, styledTextStyleGroup; + + /* Style widgets added to the "Style" group */ + Button wrapButton, readOnlyButton, fullSelectionButton; + + /* Buttons for adding StyleRanges to StyledText */ + Button boldButton, italicButton, redButton, yellowButton, underlineButton, strikeoutButton; + Image boldImage, italicImage, redImage, yellowImage, underlineImage, strikeoutImage; + + /* Variables for saving state. */ + String text; + StyleRange[] styleRanges; + + /** + * Creates the Tab within a given instance of ControlExample. + */ + this(ControlExample instance) { + super(instance); + } + + /** + * Creates a bitmap image. + */ + Image createBitmapImage (Display display, String name) { + InputStream sourceStream = ControlExample.class.getResourceAsStream (name + ".bmp"); + InputStream maskStream = ControlExample.class.getResourceAsStream (name + "_mask.bmp"); + ImageData source = new ImageData (sourceStream); + ImageData mask = new ImageData (maskStream); + Image result = new Image (display, source, mask); + try { + sourceStream.close (); + maskStream.close (); + } catch (IOException e) { + e.printStackTrace (); + } + return result; + } + + /** + * Creates the "Control" widget children. + */ + void createControlWidgets () { + super.createControlWidgets (); + + /* Add a group for modifying the StyledText widget */ + createStyledTextStyleGroup (); + } + + /** + * Creates the "Example" group. + */ + void createExampleGroup () { + super.createExampleGroup (); + + /* Create a group for the styled text widget */ + styledTextGroup = new Group (exampleGroup, DWT.NONE); + styledTextGroup.setLayout (new GridLayout ()); + styledTextGroup.setLayoutData (new GridData (DWT.FILL, DWT.FILL, true, true)); + styledTextGroup.setText ("StyledText"); + } + + /** + * Creates the "Example" widgets. + */ + void createExampleWidgets () { + + /* Compute the widget style */ + int style = getDefaultStyle(); + if (singleButton.getSelection ()) style |= DWT.SINGLE; + if (multiButton.getSelection ()) style |= DWT.MULTI; + if (horizontalButton.getSelection ()) style |= DWT.H_SCROLL; + if (verticalButton.getSelection ()) style |= DWT.V_SCROLL; + if (wrapButton.getSelection ()) style |= DWT.WRAP; + if (readOnlyButton.getSelection ()) style |= DWT.READ_ONLY; + if (borderButton.getSelection ()) style |= DWT.BORDER; + if (fullSelectionButton.getSelection ()) style |= DWT.FULL_SELECTION; + + /* Create the example widgets */ + styledText = new StyledText (styledTextGroup, style); + styledText.setText (ControlExample.getResourceString("Example_string")); + styledText.append ("\n"); + styledText.append (ControlExample.getResourceString("One_Two_Three")); + + if (text !is null) { + styledText.setText(text); + text = null; + } + if (styleRanges !is null) { + styledText.setStyleRanges(styleRanges); + styleRanges = null; + } + } + + /** + * Creates the "Style" group. + */ + void createStyleGroup() { + super.createStyleGroup(); + + /* Create the extra widgets */ + wrapButton = new Button (styleGroup, DWT.CHECK); + wrapButton.setText ("DWT.WRAP"); + readOnlyButton = new Button (styleGroup, DWT.CHECK); + readOnlyButton.setText ("DWT.READ_ONLY"); + fullSelectionButton = new Button (styleGroup, DWT.CHECK); + fullSelectionButton.setText ("DWT.FULL_SELECTION"); + } + + /** + * Creates the "StyledText Style" group. + */ + void createStyledTextStyleGroup () { + styledTextStyleGroup = new Group (controlGroup, DWT.NONE); + styledTextStyleGroup.setText (ControlExample.getResourceString ("StyledText_Styles")); + styledTextStyleGroup.setLayout (new GridLayout(6, false)); + GridData data = new GridData (GridData.HORIZONTAL_ALIGN_FILL); + data.horizontalSpan = 2; + styledTextStyleGroup.setLayoutData (data); + + /* Get images */ + boldImage = createBitmapImage (display, "bold"); + italicImage = createBitmapImage (display, "italic"); + redImage = createBitmapImage (display, "red"); + yellowImage = createBitmapImage (display, "yellow"); + underlineImage = createBitmapImage (display, "underline"); + strikeoutImage = createBitmapImage (display, "strikeout"); + + /* Create controls to modify the StyledText */ + Label label = new Label (styledTextStyleGroup, DWT.NONE); + label.setText (ControlExample.getResourceString ("StyledText_Style_Instructions")); + label.setLayoutData(new GridData(DWT.FILL, DWT.CENTER, false, false, 6, 1)); + label = new Label (styledTextStyleGroup, DWT.NONE); + label.setText (ControlExample.getResourceString ("Bold")); + label.setLayoutData(new GridData(DWT.END, DWT.CENTER, true, false)); + boldButton = new Button (styledTextStyleGroup, DWT.PUSH); + boldButton.setImage (boldImage); + label = new Label (styledTextStyleGroup, DWT.NONE); + label.setText (ControlExample.getResourceString ("Underline")); + label.setLayoutData(new GridData(DWT.END, DWT.CENTER, true, false)); + underlineButton = new Button (styledTextStyleGroup, DWT.PUSH); + underlineButton.setImage (underlineImage); + label = new Label (styledTextStyleGroup, DWT.NONE); + label.setText (ControlExample.getResourceString ("Foreground_Style")); + label.setLayoutData(new GridData(DWT.END, DWT.CENTER, true, false)); + redButton = new Button (styledTextStyleGroup, DWT.PUSH); + redButton.setImage (redImage); + label = new Label (styledTextStyleGroup, DWT.NONE); + label.setText (ControlExample.getResourceString ("Italic")); + label.setLayoutData(new GridData(DWT.END, DWT.CENTER, true, false)); + italicButton = new Button (styledTextStyleGroup, DWT.PUSH); + italicButton.setImage (italicImage); + label = new Label (styledTextStyleGroup, DWT.NONE); + label.setText (ControlExample.getResourceString ("Strikeout")); + label.setLayoutData(new GridData(DWT.END, DWT.CENTER, true, false)); + strikeoutButton = new Button (styledTextStyleGroup, DWT.PUSH); + strikeoutButton.setImage (strikeoutImage); + label = new Label (styledTextStyleGroup, DWT.NONE); + label.setText (ControlExample.getResourceString ("Background_Style")); + label.setLayoutData(new GridData(DWT.END, DWT.CENTER, true, false)); + yellowButton = new Button (styledTextStyleGroup, DWT.PUSH); + yellowButton.setImage (yellowImage); + SelectionListener styleListener = new SelectionAdapter () { + public void widgetSelected (SelectionEvent e) { + Point sel = styledText.getSelectionRange(); + if ((sel is null) || (sel.y is 0)) return; + StyleRange style; + for (int i = sel.x; iTab is the abstract superclass of every page + * in the example's tab folder. Each page in the tab folder + * describes a control. + * + * A Tab itself is not a control but instead provides a + * hierarchy with which to share code that is common to + * every page in the folder. + * + * A typical page in a Tab contains a two column composite. + * The left column contains the "Example" group. The right + * column contains "Control" group. The "Control" group + * contains controls that allow the user to interact with + * the example control. The "Control" group typically + * contains a "Style", "Other" and "Size" group. Subclasses + * can override these defaults to augment a group or stop + * a group from being created. + */ + struct EventName { + char[] name; + int id; + } +abstract class Tab { + Shell shell; + Display display; + + /* Common control buttons */ + Button borderButton, enabledButton, visibleButton, backgroundImageButton, popupMenuButton; + Button preferredButton, tooSmallButton, smallButton, largeButton, fillHButton, fillVButton; + + /* Common groups and composites */ + Composite tabFolderPage; + Group exampleGroup, controlGroup, listenersGroup, otherGroup, sizeGroup, styleGroup, colorGroup, backgroundModeGroup; + + /* Controlling instance */ + final ControlExample instance; + + /* Sizing constants for the "Size" group */ + static final int TOO_SMALL_SIZE = 10; + static final int SMALL_SIZE = 50; + static final int LARGE_SIZE = 100; + + /* Right-to-left support */ + static final bool RTL_SUPPORT_ENABLE = false; + Group orientationGroup; + Button rtlButton, ltrButton, defaultOrietationButton; + + /* Controls and resources for the "Colors & Fonts" group */ + static final int IMAGE_SIZE = 12; + static final int FOREGROUND_COLOR = 0; + static final int BACKGROUND_COLOR = 1; + static final int FONT = 2; + Table colorAndFontTable; + ColorDialog colorDialog; + FontDialog fontDialog; + Color foregroundColor, backgroundColor; + Font font; + + /* Controls and resources for the "Background Mode" group */ + Combo backgroundModeCombo; + Button backgroundModeImageButton, backgroundModeColorButton; + + /* Event logging variables and controls */ + Text eventConsole; + bool logging = false; + bool [] eventsFilter; + + /* Set/Get API controls */ + Combo nameCombo; + Label returnTypeLabel; + Button getButton, setButton; + Text setText, getText; + + static EventName[] EVENT_NAMES = [ + {"Activate"[], DWT.Activate}, + {"Arm", DWT.Arm}, + {"Close", DWT.Close}, + {"Collapse", DWT.Collapse}, + {"Deactivate", DWT.Deactivate}, + {"DefaultSelection", DWT.DefaultSelection}, + {"Deiconify", DWT.Deiconify}, + {"Dispose", DWT.Dispose}, + {"DragDetect", DWT.DragDetect}, + {"EraseItem", DWT.EraseItem}, + {"Expand", DWT.Expand}, + {"FocusIn", DWT.FocusIn}, + {"FocusOut", DWT.FocusOut}, + {"HardKeyDown", DWT.HardKeyDown}, + {"HardKeyUp", DWT.HardKeyUp}, + {"Help", DWT.Help}, + {"Hide", DWT.Hide}, + {"Iconify", DWT.Iconify}, + {"KeyDown", DWT.KeyDown}, + {"KeyUp", DWT.KeyUp}, + {"MeasureItem", DWT.MeasureItem}, + {"MenuDetect", DWT.MenuDetect}, + {"Modify", DWT.Modify}, + {"MouseDoubleClick", DWT.MouseDoubleClick}, + {"MouseDown", DWT.MouseDown}, + {"MouseEnter", DWT.MouseEnter}, + {"MouseExit", DWT.MouseExit}, + {"MouseHover", DWT.MouseHover}, + {"MouseMove", DWT.MouseMove}, + {"MouseUp", DWT.MouseUp}, + {"MouseWheel", DWT.MouseWheel}, + {"Move", DWT.Move}, + {"Paint", DWT.Paint}, + {"PaintItem", DWT.PaintItem}, + {"Resize", DWT.Resize}, + {"Selection", DWT.Selection}, + {"SetData", DWT.SetData}, +// {"Settings", DWT.Settings}, // note: this event only goes to Display + {"Show", DWT.Show}, + {"Traverse", DWT.Traverse}, + {"Verify", DWT.Verify} + ]; + + bool samplePopup = false; + + /** + * Creates the Tab within a given instance of ControlExample. + */ + this(ControlExample instance) { + this.instance = instance; + } + + /** + * Creates the "Control" group. The "Control" group + * is typically the right hand column in the tab. + */ + void createControlGroup () { + + /* + * Create the "Control" group. This is the group on the + * right half of each example tab. It consists of the + * "Style" group, the "Other" group and the "Size" group. + */ + controlGroup = new Group (tabFolderPage, DWT.NONE); + controlGroup.setLayout (new GridLayout (2, true)); + controlGroup.setLayoutData (new GridData(DWT.FILL, DWT.FILL, false, false)); + controlGroup.setText (ControlExample.getResourceString("Parameters")); + + /* Create individual groups inside the "Control" group */ + createStyleGroup (); + createOtherGroup (); + createSetGetGroup(); + createSizeGroup (); + createColorAndFontGroup (); + if (RTL_SUPPORT_ENABLE) { + createOrientationGroup (); + } + + /* + * For each Button child in the style group, add a selection + * listener that will recreate the example controls. If the + * style group button is a RADIO button, ensure that the radio + * button is selected before recreating the example controls. + * When the user selects a RADIO button, the current RADIO + * button in the group is deselected and the new RADIO button + * is selected automatically. The listeners are notified for + * both these operations but typically only do work when a RADIO + * button is selected. + */ + SelectionListener selectionListener = new class() SelectionAdapter { + public void widgetSelected (SelectionEvent event) { + if ((event.widget.getStyle () & DWT.RADIO) !is 0) { + if (!(cast(Button) event.widget).getSelection ()) return; + } + recreateExampleWidgets (); + } + }; + Control [] children = styleGroup.getChildren (); + for (int i=0; i 0) oldColor = controls [0].getForeground (); + } + if (oldColor !is null) colorDialog.setRGB(oldColor.getRGB()); // seed dialog with current color + RGB rgb = colorDialog.open(); + if (rgb is null) return; + oldColor = foregroundColor; // save old foreground color to dispose when done + foregroundColor = new Color (display, rgb); + setExampleWidgetForeground (); + if (oldColor !is null) oldColor.dispose (); + } + break; + case BACKGROUND_COLOR: { + Color oldColor = backgroundColor; + if (oldColor is null) { + Control [] controls = getExampleControls (); + if (controls.length > 0) oldColor = controls [0].getBackground (); // seed dialog with current color + } + if (oldColor !is null) colorDialog.setRGB(oldColor.getRGB()); + RGB rgb = colorDialog.open(); + if (rgb is null) return; + oldColor = backgroundColor; // save old background color to dispose when done + backgroundColor = new Color (display, rgb); + setExampleWidgetBackground (); + if (oldColor !is null) oldColor.dispose (); + } + break; + case FONT: { + Font oldFont = font; + if (oldFont is null) { + Control [] controls = getExampleControls (); + if (controls.length > 0) oldFont = controls [0].getFont (); + } + if (oldFont !is null) fontDialog.setFontList(oldFont.getFontData()); // seed dialog with current font + FontData fontData = fontDialog.open (); + if (fontData is null) return; + oldFont = font; // dispose old font when done + font = new Font (display, fontData); + setExampleWidgetFont (); + setExampleWidgetSize (); + if (oldFont !is null) oldFont.dispose (); + } + break; + default: + } + } + + /** + * Creates the "Other" group. This is typically + * a child of the "Control" group. + */ + void createOtherGroup () { + /* Create the group */ + otherGroup = new Group (controlGroup, DWT.NONE); + otherGroup.setLayout (new GridLayout ()); + otherGroup.setLayoutData (new GridData (DWT.FILL, DWT.FILL, false, false)); + otherGroup.setText (ControlExample.getResourceString("Other")); + + /* Create the controls */ + enabledButton = new Button(otherGroup, DWT.CHECK); + enabledButton.setText(ControlExample.getResourceString("Enabled")); + visibleButton = new Button(otherGroup, DWT.CHECK); + visibleButton.setText(ControlExample.getResourceString("Visible")); + backgroundImageButton = new Button(otherGroup, DWT.CHECK); + backgroundImageButton.setText(ControlExample.getResourceString("BackgroundImage")); + popupMenuButton = new Button(otherGroup, DWT.CHECK); + popupMenuButton.setText(ControlExample.getResourceString("PopupMenu")); + + /* Add the listeners */ + enabledButton.addSelectionListener (new class() SelectionAdapter { + public void widgetSelected (SelectionEvent event) { + setExampleWidgetEnabled (); + } + }); + visibleButton.addSelectionListener (new class() SelectionAdapter { + public void widgetSelected (SelectionEvent event) { + setExampleWidgetVisibility (); + } + }); + backgroundImageButton.addSelectionListener (new class() SelectionAdapter { + public void widgetSelected (SelectionEvent event) { + setExampleWidgetBackgroundImage (); + } + }); + popupMenuButton.addSelectionListener (new class() SelectionAdapter { + public void widgetSelected (SelectionEvent event) { + setExampleWidgetPopupMenu (); + } + }); + + /* Set the default state */ + enabledButton.setSelection(true); + visibleButton.setSelection(true); + backgroundImageButton.setSelection(false); + popupMenuButton.setSelection(false); + } + + /** + * Creates the "Background Mode" group. + */ + void createBackgroundModeGroup () { + // note that this method must be called after createExampleWidgets + if (getExampleControls ().length is 0) return; + + /* Create the group */ + backgroundModeGroup = new Group (controlGroup, DWT.NONE); + backgroundModeGroup.setLayout (new GridLayout ()); + backgroundModeGroup.setLayoutData (new GridData (DWT.FILL, DWT.FILL, false, false)); + backgroundModeGroup.setText (ControlExample.getResourceString("Background_Mode")); + + /* Create the controls */ + backgroundModeCombo = new Combo(backgroundModeGroup, DWT.READ_ONLY); + backgroundModeCombo.setItems(["DWT.INHERIT_NONE", "DWT.INHERIT_DEFAULT", "DWT.INHERIT_FORCE"]); + backgroundModeImageButton = new Button(backgroundModeGroup, DWT.CHECK); + backgroundModeImageButton.setText(ControlExample.getResourceString("BackgroundImage")); + backgroundModeColorButton = new Button(backgroundModeGroup, DWT.CHECK); + backgroundModeColorButton.setText(ControlExample.getResourceString("BackgroundColor")); + + /* Add the listeners */ + backgroundModeCombo.addSelectionListener (new class() SelectionAdapter { + public void widgetSelected (SelectionEvent event) { + setExampleGroupBackgroundMode (); + } + }); + backgroundModeImageButton.addSelectionListener (new class() SelectionAdapter { + public void widgetSelected (SelectionEvent event) { + setExampleGroupBackgroundImage (); + } + }); + backgroundModeColorButton.addSelectionListener (new class() SelectionAdapter { + public void widgetSelected (SelectionEvent event) { + setExampleGroupBackgroundColor (); + } + }); + + /* Set the default state */ + backgroundModeCombo.setText(backgroundModeCombo.getItem(0)); + backgroundModeImageButton.setSelection(false); + backgroundModeColorButton.setSelection(false); + } + + /** + * Create the event console popup menu. + */ + void createEventConsolePopup () { + Menu popup = new Menu (shell, DWT.POP_UP); + eventConsole.setMenu (popup); + + MenuItem cut = new MenuItem (popup, DWT.PUSH); + cut.setText (ControlExample.getResourceString("MenuItem_Cut")); + cut.addListener (DWT.Selection, new class() Listener { + public void handleEvent (Event event) { + eventConsole.cut (); + } + }); + MenuItem copy = new MenuItem (popup, DWT.PUSH); + copy.setText (ControlExample.getResourceString("MenuItem_Copy")); + copy.addListener (DWT.Selection, new class() Listener { + public void handleEvent (Event event) { + eventConsole.copy (); + } + }); + MenuItem paste = new MenuItem (popup, DWT.PUSH); + paste.setText (ControlExample.getResourceString("MenuItem_Paste")); + paste.addListener (DWT.Selection, new class() Listener { + public void handleEvent (Event event) { + eventConsole.paste (); + } + }); + new MenuItem (popup, DWT.SEPARATOR); + MenuItem selectAll = new MenuItem (popup, DWT.PUSH); + selectAll.setText(ControlExample.getResourceString("MenuItem_SelectAll")); + selectAll.addListener (DWT.Selection, new class() Listener { + public void handleEvent (Event event) { + eventConsole.selectAll (); + } + }); + } + + /** + * Creates the "Example" group. The "Example" group + * is typically the left hand column in the tab. + */ + void createExampleGroup () { + exampleGroup = new Group (tabFolderPage, DWT.NONE); + exampleGroup.setLayout (new GridLayout ()); + exampleGroup.setLayoutData (new GridData (DWT.FILL, DWT.FILL, true, true)); + } + + /** + * Creates the "Example" widget children of the "Example" group. + * Subclasses override this method to create the particular + * example control. + */ + void createExampleWidgets () { + /* Do nothing */ + } + + /** + * Creates and opens the "Listener selection" dialog. + */ + void createListenerSelectionDialog () { + final Shell dialog = new Shell (shell, DWT.DIALOG_TRIM | DWT.APPLICATION_MODAL); + dialog.setText (ControlExample.getResourceString ("Select_Listeners")); + dialog.setLayout (new GridLayout (2, false)); + final Table table = new Table (dialog, DWT.BORDER | DWT.V_SCROLL | DWT.CHECK); + GridData data = new GridData(GridData.FILL_BOTH); + data.verticalSpan = 2; + table.setLayoutData(data); + for (int i = 0; i < EVENT_NAMES.length; i++) { + TableItem item = new TableItem (table, DWT.NONE); + item.setText (cast(char[])EVENT_NAMES[i][0]); + item.setChecked (eventsFilter[i]); + } + final char[] [] customNames = getCustomEventNames (); + for (int i = 0; i < customNames.length; i++) { + TableItem item = new TableItem (table, DWT.NONE); + item.setText (customNames[i]); + item.setChecked (eventsFilter[EVENT_NAMES.length + i]); + } + Button selectAll = new Button (dialog, DWT.PUSH); + selectAll.setText(ControlExample.getResourceString ("Select_All")); + selectAll.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL)); + selectAll.addSelectionListener (new class() SelectionAdapter { + public void widgetSelected(SelectionEvent e) { + TableItem [] items = table.getItems(); + for (int i = 0; i < EVENT_NAMES.length; i++) { + items[i].setChecked(true); + } + for (int i = 0; i < customNames.length; i++) { + items[EVENT_NAMES.length + i].setChecked(true); + } + } + }); + Button deselectAll = new Button (dialog, DWT.PUSH); + deselectAll.setText(ControlExample.getResourceString ("Deselect_All")); + deselectAll.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_BEGINNING)); + deselectAll.addSelectionListener (new class() SelectionAdapter { + public void widgetSelected(SelectionEvent e) { + TableItem [] items = table.getItems(); + for (int i = 0; i < EVENT_NAMES.length; i++) { + items[i].setChecked(false); + } + for (int i = 0; i < customNames.length; i++) { + items[EVENT_NAMES.length + i].setChecked(false); + } + } + }); + new Label(dialog, DWT.NONE); /* Filler */ + Button ok = new Button (dialog, DWT.PUSH); + ok.setText(ControlExample.getResourceString ("OK")); + dialog.setDefaultButton(ok); + ok.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL)); + ok.addSelectionListener (new class() SelectionAdapter { + public void widgetSelected(SelectionEvent e) { + TableItem [] items = table.getItems(); + for (int i = 0; i < EVENT_NAMES.length; i++) { + eventsFilter[i] = items[i].getChecked(); + } + for (int i = 0; i < customNames.length; i++) { + eventsFilter[EVENT_NAMES.length + i] = items[EVENT_NAMES.length + i].getChecked(); + } + dialog.dispose(); + } + }); + dialog.pack (); + dialog.open (); + while (! dialog.isDisposed()) { + if (! display.readAndDispatch()) display.sleep(); + } + } + + /** + * Creates the "Listeners" group. The "Listeners" group + * goes below the "Example" and "Control" groups. + */ + void createListenersGroup () { + listenersGroup = new Group (tabFolderPage, DWT.NONE); + listenersGroup.setLayout (new GridLayout (3, false)); + listenersGroup.setLayoutData (new GridData (DWT.FILL, DWT.FILL, true, true, 2, 1)); + listenersGroup.setText (ControlExample.getResourceString ("Listeners")); + + /* + * Create the button to access the 'Listeners' dialog. + */ + Button listenersButton = new Button (listenersGroup, DWT.PUSH); + listenersButton.setText (ControlExample.getResourceString ("Select_Listeners")); + listenersButton.addSelectionListener (new class() SelectionAdapter { + public void widgetSelected (SelectionEvent e) { + createListenerSelectionDialog (); + recreateExampleWidgets (); + } + }); + + /* + * Create the checkbox to add/remove listeners to/from the example widgets. + */ + final Button listenCheckbox = new Button (listenersGroup, DWT.CHECK); + listenCheckbox.setText (ControlExample.getResourceString ("Listen")); + listenCheckbox.addSelectionListener (new class() SelectionAdapter { + public void widgetSelected(SelectionEvent e) { + logging = listenCheckbox.getSelection (); + recreateExampleWidgets (); + } + }); + + /* + * Create the button to clear the text. + */ + Button clearButton = new Button (listenersGroup, DWT.PUSH); + clearButton.setText (ControlExample.getResourceString ("Clear")); + clearButton.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_END)); + clearButton.addSelectionListener (new class() SelectionAdapter { + public void widgetSelected (SelectionEvent e) { + eventConsole.setText (""); + } + }); + + /* Initialize the eventsFilter to log all events. */ + int customEventCount = getCustomEventNames ().length; + eventsFilter = new bool [EVENT_NAMES.length + customEventCount]; + for (int i = 0; i < EVENT_NAMES.length + customEventCount; i++) { + eventsFilter [i] = true; + } + + /* Create the event console Text. */ + eventConsole = new Text (listenersGroup, DWT.BORDER | DWT.MULTI | DWT.V_SCROLL | DWT.H_SCROLL); + GridData data = new GridData (GridData.FILL_BOTH); + data.horizontalSpan = 3; + data.heightHint = 80; + eventConsole.setLayoutData (data); + createEventConsolePopup (); + eventConsole.addKeyListener (new class() KeyAdapter { + public void keyPressed (KeyEvent e) { + if ((e.keyCode is 'A' || e.keyCode is 'a') && (e.stateMask & DWT.MOD1) !is 0) { + eventConsole.selectAll (); + e.doit = false; + } + } + }); + } + + /** + * 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). + */ + char[][] getMethodNames() { + return null; + } + + void createSetGetDialog(int x, int y, char[][] methodNames) { + final Shell dialog = new Shell(shell, DWT.DIALOG_TRIM | DWT.RESIZE | DWT.MODELESS); + dialog.setLayout(new GridLayout(2, false)); + dialog.setText(getTabText() + " " + ControlExample.getResourceString ("Set_Get")); + nameCombo = new Combo(dialog, DWT.READ_ONLY); + nameCombo.setItems(methodNames); + nameCombo.setText(methodNames[0]); + nameCombo.setVisibleItemCount(methodNames.length); + nameCombo.setLayoutData(new GridData(DWT.FILL, DWT.CENTER, false, false)); + nameCombo.addSelectionListener(new class() SelectionAdapter { + public void widgetSelected(SelectionEvent e) { + resetLabels(); + } + }); + returnTypeLabel = new Label(dialog, DWT.NONE); + returnTypeLabel.setLayoutData(new GridData(DWT.FILL, DWT.BEGINNING, false, false)); + setButton = new Button(dialog, DWT.PUSH); + setButton.setLayoutData(new GridData(DWT.FILL, DWT.BEGINNING, false, false)); + setButton.addSelectionListener(new class() SelectionAdapter { + public void widgetSelected(SelectionEvent e) { + setValue(); + setText.selectAll(); + setText.setFocus(); + } + }); + setText = new Text(dialog, DWT.SINGLE | DWT.BORDER); + setText.setLayoutData(new GridData(DWT.FILL, DWT.CENTER, false, false)); + getButton = new Button(dialog, DWT.PUSH); + getButton.setLayoutData(new GridData(DWT.FILL, DWT.BEGINNING, false, false)); + getButton.addSelectionListener(new class() SelectionAdapter { + public void widgetSelected(SelectionEvent e) { + getValue(); + } + }); + getText = new Text(dialog, DWT.MULTI | DWT.BORDER | DWT.READ_ONLY | DWT.H_SCROLL | DWT.V_SCROLL); + GridData data = new GridData(DWT.FILL, DWT.FILL, true, true); + data.widthHint = 240; + data.heightHint = 200; + getText.setLayoutData(data); + resetLabels(); + dialog.setDefaultButton(setButton); + dialog.pack(); + dialog.setLocation(x, y); + dialog.open(); + } + + void resetLabels() { + char[] methodRoot = nameCombo.getText(); + returnTypeLabel.setText(parameterInfo(methodRoot)); + setButton.setText(setMethodName(methodRoot)); + getButton.setText("get" + methodRoot); + setText.setText(""); + getText.setText(""); + getValue(); + setText.setFocus(); + } + + char[] setMethodName(char[] methodRoot) { + return "set" + methodRoot; + } + + char[] parameterInfo(char[] methodRoot) { + char[] typeName = null; + Class returnType = getReturnType(methodRoot); + bool isArray = returnType.isArray(); + if (isArray) { + typeName = returnType.getComponentType().getName(); + } else { + typeName = returnType.getName(); + } + char[] typeNameString = typeName; + int index = typeName.lastIndexOf('.'); + if (index !is -1 && index+1 < typeName.length()) typeNameString = typeName.substring(index+1); + char[] info = ControlExample.getResourceString("Info_" + typeNameString + (isArray ? "A" : "")); + if (isArray) { + typeNameString += "[]"; + } + return ControlExample.getResourceString("Parameter_Info", [typeNameString, info]); + } + + void getValue() { + char[] methodName = "get" + nameCombo.getText(); + getText.setText(""); + Widget[] widgets = getExampleWidgets(); + for (int i = 0; i < widgets.length; i++) { + try { + java.lang.reflect.Method method = widgets[i].getClass().getMethod(methodName, null); + Object result = method.invoke(widgets[i], null); + if (result is null) { + getText.append("null"); + } else if (result.getClass().isArray()) { + int length = java.lang.reflect.Array.getLength(result); + if (length is 0) { + getText.append(result.getClass().getComponentType() + "[0]"); + } + for (int j = 0; j < length; j++) { + getText.append(java.lang.reflect.Array.get(result,j).toString() + "\n"); + } + } else { + getText.append(result.toString()); + } + } catch (Exception e) { + getText.append(e.toString()); + } + if (i + 1 < widgets.length) { + getText.append("\n\n"); + } + } + } + + ClassInfo getReturnType(char[] methodRoot) { + ClassInfo returnType = null; + char[] methodName = "get" + methodRoot; + Widget[] widgets = getExampleWidgets(); + try { + java.lang.reflect.Method method = widgets[0].getClass().getMethod(methodName, null); + returnType = method.getReturnType(); + } catch (Exception e) { + } + return returnType; + } + + void setValue() { + /* The parameter type must be the same as the get method's return type */ + char[] methodRoot = nameCombo.getText(); + Class returnType = getReturnType(methodRoot); + char[] methodName = setMethodName(methodRoot); + char[] value = setText.getText(); + Widget[] widgets = getExampleWidgets(); + for (int i = 0; i < widgets.length; i++) { + try { + java.lang.reflect.Method method = widgets[i].getClass().getMethod(methodName, [returnType]); + char[] typeName = returnType.getName(); + Object[] parameter = null; + if (typeName.equals("int")) { + parameter = [new Integer(value)]; + } else if (typeName.equals("long")) { + parameter = [new Long(value)]; + } else if (typeName.equals("char")) { + parameter = [value.length() is 1 ? new Character(value.charAt(0)) : new Character('\0')]; + } else if (typeName.equals("bool")) { + parameter = [new bool(value)]; + } else if (typeName.equals("java.lang.char[]")) { + parameter = [value]; + } else if (typeName.equals("org.eclipse.swt.graphics.Point")) { + char[] xy[] = split(value, ','); + parameter = [new Point((new Integer(xy[0])).intValue(),(new Integer(xy[1])).intValue())]; + } else if (typeName.equals("[I")) { + char[] strings[] = split(value, ','); + int[] ints = new int[strings.length]; + for (int j = 0; j < strings.length; j++) { + ints[j] = (new Integer(strings[j])).intValue(); + } + parameter = [ints]; + } else if (typeName.equals("[Ljava.lang.char[];")) { + parameter = [split(value, ',')]; + } else { + parameter = parameterForType(typeName, value, widgets[i]); + } + method.invoke(widgets[i], parameter); + } catch (Exception e) { + getText.setText(e.toString()); + } + } + } + + Object[] parameterForType(char[] typeName, char[] value, Widget widget) { + return [value]; + } + + void createOrientationGroup () { + /* Create Orientation group*/ + orientationGroup = new Group (controlGroup, DWT.NONE); + orientationGroup.setLayout (new GridLayout()); + orientationGroup.setLayoutData (new GridData (DWT.FILL, DWT.FILL, false, false)); + orientationGroup.setText (ControlExample.getResourceString("Orientation")); + defaultOrietationButton = new Button (orientationGroup, DWT.RADIO); + defaultOrietationButton.setText (ControlExample.getResourceString("Default")); + defaultOrietationButton.setSelection (true); + ltrButton = new Button (orientationGroup, DWT.RADIO); + ltrButton.setText ("DWT.LEFT_TO_RIGHT"); + rtlButton = new Button (orientationGroup, DWT.RADIO); + rtlButton.setText ("DWT.RIGHT_TO_LEFT"); + } + + /** + * Creates the "Size" group. The "Size" group contains + * controls that allow the user to change the size of + * the example widgets. + */ + void createSizeGroup () { + /* Create the group */ + sizeGroup = new Group (controlGroup, DWT.NONE); + sizeGroup.setLayout (new GridLayout()); + sizeGroup.setLayoutData (new GridData (DWT.FILL, DWT.FILL, false, false)); + sizeGroup.setText (ControlExample.getResourceString("Size")); + + /* Create the controls */ + + /* + * The preferred size of a widget is the size returned + * by widget.computeSize (DWT.DEFAULT, DWT.DEFAULT). + * This size is defined on a widget by widget basis. + * Many widgets will attempt to display their contents. + */ + preferredButton = new Button (sizeGroup, DWT.RADIO); + preferredButton.setText (ControlExample.getResourceString("Preferred")); + tooSmallButton = new Button (sizeGroup, DWT.RADIO); + tooSmallButton.setText (TOO_SMALL_SIZE + " X " + TOO_SMALL_SIZE); + smallButton = new Button(sizeGroup, DWT.RADIO); + smallButton.setText (SMALL_SIZE + " X " + SMALL_SIZE); + largeButton = new Button (sizeGroup, DWT.RADIO); + largeButton.setText (LARGE_SIZE + " X " + LARGE_SIZE); + fillHButton = new Button (sizeGroup, DWT.CHECK); + fillHButton.setText (ControlExample.getResourceString("Fill_X")); + fillVButton = new Button (sizeGroup, DWT.CHECK); + fillVButton.setText (ControlExample.getResourceString("Fill_Y")); + + /* Add the listeners */ + SelectionAdapter selectionListener = new class() SelectionAdapter { + public void widgetSelected (SelectionEvent event) { + setExampleWidgetSize (); + } + }; + preferredButton.addSelectionListener(selectionListener); + tooSmallButton.addSelectionListener(selectionListener); + smallButton.addSelectionListener(selectionListener); + largeButton.addSelectionListener(selectionListener); + fillHButton.addSelectionListener(selectionListener); + fillVButton.addSelectionListener(selectionListener); + + /* Set the default state */ + preferredButton.setSelection (true); + } + + /** + * Creates the "Style" group. The "Style" group contains + * controls that allow the user to change the style of + * the example widgets. Changing a widget "Style" causes + * the widget to be destroyed and recreated. + */ + void createStyleGroup () { + styleGroup = new Group (controlGroup, DWT.NONE); + styleGroup.setLayout (new GridLayout ()); + styleGroup.setLayoutData (new GridData (DWT.FILL, DWT.FILL, false, false)); + styleGroup.setText (ControlExample.getResourceString("Styles")); + } + + /** + * Creates the tab folder page. + * + * @param tabFolder org.eclipse.swt.widgets.TabFolder + * @return the new page for the tab folder + */ + Composite createTabFolderPage (TabFolder tabFolder) { + /* Cache the shell and display. */ + shell = tabFolder.getShell (); + display = shell.getDisplay (); + + /* Create a two column page. */ + tabFolderPage = new Composite (tabFolder, DWT.NONE); + tabFolderPage.setLayout (new GridLayout (2, false)); + + /* Create the "Example" and "Control" groups. */ + createExampleGroup (); + createControlGroup (); + + /* Create the "Listeners" group under the "Control" group. */ + createListenersGroup (); + + /* Create and initialize the example and control widgets. */ + createExampleWidgets (); + hookExampleWidgetListeners (); + createControlWidgets (); + createBackgroundModeGroup (); + setExampleWidgetState (); + + return tabFolderPage; + } + + void setExampleWidgetPopupMenu() { + Control[] controls = getExampleControls(); + for (int i = 0; i < controls.length; i++) { + final Control control = controls [i]; + control.addListener(DWT.MenuDetect, new class() Listener { + public void handleEvent(Event event) { + Menu menu = control.getMenu(); + if (menu !is null && samplePopup) { + menu.dispose(); + menu = null; + } + if (menu is null && popupMenuButton.getSelection()) { + menu = new Menu(shell, DWT.POP_UP); + MenuItem item = new MenuItem(menu, DWT.PUSH); + item.setText("Sample popup menu item"); + specialPopupMenuItems(menu, event); + control.setMenu(menu); + samplePopup = true; + } + } + }); + } + } + + protected void specialPopupMenuItems(Menu menu, Event event) { + } + + /** + * Disposes the "Example" widgets. + */ + void disposeExampleWidgets () { + Widget [] widgets = getExampleWidgets (); + for (int i=0; i up -> none. */ + switch (table1.getSortDirection ()) { + case DWT.DOWN: sortDirection = DWT.UP; break; + case DWT.UP: sortDirection = DWT.NONE; break; + } + } else { + table1.setSortColumn((TableColumn)e.widget); + } + table1.setSortDirection (sortDirection); + } + }; + column.addSelectionListener(listener); + column.setData("SortListener", listener); //$NON-NLS-1$ + } + } else { + table1.setSortDirection (DWT.NONE); + TableColumn [] columns = table1.getColumns(); + for (int i = 0; i < columns.length; i++) { + SelectionListener listener = (SelectionListener)columns[i].getData("SortListener"); //$NON-NLS-1$ + if (listener !is null) columns[i].removeSelectionListener(listener); + } + } + } + + /** + * Sets the lines visible state of the "Example" widgets. + */ + void setWidgetLinesVisible () { + table1.setLinesVisible (linesVisibleButton.getSelection ()); + } + + protected void specialPopupMenuItems(Menu menu, Event event) { + MenuItem item = new MenuItem(menu, DWT.PUSH); + item.setText("getItem(Point) on mouse coordinates"); + menuMouseCoords = table1.toControl(new Point(event.x, event.y)); + item.addSelectionListener(new SelectionAdapter() { + public void widgetSelected(SelectionEvent e) { + eventConsole.append ("getItem(Point(" + menuMouseCoords + ")) returned: " + table1.getItem(menuMouseCoords)); + eventConsole.append ("\n"); + }; + }); + } +} diff -r e49a0f04c689 -r e32a6d7506c9 dwtexamples/controlexample/TextTab.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dwtexamples/controlexample/TextTab.d Mon Jan 21 01:40:01 2008 +0100 @@ -0,0 +1,189 @@ +/******************************************************************************* + * Copyright (c) 2000, 2007 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +module dwtexamples.controlexample.TextTab; + + + +import dwt.DWT; +import dwt.events.ControlAdapter; +import dwt.events.ControlEvent; +import dwt.layout.GridData; +import dwt.layout.GridLayout; +import dwt.widgets.Button; +import dwt.widgets.Composite; +import dwt.widgets.Group; +import dwt.widgets.TabFolder; +import dwt.widgets.Text; +import dwt.widgets.Widget; + +class TextTab : ScrollableTab { + /* Example widgets and groups that contain them */ + Text text; + Group textGroup; + + /* Style widgets added to the "Style" group */ + Button wrapButton, readOnlyButton, passwordButton, searchButton, cancelButton; + Button leftButton, centerButton, rightButton; + + /** + * Creates the Tab within a given instance of ControlExample. + */ + this(ControlExample instance) { + super(instance); + } + + /** + * Creates the "Example" group. + */ + void createExampleGroup () { + super.createExampleGroup (); + + /* Create a group for the text widget */ + textGroup = new Group (exampleGroup, DWT.NONE); + textGroup.setLayout (new GridLayout ()); + textGroup.setLayoutData (new GridData (DWT.FILL, DWT.FILL, true, true)); + textGroup.setText ("Text"); + } + + /** + * Creates the "Example" widgets. + */ + void createExampleWidgets () { + + /* Compute the widget style */ + int style = getDefaultStyle(); + if (singleButton.getSelection ()) style |= DWT.SINGLE; + if (multiButton.getSelection ()) style |= DWT.MULTI; + if (horizontalButton.getSelection ()) style |= DWT.H_SCROLL; + if (verticalButton.getSelection ()) style |= DWT.V_SCROLL; + if (wrapButton.getSelection ()) style |= DWT.WRAP; + if (readOnlyButton.getSelection ()) style |= DWT.READ_ONLY; + if (passwordButton.getSelection ()) style |= DWT.PASSWORD; + if (searchButton.getSelection ()) style |= DWT.SEARCH; + if (cancelButton.getSelection ()) style |= DWT.CANCEL; + if (borderButton.getSelection ()) style |= DWT.BORDER; + if (leftButton.getSelection ()) style |= DWT.LEFT; + if (centerButton.getSelection ()) style |= DWT.CENTER; + if (rightButton.getSelection ()) style |= DWT.RIGHT; + + /* Create the example widgets */ + text = new Text (textGroup, style); + text.setText (ControlExample.getResourceString("Example_string") + Text.DELIMITER + ControlExample.getResourceString("One_Two_Three")); + } + + /** + * Creates the "Style" group. + */ + void createStyleGroup() { + super.createStyleGroup(); + + /* Create the extra widgets */ + wrapButton = new Button (styleGroup, DWT.CHECK); + wrapButton.setText ("DWT.WRAP"); + readOnlyButton = new Button (styleGroup, DWT.CHECK); + readOnlyButton.setText ("DWT.READ_ONLY"); + passwordButton = new Button (styleGroup, DWT.CHECK); + passwordButton.setText ("DWT.PASSWORD"); + searchButton = new Button (styleGroup, DWT.CHECK); + searchButton.setText ("DWT.SEARCH"); + cancelButton = new Button (styleGroup, DWT.CHECK); + cancelButton.setText ("DWT.CANCEL"); + + Composite alignmentGroup = new Composite (styleGroup, DWT.NONE); + GridLayout layout = new GridLayout (); + layout.marginWidth = layout.marginHeight = 0; + alignmentGroup.setLayout (layout); + alignmentGroup.setLayoutData (new GridData (GridData.FILL_BOTH)); + leftButton = new Button (alignmentGroup, DWT.RADIO); + leftButton.setText ("DWT.LEFT"); + centerButton = new Button (alignmentGroup, DWT.RADIO); + centerButton.setText ("DWT.CENTER"); + rightButton = new Button (alignmentGroup, DWT.RADIO); + rightButton.setText ("DWT.RIGHT"); + } + + /** + * Creates the tab folder page. + * + * @param tabFolder org.eclipse.swt.widgets.TabFolder + * @return the new page for the tab folder + */ + Composite createTabFolderPage (TabFolder tabFolder) { + super.createTabFolderPage (tabFolder); + + /* + * Add a resize listener to the tabFolderPage so that + * if the user types into the example widget to change + * its preferred size, and then resizes the shell, we + * recalculate the preferred size correctly. + */ + tabFolderPage.addControlListener(new ControlAdapter() { + public void controlResized(ControlEvent e) { + setExampleWidgetSize (); + } + }); + + return tabFolderPage; + } + + /** + * Gets the "Example" widget children. + */ + Widget [] getExampleWidgets () { + return new Widget [] {text}; + } + + /** + * 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[] {"DoubleClickEnabled", "EchoChar", "Editable", "Orientation", "Selection", "Tabs", "Text", "TextLimit", "ToolTipText", "TopIndex"}; + } + + /** + * Gets the text for the tab folder item. + */ + String getTabText () { + return "Text"; + } + + /** + * Sets the state of the "Example" widgets. + */ + void setExampleWidgetState () { + super.setExampleWidgetState (); + wrapButton.setSelection ((text.getStyle () & DWT.WRAP) !is 0); + readOnlyButton.setSelection ((text.getStyle () & DWT.READ_ONLY) !is 0); + passwordButton.setSelection ((text.getStyle () & DWT.PASSWORD) !is 0); + searchButton.setSelection ((text.getStyle () & DWT.SEARCH) !is 0); + leftButton.setSelection ((text.getStyle () & DWT.LEFT) !is 0); + centerButton.setSelection ((text.getStyle () & DWT.CENTER) !is 0); + rightButton.setSelection ((text.getStyle () & DWT.RIGHT) !is 0); + + /* Special case: CANCEL and H_SCROLL have the same value, + * so to avoid confusion, only set CANCEL if SEARCH is set. */ + if ((text.getStyle () & DWT.SEARCH) !is 0) { + cancelButton.setSelection ((text.getStyle () & DWT.CANCEL) !is 0); + horizontalButton.setSelection (false); + } else { + cancelButton.setSelection (false); + horizontalButton.setSelection ((text.getStyle () & DWT.H_SCROLL) !is 0); + } + + passwordButton.setEnabled ((text.getStyle () & DWT.SINGLE) !is 0); + searchButton.setEnabled ((text.getStyle () & DWT.SINGLE) !is 0); + cancelButton.setEnabled ((text.getStyle () & DWT.SEARCH) !is 0); + wrapButton.setEnabled ((text.getStyle () & DWT.MULTI) !is 0); + horizontalButton.setEnabled ((text.getStyle () & DWT.MULTI) !is 0); + verticalButton.setEnabled ((text.getStyle () & DWT.MULTI) !is 0); + } +} diff -r e49a0f04c689 -r e32a6d7506c9 dwtexamples/controlexample/ToolBarTab.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dwtexamples/controlexample/ToolBarTab.d Mon Jan 21 01:40:01 2008 +0100 @@ -0,0 +1,391 @@ +/******************************************************************************* + * Copyright (c) 2000, 2007 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +module dwtexamples.controlexample.ToolBarTab; + + + +import dwt.DWT; +import dwt.events.SelectionAdapter; +import dwt.events.SelectionEvent; +import dwt.graphics.Point; +import dwt.graphics.Rectangle; +import dwt.layout.GridData; +import dwt.layout.GridLayout; +import dwt.widgets.Button; +import dwt.widgets.Combo; +import dwt.widgets.Group; +import dwt.widgets.Item; +import dwt.widgets.Menu; +import dwt.widgets.MenuItem; +import dwt.widgets.ToolBar; +import dwt.widgets.ToolItem; +import dwt.widgets.Widget; + +class ToolBarTab : Tab { + /* Example widgets and groups that contain them */ + ToolBar imageToolBar, textToolBar, imageTextToolBar; + Group imageToolBarGroup, textToolBarGroup, imageTextToolBarGroup; + + /* Style widgets added to the "Style" group */ + Button horizontalButton, verticalButton, flatButton, shadowOutButton, wrapButton, rightButton; + + /* Other widgets added to the "Other" group */ + Button comboChildButton; + + /** + * Creates the Tab within a given instance of ControlExample. + */ + this(ControlExample instance) { + super(instance); + } + + /** + * Creates the "Example" group. + */ + void createExampleGroup () { + super.createExampleGroup (); + + /* Create a group for the image tool bar */ + imageToolBarGroup = new Group (exampleGroup, DWT.NONE); + imageToolBarGroup.setLayout (new GridLayout ()); + imageToolBarGroup.setLayoutData (new GridData (DWT.FILL, DWT.FILL, true, true)); + imageToolBarGroup.setText (ControlExample.getResourceString("Image_ToolBar")); + + /* Create a group for the text tool bar */ + textToolBarGroup = new Group (exampleGroup, DWT.NONE); + textToolBarGroup.setLayout (new GridLayout ()); + textToolBarGroup.setLayoutData (new GridData (DWT.FILL, DWT.FILL, true, true)); + textToolBarGroup.setText (ControlExample.getResourceString("Text_ToolBar")); + + /* Create a group for the image and text tool bar */ + imageTextToolBarGroup = new Group (exampleGroup, DWT.NONE); + imageTextToolBarGroup.setLayout (new GridLayout ()); + imageTextToolBarGroup.setLayoutData (new GridData (DWT.FILL, DWT.FILL, true, true)); + imageTextToolBarGroup.setText (ControlExample.getResourceString("ImageText_ToolBar")); + } + + /** + * Creates the "Example" widgets. + */ + void createExampleWidgets () { + + /* Compute the widget style */ + int style = getDefaultStyle(); + if (horizontalButton.getSelection()) style |= DWT.HORIZONTAL; + if (verticalButton.getSelection()) style |= DWT.VERTICAL; + if (flatButton.getSelection()) style |= DWT.FLAT; + if (wrapButton.getSelection()) style |= DWT.WRAP; + if (borderButton.getSelection()) style |= DWT.BORDER; + if (shadowOutButton.getSelection()) style |= DWT.SHADOW_OUT; + if (rightButton.getSelection()) style |= DWT.RIGHT; + + /* + * Create the example widgets. + * + * A tool bar must consist of all image tool + * items or all text tool items but not both. + */ + + /* Create the image tool bar */ + imageToolBar = new ToolBar (imageToolBarGroup, style); + ToolItem item = new ToolItem (imageToolBar, DWT.PUSH); + item.setImage (instance.images[ControlExample.ciClosedFolder]); + item.setToolTipText("DWT.PUSH"); + item = new ToolItem (imageToolBar, DWT.PUSH); + item.setImage (instance.images[ControlExample.ciClosedFolder]); + item.setToolTipText ("DWT.PUSH"); + item = new ToolItem (imageToolBar, DWT.RADIO); + item.setImage (instance.images[ControlExample.ciOpenFolder]); + item.setToolTipText ("DWT.RADIO"); + item = new ToolItem (imageToolBar, DWT.RADIO); + item.setImage (instance.images[ControlExample.ciOpenFolder]); + item.setToolTipText ("DWT.RADIO"); + item = new ToolItem (imageToolBar, DWT.CHECK); + item.setImage (instance.images[ControlExample.ciTarget]); + item.setToolTipText ("DWT.CHECK"); + item = new ToolItem (imageToolBar, DWT.RADIO); + item.setImage (instance.images[ControlExample.ciClosedFolder]); + item.setToolTipText ("DWT.RADIO"); + item = new ToolItem (imageToolBar, DWT.RADIO); + item.setImage (instance.images[ControlExample.ciClosedFolder]); + item.setToolTipText ("DWT.RADIO"); + item = new ToolItem (imageToolBar, DWT.SEPARATOR); + item.setToolTipText("DWT.SEPARATOR"); + if (comboChildButton.getSelection ()) { + Combo combo = new Combo (imageToolBar, DWT.NONE); + combo.setItems (new String [] {"250", "500", "750"}); + combo.setText (combo.getItem (0)); + combo.pack (); + item.setWidth (combo.getSize ().x); + item.setControl (combo); + } + item = new ToolItem (imageToolBar, DWT.DROP_DOWN); + item.setImage (instance.images[ControlExample.ciTarget]); + item.setToolTipText ("DWT.DROP_DOWN"); + item.addSelectionListener(new DropDownSelectionListener()); + + /* Create the text tool bar */ + textToolBar = new ToolBar (textToolBarGroup, style); + item = new ToolItem (textToolBar, DWT.PUSH); + item.setText (ControlExample.getResourceString("Push")); + item.setToolTipText("DWT.PUSH"); + item = new ToolItem (textToolBar, DWT.PUSH); + item.setText (ControlExample.getResourceString("Push")); + item.setToolTipText("DWT.PUSH"); + item = new ToolItem (textToolBar, DWT.RADIO); + item.setText (ControlExample.getResourceString("Radio")); + item.setToolTipText("DWT.RADIO"); + item = new ToolItem (textToolBar, DWT.RADIO); + item.setText (ControlExample.getResourceString("Radio")); + item.setToolTipText("DWT.RADIO"); + item = new ToolItem (textToolBar, DWT.CHECK); + item.setText (ControlExample.getResourceString("Check")); + item.setToolTipText("DWT.CHECK"); + item = new ToolItem (textToolBar, DWT.RADIO); + item.setText (ControlExample.getResourceString("Radio")); + item.setToolTipText("DWT.RADIO"); + item = new ToolItem (textToolBar, DWT.RADIO); + item.setText (ControlExample.getResourceString("Radio")); + item.setToolTipText("DWT.RADIO"); + item = new ToolItem (textToolBar, DWT.SEPARATOR); + item.setToolTipText("DWT.SEPARATOR"); + if (comboChildButton.getSelection ()) { + Combo combo = new Combo (textToolBar, DWT.NONE); + combo.setItems (new String [] {"250", "500", "750"}); + combo.setText (combo.getItem (0)); + combo.pack (); + item.setWidth (combo.getSize ().x); + item.setControl (combo); + } + item = new ToolItem (textToolBar, DWT.DROP_DOWN); + item.setText (ControlExample.getResourceString("Drop_Down")); + item.setToolTipText("DWT.DROP_DOWN"); + item.addSelectionListener(new DropDownSelectionListener()); + + /* Create the image and text tool bar */ + imageTextToolBar = new ToolBar (imageTextToolBarGroup, style); + item = new ToolItem (imageTextToolBar, DWT.PUSH); + item.setImage (instance.images[ControlExample.ciClosedFolder]); + item.setText (ControlExample.getResourceString("Push")); + item.setToolTipText("DWT.PUSH"); + item = new ToolItem (imageTextToolBar, DWT.PUSH); + item.setImage (instance.images[ControlExample.ciClosedFolder]); + item.setText (ControlExample.getResourceString("Push")); + item.setToolTipText("DWT.PUSH"); + item = new ToolItem (imageTextToolBar, DWT.RADIO); + item.setImage (instance.images[ControlExample.ciOpenFolder]); + item.setText (ControlExample.getResourceString("Radio")); + item.setToolTipText("DWT.RADIO"); + item = new ToolItem (imageTextToolBar, DWT.RADIO); + item.setImage (instance.images[ControlExample.ciOpenFolder]); + item.setText (ControlExample.getResourceString("Radio")); + item.setToolTipText("DWT.RADIO"); + item = new ToolItem (imageTextToolBar, DWT.CHECK); + item.setImage (instance.images[ControlExample.ciTarget]); + item.setText (ControlExample.getResourceString("Check")); + item.setToolTipText("DWT.CHECK"); + item = new ToolItem (imageTextToolBar, DWT.RADIO); + item.setImage (instance.images[ControlExample.ciClosedFolder]); + item.setText (ControlExample.getResourceString("Radio")); + item.setToolTipText("DWT.RADIO"); + item = new ToolItem (imageTextToolBar, DWT.RADIO); + item.setImage (instance.images[ControlExample.ciClosedFolder]); + item.setText (ControlExample.getResourceString("Radio")); + item.setToolTipText("DWT.RADIO"); + item = new ToolItem (imageTextToolBar, DWT.SEPARATOR); + item.setToolTipText("DWT.SEPARATOR"); + if (comboChildButton.getSelection ()) { + Combo combo = new Combo (imageTextToolBar, DWT.NONE); + combo.setItems (new String [] {"250", "500", "750"}); + combo.setText (combo.getItem (0)); + combo.pack (); + item.setWidth (combo.getSize ().x); + item.setControl (combo); + } + item = new ToolItem (imageTextToolBar, DWT.DROP_DOWN); + item.setImage (instance.images[ControlExample.ciTarget]); + item.setText (ControlExample.getResourceString("Drop_Down")); + item.setToolTipText("DWT.DROP_DOWN"); + item.addSelectionListener(new DropDownSelectionListener()); + + /* + * Do not add the selection event for this drop down + * tool item. Without hooking the event, the drop down + * widget does nothing special when the drop down area + * is selected. + */ + } + + /** + * Creates the "Other" group. + */ + void createOtherGroup () { + super.createOtherGroup (); + + /* Create display controls specific to this example */ + comboChildButton = new Button (otherGroup, DWT.CHECK); + comboChildButton.setText (ControlExample.getResourceString("Combo_child")); + + /* Add the listeners */ + comboChildButton.addSelectionListener (new SelectionAdapter () { + public void widgetSelected (SelectionEvent event) { + recreateExampleWidgets (); + } + }); + } + + /** + * Creates the "Style" group. + */ + void createStyleGroup() { + super.createStyleGroup(); + + /* Create the extra widgets */ + horizontalButton = new Button (styleGroup, DWT.RADIO); + horizontalButton.setText ("DWT.HORIZONTAL"); + verticalButton = new Button (styleGroup, DWT.RADIO); + verticalButton.setText ("DWT.VERTICAL"); + flatButton = new Button (styleGroup, DWT.CHECK); + flatButton.setText ("DWT.FLAT"); + shadowOutButton = new Button (styleGroup, DWT.CHECK); + shadowOutButton.setText ("DWT.SHADOW_OUT"); + wrapButton = new Button (styleGroup, DWT.CHECK); + wrapButton.setText ("DWT.WRAP"); + rightButton = new Button (styleGroup, DWT.CHECK); + rightButton.setText ("DWT.RIGHT"); + borderButton = new Button (styleGroup, DWT.CHECK); + borderButton.setText ("DWT.BORDER"); + } + + void disposeExampleWidgets () { + super.disposeExampleWidgets (); + } + + /** + * Gets the "Example" widget children's items, if any. + * + * @return an array containing the example widget children's items + */ + Item [] getExampleWidgetItems () { + Item [] imageToolBarItems = imageToolBar.getItems(); + Item [] textToolBarItems = textToolBar.getItems(); + Item [] imageTextToolBarItems = imageTextToolBar.getItems(); + Item [] allItems = new Item [imageToolBarItems.length + textToolBarItems.length + imageTextToolBarItems.length]; + System.arraycopy(imageToolBarItems, 0, allItems, 0, imageToolBarItems.length); + System.arraycopy(textToolBarItems, 0, allItems, imageToolBarItems.length, textToolBarItems.length); + System.arraycopy(imageTextToolBarItems, 0, allItems, imageToolBarItems.length + textToolBarItems.length, imageTextToolBarItems.length); + return allItems; + } + + /** + * Gets the "Example" widget children. + */ + Widget [] getExampleWidgets () { + return new Widget [] {imageToolBar, textToolBar, imageTextToolBar}; + } + + /** + * Gets the short text for the tab folder item. + */ + public String getShortTabText() { + return "TB"; + } + + /** + * Gets the text for the tab folder item. + */ + String getTabText () { + return "ToolBar"; + } + + /** + * Sets the state of the "Example" widgets. + */ + void setExampleWidgetState () { + super.setExampleWidgetState (); + horizontalButton.setSelection ((imageToolBar.getStyle () & DWT.HORIZONTAL) !is 0); + verticalButton.setSelection ((imageToolBar.getStyle () & DWT.VERTICAL) !is 0); + flatButton.setSelection ((imageToolBar.getStyle () & DWT.FLAT) !is 0); + wrapButton.setSelection ((imageToolBar.getStyle () & DWT.WRAP) !is 0); + shadowOutButton.setSelection ((imageToolBar.getStyle () & DWT.SHADOW_OUT) !is 0); + borderButton.setSelection ((imageToolBar.getStyle () & DWT.BORDER) !is 0); + rightButton.setSelection ((imageToolBar.getStyle () & DWT.RIGHT) !is 0); + } + + /** + * Listens to widgetSelected() events on DWT.DROP_DOWN type ToolItems + * and opens/closes a menu when appropriate. + */ + class DropDownSelectionListener extends SelectionAdapter { + private Menu menu = null; + private bool visible = false; + + public void widgetSelected(SelectionEvent event) { + // Create the menu if it has not already been created + if (menu is null) { + // 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) { + 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() { + public void widgetSelected(SelectionEvent e) { + setMenuVisible(false); + } + }); + } else { + new MenuItem(menu, DWT.SEPARATOR); + } + } + } + + /** + * A selection event will be fired when a drop down tool + * item is selected in the main area and in the drop + * down arrow. Examine the event detail to determine + * where the widget was selected. + */ + if (event.detail is DWT.ARROW) { + /* + * The drop down arrow was selected. + */ + if (visible) { + // Hide the menu to give the Arrow the appearance of being a toggle button. + setMenuVisible(false); + } else { + // Position the menu below and vertically aligned with the the drop down tool button. + final ToolItem toolItem = (ToolItem) event.widget; + final ToolBar toolBar = toolItem.getParent(); + + Rectangle toolItemBounds = toolItem.getBounds(); + Point point = toolBar.toDisplay(new Point(toolItemBounds.x, toolItemBounds.y)); + menu.setLocation(point.x, point.y + toolItemBounds.height); + setMenuVisible(true); + } + } else { + /* + * Main area of drop down tool item selected. + * An application would invoke the code to perform the action for the tool item. + */ + } + } + private void setMenuVisible(bool visible) { + menu.setVisible(visible); + this.visible = visible; + } + } +} diff -r e49a0f04c689 -r e32a6d7506c9 dwtexamples/controlexample/ToolTipTab.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dwtexamples/controlexample/ToolTipTab.d Mon Jan 21 01:40:01 2008 +0100 @@ -0,0 +1,263 @@ +/******************************************************************************* + * Copyright (c) 2000, 2007 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +module dwtexamples.controlexample.ToolTipTab; + + + +import dwt.DWT; +import dwt.events.ControlAdapter; +import dwt.events.ControlEvent; +import dwt.events.DisposeEvent; +import dwt.events.DisposeListener; +import dwt.events.SelectionAdapter; +import dwt.events.SelectionEvent; +import dwt.layout.GridData; +import dwt.layout.GridLayout; +import dwt.widgets.Button; +import dwt.widgets.Composite; +import dwt.widgets.Group; +import dwt.widgets.TabFolder; +import dwt.widgets.ToolTip; +import dwt.widgets.Tray; +import dwt.widgets.TrayItem; +import dwt.widgets.Widget; + +class ToolTipTab : Tab { + + /* Example widgets and groups that contain them */ + ToolTip toolTip1; + Group toolTipGroup; + + /* Style widgets added to the "Style" group */ + Button balloonButton, iconErrorButton, iconInformationButton, iconWarningButton, noIconButton; + + /* Other widgets added to the "Other" group */ + Button autoHideButton, showInTrayButton; + + Tray tray; + TrayItem trayItem; + + /** + * Creates the Tab within a given instance of ControlExample. + */ + this(ControlExample instance) { + super(instance); + } + + /** + * Creates the "Example" group. + */ + void createExampleGroup () { + super.createExampleGroup (); + + /* Create a group for the tooltip visibility check box */ + toolTipGroup = new Group (exampleGroup, DWT.NONE); + toolTipGroup.setLayout (new GridLayout ()); + toolTipGroup.setLayoutData (new GridData (DWT.FILL, DWT.FILL, true, true)); + toolTipGroup.setText ("ToolTip"); + visibleButton = new Button(toolTipGroup, DWT.CHECK); + visibleButton.setText(ControlExample.getResourceString("Visible")); + visibleButton.addSelectionListener (new SelectionAdapter () { + public void widgetSelected (SelectionEvent event) { + setExampleWidgetVisibility (); + } + }); + } + + /** + * Creates the "Example" widgets. + */ + void createExampleWidgets () { + + /* Compute the widget style */ + int style = getDefaultStyle(); + if (balloonButton.getSelection ()) style |= DWT.BALLOON; + if (iconErrorButton.getSelection ()) style |= DWT.ICON_ERROR; + if (iconInformationButton.getSelection ()) style |= DWT.ICON_INFORMATION; + if (iconWarningButton.getSelection ()) style |= DWT.ICON_WARNING; + + /* Create the example widgets */ + toolTip1 = new ToolTip (shell, style); + toolTip1.setText(ControlExample.getResourceString("ToolTip_Title")); + toolTip1.setMessage(ControlExample.getResourceString("Example_string")); + } + + /** + * Creates the tab folder page. + * + * @param tabFolder org.eclipse.swt.widgets.TabFolder + * @return the new page for the tab folder + */ + Composite createTabFolderPage (TabFolder tabFolder) { + super.createTabFolderPage (tabFolder); + + /* + * Add a resize listener to the tabFolderPage so that + * if the user types into the example widget to change + * its preferred size, and then resizes the shell, we + * recalculate the preferred size correctly. + */ + tabFolderPage.addControlListener(new ControlAdapter() { + public void controlResized(ControlEvent e) { + setExampleWidgetSize (); + } + }); + + return tabFolderPage; + } + + /** + * Creates the "Style" group. + */ + void createStyleGroup () { + super.createStyleGroup (); + + /* Create the extra widgets */ + balloonButton = new Button (styleGroup, DWT.CHECK); + balloonButton.setText ("DWT.BALLOON"); + iconErrorButton = new Button (styleGroup, DWT.RADIO); + iconErrorButton.setText("DWT.ICON_ERROR"); + iconInformationButton = new Button (styleGroup, DWT.RADIO); + iconInformationButton.setText("DWT.ICON_INFORMATION"); + iconWarningButton = new Button (styleGroup, DWT.RADIO); + iconWarningButton.setText("DWT.ICON_WARNING"); + noIconButton = new Button (styleGroup, DWT.RADIO); + noIconButton.setText(ControlExample.getResourceString("No_Icon")); + } + + void createColorAndFontGroup () { + // ToolTip does not need a color and font group. + } + + void createOtherGroup () { + /* Create the group */ + otherGroup = new Group (controlGroup, DWT.NONE); + otherGroup.setLayout (new GridLayout ()); + otherGroup.setLayoutData (new GridData (DWT.FILL, DWT.FILL, false, false)); + otherGroup.setText (ControlExample.getResourceString("Other")); + + /* Create the controls */ + autoHideButton = new Button(otherGroup, DWT.CHECK); + autoHideButton.setText(ControlExample.getResourceString("AutoHide")); + showInTrayButton = new Button(otherGroup, DWT.CHECK); + showInTrayButton.setText(ControlExample.getResourceString("Show_In_Tray")); + tray = display.getSystemTray(); + showInTrayButton.setEnabled(tray !is null); + + /* Add the listeners */ + autoHideButton.addSelectionListener (new SelectionAdapter () { + public void widgetSelected (SelectionEvent event) { + setExampleWidgetAutoHide (); + } + }); + showInTrayButton.addSelectionListener (new SelectionAdapter () { + public void widgetSelected (SelectionEvent event) { + showExampleWidgetInTray (); + } + }); + shell.addDisposeListener(new DisposeListener() { + public void widgetDisposed(DisposeEvent event) { + disposeTrayItem(); + } + }); + + /* Set the default state */ + autoHideButton.setSelection(true); + } + + void createSizeGroup () { + // ToolTip does not need a size group. + } + + /** + * Disposes the "Example" widgets. + */ + void disposeExampleWidgets () { + disposeTrayItem(); + super.disposeExampleWidgets(); + } + + /** + * Gets the "Example" widget children. + */ + // Tab uses this for many things - widgets would only get set/get, listeners, and dispose. + Widget[] getExampleWidgets () { + return new 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"}; + } + + /** + * Gets the text for the tab folder item. + */ + String getTabText () { + return "ToolTip"; + } + + /** + * Sets the state of the "Example" widgets. + */ + void setExampleWidgetState () { + showExampleWidgetInTray (); + setExampleWidgetAutoHide (); + super.setExampleWidgetState (); + balloonButton.setSelection ((toolTip1.getStyle () & DWT.BALLOON) !is 0); + iconErrorButton.setSelection ((toolTip1.getStyle () & DWT.ICON_ERROR) !is 0); + iconInformationButton.setSelection ((toolTip1.getStyle () & DWT.ICON_INFORMATION) !is 0); + iconWarningButton.setSelection ((toolTip1.getStyle () & DWT.ICON_WARNING) !is 0); + noIconButton.setSelection ((toolTip1.getStyle () & (DWT.ICON_ERROR | DWT.ICON_INFORMATION | DWT.ICON_WARNING)) is 0); + autoHideButton.setSelection(toolTip1.getAutoHide()); + } + + /** + * Sets the visibility of the "Example" widgets. + */ + void setExampleWidgetVisibility () { + toolTip1.setVisible (visibleButton.getSelection ()); + } + + /** + * Sets the autoHide state of the "Example" widgets. + */ + void setExampleWidgetAutoHide () { + toolTip1.setAutoHide(autoHideButton.getSelection ()); + } + + void showExampleWidgetInTray () { + if (showInTrayButton.getSelection ()) { + createTrayItem(); + trayItem.setToolTip(toolTip1); + } else { + disposeTrayItem(); + } + } + + void createTrayItem() { + if (trayItem is null) { + trayItem = new TrayItem(tray, DWT.NONE); + trayItem.setImage(instance.images[ControlExample.ciTarget]); + } + } + + void disposeTrayItem() { + if (trayItem !is null) { + trayItem.setToolTip(null); + trayItem.dispose(); + trayItem = null; + } + } +} diff -r e49a0f04c689 -r e32a6d7506c9 dwtexamples/controlexample/TreeTab.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dwtexamples/controlexample/TreeTab.d Mon Jan 21 01:40:01 2008 +0100 @@ -0,0 +1,801 @@ +/******************************************************************************* + * Copyright (c) 2000, 2007 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +module dwtexamples.controlexample.TreeTab; + + + +import dwt.DWT; +import dwt.events.DisposeEvent; +import dwt.events.DisposeListener; +import dwt.events.SelectionAdapter; +import dwt.events.SelectionEvent; +import dwt.events.SelectionListener; +import dwt.graphics.Color; +import dwt.graphics.Font; +import dwt.graphics.FontData; +import dwt.graphics.Image; +import dwt.graphics.Point; +import dwt.graphics.RGB; +import dwt.layout.GridData; +import dwt.layout.GridLayout; +import dwt.widgets.Button; +import dwt.widgets.Event; +import dwt.widgets.Group; +import dwt.widgets.Item; +import dwt.widgets.Menu; +import dwt.widgets.MenuItem; +import dwt.widgets.TableItem; +import dwt.widgets.Tree; +import dwt.widgets.TreeColumn; +import dwt.widgets.TreeItem; +import dwt.widgets.Widget; + +class TreeTab : ScrollableTab { + /* Example widgets and groups that contain them */ + Tree tree1, tree2; + TreeItem textNode1, imageNode1; + Group treeGroup, imageTreeGroup, itemGroup; + + /* Size widgets added to the "Size" group */ + Button packColumnsButton; + + /* Style widgets added to the "Style" group */ + Button checkButton, fullSelectionButton; + + /* Other widgets added to the "Other" group */ + 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; + 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 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") } }; + + Point menuMouseCoords; + + /** + * Creates the Tab within a given instance of ControlExample. + */ + this(ControlExample instance) { + super(instance); + } + + /** + * Creates the "Colors and Fonts" group. + */ + void createColorAndFontGroup () { + super.createColorAndFontGroup(); + + TableItem item = new TableItem(colorAndFontTable, DWT.None); + item.setText(ControlExample.getResourceString ("Item_Foreground_Color")); + item = new TableItem(colorAndFontTable, DWT.None); + item.setText(ControlExample.getResourceString ("Item_Background_Color")); + item = new TableItem(colorAndFontTable, DWT.None); + item.setText(ControlExample.getResourceString ("Item_Font")); + item = new TableItem(colorAndFontTable, DWT.None); + item.setText(ControlExample.getResourceString ("Cell_Foreground_Color")); + item = new TableItem(colorAndFontTable, DWT.None); + item.setText(ControlExample.getResourceString ("Cell_Background_Color")); + item = new TableItem(colorAndFontTable, DWT.None); + item.setText(ControlExample.getResourceString ("Cell_Font")); + + shell.addDisposeListener(new DisposeListener() { + public void widgetDisposed(DisposeEvent event) { + if (itemBackgroundColor !is null) itemBackgroundColor.dispose(); + if (itemForegroundColor !is null) itemForegroundColor.dispose(); + if (itemFont !is null) itemFont.dispose(); + if (cellBackgroundColor !is null) cellBackgroundColor.dispose(); + if (cellForegroundColor !is null) cellForegroundColor.dispose(); + if (cellFont !is null) cellFont.dispose(); + itemBackgroundColor = null; + itemForegroundColor = null; + itemFont = null; + cellBackgroundColor = null; + cellForegroundColor = null; + cellFont = null; + } + }); + } + + void changeFontOrColor(int index) { + switch (index) { + case ITEM_FOREGROUND_COLOR: { + Color oldColor = itemForegroundColor; + if (oldColor is null) oldColor = textNode1.getForeground (); + colorDialog.setRGB(oldColor.getRGB()); + RGB rgb = colorDialog.open(); + if (rgb is null) return; + oldColor = itemForegroundColor; + itemForegroundColor = new Color (display, rgb); + setItemForeground (); + if (oldColor !is null) oldColor.dispose (); + } + break; + case ITEM_BACKGROUND_COLOR: { + Color oldColor = itemBackgroundColor; + if (oldColor is null) oldColor = textNode1.getBackground (); + colorDialog.setRGB(oldColor.getRGB()); + RGB rgb = colorDialog.open(); + if (rgb is null) return; + oldColor = itemBackgroundColor; + itemBackgroundColor = new Color (display, rgb); + setItemBackground (); + if (oldColor !is null) oldColor.dispose (); + } + break; + case ITEM_FONT: { + Font oldFont = itemFont; + if (oldFont is null) oldFont = textNode1.getFont (); + fontDialog.setFontList(oldFont.getFontData()); + FontData fontData = fontDialog.open (); + if (fontData is null) return; + oldFont = itemFont; + itemFont = new Font (display, fontData); + setItemFont (); + setExampleWidgetSize (); + if (oldFont !is null) oldFont.dispose (); + } + break; + case CELL_FOREGROUND_COLOR: { + Color oldColor = cellForegroundColor; + if (oldColor is null) oldColor = textNode1.getForeground (1); + colorDialog.setRGB(oldColor.getRGB()); + RGB rgb = colorDialog.open(); + if (rgb is null) return; + oldColor = cellForegroundColor; + cellForegroundColor = new Color (display, rgb); + setCellForeground (); + if (oldColor !is null) oldColor.dispose (); + } + break; + case CELL_BACKGROUND_COLOR: { + Color oldColor = cellBackgroundColor; + if (oldColor is null) oldColor = textNode1.getBackground (1); + colorDialog.setRGB(oldColor.getRGB()); + RGB rgb = colorDialog.open(); + if (rgb is null) return; + oldColor = cellBackgroundColor; + cellBackgroundColor = new Color (display, rgb); + setCellBackground (); + if (oldColor !is null) oldColor.dispose (); + } + break; + case CELL_FONT: { + Font oldFont = cellFont; + if (oldFont is null) oldFont = textNode1.getFont (1); + fontDialog.setFontList(oldFont.getFontData()); + FontData fontData = fontDialog.open (); + if (fontData is null) return; + oldFont = cellFont; + cellFont = new Font (display, fontData); + setCellFont (); + setExampleWidgetSize (); + if (oldFont !is null) oldFont.dispose (); + } + break; + default: + super.changeFontOrColor(index); + } + } + + /** + * Creates the "Other" group. + */ + void createOtherGroup () { + super.createOtherGroup (); + + /* Create display controls specific to this example */ + linesVisibleButton = new Button (otherGroup, DWT.CHECK); + linesVisibleButton.setText (ControlExample.getResourceString("Lines_Visible")); + multipleColumns = new Button (otherGroup, DWT.CHECK); + multipleColumns.setText (ControlExample.getResourceString("Multiple_Columns")); + headerVisibleButton = new Button (otherGroup, DWT.CHECK); + headerVisibleButton.setText (ControlExample.getResourceString("Header_Visible")); + sortIndicatorButton = new Button (otherGroup, DWT.CHECK); + sortIndicatorButton.setText (ControlExample.getResourceString("Sort_Indicator")); + moveableColumns = new Button (otherGroup, DWT.CHECK); + moveableColumns.setText (ControlExample.getResourceString("Moveable_Columns")); + resizableColumns = new Button (otherGroup, DWT.CHECK); + resizableColumns.setText (ControlExample.getResourceString("Resizable_Columns")); + headerImagesButton = new Button (otherGroup, DWT.CHECK); + headerImagesButton.setText (ControlExample.getResourceString("Header_Images")); + subImagesButton = new Button (otherGroup, DWT.CHECK); + subImagesButton.setText (ControlExample.getResourceString("Sub_Images")); + + /* Add the listeners */ + linesVisibleButton.addSelectionListener (new SelectionAdapter () { + public void widgetSelected (SelectionEvent event) { + setWidgetLinesVisible (); + } + }); + multipleColumns.addSelectionListener (new SelectionAdapter () { + public void widgetSelected (SelectionEvent event) { + recreateExampleWidgets (); + } + }); + headerVisibleButton.addSelectionListener (new SelectionAdapter () { + public void widgetSelected (SelectionEvent event) { + setWidgetHeaderVisible (); + } + }); + sortIndicatorButton.addSelectionListener (new SelectionAdapter () { + public void widgetSelected (SelectionEvent event) { + setWidgetSortIndicator (); + } + }); + moveableColumns.addSelectionListener (new SelectionAdapter () { + public void widgetSelected (SelectionEvent event) { + setColumnsMoveable (); + } + }); + resizableColumns.addSelectionListener (new SelectionAdapter () { + public void widgetSelected (SelectionEvent event) { + setColumnsResizable (); + } + }); + headerImagesButton.addSelectionListener (new SelectionAdapter () { + public void widgetSelected (SelectionEvent event) { + recreateExampleWidgets (); + } + }); + subImagesButton.addSelectionListener (new SelectionAdapter () { + public void widgetSelected (SelectionEvent event) { + recreateExampleWidgets (); + } + }); + } + + /** + * Creates the "Example" group. + */ + void createExampleGroup () { + super.createExampleGroup (); + + /* Create a group for the text tree */ + treeGroup = new Group (exampleGroup, DWT.NONE); + treeGroup.setLayout (new GridLayout ()); + treeGroup.setLayoutData (new GridData (DWT.FILL, DWT.FILL, true, true)); + treeGroup.setText ("Tree"); + + /* Create a group for the image tree */ + imageTreeGroup = new Group (exampleGroup, DWT.NONE); + imageTreeGroup.setLayout (new GridLayout ()); + imageTreeGroup.setLayoutData (new GridData (DWT.FILL, DWT.FILL, true, true)); + imageTreeGroup.setText (ControlExample.getResourceString("Tree_With_Images")); + } + + /** + * Creates the "Example" widgets. + */ + void createExampleWidgets () { + /* Compute the widget style */ + int style = getDefaultStyle(); + if (singleButton.getSelection()) style |= DWT.SINGLE; + if (multiButton.getSelection()) style |= DWT.MULTI; + if (horizontalButton.getSelection ()) style |= DWT.H_SCROLL; + if (verticalButton.getSelection ()) style |= DWT.V_SCROLL; + if (checkButton.getSelection()) style |= DWT.CHECK; + if (fullSelectionButton.getSelection ()) style |= DWT.FULL_SELECTION; + if (borderButton.getSelection()) style |= DWT.BORDER; + + /* Create the text tree */ + tree1 = new Tree (treeGroup, style); + bool multiColumn = multipleColumns.getSelection(); + if (multiColumn) { + 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]})); + } + 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))); + if (i < 3) { + TreeItem subitem = new TreeItem (item, DWT.NONE); + setItemText(subitem, i, ControlExample.getResourceString("Node_" + (i + 1) + "_1")); + } + } + TreeItem treeRoots[] = tree1.getItems (); + TreeItem item = new TreeItem (treeRoots[1], DWT.NONE); + setItemText(item, 1, ControlExample.getResourceString("Node_2_2")); + item = new TreeItem (item, DWT.NONE); + setItemText(item, 1, ControlExample.getResourceString("Node_2_2_1")); + textNode1 = treeRoots[0]; + packColumns(tree1); + try { + TreeColumn column = tree1.getColumn(0); + resizableColumns.setSelection (column.getResizable()); + } catch (IllegalArgumentException ex) {} + + /* Create the image tree */ + tree2 = new Tree (imageTreeGroup, style); + Image image = instance.images[ControlExample.ciClosedFolder]; + if (multiColumn) { + 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]})); + 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))); + if (multiColumn && subImagesButton.getSelection()) { + for (int j = 0; j < columnTitles.length; j++) { + item.setImage(j, image); + } + } else { + item.setImage(image); + } + if (i < 3) { + TreeItem subitem = new TreeItem (item, DWT.NONE); + setItemText(subitem, i, ControlExample.getResourceString("Node_" + (i + 1) + "_1")); + if (multiColumn && subImagesButton.getSelection()) { + for (int j = 0; j < columnTitles.length; j++) { + subitem.setImage(j, image); + } + } else { + subitem.setImage(image); + } + } + } + treeRoots = tree2.getItems (); + item = new TreeItem (treeRoots[1], DWT.NONE); + setItemText(item, 1, ControlExample.getResourceString("Node_2_2")); + if (multiColumn && subImagesButton.getSelection()) { + for (int j = 0; j < columnTitles.length; j++) { + item.setImage(j, image); + } + } else { + item.setImage(image); + } + item = new TreeItem (item, DWT.NONE); + setItemText(item, 1, ControlExample.getResourceString("Node_2_2_1")); + if (multiColumn && subImagesButton.getSelection()) { + for (int j = 0; j < columnTitles.length; j++) { + item.setImage(j, image); + } + } else { + item.setImage(image); + } + imageNode1 = treeRoots[0]; + packColumns(tree2); + } + + void setItemText(TreeItem item, int i, String node) { + int index = i % 3; + if (multipleColumns.getSelection()) { + tableData [index][0] = node; + item.setText (tableData [index]); + } else { + item.setText (node); + } + } + + /** + * Creates the "Size" group. The "Size" group contains + * controls that allow the user to change the size of + * the example widgets. + */ + void createSizeGroup () { + super.createSizeGroup(); + + packColumnsButton = new Button (sizeGroup, DWT.PUSH); + packColumnsButton.setText (ControlExample.getResourceString("Pack_Columns")); + packColumnsButton.addSelectionListener(new SelectionAdapter () { + public void widgetSelected (SelectionEvent event) { + packColumns (tree1); + packColumns (tree2); + setExampleWidgetSize (); + } + }); + } + + /** + * Creates the "Style" group. + */ + void createStyleGroup() { + super.createStyleGroup(); + + /* Create the extra widgets */ + checkButton = new Button (styleGroup, DWT.CHECK); + checkButton.setText ("DWT.CHECK"); + fullSelectionButton = new Button (styleGroup, DWT.CHECK); + fullSelectionButton.setText ("DWT.FULL_SELECTION"); + } + + /** + * Gets the "Example" widget children's items, if any. + * + * @return an array containing the example widget children's items + */ + Item [] getExampleWidgetItems () { + /* Note: We do not bother collecting the tree items + * because tree items don't have any events. If events + * are ever added to TreeItem, then this needs to change. + */ + Item [] columns1 = tree1.getColumns(); + Item [] columns2 = tree2.getColumns(); + Item [] allItems = new Item [columns1.length + columns2.length]; + System.arraycopy(columns1, 0, allItems, 0, columns1.length); + System.arraycopy(columns2, 0, allItems, columns1.length, columns2.length); + return allItems; + } + + /** + * Gets the "Example" widget children. + */ + Widget [] getExampleWidgets () { + return new 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"}; + } + + Object[] parameterForType(String typeName, String 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, ','); + TreeItem[] items = new TreeItem[values.length]; + for (int i = 0; i < values.length; i++) { + TreeItem item = findItem(values[i], ((Tree) widget).getItems()); + if (item is null) break; + items[i] = item; + } + return new Object[] {items}; + } + return super.parameterForType(typeName, value, widget); + } + + TreeItem findItem(String value, TreeItem[] items) { + for (int i = 0; i < items.length; i++) { + TreeItem item = items[i]; + if (item.getText().equals(value)) return item; + item = findItem(value, item.getItems()); + if (item !is null) return item; + } + return null; + } + + /** + * Gets the text for the tab folder item. + */ + String getTabText () { + return "Tree"; + } + + void packColumns (Tree tree) { + if (multipleColumns.getSelection()) { + int columnCount = tree.getColumnCount(); + for (int i = 0; i < columnCount; i++) { + TreeColumn treeColumn = tree.getColumn(i); + treeColumn.pack(); + } + } + } + + /** + * Sets the moveable columns state of the "Example" widgets. + */ + void setColumnsMoveable () { + bool selection = moveableColumns.getSelection(); + TreeColumn[] columns1 = tree1.getColumns(); + for (int i = 0; i < columns1.length; i++) { + columns1[i].setMoveable(selection); + } + TreeColumn[] columns2 = tree2.getColumns(); + for (int i = 0; i < columns2.length; i++) { + columns2[i].setMoveable(selection); + } + } + + /** + * Sets the resizable columns state of the "Example" widgets. + */ + void setColumnsResizable () { + bool selection = resizableColumns.getSelection(); + TreeColumn[] columns1 = tree1.getColumns(); + for (int i = 0; i < columns1.length; i++) { + columns1[i].setResizable(selection); + } + TreeColumn[] columns2 = tree2.getColumns(); + for (int i = 0; i < columns2.length; i++) { + columns2[i].setResizable(selection); + } + } + + /** + * Sets the foreground color, background color, and font + * of the "Example" widgets to their default settings. + * Also sets foreground and background color of the Node 1 + * TreeItems to default settings. + */ + void resetColorsAndFonts () { + super.resetColorsAndFonts (); + Color oldColor = itemForegroundColor; + itemForegroundColor = null; + setItemForeground (); + if (oldColor !is null) oldColor.dispose(); + oldColor = itemBackgroundColor; + itemBackgroundColor = null; + setItemBackground (); + if (oldColor !is null) oldColor.dispose(); + Font oldFont = font; + itemFont = null; + setItemFont (); + if (oldFont !is null) oldFont.dispose(); + oldColor = cellForegroundColor; + cellForegroundColor = null; + setCellForeground (); + if (oldColor !is null) oldColor.dispose(); + oldColor = cellBackgroundColor; + cellBackgroundColor = null; + setCellBackground (); + if (oldColor !is null) oldColor.dispose(); + oldFont = font; + cellFont = null; + setCellFont (); + if (oldFont !is null) oldFont.dispose(); + } + + /** + * Sets the state of the "Example" widgets. + */ + void setExampleWidgetState () { + setItemBackground (); + setItemForeground (); + setItemFont (); + setCellBackground (); + setCellForeground (); + setCellFont (); + if (!instance.startup) { + setColumnsMoveable (); + setColumnsResizable (); + setWidgetHeaderVisible (); + setWidgetSortIndicator (); + setWidgetLinesVisible (); + } + super.setExampleWidgetState (); + checkButton.setSelection ((tree1.getStyle () & DWT.CHECK) !is 0); + checkButton.setSelection ((tree2.getStyle () & DWT.CHECK) !is 0); + fullSelectionButton.setSelection ((tree1.getStyle () & DWT.FULL_SELECTION) !is 0); + fullSelectionButton.setSelection ((tree2.getStyle () & DWT.FULL_SELECTION) !is 0); + try { + TreeColumn column = tree1.getColumn(0); + moveableColumns.setSelection (column.getMoveable()); + resizableColumns.setSelection (column.getResizable()); + } catch (IllegalArgumentException ex) {} + headerVisibleButton.setSelection (tree1.getHeaderVisible()); + linesVisibleButton.setSelection (tree1.getLinesVisible()); + } + + /** + * Sets the background color of the Node 1 TreeItems in column 1. + */ + void setCellBackground () { + if (!instance.startup) { + textNode1.setBackground (1, cellBackgroundColor); + imageNode1.setBackground (1, cellBackgroundColor); + } + /* Set the background color item's image to match the background color of the cell. */ + Color color = cellBackgroundColor; + if (color is null) color = textNode1.getBackground (1); + TableItem item = colorAndFontTable.getItem(CELL_BACKGROUND_COLOR); + Image oldImage = item.getImage(); + if (oldImage !is null) oldImage.dispose(); + item.setImage (colorImage(color)); + } + + /** + * Sets the foreground color of the Node 1 TreeItems in column 1. + */ + void setCellForeground () { + if (!instance.startup) { + textNode1.setForeground (1, cellForegroundColor); + imageNode1.setForeground (1, cellForegroundColor); + } + /* Set the foreground color item's image to match the foreground color of the cell. */ + Color color = cellForegroundColor; + if (color is null) color = textNode1.getForeground (1); + TableItem item = colorAndFontTable.getItem(CELL_FOREGROUND_COLOR); + Image oldImage = item.getImage(); + if (oldImage !is null) oldImage.dispose(); + item.setImage (colorImage(color)); + } + + /** + * Sets the font of the Node 1 TreeItems in column 1. + */ + void setCellFont () { + if (!instance.startup) { + textNode1.setFont (1, cellFont); + imageNode1.setFont (1, cellFont); + } + /* Set the font item's image to match the font of the item. */ + Font ft = cellFont; + if (ft is null) ft = textNode1.getFont (1); + TableItem item = colorAndFontTable.getItem(CELL_FONT); + Image oldImage = item.getImage(); + if (oldImage !is null) oldImage.dispose(); + item.setImage (fontImage(ft)); + item.setFont(ft); + colorAndFontTable.layout (); + } + + /** + * Sets the background color of the Node 1 TreeItems. + */ + void setItemBackground () { + if (!instance.startup) { + textNode1.setBackground (itemBackgroundColor); + imageNode1.setBackground (itemBackgroundColor); + } + /* Set the background button's color to match the background color of the item. */ + Color color = itemBackgroundColor; + if (color is null) color = textNode1.getBackground (); + TableItem item = colorAndFontTable.getItem(ITEM_BACKGROUND_COLOR); + Image oldImage = item.getImage(); + if (oldImage !is null) oldImage.dispose(); + item.setImage (colorImage(color)); + } + + /** + * Sets the foreground color of the Node 1 TreeItems. + */ + void setItemForeground () { + if (!instance.startup) { + textNode1.setForeground (itemForegroundColor); + imageNode1.setForeground (itemForegroundColor); + } + /* Set the foreground button's color to match the foreground color of the item. */ + Color color = itemForegroundColor; + if (color is null) color = textNode1.getForeground (); + TableItem item = colorAndFontTable.getItem(ITEM_FOREGROUND_COLOR); + Image oldImage = item.getImage(); + if (oldImage !is null) oldImage.dispose(); + item.setImage (colorImage(color)); + } + + /** + * Sets the font of the Node 1 TreeItems. + */ + void setItemFont () { + if (!instance.startup) { + textNode1.setFont (itemFont); + imageNode1.setFont (itemFont); + } + /* Set the font item's image to match the font of the item. */ + Font ft = itemFont; + if (ft is null) ft = textNode1.getFont (); + TableItem item = colorAndFontTable.getItem(ITEM_FONT); + Image oldImage = item.getImage(); + if (oldImage !is null) oldImage.dispose(); + item.setImage (fontImage(ft)); + item.setFont(ft); + colorAndFontTable.layout (); + } + + /** + * Sets the header visible state of the "Example" widgets. + */ + void setWidgetHeaderVisible () { + tree1.setHeaderVisible (headerVisibleButton.getSelection ()); + tree2.setHeaderVisible (headerVisibleButton.getSelection ()); + } + + /** + * Sets the sort indicator state of the "Example" widgets. + */ + void setWidgetSortIndicator () { + if (sortIndicatorButton.getSelection ()) { + initializeSortState (tree1); + initializeSortState (tree2); + } else { + resetSortState (tree1); + resetSortState (tree2); + } + } + + /** + * Sets the initial sort indicator state and adds a listener + * to cycle through sort states and columns. + */ + void initializeSortState (final 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() { + public void widgetSelected(SelectionEvent e) { + int sortDirection = DWT.DOWN; + if (e.widget is tree.getSortColumn()) { + /* If the sort column hasn't changed, cycle down -> up -> none. */ + switch (tree.getSortDirection ()) { + case DWT.DOWN: sortDirection = DWT.UP; break; + case DWT.UP: sortDirection = DWT.NONE; break; + } + } else { + tree.setSortColumn((TreeColumn)e.widget); + } + tree.setSortDirection (sortDirection); + } + }; + column.addSelectionListener(listener); + column.setData("SortListener", listener); //$NON-NLS-1$ + } + } + + void resetSortState (final 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$ + if (listener !is null) columns[i].removeSelectionListener(listener); + } + } + + /** + * Sets the lines visible state of the "Example" widgets. + */ + void setWidgetLinesVisible () { + tree1.setLinesVisible (linesVisibleButton.getSelection ()); + tree2.setLinesVisible (linesVisibleButton.getSelection ()); + } + + 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; + menuMouseCoords = t.toControl(new Point(event.x, event.y)); + item.addSelectionListener(new SelectionAdapter() { + public void widgetSelected(SelectionEvent e) { + eventConsole.append ("getItem(Point(" + menuMouseCoords + ")) returned: " + t.getItem(menuMouseCoords)); + eventConsole.append ("\n"); + }; + }); + } +}