2005-07-06 Iain McCoy <iain@mccoy.id.au>
authorIain McCoy <iainmc@mono-cvs.ximian.com>
Wed, 6 Jul 2005 04:56:54 +0000 (04:56 -0000)
committerIain McCoy <iainmc@mono-cvs.ximian.com>
Wed, 6 Jul 2005 04:56:54 +0000 (04:56 -0000)
        * System.Windows/DependencyObject.cs,
          System.Windows/DependencyProperty.cs,
          System.Windows/PropertyMetadata.cs,
          System.Windows/Callbacks.cs: Added constructors to PropertyMetadata,
        added support for default values of properties
        * demo/TestVocab/ConsoleApp.cs: remove default value hack, since we
        have proper default value support now

svn path=/trunk/mcs/; revision=46985

mcs/class/WindowsBase/ChangeLog
mcs/class/WindowsBase/System.Windows/Callbacks.cs
mcs/class/WindowsBase/System.Windows/DependencyObject.cs
mcs/class/WindowsBase/System.Windows/DependencyProperty.cs
mcs/class/WindowsBase/System.Windows/PropertyMetadata.cs
mcs/tools/xamlc/ChangeLog
mcs/tools/xamlc/demo/TestVocab/ConsoleApp.cs

index 6c7f6e994db3686c5a1fdd46013120d3d5430853..14baa7d2e81ff6e464ad21baa352efab318adc7d 100644 (file)
@@ -1,3 +1,11 @@
+2005-07-06  Iain McCoy  <iain@mccoy.id.au>
+
+       * System.Windows/DependencyObject.cs,
+         System.Windows/DependencyProperty.cs,
+         System.Windows/PropertyMetadata.cs,
+         System.Windows/Callbacks.cs: Added constructors to PropertyMetadata,
+         added support for default values of properties
+
 2005-07-02  Iain McCoy  <iain@mccoy.id.au>
 
        * whole folder: initial implementation of the DependencyProperty
index 60093da8f57a02bc01848d00344ae735b08ef2f9..81f10917d04d5bc8cf6650a45d9e31f989e60b3c 100644 (file)
@@ -31,6 +31,7 @@ namespace System.Windows {
        public delegate bool ValidateValueCallback(object value);
        public delegate void PropertyInvalidatedCallback(DependencyObject d);
        public delegate Object GetValueOverride(DependencyObject d);
+       public delegate Object SetValueOverride(DependencyObject d);
        public delegate Object ReadLocalValueOverride(DependencyObject d);
        public delegate void WriteLocalValueOverride(DependencyObject d, Object value);
 }
