Changed the behavior of !TimePeriodElement and according widgets to better comply...
authorn.hoffmann <n.hoffmann@localhost>
Thu, 24 Mar 2011 16:18:20 +0000 (16:18 +0000)
committern.hoffmann <n.hoffmann@localhost>
Thu, 24 Mar 2011 16:18:20 +0000 (16:18 +0000)
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/forms/DateDetailSection.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/forms/PartialElement.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/forms/TimePeriodElement.java

index bd48c8280fc0784edc086acaf7e5756630812583..a21df261c8a9296937bd977f697bc98776f55de8 100644 (file)
@@ -11,6 +11,7 @@
 package eu.etaxonomy.taxeditor.ui.forms;
 
 import org.eclipse.jface.util.PropertyChangeEvent;
+import org.eclipse.swt.widgets.Text;
 import org.joda.time.Partial;
 
 import eu.etaxonomy.cdm.model.common.TimePeriod;
@@ -24,8 +25,11 @@ import eu.etaxonomy.cdm.model.common.TimePeriod;
  */
 public class DateDetailSection extends AbstractFormSection<TimePeriod> {
 
+       private TextWithLabelElement text_freeText;
        private PartialElement partialElement_start;
        private PartialElement partialElement_end;
+       private TextWithLabelElement text_parseText;
+       private int cursorPosition;
        
        /**
         * <p>Constructor for DateDetailSection.</p>
@@ -37,11 +41,16 @@ public class DateDetailSection extends AbstractFormSection<TimePeriod> {
        protected DateDetailSection(CdmFormFactory formFactory, ICdmFormElement parentElement,
                        int style) {
                super(formFactory, null, parentElement, style);
-               this.setText("Date Details");
                
                partialElement_start = formFactory.createPartialElement(this, "Start: ", null, style);
                partialElement_end = formFactory.createPartialElement(this, "End: ", null, style);
                
+               text_parseText = formFactory.createTextWithLabelElement(this, "Parse", null, style);
+               text_parseText.getMainControl().setLayoutData(CdmFormFactory.FILL_HORIZONTALLY(6, 1));
+               
+               text_freeText = formFactory.createTextWithLabelElement(this, "Freetext", null, style);
+               text_freeText.getMainControl().setLayoutData(CdmFormFactory.FILL_HORIZONTALLY(6, 1));
+               
                formFactory.addPropertyChangeListener(this);
        }
 
@@ -56,6 +65,12 @@ public class DateDetailSection extends AbstractFormSection<TimePeriod> {
                Partial end = timePeriod.getEnd();
                partialElement_end.setPartial(end);
 
+               text_parseText.setText(timePeriod.toString());
+               ((Text) text_parseText.getMainControl()).setSelection(cursorPosition);
+               text_freeText.setText(timePeriod.getFreeText());
+               
+               this.setText(timePeriod.toString());
+               
                super.setEntity(timePeriod);
        }
        
@@ -89,10 +104,18 @@ public class DateDetailSection extends AbstractFormSection<TimePeriod> {
                if(eventSource == partialElement_start){
                        Partial start = partialElement_start.getPartial();
                        getEntity().setStart(start);
-               }else if(eventSource == partialElement_end){
+               }
+               else if(eventSource == partialElement_end){
                        Partial end = partialElement_end.getPartial();
                        getEntity().setEnd(end);
                }
+               else if(eventSource == text_parseText){
+                       cursorPosition = ((Text) text_parseText.getMainControl()).getCaretPosition();
+                       setEntity(TimePeriod.parseString(text_parseText.getText()));
+               }
+               else if(eventSource == text_freeText){
+                       getEntity().setFreeText(text_freeText.getText());
+               }
                firePropertyChangeEvent(new CdmPropertyChangeEvent(this, null));
        }
        
index c72ac925dc284ea472ec630be2b6f053c8b8b4e7..24903501d1acbf8c0a2c0575a3acef6a022a4bf8 100644 (file)
 
 package eu.etaxonomy.taxeditor.ui.forms;
 
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.jface.util.PropertyChangeEvent;
 import org.eclipse.swt.graphics.Color;
-import org.eclipse.swt.widgets.DateTime;
 import org.eclipse.swt.widgets.Label;
-import org.joda.time.DateTimeFieldType;
 import org.joda.time.Partial;
 
 import eu.etaxonomy.cdm.model.common.TimePeriod;
@@ -28,17 +24,19 @@ import eu.etaxonomy.cdm.model.common.TimePeriod;
  * @created Mar 31, 2010
  * @version 1.0
  */
-public class PartialElement extends AbstractCdmFormElement implements SelectionListener{
+public class PartialElement extends AbstractCdmFormElement {
 
        private Label label;
+       private NumberWithLabelElement number_day;
+       private NumberWithLabelElement number_month;
+       private NumberWithLabelElement number_year;
        private Partial partial;
-       private DateTime composite_date;
        
        /**
         * <p>Constructor for PartialElement.</p>
         *
-        * @param formFactory a {@link eu.etaxonomy.taxeditor.ui.forms.CdmFormFactory} object.
-        * @param formElement a {@link eu.etaxonomy.taxeditor.ui.forms.ICdmFormElement} object.
+        * @param formFactory a {@link eu.etaxonomy.taxeditor.forms.CdmFormFactory} object.
+        * @param formElement a {@link eu.etaxonomy.taxeditor.forms.ICdmFormElement} object.
         * @param labelString a {@link java.lang.String} object.
         * @param style a int.
         */
@@ -51,10 +49,15 @@ public class PartialElement extends AbstractCdmFormElement implements SelectionL
                label = formFactory.createLabel(getLayoutComposite(), labelString);
                addControl(label);
                
+               number_year = formFactory.createIntegerTextWithLabelElement(this, "Year", null, style);
+               number_year.setLimits(4, -9999, 9999);
+               
+               number_month = formFactory.createIntegerTextWithLabelElement(this, "Month", null, style);               
+               number_month.setLimits(2, 1, 12);
+               
+               number_day = formFactory.createIntegerTextWithLabelElement(this, "Day", null, style);
+               number_day.setLimits(2, 1, 31);
                
-               composite_date = new DateTime(getLayoutComposite(), SWT.BORDER | SWT.DATE | SWT.DROP_DOWN);
-               addControl(composite_date);
-               composite_date.addSelectionListener(this);
                
                formFactory.addPropertyChangeListener(this);            
        }
@@ -68,27 +71,9 @@ public class PartialElement extends AbstractCdmFormElement implements SelectionL
                this.partial = partial;
                
                if(partial != null){
-                       int year = 0;
-                       int month = 1;
-                       int day = 1;
-                       try{
-                               year = partial.get(DateTimeFieldType.year());
-                       }catch(IllegalArgumentException e){
-                               
-                       }
-                       try{
-                               month = partial.get(DateTimeFieldType.monthOfYear());
-                       }catch(IllegalArgumentException e){
-                               
-                       }
-                       try{
-                               day = partial.get(DateTimeFieldType.dayOfMonth());
-                       }catch(IllegalArgumentException e){
-                               
-                       }
-                       
-                       
-                       composite_date.setDate(year, month, day);
+                       number_day.setInteger(TimePeriod.getPartialValue(partial, TimePeriod.DAY_TYPE));
+                       number_month.setInteger(TimePeriod.getPartialValue(partial, TimePeriod.MONTH_TYPE));
+                       number_year.setInteger(TimePeriod.getPartialValue(partial, TimePeriod.YEAR_TYPE));
                }
        }
 
@@ -100,6 +85,50 @@ public class PartialElement extends AbstractCdmFormElement implements SelectionL
        public Partial getPartial(){
                return partial;
        }
+
+       /* (non-Javadoc)
+        * @see eu.etaxonomy.taxeditor.forms.AbstractCdmFormElement#propertyChange(org.eclipse.jface.util.PropertyChangeEvent)
+        */
+       /** {@inheritDoc} */
+       @Override
+       public void propertyChange(PropertyChangeEvent event) {
+               if(event == null){
+                       return;
+               }
+               
+               Object eventSource = event.getSource();
+               
+               if(getElements().contains(eventSource)){
+                       if(event instanceof CdmPropertyChangeEvent){
+                               if(((CdmPropertyChangeEvent) event).hasException()){
+                                       handleException((CdmPropertyChangeEvent) event);
+                                       return;
+                               }
+                       }
+                       handleEvent(eventSource);
+               }               
+       }
+       
+       /**
+        * @param event
+        */
+       private void handleException(CdmPropertyChangeEvent event) {
+               firePropertyChangeEvent(new CdmPropertyChangeEvent(this, event.getException()));
+       }
+
+       private void handleEvent(Object eventSource){
+               if(eventSource == number_month){
+                       partial = TimePeriod.setPartialField(partial, number_month.getInteger(), TimePeriod.MONTH_TYPE);
+//                     firePropertyChangeEvent(new CdmPropertyChangeEvent(this, null));
+               }else if(eventSource == number_day){
+                       partial = TimePeriod.setPartialField(partial, number_day.getInteger(), TimePeriod.DAY_TYPE);
+//                     firePropertyChangeEvent(new CdmPropertyChangeEvent(this, null));
+               }else if(eventSource == number_year){
+                       partial = TimePeriod.setPartialField(partial, number_year.getInteger(), TimePeriod.YEAR_TYPE);
+//                     firePropertyChangeEvent(new CdmPropertyChangeEvent(this, null));
+               }
+               firePropertyChangeEvent(new CdmPropertyChangeEvent(this, null));
+       }
        
        /* (non-Javadoc)
         * @see eu.etaxonomy.taxeditor.forms.ISelectable#setSelected(boolean)
@@ -114,23 +143,4 @@ public class PartialElement extends AbstractCdmFormElement implements SelectionL
        public void setBackground(Color color) {
                label.setBackground(color);
        }
-
-       /* (non-Javadoc)
-        * @see org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt.events.SelectionEvent)
-        */
-       @Override
-       public void widgetSelected(SelectionEvent e) {
-               partial = new Partial()
-                                                       .with(DateTimeFieldType.year(), composite_date.getYear())
-                                                       .with(DateTimeFieldType.monthOfYear(), composite_date.getMonth())
-                                                       .with(DateTimeFieldType.dayOfMonth(), composite_date.getDay());
-               ;
-               firePropertyChangeEvent(new CdmPropertyChangeEvent(this, null));
-       }
-
-       /* (non-Javadoc)
-        * @see org.eclipse.swt.events.SelectionListener#widgetDefaultSelected(org.eclipse.swt.events.SelectionEvent)
-        */
-       @Override
-       public void widgetDefaultSelected(SelectionEvent e) {}
 }
