Merge branch 'develop' into wset
[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.ImageResources;
38 import eu.etaxonomy.taxeditor.ui.dialog.selection.FeatureTreeSelectionDialog;
39
40 /**
41 * @author pplitzner
42 * @since Jun 19, 2017
43 *
44 */
45 public class FeatureTreeEditorComposite extends Composite{
46
47 private FeatureTree featureTree;
48
49 private Label label_title;
50 private Text text_title;
51 private Button btnOpenFeatureTree;
52 private TreeViewer viewer;
53
54 public FeatureTreeEditorComposite(Composite parent, int style) {
55 super(parent, style);
56 setLayout(new GridLayout(1, false));
57
58 Composite composite_treeTitle = new Composite(this, SWT.NULL);
59 composite_treeTitle.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true,
60 false));
61 GridLayout gl_composite_treeTitle = new GridLayout(3, false);
62 gl_composite_treeTitle.marginWidth = 0;
63 composite_treeTitle.setLayout(gl_composite_treeTitle);
64
65 label_title = new Label(composite_treeTitle, SWT.NULL);
66 label_title.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
67 label_title.setText(Messages.FeatureTreeEditorComposite_FEATURE_TREE);
68
69 text_title = new Text(composite_treeTitle, SWT.BORDER);
70 text_title.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
71 text_title.setEnabled(false);
72
73 btnOpenFeatureTree = new Button(composite_treeTitle, SWT.NONE);
74 btnOpenFeatureTree.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false, 1, 1));
75 btnOpenFeatureTree.setToolTipText(Messages.FeatureTreeEditorComposite_OPEN_TREE);
76 btnOpenFeatureTree.setImage(ImageResources.getImage(ImageResources.BROWSE_ICON));
77
78 viewer = new TreeViewer(new Tree(this, SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION));
79 Tree tree = viewer.getTree();
80 tree.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 3, 1));
81 viewer.getControl().setLayoutData(
82 new GridData(SWT.FILL, SWT.FILL, true, true));
83 }
84
85 public void init(DragSourceListener dragSourceListener, DropTargetListener dropTargetListener,
86 ISelectionChangedListener viewerSelectionChangedListener,
87 SelectionListener openFeatureTreeSelectionListener) {
88 viewer.setContentProvider(new FeatureTreeContentProvider());
89 viewer.setLabelProvider(new FeatureTreeLabelProvider());
90
91 int ops = DND.DROP_COPY | DND.DROP_MOVE;
92 Transfer[] transfers = new Transfer[] { FeatureNodeTransfer
93 .getInstance(), TermTransfer.getInstance() };
94 if(dragSourceListener!=null){
95 viewer.addDragSupport(ops, transfers, dragSourceListener);
96 }
97 if(dropTargetListener!=null){
98 viewer.addDropSupport(ops, transfers, dropTargetListener);
99 }
100
101 if(viewerSelectionChangedListener!=null){
102 viewer.addSelectionChangedListener(viewerSelectionChangedListener);
103 }
104
105 //add specific selection listener
106 if(openFeatureTreeSelectionListener!=null){
107 btnOpenFeatureTree.addSelectionListener(openFeatureTreeSelectionListener);
108 }
109 else{
110 //add default selection listener
111 btnOpenFeatureTree.addSelectionListener(new SelectionAdapter(){
112 @Override
113 public void widgetSelected(SelectionEvent e) {
114 FeatureTree tree = FeatureTreeSelectionDialog.select(getDisplay().getActiveShell(),
115 null);
116 if(tree!=null){
117 setSelectedTree(tree, null);
118 getText_title().setEnabled(false);
119 }
120 }
121 });
122 }
123 }
124
125 public void setSelectedTree(FeatureTree featureTree, ModifyListener modifyListener) {
126 this.featureTree = featureTree;
127
128 getViewer().setInput(featureTree);
129
130 Listener[] listeners = getText_title().getListeners(SWT.Modify);
131 for (Listener listener : listeners) {
132 getText_title().removeListener(SWT.Modify, listener);
133 }
134 getText_title().setText(featureTree.getTitleCache());
135 for (Listener listener : listeners) {
136 getText_title().addListener(SWT.Modify, listener);
137 }
138 getText_title().setEnabled(true);
139 text_title.setEnabled(true);
140 }
141
142 /**
143 * @return the featureTree
144 */
145 public FeatureTree getFeatureTree() {
146 return featureTree;
147 }
148
149 /**
150 * @return the label_title
151 */
152 public Label getLabel_title() {
153 return label_title;
154 }
155
156 /**
157 * @return the text_title
158 */
159 public Text getText_title() {
160 return text_title;
161 }
162
163 /**
164 * @return the btnOpenFeatureTree
165 */
166 public Button getBtnOpenFeatureTree() {
167 return btnOpenFeatureTree;
168 }
169
170 /**
171 * @return the viewer
172 */
173 public TreeViewer getViewer() {
174 return viewer;
175 }
176
177 }