@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();
}