/*******************************************************************************
* Copyright (c) 2000, 2006 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.events.SelectionListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Shell;
class ShellTab extends Tab {
Button createButton, closeAllButton;
Button imageButton;
Button modelessButton, primaryModalButton, applicationModalButton, systemModalButton;
/* Style widgets added to the "Style" groups, and "Other" group */
Button noParentButton, parentButton;
Button noTrimButton, closeButton, titleButton, minButton, maxButton, borderButton, resizeButton, onTopButton,
toolButton;
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);
}
/**
* 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
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]);
if (backgroundImageButton.getSelection())
currentShell.setBackgroundImage(instance.images[ControlExample.ciBackground]);
hookListeners(currentShell);
currentShell.open();
shellCount++;
}
/**
* 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;
}
}
/**
* 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;
}
/**
* 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"));
backgroundImageButton = new Button(otherGroup, SWT.CHECK);
backgroundImageButton.setText(ControlExample.getResourceString("BackgroundImage"));
/* 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);
backgroundImageButton.setSelection(false);
}
/**
* Gets the text for the tab folder item.
*/
String getTabText() {
return "Shell";
}
}