diff examples/controlexample/MenuTab.d @ 78:4a04b6759f98

Clean up directory names
author John Reimer <terminal.node@gmail.com>
date Sat, 10 May 2008 13:32:45 -0700
parents
children eb84f9418bbf
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/examples/controlexample/MenuTab.d	Sat May 10 13:32:45 2008 -0700
@@ -0,0 +1,329 @@
+/*******************************************************************************
+ * 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
+ * Port to the D programming language:
+ *     Frank Benoit <benoit@tionex.de>
+ *******************************************************************************/
+module examples.controlexample.MenuTab;
+
+
+
+import dwt.DWT;
+import dwt.events.PaintEvent;
+import dwt.events.PaintListener;
+import dwt.events.SelectionAdapter;
+import dwt.events.SelectionEvent;
+import dwt.layout.GridData;
+import dwt.layout.GridLayout;
+import dwt.widgets.Button;
+import dwt.widgets.Group;
+import dwt.widgets.Label;
+import dwt.widgets.Menu;
+import dwt.widgets.MenuItem;
+import dwt.widgets.Shell;
+
+import examples.controlexample.Tab;
+import examples.controlexample.ControlExample;
+
+import dwt.dwthelper.utils;
+
+import tango.util.Convert;
+
+class MenuTab : 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;
+
+    /**
+     * Creates the Tab within a given instance of ControlExample.
+     */
+    this(ControlExample instance) {
+        super(instance);
+        shells = new Shell [4];
+    }
+
+    /**
+     * Close all the example shells.
+     */
+    void closeAllShells() {
+        for (int i = 0; i<shellCount; i++) {
+            if (shells[i] !is 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 |= DWT.LEFT_TO_RIGHT;
+        if (rightToLeftButton.getSelection()) orientation |= DWT.RIGHT_TO_LEFT;
+        int radioBehavior = 0;
+        if (noRadioGroupButton.getSelection()) radioBehavior |= DWT.NO_RADIO_GROUP;
+
+        /* Create the shell and menu(s) */
+        Shell shell = new Shell (DWT.SHELL_TRIM | orientation);
+        shells [shellCount] = shell;
+        if (barButton.getSelection ()) {
+            /* Create menu bar. */
+            Menu menuBar = new Menu(shell, DWT.BAR | radioBehavior);
+            shell.setMenuBar(menuBar);
+            hookListeners(menuBar);
+
+            if (dropDownButton.getSelection() && cascadeButton.getSelection()) {
+                /* Create cascade button and drop-down menu in menu bar. */
+                MenuItem item = new MenuItem(menuBar, DWT.CASCADE);
+                item.setText(getMenuItemText("Cascade"));
+                if (imagesButton.getSelection()) item.setImage(instance.images[ControlExample.ciOpenFolder]);
+                hookListeners(item);
+                Menu dropDownMenu = new Menu(shell, DWT.DROP_DOWN | radioBehavior);
+                item.setMenu(dropDownMenu);
+                hookListeners(dropDownMenu);
+
+                /* Create various menu items, depending on selections. */
+                createMenuItems(dropDownMenu, subMenuButton.getSelection(), subSubMenuButton.getSelection());
+            }
+        }
+
+        if (popUpButton.getSelection()) {
+            /* Create pop-up menu. */
+            Menu popUpMenu = new Menu(shell, DWT.POP_UP | radioBehavior);
+            shell.setMenu(popUpMenu);
+            hookListeners(popUpMenu);
+
+            /* Create various menu items, depending on selections. */
+            createMenuItems(popUpMenu, subMenuButton.getSelection(), subSubMenuButton.getSelection());
+        }
+
+        /* Set the size, title and open the shell. */
+        shell.setSize (300, 100);
+        shell.setText (ControlExample.getResourceString("Title") ~ to!(char[])(shellCount));
+        shell.addPaintListener(new class() PaintListener {
+            public void paintControl(PaintEvent e) {
+                e.gc.drawString(ControlExample.getResourceString("PopupMenuHere"), 20, 20);
+            }
+        });
+        shell.open ();
+        shellCount++;
+    }
+
+    /**
+     * Creates the "Control" group.
+     */
+    void createControlGroup () {
+        /*
+         * Create the "Control" group.  This is the group on the
+         * right half of each example tab.  For MenuTab, it consists of
+         * the Menu style group, the MenuItem style group and the 'other' group.
+         */
+        controlGroup = new Group (tabFolderPage, DWT.NONE);
+        controlGroup.setLayout (new GridLayout (2, true));
+        controlGroup.setLayoutData (new GridData (GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_FILL));
+        controlGroup.setText (ControlExample.getResourceString("Parameters"));
+
+        /* Create a group for the menu style controls */
+        styleGroup = new Group (controlGroup, DWT.NONE);
+        styleGroup.setLayout (new GridLayout ());
+        styleGroup.setLayoutData (new GridData (GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_FILL));
+        styleGroup.setText (ControlExample.getResourceString("Menu_Styles"));
+
+        /* Create a group for the menu item style controls */
+        menuItemStyleGroup = new Group (controlGroup, DWT.NONE);
+        menuItemStyleGroup.setLayout (new GridLayout ());
+        menuItemStyleGroup.setLayoutData (new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_FILL));
+        menuItemStyleGroup.setText (ControlExample.getResourceString("MenuItem_Styles"));
+
+        /* Create a group for the 'other' controls */
+        otherGroup = new Group (controlGroup, DWT.NONE);
+        otherGroup.setLayout (new GridLayout ());
+        otherGroup.setLayoutData (new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_FILL));
+        otherGroup.setText (ControlExample.getResourceString("Other"));
+    }
+
+    /**
+     * Creates the "Control" widget children.
+     */
+    void createControlWidgets () {
+
+        /* Create the menu style buttons */
+        barButton = new Button (styleGroup, DWT.CHECK);
+        barButton.setText ("DWT.BAR");
+        dropDownButton = new Button (styleGroup, DWT.CHECK);
+        dropDownButton.setText ("DWT.DROP_DOWN");
+        popUpButton = new Button (styleGroup, DWT.CHECK);
+        popUpButton.setText ("DWT.POP_UP");
+        noRadioGroupButton = new Button (styleGroup, DWT.CHECK);
+        noRadioGroupButton.setText ("DWT.NO_RADIO_GROUP");
+        leftToRightButton = new Button (styleGroup, DWT.RADIO);
+        leftToRightButton.setText ("DWT.LEFT_TO_RIGHT");
+        leftToRightButton.setSelection(true);
+        rightToLeftButton = new Button (styleGroup, DWT.RADIO);
+        rightToLeftButton.setText ("DWT.RIGHT_TO_LEFT");
+
+        /* Create the menu item style buttons */
+        cascadeButton = new Button (menuItemStyleGroup, DWT.CHECK);
+        cascadeButton.setText ("DWT.CASCADE");
+        checkButton = new Button (menuItemStyleGroup, DWT.CHECK);
+        checkButton.setText ("DWT.CHECK");
+        pushButton = new Button (menuItemStyleGroup, DWT.CHECK);
+        pushButton.setText ("DWT.PUSH");
+        radioButton = new Button (menuItemStyleGroup, DWT.CHECK);
+        radioButton.setText ("DWT.RADIO");
+        separatorButton = new Button (menuItemStyleGroup, DWT.CHECK);
+        separatorButton.setText ("DWT.SEPARATOR");
+
+        /* Create the 'other' buttons */
+        imagesButton = new Button (otherGroup, DWT.CHECK);
+        imagesButton.setText (ControlExample.getResourceString("Images"));
+        acceleratorsButton = new Button (otherGroup, DWT.CHECK);
+        acceleratorsButton.setText (ControlExample.getResourceString("Accelerators"));
+        mnemonicsButton = new Button (otherGroup, DWT.CHECK);
+        mnemonicsButton.setText (ControlExample.getResourceString("Mnemonics"));
+        subMenuButton = new Button (otherGroup, DWT.CHECK);
+        subMenuButton.setText (ControlExample.getResourceString("SubMenu"));
+        subSubMenuButton = new Button (otherGroup, DWT.CHECK);
+        subSubMenuButton.setText (ControlExample.getResourceString("SubSubMenu"));
+
+        /* Create the "create" and "closeAll" buttons (and a 'filler' label to place them) */
+        new Label(controlGroup, DWT.NONE);
+        createButton = new Button (controlGroup, DWT.NONE);
+        createButton.setLayoutData (new GridData (GridData.HORIZONTAL_ALIGN_END));
+        createButton.setText (ControlExample.getResourceString("Create_Shell"));
+        closeAllButton = new Button (controlGroup, DWT.NONE);
+        closeAllButton.setLayoutData (new GridData (GridData.HORIZONTAL_ALIGN_BEGINNING));
+        closeAllButton.setText (ControlExample.getResourceString("Close_All_Shells"));
+
+        /* Add the listeners */
+        createButton.addSelectionListener(new class() SelectionAdapter {
+            public void widgetSelected(SelectionEvent e) {
+                createButtonSelected(e);
+            }
+        });
+        closeAllButton.addSelectionListener(new class() SelectionAdapter {
+            public void widgetSelected(SelectionEvent e) {
+                closeAllShells ();
+            }
+        });
+        subMenuButton.addSelectionListener(new class() SelectionAdapter {
+            public void widgetSelected(SelectionEvent e) {
+                subSubMenuButton.setEnabled (subMenuButton.getSelection ());
+            }
+        });
+
+        /* Set the default state */
+        barButton.setSelection (true);
+        dropDownButton.setSelection (true);
+        popUpButton.setSelection (true);
+        cascadeButton.setSelection (true);
+        checkButton.setSelection (true);
+        pushButton.setSelection (true);
+        radioButton.setSelection (true);
+        separatorButton.setSelection (true);
+        subSubMenuButton.setEnabled (subMenuButton.getSelection ());
+    }
+
+    /* Create various menu items, depending on selections. */
+    void createMenuItems(Menu menu, bool createSubMenu, bool createSubSubMenu) {
+        MenuItem item;
+        if (pushButton.getSelection()) {
+            item = new MenuItem(menu, DWT.PUSH);
+            item.setText(getMenuItemText("Push"));
+            if (acceleratorsButton.getSelection()) item.setAccelerator(DWT.MOD1 + DWT.MOD2 + 'P');
+            if (imagesButton.getSelection()) item.setImage(instance.images[ControlExample.ciClosedFolder]);
+            hookListeners(item);
+        }
+
+        if (separatorButton.getSelection()) {
+            new MenuItem(menu, DWT.SEPARATOR);
+        }
+
+        if (checkButton.getSelection()) {
+            item = new MenuItem(menu, DWT.CHECK);
+            item.setText(getMenuItemText("Check"));
+            if (acceleratorsButton.getSelection()) item.setAccelerator(DWT.MOD1 + DWT.MOD2 + 'C');
+            if (imagesButton.getSelection()) item.setImage(instance.images[ControlExample.ciOpenFolder]);
+            hookListeners(item);
+        }
+
+        if (radioButton.getSelection()) {
+            item = new MenuItem(menu, DWT.RADIO);
+            item.setText(getMenuItemText("1Radio"));
+            if (acceleratorsButton.getSelection()) item.setAccelerator(DWT.MOD1 + DWT.MOD2 + '1');
+            if (imagesButton.getSelection()) item.setImage(instance.images[ControlExample.ciTarget]);
+            item.setSelection(true);
+            hookListeners(item);
+
+            item = new MenuItem(menu, DWT.RADIO);
+            item.setText(getMenuItemText("2Radio"));
+            if (acceleratorsButton.getSelection()) item.setAccelerator(DWT.MOD1 + DWT.MOD2 + '2');
+            if (imagesButton.getSelection()) item.setImage(instance.images[ControlExample.ciTarget]);
+            hookListeners(item);
+        }
+
+        if (createSubMenu && cascadeButton.getSelection()) {
+            /* Create cascade button and drop-down menu for the sub-menu. */
+            item = new MenuItem(menu, DWT.CASCADE);
+            item.setText(getMenuItemText("Cascade"));
+            if (imagesButton.getSelection()) item.setImage(instance.images[ControlExample.ciOpenFolder]);
+            hookListeners(item);
+            Menu subMenu = new Menu(menu.getShell(), DWT.DROP_DOWN);
+            item.setMenu(subMenu);
+            hookListeners(subMenu);
+
+            createMenuItems(subMenu, createSubSubMenu, false);
+        }
+    }
+
+    char[] getMenuItemText(char[] item) {
+        bool cascade = ( item == "Cascade");
+        bool mnemonic = mnemonicsButton.getSelection();
+        bool accelerator = acceleratorsButton.getSelection();
+        char acceleratorKey = item[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.
+     */
+    char[] getTabText () {
+        return "Menu";
+    }
+}