/*******************************************************************************
* Copyright (c) 2008, 2017 Innoopract Informationssysteme GmbH 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:
* Innoopract Informationssysteme GmbH - initial API and implementation
* EclipseSource - ongoing development
******************************************************************************/
package org.eclipse.rap.demo.controls;
import java.util.Calendar;
import org.eclipse.jface.dialogs.MessageDialog;
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.GridLayout;
import org.eclipse.swt.layout.RowLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.DateTime;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
class DateTimeTab extends ExampleTab {
private static final String PROP_CONTEXT_MENU = "contextMenu";
private static final String PROP_SELECTION_LISTENER = "selectionListener";
private DateTime dateTime;
private Group group1, group2, group3;
DateTimeTab() {
super( "DateTime" );
setDefaultStyle( SWT.BORDER | SWT.DATE | SWT.MEDIUM );
}
@Override
protected void createStyleControls( Composite parent ) {
group1 = new Group( styleComp, SWT.SHADOW_IN );
group1.setText( "Type" );
group1.setLayout( new RowLayout( SWT.VERTICAL ) );
createStyleButton( group1, "DATE", SWT.DATE, SWT.RADIO, true );
createStyleButton( group1, "TIME", SWT.TIME, SWT.RADIO, false );
createStyleButton( group1, "CALENDAR", SWT.CALENDAR, SWT.RADIO, false );
group2 = new Group( styleComp, SWT.SHADOW_IN );
group2.setText( "Details" );
group2.setLayout( new RowLayout( SWT.VERTICAL ) );
createStyleButton( group2, "SHORT", SWT.SHORT, SWT.RADIO, false );
createStyleButton( group2, "MEDIUM", SWT.MEDIUM, SWT.RADIO, true );
createStyleButton( group2, "LONG", SWT.LONG, SWT.RADIO, false );
createStyleButton( "DROP_DOWN", SWT.DROP_DOWN, false );
createStyleButton( "BORDER", SWT.BORDER, true );
createOrientationButton();
createVisibilityButton();
createEnablementButton();
createFontChooser();
createFgColorButton();
createBgColorButton();
createPropertyCheckbox( "Add Context Menu", PROP_CONTEXT_MENU );
createPropertyCheckbox( "Add Selection Listener", PROP_SELECTION_LISTENER );
group3 = new Group( parent, SWT.NONE );
group3.setText( "Min/Max Limit" );
group3.setLayout( new GridLayout( 3, false ) );
createMinMaxLimit( group3 );
}
@Override
protected void createExampleControls( Composite parent ) {
parent.setLayout( new RowLayout( SWT.VERTICAL ) );
int style = getStyle() | getStyle( group1 ) | getStyle( group2 );
dateTime = new DateTime( parent, style );
if( hasCreateProperty( PROP_CONTEXT_MENU ) ) {
Menu dateTimeMenu = new Menu( dateTime );
MenuItem dateTimeMenuItem = new MenuItem( dateTimeMenu, SWT.PUSH );
dateTimeMenuItem.addSelectionListener( new SelectionAdapter() {
@Override
public void widgetSelected( SelectionEvent event ) {
String message = "You requested a context menu for the DateTime";
MessageDialog.openInformation( dateTime.getShell(), "Information", message );
}
} );
dateTimeMenuItem.setText( "DateTime context menu item" );
dateTime.setMenu( dateTimeMenu );
}
if( hasCreateProperty( PROP_SELECTION_LISTENER ) ) {
dateTime.addSelectionListener( new SelectionListener() {
@Override
public void widgetSelected( SelectionEvent event ) {
String message = "DateTime WidgetSelected! Selected date: "
+ dateTime.getDay()
+ "/" + ( dateTime.getMonth() + 1 )
+ "/" + dateTime.getYear()
+ " " + dateTime.getHours()
+ ":" + dateTime.getMinutes()
+ ":" + dateTime.getSeconds();
log( message );
}
@Override
public void widgetDefaultSelected( SelectionEvent event ) {
log( "DateTime WidgetDefaultSelected!" );
}
} );
}
registerControl( dateTime );
}
protected Button createStyleButton( Composite parent,
String name,
int style,
int buttonStyle,
boolean checked )
{
Button button = new Button( parent, buttonStyle );
button.setText( name );
button.addSelectionListener( new SelectionAdapter() {
@Override
public void widgetSelected( SelectionEvent event ) {
createNew();
}
} );
button.setData( "style", new Integer( style ) );
button.setSelection( checked );
return button;
}
private void createMinMaxLimit( Composite parent ) {
Label minLabel = new Label(parent, SWT.NONE);
minLabel.setText( "Minimum" );
DateTime minDate = new DateTime( parent, SWT.DATE | SWT.MEDIUM | SWT.BORDER );
DateTime minTime = new DateTime( parent, SWT.TIME | SWT.SHORT | SWT.BORDER );
Label maxLabel = new Label(parent, SWT.NONE);
maxLabel.setText( "Maximum" );
DateTime maxDate = new DateTime( parent, SWT.DATE | SWT.MEDIUM | SWT.BORDER );
DateTime maxTime = new DateTime( parent, SWT.TIME | SWT.SHORT | SWT.BORDER );
Button clearButton = new Button( group3, SWT.PUSH );
clearButton.setText( "Clear" );
clearButton.addListener( SWT.Selection, new Listener() {
@Override
public void handleEvent( Event event ) {
dateTime.setMinimum( null );
dateTime.setMaximum( null );
}
} );
Button applyButton = new Button( group3, SWT.PUSH );
applyButton.setText( "Apply" );
applyButton.addListener( SWT.Selection, new Listener() {
@Override
public void handleEvent( Event event ) {
Calendar limit = Calendar.getInstance();
limit.set( minDate.getYear(),
minDate.getMonth(),
minDate.getDay(),
minTime.getHours(),
minTime.getMinutes(),
minTime.getSeconds() );
dateTime.setMinimum( limit.getTime() );
limit.set( maxDate.getYear(),
maxDate.getMonth(),
maxDate.getDay(),
maxTime.getHours(),
maxTime.getMinutes(),
maxTime.getSeconds() );
dateTime.setMaximum( limit.getTime() );
}
} );
}
protected int getStyle( Composite comp ) {
int result = SWT.NONE;
if( checkControl( comp ) ) {
Control[] ctrls = comp.getChildren();
if( ctrls.length != 0 ) {
for( int i = 0; i < ctrls.length; i++ ) {
if( ctrls[ i ] instanceof Button ) {
Button button = ( Button )ctrls[ i ];
if( button.getSelection() ) {
Object data = button.getData( "style" );
if( data != null && data instanceof Integer ) {
int style = ( ( Integer )data ).intValue();
result |= style;
}
}
}
}
}
}
return result;
}
}