2004-12-03 Marek Safar <marek.safar@seznam.cz>
authorMarek Safar <marek.safar@gmail.com>
Fri, 3 Dec 2004 09:55:02 +0000 (09:55 -0000)
committerMarek Safar <marek.safar@gmail.com>
Fri, 3 Dec 2004 09:55:02 +0000 (09:55 -0000)
* OwnerDrawPropertyBag.cs: New internal parameterless ctor.

* TreeNode.cs: Implemented ICloneable, Fixed to pass my simple
tests.

* TreeNodeCollection.cs: Add exception throwing for Add,AddRange.

* TreeView.cs: BackColor is Colors.Window.

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

mcs/class/Managed.Windows.Forms/System.Windows.Forms/ChangeLog
mcs/class/Managed.Windows.Forms/System.Windows.Forms/OwnerDrawPropertyBag.cs
mcs/class/Managed.Windows.Forms/System.Windows.Forms/TreeNode.cs
mcs/class/Managed.Windows.Forms/System.Windows.Forms/TreeNodeCollection.cs
mcs/class/Managed.Windows.Forms/System.Windows.Forms/TreeView.cs

index 3d72517ae7bc73ff2083aced5f4d080564eca7b4..6552bebd07ca4051ec942808ea2c995197aa8684 100644 (file)
@@ -1,3 +1,14 @@
+2004-12-03  Marek Safar  <marek.safar@seznam.cz>
+
+       * OwnerDrawPropertyBag.cs: New internal parameterless ctor.
+
+       * TreeNode.cs: Implemented ICloneable, Fixed to pass my simple
+       tests.
+       
+       * TreeNodeCollection.cs: Add exception throwing for Add,AddRange.
+       
+       * TreeView.cs: BackColor is Colors.Window.
+
 2004-12-01  Jackson Harper  <jackson@ximian.com>
 
        * TreeView.cs: When resizing the tree if the user is making it
