Refactor character matrix
[taxeditor.git] / eu.etaxonomy.taxeditor.editor / src / main / java / eu / etaxonomy / taxeditor / editor / descriptiveDataSet / DescriptiveDataSetEditor.java
index fc6625c0826c383fcfbd68d7ec545b5be0ccad36..636dd8b2a9284749f84f4fd397b1dad6fd4305b6 100644 (file)
@@ -29,6 +29,7 @@ import org.eclipse.e4.core.contexts.IEclipseContext;
 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.services.EMenuService;
 import org.eclipse.e4.ui.services.IServiceConstants;
 import org.eclipse.e4.ui.workbench.modeling.ESelectionService;
 import org.eclipse.jface.util.LocalSelectionTransfer;
@@ -48,12 +49,12 @@ import org.eclipse.swt.widgets.Shell;
 
 import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
 import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
+import eu.etaxonomy.cdm.api.service.IDescriptiveDataSetService;
 import eu.etaxonomy.cdm.api.service.ITaxonNodeService;
 import eu.etaxonomy.cdm.api.service.ITermService;
-import eu.etaxonomy.cdm.api.service.IDescriptiveDataSetService;
 import eu.etaxonomy.cdm.model.common.DefinedTermBase;
-import eu.etaxonomy.cdm.model.description.FeatureTree;
 import eu.etaxonomy.cdm.model.description.DescriptiveDataSet;
+import eu.etaxonomy.cdm.model.description.FeatureTree;
 import eu.etaxonomy.cdm.model.location.NamedArea;
 import eu.etaxonomy.cdm.model.name.Rank;
 import eu.etaxonomy.cdm.model.taxon.ITaxonTreeNode;
@@ -99,7 +100,8 @@ IPartContentHasDetails, IDirtyMarkable {
     private ModifyListener labelModifyListener;
 
     @PostConstruct
-    public void create(Composite parent, IEclipseContext context, @Named(IServiceConstants.ACTIVE_SHELL)Shell shell){
+    public void create(Composite parent, IEclipseContext context, @Named(IServiceConstants.ACTIVE_SHELL)Shell shell,
+            EMenuService menuService){
         if (CdmStore.isActive()){
             if(conversation == null){
                 conversation = CdmStore.createConversation();
@@ -124,7 +126,23 @@ IPartContentHasDetails, IDirtyMarkable {
             }
         };
         composite.getRankMin().addSelectionChangedListener(event->dirty.setDirty(true));
+        composite.getRankMin().setText("Select min rank...");
         composite.getRankMax().addSelectionChangedListener(event->dirty.setDirty(true));
+        composite.getRankMin().setText("Select max rank...");
+        composite.getBtnRemoveRankMin().addSelectionListener(new SelectionAdapter() {
+            @Override
+            public void widgetSelected(org.eclipse.swt.events.SelectionEvent e) {
+             composite.getRankMin().setElement(null);
+             dirty.setDirty(true);
+            }
+        });
+        composite.getBtnRemoveRankMax().addSelectionListener(new SelectionAdapter() {
+            @Override
+            public void widgetSelected(org.eclipse.swt.events.SelectionEvent e) {
+                composite.getRankMax().setElement(null);
+                dirty.setDirty(true);
+            }
+        });
 
         composite.getBtnChooseArea().addSelectionListener(new SelectionAdapter() {
 
@@ -156,21 +174,15 @@ IPartContentHasDetails, IDirtyMarkable {
             @Override
             public void keyPressed(KeyEvent e) {
                 if(e.character==SWT.DEL){
-                    IStructuredSelection selection = (IStructuredSelection) composite.getTaxonNodeTree().getSelection();
-                    if(selection.toList().stream().anyMatch(object->!(object instanceof TaxonNode))){
-                        MessagingUtils.warningDialog(Messages.DescriptiveDataSetEditor_DELETE_FAIL_TITLE, this.getClass(), Messages.DescriptiveDataSetEditor_DELETE_FAIL_MESSAGE);
-                        return;
-                    }
-                    Iterator<Object> iterator = selection.iterator();
-                    while(iterator.hasNext()){
-                        Object next = iterator.next();
-                        TaxonNode taxonNode = (TaxonNode) next;
-                        removeTaxonNode(taxonNode);
-                    }
+                    removeSelectedTaxonNodes();
                 }
             }
         });
 
+
+        //create context menu
+        menuService.registerContextMenu(composite.getTaxonNodeTree().getControl(), "eu.etaxonomy.taxeditor.editor.descriptiveDataSet.DescriptiveDataSetEditor.popupmenu.specimeneditor");
+
     }
 
     public void init(UUID descriptiveDataSetUuid) {
@@ -226,11 +238,21 @@ IPartContentHasDetails, IDirtyMarkable {
         dirty.setDirty(true);
     }
 
-    private void removeTaxonNode(TaxonNode taxonNode){
+    public void removeSelectedTaxonNodes(){
+        IStructuredSelection selection = (IStructuredSelection) composite.getTaxonNodeTree().getSelection();
+        if(selection.toList().stream().anyMatch(object->!(object instanceof TaxonNode))){
+            MessagingUtils.warningDialog(Messages.DescriptiveDataSetEditor_DELETE_FAIL_TITLE, this.getClass(), Messages.DescriptiveDataSetEditor_DELETE_FAIL_MESSAGE);
+            return;
+        }
+        Iterator<Object> iterator = selection.iterator();
         Viewer taxonTreeViewer = getTaxonTreeViewer();
         Collection<TaxonNode> input = (Collection<TaxonNode>) taxonTreeViewer.getInput();
-        input.remove(taxonNode);
-        descriptiveDataSet.removeTaxonSubtree(taxonNode);
+        while(iterator.hasNext()){
+            Object next = iterator.next();
+            TaxonNode taxonNode = (TaxonNode) next;
+            input.remove(taxonNode);
+            descriptiveDataSet.removeTaxonSubtree(taxonNode);
+        }
         taxonTreeViewer.setInput(input);
         dirty.setDirty(true);
     }