2007-01-03 Jonathan Pobst <monkey@jpobst.com>
[mono.git] / mcs / class / Managed.Windows.Forms / System.Windows.Forms / PropertyGrid.cs
index f14e5a3509e9e4e62268a3793154b5d245da3354..5646d06d53211f45fddbab352f632bce1a76938c 100644 (file)
@@ -32,11 +32,16 @@ using System.ComponentModel;
 using System.Collections;
 using System.ComponentModel.Design;
 using System.Reflection;
+using System.Runtime.InteropServices;
 using System.Windows.Forms.Design;
 using System.Windows.Forms.PropertyGridInternal;
 
 namespace System.Windows.Forms {
        [Designer("System.Windows.Forms.Design.PropertyGridDesigner, " + Consts.AssemblySystem_Design, "System.ComponentModel.Design.IDesigner")]
+#if NET_2_0
+       [ClassInterface (ClassInterfaceType.AutoDispatch)]
+       [ComVisible (true)]
+#endif
        public class PropertyGrid : System.Windows.Forms.ContainerControl, ComponentModel.Com2Interop.IComPropertyBrowser {
                #region Private Members
                
@@ -73,7 +78,6 @@ namespace System.Windows.Forms {
                internal Panel help_panel;
                internal Label help_title_label;
                internal Label help_description_label;
-               private ContextMenu context_menu;
                private MenuItem reset_menuitem;
                private MenuItem description_menuitem;
                private object current_property_value;
@@ -130,7 +134,7 @@ namespace System.Windows.Forms {
                        alphabetic_toolbarbutton = new ToolBarButton();
                        separator_toolbarbutton = new ToolBarButton();
                        propertypages_toolbarbutton = new ToolBarButton();
-                       context_menu = new ContextMenu();
+                       ContextMenu context_menu = new ContextMenu();
 
                        toolbar_imagelist = new ImageList();
                        toolbar_imagelist.ColorDepth = ColorDepth.Depth32Bit;
@@ -283,7 +287,7 @@ namespace System.Windows.Forms {
                        }
                }
 
-               [BrowsableAttribute(false)]
+               [BrowsableAttribute (false)]
                [EditorBrowsableAttribute(EditorBrowsableState.Advanced)]
                public virtual bool CommandsVisible {
                        get {
@@ -291,7 +295,11 @@ namespace System.Windows.Forms {
                        }
                }
 
-               [DefaultValue(false)]
+#if NET_2_0
+               [DefaultValue (true)]
+#else
+               [DefaultValue (false)]
+#endif
                public virtual bool CommandsVisibleIfAvailable {
                        get {
                                return commands_visible_if_available;
@@ -334,6 +342,9 @@ namespace System.Windows.Forms {
                        }
                }
 
+#if NET_2_0
+               [DefaultValue ("Color [Control]")]
+#endif
                public Color HelpBackColor {
                        get {
                                return help_panel.BackColor;
@@ -347,6 +358,9 @@ namespace System.Windows.Forms {
                        }
                }
 
+#if NET_2_0
+               [DefaultValue ("Color [ControlText]")]
+#endif
                public Color HelpForeColor {
                        get {
                                return help_panel.ForeColor;
@@ -377,6 +391,9 @@ namespace System.Windows.Forms {
                        }
                }
 
+#if NET_2_0
+               [DefaultValue (false)]
+#endif
                public bool LargeButtons {
                        get {
                                return large_buttons;
@@ -391,6 +408,9 @@ namespace System.Windows.Forms {
                        }
                }
 
+#if NET_2_0
+               [DefaultValue ("Color [InactiveBorder]")]
+#endif
                public Color LineColor {
                        get {
                                return line_color;
@@ -425,10 +445,10 @@ namespace System.Windows.Forms {
                                UpdateToolBarButtons();
                                ReflectObjects();
                                property_grid_view.Refresh();
-                               
-                               if (PropertySortChanged != null) {
-                                       PropertySortChanged(this, EventArgs.Empty);
-                               }
+
+                               EventHandler eh = (EventHandler)(Events [PropertySortChangedEvent]);
+                               if (eh != null)
+                                       eh (this, EventArgs.Empty);
                        }
                }
 
@@ -572,6 +592,9 @@ namespace System.Windows.Forms {
                        }
                }
 
+#if NET_2_0
+               [DefaultValue ("Color [Window]")]
+#endif
                public Color ViewBackColor {
                        get {
                                return property_grid_view.BackColor;
@@ -586,6 +609,9 @@ namespace System.Windows.Forms {
                        }
                }
 
+#if NET_2_0
+               [DefaultValue ("Color [WindowText]")]
+#endif
                public Color ViewForeColor {
                        get {
                                return property_grid_view.ForeColor;
@@ -704,8 +730,11 @@ namespace System.Windows.Forms {
                }
                
                [MonoTODO]
-               protected void OnComComponentNameChanged(ComponentRenameEventArgs e) {
-                       throw new NotImplementedException();
+               protected void OnComComponentNameChanged(ComponentRenameEventArgs e)
+               {
+                       ComponentRenameEventHandler eh = (ComponentRenameEventHandler)(Events [ComComponentNameChangedEvent]);
+                       if (eh != null)
+                               eh (this, e);
                }
 
                protected override void OnFontChanged(EventArgs e) {
@@ -751,8 +780,9 @@ namespace System.Windows.Forms {
                }
 
                protected virtual void OnPropertyValueChanged (PropertyValueChangedEventArgs e) {
-                       if (PropertyValueChanged != null) {
-                               PropertyValueChanged(this, e);
+                       PropertyValueChangedEventHandler eh = (PropertyValueChangedEventHandler)(Events [PropertyValueChangedEvent]);
+                       if (eh != null) {
+                               eh (this, e);
                                current_property_value = selected_grid_item.Value;
                        }
                }
@@ -762,15 +792,15 @@ namespace System.Windows.Forms {
                }
 
                protected virtual void OnSelectedGridItemChanged (SelectedGridItemChangedEventArgs e) {
-                       if (SelectedGridItemChanged != null) {
-                               SelectedGridItemChanged(this, e);
-                       }
+                       SelectedGridItemChangedEventHandler eh = (SelectedGridItemChangedEventHandler)(Events [SelectedGridItemChangedEvent]);
+                       if (eh != null)
+                               eh (this, e);
                }
 
                protected virtual void OnSelectedObjectsChanged (EventArgs e) {
-                       if (SelectedObjectsChanged != null) {
-                               SelectedObjectsChanged(this, e);
-                       }
+                       EventHandler eh = (EventHandler)(Events [SelectedObjectsChangedEvent]);
+                       if (eh != null)
+                               eh (this, e);
                }
 
                protected override void OnSystemColorsChanged (EventArgs e) {
@@ -785,6 +815,7 @@ namespace System.Windows.Forms {
                        return base.ProcessDialogKey (keyData);
                }
 
+               [EditorBrowsable (EditorBrowsableState.Never)]
                protected override void ScaleCore (float dx, float dy) {
                        base.ScaleCore (dx, dy);
                }
@@ -800,11 +831,36 @@ namespace System.Windows.Forms {
                #endregion
 
                #region Events
-               public event EventHandler PropertySortChanged;
-               public event PropertyTabChangedEventHandler PropertyTabChanged;
-               public event PropertyValueChangedEventHandler PropertyValueChanged;
-               public event SelectedGridItemChangedEventHandler SelectedGridItemChanged;
-               public event EventHandler SelectedObjectsChanged;
+               static object PropertySortChangedEvent = new object ();
+               static object PropertyTabChangedEvent = new object ();
+               static object PropertyValueChangedEvent = new object ();
+               static object SelectedGridItemChangedEvent = new object ();
+               static object SelectedObjectsChangedEvent = new object ();
+
+               public event EventHandler PropertySortChanged {
+                       add { Events.AddHandler (PropertySortChangedEvent, value); }
+                       remove { Events.RemoveHandler (PropertySortChangedEvent, value); }
+               }
+
+               public event PropertyTabChangedEventHandler PropertyTabChanged {
+                       add { Events.AddHandler (PropertyTabChangedEvent, value); }
+                       remove { Events.RemoveHandler (PropertyTabChangedEvent, value); }
+               }
+
+               public event PropertyValueChangedEventHandler PropertyValueChanged {
+                       add { Events.AddHandler (PropertyValueChangedEvent, value); }
+                       remove { Events.RemoveHandler (PropertyValueChangedEvent, value); }
+               }
+
+               public event SelectedGridItemChangedEventHandler SelectedGridItemChanged {
+                       add { Events.AddHandler (SelectedGridItemChangedEvent, value); }
+                       remove { Events.RemoveHandler (SelectedGridItemChangedEvent, value); }
+               }
+
+               public event EventHandler SelectedObjectsChanged {
+                       add { Events.AddHandler (SelectedObjectsChangedEvent, value); }
+                       remove { Events.RemoveHandler (SelectedObjectsChangedEvent, value); }
+               }
                
                [Browsable(false)]
                [EditorBrowsable(EditorBrowsableState.Never)]
@@ -854,11 +910,10 @@ namespace System.Windows.Forms {
                        throw new NotImplementedException();
                }
 
-               [MonoTODO]
-               private event ComponentRenameEventHandler com_component_name_changed;
+               static object ComComponentNameChangedEvent = new object ();
                event ComponentRenameEventHandler ComponentModel.Com2Interop.IComPropertyBrowser.ComComponentNameChanged {
-                       add { com_component_name_changed += value; }
-                       remove { com_component_name_changed -= value; }
+                       add { Events.AddHandler (ComComponentNameChangedEvent, value); }
+                       remove { Events.RemoveHandler (ComComponentNameChangedEvent, value); }
                }
                #endregion      // Com2Interop.IComPropertyBrowser Interface
 
@@ -936,7 +991,7 @@ namespace System.Windows.Forms {
 
                #region Private Helper Methods
 
-               public GridItem FindFirstItem (GridItem root)
+               private GridItem FindFirstItem (GridItem root)
                {
                        if (root.GridItemType == GridItemType.Property)
                                return root;
@@ -1111,6 +1166,7 @@ namespace System.Windows.Forms {
 
 #if NET_2_0
 
+               [DefaultValue (false)]
                public bool UseCompatibleTextRendering {
                        get {
                                return use_compatible_text_rendering;