index c668bf6c6809d0439dc41535f7babcd409e29830..8e17c902728df8832dc572a5f5a1e69b405d3526 100644 (file)
@@ -35,6 +35,11 @@ namespace System.Windows.Forms {
                private Color back_color;
                private Font font;
 
+               internal OwnerDrawPropertyBag ()
+               {
+                       fore_color = back_color = Color.Empty;
+               }
+
                private OwnerDrawPropertyBag (Color fore_color, Color back_color, Font font)
                {
                        this.fore_color = fore_color;
index c77c97c7773392916f077afcd8735ee6757b77b4..bf597a27993b8216f2d79c0d3d7ac950d0c58ebe 100644 (file)
@@ -30,7 +30,7 @@ using System.Runtime.Serialization;
 namespace System.Windows.Forms {
 
        [Serializable]
-       public class TreeNode : MarshalByRefObject /*, ICloneable, ISerializable */ {
+       public class TreeNode : MarshalByRefObject, ICloneable /*, ISerializable */ {
 
                private TreeView tree_view;
                internal TreeNode parent;
@@ -38,8 +38,7 @@ namespace System.Windows.Forms {
 
                private string text;
                private int image_index = -1;
-               private int selected_image_index;
-               private string full_path;
+               private int selected_image_index = -1;
                internal TreeNodeCollection nodes;
                
                private bool is_expanded = true;
@@ -73,7 +72,7 @@ namespace System.Windows.Forms {
                public TreeNode (string text, int image_index, int selected_image_index) : this (text)
                {
                        this.image_index = image_index;
-                       this.selected_image_index = image_index;
+                       this.selected_image_index = selected_image_index;
                }
 
                public TreeNode (string text, int image_index, int selected_image_index,
@@ -96,6 +95,24 @@ namespace System.Windows.Forms {
                        }
                }
 
+               #region ICloneable Members
+
+               public object Clone()
+               {
+                       TreeNode tn = new TreeNode (text, image_index, selected_image_index);
+                       if (nodes != null) {
+                               foreach (TreeNode child in nodes)
+                                       tn.Nodes.Add ((TreeNode)child.Clone ());
+                       }
+                       tn.Tag = tag;
+                       tn.Checked = Checked;
+                       if (prop_bag != null)
+                               tn.prop_bag = OwnerDrawPropertyBag.Copy (prop_bag);
+                       return tn;
+               }
+
+               #endregion
+
                public TreeNode Parent {
                        get {
                                if (tree_view != null && tree_view.root_node == parent)
@@ -128,18 +145,36 @@ namespace System.Windows.Forms {
                }
 
                public Color BackColor {
-                       get { return prop_bag.BackColor; }
-                       set { prop_bag.BackColor = value; }
+                       get { 
+                               return prop_bag == null ? Color.Empty : prop_bag.BackColor;
+                       }
+                       set { 
+                               if (prop_bag == null)
+                                       prop_bag = new OwnerDrawPropertyBag ();
+                               prop_bag.BackColor = value;
+                       }
                }
 
                public Color ForeColor {
-                       get { return prop_bag.ForeColor; }
-                       set { prop_bag.ForeColor = value; }
+                       get { 
+                               return prop_bag == null ? Color.Empty : prop_bag.ForeColor;
+                       }
+                       set {
+                               if (prop_bag == null)
+                                       prop_bag = new OwnerDrawPropertyBag ();
+                               prop_bag.ForeColor = value;
+                       }
                }
 
                public Font NodeFont {
-                       get { return prop_bag.Font; }
-                       set { prop_bag.Font = value; }
+                       get {
+                               return prop_bag == null ? null : prop_bag.Font;
+                       }
+                       set {
+                               if (prop_bag == null)
+                                       prop_bag = new OwnerDrawPropertyBag (); 
+                               prop_bag.Font = value;
+                       }
                }
 
                public TreeNodeCollection Nodes {
@@ -160,21 +195,27 @@ namespace System.Windows.Forms {
 
                public string FullPath {
                        get {
-                               if (full_path != null)
-                                       return full_path;
+                               if (tree_view == null)
+                                       throw new Exception ("No TreeView associated");
 
                                StringBuilder builder = new StringBuilder ();
-                               string ps = (TreeView == null ? "/" : TreeView.PathSeparator);
-                               for (int i = 0; i < nodes.Count; i++) {
-                                       builder.Append (nodes [i].Text);
-                                       if (i - 1 != nodes.Count)
-                                               builder.Append (ps);
-                               }
-                               full_path = builder.ToString ();
-                               return full_path;
+                               BuildFullPath (builder);
+                               return builder.ToString ();
                        }
                }
 
+               bool BuildFullPath (StringBuilder path)
+               {
+                       if (parent == null)
+                               return false;
+
+                       if (parent.BuildFullPath (path))
+                               path.Append (tree_view.PathSeparator);
+
+                       path.Append (text);
+                       return true;
+               }
+
                public bool IsExpanded {
                        get { return is_expanded; }
                }
@@ -225,7 +266,7 @@ namespace System.Windows.Forms {
 
                public TreeNode LastNode {
                        get {
-                               return Nodes [Nodes.Count - 1];
+                               return (nodes == null || nodes.Count == 0) ? null : nodes [nodes.Count - 1];
                        }
                }
 
index 31a9aa39eb27b02989ae50fb302b5de3db6d6302..94fea9217ae93ac75215dbb271de922ded7a00db 100644 (file)
@@ -106,6 +106,9 @@ namespace System.Windows.Forms {
 
                public virtual int Add (TreeNode node)
                {
+                       if (node == null)
+                               throw new ArgumentNullException("node");
+
                        if (owner != null && owner.TreeView != null && owner.TreeView.Sorted)
                                return AddSorted (node);
                        SetData (node);
@@ -120,6 +123,9 @@ namespace System.Windows.Forms {
 
                public virtual void AddRange (TreeNode [] nodes)
                {
+                       if (nodes == null)
+                               throw new ArgumentNullException("node");
+
                        // We can't just use Array.Copy because the nodes also
                        // need to have some properties set when they are added.
                        for (int i = 0; i < nodes.Length; i++)
index bd65f5b712b198880d5f9a3c3603ae6a09b400c0..5ce718fd1b10642e77ae2abd7cf593cd22a7d10e 100644 (file)
@@ -157,7 +157,7 @@ namespace System.Windows.Forms {
                }
 
                public override Color BackColor {
-                       get { return base.BackColor; }
+                       get { return SystemColors.Window; }
                        set { base.BackColor = value; }
                }