- created FieldObservation general element completely uncoupled to any controlling...
authorPatric Plitzner <p.plitzner@bgbm.org>
Wed, 14 Aug 2013 15:09:33 +0000 (15:09 +0000)
committerPatric Plitzner <p.plitzner@bgbm.org>
Wed, 14 Aug 2013 15:09:33 +0000 (15:09 +0000)
 - created controller class which then uses the GUI element
   - this way the WindowBuilder can be used much easier

15 files changed:
.gitattributes
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/element/CdmFormFactory.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/campanula/EntitySelectionField.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/campanula/EntitySelectionFieldController.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/campanula/FieldObservationGeneralElement.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/campanula/FieldObservationGeneralElementController.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/campanula/GatheringEventDetailsElement.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/campanula/GatheringEventDetailsElementController.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/campanula/NumberFieldController.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/campanula/TextFieldController.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/campanula/ToggleableTextField.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/campanula/ToggleableTextFieldController.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/occurrence/GatheringEventDetailElementComposite.java [deleted file]
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/occurrence/GatheringEventDetailSection.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/occurrence/GeneralDetailSection.java

index 57fedeb004bb7cda72335a56c3da7d36fd322adf..bbc6ed6fa195acf688f31fa3341348f9d50bcbff 100644 (file)
@@ -1331,11 +1331,17 @@ eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/age
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/agent/TeamMemberSection.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/agent/TeamOrPersonBaseDetailSection.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/agent/TeamWizardPage.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/agent/TeamMemberSection.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/agent/TeamOrPersonBaseDetailSection.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/agent/TeamWizardPage.java -text
+eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/campanula/EntitySelectionField.java -text
+eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/campanula/EntitySelectionFieldController.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/campanula/FieldObservationDetailsView.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/campanula/FieldObservationGeneralElement.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/campanula/FieldObservationDetailsView.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/campanula/FieldObservationGeneralElement.java -text
+eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/campanula/FieldObservationGeneralElementController.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/campanula/GatheringEventDetailsElement.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/campanula/GatheringEventDetailsElement.java -text
+eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/campanula/GatheringEventDetailsElementController.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/campanula/NumberFieldController.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/campanula/TextFieldController.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/campanula/NumberFieldController.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/campanula/TextFieldController.java -text
+eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/campanula/ToggleableTextField.java -text
+eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/campanula/ToggleableTextFieldController.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/classification/ClassificationDetailElement.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/classification/ClassificationDetailSection.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/classification/ClassificationWizardPage.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/classification/ClassificationDetailElement.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/classification/ClassificationDetailSection.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/classification/ClassificationWizardPage.java -text
@@ -1445,7 +1451,6 @@ eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/occ
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/occurrence/FieldObservationDetailSection.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/occurrence/FieldObservationWizardPage.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/occurrence/GatheringEventDetailElement.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/occurrence/FieldObservationDetailSection.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/occurrence/FieldObservationWizardPage.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/occurrence/GatheringEventDetailElement.java -text
-eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/occurrence/GatheringEventDetailElementComposite.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/occurrence/GatheringEventDetailSection.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/occurrence/GatheringEventWizardPage.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/occurrence/GeneralDetailElement.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/occurrence/GatheringEventDetailSection.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/occurrence/GatheringEventWizardPage.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/occurrence/GeneralDetailElement.java -text
index c3e32e63e8cb23786ffb957d1d588eb3c28b2765..12cdfbe04632f68994a05cecc64672197d8146dd 100644 (file)
@@ -113,7 +113,10 @@ import eu.etaxonomy.taxeditor.ui.section.agent.TeamDetailSection;
 import eu.etaxonomy.taxeditor.ui.section.agent.TeamMemberElement;
 import eu.etaxonomy.taxeditor.ui.section.agent.TeamMemberSection;
 import eu.etaxonomy.taxeditor.ui.section.agent.TeamOrPersonBaseDetailSection;
 import eu.etaxonomy.taxeditor.ui.section.agent.TeamMemberElement;
 import eu.etaxonomy.taxeditor.ui.section.agent.TeamMemberSection;
 import eu.etaxonomy.taxeditor.ui.section.agent.TeamOrPersonBaseDetailSection;
+import eu.etaxonomy.taxeditor.ui.section.campanula.FieldObservationGeneralElement;
+import eu.etaxonomy.taxeditor.ui.section.campanula.FieldObservationGeneralElementController;
 import eu.etaxonomy.taxeditor.ui.section.campanula.GatheringEventDetailsElement;
 import eu.etaxonomy.taxeditor.ui.section.campanula.GatheringEventDetailsElement;
+import eu.etaxonomy.taxeditor.ui.section.campanula.GatheringEventDetailsElementController;
 import eu.etaxonomy.taxeditor.ui.section.classification.ClassificationDetailElement;
 import eu.etaxonomy.taxeditor.ui.section.classification.ClassificationDetailSection;
 import eu.etaxonomy.taxeditor.ui.section.classification.TaxonNodeDetailElement;
 import eu.etaxonomy.taxeditor.ui.section.classification.ClassificationDetailElement;
 import eu.etaxonomy.taxeditor.ui.section.classification.ClassificationDetailSection;
 import eu.etaxonomy.taxeditor.ui.section.classification.TaxonNodeDetailElement;
@@ -205,7 +208,6 @@ import eu.etaxonomy.taxeditor.ui.section.occurrence.DeterminationHistoryDetailSe
 import eu.etaxonomy.taxeditor.ui.section.occurrence.FieldObservationDetailElement;
 import eu.etaxonomy.taxeditor.ui.section.occurrence.FieldObservationDetailSection;
 import eu.etaxonomy.taxeditor.ui.section.occurrence.GatheringEventDetailElement;
 import eu.etaxonomy.taxeditor.ui.section.occurrence.FieldObservationDetailElement;
 import eu.etaxonomy.taxeditor.ui.section.occurrence.FieldObservationDetailSection;
 import eu.etaxonomy.taxeditor.ui.section.occurrence.GatheringEventDetailElement;
-import eu.etaxonomy.taxeditor.ui.section.occurrence.GatheringEventDetailElementComposite;
 import eu.etaxonomy.taxeditor.ui.section.occurrence.GatheringEventDetailSection;
 import eu.etaxonomy.taxeditor.ui.section.occurrence.GeneralDetailElement;
 import eu.etaxonomy.taxeditor.ui.section.occurrence.GeneralDetailSection;
 import eu.etaxonomy.taxeditor.ui.section.occurrence.GatheringEventDetailSection;
 import eu.etaxonomy.taxeditor.ui.section.occurrence.GeneralDetailElement;
 import eu.etaxonomy.taxeditor.ui.section.occurrence.GeneralDetailSection;
@@ -1774,14 +1776,20 @@ public class CdmFormFactory extends FormToolkit {
         return element;
     }
 
         return element;
     }
 
+    public FieldObservationGeneralElementController createFieldObservationGeneralElement(ICdmFormElement parentElement){
+        FieldObservationGeneralElementController element = new FieldObservationGeneralElementController(new FieldObservationGeneralElement(parentElement.getLayoutComposite(), SWT.NONE), this, parentElement);
+        addAndAdaptElement(parentElement, element);
+        return element;
+    }
+
     public GatheringEventDetailElement createGatheringEventDetailElement(ICdmFormElement parentElement) {
         GatheringEventDetailElement element = new GatheringEventDetailElement(this, parentElement);
         addAndAdaptElement(parentElement, element);
         return element;
     }
 
     public GatheringEventDetailElement createGatheringEventDetailElement(ICdmFormElement parentElement) {
         GatheringEventDetailElement element = new GatheringEventDetailElement(this, parentElement);
         addAndAdaptElement(parentElement, element);
         return element;
     }
 
