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
.e4
.container
;
12 import java
.util
.ArrayList
;
13 import java
.util
.List
;
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
;
27 import eu
.etaxonomy
.cdm
.model
.common
.CdmBase
;
28 import eu
.etaxonomy
.taxeditor
.editor
.CdmDataTransfer
;
29 import eu
.etaxonomy
.taxeditor
.editor
.name
.e4
.IDropTargetableE4
;
30 import eu
.etaxonomy
.taxeditor
.editor
.name
.e4
.TaxonNameEditorE4
;
31 import eu
.etaxonomy
.taxeditor
.editor
.name
.e4
.dnd
.NameEditorDropTargetEffect
;
32 import eu
.etaxonomy
.taxeditor
.editor
.name
.e4
.dnd
.NameEditorDropTargetListenerE4
;
33 import eu
.etaxonomy
.taxeditor
.model
.AbstractUtility
;
34 import eu
.etaxonomy
.taxeditor
.preference
.Resources
;
42 public abstract class AbstractGroupE4
implements IDropTargetableE4
{
44 private Composite control
;
46 private IEclipseContext context
;
48 private final List
<AbstractGroupedContainerE4
> groupedContainers
= new ArrayList
<>();
50 protected TaxonNameEditorE4 editor
;
52 private DropTarget target
;
53 private DropTargetListener dropListener
;
55 public AbstractGroupE4(TaxonNameEditorE4 editor
){
57 this.context
= editor
.getContext();
60 protected void createContent(){
66 this.setDroppable(true);
68 editor
.getManagedForm().reflow(true);
71 protected void createControl() {
72 control
= editor
.getToolkit().createComposite(editor
.getControl());
74 control
.setLayoutData(new TableWrapData(TableWrapData
.FILL_GRAB
));
75 TableWrapLayout layout
= new TableWrapLayout();
78 layout
.rightMargin
= 0;
79 layout
.bottomMargin
= 1;
80 layout
.leftMargin
= 0;
82 layout
.verticalSpacing
= 0;
83 layout
.horizontalSpacing
= 0;
84 control
.setLayout(layout
);
86 control
.setBackground(Display
.getDefault().getSystemColor(SWT
.COLOR_GRAY
));
89 public void add(AbstractGroupedContainerE4 groupedContainer
){
90 groupedContainers
.add(groupedContainer
);
93 public void remove(AbstractGroupedContainerE4 groupedContainer
){
94 groupedContainer
.dispose();
95 groupedContainers
.remove(groupedContainer
);
97 if(!(this instanceof AcceptedGroupE4
) && groupedContainers
.isEmpty()){
98 getEditor().removeGroup(this);
102 public List
<AbstractGroupedContainerE4
> getGroupedContainers(){
103 return groupedContainers
;
107 public void setDroppable(boolean droppable
) {
109 Transfer
[] types
= new Transfer
[] {CdmDataTransfer
.getInstance()};
110 int operations
= DND
.DROP_MOVE
;
111 target
= new DropTarget(control
, operations
);
112 target
.setTransfer(types
);
113 dropListener
= new NameEditorDropTargetListenerE4(this);
114 target
.addDropListener(dropListener
);
116 target
.setDropTargetEffect(new NameEditorDropTargetEffect(control
));
119 if (dropListener
!= null) {
120 target
.removeDropListener(dropListener
);
126 public IEclipseContext
getContext() {
131 public TaxonNameEditorE4
getEditor() {
136 public void dragEntered() {
137 Color color
= AbstractUtility
.getColor(Resources
.COLOR_DRAG_ENTER
);
139 for(AbstractGroupedContainerE4 container
: groupedContainers
){
140 container
.setBackground(color
);
145 public void dragLeft() {
146 for(AbstractGroupedContainerE4 container
: groupedContainers
){
147 container
.restoreColor();
153 public boolean postOperation(CdmBase objectAffectedByOperation
) {
154 editor
.changed(objectAffectedByOperation
);
159 public void redraw(){
164 protected abstract void createContainers();
167 public Composite
getControl() {
172 public boolean onComplete() {
176 public void dispose(){
177 if(getControl() != null){
178 for(AbstractGroupedContainerE4 container
: getGroupedContainers()){
181 getControl().setMenu(null);
182 getControl().dispose();
186 protected void emptyGroup(){
187 for(AbstractGroupedContainerE4 container
: groupedContainers
){
190 groupedContainers
.clear();