blob: 591c39234357457db6b91e6c8f865481ee38ec71 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2002, 2013 Innoopract Informationssysteme GmbH.
* 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:
* Innoopract Informationssysteme GmbH - initial API and implementation
* EclipseSource - ongoing development
******************************************************************************/
package org.eclipse.rap.demo.controls;
import java.util.ArrayList;
import java.util.Iterator;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ControlAdapter;
import org.eclipse.swt.events.ControlEvent;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.ShellAdapter;
import org.eclipse.swt.events.ShellEvent;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.layout.RowLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
public class ShellTab extends ExampleTab {
private static final String ICON_IMAGE_PATH = "resources/newfile_wiz.gif";
private final java.util.List<Shell> shells;
private int shellCounter;
private final ShellAdapter confirmCloseListener;
private Image shellImage;
private Button createInvisibleButton;
private Button createAsDialogButton;
private Button createWithMenuButton;
private Button showClientAreaButton;
private Button confirmCloseButton;
// private Button customBgColorButton;
private int alpha = 255;
public ShellTab() {
super( "Shell" );
shells = new ArrayList<Shell>();
confirmCloseListener = new ShellAdapter() {
@Override
public void shellClosed( final ShellEvent event ) {
Shell shell = ( Shell )event.widget;
String msg = "Close " + shell.getText() + "?";
boolean canClose = MessageDialog.openConfirm( shell, "Confirm", msg );
event.doit = canClose;
}
};
setDefaultStyle( SWT.SHELL_TRIM );
}
@Override
protected void createStyleControls( Composite parent ) {
createStyleButton( "BORDER", SWT.BORDER );
createStyleButton( "SHELL_TRIM", SWT.SHELL_TRIM, true );
createStyleButton( "DIALOG_TRIM", SWT.DIALOG_TRIM );
createStyleButton( "APPLICATION_MODAL", SWT.APPLICATION_MODAL );
createStyleButton( "PRIMARY_MODAL", SWT.PRIMARY_MODAL );
createStyleButton( "TITLE", SWT.TITLE );
createStyleButton( "MIN", SWT.MIN );
createStyleButton( "MAX", SWT.MAX );
createStyleButton( "CLOSE", SWT.CLOSE );
createStyleButton( "RESIZE", SWT.RESIZE );
createStyleButton( "TOOL", SWT.TOOL );
createStyleButton( "SHEET", SWT.SHEET );
createStyleButton( "ON_TOP", SWT.ON_TOP );
createInvisibleButton = createPropertyButton( "Create invisible" );
createAsDialogButton = createPropertyButton( "Create as dialog" );
createWithMenuButton = createPropertyButton( "Add menu" );
showClientAreaButton = createPropertyButton( "Show client area" );
confirmCloseButton = createPropertyButton( "Confirm Close" );
// customBgColorButton = createPropertyButton( "Custom background" );
createAlphaControls( parent );
}
@Override
protected void createExampleControls( Composite parent ) {
parent.setLayout( new RowLayout( SWT.VERTICAL ) );
if( shellImage == null ) {
shellImage = Util.loadImage( parent.getDisplay(), ICON_IMAGE_PATH );
}
Button openShellButton = new Button( parent, SWT.PUSH );
openShellButton.setText( "Open Shell" );
openShellButton.addSelectionListener( new SelectionAdapter() {
@Override
public void widgetSelected( final SelectionEvent event ) {
createShell();
}} );
Button bringFirstToTopButton = new Button( parent, SWT.PUSH );
bringFirstToTopButton.setText( "Bring first Shell to top" );
bringFirstToTopButton.addSelectionListener( new SelectionAdapter() {
@Override
public void widgetSelected( SelectionEvent event ) {
Shell[] shells = getShells();
if( shells.length > 0 ) {
shells[ 0 ].open();
}
}
} );
Button showAllButton = new Button( parent, SWT.PUSH );
showAllButton.setText( "Show All Shells" );
showAllButton.addSelectionListener( new SelectionAdapter() {
@Override
public void widgetSelected( SelectionEvent event ) {
setShellsVisible( true );
}
} );
Button hideAllButton = new Button( parent, SWT.PUSH );
hideAllButton.setText( "Hide All Shells" );
hideAllButton.addSelectionListener( new SelectionAdapter() {
@Override
public void widgetSelected( SelectionEvent event ) {
setShellsVisible( false );
}
} );
Button MaximizeAllButton = new Button( parent, SWT.PUSH );
MaximizeAllButton.setText( "Maximize All Shells" );
MaximizeAllButton.addSelectionListener( new SelectionAdapter() {
@Override
public void widgetSelected( SelectionEvent event ) {
setShellsMaximized( true );
}
} );
Button minimizeAllButton = new Button( parent, SWT.PUSH );
minimizeAllButton.setText( "Minimize All Shells" );
minimizeAllButton.addSelectionListener( new SelectionAdapter() {
@Override
public void widgetSelected( SelectionEvent event ) {
setShellsMinimized( true );
}
} );
Button restoreAllButton = new Button( parent, SWT.PUSH );
restoreAllButton.setText( "Restore All Shells" );
restoreAllButton.addSelectionListener( new SelectionAdapter() {
@Override
public void widgetSelected( SelectionEvent event ) {
setShellsMinimized( false );
setShellsMaximized( false );
}
} );
Button enableAllButton = new Button( parent, SWT.PUSH );
enableAllButton.setText( "Enable All Shells" );
enableAllButton.addSelectionListener( new SelectionAdapter() {
@Override
public void widgetSelected( SelectionEvent event ) {
setShellsEnabled( true );
}
} );
Button disableAllButton = new Button( parent, SWT.PUSH );
disableAllButton.setText( "Disable All Shells" );
disableAllButton.addSelectionListener( new SelectionAdapter() {
@Override
public void widgetSelected( SelectionEvent event ) {
setShellsEnabled( false );
}
} );
Button closeAllButton = new Button( parent, SWT.PUSH );
closeAllButton.setText( "Close All Shells" );
closeAllButton.addSelectionListener( new SelectionAdapter() {
@Override
public void widgetSelected( SelectionEvent event ) {
closeShells();
}} );
}
private void createAlphaControls( Composite parent ) {
Composite comp = new Composite( parent, SWT.NONE );
comp.setLayout( new GridLayout( 3, false ) );
Label label = new Label( comp, SWT.NONE );
label.setText( "Alpha" );
final Text text = new Text( comp, SWT.BORDER );
text.setText( "255" );
Button button = new Button( comp, SWT.PUSH );
button.setText( "set" );
button.addSelectionListener( new SelectionAdapter() {
@Override
public void widgetSelected( SelectionEvent event ) {
try {
alpha = Integer.parseInt( text.getText() );
} catch( NumberFormatException ignore ) {
// ignore
}
}
} );
}
private void createShell() {
Shell shell;
if( createAsDialogButton.getSelection() ) {
shell = new Shell( getShell(), getStyle() );
} else {
shell = new Shell( getShell().getDisplay(), getStyle() );
}
shell.setLocation( getNextShellLocation() );
createShellContents( shell );
shellCounter++;
shell.setText( "Test Shell " + shellCounter );
shell.setAlpha( alpha );
shell.setImage( shellImage );
if( confirmCloseButton.getSelection() ) {
shell.addShellListener( confirmCloseListener );
}
if( !createInvisibleButton.getSelection() ) {
shell.open();
}
shells.add( shell );
}
private void createShellContents( final Shell shell ) {
shell.setSize( 300, 200 );
if( createWithMenuButton.getSelection() ) {
createMenuBar( shell );
}
final Composite comp1 = new Composite( shell, SWT.NONE );
final Composite comp2 = new Composite( shell, SWT.NONE );
comp2.moveAbove( comp1 );
if( showClientAreaButton.getSelection() ) {
comp1.setBackground( new Color( shell.getDisplay(), 200, 0, 0 ) );
comp2.setBackground( new Color( shell.getDisplay(), 200, 200, 200 ) );
}
Rectangle area = shell.getClientArea();
comp1.setBounds( area.x, area.y, area.width, area.height );
comp2.setBounds( area.x + 1, area.y + 1, area.width - 2, area.height - 2 );
final Button closeButton = new Button( comp2, SWT.PUSH );
closeButton.setText( "Close This Shell" );
closeButton.pack();
int centerX = ( area.width - area.x ) / 2;
closeButton.setLocation( centerX - closeButton.getSize().x / 2, area.height - 45 );
closeButton.addSelectionListener( new SelectionAdapter() {
@Override
public void widgetSelected( final SelectionEvent event ) {
shell.close();
}
} );
shell.addControlListener( new ControlAdapter() {
@Override
public void controlResized( final ControlEvent event ) {
Rectangle area = shell.getClientArea();
comp1.setBounds( area.x, area.y, area.width, area.height );
comp2.setBounds( area.x + 1, area.y + 1, area.width - 2, area.height - 2 );
int centerX = ( area.width - area.x ) / 2;
closeButton.setLocation( centerX - closeButton.getSize().x / 2, area.height - 45 );
}
} );
}
private void createMenuBar( Shell shell ) {
// menu bar
Menu menuBar = new Menu( shell, SWT.BAR );
shell.setMenuBar( menuBar );
MenuItem fileItem = new MenuItem( menuBar, SWT.CASCADE );
fileItem.setText( "File" );
MenuItem editItem = new MenuItem( menuBar, SWT.CASCADE );
editItem.setText( "Edit" );
MenuItem searchItem = new MenuItem( menuBar, SWT.CASCADE );
searchItem.setText( "Search" );
MenuItem disabledItem = new MenuItem( menuBar, SWT.CASCADE );
disabledItem.setText( "Disabled" );
disabledItem.setEnabled( false );
new MenuItem( menuBar, SWT.CASCADE ).setText( "Item 6" );
new MenuItem( menuBar, SWT.CASCADE ).setText( "Item 7" );
new MenuItem( menuBar, SWT.CASCADE ).setText( "Item 8" );
new MenuItem( menuBar, SWT.CASCADE ).setText( "Item 9" );
// file menu
Menu fileMenu = new Menu( shell, SWT.DROP_DOWN );
fileItem.setMenu( fileMenu );
MenuItem newItem = new MenuItem( fileMenu, SWT.PUSH );
newItem.setText( "&New\tStrg+FOO" );
newItem.setImage( Util.loadImage( shell.getDisplay(), "resources/newfile_wiz.gif" ) );
new MenuItem( fileMenu, SWT.PUSH ).setText( "Open" );
new MenuItem( fileMenu, SWT.PUSH ).setText( "Close" );
// edit menu
Menu editMenu = new Menu( shell, SWT.DROP_DOWN );
editItem.setMenu( editMenu );
MenuItem item;
new MenuItem( editMenu, SWT.PUSH ).setText( "Copy" );
new MenuItem( editMenu, SWT.PUSH ).setText( "Paste" );
new MenuItem( editMenu, SWT.SEPARATOR );
// cascade menu
item = new MenuItem( editMenu, SWT.CASCADE );
item.setText( "Insert" );
Menu cascadeMenu = new Menu( shell, SWT.DROP_DOWN );
item.setMenu( cascadeMenu );
new MenuItem( cascadeMenu, SWT.PUSH ).setText( "Date" );
new MenuItem( cascadeMenu, SWT.PUSH ).setText( "Line Break" );
// search
Menu searchMenu = new Menu( shell, SWT.DROP_DOWN );
searchItem.setMenu( searchMenu );
new MenuItem( searchMenu, SWT.PUSH ).setText( "Enabled" );
item = new MenuItem( searchMenu, SWT.PUSH );
item.setText( "Disabled" );
item.setEnabled( false );
item = new MenuItem( searchMenu, SWT.PUSH );
item.setText( "Push\tCtrl+Shift+P" );
item.setAccelerator( SWT.MOD1 + SWT.MOD2 + 'P' );
new MenuItem( searchMenu, SWT.SEPARATOR );
item = new MenuItem( searchMenu, SWT.CHECK );
item.setText( "Check\tCtrl+Shift+C" );
item.setAccelerator( SWT.MOD1 + SWT.MOD2 + 'C' );
item = new MenuItem( searchMenu, SWT.RADIO );
item.setText( "Radio 1\tCtrl+Shift+1" );
item.setAccelerator( SWT.MOD1 + SWT.MOD2 + '1' );
item = new MenuItem( searchMenu, SWT.RADIO );
item.setText( "Radio 2\tCtrl+Shift+2" );
item.setAccelerator( SWT.MOD1 + SWT.MOD2 + '2' );
item = new MenuItem( searchMenu, SWT.RADIO );
item.setText( "Radio 3\tCtrl+Shift+3" );
item.setAccelerator( SWT.MOD1 + SWT.MOD2 + '3' );
item.setEnabled( false );
// disabled
Menu disabledMenu = new Menu( shell, SWT.DROP_DOWN );
disabledMenu.setEnabled( false );
disabledItem.setMenu( disabledMenu );
new MenuItem( disabledMenu, SWT.PUSH ).setText( "Import" );
new MenuItem( disabledMenu, SWT.PUSH ).setText( "Export" );
}
private Point getNextShellLocation() {
Point result = getShell().getLocation();
int count = getShells().length % 12;
result.x += 50 + count * 10;
result.y += 50 + count * 10;
return result ;
}
private void closeShells() {
Shell[] shells2 = getShells();
for( int i = 0; i < shells2.length; i++ ) {
shells2[ i ].removeShellListener( confirmCloseListener );
shells2[ i ].close();
shells2[ i ].dispose();
}
}
private void setShellsVisible( boolean visible ) {
Shell[] shells = getShells();
for( int i = 0; i < shells.length; i++ ) {
shells[ i ].setVisible( visible );
}
}
private void setShellsEnabled( boolean enabled ) {
Shell[] shells = getShells();
for( int i = 0; i < shells.length; i++ ) {
shells[ i ].setEnabled( enabled );
}
}
private void setShellsMinimized( boolean minimized ) {
Shell[] shells = getShells();
for( int i = 0; i < shells.length; i++ ) {
shells[ i ].setMinimized( minimized );
}
}
private void setShellsMaximized( boolean maximized ) {
Shell[] shells = getShells();
for( int i = 0; i < shells.length; i++ ) {
shells[ i ].setMaximized( maximized );
}
}
private Shell[] getShells() {
// remove eventually disposed of shells (may happen when shells without
// ShellListeners are created and close by user interaction)
Shell[] result;
Iterator<Shell> iter = shells.iterator();
while( iter.hasNext() ) {
Shell shell = iter.next();
if( shell.isDisposed() ) {
iter.remove();
}
}
result = new Shell[ shells.size() ];
shells.toArray( result );
return result;
}
}