fix #8642 Add tree editor for rank, NamedArea and PresenceAbsence
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / featuretree / e4 / FeatureTreeEditorComposite.java
index d249461745c6b966ecb2a7c39a845c623f2bc15a..7bc710245fc286d6f97578ff323e82847a5b6e5d 100644 (file)
@@ -24,11 +24,12 @@ import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Button;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Button;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Listener;
 import org.eclipse.swt.widgets.Text;
 import org.eclipse.swt.widgets.Tree;
 
 import org.eclipse.swt.widgets.Text;
 import org.eclipse.swt.widgets.Tree;
 
-import eu.etaxonomy.cdm.model.description.FeatureTree;
+import eu.etaxonomy.cdm.model.term.DefinedTermBase;
+import eu.etaxonomy.cdm.model.term.TermTree;
+import eu.etaxonomy.cdm.model.term.TermType;
 import eu.etaxonomy.taxeditor.editor.definedterm.TermTransfer;
 import eu.etaxonomy.taxeditor.featuretree.FeatureNodeTransfer;
 import eu.etaxonomy.taxeditor.featuretree.FeatureTreeContentProvider;
 import eu.etaxonomy.taxeditor.editor.definedterm.TermTransfer;
 import eu.etaxonomy.taxeditor.featuretree.FeatureNodeTransfer;
 import eu.etaxonomy.taxeditor.featuretree.FeatureTreeContentProvider;
@@ -36,16 +37,16 @@ import eu.etaxonomy.taxeditor.featuretree.FeatureTreeLabelProvider;
 import eu.etaxonomy.taxeditor.l10n.Messages;
 import eu.etaxonomy.taxeditor.model.IDirtyMarkable;
 import eu.etaxonomy.taxeditor.model.ImageResources;
 import eu.etaxonomy.taxeditor.l10n.Messages;
 import eu.etaxonomy.taxeditor.model.IDirtyMarkable;
 import eu.etaxonomy.taxeditor.model.ImageResources;
+import eu.etaxonomy.taxeditor.store.StoreUtil;
 import eu.etaxonomy.taxeditor.ui.dialog.selection.FeatureTreeSelectionDialog;
 
 /**
  * @author pplitzner
  * @since Jun 19, 2017
 import eu.etaxonomy.taxeditor.ui.dialog.selection.FeatureTreeSelectionDialog;
 
 /**
  * @author pplitzner
  * @since Jun 19, 2017
- *
  */
  */
-public class FeatureTreeEditorComposite extends Composite{
+public class FeatureTreeEditorComposite <T extends DefinedTermBase> extends Composite{
 
 
-    private FeatureTree featureTree;
+    private TermTree<T> featureTree;
 
     private Label label_title;
     private Text text_title;
 
     private Label label_title;
     private Text text_title;
@@ -69,43 +70,92 @@ public class FeatureTreeEditorComposite extends Composite{
 
         text_title = new Text(composite_treeTitle, SWT.BORDER);
         text_title.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
 
         text_title = new Text(composite_treeTitle, SWT.BORDER);
         text_title.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
-        text_title.setEnabled(false);
+        text_title.setEditable(false);
 
         btnOpenFeatureTree = new Button(composite_treeTitle, SWT.NONE);
         btnOpenFeatureTree.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false, 1, 1));
         btnOpenFeatureTree.setToolTipText(Messages.FeatureTreeEditorComposite_OPEN_TREE);
         btnOpenFeatureTree.setImage(ImageResources.getImage(ImageResources.BROWSE_ICON));
 
 
         btnOpenFeatureTree = new Button(composite_treeTitle, SWT.NONE);
         btnOpenFeatureTree.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false, 1, 1));
         btnOpenFeatureTree.setToolTipText(Messages.FeatureTreeEditorComposite_OPEN_TREE);
         btnOpenFeatureTree.setImage(ImageResources.getImage(ImageResources.BROWSE_ICON));
 
-        viewer = new TreeViewer(new Tree(this, SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION));
+        viewer = new TreeViewer(new Tree(this, SWT.H_SCROLL | SWT.V_SCROLL | SWT.MULTI));
         Tree tree = viewer.getTree();
         tree.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 3, 1));
         viewer.getControl().setLayoutData(
                 new GridData(SWT.FILL, SWT.FILL, true, true));
     }
 
         Tree tree = viewer.getTree();
         tree.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 3, 1));
         viewer.getControl().setLayoutData(
                 new GridData(SWT.FILL, SWT.FILL, true, true));
     }
 
-    public void init(DragSourceListener dragSourceListener, DropTargetListener dropTargetListener,
-            ISelectionChangedListener viewerSelectionChangedListener, IDirtyMarkable dirtyMarkable,
+    public void init(String label,
+            DragSourceListener dragSourceListener,
+            DropTargetListener dropTargetListener,
+            ISelectionChangedListener viewerSelectionChangedListener,
+            IDirtyMarkable dirtyMarkable,
             ModifyListener textModifyListener) {
             ModifyListener textModifyListener) {
-        this.init(dragSourceListener, dropTargetListener, viewerSelectionChangedListener, null, dirtyMarkable,
+        init(label,
+                null,
+                dragSourceListener,
+                dropTargetListener,
+                null,
+                viewerSelectionChangedListener,
+                null,
+                dirtyMarkable,
                 textModifyListener);
     }
                 textModifyListener);
     }