-    public GatheringEventDetailElementComposite createGatheringEventDetailElementComposite(ICdmFormElement parentElement) {
-        GatheringEventDetailElementComposite element = new GatheringEventDetailElementComposite(parentElement.getLayoutComposite(), new GatheringEventDetailsElement(parentElement.getLayoutComposite(), SWT.NONE), this, parentElement, SWT.NONE);
+    public GatheringEventDetailsElementController createGatheringEventDetailsElementController(ICdmFormElement parentElement) {
+        GatheringEventDetailsElementController element = new GatheringEventDetailsElementController(new GatheringEventDetailsElement(parentElement.getLayoutComposite(), SWT.NONE), this, parentElement);
         adapt(element);
         parentElement.addElement(element);
         return element;
         adapt(element);
         parentElement.addElement(element);
         return element;
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/campanula/EntitySelectionField.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/campanula/EntitySelectionField.java
new file mode 100644 (file)
index 0000000..22a00b6
--- /dev/null
@@ -0,0 +1,82 @@
+// $Id$
+/**
+* Copyright (C) 2013 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.ui.section.campanula;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.ui.forms.widgets.FormToolkit;
+import org.eclipse.ui.forms.widgets.TableWrapData;
+import org.eclipse.ui.forms.widgets.TableWrapLayout;
+import org.eclipse.wb.swt.ResourceManager;
+
+/**
+ * @author pplitzner
+ * @date 13.08.2013
+ *
+ */
+public class EntitySelectionField extends Composite {
+    private FormToolkit formToolkit = new FormToolkit(Display.getDefault());
+    private Label text;
+    private Button button_selection;
+    private Button button_edit;
+    private Button button_remove;
+
+    /**
+     * Create the composite.
+     * @param parent
+     * @param style
+     */
+    public EntitySelectionField(Composite parent, int style) {
+        super(parent, style);
+        {
+            TableWrapLayout tableWrapLayout = new TableWrapLayout();
+            tableWrapLayout.verticalSpacing = 0;
+            tableWrapLayout.topMargin = 0;
+            tableWrapLayout.rightMargin = 0;
+            tableWrapLayout.numColumns = 4;
+            tableWrapLayout.leftMargin = 0;
+            tableWrapLayout.horizontalSpacing = 0;
+            tableWrapLayout.bottomMargin = 0;
+            setLayout(tableWrapLayout);
+        }
+
+        text = formToolkit.createLabel(this, "", SWT.NONE);
+        text.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB, TableWrapData.TOP, 1, 1));
+
+        button_selection = formToolkit.createButton(this, "", SWT.NONE);
+        button_selection.setImage(ResourceManager.getPluginImage("eu.etaxonomy.taxeditor.store", "icons/prj_obj.gif"));
+
+        button_edit = formToolkit.createButton(this, "", SWT.NONE);
+        button_edit.setImage(ResourceManager.getPluginImage("eu.etaxonomy.taxeditor.store", "icons/text.gif"));
+
+        button_remove = formToolkit.createButton(this, "", SWT.NONE);
+        button_remove.setImage(ResourceManager.getPluginImage("eu.etaxonomy.taxeditor.store", "icons/trash.gif"));
+    }
+
+    @Override
+    protected void checkSubclass() {
+        // Disable the check that prevents subclassing of SWT components
+    }
+    public Label getText() {
+        return text;
+    }
+    public Button getButton_selection() {
+        return button_selection;
+    }
+    public Button getButton_edit() {
+        return button_edit;
+    }
+    public Button getButton_remove() {
+        return button_remove;
+    }
+}
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/campanula/EntitySelectionFieldController.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/campanula/EntitySelectionFieldController.java
new file mode 100644 (file)
index 0000000..465754e
--- /dev/null
@@ -0,0 +1,440 @@
+// $Id$
+/**
+ * Copyright (C) 2013 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.ui.section.campanula;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.springframework.security.core.GrantedAuthority;
+
+import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
+import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
+import eu.etaxonomy.cdm.common.CdmUtils;
+import eu.etaxonomy.cdm.model.common.Group;
+import eu.etaxonomy.cdm.model.common.ICdmBase;
+import eu.etaxonomy.cdm.model.common.IIdentifiableEntity;
+import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
+import eu.etaxonomy.taxeditor.model.AbstractUtility;
+import eu.etaxonomy.taxeditor.model.ImageResources;
+import eu.etaxonomy.taxeditor.preference.Resources;
+import eu.etaxonomy.taxeditor.ui.dialog.selection.SelectionDialogFactory;
+import eu.etaxonomy.taxeditor.ui.element.AbstractCdmFormElement;
+import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
+import eu.etaxonomy.taxeditor.ui.element.CdmPropertyChangeEvent;
+import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
+import eu.etaxonomy.taxeditor.ui.element.IEnableableFormElement;
+import eu.etaxonomy.taxeditor.ui.element.IEntityElement;
+import eu.etaxonomy.taxeditor.ui.element.ILabeledElement;
+import eu.etaxonomy.taxeditor.ui.element.ISelectableElement;
+import eu.etaxonomy.taxeditor.ui.element.LayoutConstants;
+import eu.etaxonomy.taxeditor.ui.element.SelectionArbitrator;
+import eu.etaxonomy.taxeditor.ui.selection.EntitySelectionElement;
+
+/**
+ * @author pplitzner
+ * @date 13.08.2013
+ *
+ */
+public class EntitySelectionFieldController<T extends ICdmBase> extends AbstractCdmFormElement implements SelectionListener, IEnableableFormElement, ISelectableElement, IEntityElement<T>, ILabeledElement, IConversationEnabled {
+
+    /**
+     * Bitmask for configuring functionality of selection element
+     */
+    public static final int NOTHING = 0; // 000
+    public static final int EDITABLE = 1 << 0; // 001
+    public static final int DELETABLE = 1 << 1; // 010
+    public static final int SELECTABLE = 1 << 2; // 100
+    public static final int ALL = EDITABLE | DELETABLE | SELECTABLE; // 111
+
+    protected T entity;
+
+    //TODO also control "label" with this class?
+//    protected Label label;
+    protected Label text;
+    protected Button button_selection;
+
+    private SelectionArbitrator selectionArbitrator;
+
+    protected Button button_edit;
+
+    private final String labelString;
+
+    private Composite selectableComposite;
+
+    private Button button_remove;
+
+    private final boolean isEditable;
+
+    private final boolean isDeletable;
+
+    private final ConversationHolder conversation;
+    private Class<T> clazz;
+
+    /**
+     * <p>
+     * Constructor for AbstractSelectionElement.
+     * </p>
+     *
+     * @param formFactory
+     *            a {@link eu.etaxonomy.taxeditor.ui.element.CdmFormFactory}
+     *            object.
+     * @param conversation
+     *            TODO
+     * @param parentElement
+     *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
+     *            object.
+     * @param labelString
+     *            a {@link java.lang.String} object.
+     * @param entity
+     *            a T object.
+     * @param isEditable
+     *            a boolean.
+     * @param isSelectable
+     *            a boolean.
+     * @param isDeletable
+     *            a boolean.
+     * @param style
+     *            a int.
+     * @param <T>
+     *            a T object.
+     */
+    public EntitySelectionFieldController(EntitySelectionField entitySelectionField, CdmFormFactory formFactory, ConversationHolder conversation, ICdmFormElement parentElement, String labelString, T entity, int mode, int style) {
+        super(formFactory, parentElement);
+
+        setPropertyChangeListeners(formFactory.getPropertyChangeListeners());
+        formFactory.addPropertyChangeListener(this);
+
+        this.isEditable = (mode & EDITABLE) == EDITABLE;
+        this.isDeletable = (mode & DELETABLE) == DELETABLE;
+        boolean isSelectable = (mode & SELECTABLE) == SELECTABLE;
+
+        this.labelString = labelString;
+
+        this.conversation = conversation;
+
+        if (isSelectable && formFactory.getSelectionProvider() != null) {
+            selectionArbitrator = formFactory.createSelectionArbitrator(this);
+        }
+
+        createControls(getLayoutComposite(), entitySelectionField, SWT.NULL);
+
+        setEntity(entity);
+    }
+
+    public EntitySelectionFieldController(EntitySelectionField entitySelectionField, CdmFormFactory formFactory, ConversationHolder conversation, ICdmFormElement parentElement, Class<T> clazz, String labelString, T entity, int mode, int style) {
+        this(entitySelectionField, formFactory, conversation, parentElement, labelString, entity, mode, style);
+        this.clazz = clazz;
+    }
+
+    private void createControls(Composite parent, EntitySelectionField entitySelectionField, int style) {
+
+//        label = formFactory.createLabel(getLayoutComposite(), labelString, SWT.NULL);
+//
+//        addControl(label);
+
+        selectableComposite = entitySelectionField;//formFactory.createComposite(getLayoutComposite());
+
+        int columns = 2;
+        if (isEditable) {
+            columns += 1;
+        }
+        if (isDeletable) {
+            columns += 1;
+        }
+
+        selectableComposite.setLayout(LayoutConstants.LAYOUT(columns, false));
+        selectableComposite.setLayoutData(LayoutConstants.FILL_HORIZONTALLY());
+
+        addControl(selectableComposite);
+
+        text = entitySelectionField.getText();//formFactory.createLabel(selectableComposite, null, SWT.WRAP);
+        addControl(text);
+
+        text.setLayoutData(LayoutConstants.FILL_HORIZONTALLY());
+        text.setBackground(AbstractUtility.getColor(Resources.COLOR_TEXT_DISABLED_BACKGROUND));
+
+        button_selection = entitySelectionField.getButton_selection();//formFactory.createButton(selectableComposite, null, SWT.PUSH);
+        button_selection.setImage(ImageResources.getImage(ImageResources.BROWSE_ICON));
+        button_selection.setToolTipText("Browse existing");
+
+        addControl(button_selection);
+        button_selection.addSelectionListener(this);
+
+        if (isEditable) {
+            button_edit = entitySelectionField.getButton_edit();//formFactory.createButton(selectableComposite, null, SWT.PUSH);
+            button_edit.setImage(ImageResources.getImage(ImageResources.EDIT_ICON));
+            button_edit.setToolTipText("Edit");
+            addControl(button_edit);
+//            button_edit.addSelectionListener(new EditListener(this));
+        }
+
+        if (isDeletable) {
+            button_remove = entitySelectionField.getButton_remove();//formFactory.createButton(selectableComposite, null, SWT.PUSH);
+            button_remove.setImage(ImageResources.getImage(ImageResources.TRASH_ICON));
+            button_remove.setToolTipText("Remove");
+            addControl(button_remove);
+//            button_remove.addSelectionListener(new DeleteListener(this));
+        }
+    }
+
+    @Override
+    public void widgetSelected(SelectionEvent e) {
+        T selection = SelectionDialogFactory.getSelectionFromDialog(clazz, getShell(), getConversationHolder(), getEntity());
+        setSelectionInternal(selection);
+    }
+
+    /**
+     * Return the selected object
+     *
+     * @return a T object.
+     */
+    public T getSelection() {
+        return entity;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see
+     * eu.etaxonomy.taxeditor.forms.IEnableableFormElement#setEnabled(boolean)
+     */
+    /** {@inheritDoc} */
+    @Override
+    public void setEnabled(boolean enabled) {
+        button_selection.setEnabled(enabled);
+        if (isEditable) {
+            button_edit.setEnabled(enabled && entity != null);
+        }
+    }
+
+    /**
+     * <p>
+     * setSelectionInternal
+     * </p>
+     *
+     * @param selection
+     *            a T object.
+     */
+    protected void setSelectionInternal(T selection) {
+        if (selection != null && !selection.equals(this.entity)) {
+            setEntity(selection);
+            firePropertyChangeEvent(new CdmPropertyChangeEvent(this, null));
+        }
+    }
+
+    /**
+     * <p>
+     * Setter for the field <code>entity</code>.
+     * </p>
+     *
+     * @param selection
+     *            a T object.
+     */
+    public void setEntity(T selection) {
+        this.entity = selection;
+        updateElement();
+    }
+
+    /**
+     * Updates this elements view
+     */
+    protected void updateElement() {
+        String title = CdmUtils.Nz(getTitle());
+        // we have to duplicate ampersands otherwise they are treated as
+        // mnenomic (see Label.setText() documentation)
+        title = title.replace("&", "&&");
+        text.setText(title); // title can be null
+        if (isEditable) {
+            button_edit.setEnabled(entity != null);
+        }
+    }
+
+    /**
+     * <p>
+     * updateFromWizard
+     * </p>
+     */
+    protected void updateFromWizard() {
+        updateElement();
+        firePropertyChangeEvent(new CdmPropertyChangeEvent(this, null));
+    }
+
+    /**
+     * <p>
+     * getTitle
+     * </p>
+     *
+     * @return a {@link java.lang.String} object.
+     */
+    protected String getTitle() {
+        if (entity != null) {
+            if (entity instanceof IIdentifiableEntity) {
+                return ((IIdentifiableEntity) entity).getTitleCache();
+            } else if (entity instanceof Group) {
+                return ((Group) entity).getName();
+            } else if (entity instanceof GrantedAuthority) {
+                return ((GrantedAuthority) entity).getAuthority();
+            }
+        }
+        return "";
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void setSelected(boolean selected) {
+        setBackground(selected ? SELECTED : getPersistentBackground());
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see eu.etaxonomy.taxeditor.forms.IEntityElement#getEntity()
+     */
+    /**
+     * <p>
+     * Getter for the field <code>entity</code>.
+     * </p>
+     *
+     * @return a T object.
+     */
+    @Override
+    public T getEntity() {
+        return entity;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see eu.etaxonomy.taxeditor.forms.section.cdmdetail.ISelectableElement#
+     * getSelectionArbitrator()
+     */
+    /**
+     * <p>
+     * Getter for the field <code>selectionArbitrator</code>.
+     * </p>
+     *
+     * @return a {@link eu.etaxonomy.taxeditor.ui.element.SelectionArbitrator}
+     *         object.
+     */
+    @Override
+    public SelectionArbitrator getSelectionArbitrator() {
+        return selectionArbitrator;
+    }
+
+    /**
+     * Convenient access to current shell
+     *
+     * @return a {@link org.eclipse.swt.widgets.Shell} object.
+     */
+    protected Shell getShell() {
+        return getLayoutComposite().getShell();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void setIrrelevant(boolean irrelevant) {
+        String colorId = irrelevant ? Resources.COLOR_COMPOSITE_IRRELEVANT : Resources.COLOR_TEXT_DISABLED_BACKGROUND;
+
+        Color color = AbstractUtility.getColor(colorId);
+        text.setBackground(color);
+    }
+
+    private class DeleteListener extends SelectionAdapter {
+
+        private final EntitySelectionElement<T> selectionElement;
+
+        public DeleteListener(EntitySelectionElement<T> selectionElement) {
+            this.selectionElement = selectionElement;
+        }
+
+        @Override
+        public void widgetSelected(SelectionEvent e) {
+            setEntity(null);
+            firePropertyChangeEvent(new CdmPropertyChangeEvent(selectionElement, null));
+        }
+    }
+
+    private class EditListener extends SelectionAdapter {
+
+        private final EntitySelectionElement<T> selectionElement;
+
+        public EditListener(EntitySelectionElement<T> selectionElement) {
+            this.selectionElement = selectionElement;
+        }
+
+        /** {@inheritDoc} */
+        @Override
+        public void widgetSelected(SelectionEvent e) {
+//            WizardDialog dialog = new WizardDialog(selectionElement.getShell(), new EditFromSelectionWizard(selectionElement));
+//            if (dialog.open() == IStatus.OK) {
+//                selectionElement.updateFromWizard();
+//            }
+        }
+    }
+
+    // not used
+    /** {@inheritDoc} */
+    @Override
+    public void widgetDefaultSelected(SelectionEvent e) {
+    }
+
+    /**
+     * <p>
+     * getConversationHolder
+     * </p>
+     *
+     * @return a {@link eu.etaxonomy.cdm.api.conversation.ConversationHolder}
+     *         object.
+     */
+    @Override
+    public ConversationHolder getConversationHolder() {
+        return conversation;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void setBackground(Color color) {
+//        label.setBackground(color);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void setLabel(String labelString) {
+//        if (label != null) {
+//            label.setText(labelString);
+//        }
+    }
+
+    /**
+     * <p>
+     * Getter for the field <code>label</code>.
+     * </p>
+     *
+     * @return a {@link java.lang.String} object.
+     */
+    @Override
+    public String getLabel() {
+//        if (label != null) {
+//            return label.getText();
+//        }
+        return null;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void update(CdmDataChangeMap changeEvents) {
+    }
+}
index 1303559cddc701c2bcfc0d3f1d2390925373500d..d556e781d6a4f3a1339cd57f1f12160793b2c380 100644 (file)
@@ -26,14 +26,15 @@ import org.eclipse.wb.swt.SWTResourceManager;
  */
 public class FieldObservationGeneralElement extends Composite {
     private final FormToolkit formToolkit = new FormToolkit(Display.getDefault());
  */
 public class FieldObservationGeneralElement extends Composite {
     private final FormToolkit formToolkit = new FormToolkit(Display.getDefault());
-    private final Text text;
-    private final Text text_1;
-    private final Text text_2;
-    private final Text text_3;
-    private final Text text_4;
-    private final Text text_5;
-    private final Text text_6;
-    private final Text text_7;
+    private final Text textLocality;
+    private final Text textLatitude;
+    private final Text textLongitude;
+    private final Text textErrorRadius;
+    private final Text textElevation;
+    private final Text textCollectingNumber;
+    private EntitySelectionField countrySelectionField;
+    private EntitySelectionField collectorSelectionField;
+    private ToggleableTextField toggleableTextField;
 
     /**
      * Create the composite.
 
     /**
      * Create the composite.
@@ -41,7 +42,7 @@ public class FieldObservationGeneralElement extends Composite {
      * @param style
      */
     public FieldObservationGeneralElement(Composite parent, int style) {
      * @param style
      */
     public FieldObservationGeneralElement(Composite parent, int style) {
-        super(parent, style);
+        super(parent, SWT.NONE);
         setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
         {
             TableWrapLayout tableWrapLayout = new TableWrapLayout();
         setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
         {
             TableWrapLayout tableWrapLayout = new TableWrapLayout();
@@ -51,62 +52,71 @@ public class FieldObservationGeneralElement extends Composite {
 
         Label lblTitleCache = formToolkit.createLabel(this, "Title Cache", SWT.NONE);
 
 
         Label lblTitleCache = formToolkit.createLabel(this, "Title Cache", SWT.NONE);
 
-        text = formToolkit.createText(this, "New Text", SWT.NONE);
-        text.setText("");
-        text.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB, TableWrapData.TOP, 1, 1));
+        toggleableTextField = new ToggleableTextField(this, SWT.NONE);
+        TableWrapData twd_toggleableTextField = new TableWrapData(TableWrapData.LEFT, TableWrapData.TOP, 1, 1);
+        twd_toggleableTextField.grabHorizontal = true;
+        toggleableTextField.setLayoutData(twd_toggleableTextField);
+        formToolkit.adapt(toggleableTextField);
+        formToolkit.paintBordersFor(toggleableTextField);
 
         Label lblNewLabel = new Label(this, SWT.NONE);
         formToolkit.adapt(lblNewLabel, true, true);
         lblNewLabel.setText("Country");
 
         Label lblNewLabel = new Label(this, SWT.NONE);
         formToolkit.adapt(lblNewLabel, true, true);
         lblNewLabel.setText("Country");
-        new Label(this, SWT.NONE);
+
+        countrySelectionField = new EntitySelectionField(this, SWT.NONE);
+        countrySelectionField.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB, TableWrapData.TOP, 1, 1));
+        formToolkit.adapt(countrySelectionField);
+        formToolkit.paintBordersFor(countrySelectionField);
 
         Label lblLocality = formToolkit.createLabel(this, "Locality", SWT.NONE);
 
 
         Label lblLocality = formToolkit.createLabel(this, "Locality", SWT.NONE);
 
-        text_1 = formToolkit.createText(this, "New Text", SWT.NONE);
-        text_1.setText("");
-        text_1.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB, TableWrapData.TOP, 1, 1));
+        textLocality = formToolkit.createText(this, "New Text", SWT.NONE);
+        textLocality.setText("");
+        textLocality.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB, TableWrapData.TOP, 1, 1));
 
         Label lblLatitude = formToolkit.createLabel(this, "Latitude", SWT.NONE);
 
 
         Label lblLatitude = formToolkit.createLabel(this, "Latitude", SWT.NONE);
 
-        text_2 = formToolkit.createText(this, "New Text", SWT.NONE);
-        text_2.setText("");
-        text_2.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB, TableWrapData.TOP, 1, 1));
+        textLatitude = formToolkit.createText(this, "New Text", SWT.NONE);
+        textLatitude.setText("");
+        textLatitude.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB, TableWrapData.TOP, 1, 1));
 
         Label lblLongitude = formToolkit.createLabel(this, "Longitude", SWT.NONE);
 
 
         Label lblLongitude = formToolkit.createLabel(this, "Longitude", SWT.NONE);
 
-        text_3 = formToolkit.createText(this, "New Text", SWT.NONE);
-        text_3.setText("");
-        text_3.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB, TableWrapData.TOP, 1, 1));
+        textLongitude = formToolkit.createText(this, "New Text", SWT.NONE);
+        textLongitude.setText("");
+        textLongitude.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB, TableWrapData.TOP, 1, 1));
 
         Label lblErrorRadiusm = formToolkit.createLabel(this, "Error Radius (m)", SWT.NONE);
 
 
         Label lblErrorRadiusm = formToolkit.createLabel(this, "Error Radius (m)", SWT.NONE);
 
