Convert all url usages to use the Uri class instead of raw strings.
[pithos-ms-client] / trunk / Pithos.Client.WPF / SelectiveSynch / DirectoryRecord.cs
index d9dd48f..350d1ea 100644 (file)
@@ -71,7 +71,13 @@ namespace Pithos.Client.WPF.SelectiveSynch
         public Uri Uri { get; set; }\r
         //public DirectoryInfo LocalInfo { get; set; }\r
 \r
-        DirectoryRecord _parent;\r
+\r
+        private DirectoryRecord _parent;\r
+        public DirectoryRecord Parent\r
+        {\r
+            get { return _parent; }\r
+            private set { _parent = value; }\r
+        }\r
 \r
         public bool Added { get; set; }\r
         public bool Removed { get; set; }\r
@@ -88,7 +94,16 @@ namespace Pithos.Client.WPF.SelectiveSynch
         /// </summary>\r
         public bool? IsChecked\r
         {\r
-            get { return _isChecked; }\r
+            get\r
+            {\r
+                if (_directories.Count==0)\r
+                    return _isChecked;\r
+                \r
+                if (_isChecked == true)                \r
+                    return _isChecked;\r
+                //Check children to decide whether to display a clear (false) or gray (null)\r
+                return _directories.Any(d => d.IsChecked == true) ? null : (bool?)false;\r
+            }\r
             set { this.SetIsChecked(value, true, true); }\r
         }\r
 \r
@@ -97,13 +112,13 @@ namespace Pithos.Client.WPF.SelectiveSynch
             if (value == _isChecked)\r
                 return;\r
 \r
-            _isChecked = value;\r
+            _isChecked = value??false;\r
 \r
             //If the value is null both Added and Removed should be False\r
-            Added = _isChecked??false;\r
-            Removed = !(_isChecked??true);\r
+            Added = _isChecked.Value;\r
+            Removed = !(_isChecked.Value);\r
 \r
-            if (updateChildren && _isChecked.HasValue)\r
+            if (updateChildren )\r
                 this.Directories.Apply(c => c.SetIsChecked(_isChecked, true, false));\r
 \r
             if (updateParent && _parent != null)\r
@@ -114,6 +129,8 @@ namespace Pithos.Client.WPF.SelectiveSynch
 \r
         void VerifyCheckState()\r
         {\r
+            RaisePropertyChangedEventImmediately("IsChecked");\r
+            return;\r
             bool? state = null;\r
             for (var i = 0; i < this.Directories.Count(); ++i)\r
             {\r
@@ -140,7 +157,14 @@ namespace Pithos.Client.WPF.SelectiveSynch
         public List<DirectoryRecord> Directories\r
         {\r
             get { return _directories; }\r
-            set { _directories= value; }\r
+            set\r
+            {\r
+                _directories= value;\r
+                foreach (var dir in value)\r
+                {\r
+                    dir.Parent = this;\r
+                }\r
+            }\r
         }\r
 \r
         public DirectoryRecord()\r
@@ -165,7 +189,7 @@ namespace Pithos.Client.WPF.SelectiveSynch
             get\r
             {\r
                 if (ObjectInfo != null)\r
-                    return ObjectInfo.Name.Split('/').Last();\r
+                    return Uri.UnescapeDataString(ObjectInfo.Name.ToString().Split('/').Last());\r
                 return _displayName;\r
             }\r
             set { _displayName = value; }\r