/******************************************************************************
* Copyright (c) 2011-2013, Linagora
*
* 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:
* Linagora - initial API and implementation
*******************************************************************************/
package com.ebmwebsourcing.petals.common.croquis.internal.provisional;
import java.util.List;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.ComboViewer;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.wizard.IWizardPage;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Label;
import com.ebmwebsourcing.petals.common.croquis.internal.CroquisContributionManager;
import com.ebmwebsourcing.petals.common.internal.PetalsCommonPlugin;
/**
* The page for the croquis wizard.
* @author Vincent Zurczak - EBM WebSourcing
*/
public class CroquisNewWizardPage extends WizardPage implements IWizardPage {
private ICroquisExtension selectedExtension;
private Image currentImage, defaultImage;
/**
* Constructor.
*/
public CroquisNewWizardPage() {
super( "Main Page" );
try {
ImageDescriptor desc = PetalsCommonPlugin.getImageDescriptor( "icons/screenshots/question-mark.png" );
this.defaultImage = desc.createImage();
} catch( Exception e ) {
PetalsCommonPlugin.log( e, IStatus.WARNING );
}
}
/*
* (non-Jsdoc)
* @see org.eclipse.jface.dialogs.DialogPage
* #dispose()
*/
@Override
public void dispose() {
// Super...
super.dispose();
// Destroy the images
if( this.defaultImage != null && ! this.defaultImage.isDisposed())
this.defaultImage.dispose();
if( this.currentImage != null && ! this.currentImage.isDisposed())
this.currentImage.dispose();
}
/*
* (non-Jsdoc)
* @see org.eclipse.jface.dialogs.IDialogPage
* #createControl(org.eclipse.swt.widgets.Composite)
*/
public void createControl( Composite parent ) {
// The top composite
Composite container = new Composite( parent, SWT.NONE );
GridLayout layout = new GridLayout( 2, true );
layout.horizontalSpacing = 8;
container.setLayout( layout );
container.setLayoutData( new GridData( GridData.FILL_BOTH ));
setControl( container );
// Update the page settings
setTitle( "New Petals Croquis" );
getShell().setText( "New Petals Croquis" );
setDescription( "Create a new croquis for Petals ESB." );
// The left part
final Composite leftContainer = new Composite( container, SWT.NONE );
layout = new GridLayout( 2, false );
layout.marginHeight = 0;
layout.marginTop = 2;
leftContainer.setLayout( layout );
leftContainer.setLayoutData( new GridData( GridData.FILL_BOTH ));
final Label l = new Label( leftContainer, SWT.NONE );
l.setText( "Croquis Type:" );
l.setToolTipText( "Select the kind of croquis to create" );
final ComboViewer croquisViewer = new ComboViewer( leftContainer, SWT.BORDER | SWT.READ_ONLY | SWT.DROP_DOWN );
croquisViewer.getCombo().setLayoutData( new GridData( GridData.FILL_HORIZONTAL ));
croquisViewer.setContentProvider( new ArrayContentProvider());
croquisViewer.setLabelProvider( new LabelProvider() {
@Override
public String getText( Object element ) {
return element instanceof String ? (String) element : ((ICroquisExtension) element).getTitle();
}
});
// The right part
Composite rightContainer = new Composite( container, SWT.BORDER );
rightContainer.setBackground( getShell().getDisplay().getSystemColor( SWT.COLOR_WHITE ));
layout = new GridLayout();
layout.marginWidth = 12;
layout.marginHeight = 12;
rightContainer.setLayout( layout );
rightContainer.setLayoutData( new GridData( GridData.FILL_HORIZONTAL ));
final Label screenshotLabel = new Label( rightContainer, SWT.NONE );
screenshotLabel.setBackground( getShell().getDisplay().getSystemColor( SWT.COLOR_WHITE ));
final Label descriptionLabel = new Label( rightContainer, SWT.NONE );
GridData layoutData = new GridData( SWT.CENTER, SWT.DEFAULT, true, false );
layoutData.verticalIndent = 7;
descriptionLabel.setLayoutData( layoutData );
descriptionLabel.setBackground( getShell().getDisplay().getSystemColor( SWT.COLOR_WHITE ));
// The selection change listener
croquisViewer.addSelectionChangedListener( new ISelectionChangedListener() {
public void selectionChanged( SelectionChangedEvent event ) {
Object o = ((IStructuredSelection) event.getSelection()).getFirstElement();
if( !( o instanceof ICroquisExtension ))
return;
if( o.equals( CroquisNewWizardPage.this.selectedExtension ))
return;
CroquisNewWizardPage.this.selectedExtension = (ICroquisExtension) o;
String text = ((ICroquisExtension) o).getDescription();
descriptionLabel.setText( text );
ImageDescriptor desc = ((ICroquisExtension) o).getScreenshot();
if( CroquisNewWizardPage.this.currentImage != null
&& CroquisNewWizardPage.this.currentImage != CroquisNewWizardPage.this.defaultImage ) {
CroquisNewWizardPage.this.currentImage.dispose();
CroquisNewWizardPage.this.currentImage = null;
}
if( desc != null ) {
try {
CroquisNewWizardPage.this.currentImage = desc.createImage();
} catch( Exception e ) {
PetalsCommonPlugin.log( e, IStatus.ERROR );
}
} else {
CroquisNewWizardPage.this.currentImage = CroquisNewWizardPage.this.defaultImage;
}
screenshotLabel.setImage( CroquisNewWizardPage.this.currentImage );
screenshotLabel.getParent().layout();
for( Control c : leftContainer.getChildren()) {
if( c != l && c != croquisViewer.getCombo())
c.dispose();
}
((ICroquisExtension) o).createControl( leftContainer, CroquisNewWizardPage.this );
leftContainer.layout();
}
});
// Initialize the rest
List<ICroquisExtension> ext = CroquisContributionManager.INSTANCE.getCroquisData();
if( ext.size() > 0 ) {
croquisViewer.setInput( ext );
croquisViewer.getCombo().select( 0 );
croquisViewer.getCombo().notifyListeners( SWT.Selection, new Event());
} else {
croquisViewer.setInput( "-- No Croquis Available --" );
}
}
/**
* Updates the page status.
* @param message an error message or null to make the page complete
*/
public void updateStatus( String message ) {
setErrorMessage( message );
setPageComplete( message == null );
}
/**
* @return the selectedExtension
*/
public ICroquisExtension getSelectedExtension() {
return this.selectedExtension;
}
}