index 446b13cf5fe3ef151914bc74c6abc63416134215..2ad606b5858d2d66ebce7f0a4684a53b6b134eec 100644 (file)
@@ -26,10 +26,9 @@ import eu.etaxonomy.cdm.model.common.TimePeriod;
  */
 public class TimePeriodElement extends AbstractCdmFormElement{
 
-       private TextWithLabelElement text_freeText;
        private TimePeriod timePeriod;
+       private Label label;
        private DateDetailSection section_dateDetails;
-       private Label emptyLabel;
        
        /**
         * <p>Constructor for TimePeriodElement.</p>
@@ -42,18 +41,15 @@ public class TimePeriodElement extends AbstractCdmFormElement{
         */
        public TimePeriodElement(CdmFormFactory formFactory, ICdmFormElement parentElement, String labelString, TimePeriod timePeriod, final int style) {
                super(formFactory, parentElement);
-               
-               formFactory.addPropertyChangeListener(this);
-               
-               text_freeText = formFactory.createTextWithLabelElement(this, labelString, null, style);
-               emptyLabel = formFactory.createLabel(getLayoutComposite(), "");
-               addControl(emptyLabel);
+
+               label = formFactory.createLabel(getLayoutComposite(), labelString);
                
                section_dateDetails = formFactory.createDateDetailSection(this, Section.TWISTIE);
                addControl(section_dateDetails);
-               
+                               
                setTimePeriod(timePeriod);
                
+               formFactory.addPropertyChangeListener(this);
        }
 
        /** {@inheritDoc} */
@@ -85,18 +81,16 @@ public class TimePeriodElement extends AbstractCdmFormElement{
        
        private void handleEvent(Object eventSource){           
                
-               if(eventSource == text_freeText){
-                       String freeText = text_freeText.getText();
-                       timePeriod = TimePeriod.parseString(freeText);
-                       section_dateDetails.setEntity(timePeriod);
-                       
-               }else if(eventSource == section_dateDetails){
-                       timePeriod = section_dateDetails.getEntity();
-                       String timePeriodString = timePeriod.toString();
-                       text_freeText.setText(timePeriodString);
+//             if(eventSource == text_freeText){
+//                     String freeText = text_freeText.getText();
+//                     timePeriod = TimePeriod.parseString(freeText);
+//                     section_dateDetails.setEntity(timePeriod);
+//                     
+               if(eventSource == section_dateDetails){
+                       firePropertyChangeEvent(new CdmPropertyChangeEvent(this, null));
                }
                
-               firePropertyChangeEvent(new CdmPropertyChangeEvent(this, null));
+               
        }
 
        /**
@@ -107,7 +101,6 @@ public class TimePeriodElement extends AbstractCdmFormElement{
        public void setTimePeriod(TimePeriod timePeriod) {
                this.timePeriod = timePeriod;
                if(timePeriod != null){
-                       text_freeText.setText(timePeriod.toString());
                        section_dateDetails.setEntity(timePeriod);
                }
        }
@@ -124,8 +117,7 @@ public class TimePeriodElement extends AbstractCdmFormElement{
        /** {@inheritDoc} */
        @Override
        public void setBackground(Color color) {
-               emptyLabel.setBackground(color);
-               text_freeText.setBackground(color);
+               label.setBackground(color);
                section_dateDetails.setBackground(color);
        }
 }