From: Patrick Plitzner Date: Tue, 24 Jul 2018 13:44:12 +0000 (+0200) Subject: Refactor categorical combo box creation X-Git-Tag: 5.2.0^2~62 X-Git-Url: https://dev.e-taxonomy.eu/gitweb/taxeditor.git/commitdiff_plain/bd0b8f0ec4723d4e0a390c11cc2951d0868fd070 Refactor categorical combo box creation --- diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/matrix/CellEditorDataConversionConfiguration.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/matrix/CellEditorDataConversionConfiguration.java index 500f5768d..94943d1a0 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/matrix/CellEditorDataConversionConfiguration.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/matrix/CellEditorDataConversionConfiguration.java @@ -21,7 +21,7 @@ import org.eclipse.nebula.widgets.nattable.edit.gui.ICellEditDialog; import org.eclipse.nebula.widgets.nattable.style.DisplayMode; import org.eclipse.swt.graphics.Point; -import eu.etaxonomy.cdm.model.description.Feature; +import eu.etaxonomy.taxeditor.editor.descriptiveDataSet.matrix.categorical.CategoricalComboBoxDataProvider; import eu.etaxonomy.taxeditor.editor.descriptiveDataSet.matrix.categorical.CategoricalDataCellEditor; import eu.etaxonomy.taxeditor.editor.descriptiveDataSet.matrix.categorical.CategoricalDataDisplayConverter; import eu.etaxonomy.taxeditor.editor.descriptiveDataSet.matrix.quantitative.QuantitativeDataDialogEditor; @@ -87,6 +87,12 @@ final class CellEditorDataConversionConfiguration extends AbstractRegistryConfig DisplayMode.NORMAL, CharacterMatrixConfigLabelAccumulator.CATEGORICAL ); + //register categorical editor + configRegistry.registerConfigAttribute(EditConfigAttributes.CELL_EDITOR, + new CategoricalDataCellEditor(matrix, new CategoricalComboBoxDataProvider(matrix)), + DisplayMode.EDIT, + CharacterMatrixConfigLabelAccumulator.CATEGORICAL + ); /** @@ -141,21 +147,6 @@ final class CellEditorDataConversionConfiguration extends AbstractRegistryConfig editDialogSettings, DisplayMode.EDIT, CharacterMatrixConfigLabelAccumulator.QUANTITATIVE); - - - //TODO: this for loop can maybe be avoided - matrix.getFeatures().forEach(feature->registerColumnConfiguration(feature, configRegistry)); } - private void registerColumnConfiguration(Feature feature, IConfigRegistry configRegistry) { - if(feature.isSupportsCategoricalData()){ - //add combo box cell editor - //register editor - configRegistry.registerConfigAttribute(EditConfigAttributes.CELL_EDITOR, - new CategoricalDataCellEditor(matrix.getSupportedStatesForCategoricalFeature(feature), matrix, feature), - DisplayMode.EDIT, - MatrixUtility.getProperty(feature)); - - } - } } diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/matrix/categorical/CategoricalComboBoxDataProvider.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/matrix/categorical/CategoricalComboBoxDataProvider.java new file mode 100644 index 000000000..645158c1f --- /dev/null +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/matrix/categorical/CategoricalComboBoxDataProvider.java @@ -0,0 +1,46 @@ +// $Id$ +/** +* Copyright (C) 2018 EDIT +* European Distributed Institute of Taxonomy +* http://www.e-taxonomy.eu +* +* The contents of this file are subject to the Mozilla Public License Version 1.1 +* See LICENSE.TXT at the top of this package for the full license terms. +*/ +package eu.etaxonomy.taxeditor.editor.descriptiveDataSet.matrix.categorical; + +import java.util.List; + +import org.eclipse.nebula.widgets.nattable.edit.editor.IComboBoxDataProvider; + +import eu.etaxonomy.cdm.model.description.Feature; +import eu.etaxonomy.cdm.model.description.State; +import eu.etaxonomy.taxeditor.editor.descriptiveDataSet.matrix.CharacterMatrix; + +/** + * @author pplitzner + * @date 24.07.2018 + * + */ +public class CategoricalComboBoxDataProvider implements IComboBoxDataProvider { + + private CharacterMatrix matrix; + private int maxVisibleItems; + + public CategoricalComboBoxDataProvider(CharacterMatrix matrix) { + super(); + this.matrix = matrix; + } + + @Override + public List getValues(int columnIndex, int rowIndex) { + Feature feature = matrix.getIndexToFeatureMap().get(columnIndex); + List supportedStatesForCategoricalFeature = matrix.getSupportedStatesForCategoricalFeature(feature); + maxVisibleItems = Math.max(3, Math.min(supportedStatesForCategoricalFeature.size()-1, 10)); + return supportedStatesForCategoricalFeature; + } + + int getMaxVisibleItems(){ + return maxVisibleItems; + } +} diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/matrix/categorical/CategoricalDataCellEditor.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/matrix/categorical/CategoricalDataCellEditor.java index 396a3caa9..d9492203e 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/matrix/categorical/CategoricalDataCellEditor.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/matrix/categorical/CategoricalDataCellEditor.java @@ -8,8 +8,6 @@ */ package eu.etaxonomy.taxeditor.editor.descriptiveDataSet.matrix.categorical; -import java.util.List; - import org.eclipse.nebula.widgets.nattable.edit.editor.ComboBoxCellEditor; import org.eclipse.nebula.widgets.nattable.widget.NatCombo; import org.eclipse.swt.events.SelectionEvent; @@ -19,7 +17,6 @@ import org.eclipse.swt.widgets.Control; import eu.etaxonomy.cdm.api.service.dto.RowWrapperDTO; import eu.etaxonomy.cdm.model.description.Feature; -import eu.etaxonomy.cdm.model.description.State; import eu.etaxonomy.taxeditor.editor.descriptiveDataSet.matrix.CharacterMatrix; /** @@ -31,12 +28,10 @@ import eu.etaxonomy.taxeditor.editor.descriptiveDataSet.matrix.CharacterMatrix; public class CategoricalDataCellEditor extends ComboBoxCellEditor{ private CharacterMatrix matrix; - private Feature feature; - public CategoricalDataCellEditor(List list, CharacterMatrix matrix, Feature feature) { - super(list, Math.max(3, Math.min(list.size()-1, 10))); + public CategoricalDataCellEditor(CharacterMatrix matrix, CategoricalComboBoxDataProvider categoricalComboBoxDataProvider) { + super(categoricalComboBoxDataProvider, categoricalComboBoxDataProvider.getMaxVisibleItems()); this.matrix = matrix; - this.feature = feature; setUseCheckbox(true); setMultiselect(true); } @@ -46,15 +41,13 @@ public class CategoricalDataCellEditor extends ComboBoxCellEditor{ if(canonicalValue==null){ Object rowWrapper = matrix.getBodyDataProvider().getRowObject(this.getRowIndex()); if(rowWrapper instanceof RowWrapperDTO){ + Feature feature = matrix.getIndexToFeatureMap().get(getColumnIndex()); ((RowWrapperDTO) rowWrapper).addCategoricalData(feature); } } super.setCanonicalValue(canonicalValue); } - /** - * {@inheritDoc} - */ @Override protected Control activateCell(Composite parent, Object originalCanonicalValue) { if(matrix.getBodyDataProvider().getRowObject(this.getRowIndex()) instanceof RowWrapperDTO){