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 48a55f9da4500379a7b2bc6fd39e78a0f8ea9d73..7bc710245fc286d6f97578ff323e82847a5b6e5d 100644 (file)
@@ -16,6 +16,8 @@ import org.eclipse.swt.dnd.DragSourceListener;
 import org.eclipse.swt.dnd.DropTargetListener;
 import org.eclipse.swt.dnd.Transfer;
 import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
 import org.eclipse.swt.events.SelectionListener;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.layout.GridLayout;
@@ -25,42 +27,40 @@ import org.eclipse.swt.widgets.Label;
 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.featuretree.FeatureTreeLabelProvider;
 import eu.etaxonomy.taxeditor.l10n.Messages;
+import eu.etaxonomy.taxeditor.model.IDirtyMarkable;
 import eu.etaxonomy.taxeditor.model.ImageResources;
-import eu.etaxonomy.taxeditor.preference.IPreferenceKeys;
-import eu.etaxonomy.taxeditor.store.internal.TaxeditorStorePlugin;
+import eu.etaxonomy.taxeditor.store.StoreUtil;
+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 Button btnOpenFeatureTree;
     private TreeViewer viewer;
-    private Button btnAdd;
-    private Button btnRemove;
-    private Button btnExportTree;
-
-    private Composite composite_buttons;
 
     public FeatureTreeEditorComposite(Composite parent, int style) {
         super(parent, style);
-        setLayout(new GridLayout(2, false));
+        setLayout(new GridLayout(1, false));
 
         Composite composite_treeTitle = new Composite(this, SWT.NULL);
         composite_treeTitle.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true,
                 false));
-        GridLayout gl_composite_treeTitle = new GridLayout(2, false);
+        GridLayout gl_composite_treeTitle = new GridLayout(3, false);
         gl_composite_treeTitle.marginWidth = 0;
         composite_treeTitle.setLayout(gl_composite_treeTitle);
 
@@ -70,48 +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.setEditable(false);
 
-        btnOpenFeatureTree = new Button(this, SWT.NONE);
+        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(this);
+        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, 1, 1));
+        tree.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 3, 1));
         viewer.getControl().setLayoutData(
                 new GridData(SWT.FILL, SWT.FILL, true, true));
+    }
 
-        composite_buttons = new Composite(this,
-                SWT.NULL);
-        composite_buttons.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, false,
-                false));
-        composite_buttons.setLayout(new GridLayout());
-
-        btnAdd = new Button(composite_buttons, SWT.PUSH);
-        btnAdd.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false, 1, 1));
-        btnAdd.setToolTipText(Messages.FeatureTreeEditorComposite_ADD_FEATURE);
-        btnAdd.setImage(ImageResources.getImage(ImageResources.ADD_EDIT));
-        btnRemove = new Button(composite_buttons, SWT.PUSH);
-        btnRemove.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false, 1, 1));
-        btnRemove.setToolTipText(Messages.FeatureTreeEditorComposite_REMOVE_FEATURE);
-        btnRemove.setImage(ImageResources.getImage(ImageResources.TRASH_ICON));
-
-        btnExportTree = new Button(composite_buttons, SWT.NONE);
-        btnExportTree.setToolTipText("Export feature tree");
-        btnExportTree.setImage(ImageResources.getImage(ImageResources.MOVE_ICON));
-        btnExportTree.setVisible(TaxeditorStorePlugin.getDefault().getPreferenceStore().getBoolean(IPreferenceKeys.SHOW_EXPERIMENTAL_FEATURES));
+    public void init(String label,
+            DragSourceListener dragSourceListener,
+            DropTargetListener dropTargetListener,
+            ISelectionChangedListener viewerSelectionChangedListener,
+            IDirtyMarkable dirtyMarkable,
+            ModifyListener textModifyListener) {
+        init(label,
+                null,
+                dragSourceListener,
+                dropTargetListener,
+                null,
+                viewerSelectionChangedListener,
+                null,
+                dirtyMarkable,
+                textModifyListener);
     }
 