index a8ded9fea9895e9d1e9d18b9b12da4cb36f59994..798894017a92ff574d64c3887e5ff9a4044d2bb3 100644 (file)
@@ -58,7 +58,10 @@ namespace System.Windows {
                
                public object GetValue(DependencyProperty dp)
                {
-                       return properties[dp];
+                       object val = properties[dp];
+                       if (val == null)
+                               val = dp.DefaultMetadata.DefaultValue;
+                       return val;
                }
                
                [MonoTODO()]            
index 494d64531747b2da0ab1cd6542d2306e556d7de0..06ae7e8ca602f80f032d080706e2e86eb0c86d2d 100644 (file)
@@ -40,7 +40,7 @@ namespace System.Windows {
                private DependencyProperty (bool isAttached, string name, Type propertyType, Type ownerType, PropertyMetadata defaultMetadata, ValidateValueCallback validateValueCallback)
                {
                        this.isAttached = isAttached;
-                       this.defaultMetadata = defaultMetadata;
+                       this.defaultMetadata = (defaultMetadata == null ? new PropertyMetadata() : defaultMetadata);
                        this.name = name;
                        this.ownerType = ownerType;
                        this.propertyType = propertyType;
@@ -145,7 +145,7 @@ namespace System.Windows {
                
                public static DependencyProperty RegisterAttached(string name, Type propertyType, Type ownerType, PropertyMetadata defaultMetadata, ValidateValueCallback validateValueCallback)
                {
-                       DependencyProperty dp = new DependencyProperty(true, name, propertyType, null, null, null);
+                       DependencyProperty dp = new DependencyProperty(true, name, propertyType, ownerType, defaultMetadata, validateValueCallback);
                        DependencyObject.register(ownerType, dp);
                        return dp;
                }
index bb6786066eea7e849ad41c79f4890d87847b3c23..26e01267e8e072db7942ad7035da9a5c255c918d 100644 (file)
@@ -30,6 +30,7 @@ namespace System.Windows {
        public class PropertyMetadata {
                private object defaultValue;
                private GetValueOverride getValueOverride;
+               private SetValueOverride setValueOverride;
                private bool isSealed;
                private PropertyInvalidatedCallback propertyInvalidatedCallback;
                private ReadLocalValueOverride readLocalValueOverride;
@@ -63,6 +64,57 @@ namespace System.Windows {
                        set { writeLocalValueOverride = value; }
                }
 
+               public PropertyMetadata()
+               {
+               }
+               public PropertyMetadata(GetValueOverride getValueOverride)
+               {
+                       this.getValueOverride = getValueOverride;
+               }
+               public PropertyMetadata(GetValueOverride getValueOverride, SetValueOverride setValueOverride)
+               {
+                       this.getValueOverride = getValueOverride;
+                       this.setValueOverride = setValueOverride;
+               }
+               public PropertyMetadata(object defaultValue)
+               {
+                       this.defaultValue = defaultValue;
+               }
+               public PropertyMetadata(object defaultValue, PropertyInvalidatedCallback propertyInvalidatedCallback)
+               {
+                       this.defaultValue = defaultValue;
+                       this.propertyInvalidatedCallback = propertyInvalidatedCallback;
+               }
+               
+               public PropertyMetadata(object defaultValue, PropertyInvalidatedCallback propertyInvalidatedCallback, GetValueOverride getValueOverride)
+               {
+                       this.defaultValue = defaultValue;
+                       this.propertyInvalidatedCallback = propertyInvalidatedCallback;
+                       this.getValueOverride = getValueOverride;
+               }
+               public PropertyMetadata(object defaultValue, PropertyInvalidatedCallback propertyInvalidatedCallback, GetValueOverride getValueOverride, SetValueOverride setValueOverride)
+               {
+                       this.defaultValue = defaultValue;
+                       this.propertyInvalidatedCallback = propertyInvalidatedCallback;
+                       this.getValueOverride = getValueOverride;
+                       this.setValueOverride = setValueOverride;
+               }
+               public PropertyMetadata(PropertyInvalidatedCallback propertyInvalidatedCallback)
+               {
+                       this.propertyInvalidatedCallback = propertyInvalidatedCallback;
+               }
+               public PropertyMetadata(PropertyInvalidatedCallback propertyInvalidatedCallback, GetValueOverride getValueOverride)
+               {
+                       this.propertyInvalidatedCallback = propertyInvalidatedCallback;
+                       this.getValueOverride = getValueOverride;
+               }
+               public PropertyMetadata(PropertyInvalidatedCallback propertyInvalidatedCallback, GetValueOverride getValueOverride, SetValueOverride setValueOverride)
+               {
+                       this.propertyInvalidatedCallback = propertyInvalidatedCallback;
+                       this.getValueOverride = getValueOverride;
+                       this.setValueOverride = setValueOverride;
+               }
+
                [MonoTODO()]            
                protected void ClearCachedDefaultValue (DependencyObject owner)
                {
index e24e9788985ec69a5e9bc70d25786207f49bcac3..dfe75513764a269bda74ef075946a77cbed132a5 100644 (file)
@@ -1,3 +1,8 @@
+2005-07-06  Iain McCoy  <iain@mccoy.id.au>
+
+       * demo/TestVocab/ConsoleApp.cs: remove default value hack, since we
+       have proper default value support now
+
 2005-07-05  Iain McCoy  <iain@mccoy.id.au>
 
        * README: updated to reflect current output of demo
index 1a022df95641c322eb8fd012aca88220a0ee1863..168b7d85c3e69a6bd0b44a1a96cc0cbdb85f6091 100644 (file)
@@ -37,15 +37,14 @@ namespace Xaml.TestVocab.Console {
                }
 
 
-               public static readonly DependencyProperty RepetitionsProperty = DependencyProperty.RegisterAttached("Repetitions", typeof(int), typeof(ConsoleApp));
+               public static readonly DependencyProperty RepetitionsProperty = DependencyProperty.RegisterAttached("Repetitions", typeof(int), typeof(ConsoleApp), new PropertyMetadata(1));
                public static void SetRepetitions(DependencyObject obj, int number)
                {
                        obj.SetValue(RepetitionsProperty, number);
                }
-               public static int GetRepetitions(DependencyObject d)
+               public static int GetRepetitions(DependencyObject obj)
                {
-                       object v = d.GetValue(RepetitionsProperty);
-                       return (v == null ? 1 : (int)v);
+                       return (int)obj.GetValue(RepetitionsProperty);
                }
        }
 }