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;
*/
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>
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);
}
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);
}
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));
}
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;
* @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.
*/
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);
}
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));
}
}
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)
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) {}
}
*/
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>
*/
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} */
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));
+
}
/**
public void setTimePeriod(TimePeriod timePeriod) {
this.timePeriod = timePeriod;
if(timePeriod != null){
- text_freeText.setText(timePeriod.toString());
section_dateDetails.setEntity(timePeriod);
}
}
/** {@inheritDoc} */
@Override
public void setBackground(Color color) {
- emptyLabel.setBackground(color);
- text_freeText.setBackground(color);
+ label.setBackground(color);
section_dateDetails.setBackground(color);
}
}