/******************************************************************************* * Copyright (c) 2000, 2007 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.swt.examples.controlexample; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Item; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.MenuItem; import org.eclipse.swt.widgets.ToolBar; import org.eclipse.swt.widgets.ToolItem; import org.eclipse.swt.widgets.Widget; class ToolBarTab extends Tab { /** * 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. 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; } } /* Other widgets added to the "Other" group */ Button comboChildButton; /* Style widgets added to the "Style" group */ Button horizontalButton, verticalButton, flatButton, shadowOutButton, wrapButton, rightButton; /* Example widgets and groups that contain them */ ToolBar imageToolBar, textToolBar, imageTextToolBar; Group imageToolBarGroup, textToolBarGroup, imageTextToolBarGroup; /** * Creates the Tab within a given instance of ControlExample. */ ToolBarTab(ControlExample instance) { super(instance); } /** * Gets the short text for the tab folder item. */ public String getShortTabText() { return "TB"; } /** * 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(SWT.FILL, SWT.FILL, true, true)); 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(SWT.FILL, SWT.FILL, true, true)); 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(SWT.FILL, SWT.FILL, true, true)); 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. */ Widget[] getExampleWidgets() { return new Widget[] { 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); } }