import org.eclipse.e4.ui.di.Focus;
import org.eclipse.e4.ui.di.Persist;
import org.eclipse.e4.ui.model.application.ui.MDirtyable;
+import org.eclipse.e4.ui.model.application.ui.basic.MPart;
+import org.eclipse.e4.ui.workbench.modeling.ESelectionService;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.nebula.widgets.nattable.NatTable;
import org.eclipse.nebula.widgets.nattable.data.IDataProvider;
import org.eclipse.nebula.widgets.nattable.grid.layer.RowHeaderLayer;
import org.eclipse.nebula.widgets.nattable.layer.DataLayer;
import org.eclipse.nebula.widgets.nattable.layer.ILayer;
+import org.eclipse.nebula.widgets.nattable.layer.ILayerListener;
+import org.eclipse.nebula.widgets.nattable.layer.cell.ILayerCell;
+import org.eclipse.nebula.widgets.nattable.layer.event.ILayerEvent;
import org.eclipse.nebula.widgets.nattable.selection.SelectionLayer;
+import org.eclipse.nebula.widgets.nattable.selection.event.CellSelectionEvent;
import org.eclipse.nebula.widgets.nattable.viewport.ViewportLayer;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
+import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
import eu.etaxonomy.cdm.api.service.IOccurrenceService;
import eu.etaxonomy.cdm.api.service.IWorkingSetService;
import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
import eu.etaxonomy.cdm.model.taxon.Taxon;
import eu.etaxonomy.cdm.model.taxon.TaxonNode;
+import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
+import eu.etaxonomy.taxeditor.model.IDirtyMarkable;
+import eu.etaxonomy.taxeditor.model.IPartContentHasDetails;
import eu.etaxonomy.taxeditor.store.CdmStore;
import eu.etaxonomy.taxeditor.workbench.part.IE4SavablePart;
* @since Nov 26, 2017
*
*/
-public class CharacterMatrix implements IE4SavablePart{
+public class CharacterMatrix implements IE4SavablePart, IPartContentHasDetails, IConversationEnabled, IDirtyMarkable{
private WorkingSet workingSet;
private ConversationHolder conversation;
+ @Inject
+ private ESelectionService selService;
+
@Inject
private MDirtyable dirty;
+ @Inject
+ private MPart thisPart;
+
+ private NatTable natTable;
+
@PostConstruct
public void create(Composite parent) {
if(CdmStore.isActive() && conversation==null){
public void init(WorkingSet workingSet) {
this.workingSet = workingSet;
+ thisPart.setLabel(workingSet.getLabel());
// create the data provider
SpecimenColumnPropertyAccessor columnPropertyAccessor = new SpecimenColumnPropertyAccessor(workingSet);
// create the grid layer composed with the prior created layer stacks
GridLayer gridLayer = new GridLayer(viewportLayer, columnHeaderLayer, rowHeaderLayer, cornerLayer);
- NatTable natTable = new NatTable(parent, gridLayer);
+ natTable = new NatTable(parent, gridLayer);
+ natTable.addLayerListener(new ILayerListener() {
+
+ @Override
+ public void handleLayerEvent(ILayerEvent event) {
+ if(event instanceof CellSelectionEvent){
+ CellSelectionEvent cellSelectionEvent = (CellSelectionEvent)event;
+ Collection<ILayerCell> selectedCells = cellSelectionEvent.getSelectionLayer().getSelectedCells();
+ if(selectedCells.size()==1){
+ ILayerCell cell = selectedCells.iterator().next();
+ selService.setSelection(cell.getDataValue());
+ }
+ }
+ }
+ });
GridDataFactory.fillDefaults().grab(true, true).applyTo(natTable);
}
}
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void update(CdmDataChangeMap arg0) {
+ }
+
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public ConversationHolder getConversationHolder() {
+ return conversation;
+ }
+
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void changed(Object element) {
+ dirty.setDirty(true);
+ natTable.refresh();
+ }
+
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void forceDirty() {
+ dirty.setDirty(true);
+ }
+
}