import org.eclipse.nebula.widgets.nattable.command.VisualRefreshCommandHandler;
import org.eclipse.nebula.widgets.nattable.config.AbstractRegistryConfiguration;
import org.eclipse.nebula.widgets.nattable.config.AbstractUiBindingConfiguration;
+import org.eclipse.nebula.widgets.nattable.config.CellConfigAttributes;
import org.eclipse.nebula.widgets.nattable.config.ConfigRegistry;
import org.eclipse.nebula.widgets.nattable.config.DefaultNatTableStyleConfiguration;
import org.eclipse.nebula.widgets.nattable.config.IConfigRegistry;
import org.eclipse.nebula.widgets.nattable.config.IEditableRule;
import org.eclipse.nebula.widgets.nattable.data.IRowIdAccessor;
import org.eclipse.nebula.widgets.nattable.data.ListDataProvider;
+import org.eclipse.nebula.widgets.nattable.data.convert.DefaultBooleanDisplayConverter;
import org.eclipse.nebula.widgets.nattable.edit.EditConfigAttributes;
import org.eclipse.nebula.widgets.nattable.edit.action.MouseEditAction;
import org.eclipse.nebula.widgets.nattable.edit.config.DefaultEditConfiguration;
import org.eclipse.nebula.widgets.nattable.layer.AbstractLayer;
import org.eclipse.nebula.widgets.nattable.layer.DataLayer;
import org.eclipse.nebula.widgets.nattable.layer.stack.DefaultBodyLayerStack;
+import org.eclipse.nebula.widgets.nattable.painter.cell.CheckBoxPainter;
+import org.eclipse.nebula.widgets.nattable.painter.cell.ImagePainter;
import org.eclipse.nebula.widgets.nattable.selection.RowSelectionModel;
import org.eclipse.nebula.widgets.nattable.selection.RowSelectionProvider;
import org.eclipse.nebula.widgets.nattable.sort.SortHeaderLayer;
import eu.etaxonomy.taxeditor.bulkeditor.BulkEditorQuery;
import eu.etaxonomy.taxeditor.bulkeditor.input.AbstractBulkEditorInput;
import eu.etaxonomy.taxeditor.l10n.Messages;
+import eu.etaxonomy.taxeditor.model.ImageResources;
/**
*
*/
public class BulkEditorE4Composite extends Composite {
- public static final String TYPE_PROPERTY = Messages.BulkEditorE4_TYPE;
+ public static final String LABEL_CANDIDATE = "LABEL_CANDIDATE"; //$NON-NLS-1$
+ public static final String LABEL_CANDIDATE_ICON = "LABEL_CANDIDATE_ICON"; //$NON-NLS-1$
- public static final String CANDIDATE_LABEL = "candidate";
+ public static final String LABEL_TARGET = "LABEL_TARGET"; //$NON-NLS-1$
+ public static final String LABEL_TARGET_ICON = "LABEL_TARGET_ICON"; //$NON-NLS-1$
- public static final String TARGET_LABEL = "target";
+ private final List<String> columnList = new ArrayList<>();
private Composite topComposite;
private ListDataProvider<CdmBase> bodyDataProvider;
private BulkEditorE4 bulkEditor;
+ private BulkEditorSearchE4 bulkEditorSearch;
public BulkEditorE4Composite(BulkEditorE4 bulkEditor, Composite parent, int style) {
@SuppressWarnings("unused")
public void init(AbstractBulkEditorInput<?> input){
- new BulkEditorSearchE4(this, topComposite, SWT.NONE);
+ input.getPropertyKeys().forEach(key->columnList.add(key));
+
+ bulkEditorSearch = new BulkEditorSearchE4(this, topComposite, SWT.NONE);
//layout needed because the search bar is added after @PostConstuct method
topComposite.getParent().layout();
selectionProvider.addSelectionChangedListener(selectionChangedListener);
bottomComposite.layout();
+
}
private void createTable(){
ConfigRegistry configRegistry = new ConfigRegistry();
//property map
Map<String, String> propertyToLabels = new HashMap<>();
- propertyToLabels.put(bulkEditor.getEditorInput().getName(), bulkEditor.getEditorInput().getName());
- propertyToLabels.put(TYPE_PROPERTY, TYPE_PROPERTY);
- String[] propertyNames = new String[] { bulkEditor.getEditorInput().getName(), TYPE_PROPERTY };
+ columnList.forEach(columnLabel->propertyToLabels.put(columnLabel, columnLabel));
+
+ String[] propertyNames = columnList.toArray(columnList.toArray(new String[columnList.size()]));
//sorted list
SortedList<CdmBase> sortedList = new SortedList<>(bulkEditor.getEditorInput().getModel(), bulkEditor.getEditorInput().getTitleComparator());
//data provider
- BulkEditorPropertyAccessor columnPropertyAccessor = new BulkEditorPropertyAccessor(bulkEditor.getEditorInput());
+ BulkEditorPropertyAccessor columnPropertyAccessor = new BulkEditorPropertyAccessor(this, bulkEditor.getEditorInput());
bodyDataProvider = new ListDataProvider<CdmBase>(sortedList,
columnPropertyAccessor);
DefaultColumnHeaderDataProvider colHeaderDataProvider = new DefaultColumnHeaderDataProvider(
GlazedListsEventLayer<CdmBase> eventLayer = new GlazedListsEventLayer<>(dataLayer, bulkEditor.getEditorInput().getModel());
bodyLayer = new DefaultBodyLayerStack(eventLayer);
- dataLayer.setColumnPercentageSizing(true);
- dataLayer.setColumnWidthPercentageByPosition(0, 80);
- dataLayer.setColumnWidthPercentageByPosition(1, 20);
+ dataLayer.setColumnPercentageSizing(0, true);
+ dataLayer.setColumnWidthPercentageByPosition(0, 45);
+ for(int i=1;i<columnList.size();i++){
+ if(bulkEditor.getEditorInput().isCacheProperty(columnList.get(i))){
+ dataLayer.setColumnWidthByPosition(i, 16);
+ }
+ else{
+ dataLayer.setColumnWidthByPosition(i, 100);
+ }
+ }
//column
DataLayer columnHeaderDataLayer = new DataLayer(colHeaderDataProvider);
columnPropertyAccessor,
configRegistry,
columnHeaderDataLayer));
+ columnHeaderDataLayer.setConfigLabelAccumulator(
+ new BulkEditorConfigLabelAccumulatorHeader(colHeaderDataProvider, bulkEditor.getEditorInput()));
//row
DataLayer rowHeaderDataLayer = new DataLayer(rowHeaderDataProvider);
RowHeaderLayer rowHeaderLayer = new RowHeaderLayer(rowHeaderDataLayer,
bodyLayer, bodyLayer.getSelectionLayer());
+ rowHeaderDataLayer.setColumnWidthByPosition(0, 50);
//corner
DefaultCornerDataProvider cornerDataProvider = new DefaultCornerDataProvider(
GridLayer gridLayer = new GridLayer(bodyLayer, sortHeaderLayer,
rowHeaderLayer, cornerLayer, false);//set autoconfigure to false to get rid of the single click editing
natTable = new NatTable(bottomComposite, gridLayer, false);
- natTable.setConfigRegistry(configRegistry);
//full row selection
bodyLayer.getSelectionLayer().setSelectionModel(new RowSelectionModel<CdmBase>(bodyLayer.getSelectionLayer(), bodyDataProvider, new IRowIdAccessor<CdmBase>() {
}
}));
- //add label to deduplication rows
- dataLayer.setConfigLabelAccumulator(new BulkEditorConfigLabelAccumulator(natTable, bodyDataProvider, bulkEditor.getEditorInput()));
+ dataLayer.setConfigLabelAccumulator(new BulkEditorConfigLabelAccumulator(bodyDataProvider, colHeaderDataProvider,
+ bulkEditor.getEditorInput()));
+
+ natTable.setConfigRegistry(configRegistry);
//add tooltip to table
- new BulkEditorTooltip(natTable);
+ new BulkEditorTooltip(natTable, colHeaderDataProvider);
}
private void configureTable(){
public void configureUiBindings(
UiBindingRegistry uiBindingRegistry) {
// add e4 menu to NatTable
- new PopupMenuBuilder(natTable, e4Menu)
- .build();
+ new PopupMenuBuilder(natTable, e4Menu)
+ .withHideColumnMenuItem()
+ .withShowAllColumnsMenuItem()
+ .build();
// register the UI binding for header, corner and body region
uiBindingRegistry.registerMouseDownBinding(
//add default configuration because autoconfigure is set to false in constructor
natTable.addConfiguration(new DefaultNatTableStyleConfiguration());
+
+ //show boolean values as check boxes
+ natTable.addConfiguration(new AbstractRegistryConfiguration() {
+ @Override
+ public void configureRegistry(IConfigRegistry configRegistry) {
+ configRegistry.registerConfigAttribute(
+ CellConfigAttributes.CELL_PAINTER,
+ new CheckBoxPainter(),
+ DisplayMode.NORMAL,
+ BulkEditorConfigLabelAccumulatorHeader.BOOLEAN_COLUMN);
+
+ configRegistry.registerConfigAttribute(
+ CellConfigAttributes.DISPLAY_CONVERTER,
+ new DefaultBooleanDisplayConverter(),
+ DisplayMode.NORMAL,
+ BulkEditorConfigLabelAccumulatorHeader.BOOLEAN_COLUMN);
+ }
+ });
+
+ natTable.addConfiguration(new AbstractRegistryConfiguration() {
+ @Override
+ public void configureRegistry(IConfigRegistry configRegistry) {
+ configRegistry.registerConfigAttribute(
+ CellConfigAttributes.CELL_PAINTER,
+ new ImagePainter(ImageResources.getImage(ImageResources.LOCK_ICON)),
+ DisplayMode.NORMAL,
+ BulkEditorConfigLabelAccumulatorHeader.CACHE_COLUMN);
+ }
+ });
+
+ //register handler for view configuration menu
+ natTable.registerCommandHandler(bulkEditorSearch.getDisplayPersistenceDialogCommandHandler());
+
natTable.configure();
}
natTable.doCommand(new VisualRefreshCommand());
}
+ public List<String> getColumnList() {
+ return columnList;
+ }
+
public IStructuredSelection getSelection(){
List<CdmBase> selection = new ArrayList<>();
int[] fullySelectedRowPositions = bodyLayer.getSelectionLayer().getFullySelectedRowPositions();
}
public void copyDataToClipboard() {
- String textData = "";
+ String textData = ""; //$NON-NLS-1$
IStructuredSelection selection = getSelection();
Object[] objects = selection.toArray();
for (Object object : objects) {
}
}
+ NatTable getNatTable() {
+ return natTable;
+ }
+
}