Fixed a problem with updating views and editors after an import has run; Correcting...
[taxeditor.git] / taxeditor-editor / src / main / java / eu / etaxonomy / taxeditor / editor / name / AbstractGroup.java
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;
11
12 import java.util.ArrayList;
13 import java.util.List;
14
15 import org.apache.log4j.Logger;
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.cdm.model.common.CdmBase;
28 import eu.etaxonomy.cdm.model.taxon.TaxonBase;
29 import eu.etaxonomy.taxeditor.editor.CdmDataTransfer;
30 import eu.etaxonomy.taxeditor.editor.EditorUtil;
31 import eu.etaxonomy.taxeditor.editor.IDropTargetable;
32 import eu.etaxonomy.taxeditor.preference.Resources;
33
34 /**
35 * <p>Abstract AbstractGroup class.</p>
36 *
37 * @author p.ciardelli
38 * @author n.hoffmann
39 * @created 25.06.2008
40 * @version 1.0
41 */
42 public abstract class AbstractGroup<T extends TaxonBase> implements IDropTargetable{
43
44 private Composite control;
45
46 private List<AbstractGroupedContainer<T>> groupedContainers = new ArrayList<AbstractGroupedContainer<T>>();
47
48 protected TaxonNameEditor editor;
49
50 private DropTarget target;
51 private DropTargetListener dropListener;
52
53 /**
54 * <p>Constructor for AbstractGroup.</p>
55 *
56 * @param editor a {@link eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor} object.
57 * @param <T> a T object.
58 */
59 public AbstractGroup(TaxonNameEditor editor){
60 this.editor = editor;
61
62 createControl();
63
64 // Drop functionality
65 this.setDroppable(true);
66
67 }
68
69 /**
70 * <p>createControl</p>
71 */
72 protected void createControl() {
73 control = editor.getToolkit().createComposite(editor.getControl());
74
75 control.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB));
76 TableWrapLayout layout = new TableWrapLayout();
77
78 layout.topMargin = 0;
79 layout.rightMargin = 0;
80 layout.bottomMargin = 1;
81 layout.leftMargin = 0;
82
83 layout.verticalSpacing = 0;
84 layout.horizontalSpacing = 0;
85 control.setLayout(layout);
86
87 control.setBackground(Display.getDefault().getSystemColor(SWT.COLOR_GRAY));
88 }
89
90 /**
91 * <p>add</p>
92 *
93 * @param groupedContainer a {@link eu.etaxonomy.taxeditor.editor.name.AbstractGroupedContainer} object.
94 */
95 public void add(AbstractGroupedContainer groupedContainer){
96 groupedContainers.add(groupedContainer);
97 groupedContainer.setGroup(this);
98 }
99
100 /**
101 * <p>remove</p>
102 *
103 * @param groupedContainer a {@link eu.etaxonomy.taxeditor.editor.name.AbstractGroupedContainer} object.
104 */
105 public void remove(AbstractGroupedContainer groupedContainer){
106 deleteContainer(groupedContainer);
107 groupedContainers.remove(groupedContainer);
108
109 editor.getManagedForm().reflow(true);
110 }
111
112 /**
113 * <p>removeAllContainers</p>
114 */
115 public void removeAllContainers() {
116 for(AbstractGroupedContainer container : groupedContainers){
117 deleteContainer(container);
118 }
119
120 groupedContainers.clear();
121 }
122
123 /**
124 * <p>clearContainers</p>
125 */
126 public void clearContainers(){
127 groupedContainers.clear();
128 }
129
130 /**
131 * <p>deleteContainer</p>
132 *
133 * @param groupedContainer a {@link eu.etaxonomy.taxeditor.editor.name.AbstractGroupedContainer} object.
134 */
135 public void deleteContainer(AbstractGroupedContainer groupedContainer){
136 groupedContainer.setMenu(null);
137 groupedContainer.getControl().dispose();
138 }
139
140 /**
141 * <p>clear</p>
142 */
143 public void clear(){
144 control.setMenu(null);
145 control.dispose();
146 }
147
148 /**
149 * <p>Getter for the field <code>groupedContainers</code>.</p>
150 *
151 * @return a {@link java.util.List} object.
152 */
153 public List<AbstractGroupedContainer<T>> getGroupedContainers(){
154 return groupedContainers;
155 }
156
157
158 /**
159 * <p>setDroppable</p>
160 *
161 * @param droppable a boolean.
162 */
163 public void setDroppable(boolean droppable) {
164 if (droppable) {
165 Transfer[] types = new Transfer[] {CdmDataTransfer.getInstance()};
166 int operations = DND.DROP_MOVE;
167 target = new DropTarget(control, operations);
168 target.setTransfer(types);
169 dropListener = new NameEditorDropTargetListener(this);
170 target.addDropListener(dropListener);
171
172 target.setDropTargetEffect(new NameEditorDropTargetEffect(control));
173
174 } else {
175 if (dropListener != null) {
176 target.removeDropListener(dropListener);
177 }
178 }
179 }
180
181 /**
182 * <p>Getter for the field <code>control</code>.</p>
183 *
184 * @return a {@link org.eclipse.swt.widgets.Composite} object.
185 */
186 public Composite getControl(){
187 return control;
188 }
189
190 /**
191 * <p>getNameEditor</p>
192 *
193 * @return a {@link eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor} object.
194 */
195 public TaxonNameEditor getNameEditor() {
196 return editor;
197 }
198
199 /**
200 * <p>dragEntered</p>
201 */
202 public void dragEntered() {
203 Color color = EditorUtil.getColor(Resources.COLOR_DRAG_ENTER);
204
205 for(AbstractGroupedContainer container : groupedContainers){
206 container.setBackground(color);
207 }
208 }
209
210 /**
211 * <p>dragLeft</p>
212 */
213 public void dragLeft() {
214 for(AbstractGroupedContainer container : groupedContainers){
215 container.restoreColor();
216 }
217 }
218
219 /** {@inheritDoc} */
220 public boolean postOperation(CdmBase objectAffectedByOperation) {
221 editor.getMultiPageTaxonEditor().changed(null);
222 redraw();
223 return true;
224 }
225
226 /**
227 * <p>redraw</p>
228 */
229 public abstract void redraw();
230 }