blob: e78e8360d57482beea9e66cd968325c86df85cbd [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2005, 2007 IBM Corporation 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:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.pde.internal.ui.editor.target;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
import java.util.TreeMap;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.QualifiedName;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.Separator;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerComparator;
import org.eclipse.jface.window.Window;
import org.eclipse.osgi.service.resolver.BundleDescription;
import org.eclipse.pde.core.IModelChangedEvent;
import org.eclipse.pde.core.plugin.IPluginModelBase;
import org.eclipse.pde.core.plugin.PluginRegistry;
import org.eclipse.pde.internal.core.PDECore;
import org.eclipse.pde.internal.core.TargetPlatformHelper;
import org.eclipse.pde.internal.core.ifeature.IFeature;
import org.eclipse.pde.internal.core.ifeature.IFeatureModel;
import org.eclipse.pde.internal.core.itarget.ITarget;
import org.eclipse.pde.internal.core.itarget.ITargetFeature;
import org.eclipse.pde.internal.core.itarget.ITargetModel;
import org.eclipse.pde.internal.core.itarget.ITargetModelFactory;
import org.eclipse.pde.internal.core.itarget.ITargetPlugin;
import org.eclipse.pde.internal.core.plugin.ExternalPluginModelBase;
import org.eclipse.pde.internal.ui.IPDEUIConstants;
import org.eclipse.pde.internal.ui.PDEPlugin;
import org.eclipse.pde.internal.ui.PDEPluginImages;
import org.eclipse.pde.internal.ui.PDEUIMessages;
import org.eclipse.pde.internal.ui.editor.FormLayoutFactory;
import org.eclipse.pde.internal.ui.editor.PDEFormPage;
import org.eclipse.pde.internal.ui.editor.TableSection;
import org.eclipse.pde.internal.ui.editor.feature.FeatureEditor;
import org.eclipse.pde.internal.ui.editor.plugin.ManifestEditor;
import org.eclipse.pde.internal.ui.elements.DefaultTableProvider;
import org.eclipse.pde.internal.ui.parts.ConditionalListSelectionDialog;
import org.eclipse.pde.internal.ui.parts.TablePart;
import org.eclipse.pde.internal.ui.search.dependencies.DependencyCalculator;
import org.eclipse.pde.internal.ui.util.PersistablePluginObject;
import org.eclipse.pde.internal.ui.wizards.FeatureSelectionDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.CTabFolder;
import org.eclipse.swt.custom.CTabItem;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableItem;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IFileEditorInput;
import org.eclipse.ui.IWorkingSet;
import org.eclipse.ui.IWorkingSetManager;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.actions.ActionFactory;
import org.eclipse.ui.dialogs.IWorkingSetSelectionDialog;
import org.eclipse.ui.forms.IFormColors;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.ui.forms.widgets.Section;
public class ContentSection extends TableSection {
class ContentProvider extends DefaultTableProvider {
public Object[] getElements(Object parent) {
ITarget target = getTarget();
if (target.useAllPlugins())
return new Object[0];
if (fLastTab == 0)
return target.getPlugins();
return target.getFeatures();
}
}
private static final String[] TAB_LABELS = new String[2];
static {
TAB_LABELS[0] = PDEUIMessages.ContentSection_plugins;
TAB_LABELS[1] = PDEUIMessages.ContentSection_features;
}
private static final String[] BUTTONS = new String[5];
static {
BUTTONS[0] = PDEUIMessages.ContentSection_add;
BUTTONS[1] = PDEUIMessages.ContentSection_remove;
BUTTONS[2] = PDEUIMessages.ContentSection_removeAll;
BUTTONS[3] = PDEUIMessages.ContentSection_workingSet;
BUTTONS[4] = PDEUIMessages.ContentSection_required;
}
private TableViewer fContentViewer;
private CTabFolder fTabFolder;
private int fLastTab;
private Button fUseAllPlugins;
private Image[] fTabImages;
private Button fIncludeOptionalButton;
public static final QualifiedName OPTIONAL_PROPERTY = new QualifiedName(IPDEUIConstants.PLUGIN_ID, "target.includeOptional"); //$NON-NLS-1$
public ContentSection(PDEFormPage page, Composite parent) {
super(page, parent, Section.DESCRIPTION, BUTTONS);
}
/* (non-Javadoc)
* @see org.eclipse.pde.internal.ui.editor.PDESection#createClient(org.eclipse.ui.forms.widgets.Section, org.eclipse.ui.forms.widgets.FormToolkit)
*/
protected void createClient(Section section, FormToolkit toolkit) {
section.setLayout(FormLayoutFactory.createClearGridLayout(false, 1));
Composite client = toolkit.createComposite(section);
client.setLayout(FormLayoutFactory.createSectionClientGridLayout(false, 2));
client.setLayoutData(new GridData(GridData.FILL_BOTH));
fUseAllPlugins = toolkit.createButton(client, PDEUIMessages.ContentSection_allTarget, SWT.CHECK);
fUseAllPlugins.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
getTarget().setUseAllPlugins(fUseAllPlugins.getSelection());
}
});
GridData gd = new GridData();
gd.horizontalSpan = 2;
fUseAllPlugins.setLayoutData(gd);
fTabFolder = new CTabFolder(client, SWT.FLAT|SWT.TOP);
gd = new GridData(GridData.FILL_HORIZONTAL);
gd.heightHint = 2;
gd.horizontalSpan = 2;
fTabFolder.setLayoutData(gd);
toolkit.adapt(fTabFolder, true, true);
toolkit.getColors().initializeSectionToolBarColors();
Color selectedColor = toolkit.getColors().getColor(IFormColors.TB_BG);
fTabFolder.setSelectionBackground(new Color[] { selectedColor,
toolkit.getColors().getBackground() },
new int[] { 100 }, true);
fTabFolder.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
refresh();
}
});
createTabs();
createViewerPartControl(client, SWT.MULTI, 2, toolkit);
TablePart tablePart = getTablePart();
GridData data = (GridData) tablePart.getControl().getLayoutData();
data.grabExcessVerticalSpace = true;
data.grabExcessHorizontalSpace = true;
fContentViewer = tablePart.getTableViewer();
fContentViewer.setContentProvider(new ContentProvider());
fContentViewer.setLabelProvider(PDEPlugin.getDefault().getLabelProvider());
fContentViewer.setComparator(new ViewerComparator() {
public int compare(Viewer viewer, Object e1, Object e2) {
if (e1 instanceof ITargetPlugin) {
ITargetPlugin p1 = (ITargetPlugin) e1;
ITargetPlugin p2 = (ITargetPlugin) e2;
return super.compare(viewer, p1.getId(), p2.getId());
} // else
ITargetFeature f1 = (ITargetFeature)e1;
ITargetFeature f2 = (ITargetFeature)e2;
return super.compare(viewer, f1.getId(), f2.getId());
}
});
fContentViewer.setInput(PDECore.getDefault().getModelManager());
fContentViewer.addSelectionChangedListener(new ISelectionChangedListener() {
public void selectionChanged(SelectionChangedEvent event) {
updateButtons();
}
});
createOptionalDependenciesButton(client);
toolkit.paintBordersFor(client);
section.setClient(client);
section.setText(PDEUIMessages.ContentSection_targetContent);
section.setDescription(PDEUIMessages.ContentSection_targetContentDesc);
section.setLayoutData(new GridData(GridData.FILL_BOTH));
updateButtons();
getModel().addModelChangedListener(this);
}
private void createOptionalDependenciesButton(Composite client) {
if (isEditable()) {
fIncludeOptionalButton = new Button(client, SWT.CHECK);
fIncludeOptionalButton.setText(PDEUIMessages.ContentSection_includeOptional);
// initialize value
IEditorInput input = getPage().getEditorInput();
if (input instanceof IFileEditorInput) {
IFile file = ((IFileEditorInput)input).getFile();
try {
fIncludeOptionalButton.setSelection("true".equals(file.getPersistentProperty(OPTIONAL_PROPERTY))); //$NON-NLS-1$
} catch (CoreException e) {
}
}
fIncludeOptionalButton.setEnabled(!getTarget().useAllPlugins());
// create listener to save value when the checkbox is changed
fIncludeOptionalButton.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
IEditorInput input = getPage().getEditorInput();
if (input instanceof IFileEditorInput) {
IFile file = ((IFileEditorInput)input).getFile();
try {
file.setPersistentProperty(OPTIONAL_PROPERTY, fIncludeOptionalButton.getSelection() ? "true" : null); //$NON-NLS-1$
} catch (CoreException e1) {
}
}
}
});
}
}
/* (non-Javadoc)
* @see org.eclipse.pde.internal.ui.editor.StructuredViewerSection#buttonSelected(int)
*/
protected void buttonSelected(int index) {
switch (index) {
case 0:
handleAdd();
break;
case 1:
handleDelete();
break;
case 2:
handleRemoveAll();
break;
case 3:
handleAddWorkingSet();
break;
case 4:
handleAddRequired(getTarget().getPlugins(), fIncludeOptionalButton.getSelection());
}
}
private void createTabs() {
fTabImages = new Image[] {PDEPluginImages.DESC_PLUGIN_OBJ.createImage(),
PDEPluginImages.DESC_FEATURE_OBJ.createImage()
};
for (int i = 0; i < TAB_LABELS.length; i++) {
CTabItem item = new CTabItem(fTabFolder, SWT.NULL);
item.setText(TAB_LABELS[i]);
item.setImage(fTabImages[i]);
}
fLastTab = 0;
fTabFolder.setSelection(fLastTab);
}
/* (non-Javadoc)
* @see org.eclipse.ui.forms.AbstractFormPart#refresh()
*/
public void refresh() {
fLastTab = fTabFolder.getSelectionIndex();
fContentViewer.refresh();
updateButtons();
super.refresh();
}
protected void updateButtons(){
boolean useAllPlugins = getTarget().useAllPlugins();
fUseAllPlugins.setSelection(useAllPlugins);
fTabFolder.setEnabled(!useAllPlugins);
TablePart table = getTablePart();
boolean itemsSelected = !fContentViewer.getSelection().isEmpty();
boolean hasItems = fContentViewer.getTable().getItemCount() > 0;
table.setButtonEnabled(0, isEditable() && !useAllPlugins);
table.setButtonEnabled(1, isEditable() && !useAllPlugins && itemsSelected);
table.setButtonEnabled(2, isEditable() && !useAllPlugins && hasItems);
boolean pluginTab = (fLastTab == 0);
table.setButtonEnabled(3, isEditable() && pluginTab && !useAllPlugins);
table.setButtonEnabled(4, isEditable() && pluginTab && !useAllPlugins && hasItems);
}
protected boolean canPaste(Object target, Object[] objects) {
for (int i = 0; i < objects.length; i++) {
if (objects[i] instanceof ITargetPlugin && fLastTab == 0 ||
objects[i] instanceof ITargetFeature && fLastTab == 1)
return true;
}
return false;
}
private ITarget getTarget() {
return getModel().getTarget();
}
private ITargetModel getModel() {
return (ITargetModel)getPage().getPDEEditor().getAggregateModel();
}
private void handleAdd() {
if (fLastTab == 0)
handleAddPlugin();
else
handleAddFeature();
updateButtons();
}
private void handleAddPlugin() {
ConditionalListSelectionDialog dialog = new ConditionalListSelectionDialog(
PDEPlugin.getActiveWorkbenchShell(),
PDEPlugin.getDefault().getLabelProvider(),
PDEUIMessages.ContentSection_addDialogButtonLabel);
TreeMap map = getBundles();
dialog.setElements(map.values().toArray());
dialog.setConditionalElements(getWorkspaceBundles(map).values().toArray());
dialog.setTitle(PDEUIMessages.PluginSelectionDialog_title);
dialog.setMessage(PDEUIMessages.PluginSelectionDialog_message);
dialog.setMultipleSelection(true);
if (dialog.open() == Window.OK) {
Object[] bundles = dialog.getResult();
ITarget target = getTarget();
ITargetModelFactory factory = getModel().getFactory();
ITargetPlugin[] plugins = new ITargetPlugin[bundles.length];
for (int i = 0; i < bundles.length; i++) {
String id = ((BundleDescription)bundles[i]).getSymbolicName();
ITargetPlugin plugin = factory.createPlugin();
plugin.setId(id);
plugins[i] = plugin;
}
target.addPlugins(plugins);
}
}
private TreeMap getBundles() {
TreeMap map = new TreeMap();
ITarget target = getTarget();
IPluginModelBase[] models = PluginRegistry.getExternalModels();
for (int i = 0; i < models.length; i++) {
BundleDescription desc = ((ExternalPluginModelBase)models[i]).getBundleDescription();
String id = desc.getSymbolicName();
if (!target.containsPlugin(id))
map.put(id, desc);
}
return map;
}
protected TreeMap getWorkspaceBundles(TreeMap used) {
TreeMap map = new TreeMap();
ITarget target = getTarget();
IPluginModelBase[] models = PluginRegistry.getWorkspaceModels();
for (int i = 0; i < models.length; i++) {
BundleDescription desc = models[i].getBundleDescription();
String id = desc.getSymbolicName();
if (!target.containsPlugin(id) && !used.containsKey(id))
map.put(id, desc);
}
return map;
}
private void handleAddFeature() {
IFeatureModel[] allModels = PDECore.getDefault()
.getFeatureModelManager().getModels();
ArrayList newModels = new ArrayList();
ITarget target = getTarget();
for (int i = 0; i < allModels.length; i++) {
if (!target.containsFeature(allModels[i].getFeature().getId()))
newModels.add(allModels[i]);
}
IFeatureModel[] candidateModels = (IFeatureModel[]) newModels
.toArray(new IFeatureModel[newModels.size()]);
FeatureSelectionDialog dialog = new FeatureSelectionDialog(
getSection().getShell(),
candidateModels, true);
if (dialog.open() == Window.OK) {
Object[] models = dialog.getResult();
ITargetModelFactory factory = getModel().getFactory();
ITargetFeature [] features = new ITargetFeature[models.length];
for (int i = 0; i < models.length; ++i) {
IFeature feature = ((IFeatureModel)models[i]).getFeature();
String id = feature.getId();
ITargetFeature tfeature = factory.createFeature();
tfeature.setId(id);
features[i] = tfeature;
}
target.addFeatures(features);
}
}
private void handleDelete() {
IStructuredSelection ssel = (IStructuredSelection)fContentViewer.getSelection();
if (ssel.size() > 0) {
Object[] objects = ssel.toArray();
ITarget target = getTarget();
if (fLastTab == 0) {
ITargetPlugin[] plugins = new ITargetPlugin[objects.length];
System.arraycopy(objects, 0, plugins, 0, objects.length);
target.removePlugins(plugins);
} else {
ITargetFeature[] features = new ITargetFeature[objects.length];
System.arraycopy(objects, 0, features, 0, objects.length);
target.removeFeatures(features);
}
}
updateButtons();
}
private void handleRemoveAll() {
TableItem[] items = fContentViewer.getTable().getItems();
ITarget target = getTarget();
if (fLastTab == 0) {
ITargetPlugin[] plugins = new ITargetPlugin[items.length];
for (int i = 0; i < plugins.length; i++)
plugins[i] = (ITargetPlugin)items[i].getData();
target.removePlugins(plugins);
} else {
ITargetFeature[] features = new ITargetFeature[items.length];
for (int i = 0; i < features.length; i++)
features[i] = (ITargetFeature)items[i].getData();
target.removeFeatures(features);
}
updateButtons();
}
/* (non-Javadoc)
* @see org.eclipse.pde.internal.ui.editor.TableSection#handleDoubleClick(org.eclipse.jface.viewers.IStructuredSelection)
*/
protected void handleDoubleClick(IStructuredSelection selection) {
handleOpen(selection);
}
private void handleOpen(IStructuredSelection selection) {
Object object = selection.getFirstElement();
if (object instanceof ITargetPlugin) {
ManifestEditor.openPluginEditor(((ITargetPlugin)object).getId());
} else if (object instanceof ITargetFeature) {
handleOpenFeature((ITargetFeature)object);
}
}
private void handleOpenFeature(ITargetFeature feature) {
IFeatureModel model = PDECore.getDefault()
.getFeatureModelManager().findFeatureModel(feature.getId());
FeatureEditor.openFeatureEditor(model);
}
private void handleAddWorkingSet() {
IWorkingSetManager manager = PlatformUI.getWorkbench().getWorkingSetManager();
IWorkingSetSelectionDialog dialog = manager.createWorkingSetSelectionDialog(PDEPlugin.getActiveWorkbenchShell(), true);
if (dialog.open() == Window.OK) {
IWorkingSet[] workingSets = dialog.getSelection();
ITarget target = getTarget();
ITargetModelFactory factory = target.getModel().getFactory();
HashSet plugins = new HashSet();
for (int i = 0; i < workingSets.length; i++) {
IAdaptable[] elements = workingSets[i].getElements();
for (int j = 0; j < elements.length; j++) {
IPluginModelBase model = findModel(elements[j]);
if (model != null) {
ITargetPlugin plugin = factory.createPlugin();
plugin.setId(model.getPluginBase().getId());
plugins.add(plugin);
}
}
}
target.addPlugins((ITargetPlugin[]) plugins.toArray(new ITargetPlugin[plugins.size()]));
}
updateButtons();
}
private IPluginModelBase findModel(IAdaptable object) {
if (object instanceof IJavaProject)
object = ((IJavaProject)object).getProject();
if (object instanceof IProject)
return PluginRegistry.findModel((IProject)object);
if (object instanceof PersistablePluginObject) {
return PluginRegistry.findModel(((PersistablePluginObject)object).getPluginID());
}
return null;
}
public static void handleAddRequired(ITargetPlugin[] plugins, boolean includeOptional) {
if (plugins.length == 0)
return;
ArrayList list = new ArrayList(plugins.length);
for (int i = 0; i < plugins.length; i++) {
list.add(TargetPlatformHelper.getState().getBundle(plugins[i].getId(), null));
}
DependencyCalculator calculator = new DependencyCalculator(includeOptional);
calculator.findDependencies(list.toArray());
Collection dependencies = calculator.getBundleIDs();
ITarget target = plugins[0].getTarget();
ITargetModelFactory factory = target.getModel().getFactory();
ITargetPlugin[] pluginsToAdd = new ITargetPlugin[dependencies.size()];
int i = 0;
Iterator iter = dependencies.iterator();
while (iter.hasNext()) {
String id = iter.next().toString();
ITargetPlugin plugin = factory.createPlugin();
plugin.setId(id);
pluginsToAdd[i++] = plugin;
}
target.addPlugins(pluginsToAdd);
}
/* (non-Javadoc)
* @see org.eclipse.pde.internal.ui.editor.PDESection#modelChanged(org.eclipse.pde.core.IModelChangedEvent)
*/
public void modelChanged(IModelChangedEvent e) {
if (e.getChangeType() == IModelChangedEvent.WORLD_CHANGED) {
handleModelEventWorldChanged(e);
return;
}
Object[] objects = e.getChangedObjects();
if (e.getChangeType() == IModelChangedEvent.INSERT) {
for (int i = 0; i < objects.length; i++) {
if ((objects[i] instanceof ITargetPlugin && fLastTab == 0) ||
(objects[i] instanceof ITargetFeature && fLastTab == 1)) {
fContentViewer.add(objects[i]);
}
}
} else if (e.getChangeType() == IModelChangedEvent.REMOVE) {
Table table = fContentViewer.getTable();
int index = table.getSelectionIndex();
for (int i = 0; i < objects.length; i++) {
if ((objects[i] instanceof ITargetPlugin && fLastTab == 0) ||
(objects[i] instanceof ITargetFeature && fLastTab == 1)) {
fContentViewer.remove(objects[i]);
}
}
// Update Selection
int count = table.getItemCount();
if ( count == 0 ) {
// Nothing to select
} else if ( index < count ) {
table.setSelection( index );
} else {
table.setSelection( count - 1 );
}
}
if (e.getChangedProperty() == ITarget.P_ALL_PLUGINS) {
refresh();
fIncludeOptionalButton.setEnabled(!((Boolean)e.getNewValue()).booleanValue());
}
}
/**
* @param event
*/
private void handleModelEventWorldChanged(IModelChangedEvent event) {
// Reload input
fContentViewer.setInput(PDECore.getDefault().getModelManager());
// Perform the refresh
refresh();
}
public boolean doGlobalAction(String actionId) {
if (actionId.equals(ActionFactory.DELETE.getId())) {
handleDelete();
return true;
}
if (actionId.equals(ActionFactory.CUT.getId())) {
handleDelete();
return false;
}
if (actionId.equals(ActionFactory.PASTE.getId())) {
doPaste();
return true;
}
return false;
}
/* (non-Javadoc)
* @see org.eclipse.pde.internal.ui.editor.StructuredViewerSection#fillContextMenu(org.eclipse.jface.action.IMenuManager)
*/
protected void fillContextMenu(IMenuManager manager) {
IStructuredSelection ssel = (IStructuredSelection)fContentViewer.getSelection();
if (ssel == null)
return;
Action openAction = new Action(PDEUIMessages.ContentSection_open) {
public void run() {
handleDoubleClick((IStructuredSelection)fContentViewer.getSelection());
}
};
openAction.setEnabled(isEditable() && ssel.size() == 1);
manager.add(openAction);
manager.add(new Separator());
Action removeAction = new Action(PDEUIMessages.ContentSection_remove) {
public void run() {
handleDelete();
}
};
removeAction.setEnabled(isEditable() && ssel.size() > 0);
manager.add(removeAction);
Action removeAll = new Action(PDEUIMessages.ContentSection_removeAll) {
public void run() {
handleRemoveAll();
}
};
removeAll.setEnabled(isEditable());
manager.add(removeAll);
manager.add(new Separator());
getPage().getPDEEditor().getContributor().contextMenuAboutToShow(manager);
}
protected void doPaste(Object target, Object[] objects) {
for (int i = 0; i < objects.length; i++) {
if (objects[i] instanceof ITargetPlugin && fLastTab == 0)
getTarget().addPlugin((ITargetPlugin)objects[i]);
else if (objects[i] instanceof ITargetFeature && fLastTab == 1)
getTarget().addFeature((ITargetFeature)objects[i]);
}
}
protected void selectionChanged(IStructuredSelection selection) {
getPage().getPDEEditor().setSelection(selection);
}
public boolean setFormInput(Object input) {
if (input instanceof ITargetPlugin) {
if (fTabFolder.getSelectionIndex() != 0) {
fTabFolder.setSelection(0);
refresh();
}
fContentViewer.setSelection(new StructuredSelection(input), true);
return true;
} else if (input instanceof ITargetFeature) {
if (fTabFolder.getSelectionIndex() != 1) {
fTabFolder.setSelection(1);
refresh();
}
fContentViewer.setSelection(new StructuredSelection(input), true);
return true;
}
return super.setFormInput(input);
}
public void dispose() {
ITargetModel model = getModel();
if (model != null)
model.removeModelChangedListener(this);
if (fTabImages != null)
for (int i = 0; i < fTabImages.length; i++)
fTabImages[i].dispose();
super.dispose();
}
protected boolean createCount() { return true; }
}