Project

General

Profile

Download (7.51 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.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.setEditable(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
                        if(dirtyMarkable!=null){
165
                            dirtyMarkable.forceDirty();
166
                        }
167
                    }
168
                }
169
            });
170
        }
171
    }
172

    
173
    public void setSelectedTree(FeatureTree featureTree) {
174
        this.featureTree = featureTree;
175

    
176
        viewer.setInput(featureTree);
177

    
178
        Listener[] listeners = text_title.getListeners(SWT.Modify);
179
        for (Listener listener : listeners) {
180
            text_title.removeListener(SWT.Modify, listener);
181
        }
182
        text_title.setText(featureTree!=null?featureTree.getTitleCache():"");
183
        for (Listener listener : listeners) {
184
            text_title.addListener(SWT.Modify, listener);
185
        }
186
    }
187

    
188
    public FeatureTree getFeatureTree() {
189
        return featureTree;
190
    }
191

    
192
    public Label getLabel_title() {
193
        return label_title;
194
    }
195

    
196
    public Button getBtnOpenFeatureTree() {
197
        return btnOpenFeatureTree;
198
    }
199

    
200
    public TreeViewer getViewer() {
201
        return viewer;
202
    }
203

    
204
}
(4-4/5)