2 * Copyright (C) 2007 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
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.
10 package eu
.etaxonomy
.taxeditor
.editor
.name
.container
;
12 import java
.util
.ArrayList
;
13 import java
.util
.List
;
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
;
27 import eu
.etaxonomy
.cdm
.model
.common
.CdmBase
;
28 import eu
.etaxonomy
.taxeditor
.editor
.CdmDataTransfer
;
29 import eu
.etaxonomy
.taxeditor
.editor
.EditorUtil
;
30 import eu
.etaxonomy
.taxeditor
.editor
.IDropTargetable
;
31 import eu
.etaxonomy
.taxeditor
.editor
.name
.TaxonNameEditor
;
32 import eu
.etaxonomy
.taxeditor
.editor
.name
.dnd
.NameEditorDropTargetEffect
;
33 import eu
.etaxonomy
.taxeditor
.editor
.name
.dnd
.NameEditorDropTargetListener
;
34 import eu
.etaxonomy
.taxeditor
.preference
.Resources
;
37 * <p>Abstract AbstractGroup class.</p>
44 public abstract class AbstractGroup
implements IDropTargetable
{
46 private Composite control
;
48 private final List
<AbstractGroupedContainer
> groupedContainers
= new ArrayList
<AbstractGroupedContainer
>();
50 protected TaxonNameEditor editor
;
52 private DropTarget target
;
53 private DropTargetListener dropListener
;
56 * <p>Constructor for AbstractGroup.</p>
58 * @param editor a {@link eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor} object.
59 * @param <T> a T object.
61 public AbstractGroup(TaxonNameEditor editor
){
65 protected void createContent(){
71 this.setDroppable(true);
73 editor
.getManagedForm().reflow(true);
77 * <p>createControl</p>
79 protected void createControl() {
80 control
= editor
.getToolkit().createComposite(editor
.getControl());
82 control
.setLayoutData(new TableWrapData(TableWrapData
.FILL_GRAB
));
83 TableWrapLayout layout
= new TableWrapLayout();
86 layout
.rightMargin
= 0;
87 layout
.bottomMargin
= 1;
88 layout
.leftMargin
= 0;
90 layout
.verticalSpacing
= 0;
91 layout
.horizontalSpacing
= 0;
92 control
.setLayout(layout
);
94 control
.setBackground(Display
.getDefault().getSystemColor(SWT
.COLOR_GRAY
));
100 * @param groupedContainer a {@link eu.etaxonomy.taxeditor.editor.name.container.AbstractGroupedContainer} object.
102 public void add(AbstractGroupedContainer groupedContainer
){
103 groupedContainers
.add(groupedContainer
);
104 groupedContainer
.setGroup(this);
110 * @param groupedContainer a {@link eu.etaxonomy.taxeditor.editor.name.container.AbstractGroupedContainer} object.
112 public void remove(AbstractGroupedContainer groupedContainer
){
113 groupedContainer
.dispose();
114 groupedContainers
.remove(groupedContainer
);
116 if(!(this instanceof AcceptedGroup
) && groupedContainers
.isEmpty()){
117 getEditor().removeGroup(this);
122 * <p>Getter for the field <code>groupedContainers</code>.</p>
124 * @return a {@link java.util.List} object.
126 public List
<AbstractGroupedContainer
> getGroupedContainers(){
127 return groupedContainers
;
132 * <p>setDroppable</p>
134 * @param droppable a boolean.
136 public void setDroppable(boolean droppable
) {
138 Transfer
[] types
= new Transfer
[] {CdmDataTransfer
.getInstance()};
139 int operations
= DND
.DROP_MOVE
;
140 target
= new DropTarget(control
, operations
);
141 target
.setTransfer(types
);
142 dropListener
= new NameEditorDropTargetListener(this);
143 target
.addDropListener(dropListener
);
145 target
.setDropTargetEffect(new NameEditorDropTargetEffect(control
));
148 if (dropListener
!= null) {
149 target
.removeDropListener(dropListener
);
155 * <p>getNameEditor</p>
157 * @return a {@link eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor} object.
160 public TaxonNameEditor
getEditor() {
168 public void dragEntered() {
169 Color color
= EditorUtil
.getColor(Resources
.COLOR_DRAG_ENTER
);
171 for(AbstractGroupedContainer container
: groupedContainers
){
172 container
.setBackground(color
);
180 public void dragLeft() {
181 for(AbstractGroupedContainer container
: groupedContainers
){
182 container
.restoreColor();
188 public boolean postOperation(CdmBase objectAffectedByOperation
) {
189 editor
.getMultiPageTaxonEditor().changed(objectAffectedByOperation
);
197 public void redraw(){
202 protected abstract void createContainers();
205 * @see eu.etaxonomy.taxeditor.editor.IDropTargetable#getControl()
208 public Composite
getControl() {
213 * @see eu.etaxonomy.taxeditor.operation.IPostOperationEnabled#onComplete()
216 public boolean onComplete() {
220 public void dispose(){
221 if(getControl() != null){
222 for(AbstractGroupedContainer container
: getGroupedContainers()){
225 getControl().setMenu(null);
226 getControl().dispose();
233 public void setMenu(Menu menu
) {
234 getControl().setMenu(menu
);
235 for(AbstractGroupedContainer container
: getGroupedContainers()){
236 container
.setMenu(menu
);
241 protected void emptyGroup(){
242 for(AbstractGroupedContainer container
: groupedContainers
){
245 groupedContainers
.clear();