* Application.cs: fix compilation errors when debug is enabled.
[mono.git] / mcs / class / Managed.Windows.Forms / System.Windows.Forms / GridEntry.cs
index 19931a690c0e045897d65469d198300c3542ea62..c42ddb70a1e691f45df4747969f6b097a69437e5 100644 (file)
@@ -32,30 +32,32 @@ using System.Drawing;
 
 namespace System.Windows.Forms.PropertyGridInternal
 {
-       internal class GridEntry : GridItem
+       internal class GridEntry : GridItem, ITypeDescriptorContext
        {
                #region Local Variables
                private bool expanded = true;
                private GridItemCollection grid_items;
                private GridItem parent;
                private PropertyDescriptor property_descriptor;
-               private object selected_object;
-               private string label;
-               private int top;\r
-               private Rectangle plus_minus_bounds;\r
+               private object[] selected_objects;
+               private int top;
+               private Rectangle plus_minus_bounds;
                private Rectangle bounds;
+               private PropertyGridView property_grid_view;
                #endregion      // Local Variables
 
                #region  Contructors
-               public GridEntry() : base() {\r
-                       plus_minus_bounds = new Rectangle(0,0,0,0);\r
+               protected GridEntry (PropertyGridView view)
+               {
+                       property_grid_view = view;
+                       plus_minus_bounds = new Rectangle(0,0,0,0);
                        bounds = new Rectangle(0,0,0,0);
                        top = -1;
                        grid_items = new GridItemCollection();
                }
 
-               public GridEntry(object obj, PropertyDescriptor prop_desc) : this() {
-                       selected_object = obj;
+               public GridEntry(PropertyGridView view, object[] objs, PropertyDescriptor prop_desc) : this (view) {
+                       selected_objects = objs;
                        property_descriptor = prop_desc;
                }
                #endregion      // Constructors
@@ -75,18 +77,22 @@ namespace System.Windows.Forms.PropertyGridInternal
                        }
 
                        set {
+                               if (expanded == value)
+                                       return;
+
                                expanded = value;
+                               property_grid_view.RedrawBelowItemOnExpansion (this);
                        }
                }
 
-               public override System.Windows.Forms.GridItemCollection GridItems
+               public override GridItemCollection GridItems
                {
                        get {
                                return grid_items;
                        }
                }
 
-               public override System.Windows.Forms.GridItemType GridItemType
+               public override GridItemType GridItemType
                {
                        get {
                                return GridItemType.Property;
@@ -100,68 +106,148 @@ namespace System.Windows.Forms.PropertyGridInternal
                        }
                }
 
-               public override System.Windows.Forms.GridItem Parent
+               public override GridItem Parent
                {
                        get {
                                return parent;
                        }
                }
 
-               public override System.ComponentModel.PropertyDescriptor PropertyDescriptor
+               public override PropertyDescriptor PropertyDescriptor
                {
                        get {
                                return property_descriptor;
                        }
                }
 
+               public bool CanResetValue ()
+               {
+                       if (Value == null) /* not sure if this is always right.. */
+                               return false;
+
+                       return PropertyDescriptor.CanResetValue(selected_objects[0]);
+               }
+
                public override object Value
                {
                        get {
-                               object return_value = null;
-                               if (selected_object != null)
-                                       return_value = property_descriptor.GetValue(selected_object);
-                               return return_value;
+                               /* we should probably put this logic
+                                * someplace else, maybe when we're
+                                * initially populating the
+                                * PropertyGrid? */
+                               if (selected_objects == null || selected_objects.Length == 0)
+                                       return null;
+
+                               object v = property_descriptor.GetValue(selected_objects[0]);
+                               for (int i = 1; i < selected_objects.Length; i ++) {
+                                       if (!Object.Equals (v, property_descriptor.GetValue(selected_objects[i])))
+                                               return null;
+                               }
+
+                               return v;
                        }
                }
                #endregion      // Public Instance Properties
 
                #region Public Instance Methods
                [MonoTODO]
-               public override bool Select () {
-                       throw new NotImplementedException();
+               public override bool Select ()
+               {
+                       property_grid_view.property_grid.SelectedGridItem = this;
+                       return true;
                }
                #endregion      // Public Instance Methods
 
-               internal override int Top {\r
-                       get {\r
-                               return top;\r
-                       }\r
-                       set {\r
-                               top = value;\r
-                       }\r
-               }\r
-\r
-               internal override Rectangle PlusMinusBounds {\r
-                       get{\r
-                               return plus_minus_bounds;\r
-                       }\r
-                       set{\r
-                               plus_minus_bounds = value;\r
-                       }\r
-               }\r
-\r
-               internal override Rectangle Bounds\r
-               {\r
-                       get\r
-                       {\r
-                               return bounds;\r
-                       }\r
-                       set\r
-                       {\r
-                               bounds = value;\r
-                       }\r
-               }\r
+               #region ITypeDescriptorContext Members
 
+               void ITypeDescriptorContext.OnComponentChanged() {
+                       // TODO:  Add SystemComp.OnComponentChanged implementation
+               }
+
+               [MonoTODO ("this is broken, as PropertyGridView doesn't implement IContainer")]
+               IContainer ITypeDescriptorContext.Container {
+                       get {
+                               return property_grid_view as IContainer;
+                       }
+               }
 
+               bool ITypeDescriptorContext.OnComponentChanging() {
+                       // TODO:  Add SystemComp.OnComponentChanging implementation
+                       return false;
+               }
+
+               object ITypeDescriptorContext.Instance {
+                       get {
+                               return Value;
+                       }
+               }
+
+               PropertyDescriptor ITypeDescriptorContext.PropertyDescriptor {
+                       get {
+                               return PropertyDescriptor;
+                       }
+               }
+
+               #endregion
+
+               #region IServiceProvider Members
+
+               object IServiceProvider.GetService(Type serviceType) {
+                       // TODO:  Add SystemComp.GetService implementation
+                       return null;
+               }
+
+               #endregion
+
+               internal object[] SelectedObjects {
+                       get {
+                               return selected_objects;
+                       }
+               }
+
+               internal override int Top {
+                       get {
+                               return top;
+                       }
+                       set {
+                               if (top == value)
+                                       return;
+
+                               top = value;
+                               if (property_grid_view.property_grid.SelectedGridItem == this)
+                                       property_grid_view.grid_textbox_Show (this);
+                       }
+               }
+
+               internal override Rectangle PlusMinusBounds {
+                       get{
+                               return plus_minus_bounds;
+                       }
+                       set{
+                               plus_minus_bounds = value;
+                       }
+               }
+
+               internal override Rectangle Bounds
+               {
+                       get
+                       {
+                               return bounds;
+                       }
+                       set
+                       {
+                               if (bounds == value)
+                                       return;
+
+                               bounds = value;
+                               if (property_grid_view.property_grid.SelectedGridItem == this)
+                                       property_grid_view.grid_textbox_Show (this);
+                       }
+               }
+
+               internal void SetParent (GridItem parent)
+               {
+                       this.parent = parent;
+               }
        }
 }