/****************************************************************************** * 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; } }