Project

General

Profile

Download (4.74 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.swt.SWT;
16
import org.eclipse.swt.dnd.DND;
17
import org.eclipse.swt.dnd.DropTarget;
18
import org.eclipse.swt.dnd.DropTargetListener;
19
import org.eclipse.swt.dnd.Transfer;
20
import org.eclipse.swt.graphics.Color;
21
import org.eclipse.swt.widgets.Composite;
22
import org.eclipse.swt.widgets.Display;
23
import org.eclipse.swt.widgets.Menu;
24
import org.eclipse.ui.forms.widgets.TableWrapData;
25
import org.eclipse.ui.forms.widgets.TableWrapLayout;
26

    
27
import eu.etaxonomy.cdm.model.common.CdmBase;
28
import eu.etaxonomy.taxeditor.editor.CdmDataTransfer;
29
import eu.etaxonomy.taxeditor.editor.name.dnd.NameEditorDropTargetEffect;
30
import eu.etaxonomy.taxeditor.editor.name.e4.IDropTargetableE4;
31
import eu.etaxonomy.taxeditor.editor.name.e4.TaxonNameEditorE4;
32
import eu.etaxonomy.taxeditor.editor.name.e4.dnd.NameEditorDropTargetListenerE4;
33
import eu.etaxonomy.taxeditor.model.AbstractUtility;
34
import eu.etaxonomy.taxeditor.preference.Resources;
35

    
36
/**
37
 *
38
 * @author pplitzner
39
 * @date Aug 24, 2017
40
 *
41
 */
42
public abstract class AbstractGroupE4 implements IDropTargetableE4{
43

    
44
	private Composite control;
45

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

    
48
	protected TaxonNameEditorE4 editor;
49

    
50
	private DropTarget target;
51
	private DropTargetListener dropListener;
52

    
53
	public AbstractGroupE4(TaxonNameEditorE4 editor){
54
		this.editor = editor;
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.getManagedForm().getForm());
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
		groupedContainer.setGroup(this);
89
	}
90

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

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

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

    
104

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

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

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

    
123
	@Override
124
    public TaxonNameEditorE4 getEditor() {
125
		return editor;
126
	}
127

    
128
	@Override
129
    public void dragEntered() {
130
		Color color = AbstractUtility.getColor(Resources.COLOR_DRAG_ENTER);
131

    
132
		for(AbstractGroupedContainerE4 container : groupedContainers){
133
			container.setBackground(color);
134
		}
135
	}
136

    
137
	@Override
138
    public void dragLeft() {
139
		for(AbstractGroupedContainerE4 container : groupedContainers){
140
			container.restoreColor();
141
		}
142
	}
143

    
144
	/** {@inheritDoc} */
145
	@Override
146
    public boolean postOperation(CdmBase objectAffectedByOperation) {
147
		editor.changed(objectAffectedByOperation);
148
		redraw();
149
		return true;
150
	}
151

    
152
	public void redraw(){
153
		emptyGroup();
154
		createContainers();
155
	}
156

    
157
	protected abstract void createContainers();
158

    
159
	@Override
160
	public Composite getControl() {
161
		return control;
162
	}
163

    
164
	@Override
165
	public boolean onComplete() {
166
		return true;
167
	}
168

    
169
	public void dispose(){
170
		if(getControl() != null){
171
			for(AbstractGroupedContainerE4 container : getGroupedContainers()){
172
				container.dispose();
173
			}
174
			getControl().setMenu(null);
175
			getControl().dispose();
176
		}
177
	}
178

    
179
	public void setMenu(Menu menu) {
180
		getControl().setMenu(menu);
181
		for(AbstractGroupedContainerE4 container : getGroupedContainers()){
182
			container.setMenu(menu);
183
		}
184

    
185
	}
186

    
187
	protected void emptyGroup(){
188
		for(AbstractGroupedContainerE4 container : groupedContainers){
189
			container.dispose();
190
		}
191
		groupedContainers.clear();
192
	}
193
}
(1-1/10)