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
}
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;
}
}
- 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;
+ }
}
}