Bug 485878 - DateTime widget databinding
diff --git a/org.eclipse.xwt.tests/META-INF/MANIFEST.MF b/org.eclipse.xwt.tests/META-INF/MANIFEST.MF
index 74a1d80..9b36504 100644
--- a/org.eclipse.xwt.tests/META-INF/MANIFEST.MF
+++ b/org.eclipse.xwt.tests/META-INF/MANIFEST.MF
@@ -130,4 +130,6 @@
org.eclipse.xwt.tests.usercontrol,
org.eclipse.xwt.tests.usercontrol.event,
org.eclipse.xwt.tests.view,
- org.eclipse.xwt.tests.xaml
+ org.eclipse.xwt.tests.wizard,
+ org.eclipse.xwt.tests.xaml,
+ org.eclipse.xwt.testsDataBinding.DateTime
diff --git a/org.eclipse.xwt.tests/src/org/eclipse/xwt/testsDataBinding/DateTime/DataBindingDateTimeTest.java b/org.eclipse.xwt.tests/src/org/eclipse/xwt/testsDataBinding/DateTime/DataBindingDateTimeTest.java
new file mode 100644
index 0000000..2e5d0ee
--- /dev/null
+++ b/org.eclipse.xwt.tests/src/org/eclipse/xwt/testsDataBinding/DateTime/DataBindingDateTimeTest.java
@@ -0,0 +1,46 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.xwt.testsDataBinding.DateTime;
+
+import java.net.URL;
+
+import org.eclipse.swt.widgets.DateTime;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.xwt.IConstants;
+import org.eclipse.xwt.XWT;
+import org.eclipse.xwt.tests.XWTTestCase;
+
+public class DataBindingDateTimeTest extends XWTTestCase {
+
+ public void testDataBinding() throws Exception {
+
+ URL url = DataBindingDateTimeTest.class.getResource(TestClassView.class
+ .getSimpleName() + IConstants.XWT_EXTENSION_SUFFIX);
+ runTest(url, new Runnable() {
+ public void run() {
+
+ DateTime datetime = (DateTime) XWT.findElementByName(root,
+ "birthday");
+ DateTime copyDateTime = (DateTime) XWT.findElementByName(root,
+ "CopyDateTime");
+ checkBinding(datetime, copyDateTime);
+
+ }
+
+ private void checkBinding(DateTime datetime1, DateTime datetime2) {
+ assertEquals(datetime2.getYear(), datetime1.getYear());
+ assertEquals(datetime2.getMonth(), datetime1.getMonth());
+ assertEquals(datetime2.getDay(), datetime1.getDay());
+ }
+ });
+ }
+}
diff --git a/org.eclipse.xwt.tests/src/org/eclipse/xwt/testsDataBinding/DateTime/ModelObject.java b/org.eclipse.xwt.tests/src/org/eclipse/xwt/testsDataBinding/DateTime/ModelObject.java
new file mode 100644
index 0000000..88b118f
--- /dev/null
+++ b/org.eclipse.xwt.tests/src/org/eclipse/xwt/testsDataBinding/DateTime/ModelObject.java
@@ -0,0 +1,24 @@
+package org.eclipse.xwt.testsDataBinding.DateTime;
+
+import java.beans.PropertyChangeListener;
+import java.beans.PropertyChangeSupport;
+
+public class ModelObject {
+ private final PropertyChangeSupport changeSupport =
+ new PropertyChangeSupport(this);
+
+ public void addPropertyChangeListener(PropertyChangeListener
+ listener) {
+ changeSupport.addPropertyChangeListener(listener);
+ }
+
+ public void removePropertyChangeListener(PropertyChangeListener
+ listener) {
+ changeSupport.removePropertyChangeListener(listener);
+ }
+
+ protected void firePropertyChange(String propertyName, Object oldValue,
+ Object newValue) {
+ changeSupport.firePropertyChange(propertyName, oldValue, newValue);
+ }
+}
diff --git a/org.eclipse.xwt.tests/src/org/eclipse/xwt/testsDataBinding/DateTime/Person.java b/org.eclipse.xwt.tests/src/org/eclipse/xwt/testsDataBinding/DateTime/Person.java
new file mode 100644
index 0000000..62b28cb
--- /dev/null
+++ b/org.eclipse.xwt.tests/src/org/eclipse/xwt/testsDataBinding/DateTime/Person.java
@@ -0,0 +1,36 @@
+package org.eclipse.xwt.testsDataBinding.DateTime;
+
+import java.util.Date;
+
+public class Person extends ModelObject {
+ private String name;
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ firePropertyChange("name", this.name, this.name = name);
+ }
+
+ private Boolean married = false; ;
+
+ public Boolean getMarried() {
+ return married;
+ }
+
+ public void setMarried(Boolean married) {
+ firePropertyChange("married", this.married, this.married = married);
+ }
+
+ private Date birthday;
+
+ public Date getBirthday() {
+ return birthday;
+ }
+
+ public void setBirthday(Date birthday) {
+ firePropertyChange("birthday", this.birthday, this.birthday = birthday);
+ }
+ }
+
diff --git a/org.eclipse.xwt.tests/src/org/eclipse/xwt/testsDataBinding/DateTime/TestClassView.java b/org.eclipse.xwt.tests/src/org/eclipse/xwt/testsDataBinding/DateTime/TestClassView.java
new file mode 100644
index 0000000..6e215ba
--- /dev/null
+++ b/org.eclipse.xwt.tests/src/org/eclipse/xwt/testsDataBinding/DateTime/TestClassView.java
@@ -0,0 +1,43 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2015 Soyatec (http://www.soyatec.com) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Soyatec - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.xwt.testsDataBinding.DateTime;
+
+import java.net.URL;
+
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.xwt.XWT;
+
+
+/**
+ * @author El-Amine Ouraiba( amine.ouraiba@soyatec.com)
+ *
+ */
+public class TestClassView extends Composite {
+ static Person person = new Person();
+
+ public TestClassView(Composite parent, int style) {
+ super(parent, style);
+ }
+
+
+ public static void main(String[] args) {
+ URL url = TestClassView.class
+ .getResource("TestClassView.xwt");
+ try {
+
+ XWT.open(url, person);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/org.eclipse.xwt.tests/src/org/eclipse/xwt/testsDataBinding/DateTime/TestClassView.xwt b/org.eclipse.xwt.tests/src/org/eclipse/xwt/testsDataBinding/DateTime/TestClassView.xwt
new file mode 100644
index 0000000..da3f201
--- /dev/null
+++ b/org.eclipse.xwt.tests/src/org/eclipse/xwt/testsDataBinding/DateTime/TestClassView.xwt
@@ -0,0 +1,79 @@
+<Composite xmlns="http://www.eclipse.org/xwt/presentation"
+ xmlns:x="http://www.eclipse.org/xwt"
+ xmlns:y="clr-namespace:org.eclipse.xwt.testsDataBinding.DateTime"
+ x:Class="org.eclipse.xwt.testsDataBinding.DateTime.TestClassView"
+ x:name="TestClass"
+ size="400,300">
+ <Composite.layout>
+ <GridLayout numColumns="2" />
+ </Composite.layout>
+ <Label text="Name" x:name="name_label">
+ <Label.layoutData>
+ <GridData horizontalIndent="10" widthHint="100" />
+ </Label.layoutData>
+ </Label>
+ <Text x:style="BORDER" x:name="name">
+ <Text.text>
+ <Binding path="name"
+ updateSourceTrigger="PropertyChanged">
+ </Binding>
+ </Text.text>
+ <Text.layoutData>
+ <GridData grabExcessHorizontalSpace="true"
+ horizontalAlignment="GridData.FILL" />
+ </Text.layoutData>
+ </Text>
+ <Label text="Married" x:name="married_label">
+ <Label.layoutData>
+ <GridData horizontalIndent="10" widthHint="100" />
+ </Label.layoutData>
+ </Label>
+ <Button x:Style="CHECK" x:name="married">
+ <Button.selection>
+ <Binding path="married" updateSourceTrigger="PropertyChanged">
+ </Binding>
+ </Button.selection>
+ <Button.layoutData>
+ <GridData grabExcessHorizontalSpace="true"
+ horizontalAlignment="GridData.FILL" />
+ </Button.layoutData>
+ </Button>
+
+ <Label text="Birthday" x:name="birthday_label">
+ <Label.layoutData>
+ <GridData horizontalIndent="10" widthHint="100" />
+ </Label.layoutData>
+ </Label>
+
+ <DateTime x:name="birthday" x:style="BORDER">
+<DateTime.selection>
+ <Binding path="birthday" updateSourceTrigger="PropertyChanged">
+ </Binding>
+</DateTime.selection>
+
+ <DateTime.layoutData>
+ <GridData horizontalAlignment="FILL" grabExcessHorizontalSpace="true" />
+ </DateTime.layoutData>
+
+</DateTime>
+
+ <Label text="Copy of Birthday DateTime " x:name="CopyDateTime_label">
+ <Label.layoutData>
+ <GridData horizontalIndent="10" widthHint="100" />
+ </Label.layoutData>
+ </Label>
+
+ <DateTime x:name="CopyDateTime" x:style="BORDER">
+<DateTime.selection>
+ <Binding path="birthday" updateSourceTrigger="PropertyChanged">
+ </Binding>
+</DateTime.selection>
+
+ <DateTime.layoutData>
+ <GridData horizontalAlignment="FILL" grabExcessHorizontalSpace="true" />
+ </DateTime.layoutData>
+
+</DateTime>
+
+
+</Composite>
\ No newline at end of file
diff --git a/org.eclipse.xwt/src/org/eclipse/xwt/XWTLoader.java b/org.eclipse.xwt/src/org/eclipse/xwt/XWTLoader.java
index 0ad4606..a795a36 100644
--- a/org.eclipse.xwt/src/org/eclipse/xwt/XWTLoader.java
+++ b/org.eclipse.xwt/src/org/eclipse/xwt/XWTLoader.java
@@ -17,6 +17,7 @@
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
+import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
@@ -35,6 +36,7 @@
import org.eclipse.jface.databinding.swt.SWTObservables;
import org.eclipse.jface.databinding.viewers.ObservableListContentProvider;
import org.eclipse.jface.databinding.viewers.ObservableSetContentProvider;
+import org.eclipse.jface.internal.databinding.swt.DateTimeSelectionProperty;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.ControlEditor;
import org.eclipse.swt.custom.TableEditor;
@@ -1630,7 +1632,10 @@
registerMetaclass(org.eclipse.swt.widgets.Composite.class);
registerMetaclass(org.eclipse.swt.widgets.CoolBar.class);
registerMetaclass(org.eclipse.swt.widgets.CoolItem.class);
- registerMetaclass(org.eclipse.swt.widgets.DateTime.class);
+
+ IMetaclass dateTimeMetaclass = registerMetaclass(org.eclipse.swt.widgets.DateTime.class);
+ dateTimeMetaclass.addProperty(new DataProperty("selection", "selection", Date.class));
+
registerMetaclass(org.eclipse.swt.widgets.Decorations.class);
registerMetaclass(org.eclipse.swt.widgets.ExpandBar.class);
IMetaclass expandItemMetaclass = registerMetaclass(ExpandItem.class);
diff --git a/org.eclipse.xwt/src/org/eclipse/xwt/databinding/DataBinding.java b/org.eclipse.xwt/src/org/eclipse/xwt/databinding/DataBinding.java
index b14bd75..a087962 100644
--- a/org.eclipse.xwt/src/org/eclipse/xwt/databinding/DataBinding.java
+++ b/org.eclipse.xwt/src/org/eclipse/xwt/databinding/DataBinding.java
@@ -19,6 +19,7 @@
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.DateTime;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.swt.widgets.Text;
import org.eclipse.xwt.IDataProvider;
@@ -105,6 +106,12 @@
MenuItem menuItem = (MenuItem) target;
menuItem.setEnabled(false);
}
+ } else if (target instanceof DateTime
+ && getTargetProperty().equalsIgnoreCase("selection")) {
+ if (isSourcePropertyReadOnly()) {
+ DateTime dateTime = (DateTime) target;
+ dateTime.setEnabled(false);
+ }
}
bindingContext.bind(observableSource, observableWidget, this);
}
diff --git a/org.eclipse.xwt/src/org/eclipse/xwt/databinding/JFaceXWTDataBinding.java b/org.eclipse.xwt/src/org/eclipse/xwt/databinding/JFaceXWTDataBinding.java
index a70e09b..72a7e6c 100644
--- a/org.eclipse.xwt/src/org/eclipse/xwt/databinding/JFaceXWTDataBinding.java
+++ b/org.eclipse.xwt/src/org/eclipse/xwt/databinding/JFaceXWTDataBinding.java
@@ -24,11 +24,13 @@
import org.eclipse.jface.databinding.swt.SWTObservables;
import org.eclipse.jface.databinding.viewers.ViewerProperties;
import org.eclipse.jface.databinding.viewers.ViewersObservables;
+import org.eclipse.jface.internal.databinding.swt.DateTimeSelectionProperty;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.StyledText;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.DateTime;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.swt.widgets.Text;
import org.eclipse.xwt.IDataProvider;
@@ -391,6 +393,13 @@
if (SWT.getVersion() == 3449 && control instanceof Button) {
return null;
}
+ if (control instanceof DateTime) {
+ IObservableValue observableValue = SWTObservables.observeSelection(control);
+ if (observableValue != null) {
+ return observableValue;
+ }
+ }
+
try {
IObservableValue observableValue = SWTObservables
.observeText(control);
diff --git a/org.eclipse.xwt/src/org/eclipse/xwt/internal/core/MultiBinding.java b/org.eclipse.xwt/src/org/eclipse/xwt/internal/core/MultiBinding.java
index b7cc696..04db0e1 100644
--- a/org.eclipse.xwt/src/org/eclipse/xwt/internal/core/MultiBinding.java
+++ b/org.eclipse.xwt/src/org/eclipse/xwt/internal/core/MultiBinding.java
@@ -16,6 +16,7 @@
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.DateTime;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.swt.widgets.Text;
import org.eclipse.xwt.IDataBindingInfo;
@@ -145,6 +146,13 @@
menuItem.setEnabled(false);
}
}
+ else if (target instanceof DateTime
+ && getType().equalsIgnoreCase("selection")) {
+ if (isSourcePropertyReadOnly()) {
+ DateTime dateTime = (DateTime) target;
+ dateTime.setEnabled(false);
+ }
+ }
}
bindingGate.bind(observableValue, observableWidget, this);
}