Project

General

Profile

Download (8.34 KB) Statistics
| Branch: | Tag: | Revision:
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
}
(4-4/5)