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 | 1164 |
1 files changed, 0 insertions, 1164 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 76b449040f..0000000000 --- a/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/controlexample/Tab.java +++ /dev/null @@ -1,1164 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2005 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 { - /* Common control buttons */ - Button borderButton, enabledButton, visibleButton, backgroundImageButton; - Button preferredButton, tooSmallButton, smallButton, largeButton, fillHButton, fillVButton; - - /* Common groups and composites */ - Composite tabFolderPage; - Group exampleGroup, controlGroup, listenersGroup, otherGroup, sizeGroup, styleGroup, colorGroup; - - /* 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 = false; - Group orientationGroup; - Button rtlButton, ltrButton, defaultOrietationButton; - - /* Controls and resources for the "Colors & Fonts" group */ - Button foregroundButton, backgroundButton, fontButton; - Image foregroundImage, backgroundImage; - Color foregroundColor, backgroundColor; - Font font; - boolean setFont = false, setForeground = false, setBackground = false; - - /* Event logging variables and controls */ - Text eventConsole; - boolean logging = false; - boolean [] eventsFilter; - - /* Set/Get API controls */ - Combo nameCombo; - Label returnTypeLabel; - Button getButton, setButton; - Text setText, getText; - - static final String [] EVENT_NAMES = { - "None", - "KeyDown", "KeyUp", - "MouseDown", "MouseUp", "MouseMove", "MouseEnter", "MouseExit", "MouseDoubleClick", - "Paint", "Move", "Resize", "Dispose", - "Selection", "DefaultSelection", - "FocusIn", "FocusOut", - "Expand", "Collapse", - "Iconify", "Deiconify", "Close", - "Show", "Hide", - "Modify", "Verify", - "Activate", "Deactivate", - "Help", "DragDetect", "Arm", "Traverse", "MouseHover", - "HardKeyDown", "HardKeyUp", - "MenuDetect", - "SetData", - "MouseWheel", -// "Settings", // intentionally commented - event only goes to Display - }; - - /** - * 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 (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 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); - } - } - if (RTL_SUPPORT_ENABLE) { - 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) { - 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) { - Button button = (Button)e.widget; - Point pt = button.getLocation(); - pt = e.display.map(button, null, pt); - createSetGetDialog(pt.x, pt.y, methodNames); - } - }); - } - } - - /** - * 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, false)); - colorGroup.setLayoutData (new GridData (GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_FILL)); - colorGroup.setText (ControlExample.getResourceString ("Colors")); - new Label (colorGroup, SWT.NONE).setText (ControlExample.getResourceString ("Foreground_Color")); - foregroundButton = new Button (colorGroup, SWT.PUSH); - new Label (colorGroup, SWT.NONE).setText (ControlExample.getResourceString ("Background_Color")); - backgroundButton = new Button (colorGroup, SWT.PUSH); - fontButton = new Button (colorGroup, SWT.PUSH); - fontButton.setText(ControlExample.getResourceString("Font")); - fontButton.setLayoutData(new GridData (SWT.FILL, SWT.CENTER, false, false)); - Button defaultsButton = new Button (colorGroup, SWT.PUSH); - defaultsButton.setText(ControlExample.getResourceString("Defaults")); - - Shell shell = controlGroup.getShell (); - final ColorDialog colorDialog = new ColorDialog (shell); - final FontDialog fontDialog = new FontDialog (shell); - - /* Create images to display current colors */ - int imageSize = 12; - Display display = shell.getDisplay (); - foregroundImage = new Image (display, imageSize, imageSize); - backgroundImage = new Image (display, imageSize, imageSize); - - /* Add listeners to set the colors and font */ - foregroundButton.setImage(foregroundImage); // sets the size of the button - foregroundButton.addSelectionListener(new SelectionAdapter() { - public void widgetSelected(SelectionEvent event) { - Color oldColor = foregroundColor; - if (oldColor == null) { - Control [] controls = getExampleWidgets (); - 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 (event.display, rgb); - setForeground = true; - setExampleWidgetForeground (); - if (oldColor != null) oldColor.dispose (); - } - }); - backgroundButton.setImage(backgroundImage); // sets the size of the button - backgroundButton.addSelectionListener(new SelectionAdapter() { - public void widgetSelected(SelectionEvent event) { - Color oldColor = backgroundColor; - if (oldColor == null) { - Control [] controls = getExampleWidgets (); - 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 (event.display, rgb); - setBackground = true; - setExampleWidgetBackground (); - if (oldColor != null) oldColor.dispose (); - } - }); - fontButton.addSelectionListener(new SelectionAdapter () { - public void widgetSelected (SelectionEvent event) { - Font oldFont = font; - if (oldFont == null) { - Control [] controls = getExampleWidgets (); - 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 (event.display, fontData); - setFont = true; - setExampleWidgetFont (); - setExampleWidgetSize (); - if (oldFont != null) oldFont.dispose (); - } - }); - defaultsButton.addSelectionListener(new SelectionAdapter () { - public void widgetSelected (SelectionEvent e) { - resetColorsAndFonts (); - } - }); - shell.addDisposeListener(new DisposeListener() { - public void widgetDisposed(DisposeEvent event) { - if (foregroundImage != null) foregroundImage.dispose(); - if (backgroundImage != null) backgroundImage.dispose(); - if (foregroundColor != null) foregroundColor.dispose(); - if (backgroundColor != null) backgroundColor.dispose(); - if (font != null) font.dispose(); - foregroundImage = null; - backgroundImage = null; - foregroundColor = null; - backgroundColor = null; - font = null; - } - }); - } - - /** - * 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")); - - /* 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 (); - } - }); - - /* Set the default state */ - enabledButton.setSelection(true); - visibleButton.setSelection(true); - backgroundImageButton.setSelection(false); - } - - /** - * Create the event console popup menu. - */ - void createEventConsolePopup () { - Menu popup = new Menu (eventConsole.getShell (), 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 (tabFolderPage.getShell (), SWT.DIALOG_TRIM | 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 = 2; - table.setLayoutData(data); - for (int i = 0; i < EVENT_NAMES.length; i++) { - TableItem item = new TableItem (table, SWT.NONE); - item.setText (EVENT_NAMES[i]); - 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_NAMES.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_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, SWT.PUSH); - deselectAll.setText(ControlExample.getResourceString ("Deselect_All")); - deselectAll.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_BEGINNING)); - deselectAll.addSelectionListener (new 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, 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_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 (! dialog.getDisplay().readAndDispatch()) dialog.getDisplay().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, false, 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_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, 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; - } - - void createSetGetDialog(int x, int y, String[] methodNames) { - final Shell dialog = new Shell(eventConsole.getShell (), 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.setLocation(x, y); - dialog.open(); - } - - 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(""); - Control[] controls = getExampleWidgets(); - for (int i = 0; i < controls.length; i++) { - try { - java.lang.reflect.Method method = controls[i].getClass().getMethod(methodName, null); - Object result = method.invoke(controls[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 < controls.length) { - getText.append("\n\n"); - } - } - } - - Class getReturnType(String methodRoot) { - Class returnType = null; - String methodName = "get" + methodRoot; - Control[] controls = getExampleWidgets(); - try { - java.lang.reflect.Method method = controls[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(); - Control[] controls = getExampleWidgets(); - for (int i = 0; i < controls.length; i++) { - try { - java.lang.reflect.Method method = controls[i].getClass().getMethod(methodName, new Class[] {returnType}); - String typeName = returnType.getName(); - Object[] parameter = null; - 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[] = value.split(","); - parameter = new Object[] {new Point(new Integer(xy[0]).intValue(),new Integer(xy[1]).intValue())}; - } else if (typeName.equals("[I")) { - String strings[] = value.split(","); - 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[] {value.split(",")}; - } else { - parameter = parameterForType(typeName, value, controls[i]); - } - method.invoke(controls[i], parameter); - } catch (Exception e) { - getText.setText(e.toString()); - } - } - } - - Object[] parameterForType(String typeName, String value, Control control) { - return new Object[] {value}; - } - - void createOrientationGroup () { - /* Create Orientation group*/ - orientationGroup = new Group (controlGroup, SWT.NONE); - orientationGroup.setLayout (new GridLayout()); - orientationGroup.setLayoutData (new GridData (GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_FILL)); - 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 (GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_FILL)); - 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 (GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_FILL)); - 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) { - /* - * 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 (); - setExampleWidgetState (); - - return tabFolderPage; - } - - /** - * Disposes the "Example" widgets. - */ - void disposeExampleWidgets () { - Control [] controls = getExampleWidgets (); - for (int i=0; i<controls.length; i++) { - controls [i].dispose (); - } - } - - void drawImage (Image image, Color color) { - GC gc = new GC(image); - gc.setBackground(color); - Rectangle bounds = image.getBounds(); - gc.fillRectangle(0, 0, bounds.width, bounds.height); - gc.drawRectangle(0, 0, bounds.width - 1, bounds.height - 1); - gc.dispose(); - } - - /** - * Gets the list of custom event names. - * - * @return an array containing custom event names - */ - 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" widget children. - * - * @return an array containing the example widget children - */ - Control [] getExampleWidgets () { - return new Control [0]; - } - - /** - * Gets the "Example" widget children's items, if any. - * - * @return an array containing the example widget children's items - */ - Item [] getExampleWidgetItems () { - return new Item [0]; - } - - /** - * 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) { - Control[] exampleControls = getExampleWidgets (); - for (int i = 0; i < exampleControls.length; i++) { - hookListeners (exampleControls [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_NAMES.length + i]) hookCustomListener (customNames[i]); - } - } - } - - /** - * Hooks the custom listener specified by eventName. - */ - 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_NAMES.length; i++) { - if (eventsFilter [i]) widget.addListener (i, listener); - } - } - } - - /** - * Logs an untyped event to the event console. - */ - void log(Event event) { - String toString = EVENT_NAMES[event.type] + " ["+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 (); - } - eventConsole.append (toString); - eventConsole.append ("\n"); - } - - /** - * 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(); - } - - /** - * Sets the background color of the "Example" widgets. - */ - void setExampleWidgetBackground () { - if (backgroundButton == null) return; // no background button on this tab - Control [] controls = getExampleWidgets (); - if (setBackground) { - for (int i = 0; i < controls.length; i++) { - controls[i].setBackground (backgroundColor); - } - } - // Set the background button's color 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 (); - drawImage (backgroundImage, color); - backgroundButton.setImage (backgroundImage); - } - - /** - * Sets the enabled state of the "Example" widgets. - */ - void setExampleWidgetEnabled () { - Control [] controls = getExampleWidgets (); - for (int i=0; i<controls.length; i++) { - controls [i].setEnabled (enabledButton.getSelection ()); - } - } - - /** - * Sets the font of the "Example" widgets. - */ - void setExampleWidgetFont () { - if (instance.startup) return; - if (fontButton == null) return; // no font button on this tab - if (!setFont) return; - Control [] controls = getExampleWidgets (); - for (int i = 0; i < controls.length; i++) { - controls[i].setFont(font); - } - } - - /** - * Sets the foreground color of the "Example" widgets. - */ - void setExampleWidgetForeground () { - if (foregroundButton == null) return; // no foreground button on this tab - Control [] controls = getExampleWidgets (); - if (setForeground) { - for (int i = 0; i < controls.length; i++) { - controls[i].setForeground (foregroundColor); - } - } - // Set the foreground button's color 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 (); - drawImage (foregroundImage, color); - foregroundButton.setImage (foregroundImage); - } - - /** - * 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 = getExampleWidgets (); - 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 - * reimplement this method to set "Example" widget state - * that is specific to the widget. - */ - void setExampleWidgetState () { - setExampleWidgetEnabled (); - setExampleWidgetVisibility (); - setExampleWidgetBackground (); - setExampleWidgetForeground (); - setExampleWidgetBackgroundImage (); - setExampleWidgetFont (); - setExampleWidgetSize (); - //TEMPORARY CODE -// Control [] controls = getExampleWidgets (); -// 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 = getExampleWidgets (); - for (int i=0; i<controls.length; i++) { - controls [i].setVisible (visibleButton.getSelection ()); - } - } - - /** - * Sets the background image of the "Example" widgets. - */ - void setExampleWidgetBackgroundImage () { - Control [] controls = getExampleWidgets (); - for (int i=0; i<controls.length; i++) { - controls [i].setBackgroundImage (backgroundImageButton.getSelection () ? instance.images[ControlExample.ciBackground] : null); - } - } -} |