-        text_4 = formToolkit.createText(this, "New Text", SWT.NONE);
-        text_4.setText("");
-        text_4.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB, TableWrapData.TOP, 1, 1));
+        textErrorRadius = formToolkit.createText(this, "New Text", SWT.NONE);
+        textErrorRadius.setText("");
+        textErrorRadius.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB, TableWrapData.TOP, 1, 1));
 
         Label lblReferenceSystem = formToolkit.createLabel(this, "Reference System", SWT.NONE);
         new Label(this, SWT.NONE);
 
         Label lblAbsoluteElevationm = formToolkit.createLabel(this, "Absolute Elevation (m)", SWT.NONE);
 
 
         Label lblReferenceSystem = formToolkit.createLabel(this, "Reference System", SWT.NONE);
         new Label(this, SWT.NONE);
 
         Label lblAbsoluteElevationm = formToolkit.createLabel(this, "Absolute Elevation (m)", SWT.NONE);
 
-        text_5 = formToolkit.createText(this, "New Text", SWT.NONE);
-        text_5.setText("");
-        text_5.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB, TableWrapData.TOP, 1, 1));
+        textElevation = formToolkit.createText(this, "New Text", SWT.NONE);
+        textElevation.setText("");
+        textElevation.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB, TableWrapData.TOP, 1, 1));
 
         Label lblDate = formToolkit.createLabel(this, "Date", SWT.NONE);
         new Label(this, SWT.NONE);
 
         Label lblCollector = formToolkit.createLabel(this, "Collector", SWT.NONE);
 
 
         Label lblDate = formToolkit.createLabel(this, "Date", SWT.NONE);
         new Label(this, SWT.NONE);
 
         Label lblCollector = formToolkit.createLabel(this, "Collector", SWT.NONE);
 
