ref #6805 Add drag and drop from Feature Editor to FeatureTreeEditor
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / featuretree / e4 / FeatureTreeEditorComposite.java
1 /**
2 * Copyright (C) 2017 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
5 *
6 * The contents of this file are subject to the Mozilla Public License Version 1.1
7 * See LICENSE.TXT at the top of this package for the full license terms.
8 */
9 package eu.etaxonomy.taxeditor.featuretree.e4;
10
11 import org.eclipse.jface.viewers.ISelectionChangedListener;
12 import org.eclipse.jface.viewers.TreeViewer;
13 import org.eclipse.swt.SWT;
14 import org.eclipse.swt.dnd.DND;
15 import org.eclipse.swt.dnd.DragSourceListener;
16 import org.eclipse.swt.dnd.DropTargetListener;
17 import org.eclipse.swt.dnd.Transfer;
18 import org.eclipse.swt.events.ModifyListener;
19 import org.eclipse.swt.events.SelectionListener;
20 import org.eclipse.swt.layout.GridData;
21 import org.eclipse.swt.layout.GridLayout;
22 import org.eclipse.swt.widgets.Button;
23 import org.eclipse.swt.widgets.Composite;
24 import org.eclipse.swt.widgets.Label;
25 import org.eclipse.swt.widgets.Text;
26 import org.eclipse.swt.widgets.Tree;
27
28 import eu.etaxonomy.cdm.model.description.FeatureTree;
29 import eu.etaxonomy.taxeditor.editor.definedterm.TermTransfer;
30 import eu.etaxonomy.taxeditor.featuretree.FeatureNodeTransfer;
31 import eu.etaxonomy.taxeditor.featuretree.FeatureTreeContentProvider;
32 import eu.etaxonomy.taxeditor.featuretree.FeatureTreeLabelProvider;
33 import eu.etaxonomy.taxeditor.l10n.Messages;
34 import eu.etaxonomy.taxeditor.model.ImageResources;
35 import eu.etaxonomy.taxeditor.preference.IPreferenceKeys;
36 import eu.etaxonomy.taxeditor.store.internal.TaxeditorStorePlugin;
37
38 /**
39 * @author pplitzner
40 * @since Jun 19, 2017
41 *
42 */
43 public class FeatureTreeEditorComposite extends Composite{
44
45 private FeatureTree featureTree;
46
47 private Label label_title;
48 private Text text_title;
49 private Button btnOpenFeatureTree;
50 private TreeViewer viewer;
51 private Button btnAdd;
52 private Button btnRemove;
53 private Button btnExportTree;
54
55 private Composite composite_buttons;
56
57 public FeatureTreeEditorComposite(Composite parent, int style) {
58 super(parent, style);
59 setLayout(new GridLayout(2, false));
60
61 Composite composite_treeTitle = new Composite(this, SWT.NULL);
62 composite_treeTitle.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true,
63 false));
64 GridLayout gl_composite_treeTitle = new GridLayout(2, false);
65 gl_composite_treeTitle.marginWidth = 0;
66 composite_treeTitle.setLayout(gl_composite_treeTitle);
67
68 label_title = new Label(composite_treeTitle, SWT.NULL);
69 label_title.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
70 label_title.setText(Messages.FeatureTreeEditorComposite_FEATURE_TREE);
71
72 text_title = new Text(composite_treeTitle, SWT.BORDER);
73 text_title.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
74 text_title.setEnabled(false);
75
76 btnOpenFeatureTree = new Button(this, SWT.NONE);
77 btnOpenFeatureTree.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false, 1, 1));
78 btnOpenFeatureTree.setToolTipText(Messages.FeatureTreeEditorComposite_OPEN_TREE);
79 btnOpenFeatureTree.setImage(ImageResources.getImage(ImageResources.BROWSE_ICON));
80
81 viewer = new TreeViewer(this);
82 Tree tree = viewer.getTree();
83 tree.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
84 viewer.getControl().setLayoutData(
85 new GridData(SWT.FILL, SWT.FILL, true, true));
86
87 composite_buttons = new Composite(this,
88 SWT.NULL);
89 composite_buttons.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, false,
90 false));
91 composite_buttons.setLayout(new GridLayout());
92
93 btnAdd = new Button(composite_buttons, SWT.PUSH);
94 btnAdd.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false, 1, 1));
95 btnAdd.setToolTipText(Messages.FeatureTreeEditorComposite_ADD_FEATURE);
96 btnAdd.setImage(ImageResources.getImage(ImageResources.ADD_EDIT));
97 btnRemove = new Button(composite_buttons, SWT.PUSH);
98 btnRemove.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false, 1, 1));
99 btnRemove.setToolTipText(Messages.FeatureTreeEditorComposite_REMOVE_FEATURE);
100 btnRemove.setImage(ImageResources.getImage(ImageResources.TRASH_ICON));
101
102 btnExportTree = new Button(composite_buttons, SWT.NONE);
103 btnExportTree.setToolTipText("Export feature tree");
104 btnExportTree.setImage(ImageResources.getImage(ImageResources.MOVE_ICON));
105 btnExportTree.setVisible(TaxeditorStorePlugin.getDefault().getPreferenceStore().getBoolean(IPreferenceKeys.SHOW_EXPERIMENTAL_FEATURES));
106
107 setButtonsEnabled(false);
108 }
109
110 public void init(DragSourceListener dragSourceListener,
111 DropTargetListener dropTargetListener, ISelectionChangedListener viewerSelectionChangedListener,
112 SelectionListener openFeatureTreeSelectionListener, SelectionListener addButtonSelectionListener, SelectionListener removeButtonSelectionListener, SelectionListener exportButtonSelectionListener) {
113 viewer.setContentProvider(new FeatureTreeContentProvider());
114 viewer.setLabelProvider(new FeatureTreeLabelProvider());
115
116 int ops = DND.DROP_COPY | DND.DROP_MOVE;
117 Transfer[] transfers = new Transfer[] { FeatureNodeTransfer
118 .getInstance(), TermTransfer.getInstance() };
119 if(dragSourceListener!=null){
120 viewer.addDragSupport(ops, transfers, dragSourceListener);
121 }
122 if(dropTargetListener!=null){
123 viewer.addDropSupport(ops, transfers, dropTargetListener);
124 }
125
126 viewer.addSelectionChangedListener(viewerSelectionChangedListener);
127
128 btnAdd.addSelectionListener(addButtonSelectionListener);
129 btnRemove.addSelectionListener(removeButtonSelectionListener);
130 btnExportTree.addSelectionListener(exportButtonSelectionListener);
131
132 btnOpenFeatureTree.addSelectionListener(openFeatureTreeSelectionListener);
133 }
134
135 public void setSelectedTree(FeatureTree featureTree, ModifyListener modifyListener) {
136 this.featureTree = featureTree;
137
138 getViewer().setInput(featureTree);
139
140 getText_title().removeModifyListener(modifyListener);
141 getText_title().setText(featureTree.getTitleCache());
142 getText_title().addModifyListener(modifyListener);
143 getText_title().setEnabled(true);
144 setButtonsEnabled(true);
145 text_title.setEnabled(true);
146 }
147
148 private void setButtonsEnabled(boolean enabled){
149 btnAdd.setEnabled(enabled);
150 btnRemove.setEnabled(enabled);
151 btnExportTree.setEnabled(enabled);
152 }
153
154 /**
155 * @return the featureTree
156 */
157 public FeatureTree getFeatureTree() {
158 return featureTree;
159 }
160
161 /**
162 * @return the label_title
163 */
164 public Label getLabel_title() {
165 return label_title;
166 }
167
168 /**
169 * @return the text_title
170 */
171 public Text getText_title() {
172 return text_title;
173 }
174
175 /**
176 * @return the btnOpenFeatureTree
177 */
178 public Button getBtnOpenFeatureTree() {
179 return btnOpenFeatureTree;
180 }
181
182 /**
183 * @return the viewer
184 */
185 public TreeViewer getViewer() {
186 return viewer;
187 }
188
189 /**
190 * @return the button_add
191 */
192 public Button getBtnAdd() {
193 return btnAdd;
194 }
195
196 /**
197 * @return the button_remove
198 */
199 public Button getBtnRemove() {
200 return btnRemove;
201 }
202
203 /**
204 * @return the composite_buttons
205 */
206 public Composite getComposite_buttons() {
207 return composite_buttons;
208 }
209
210 /**
211 * @return the btnExportTree
212 */
213 public Button getBtnExportTree() {
214 return btnExportTree;
215 }
216
217 }