DateChooserComboObservableValue & databinding [message #56508] |
Mon, 21 July 2008 16:59  |
Eclipse User |
|
|
|
This is a multi-part message in MIME format.
--------------070800050507070305050303
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit
Hi,
for my needs I wrote the "IObservableValue" for the DateChooserCombo widget.
It seems to work and I want to share it with the community.
Please send me your feedbacks
--------------070800050507070305050303
Content-Type: text/plain;
name="DateChooserComboObservableValue.java"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
filename="DateChooserComboObservableValue.java"
package com.adeo.rcp.technique.observables;
import java.util.Date;
import org.eclipse.core.databinding.observable.Diffs;
import org.eclipse.core.databinding.observable.value.AbstractObserv ableValue;
import org.eclipse.core.databinding.observable.value.IObservableVal ue;
import org.eclipse.jface.databinding.swt.SWTObservables;
import org.eclipse.nebula.widgets.datechooser.DateChooserCombo;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
/**
* @author Pascal Leclercq
*
*/
public class DateChooserComboObservableValue extends AbstractObservableValue implements IObservableValue {
/**
* The Control being observed here.
*/
protected final DateChooserCombo dateChooserCombo;
/**
* Flag to prevent infinite recursion in {@link #doSetValue(Object)}.
*/
protected boolean updating = false;
/**
* The "old" value before a selection event is fired.
*/
protected Date oldValue;
/**
* SWT event that on firing this observable will fire change events to its
* listeners.
*/
private final int updateEventType;
/**
* Valid types for the {@link #updateEventType}.
*/
private static final int[] validUpdateEventTypes = new int[] { SWT.Modify, SWT.FocusOut, SWT.None };
/**
* Observe the selection property of the provided DateChooserCombo control.
*
* @param dateChooserCombo
* the control to observe
*/
public DateChooserComboObservableValue(DateChooserCombo dateChooserCombo, int updateEventType) {
super(SWTObservables.getRealm(dateChooserCombo.getDisplay()) );
boolean eventValid = false;
for (int i = 0; !eventValid && i < validUpdateEventTypes.length; i++) {
eventValid = (updateEventType == validUpdateEventTypes[i]);
}
if (!eventValid) {
throw new IllegalArgumentException("UpdateEventType [" + updateEventType + "] is not supported."); //$NON-NLS-1$//$NON-NLS-2$
}
this.dateChooserCombo = dateChooserCombo;
oldValue = dateChooserCombo.getValue();
this.updateEventType = updateEventType;
if (updateEventType != SWT.None) {
dateChooserCombo.addListener(updateEventType, updateListener);
}
dateChooserCombo.addDisposeListener(disposeListener);
}
private DisposeListener disposeListener = new DisposeListener() {
public void widgetDisposed(DisposeEvent e) {
DateChooserComboObservableValue.this.dispose();
}
};
public void dispose() {
if (!dateChooserCombo.isDisposed()) {
if (updateEventType != SWT.None) {
dateChooserCombo.removeListener(updateEventType, updateListener);
}
}
super.dispose();
}
public Object getValueType() {
return Date.class;
}
protected Object doGetValue() {
return dateChooserCombo.getValue();
}
private Listener updateListener = new Listener() {
public void handleEvent(Event event) {
if (!updating) {
Date newValue = dateChooserCombo.getValue();
if (!newValue.equals(oldValue)) {
fireValueChange(Diffs.createValueDiff(oldValue, newValue));
oldValue = newValue;
}
}
}
};
protected void doSetValue(Object value) {
Date newValue;
try {
updating = true;
newValue = (Date) value;
dateChooserCombo.setValue(newValue);
if (!newValue.equals(oldValue)) {
fireValueChange(Diffs.createValueDiff(oldValue, newValue));
oldValue = newValue;
}
} finally {
updating = false;
}
}
}
--------------070800050507070305050303--
|
|
|
|
|
|
|
|
|
|
|
|
Re: DateChooserComboObservableValue & databinding [message #599495 is a reply to message #63030] |
Mon, 19 April 2010 04:25  |
Eclipse User |
|
|
|
I tried to implement the .getText() solution for validation. But the problem ist, the validate method is only called in after at least one digit for each field (day, month, year) is set. The nebula DateChooserCombo only allows to enter valid digits in the single fields. So the only sense would be the menitoned case, of half entered dates (e.g. '11.1.').
But as the validate method is not called in this case, there is nothing one can do about it.
Or do I miss something?
best regards,
Andreas
|
|
|
Powered by
FUDForum. Page generated in 0.08358 seconds