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