ref #6805 Only drop features from term editor to feature tree editor
[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.SelectionAdapter;
20 import org.eclipse.swt.events.SelectionEvent;
21 import org.eclipse.swt.events.SelectionListener;
22 import org.eclipse.swt.layout.GridData;
23 import org.eclipse.swt.layout.GridLayout;
24 import org.eclipse.swt.widgets.Button;
25 import org.eclipse.swt.widgets.Composite;
26 import org.eclipse.swt.widgets.Label;
27 import org.eclipse.swt.widgets.Listener;
28 import org.eclipse.swt.widgets.Text;
29 import org.eclipse.swt.widgets.Tree;
30
31 import eu.etaxonomy.cdm.model.description.FeatureTree;
32 import eu.etaxonomy.taxeditor.editor.definedterm.TermTransfer;
33 import eu.etaxonomy.taxeditor.featuretree.FeatureNodeTransfer;
34 import eu.etaxonomy.taxeditor.featuretree.FeatureTreeContentProvider;
35 import eu.etaxonomy.taxeditor.featuretree.FeatureTreeLabelProvider;
36 import eu.etaxonomy.taxeditor.l10n.Messages;
37 import eu.etaxonomy.taxeditor.model.IDirtyMarkable;
38 import eu.etaxonomy.taxeditor.model.ImageResources;
39 import eu.etaxonomy.taxeditor.ui.dialog.selection.FeatureTreeSelectionDialog;
40
41 /**
42 * @author pplitzner
43 * @since Jun 19, 2017
44 *
45 */
46 public class FeatureTreeEditorComposite extends Composite{
47
48 private FeatureTree featureTree;
49
50 private Label label_title;
51 private Text text_title;
52 private Button btnOpenFeatureTree;
53 private TreeViewer viewer;
54
55 public FeatureTreeEditorComposite(Composite parent, int style) {
56 super(parent, style);
57 setLayout(new GridLayout(1, false));
58
59 Composite composite_treeTitle = new Composite(this, SWT.NULL);
60 composite_treeTitle.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true,
61 false));
62 GridLayout gl_composite_treeTitle = new GridLayout(3, false);
63 gl_composite_treeTitle.marginWidth = 0;
64 composite_treeTitle.setLayout(gl_composite_treeTitle);
65
66 label_title = new Label(composite_treeTitle, SWT.NULL);
67 label_title.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
68 label_title.setText(Messages.FeatureTreeEditorComposite_FEATURE_TREE);
69
70 text_title = new Text(composite_treeTitle, SWT.BORDER);
71 text_title.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
72 text_title.setEnabled(false);
73
74 btnOpenFeatureTree = new Button(composite_treeTitle, SWT.NONE);
75 btnOpenFeatureTree.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false, 1, 1));
76 btnOpenFeatureTree.setToolTipText(Messages.FeatureTreeEditorComposite_OPEN_TREE);
77 btnOpenFeatureTree.setImage(ImageResources.getImage(ImageResources.BROWSE_ICON));
78
79 viewer = new TreeViewer(new Tree(this, SWT.H_SCROLL | SWT.V_SCROLL | SWT.MULTI));
80 Tree tree = viewer.getTree();
81 tree.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 3, 1));
82 viewer.getControl().setLayoutData(
83 new GridData(SWT.FILL, SWT.FILL, true, true));
84 }
85
86 public void init(String label,
87 DragSourceListener dragSourceListener,
88 DropTargetListener dropTargetListener,
89 ISelectionChangedListener viewerSelectionChangedListener,
90 IDirtyMarkable dirtyMarkable,
91 ModifyListener textModifyListener) {
92 this.init(label,
93 dragSourceListener,
94 dropTargetListener,
95 null,
96 viewerSelectionChangedListener,
97 null,
98 dirtyMarkable,
99 textModifyListener);
100 }
101 public void init(DragSourceListener dragSourceListener,
102 DropTargetListener dropTargetListener,
103 Transfer[] transfers,
104 ISelectionChangedListener viewerSelectionChangedListener,
105 SelectionListener openFeatureTreeSelectionListener,
106 ModifyListener textModifyListener) {
107 init(null, dragSourceListener,
108 dropTargetListener,
109 transfers,
110 viewerSelectionChangedListener,
111 openFeatureTreeSelectionListener,
112 null,
113 textModifyListener);
114 }
115 private void init(String label, DragSourceListener dragSourceListener,
116 DropTargetListener dropTargetListener,
117 Transfer[] transfers,
118 ISelectionChangedListener viewerSelectionChangedListener,
119 SelectionListener openFeatureTreeSelectionListener,
120 IDirtyMarkable dirtyMarkable,
121 ModifyListener textModifyListener) {
122 if(label!=null){
123 label_title.setText(label);
124 }
125
126 viewer.setContentProvider(new FeatureTreeContentProvider());
127 viewer.setLabelProvider(new FeatureTreeLabelProvider());
128
129 int ops = DND.DROP_COPY | DND.DROP_MOVE;
130 if(transfers==null){
131 transfers = new Transfer[] {
132 FeatureNodeTransfer.getInstance(),
133 TermTransfer.getInstance(),
134 };
135 }
136 if(dragSourceListener!=null){
137 viewer.addDragSupport(ops, transfers, dragSourceListener);
138 }
139 if(dropTargetListener!=null){
140 viewer.addDropSupport(ops, transfers, dropTargetListener);
141 }
142
143 if(viewerSelectionChangedListener!=null){
144 viewer.addSelectionChangedListener(viewerSelectionChangedListener);
145 }
146
147 if(textModifyListener!=null){
148 text_title.addModifyListener(textModifyListener);
149 }
150
151 //add specific selection listener
152 if(openFeatureTreeSelectionListener!=null){
153 btnOpenFeatureTree.addSelectionListener(openFeatureTreeSelectionListener);
154 }
155 else{
156 //add default selection listener
157 btnOpenFeatureTree.addSelectionListener(new SelectionAdapter(){
158 @Override
159 public void widgetSelected(SelectionEvent e) {
160 FeatureTree tree = FeatureTreeSelectionDialog.select(getDisplay().getActiveShell(),
161 null);
162 if(tree!=null){
163 setSelectedTree(tree);
164 text_title.setEnabled(false);
165 if(dirtyMarkable!=null){
166 dirtyMarkable.forceDirty();
167 }
168 }
169 }
170 });
171 }
172 }
173
174 public void setSelectedTree(FeatureTree featureTree) {
175 this.featureTree = featureTree;
176
177 viewer.setInput(featureTree);
178
179 Listener[] listeners = text_title.getListeners(SWT.Modify);
180 for (Listener listener : listeners) {
181 text_title.removeListener(SWT.Modify, listener);
182 }
183 text_title.setText(featureTree!=null?featureTree.getTitleCache():"");
184 for (Listener listener : listeners) {
185 text_title.addListener(SWT.Modify, listener);
186 }
187 text_title.setEnabled(true);
188 text_title.setEnabled(true);
189 }
190
191 public FeatureTree getFeatureTree() {
192 return featureTree;
193 }
194
195 public Text getText_title() {
196 return text_title;
197 }
198
199 public Label getLabel_title() {
200 return label_title;
201 }
202
203 public Button getBtnOpenFeatureTree() {
204 return btnOpenFeatureTree;
205 }
206
207 public TreeViewer getViewer() {
208 return viewer;
209 }
210
211 }