blob: 51367f0ebb0a6a84ea758bf86bc01ff2b6914560 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2010, 2011 EclipseSource 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:
* Holger Staudacher - initial API and implementation
*******************************************************************************/
package org.eclipse.libra.warproducts.ui.editor;
import org.eclipse.pde.core.IModelChangedEvent;
import org.eclipse.pde.internal.core.iproduct.IProduct;
import org.eclipse.pde.internal.core.iproduct.IProductModel;
import org.eclipse.pde.internal.ui.PDEUIMessages;
import org.eclipse.pde.internal.ui.editor.*;
import org.eclipse.pde.internal.ui.parts.FormEntry;
import org.eclipse.swt.dnd.Clipboard;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.*;
import org.eclipse.ui.IActionBars;
import org.eclipse.ui.IEditorSite;
import org.eclipse.ui.forms.widgets.*;
public class GeneralInfoSection extends PDESection {
private FormEntry idEntry;
private FormEntry nameEntry;
private FormEntry versionEntry;
private static int NUM_COLUMNS = 3;
public GeneralInfoSection( final PDEFormPage page, final Composite parent ) {
super( page, parent, Section.DESCRIPTION );
createClient( getSection(), page.getEditor().getToolkit() );
}
protected void createClient( final Section section,
final FormToolkit toolkit )
{
section.setText( PDEUIMessages.GeneralInfoSection_title );
section.setDescription( PDEUIMessages.GeneralInfoSection_desc );
TableWrapLayout wrapLayout
= FormLayoutFactory.createClearTableWrapLayout( false, 1 );
section.setLayout( wrapLayout );
TableWrapData data = new TableWrapData( TableWrapData.FILL_GRAB );
data.colspan = 2;
section.setLayoutData( data );
Composite client = toolkit.createComposite( section );
GridLayout gridLayout
= FormLayoutFactory.createSectionClientGridLayout( false, NUM_COLUMNS );
client.setLayout( gridLayout );
IEditorSite site = getPage().getPDEEditor().getEditorSite();
IActionBars actionBars = site.getActionBars();
createIdEntry( client, toolkit, actionBars );
createVersionEntry( client, toolkit, actionBars );
createNameEntry( client, toolkit, actionBars );
toolkit.paintBordersFor( client );
section.setClient( client );
getModel().addModelChangedListener( this );
}
public void dispose() {
IProductModel model = getModel();
if( model != null ) {
model.removeModelChangedListener( this );
}
super.dispose();
}
private void createNameEntry( final Composite client,
final FormToolkit toolkit,
final IActionBars actionBars )
{
nameEntry = new FormEntry( client,
toolkit,
PDEUIMessages.ProductInfoSection_productname,
null,
false );
nameEntry.setFormEntryListener( new FormEntryAdapter( this, actionBars ) {
public void textValueChanged( FormEntry entry ) {
getProduct().setName( entry.getValue().trim() );
}
} );
GridData gd = new GridData( GridData.FILL_HORIZONTAL );
gd.grabExcessHorizontalSpace = true;
gd.horizontalSpan = 2;
nameEntry.getText().setLayoutData( gd );
nameEntry.setEditable( isEditable() );
}
private void createIdEntry( final Composite client,
final FormToolkit toolkit,
final IActionBars actionBars )
{
idEntry = new FormEntry( client,
toolkit,
PDEUIMessages.ProductInfoSection_id,
null,
false );
idEntry.setFormEntryListener( new FormEntryAdapter( this, actionBars ) {
public void textValueChanged( FormEntry entry ) {
getProduct().setId( entry.getValue().trim() );
}
} );
GridData gd = new GridData( GridData.FILL_HORIZONTAL );
gd.grabExcessHorizontalSpace = true;
gd.horizontalSpan = 2;
idEntry.getText().setLayoutData( gd );
idEntry.setEditable( isEditable() );
}
private void createVersionEntry( final Composite client,
final FormToolkit toolkit,
final IActionBars actionBars )
{
versionEntry = new FormEntry( client,
toolkit,
PDEUIMessages.ProductInfoSection_version,
null,
false );
versionEntry.setFormEntryListener( new FormEntryAdapter( this, actionBars )
{
public void textValueChanged( FormEntry entry ) {
getProduct().setVersion( entry.getValue().trim() );
}
} );
GridData gd = new GridData( GridData.FILL_HORIZONTAL );
gd.grabExcessHorizontalSpace = true;
gd.horizontalSpan = 2;
versionEntry.getText().setLayoutData( gd );
versionEntry.setEditable( isEditable() );
}
public void commit( final boolean onSave ) {
idEntry.commit();
nameEntry.commit();
versionEntry.commit();
super.commit( onSave );
}
public void cancelEdit() {
idEntry.cancelEdit();
nameEntry.cancelEdit();
versionEntry.cancelEdit();
super.cancelEdit();
}
private IProductModel getModel() {
return ( IProductModel )getPage().getPDEEditor().getAggregateModel();
}
private IProduct getProduct() {
return getModel().getProduct();
}
public void refresh() {
IProduct product = getProduct();
if( product.getId() != null ) {
idEntry.setValue( product.getId(), true );
}
if( product.getName() != null ) {
nameEntry.setValue( product.getName(), true );
}
if( product.getVersion() != null ) {
versionEntry.setValue( product.getVersion(), true );
}
super.refresh();
}
public void modelChanged( final IModelChangedEvent e ) {
if( e.getChangeType() == IModelChangedEvent.WORLD_CHANGED ) {
handleModelEventWorldChanged( e );
} else {
String prop = e.getChangedProperty();
Object[] objects = e.getChangedObjects();
if( !( prop == null || objects == null
|| !( objects[ 0 ] instanceof IProduct ) ) )
{
if( prop.equals( IProduct.P_UID ) ) {
idEntry.setValue( e.getNewValue().toString(), true );
} else if( prop.equals( IProduct.P_NAME ) ) {
nameEntry.setValue( e.getNewValue().toString(), true );
} else if( prop.equals( IProduct.P_VERSION ) ) {
versionEntry.setValue( e.getNewValue().toString(), true );
}
}
}
}
private void handleModelEventWorldChanged( final IModelChangedEvent event ) {
refresh();
getPage().setLastFocusControl( idEntry.getText() );
}
public boolean canPaste( final Clipboard clipboard ) {
boolean result = false;
Display d = getSection().getDisplay();
Control c = d.getFocusControl();
if( c instanceof Text ) {
result = true;
}
return result;
}
}