-    public void init(DragSourceListener dragSourceListener, DropTargetListener dropTargetListener,
+
+    public void init(String label, TermType termType,
+            DragSourceListener dragSourceListener,
+            DropTargetListener dropTargetListener,
+            ISelectionChangedListener viewerSelectionChangedListener,
+            IDirtyMarkable dirtyMarkable,
+            ModifyListener textModifyListener) {
+        this.init(label,
+                termType,
+                dragSourceListener,
+                dropTargetListener,
+                null,
+                viewerSelectionChangedListener,
+                null,
+                dirtyMarkable,
+                textModifyListener);
+    }
+    public void init(DragSourceListener dragSourceListener,
+            DropTargetListener dropTargetListener,
+            Transfer[] transfers,
             ISelectionChangedListener viewerSelectionChangedListener,
             SelectionListener openFeatureTreeSelectionListener,
             ModifyListener textModifyListener) {
             ISelectionChangedListener viewerSelectionChangedListener,
             SelectionListener openFeatureTreeSelectionListener,
             ModifyListener textModifyListener) {
-        init(dragSourceListener, dropTargetListener, viewerSelectionChangedListener, openFeatureTreeSelectionListener,
-                null, textModifyListener);
+        init(null,
+                null,
+                dragSourceListener,
+                dropTargetListener,
+                transfers,
+                viewerSelectionChangedListener,
+                openFeatureTreeSelectionListener,
+                null,
+                textModifyListener);
     }
     }
-    private void init(DragSourceListener dragSourceListener, DropTargetListener dropTargetListener,
+    private void init(String label,
+            TermType termType,
+            DragSourceListener dragSourceListener,
+            DropTargetListener dropTargetListener,
+            Transfer[] transfers,
             ISelectionChangedListener viewerSelectionChangedListener,
             ISelectionChangedListener viewerSelectionChangedListener,
-            SelectionListener openFeatureTreeSelectionListener, IDirtyMarkable dirtyMarkable,
+            SelectionListener openFeatureTreeSelectionListener,
+            IDirtyMarkable dirtyMarkable,
             ModifyListener textModifyListener) {
             ModifyListener textModifyListener) {
+        if(label!=null){
+            label_title.setText(label);
+        }
+
         viewer.setContentProvider(new FeatureTreeContentProvider());
         viewer.setLabelProvider(new FeatureTreeLabelProvider());
 
         int ops = DND.DROP_COPY | DND.DROP_MOVE;
         viewer.setContentProvider(new FeatureTreeContentProvider());
         viewer.setLabelProvider(new FeatureTreeLabelProvider());
 
         int ops = DND.DROP_COPY | DND.DROP_MOVE;
-        Transfer[] transfers = new Transfer[] { FeatureNodeTransfer
-                .getInstance(), TermTransfer.getInstance() };
+        if(transfers==null){
+        transfers = new Transfer[] {
+                FeatureNodeTransfer.getInstance(),
+                TermTransfer.getInstance(),
+                };
+        }
         if(dragSourceListener!=null){
             viewer.addDragSupport(ops, transfers, dragSourceListener);
         }
         if(dragSourceListener!=null){
             viewer.addDragSupport(ops, transfers, dragSourceListener);
         }
@@ -130,11 +180,10 @@ public class FeatureTreeEditorComposite extends Composite{
             btnOpenFeatureTree.addSelectionListener(new SelectionAdapter(){
                 @Override
                 public void widgetSelected(SelectionEvent e) {
             btnOpenFeatureTree.addSelectionListener(new SelectionAdapter(){
                 @Override
                 public void widgetSelected(SelectionEvent e) {
-                    FeatureTree tree = FeatureTreeSelectionDialog.select(getDisplay().getActiveShell(),
-                            null);
+                    TermTree<T> tree = FeatureTreeSelectionDialog.select(getDisplay().getActiveShell(),
+                            null, termType);
                     if(tree!=null){
                         setSelectedTree(tree);
                     if(tree!=null){
                         setSelectedTree(tree);
-                        text_title.setEnabled(false);
                         if(dirtyMarkable!=null){
                             dirtyMarkable.forceDirty();
                         }
                         if(dirtyMarkable!=null){
                             dirtyMarkable.forceDirty();
                         }
@@ -144,31 +193,16 @@ public class FeatureTreeEditorComposite extends Composite{
         }
     }
 
         }
     }
 
-    public void setSelectedTree(FeatureTree featureTree) {
+    public void setSelectedTree(TermTree<T> featureTree) {
         this.featureTree = featureTree;
         this.featureTree = featureTree;
-
         viewer.setInput(featureTree);
         viewer.setInput(featureTree);
-
-        Listener[] listeners = text_title.getListeners(SWT.Modify);
-        for (Listener listener : listeners) {
-            text_title.removeListener(SWT.Modify, listener);
-        }
-        text_title.setText(featureTree!=null?featureTree.getTitleCache():"");
-        for (Listener listener : listeners) {
-            text_title.addListener(SWT.Modify, listener);
-        }
-        text_title.setEnabled(true);
-        text_title.setEnabled(true);
+        StoreUtil.setTextWithoutModifyListeners(text_title, featureTree!=null?featureTree.getTitleCache():"");
     }
 
     }
 
-    public FeatureTree getFeatureTree() {
+    public TermTree<T> getFeatureTree() {
         return featureTree;
     }
 
         return featureTree;
     }
 
-    public Text getText_title() {
-        return text_title;
-    }
-
     public Label getLabel_title() {
         return label_title;
     }
     public Label getLabel_title() {
         return label_title;
     }