/*******************************************************************************
* Copyright (c) 2008 Oracle. 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:
* Oracle - initial API and implementation
******************************************************************************/
package org.eclipse.jpt.ui.internal.widgets;
import org.eclipse.jface.viewers.IBaseLabelProvider;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jpt.ui.internal.listeners.SWTListChangeListenerWrapper;
import org.eclipse.jpt.ui.internal.listeners.SWTPropertyChangeListenerWrapper;
import org.eclipse.jpt.ui.internal.swt.ColumnAdapter;
import org.eclipse.jpt.ui.internal.swt.TableModelAdapter;
import org.eclipse.jpt.ui.internal.swt.TableModelAdapter.SelectionChangeEvent;
import org.eclipse.jpt.ui.internal.swt.TableModelAdapter.SelectionChangeListener;
import org.eclipse.jpt.utility.internal.CollectionTools;
import org.eclipse.jpt.utility.internal.model.value.SimplePropertyValueModel;
import org.eclipse.jpt.utility.internal.model.value.swing.ObjectListSelectionModel;
import org.eclipse.jpt.utility.model.Model;
import org.eclipse.jpt.utility.model.event.ListChangeEvent;
import org.eclipse.jpt.utility.model.event.PropertyChangeEvent;
import org.eclipse.jpt.utility.model.listener.ListChangeListener;
import org.eclipse.jpt.utility.model.listener.PropertyChangeListener;
import org.eclipse.jpt.utility.model.value.ListValueModel;
import org.eclipse.jpt.utility.model.value.PropertyValueModel;
import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Layout;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
/**
* This implementation of the AddRemovePane
uses a Table
* as its main widget, a List
can't be used because it doesn't
* support showing images. However, the table is displayed like a list.
*
* Here the layot of this pane: *
* ----------------------------------------------------------------------------- * | ------------------------------------------------------------- ----------- | * | | Item 1 | | Add... | | * | | ... | ----------- | * | | Item n | ----------- | * | | | | Edit... | | * | | | ----------- | * | | | ----------- | * | | | | Remove | | * | | | ----------- | * | ------------------------------------------------------------- | * -----------------------------------------------------------------------------* * @version 2.0 * @since 1.0 */ @SuppressWarnings("nls") public class AddRemoveListPane
AddRemoveListPane
.
*
* @param parentPane The parent container of this one
* @param parent The parent container
* @param adapter
* @param listHolder The ListValueModel
containing the items
* @param selectedItemHolder The holder of the selected item, if more than
* one item or no items are selected, then null
will be passed
* @param labelProvider The renderer used to format the table holder's items
*/
public AddRemoveListPane(AbstractPane extends T> parentPane,
Composite parent,
Adapter adapter,
ListValueModel> listHolder,
WritablePropertyValueModel> selectedItemHolder,
ILabelProvider labelProvider) {
super(parentPane,
parent,
adapter,
listHolder,
selectedItemHolder,
labelProvider);
}
/**
* Creates a new AddRemoveListPane
.
*
* @param parentPane The parent container of this one
* @param parent The parent container
* @param adapter
* @param listHolder The ListValueModel
containing the items
* @param selectedItemHolder The holder of the selected item, if more than
* one item or no items are selected, then null
will be passed
* @param labelProvider The renderer used to format the table holder's items
* @param helpId The topic help ID to be registered with this pane
*/
public AddRemoveListPane(AbstractPane extends T> parentPane,
Composite parent,
Adapter adapter,
ListValueModel> listHolder,
WritablePropertyValueModel> selectedItemHolder,
ILabelProvider labelProvider,
String helpId) {
super(parentPane,
parent,
adapter,
listHolder,
selectedItemHolder,
labelProvider,
helpId);
}
/**
* Creates a new AddRemoveListPane
.
*
* @param parentPane The parent container of this one
* @param subjectHolder The holder of the subject
* @param adapter
* @param parent The parent container
* @param listHolder The ListValueModel
containing the items
* @param selectedItemHolder The holder of the selected item, if more than
* one item or no items are selected, then null
will be passed
* @param labelProvider The renderer used to format the table holder's items
*/
public AddRemoveListPane(AbstractPane> parentPane,
PropertyValueModel extends T> subjectHolder,
Composite parent,
Adapter adapter,
ListValueModel> listHolder,
WritablePropertyValueModel> selectedItemHolder,
ILabelProvider labelProvider) {
super(parentPane,
subjectHolder,
parent,
adapter,
listHolder,
selectedItemHolder,
labelProvider);
}
/**
* Creates a new AddRemoveListPane
.
*
* @param parentPane The parent container of this one
* @param subjectHolder The holder of the subject
* @param adapter
* @param parent The parent container
* @param listHolder The ListValueModel
containing the items
* @param selectedItemHolder The holder of the selected item, if more than
* one item or no items are selected, then null
will be passed
* @param labelProvider The renderer used to format the table holder's items
* @param helpId The topic help ID to be registered with this pane
*/
public AddRemoveListPane(AbstractPane> parentPane,
PropertyValueModel extends T> subjectHolder,
Composite parent,
Adapter adapter,
ListValueModel> listHolder,
WritablePropertyValueModel> selectedItemHolder,
ILabelProvider labelProvider,
String helpId) {
super(parentPane,
subjectHolder,
parent,
adapter,
listHolder,
selectedItemHolder,
labelProvider,
helpId);
}
private ColumnAdapter