diff options
Diffstat (limited to 'examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/controlexample/Tab.java')
-rwxr-xr-x | examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/controlexample/Tab.java | 1809 |
1 files changed, 0 insertions, 1809 deletions
diff --git a/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/controlexample/Tab.java b/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/controlexample/Tab.java deleted file mode 100755 index 74eb7b5640..0000000000 --- a/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/controlexample/Tab.java +++ /dev/null @@ -1,1809 +0,0 @@ -/******************************************************************************* - * 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 org.eclipse.swt.examples.controlexample; - - -import org.eclipse.swt.*; -import org.eclipse.swt.graphics.*; -import org.eclipse.swt.widgets.*; -import org.eclipse.swt.layout.*; -import org.eclipse.swt.events.*; - -/** - * <code>Tab</code> 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. - */ -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 boolean RTL_SUPPORT_ENABLE = "win32".equals(SWT.getPlatform()) || "gtk".equals(SWT.getPlatform()); - 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; - - boolean samplePopup = false; - - /* Set/Get API controls */ - Combo nameCombo; - Label returnTypeLabel; - Button getButton, setButton; - Text setText, getText; - Shell setGetDialog; - - /* Event logging variables and controls */ - Text eventConsole; - boolean logging = false; - boolean [] eventsFilter; - int setFieldsMask = 0; - Event setFieldsEvent = new Event (); - boolean ignore = false; - - /* Event logging constants */ - static final int DOIT = 0x0100; - static final int DETAIL = 0x0200; - static final int TEXT = 0x0400; - static final int X = 0x0800; - static final int Y = 0x1000; - static final int WIDTH = 0x2000; - static final int HEIGHT = 0x4000; - - static final int DETAIL_IME = 0; - static final int DETAIL_ERASE_ITEM = 1; - static final int DETAIL_TRAVERSE = 2; - - static class EventInfo { - String name; - int type; - int settableFields; - int setFields; - Event event; - EventInfo (String name, int type, int settableFields, int setFields, Event event) { - this.name = name; - this.type = type; - this.settableFields = settableFields; - this.setFields = setFields; - this.event = event; - } - } - - final EventInfo [] EVENT_INFO = { - new EventInfo ("Activate", SWT.Activate, 0, 0, new Event()), - new EventInfo ("Arm", SWT.Arm, 0, 0, new Event()), - new EventInfo ("Close", SWT.Close, DOIT, 0, new Event()), - new EventInfo ("Collapse", SWT.Collapse, 0, 0, new Event()), - new EventInfo ("Deactivate", SWT.Deactivate, 0, 0, new Event()), - new EventInfo ("DefaultSelection", SWT.DefaultSelection, 0, 0, new Event()), - new EventInfo ("Deiconify", SWT.Deiconify, 0, 0, new Event()), - new EventInfo ("Dispose", SWT.Dispose, 0, 0, new Event()), - new EventInfo ("DragDetect", SWT.DragDetect, 0, 0, new Event()), - new EventInfo ("EraseItem", SWT.EraseItem, DETAIL | DETAIL_ERASE_ITEM, 0, new Event()), - new EventInfo ("Expand", SWT.Expand, 0, 0, new Event()), - new EventInfo ("FocusIn", SWT.FocusIn, 0, 0, new Event()), - new EventInfo ("FocusOut", SWT.FocusOut, 0, 0, new Event()), - new EventInfo ("HardKeyDown", SWT.HardKeyDown, 0, 0, new Event()), - new EventInfo ("HardKeyUp", SWT.HardKeyUp, 0, 0, new Event()), - new EventInfo ("Help", SWT.Help, 0, 0, new Event()), - new EventInfo ("Hide", SWT.Hide, 0, 0, new Event()), - new EventInfo ("Iconify", SWT.Iconify, 0, 0, new Event()), - new EventInfo ("KeyDown", SWT.KeyDown, DOIT, 0, new Event()), - new EventInfo ("KeyUp", SWT.KeyUp, DOIT, 0, new Event()), - new EventInfo ("MeasureItem", SWT.MeasureItem, 0, 0, new Event()), - new EventInfo ("MenuDetect", SWT.MenuDetect, X | Y | DOIT, 0, new Event()), - new EventInfo ("Modify", SWT.Modify, 0, 0, new Event()), - new EventInfo ("MouseDoubleClick", SWT.MouseDoubleClick, 0, 0, new Event()), - new EventInfo ("MouseDown", SWT.MouseDown, 0, 0, new Event()), - new EventInfo ("MouseEnter", SWT.MouseEnter, 0, 0, new Event()), - new EventInfo ("MouseExit", SWT.MouseExit, 0, 0, new Event()), - new EventInfo ("MouseHover", SWT.MouseHover, 0, 0, new Event()), - new EventInfo ("MouseMove", SWT.MouseMove, 0, 0, new Event()), - new EventInfo ("MouseUp", SWT.MouseUp, 0, 0, new Event()), - new EventInfo ("MouseWheel", SWT.MouseWheel, 0, 0, new Event()), - new EventInfo ("Move", SWT.Move, 0, 0, new Event()), - new EventInfo ("Paint", SWT.Paint, 0, 0, new Event()), - new EventInfo ("PaintItem", SWT.PaintItem, 0, 0, new Event()), - new EventInfo ("Resize", SWT.Resize, 0, 0, new Event()), - new EventInfo ("Selection", SWT.Selection, X | Y | DOIT, 0, new Event()), // sash - new EventInfo ("SetData", SWT.SetData, 0, 0, new Event()), -// new EventInfo ("Settings", SWT.Settings, 0, 0, new Event()), // note: this event only goes to Display - new EventInfo ("Show", SWT.Show, 0, 0, new Event()), - new EventInfo ("Traverse", SWT.Traverse, DETAIL | DETAIL_TRAVERSE | DOIT, 0, new Event()), - new EventInfo ("Verify", SWT.Verify, TEXT | DOIT, 0, new Event()), - new EventInfo ("ImeComposition", SWT.ImeComposition, DETAIL | DETAIL_IME | TEXT | DOIT, 0, new Event()), - }; - - static final String [][] DETAIL_CONSTANTS = { - { // DETAIL_IME = 0 - "SWT.COMPOSITION_CHANGED", - "SWT.COMPOSITION_OFFSET", - "SWT.COMPOSITION_SELECTION", - }, - { // DETAIL_ERASE_ITEM = 1 - "SWT.SELECTED", - "SWT.FOCUSED", - "SWT.BACKGROUND", - "SWT.FOREGROUND", - "SWT.HOT", - }, - { // DETAIL_TRAVERSE = 2 - "SWT.TRAVERSE_NONE", - "SWT.TRAVERSE_ESCAPE", - "SWT.TRAVERSE_RETURN", - "SWT.TRAVERSE_TAB_PREVIOUS", - "SWT.TRAVERSE_TAB_NEXT", - "SWT.TRAVERSE_ARROW_PREVIOUS", - "SWT.TRAVERSE_ARROW_NEXT", - "SWT.TRAVERSE_MNEMONIC", - "SWT.TRAVERSE_PAGE_PREVIOUS", - "SWT.TRAVERSE_PAGE_NEXT", - }, - }; - - static final Object [] DETAIL_VALUES = { - "SWT.COMPOSITION_CHANGED", new Integer(SWT.COMPOSITION_CHANGED), - "SWT.COMPOSITION_OFFSET", new Integer(SWT.COMPOSITION_OFFSET), - "SWT.COMPOSITION_SELECTION", new Integer(SWT.COMPOSITION_SELECTION), - "SWT.SELECTED", new Integer(SWT.SELECTED), - "SWT.FOCUSED", new Integer(SWT.FOCUSED), - "SWT.BACKGROUND", new Integer(SWT.BACKGROUND), - "SWT.FOREGROUND", new Integer(SWT.FOREGROUND), - "SWT.HOT", new Integer(SWT.HOT), - "SWT.TRAVERSE_NONE", new Integer(SWT.TRAVERSE_NONE), - "SWT.TRAVERSE_ESCAPE", new Integer(SWT.TRAVERSE_ESCAPE), - "SWT.TRAVERSE_RETURN", new Integer(SWT.TRAVERSE_RETURN), - "SWT.TRAVERSE_TAB_PREVIOUS", new Integer(SWT.TRAVERSE_TAB_PREVIOUS), - "SWT.TRAVERSE_TAB_NEXT", new Integer(SWT.TRAVERSE_TAB_NEXT), - "SWT.TRAVERSE_ARROW_PREVIOUS", new Integer(SWT.TRAVERSE_ARROW_PREVIOUS), - "SWT.TRAVERSE_ARROW_NEXT", new Integer(SWT.TRAVERSE_ARROW_NEXT), - "SWT.TRAVERSE_MNEMONIC", new Integer(SWT.TRAVERSE_MNEMONIC), - "SWT.TRAVERSE_PAGE_PREVIOUS", new Integer(SWT.TRAVERSE_PAGE_PREVIOUS), - "SWT.TRAVERSE_PAGE_NEXT", new Integer(SWT.TRAVERSE_PAGE_NEXT), - }; - - /** - * Creates the Tab within a given instance of ControlExample. - */ - Tab(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, SWT.NONE); - controlGroup.setLayout (new GridLayout (2, true)); - controlGroup.setLayoutData (new GridData(SWT.FILL, SWT.FILL, false, false)); - controlGroup.setText (ControlExample.getResourceString("Parameters")); - - /* Create individual groups inside the "Control" group */ - createStyleGroup (); - createOtherGroup (); - createSetGetGroup(); - createSizeGroup (); - createColorAndFontGroup (); - if (rtlSupport()) { - 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 SelectionAdapter () { - public void widgetSelected (SelectionEvent event) { - if ((event.widget.getStyle () & SWT.RADIO) != 0) { - if (!((Button) event.widget).getSelection ()) return; - } - recreateExampleWidgets (); - } - }; - Control [] children = styleGroup.getChildren (); - for (int i=0; i<children.length; i++) { - if (children [i] instanceof Button) { - Button button = (Button) children [i]; - button.addSelectionListener (selectionListener); - } else { - if (children [i] instanceof Composite) { - /* Look down one more level of children in the style group. */ - Composite composite = (Composite) children [i]; - Control [] grandchildren = composite.getChildren (); - for (int j=0; j<grandchildren.length; j++) { - if (grandchildren [j] instanceof Button) { - Button button = (Button) grandchildren [j]; - button.addSelectionListener (selectionListener); - } - } - } - } - } - if (rtlSupport()) { - rtlButton.addSelectionListener (selectionListener); - ltrButton.addSelectionListener (selectionListener); - defaultOrietationButton.addSelectionListener (selectionListener); - } - } - - /** - * Append the Set/Get API controls to the "Other" group. - */ - void createSetGetGroup() { - /* - * Create the button to access set/get API functionality. - */ - final String [] methodNames = getMethodNames (); - if (methodNames != null) { - final Button setGetButton = new Button (otherGroup, SWT.PUSH); - setGetButton.setText (ControlExample.getResourceString ("Set_Get")); - setGetButton.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false)); - setGetButton.addSelectionListener (new SelectionAdapter() { - public void widgetSelected (SelectionEvent e) { - if (getExampleWidgets().length > 0) { - if (setGetDialog == null) { - setGetDialog = createSetGetDialog(methodNames); - } - Point pt = setGetButton.getLocation(); - pt = display.map(setGetButton.getParent(), null, pt); - setGetDialog.setLocation(pt.x, pt.y); - setGetDialog.open(); - } - } - }); - } - } - - /** - * Creates the "Control" widget children. - * Subclasses override this method to augment - * the standard controls created in the "Style", - * "Other" and "Size" groups. - */ - void createControlWidgets () { - } - - /** - * Creates the "Colors and Fonts" group. This is typically - * a child of the "Control" group. Subclasses override - * this method to customize color and font settings. - */ - void createColorAndFontGroup () { - /* Create the group. */ - colorGroup = new Group(controlGroup, SWT.NONE); - colorGroup.setLayout (new GridLayout (2, true)); - colorGroup.setLayoutData (new GridData (SWT.FILL, SWT.FILL, false, false)); - colorGroup.setText (ControlExample.getResourceString ("Colors")); - colorAndFontTable = new Table(colorGroup, SWT.BORDER | SWT.V_SCROLL); - colorAndFontTable.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, true, false, 2, 1)); - TableItem item = new TableItem(colorAndFontTable, SWT.None); - item.setText(ControlExample.getResourceString ("Foreground_Color")); - colorAndFontTable.setSelection(0); - item = new TableItem(colorAndFontTable, SWT.None); - item.setText(ControlExample.getResourceString ("Background_Color")); - item = new TableItem(colorAndFontTable, SWT.None); - item.setText(ControlExample.getResourceString ("Font")); - Button changeButton = new Button (colorGroup, SWT.PUSH); - changeButton.setText(ControlExample.getResourceString("Change")); - changeButton.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false)); - Button defaultsButton = new Button (colorGroup, SWT.PUSH); - defaultsButton.setText(ControlExample.getResourceString("Defaults")); - defaultsButton.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false)); - - /* Add listeners to set/reset colors and fonts. */ - colorDialog = new ColorDialog (shell); - fontDialog = new FontDialog (shell); - colorAndFontTable.addSelectionListener(new SelectionAdapter() { - public void widgetDefaultSelected(SelectionEvent event) { - changeFontOrColor (colorAndFontTable.getSelectionIndex()); - } - }); - changeButton.addSelectionListener(new SelectionAdapter() { - public void widgetSelected(SelectionEvent event) { - changeFontOrColor (colorAndFontTable.getSelectionIndex()); - } - }); - defaultsButton.addSelectionListener(new SelectionAdapter () { - public void widgetSelected (SelectionEvent e) { - resetColorsAndFonts (); - } - }); - shell.addDisposeListener(new DisposeListener() { - public void widgetDisposed(DisposeEvent event) { - if (foregroundColor != null) foregroundColor.dispose(); - if (backgroundColor != null) backgroundColor.dispose(); - if (font != null) font.dispose(); - foregroundColor = null; - backgroundColor = null; - font = null; - if (colorAndFontTable != null && !colorAndFontTable.isDisposed()) { - TableItem [] items = colorAndFontTable.getItems(); - for (int i = 0; i < items.length; i++) { - Image image = items[i].getImage(); - if (image != null) image.dispose(); - } - } - } - }); - } - - void changeFontOrColor(int index) { - switch (index) { - case FOREGROUND_COLOR: { - Color oldColor = foregroundColor; - if (oldColor == null) { - Control [] controls = getExampleControls (); - if (controls.length > 0) oldColor = controls [0].getForeground (); - } - if (oldColor != null) colorDialog.setRGB(oldColor.getRGB()); // seed dialog with current color - RGB rgb = colorDialog.open(); - if (rgb == null) return; - oldColor = foregroundColor; // save old foreground color to dispose when done - foregroundColor = new Color (display, rgb); - setExampleWidgetForeground (); - if (oldColor != null) oldColor.dispose (); - } - break; - case BACKGROUND_COLOR: { - Color oldColor = backgroundColor; - if (oldColor == null) { - Control [] controls = getExampleControls (); - if (controls.length > 0) oldColor = controls [0].getBackground (); // seed dialog with current color - } - if (oldColor != null) colorDialog.setRGB(oldColor.getRGB()); - RGB rgb = colorDialog.open(); - if (rgb == null) return; - oldColor = backgroundColor; // save old background color to dispose when done - backgroundColor = new Color (display, rgb); - setExampleWidgetBackground (); - if (oldColor != null) oldColor.dispose (); - } - break; - case FONT: { - Font oldFont = font; - if (oldFont == null) { - Control [] controls = getExampleControls (); - if (controls.length > 0) oldFont = controls [0].getFont (); - } - if (oldFont != null) fontDialog.setFontList(oldFont.getFontData()); // seed dialog with current font - FontData fontData = fontDialog.open (); - if (fontData == null) return; - oldFont = font; // dispose old font when done - font = new Font (display, fontData); - setExampleWidgetFont (); - setExampleWidgetSize (); - if (oldFont != null) oldFont.dispose (); - } - break; - } - } - - /** - * Creates the "Other" group. This is typically - * a child of the "Control" group. - */ - void createOtherGroup () { - /* Create the group */ - otherGroup = new Group (controlGroup, SWT.NONE); - otherGroup.setLayout (new GridLayout ()); - otherGroup.setLayoutData (new GridData (SWT.FILL, SWT.FILL, false, false)); - otherGroup.setText (ControlExample.getResourceString("Other")); - - /* Create the controls */ - enabledButton = new Button(otherGroup, SWT.CHECK); - enabledButton.setText(ControlExample.getResourceString("Enabled")); - visibleButton = new Button(otherGroup, SWT.CHECK); - visibleButton.setText(ControlExample.getResourceString("Visible")); - backgroundImageButton = new Button(otherGroup, SWT.CHECK); - backgroundImageButton.setText(ControlExample.getResourceString("BackgroundImage")); - popupMenuButton = new Button(otherGroup, SWT.CHECK); - popupMenuButton.setText(ControlExample.getResourceString("PopupMenu")); - - /* Add the listeners */ - enabledButton.addSelectionListener (new SelectionAdapter () { - public void widgetSelected (SelectionEvent event) { - setExampleWidgetEnabled (); - } - }); - visibleButton.addSelectionListener (new SelectionAdapter () { - public void widgetSelected (SelectionEvent event) { - setExampleWidgetVisibility (); - } - }); - backgroundImageButton.addSelectionListener (new SelectionAdapter () { - public void widgetSelected (SelectionEvent event) { - setExampleWidgetBackgroundImage (); - } - }); - popupMenuButton.addSelectionListener (new 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 == 0) return; - - /* Create the group */ - backgroundModeGroup = new Group (controlGroup, SWT.NONE); - backgroundModeGroup.setLayout (new GridLayout ()); - backgroundModeGroup.setLayoutData (new GridData (SWT.FILL, SWT.FILL, false, false)); - backgroundModeGroup.setText (ControlExample.getResourceString("Background_Mode")); - - /* Create the controls */ - backgroundModeCombo = new Combo(backgroundModeGroup, SWT.READ_ONLY); - backgroundModeCombo.setItems(new String[] {"SWT.INHERIT_NONE", "SWT.INHERIT_DEFAULT", "SWT.INHERIT_FORCE"}); - backgroundModeImageButton = new Button(backgroundModeGroup, SWT.CHECK); - backgroundModeImageButton.setText(ControlExample.getResourceString("BackgroundImage")); - backgroundModeColorButton = new Button(backgroundModeGroup, SWT.CHECK); - backgroundModeColorButton.setText(ControlExample.getResourceString("BackgroundColor")); - - /* Add the listeners */ - backgroundModeCombo.addSelectionListener (new SelectionAdapter () { - public void widgetSelected (SelectionEvent event) { - setExampleGroupBackgroundMode (); - } - }); - backgroundModeImageButton.addSelectionListener (new SelectionAdapter () { - public void widgetSelected (SelectionEvent event) { - setExampleGroupBackgroundImage (); - } - }); - backgroundModeColorButton.addSelectionListener (new SelectionAdapter () { - public void widgetSelected (SelectionEvent event) { - setExampleGroupBackgroundColor (); - } - }); - - /* Set the default state */ - backgroundModeCombo.setText(backgroundModeCombo.getItem(0)); - backgroundModeImageButton.setSelection(false); - backgroundModeColorButton.setSelection(false); - } - - void createEditEventDialog(Shell parent, int x, int y, final int index) { - final Shell dialog = new Shell(parent, SWT.DIALOG_TRIM | SWT.RESIZE | SWT.APPLICATION_MODAL); - dialog.setLayout(new GridLayout()); - dialog.setText(ControlExample.getResourceString ("Edit_Event")); - Label label = new Label (dialog, SWT.NONE); - label.setText (ControlExample.getResourceString ("Edit_Event_Fields", new String [] {EVENT_INFO[index].name})); - - Group group = new Group (dialog, SWT.NONE); - group.setLayout(new GridLayout(2, false)); - group.setLayoutData(new GridData (SWT.FILL, SWT.FILL, true, true)); - - final int fields = EVENT_INFO[index].settableFields; - final int eventType = EVENT_INFO[index].type; - setFieldsMask = EVENT_INFO[index].setFields; - setFieldsEvent = EVENT_INFO[index].event; - - if ((fields & DOIT) != 0) { - new Label (group, SWT.NONE).setText ("doit"); - final Combo doitCombo = new Combo (group, SWT.READ_ONLY); - doitCombo.setItems (new String [] {"", "true", "false"}); - if ((setFieldsMask & DOIT) != 0) doitCombo.setText(Boolean.toString(setFieldsEvent.doit)); - doitCombo.setLayoutData (new GridData (SWT.FILL, SWT.CENTER, true, false)); - doitCombo.addSelectionListener(new SelectionAdapter () { - public void widgetSelected(SelectionEvent e) { - String newValue = doitCombo.getText(); - if (newValue.length() == 0) { - setFieldsMask &= ~DOIT; - } else { - setFieldsEvent.type = eventType; - setFieldsEvent.doit = newValue.equals("true"); - setFieldsMask |= DOIT; - } - } - }); - } - - if ((fields & DETAIL) != 0) { - new Label (group, SWT.NONE).setText ("detail"); - int detailType = fields & 0xFF; - final Combo detailCombo = new Combo (group, SWT.READ_ONLY); - detailCombo.setItems (DETAIL_CONSTANTS[detailType]); - detailCombo.add ("", 0); - detailCombo.setVisibleItemCount(detailCombo.getItemCount()); - if ((setFieldsMask & DETAIL) != 0) detailCombo.setText (DETAIL_CONSTANTS[detailType][setFieldsEvent.detail]); - detailCombo.setLayoutData (new GridData (SWT.FILL, SWT.CENTER, true, false)); - detailCombo.addSelectionListener(new SelectionAdapter () { - public void widgetSelected(SelectionEvent e) { - String newValue = detailCombo.getText(); - if (newValue.length() == 0) { - setFieldsMask &= ~DETAIL; - } else { - setFieldsEvent.type = eventType; - for (int i = 0; i < DETAIL_VALUES.length; i += 2) { - if (newValue.equals (DETAIL_VALUES [i])) { - setFieldsEvent.detail = ((Integer) DETAIL_VALUES [i + 1]).intValue(); - break; - } - } - setFieldsMask |= DETAIL; - } - } - }); - } - - if ((fields & TEXT) != 0) { - new Label (group, SWT.NONE).setText ("text"); - final Text textText = new Text (group, SWT.BORDER); - if ((setFieldsMask & TEXT) != 0) textText.setText(setFieldsEvent.text); - textText.setLayoutData (new GridData (SWT.FILL, SWT.CENTER, true, false)); - textText.addModifyListener(new ModifyListener () { - public void modifyText(ModifyEvent e) { - String newValue = textText.getText(); - if (newValue.length() == 0) { - setFieldsMask &= ~TEXT; - } else { - setFieldsEvent.type = eventType; - setFieldsEvent.text = newValue; - setFieldsMask |= TEXT; - } - } - }); - } - - if ((fields & X) != 0) { - new Label (group, SWT.NONE).setText ("x"); - final Text xText = new Text (group, SWT.BORDER); - if ((setFieldsMask & X) != 0) xText.setText(Integer.toString(setFieldsEvent.x)); - xText.setLayoutData (new GridData (SWT.FILL, SWT.CENTER, true, false)); - xText.addModifyListener(new ModifyListener () { - public void modifyText(ModifyEvent e) { - String newValue = xText.getText (); - try { - int newIntValue = Integer.parseInt (newValue); - setFieldsEvent.type = eventType; - setFieldsEvent.x = newIntValue; - setFieldsMask |= X; - } catch (NumberFormatException ex) { - setFieldsMask &= ~X; - } - } - }); - } - - if ((fields & Y) != 0) { - new Label (group, SWT.NONE).setText ("y"); - final Text yText = new Text (group, SWT.BORDER); - if ((setFieldsMask & Y) != 0) yText.setText(Integer.toString(setFieldsEvent.y)); - yText.setLayoutData (new GridData (SWT.FILL, SWT.CENTER, true, false)); - yText.addModifyListener(new ModifyListener () { - public void modifyText(ModifyEvent e) { - String newValue = yText.getText (); - try { - int newIntValue = Integer.parseInt (newValue); - setFieldsEvent.type = eventType; - setFieldsEvent.y = newIntValue; - setFieldsMask |= Y; - } catch (NumberFormatException ex) { - setFieldsMask &= ~Y; - } - } - }); - } - - if ((fields & WIDTH) != 0) { - new Label (group, SWT.NONE).setText ("width"); - final Text widthText = new Text (group, SWT.BORDER); - if ((setFieldsMask & WIDTH) != 0) widthText.setText(Integer.toString(setFieldsEvent.width)); - widthText.setLayoutData (new GridData (SWT.FILL, SWT.CENTER, true, false)); - widthText.addModifyListener(new ModifyListener () { - public void modifyText(ModifyEvent e) { - String newValue = widthText.getText (); - try { - int newIntValue = Integer.parseInt (newValue); - setFieldsEvent.type = eventType; - setFieldsEvent.width = newIntValue; - setFieldsMask |= WIDTH; - } catch (NumberFormatException ex) { - setFieldsMask &= ~WIDTH; - } - } - }); - } - - if ((fields & HEIGHT) != 0) { - new Label (group, SWT.NONE).setText ("height"); - final Text heightText = new Text (group, SWT.BORDER); - if ((setFieldsMask & HEIGHT) != 0) heightText.setText(Integer.toString(setFieldsEvent.height)); - heightText.setLayoutData (new GridData (SWT.FILL, SWT.CENTER, true, false)); - heightText.addModifyListener(new ModifyListener () { - public void modifyText(ModifyEvent e) { - String newValue = heightText.getText (); - try { - int newIntValue = Integer.parseInt (newValue); - setFieldsEvent.type = eventType; - setFieldsEvent.height = newIntValue; - setFieldsMask |= HEIGHT; - } catch (NumberFormatException ex) { - setFieldsMask &= ~HEIGHT; - } - } - }); - } - - Button ok = new Button (dialog, SWT.PUSH); - ok.setText (ControlExample.getResourceString("OK")); - GridData data = new GridData (70, SWT.DEFAULT); - data.horizontalAlignment = SWT.RIGHT; - ok.setLayoutData (data); - ok.addSelectionListener (new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - EVENT_INFO[index].setFields = setFieldsMask; - EVENT_INFO[index].event = setFieldsEvent; - dialog.dispose(); - } - }); - - dialog.setDefaultButton(ok); - dialog.pack(); - dialog.setLocation(x, y); - dialog.open(); - } - - /** - * Create the event console popup menu. - */ - void createEventConsolePopup () { - Menu popup = new Menu (shell, SWT.POP_UP); - eventConsole.setMenu (popup); - - MenuItem cut = new MenuItem (popup, SWT.PUSH); - cut.setText (ControlExample.getResourceString("MenuItem_Cut")); - cut.addListener (SWT.Selection, new Listener () { - public void handleEvent (Event event) { - eventConsole.cut (); - } - }); - MenuItem copy = new MenuItem (popup, SWT.PUSH); - copy.setText (ControlExample.getResourceString("MenuItem_Copy")); - copy.addListener (SWT.Selection, new Listener () { - public void handleEvent (Event event) { - eventConsole.copy (); - } - }); - MenuItem paste = new MenuItem (popup, SWT.PUSH); - paste.setText (ControlExample.getResourceString("MenuItem_Paste")); - paste.addListener (SWT.Selection, new Listener () { - public void handleEvent (Event event) { - eventConsole.paste (); - } - }); - new MenuItem (popup, SWT.SEPARATOR); - MenuItem selectAll = new MenuItem (popup, SWT.PUSH); - selectAll.setText(ControlExample.getResourceString("MenuItem_SelectAll")); - selectAll.addListener (SWT.Selection, new 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, SWT.NONE); - exampleGroup.setLayout (new GridLayout ()); - exampleGroup.setLayoutData (new GridData (SWT.FILL, SWT.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, SWT.DIALOG_TRIM | SWT.RESIZE | SWT.APPLICATION_MODAL); - dialog.setText (ControlExample.getResourceString ("Select_Listeners")); - dialog.setLayout (new GridLayout (2, false)); - final Table table = new Table (dialog, SWT.BORDER | SWT.V_SCROLL | SWT.CHECK); - GridData data = new GridData(GridData.FILL_BOTH); - data.verticalSpan = 3; - table.setLayoutData(data); - for (int i = 0; i < EVENT_INFO.length; i++) { - TableItem item = new TableItem (table, SWT.NONE); - item.setText (EVENT_INFO[i].name); - item.setChecked (eventsFilter[i]); - } - final String [] customNames = getCustomEventNames (); - for (int i = 0; i < customNames.length; i++) { - TableItem item = new TableItem (table, SWT.NONE); - item.setText (customNames[i]); - item.setChecked (eventsFilter[EVENT_INFO.length + i]); - } - Button selectAll = new Button (dialog, SWT.PUSH); - selectAll.setText(ControlExample.getResourceString ("Select_All")); - selectAll.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL)); - selectAll.addSelectionListener (new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - TableItem [] items = table.getItems(); - for (int i = 0; i < EVENT_INFO.length; i++) { - items[i].setChecked(true); - } - for (int i = 0; i < customNames.length; i++) { - items[EVENT_INFO.length + i].setChecked(true); - } - } - }); - Button deselectAll = new Button (dialog, SWT.PUSH); - deselectAll.setText(ControlExample.getResourceString ("Deselect_All")); - deselectAll.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL)); - deselectAll.addSelectionListener (new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - TableItem [] items = table.getItems(); - for (int i = 0; i < EVENT_INFO.length; i++) { - items[i].setChecked(false); - } - for (int i = 0; i < customNames.length; i++) { - items[EVENT_INFO.length + i].setChecked(false); - } - } - }); - final Button editEvent = new Button (dialog, SWT.PUSH); - editEvent.setText (ControlExample.getResourceString ("Edit_Event")); - editEvent.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_BEGINNING)); - editEvent.addSelectionListener (new SelectionAdapter() { - public void widgetSelected (SelectionEvent e) { - Point pt = editEvent.getLocation(); - pt = e.display.map(editEvent, null, pt); - int index = table.getSelectionIndex(); - if (getExampleWidgets().length > 0 && index != -1) { - createEditEventDialog(dialog, pt.x, pt.y, index); - } - } - }); - editEvent.setEnabled(false); - table.addSelectionListener(new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - int fields = 0; - int index = table.getSelectionIndex(); - if (index != -1 && index < EVENT_INFO.length) { // TODO: Allow custom widgets to specify event info - fields = (EVENT_INFO[index].settableFields); - } - editEvent.setEnabled(fields != 0); - } - public void widgetDefaultSelected(SelectionEvent e) { - if (editEvent.getEnabled()) { - Point pt = editEvent.getLocation(); - pt = e.display.map(editEvent, null, pt); - int index = table.getSelectionIndex(); - if (getExampleWidgets().length > 0 && index != -1 && index < EVENT_INFO.length) { - createEditEventDialog(dialog, pt.x, pt.y, index); - } - } - } - }); - - new Label(dialog, SWT.NONE); /* Filler */ - Button ok = new Button (dialog, SWT.PUSH); - ok.setText(ControlExample.getResourceString ("OK")); - dialog.setDefaultButton(ok); - ok.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL)); - ok.addSelectionListener (new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - TableItem [] items = table.getItems(); - for (int i = 0; i < EVENT_INFO.length; i++) { - eventsFilter[i] = items[i].getChecked(); - } - for (int i = 0; i < customNames.length; i++) { - eventsFilter[EVENT_INFO.length + i] = items[EVENT_INFO.length + i].getChecked(); - } - dialog.dispose(); - } - }); - dialog.pack (); - /* - * If the preferred size of the dialog is too tall for the display, - * then reduce the height, so that the vertical scrollbar will appear. - */ - Rectangle bounds = dialog.getBounds(); - Rectangle trim = dialog.computeTrim(0, 0, 0, 0); - Rectangle clientArea = display.getClientArea(); - if (bounds.height > clientArea.height) { - dialog.setSize(bounds.width, clientArea.height - trim.height); - } - dialog.setLocation(bounds.x, clientArea.y); - 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, SWT.NONE); - listenersGroup.setLayout (new GridLayout (3, false)); - listenersGroup.setLayoutData (new GridData (SWT.FILL, SWT.FILL, true, true, 2, 1)); - listenersGroup.setText (ControlExample.getResourceString ("Listeners")); - - /* - * Create the button to access the 'Listeners' dialog. - */ - Button listenersButton = new Button (listenersGroup, SWT.PUSH); - listenersButton.setText (ControlExample.getResourceString ("Select_Listeners")); - listenersButton.addSelectionListener (new 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, SWT.CHECK); - listenCheckbox.setText (ControlExample.getResourceString ("Listen")); - listenCheckbox.addSelectionListener (new SelectionAdapter () { - public void widgetSelected(SelectionEvent e) { - logging = listenCheckbox.getSelection (); - recreateExampleWidgets (); - } - }); - - /* - * Create the button to clear the text. - */ - Button clearButton = new Button (listenersGroup, SWT.PUSH); - clearButton.setText (ControlExample.getResourceString ("Clear")); - clearButton.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_END)); - clearButton.addSelectionListener (new SelectionAdapter() { - public void widgetSelected (SelectionEvent e) { - eventConsole.setText (""); - } - }); - - /* Initialize the eventsFilter to log all events. */ - int customEventCount = getCustomEventNames ().length; - eventsFilter = new boolean [EVENT_INFO.length + customEventCount]; - for (int i = 0; i < EVENT_INFO.length + customEventCount; i++) { - eventsFilter [i] = true; - } - - /* Create the event console Text. */ - eventConsole = new Text (listenersGroup, SWT.BORDER | SWT.MULTI | SWT.V_SCROLL | SWT.H_SCROLL); - GridData data = new GridData (GridData.FILL_BOTH); - data.horizontalSpan = 3; - data.heightHint = 80; - eventConsole.setLayoutData (data); - createEventConsolePopup (); - eventConsole.addKeyListener (new KeyAdapter () { - public void keyPressed (KeyEvent e) { - if ((e.keyCode == 'A' || e.keyCode == 'a') && (e.stateMask & SWT.MOD1) != 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). - */ - String[] getMethodNames() { - return null; - } - - Shell createSetGetDialog(String[] methodNames) { - final Shell dialog = new Shell(shell, SWT.DIALOG_TRIM | SWT.RESIZE | SWT.MODELESS); - dialog.setLayout(new GridLayout(2, false)); - dialog.setText(getTabText() + " " + ControlExample.getResourceString ("Set_Get")); - nameCombo = new Combo(dialog, SWT.READ_ONLY); - nameCombo.setItems(methodNames); - nameCombo.setText(methodNames[0]); - nameCombo.setVisibleItemCount(methodNames.length); - nameCombo.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false)); - nameCombo.addSelectionListener(new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - resetLabels(); - } - }); - returnTypeLabel = new Label(dialog, SWT.NONE); - returnTypeLabel.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, false, false)); - setButton = new Button(dialog, SWT.PUSH); - setButton.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, false, false)); - setButton.addSelectionListener(new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - setValue(); - setText.selectAll(); - setText.setFocus(); - } - }); - setText = new Text(dialog, SWT.SINGLE | SWT.BORDER); - setText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false)); - getButton = new Button(dialog, SWT.PUSH); - getButton.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, false, false)); - getButton.addSelectionListener(new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - getValue(); - } - }); - getText = new Text(dialog, SWT.MULTI | SWT.BORDER | SWT.READ_ONLY | SWT.H_SCROLL | SWT.V_SCROLL); - GridData data = new GridData(SWT.FILL, SWT.FILL, true, true); - data.widthHint = 240; - data.heightHint = 200; - getText.setLayoutData(data); - resetLabels(); - dialog.setDefaultButton(setButton); - dialog.pack(); - dialog.addDisposeListener(new DisposeListener() { - public void widgetDisposed(DisposeEvent e) { - setGetDialog = null; - } - }); - return dialog; - } - - void resetLabels() { - String methodRoot = nameCombo.getText(); - returnTypeLabel.setText(parameterInfo(methodRoot)); - setButton.setText(setMethodName(methodRoot)); - getButton.setText("get" + methodRoot); - setText.setText(""); - getText.setText(""); - getValue(); - setText.setFocus(); - } - - String setMethodName(String methodRoot) { - return "set" + methodRoot; - } - - String parameterInfo(String methodRoot) { - String typeName = null; - Class returnType = getReturnType(methodRoot); - boolean isArray = returnType.isArray(); - if (isArray) { - typeName = returnType.getComponentType().getName(); - } else { - typeName = returnType.getName(); - } - String typeNameString = typeName; - int index = typeName.lastIndexOf('.'); - if (index != -1 && index+1 < typeName.length()) typeNameString = typeName.substring(index+1); - String info = ControlExample.getResourceString("Info_" + typeNameString + (isArray ? "A" : "")); - if (isArray) { - typeNameString += "[]"; - } - return ControlExample.getResourceString("Parameter_Info", new Object[] {typeNameString, info}); - } - - void getValue() { - String 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 == null) { - getText.append("null"); - } else if (result.getClass().isArray()) { - int length = java.lang.reflect.Array.getLength(result); - if (length == 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"); - } - } - } - - Class getReturnType(String methodRoot) { - Class returnType = null; - String 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 */ - String methodRoot = nameCombo.getText(); - Class returnType = getReturnType(methodRoot); - String methodName = setMethodName(methodRoot); - String 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, new Class[] {returnType}); - String typeName = returnType.getName(); - Object[] parameter = null; - if (value.equals("null")) { - parameter = new Object[] {null}; - } else if (typeName.equals("int")) { - parameter = new Object[] {new Integer(value)}; - } else if (typeName.equals("long")) { - parameter = new Object[] {new Long(value)}; - } else if (typeName.equals("char")) { - parameter = new Object[] {value.length() == 1 ? new Character(value.charAt(0)) : new Character('\0')}; - } else if (typeName.equals("boolean")) { - parameter = new Object[] {new Boolean(value)}; - } else if (typeName.equals("java.lang.String")) { - parameter = new Object[] {value}; - } else if (typeName.equals("org.eclipse.swt.graphics.Point")) { - String xy[] = split(value, ','); - parameter = new Object[] {new Point(new Integer(xy[0]).intValue(),new Integer(xy[1]).intValue())}; - } else if (typeName.equals("[I")) { - String 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 = new Object[] {ints}; - } else if (typeName.equals("[Ljava.lang.String;")) { - parameter = new Object[] {split(value, ',')}; - } else { - parameter = parameterForType(typeName, value, widgets[i]); - } - method.invoke(widgets[i], parameter); - } catch (Exception e) { - Throwable cause = e.getCause(); - String message = e.getMessage(); - getText.setText(e.toString()); - if (cause != null) getText.append(", cause=\n" + cause.toString()); - if (message != null) getText.append(", message=\n" + message); - } - } - } - - Object[] parameterForType(String typeName, String value, Widget widget) { - return new Object[] {value}; - } - - void createOrientationGroup () { - /* Create Orientation group*/ - orientationGroup = new Group (controlGroup, SWT.NONE); - orientationGroup.setLayout (new GridLayout()); - orientationGroup.setLayoutData (new GridData (SWT.FILL, SWT.FILL, false, false)); - orientationGroup.setText (ControlExample.getResourceString("Orientation")); - defaultOrietationButton = new Button (orientationGroup, SWT.RADIO); - defaultOrietationButton.setText (ControlExample.getResourceString("Default")); - defaultOrietationButton.setSelection (true); - ltrButton = new Button (orientationGroup, SWT.RADIO); - ltrButton.setText ("SWT.LEFT_TO_RIGHT"); - rtlButton = new Button (orientationGroup, SWT.RADIO); - rtlButton.setText ("SWT.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, SWT.NONE); - sizeGroup.setLayout (new GridLayout()); - sizeGroup.setLayoutData (new GridData (SWT.FILL, SWT.FILL, false, false)); - sizeGroup.setText (ControlExample.getResourceString("Size")); - - /* Create the controls */ - - /* - * The preferred size of a widget is the size returned - * by widget.computeSize (SWT.DEFAULT, SWT.DEFAULT). - * This size is defined on a widget by widget basis. - * Many widgets will attempt to display their contents. - */ - preferredButton = new Button (sizeGroup, SWT.RADIO); - preferredButton.setText (ControlExample.getResourceString("Preferred")); - tooSmallButton = new Button (sizeGroup, SWT.RADIO); - tooSmallButton.setText (TOO_SMALL_SIZE + " X " + TOO_SMALL_SIZE); - smallButton = new Button(sizeGroup, SWT.RADIO); - smallButton.setText (SMALL_SIZE + " X " + SMALL_SIZE); - largeButton = new Button (sizeGroup, SWT.RADIO); - largeButton.setText (LARGE_SIZE + " X " + LARGE_SIZE); - fillHButton = new Button (sizeGroup, SWT.CHECK); - fillHButton.setText (ControlExample.getResourceString("Fill_X")); - fillVButton = new Button (sizeGroup, SWT.CHECK); - fillVButton.setText (ControlExample.getResourceString("Fill_Y")); - - /* Add the listeners */ - SelectionAdapter selectionListener = new 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, SWT.NONE); - styleGroup.setLayout (new GridLayout ()); - styleGroup.setLayoutData (new GridData (SWT.FILL, SWT.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, SWT.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(SWT.MenuDetect, new Listener() { - public void handleEvent(Event event) { - Menu menu = control.getMenu(); - if (menu != null && samplePopup) { - menu.dispose(); - menu = null; - } - if (menu == null && popupMenuButton.getSelection()) { - menu = new Menu(shell, SWT.POP_UP); - MenuItem item = new MenuItem(menu, SWT.PUSH); - item.setText("Sample popup menu item"); - specialPopupMenuItems(menu, event); - control.setMenu(menu); - samplePopup = true; - } - } - }); - } - } - - protected void specialPopupMenuItems(final Menu menu, final Event event) { - } - - /** - * Disposes the "Example" widgets. - */ - void disposeExampleWidgets () { - Widget [] widgets = getExampleWidgets (); - for (int i=0; i<widgets.length; i++) { - widgets [i].dispose (); - } - } - - Image colorImage (Color color) { - Image image = new Image (display, IMAGE_SIZE, IMAGE_SIZE); - GC gc = new GC(image); - gc.setBackground(color); - Rectangle bounds = image.getBounds(); - gc.fillRectangle(0, 0, bounds.width, bounds.height); - gc.setBackground(display.getSystemColor(SWT.COLOR_BLACK)); - gc.drawRectangle(0, 0, bounds.width - 1, bounds.height - 1); - gc.dispose(); - return image; - } - - Image fontImage (Font font) { - Image image = new Image (display, IMAGE_SIZE, IMAGE_SIZE); - GC gc = new GC(image); - Rectangle bounds = image.getBounds(); - gc.setBackground(display.getSystemColor(SWT.COLOR_WHITE)); - gc.fillRectangle(0, 0, bounds.width, bounds.height); - gc.setBackground(display.getSystemColor(SWT.COLOR_BLACK)); - gc.drawRectangle(0, 0, bounds.width - 1, bounds.height - 1); - FontData data[] = font.getFontData(); - int style = data[0].getStyle(); - switch (style) { - case SWT.NORMAL: - gc.drawLine(3, 3, 3, 8); - gc.drawLine(4, 3, 7, 8); - gc.drawLine(8, 3, 8, 8); - break; - case SWT.BOLD: - gc.drawLine(3, 2, 3, 9); - gc.drawLine(4, 2, 4, 9); - gc.drawLine(5, 2, 7, 2); - gc.drawLine(5, 3, 8, 3); - gc.drawLine(5, 5, 7, 5); - gc.drawLine(5, 6, 7, 6); - gc.drawLine(5, 8, 8, 8); - gc.drawLine(5, 9, 7, 9); - gc.drawLine(7, 4, 8, 4); - gc.drawLine(7, 7, 8, 7); - break; - case SWT.ITALIC: - gc.drawLine(6, 2, 8, 2); - gc.drawLine(7, 3, 4, 8); - gc.drawLine(3, 9, 5, 9); - break; - case SWT.BOLD | SWT.ITALIC: - gc.drawLine(5, 2, 8, 2); - gc.drawLine(5, 3, 8, 3); - gc.drawLine(6, 4, 4, 7); - gc.drawLine(7, 4, 5, 7); - gc.drawLine(3, 8, 6, 8); - gc.drawLine(3, 9, 6, 9); - break; - } - gc.dispose(); - return image; - } - - /** - * Gets the list of custom event names. - * Subclasses override this method to allow adding of custom events. - * - * @return an array containing custom event names - * @see hookCustomListener - */ - String [] getCustomEventNames () { - return new String [0]; - } - - /** - * Gets the default style for a widget - * - * @return the default style bit - */ - int getDefaultStyle () { - if (ltrButton != null && ltrButton.getSelection()) { - return SWT.LEFT_TO_RIGHT; - } - if (rtlButton != null && rtlButton.getSelection()) { - return SWT.RIGHT_TO_LEFT; - } - return SWT.NONE; - } - - /** - * Gets the "Example" widgets. - * - * @return an array containing the example widgets - */ - Widget [] getExampleWidgets () { - return new Widget [0]; - } - - /** - * Gets the "Example" controls. - * This is the subset of "Example" widgets that are controls. - * - * @return an array containing the example controls - */ - Control [] getExampleControls () { - Widget [] widgets = getExampleWidgets (); - Control [] controls = new Control [0]; - for (int i = 0; i < widgets.length; i++) { - if (widgets[i] instanceof Control) { - Control[] newControls = new Control[controls.length + 1]; - System.arraycopy(controls, 0, newControls, 0, controls.length); - controls = newControls; - controls[controls.length - 1] = (Control)widgets[i]; - } - } - return controls; - } - - /** - * Gets the "Example" widget's items, if any. - * - * @return an array containing the example widget's items - */ - Item [] getExampleWidgetItems () { - return new Item [0]; - } - - /** - * Gets the short text for the tab folder item. - * - * @return the short text for the tab item - */ - String getShortTabText() { - return getTabText(); - } - - /** - * Gets the text for the tab folder item. - * - * @return the text for the tab item - */ - String getTabText () { - return ""; - } - - /** - * Hooks all listeners to all example controls - * and example control items. - */ - void hookExampleWidgetListeners () { - if (logging) { - Widget[] widgets = getExampleWidgets (); - for (int i = 0; i < widgets.length; i++) { - hookListeners (widgets [i]); - } - Item[] exampleItems = getExampleWidgetItems (); - for (int i = 0; i < exampleItems.length; i++) { - hookListeners (exampleItems [i]); - } - String [] customNames = getCustomEventNames (); - for (int i = 0; i < customNames.length; i++) { - if (eventsFilter [EVENT_INFO.length + i]) { - hookCustomListener (customNames[i]); - } - } - } - } - - /** - * Hooks the custom listener specified by eventName. - * Subclasses override this method to add custom listeners. - * @see getCustomEventNames - */ - void hookCustomListener (String eventName) { - } - - /** - * Hooks all listeners to the specified widget. - */ - void hookListeners (Widget widget) { - if (logging) { - Listener listener = new Listener() { - public void handleEvent (Event event) { - log (event); - } - }; - for (int i = 0; i < EVENT_INFO.length; i++) { - if (eventsFilter [i]) { - widget.addListener (EVENT_INFO[i].type, listener); - } - } - } - } - - /** - * Logs an untyped event to the event console. - */ - void log(Event event) { - int i = 0; - while (i < EVENT_INFO.length) { - if (EVENT_INFO[i].type == event.type) break; - i++; - } - String toString = EVENT_INFO[i].name + " [" + event.type + "]: "; - switch (event.type) { - case SWT.KeyDown: - case SWT.KeyUp: toString += new KeyEvent (event).toString (); break; - case SWT.MouseDown: - case SWT.MouseUp: - case SWT.MouseMove: - case SWT.MouseEnter: - case SWT.MouseExit: - case SWT.MouseDoubleClick: - case SWT.MouseWheel: - case SWT.MouseHover: toString += new MouseEvent (event).toString (); break; - case SWT.Paint: toString += new PaintEvent (event).toString (); break; - case SWT.Move: - case SWT.Resize: toString += new ControlEvent (event).toString (); break; - case SWT.Dispose: toString += new DisposeEvent (event).toString (); break; - case SWT.Selection: - case SWT.DefaultSelection: toString += new SelectionEvent (event).toString (); break; - case SWT.FocusIn: - case SWT.FocusOut: toString += new FocusEvent (event).toString (); break; - case SWT.Expand: - case SWT.Collapse: toString += new TreeEvent (event).toString (); break; - case SWT.Iconify: - case SWT.Deiconify: - case SWT.Close: - case SWT.Activate: - case SWT.Deactivate: toString += new ShellEvent (event).toString (); break; - case SWT.Show: - case SWT.Hide: toString += (event.widget instanceof Menu) ? new MenuEvent (event).toString () : event.toString(); break; - case SWT.Modify: toString += new ModifyEvent (event).toString (); break; - case SWT.Verify: toString += new VerifyEvent (event).toString (); break; - case SWT.Help: toString += new HelpEvent (event).toString (); break; - case SWT.Arm: toString += new ArmEvent (event).toString (); break; - case SWT.Traverse: toString += new TraverseEvent (event).toString (); break; - case SWT.HardKeyDown: - case SWT.HardKeyUp: - case SWT.DragDetect: - case SWT.MenuDetect: - case SWT.SetData: - default: toString += event.toString (); - } - log (toString); - - /* Return values for event fields. */ - int mask = EVENT_INFO[i].setFields; - if (!ignore && mask != 0) { - Event setFieldsEvent = EVENT_INFO[i].event; - if ((mask & DOIT) != 0) event.doit = setFieldsEvent.doit; - if ((mask & DETAIL) != 0) event.detail = setFieldsEvent.detail; - if ((mask & TEXT) != 0) event.text = setFieldsEvent.text; - if ((mask & X) != 0) event.x = setFieldsEvent.x; - if ((mask & Y) != 0) event.y = setFieldsEvent.y; - if ((mask & WIDTH) != 0) event.width = setFieldsEvent.width; - if ((mask & HEIGHT) != 0) event.height = setFieldsEvent.height; - eventConsole.append (ControlExample.getResourceString("Returning")); - ignore = true; - log (event); - ignore = false; - } - } - - /** - * Logs a string to the event console. - */ - void log (String string) { - eventConsole.append (string); - eventConsole.append ("\n"); - } - - /** - * Logs a typed event to the event console. - */ - void log (String eventName, TypedEvent event) { - eventConsole.append (eventName + ": "); - eventConsole.append (event.toString ()); - eventConsole.append ("\n"); - } - - /** - * Recreates the "Example" widgets. - */ - void recreateExampleWidgets () { - disposeExampleWidgets (); - createExampleWidgets (); - hookExampleWidgetListeners (); - setExampleWidgetState (); - } - - /** - * Sets the foreground color, background color, and font - * of the "Example" widgets to their default settings. - * Subclasses may extend in order to reset other colors - * and fonts to default settings as well. - */ - void resetColorsAndFonts () { - Color oldColor = foregroundColor; - foregroundColor = null; - setExampleWidgetForeground (); - if (oldColor != null) oldColor.dispose(); - oldColor = backgroundColor; - backgroundColor = null; - setExampleWidgetBackground (); - if (oldColor != null) oldColor.dispose(); - Font oldFont = font; - font = null; - setExampleWidgetFont (); - setExampleWidgetSize (); - if (oldFont != null) oldFont.dispose(); - } - - boolean rtlSupport() { - return RTL_SUPPORT_ENABLE; - } - - /** - * Sets the background color of the "Example" widgets' parent. - */ - void setExampleGroupBackgroundColor () { - if (backgroundModeGroup == null) return; - exampleGroup.setBackground (backgroundModeColorButton.getSelection () ? display.getSystemColor(SWT.COLOR_BLUE) : null); - } - /** - * Sets the background image of the "Example" widgets' parent. - */ - void setExampleGroupBackgroundImage () { - if (backgroundModeGroup == null) return; - exampleGroup.setBackgroundImage (backgroundModeImageButton.getSelection () ? instance.images[ControlExample.ciParentBackground] : null); - } - - /** - * Sets the background mode of the "Example" widgets' parent. - */ - void setExampleGroupBackgroundMode () { - if (backgroundModeGroup == null) return; - String modeString = backgroundModeCombo.getText (); - int mode = SWT.INHERIT_NONE; - if (modeString.equals("SWT.INHERIT_DEFAULT")) mode = SWT.INHERIT_DEFAULT; - if (modeString.equals("SWT.INHERIT_FORCE")) mode = SWT.INHERIT_FORCE; - exampleGroup.setBackgroundMode (mode); - } - - /** - * Sets the background color of the "Example" widgets. - */ - void setExampleWidgetBackground () { - if (colorAndFontTable == null) return; // user cannot change color/font on this tab - Control [] controls = getExampleControls (); - if (!instance.startup) { - for (int i = 0; i < controls.length; i++) { - controls[i].setBackground (backgroundColor); - } - } - // Set the background color item's image to match the background color of the example widget(s). - Color color = backgroundColor; - if (controls.length == 0) return; - if (color == null) color = controls [0].getBackground (); - TableItem item = colorAndFontTable.getItem(BACKGROUND_COLOR); - Image oldImage = item.getImage(); - if (oldImage != null) oldImage.dispose(); - item.setImage (colorImage (color)); - } - - /** - * Sets the enabled state of the "Example" widgets. - */ - void setExampleWidgetEnabled () { - Control [] controls = getExampleControls (); - for (int i=0; i<controls.length; i++) { - controls [i].setEnabled (enabledButton.getSelection ()); - } - } - - /** - * Sets the font of the "Example" widgets. - */ - void setExampleWidgetFont () { - if (colorAndFontTable == null) return; // user cannot change color/font on this tab - Control [] controls = getExampleControls (); - if (!instance.startup) { - for (int i = 0; i < controls.length; i++) { - controls[i].setFont(font); - } - } - /* Set the font item's image and font to match the font of the example widget(s). */ - Font ft = font; - if (controls.length == 0) return; - if (ft == null) ft = controls [0].getFont (); - TableItem item = colorAndFontTable.getItem(FONT); - Image oldImage = item.getImage(); - if (oldImage != null) oldImage.dispose(); - item.setImage (fontImage (ft)); - item.setFont(ft); - colorAndFontTable.layout (); - } - - /** - * Sets the foreground color of the "Example" widgets. - */ - void setExampleWidgetForeground () { - if (colorAndFontTable == null) return; // user cannot change color/font on this tab - Control [] controls = getExampleControls (); - if (!instance.startup) { - for (int i = 0; i < controls.length; i++) { - controls[i].setForeground (foregroundColor); - } - } - /* Set the foreground color item's image to match the foreground color of the example widget(s). */ - Color color = foregroundColor; - if (controls.length == 0) return; - if (color == null) color = controls [0].getForeground (); - TableItem item = colorAndFontTable.getItem(FOREGROUND_COLOR); - Image oldImage = item.getImage(); - if (oldImage != null) oldImage.dispose(); - item.setImage (colorImage(color)); - } - - /** - * Sets the size of the "Example" widgets. - */ - void setExampleWidgetSize () { - int size = SWT.DEFAULT; - if (preferredButton == null) return; - if (preferredButton.getSelection()) size = SWT.DEFAULT; - if (tooSmallButton.getSelection()) size = TOO_SMALL_SIZE; - if (smallButton.getSelection()) size = SMALL_SIZE; - if (largeButton.getSelection()) size = LARGE_SIZE; - Control [] controls = getExampleControls (); - for (int i=0; i<controls.length; i++) { - GridData gridData = new GridData(size, size); - gridData.grabExcessHorizontalSpace = fillHButton.getSelection(); - gridData.grabExcessVerticalSpace = fillVButton.getSelection(); - gridData.horizontalAlignment = fillHButton.getSelection() ? SWT.FILL : SWT.LEFT; - gridData.verticalAlignment = fillVButton.getSelection() ? SWT.FILL : SWT.TOP; - controls [i].setLayoutData (gridData); - } - tabFolderPage.layout (controls); - } - - /** - * Sets the state of the "Example" widgets. Subclasses - * may extend this method to set "Example" widget state - * that is specific to the widget. - */ - void setExampleWidgetState () { - setExampleWidgetBackground (); - setExampleWidgetForeground (); - setExampleWidgetFont (); - if (!instance.startup) { - setExampleWidgetEnabled (); - setExampleWidgetVisibility (); - setExampleGroupBackgroundMode (); - setExampleGroupBackgroundColor (); - setExampleGroupBackgroundImage (); - setExampleWidgetBackgroundImage (); - setExampleWidgetPopupMenu (); - setExampleWidgetSize (); - } - //TEMPORARY CODE -// Control [] controls = getExampleControls (); -// for (int i=0; i<controls.length; i++) { -// log ("Control=" + controls [i] + ", border width=" + controls [i].getBorderWidth ()); -// } - } - - /** - * Sets the visibility of the "Example" widgets. - */ - void setExampleWidgetVisibility () { - Control [] controls = getExampleControls (); - for (int i=0; i<controls.length; i++) { - controls [i].setVisible (visibleButton.getSelection ()); - } - } - - /** - * Sets the background image of the "Example" widgets. - */ - void setExampleWidgetBackgroundImage () { - if (backgroundImageButton != null && backgroundImageButton.isDisposed()) return; - Control [] controls = getExampleControls (); - for (int i=0; i<controls.length; i++) { - controls [i].setBackgroundImage (backgroundImageButton.getSelection () ? instance.images[ControlExample.ciBackground] : null); - } - } - - /** - * Splits the given string around matches of the given character. - * - * This subset of java.lang.String.split(String regex) - * uses only code that can be run on CLDC platforms. - */ - String [] split (String string, char ch) { - String [] result = new String[0]; - int start = 0; - int length = string.length(); - while (start < length) { - int end = string.indexOf(ch, start); - if (end == -1) end = length; - String substr = string.substring(start, end); - String [] newResult = new String[result.length + 1]; - System.arraycopy(result, 0, newResult, 0, result.length); - newResult [result.length] = substr; - result = newResult; - start = end + 1; - } - return result; - } -} |