Project

General

Profile

Download (4.82 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
* Copyright (C) 2007 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

    
10
package eu.etaxonomy.taxeditor.editor.name.e4.container;
11

    
12
import java.util.ArrayList;
13
import java.util.List;
14

    
15
import org.eclipse.e4.core.contexts.IEclipseContext;
16
import org.eclipse.swt.SWT;
17
import org.eclipse.swt.dnd.DND;
18
import org.eclipse.swt.dnd.DropTarget;
19
import org.eclipse.swt.dnd.DropTargetListener;
20
import org.eclipse.swt.dnd.Transfer;
21
import org.eclipse.swt.graphics.Color;
22
import org.eclipse.swt.widgets.Composite;
23
import org.eclipse.swt.widgets.Display;
24
import org.eclipse.ui.forms.widgets.TableWrapData;
25
import org.eclipse.ui.forms.widgets.TableWrapLayout;
26

    
27
import eu.etaxonomy.taxeditor.editor.CdmDataTransfer;
28
import eu.etaxonomy.taxeditor.editor.name.e4.IDropTargetable;
29
import eu.etaxonomy.taxeditor.editor.name.e4.TaxonNameEditor;
30
import eu.etaxonomy.taxeditor.editor.name.e4.dnd.NameEditorDropTargetEffect;
31
import eu.etaxonomy.taxeditor.editor.name.e4.dnd.NameEditorDropTargetListener;
32
import eu.etaxonomy.taxeditor.model.AbstractUtility;
33
import eu.etaxonomy.taxeditor.preference.Resources;
34

    
35
/**
36
 * @author pplitzner
37
 * @date Aug 24, 2017
38
 */
39
public abstract class AbstractGroup implements IDropTargetable{
40

    
41
	private Composite control;
42

    
43
	private IEclipseContext context;
44

    
45
	private final List<AbstractGroupedContainerE4> groupedContainers = new ArrayList<>();
46

    
47
	protected TaxonNameEditor editor;
48

    
49
	private DropTarget target;
50
	private DropTargetListener dropListener;
51

    
52
	public AbstractGroup(TaxonNameEditor editor){
53
		this.editor = editor;
54
		this.context = editor.getContext();
55
	}
56

    
57
	protected void createContent(){
58
		createControl();
59

    
60
		createContainers();
61

    
62
		// Drop functionality
63
		this.setDroppable(true);
64

    
65
		editor.getManagedForm().reflow(true);
66
	}
67

    
68
	protected void createControl() {
69
		control = editor.getToolkit().createComposite(editor.getControl());
70

    
71
		control.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB));
72
		TableWrapLayout layout = new TableWrapLayout();
73

    
74
		layout.topMargin = 0;
75
		layout.rightMargin = 0;
76
		layout.bottomMargin = 1;
77
		layout.leftMargin = 0;
78

    
79
		layout.verticalSpacing = 0;
80
		layout.horizontalSpacing = 0;
81
		control.setLayout(layout);
82

    
83
		control.setBackground(Display.getDefault().getSystemColor(SWT.COLOR_GRAY));
84
	}
85

    
86
	public void add(AbstractGroupedContainerE4 groupedContainer){
87
		groupedContainers.add(groupedContainer);
88
	}
89

    
90
	public void remove(AbstractGroupedContainerE4 groupedContainer){
91
		groupedContainer.dispose();
92
		groupedContainers.remove(groupedContainer);
93

    
94
		if(!(this instanceof AcceptedGroup) && groupedContainers.isEmpty()){
95
			getEditor().removeGroup(this);
96
		}
97
	}
98

    
99
	public List<AbstractGroupedContainerE4> getGroupedContainers(){
100
		return groupedContainers;
101
	}
102

    
103

    
104
	public void setDroppable(boolean droppable) {
105
		if (droppable) {
106
			Transfer[] types = new Transfer[] {CdmDataTransfer.getInstance()};
107
			int operations = DND.DROP_MOVE;
108
			target = new DropTarget(control, operations);
109
			target.setTransfer(types);
110
			dropListener = new NameEditorDropTargetListener(this);
111
			target.addDropListener(dropListener);
112

    
113
			target.setDropTargetEffect(new NameEditorDropTargetEffect(control));
114

    
115
		} else {
116
			if (dropListener != null) {
117
				target.removeDropListener(dropListener);
118
			}
119
		}
120
	}
121

    
122
	@Override
123
	public IEclipseContext getContext() {
124
	    return context;
125
	}
126

    
127
	@Override
128
    public TaxonNameEditor getEditor() {
129
		return editor;
130
	}
131

    
132
	@Override
133
    public void dragEntered() {
134
		Color color = AbstractUtility.getColor(Resources.COLOR_DRAG_ENTER);
135

    
136
		for(AbstractGroupedContainerE4<?> container : groupedContainers){
137
			container.setBackground(color);
138
		}
139
	}
140

    
141
	@Override
142
    public void dragLeft() {
143
		for(AbstractGroupedContainerE4<?> container : groupedContainers){
144
			container.restoreColor();
145
		}
146
	}
147

    
148
	@Override
149
    public boolean postOperation(Object objectAffectedByOperation) {
150
		editor.postOperation(objectAffectedByOperation);
151
//		redraw();
152
		return true;
153
	}
154

    
155
	public void redraw(){
156
	    emptyGroup();
157

    
158
		createContainers();
159
	}
160

    
161
	protected abstract void createContainers();
162

    
163
	@Override
164
	public Composite getControl() {
165
		return control;
166
	}
167

    
168
	@Override
169
	public boolean onComplete() {
170
		return true;
171
	}
172

    
173
	public void dispose(){
174
		if(getControl() != null){
175
		    getControl().setMenu(null);
176
			for(AbstractGroupedContainerE4<?> container : getGroupedContainers()){
177
				container.dispose();
178
			}
179
			getControl().dispose();
180
		}
181
	}
182

    
183
	protected void emptyGroup(){
184
		for(AbstractGroupedContainerE4<?> container : groupedContainers){
185
		    container.getControl().setMenu(null);
186
			container.dispose();
187
		}
188
		groupedContainers.clear();
189
	}
190

    
191
	protected void setMenuToGroup(){
192
        for(AbstractGroupedContainerE4<?> container : groupedContainers){
193
            container.setMenu();
194

    
195
        }
196

    
197
    }
198
}
(1-1/11)