/*****************************************************************************
* Copyright (c) 2006, 2007 g-Eclipse Consortium
* 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
*
* Initial development of the original code was made for the
* g-Eclipse project founded by European Union
* project number: FP6-IST-034327 http://www.geclipse.eu/
*
* Contributors:
* Mathias Stuempert - initial API and implementation
*****************************************************************************/
package eu.geclipse.ui.views;
import org.eclipse.jface.viewers.IBaseLabelProvider;
import org.eclipse.jface.viewers.IContentProvider;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeColumn;
import org.eclipse.ui.actions.ActionGroup;
import eu.geclipse.core.model.IGridElement;
import eu.geclipse.core.model.IGridElementManager;
import eu.geclipse.core.model.IGridModelListener;
import eu.geclipse.ui.internal.actions.ActionGroupManager;
import eu.geclipse.ui.internal.actions.ViewModeActions;
import eu.geclipse.ui.providers.ConfigurableContentProvider;
import eu.geclipse.ui.providers.GridModelLabelProvider;
import eu.geclipse.ui.providers.IConfigurationListener;
/**
* Base class for all views that want to show managed elements.
*/
public abstract class ElementManagerViewPart
extends TreeControlViewPart
implements IGridModelListener {
TreeColumn projectColumn;
/**
* Standard creator that creates a new element manager.
*/
protected ElementManagerViewPart() {
IGridElementManager manager = getManager();
manager.addGridModelListener( this );
}
/* (non-Javadoc)
* @see org.eclipse.ui.part.WorkbenchPart#dispose()
*/
@Override
public void dispose() {
IGridElementManager manager = getManager();
manager.removeGridModelListener( this );
super.dispose();
}
@Override
protected void contributeAdditionalActions( final ActionGroupManager groups ) {
ActionGroup group = new ViewModeActions( this );
groups.addGroup( group );
}
/**
* Get the manager that is used as the root element for the
* viewer.
*
* @return The root element of the viewer. Has to be an instance of
* an {@link IGridElementManager}.
*/
protected abstract IGridElementManager getManager();
/* (non-Javadoc)
* @see eu.geclipse.ui.views.GridModelViewPart#getRootElement()
*/
@Override
protected IGridElement getRootElement() {
return getManager();
}
protected ConfigurableContentProvider createConfigurableContentProvider() {
ConfigurableContentProvider provider
= new ConfigurableContentProvider();
return provider;
}
/* (non-Javadoc)
* @see eu.geclipse.ui.views.GridModelViewPart#createContentProvider()
*/
@Override
protected IContentProvider createContentProvider() {
ConfigurableContentProvider provider
= createConfigurableContentProvider();
provider.addConfigurationListener( new IConfigurationListener() {
private int lastWidth = 100;
public void configurationChanged( final ConfigurableContentProvider source ) {
if ( ElementManagerViewPart.this.projectColumn != null ) {
int mode = source.getMode();
if ( mode == ConfigurableContentProvider.MODE_FLAT ) {
ElementManagerViewPart.this.projectColumn.setWidth( this.lastWidth );
} else {
this.lastWidth = ElementManagerViewPart.this.projectColumn.getWidth();
ElementManagerViewPart.this.projectColumn.setWidth( 0 );
}
}
}
} );
return provider;
}
/* (non-Javadoc)
* @see eu.geclipse.ui.views.GridModelViewPart#createLabelProvider()
*/
@Override
protected IBaseLabelProvider createLabelProvider() {
return new GridModelLabelProvider();
}
@Override
protected boolean createTreeColumns( final Tree tree ) {
super.createTreeColumns( tree );
TreeColumn nameColumn = new TreeColumn( tree, SWT.NONE );
nameColumn.setText( Messages.getString("ElementManagerViewPart.name_column") ); //$NON-NLS-1$
nameColumn.setAlignment( SWT.LEFT );
nameColumn.setWidth( 300 );
this.projectColumn = new TreeColumn( tree, SWT.NONE );
this.projectColumn.setText( Messages.getString("ElementManagerViewPart.project_column") ); //$NON-NLS-1$
this.projectColumn.setAlignment( SWT.LEFT );
this.projectColumn.setWidth( 100 );
return true;
}
@Override
public boolean isDragSource( final IGridElement element ) {
return
super.isDragSource( element )
&& getManager().canManage( element );
}
}