/******************************************************************************* * Copyright (c) 2000, 2012 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.swt.examples.controlexample; import org.eclipse.swt.*; import org.eclipse.swt.widgets.*; import org.eclipse.swt.layout.*; import org.eclipse.swt.events.*; 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"; } }