/*******************************************************************************
* Copyright (c) 2002, 2013 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.presentation;
import org.eclipse.jface.dialogs.PopupDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.*;
import org.eclipse.swt.graphics.*;
import org.eclipse.swt.widgets.*;
import org.eclipse.ui.presentations.IPresentablePart;
final class StackPopup extends PopupDialog {
private final Control contentProxy;
private final Object[] parts;
private final SelectionListener selectionListener;
StackPopup( final Shell parent,
final Control contentProxy,
final Object[] parts,
final SelectionListener selectionListener )
{
super( parent,
SWT.RESIZE | SWT.ON_TOP,
false,
false,
false,
false,
null,
null );
this.contentProxy = contentProxy;
this.parts = parts;
this.selectionListener = selectionListener;
}
@Override
protected void adjustBounds() {
Display display = contentProxy.getDisplay();
Point position = display.map( contentProxy.getParent(),
null,
contentProxy.getLocation() );
getShell().setBounds( position.x - 1,
position.y + 1,
contentProxy.getSize().x + 4,
contentProxy.getSize().y + 2 );
}
@Override
public int open() {
int result = super.open();
Listener closeListener = new Listener() {
public void handleEvent( Event event ) {
close();
}
};
getShell().addListener( SWT.Deactivate, closeListener );
getShell().addListener( SWT.Close, closeListener );
contentProxy.addListener( SWT.Dispose, closeListener );
Shell controlShell = contentProxy.getShell();
controlShell.addListener( SWT.Move, closeListener );
getShell().setAlpha( 230 );
getShell().setBackgroundImage( Images.IMG_MIDDLE_CENTER );
getShell().setActive();
return result;
}
@Override
protected Control createDialogArea( final Composite parent ) {
final Table result = new Table( parent, SWT.NONE );
FontData fontData = result.getFont().getFontData()[ 0 ];
result.setFont( new Font( parent.getDisplay(),
fontData.getName(),
fontData.getHeight() + 4,
fontData.getStyle() ) );
result.setBackgroundImage( Images.IMG_MIDDLE_CENTER );
result.addControlListener( new ControlAdapter() {
@Override
public void controlResized( final ControlEvent evt ) {
result.removeControlListener( this );
Point size = result.getSize();
result.setSize( size.x + 25, size.y + 25 );
result.addControlListener( this );
}
} );
result.setRedraw( false );
result.setItemCount( parts.length );
TableItem[] items = result.getItems();
for( int i = 0; i < items.length; i++ ) {
TableItem item = items[ i ];
IPresentablePart part = ( IPresentablePart )parts[ i ];
item.setText( part.getTitle() );
item.setImage( part.getTitleImage() );
item.setData( part );
}
result.setRedraw( true );
result.addSelectionListener( selectionListener );
return result;
}
}