2007-07-20 Jonathan Pobst <monkey@jpobst.com>
authorJonathan Pobst <monkey@jpobst.com>
Fri, 20 Jul 2007 17:43:39 +0000 (17:43 -0000)
committerJonathan Pobst <monkey@jpobst.com>
Fri, 20 Jul 2007 17:43:39 +0000 (17:43 -0000)
* TreeNode.cs: Implement StateImageIndex and StateImageKey.
* TreeView.cs: Implement StateImageList.

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

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

index 100e949f63802c483bf052d0bc172be636584db4..2912a28e1beb23c8dfd0356a1d41176718edeab5 100644 (file)
@@ -1,3 +1,8 @@
+2007-07-20  Jonathan Pobst  <monkey@jpobst.com>
+
+       * TreeNode.cs: Implement StateImageIndex and StateImageKey.
+       * TreeView.cs: Implement StateImageList.
+
 2007-07-20  Rolf Bjarne Kvinge <RKvinge@novell.com> 
 
        * Form.cs: Don't check if the current form is the active form before
index 27215d1d0c618f7363951ff4daacf27844fa2a8a..2d3de6d74b7e1055e8b4b8e30bb1789d32432105 100644 (file)
@@ -46,6 +46,8 @@ namespace System.Windows.Forms {
 #if NET_2_0
                private string image_key = String.Empty;
                private string selected_image_key = String.Empty;
+               private int state_image_index = -1;
+               private string state_image_key = String.Empty;
 #endif
         internal TreeNodeCollection nodes;
                internal TreeViewAction check_reason = TreeViewAction.Unknown;
@@ -218,6 +220,10 @@ namespace System.Windows.Forms {
                        int indent_level = IndentLevel;
                        int roots = (TreeView.ShowRootLines ? 1 : 0);
                        int cb = (TreeView.CheckBoxes ? 19 : 0);
+#if NET_2_0
+                       if (!TreeView.CheckBoxes && StateImage != null)
+                               cb = 19;
+#endif
                        int imgs = (TreeView.ImageList != null ?  TreeView.ImageList.ImageSize.Width + 3 : 0);
                        return ((indent_level + roots) * TreeView.Indent) + cb + imgs - TreeView.hbar_offset;
                }
@@ -230,7 +236,11 @@ namespace System.Windows.Forms {
 
                internal int GetImageX ()
                {
+#if NET_2_0
+                       return GetLinesX () + (TreeView.CheckBoxes || StateImage != null ? 19 : 0);
+#else
                        return GetLinesX () + (TreeView.CheckBoxes ? 19 : 0);
+#endif
                }
 
                // In theory we should be able to track this instead of computing
@@ -572,6 +582,40 @@ namespace System.Windows.Forms {
                        get { return selected_image_key; }
                        set { selected_image_key = value; }
                }
+
+               [Localizable (true)]
+               [DefaultValue (-1)]
+               [RelatedImageList ("TreeView.StateImageList")]
+               [TypeConverter (typeof (NoneExcludedImageIndexConverter))]
+               [RefreshProperties (RefreshProperties.Repaint)]
+               [Editor ("System.Windows.Forms.Design.ImageIndexEditor, " + Consts.AssemblySystem_Design, typeof (System.Drawing.Design.UITypeEditor))]
+               public int StateImageIndex {
+                       get { return state_image_index; }
+                       set {
+                               if (state_image_index != value) {
+                                       state_image_index = value;
+                                       state_image_key = string.Empty;
+                                       InvalidateWidth ();                             
+                               }
+                       }
+               }
+
+               [Localizable (true)]
+               [DefaultValue ("")]
+               [RelatedImageList ("TreeView.StateImageList")]
+               [TypeConverter (typeof (ImageKeyConverter))]
+               [RefreshProperties (RefreshProperties.Repaint)]
+               [Editor ("System.Windows.Forms.Design.ImageIndexEditor, " + Consts.AssemblySystem_Design, typeof (System.Drawing.Design.UITypeEditor))]
+               public string StateImageKey {
+                       get { return state_image_key; }
+                       set {
+                               if (state_image_key != value) {
+                                       state_image_key = value;
+                                       state_image_index = -1;
+                                       InvalidateWidth ();
+                               }
+                       }
+               }
 #endif
 
                [Bindable(true)]
@@ -942,6 +986,21 @@ namespace System.Windows.Forms {
                                return true;
                        }
                }
+
+#if NET_2_0
+               internal Image StateImage {
+                       get {
+                               if (TreeView != null) {
+                                       if (state_image_index >= 0)
+                                               return TreeView.StateImageList.Images[state_image_index];
+                                       if (state_image_key != string.Empty)
+                                               return TreeView.StateImageList.Images[state_image_key];                         
+                               }
+                               
+                               return null;
+                       }
+               }
+#endif
                #endregion      // Internal & Private Methods and Properties
 
        }
index 2c7829a2686b4d69e2003e7843bd05f4c5b86a46..243091578261dc2b6a8db45f7a359262c2d3f8f4 100644 (file)
@@ -65,6 +65,7 @@ namespace System.Windows.Forms {
                private string image_key;
                private bool right_to_left_layout;
                private string selected_image_key;
+               private ImageList state_image_list;
 #endif
                private bool full_row_select;
                private bool hot_tracking;
@@ -517,6 +518,17 @@ namespace System.Windows.Forms {
                        }
                }
 
+#if NET_2_0
+               [DefaultValue (null)]
+               public ImageList StateImageList {
+                       get { return state_image_list; }
+                       set { 
+                               state_image_list = value;
+                               Invalidate ();
+                       }
+               }
+#endif
+
                [Browsable(false)]
                [EditorBrowsable(EditorBrowsableState.Never)]
                [Bindable(false)]
@@ -1343,6 +1355,19 @@ namespace System.Windows.Forms {
                        }
                }
 
+#if NET_2_0
+               private void DrawNodeState (TreeNode node, Graphics dc, int x, int y)
+               {
+                       if (node.Checked) {
+                               if (StateImageList.Images[1] != null)
+                                       dc.DrawImage (StateImageList.Images[1], new Rectangle (x, y, 16, 16));
+                       } else {
+                               if (StateImageList.Images[0] != null)
+                                       dc.DrawImage (StateImageList.Images[0], new Rectangle (x, y, 16, 16));
+                       }
+               }
+#endif
+
                private void DrawNodeCheckBox (TreeNode node, Graphics dc, int x, int middle)
                {
                        Pen pen = ThemeEngine.Current.ResPool.GetSizedPen(Color.Black, 2);
@@ -1574,8 +1599,19 @@ namespace System.Windows.Forms {
                                if ((show_root_lines || node.Parent != null) && show_plus_minus && child_count > 0)
                                        DrawNodePlusMinus (node, dc, node.GetLinesX () - Indent + 5, middle);
 
+#if NET_2_0
+                               if (checkboxes && state_image_list == null)
+                                       DrawNodeCheckBox (node, dc, CheckBoxLeft (node) - 3, middle);
+
+                               if (checkboxes && state_image_list != null)
+                                       DrawNodeState (node, dc, CheckBoxLeft (node) - 3, y);
+
+                               if (!checkboxes && node.StateImage != null)
+                                       dc.DrawImage (node.StateImage, new Rectangle (CheckBoxLeft (node) - 3, y, 16, 16));
+#else
                                if (checkboxes)
                                        DrawNodeCheckBox (node, dc, CheckBoxLeft (node) - 3, middle);
+#endif
 
                                if (show_lines)
                                        DrawNodeLines (node, dc, clip, dash, node.GetLinesX (), y, middle);