ref #6774 Adapt to service layer changes
[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.term.DefinedTermBase;
32 import eu.etaxonomy.cdm.model.term.TermType;
33 import eu.etaxonomy.cdm.model.term.FeatureTree;
34 import eu.etaxonomy.taxeditor.editor.definedterm.TermTransfer;
35 import eu.etaxonomy.taxeditor.featuretree.FeatureNodeTransfer;
36 import eu.etaxonomy.taxeditor.featuretree.FeatureTreeContentProvider;
37 import eu.etaxonomy.taxeditor.featuretree.FeatureTreeLabelProvider;
38 import eu.etaxonomy.taxeditor.l10n.Messages;
39 import eu.etaxonomy.taxeditor.model.IDirtyMarkable;
40 import eu.etaxonomy.taxeditor.model.ImageResources;
41 import eu.etaxonomy.taxeditor.ui.dialog.selection.FeatureTreeSelectionDialog;
42
43 /**
44 * @author pplitzner
45 * @since Jun 19, 2017
46 *
47 */
48 public class FeatureTreeEditorComposite <T extends DefinedTermBase> extends Composite{
49
50 private FeatureTree<T> featureTree;
51
52 private Label label_title;
53 private Text text_title;
54 private Button btnOpenFeatureTree;
55 private TreeViewer viewer;
56
57 public FeatureTreeEditorComposite(Composite parent, int style) {
58 super(parent, style);
59 setLayout(new GridLayout(1, 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(3, 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.setEditable(false);
75
76 btnOpenFeatureTree = new Button(composite_treeTitle, 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(new Tree(this, SWT.H_SCROLL | SWT.V_SCROLL | SWT.MULTI));
82 Tree tree = viewer.getTree();
83 tree.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 3, 1));
84 viewer.getControl().setLayoutData(
85 new GridData(SWT.FILL, SWT.FILL, true, true));
86 }
87
88 public void init(String label,
89 DragSourceListener dragSourceListener,
90 DropTargetListener dropTargetListener,
91 ISelectionChangedListener viewerSelectionChangedListener,
92 IDirtyMarkable dirtyMarkable,
93 ModifyListener textModifyListener) {
94 init(label,
95 null,
96 dragSourceListener,
97 dropTargetListener,
98 null,
99 viewerSelectionChangedListener,
100 null,
101 dirtyMarkable,
102 textModifyListener);
103 }
104
105 public void init(String label, TermType termType,
106 DragSourceListener dragSourceListener,
107 DropTargetListener dropTargetListener,
108 ISelectionChangedListener viewerSelectionChangedListener,
109 IDirtyMarkable dirtyMarkable,
110 ModifyListener textModifyListener) {
111 this.init(label,
112 termType,
113 dragSourceListener,
114 dropTargetListener,
115 null,
116 viewerSelectionChangedListener,
117 null,
118 dirtyMarkable,
119 textModifyListener);
120 }
121 public void init(DragSourceListener dragSourceListener,
122 DropTargetListener dropTargetListener,
123 Transfer[] transfers,
124 ISelectionChangedListener viewerSelectionChangedListener,
125 SelectionListener openFeatureTreeSelectionListener,
126 ModifyListener textModifyListener) {
127 init(null,
128 null,
129 dragSourceListener,
130 dropTargetListener,
131 transfers,
132 viewerSelectionChangedListener,
133 openFeatureTreeSelectionListener,
134 null,
135 textModifyListener);
136 }
137 private void init(String label,
138 TermType termType,
139 DragSourceListener dragSourceListener,
140 DropTargetListener dropTargetListener,
141 Transfer[] transfers,
142 ISelectionChangedListener viewerSelectionChangedListener,
143 SelectionListener openFeatureTreeSelectionListener,
144 IDirtyMarkable dirtyMarkable,
145 ModifyListener textModifyListener) {
146 if(label!=null){
147 label_title.setText(label);
148 }
149
150 viewer.setContentProvider(new FeatureTreeContentProvider());
151 viewer.setLabelProvider(new FeatureTreeLabelProvider());
152
153 int ops = DND.DROP_COPY | DND.DROP_MOVE;
154 if(transfers==null){
155 transfers = new Transfer[] {
156 FeatureNodeTransfer.getInstance(),
157 TermTransfer.getInstance(),
158 };
159 }
160 if(dragSourceListener!=null){
161 viewer.addDragSupport(ops, transfers, dragSourceListener);
162 }
163 if(dropTargetListener!=null){
164 viewer.addDropSupport(ops, transfers, dropTargetListener);
165 }
166
167 if(viewerSelectionChangedListener!=null){
168 viewer.addSelectionChangedListener(viewerSelectionChangedListener);
169 }
170
171 if(textModifyListener!=null){
172 text_title.addModifyListener(textModifyListener);
173 }
174
175 //add specific selection listener
176 if(openFeatureTreeSelectionListener!=null){
177 btnOpenFeatureTree.addSelectionListener(openFeatureTreeSelectionListener);
178 }
179 else{
180 //add default selection listener
181 btnOpenFeatureTree.addSelectionListener(new SelectionAdapter(){
182 @Override
183 public void widgetSelected(SelectionEvent e) {
184 FeatureTree<T> tree = FeatureTreeSelectionDialog.select(getDisplay().getActiveShell(),
185 null, termType);
186 if(tree!=null){
187 setSelectedTree(tree);
188 if(dirtyMarkable!=null){
189 dirtyMarkable.forceDirty();
190 }
191 }
192 }
193 });
194 }
195 }
196
197 public void setSelectedTree(FeatureTree<T> featureTree) {
198 this.featureTree = featureTree;
199
200 viewer.setInput(featureTree);
201
202 Listener[] listeners = text_title.getListeners(SWT.Modify);
203 for (Listener listener : listeners) {
204 text_title.removeListener(SWT.Modify, listener);
205 }
206 text_title.setText(featureTree!=null?featureTree.getTitleCache():"");
207 for (Listener listener : listeners) {
208 text_title.addListener(SWT.Modify, listener);
209 }
210 }
211
212 public FeatureTree<T> getFeatureTree() {
213 return featureTree;
214 }
215
216 public Label getLabel_title() {
217 return label_title;
218 }
219
220 public Button getBtnOpenFeatureTree() {
221 return btnOpenFeatureTree;
222 }
223
224 public TreeViewer getViewer() {
225 return viewer;
226 }
227
228 }