Package org.eclipse.sapphire.ui.forms.swt.internal

Source Code of org.eclipse.sapphire.ui.forms.swt.internal.CalendarBrowseActionHandler$Condition

/******************************************************************************
* Copyright (c) 2014 Oracle
* 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:
*    Konstantin Komissarchik - initial implementation and ongoing maintenance
******************************************************************************/

package org.eclipse.sapphire.ui.forms.swt.internal;

import java.util.Calendar;
import java.util.Date;

import org.eclipse.sapphire.MasterConversionService;
import org.eclipse.sapphire.ui.Presentation;
import org.eclipse.sapphire.ui.forms.BrowseActionHandler;
import org.eclipse.sapphire.ui.forms.PropertyEditorCondition;
import org.eclipse.sapphire.ui.forms.PropertyEditorPart;
import org.eclipse.sapphire.ui.forms.swt.FormComponentPresentation;
import org.eclipse.sapphire.ui.forms.swt.Popup;
import org.eclipse.sapphire.ui.forms.swt.PropertyEditorPresentation2;
import org.eclipse.sapphire.util.MutableReference;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.KeyAdapter;
import org.eclipse.swt.events.KeyEvent;
import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.DateTime;

/**
* Opens a calendar to allow date selection. Activates if the property is a value property of type Date.
*
* @author <a href="mailto:konstantin.komissarchik@oracle.com">Konstantin Komissarchik</a>
*/

public final class CalendarBrowseActionHandler extends BrowseActionHandler
{
    public static final String ID = "Sapphire.Browse.Calendar";
   
    public CalendarBrowseActionHandler()
    {
        setId( ID );
    }
   
    @Override
    protected String browse( final Presentation context )
    {
        final MutableReference<String> result = new MutableReference<String>();
       
        final Popup dialog = new Popup( ( (FormComponentPresentation) context ).shell(), null )
        {
            private DateTime calendar;
           
            @Override
            protected Point getInitialLocation( final Point size )
            {
                return ( (PropertyEditorPresentation2) context ).getActionPopupPosition( size.x, size.y );
            }

            @Override
            protected Control createContentArea( final Composite parent )
            {
                this.calendar = new DateTime( parent, SWT.CALENDAR );
               
                final Date existing = (Date) property().content();
               
                if( existing != null )
                {
                    final Calendar cal = Calendar.getInstance();
                    cal.setTime( existing );
                   
                    this.calendar.setYear( cal.get( Calendar.YEAR ) );
                    this.calendar.setMonth( cal.get( Calendar.MONTH ) );
                    this.calendar.setDay( cal.get( Calendar.DATE ) );
                }
               
                this.calendar.addMouseListener
                (
                    new MouseAdapter()
                    {
                        @Override
                        public void mouseDoubleClick( final MouseEvent event )
                        {
                            registerSelectionAndClose();
                        }
                    }
                );
               
                this.calendar.addKeyListener
                (
                    new KeyAdapter()
                    {
                        @Override
                        public void keyPressed( final KeyEvent event )
                        {
                            if( event.character == SWT.CR )
                            {
                                registerSelectionAndClose();
                            }
                        }
                    }
                );
               
                return calendar;
            }
           
            private void registerSelectionAndClose()
            {
                final Calendar cal = Calendar.getInstance();
                cal.set( this.calendar.getYear(), this.calendar.getMonth(), this.calendar.getDay() );
                final Date date = cal.getTime();
               
                result.set( property().service( MasterConversionService.class ).convert( date, String.class ) );
               
                close();
            }
        };
       
        dialog.setBlockOnOpen( true );
       
        dialog.open();
       
        return result.get();
    }
   
    public static final class Condition extends PropertyEditorCondition
    {
        @Override
        protected boolean evaluate( final PropertyEditorPart part )
        {
            return ( part.property().definition().getTypeClass() == Date.class );
        }
    }
   
}
TOP

Related Classes of org.eclipse.sapphire.ui.forms.swt.internal.CalendarBrowseActionHandler$Condition

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.