-        text_6 = formToolkit.createText(this, "New Text", SWT.NONE);
-        text_6.setText("");
-        text_6.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB, TableWrapData.TOP, 1, 1));
+        collectorSelectionField = new EntitySelectionField(this, SWT.NONE);
+        collectorSelectionField.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB, TableWrapData.TOP, 1, 1));
+        formToolkit.adapt(collectorSelectionField);
+        formToolkit.paintBordersFor(collectorSelectionField);
+
 
         Label lblCollectingNumber = formToolkit.createLabel(this, "Collecting Number", SWT.NONE);
 
 
         Label lblCollectingNumber = formToolkit.createLabel(this, "Collecting Number", SWT.NONE);
 
-        text_7 = formToolkit.createText(this, "New Text", SWT.NONE);
-        text_7.setText("");
-        text_7.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB, TableWrapData.TOP, 1, 1));
+        textCollectingNumber = formToolkit.createText(this, "New Text", SWT.NONE);
+        textCollectingNumber.setText("");
+        textCollectingNumber.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB, TableWrapData.TOP, 1, 1));
 
     }
 
 
     }
 
@@ -114,4 +124,31 @@ public class FieldObservationGeneralElement extends Composite {
     protected void checkSubclass() {
         // Disable the check that prevents subclassing of SWT components
     }
     protected void checkSubclass() {
         // Disable the check that prevents subclassing of SWT components
     }
+    public EntitySelectionField getCountrySelectionField() {
+        return countrySelectionField;
+    }
+    public EntitySelectionField getCollectorSelectionField() {
+        return collectorSelectionField;
+    }
+    public Text getTextElevation() {
+        return textElevation;
+    }
+    public Text getTextLocality() {
+        return textLocality;
+    }
+    public Text getTextLatitude() {
+        return textLatitude;
+    }
+    public Text getTextLongitude() {
+        return textLongitude;
+    }
+    public Text getTextErrorRadius() {
+        return textErrorRadius;
+    }
+    public Text getTextCollectingNumber() {
+        return textCollectingNumber;
+    }
+    public ToggleableTextField getToggleableTextField() {
+        return toggleableTextField;
+    }
 }
 }
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/campanula/FieldObservationGeneralElementController.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/campanula/FieldObservationGeneralElementController.java
new file mode 100644 (file)
index 0000000..6d7ed1b
--- /dev/null
@@ -0,0 +1,105 @@
+// $Id$
+/**
+ * Copyright (C) 2013 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.ui.section.campanula;
+
+import eu.etaxonomy.cdm.api.facade.DerivedUnitFacade;
+import eu.etaxonomy.cdm.model.agent.AgentBase;
+import eu.etaxonomy.cdm.model.common.LanguageString;
+import eu.etaxonomy.cdm.model.location.NamedArea;
+import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
+import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
+import eu.etaxonomy.taxeditor.ui.element.LanguageStringWithLabelElement;
+import eu.etaxonomy.taxeditor.ui.element.PointElement;
+import eu.etaxonomy.taxeditor.ui.element.TimePeriodElement;
+import eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailElement;
+import eu.etaxonomy.taxeditor.ui.selection.EntitySelectionElement;
+
+/**
+ * @author pplitzner
+ * @date 13.08.2013
+ *
+ */
+public class FieldObservationGeneralElementController extends AbstractCdmDetailElement<DerivedUnitFacade> {
+
+    private ToggleableTextFieldController toggleableText_titleCache;
+
+    private EntitySelectionFieldController<NamedArea> selection_country;
+    private LanguageStringWithLabelElement languageText_locality;
+    private PointElement element_point;
+    private NumberFieldController number_elevation;
+    private TimePeriodElement element_date;
+    private EntitySelectionFieldController<AgentBase> selection_collector;
+    private TextFieldController text_collectingNumber;
+    private FieldObservationGeneralElement fieldObservationGeneralElement;
+
+    /**
+     * @param formFactory
+     * @param formElement
+     */
+    public FieldObservationGeneralElementController(FieldObservationGeneralElement fieldObservationGeneralElement, CdmFormFactory formFactory, ICdmFormElement formElement) {
+        super(formFactory, formElement);
+        this.fieldObservationGeneralElement = fieldObservationGeneralElement;
+        formFactory.addPropertyChangeListener(this);
+        formFactory.getPropertyChangeListeners().add(this);
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see
+     * eu.etaxonomy.taxeditor.section.AbstractCdmDetailElement#createControls
+     * (eu.etaxonomy.taxeditor.forms.ICdmFormElement, java.lang.Object, int)
+     */
+    @Override
+    protected void createControls(ICdmFormElement formElement, DerivedUnitFacade entity, int style) {
+        toggleableText_titleCache = new ToggleableTextFieldController(fieldObservationGeneralElement.getToggleableTextField(), getFormFactory(), formElement, entity.getTitleCache(), entity.isProtectedTitleCache(), style);
+
+        selection_country = new EntitySelectionFieldController<NamedArea>(fieldObservationGeneralElement.getCountrySelectionField(), getFormFactory(), getConversationHolder(), formElement, NamedArea.class, "Country", entity.getCountry(), EntitySelectionElement.NOTHING, style);
+//        languageText_locality = formFactory.createLanguageStringWithLabelElement(formElement, "Locality", entity.getLocality(), style);
+//        element_point = formFactory.createPointElement(formElement, entity.getExactLocation(), style);
+        number_elevation = new NumberFieldController(fieldObservationGeneralElement.getTextElevation(), getFormFactory(), formElement, entity.getAbsoluteElevation());
+//        element_date = formFactory.createTimePeriodElement(formElement, "Date", entity.getGatheringPeriod(), style);
+        selection_collector = new EntitySelectionFieldController<AgentBase>(fieldObservationGeneralElement.getCollectorSelectionField(), getFormFactory(), getConversationHolder(), formElement, AgentBase.class, "Collector", entity.getCollector(), EntitySelectionElement.ALL, style);
+        text_collectingNumber = new TextFieldController(fieldObservationGeneralElement.getTextCollectingNumber(), getFormFactory(), formElement, entity.getFieldNumber(), null);
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see
+     * eu.etaxonomy.taxeditor.section.AbstractCdmDetailElement#handleEvent(java
+     * .lang.Object)
+     */
+    @Override
+    public void handleEvent(Object eventSource) {
+        if (eventSource == toggleableText_titleCache) {
+            getEntity().setTitleCache(toggleableText_titleCache.getText(), toggleableText_titleCache.getState());
+        } else if (eventSource == selection_country) {
+            getEntity().setCountry(selection_country.getSelection());
+        } else if (eventSource == languageText_locality) {
+            LanguageString locality = languageText_locality.getLanguageString();
+            getEntity().setLocality(locality);
+        } else if (eventSource == element_point) {
+            getEntity().setExactLocation(element_point.getPoint());
+        } else if (eventSource == number_elevation) {
+            getEntity().setAbsoluteElevation(number_elevation.getInteger());
+        } else if (eventSource == element_date) {
+            getEntity().setGatheringPeriod(element_date.getTimePeriod());
+        } else if (eventSource == selection_collector) {
+            getEntity().setCollector(selection_collector.getSelection());
+        } else if (eventSource == text_collectingNumber) {
+            getEntity().setFieldNumber(text_collectingNumber.getText());
+        }
+        if (eventSource != toggleableText_titleCache) {
+            toggleableText_titleCache.setText(getEntity().getTitleCache());
+        }
+    }
+
+}
index 465181924a22354a9d4300363357a847375b7221..6d34b4c33d9d5fec86985120a468242102a3f2b7 100644 (file)
@@ -14,6 +14,7 @@ import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Text;
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.forms.widgets.ExpandableComposite;
 import org.eclipse.ui.forms.widgets.FormToolkit;
 import org.eclipse.ui.forms.widgets.TableWrapData;
 import org.eclipse.ui.forms.widgets.TableWrapLayout;
 import org.eclipse.ui.forms.widgets.FormToolkit;
 import org.eclipse.ui.forms.widgets.TableWrapData;
 import org.eclipse.ui.forms.widgets.TableWrapLayout;
@@ -25,14 +26,16 @@ import org.eclipse.wb.swt.SWTResourceManager;
  *
  */
 public class GatheringEventDetailsElement extends Composite {
  *
  */
 public class GatheringEventDetailsElement extends Composite {
-    private final FormToolkit formToolkit = new FormToolkit(Display.getDefault());
-    private final Text textElevationError;
-    private final Text text_ElevationMinimum;
-    private final Text text_ElevationMaximum;
-    private final Text text_CollectingMethod;
-    private final Text text_DistanceToGround;
-    private final Text text_DistanceToWaterSurface;
-    private final Text text_GatheringEventDescription;
+    private FormToolkit formToolkit = new FormToolkit(Display.getDefault());
+    private Text textElevationError;
+    private Text text_ElevationMinimum;
+    private Text text_ElevationMaximum;
+    private Text text_CollectingMethod;
+    private Text text_DistanceToGround;
+    private Text text_DistanceToWaterSurface;
+    private Text text_GatheringEventDescription;
+    private ExpandableComposite section_collectingAreas;
+    private Composite composite;
 
     /**
      * Create the composite.
 
     /**
      * Create the composite.
@@ -44,6 +47,12 @@ public class GatheringEventDetailsElement extends Composite {
         setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
         {
             TableWrapLayout tableWrapLayout = new TableWrapLayout();
         setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
         {
             TableWrapLayout tableWrapLayout = new TableWrapLayout();
+            tableWrapLayout.verticalSpacing = 0;
+            tableWrapLayout.topMargin = 0;
+            tableWrapLayout.rightMargin = 0;
+            tableWrapLayout.leftMargin = 0;
+            tableWrapLayout.horizontalSpacing = 0;
+            tableWrapLayout.bottomMargin = 0;
             tableWrapLayout.numColumns = 2;
             setLayout(tableWrapLayout);
         }
             tableWrapLayout.numColumns = 2;
             setLayout(tableWrapLayout);
         }
@@ -90,6 +99,16 @@ public class GatheringEventDetailsElement extends Composite {
         text_GatheringEventDescription.setText("");
         text_GatheringEventDescription.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB, TableWrapData.TOP, 1, 1));
 
         text_GatheringEventDescription.setText("");
         text_GatheringEventDescription.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB, TableWrapData.TOP, 1, 1));
 
+        section_collectingAreas = formToolkit.createExpandableComposite(this, ExpandableComposite.TWISTIE);
+        section_collectingAreas.setLayoutData(new TableWrapData(TableWrapData.LEFT, TableWrapData.TOP, 1, 2));
+        formToolkit.paintBordersFor(section_collectingAreas);
+        section_collectingAreas.setText("Collecting Areas");
+        section_collectingAreas.setExpanded(true);
+
+        composite = formToolkit.createComposite(section_collectingAreas, SWT.NONE);
+        formToolkit.paintBordersFor(composite);
+        section_collectingAreas.setClient(composite);
+
     }
 
     @Override
     }
 
     @Override
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/campanula/GatheringEventDetailsElementController.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/campanula/GatheringEventDetailsElementController.java
new file mode 100644 (file)
index 0000000..37140e8
--- /dev/null
@@ -0,0 +1,108 @@
+// $Id$
+/**
+* Copyright (C) 2013 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.ui.section.campanula;
+
+import eu.etaxonomy.cdm.api.facade.DerivedUnitFacade;
+import eu.etaxonomy.taxeditor.model.AbstractUtility;
+import eu.etaxonomy.taxeditor.preference.Resources;
+import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
+import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
+import eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailElement;
+
+/**
+ * @author pplitzner
+ * @date 14.08.2013
+ *
+ */
+public class GatheringEventDetailsElementController extends AbstractCdmDetailElement<DerivedUnitFacade> {
+
+    private GatheringEventDetailsElement gatheringEventDetailsElement;
+
+    private NumberFieldController number_absoluteElevationError;
+
+    private NumberFieldController number_absoluteElevationMinimum;
+
+    private NumberFieldController number_absoluteElevationMaximum;
+
+    private TextFieldController text_collectingMethod;
+
+    private NumberFieldController number_distanceToGround;
+
+    private NumberFieldController number_distanceToWaterSurface;
+
+    private TextFieldController text_gatheringEventDescription;
+
+    // private CollectingAreasDetailSection section_collectingAreas;
+
+    /**
+     * <p>
+     * Constructor for GatheringEventDetailElement.
+     * </p>
+     *
+     * @param formFactory
+     *            a {@link eu.etaxonomy.taxeditor.ui.element.CdmFormFactory}
+     *            object.
+     * @param formElement
+     *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
+     *            object.
+     */
+    public GatheringEventDetailsElementController(GatheringEventDetailsElement gatheringEventDetailsElement, CdmFormFactory formFactory, ICdmFormElement formElement) {
+        super(formFactory, formElement);
+        this.gatheringEventDetailsElement = gatheringEventDetailsElement;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected void createControls(ICdmFormElement formElement, DerivedUnitFacade entity, int style) {
+
+        number_absoluteElevationError = new NumberFieldController(gatheringEventDetailsElement.getTextElevationError(), formFactory, this, (Integer)null);
+        number_absoluteElevationMinimum = new NumberFieldController(gatheringEventDetailsElement.getText_ElevationMinimum(), formFactory, this, (Integer)null);
+        number_absoluteElevationMaximum = new NumberFieldController(gatheringEventDetailsElement.getText_ElevationMaximum(), formFactory, this, (Integer)null);
+        text_collectingMethod = new TextFieldController(gatheringEventDetailsElement.getText_CollectingMethod(), formFactory, this, null, null);
+        number_distanceToGround = new NumberFieldController(gatheringEventDetailsElement.getText_DistanceToGround(), formFactory, this, (Integer)null);
+        number_distanceToWaterSurface = new NumberFieldController(gatheringEventDetailsElement.getText_DistanceToWaterSurface(), formFactory, this, (Integer)null);
+        text_gatheringEventDescription = new TextFieldController(gatheringEventDetailsElement.getText_GatheringEventDescription(), formFactory, this, null, null);
+//        section_collectingAreas = formFactory.createCollectingAreasDetailSection(getConversationHolder(), formElement, ExpandableComposite.TWISTIE);
+//        section_collectingAreas.setLayoutData(LayoutConstants.FILL_HORIZONTALLY(2, 1));
+//        section_collectingAreas.setEntity(entity);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void handleEvent(Object eventSource) {
+        if (eventSource == number_absoluteElevationError) {
+            getEntity().setAbsoluteElevationError(number_absoluteElevationError.getInteger());
+        } else if (eventSource == number_absoluteElevationMinimum) {
+            try {
+                getEntity().setAbsoluteElevationRange(number_absoluteElevationMinimum.getInteger(), number_absoluteElevationMaximum.getInteger());
+                number_absoluteElevationMinimum.setBackground(getColor(Resources.COLOR_COMPOSITE_BACKGROUND));
+            } catch (IllegalArgumentException e) {
+                number_absoluteElevationMinimum.setBackground(getColor(Resources.COLOR_PARSE_ERROR));
+                AbstractUtility.warn(getClass(), e.getLocalizedMessage());
+            }
+        } else if (eventSource == number_absoluteElevationMaximum) {
+            try {
+                getEntity().setAbsoluteElevationRange(number_absoluteElevationMinimum.getInteger(), number_absoluteElevationMaximum.getInteger());
+                number_absoluteElevationMaximum.setBackground(getColor(Resources.COLOR_COMPOSITE_BACKGROUND));
+            } catch (IllegalArgumentException e) {
+                number_absoluteElevationMaximum.setBackground(getColor(Resources.COLOR_PARSE_ERROR));
+                AbstractUtility.warn(getClass(), e.getLocalizedMessage());
+            }
+        } else if (eventSource == text_collectingMethod) {
+            getEntity().setCollectingMethod(text_collectingMethod.getText());
+        } else if (eventSource == number_distanceToGround) {
+            getEntity().setDistanceToGround(number_distanceToGround.getInteger());
+        } else if (eventSource == number_distanceToWaterSurface) {
+            getEntity().setDistanceToWaterSurface(number_distanceToWaterSurface.getInteger());
+        } else if (eventSource == text_gatheringEventDescription) {
+            getEntity().setGatheringEventDescription(text_gatheringEventDescription.getText());
+        }
+    }
+}
index 3d0006beb65193d9924f40d1d3ed1daa1cd40b42..89a77906d235cc43636efb13901f6dbb9bd4ae73 100644 (file)
@@ -11,7 +11,6 @@ package eu.etaxonomy.taxeditor.ui.section.campanula;
 
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.ModifyEvent;
 
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.ModifyEvent;
-import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Text;
 
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Text;
 
@@ -40,8 +39,8 @@ public class NumberFieldController extends TextFieldController {
      * @param initialInteger a {@link java.lang.Integer} object.
      * @param style a int.
      */
      * @param initialInteger a {@link java.lang.Integer} object.
      * @param style a int.
      */
-    public NumberFieldController(Composite parent, Text controlledText, CdmFormFactory formFactory, ICdmFormElement parentElement, Integer initialInteger, int style){
-        super(parent, controlledText, formFactory, parentElement, null, null, style);
+    public NumberFieldController(Text controlledText, CdmFormFactory formFactory, ICdmFormElement parentElement, Integer initialInteger){
+        super(controlledText, formFactory, parentElement, null, null);
         //WindowBuilder exception handling
         if(initialInteger==null){
             initialInteger = 0;
         //WindowBuilder exception handling
         if(initialInteger==null){
             initialInteger = 0;
@@ -59,9 +58,9 @@ public class NumberFieldController extends TextFieldController {
      * @param style a int.
      * @wbp.parser.constructor
      */
      * @param style a int.
      * @wbp.parser.constructor
      */
-    public NumberFieldController(Composite parent, Text controlledText, CdmFormFactory formFactory,
-            ICdmFormElement parentElement, Float initialFloat, int style) {
-        super(parent, controlledText, formFactory, parentElement, null, null, style);
+    public NumberFieldController(Text controlledText, CdmFormFactory formFactory,
+            ICdmFormElement parentElement, Float initialFloat) {
+        super(controlledText, formFactory, parentElement, null, null);
         //WindowBuilder exception handling
         if(initialFloat==null){
             initialFloat = 0f;
         //WindowBuilder exception handling
         if(initialFloat==null){
             initialFloat = 0f;
index ae552cf5c7a06a84416dfd81adbe51c16f9c26e9..dace7cb507fb709b15abee6a9630986297248d63 100644 (file)
@@ -15,11 +15,9 @@ import org.eclipse.swt.events.KeyEvent;
 import org.eclipse.swt.events.ModifyEvent;
 import org.eclipse.swt.events.ModifyListener;
 import org.eclipse.swt.graphics.Color;
 import org.eclipse.swt.events.ModifyEvent;
 import org.eclipse.swt.events.ModifyListener;
 import org.eclipse.swt.graphics.Color;
-import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Listener;
 import org.eclipse.swt.widgets.Text;
 import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Listener;
 import org.eclipse.swt.widgets.Text;
-import org.eclipse.ui.forms.widgets.TableWrapData;
 import org.eclipse.wb.swt.SWTResourceManager;
 
 import eu.etaxonomy.cdm.common.CdmUtils;
 import org.eclipse.wb.swt.SWTResourceManager;
 
 import eu.etaxonomy.cdm.common.CdmUtils;
@@ -30,7 +28,6 @@ import eu.etaxonomy.taxeditor.ui.element.CdmPropertyChangeEvent;
 import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
 import eu.etaxonomy.taxeditor.ui.element.IEnableableFormElement;
 import eu.etaxonomy.taxeditor.ui.element.ISelectable;
 import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
 import eu.etaxonomy.taxeditor.ui.element.IEnableableFormElement;
 import eu.etaxonomy.taxeditor.ui.element.ISelectable;
-import eu.etaxonomy.taxeditor.ui.element.LayoutConstants;
 
 /**
  * @author pplitzner
 
 /**
  * @author pplitzner
@@ -53,31 +50,32 @@ public class TextFieldController extends AbstractCdmFormElement implements Modif
      * @param initialText
      * @param textHeight
      */
      * @param initialText
      * @param textHeight
      */
-    public TextFieldController(Composite parent, Text controlledText, CdmFormFactory formFactory, ICdmFormElement parentFormElement, String initialText, Integer textHeight, int style) {
+    public TextFieldController(Text controlledText, CdmFormFactory formFactory, ICdmFormElement parentFormElement, String initialText, Integer textHeight) {
         super(formFactory, parentFormElement);
         setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
 
         //vvvvvvvvvvvvv
 
         setPropertyChangeListeners(formFactory.getPropertyChangeListeners());
         super(formFactory, parentFormElement);
         setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
 
         //vvvvvvvvvvvvv
 
         setPropertyChangeListeners(formFactory.getPropertyChangeListeners());
+        formFactory.addPropertyChangeListener(this);
 
         initialText = initialText==null?"":initialText;
 
         initialText = initialText==null?"":initialText;
-
-        int scrollStyle = textHeight == null ? SWT.NULL : (SWT.V_SCROLL | SWT.MULTI);
-
-        int combinedStyle = style | SWT.BORDER | scrollStyle;
-
-        // SWT.PASSWORD does not work when SWT.WRAP is set.
-        if (style != SWT.PASSWORD) {
-            combinedStyle = combinedStyle | SWT.WRAP;
-        }
+//
+//        int scrollStyle = textHeight == null ? SWT.NULL : (SWT.V_SCROLL | SWT.MULTI);
+//
+//        int combinedStyle = style | SWT.BORDER | scrollStyle;
+//
+//        // SWT.PASSWORD does not work when SWT.WRAP is set.
+//        if (style != SWT.PASSWORD) {
+//            combinedStyle = combinedStyle | SWT.WRAP;
+//        }
         //^^^^^^^^^^^^^^
 
         this.text = controlledText;
         //^^^^^^^^^^^^^^
 
         this.text = controlledText;
-        TableWrapData twd_text_1 = new TableWrapData(TableWrapData.LEFT, TableWrapData.TOP);
-        twd_text_1.grabHorizontal = true;
+//        TableWrapData twd_text_1 = new TableWrapData(TableWrapData.LEFT, TableWrapData.TOP);
+//        twd_text_1.grabHorizontal = true;
         text.setText(initialText);
         text.setText(initialText);
-        text.setLayoutData(twd_text_1);
+//        text.setLayoutData(twd_text_1);
 
 
         //vvvvvvvvvvvvvvvvvv
 
 
         //vvvvvvvvvvvvvvvvvv
@@ -99,12 +97,11 @@ public class TextFieldController extends AbstractCdmFormElement implements Modif
             });
         }
 
             });
         }
 
-        TableWrapData layoutData = LayoutConstants.FILL();
-        if (textHeight != null && textHeight > 0) {
-            (layoutData).heightHint = textHeight;
-        }
-
-        text.setLayoutData(layoutData);
+//        if (textHeight != null && textHeight > 0) {
+//            TableWrapData layoutData = LayoutConstants.FILL();
+//            (layoutData).heightHint = textHeight;
+//            text.setLayoutData(layoutData);
+//        }
 
         text.addModifyListener(this);
 
 
         text.addModifyListener(this);
 
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/campanula/ToggleableTextField.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/campanula/ToggleableTextField.java
new file mode 100644 (file)
index 0000000..24a682d
--- /dev/null
@@ -0,0 +1,71 @@
+// $Id$
+/**
+* Copyright (C) 2013 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.ui.section.campanula;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.forms.widgets.FormToolkit;
+import org.eclipse.ui.forms.widgets.TableWrapData;
+import org.eclipse.ui.forms.widgets.TableWrapLayout;
+
+/**
+ * @author pplitzner
+ * @date 14.08.2013
+ *
+ */
+public class ToggleableTextField extends Composite {
+    private final FormToolkit formToolkit = new FormToolkit(Display.getDefault());
+    private Text text;
+    private Button editButton;
+
+    /**
+     * Create the composite.
+     * @param parent
+     * @param style
+     */
+    public ToggleableTextField(Composite parent, int style) {
+        super(parent, style);
+        {
+            TableWrapLayout tableWrapLayout = new TableWrapLayout();
+            tableWrapLayout.numColumns = 2;
+            tableWrapLayout.verticalSpacing = 0;
+            tableWrapLayout.topMargin = 0;
+            tableWrapLayout.rightMargin = 0;
+            tableWrapLayout.leftMargin = 0;
+            tableWrapLayout.horizontalSpacing = 0;
+            tableWrapLayout.bottomMargin = 0;
+            setLayout(tableWrapLayout);
+        }
+
+        text = formToolkit.createText(this, "New Text", SWT.WRAP);
+        text.setText("");
+        TableWrapData twd_text = new TableWrapData(TableWrapData.FILL_GRAB, TableWrapData.TOP, 1, 1);
+        twd_text.grabVertical = true;
+        text.setLayoutData(twd_text);
+
+        editButton = formToolkit.createButton(this, "Edit", SWT.TOGGLE);
+
+    }
+
+    @Override
+    protected void checkSubclass() {
+        // Disable the check that prevents subclassing of SWT components
+    }
+
+    public Text getText() {
+        return text;
+    }
+    public Button getEditButton() {
+        return editButton;
+    }
+}
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/campanula/ToggleableTextFieldController.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/campanula/ToggleableTextFieldController.java
new file mode 100644 (file)
index 0000000..c105d50
--- /dev/null
@@ -0,0 +1,211 @@
+// $Id$
+/**
+* Copyright (C) 2013 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.ui.section.campanula;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.KeyAdapter;
+import org.eclipse.swt.events.KeyEvent;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Text;
+
+import eu.etaxonomy.taxeditor.preference.Resources;
+import eu.etaxonomy.taxeditor.store.StoreUtil;
+import eu.etaxonomy.taxeditor.ui.element.AbstractCdmFormElement;
+import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
+import eu.etaxonomy.taxeditor.ui.element.CdmPropertyChangeEvent;
+import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
+import eu.etaxonomy.taxeditor.ui.element.IEnableableFormElement;
+import eu.etaxonomy.taxeditor.ui.element.ISelectable;
+import eu.etaxonomy.taxeditor.ui.element.LayoutConstants;
+
+/**
+ * @author pplitzner
+ * @date 14.08.2013
+ *
+ */
+public class ToggleableTextFieldController extends AbstractCdmFormElement implements SelectionListener, ModifyListener, IEnableableFormElement, ISelectable {
+
+    private ToggleableTextField toggleableTextField;
+
+    private boolean state;
+    private Set<SelectionListener> selectionListener = new HashSet<SelectionListener>();
+    //TODO also connect label
+//    private Label label;
+
+    /**
+     * <p>Constructor for ToggleableTextElement.</p>
+     *
+     * @param style a int.
+     * @param formFactory a {@link eu.etaxonomy.taxeditor.ui.element.CdmFormFactory} object.
+     * @param parentElement a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement} object.
+     * @param labelString a {@link java.lang.String} object.
+     * @param initialText a {@link java.lang.String} object.
+     * @param initialState a boolean.
+     */
+    protected ToggleableTextFieldController(ToggleableTextField toggleableTextField, CdmFormFactory formFactory, ICdmFormElement parentElement,
+            String initialText, boolean initialState, int style) {
+        super(formFactory, parentElement);
+        setPropertyChangeListeners(formFactory.getPropertyChangeListeners());
+        formFactory.addPropertyChangeListener(this);
+
+        this.toggleableTextField = toggleableTextField;
+
+//        label = formFactory.createLabel(getLayoutComposite(), labelString, style);
+//        addControl(label);
+
+        Text text = toggleableTextField.getText();
+        addControl(text);
+        text.addModifyListener(this);
+        text.setLayoutData(LayoutConstants.FILL());
+
+        // Don't accept carriage returns as input
+        text.addKeyListener( new KeyAdapter(){
+            @Override
+            public void keyPressed(KeyEvent e) {
+            if(e.character == SWT.CR) {
+                e.doit = false;
+            }
+            }
+        });
+
+        Button editButton = toggleableTextField.getEditButton();
+        addControl(editButton);
+        editButton.addSelectionListener(this);
+
+        setState(initialState);
+    }
+
+    /**
+     * <p>setText</p>
+     *
+     * @param text a {@link java.lang.String} object.
+     */
+    public void setText(String text){
+        if(text != null){
+            // store current caret position
+            Text textField = toggleableTextField.getText();
+            int caretPosition = textField.getCaretPosition();
+
+            textField.removeModifyListener(this);
+            textField.setText(text);
+            textField.addModifyListener(this);
+
+            // restore caret position
+            textField.setSelection(caretPosition);
+        }
+    }
+
+    /**
+     * <p>getText</p>
+     *
+     * @return a {@link java.lang.String} object.
+     */
+    public String getText(){
+        return toggleableTextField.getText().getText();
+    }
+
+    /**
+     * <p>Setter for the field <code>state</code>.</p>
+     *
+     * @param state a boolean.
+     */
+    public void setState(boolean state) {
+        this.state = state;
+        setEnabled(state);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void setEnabled(boolean enabled) {
+        toggleableTextField.getText().setEnabled(enabled);
+        String symbolicName = enabled ? Resources.COLOR_FONT_DEFAULT : Resources.COLOR_TEXT_DISABLED;
+        toggleableTextField.getText().setForeground(StoreUtil.getColor(symbolicName));
+        toggleableTextField.getEditButton().setSelection(enabled);
+    }
+
+    /**
+     * <p>Getter for the field <code>state</code>.</p>
+     *
+     * @return a boolean.
+     */
+    public boolean getState(){
+        return state;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt.events.SelectionEvent)
+     */
+    /** {@inheritDoc} */
+    @Override
+    public void widgetSelected(SelectionEvent e) {
+        setState(toggleableTextField.getEditButton().getSelection());
+        for(SelectionListener listener : selectionListener){
+            listener.widgetSelected(e);
+        }
+        firePropertyChangeEvent(new CdmPropertyChangeEvent(this, e));
+    }
+
+    /**
+     * <p>addSelectionListener</p>
+     *
+     * @param listener a {@link org.eclipse.swt.events.SelectionListener} object.
+     */
+    public void addSelectionListener(SelectionListener listener){
+        selectionListener.add(listener);
+    }
+
+    /**
+     * <p>removeSelectionListener</p>
+     *
+     * @param listener a {@link org.eclipse.swt.events.SelectionListener} object.
+     */
+    public void removeSelectionListener(SelectionListener listener){
+        selectionListener.remove(listener);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void widgetDefaultSelected(SelectionEvent e) {}
+
+    /** {@inheritDoc} */
+    @Override
+    public void modifyText(ModifyEvent e) {
+        firePropertyChangeEvent(new CdmPropertyChangeEvent(this, e));
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void setIrrelevant(boolean irrelevant) {
+        String colorId = irrelevant ? Resources.COLOR_COMPOSITE_IRRELEVANT : Resources.COLOR_COMPOSITE_BACKGROUND;
+
+        Color color = getColor(colorId);
+        toggleableTextField.getText().setBackground(color);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void setBackground(Color color) {
+//        label.setBackground(color);
+        toggleableTextField.setBackground(color);
+    }
+
+    @Override
+    public void setSelected(boolean selected) {
+        setBackground(selected ? SELECTED : getPersistentBackground());
+    }
+}
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/occurrence/GatheringEventDetailElementComposite.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/occurrence/GatheringEventDetailElementComposite.java
deleted file mode 100644 (file)
index ba38be2..0000000
+++ /dev/null
@@ -1,119 +0,0 @@
-// $Id$
-/**
- * Copyright (C) 2013 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.ui.section.occurrence;
-
-import org.eclipse.swt.widgets.Composite;
-
-import eu.etaxonomy.cdm.api.facade.DerivedUnitFacade;
-import eu.etaxonomy.taxeditor.model.AbstractUtility;
-import eu.etaxonomy.taxeditor.preference.Resources;
-import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
-import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
-import eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailElementComposite;
-import eu.etaxonomy.taxeditor.ui.section.campanula.GatheringEventDetailsElement;
-import eu.etaxonomy.taxeditor.ui.section.campanula.NumberFieldController;
-import eu.etaxonomy.taxeditor.ui.section.campanula.TextFieldController;
-
-/**
- * @author pplitzner
- * @date 25.07.2013
- *
- */
-public class GatheringEventDetailElementComposite extends AbstractCdmDetailElementComposite<DerivedUnitFacade> {
-
-
-
-    private final NumberFieldController absoluteElevationError;
-    private final  NumberFieldController number_absoluteElevationMinimum;
-    private final  NumberFieldController number_absoluteElevationMaximum;
-    private final TextFieldController collectingMethod;
-    private final NumberFieldController number_distanceToGround;
-    private final NumberFieldController number_distanceToWaterSurface;
-    private final TextFieldController gatheringEventDescription;
-    private CollectingAreasDetailSection section_collectingAreas;
-
-    public GatheringEventDetailElementComposite(Composite parent, CdmFormFactory formFactory, ICdmFormElement parentFormElement, int style) {
-        this(parent, null, formFactory, parentFormElement, style);
-    }
-    /**
-     * <p>
-     * Constructor for GatheringEventDetailElement.
-     * </p>
-     *
-     * @param formFactory
-     *            a {@link eu.etaxonomy.taxeditor.ui.element.CdmFormFactory}
-     *            object.
-     * @param formElement
-     *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
-     *            object.
-     */
-    public GatheringEventDetailElementComposite(Composite parent, GatheringEventDetailsElement controlledComposite, CdmFormFactory formFactory, ICdmFormElement parentFormElement, int style) {
-        super(parent, formFactory, parentFormElement, style);
-
-        absoluteElevationError = new NumberFieldController(getLayoutComposite(), controlledComposite.getTextElevationError(), formFactory, this, (Integer)null, 0);
-        number_absoluteElevationMinimum = new NumberFieldController(getLayoutComposite(), controlledComposite.getText_ElevationMinimum(), formFactory, this, (Integer)null, 0);
-        number_absoluteElevationMaximum = new NumberFieldController(getLayoutComposite(), controlledComposite.getText_ElevationMaximum(), formFactory, this, (Integer)null, 0);
-        collectingMethod = new TextFieldController(getLayoutComposite(), controlledComposite.getText_CollectingMethod(), formFactory, this, null, null, 0);
-        number_distanceToGround = new NumberFieldController(getLayoutComposite(), controlledComposite.getText_DistanceToGround(), formFactory, this, (Integer)null, 0);
-        number_distanceToWaterSurface = new NumberFieldController(getLayoutComposite(), controlledComposite.getText_DistanceToWaterSurface(), formFactory, this, (Integer)null, 0);
-        gatheringEventDescription = new TextFieldController(getLayoutComposite(), controlledComposite.getText_GatheringEventDescription(), formFactory, this, null, null, 0);
-    }
-
-    /** {@inheritDoc} */
-    @Override
-    protected void createControls(ICdmFormElement formElement, DerivedUnitFacade entity, int style) {
-
-        absoluteElevationError.setText(String.valueOf(entity.getAbsoluteElevation()));
-        number_absoluteElevationMinimum.setText(String.valueOf(entity.getAbsoluteElevationMinimum()));
-        number_absoluteElevationMaximum.setText(String.valueOf(entity.getAbsoluteElevationMaximum()));
-
-        collectingMethod.setText(entity.getCollectingMethod());
-
-        number_distanceToGround.setText(String.valueOf(entity.getDistanceToGround()));
-        number_distanceToWaterSurface.setText(String.valueOf(entity.getDistanceToWaterSurface()));
-        gatheringEventDescription.setText(entity.getGatheringEventDescription());
-
-//        section_collectingAreas = formFactory.createCollectingAreasDetailSection(getConversationHolder(), formElement, ExpandableComposite.TWISTIE);
-//        section_collectingAreas.setLayoutData(LayoutConstants.FILL_HORIZONTALLY(2, 1));
-//        section_collectingAreas.setEntity(entity);
-    }
-
-    /** {@inheritDoc} */
-    @Override
-    public void handleEvent(Object eventSource) {
-        if (eventSource == absoluteElevationError) {
-            getEntity().setAbsoluteElevationError(absoluteElevationError.getInteger());
-        } else if (eventSource == number_absoluteElevationMinimum) {
-            try {
-                getEntity().setAbsoluteElevationRange(number_absoluteElevationMinimum.getInteger(), number_absoluteElevationMaximum.getInteger());
-                number_absoluteElevationMinimum.setBackground(getColor(Resources.COLOR_COMPOSITE_BACKGROUND));
-            } catch (IllegalArgumentException e) {
-                number_absoluteElevationMinimum.setBackground(getColor(Resources.COLOR_PARSE_ERROR));
-                AbstractUtility.warn(getClass(), e.getLocalizedMessage());
-            }
-        } else if (eventSource == number_absoluteElevationMaximum) {
-            try {
-                getEntity().setAbsoluteElevationRange(number_absoluteElevationMinimum.getInteger(), number_absoluteElevationMaximum.getInteger());
-                number_absoluteElevationMaximum.setBackground(getColor(Resources.COLOR_COMPOSITE_BACKGROUND));
-            } catch (IllegalArgumentException e) {
-                number_absoluteElevationMaximum.setBackground(getColor(Resources.COLOR_PARSE_ERROR));
-                AbstractUtility.warn(getClass(), e.getLocalizedMessage());
-            }
-        } else if (eventSource == collectingMethod) {
-            getEntity().setCollectingMethod(collectingMethod.getText());
-        } else if (eventSource == number_distanceToGround) {
-            getEntity().setDistanceToGround(number_distanceToGround.getInteger());
-        } else if (eventSource == number_distanceToWaterSurface) {
-            getEntity().setDistanceToWaterSurface(number_distanceToWaterSurface.getInteger());
-        } else if (eventSource == gatheringEventDescription) {
-            getEntity().setGatheringEventDescription(gatheringEventDescription.getText());
-        }
-    }
-}
index 097a2ac7199c1530a52e571b6b55f35739413558..ca93eadc00d63705a0e83858223bacd1c5da482d 100644 (file)
@@ -58,6 +58,6 @@ public class GatheringEventDetailSection extends AbstractCdmDetailSection<Derive
         */
        @Override
        protected ICdmDetailElement<DerivedUnitFacade> createCdmDetailElement(AbstractCdmDetailSection<DerivedUnitFacade> parentElement, int style) {
         */
        @Override
        protected ICdmDetailElement<DerivedUnitFacade> createCdmDetailElement(AbstractCdmDetailSection<DerivedUnitFacade> parentElement, int style) {
-           return formFactory.createGatheringEventDetailElementComposite(this);
+           return formFactory.createGatheringEventDetailsElementController(this);
        }
 }
        }
 }
index d2b3e7276464dd369cac52513469344626542902..23f04d915d7c884f503217997e74fe07bfad9bc6 100644 (file)
@@ -16,8 +16,8 @@ import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
 import eu.etaxonomy.cdm.api.facade.DerivedUnitFacade;
 import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
 import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
 import eu.etaxonomy.cdm.api.facade.DerivedUnitFacade;
 import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
 import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
-import eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailElement;
 import eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailSection;
 import eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailSection;
+import eu.etaxonomy.taxeditor.ui.section.ICdmDetailElement;
 
 /**
  * @author n.hoffmann
 
 /**
  * @author n.hoffmann
@@ -52,8 +52,8 @@ public class GeneralDetailSection extends AbstractCdmDetailSection<DerivedUnitFa
         * @see eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailSection#createCdmDetailElement(eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailSection, int)
         */
        @Override
         * @see eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailSection#createCdmDetailElement(eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailSection, int)
         */
        @Override
-       protected AbstractCdmDetailElement<DerivedUnitFacade> createCdmDetailElement(AbstractCdmDetailSection<DerivedUnitFacade> parentElement, int style) {
-           return formFactory.createGeneralDetailElement(parentElement);
+       protected ICdmDetailElement<DerivedUnitFacade> createCdmDetailElement(AbstractCdmDetailSection<DerivedUnitFacade> parentElement, int style) {
+           return formFactory.createFieldObservationGeneralElement(parentElement);
        }
 
 }
        }
 
 }