Mega Code Archive

 
Categories / Java / SWT Jface Eclipse
 

How to create CustomControl in SWT

/*******************************************************************************  * Copyright (c) 2000, 2003 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  *******************************************************************************/ import java.io.IOException; import java.io.InputStream; import java.text.MessageFormat; import java.util.MissingResourceException; import java.util.ResourceBundle; import org.eclipse.swt.SWT; import org.eclipse.swt.SWTError; import org.eclipse.swt.custom.CCombo; import org.eclipse.swt.custom.CLabel; import org.eclipse.swt.custom.CTabFolder; import org.eclipse.swt.custom.CTabFolder2Adapter; import org.eclipse.swt.custom.CTabFolderEvent; import org.eclipse.swt.custom.CTabItem; import org.eclipse.swt.custom.SashForm; import org.eclipse.swt.custom.StyleRange; import org.eclipse.swt.custom.StyledText; import org.eclipse.swt.events.ArmEvent; import org.eclipse.swt.events.ControlAdapter; import org.eclipse.swt.events.ControlEvent; import org.eclipse.swt.events.DisposeEvent; import org.eclipse.swt.events.DisposeListener; import org.eclipse.swt.events.FocusEvent; import org.eclipse.swt.events.HelpEvent; import org.eclipse.swt.events.KeyAdapter; import org.eclipse.swt.events.KeyEvent; import org.eclipse.swt.events.MenuAdapter; import org.eclipse.swt.events.MenuEvent; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.MouseEvent; import org.eclipse.swt.events.PaintEvent; import org.eclipse.swt.events.PaintListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.events.ShellEvent; import org.eclipse.swt.events.TraverseEvent; import org.eclipse.swt.events.TreeEvent; import org.eclipse.swt.events.TypedEvent; import org.eclipse.swt.events.VerifyEvent; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.graphics.FontData; import org.eclipse.swt.graphics.GC; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.ImageData; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.graphics.RGB; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.printing.PrintDialog; import org.eclipse.swt.printing.PrinterData; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Canvas; import org.eclipse.swt.widgets.Caret; import org.eclipse.swt.widgets.ColorDialog; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.CoolBar; import org.eclipse.swt.widgets.CoolItem; import org.eclipse.swt.widgets.DirectoryDialog; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.FileDialog; import org.eclipse.swt.widgets.FontDialog; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Item; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Link; import org.eclipse.swt.widgets.List; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.MenuItem; import org.eclipse.swt.widgets.MessageBox; import org.eclipse.swt.widgets.ProgressBar; import org.eclipse.swt.widgets.Sash; import org.eclipse.swt.widgets.Scale; import org.eclipse.swt.widgets.ScrollBar; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Slider; import org.eclipse.swt.widgets.Spinner; import org.eclipse.swt.widgets.TabFolder; import org.eclipse.swt.widgets.TabItem; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import org.eclipse.swt.widgets.TableItem; import org.eclipse.swt.widgets.Text; import org.eclipse.swt.widgets.ToolBar; import org.eclipse.swt.widgets.ToolItem; import org.eclipse.swt.widgets.Tree; import org.eclipse.swt.widgets.TreeColumn; import org.eclipse.swt.widgets.TreeItem; import org.eclipse.swt.widgets.Widget; public class CustomControlExample extends ControlExample {   /**    * Creates an instance of a CustomControlExample embedded inside the    * supplied parent Composite.    *     * @param parent    *            the container of the example    */   public CustomControlExample(Composite parent) {     super(parent);   }   /**    * Answers the set of example Tabs    */   Tab[] createTabs() {     return new Tab[] { new CComboTab(this), new CLabelTab(this),         new CTabFolderTab(this), new SashFormTab(this),         new StyledTextTab(this), };   }   /**    * Invokes as a standalone program.    */   public static void main(String[] args) {     Display display = new Display();     Shell shell = new Shell(display);     shell.setLayout(new FillLayout());     CustomControlExample instance = new CustomControlExample(shell);     shell.setText(getResourceString("custom.window.title"));     setShellSize(display, shell);     shell.open();     while (!shell.isDisposed()) {       if (!display.readAndDispatch())         display.sleep();     }     instance.dispose();   } } /*******************************************************************************  * 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  ******************************************************************************/ class ControlExample {   private ShellTab shellTab;   private TabFolder tabFolder;   Image images[];   static final int ciClosedFolder = 0, ciOpenFolder = 1, ciTarget = 2;   static final String[] imageLocations = { "closedFolder.gif",       "openFolder.gif", "target.gif" };   boolean startup = true;   /**    * Creates an instance of a ControlExample embedded inside the supplied    * parent Composite.    *     * @param parent    *            the container of the example    */   public ControlExample(Composite parent) {     initResources();     tabFolder = new TabFolder(parent, SWT.NONE);     Tab[] tabs = createTabs();     for (int i = 0; i < tabs.length; i++) {       TabItem item = new TabItem(tabFolder, SWT.NONE);       item.setText(tabs[i].getTabText());       item.setControl(tabs[i].createTabFolderPage(tabFolder));       item.setData(tabs[i]);     }     startup = false;   }   /**    * Answers the set of example Tabs    */   Tab[] createTabs() {     return new Tab[] { new ButtonTab(this), new CanvasTab(this),         new ComboTab(this), new CoolBarTab(this), new DialogTab(this),         new GroupTab(this), new LabelTab(this), new LinkTab(this),         new ListTab(this), new MenuTab(this), new ProgressBarTab(this),         new SashTab(this), shellTab = new ShellTab(this),         new SliderTab(this), new SpinnerTab(this),         new TabFolderTab(this), new TableTab(this), new TextTab(this),         new ToolBarTab(this), new TreeTab(this), };   }   /**    * Disposes of all resources associated with a particular instance of the    * ControlExample.    */   public void dispose() {     /*      * Destroy any shells that may have been created by the Shells tab. When      * a shell is disposed, all child shells are also disposed. Therefore it      * is necessary to check for disposed shells in the shells list to avoid      * disposing a shell twice.      */     if (shellTab != null)       shellTab.closeAllShells();     shellTab = null;     tabFolder = null;     freeResources();   }   /**    * Frees the resources    */   void freeResources() {     if (images != null) {       for (int i = 0; i < images.length; ++i) {         final Image image = images[i];         if (image != null)           image.dispose();       }       images = null;     }   }   /**    * Gets a string from the resource bundle. We don't want to crash because of    * a missing String. Returns the key if not found.    */   static String getResourceString(String key) {       return key;   }   /**    * Gets a string from the resource bundle and binds it with the given    * arguments. If the key is not found, return the key.    */   static String getResourceString(String key, Object[] args) {     try {       return MessageFormat.format(getResourceString(key), args);     } catch (MissingResourceException e) {       return key;     } catch (NullPointerException e) {       return "!" + key + "!";     }   }   /**    * Loads the resources    */   void initResources() {     final Class clazz = ControlExample.class;       try {         if (images == null) {           images = new Image[imageLocations.length];           for (int i = 0; i < imageLocations.length; ++i) {             InputStream sourceStream = clazz                 .getResourceAsStream(imageLocations[i]);             ImageData source = new ImageData(sourceStream);             ImageData mask = source.getTransparencyMask();             images[i] = new Image(null, source, mask);             try {               sourceStream.close();             } catch (IOException e) {               e.printStackTrace();             }           }         }         return;       } catch (Throwable t) {       }     String error = "Unable to load resources";     freeResources();     throw new RuntimeException(error);   }   /**    * Invokes as a standalone program.    */   public static void main(String[] args) {     Display display = new Display();     Shell shell = new Shell(display);     shell.setLayout(new FillLayout());     ControlExample instance = new ControlExample(shell);     shell.setText(getResourceString("window.title"));     setShellSize(display, shell);     shell.open();     while (!shell.isDisposed()) {       if (!display.readAndDispatch())         display.sleep();     }     instance.dispose();   }   /**    * Grabs input focus.    */   public void setFocus() {     tabFolder.setFocus();   }   /**    * Sets the size of the shell to it's "packed" size, unless that makes it    * bigger than the display, in which case set it to 9/10 of display size.    */   static void setShellSize(Display display, Shell shell) {     Rectangle bounds = display.getBounds();     Point size = shell.computeSize(SWT.DEFAULT, SWT.DEFAULT);     if (size.x > bounds.width)       size.x = bounds.width * 9 / 10;     if (size.y > bounds.height)       size.y = bounds.height * 9 / 10;     shell.setSize(size);   } } /*******************************************************************************  * 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  ******************************************************************************/ class ShellTab extends Tab {   /* Style widgets added to the "Style" groups, and "Other" group */   Button noParentButton, parentButton;   Button noTrimButton, closeButton, titleButton, minButton, maxButton,       borderButton, resizeButton, onTopButton, toolButton;   Button createButton, closeAllButton;   Button modelessButton, primaryModalButton, applicationModalButton,       systemModalButton;   Button imageButton;   Group parentStyleGroup, modalStyleGroup;   /* Variables used to track the open shells */   int shellCount = 0;   Shell[] shells = new Shell[4];   /**    * Creates the Tab within a given instance of ControlExample.    */   ShellTab(ControlExample instance) {     super(instance);   }   /**    * Close all the example shells.    */   void closeAllShells() {     for (int i = 0; i < shellCount; i++) {       if (shells[i] != null & !shells[i].isDisposed()) {         shells[i].dispose();       }     }     shellCount = 0;   }   /**    * Handle the Create button selection event.    *     * @param event    *            org.eclipse.swt.events.SelectionEvent    */   public void createButtonSelected(SelectionEvent event) {     /*      * Remember the example shells so they can be disposed by the user.      */     if (shellCount >= shells.length) {       Shell[] newShells = new Shell[shells.length + 4];       System.arraycopy(shells, 0, newShells, 0, shells.length);       shells = newShells;     }     /* Compute the shell style */     int style = SWT.NONE;     if (noTrimButton.getSelection())       style |= SWT.NO_TRIM;     if (closeButton.getSelection())       style |= SWT.CLOSE;     if (titleButton.getSelection())       style |= SWT.TITLE;     if (minButton.getSelection())       style |= SWT.MIN;     if (maxButton.getSelection())       style |= SWT.MAX;     if (borderButton.getSelection())       style |= SWT.BORDER;     if (resizeButton.getSelection())       style |= SWT.RESIZE;     if (onTopButton.getSelection())       style |= SWT.ON_TOP;     if (toolButton.getSelection())       style |= SWT.TOOL;     if (modelessButton.getSelection())       style |= SWT.MODELESS;     if (primaryModalButton.getSelection())       style |= SWT.PRIMARY_MODAL;     if (applicationModalButton.getSelection())       style |= SWT.APPLICATION_MODAL;     if (systemModalButton.getSelection())       style |= SWT.SYSTEM_MODAL;     /* Create the shell with or without a parent */     if (noParentButton.getSelection()) {       shells[shellCount] = new Shell(style);     } else {       Shell shell = tabFolderPage.getShell();       shells[shellCount] = new Shell(shell, style);     }     final Shell currentShell = shells[shellCount];     Button button = new Button(currentShell, SWT.PUSH);     button.setBounds(20, 20, 120, 30);     Button closeButton = new Button(currentShell, SWT.PUSH);     closeButton.setBounds(160, 20, 120, 30);     closeButton.setText(ControlExample.getResourceString("Close"));     closeButton.addListener(SWT.Selection, new Listener() {       public void handleEvent(Event event) {         currentShell.dispose();       }     });     /* Set the size, title, and image, and open the shell */     currentShell.setSize(300, 100);     currentShell.setText(ControlExample.getResourceString("Title")         + shellCount);     if (imageButton.getSelection())       currentShell.setImage(instance.images[ControlExample.ciTarget]);     hookListeners(currentShell);     currentShell.open();     shellCount++;   }   /**    * Creates the "Control" group.    */   void createControlGroup() {     /*      * Create the "Control" group. This is the group on the right half of      * each example tab. It consists of the style group, the 'other' group      * and the size group.      */     controlGroup = new Group(tabFolderPage, SWT.NONE);     controlGroup.setLayout(new GridLayout(2, true));     controlGroup.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL         | GridData.VERTICAL_ALIGN_FILL));     controlGroup.setText(ControlExample.getResourceString("Parameters"));     /* Create a group for the decoration style controls */     styleGroup = new Group(controlGroup, SWT.NONE);     styleGroup.setLayout(new GridLayout());     styleGroup.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false,         1, 3));     styleGroup.setText(ControlExample         .getResourceString("Decoration_Styles"));     /* Create a group for the modal style controls */     modalStyleGroup = new Group(controlGroup, SWT.NONE);     modalStyleGroup.setLayout(new GridLayout());     modalStyleGroup.setLayoutData(new GridData(         GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_FILL));     modalStyleGroup.setText(ControlExample         .getResourceString("Modal_Styles"));     /* Create a group for the 'other' controls */     otherGroup = new Group(controlGroup, SWT.NONE);     otherGroup.setLayout(new GridLayout());     otherGroup         .setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false));     otherGroup.setText(ControlExample.getResourceString("Other"));     /* Create a group for the parent style controls */     parentStyleGroup = new Group(controlGroup, SWT.NONE);     parentStyleGroup.setLayout(new GridLayout());     GridData gridData = new GridData(GridData.HORIZONTAL_ALIGN_FILL);     parentStyleGroup.setLayoutData(gridData);     parentStyleGroup.setText(ControlExample.getResourceString("Parent"));   }   /**    * Creates the "Control" widget children.    */   void createControlWidgets() {     /* Create the parent style buttons */     noParentButton = new Button(parentStyleGroup, SWT.RADIO);     noParentButton.setText(ControlExample.getResourceString("No_Parent"));     parentButton = new Button(parentStyleGroup, SWT.RADIO);     parentButton.setText(ControlExample.getResourceString("Parent"));     /* Create the decoration style buttons */     noTrimButton = new Button(styleGroup, SWT.CHECK);     noTrimButton.setText("SWT.NO_TRIM");     closeButton = new Button(styleGroup, SWT.CHECK);     closeButton.setText("SWT.CLOSE");     titleButton = new Button(styleGroup, SWT.CHECK);     titleButton.setText("SWT.TITLE");     minButton = new Button(styleGroup, SWT.CHECK);     minButton.setText("SWT.MIN");     maxButton = new Button(styleGroup, SWT.CHECK);     maxButton.setText("SWT.MAX");     borderButton = new Button(styleGroup, SWT.CHECK);     borderButton.setText("SWT.BORDER");     resizeButton = new Button(styleGroup, SWT.CHECK);     resizeButton.setText("SWT.RESIZE");     onTopButton = new Button(styleGroup, SWT.CHECK);     onTopButton.setText("SWT.ON_TOP");     toolButton = new Button(styleGroup, SWT.CHECK);     toolButton.setText("SWT.TOOL");     /* Create the modal style buttons */     modelessButton = new Button(modalStyleGroup, SWT.RADIO);     modelessButton.setText("SWT.MODELESS");     primaryModalButton = new Button(modalStyleGroup, SWT.RADIO);     primaryModalButton.setText("SWT.PRIMARY_MODAL");     applicationModalButton = new Button(modalStyleGroup, SWT.RADIO);     applicationModalButton.setText("SWT.APPLICATION_MODAL");     systemModalButton = new Button(modalStyleGroup, SWT.RADIO);     systemModalButton.setText("SWT.SYSTEM_MODAL");     /* Create the 'other' buttons */     imageButton = new Button(otherGroup, SWT.CHECK);     imageButton.setText(ControlExample.getResourceString("Image"));     /* Create the "create" and "closeAll" buttons */     createButton = new Button(controlGroup, SWT.NONE);     GridData gridData = new GridData(GridData.HORIZONTAL_ALIGN_END);     createButton.setLayoutData(gridData);     createButton.setText(ControlExample.getResourceString("Create_Shell"));     closeAllButton = new Button(controlGroup, SWT.NONE);     gridData = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING);     closeAllButton.setText(ControlExample         .getResourceString("Close_All_Shells"));     closeAllButton.setLayoutData(gridData);     /* Add the listeners */     createButton.addSelectionListener(new SelectionAdapter() {       public void widgetSelected(SelectionEvent e) {         createButtonSelected(e);       }     });     closeAllButton.addSelectionListener(new SelectionAdapter() {       public void widgetSelected(SelectionEvent e) {         closeAllShells();       }     });     SelectionListener decorationButtonListener = new SelectionAdapter() {       public void widgetSelected(SelectionEvent event) {         decorationButtonSelected(event);       }     };     noTrimButton.addSelectionListener(decorationButtonListener);     closeButton.addSelectionListener(decorationButtonListener);     titleButton.addSelectionListener(decorationButtonListener);     minButton.addSelectionListener(decorationButtonListener);     maxButton.addSelectionListener(decorationButtonListener);     borderButton.addSelectionListener(decorationButtonListener);     resizeButton.addSelectionListener(decorationButtonListener);     applicationModalButton.addSelectionListener(decorationButtonListener);     systemModalButton.addSelectionListener(decorationButtonListener);     /* Set the default state */     noParentButton.setSelection(true);     modelessButton.setSelection(true);   }   /**    * Handle a decoration button selection event.    *     * @param event    *            org.eclipse.swt.events.SelectionEvent    */   public void decorationButtonSelected(SelectionEvent event) {     /*      * Make sure if the modal style is SWT.APPLICATION_MODAL or      * SWT.SYSTEM_MODAL the style SWT.CLOSE is also selected. This is to      * make sure the user can close the shell.      */     Button widget = (Button) event.widget;     if (widget == applicationModalButton || widget == systemModalButton) {       if (widget.getSelection()) {         closeButton.setSelection(true);         noTrimButton.setSelection(false);       }       return;     }     if (widget == closeButton) {       if (applicationModalButton.getSelection()           || systemModalButton.getSelection()) {         closeButton.setSelection(true);       }     }     /*      * Make sure if the No Trim button is selected then all other decoration      * buttons are deselected.      */     if (widget.getSelection() && widget != noTrimButton) {       noTrimButton.setSelection(false);       return;     }     if (widget.getSelection() && widget == noTrimButton) {       if (applicationModalButton.getSelection()           || systemModalButton.getSelection()) {         noTrimButton.setSelection(false);         return;       }       closeButton.setSelection(false);       titleButton.setSelection(false);       minButton.setSelection(false);       maxButton.setSelection(false);       borderButton.setSelection(false);       resizeButton.setSelection(false);       return;     }   }   /**    * Gets the text for the tab folder item.    */   String getTabText() {     return "Shell";   } } /*******************************************************************************  * 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  ******************************************************************************/ /**  * <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;   Button preferredButton, tooSmallButton, smallButton, largeButton,       fillButton;   /* 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" group */   Button foregroundButton, backgroundButton, fontButton;   Image foregroundImage, backgroundImage;   Color foregroundColor, backgroundColor;   Font font;   /* 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", };   /**    * 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();     createColorGroup();     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" group. This is typically a child of the "Control"    * group. Subclasses override this method to customize and set system    * colors.    */   void createColorGroup() {     /* 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(GridData.HORIZONTAL_ALIGN_FILL));     Button defaultsButton = new Button(colorGroup, SWT.PUSH);     defaultsButton.setText(ControlExample.getResourceString("Defaults"));     Shell shell = controlGroup.getShell();     final ColorDialog foregroundDialog = new ColorDialog(shell);     final ColorDialog backgroundDialog = 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)           foregroundDialog.setRGB(oldColor.getRGB()); // seed dialog         // with current         // color         RGB rgb = foregroundDialog.open();         if (rgb == null)           return;         oldColor = foregroundColor; // save old foreground color to         // dispose when done         foregroundColor = new Color(event.display, rgb);         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)           backgroundDialog.setRGB(oldColor.getRGB());         RGB rgb = backgroundDialog.open();         if (rgb == null)           return;         oldColor = backgroundColor; // save old background color to         // dispose when done         backgroundColor = new Color(event.display, rgb);         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);         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();         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"));     /* Add the listeners */     enabledButton.addSelectionListener(new SelectionAdapter() {       public void widgetSelected(SelectionEvent event) {         setExampleWidgetEnabled();       }     });     visibleButton.addSelectionListener(new SelectionAdapter() {       public void widgetSelected(SelectionEvent event) {         setExampleWidgetVisibility();       }     });     /* Set the default state */     enabledButton.setSelection(true);     visibleButton.setSelection(true);   }   /**    * 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, false));   }   /**    * 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.NONE);     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 = 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()) {           Object[] arrayResult = (Object[]) result;           for (int j = 0; j < arrayResult.length; j++) {             getText.append(arrayResult[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("[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);     fillButton = new Button(sizeGroup, SWT.RADIO);     fillButton.setText(ControlExample.getResourceString("Fill"));     /* Add the listeners */     SelectionAdapter selectionListener = new SelectionAdapter() {       public void widgetSelected(SelectionEvent event) {         if (!((Button) event.widget).getSelection())           return;         setExampleWidgetSize();       }     };     preferredButton.addSelectionListener(selectionListener);     tooSmallButton.addSelectionListener(selectionListener);     smallButton.addSelectionListener(selectionListener);     largeButton.addSelectionListener(selectionListener);     fillButton.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:     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();     for (int i = 0; i < controls.length; i++) {       controls[i].setBackground(backgroundColor);     }     // Set the background button's color to match the color just set.     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     Control[] controls = getExampleWidgets();     for (int i = 0; i < controls.length; i++) {       Control control = controls[i];       control.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();     for (int i = 0; i < controls.length; i++) {       controls[i].setForeground(foregroundColor);     }     // Set the foreground button's color to match the color just set.     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;       if (fillButton.getSelection()) {         gridData = new GridData(GridData.FILL_BOTH);       } else {         gridData = new GridData();         gridData.widthHint = size;         gridData.heightHint = size;       }       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();     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());     }   } } /*******************************************************************************  * 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  ******************************************************************************/ class TreeTab extends ScrollableTab {   /* Example widgets and groups that contain them */   Tree tree1, tree2;   TreeItem textNode1, imageNode1;   Group treeGroup, imageTreeGroup, itemGroup;   /* Style widgets added to the "Style" group */   Button checkButton, fullSelectionButton;   /* Other widgets added to the "Other" group */   Button multipleColumns, headerVisibleButton, linesVisibleButton;   /* Controls and resources added to the "Colors" group */   Button itemForegroundButton, itemBackgroundButton, itemFontButton;   Color itemForegroundColor, itemBackgroundColor;   Image itemForegroundImage, itemBackgroundImage;   Font itemFont;   static String[] columnTitles = {       ControlExample.getResourceString("TableTitle_0"),       ControlExample.getResourceString("TableTitle_1"),       ControlExample.getResourceString("TableTitle_2"),       ControlExample.getResourceString("TableTitle_3") };   static String[][] tableData = {       { ControlExample.getResourceString("TableLine0_0"),           ControlExample.getResourceString("TableLine0_1"),           ControlExample.getResourceString("TableLine0_2"),           ControlExample.getResourceString("TableLine0_3") },       { ControlExample.getResourceString("TableLine1_0"),           ControlExample.getResourceString("TableLine1_1"),           ControlExample.getResourceString("TableLine1_2"),           ControlExample.getResourceString("TableLine1_3") },       { ControlExample.getResourceString("TableLine2_0"),           ControlExample.getResourceString("TableLine2_1"),           ControlExample.getResourceString("TableLine2_2"),           ControlExample.getResourceString("TableLine2_3") } };   /**    * Creates the Tab within a given instance of ControlExample.    */   TreeTab(ControlExample instance) {     super(instance);   }   /**    * Creates the "Colors" group.    */   void createColorGroup() {     super.createColorGroup();     itemGroup = new Group(colorGroup, SWT.NONE);     itemGroup.setText(ControlExample.getResourceString("Tree_Item_Colors"));     GridData data = new GridData();     data.horizontalSpan = 2;     itemGroup.setLayoutData(data);     itemGroup.setLayout(new GridLayout(2, false));     new Label(itemGroup, SWT.NONE).setText(ControlExample         .getResourceString("Foreground_Color"));     itemForegroundButton = new Button(itemGroup, SWT.PUSH);     new Label(itemGroup, SWT.NONE).setText(ControlExample         .getResourceString("Background_Color"));     itemBackgroundButton = new Button(itemGroup, SWT.PUSH);     itemFontButton = new Button(itemGroup, SWT.PUSH);     itemFontButton.setText(ControlExample.getResourceString("Font"));     itemFontButton.setLayoutData(new GridData(         GridData.HORIZONTAL_ALIGN_FILL));     Shell shell = colorGroup.getShell();     final ColorDialog foregroundDialog = new ColorDialog(shell);     final ColorDialog backgroundDialog = new ColorDialog(shell);     final FontDialog fontDialog = new FontDialog(shell);     int imageSize = 12;     Display display = shell.getDisplay();     itemForegroundImage = new Image(display, imageSize, imageSize);     itemBackgroundImage = new Image(display, imageSize, imageSize);     /* Add listeners to set the colors and font */     itemForegroundButton.setImage(itemForegroundImage);     itemForegroundButton.addSelectionListener(new SelectionAdapter() {       public void widgetSelected(SelectionEvent event) {         Color oldColor = itemForegroundColor;         if (oldColor == null)           oldColor = textNode1.getForeground();         foregroundDialog.setRGB(oldColor.getRGB());         RGB rgb = foregroundDialog.open();         if (rgb == null)           return;         oldColor = itemForegroundColor;         itemForegroundColor = new Color(event.display, rgb);         setItemForeground();         if (oldColor != null)           oldColor.dispose();       }     });     itemBackgroundButton.setImage(itemBackgroundImage);     itemBackgroundButton.addSelectionListener(new SelectionAdapter() {       public void widgetSelected(SelectionEvent event) {         Color oldColor = itemBackgroundColor;         if (oldColor == null)           oldColor = textNode1.getBackground();         backgroundDialog.setRGB(oldColor.getRGB());         RGB rgb = backgroundDialog.open();         if (rgb == null)           return;         oldColor = itemBackgroundColor;         itemBackgroundColor = new Color(event.display, rgb);         setItemBackground();         if (oldColor != null)           oldColor.dispose();       }     });     itemFontButton.addSelectionListener(new SelectionAdapter() {       public void widgetSelected(SelectionEvent event) {         Font oldFont = itemFont;         if (oldFont == null)           oldFont = textNode1.getFont();         fontDialog.setFontList(oldFont.getFontData());         FontData fontData = fontDialog.open();         if (fontData == null)           return;         oldFont = itemFont;         itemFont = new Font(event.display, fontData);         setItemFont();         setExampleWidgetSize();         if (oldFont != null)           oldFont.dispose();       }     });     shell.addDisposeListener(new DisposeListener() {       public void widgetDisposed(DisposeEvent event) {         if (itemBackgroundImage != null)           itemBackgroundImage.dispose();         if (itemForegroundImage != null)           itemForegroundImage.dispose();         if (itemBackgroundColor != null)           itemBackgroundColor.dispose();         if (itemForegroundColor != null)           itemForegroundColor.dispose();         if (itemFont != null)           itemFont.dispose();         itemBackgroundColor = null;         itemForegroundColor = null;         itemFont = null;       }     });   }   /**    * Creates the "Other" group.    */   void createOtherGroup() {     super.createOtherGroup();     /* Create display controls specific to this example */     multipleColumns = new Button(otherGroup, SWT.CHECK);     multipleColumns.setText(ControlExample         .getResourceString("Multiple_Columns"));     headerVisibleButton = new Button(otherGroup, SWT.CHECK);     headerVisibleButton.setText(ControlExample         .getResourceString("Header_Visible"));     linesVisibleButton = new Button(otherGroup, SWT.CHECK);     linesVisibleButton.setText(ControlExample         .getResourceString("Lines_Visible"));     /* Add the listeners */     multipleColumns.addSelectionListener(new SelectionAdapter() {       public void widgetSelected(SelectionEvent event) {         recreateExampleWidgets();       }     });     headerVisibleButton.addSelectionListener(new SelectionAdapter() {       public void widgetSelected(SelectionEvent event) {         setWidgetHeaderVisible();       }     });     linesVisibleButton.addSelectionListener(new SelectionAdapter() {       public void widgetSelected(SelectionEvent event) {         setWidgetLinesVisible();       }     });   }   /**    * Creates the "Example" group.    */   void createExampleGroup() {     super.createExampleGroup();     /* Create a group for the text tree */     treeGroup = new Group(exampleGroup, SWT.NONE);     treeGroup.setLayout(new GridLayout());     treeGroup         .setLayoutData(new GridData(GridData.GRAB_HORIZONTAL             | GridData.HORIZONTAL_ALIGN_FILL             | GridData.VERTICAL_ALIGN_FILL));     treeGroup.setText("Tree");     /* Create a group for the image tree */     imageTreeGroup = new Group(exampleGroup, SWT.NONE);     imageTreeGroup.setLayout(new GridLayout());     imageTreeGroup         .setLayoutData(new GridData(GridData.GRAB_HORIZONTAL             | GridData.HORIZONTAL_ALIGN_FILL             | GridData.VERTICAL_ALIGN_FILL));     imageTreeGroup.setText(ControlExample         .getResourceString("Tree_With_Images"));   }   /**    * Creates the "Example" widgets.    */   void createExampleWidgets() {     /* Compute the widget style */     int style = getDefaultStyle();     if (singleButton.getSelection())       style |= SWT.SINGLE;     if (multiButton.getSelection())       style |= SWT.MULTI;     if (checkButton.getSelection())       style |= SWT.CHECK;     if (fullSelectionButton.getSelection())       style |= SWT.FULL_SELECTION;     if (borderButton.getSelection())       style |= SWT.BORDER;     /* Create the text tree */     tree1 = new Tree(treeGroup, style);     if (multipleColumns.getSelection()) {       for (int i = 0; i < columnTitles.length; i++) {         TreeColumn treeColumn = new TreeColumn(tree1, SWT.NONE);         treeColumn.setText(columnTitles[i]);       }     }     for (int i = 0; i < 4; i++) {       TreeItem item = new TreeItem(tree1, SWT.NONE);       setItemText(item, i, ControlExample.getResourceString("Node_"           + (i + 1)));       if (i < 3) {         TreeItem subitem = new TreeItem(item, SWT.NONE);         setItemText(subitem, i, ControlExample             .getResourceString("Node_" + (i + 1) + "_1"));       }     }     TreeItem treeRoots[] = tree1.getItems();     TreeItem item = new TreeItem(treeRoots[1], SWT.NONE);     setItemText(item, 1, ControlExample.getResourceString("Node_2_2"));     item = new TreeItem(item, SWT.NONE);     setItemText(item, 1, ControlExample.getResourceString("Node_2_2_1"));     textNode1 = treeRoots[0];     packColumns(tree1);     /* Create the image tree */     tree2 = new Tree(imageTreeGroup, style);     Image image = instance.images[ControlExample.ciClosedFolder];     if (multipleColumns.getSelection()) {       for (int i = 0; i < columnTitles.length; i++) {         TreeColumn treeColumn = new TreeColumn(tree2, SWT.NONE);         treeColumn.setText(columnTitles[i]);       }     }     for (int i = 0; i < 4; i++) {       item = new TreeItem(tree2, SWT.NONE);       setItemText(item, i, ControlExample.getResourceString("Node_"           + (i + 1)));       item.setImage(image);       if (i < 3) {         TreeItem subitem = new TreeItem(item, SWT.NONE);         setItemText(subitem, i, ControlExample             .getResourceString("Node_" + (i + 1) + "_1"));         subitem.setImage(image);       }     }     treeRoots = tree2.getItems();     item = new TreeItem(treeRoots[1], SWT.NONE);     setItemText(item, 1, ControlExample.getResourceString("Node_2_2"));     item.setImage(image);     item = new TreeItem(item, SWT.NONE);     setItemText(item, 1, ControlExample.getResourceString("Node_2_2_1"));     item.setImage(image);     imageNode1 = treeRoots[0];     packColumns(tree2);   }   void setItemText(TreeItem item, int i, String node) {     int index = i % 3;     if (multipleColumns.getSelection()) {       tableData[index][0] = node;       item.setText(tableData[index]);     } else {       item.setText(node);     }   }   /**    * Creates the "Style" group.    */   void createStyleGroup() {     super.createStyleGroup();     /* Create the extra widgets */     checkButton = new Button(styleGroup, SWT.CHECK);     checkButton.setText("SWT.CHECK");     fullSelectionButton = new Button(styleGroup, SWT.CHECK);     fullSelectionButton.setText("SWT.FULL_SELECTION");   }   /**    * Gets the "Example" widget children's items, if any.    *     * @return an array containing the example widget children's items    */   Item[] getExampleWidgetItems() {     /*      * Note: We do not bother collecting the tree items because tree items      * don't have any events. If events are ever added to TreeItem, then      * this needs to change.      */     Item[] columns1 = tree1.getColumns();     Item[] columns2 = tree2.getColumns();     Item[] allItems = new Item[columns1.length + columns2.length];     System.arraycopy(columns1, 0, allItems, 0, columns1.length);     System.arraycopy(columns2, 0, allItems, columns1.length,         columns2.length);     return allItems;   }   /**    * Gets the "Example" widget children.    */   Control[] getExampleWidgets() {     return new Control[] { tree1, tree2 };   }   /**    * Returns a list of set/get API method names (without the set/get prefix)    * that can be used to set/get values in the example control(s).    */   String[] getMethodNames() {     return new String[] { "Selection", "TopItem" };   }   Object[] parameterForType(String typeName, String value, Control control) {     if (typeName.equals("org.eclipse.swt.widgets.TreeItem")) {       TreeItem item = findItem(value, ((Tree) control).getItems());       if (item != null)         return new Object[] { item };     }     if (typeName.equals("[Lorg.eclipse.swt.widgets.TreeItem;")) {       String[] values = value.split(",");       TreeItem[] items = new TreeItem[values.length];       for (int i = 0; i < values.length; i++) {         TreeItem item = findItem(values[i], ((Tree) control).getItems());         if (item == null)           break;         items[i] = item;       }       return new Object[] { items };     }     return super.parameterForType(typeName, value, control);   }   TreeItem findItem(String value, TreeItem[] items) {     for (int i = 0; i < items.length; i++) {       TreeItem item = items[i];       if (item.getText().equals(value))         return item;       item = findItem(value, item.getItems());       if (item != null)         return item;     }     return null;   }   /**    * Gets the text for the tab folder item.    */   String getTabText() {     return "Tree";   }   void packColumns(Tree tree) {     if (multipleColumns.getSelection()) {       int columnCount = tree.getColumnCount();       for (int i = 0; i < columnCount; i++) {         TreeColumn treeColumn = tree.getColumn(i);         treeColumn.pack();       }     }   }   /**    * Sets the foreground color, background color, and font of the "Example"    * widgets to their default settings. Also sets foreground and background    * color of the Node 1 TreeItems to default settings.    */   void resetColorsAndFonts() {     super.resetColorsAndFonts();     Color oldColor = itemForegroundColor;     itemForegroundColor = null;     setItemForeground();     if (oldColor != null)       oldColor.dispose();     oldColor = itemBackgroundColor;     itemBackgroundColor = null;     setItemBackground();     if (oldColor != null)       oldColor.dispose();     Font oldFont = font;     itemFont = null;     setItemFont();     setExampleWidgetSize();     if (oldFont != null)       oldFont.dispose();   }   /**    * Sets the state of the "Example" widgets.    */   void setExampleWidgetState() {     super.setExampleWidgetState();     setItemBackground();     setItemForeground();     setItemFont();     setExampleWidgetSize();     setWidgetHeaderVisible();     setWidgetLinesVisible();     checkButton.setSelection((tree1.getStyle() & SWT.CHECK) != 0);     checkButton.setSelection((tree2.getStyle() & SWT.CHECK) != 0);     fullSelectionButton         .setSelection((tree1.getStyle() & SWT.FULL_SELECTION) != 0);     fullSelectionButton         .setSelection((tree2.getStyle() & SWT.FULL_SELECTION) != 0);   }   /**    * Sets the background color of the Node 1 TreeItems.    */   void setItemBackground() {     textNode1.setBackground(itemBackgroundColor);     imageNode1.setBackground(itemBackgroundColor);     /* Set the background button's color to match the color just set. */     Color color = itemBackgroundColor;     if (color == null)       color = textNode1.getBackground();     drawImage(itemBackgroundImage, color);     itemBackgroundButton.setImage(itemBackgroundImage);   }   /**    * Sets the foreground color of the Node 1 TreeItems.    */   void setItemForeground() {     textNode1.setForeground(itemForegroundColor);     imageNode1.setForeground(itemForegroundColor);     /* Set the foreground button's color to match the color just set. */     Color color = itemForegroundColor;     if (color == null)       color = textNode1.getForeground();     drawImage(itemForegroundImage, color);     itemForegroundButton.setImage(itemForegroundImage);   }   /**    * Sets the font of the Node 1 TreeItems.    */   void setItemFont() {     if (instance.startup)       return;     textNode1.setFont(itemFont);     imageNode1.setFont(itemFont);   }   /**    * Sets the header visible state of the "Example" widgets.    */   void setWidgetHeaderVisible() {     tree1.setHeaderVisible(headerVisibleButton.getSelection());     tree2.setHeaderVisible(headerVisibleButton.getSelection());   }   /**    * Sets the lines visible state of the "Example" widgets.    */   void setWidgetLinesVisible() {     tree1.setLinesVisible(linesVisibleButton.getSelection());     tree2.setLinesVisible(linesVisibleButton.getSelection());   } } /*******************************************************************************  * Copyright (c) 2000, 2004 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  ******************************************************************************/ class ToolBarTab extends Tab {   /* Example widgets and groups that contain them */   ToolBar imageToolBar, textToolBar, imageTextToolBar;   Group imageToolBarGroup, textToolBarGroup, imageTextToolBarGroup;   /* Style widgets added to the "Style" group */   Button horizontalButton, verticalButton, flatButton, shadowOutButton,       wrapButton, rightButton;   /* Other widgets added to the "Other" group */   Button comboChildButton;   /**    * Creates the Tab within a given instance of ControlExample.    */   ToolBarTab(ControlExample instance) {     super(instance);   }   /**    * Creates the "Example" group.    */   void createExampleGroup() {     super.createExampleGroup();     /* Create a group for the image tool bar */     imageToolBarGroup = new Group(exampleGroup, SWT.NONE);     imageToolBarGroup.setLayout(new GridLayout());     imageToolBarGroup         .setLayoutData(new GridData(GridData.GRAB_HORIZONTAL             | GridData.HORIZONTAL_ALIGN_FILL             | GridData.VERTICAL_ALIGN_FILL));     imageToolBarGroup.setText(ControlExample         .getResourceString("Image_ToolBar"));     /* Create a group for the text tool bar */     textToolBarGroup = new Group(exampleGroup, SWT.NONE);     textToolBarGroup.setLayout(new GridLayout());     textToolBarGroup         .setLayoutData(new GridData(GridData.GRAB_HORIZONTAL             | GridData.HORIZONTAL_ALIGN_FILL             | GridData.VERTICAL_ALIGN_FILL));     textToolBarGroup.setText(ControlExample         .getResourceString("Text_ToolBar"));     /* Create a group for the image and text tool bar */     imageTextToolBarGroup = new Group(exampleGroup, SWT.NONE);     imageTextToolBarGroup.setLayout(new GridLayout());     imageTextToolBarGroup.setLayoutData(new GridData(         GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL             | GridData.VERTICAL_ALIGN_FILL));     imageTextToolBarGroup.setText(ControlExample         .getResourceString("ImageText_ToolBar"));   }   /**    * Creates the "Example" widgets.    */   void createExampleWidgets() {     /* Compute the widget style */     int style = getDefaultStyle();     if (horizontalButton.getSelection())       style |= SWT.HORIZONTAL;     if (verticalButton.getSelection())       style |= SWT.VERTICAL;     if (flatButton.getSelection())       style |= SWT.FLAT;     if (wrapButton.getSelection())       style |= SWT.WRAP;     if (borderButton.getSelection())       style |= SWT.BORDER;     if (shadowOutButton.getSelection())       style |= SWT.SHADOW_OUT;     if (rightButton.getSelection())       style |= SWT.RIGHT;     /*      * Create the example widgets.      *       * A tool bar must consist of all image tool items or all text tool      * items but not both.      */     /* Create the image tool bar */     imageToolBar = new ToolBar(imageToolBarGroup, style);     ToolItem item = new ToolItem(imageToolBar, SWT.PUSH);     item.setImage(instance.images[ControlExample.ciClosedFolder]);     item.setToolTipText("SWT.PUSH");     item = new ToolItem(imageToolBar, SWT.PUSH);     item.setImage(instance.images[ControlExample.ciClosedFolder]);     item.setToolTipText("SWT.PUSH");     item = new ToolItem(imageToolBar, SWT.RADIO);     item.setImage(instance.images[ControlExample.ciOpenFolder]);     item.setToolTipText("SWT.RADIO");     item = new ToolItem(imageToolBar, SWT.RADIO);     item.setImage(instance.images[ControlExample.ciOpenFolder]);     item.setToolTipText("SWT.RADIO");     item = new ToolItem(imageToolBar, SWT.CHECK);     item.setImage(instance.images[ControlExample.ciTarget]);     item.setToolTipText("SWT.CHECK");     item = new ToolItem(imageToolBar, SWT.RADIO);     item.setImage(instance.images[ControlExample.ciClosedFolder]);     item.setToolTipText("SWT.RADIO");     item = new ToolItem(imageToolBar, SWT.RADIO);     item.setImage(instance.images[ControlExample.ciClosedFolder]);     item.setToolTipText("SWT.RADIO");     item = new ToolItem(imageToolBar, SWT.SEPARATOR);     item.setToolTipText("SWT.SEPARATOR");     if (comboChildButton.getSelection()) {       Combo combo = new Combo(imageToolBar, SWT.NONE);       combo.setItems(new String[] { "250", "500", "750" });       combo.setText(combo.getItem(0));       combo.pack();       item.setWidth(combo.getSize().x);       item.setControl(combo);     }     item = new ToolItem(imageToolBar, SWT.DROP_DOWN);     item.setImage(instance.images[ControlExample.ciTarget]);     item.setToolTipText("SWT.DROP_DOWN");     item.addSelectionListener(new DropDownSelectionListener());     /* Create the text tool bar */     textToolBar = new ToolBar(textToolBarGroup, style);     item = new ToolItem(textToolBar, SWT.PUSH);     item.setText(ControlExample.getResourceString("Push"));     item.setToolTipText("SWT.PUSH");     item = new ToolItem(textToolBar, SWT.PUSH);     item.setText(ControlExample.getResourceString("Push"));     item.setToolTipText("SWT.PUSH");     item = new ToolItem(textToolBar, SWT.RADIO);     item.setText(ControlExample.getResourceString("Radio"));     item.setToolTipText("SWT.RADIO");     item = new ToolItem(textToolBar, SWT.RADIO);     item.setText(ControlExample.getResourceString("Radio"));     item.setToolTipText("SWT.RADIO");     item = new ToolItem(textToolBar, SWT.CHECK);     item.setText(ControlExample.getResourceString("Check"));     item.setToolTipText("SWT.CHECK");     item = new ToolItem(textToolBar, SWT.RADIO);     item.setText(ControlExample.getResourceString("Radio"));     item.setToolTipText("SWT.RADIO");     item = new ToolItem(textToolBar, SWT.RADIO);     item.setText(ControlExample.getResourceString("Radio"));     item.setToolTipText("SWT.RADIO");     item = new ToolItem(textToolBar, SWT.SEPARATOR);     item.setToolTipText("SWT.SEPARATOR");     if (comboChildButton.getSelection()) {       Combo combo = new Combo(textToolBar, SWT.NONE);       combo.setItems(new String[] { "250", "500", "750" });       combo.setText(combo.getItem(0));       combo.pack();       item.setWidth(combo.getSize().x);       item.setControl(combo);     }     item = new ToolItem(textToolBar, SWT.DROP_DOWN);     item.setText(ControlExample.getResourceString("Drop_Down"));     item.setToolTipText("SWT.DROP_DOWN");     item.addSelectionListener(new DropDownSelectionListener());     /* Create the image and text tool bar */     imageTextToolBar = new ToolBar(imageTextToolBarGroup, style);     item = new ToolItem(imageTextToolBar, SWT.PUSH);     item.setImage(instance.images[ControlExample.ciClosedFolder]);     item.setText(ControlExample.getResourceString("Push"));     item.setToolTipText("SWT.PUSH");     item = new ToolItem(imageTextToolBar, SWT.PUSH);     item.setImage(instance.images[ControlExample.ciClosedFolder]);     item.setText(ControlExample.getResourceString("Push"));     item.setToolTipText("SWT.PUSH");     item = new ToolItem(imageTextToolBar, SWT.RADIO);     item.setImage(instance.images[ControlExample.ciOpenFolder]);     item.setText(ControlExample.getResourceString("Radio"));     item.setToolTipText("SWT.RADIO");     item = new ToolItem(imageTextToolBar, SWT.RADIO);     item.setImage(instance.images[ControlExample.ciOpenFolder]);     item.setText(ControlExample.getResourceString("Radio"));     item.setToolTipText("SWT.RADIO");     item = new ToolItem(imageTextToolBar, SWT.CHECK);     item.setImage(instance.images[ControlExample.ciTarget]);     item.setText(ControlExample.getResourceString("Check"));     item.setToolTipText("SWT.CHECK");     item = new ToolItem(imageTextToolBar, SWT.RADIO);     item.setImage(instance.images[ControlExample.ciClosedFolder]);     item.setText(ControlExample.getResourceString("Radio"));     item.setToolTipText("SWT.RADIO");     item = new ToolItem(imageTextToolBar, SWT.RADIO);     item.setImage(instance.images[ControlExample.ciClosedFolder]);     item.setText(ControlExample.getResourceString("Radio"));     item.setToolTipText("SWT.RADIO");     item = new ToolItem(imageTextToolBar, SWT.SEPARATOR);     item.setToolTipText("SWT.SEPARATOR");     if (comboChildButton.getSelection()) {       Combo combo = new Combo(imageTextToolBar, SWT.NONE);       combo.setItems(new String[] { "250", "500", "750" });       combo.setText(combo.getItem(0));       combo.pack();       item.setWidth(combo.getSize().x);       item.setControl(combo);     }     item = new ToolItem(imageTextToolBar, SWT.DROP_DOWN);     item.setImage(instance.images[ControlExample.ciTarget]);     item.setText(ControlExample.getResourceString("Drop_Down"));     item.setToolTipText("SWT.DROP_DOWN");     item.addSelectionListener(new DropDownSelectionListener());     /*      * Do not add the selection event for this drop down tool item. Without      * hooking the event, the drop down widget does nothing special when the      * drop down area is selected.      */   }   /**    * Creates the "Other" group.    */   void createOtherGroup() {     super.createOtherGroup();     /* Create display controls specific to this example */     comboChildButton = new Button(otherGroup, SWT.CHECK);     comboChildButton.setText(ControlExample         .getResourceString("Combo_child"));     /* Add the listeners */     comboChildButton.addSelectionListener(new SelectionAdapter() {       public void widgetSelected(SelectionEvent event) {         recreateExampleWidgets();       }     });   }   /**    * Creates the "Style" group.    */   void createStyleGroup() {     super.createStyleGroup();     /* Create the extra widgets */     horizontalButton = new Button(styleGroup, SWT.RADIO);     horizontalButton.setText("SWT.HORIZONTAL");     verticalButton = new Button(styleGroup, SWT.RADIO);     verticalButton.setText("SWT.VERTICAL");     flatButton = new Button(styleGroup, SWT.CHECK);     flatButton.setText("SWT.FLAT");     shadowOutButton = new Button(styleGroup, SWT.CHECK);     shadowOutButton.setText("SWT.SHADOW_OUT");     wrapButton = new Button(styleGroup, SWT.CHECK);     wrapButton.setText("SWT.WRAP");     rightButton = new Button(styleGroup, SWT.CHECK);     rightButton.setText("SWT.RIGHT");     borderButton = new Button(styleGroup, SWT.CHECK);     borderButton.setText("SWT.BORDER");   }   void disposeExampleWidgets() {     super.disposeExampleWidgets();   }   /**    * Gets the "Example" widget children's items, if any.    *     * @return an array containing the example widget children's items    */   Item[] getExampleWidgetItems() {     Item[] imageToolBarItems = imageToolBar.getItems();     Item[] textToolBarItems = textToolBar.getItems();     Item[] imageTextToolBarItems = imageTextToolBar.getItems();     Item[] allItems = new Item[imageToolBarItems.length         + textToolBarItems.length + imageTextToolBarItems.length];     System.arraycopy(imageToolBarItems, 0, allItems, 0,         imageToolBarItems.length);     System.arraycopy(textToolBarItems, 0, allItems,         imageToolBarItems.length, textToolBarItems.length);     System.arraycopy(imageTextToolBarItems, 0, allItems,         imageToolBarItems.length + textToolBarItems.length,         imageTextToolBarItems.length);     return allItems;   }   /**    * Gets the "Example" widget children.    */   Control[] getExampleWidgets() {     return new Control[] { imageToolBar, textToolBar, imageTextToolBar };   }   /**    * Gets the text for the tab folder item.    */   String getTabText() {     return "ToolBar";   }   /**    * Sets the state of the "Example" widgets.    */   void setExampleWidgetState() {     super.setExampleWidgetState();     horizontalButton         .setSelection((imageToolBar.getStyle() & SWT.HORIZONTAL) != 0);     verticalButton         .setSelection((imageToolBar.getStyle() & SWT.VERTICAL) != 0);     flatButton.setSelection((imageToolBar.getStyle() & SWT.FLAT) != 0);     wrapButton.setSelection((imageToolBar.getStyle() & SWT.WRAP) != 0);     shadowOutButton         .setSelection((imageToolBar.getStyle() & SWT.SHADOW_OUT) != 0);     borderButton.setSelection((imageToolBar.getStyle() & SWT.BORDER) != 0);     rightButton.setSelection((imageToolBar.getStyle() & SWT.RIGHT) != 0);   }   /**    * Listens to widgetSelected() events on SWT.DROP_DOWN type ToolItems and    * opens/closes a menu when appropriate.    */   class DropDownSelectionListener extends SelectionAdapter {     private Menu menu = null;     private boolean visible = false;     public void widgetSelected(SelectionEvent event) {       // Create the menu if it has not already been created       if (menu == null) {         // Lazy create the menu.         Shell shell = tabFolderPage.getShell();         menu = new Menu(shell);         for (int i = 0; i < 9; ++i) {           final String text = ControlExample               .getResourceString("DropDownData_" + i);           if (text.length() != 0) {             MenuItem menuItem = new MenuItem(menu, SWT.NONE);             menuItem.setText(text);             /*              * Add a menu selection listener so that the menu is              * hidden when the user selects an item from the drop              * down menu.              */             menuItem.addSelectionListener(new SelectionAdapter() {               public void widgetSelected(SelectionEvent e) {                 setMenuVisible(false);               }             });           } else {             new MenuItem(menu, SWT.SEPARATOR);           }         }       }       /**        * A selection event will be fired when a drop down tool item is        * selected in the main area and in the drop down arrow. Examine the        * event detail to determine where the widget was selected.        */       if (event.detail == SWT.ARROW) {         /*          * The drop down arrow was selected.          */         if (visible) {           // Hide the menu to give the Arrow the appearance of being a           // toggle button.           setMenuVisible(false);         } else {           // Position the menu below and vertically aligned with the           // the drop down tool button.           final ToolItem toolItem = (ToolItem) event.widget;           final ToolBar toolBar = toolItem.getParent();           Rectangle toolItemBounds = toolItem.getBounds();           Point point = toolBar.toDisplay(new Point(toolItemBounds.x,               toolItemBounds.y));           menu.setLocation(point.x, point.y + toolItemBounds.height);           setMenuVisible(true);         }       } else {         /*          * Main area of drop down tool item selected. An application          * would invoke the code to perform the action for the tool          * item.          */       }     }     private void setMenuVisible(boolean visible) {       menu.setVisible(visible);       this.visible = visible;     }   } } /*******************************************************************************  * 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  ******************************************************************************/ class TextTab extends ScrollableTab {   /* Example widgets and groups that contain them */   Text text;   Group textGroup;   /* Style widgets added to the "Style" group */   Button wrapButton, readOnlyButton;   /**    * Creates the Tab within a given instance of ControlExample.    */   TextTab(ControlExample instance) {     super(instance);   }   /**    * Creates the "Example" group.    */   void createExampleGroup() {     super.createExampleGroup();     /* Create a group for the text widget */     textGroup = new Group(exampleGroup, SWT.NONE);     textGroup.setLayout(new GridLayout());     textGroup         .setLayoutData(new GridData(GridData.GRAB_HORIZONTAL             | GridData.HORIZONTAL_ALIGN_FILL             | GridData.VERTICAL_ALIGN_FILL));     textGroup.setText("Text");   }   /**    * Creates the "Example" widgets.    */   void createExampleWidgets() {     /* Compute the widget style */     int style = getDefaultStyle();     if (singleButton.getSelection())       style |= SWT.SINGLE;     if (multiButton.getSelection())       style |= SWT.MULTI;     if (horizontalButton.getSelection())       style |= SWT.H_SCROLL;     if (verticalButton.getSelection())       style |= SWT.V_SCROLL;     if (wrapButton.getSelection())       style |= SWT.WRAP;     if (readOnlyButton.getSelection())       style |= SWT.READ_ONLY;     if (borderButton.getSelection())       style |= SWT.BORDER;     /* Create the example widgets */     text = new Text(textGroup, style);     text.setText(ControlExample.getResourceString("Example_string")         + Text.DELIMITER         + ControlExample.getResourceString("One_Two_Three"));   }   /**    * Creates the "Style" group.    */   void createStyleGroup() {     super.createStyleGroup();     /* Create the extra widgets */     wrapButton = new Button(styleGroup, SWT.CHECK);     wrapButton.setText("SWT.WRAP");     readOnlyButton = new Button(styleGroup, SWT.CHECK);     readOnlyButton.setText("SWT.READ_ONLY");   }   /**    * Creates the tab folder page.    *     * @param tabFolder    *            org.eclipse.swt.widgets.TabFolder    * @return the new page for the tab folder    */   Composite createTabFolderPage(TabFolder tabFolder) {     super.createTabFolderPage(tabFolder);     /*      * Add a resize listener to the tabFolderPage so that if the user types      * into the example widget to change its preferred size, and then      * resizes the shell, we recalculate the preferred size correctly.      */     tabFolderPage.addControlListener(new ControlAdapter() {       public void controlResized(ControlEvent e) {         setExampleWidgetSize();       }     });     return tabFolderPage;   }   /**    * Gets the "Example" widget children.    */   Control[] getExampleWidgets() {     return new Control[] { text };   }   /**    * Returns a list of set/get API method names (without the set/get prefix)    * that can be used to set/get values in the example control(s).    */   String[] getMethodNames() {     return new String[] { "DoubleClickEnabled", "EchoChar", "Editable",         "Orientation", "Selection", "Tabs", "Text", "TextLimit",         "TopIndex" };   }   /**    * Gets the text for the tab folder item.    */   String getTabText() {     return "Text";   }   /**    * Sets the state of the "Example" widgets.    */   void setExampleWidgetState() {     super.setExampleWidgetState();     wrapButton.setSelection((text.getStyle() & SWT.WRAP) != 0);     readOnlyButton.setSelection((text.getStyle() & SWT.READ_ONLY) != 0);     wrapButton.setEnabled((text.getStyle() & SWT.MULTI) != 0);     horizontalButton.setEnabled((text.getStyle() & SWT.MULTI) != 0);     verticalButton.setEnabled((text.getStyle() & SWT.MULTI) != 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  ******************************************************************************/ class TableTab extends ScrollableTab {   /* Example widgets and groups that contain them */   Table table1;   Group tableGroup, itemGroup;   /* Style widgets added to the "Style" group */   Button checkButton, fullSelectionButton, hideSelectionButton;   /* Other widgets added to the "Other" group */   Button multipleColumns, moveableColumns, headerVisibleButton,       linesVisibleButton;   /* Controls and resources added to the "Colors" group */   Button itemForegroundButton, itemBackgroundButton, itemFontButton;   Color itemForegroundColor, itemBackgroundColor;   Image itemForegroundImage, itemBackgroundImage;   Font itemFont;   static String[] columnTitles = {       ControlExample.getResourceString("TableTitle_0"),       ControlExample.getResourceString("TableTitle_1"),       ControlExample.getResourceString("TableTitle_2"),       ControlExample.getResourceString("TableTitle_3") };   static String[][] tableData = {       { ControlExample.getResourceString("TableLine0_0"),           ControlExample.getResourceString("TableLine0_1"),           ControlExample.getResourceString("TableLine0_2"),           ControlExample.getResourceString("TableLine0_3") },       { ControlExample.getResourceString("TableLine1_0"),           ControlExample.getResourceString("TableLine1_1"),           ControlExample.getResourceString("TableLine1_2"),           ControlExample.getResourceString("TableLine1_3") },       { ControlExample.getResourceString("TableLine2_0"),           ControlExample.getResourceString("TableLine2_1"),           ControlExample.getResourceString("TableLine2_2"),           ControlExample.getResourceString("TableLine2_3") } };   /**    * Creates the Tab within a given instance of ControlExample.    */   TableTab(ControlExample instance) {     super(instance);   }   /**    * Creates the "Colors" group.    */   void createColorGroup() {     super.createColorGroup();     itemGroup = new Group(colorGroup, SWT.NONE);     itemGroup         .setText(ControlExample.getResourceString("Table_Item_Colors"));     GridData data = new GridData();     data.horizontalSpan = 2;     itemGroup.setLayoutData(data);     itemGroup.setLayout(new GridLayout(2, false));     new Label(itemGroup, SWT.NONE).setText(ControlExample         .getResourceString("Foreground_Color"));     itemForegroundButton = new Button(itemGroup, SWT.PUSH);     new Label(itemGroup, SWT.NONE).setText(ControlExample         .getResourceString("Background_Color"));     itemBackgroundButton = new Button(itemGroup, SWT.PUSH);     itemFontButton = new Button(itemGroup, SWT.PUSH);     itemFontButton.setText(ControlExample.getResourceString("Font"));     itemFontButton.setLayoutData(new GridData(         GridData.HORIZONTAL_ALIGN_FILL));     Shell shell = colorGroup.getShell();     final ColorDialog foregroundDialog = new ColorDialog(shell);     final ColorDialog backgroundDialog = new ColorDialog(shell);     final FontDialog fontDialog = new FontDialog(shell);     int imageSize = 12;     Display display = shell.getDisplay();     itemForegroundImage = new Image(display, imageSize, imageSize);     itemBackgroundImage = new Image(display, imageSize, imageSize);     /* Add listeners to set the colors and font */     itemForegroundButton.setImage(itemForegroundImage);     itemForegroundButton.addSelectionListener(new SelectionAdapter() {       public void widgetSelected(SelectionEvent event) {         Color oldColor = itemForegroundColor;         if (oldColor == null)           oldColor = table1.getItem(0).getForeground();         foregroundDialog.setRGB(oldColor.getRGB());         RGB rgb = foregroundDialog.open();         if (rgb == null)           return;         oldColor = itemForegroundColor;         itemForegroundColor = new Color(event.display, rgb);         setItemForeground();         if (oldColor != null)           oldColor.dispose();       }     });     itemBackgroundButton.setImage(itemBackgroundImage);     itemBackgroundButton.addSelectionListener(new SelectionAdapter() {       public void widgetSelected(SelectionEvent event) {         Color oldColor = itemBackgroundColor;         if (oldColor == null)           oldColor = table1.getItem(0).getBackground();         backgroundDialog.setRGB(oldColor.getRGB());         RGB rgb = backgroundDialog.open();         if (rgb == null)           return;         oldColor = itemBackgroundColor;         itemBackgroundColor = new Color(event.display, rgb);         setItemBackground();         if (oldColor != null)           oldColor.dispose();       }     });     itemFontButton.addSelectionListener(new SelectionAdapter() {       public void widgetSelected(SelectionEvent event) {         Font oldFont = itemFont;         if (oldFont == null)           oldFont = table1.getItem(0).getFont();         fontDialog.setFontList(oldFont.getFontData());         FontData fontData = fontDialog.open();         if (fontData == null)           return;         oldFont = itemFont;         itemFont = new Font(event.display, fontData);         setItemFont();         setExampleWidgetSize();         if (oldFont != null)           oldFont.dispose();       }     });     shell.addDisposeListener(new DisposeListener() {       public void widgetDisposed(DisposeEvent event) {         if (itemBackgroundImage != null)           itemBackgroundImage.dispose();         if (itemForegroundImage != null)           itemForegroundImage.dispose();         if (itemBackgroundColor != null)           itemBackgroundColor.dispose();         if (itemForegroundColor != null)           itemForegroundColor.dispose();         if (itemFont != null)           itemFont.dispose();         itemBackgroundColor = null;         itemForegroundColor = null;         itemFont = null;       }     });   }   /**    * Creates the "Other" group.    */   void createOtherGroup() {     super.createOtherGroup();     /* Create display controls specific to this example */     headerVisibleButton = new Button(otherGroup, SWT.CHECK);     headerVisibleButton.setText(ControlExample         .getResourceString("Header_Visible"));     multipleColumns = new Button(otherGroup, SWT.CHECK);     multipleColumns.setText(ControlExample         .getResourceString("Multiple_Columns"));     multipleColumns.setSelection(true);     moveableColumns = new Button(otherGroup, SWT.CHECK);     moveableColumns.setText(ControlExample         .getResourceString("Moveable_Columns"));     moveableColumns.setSelection(false);     linesVisibleButton = new Button(otherGroup, SWT.CHECK);     linesVisibleButton.setText(ControlExample         .getResourceString("Lines_Visible"));     /* Add the listeners */     headerVisibleButton.addSelectionListener(new SelectionAdapter() {       public void widgetSelected(SelectionEvent event) {         setWidgetHeaderVisible();       }     });     multipleColumns.addSelectionListener(new SelectionAdapter() {       public void widgetSelected(SelectionEvent event) {         recreateExampleWidgets();       }     });     moveableColumns.addSelectionListener(new SelectionAdapter() {       public void widgetSelected(SelectionEvent event) {         setColumnsMoveable();       }     });     linesVisibleButton.addSelectionListener(new SelectionAdapter() {       public void widgetSelected(SelectionEvent event) {         setWidgetLinesVisible();       }     });   }   /**    * Creates the "Example" group.    */   void createExampleGroup() {     super.createExampleGroup();     /* Create a group for the table */     tableGroup = new Group(exampleGroup, SWT.NONE);     tableGroup.setLayout(new GridLayout());     tableGroup         .setLayoutData(new GridData(GridData.GRAB_HORIZONTAL             | GridData.HORIZONTAL_ALIGN_FILL             | GridData.VERTICAL_ALIGN_FILL));     tableGroup.setText("Table");   }   /**    * Creates the "Example" widgets.    */   void createExampleWidgets() {     /* Compute the widget style */     int style = getDefaultStyle();     if (singleButton.getSelection())       style |= SWT.SINGLE;     if (multiButton.getSelection())       style |= SWT.MULTI;     if (verticalButton.getSelection())       style |= SWT.V_SCROLL;     if (horizontalButton.getSelection())       style |= SWT.H_SCROLL;     if (checkButton.getSelection())       style |= SWT.CHECK;     if (fullSelectionButton.getSelection())       style |= SWT.FULL_SELECTION;     if (hideSelectionButton.getSelection())       style |= SWT.HIDE_SELECTION;     if (borderButton.getSelection())       style |= SWT.BORDER;     /* Create the table widget */     table1 = new Table(tableGroup, style);     /* Fill the table with data */     if (multipleColumns.getSelection()) {       for (int i = 0; i < columnTitles.length; i++) {         TableColumn tableColumn = new TableColumn(table1, SWT.NONE);         tableColumn.setText(columnTitles[i]);       }     } else {       new TableColumn(table1, SWT.NONE);     }     setColumnsMoveable();     for (int i = 0; i < 16; i++) {       TableItem item = new TableItem(table1, SWT.NONE);       item.setImage(instance.images[i % 3]);       setItemText(item, i, ControlExample.getResourceString("Index") + i);     }     packColumns();   }   void setItemText(TableItem item, int i, String node) {     int index = i % 3;     if (multipleColumns.getSelection()) {       tableData[index][0] = node;       item.setText(tableData[index]);     } else {       item.setText(node);     }   }   /**    * Creates the "Style" group.    */   void createStyleGroup() {     super.createStyleGroup();     /* Create the extra widgets */     checkButton = new Button(styleGroup, SWT.CHECK);     checkButton.setText("SWT.CHECK");     fullSelectionButton = new Button(styleGroup, SWT.CHECK);     fullSelectionButton.setText("SWT.FULL_SELECTION");     hideSelectionButton = new Button(styleGroup, SWT.CHECK);     hideSelectionButton.setText("SWT.HIDE_SELECTION");   }   /**    * Gets the "Example" widget children's items, if any.    *     * @return an array containing the example widget children's items    */   Item[] getExampleWidgetItems() {     Item[] columns = table1.getColumns();     Item[] items = table1.getItems();     Item[] allItems = new Item[columns.length + items.length];     System.arraycopy(columns, 0, allItems, 0, columns.length);     System.arraycopy(items, 0, allItems, columns.length, items.length);     return allItems;   }   /**    * Gets the "Example" widget children.    */   Control[] getExampleWidgets() {     return new Control[] { table1 };   }   /**    * Returns a list of set/get API method names (without the set/get prefix)    * that can be used to set/get values in the example control(s).    */   String[] getMethodNames() {     return new String[] { "ItemCount", "Selection", "SelectionIndex",         "TopIndex" };   }   String setMethodName(String methodRoot) {     /*      * Override to handle special case of int      * getSelectionIndex()/setSelection(int)      */     return (methodRoot.equals("SelectionIndex")) ? "setSelection" : "set"         + methodRoot;   }   Object[] parameterForType(String typeName, String value, Control control) {     if (value.equals(""))       return new Object[] { new TableItem[0] }; // bug in Table?     if (typeName.equals("org.eclipse.swt.widgets.TableItem")) {       TableItem item = findItem(value, ((Table) control).getItems());       if (item != null)         return new Object[] { item };     }     if (typeName.equals("[Lorg.eclipse.swt.widgets.TableItem;")) {       String[] values = value.split(",");       TableItem[] items = new TableItem[values.length];       for (int i = 0; i < values.length; i++) {         items[i] = findItem(values[i], ((Table) control).getItems());       }       return new Object[] { items };     }     return super.parameterForType(typeName, value, control);   }   TableItem findItem(String value, TableItem[] items) {     for (int i = 0; i < items.length; i++) {       TableItem item = items[i];       if (item.getText().equals(value))         return item;     }     return null;   }   /**    * Gets the text for the tab folder item.    */   String getTabText() {     return "Table";   }   /**    * Sets the foreground color, background color, and font of the "Example"    * widgets to their default settings. Also sets foreground and background    * color of TableItem [0] to default settings.    */   void resetColorsAndFonts() {     super.resetColorsAndFonts();     Color oldColor = itemForegroundColor;     itemForegroundColor = null;     setItemForeground();     if (oldColor != null)       oldColor.dispose();     oldColor = itemBackgroundColor;     itemBackgroundColor = null;     setItemBackground();     if (oldColor != null)       oldColor.dispose();     Font oldFont = font;     itemFont = null;     setItemFont();     setExampleWidgetSize();     if (oldFont != null)       oldFont.dispose();   }   /**    * Sets the background color of TableItem [0].    */   void setItemBackground() {     table1.getItem(0).setBackground(itemBackgroundColor);     /* Set the background button's color to match the color just set. */     Color color = itemBackgroundColor;     if (color == null)       color = table1.getItem(0).getBackground();     drawImage(itemBackgroundImage, color);     itemBackgroundButton.setImage(itemBackgroundImage);   }   /**    * Sets the foreground color of TableItem [0].    */   void setItemForeground() {     table1.getItem(0).setForeground(itemForegroundColor);     /* Set the foreground button's color to match the color just set. */     Color color = itemForegroundColor;     if (color == null)       color = table1.getItem(0).getForeground();     drawImage(itemForegroundImage, color);     itemForegroundButton.setImage(itemForegroundImage);   }   /**    * Sets the font of TableItem 0.    */   void setItemFont() {     if (instance.startup)       return;     table1.getItem(0).setFont(itemFont);     packColumns();   }   /**    * Sets the font of the "Example" widgets.    */   void setExampleWidgetFont() {     super.setExampleWidgetFont();     packColumns();   }   void packColumns() {     int columnCount = table1.getColumnCount();     for (int i = 0; i < columnCount; i++) {       TableColumn tableColumn = table1.getColumn(i);       tableColumn.pack();     }   }   /**    * Sets the moveable columns state of the "Example" widgets.    */   void setColumnsMoveable() {     boolean selection = moveableColumns.getSelection();     TableColumn[] columns = table1.getColumns();     for (int i = 0; i < columns.length; i++) {       columns[i].setMoveable(selection);     }   }   /**    * Sets the state of the "Example" widgets.    */   void setExampleWidgetState() {     super.setExampleWidgetState();     setItemBackground();     setItemForeground();     setItemFont();     setExampleWidgetSize();     setWidgetHeaderVisible();     setWidgetLinesVisible();     checkButton.setSelection((table1.getStyle() & SWT.CHECK) != 0);     fullSelectionButton         .setSelection((table1.getStyle() & SWT.FULL_SELECTION) != 0);     hideSelectionButton         .setSelection((table1.getStyle() & SWT.HIDE_SELECTION) != 0);   }   /**    * Sets the header visible state of the "Example" widgets.    */   void setWidgetHeaderVisible() {     table1.setHeaderVisible(headerVisibleButton.getSelection());   }   /**    * Sets the lines visible state of the "Example" widgets.    */   void setWidgetLinesVisible() {     table1.setLinesVisible(linesVisibleButton.getSelection());   } } /*******************************************************************************  * 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  ******************************************************************************/ class TabFolderTab extends Tab {   /* Example widgets and groups that contain them */   TabFolder tabFolder1;   Group tabFolderGroup;   /* Style widgets added to the "Style" group */   Button topButton, bottomButton;   static String[] TabItems1 = {       ControlExample.getResourceString("TabItem1_0"),       ControlExample.getResourceString("TabItem1_1"),       ControlExample.getResourceString("TabItem1_2") };   /**    * Creates the Tab within a given instance of ControlExample.    */   TabFolderTab(ControlExample instance) {     super(instance);   }   /**    * Creates the "Example" group.    */   void createExampleGroup() {     super.createExampleGroup();     /* Create a group for the TabFolder */     tabFolderGroup = new Group(exampleGroup, SWT.NONE);     tabFolderGroup.setLayout(new GridLayout());     tabFolderGroup         .setLayoutData(new GridData(GridData.GRAB_HORIZONTAL             | GridData.HORIZONTAL_ALIGN_FILL             | GridData.VERTICAL_ALIGN_FILL));     tabFolderGroup.setText("TabFolder");   }   /**    * Creates the "Example" widgets.    */   void createExampleWidgets() {     /* Compute the widget style */     int style = getDefaultStyle();     if (topButton.getSelection())       style |= SWT.TOP;     if (bottomButton.getSelection())       style |= SWT.BOTTOM;     if (borderButton.getSelection())       style |= SWT.BORDER;     /* Create the example widgets */     tabFolder1 = new TabFolder(tabFolderGroup, style);     for (int i = 0; i < TabItems1.length; i++) {       TabItem item = new TabItem(tabFolder1, SWT.NONE);       item.setText(TabItems1[i]);       Text content = new Text(tabFolder1, SWT.WRAP | SWT.MULTI);       content.setText(ControlExample.getResourceString("TabItem_content")           + ": " + i);       item.setControl(content);     }   }   /**    * Creates the "Style" group.    */   void createStyleGroup() {     super.createStyleGroup();     /* Create the extra widgets */     topButton = new Button(styleGroup, SWT.RADIO);     topButton.setText("SWT.TOP");     topButton.setSelection(true);     bottomButton = new Button(styleGroup, SWT.RADIO);     bottomButton.setText("SWT.BOTTOM");     borderButton = new Button(styleGroup, SWT.CHECK);     borderButton.setText("SWT.BORDER");     /* Add the listeners */     SelectionListener selectionListener = new SelectionAdapter() {       public void widgetSelected(SelectionEvent event) {         if (!((Button) event.widget).getSelection())           return;         recreateExampleWidgets();       }     };     topButton.addSelectionListener(selectionListener);     bottomButton.addSelectionListener(selectionListener);   }   /**    * Gets the "Example" widget children's items, if any.    *     * @return an array containing the example widget children's items    */   Item[] getExampleWidgetItems() {     return tabFolder1.getItems();   }   /**    * Gets the "Example" widget children.    */   Control[] getExampleWidgets() {     return new Control[] { tabFolder1 };   }   /**    * Returns a list of set/get API method names (without the set/get prefix)    * that can be used to set/get values in the example control(s).    */   String[] getMethodNames() {     return new String[] { "Selection", "SelectionIndex" };   }   String setMethodName(String methodRoot) {     /*      * Override to handle special case of int      * getSelectionIndex()/setSelection(int)      */     return (methodRoot.equals("SelectionIndex")) ? "setSelection" : "set"         + methodRoot;   }   Object[] parameterForType(String typeName, String value, Control control) {     if (value.equals(""))       return new Object[] { new TabItem[0] };     if (typeName.equals("org.eclipse.swt.widgets.TabItem")) {       TabItem item = findItem(value, ((TabFolder) control).getItems());       if (item != null)         return new Object[] { item };     }     if (typeName.equals("[Lorg.eclipse.swt.widgets.TabItem;")) {       String[] values = value.split(",");       TabItem[] items = new TabItem[values.length];       for (int i = 0; i < values.length; i++) {         items[i] = findItem(values[i], ((TabFolder) control).getItems());       }       return new Object[] { items };     }     return super.parameterForType(typeName, value, control);   }   TabItem findItem(String value, TabItem[] items) {     for (int i = 0; i < items.length; i++) {       TabItem item = items[i];       if (item.getText().equals(value))         return item;     }     return null;   }   /**    * Gets the text for the tab folder item.    */   String getTabText() {     return "TabFolder";   }   /**    * Sets the state of the "Example" widgets.    */   void setExampleWidgetState() {     super.setExampleWidgetState();     topButton.setSelection((tabFolder1.getStyle() & SWT.TOP) != 0);     bottomButton.setSelection((tabFolder1.getStyle() & SWT.BOTTOM) != 0);     borderButton.setSelection((tabFolder1.getStyle() & SWT.BORDER) != 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  ******************************************************************************/ class StyledTextTab extends ScrollableTab {   /* Example widgets and groups that contain them */   StyledText styledText;   Group styledTextGroup, styledTextStyleGroup;   /* Style widgets added to the "Style" group */   Button wrapButton, readOnlyButton, fullSelectionButton;   /* Buttons for adding StyleRanges to StyledText */   Button boldButton, italicButton, redButton, yellowButton, underlineButton,       strikeoutButton;   Image boldImage, italicImage, redImage, yellowImage, underlineImage,       strikeoutImage;   /* Variables for saving state. */   StyleRange[] styleRanges;   /**    * Creates the Tab within a given instance of ControlExample.    */   StyledTextTab(ControlExample instance) {     super(instance);   }   /**    * Creates a bitmap image.    */   Image createBitmapImage(Display display, String name) {     InputStream sourceStream = ControlExample.class         .getResourceAsStream(name + ".bmp");     InputStream maskStream = ControlExample.class.getResourceAsStream(name         + "_mask.bmp");     ImageData source = new ImageData(sourceStream);     ImageData mask = new ImageData(maskStream);     Image result = new Image(display, source, mask);     try {       sourceStream.close();       maskStream.close();     } catch (IOException e) {       e.printStackTrace();     }     return result;   }   /**    * Creates the "Control" widget children.    */   void createControlWidgets() {     super.createControlWidgets();     /* Add a group for modifying the StyledText widget */     createStyledTextStyleGroup();   }   /**    * Creates the "Example" group.    */   void createExampleGroup() {     super.createExampleGroup();     /* Create a group for the styled text widget */     styledTextGroup = new Group(exampleGroup, SWT.NONE);     styledTextGroup.setLayout(new GridLayout());     styledTextGroup         .setLayoutData(new GridData(GridData.GRAB_HORIZONTAL             | GridData.HORIZONTAL_ALIGN_FILL             | GridData.VERTICAL_ALIGN_FILL));     styledTextGroup.setText("StyledText");   }   /**    * Creates the "Example" widgets.    */   void createExampleWidgets() {     /* Compute the widget style */     int style = getDefaultStyle();     if (singleButton.getSelection())       style |= SWT.SINGLE;     if (multiButton.getSelection())       style |= SWT.MULTI;     if (horizontalButton.getSelection())       style |= SWT.H_SCROLL;     if (verticalButton.getSelection())       style |= SWT.V_SCROLL;     if (wrapButton.getSelection())       style |= SWT.WRAP;     if (readOnlyButton.getSelection())       style |= SWT.READ_ONLY;     if (borderButton.getSelection())       style |= SWT.BORDER;     if (fullSelectionButton.getSelection())       style |= SWT.FULL_SELECTION;     /* Create the example widgets */     styledText = new StyledText(styledTextGroup, style);     styledText.setText(ControlExample.getResourceString("Example_string"));     styledText.append("\n");     styledText.append(ControlExample.getResourceString("One_Two_Three"));     if (styleRanges != null) {       styledText.setStyleRanges(styleRanges);       styleRanges = null;     }   }   /**    * Creates the "Style" group.    */   void createStyleGroup() {     super.createStyleGroup();     /* Create the extra widgets */     wrapButton = new Button(styleGroup, SWT.CHECK);     wrapButton.setText("SWT.WRAP");     readOnlyButton = new Button(styleGroup, SWT.CHECK);     readOnlyButton.setText("SWT.READ_ONLY");     fullSelectionButton = new Button(styleGroup, SWT.CHECK);     fullSelectionButton.setText("SWT.FULL_SELECTION");   }   /**    * Creates the "StyledText Style" group.    */   void createStyledTextStyleGroup() {     final Display display = controlGroup.getDisplay();     styledTextStyleGroup = new Group(controlGroup, SWT.NONE);     styledTextStyleGroup.setText(ControlExample         .getResourceString("StyledText_Styles"));     styledTextStyleGroup.setLayout(new GridLayout(7, false));     GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL);     data.horizontalSpan = 2;     styledTextStyleGroup.setLayoutData(data);     /* Get images */     boldImage = createBitmapImage(display, "bold");     italicImage = createBitmapImage(display, "italic");     redImage = createBitmapImage(display, "red");     yellowImage = createBitmapImage(display, "yellow");     underlineImage = createBitmapImage(display, "underline");     strikeoutImage = createBitmapImage(display, "strikeout");     /* Create controls to modify the StyledText */     Label label = new Label(styledTextStyleGroup, SWT.NONE);     label.setText(ControlExample         .getResourceString("StyledText_Style_Instructions"));     data = new GridData(GridData.FILL_HORIZONTAL);     data.horizontalSpan = 7;     label.setLayoutData(data);     new Label(styledTextStyleGroup, SWT.NONE).setText(ControlExample         .getResourceString("Bold"));     boldButton = new Button(styledTextStyleGroup, SWT.PUSH);     boldButton.setImage(boldImage);     new Label(styledTextStyleGroup, SWT.NONE).setText(ControlExample         .getResourceString("Underline"));     underlineButton = new Button(styledTextStyleGroup, SWT.PUSH);     underlineButton.setImage(underlineImage);     new Label(styledTextStyleGroup, SWT.NONE).setLayoutData(new GridData(         GridData.FILL_HORIZONTAL));     new Label(styledTextStyleGroup, SWT.NONE).setText(ControlExample         .getResourceString("Foreground_Style"));     redButton = new Button(styledTextStyleGroup, SWT.PUSH);     redButton.setImage(redImage);     new Label(styledTextStyleGroup, SWT.NONE).setText(ControlExample         .getResourceString("Italic"));     italicButton = new Button(styledTextStyleGroup, SWT.PUSH);     italicButton.setImage(italicImage);     new Label(styledTextStyleGroup, SWT.NONE).setText(ControlExample         .getResourceString("Strikeout"));     strikeoutButton = new Button(styledTextStyleGroup, SWT.PUSH);     strikeoutButton.setImage(strikeoutImage);     new Label(styledTextStyleGroup, SWT.NONE).setLayoutData(new GridData(         GridData.FILL_HORIZONTAL));     new Label(styledTextStyleGroup, SWT.NONE).setText(ControlExample         .getResourceString("Background_Style"));     yellowButton = new Button(styledTextStyleGroup, SWT.PUSH);     yellowButton.setImage(yellowImage);     SelectionListener styleListener = new SelectionAdapter() {       public void widgetSelected(SelectionEvent e) {         Point sel = styledText.getSelectionRange();         if ((sel == null) || (sel.y == 0))           return;         StyleRange style;         for (int i = sel.x; i < sel.x + sel.y; i++) {           StyleRange range = styledText.getStyleRangeAtOffset(i);           if (range != null) {             style = (StyleRange) range.clone();             style.start = i;             style.length = 1;           } else {             style = new StyleRange(i, 1, null, null, SWT.NORMAL);           }           if (e.widget == boldButton) {             style.fontStyle ^= SWT.BOLD;           } else if (e.widget == italicButton) {             style.fontStyle ^= SWT.ITALIC;           } else if (e.widget == underlineButton) {             style.underline = !style.underline;           } else if (e.widget == strikeoutButton) {             style.strikeout = !style.strikeout;           }           styledText.setStyleRange(style);         }         styledText.setSelectionRange(sel.x + sel.y, 0);       }     };     SelectionListener colorListener = new SelectionAdapter() {       public void widgetSelected(SelectionEvent e) {         Point sel = styledText.getSelectionRange();         if ((sel == null) || (sel.y == 0))           return;         Color fg = null, bg = null;         if (e.widget == redButton) {           fg = display.getSystemColor(SWT.COLOR_RED);         } else if (e.widget == yellowButton) {           bg = display.getSystemColor(SWT.COLOR_YELLOW);         }         StyleRange style;         for (int i = sel.x; i < sel.x + sel.y; i++) {           StyleRange range = styledText.getStyleRangeAtOffset(i);           if (range != null) {             style = (StyleRange) range.clone();             style.start = i;             style.length = 1;             style.foreground = style.foreground != null ? null : fg;             style.background = style.background != null ? null : bg;           } else {             style = new StyleRange(i, 1, fg, bg, SWT.NORMAL);           }           styledText.setStyleRange(style);         }         styledText.setSelectionRange(sel.x + sel.y, 0);       }     };     boldButton.addSelectionListener(styleListener);     italicButton.addSelectionListener(styleListener);     underlineButton.addSelectionListener(styleListener);     strikeoutButton.addSelectionListener(styleListener);     redButton.addSelectionListener(colorListener);     yellowButton.addSelectionListener(colorListener);     yellowButton.addDisposeListener(new DisposeListener() {       public void widgetDisposed(DisposeEvent e) {         boldImage.dispose();         italicImage.dispose();         redImage.dispose();         yellowImage.dispose();         underlineImage.dispose();         strikeoutImage.dispose();       }     });   }   /**    * Creates the tab folder page.    *     * @param tabFolder    *            org.eclipse.swt.widgets.TabFolder    * @return the new page for the tab folder    */   Composite createTabFolderPage(TabFolder tabFolder) {     super.createTabFolderPage(tabFolder);     /*      * Add a resize listener to the tabFolderPage so that if the user types      * into the example widget to change its preferred size, and then      * resizes the shell, we recalculate the preferred size correctly.      */     tabFolderPage.addControlListener(new ControlAdapter() {       public void controlResized(ControlEvent e) {         setExampleWidgetSize();       }     });     return tabFolderPage;   }   /**    * Disposes the "Example" widgets.    */   void disposeExampleWidgets() {     /* store the state of the styledText if applicable */     if (styledText != null) {       styleRanges = styledText.getStyleRanges();     }     super.disposeExampleWidgets();   }   /**    * Gets the "Example" widget children.    */   Control[] getExampleWidgets() {     return new Control[] { styledText };   }   /**    * Returns a list of set/get API method names (without the set/get prefix)    * that can be used to set/get values in the example control(s).    */   String[] getMethodNames() {     return new String[] { "CaretOffset", "DoubleClickEnabled", "Editable",         "HorizontalIndex", "HorizontalPixel", "Orientation",         "Selection", "Tabs", "Text", "TextLimit", "TopIndex",         "TopPixel", "WordWrap" };   }   /**    * Gets the text for the tab folder item.    */   String getTabText() {     return "StyledText";   }   /**    * Sets the state of the "Example" widgets.    */   void setExampleWidgetState() {     super.setExampleWidgetState();     wrapButton.setSelection((styledText.getStyle() & SWT.WRAP) != 0);     readOnlyButton         .setSelection((styledText.getStyle() & SWT.READ_ONLY) != 0);     fullSelectionButton         .setSelection((styledText.getStyle() & SWT.FULL_SELECTION) != 0);     horizontalButton.setEnabled((styledText.getStyle() & SWT.MULTI) != 0);     verticalButton.setEnabled((styledText.getStyle() & SWT.MULTI) != 0);     wrapButton.setEnabled((styledText.getStyle() & SWT.MULTI) != 0);   } } /*******************************************************************************  * Copyright (c) 2000, 2004 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  ******************************************************************************/ class SpinnerTab extends RangeTab {   /* Example widgets and groups that contain them */   Spinner spinner1;   Group spinnerGroup;   /* Style widgets added to the "Style" group */   Button readOnlyButton, wrapButton;   /* Scale widgets added to the "Control" group */   Scale incrementScale, pageIncrementScale, digitsScale;   /**    * Creates the Tab within a given instance of ControlExample.    */   SpinnerTab(ControlExample instance) {     super(instance);   }   /**    * Creates the "Control" widget children.    */   void createControlWidgets() {     super.createControlWidgets();     createIncrementGroup();     createPageIncrementGroup();     createDigitsGroup();   }   /**    * Creates the "Example" group.    */   void createExampleGroup() {     super.createExampleGroup();     /* Create a group for the spinner */     spinnerGroup = new Group(exampleGroup, SWT.NONE);     spinnerGroup.setLayout(new GridLayout());     spinnerGroup         .setLayoutData(new GridData(GridData.GRAB_HORIZONTAL             | GridData.HORIZONTAL_ALIGN_FILL             | GridData.VERTICAL_ALIGN_FILL));     spinnerGroup.setText("Spinner");   }   /**    * Creates the "Example" widgets.    */   void createExampleWidgets() {     /* Compute the widget style */     int style = getDefaultStyle();     if (readOnlyButton.getSelection())       style |= SWT.READ_ONLY;     if (borderButton.getSelection())       style |= SWT.BORDER;     if (wrapButton.getSelection())       style |= SWT.WRAP;     /* Create the example widgets */     spinner1 = new Spinner(spinnerGroup, style);   }   /**    * Create a group of widgets to control the maximum attribute of the example    * widget.    */   void createMaximumGroup() {     super.createMaximumGroup();     maximumScale.setMaximum(1000);     maximumScale.setPageIncrement(100);   }   /**    * Create a group of widgets to control the selection attribute of the    * example widget.    */   void createSelectionGroup() {     super.createSelectionGroup();     selectionScale.setMaximum(1000);     selectionScale.setPageIncrement(100);   }   /**    * Create a group of widgets to control the increment attribute of the    * example widget.    */   void createIncrementGroup() {     /* Create the group */     Group incrementGroup = new Group(controlGroup, SWT.NONE);     incrementGroup.setLayout(new GridLayout());     incrementGroup.setText(ControlExample.getResourceString("Increment"));     incrementGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));     /* Create the scale widget */     incrementScale = new Scale(incrementGroup, SWT.NONE);     incrementScale.setMaximum(100);     incrementScale.setSelection(1);     incrementScale.setPageIncrement(10);     incrementScale.setIncrement(5);     GridData data = new GridData(GridData.FILL_HORIZONTAL);     data.widthHint = 100;     incrementScale.setLayoutData(data);     /* Add the listeners */     incrementScale.addSelectionListener(new SelectionAdapter() {       public void widgetSelected(SelectionEvent e) {         setWidgetIncrement();       }     });   }   /**    * Create a group of widgets to control the page increment attribute of the    * example widget.    */   void createPageIncrementGroup() {     /* Create the group */     Group pageIncrementGroup = new Group(controlGroup, SWT.NONE);     pageIncrementGroup.setLayout(new GridLayout());     pageIncrementGroup.setText(ControlExample         .getResourceString("Page_Increment"));     pageIncrementGroup         .setLayoutData(new GridData(GridData.FILL_HORIZONTAL));     /* Create the scale widget */     pageIncrementScale = new Scale(pageIncrementGroup, SWT.NONE);     pageIncrementScale.setMaximum(100);     pageIncrementScale.setSelection(10);     pageIncrementScale.setPageIncrement(10);     pageIncrementScale.setIncrement(5);     GridData data = new GridData(GridData.FILL_HORIZONTAL);     data.widthHint = 100;     pageIncrementScale.setLayoutData(data);     /* Add the listeners */     pageIncrementScale.addSelectionListener(new SelectionAdapter() {       public void widgetSelected(SelectionEvent event) {         setWidgetPageIncrement();       }     });   }   /**    * Create a group of widgets to control the digits attribute of the example    * widget.    */   void createDigitsGroup() {     /* Create the group */     Group digitsGroup = new Group(controlGroup, SWT.NONE);     digitsGroup.setLayout(new GridLayout());     digitsGroup.setText(ControlExample.getResourceString("Digits"));     digitsGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));     /* Create the scale widget */     digitsScale = new Scale(digitsGroup, SWT.NONE);     digitsScale.setMaximum(8);     digitsScale.setSelection(0);     digitsScale.setPageIncrement(10);     digitsScale.setIncrement(5);     GridData data = new GridData(GridData.FILL_HORIZONTAL);     data.widthHint = 100;     digitsScale.setLayoutData(data);     /* Add the listeners */     digitsScale.addSelectionListener(new SelectionAdapter() {       public void widgetSelected(SelectionEvent e) {         setWidgetDigits();       }     });   }   /**    * Creates the tab folder page.    *     * @param tabFolder    *            org.eclipse.swt.widgets.TabFolder    * @return the new page for the tab folder    */   Composite createTabFolderPage(TabFolder tabFolder) {     super.createTabFolderPage(tabFolder);     /*      * Add a resize listener to the tabFolderPage so that if the user types      * into the example widget to change its preferred size, and then      * resizes the shell, we recalculate the preferred size correctly.      */     tabFolderPage.addControlListener(new ControlAdapter() {       public void controlResized(ControlEvent e) {         setExampleWidgetSize();       }     });     return tabFolderPage;   }   /**    * Creates the "Style" group.    */   void createStyleGroup() {     orientationButtons = false;     super.createStyleGroup();     /* Create the extra widgets */     readOnlyButton = new Button(styleGroup, SWT.CHECK);     readOnlyButton.setText("SWT.READ_ONLY");     wrapButton = new Button(styleGroup, SWT.CHECK);     wrapButton.setText("SWT.WRAP");   }   /**    * Gets the "Example" widget children.    */   Control[] getExampleWidgets() {     return new Control[] { spinner1 };   }   /**    * Gets the text for the tab folder item.    */   String getTabText() {     return "Spinner";   }   /**    * Sets the state of the "Example" widgets.    */   void setExampleWidgetState() {     super.setExampleWidgetState();     readOnlyButton.setSelection((spinner1.getStyle() & SWT.READ_ONLY) != 0);     wrapButton.setSelection((spinner1.getStyle() & SWT.WRAP) != 0);     setWidgetIncrement();     setWidgetPageIncrement();     setWidgetDigits();   }   /**    * Sets the increment of the "Example" widgets.    */   void setWidgetIncrement() {     spinner1.setIncrement(incrementScale.getSelection());   }   /**    * Sets the minimim of the "Example" widgets.    */   void setWidgetMaximum() {     spinner1.setMaximum(maximumScale.getSelection());   }   /**    * Sets the minimim of the "Example" widgets.    */   void setWidgetMinimum() {     spinner1.setMinimum(minimumScale.getSelection());   }   /**    * Sets the page increment of the "Example" widgets.    */   void setWidgetPageIncrement() {     spinner1.setPageIncrement(pageIncrementScale.getSelection());   }   /**    * Sets the digits of the "Example" widgets.    */   void setWidgetDigits() {     spinner1.setDigits(digitsScale.getSelection());   }   /**    * Sets the selection of the "Example" widgets.    */   void setWidgetSelection() {     spinner1.setSelection(selectionScale.getSelection());   } } /*******************************************************************************  * 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  ******************************************************************************/ class SliderTab extends RangeTab {   /* Example widgets and groups that contain them */   Scale scale1;   Slider slider1;   Group sliderGroup, scaleGroup;   /* Scale widgets added to the "Control" group */   Scale incrementScale, pageIncrementScale, thumbScale;   /**    * Creates the Tab within a given instance of ControlExample.    */   SliderTab(ControlExample instance) {     super(instance);   }   /**    * Creates the "Control" widget children.    */   void createControlWidgets() {     super.createControlWidgets();     createThumbGroup();     createIncrementGroup();     createPageIncrementGroup();   }   /**    * Creates the "Example" group.    */   void createExampleGroup() {     super.createExampleGroup();     /* Create a group for the slider */     sliderGroup = new Group(exampleGroup, SWT.NONE);     sliderGroup.setLayout(new GridLayout());     sliderGroup         .setLayoutData(new GridData(GridData.GRAB_HORIZONTAL             | GridData.HORIZONTAL_ALIGN_FILL             | GridData.VERTICAL_ALIGN_FILL));     sliderGroup.setText("Slider");     /* Create a group for the scale */     scaleGroup = new Group(exampleGroup, SWT.NONE);     scaleGroup.setLayout(new GridLayout());     scaleGroup         .setLayoutData(new GridData(GridData.GRAB_HORIZONTAL             | GridData.HORIZONTAL_ALIGN_FILL             | GridData.VERTICAL_ALIGN_FILL));     scaleGroup.setText("Scale");   }   /**    * Creates the "Example" widgets.    */   void createExampleWidgets() {     /* Compute the widget style */     int style = getDefaultStyle();     if (horizontalButton.getSelection())       style |= SWT.HORIZONTAL;     if (verticalButton.getSelection())       style |= SWT.VERTICAL;     if (borderButton.getSelection())       style |= SWT.BORDER;     /* Create the example widgets */     scale1 = new Scale(scaleGroup, style);     scale1.setMaximum(100);     scale1.setSelection(50);     scale1.setIncrement(5);     scale1.setPageIncrement(10);     slider1 = new Slider(sliderGroup, style);     slider1.setMaximum(100);     slider1.setSelection(50);     slider1.setIncrement(5);     slider1.setPageIncrement(10);     slider1.setThumb(10);   }   /**    * Create a group of widgets to control the increment attribute of the    * example widget.    */   void createIncrementGroup() {     /* Create the group */     Group incrementGroup = new Group(controlGroup, SWT.NONE);     incrementGroup.setLayout(new GridLayout());     incrementGroup.setText(ControlExample.getResourceString("Increment"));     incrementGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));     /* Create the scale widget */     incrementScale = new Scale(incrementGroup, SWT.NONE);     incrementScale.setMaximum(100);     incrementScale.setSelection(5);     incrementScale.setPageIncrement(10);     incrementScale.setIncrement(5);     GridData data = new GridData(GridData.FILL_HORIZONTAL);     data.widthHint = 100;     incrementScale.setLayoutData(data);     /* Add the listeners */     incrementScale.addSelectionListener(new SelectionAdapter() {       public void widgetSelected(SelectionEvent e) {         setWidgetIncrement();       }     });   }   /**    * Create a group of widgets to control the page increment attribute of the    * example widget.    */   void createPageIncrementGroup() {     /* Create the group */     Group pageIncrementGroup = new Group(controlGroup, SWT.NONE);     pageIncrementGroup.setLayout(new GridLayout());     pageIncrementGroup.setText(ControlExample         .getResourceString("Page_Increment"));     pageIncrementGroup         .setLayoutData(new GridData(GridData.FILL_HORIZONTAL));     /* Create the scale widget */     pageIncrementScale = new Scale(pageIncrementGroup, SWT.NONE);     pageIncrementScale.setMaximum(100);     pageIncrementScale.setSelection(10);     pageIncrementScale.setPageIncrement(10);     pageIncrementScale.setIncrement(5);     GridData data = new GridData(GridData.FILL_HORIZONTAL);     data.widthHint = 100;     pageIncrementScale.setLayoutData(data);     /* Add the listeners */     pageIncrementScale.addSelectionListener(new SelectionAdapter() {       public void widgetSelected(SelectionEvent event) {         setWidgetPageIncrement();       }     });   }   /**    * Create a group of widgets to control the thumb attribute of the example    * widget.    */   void createThumbGroup() {     /* Create the group */     Group thumbGroup = new Group(controlGroup, SWT.NONE);     thumbGroup.setLayout(new GridLayout());     thumbGroup.setText(ControlExample.getResourceString("Thumb"));     thumbGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));     /* Create the scale widget */     thumbScale = new Scale(thumbGroup, SWT.NONE);     thumbScale.setMaximum(100);     thumbScale.setSelection(10);     thumbScale.setPageIncrement(10);     thumbScale.setIncrement(5);     GridData data = new GridData(GridData.FILL_HORIZONTAL);     data.widthHint = 100;     thumbScale.setLayoutData(data);     /* Add the listeners */     thumbScale.addSelectionListener(new SelectionAdapter() {       public void widgetSelected(SelectionEvent event) {         setWidgetThumb();       }     });   }   /**    * Gets the "Example" widget children.    */   Control[] getExampleWidgets() {     return new Control[] { scale1, slider1 };   }   /**    * Gets the text for the tab folder item.    */   String getTabText() {     if (SWT.getPlatform().equals("carbon"))       return "S/S";     return "Slider/Scale";   }   /**    * Sets the state of the "Example" widgets.    */   void setExampleWidgetState() {     super.setExampleWidgetState();     setWidgetIncrement();     setWidgetPageIncrement();     setWidgetThumb();   }   /**    * Sets the increment of the "Example" widgets.    */   void setWidgetIncrement() {     slider1.setIncrement(incrementScale.getSelection());     scale1.setIncrement(incrementScale.getSelection());   }   /**    * Sets the minimim of the "Example" widgets.    */   void setWidgetMaximum() {     slider1.setMaximum(maximumScale.getSelection());     scale1.setMaximum(maximumScale.getSelection());   }   /**    * Sets the minimim of the "Example" widgets.    */   void setWidgetMinimum() {     slider1.setMinimum(minimumScale.getSelection());     scale1.setMinimum(minimumScale.getSelection());   }   /**    * Sets the page increment of the "Example" widgets.    */   void setWidgetPageIncrement() {     slider1.setPageIncrement(pageIncrementScale.getSelection());     scale1.setPageIncrement(pageIncrementScale.getSelection());   }   /**    * Sets the selection of the "Example" widgets.    */   void setWidgetSelection() {     slider1.setSelection(selectionScale.getSelection());     scale1.setSelection(selectionScale.getSelection());   }   /**    * Sets the thumb of the "Example" widgets.    */   void setWidgetThumb() {     slider1.setThumb(thumbScale.getSelection());   } } /*******************************************************************************  * Copyright (c) 2000, 2003 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  ******************************************************************************/ abstract class ScrollableTab extends Tab {   /* Style widgets added to the "Style" group */   Button singleButton, multiButton, horizontalButton, verticalButton,       borderButton;   /**    * Creates the Tab within a given instance of ControlExample.    */   ScrollableTab(ControlExample instance) {     super(instance);   }   /**    * Creates the "Style" group.    */   void createStyleGroup() {     super.createStyleGroup();     /* Create the extra widgets */     singleButton = new Button(styleGroup, SWT.RADIO);     singleButton.setText("SWT.SINGLE");     multiButton = new Button(styleGroup, SWT.RADIO);     multiButton.setText("SWT.MULTI");     horizontalButton = new Button(styleGroup, SWT.CHECK);     horizontalButton.setText("SWT.H_SCROLL");     horizontalButton.setSelection(true);     verticalButton = new Button(styleGroup, SWT.CHECK);     verticalButton.setText("SWT.V_SCROLL");     verticalButton.setSelection(true);     borderButton = new Button(styleGroup, SWT.CHECK);     borderButton.setText("SWT.BORDER");   }   /**    * Sets the state of the "Example" widgets.    */   void setExampleWidgetState() {     super.setExampleWidgetState();     Control[] controls = getExampleWidgets();     if (controls.length != 0) {       singleButton           .setSelection((controls[0].getStyle() & SWT.SINGLE) != 0);       multiButton.setSelection((controls[0].getStyle() & SWT.MULTI) != 0);       horizontalButton           .setSelection((controls[0].getStyle() & SWT.H_SCROLL) != 0);       verticalButton           .setSelection((controls[0].getStyle() & SWT.V_SCROLL) != 0);       borderButton           .setSelection((controls[0].getStyle() & SWT.BORDER) != 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  ******************************************************************************/ class SashTab extends Tab {   /* Example widgets and groups that contain them */   Sash hSash, vSash;   Composite sashComp;   Group sashGroup;   List list1, list2, list3;   Text text;   Button smoothButton;   static String[] ListData0 = {       ControlExample.getResourceString("ListData0_0"),       ControlExample.getResourceString("ListData0_1"),       ControlExample.getResourceString("ListData0_2"),       ControlExample.getResourceString("ListData0_3"),       ControlExample.getResourceString("ListData0_4"),       ControlExample.getResourceString("ListData0_5"),       ControlExample.getResourceString("ListData0_6"),       ControlExample.getResourceString("ListData0_7"),       ControlExample.getResourceString("ListData0_8") };   static String[] ListData1 = {       ControlExample.getResourceString("ListData1_0"),       ControlExample.getResourceString("ListData1_1"),       ControlExample.getResourceString("ListData1_2"),       ControlExample.getResourceString("ListData1_3"),       ControlExample.getResourceString("ListData1_4"),       ControlExample.getResourceString("ListData1_5"),       ControlExample.getResourceString("ListData1_6"),       ControlExample.getResourceString("ListData1_7"),       ControlExample.getResourceString("ListData1_8") };   /* Constants */   static final int SASH_WIDTH = 3;   static final int SASH_LIMIT = 20;   /**    * Creates the Tab within a given instance of ControlExample.    */   SashTab(ControlExample instance) {     super(instance);   }   /**    * Creates the "Example" group.    */   void createExampleGroup() {     super.createExampleGroup();     exampleGroup         .setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));     exampleGroup.setLayout(new FillLayout());     /* Create a group for the sash widgets */     sashGroup = new Group(exampleGroup, SWT.NONE);     FillLayout layout = new FillLayout();     layout.marginHeight = layout.marginWidth = 5;     sashGroup.setLayout(layout);     sashGroup.setText("Sash");   }   /**    * Creates the "Example" widgets.    */   void createExampleWidgets() {     /*      * Create the page. This example does not use layouts.      */     sashComp = new Composite(sashGroup, SWT.BORDER);     /* Create the list and text widgets */     list1 = new List(sashComp, SWT.V_SCROLL | SWT.H_SCROLL | SWT.BORDER);     list1.setItems(ListData0);     list2 = new List(sashComp, SWT.V_SCROLL | SWT.H_SCROLL | SWT.BORDER);     list2.setItems(ListData1);     text = new Text(sashComp, SWT.MULTI | SWT.BORDER);     text.setText(ControlExample.getResourceString("Multi_line"));     /* Create the sashes */     int style = getDefaultStyle();     if (smoothButton.getSelection())       style |= SWT.SMOOTH;     vSash = new Sash(sashComp, SWT.VERTICAL | style);     hSash = new Sash(sashComp, SWT.HORIZONTAL | style);     /* Add the listeners */     hSash.addSelectionListener(new SelectionAdapter() {       public void widgetSelected(SelectionEvent event) {         Rectangle rect = vSash.getParent().getClientArea();         event.y = Math.min(Math.max(event.y, SASH_LIMIT), rect.height             - SASH_LIMIT);         if (event.detail != SWT.DRAG) {           hSash               .setBounds(event.x, event.y, event.width,                   event.height);           layout();         }       }     });     vSash.addSelectionListener(new SelectionAdapter() {       public void widgetSelected(SelectionEvent event) {         Rectangle rect = vSash.getParent().getClientArea();         event.x = Math.min(Math.max(event.x, SASH_LIMIT), rect.width             - SASH_LIMIT);         if (event.detail != SWT.DRAG) {           vSash               .setBounds(event.x, event.y, event.width,                   event.height);           layout();         }       }     });     sashComp.addControlListener(new ControlAdapter() {       public void controlResized(ControlEvent event) {         resized();       }     });   }   /**    * Creates the "Size" group. The "Size" group contains controls that allow    * the user to change the size of the example widgets.    */   void createSizeGroup() {   }   /**    * Creates the "Style" group.    */   void createStyleGroup() {     super.createStyleGroup();     /* Create the extra widgets */     smoothButton = new Button(styleGroup, SWT.CHECK);     smoothButton.setText("SWT.SMOOTH");   }   void disposeExampleWidgets() {     sashComp.dispose();     sashComp = null;   }   /**    * Gets the "Example" widget children.    */   Control[] getExampleWidgets() {     return new Control[] { hSash, vSash };   }   /**    * Gets the text for the tab folder item.    */   String getTabText() {     return "Sash";   }   /**    * Layout the list and text widgets according to the new positions of the    * sashes..events.SelectionEvent    */   void layout() {     Rectangle clientArea = sashComp.getClientArea();     Rectangle hSashBounds = hSash.getBounds();     Rectangle vSashBounds = vSash.getBounds();     list1.setBounds(0, 0, vSashBounds.x, hSashBounds.y);     list2.setBounds(vSashBounds.x + vSashBounds.width, 0, clientArea.width         - (vSashBounds.x + vSashBounds.width), hSashBounds.y);     text.setBounds(0, hSashBounds.y + hSashBounds.height, clientArea.width,         clientArea.height - (hSashBounds.y + hSashBounds.height));     /**      * If the horizontal sash has been moved then the vertical sash is      * either too long or too short and its size must be adjusted.      */     vSashBounds.height = hSashBounds.y;     vSash.setBounds(vSashBounds);   }   /**    * Sets the size of the "Example" widgets.    */   void setExampleWidgetSize() {     sashGroup.layout(true);   }   /**    * Sets the state of the "Example" widgets.    */   void setExampleWidgetState() {     super.setExampleWidgetState();     smoothButton.setSelection((hSash.getStyle() & SWT.SMOOTH) != 0);   }   /**    * Handle the shell resized event.    */   void resized() {     /* Get the client area for the shell */     Rectangle clientArea = sashComp.getClientArea();     /*      * Make list 1 half the width and half the height of the tab leaving      * room for the sash. Place list 1 in the top left quadrant of the tab.      */     Rectangle list1Bounds = new Rectangle(0, 0,         (clientArea.width - SASH_WIDTH) / 2,         (clientArea.height - SASH_WIDTH) / 2);     list1.setBounds(list1Bounds);     /*      * Make list 2 half the width and half the height of the tab leaving      * room for the sash. Place list 2 in the top right quadrant of the tab.      */     list2.setBounds(list1Bounds.width + SASH_WIDTH, 0, clientArea.width         - (list1Bounds.width + SASH_WIDTH), list1Bounds.height);     /*      * Make the text area the full width and half the height of the tab      * leaving room for the sash. Place the text area in the bottom half of      * the tab.      */     text.setBounds(0, list1Bounds.height + SASH_WIDTH, clientArea.width,         clientArea.height - (list1Bounds.height + SASH_WIDTH));     /* Position the sashes */     vSash.setBounds(list1Bounds.width, 0, SASH_WIDTH, list1Bounds.height);     hSash.setBounds(0, list1Bounds.height, clientArea.width, SASH_WIDTH);   } } /*******************************************************************************  * Copyright (c) 2000, 2004 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  ******************************************************************************/ class SashFormTab extends Tab {   /* Example widgets and groups that contain them */   Group sashFormGroup;   SashForm form;   List list1, list2;   Text text;   /* Style widgets added to the "Style" group */   Button horizontalButton, verticalButton, smoothButton;   static String[] ListData0 = {       ControlExample.getResourceString("ListData0_0"), //$NON-NLS-1$       ControlExample.getResourceString("ListData0_1"), //$NON-NLS-1$       ControlExample.getResourceString("ListData0_2"), //$NON-NLS-1$       ControlExample.getResourceString("ListData0_3"), //$NON-NLS-1$       ControlExample.getResourceString("ListData0_4"), //$NON-NLS-1$       ControlExample.getResourceString("ListData0_5"), //$NON-NLS-1$       ControlExample.getResourceString("ListData0_6"), //$NON-NLS-1$       ControlExample.getResourceString("ListData0_7") }; //$NON-NLS-1$   static String[] ListData1 = {       ControlExample.getResourceString("ListData1_0"), //$NON-NLS-1$       ControlExample.getResourceString("ListData1_1"), //$NON-NLS-1$       ControlExample.getResourceString("ListData1_2"), //$NON-NLS-1$       ControlExample.getResourceString("ListData1_3"), //$NON-NLS-1$       ControlExample.getResourceString("ListData1_4"), //$NON-NLS-1$       ControlExample.getResourceString("ListData1_5"), //$NON-NLS-1$       ControlExample.getResourceString("ListData1_6"), //$NON-NLS-1$       ControlExample.getResourceString("ListData1_7") }; //$NON-NLS-1$   /**    * Creates the Tab within a given instance of ControlExample.    */   SashFormTab(ControlExample instance) {     super(instance);   }   void createExampleGroup() {     super.createExampleGroup();     /* Create a group for the sashform widget */     sashFormGroup = new Group(exampleGroup, SWT.NONE);     sashFormGroup.setLayout(new GridLayout());     sashFormGroup         .setLayoutData(new GridData(GridData.GRAB_HORIZONTAL             | GridData.HORIZONTAL_ALIGN_FILL             | GridData.VERTICAL_ALIGN_FILL));     sashFormGroup.setText("SashForm");   }   void createExampleWidgets() {     /* Compute the widget style */     int style = getDefaultStyle();     if (horizontalButton.getSelection())       style |= SWT.H_SCROLL;     if (verticalButton.getSelection())       style |= SWT.V_SCROLL;     if (smoothButton.getSelection())       style |= SWT.SMOOTH;     /* Create the example widgets */     form = new SashForm(sashFormGroup, style);     list1 = new List(form, SWT.V_SCROLL | SWT.H_SCROLL | SWT.BORDER);     list1.setItems(ListData0);     list2 = new List(form, SWT.V_SCROLL | SWT.H_SCROLL | SWT.BORDER);     list2.setItems(ListData1);     text = new Text(form, SWT.MULTI | SWT.BORDER);     text.setText(ControlExample.getResourceString("Multi_line")); //$NON-NLS-1$     form.setWeights(new int[] { 1, 1, 1 });   }   /**    * Creates the "Style" group.    */   void createStyleGroup() {     super.createStyleGroup();     /* Create the extra widgets */     horizontalButton = new Button(styleGroup, SWT.RADIO);     horizontalButton.setText("SWT.HORIZONTAL");     horizontalButton.setSelection(true);     verticalButton = new Button(styleGroup, SWT.RADIO);     verticalButton.setText("SWT.VERTICAL");     verticalButton.setSelection(false);     smoothButton = new Button(styleGroup, SWT.CHECK);     smoothButton.setText("SWT.SMOOTH");     smoothButton.setSelection(false);   }   /**    * Gets the "Example" widget children.    */   Control[] getExampleWidgets() {     return new Control[] { form };   }   /**    * Gets the text for the tab folder item.    */   String getTabText() {     return "SashForm"; //$NON-NLS-1$   }   /**    * Sets the state of the "Example" widgets.    */   void setExampleWidgetState() {     super.setExampleWidgetState();     horizontalButton.setSelection((form.getStyle() & SWT.H_SCROLL) != 0);     verticalButton.setSelection((form.getStyle() & SWT.V_SCROLL) != 0);     smoothButton.setSelection((form.getStyle() & SWT.SMOOTH) != 0);   } } /*******************************************************************************  * Copyright (c) 2000, 2004 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  ******************************************************************************/ abstract class RangeTab extends Tab {   /* Style widgets added to the "Style" group */   Button horizontalButton, verticalButton;   boolean orientationButtons = true;   /* Scale widgets added to the "Control" group */   Scale minimumScale, selectionScale, maximumScale;   /**    * Creates the Tab within a given instance of ControlExample.    */   RangeTab(ControlExample instance) {     super(instance);   }   /**    * Creates the "Control" widget children.    */   void createControlWidgets() {     /* Create controls specific to this example */     createMinimumGroup();     createMaximumGroup();     createSelectionGroup();   }   /**    * Create a group of widgets to control the maximum attribute of the example    * widget.    */   void createMaximumGroup() {     /* Create the group */     Group maximumGroup = new Group(controlGroup, SWT.NONE);     maximumGroup.setLayout(new GridLayout());     maximumGroup.setText(ControlExample.getResourceString("Maximum"));     maximumGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));     /* Create a scale widget */     maximumScale = new Scale(maximumGroup, SWT.NONE);     maximumScale.setMaximum(100);     maximumScale.setSelection(100);     maximumScale.setPageIncrement(10);     maximumScale.setIncrement(5);     GridData data = new GridData(GridData.FILL_HORIZONTAL);     data.widthHint = 100;     maximumScale.setLayoutData(data);     /* Add the listeners */     maximumScale.addSelectionListener(new SelectionAdapter() {       public void widgetSelected(SelectionEvent event) {         setWidgetMaximum();       }     });   }   /**    * Create a group of widgets to control the minimum attribute of the example    * widget.    */   void createMinimumGroup() {     /* Create the group */     Group minimumGroup = new Group(controlGroup, SWT.NONE);     minimumGroup.setLayout(new GridLayout());     minimumGroup.setText(ControlExample.getResourceString("Minimum"));     minimumGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));     /* Create a scale widget */     minimumScale = new Scale(minimumGroup, SWT.NONE);     minimumScale.setMaximum(100);     minimumScale.setSelection(0);     minimumScale.setPageIncrement(10);     minimumScale.setIncrement(5);     GridData data = new GridData(GridData.FILL_HORIZONTAL);     data.widthHint = 100;     minimumScale.setLayoutData(data);     /* Add the listeners */     minimumScale.addSelectionListener(new SelectionAdapter() {       public void widgetSelected(SelectionEvent event) {         setWidgetMinimum();       }     });   }   /**    * Create a group of widgets to control the selection attribute of the    * example widget.    */   void createSelectionGroup() {     /* Create the group */     Group selectionGroup = new Group(controlGroup, SWT.NONE);     selectionGroup.setLayout(new GridLayout());     GridData gridData = new GridData(GridData.FILL_HORIZONTAL);     selectionGroup.setLayoutData(gridData);     selectionGroup.setText(ControlExample.getResourceString("Selection"));     /* Create a scale widget */     selectionScale = new Scale(selectionGroup, SWT.NONE);     selectionScale.setMaximum(100);     selectionScale.setSelection(50);     selectionScale.setPageIncrement(10);     selectionScale.setIncrement(5);     GridData data = new GridData(GridData.FILL_HORIZONTAL);     data.widthHint = 100;     selectionScale.setLayoutData(data);     /* Add the listeners */     selectionScale.addSelectionListener(new SelectionAdapter() {       public void widgetSelected(SelectionEvent event) {         setWidgetSelection();       }     });   }   /**    * Creates the "Style" group.    */   void createStyleGroup() {     super.createStyleGroup();     /* Create the extra widgets */     if (orientationButtons) {       horizontalButton = new Button(styleGroup, SWT.RADIO);       horizontalButton.setText("SWT.HORIZONTAL");       verticalButton = new Button(styleGroup, SWT.RADIO);       verticalButton.setText("SWT.VERTICAL");     }     borderButton = new Button(styleGroup, SWT.CHECK);     borderButton.setText("SWT.BORDER");   }   /**    * Sets the state of the "Example" widgets.    */   void setExampleWidgetState() {     super.setExampleWidgetState();     setWidgetMinimum();     setWidgetMaximum();     setWidgetSelection();     Control[] controls = getExampleWidgets();     if (controls.length != 0) {       if (orientationButtons) {         horizontalButton             .setSelection((controls[0].getStyle() & SWT.HORIZONTAL) != 0);         verticalButton             .setSelection((controls[0].getStyle() & SWT.VERTICAL) != 0);       }       borderButton           .setSelection((controls[0].getStyle() & SWT.BORDER) != 0);     }   }   /**    * Sets the maximum of the "Example" widgets.    */   abstract void setWidgetMaximum();   /**    * Sets the minimim of the "Example" widgets.    */   abstract void setWidgetMinimum();   /**    * Sets the selection of the "Example" widgets.    */   abstract void setWidgetSelection(); } /*******************************************************************************  * Copyright (c) 2000, 2003 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  ******************************************************************************/ class ProgressBarTab extends RangeTab {   /* Example widgets and groups that contain them */   ProgressBar progressBar1;   Group progressBarGroup;   /* Style widgets added to the "Style" group */   Button smoothButton;   Button indeterminateButton;   /**    * Creates the Tab within a given instance of ControlExample.    */   ProgressBarTab(ControlExample instance) {     super(instance);   }   /**    * Creates the "Example" group.    */   void createExampleGroup() {     super.createExampleGroup();     /* Create a group for the progress bar */     progressBarGroup = new Group(exampleGroup, SWT.NONE);     progressBarGroup.setLayout(new GridLayout());     progressBarGroup         .setLayoutData(new GridData(GridData.GRAB_HORIZONTAL             | GridData.HORIZONTAL_ALIGN_FILL             | GridData.VERTICAL_ALIGN_FILL));     progressBarGroup.setText("ProgressBar");   }   /**    * Creates the "Example" widgets.    */   void createExampleWidgets() {     /* Compute the widget style */     int style = getDefaultStyle();     if (horizontalButton.getSelection())       style |= SWT.HORIZONTAL;     if (verticalButton.getSelection())       style |= SWT.VERTICAL;     if (smoothButton.getSelection())       style |= SWT.SMOOTH;     if (borderButton.getSelection())       style |= SWT.BORDER;     if (indeterminateButton.getSelection())       style |= SWT.INDETERMINATE;     /* Create the example widgets */     progressBar1 = new ProgressBar(progressBarGroup, style);     progressBar1.setMaximum(100);     progressBar1.setSelection(50);   }   /**    * Creates the "Style" group.    */   void createStyleGroup() {     super.createStyleGroup();     /* Create the extra widgets */     smoothButton = new Button(styleGroup, SWT.CHECK);     smoothButton.setText("SWT.SMOOTH");     indeterminateButton = new Button(styleGroup, SWT.CHECK);     indeterminateButton.setText("SWT.INDETERMINATE");   }   /**    * Gets the "Example" widget children.    */   Control[] getExampleWidgets() {     return new Control[] { progressBar1 };   }   /**    * Gets the text for the tab folder item.    */   String getTabText() {     return "ProgressBar";   }   /**    * Sets the state of the "Example" widgets.    */   void setExampleWidgetState() {     super.setExampleWidgetState();     if (indeterminateButton.getSelection()) {       selectionScale.setEnabled(false);       minimumScale.setEnabled(false);       maximumScale.setEnabled(false);     } else {       selectionScale.setEnabled(true);       minimumScale.setEnabled(true);       maximumScale.setEnabled(true);     }     maximumScale.setMaximum(progressBar1.getMaximum());     smoothButton.setSelection((progressBar1.getStyle() & SWT.SMOOTH) != 0);     indeterminateButton         .setSelection((progressBar1.getStyle() & SWT.INDETERMINATE) != 0);   }   /**    * Sets the maximum of the "Example" widgets.    */   void setWidgetMaximum() {     progressBar1.setMaximum(maximumScale.getSelection());     updateScales();   }   /**    * Sets the minimim of the "Example" widgets.    */   void setWidgetMinimum() {     progressBar1.setMinimum(minimumScale.getSelection());     updateScales();   }   /**    * Sets the selection of the "Example" widgets.    */   void setWidgetSelection() {     progressBar1.setSelection(selectionScale.getSelection());     updateScales();   }   /**    * Update the scale widgets to reflect the actual value set on the "Example"    * widget.    */   void updateScales() {     minimumScale.setSelection(progressBar1.getMinimum());     selectionScale.setSelection(progressBar1.getSelection());     maximumScale.setSelection(progressBar1.getMaximum());   } } /*******************************************************************************  * Copyright (c) 2000, 2004 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  ******************************************************************************/ class MenuTab extends Tab {   /* Widgets added to the "Menu Style", "MenuItem Style" and "Other" groups */   Button barButton, dropDownButton, popUpButton, noRadioGroupButton,       leftToRightButton, rightToLeftButton;   Button checkButton, cascadeButton, pushButton, radioButton,       separatorButton;   Button imagesButton, acceleratorsButton, mnemonicsButton, subMenuButton,       subSubMenuButton;   Button createButton, closeAllButton;   Group menuItemStyleGroup;   /* Variables used to track the open shells */   int shellCount = 0;   Shell[] shells = new Shell[4];   /**    * Creates the Tab within a given instance of ControlExample.    */   MenuTab(ControlExample instance) {     super(instance);   }   /**    * Close all the example shells.    */   void closeAllShells() {     for (int i = 0; i < shellCount; i++) {       if (shells[i] != null & !shells[i].isDisposed()) {         shells[i].dispose();       }     }     shellCount = 0;   }   /**    * Handle the Create button selection event.    *     * @param event    *            org.eclipse.swt.events.SelectionEvent    */   public void createButtonSelected(SelectionEvent event) {     /*      * Remember the example shells so they can be disposed by the user.      */     if (shellCount >= shells.length) {       Shell[] newShells = new Shell[shells.length + 4];       System.arraycopy(shells, 0, newShells, 0, shells.length);       shells = newShells;     }     int orientation = 0;     if (leftToRightButton.getSelection())       orientation |= SWT.LEFT_TO_RIGHT;     if (rightToLeftButton.getSelection())       orientation |= SWT.RIGHT_TO_LEFT;     int radioBehavior = 0;     if (noRadioGroupButton.getSelection())       radioBehavior |= SWT.NO_RADIO_GROUP;     /* Create the shell and menu(s) */     Shell shell = new Shell(SWT.SHELL_TRIM | orientation);     shells[shellCount] = shell;     if (barButton.getSelection()) {       /* Create menu bar. */       Menu menuBar = new Menu(shell, SWT.BAR | radioBehavior);       shell.setMenuBar(menuBar);       hookListeners(menuBar);       if (dropDownButton.getSelection() && cascadeButton.getSelection()) {         /* Create cascade button and drop-down menu in menu bar. */         MenuItem item = new MenuItem(menuBar, SWT.CASCADE);         item.setText(getMenuItemText("Cascade"));         if (imagesButton.getSelection())           item.setImage(instance.images[ControlExample.ciOpenFolder]);         hookListeners(item);         Menu dropDownMenu = new Menu(shell, SWT.DROP_DOWN             | radioBehavior);         item.setMenu(dropDownMenu);         hookListeners(dropDownMenu);         /* Create various menu items, depending on selections. */         createMenuItems(dropDownMenu, subMenuButton.getSelection(),             subSubMenuButton.getSelection());       }     }     if (popUpButton.getSelection()) {       /* Create pop-up menu. */       Menu popUpMenu = new Menu(shell, SWT.POP_UP | radioBehavior);       shell.setMenu(popUpMenu);       hookListeners(popUpMenu);       /* Create various menu items, depending on selections. */       createMenuItems(popUpMenu, subMenuButton.getSelection(),           subSubMenuButton.getSelection());     }     /* Set the size, title and open the shell. */     shell.setSize(300, 100);     shell.setText(ControlExample.getResourceString("Title") + shellCount);     shell.addPaintListener(new PaintListener() {       public void paintControl(PaintEvent e) {         e.gc.drawString(ControlExample             .getResourceString("PopupMenuHere"), 20, 20);       }     });     shell.open();     shellCount++;   }   /**    * Creates the "Control" group.    */   void createControlGroup() {     /*      * Create the "Control" group. This is the group on the right half of      * each example tab. For MenuTab, it consists of the Menu style group,      * the MenuItem style group and the 'other' group.      */     controlGroup = new Group(tabFolderPage, SWT.NONE);     controlGroup.setLayout(new GridLayout(2, true));     controlGroup.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL         | GridData.VERTICAL_ALIGN_FILL));     controlGroup.setText(ControlExample.getResourceString("Parameters"));     /* Create a group for the menu style controls */     styleGroup = new Group(controlGroup, SWT.NONE);     styleGroup.setLayout(new GridLayout());     styleGroup.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL         | GridData.VERTICAL_ALIGN_FILL));     styleGroup.setText(ControlExample.getResourceString("Menu_Styles"));     /* Create a group for the menu item style controls */     menuItemStyleGroup = new Group(controlGroup, SWT.NONE);     menuItemStyleGroup.setLayout(new GridLayout());     menuItemStyleGroup.setLayoutData(new GridData(         GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_FILL));     menuItemStyleGroup.setText(ControlExample         .getResourceString("MenuItem_Styles"));     /* Create a group for the 'other' controls */     otherGroup = new Group(controlGroup, SWT.NONE);     otherGroup.setLayout(new GridLayout());     otherGroup.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL         | GridData.VERTICAL_ALIGN_FILL));     otherGroup.setText(ControlExample.getResourceString("Other"));   }   /**    * Creates the "Control" widget children.    */   void createControlWidgets() {     /* Create the menu style buttons */     barButton = new Button(styleGroup, SWT.CHECK);     barButton.setText("SWT.BAR");     dropDownButton = new Button(styleGroup, SWT.CHECK);     dropDownButton.setText("SWT.DROP_DOWN");     popUpButton = new Button(styleGroup, SWT.CHECK);     popUpButton.setText("SWT.POP_UP");     noRadioGroupButton = new Button(styleGroup, SWT.CHECK);     noRadioGroupButton.setText("SWT.NO_RADIO_GROUP");     leftToRightButton = new Button(styleGroup, SWT.RADIO);     leftToRightButton.setText("SWT.LEFT_TO_RIGHT");     leftToRightButton.setSelection(true);     rightToLeftButton = new Button(styleGroup, SWT.RADIO);     rightToLeftButton.setText("SWT.RIGHT_TO_LEFT");     /* Create the menu item style buttons */     cascadeButton = new Button(menuItemStyleGroup, SWT.CHECK);     cascadeButton.setText("SWT.CASCADE");     checkButton = new Button(menuItemStyleGroup, SWT.CHECK);     checkButton.setText("SWT.CHECK");     pushButton = new Button(menuItemStyleGroup, SWT.CHECK);     pushButton.setText("SWT.PUSH");     radioButton = new Button(menuItemStyleGroup, SWT.CHECK);     radioButton.setText("SWT.RADIO");     separatorButton = new Button(menuItemStyleGroup, SWT.CHECK);     separatorButton.setText("SWT.SEPARATOR");     /* Create the 'other' buttons */     imagesButton = new Button(otherGroup, SWT.CHECK);     imagesButton.setText(ControlExample.getResourceString("Images"));     acceleratorsButton = new Button(otherGroup, SWT.CHECK);     acceleratorsButton.setText(ControlExample         .getResourceString("Accelerators"));     mnemonicsButton = new Button(otherGroup, SWT.CHECK);     mnemonicsButton.setText(ControlExample.getResourceString("Mnemonics"));     subMenuButton = new Button(otherGroup, SWT.CHECK);     subMenuButton.setText(ControlExample.getResourceString("SubMenu"));     subSubMenuButton = new Button(otherGroup, SWT.CHECK);     subSubMenuButton         .setText(ControlExample.getResourceString("SubSubMenu"));     /*      * Create the "create" and "closeAll" buttons (and a 'filler' label to      * place them)      */     new Label(controlGroup, SWT.NONE);     createButton = new Button(controlGroup, SWT.NONE);     createButton.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_END));     createButton.setText(ControlExample.getResourceString("Create_Shell"));     closeAllButton = new Button(controlGroup, SWT.NONE);     closeAllButton.setLayoutData(new GridData(         GridData.HORIZONTAL_ALIGN_BEGINNING));     closeAllButton.setText(ControlExample         .getResourceString("Close_All_Shells"));     /* Add the listeners */     createButton.addSelectionListener(new SelectionAdapter() {       public void widgetSelected(SelectionEvent e) {         createButtonSelected(e);       }     });     closeAllButton.addSelectionListener(new SelectionAdapter() {       public void widgetSelected(SelectionEvent e) {         closeAllShells();       }     });     subMenuButton.addSelectionListener(new SelectionAdapter() {       public void widgetSelected(SelectionEvent e) {         subSubMenuButton.setEnabled(subMenuButton.getSelection());       }     });     /* Set the default state */     barButton.setSelection(true);     dropDownButton.setSelection(true);     popUpButton.setSelection(true);     cascadeButton.setSelection(true);     checkButton.setSelection(true);     pushButton.setSelection(true);     radioButton.setSelection(true);     separatorButton.setSelection(true);     subSubMenuButton.setEnabled(subMenuButton.getSelection());   }   /* Create various menu items, depending on selections. */   void createMenuItems(Menu menu, boolean createSubMenu,       boolean createSubSubMenu) {     MenuItem item;     if (pushButton.getSelection()) {       item = new MenuItem(menu, SWT.PUSH);       item.setText(getMenuItemText("Push"));       if (acceleratorsButton.getSelection())         item.setAccelerator(SWT.MOD1 + SWT.MOD2 + 'P');       if (imagesButton.getSelection())         item.setImage(instance.images[ControlExample.ciClosedFolder]);       hookListeners(item);     }     if (separatorButton.getSelection()) {       new MenuItem(menu, SWT.SEPARATOR);     }     if (checkButton.getSelection()) {       item = new MenuItem(menu, SWT.CHECK);       item.setText(getMenuItemText("Check"));       if (acceleratorsButton.getSelection())         item.setAccelerator(SWT.MOD1 + SWT.MOD2 + 'C');       if (imagesButton.getSelection())         item.setImage(instance.images[ControlExample.ciOpenFolder]);       hookListeners(item);     }     if (radioButton.getSelection()) {       item = new MenuItem(menu, SWT.RADIO);       item.setText(getMenuItemText("1Radio"));       if (acceleratorsButton.getSelection())         item.setAccelerator(SWT.MOD1 + SWT.MOD2 + '1');       if (imagesButton.getSelection())         item.setImage(instance.images[ControlExample.ciTarget]);       item.setSelection(true);       hookListeners(item);       item = new MenuItem(menu, SWT.RADIO);       item.setText(getMenuItemText("2Radio"));       if (acceleratorsButton.getSelection())         item.setAccelerator(SWT.MOD1 + SWT.MOD2 + '2');       if (imagesButton.getSelection())         item.setImage(instance.images[ControlExample.ciTarget]);       hookListeners(item);     }     if (createSubMenu && cascadeButton.getSelection()) {       /* Create cascade button and drop-down menu for the sub-menu. */       item = new MenuItem(menu, SWT.CASCADE);       item.setText(getMenuItemText("Cascade"));       if (imagesButton.getSelection())         item.setImage(instance.images[ControlExample.ciOpenFolder]);       hookListeners(item);       Menu subMenu = new Menu(menu.getShell(), SWT.DROP_DOWN);       item.setMenu(subMenu);       hookListeners(subMenu);       createMenuItems(subMenu, createSubSubMenu, false);     }   }   String getMenuItemText(String item) {     boolean cascade = item.equals("Cascade");     boolean mnemonic = mnemonicsButton.getSelection();     boolean accelerator = acceleratorsButton.getSelection();     char acceleratorKey = item.charAt(0);     if (mnemonic && accelerator && !cascade) {       return ControlExample.getResourceString(item + "WithMnemonic")           + "\tCtrl+Shift+" + acceleratorKey;     }     if (accelerator && !cascade) {       return ControlExample.getResourceString(item) + "\tCtrl+Shift+"           + acceleratorKey;     }     if (mnemonic) {       return ControlExample.getResourceString(item + "WithMnemonic");     }     return ControlExample.getResourceString(item);   }   /**    * Gets the text for the tab folder item.    */   String getTabText() {     return "Menu";   } } /*******************************************************************************  * 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  ******************************************************************************/ class ListTab extends ScrollableTab {   /* Example widgets and groups that contain them */   List list1;   Group listGroup;   static String[] ListData1 = {       ControlExample.getResourceString("ListData1_0"),       ControlExample.getResourceString("ListData1_1"),       ControlExample.getResourceString("ListData1_2"),       ControlExample.getResourceString("ListData1_3"),       ControlExample.getResourceString("ListData1_4"),       ControlExample.getResourceString("ListData1_5"),       ControlExample.getResourceString("ListData1_6"),       ControlExample.getResourceString("ListData1_7"),       ControlExample.getResourceString("ListData1_8") };   /**    * Creates the Tab within a given instance of ControlExample.    */   ListTab(ControlExample instance) {     super(instance);   }   /**    * Creates the "Example" group.    */   void createExampleGroup() {     super.createExampleGroup();     /* Create a group for the list */     listGroup = new Group(exampleGroup, SWT.NONE);     listGroup.setLayout(new GridLayout());     listGroup         .setLayoutData(new GridData(GridData.GRAB_HORIZONTAL             | GridData.HORIZONTAL_ALIGN_FILL             | GridData.VERTICAL_ALIGN_FILL));     listGroup.setText("List");   }   /**    * Creates the "Example" widgets.    */   void createExampleWidgets() {     /* Compute the widget style */     int style = getDefaultStyle();     if (singleButton.getSelection())       style |= SWT.SINGLE;     if (multiButton.getSelection())       style |= SWT.MULTI;     if (horizontalButton.getSelection())       style |= SWT.H_SCROLL;     if (verticalButton.getSelection())       style |= SWT.V_SCROLL;     if (borderButton.getSelection())       style |= SWT.BORDER;     /* Create the example widgets */     list1 = new List(listGroup, style);     list1.setItems(ListData1);   }   /**    * Gets the "Example" widget children.    */   Control[] getExampleWidgets() {     return new Control[] { list1 };   }   /**    * Returns a list of set/get API method names (without the set/get prefix)    * that can be used to set/get values in the example control(s).    */   String[] getMethodNames() {     return new String[] { "Items", "Selection", "TopIndex" };   }   /**    * Gets the text for the tab folder item.    */   String getTabText() {     return "List";   } } /*******************************************************************************  * 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  ******************************************************************************/ class LinkTab extends Tab {   /* Example widgets and groups that contain them */   Link link1;   Group linkGroup;   /**    * Creates the Tab within a given instance of ControlExample.    */   LinkTab(ControlExample instance) {     super(instance);   }   /**    * Creates the "Example" group.    */   void createExampleGroup() {     super.createExampleGroup();     /* Create a group for the list */     linkGroup = new Group(exampleGroup, SWT.NONE);     linkGroup.setLayout(new GridLayout());     linkGroup         .setLayoutData(new GridData(GridData.GRAB_HORIZONTAL             | GridData.HORIZONTAL_ALIGN_FILL             | GridData.VERTICAL_ALIGN_FILL));     linkGroup.setText("Link");   }   /**    * Creates the "Example" widgets.    */   void createExampleWidgets() {     /* Compute the widget style */     int style = getDefaultStyle();     if (borderButton.getSelection())       style |= SWT.BORDER;     /* Create the example widgets */     try {       link1 = new Link(linkGroup, style);       link1.setText(ControlExample.getResourceString("LinkText"));     } catch (SWTError e) {       // temporary code for photon       Label label = new Label(linkGroup, SWT.CENTER | SWT.WRAP);       label.setText("Link widget not suported");     }   }   /**    * Creates the "Style" group.    */   void createStyleGroup() {     super.createStyleGroup();     /* Create the extra widgets */     borderButton = new Button(styleGroup, SWT.CHECK);     borderButton.setText("SWT.BORDER");   }   /**    * Gets the "Example" widget children.    */   Control[] getExampleWidgets() {     // temporary code for photon     if (link1 != null)       return new Control[] { link1 };     return new Control[] {};   }   /**    * Returns a list of set/get API method names (without the set/get prefix)    * that can be used to set/get values in the example control(s).    */   String[] getMethodNames() {     return new String[] { "Text" };   }   /**    * Gets the text for the tab folder item.    */   String getTabText() {     return "Link";   } } /*******************************************************************************  * 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  ******************************************************************************/ class LabelTab extends AlignableTab {   /* Example widgets and groups that contain them */   Label label1, label2, label3, label4, label5, label6;   Group textLabelGroup, imageLabelGroup;   /* Style widgets added to the "Style" group */   Button wrapButton, separatorButton, horizontalButton, verticalButton,       shadowInButton, shadowOutButton, shadowNoneButton;   /**    * Creates the Tab within a given instance of ControlExample.    */   LabelTab(ControlExample instance) {     super(instance);   }   /**    * Creates the "Example" group.    */   void createExampleGroup() {     super.createExampleGroup();     /* Create a group for the text labels */     textLabelGroup = new Group(exampleGroup, SWT.NONE);     GridLayout gridLayout = new GridLayout();     textLabelGroup.setLayout(gridLayout);     gridLayout.numColumns = 3;     textLabelGroup         .setLayoutData(new GridData(GridData.GRAB_HORIZONTAL             | GridData.HORIZONTAL_ALIGN_FILL             | GridData.VERTICAL_ALIGN_FILL));     textLabelGroup.setText(ControlExample.getResourceString("Text_Labels"));     /* Create a group for the image labels */     imageLabelGroup = new Group(exampleGroup, SWT.SHADOW_NONE);     gridLayout = new GridLayout();     imageLabelGroup.setLayout(gridLayout);     gridLayout.numColumns = 3;     imageLabelGroup         .setLayoutData(new GridData(GridData.GRAB_HORIZONTAL             | GridData.HORIZONTAL_ALIGN_FILL             | GridData.VERTICAL_ALIGN_FILL));     imageLabelGroup.setText(ControlExample         .getResourceString("Image_Labels"));   }   /**    * Creates the "Example" widgets.    */   void createExampleWidgets() {     /* Compute the widget style */     int style = getDefaultStyle();     if (wrapButton.getSelection())       style |= SWT.WRAP;     if (separatorButton.getSelection())       style |= SWT.SEPARATOR;     if (horizontalButton.getSelection())       style |= SWT.HORIZONTAL;     if (verticalButton.getSelection())       style |= SWT.VERTICAL;     if (shadowInButton.getSelection())       style |= SWT.SHADOW_IN;     if (shadowOutButton.getSelection())       style |= SWT.SHADOW_OUT;     if (shadowNoneButton.getSelection())       style |= SWT.SHADOW_NONE;     if (borderButton.getSelection())       style |= SWT.BORDER;     if (leftButton.getSelection())       style |= SWT.LEFT;     if (centerButton.getSelection())       style |= SWT.CENTER;     if (rightButton.getSelection())       style |= SWT.RIGHT;     /* Create the example widgets */     label1 = new Label(textLabelGroup, style);     label1.setText(ControlExample.getResourceString("One"));     label2 = new Label(textLabelGroup, style);     label2.setText(ControlExample.getResourceString("Two"));     label3 = new Label(textLabelGroup, style);     if (wrapButton.getSelection()) {       label3.setText(ControlExample.getResourceString("Wrap_Text"));     } else {       label3.setText(ControlExample.getResourceString("Three"));     }     label4 = new Label(imageLabelGroup, style);     label4.setImage(instance.images[ControlExample.ciClosedFolder]);     label5 = new Label(imageLabelGroup, style);     label5.setImage(instance.images[ControlExample.ciOpenFolder]);     label6 = new Label(imageLabelGroup, style);     label6.setImage(instance.images[ControlExample.ciTarget]);   }   /**    * Creates the "Style" group.    */   void createStyleGroup() {     super.createStyleGroup();     /* Create the extra widgets */     wrapButton = new Button(styleGroup, SWT.CHECK);     wrapButton.setText("SWT.WRAP");     separatorButton = new Button(styleGroup, SWT.CHECK);     separatorButton.setText("SWT.SEPARATOR");     horizontalButton = new Button(styleGroup, SWT.RADIO);     horizontalButton.setText("SWT.HORIZONTAL");     verticalButton = new Button(styleGroup, SWT.RADIO);     verticalButton.setText("SWT.VERTICAL");     Group styleSubGroup = new Group(styleGroup, SWT.NONE);     styleSubGroup.setLayout(new GridLayout());     shadowInButton = new Button(styleSubGroup, SWT.RADIO);     shadowInButton.setText("SWT.SHADOW_IN");     shadowOutButton = new Button(styleSubGroup, SWT.RADIO);     shadowOutButton.setText("SWT.SHADOW_OUT");     shadowNoneButton = new Button(styleSubGroup, SWT.RADIO);     shadowNoneButton.setText("SWT.SHADOW_NONE");     borderButton = new Button(styleGroup, SWT.CHECK);     borderButton.setText("SWT.BORDER");     /* Add the listeners */     SelectionListener selectionListener = new SelectionAdapter() {       public void widgetSelected(SelectionEvent event) {         if ((event.widget.getStyle() & SWT.RADIO) != 0) {           if (!((Button) event.widget).getSelection())             return;         }         recreateExampleWidgets();       }     };     shadowInButton.addSelectionListener(selectionListener);     shadowOutButton.addSelectionListener(selectionListener);     shadowNoneButton.addSelectionListener(selectionListener);   }   /**    * Gets the "Example" widget children.    */   Control[] getExampleWidgets() {     return new Control[] { label1, label2, label3, label4, label5, label6 };   }   /**    * Returns a list of set/get API method names (without the set/get prefix)    * that can be used to set/get values in the example control(s).    */   String[] getMethodNames() {     return new String[] { "Text" };   }   /**    * Gets the text for the tab folder item.    */   String getTabText() {     return "Label";   }   /**    * Sets the alignment of the "Example" widgets.    */   void setExampleWidgetAlignment() {     int alignment = 0;     if (leftButton.getSelection())       alignment = SWT.LEFT;     if (centerButton.getSelection())       alignment = SWT.CENTER;     if (rightButton.getSelection())       alignment = SWT.RIGHT;     label1.setAlignment(alignment);     label2.setAlignment(alignment);     label3.setAlignment(alignment);     label4.setAlignment(alignment);     label5.setAlignment(alignment);     label6.setAlignment(alignment);   }   /**    * Sets the state of the "Example" widgets.    */   void setExampleWidgetState() {     super.setExampleWidgetState();     boolean isSeparator = (label1.getStyle() & SWT.SEPARATOR) != 0;     wrapButton.setSelection(!isSeparator         && (label1.getStyle() & SWT.WRAP) != 0);     leftButton.setSelection(!isSeparator         && (label1.getStyle() & SWT.LEFT) != 0);     centerButton.setSelection(!isSeparator         && (label1.getStyle() & SWT.CENTER) != 0);     rightButton.setSelection(!isSeparator         && (label1.getStyle() & SWT.RIGHT) != 0);     shadowInButton.setSelection(isSeparator         && (label1.getStyle() & SWT.SHADOW_IN) != 0);     shadowOutButton.setSelection(isSeparator         && (label1.getStyle() & SWT.SHADOW_OUT) != 0);     shadowNoneButton.setSelection(isSeparator         && (label1.getStyle() & SWT.SHADOW_NONE) != 0);     horizontalButton.setSelection(isSeparator         && (label1.getStyle() & SWT.HORIZONTAL) != 0);     verticalButton.setSelection(isSeparator         && (label1.getStyle() & SWT.VERTICAL) != 0);     wrapButton.setEnabled(!isSeparator);     leftButton.setEnabled(!isSeparator);     centerButton.setEnabled(!isSeparator);     rightButton.setEnabled(!isSeparator);     shadowInButton.setEnabled(isSeparator);     shadowOutButton.setEnabled(isSeparator);     shadowNoneButton.setEnabled(isSeparator);     horizontalButton.setEnabled(isSeparator);     verticalButton.setEnabled(isSeparator);   } } /*******************************************************************************  * Copyright (c) 2000, 2003 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  ******************************************************************************/ class GroupTab extends Tab {   Button titleButton;   /* Example widgets and groups that contain them */   Group group1;   Group groupGroup;   /* Style widgets added to the "Style" group */   Button shadowEtchedInButton, shadowEtchedOutButton, shadowInButton,       shadowOutButton, shadowNoneButton;   /**    * Creates the Tab within a given instance of ControlExample.    */   GroupTab(ControlExample instance) {     super(instance);   }   /**    * Creates the "Other" group.    */   void createOtherGroup() {     super.createOtherGroup();     /* Create display controls specific to this example */     titleButton = new Button(otherGroup, SWT.CHECK);     titleButton.setText(ControlExample.getResourceString("Title_Text"));     /* Add the listeners */     titleButton.addSelectionListener(new SelectionAdapter() {       public void widgetSelected(SelectionEvent event) {         setTitleText();       }     });   }   /**    * Creates the "Example" group.    */   void createExampleGroup() {     super.createExampleGroup();     /* Create a group for the Group */     groupGroup = new Group(exampleGroup, SWT.NONE);     groupGroup.setLayout(new GridLayout());     groupGroup         .setLayoutData(new GridData(GridData.GRAB_HORIZONTAL             | GridData.HORIZONTAL_ALIGN_FILL             | GridData.VERTICAL_ALIGN_FILL));     groupGroup.setText("Group");   }   /**    * Creates the "Example" widgets.    */   void createExampleWidgets() {     /* Compute the widget style */     int style = getDefaultStyle();     if (shadowEtchedInButton.getSelection())       style |= SWT.SHADOW_ETCHED_IN;     if (shadowEtchedOutButton.getSelection())       style |= SWT.SHADOW_ETCHED_OUT;     if (shadowInButton.getSelection())       style |= SWT.SHADOW_IN;     if (shadowOutButton.getSelection())       style |= SWT.SHADOW_OUT;     if (shadowNoneButton.getSelection())       style |= SWT.SHADOW_NONE;     if (borderButton.getSelection())       style |= SWT.BORDER;     /* Create the example widgets */     group1 = new Group(groupGroup, style);   }   /**    * Creates the "Style" group.    */   void createStyleGroup() {     super.createStyleGroup();     /* Create the extra widgets */     shadowEtchedInButton = new Button(styleGroup, SWT.RADIO);     shadowEtchedInButton.setText("SWT.SHADOW_ETCHED_IN");     shadowEtchedInButton.setSelection(true);     shadowEtchedOutButton = new Button(styleGroup, SWT.RADIO);     shadowEtchedOutButton.setText("SWT.SHADOW_ETCHED_OUT");     shadowInButton = new Button(styleGroup, SWT.RADIO);     shadowInButton.setText("SWT.SHADOW_IN");     shadowOutButton = new Button(styleGroup, SWT.RADIO);     shadowOutButton.setText("SWT.SHADOW_OUT");     shadowNoneButton = new Button(styleGroup, SWT.RADIO);     shadowNoneButton.setText("SWT.SHADOW_NONE");     borderButton = new Button(styleGroup, SWT.CHECK);     borderButton.setText("SWT.BORDER");     /* Add the listeners */     SelectionListener selectionListener = new SelectionAdapter() {       public void widgetSelected(SelectionEvent event) {         if (!((Button) event.widget).getSelection())           return;         recreateExampleWidgets();       }     };     shadowEtchedInButton.addSelectionListener(selectionListener);     shadowEtchedOutButton.addSelectionListener(selectionListener);     shadowInButton.addSelectionListener(selectionListener);     shadowOutButton.addSelectionListener(selectionListener);     shadowNoneButton.addSelectionListener(selectionListener);   }   /**    * Gets the "Example" widget children.    */   Control[] getExampleWidgets() {     return new Control[] { group1 };   }   /**    * Gets the text for the tab folder item.    */   String getTabText() {     return "Group";   }   /**    * Sets the title text of the "Example" widgets.    */   void setTitleText() {     if (titleButton.getSelection()) {       group1.setText(ControlExample.getResourceString("Title_Text"));     } else {       group1.setText("");     }     setExampleWidgetSize();   }   /**    * Sets the state of the "Example" widgets.    */   void setExampleWidgetState() {     super.setExampleWidgetState();     shadowEtchedInButton         .setSelection((group1.getStyle() & SWT.SHADOW_ETCHED_IN) != 0);     shadowEtchedOutButton         .setSelection((group1.getStyle() & SWT.SHADOW_ETCHED_OUT) != 0);     shadowInButton.setSelection((group1.getStyle() & SWT.SHADOW_IN) != 0);     shadowOutButton.setSelection((group1.getStyle() & SWT.SHADOW_OUT) != 0);     shadowNoneButton         .setSelection((group1.getStyle() & SWT.SHADOW_NONE) != 0);     borderButton.setSelection((group1.getStyle() & SWT.BORDER) != 0);     setTitleText();   } } /*******************************************************************************  * 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  ******************************************************************************/ class DialogTab extends Tab {   /* Example widgets and groups that contain them */   Group dialogStyleGroup, resultGroup;   Text textWidget;   /* Style widgets added to the "Style" group */   Combo dialogCombo;   Button createButton;   Button okButton, cancelButton;   Button yesButton, noButton;   Button retryButton;   Button abortButton, ignoreButton;   Button iconErrorButton, iconInformationButton, iconQuestionButton;   Button iconWarningButton, iconWorkingButton;   Button modelessButton, primaryModalButton, applicationModalButton,       systemModalButton;   Button saveButton, openButton, multiButton;   static String[] FilterExtensions = { "*.txt", "*.bat", "*.doc", "*" };   static String[] FilterNames = {       ControlExample.getResourceString("FilterName_0"),       ControlExample.getResourceString("FilterName_1"),       ControlExample.getResourceString("FilterName_2"),       ControlExample.getResourceString("FilterName_3") };   /**    * Creates the Tab within a given instance of ControlExample.    */   DialogTab(ControlExample instance) {     super(instance);   }   /**    * Handle a button style selection event.    *     * @param event    *            the selection event    */   void buttonStyleSelected(SelectionEvent event) {     /*      * Only certain combinations of button styles are supported for various      * dialogs. Make sure the control widget reflects only valid      * combinations.      */     boolean ok = okButton.getSelection();     boolean cancel = cancelButton.getSelection();     boolean yes = yesButton.getSelection();     boolean no = noButton.getSelection();     boolean abort = abortButton.getSelection();     boolean retry = retryButton.getSelection();     boolean ignore = ignoreButton.getSelection();     okButton.setEnabled(!(yes || no || retry || abort || ignore));     cancelButton.setEnabled(!(abort || ignore || (yes != no)));     yesButton.setEnabled(!(ok || retry || abort || ignore || (cancel         && !yes && !no)));     noButton         .setEnabled(!(ok || retry || abort || ignore || (cancel && !yes && !no)));     retryButton.setEnabled(!(ok || yes || no));     abortButton.setEnabled(!(ok || cancel || yes || no));     ignoreButton.setEnabled(!(ok || cancel || yes || no));     createButton         .setEnabled(!(ok || cancel || yes || no || retry || abort || ignore)             || ok             || (ok && cancel)             || (yes && no)             || (yes && no && cancel)             || (retry && cancel)             || (abort && retry && ignore));   }   /**    * Handle the create button selection event.    *     * @param event    *            org.eclipse.swt.events.SelectionEvent    */   void createButtonSelected(SelectionEvent event) {     /* Compute the appropriate dialog style */     int style = getDefaultStyle();     if (okButton.getEnabled() && okButton.getSelection())       style |= SWT.OK;     if (cancelButton.getEnabled() && cancelButton.getSelection())       style |= SWT.CANCEL;     if (yesButton.getEnabled() && yesButton.getSelection())       style |= SWT.YES;     if (noButton.getEnabled() && noButton.getSelection())       style |= SWT.NO;     if (retryButton.getEnabled() && retryButton.getSelection())       style |= SWT.RETRY;     if (abortButton.getEnabled() && abortButton.getSelection())       style |= SWT.ABORT;     if (ignoreButton.getEnabled() && ignoreButton.getSelection())       style |= SWT.IGNORE;     if (iconErrorButton.getEnabled() && iconErrorButton.getSelection())       style |= SWT.ICON_ERROR;     if (iconInformationButton.getEnabled()         && iconInformationButton.getSelection())       style |= SWT.ICON_INFORMATION;     if (iconQuestionButton.getEnabled()         && iconQuestionButton.getSelection())       style |= SWT.ICON_QUESTION;     if (iconWarningButton.getEnabled() && iconWarningButton.getSelection())       style |= SWT.ICON_WARNING;     if (iconWorkingButton.getEnabled() && iconWorkingButton.getSelection())       style |= SWT.ICON_WORKING;     if (primaryModalButton.getEnabled()         && primaryModalButton.getSelection())       style |= SWT.PRIMARY_MODAL;     if (applicationModalButton.getEnabled()         && applicationModalButton.getSelection())       style |= SWT.APPLICATION_MODAL;     if (systemModalButton.getEnabled() && systemModalButton.getSelection())       style |= SWT.SYSTEM_MODAL;     if (saveButton.getEnabled() && saveButton.getSelection())       style |= SWT.SAVE;     if (openButton.getEnabled() && openButton.getSelection())       style |= SWT.OPEN;     if (multiButton.getEnabled() && multiButton.getSelection())       style |= SWT.MULTI;     /* Open the appropriate dialog type */     String name = dialogCombo.getText();     Shell shell = tabFolderPage.getShell();     if (name.equals(ControlExample.getResourceString("ColorDialog"))) {       ColorDialog dialog = new ColorDialog(shell, style);       dialog.setRGB(new RGB(100, 100, 100));       dialog.setText(ControlExample.getResourceString("Title"));       RGB result = dialog.open();       textWidget.append(ControlExample.getResourceString("ColorDialog")           + Text.DELIMITER);       textWidget.append(ControlExample.getResourceString("Result",           new String[] { "" + result })           + Text.DELIMITER + Text.DELIMITER);       return;     }     if (name.equals(ControlExample.getResourceString("DirectoryDialog"))) {       DirectoryDialog dialog = new DirectoryDialog(shell, style);       dialog.setMessage(ControlExample           .getResourceString("Example_string"));       dialog.setText(ControlExample.getResourceString("Title"));       String result = dialog.open();       textWidget.append(ControlExample           .getResourceString("DirectoryDialog")           + Text.DELIMITER);       textWidget.append(ControlExample.getResourceString("Result",           new String[] { "" + result })           + Text.DELIMITER + Text.DELIMITER);       return;     }     if (name.equals(ControlExample.getResourceString("FileDialog"))) {       FileDialog dialog = new FileDialog(shell, style);       dialog.setFileName(ControlExample.getResourceString("readme_txt"));       dialog.setFilterNames(FilterNames);       dialog.setFilterExtensions(FilterExtensions);       dialog.setText(ControlExample.getResourceString("Title"));       String result = dialog.open();       textWidget.append(ControlExample.getResourceString("FileDialog")           + Text.DELIMITER);       textWidget.append(ControlExample.getResourceString("Result",           new String[] { "" + result })           + Text.DELIMITER + Text.DELIMITER);       return;     }     if (name.equals(ControlExample.getResourceString("FontDialog"))) {       FontDialog dialog = new FontDialog(shell, style);       dialog.setText(ControlExample.getResourceString("Title"));       FontData result = dialog.open();       textWidget.append(ControlExample.getResourceString("FontDialog")           + Text.DELIMITER);       textWidget.append(ControlExample.getResourceString("Result",           new String[] { "" + result })           + Text.DELIMITER + Text.DELIMITER);       return;     }     if (name.equals(ControlExample.getResourceString("PrintDialog"))) {       PrintDialog dialog = new PrintDialog(shell, style);       dialog.setText(ControlExample.getResourceString("Title"));       PrinterData result = dialog.open();       textWidget.append(ControlExample.getResourceString("PrintDialog")           + Text.DELIMITER);       textWidget.append(ControlExample.getResourceString("Result",           new String[] { "" + result })           + Text.DELIMITER + Text.DELIMITER);       return;     }     if (name.equals(ControlExample.getResourceString("MessageBox"))) {       MessageBox dialog = new MessageBox(shell, style);       dialog.setMessage(ControlExample           .getResourceString("Example_string"));       dialog.setText(ControlExample.getResourceString("Title"));       int result = dialog.open();       textWidget.append(ControlExample.getResourceString("MessageBox")           + Text.DELIMITER);       /*        * The resulting integer depends on the original dialog style.        * Decode the result and display it.        */       switch (result) {       case SWT.OK:         textWidget.append(ControlExample.getResourceString("Result",             new String[] { "SWT.OK" }));         break;       case SWT.YES:         textWidget.append(ControlExample.getResourceString("Result",             new String[] { "SWT.YES" }));         break;       case SWT.NO:         textWidget.append(ControlExample.getResourceString("Result",             new String[] { "SWT.NO" }));         break;       case SWT.CANCEL:         textWidget.append(ControlExample.getResourceString("Result",             new String[] { "SWT.CANCEL" }));         break;       case SWT.ABORT:         textWidget.append(ControlExample.getResourceString("Result",             new String[] { "SWT.ABORT" }));         break;       case SWT.RETRY:         textWidget.append(ControlExample.getResourceString("Result",             new String[] { "SWT.RETRY" }));         break;       case SWT.IGNORE:         textWidget.append(ControlExample.getResourceString("Result",             new String[] { "SWT.IGNORE" }));         break;       default:         textWidget.append(ControlExample.getResourceString("Result",             new String[] { "" + result }));         break;       }       textWidget.append(Text.DELIMITER + Text.DELIMITER);     }   }   /**    * Creates the "Control" group.    */   void createControlGroup() {     /*      * Create the "Control" group. This is the group on the right half of      * each example tab. It consists of the style group, the display group      * and the size group.      */     controlGroup = new Group(tabFolderPage, SWT.NONE);     GridLayout gridLayout = new GridLayout();     controlGroup.setLayout(gridLayout);     gridLayout.numColumns = 2;     gridLayout.makeColumnsEqualWidth = true;     controlGroup.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL         | GridData.VERTICAL_ALIGN_FILL));     controlGroup.setText(ControlExample.getResourceString("Parameters"));     /*      * Create a group to hold the dialog style combo box and create dialog      * button.      */     dialogStyleGroup = new Group(controlGroup, SWT.NONE);     dialogStyleGroup.setLayout(new GridLayout());     GridData gridData = new GridData(GridData.HORIZONTAL_ALIGN_CENTER);     gridData.horizontalSpan = 2;     dialogStyleGroup.setLayoutData(gridData);     dialogStyleGroup.setText(ControlExample         .getResourceString("Dialog_Type"));   }   /**    * Creates the "Control" widget children.    */   void createControlWidgets() {     /* Create the combo */     String[] strings = { ControlExample.getResourceString("ColorDialog"),         ControlExample.getResourceString("DirectoryDialog"),         ControlExample.getResourceString("FileDialog"),         ControlExample.getResourceString("FontDialog"),         ControlExample.getResourceString("PrintDialog"),         ControlExample.getResourceString("MessageBox"), };     dialogCombo = new Combo(dialogStyleGroup, SWT.READ_ONLY);     dialogCombo.setItems(strings);     dialogCombo.setText(strings[0]);     dialogCombo.setVisibleItemCount(strings.length);     /* Create the create dialog button */     createButton = new Button(dialogStyleGroup, SWT.NONE);     createButton.setText(ControlExample.getResourceString("Create_Dialog"));     createButton.setLayoutData(new GridData(         GridData.HORIZONTAL_ALIGN_CENTER));     /* Create a group for the various dialog button style controls */     Group buttonStyleGroup = new Group(controlGroup, SWT.NONE);     buttonStyleGroup.setLayout(new GridLayout());     buttonStyleGroup.setLayoutData(new GridData(         GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_FILL));     buttonStyleGroup.setText(ControlExample         .getResourceString("Button_Styles"));     /* Create the button style buttons */     okButton = new Button(buttonStyleGroup, SWT.CHECK);     okButton.setText("SWT.OK");     cancelButton = new Button(buttonStyleGroup, SWT.CHECK);     cancelButton.setText("SWT.CANCEL");     yesButton = new Button(buttonStyleGroup, SWT.CHECK);     yesButton.setText("SWT.YES");     noButton = new Button(buttonStyleGroup, SWT.CHECK);     noButton.setText("SWT.NO");     retryButton = new Button(buttonStyleGroup, SWT.CHECK);     retryButton.setText("SWT.RETRY");     abortButton = new Button(buttonStyleGroup, SWT.CHECK);     abortButton.setText("SWT.ABORT");     ignoreButton = new Button(buttonStyleGroup, SWT.CHECK);     ignoreButton.setText("SWT.IGNORE");     /* Create a group for the icon style controls */     Group iconStyleGroup = new Group(controlGroup, SWT.NONE);     iconStyleGroup.setLayout(new GridLayout());     iconStyleGroup.setLayoutData(new GridData(         GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_FILL));     iconStyleGroup.setText(ControlExample.getResourceString("Icon_Styles"));     /* Create the icon style buttons */     iconErrorButton = new Button(iconStyleGroup, SWT.RADIO);     iconErrorButton.setText("SWT.ICON_ERROR");     iconInformationButton = new Button(iconStyleGroup, SWT.RADIO);     iconInformationButton.setText("SWT.ICON_INFORMATION");     iconQuestionButton = new Button(iconStyleGroup, SWT.RADIO);     iconQuestionButton.setText("SWT.ICON_QUESTION");     iconWarningButton = new Button(iconStyleGroup, SWT.RADIO);     iconWarningButton.setText("SWT.ICON_WARNING");     iconWorkingButton = new Button(iconStyleGroup, SWT.RADIO);     iconWorkingButton.setText("SWT.ICON_WORKING");     /* Create a group for the modal style controls */     Group modalStyleGroup = new Group(controlGroup, SWT.NONE);     modalStyleGroup.setLayout(new GridLayout());     modalStyleGroup.setLayoutData(new GridData(         GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_FILL));     modalStyleGroup.setText(ControlExample         .getResourceString("Modal_Styles"));     /* Create the modal style buttons */     modelessButton = new Button(modalStyleGroup, SWT.RADIO);     modelessButton.setText("SWT.MODELESS");     primaryModalButton = new Button(modalStyleGroup, SWT.RADIO);     primaryModalButton.setText("SWT.PRIMARY_MODAL");     applicationModalButton = new Button(modalStyleGroup, SWT.RADIO);     applicationModalButton.setText("SWT.APPLICATION_MODAL");     systemModalButton = new Button(modalStyleGroup, SWT.RADIO);     systemModalButton.setText("SWT.SYSTEM_MODAL");     /* Create a group for the file dialog style controls */     Group fileDialogStyleGroup = new Group(controlGroup, SWT.NONE);     fileDialogStyleGroup.setLayout(new GridLayout());     fileDialogStyleGroup.setLayoutData(new GridData(         GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_FILL));     fileDialogStyleGroup.setText(ControlExample         .getResourceString("File_Dialog_Styles"));     /* Create the file dialog style buttons */     openButton = new Button(fileDialogStyleGroup, SWT.RADIO);     openButton.setText("SWT.OPEN");     saveButton = new Button(fileDialogStyleGroup, SWT.RADIO);     saveButton.setText("SWT.SAVE");     multiButton = new Button(fileDialogStyleGroup, SWT.CHECK);     multiButton.setText("SWT.MULTI");     /* Create the orientation group */     if (RTL_SUPPORT_ENABLE) {       createOrientationGroup();     }     /* Add the listeners */     dialogCombo.addSelectionListener(new SelectionAdapter() {       public void widgetSelected(SelectionEvent event) {         dialogSelected(event);       }     });     createButton.addSelectionListener(new SelectionAdapter() {       public void widgetSelected(SelectionEvent event) {         createButtonSelected(event);       }     });     SelectionListener buttonStyleListener = new SelectionAdapter() {       public void widgetSelected(SelectionEvent event) {         buttonStyleSelected(event);       }     };     okButton.addSelectionListener(buttonStyleListener);     cancelButton.addSelectionListener(buttonStyleListener);     yesButton.addSelectionListener(buttonStyleListener);     noButton.addSelectionListener(buttonStyleListener);     retryButton.addSelectionListener(buttonStyleListener);     abortButton.addSelectionListener(buttonStyleListener);     ignoreButton.addSelectionListener(buttonStyleListener);     /* Set default values for style buttons */     okButton.setEnabled(false);     cancelButton.setEnabled(false);     yesButton.setEnabled(false);     noButton.setEnabled(false);     retryButton.setEnabled(false);     abortButton.setEnabled(false);     ignoreButton.setEnabled(false);     iconErrorButton.setEnabled(false);     iconInformationButton.setEnabled(false);     iconQuestionButton.setEnabled(false);     iconWarningButton.setEnabled(false);     iconWorkingButton.setEnabled(false);     saveButton.setEnabled(false);     openButton.setEnabled(false);     openButton.setSelection(true);     multiButton.setEnabled(false);     iconInformationButton.setSelection(true);     modelessButton.setSelection(true);   }   /**    * Creates the "Example" group.    */   void createExampleGroup() {     super.createExampleGroup();     exampleGroup         .setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));     /*      * Create a group for the text widget to display the results returned by      * the example dialogs.      */     resultGroup = new Group(exampleGroup, SWT.NONE);     resultGroup.setLayout(new GridLayout());     resultGroup.setLayoutData(new GridData(GridData.FILL_BOTH));     resultGroup.setText(ControlExample.getResourceString("Dialog_Result"));   }   /**    * Creates the "Example" widgets.    */   void createExampleWidgets() {     /*      * Create a multi lined, scrolled text widget for output.      */     textWidget = new Text(resultGroup, SWT.H_SCROLL | SWT.V_SCROLL         | SWT.BORDER);     GridData gridData = new GridData(GridData.FILL_BOTH);     textWidget.setLayoutData(gridData);   }   /**    * The platform dialogs do not have SWT listeners.    */   void createListenersGroup() {   }   /**    * Handle a dialog type combo selection event.    *     * @param event    *            the selection event    */   void dialogSelected(SelectionEvent event) {     /* Enable/Disable the buttons */     String name = dialogCombo.getText();     boolean isMessageBox = name.equals(ControlExample         .getResourceString("MessageBox"));     boolean isFileDialog = name.equals(ControlExample         .getResourceString("FileDialog"));     okButton.setEnabled(isMessageBox);     cancelButton.setEnabled(isMessageBox);     yesButton.setEnabled(isMessageBox);     noButton.setEnabled(isMessageBox);     retryButton.setEnabled(isMessageBox);     abortButton.setEnabled(isMessageBox);     ignoreButton.setEnabled(isMessageBox);     iconErrorButton.setEnabled(isMessageBox);     iconInformationButton.setEnabled(isMessageBox);     iconQuestionButton.setEnabled(isMessageBox);     iconWarningButton.setEnabled(isMessageBox);     iconWorkingButton.setEnabled(isMessageBox);     saveButton.setEnabled(isFileDialog);     openButton.setEnabled(isFileDialog);     multiButton.setEnabled(isFileDialog);     /* Unselect the buttons */     if (!isMessageBox) {       okButton.setSelection(false);       cancelButton.setSelection(false);       yesButton.setSelection(false);       noButton.setSelection(false);       retryButton.setSelection(false);       abortButton.setSelection(false);       ignoreButton.setSelection(false);     }   }   /**    * Gets the "Example" widget children.    */   Control[] getExampleWidgets() {     return new Control[0];   }   /**    * Gets the text for the tab folder item.    */   String getTabText() {     return "Dialog";   }   /**    * Recreates the "Example" widgets.    */   void recreateExampleWidgets() {     if (textWidget == null) {       super.recreateExampleWidgets();     }   } } /*******************************************************************************  * Copyright (c) 2000, 2004 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  ******************************************************************************/ class CTabFolderTab extends Tab {   int lastSelectedTab = 0;   /* Example widgets and groups that contain them */   CTabFolder tabFolder1;   Group tabFolderGroup, itemGroup;   /* Style widgets added to the "Style" group */   Button topButton, bottomButton, flatButton, closeButton;   static String[] CTabItems1 = {       ControlExample.getResourceString("CTabItem1_0"),       ControlExample.getResourceString("CTabItem1_1"),       ControlExample.getResourceString("CTabItem1_2") };   /* Controls and resources added to the "Fonts" group */   Button foregroundSelectionButton, backgroundSelectionButton,       itemFontButton;   Image foregroundSelectionImage, backgroundSelectionImage;   Color foregroundSelectionColor, backgroundSelectionColor;   Font itemFont;   /* Other widgets added to the "Other" group */   Button simpleTabButton, singleTabButton, imageButton, showMinButton,       showMaxButton, unselectedCloseButton, unselectedImageButton;   /**    * Creates the Tab within a given instance of ControlExample.    */   CTabFolderTab(ControlExample instance) {     super(instance);   }   /**    * Creates the "Fonts" group.    */   void createColorGroup() {     /* 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);     new Label(colorGroup, SWT.NONE).setText(ControlExample         .getResourceString("Selection_Foreground_Color"));     foregroundSelectionButton = new Button(colorGroup, SWT.PUSH);     new Label(colorGroup, SWT.NONE).setText(ControlExample         .getResourceString("Selection_Background_Color"));     backgroundSelectionButton = 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, 2, 1));     itemFontButton = new Button(colorGroup, SWT.PUSH);     itemFontButton.setText(ControlExample.getResourceString("Item_Font"));     itemFontButton.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false,         false, 2, 1));     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);     foregroundSelectionImage = new Image(display, imageSize, imageSize);     backgroundSelectionImage = 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);         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);         setExampleWidgetBackground();         if (oldColor != null)           oldColor.dispose();       }     });     foregroundSelectionButton.setImage(foregroundSelectionImage); // sets     // the     // size     // of     // the     // button     foregroundSelectionButton.addSelectionListener(new SelectionAdapter() {       public void widgetSelected(SelectionEvent event) {         Color oldColor = foregroundSelectionColor;         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 = foregroundSelectionColor; // save old foreground         // color to dispose when         // done         foregroundSelectionColor = new Color(event.display, rgb);         setExampleWidgetForeground();         if (oldColor != null)           oldColor.dispose();       }     });     backgroundSelectionButton.setImage(backgroundSelectionImage); // sets     // the     // size     // of     // the     // button     backgroundSelectionButton.addSelectionListener(new SelectionAdapter() {       public void widgetSelected(SelectionEvent event) {         Color oldColor = backgroundSelectionColor;         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 = backgroundSelectionColor; // save old background         // color to dispose when         // done         backgroundSelectionColor = new Color(event.display, rgb);         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);         setExampleWidgetFont();         setExampleWidgetSize();         if (oldFont != null)           oldFont.dispose();       }     });     /* Add listeners to set the colors and font */     itemFontButton.addSelectionListener(new SelectionAdapter() {       public void widgetSelected(SelectionEvent event) {         Font oldFont = itemFont;         if (oldFont == null)           oldFont = tabFolder1.getItem(0).getFont();         fontDialog.setFontList(oldFont.getFontData());         FontData fontData = fontDialog.open();         if (fontData == null)           return;         oldFont = itemFont;         itemFont = new Font(event.display, fontData);         setItemFont();         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();         foregroundColor = null;         backgroundColor = null;         font = null;         if (foregroundSelectionImage != null)           foregroundSelectionImage.dispose();         if (backgroundSelectionImage != null)           backgroundSelectionImage.dispose();         if (foregroundSelectionColor != null)           foregroundSelectionColor.dispose();         if (backgroundSelectionColor != null)           backgroundSelectionColor.dispose();         foregroundSelectionColor = null;         backgroundSelectionColor = null;         if (itemFont != null)           itemFont.dispose();         itemFont = null;       }     });   }   /**    * Creates the "Other" group.    */   void createOtherGroup() {     super.createOtherGroup();     /* Create display controls specific to this example */     simpleTabButton = new Button(otherGroup, SWT.CHECK);     simpleTabButton.setText(ControlExample         .getResourceString("Set_Simple_Tabs"));     simpleTabButton.setSelection(true);     simpleTabButton.addSelectionListener(new SelectionAdapter() {       public void widgetSelected(SelectionEvent event) {         setSimpleTabs();       }     });     singleTabButton = new Button(otherGroup, SWT.CHECK);     singleTabButton.setText(ControlExample         .getResourceString("Set_Single_Tabs"));     singleTabButton.setSelection(false);     singleTabButton.addSelectionListener(new SelectionAdapter() {       public void widgetSelected(SelectionEvent event) {         setSingleTabs();       }     });     showMinButton = new Button(otherGroup, SWT.CHECK);     showMinButton.setText(ControlExample         .getResourceString("Set_Min_Visible"));     showMinButton.setSelection(false);     showMinButton.addSelectionListener(new SelectionAdapter() {       public void widgetSelected(SelectionEvent event) {         setMinimizeVisible();       }     });     showMaxButton = new Button(otherGroup, SWT.CHECK);     showMaxButton.setText(ControlExample         .getResourceString("Set_Max_Visible"));     showMaxButton.setSelection(false);     showMaxButton.addSelectionListener(new SelectionAdapter() {       public void widgetSelected(SelectionEvent event) {         setMaximizeVisible();       }     });     imageButton = new Button(otherGroup, SWT.CHECK);     imageButton.setText(ControlExample.getResourceString("Set_Image"));     imageButton.addSelectionListener(new SelectionAdapter() {       public void widgetSelected(SelectionEvent event) {         setImages();       }     });     unselectedImageButton = new Button(otherGroup, SWT.CHECK);     unselectedImageButton.setText(ControlExample         .getResourceString("Set_Unselected_Image_Visible"));     unselectedImageButton.setSelection(true);     unselectedImageButton.addSelectionListener(new SelectionAdapter() {       public void widgetSelected(SelectionEvent event) {         setUnselectedImageVisible();       }     });     unselectedCloseButton = new Button(otherGroup, SWT.CHECK);     unselectedCloseButton.setText(ControlExample         .getResourceString("Set_Unselected_Close_Visible"));     unselectedCloseButton.setSelection(true);     unselectedCloseButton.addSelectionListener(new SelectionAdapter() {       public void widgetSelected(SelectionEvent event) {         setUnselectedCloseVisible();       }     });   }   /**    * Creates the "Example" group.    */   void createExampleGroup() {     super.createExampleGroup();     /* Create a group for the CTabFolder */     tabFolderGroup = new Group(exampleGroup, SWT.NONE);     tabFolderGroup.setLayout(new GridLayout());     tabFolderGroup         .setLayoutData(new GridData(GridData.GRAB_HORIZONTAL             | GridData.HORIZONTAL_ALIGN_FILL             | GridData.VERTICAL_ALIGN_FILL));     tabFolderGroup.setText("CTabFolder");   }   /**    * Creates the "Example" widgets.    */   void createExampleWidgets() {     /* Compute the widget style */     int style = getDefaultStyle();     if (topButton.getSelection())       style |= SWT.TOP;     if (bottomButton.getSelection())       style |= SWT.BOTTOM;     if (borderButton.getSelection())       style |= SWT.BORDER;     if (flatButton.getSelection())       style |= SWT.FLAT;     if (closeButton.getSelection())       style |= SWT.CLOSE;     /* Create the example widgets */     tabFolder1 = new CTabFolder(tabFolderGroup, style);     for (int i = 0; i < CTabItems1.length; i++) {       CTabItem item = new CTabItem(tabFolder1, SWT.NONE);       item.setText(CTabItems1[i]);       Text text = new Text(tabFolder1, SWT.READ_ONLY);       text.setText(ControlExample.getResourceString("CTabItem_content")           + ": " + i);       item.setControl(text);     }     tabFolder1.addListener(SWT.Selection, new Listener() {       public void handleEvent(Event event) {         lastSelectedTab = tabFolder1.getSelectionIndex();       }     });     tabFolder1.setSelection(lastSelectedTab);   }   /**    * Creates the "Style" group.    */   void createStyleGroup() {     super.createStyleGroup();     /* Create the extra widgets */     topButton = new Button(styleGroup, SWT.RADIO);     topButton.setText("SWT.TOP");     topButton.setSelection(true);     bottomButton = new Button(styleGroup, SWT.RADIO);     bottomButton.setText("SWT.BOTTOM");     borderButton = new Button(styleGroup, SWT.CHECK);     borderButton.setText("SWT.BORDER");     flatButton = new Button(styleGroup, SWT.CHECK);     flatButton.setText("SWT.FLAT");     closeButton = new Button(styleGroup, SWT.CHECK);     closeButton.setText("SWT.CLOSE");     /* Add the listeners */     SelectionListener selectionListener = new SelectionAdapter() {       public void widgetSelected(SelectionEvent event) {         if ((event.widget.getStyle() & SWT.RADIO) != 0) {           if (!((Button) event.widget).getSelection())             return;         }         recreateExampleWidgets();       }     };     topButton.addSelectionListener(selectionListener);     bottomButton.addSelectionListener(selectionListener);     borderButton.addSelectionListener(selectionListener);     flatButton.addSelectionListener(selectionListener);     closeButton.addSelectionListener(selectionListener);   }   /**    * Gets the list of custom event names.    *     * @return an array containing custom event names    */   String[] getCustomEventNames() {     return new String[] { "CTabFolderEvent" };   }   /**    * Gets the "Example" widget children's items, if any.    *     * @return an array containing the example widget children's items    */   Item[] getExampleWidgetItems() {     return tabFolder1.getItems();   }   /**    * Gets the "Example" widget children.    */   Control[] getExampleWidgets() {     return new Control[] { tabFolder1 };   }   /**    * Gets the text for the tab folder item.    */   String getTabText() {     return "CTabFolder";   }   /**    * Hooks the custom listener specified by eventName.    */   void hookCustomListener(final String eventName) {     if (eventName == "CTabFolderEvent") {       tabFolder1.addCTabFolder2Listener(new CTabFolder2Adapter() {         public void close(CTabFolderEvent event) {           log(eventName, event);         }       });     }   }   /**    * Sets the foreground color, background color, and font of the "Example"    * widgets to their default settings. Also sets foreground and background    * color of the Node 1 TreeItems to default settings.    */   void resetColorsAndFonts() {     Color oldColor = foregroundSelectionColor;     foregroundSelectionColor = null;     if (oldColor != null)       oldColor.dispose();     oldColor = backgroundSelectionColor;     backgroundSelectionColor = null;     if (oldColor != null)       oldColor.dispose();     Font oldFont = itemFont;     itemFont = null;     if (oldFont != null)       oldFont.dispose();     super.resetColorsAndFonts();   }   void setExampleWidgetForeground() {     if (foregroundSelectionButton == null || tabFolder1 == null)       return;     tabFolder1.setSelectionForeground(foregroundSelectionColor);     // Set the foreground button's color to match the color just set.     Color color = foregroundSelectionColor;     if (color == null)       color = tabFolder1.getSelectionForeground();     drawImage(foregroundSelectionImage, color);     foregroundSelectionButton.setImage(foregroundSelectionImage);     super.setExampleWidgetForeground();   }   void setExampleWidgetBackground() {     if (backgroundSelectionButton == null || tabFolder1 == null)       return;     tabFolder1.setSelectionBackground(backgroundSelectionColor);     // Set the background button's color to match the color just set.     Color color = backgroundSelectionColor;     if (color == null)       color = tabFolder1.getSelectionBackground();     drawImage(backgroundSelectionImage, color);     backgroundSelectionButton.setImage(backgroundSelectionImage);     super.setExampleWidgetBackground();   }   void setExampleWidgetFont() {     if (instance.startup)       return;     if (itemFontButton == null)       return; // no font button on this tab     CTabItem[] items = tabFolder1.getItems();     if (items.length > 0) {       items[0].setFont(itemFont);     }     super.setExampleWidgetFont();   }   /**    * Sets the state of the "Example" widgets.    */   void setExampleWidgetState() {     super.setExampleWidgetState();     setSimpleTabs();     setSingleTabs();     setImages();     setMinimizeVisible();     setMaximizeVisible();     setUnselectedCloseVisible();     setUnselectedImageVisible();     setExampleWidgetSize();   }   /**    * Sets the shape that the CTabFolder will use to render itself.    */   void setSimpleTabs() {     tabFolder1.setSimple(simpleTabButton.getSelection());     setExampleWidgetSize();   }   /**    * Sets the number of tabs that the CTabFolder should display.    */   void setSingleTabs() {     tabFolder1.setSingle(singleTabButton.getSelection());     setExampleWidgetSize();   }   /**    * Sets an image into each item of the "Example" widgets.    */   void setImages() {     boolean setImage = imageButton.getSelection();     CTabItem items[] = tabFolder1.getItems();     for (int i = 0; i < items.length; i++) {       if (setImage) {         items[i]             .setImage(instance.images[ControlExample.ciClosedFolder]);       } else {         items[i].setImage(null);       }     }     setExampleWidgetSize();   }   /**    * Sets the visibility of the minimize button    */   void setMinimizeVisible() {     tabFolder1.setMinimizeVisible(showMinButton.getSelection());     setExampleWidgetSize();   }   /**    * Sets the visibility of the maximize button    */   void setMaximizeVisible() {     tabFolder1.setMaximizeVisible(showMaxButton.getSelection());     setExampleWidgetSize();   }   /**    * Sets the visibility of the close button on unselected tabs    */   void setUnselectedCloseVisible() {     tabFolder1.setUnselectedCloseVisible(unselectedCloseButton         .getSelection());     setExampleWidgetSize();   }   /**    * Sets the visibility of the image on unselected tabs    */   void setUnselectedImageVisible() {     tabFolder1.setUnselectedImageVisible(unselectedImageButton         .getSelection());     setExampleWidgetSize();   }   /**    * Sets the font of CTabItem 0.    */   void setItemFont() {     if (instance.startup)       return;     tabFolder1.getItem(0).setFont(itemFont);     setExampleWidgetSize();   } } /*******************************************************************************  * Copyright (c) 2000, 2004 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  ******************************************************************************/ class CoolBarTab extends Tab {   /* Example widgets and group that contains them */   CoolBar coolBar;   CoolItem pushItem, dropDownItem, radioItem, checkItem, textItem;   Group coolBarGroup;   /* Style widgets added to the "Style" group */   Button dropDownButton, flatButton;   /* Other widgets added to the "Other" group */   Button lockedButton;   Point[] sizes;   int[] wrapIndices;   int[] order;   /**    * Creates the Tab within a given instance of ControlExample.    */   CoolBarTab(ControlExample instance) {     super(instance);   }   /**    * Creates the "Other" group.    */   void createOtherGroup() {     super.createOtherGroup();     /* Create display controls specific to this example */     lockedButton = new Button(otherGroup, SWT.CHECK);     lockedButton.setText(ControlExample.getResourceString("Locked"));     /* Add the listeners */     lockedButton.addSelectionListener(new SelectionAdapter() {       public void widgetSelected(SelectionEvent event) {         setWidgetLocked();       }     });   }   /**    * Creates the "Example" group.    */   void createExampleGroup() {     super.createExampleGroup();     coolBarGroup = new Group(exampleGroup, SWT.NONE);     coolBarGroup.setLayout(new GridLayout());     coolBarGroup         .setLayoutData(new GridData(GridData.GRAB_HORIZONTAL             | GridData.HORIZONTAL_ALIGN_FILL             | GridData.VERTICAL_ALIGN_FILL));     coolBarGroup.setText("CoolBar");   }   /**    * Creates the "Example" widgets.    */   void createExampleWidgets() {     int style = getDefaultStyle(), itemStyle = 0;     /* Compute the widget style */     int toolBarStyle = SWT.FLAT;     if (borderButton.getSelection())       style |= SWT.BORDER;     if (flatButton.getSelection())       style |= SWT.FLAT;     if (dropDownButton.getSelection())       itemStyle |= SWT.DROP_DOWN;     /*      * Create the example widgets.      */     coolBar = new CoolBar(coolBarGroup, style);     /* create the push button toolbar */     ToolBar toolBar = new ToolBar(coolBar, toolBarStyle);     ToolItem item = new ToolItem(toolBar, SWT.PUSH);     item.setImage(instance.images[ControlExample.ciClosedFolder]);     item.setToolTipText("SWT.PUSH");     item = new ToolItem(toolBar, SWT.PUSH);     item.setImage(instance.images[ControlExample.ciOpenFolder]);     item.setToolTipText("SWT.PUSH");     item = new ToolItem(toolBar, SWT.PUSH);     item.setImage(instance.images[ControlExample.ciTarget]);     item.setToolTipText("SWT.PUSH");     item = new ToolItem(toolBar, SWT.SEPARATOR);     item = new ToolItem(toolBar, SWT.PUSH);     item.setImage(instance.images[ControlExample.ciClosedFolder]);     item.setToolTipText("SWT.PUSH");     item = new ToolItem(toolBar, SWT.PUSH);     item.setImage(instance.images[ControlExample.ciOpenFolder]);     item.setToolTipText("SWT.PUSH");     pushItem = new CoolItem(coolBar, itemStyle);     pushItem.setControl(toolBar);     Point pushSize = toolBar.computeSize(SWT.DEFAULT, SWT.DEFAULT);     pushSize = pushItem.computeSize(pushSize.x, pushSize.y);     pushItem.setSize(pushSize);     pushItem.setMinimumSize(item.getWidth(), pushSize.y);     pushItem.addSelectionListener(new CoolItemSelectionListener());     /* create the dropdown toolbar */     toolBar = new ToolBar(coolBar, toolBarStyle);     item = new ToolItem(toolBar, SWT.DROP_DOWN);     item.setImage(instance.images[ControlExample.ciOpenFolder]);     item.setToolTipText("SWT.DROP_DOWN");     item.addSelectionListener(new DropDownSelectionListener());     item = new ToolItem(toolBar, SWT.DROP_DOWN);     item.setImage(instance.images[ControlExample.ciClosedFolder]);     item.setToolTipText("SWT.DROP_DOWN");     item.addSelectionListener(new DropDownSelectionListener());     dropDownItem = new CoolItem(coolBar, itemStyle);     dropDownItem.setControl(toolBar);     Point dropSize = toolBar.computeSize(SWT.DEFAULT, SWT.DEFAULT);     dropSize = dropDownItem.computeSize(dropSize.x, dropSize.y);     dropDownItem.setSize(dropSize);     dropDownItem.setMinimumSize(item.getWidth(), dropSize.y);     dropDownItem.addSelectionListener(new CoolItemSelectionListener());     /* create the radio button toolbar */     toolBar = new ToolBar(coolBar, toolBarStyle);     item = new ToolItem(toolBar, SWT.RADIO);     item.setImage(instance.images[ControlExample.ciClosedFolder]);     item.setToolTipText("SWT.RADIO");     item = new ToolItem(toolBar, SWT.RADIO);     item.setImage(instance.images[ControlExample.ciClosedFolder]);     item.setToolTipText("SWT.RADIO");     item = new ToolItem(toolBar, SWT.RADIO);     item.setImage(instance.images[ControlExample.ciClosedFolder]);     item.setToolTipText("SWT.RADIO");     radioItem = new CoolItem(coolBar, itemStyle);     radioItem.setControl(toolBar);     Point radioSize = toolBar.computeSize(SWT.DEFAULT, SWT.DEFAULT);     radioSize = radioItem.computeSize(radioSize.x, radioSize.y);     radioItem.setSize(radioSize);     radioItem.setMinimumSize(item.getWidth(), radioSize.y);     radioItem.addSelectionListener(new CoolItemSelectionListener());     /* create the check button toolbar */     toolBar = new ToolBar(coolBar, toolBarStyle);     item = new ToolItem(toolBar, SWT.CHECK);     item.setImage(instance.images[ControlExample.ciClosedFolder]);     item.setToolTipText("SWT.CHECK");     item = new ToolItem(toolBar, SWT.CHECK);     item.setImage(instance.images[ControlExample.ciTarget]);     item.setToolTipText("SWT.CHECK");     item = new ToolItem(toolBar, SWT.CHECK);     item.setImage(instance.images[ControlExample.ciOpenFolder]);     item.setToolTipText("SWT.CHECK");     item = new ToolItem(toolBar, SWT.CHECK);     item.setImage(instance.images[ControlExample.ciTarget]);     item.setToolTipText("SWT.CHECK");     checkItem = new CoolItem(coolBar, itemStyle);     checkItem.setControl(toolBar);     Point checkSize = toolBar.computeSize(SWT.DEFAULT, SWT.DEFAULT);     checkSize = checkItem.computeSize(checkSize.x, checkSize.y);     checkItem.setSize(checkSize);     checkItem.setMinimumSize(item.getWidth(), checkSize.y);     checkItem.addSelectionListener(new CoolItemSelectionListener());     /* create the text */     Text text = new Text(coolBar, SWT.BORDER | SWT.SINGLE);     textItem = new CoolItem(coolBar, itemStyle);     textItem.setControl(text);     Point textSize = text.computeSize(SWT.DEFAULT, SWT.DEFAULT);     textSize = textItem.computeSize(textSize.x, textSize.y);     textItem.setSize(textSize);     textItem.setMinimumSize(textSize);     textItem.addSelectionListener(new CoolItemSelectionListener());     /* if we have saved state, restore it */     if (order != null) {       coolBar.setItemLayout(order, wrapIndices, sizes);       /*        * special case: because setItemLayout will restore the items to the        * sizes the user left them at, the preferred size may not be the        * same as the actual size. Thus we must explicitly set the        * preferred sizes.        */       pushItem.setPreferredSize(pushSize);       dropDownItem.setPreferredSize(dropSize);       radioItem.setPreferredSize(radioSize);       checkItem.setPreferredSize(checkSize);       textItem.setPreferredSize(textSize);     } else {       coolBar.setWrapIndices(new int[] { 1, 3 });     }     /* add a listener to resize the group box to match the coolbar */     coolBar.addListener(SWT.Resize, new Listener() {       public void handleEvent(Event event) {         exampleGroup.layout();       }     });   }   /**    * Creates the "Style" group.    */   void createStyleGroup() {     super.createStyleGroup();     /* Create the extra widget */     borderButton = new Button(styleGroup, SWT.CHECK);     borderButton.setText("SWT.BORDER");     flatButton = new Button(styleGroup, SWT.CHECK);     flatButton.setText("SWT.FLAT");     Group itemGroup = new Group(styleGroup, SWT.NONE);     itemGroup.setLayout(new GridLayout());     itemGroup.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL         | GridData.VERTICAL_ALIGN_FILL));     itemGroup.setText(ControlExample.getResourceString("Item_Styles"));     dropDownButton = new Button(itemGroup, SWT.CHECK);     dropDownButton.setText("SWT.DROP_DOWN");     dropDownButton.addSelectionListener(new SelectionAdapter() {       public void widgetSelected(SelectionEvent event) {         recreateExampleWidgets();       }     });   }   /**    * Disposes the "Example" widgets.    */   void disposeExampleWidgets() {     /* store the state of the toolbar if applicable */     if (coolBar != null) {       sizes = coolBar.getItemSizes();       wrapIndices = coolBar.getWrapIndices();       order = coolBar.getItemOrder();     }     super.disposeExampleWidgets();   }   /**    * Gets the "Example" widget children's items, if any.    *     * @return an array containing the example widget children's items    */   Item[] getExampleWidgetItems() {     return coolBar.getItems();   }   /**    * Gets the "Example" widget children.    */   Control[] getExampleWidgets() {     return new Control[] { coolBar };   }   /**    * Gets the text for the tab folder item.    */   String getTabText() {     return "CoolBar";   }   /**    * Sets the state of the "Example" widgets.    */   void setExampleWidgetState() {     super.setExampleWidgetState();     borderButton.setSelection((coolBar.getStyle() & SWT.BORDER) != 0);     flatButton.setSelection((coolBar.getStyle() & SWT.FLAT) != 0);     dropDownButton         .setSelection((coolBar.getItem(0).getStyle() & SWT.DROP_DOWN) != 0);     setWidgetLocked();   }   /**    * Sets the header visible state of the "Example" widgets.    */   void setWidgetLocked() {     coolBar.setLocked(lockedButton.getSelection());   }   /**    * Listens to widgetSelected() events on SWT.DROP_DOWN type ToolItems and    * opens/closes a menu when appropriate.    */   class DropDownSelectionListener extends SelectionAdapter {     private Menu menu = null;     private boolean visible = false;     public void widgetSelected(SelectionEvent event) {       // Create the menu if it has not already been created       if (menu == null) {         // Lazy create the menu.         Shell shell = tabFolderPage.getShell();         menu = new Menu(shell);         menu.addMenuListener(new MenuAdapter() {           public void menuHidden(MenuEvent e) {             visible = false;           }         });         for (int i = 0; i < 9; ++i) {           final String text = ControlExample               .getResourceString("DropDownData_" + i);           if (text.length() != 0) {             MenuItem menuItem = new MenuItem(menu, SWT.NONE);             menuItem.setText(text);             /*              * Add a menu selection listener so that the menu is              * hidden when the user selects an item from the drop              * down menu.              */             menuItem.addSelectionListener(new SelectionAdapter() {               public void widgetSelected(SelectionEvent e) {                 setMenuVisible(false);               }             });           } else {             new MenuItem(menu, SWT.SEPARATOR);           }         }       }       /**        * A selection event will be fired when a drop down tool item is        * selected in the main area and in the drop down arrow. Examine the        * event detail to determine where the widget was selected.        */       if (event.detail == SWT.ARROW) {         /*          * The drop down arrow was selected.          */         if (visible) {           // Hide the menu to give the Arrow the appearance of being a           // toggle button.           setMenuVisible(false);         } else {           // Position the menu below and vertically aligned with the           // the drop down tool button.           final ToolItem toolItem = (ToolItem) event.widget;           final ToolBar toolBar = toolItem.getParent();           Rectangle toolItemBounds = toolItem.getBounds();           Point point = toolBar.toDisplay(new Point(toolItemBounds.x,               toolItemBounds.y));           menu.setLocation(point.x, point.y + toolItemBounds.height);           setMenuVisible(true);         }       } else {         /*          * Main area of drop down tool item selected. An application          * would invoke the code to perform the action for the tool          * item.          */       }     }     private void setMenuVisible(boolean visible) {       menu.setVisible(visible);       this.visible = visible;     }   }   /**    * Listens to widgetSelected() events on SWT.DROP_DOWN type CoolItems and    * opens/closes a menu when appropriate.    */   class CoolItemSelectionListener extends SelectionAdapter {     private Menu menu = null;     public void widgetSelected(SelectionEvent event) {       /**        * A selection event will be fired when the cool item is selected by        * its gripper or if the drop down arrow (or 'chevron') is selected.        * Examine the event detail to determine where the widget was        * selected.        */       if (event.detail == SWT.ARROW) {         /*          * If the popup menu is already up (i.e. user pressed arrow          * twice), then dispose it.          */         if (menu != null) {           menu.dispose();           menu = null;           return;         }         /*          * Get the cool item and convert its bounds to display          * coordinates.          */         CoolItem coolItem = (CoolItem) event.widget;         Rectangle itemBounds = coolItem.getBounds();         itemBounds.width = event.x - itemBounds.x;         Point pt = coolBar.toDisplay(new Point(itemBounds.x,             itemBounds.y));         itemBounds.x = pt.x;         itemBounds.y = pt.y;         /* Get the toolbar from the cool item. */         ToolBar toolBar = (ToolBar) coolItem.getControl();         ToolItem[] tools = toolBar.getItems();         int toolCount = tools.length;         /*          * Convert the bounds of each tool item to display coordinates,          * and determine which ones are past the bounds of the cool          * item.          */         int i = 0;         while (i < toolCount) {           Rectangle toolBounds = tools[i].getBounds();           pt = toolBar               .toDisplay(new Point(toolBounds.x, toolBounds.y));           toolBounds.x = pt.x;           toolBounds.y = pt.y;           Rectangle intersection = itemBounds               .intersection(toolBounds);           if (!intersection.equals(toolBounds))             break;           i++;         }         /*          * Create a pop-up menu with items for each of the hidden          * buttons.          */         menu = new Menu(coolBar);         for (int j = i; j < toolCount; j++) {           ToolItem tool = tools[j];           Image image = tool.getImage();           if (image == null) {             new MenuItem(menu, SWT.SEPARATOR);           } else {             if ((tool.getStyle() & SWT.DROP_DOWN) != 0) {               MenuItem menuItem = new MenuItem(menu, SWT.CASCADE);               menuItem.setImage(image);               String text = tool.getToolTipText();               if (text != null)                 menuItem.setText(text);               Menu m = new Menu(menu);               menuItem.setMenu(m);               for (int k = 0; k < 9; ++k) {                 text = ControlExample                     .getResourceString("DropDownData_" + k);                 if (text.length() != 0) {                   MenuItem mi = new MenuItem(m, SWT.NONE);                   mi.setText(text);                   /*                    * Application code to perform the action                    * for the submenu item would go here.                    */                 } else {                   new MenuItem(m, SWT.SEPARATOR);                 }               }             } else {               MenuItem menuItem = new MenuItem(menu, SWT.NONE);               menuItem.setImage(image);               String text = tool.getToolTipText();               if (text != null)                 menuItem.setText(text);             }             /*              * Application code to perform the action for the menu              * item would go here.              */           }         }         /*          * Display the pop-up menu at the lower left corner of the arrow          * button. Dispose the menu when the user is done with it.          */         pt = coolBar.toDisplay(new Point(event.x, event.y));         menu.setLocation(pt.x, pt.y);         menu.setVisible(true);         Display display = coolBar.getDisplay();         while (menu != null && !menu.isDisposed() && menu.isVisible()) {           if (!display.readAndDispatch())             display.sleep();         }         if (menu != null) {           menu.dispose();           menu = null;         }       }     }   } } /*******************************************************************************  * 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  ******************************************************************************/ class ComboTab extends Tab {   /* Example widgets and groups that contain them */   Combo combo1;   Group comboGroup;   /* Style widgets added to the "Style" group */   Button dropDownButton, readOnlyButton, simpleButton;   static String[] ListData = {       ControlExample.getResourceString("ListData0_0"),       ControlExample.getResourceString("ListData0_1"),       ControlExample.getResourceString("ListData0_2"),       ControlExample.getResourceString("ListData0_3"),       ControlExample.getResourceString("ListData0_4"),       ControlExample.getResourceString("ListData0_5"),       ControlExample.getResourceString("ListData0_6"),       ControlExample.getResourceString("ListData0_7"),       ControlExample.getResourceString("ListData0_8") };   /**    * Creates the Tab within a given instance of ControlExample.    */   ComboTab(ControlExample instance) {     super(instance);   }   /**    * Creates the "Example" group.    */   void createExampleGroup() {     super.createExampleGroup();     /* Create a group for the combo box */     comboGroup = new Group(exampleGroup, SWT.NONE);     comboGroup.setLayout(new GridLayout());     comboGroup         .setLayoutData(new GridData(GridData.GRAB_HORIZONTAL             | GridData.HORIZONTAL_ALIGN_FILL             | GridData.VERTICAL_ALIGN_FILL));     comboGroup.setText("Combo");   }   /**    * Creates the "Example" widgets.    */   void createExampleWidgets() {     /* Compute the widget style */     int style = getDefaultStyle();     if (dropDownButton.getSelection())       style |= SWT.DROP_DOWN;     if (readOnlyButton.getSelection())       style |= SWT.READ_ONLY;     if (simpleButton.getSelection())       style |= SWT.SIMPLE;     /* Create the example widgets */     combo1 = new Combo(comboGroup, style);     combo1.setItems(ListData);     if (ListData.length >= 3) {       combo1.setText(ListData[2]);     }   }   /**    * Creates the tab folder page.    *     * @param tabFolder    *            org.eclipse.swt.widgets.TabFolder    * @return the new page for the tab folder    */   Composite createTabFolderPage(TabFolder tabFolder) {     super.createTabFolderPage(tabFolder);     /*      * Add a resize listener to the tabFolderPage so that if the user types      * into the example widget to change its preferred size, and then      * resizes the shell, we recalculate the preferred size correctly.      */     tabFolderPage.addControlListener(new ControlAdapter() {       public void controlResized(ControlEvent e) {         setExampleWidgetSize();       }     });     return tabFolderPage;   }   /**    * Creates the "Style" group.    */   void createStyleGroup() {     super.createStyleGroup();     /* Create the extra widgets */     dropDownButton = new Button(styleGroup, SWT.RADIO);     dropDownButton.setText("SWT.DROP_DOWN");     simpleButton = new Button(styleGroup, SWT.RADIO);     simpleButton.setText("SWT.SIMPLE");     readOnlyButton = new Button(styleGroup, SWT.CHECK);     readOnlyButton.setText("SWT.READ_ONLY");   }   /**    * Gets the "Example" widget children.    */   Control[] getExampleWidgets() {     return new Control[] { combo1 };   }   /**    * Returns a list of set/get API method names (without the set/get prefix)    * that can be used to set/get values in the example control(s).    */   String[] getMethodNames() {     return new String[] { "Items", "Orientation", "Selection", "Text",         "TextLimit", "VisibleItemCount" };   }   /**    * Gets the text for the tab folder item.    */   String getTabText() {     return "Combo";   }   /**    * Sets the state of the "Example" widgets.    */   void setExampleWidgetState() {     super.setExampleWidgetState();     dropDownButton.setSelection((combo1.getStyle() & SWT.DROP_DOWN) != 0);     simpleButton.setSelection((combo1.getStyle() & SWT.SIMPLE) != 0);     readOnlyButton.setSelection((combo1.getStyle() & SWT.READ_ONLY) != 0);     readOnlyButton.setEnabled(!simpleButton.getSelection());   } } /*******************************************************************************  * 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  ******************************************************************************/ class CLabelTab extends AlignableTab {   /* Example widgets and groups that contain them */   CLabel label1, label2, label3;   Group textLabelGroup;   /* Style widgets added to the "Style" group */   Button shadowInButton, shadowOutButton, shadowNoneButton;   /**    * Creates the Tab within a given instance of ControlExample.    */   CLabelTab(ControlExample instance) {     super(instance);   }   /**    * Creates the "Example" group.    */   void createExampleGroup() {     super.createExampleGroup();     /* Create a group for the text labels */     textLabelGroup = new Group(exampleGroup, SWT.NONE);     GridLayout gridLayout = new GridLayout();     textLabelGroup.setLayout(gridLayout);     gridLayout.numColumns = 3;     textLabelGroup         .setLayoutData(new GridData(GridData.GRAB_HORIZONTAL             | GridData.HORIZONTAL_ALIGN_FILL             | GridData.VERTICAL_ALIGN_FILL));     textLabelGroup.setText(ControlExample         .getResourceString("Custom_Labels"));   }   /**    * Creates the "Example" widgets.    */   void createExampleWidgets() {     /* Compute the widget style */     int style = getDefaultStyle();     if (shadowInButton.getSelection())       style |= SWT.SHADOW_IN;     if (shadowNoneButton.getSelection())       style |= SWT.SHADOW_NONE;     if (shadowOutButton.getSelection())       style |= SWT.SHADOW_OUT;     if (leftButton.getSelection())       style |= SWT.LEFT;     if (centerButton.getSelection())       style |= SWT.CENTER;     if (rightButton.getSelection())       style |= SWT.RIGHT;     /* Create the example widgets */     label1 = new CLabel(textLabelGroup, style);     label1.setText(ControlExample.getResourceString("One"));     label1.setImage(instance.images[ControlExample.ciClosedFolder]);     label2 = new CLabel(textLabelGroup, style);     label2.setImage(instance.images[ControlExample.ciTarget]);     label3 = new CLabel(textLabelGroup, style);     label3.setText(ControlExample.getResourceString("Example_string")         + "\n" + ControlExample.getResourceString("One_Two_Three"));   }   /**    * Creates the "Style" group.    */   void createStyleGroup() {     super.createStyleGroup();     /* Create the extra widgets */     shadowNoneButton = new Button(styleGroup, SWT.RADIO);     shadowNoneButton.setText("SWT.SHADOW_NONE");     shadowInButton = new Button(styleGroup, SWT.RADIO);     shadowInButton.setText("SWT.SHADOW_IN");     shadowOutButton = new Button(styleGroup, SWT.RADIO);     shadowOutButton.setText("SWT.SHADOW_OUT");     /* Add the listeners */     SelectionListener selectionListener = new SelectionAdapter() {       public void widgetSelected(SelectionEvent event) {         if ((event.widget.getStyle() & SWT.RADIO) != 0) {           if (!((Button) event.widget).getSelection())             return;         }         recreateExampleWidgets();       }     };     shadowInButton.addSelectionListener(selectionListener);     shadowOutButton.addSelectionListener(selectionListener);     shadowNoneButton.addSelectionListener(selectionListener);   }   /**    * Gets the "Example" widget children.    */   Control[] getExampleWidgets() {     return new Control[] { label1, label2, label3 };   }   /**    * Returns a list of set/get API method names (without the set/get prefix)    * that can be used to set/get values in the example control(s).    */   String[] getMethodNames() {     return new String[] { "Text" };   }   /**    * Gets the text for the tab folder item.    */   String getTabText() {     return "CLabel";   }   /**    * Sets the alignment of the "Example" widgets.    */   void setExampleWidgetAlignment() {     int alignment = 0;     if (leftButton.getSelection())       alignment = SWT.LEFT;     if (centerButton.getSelection())       alignment = SWT.CENTER;     if (rightButton.getSelection())       alignment = SWT.RIGHT;     label1.setAlignment(alignment);     label2.setAlignment(alignment);     label3.setAlignment(alignment);   }   /**    * Sets the state of the "Example" widgets.    */   void setExampleWidgetState() {     super.setExampleWidgetState();     leftButton.setSelection((label1.getStyle() & SWT.LEFT) != 0);     centerButton.setSelection((label1.getStyle() & SWT.CENTER) != 0);     rightButton.setSelection((label1.getStyle() & SWT.RIGHT) != 0);     shadowInButton.setSelection((label1.getStyle() & SWT.SHADOW_IN) != 0);     shadowOutButton.setSelection((label1.getStyle() & SWT.SHADOW_OUT) != 0);     shadowNoneButton         .setSelection((label1.getStyle() & (SWT.SHADOW_IN | SWT.SHADOW_OUT)) == 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  ******************************************************************************/ class CComboTab extends Tab {   /* Example widgets and groups that contain them */   CCombo combo1;   Group comboGroup;   /* Style widgets added to the "Style" group */   Button flatButton, readOnlyButton;   static String[] ListData = {       ControlExample.getResourceString("ListData1_0"),       ControlExample.getResourceString("ListData1_1"),       ControlExample.getResourceString("ListData1_2"),       ControlExample.getResourceString("ListData1_3"),       ControlExample.getResourceString("ListData1_4"),       ControlExample.getResourceString("ListData1_5"),       ControlExample.getResourceString("ListData1_6"),       ControlExample.getResourceString("ListData1_7"),       ControlExample.getResourceString("ListData1_8") };   /**    * Creates the Tab within a given instance of ControlExample.    */   CComboTab(ControlExample instance) {     super(instance);   }   /**    * Creates the "Example" group.    */   void createExampleGroup() {     super.createExampleGroup();     /* Create a group for the combo box */     comboGroup = new Group(exampleGroup, SWT.NONE);     comboGroup.setLayout(new GridLayout());     comboGroup         .setLayoutData(new GridData(GridData.GRAB_HORIZONTAL             | GridData.HORIZONTAL_ALIGN_FILL             | GridData.VERTICAL_ALIGN_FILL));     comboGroup.setText(ControlExample.getResourceString("Custom_Combo"));   }   /**    * Creates the "Example" widgets.    */   void createExampleWidgets() {     /* Compute the widget style */     int style = getDefaultStyle();     if (flatButton.getSelection())       style |= SWT.FLAT;     if (readOnlyButton.getSelection())       style |= SWT.READ_ONLY;     if (borderButton.getSelection())       style |= SWT.BORDER;     /* Create the example widgets */     combo1 = new CCombo(comboGroup, style);     combo1.setItems(ListData);     if (ListData.length >= 3) {       combo1.setText(ListData[2]);     }   }   /**    * Creates the "Style" group.    */   void createStyleGroup() {     super.createStyleGroup();     /* Create the extra widgets */     readOnlyButton = new Button(styleGroup, SWT.CHECK);     readOnlyButton.setText("SWT.READ_ONLY");     borderButton = new Button(styleGroup, SWT.CHECK);     borderButton.setText("SWT.BORDER");     flatButton = new Button(styleGroup, SWT.CHECK);     flatButton.setText("SWT.FLAT");   }   /**    * Gets the "Example" widget children.    */   Control[] getExampleWidgets() {     return new Control[] { combo1 };   }   /**    * Returns a list of set/get API method names (without the set/get prefix)    * that can be used to set/get values in the example control(s).    */   String[] getMethodNames() {     return new String[] { "Editable", "Items", "Selection", "Text",         "TextLimit", "VisibleItemCount" };   }   /**    * Gets the text for the tab folder item.    */   String getTabText() {     return "CCombo";   }   /**    * Sets the state of the "Example" widgets.    */   void setExampleWidgetState() {     super.setExampleWidgetState();     flatButton.setSelection((combo1.getStyle() & SWT.FLAT) != 0);     readOnlyButton.setSelection((combo1.getStyle() & SWT.READ_ONLY) != 0);     borderButton.setSelection((combo1.getStyle() & SWT.BORDER) != 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  ******************************************************************************/ class CanvasTab extends Tab {   static int colors[] = { SWT.COLOR_RED, SWT.COLOR_GREEN, SWT.COLOR_BLUE,       SWT.COLOR_MAGENTA, SWT.COLOR_YELLOW, SWT.COLOR_CYAN,       SWT.COLOR_DARK_RED, SWT.COLOR_DARK_GREEN, SWT.COLOR_DARK_BLUE,       SWT.COLOR_DARK_MAGENTA, SWT.COLOR_DARK_YELLOW, SWT.COLOR_DARK_CYAN };   /* Example widgets and groups that contain them */   Canvas canvas;   Group canvasGroup;   /* Style widgets added to the "Style" group */   Button horizontalButton, verticalButton, noBackgroundButton, noFocusButton,       noMergePaintsButton, noRedrawResizeButton;   /* Other widgets added to the "Other" group */   Button caretButton, fillDamageButton;   int paintCount;   int cx, cy;   int maxX, maxY;   /**    * Creates the Tab within a given instance of ControlExample.    */   CanvasTab(ControlExample instance) {     super(instance);   }   /**    * Creates the "Other" group.    */   void createOtherGroup() {     super.createOtherGroup();     /* Create display controls specific to this example */     caretButton = new Button(otherGroup, SWT.CHECK);     caretButton.setText(ControlExample.getResourceString("Caret"));     fillDamageButton = new Button(otherGroup, SWT.CHECK);     fillDamageButton         .setText(ControlExample.getResourceString("FillDamage"));     /* Add the listeners */     caretButton.addSelectionListener(new SelectionAdapter() {       public void widgetSelected(SelectionEvent event) {         setCaret();       }     });   }   /**    * Creates the "Example" group.    */   void createExampleGroup() {     super.createExampleGroup();     /* Create a group for the canvas widget */     canvasGroup = new Group(exampleGroup, SWT.NONE);     canvasGroup.setLayout(new GridLayout());     canvasGroup         .setLayoutData(new GridData(GridData.GRAB_HORIZONTAL             | GridData.HORIZONTAL_ALIGN_FILL             | GridData.VERTICAL_ALIGN_FILL));     canvasGroup.setText("Canvas");   }   /**    * Creates the "Example" widgets.    */   void createExampleWidgets() {     /* Compute the widget style */     int style = getDefaultStyle();     if (horizontalButton.getSelection())       style |= SWT.H_SCROLL;     if (verticalButton.getSelection())       style |= SWT.V_SCROLL;     if (borderButton.getSelection())       style |= SWT.BORDER;     if (noBackgroundButton.getSelection())       style |= SWT.NO_BACKGROUND;     if (noFocusButton.getSelection())       style |= SWT.NO_FOCUS;     if (noMergePaintsButton.getSelection())       style |= SWT.NO_MERGE_PAINTS;     if (noRedrawResizeButton.getSelection())       style |= SWT.NO_REDRAW_RESIZE;     /* Create the example widgets */     paintCount = 0;     cx = 0;     cy = 0;     canvas = new Canvas(canvasGroup, style);     canvas.addPaintListener(new PaintListener() {       public void paintControl(PaintEvent e) {         paintCount++;         GC gc = e.gc;         if (fillDamageButton.getSelection()) {           Color color = e.display.getSystemColor(colors[paintCount               % colors.length]);           gc.setBackground(color);           gc.fillRectangle(e.x, e.y, e.width, e.height);         }         Point size = canvas.getSize();         gc.drawArc(cx + 1, cy + 1, size.x - 2, size.y - 2, 0, 360);         gc.drawRectangle(cx + (size.x - 10) / 2,             cy + (size.y - 10) / 2, 10, 10);       }     });     canvas.addControlListener(new ControlAdapter() {       public void controlResized(ControlEvent event) {         Point size = canvas.getSize();         maxX = size.x * 3 / 2;         maxY = size.y * 3 / 2;         resizeScrollBars();       }     });     ScrollBar bar = canvas.getHorizontalBar();     if (bar != null) {       bar.addSelectionListener(new SelectionAdapter() {         public void widgetSelected(SelectionEvent event) {           scrollHorizontal((ScrollBar) event.widget);         }       });     }     bar = canvas.getVerticalBar();     if (bar != null) {       bar.addSelectionListener(new SelectionAdapter() {         public void widgetSelected(SelectionEvent event) {           scrollVertical((ScrollBar) event.widget);         }       });     }   }   /**    * Creates the "Style" group.    */   void createStyleGroup() {     super.createStyleGroup();     /* Create the extra widgets */     horizontalButton = new Button(styleGroup, SWT.CHECK);     horizontalButton.setText("SWT.H_SCROLL");     horizontalButton.setSelection(true);     verticalButton = new Button(styleGroup, SWT.CHECK);     verticalButton.setText("SWT.V_SCROLL");     verticalButton.setSelection(true);     borderButton = new Button(styleGroup, SWT.CHECK);     borderButton.setText("SWT.BORDER");     noBackgroundButton = new Button(styleGroup, SWT.CHECK);     noBackgroundButton.setText("SWT.NO_BACKGROUND");     noFocusButton = new Button(styleGroup, SWT.CHECK);     noFocusButton.setText("SWT.NO_FOCUS");     noMergePaintsButton = new Button(styleGroup, SWT.CHECK);     noMergePaintsButton.setText("SWT.NO_MERGE_PAINTS");     noRedrawResizeButton = new Button(styleGroup, SWT.CHECK);     noRedrawResizeButton.setText("SWT.NO_REDRAW_RESIZE");   }   /**    * Creates the tab folder page.    *     * @param tabFolder    *            org.eclipse.swt.widgets.TabFolder    * @return the new page for the tab folder    */   Composite createTabFolderPage(TabFolder tabFolder) {     super.createTabFolderPage(tabFolder);     /*      * Add a resize listener to the tabFolderPage so that if the user types      * into the example widget to change its preferred size, and then      * resizes the shell, we recalculate the preferred size correctly.      */     tabFolderPage.addControlListener(new ControlAdapter() {       public void controlResized(ControlEvent e) {         setExampleWidgetSize();       }     });     return tabFolderPage;   }   /**    * Gets the "Example" widget children.    */   Control[] getExampleWidgets() {     return new Control[] { canvas };   }   /**    * Gets the text for the tab folder item.    */   String getTabText() {     return "Canvas";   }   /**    * Resizes the maximum and thumb of both scrollbars.    */   void resizeScrollBars() {     Rectangle clientArea = canvas.getClientArea();     ScrollBar bar = canvas.getHorizontalBar();     if (bar != null) {       bar.setMaximum(maxX);       bar.setThumb(clientArea.width);       bar.setPageIncrement(clientArea.width);     }     bar = canvas.getVerticalBar();     if (bar != null) {       bar.setMaximum(maxY);       bar.setThumb(clientArea.height);       bar.setPageIncrement(clientArea.height);     }   }   /**    * Scrolls the canvas horizontally.    *     * @param scrollBar    */   void scrollHorizontal(ScrollBar scrollBar) {     Rectangle bounds = canvas.getClientArea();     int x = -scrollBar.getSelection();     if (x + maxX < bounds.width) {       x = bounds.width - maxX;     }     canvas.scroll(x, cy, cx, cy, maxX, maxY, false);     cx = x;   }   /**    * Scrolls the canvas vertically.    *     * @param scrollBar    */   void scrollVertical(ScrollBar scrollBar) {     Rectangle bounds = canvas.getClientArea();     int y = -scrollBar.getSelection();     if (y + maxY < bounds.height) {       y = bounds.height - maxY;     }     canvas.scroll(cx, y, cx, cy, maxX, maxY, false);     cy = y;   }   /**    * Sets or clears the caret in the "Example" widget.    */   void setCaret() {     Caret oldCaret = canvas.getCaret();     if (caretButton.getSelection()) {       Caret newCaret = new Caret(canvas, SWT.NONE);       Font font = canvas.getFont();       newCaret.setFont(font);       GC gc = new GC(canvas);       gc.setFont(font);       newCaret.setBounds(1, 1, 1, gc.getFontMetrics().getHeight());       gc.dispose();       canvas.setCaret(newCaret);       canvas.setFocus();     } else {       canvas.setCaret(null);     }     if (oldCaret != null)       oldCaret.dispose();   }   /**    * Sets the state of the "Example" widgets.    */   void setExampleWidgetState() {     super.setExampleWidgetState();     horizontalButton.setSelection((canvas.getStyle() & SWT.H_SCROLL) != 0);     verticalButton.setSelection((canvas.getStyle() & SWT.V_SCROLL) != 0);     borderButton.setSelection((canvas.getStyle() & SWT.BORDER) != 0);     noBackgroundButton         .setSelection((canvas.getStyle() & SWT.NO_BACKGROUND) != 0);     noFocusButton.setSelection((canvas.getStyle() & SWT.NO_FOCUS) != 0);     noMergePaintsButton         .setSelection((canvas.getStyle() & SWT.NO_MERGE_PAINTS) != 0);     noRedrawResizeButton         .setSelection((canvas.getStyle() & SWT.NO_REDRAW_RESIZE) != 0);     setCaret();   } } /*******************************************************************************  * 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  ******************************************************************************/ /**  * <code>ButtonTab</code> is the class that demonstrates SWT buttons.  */ class ButtonTab extends AlignableTab {   /* Example widgets and groups that contain them */   Button button1, button2, button3, button4, button5, button6;   Group textButtonGroup, imageButtonGroup;   /* Alignment widgets added to the "Control" group */   Button upButton, downButton;   /* Style widgets added to the "Style" group */   Button pushButton, checkButton, radioButton, toggleButton, arrowButton,       flatButton;   /**    * Creates the Tab within a given instance of ControlExample.    */   ButtonTab(ControlExample instance) {     super(instance);   }   /**    * Creates the "Control" group.    */   void createControlGroup() {     super.createControlGroup();     /* Create the controls */     upButton = new Button(alignmentGroup, SWT.RADIO);     upButton.setText(ControlExample.getResourceString("Up"));     downButton = new Button(alignmentGroup, SWT.RADIO);     downButton.setText(ControlExample.getResourceString("Down"));     /* Add the listeners */     SelectionListener selectionListener = new SelectionAdapter() {       public void widgetSelected(SelectionEvent event) {         if (!((Button) event.widget).getSelection())           return;         setExampleWidgetAlignment();       }     };     upButton.addSelectionListener(selectionListener);     downButton.addSelectionListener(selectionListener);   }   /**    * Creates the "Example" group.    */   void createExampleGroup() {     super.createExampleGroup();     /* Create a group for text buttons */     textButtonGroup = new Group(exampleGroup, SWT.NONE);     GridLayout gridLayout = new GridLayout();     textButtonGroup.setLayout(gridLayout);     gridLayout.numColumns = 3;     textButtonGroup         .setLayoutData(new GridData(GridData.GRAB_HORIZONTAL             | GridData.HORIZONTAL_ALIGN_FILL             | GridData.VERTICAL_ALIGN_FILL));     textButtonGroup.setText(ControlExample         .getResourceString("Text_Buttons"));     /* Create a group for the image buttons */     imageButtonGroup = new Group(exampleGroup, SWT.NONE);     gridLayout = new GridLayout();     imageButtonGroup.setLayout(gridLayout);     gridLayout.numColumns = 3;     imageButtonGroup         .setLayoutData(new GridData(GridData.GRAB_HORIZONTAL             | GridData.HORIZONTAL_ALIGN_FILL             | GridData.VERTICAL_ALIGN_FILL));     imageButtonGroup.setText(ControlExample         .getResourceString("Image_Buttons"));   }   /**    * Creates the "Example" widgets.    */   void createExampleWidgets() {     /* Compute the widget style */     int style = getDefaultStyle();     if (pushButton.getSelection())       style |= SWT.PUSH;     if (checkButton.getSelection())       style |= SWT.CHECK;     if (radioButton.getSelection())       style |= SWT.RADIO;     if (toggleButton.getSelection())       style |= SWT.TOGGLE;     if (flatButton.getSelection())       style |= SWT.FLAT;     if (borderButton.getSelection())       style |= SWT.BORDER;     if (leftButton.getSelection())       style |= SWT.LEFT;     if (rightButton.getSelection())       style |= SWT.RIGHT;     if (arrowButton.getSelection()) {       style |= SWT.ARROW;       if (upButton.getSelection())         style |= SWT.UP;       if (downButton.getSelection())         style |= SWT.DOWN;     } else {       if (centerButton.getSelection())         style |= SWT.CENTER;     }     /* Create the example widgets */     button1 = new Button(textButtonGroup, style);     button1.setText(ControlExample.getResourceString("One"));     button2 = new Button(textButtonGroup, style);     button2.setText(ControlExample.getResourceString("Two"));     button3 = new Button(textButtonGroup, style);     button3.setText(ControlExample.getResourceString("Three"));     button4 = new Button(imageButtonGroup, style);     button4.setImage(instance.images[ControlExample.ciClosedFolder]);     button5 = new Button(imageButtonGroup, style);     button5.setImage(instance.images[ControlExample.ciOpenFolder]);     button6 = new Button(imageButtonGroup, style);     button6.setImage(instance.images[ControlExample.ciTarget]);   }   /**    * Creates the "Style" group.    */   void createStyleGroup() {     super.createStyleGroup();     /* Create the extra widgets */     pushButton = new Button(styleGroup, SWT.RADIO);     pushButton.setText("SWT.PUSH");     checkButton = new Button(styleGroup, SWT.RADIO);     checkButton.setText("SWT.CHECK");     radioButton = new Button(styleGroup, SWT.RADIO);     radioButton.setText("SWT.RADIO");     toggleButton = new Button(styleGroup, SWT.RADIO);     toggleButton.setText("SWT.TOGGLE");     arrowButton = new Button(styleGroup, SWT.RADIO);     arrowButton.setText("SWT.ARROW");     flatButton = new Button(styleGroup, SWT.CHECK);     flatButton.setText("SWT.FLAT");     borderButton = new Button(styleGroup, SWT.CHECK);     borderButton.setText("SWT.BORDER");   }   /**    * Gets the "Example" widget children.    */   Control[] getExampleWidgets() {     return new Control[] { button1, button2, button3, button4, button5,         button6 };   }   /**    * Returns a list of set/get API method names (without the set/get prefix)    * that can be used to set/get values in the example control(s).    */   String[] getMethodNames() {     return new String[] { "Selection", "Text" };   }   /**    * Gets the text for the tab folder item.    */   String getTabText() {     return "Button";   }   /**    * Sets the alignment of the "Example" widgets.    */   void setExampleWidgetAlignment() {     int alignment = 0;     if (leftButton.getSelection())       alignment = SWT.LEFT;     if (centerButton.getSelection())       alignment = SWT.CENTER;     if (rightButton.getSelection())       alignment = SWT.RIGHT;     if (upButton.getSelection())       alignment = SWT.UP;     if (downButton.getSelection())       alignment = SWT.DOWN;     button1.setAlignment(alignment);     button2.setAlignment(alignment);     button3.setAlignment(alignment);     button4.setAlignment(alignment);     button5.setAlignment(alignment);     button6.setAlignment(alignment);   }   /**    * Sets the state of the "Example" widgets.    */   void setExampleWidgetState() {     super.setExampleWidgetState();     if (arrowButton.getSelection()) {       upButton.setEnabled(true);       centerButton.setEnabled(false);       downButton.setEnabled(true);     } else {       upButton.setEnabled(false);       centerButton.setEnabled(true);       downButton.setEnabled(false);     }     upButton.setSelection((button1.getStyle() & SWT.UP) != 0);     downButton.setSelection((button1.getStyle() & SWT.DOWN) != 0);     pushButton.setSelection((button1.getStyle() & SWT.PUSH) != 0);     checkButton.setSelection((button1.getStyle() & SWT.CHECK) != 0);     radioButton.setSelection((button1.getStyle() & SWT.RADIO) != 0);     toggleButton.setSelection((button1.getStyle() & SWT.TOGGLE) != 0);     arrowButton.setSelection((button1.getStyle() & SWT.ARROW) != 0);     flatButton.setSelection((button1.getStyle() & SWT.FLAT) != 0);     borderButton.setSelection((button1.getStyle() & SWT.BORDER) != 0);   } } /*******************************************************************************  * Copyright (c) 2000, 2003 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  ******************************************************************************/ /**  * <code>AlignableTab</code> is the abstract superclass of example controls  * that can be aligned.  */ abstract class AlignableTab extends Tab {   /* Alignment Controls */   Button leftButton, rightButton, centerButton;   /* Alignment Group */   Group alignmentGroup;   /**    * Creates the Tab within a given instance of ControlExample.    */   AlignableTab(ControlExample instance) {     super(instance);   }   /**    * Creates the "Control" group.    */   void createControlGroup() {     super.createControlGroup();     /* Create the group */     alignmentGroup = new Group(controlGroup, SWT.NONE);     alignmentGroup.setLayout(new GridLayout());     alignmentGroup.setLayoutData(new GridData(         GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_FILL));     alignmentGroup.setText(ControlExample.getResourceString("Alignment"));     /* Create the controls */     leftButton = new Button(alignmentGroup, SWT.RADIO);     leftButton.setText(ControlExample.getResourceString("Left"));     centerButton = new Button(alignmentGroup, SWT.RADIO);     centerButton.setText(ControlExample.getResourceString("Center"));     rightButton = new Button(alignmentGroup, SWT.RADIO);     rightButton.setText(ControlExample.getResourceString("Right"));     /* Add the listeners */     SelectionListener selectionListener = new SelectionAdapter() {       public void widgetSelected(SelectionEvent event) {         if (!((Button) event.widget).getSelection())           return;         setExampleWidgetAlignment();       }     };     leftButton.addSelectionListener(selectionListener);     centerButton.addSelectionListener(selectionListener);     rightButton.addSelectionListener(selectionListener);   }   /**    * Sets the alignment of the "Example" widgets.    */   abstract void setExampleWidgetAlignment();   /**    * Sets the state of the "Example" widgets.    */   void setExampleWidgetState() {     super.setExampleWidgetState();     Control[] controls = getExampleWidgets();     if (controls.length != 0) {       leftButton.setSelection((controls[0].getStyle() & SWT.LEFT) != 0);       centerButton           .setSelection((controls[0].getStyle() & SWT.CENTER) != 0);       rightButton.setSelection((controls[0].getStyle() & SWT.RIGHT) != 0);     }   } }