-/**\r
-* Copyright (C) 2007 EDIT\r
-* European Distributed Institute of Taxonomy \r
-* http://www.e-taxonomy.eu\r
-* \r
-* The contents of this file are subject to the Mozilla Public License Version 1.1\r
-* See LICENSE.TXT at the top of this package for the full license terms.\r
-*/\r
-\r
-package eu.etaxonomy.taxeditor.editor.name;\r
-\r
-import java.util.ArrayList;\r
-import java.util.List;\r
-\r
-import org.apache.log4j.Logger;\r
-import org.eclipse.swt.SWT;\r
-import org.eclipse.swt.dnd.DND;\r
-import org.eclipse.swt.dnd.DropTarget;\r
-import org.eclipse.swt.dnd.DropTargetListener;\r
-import org.eclipse.swt.dnd.Transfer;\r
-import org.eclipse.swt.graphics.Color;\r
-import org.eclipse.swt.widgets.Composite;\r
-import org.eclipse.swt.widgets.Display;\r
-import org.eclipse.ui.forms.widgets.TableWrapData;\r
-import org.eclipse.ui.forms.widgets.TableWrapLayout;\r
-\r
-import eu.etaxonomy.cdm.model.common.CdmBase;\r
-import eu.etaxonomy.cdm.model.taxon.TaxonBase;\r
-import eu.etaxonomy.taxeditor.editor.CdmDataTransfer;\r
-import eu.etaxonomy.taxeditor.editor.EditorUtil;\r
-import eu.etaxonomy.taxeditor.editor.IDropTargetable;\r
-import eu.etaxonomy.taxeditor.preference.Resources;\r
-\r
-/**\r
- * @author p.ciardelli\r
- * @author n.hoffmann\r
- * @created 25.06.2008\r
- * @version 1.0\r
- */\r
-public abstract class AbstractGroup<T extends TaxonBase> implements IDropTargetable{\r
- private static final Logger logger = Logger.getLogger(AbstractGroup.class);\r
- \r
- private Composite control;\r
- \r
- private List<AbstractGroupedContainer<T>> groupedContainers = new ArrayList<AbstractGroupedContainer<T>>(); \r
- \r
- protected TaxonNameEditor editor;\r
- \r
- private DropTarget target;\r
- private DropTargetListener dropListener;\r
-\r
- public AbstractGroup(TaxonNameEditor editor){\r
- this.editor = editor;\r
- \r
- createControl();\r
- \r
- // Drop functionality\r
- this.setDroppable(true);\r
-\r
- }\r
- \r
- protected void createControl() {\r
- control = editor.getToolkit().createComposite(editor.getControl());\r
- \r
- control.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB));\r
- TableWrapLayout layout = new TableWrapLayout();\r
- \r
- layout.topMargin = 0;\r
- layout.rightMargin = 0;\r
- layout.bottomMargin = 1;\r
- layout.leftMargin = 0;\r
- \r
- layout.verticalSpacing = 0;\r
- layout.horizontalSpacing = 0;\r
- control.setLayout(layout);\r
- \r
- control.setBackground(Display.getDefault().getSystemColor(SWT.COLOR_GRAY));\r
- }\r
- \r
- public void add(AbstractGroupedContainer groupedContainer){\r
- groupedContainers.add(groupedContainer);\r
- groupedContainer.setGroup(this);\r
- }\r
- \r
- public void remove(AbstractGroupedContainer groupedContainer){\r
- deleteContainer(groupedContainer);\r
- groupedContainers.remove(groupedContainer);\r
- \r
- editor.getManagedForm().reflow(true);\r
- }\r
- \r
- public void removeAllContainers() {\r
- for(AbstractGroupedContainer container : groupedContainers){\r
- deleteContainer(container);\r
- }\r
- \r
- groupedContainers.clear();\r
- }\r
- \r
- public void clearContainers(){\r
- groupedContainers.clear();\r
- }\r
- \r
- public void deleteContainer(AbstractGroupedContainer groupedContainer){\r
- groupedContainer.setMenu(null);\r
- groupedContainer.getControl().dispose();\r
- }\r
- \r
- public void clear(){\r
- control.setMenu(null);\r
- control.dispose();\r
- }\r
- \r
- public List<AbstractGroupedContainer<T>> getGroupedContainers(){\r
- return groupedContainers;\r
- }\r
- \r
- \r
- public void setDroppable(boolean droppable) {\r
- if (droppable) {\r
- Transfer[] types = new Transfer[] {CdmDataTransfer.getInstance()}; \r
- int operations = DND.DROP_MOVE;\r
- target = new DropTarget(control, operations);\r
- target.setTransfer(types);\r
- dropListener = new NameEditorDropTargetListener(this);\r
- target.addDropListener(dropListener);\r
- \r
- target.setDropTargetEffect(new NameEditorDropTargetEffect(control));\r
- \r
- } else {\r
- if (dropListener != null) {\r
- target.removeDropListener(dropListener);\r
- }\r
- }\r
- }\r
- \r
- public Composite getControl(){\r
- return control;\r
- }\r
-\r
- public TaxonNameEditor getNameEditor() {\r
- return editor;\r
- }\r
-\r
- public void dragEntered() {\r
- Color color = EditorUtil.getColor(Resources.COLOR_DRAG_ENTER);\r
- \r
- for(AbstractGroupedContainer container : groupedContainers){\r
- container.setBackground(color);\r
- } \r
- }\r
-\r
- public void dragLeft() {\r
- for(AbstractGroupedContainer container : groupedContainers){\r
- container.restoreColor();\r
- }\r
- }\r
- \r
- public boolean postOperation(CdmBase objectAffectedByOperation) {\r
- editor.getMultiPageTaxonEditor().changed(null);\r
- redraw();\r
- return true;\r
- }\r
-\r
- public abstract void redraw();\r
-}\r
+/**
+* Copyright (C) 2007 EDIT
+* European Distributed Institute of Taxonomy
+* http://www.e-taxonomy.eu
+*
+* The contents of this file are subject to the Mozilla Public License Version 1.1
+* See LICENSE.TXT at the top of this package for the full license terms.
+*/
+
+package eu.etaxonomy.taxeditor.editor.name;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.log4j.Logger;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.dnd.DropTarget;
+import org.eclipse.swt.dnd.DropTargetListener;
+import org.eclipse.swt.dnd.Transfer;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.forms.widgets.TableWrapData;
+import org.eclipse.ui.forms.widgets.TableWrapLayout;
+
+import eu.etaxonomy.cdm.model.common.CdmBase;
+import eu.etaxonomy.cdm.model.taxon.TaxonBase;
+import eu.etaxonomy.taxeditor.editor.CdmDataTransfer;
+import eu.etaxonomy.taxeditor.editor.EditorUtil;
+import eu.etaxonomy.taxeditor.editor.IDropTargetable;
+import eu.etaxonomy.taxeditor.preference.Resources;
+
+/**
+ * <p>Abstract AbstractGroup class.</p>
+ *
+ * @author p.ciardelli
+ * @author n.hoffmann
+ * @created 25.06.2008
+ * @version 1.0
+ */
+public abstract class AbstractGroup<T extends TaxonBase> implements IDropTargetable{
+ private static final Logger logger = Logger.getLogger(AbstractGroup.class);
+
+ private Composite control;
+
+ private List<AbstractGroupedContainer<T>> groupedContainers = new ArrayList<AbstractGroupedContainer<T>>();
+
+ protected TaxonNameEditor editor;
+
+ private DropTarget target;
+ private DropTargetListener dropListener;
+
+ /**
+ * <p>Constructor for AbstractGroup.</p>
+ *
+ * @param editor a {@link eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor} object.
+ * @param <T> a T object.
+ */
+ public AbstractGroup(TaxonNameEditor editor){
+ this.editor = editor;
+
+ createControl();
+
+ // Drop functionality
+ this.setDroppable(true);
+
+ }
+
+ /**
+ * <p>createControl</p>
+ */
+ protected void createControl() {
+ control = editor.getToolkit().createComposite(editor.getControl());
+
+ control.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB));
+ TableWrapLayout layout = new TableWrapLayout();
+
+ layout.topMargin = 0;
+ layout.rightMargin = 0;
+ layout.bottomMargin = 1;
+ layout.leftMargin = 0;
+
+ layout.verticalSpacing = 0;
+ layout.horizontalSpacing = 0;
+ control.setLayout(layout);
+
+ control.setBackground(Display.getDefault().getSystemColor(SWT.COLOR_GRAY));
+ }
+
+ /**
+ * <p>add</p>
+ *
+ * @param groupedContainer a {@link eu.etaxonomy.taxeditor.editor.name.AbstractGroupedContainer} object.
+ */
+ public void add(AbstractGroupedContainer groupedContainer){
+ groupedContainers.add(groupedContainer);
+ groupedContainer.setGroup(this);
+ }
+
+ /**
+ * <p>remove</p>
+ *
+ * @param groupedContainer a {@link eu.etaxonomy.taxeditor.editor.name.AbstractGroupedContainer} object.
+ */
+ public void remove(AbstractGroupedContainer groupedContainer){
+ deleteContainer(groupedContainer);
+ groupedContainers.remove(groupedContainer);
+
+ editor.getManagedForm().reflow(true);
+ }
+
+ /**
+ * <p>removeAllContainers</p>
+ */
+ public void removeAllContainers() {
+ for(AbstractGroupedContainer container : groupedContainers){
+ deleteContainer(container);
+ }
+
+ groupedContainers.clear();
+ }
+
+ /**
+ * <p>clearContainers</p>
+ */
+ public void clearContainers(){
+ groupedContainers.clear();
+ }
+
+ /**
+ * <p>deleteContainer</p>
+ *
+ * @param groupedContainer a {@link eu.etaxonomy.taxeditor.editor.name.AbstractGroupedContainer} object.
+ */
+ public void deleteContainer(AbstractGroupedContainer groupedContainer){
+ groupedContainer.setMenu(null);
+ groupedContainer.getControl().dispose();
+ }
+
+ /**
+ * <p>clear</p>
+ */
+ public void clear(){
+ control.setMenu(null);
+ control.dispose();
+ }
+
+ /**
+ * <p>Getter for the field <code>groupedContainers</code>.</p>
+ *
+ * @return a {@link java.util.List} object.
+ */
+ public List<AbstractGroupedContainer<T>> getGroupedContainers(){
+ return groupedContainers;
+ }
+
+
+ /**
+ * <p>setDroppable</p>
+ *
+ * @param droppable a boolean.
+ */
+ public void setDroppable(boolean droppable) {
+ if (droppable) {
+ Transfer[] types = new Transfer[] {CdmDataTransfer.getInstance()};
+ int operations = DND.DROP_MOVE;
+ target = new DropTarget(control, operations);
+ target.setTransfer(types);
+ dropListener = new NameEditorDropTargetListener(this);
+ target.addDropListener(dropListener);
+
+ target.setDropTargetEffect(new NameEditorDropTargetEffect(control));
+
+ } else {
+ if (dropListener != null) {
+ target.removeDropListener(dropListener);
+ }
+ }
+ }
+
+ /**
+ * <p>Getter for the field <code>control</code>.</p>
+ *
+ * @return a {@link org.eclipse.swt.widgets.Composite} object.
+ */
+ public Composite getControl(){
+ return control;
+ }
+
+ /**
+ * <p>getNameEditor</p>
+ *
+ * @return a {@link eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor} object.
+ */
+ public TaxonNameEditor getNameEditor() {
+ return editor;
+ }
+
+ /**
+ * <p>dragEntered</p>
+ */
+ public void dragEntered() {
+ Color color = EditorUtil.getColor(Resources.COLOR_DRAG_ENTER);
+
+ for(AbstractGroupedContainer container : groupedContainers){
+ container.setBackground(color);
+ }
+ }
+
+ /**
+ * <p>dragLeft</p>
+ */
+ public void dragLeft() {
+ for(AbstractGroupedContainer container : groupedContainers){
+ container.restoreColor();
+ }
+ }
+
+ /** {@inheritDoc} */
+ public boolean postOperation(CdmBase objectAffectedByOperation) {
+ editor.getMultiPageTaxonEditor().changed(null);
+ redraw();
+ return true;
+ }
+
+ /**
+ * <p>redraw</p>
+ */
+ public abstract void redraw();
+}