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