* Application.cs: fix compilation errors when debug is enabled.
[mono.git] / mcs / class / Managed.Windows.Forms / System.Windows.Forms / GridEntry.cs
index cc8e38950b47ab84df19906201c1bf4d1a3a38fa..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 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() {
+               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,44 +106,116 @@ 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
 
+               #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);
                        }
                }
 
@@ -158,10 +236,18 @@ namespace System.Windows.Forms.PropertyGridInternal
                        }
                        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;
+               }
        }
 }