+    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, ISelectionChangedListener viewerSelectionChangedListener,
-            SelectionListener openFeatureTreeSelectionListener, SelectionListener addButtonSelectionListener, SelectionListener removeButtonSelectionListener, SelectionListener exportButtonSelectionListener) {
+            DropTargetListener dropTargetListener,
+            Transfer[] transfers,
+            ISelectionChangedListener viewerSelectionChangedListener,
+            SelectionListener openFeatureTreeSelectionListener,
+            ModifyListener textModifyListener) {
+        init(null,
+                null,
+                dragSourceListener,
+                dropTargetListener,
+                transfers,
+                viewerSelectionChangedListener,
+                openFeatureTreeSelectionListener,
+                null,
+                textModifyListener);
+    }
+    private void init(String label,
+            TermType termType,
+            DragSourceListener dragSourceListener,
+            DropTargetListener dropTargetListener,
+            Transfer[] transfers,
+            ISelectionChangedListener viewerSelectionChangedListener,
+            SelectionListener openFeatureTreeSelectionListener,
+            IDirtyMarkable dirtyMarkable,
+            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;
-        Transfer[] transfers = new Transfer[] { FeatureNodeTransfer
-                .getInstance() };
+        if(transfers==null){
+        transfers = new Transfer[] {
+                FeatureNodeTransfer.getInstance(),
+                TermTransfer.getInstance(),
+                };
+        }
         if(dragSourceListener!=null){
             viewer.addDragSupport(ops, transfers, dragSourceListener);
         }
@@ -119,86 +163,56 @@ public class FeatureTreeEditorComposite extends Composite{
             viewer.addDropSupport(ops, transfers, dropTargetListener);
         }
 
-        viewer.addSelectionChangedListener(viewerSelectionChangedListener);
+        if(viewerSelectionChangedListener!=null){
+            viewer.addSelectionChangedListener(viewerSelectionChangedListener);
+        }
 
-        btnAdd.addSelectionListener(addButtonSelectionListener);
-        btnRemove.addSelectionListener(removeButtonSelectionListener);
-        btnExportTree.addSelectionListener(exportButtonSelectionListener);
+        if(textModifyListener!=null){
+            text_title.addModifyListener(textModifyListener);
+        }
 
-        btnOpenFeatureTree.addSelectionListener(openFeatureTreeSelectionListener);
+        //add specific selection listener
+        if(openFeatureTreeSelectionListener!=null){
+            btnOpenFeatureTree.addSelectionListener(openFeatureTreeSelectionListener);
+        }
+        else{
+            //add default selection listener
+            btnOpenFeatureTree.addSelectionListener(new SelectionAdapter(){
+                @Override
+                public void widgetSelected(SelectionEvent e) {
+                    TermTree<T> tree = FeatureTreeSelectionDialog.select(getDisplay().getActiveShell(),
+                            null, termType);
+                    if(tree!=null){
+                        setSelectedTree(tree);
+                        if(dirtyMarkable!=null){
+                            dirtyMarkable.forceDirty();
+                        }
+                    }
+                }
+            });
+        }
     }
 
-    public void setSelectedTree(FeatureTree featureTree, ModifyListener modifyListener) {
+    public void setSelectedTree(TermTree<T> featureTree) {
         this.featureTree = featureTree;
-
-        getViewer().setInput(featureTree);
-
-        getText_title().removeModifyListener(modifyListener);
-        getText_title().setText(featureTree.getTitleCache());
-        getText_title().addModifyListener(modifyListener);
+        viewer.setInput(featureTree);
+        StoreUtil.setTextWithoutModifyListeners(text_title, featureTree!=null?featureTree.getTitleCache():"");
     }
 
-    /**
-     * @return the featureTree
-     */
-    public FeatureTree getFeatureTree() {
+    public TermTree<T> getFeatureTree() {
         return featureTree;
     }
 
-    /**
-     * @return the label_title
-     */
     public Label getLabel_title() {
         return label_title;
     }
 
-    /**
-     * @return the text_title
-     */
-    public Text getText_title() {
-        return text_title;
-    }
-
-    /**
-     * @return the btnOpenFeatureTree
-     */
     public Button getBtnOpenFeatureTree() {
         return btnOpenFeatureTree;
     }
 
-    /**
-     * @return the viewer
-     */
     public TreeViewer getViewer() {
         return viewer;
     }
 
-    /**
-     * @return the button_add
-     */
-    public Button getBtnAdd() {
-        return btnAdd;
-    }
-
-    /**
-     * @return the button_remove
-     */
-    public Button getBtnRemove() {
-        return btnRemove;
-    }
-
-    /**
-     * @return the composite_buttons
-     */
-    public Composite getComposite_buttons() {
-        return composite_buttons;
-    }
-
-    /**
-     * @return the btnExportTree
-     */
-    public Button getBtnExportTree() {
-        return btnExportTree;
-    }
-
 }