Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'mcs/class/Managed.Windows.Forms/System.Windows.Forms/PropertyGrid.cs')
-rw-r--r--mcs/class/Managed.Windows.Forms/System.Windows.Forms/PropertyGrid.cs1068
1 files changed, 1068 insertions, 0 deletions
diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms/PropertyGrid.cs b/mcs/class/Managed.Windows.Forms/System.Windows.Forms/PropertyGrid.cs
new file mode 100644
index 00000000000..0bc88346ab8
--- /dev/null
+++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms/PropertyGrid.cs
@@ -0,0 +1,1068 @@
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+// Copyright (c) 2004-2005 Novell, Inc.
+//
+// Authors:
+// Jonathan Chambers (jonathan.chambers@ansys.com)
+//
+
+// NOT COMPLETE
+
+using System;
+using System.Drawing;
+using System.Drawing.Design;
+using System.ComponentModel;
+using System.Collections;
+using System.ComponentModel.Design;
+using System.Reflection;
+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")]
+ public class PropertyGrid : System.Windows.Forms.ContainerControl, ComponentModel.Com2Interop.IComPropertyBrowser
+ {
+ #region Private Members
+
+
+ private const int GRID_ITEM_HEIGHT = 16;
+ private const int GRID_LEFT_COLUMN_WIDTH = 16;
+ private const int DIVIDER_PADDING = 2;
+
+ private AttributeCollection browsable_attributes = null;
+ private bool can_show_commands = false;
+ private Color commands_back_color;
+ private Color commands_fore_color;
+ private bool commands_visible;
+ private bool commands_visible_if_available;
+ private Point context_menu_default_location;
+ private bool large_buttons;
+ private Color line_color;
+ private PropertySort property_sort;
+ private PropertyTabCollection property_tabs;
+ private GridItem selected_grid_item;
+ internal GridItemCollection grid_items;
+ private object[] selected_objects;
+ private PropertyTab selected_tab;
+
+ private ImageList toolbar_imagelist;
+ private ToolBarButton categorized_toolbarbutton;
+ private ToolBarButton alphabetic_toolbarbutton;
+ private ToolBarButton separator_toolbarbutton;
+ private ToolBarButton propertypages_toolbarbutton;
+
+ internal ToolBar toolbar;
+ internal PropertyGridView property_grid_view;
+ internal Splitter splitter;
+ 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;
+
+ #endregion // Private Members
+
+ #region Contructors
+ public PropertyGrid() {
+ selected_objects = new object[1];
+ grid_items = new GridItemCollection();
+ property_tabs = new PropertyTabCollection();
+
+ line_color = SystemColors.ScrollBar;
+ line_color = SystemColors.ScrollBar;
+ browsable_attributes = new AttributeCollection(new Attribute[] {});
+ commands_visible_if_available = false;
+ property_sort = PropertySort.Categorized;
+
+ property_grid_view = new PropertyGridView(this);
+ property_grid_view.Dock = DockStyle.Fill;
+
+ splitter = new Splitter();
+ splitter.Dock = DockStyle.Bottom;
+
+ help_panel = new Panel();
+ help_panel.Dock = DockStyle.Bottom;
+ //help_panel.DockPadding.All = 3;
+ help_panel.Height = 50;
+ help_panel.BackColor = SystemColors.Control;
+
+
+ help_title_label = new Label();
+ help_title_label.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
+ help_title_label.Name = "help_title_label";
+ help_title_label.Font = new Font(this.Font,FontStyle.Bold);
+ help_title_label.Text = "Title";
+ help_title_label.Location = new Point(2,2);
+ help_title_label.Height = 17;
+ help_title_label.Width = help_panel.Width - 4;
+
+
+ help_description_label = new Label();
+ help_description_label.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
+ help_description_label.Name = "help_description_label";
+ help_description_label.Font = this.Font;
+ help_description_label.Text = "The long important Description";
+ help_description_label.Location = new Point(2,help_title_label.Top+help_title_label.Height);
+ help_description_label.Width = help_panel.Width - 4;
+ help_description_label.Height = 17;
+
+ help_panel.Controls.Add(help_description_label);
+ help_panel.Controls.Add(help_title_label);
+ help_panel.Paint+=new PaintEventHandler(help_panel_Paint);
+
+ toolbar = new ToolBar();
+ toolbar.Dock = DockStyle.Top;
+ categorized_toolbarbutton = new ToolBarButton();
+ alphabetic_toolbarbutton = new ToolBarButton();
+ separator_toolbarbutton = new ToolBarButton();
+ propertypages_toolbarbutton = new ToolBarButton();
+ context_menu = new ContextMenu();
+
+ toolbar_imagelist = new ImageList();
+ toolbar_imagelist.ColorDepth = ColorDepth.Depth32Bit;
+ toolbar_imagelist.ImageSize = new System.Drawing.Size(16, 16);
+ toolbar_imagelist.TransparentColor = System.Drawing.Color.Transparent;
+ toolbar_imagelist.Images.Add( (Image)Locale.GetResource( "propertygrid_sort_category") );
+ toolbar_imagelist.Images.Add( (Image)Locale.GetResource( "propertygrid_sort_alphabetical") );
+ toolbar_imagelist.Images.Add( (Image)Locale.GetResource( "propertygrid_tab_properties") );
+
+ toolbar.Appearance = ToolBarAppearance.Flat;
+ toolbar.AutoSize = false;
+ toolbar.Buttons.AddRange(new ToolBarButton[] {
+ categorized_toolbarbutton,
+ alphabetic_toolbarbutton,
+ separator_toolbarbutton,
+ propertypages_toolbarbutton});
+
+ toolbar.ButtonSize = new System.Drawing.Size(20, 20);
+ toolbar.ImageList = toolbar_imagelist;
+ toolbar.Location = new System.Drawing.Point(0, 0);
+ toolbar.Name = "toolbar";
+ toolbar.ShowToolTips = true;
+ toolbar.Size = new System.Drawing.Size(256, 27);
+ toolbar.TabIndex = 0;
+ toolbar.ButtonClick += new ToolBarButtonClickEventHandler(toolbar_ButtonClick);
+
+ categorized_toolbarbutton.ImageIndex = 0;
+ categorized_toolbarbutton.Style = ToolBarButtonStyle.ToggleButton;
+ categorized_toolbarbutton.ToolTipText = (string)Locale.GetResource( "Categorized");
+
+ alphabetic_toolbarbutton.ImageIndex = 1;
+ alphabetic_toolbarbutton.Style = ToolBarButtonStyle.ToggleButton;
+ alphabetic_toolbarbutton.ToolTipText = (string)Locale.GetResource( "Alphabetic");
+
+ separator_toolbarbutton.Style = ToolBarButtonStyle.Separator;
+
+ propertypages_toolbarbutton.Enabled = false;
+ propertypages_toolbarbutton.ImageIndex = 2;
+ propertypages_toolbarbutton.Style = ToolBarButtonStyle.ToggleButton;
+ propertypages_toolbarbutton.ToolTipText = "Property Pages";
+
+
+ reset_menuitem = context_menu.MenuItems.Add("Reset");
+ reset_menuitem.Click +=new EventHandler(OnResetPropertyClick);
+ context_menu.MenuItems.Add("-");
+ description_menuitem = context_menu.MenuItems.Add("Description");
+ description_menuitem.Click += new EventHandler(OnDescriptionClick);
+ description_menuitem.Checked = this.HelpVisible;
+ this.ContextMenu = context_menu;
+ toolbar.ContextMenu = context_menu;
+
+ this.Controls.Add(property_grid_view);
+ this.Controls.Add(toolbar);
+ this.Controls.Add(splitter);
+ this.Controls.Add(help_panel);
+ this.Name = "PropertyGrid";
+ this.Size = new System.Drawing.Size(256, 400);
+
+ has_focus = false;
+
+ //TextChanged+=new System.EventHandler(RedrawEvent);
+ //ForeColorChanged+=new EventHandler(RedrawEvent);
+ //BackColorChanged+=new System.EventHandler(RedrawEvent);
+ //FontChanged+=new EventHandler(RedrawEvent);
+ //SizeChanged+=new EventHandler(RedrawEvent);
+
+ UpdateToolBarButtons();
+ }
+ #endregion // Constructors
+
+ #region Public Instance Properties
+
+ [BrowsableAttribute(false)]
+ [EditorBrowsableAttribute(EditorBrowsableState.Advanced)]
+ [DesignerSerializationVisibilityAttribute(DesignerSerializationVisibility.Hidden)]
+ public AttributeCollection BrowsableAttributes {
+ get {
+ return browsable_attributes;
+ }
+
+ set {
+ if (browsable_attributes == value) {
+ return;
+ }
+
+ browsable_attributes = value;
+ }
+ }
+
+ [Browsable(false)]
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public override bool AutoScroll {
+ get {
+ return base.AutoScroll;
+ }
+ set {
+ base.AutoScroll = value;
+ }
+ }
+
+ public override Color BackColor {
+ get {
+ return base.BackColor;
+ }
+
+ set {
+ if (base.BackColor == value) {
+ return;
+ }
+ base.BackColor = value;
+ }
+ }
+
+ [Browsable(false)]
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public override Image BackgroundImage {
+ get {
+ return base.BackgroundImage;
+ }
+ set {
+ base.BackgroundImage = value;
+ }
+ }
+
+
+ [BrowsableAttribute(false)]
+ [EditorBrowsableAttribute(EditorBrowsableState.Advanced)]
+ public virtual bool CanShowCommands {
+ get {
+ return can_show_commands;
+ }
+ }
+
+ public Color CommandsBackColor {
+ get {
+ return commands_back_color;
+ }
+
+ set {
+ if (commands_back_color == value) {
+ return;
+ }
+ commands_back_color = value;
+ }
+ }
+
+ public Color CommandsForeColor {
+ get {
+ return commands_fore_color;
+ }
+
+ set {
+ if (commands_fore_color == value) {
+ return;
+ }
+ commands_fore_color = value;
+ }
+ }
+
+ [BrowsableAttribute(false)]
+ [EditorBrowsableAttribute(EditorBrowsableState.Advanced)]
+ public virtual bool CommandsVisible {
+ get {
+ return commands_visible;
+ }
+ }
+
+ [DefaultValue(false)]
+ public virtual bool CommandsVisibleIfAvailable {
+ get {
+ return commands_visible_if_available;
+ }
+
+ set {
+ if (commands_visible_if_available == value) {
+ return;
+ }
+ commands_visible_if_available = value;
+ }
+ }
+
+ [BrowsableAttribute(false)]
+ [EditorBrowsableAttribute(EditorBrowsableState.Advanced)]
+ [DesignerSerializationVisibilityAttribute(DesignerSerializationVisibility.Hidden)]
+ public Point ContextMenuDefaultLocation {
+ get {
+ return context_menu_default_location;
+ }
+ }
+
+ [Browsable(false)]
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
+ public new Control.ControlCollection Controls {
+ get {
+ return base.Controls;
+ }
+ }
+
+ [Browsable(false)]
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public override Color ForeColor
+ {
+ get {
+ return base.ForeColor;
+ }
+ set {
+ base.ForeColor = value;
+ }
+ }
+
+ public Color HelpBackColor {
+ get
+ {
+ return help_panel.BackColor;
+ }
+ set
+ {
+ if (help_panel.BackColor == value) {
+ return;
+ }
+
+ help_panel.BackColor = value;
+ }
+ }
+
+ public Color HelpForeColor {
+ get {
+ return help_panel.ForeColor;
+ }
+
+ set {
+ if (help_panel.ForeColor == value) {
+ return;
+ }
+
+ help_panel.ForeColor = value;
+ }
+ }
+
+ [DefaultValue(true)]
+ [Localizable(true)]
+ public virtual bool HelpVisible {
+ get {
+ return help_panel.Visible;
+ }
+
+ set {
+ if (help_panel.Visible == value) {
+ return;
+ }
+
+ help_panel.Visible = value;
+ }
+ }
+
+ public bool LargeButtons {
+ get {
+ return large_buttons;
+ }
+
+ set {
+ if (large_buttons == value) {
+ return;
+ }
+
+ large_buttons = value;
+ }
+ }
+
+ public Color LineColor {
+ get {
+ return line_color;
+ }
+
+ set {
+ if (line_color == value) {
+ return;
+ }
+
+ line_color = value;
+ }
+ }
+
+ [DefaultValue(PropertySort.CategorizedAlphabetical)]
+ public PropertySort PropertySort {
+ get {
+ return property_sort;
+ }
+
+ set {
+ if (!Enum.IsDefined (typeof (PropertySort), value)) {
+ throw new InvalidEnumArgumentException (string.Format("Enum argument value '{0}' is not valid for PropertySort", value));
+ }
+
+ if (property_sort == value) {
+ return;
+ }
+
+ property_sort = value;
+
+ ReflectObjects();
+ Console.WriteLine("PropertySort");
+ property_grid_view.Refresh();
+
+ if (PropertySortChanged != null) {
+ PropertySortChanged(this, EventArgs.Empty);
+ }
+ }
+ }
+
+ [BrowsableAttribute(false)]
+ [EditorBrowsableAttribute(EditorBrowsableState.Advanced)]
+ [DesignerSerializationVisibilityAttribute(DesignerSerializationVisibility.Hidden)]
+ public PropertyTabCollection PropertyTabs {
+ get {
+ return property_tabs;
+ }
+ }
+
+ [BrowsableAttribute(false)]
+ [EditorBrowsableAttribute(EditorBrowsableState.Advanced)]
+ [DesignerSerializationVisibilityAttribute(DesignerSerializationVisibility.Hidden)]
+ public GridItem SelectedGridItem {
+ get {
+ return selected_grid_item;
+ }
+
+ set {
+ if (selected_grid_item == value) {
+ return;
+ }
+
+ GridItem oldItem = selected_grid_item;
+ selected_grid_item = value;
+ this.help_title_label.Text = selected_grid_item.Label;
+ if (selected_grid_item.PropertyDescriptor != null)
+ this.help_description_label.Text = selected_grid_item.PropertyDescriptor.Description;
+
+ Console.WriteLine("SelectedGridItem");
+ current_property_value = value.Value;
+ if (oldItem != null && oldItem.PropertyDescriptor != null)
+ oldItem.PropertyDescriptor.RemoveValueChanged(SelectedObject, new EventHandler(HandlePropertyValueChanged));
+ if (selected_grid_item.PropertyDescriptor != null)
+ selected_grid_item.PropertyDescriptor.AddValueChanged(SelectedObject, new EventHandler(HandlePropertyValueChanged));
+ OnSelectedGridItemChanged(new SelectedGridItemChangedEventArgs( oldItem, selected_grid_item));
+
+ }
+ }
+
+ private void HandlePropertyValueChanged(object sender, EventArgs e)
+ {
+ OnPropertyValueChanged(new PropertyValueChangedEventArgs( selected_grid_item, current_property_value));
+ }
+
+ [DefaultValue(null)]
+ [TypeConverter("System.Windows.Forms.PropertyGrid+SelectedObjectConverter, " + Consts.AssemblySystem_Windows_Forms)]
+ public object SelectedObject {
+ get {
+ return selected_objects[0];
+ }
+
+ set {
+ selected_objects = new object[] {value};
+ if (this.SelectedObject == null)
+ return;
+ PropertyTabAttribute[] propTabs = (PropertyTabAttribute[])this.SelectedObject.GetType().GetCustomAttributes(typeof(PropertyTabAttribute),true);
+ if (propTabs.Length > 0)
+ {
+ foreach (Type tabType in propTabs[0].TabClasses)
+ {
+ this.PropertyTabs.AddTabType(tabType);
+ }
+ }
+ RefreshTabs(PropertyTabScope.Component);
+ Console.WriteLine("SelectedObject");
+ ReflectObjects();
+ property_grid_view.Refresh();
+ }
+ }
+
+ [BrowsableAttribute(false)]
+ [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
+ public object[] SelectedObjects {
+ get {
+ return selected_objects;
+ }
+
+ set {
+ selected_objects = value;
+ ReflectObjects();
+ }
+ }
+
+ [BrowsableAttribute(false)]
+ [EditorBrowsable(EditorBrowsableState.Advanced)]
+ [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
+ public PropertyTab SelectedTab {
+ get {
+ return selected_tab;
+ }
+ }
+
+ public override ISite Site {
+ get {
+ return base.Site;
+ }
+
+ set {
+ base.Site = value;
+ }
+ }
+
+
+ [DefaultValue(true)]
+ public virtual bool ToolbarVisible {
+ get {
+ return toolbar.Visible;
+ }
+
+ set {
+ if (toolbar.Visible == value) {
+ return;
+ }
+
+ toolbar.Visible = value;
+ }
+ }
+
+ public Color ViewBackColor {
+ get {
+ return property_grid_view.BackColor;
+ }
+
+ set {
+ if (property_grid_view.BackColor == value) {
+ return;
+ }
+
+ property_grid_view.BackColor = value;
+ }
+ }
+
+ public Color ViewForeColor {
+ get {
+ return property_grid_view.ForeColor;
+ }
+
+ set {
+ if (property_grid_view.ForeColor == value) {
+ return;
+ }
+
+ property_grid_view.ForeColor = value;
+ }
+ }
+
+ #endregion // Public Instance Properties
+
+ #region Protected Instance Properties
+
+ protected override Size DefaultSize {
+ get {
+ return base.DefaultSize;
+ }
+ }
+
+
+ [Browsable(false)]
+ [EditorBrowsable(EditorBrowsableState.Advanced)]
+ [DesignerSerializationVisibilityAttribute(DesignerSerializationVisibility.Hidden)]
+ protected virtual Type DefaultTabType {
+ get {
+ return typeof(PropertiesTab);
+ }
+ }
+
+ protected bool DrawFlatToolbar {
+ get {
+ return (toolbar.Appearance == ToolBarAppearance.Flat);
+ }
+ set {
+ if (value)
+ toolbar.Appearance = ToolBarAppearance.Flat;
+ else
+ toolbar.Appearance = ToolBarAppearance.Normal;
+ }
+ }
+
+ protected override bool ShowFocusCues {
+ get {
+ return base.ShowFocusCues;
+ }
+ }
+
+ #endregion // Protected Instance Properties
+
+ #region Public Instance Methods
+
+ protected override void Dispose(bool val)
+ {
+ base.Dispose(val);
+ }
+
+ public void CollapseAllGridItems ()
+ {
+ foreach (GridItem item in this.grid_items)
+ {
+ item.Expanded = false;
+ }
+ }
+
+ public void ExpandAllGridItems ()
+ {
+ foreach (GridItem item in this.grid_items)
+ {
+ item.Expanded = true;
+ }
+ }
+
+ public override void Refresh ()
+ {
+ base.Refresh ();
+ }
+
+ public void RefreshTabs (PropertyTabScope tabScope)
+ {
+
+ /*button = new ToolBarButton("C");
+ button.ImageIndex = 0;
+ this.toolbar.Buttons.Add(button);
+ button = new ToolBarButton();
+ button.ImageIndex = 0;
+ button.Style = ToolBarButtonStyle.Separator;
+ this.toolbar.Buttons.Add(button);
+ foreach (PropertyTab tab in this.PropertyTabs)
+ {
+
+ int index = toolbar.ImageList.Images.Count;
+ this.toolbar.ImageList.Images.Add(tab.Bitmap);
+ button = new ToolBarButton();
+ button.ImageIndex = index;
+ this.toolbar.Buttons.Add(button);
+ }*/
+
+ }
+
+ public void ResetSelectedProperty()
+ {
+ if (selected_grid_item == null || selected_grid_item.PropertyDescriptor == null)
+ return;
+
+ selected_grid_item.PropertyDescriptor.ResetValue(SelectedObject);
+ }
+ #endregion // Public Instance Methods
+
+ #region Protected Instance Methods
+
+ protected virtual PropertyTab CreatePropertyTab(Type tabType)
+ {
+ return (PropertyTab)Activator.CreateInstance(tabType);
+ }
+
+ [MonoTODO]
+ protected void OnComComponentNameChanged(ComponentRenameEventArgs e)
+ {
+ throw new NotImplementedException();
+ }
+
+ protected override void OnFontChanged(EventArgs e)
+ {
+ base.OnFontChanged (e);
+ }
+
+ protected override void OnGotFocus(EventArgs e)
+ {
+ has_focus=true;
+ base.OnGotFocus(e);
+ }
+
+ protected override void OnHandleCreated (EventArgs e)
+ {
+ base.OnHandleCreated (e);
+ }
+
+ protected override void OnHandleDestroyed (EventArgs e)
+ {
+ base.OnHandleDestroyed (e);
+ }
+
+ protected override void OnMouseDown (MouseEventArgs e)
+ {
+ base.OnMouseDown (e);
+ }
+
+ protected override void OnMouseMove (MouseEventArgs e)
+ {
+ base.OnMouseMove (e);
+ }
+
+ protected override void OnMouseUp (MouseEventArgs e)
+ {
+ base.OnMouseUp (e);
+ }
+
+ [MonoTODO]
+ protected void OnNotifyPropertyValueUIItemsChanged(object sender, EventArgs e)
+ {
+ }
+
+ protected override void OnPaint (PaintEventArgs pevent)
+ {
+ base.OnPaint (pevent);
+ }
+
+ [MonoTODO]
+ protected virtual void OnPropertyTabChanged (PropertyTabChangedEventArgs e)
+ {
+ throw new NotImplementedException();
+ }
+
+ protected virtual void OnPropertyValueChanged (PropertyValueChangedEventArgs e)
+ {
+ if (PropertyValueChanged != null)
+ {
+ PropertyValueChanged(this, e);
+ current_property_value = selected_grid_item.Value;
+ }
+ }
+
+ protected override void OnResize (EventArgs e)
+ {
+ base.OnResize (e);
+ }
+
+ protected virtual void OnSelectedGridItemChanged (SelectedGridItemChangedEventArgs e)
+ {
+ if (SelectedGridItemChanged != null)
+ {
+ SelectedGridItemChanged(this, e);
+ }
+ }
+
+ protected virtual void OnSelectedObjectsChanged (EventArgs e)
+ {
+ if (SelectedObjectsChanged != null)
+ {
+ SelectedObjectsChanged(this, e);
+ }
+ }
+
+ protected override void OnSystemColorsChanged (EventArgs e)
+ {
+ base.OnSystemColorsChanged (e);
+ }
+
+ protected override void OnVisibleChanged (EventArgs e)
+ {
+ base.OnVisibleChanged (e);
+ }
+
+ protected override bool ProcessDialogKey (Keys keyData)
+ {
+ return base.ProcessDialogKey (keyData);
+ }
+
+ protected override void ScaleCore (float dx, float dy)
+ {
+ base.ScaleCore (dx, dy);
+ }
+
+ [MonoTODO]
+ protected void ShowEventsButton(bool value)
+ {
+ throw new NotImplementedException();
+ }
+
+ protected override void WndProc (ref Message m)
+ {
+ base.WndProc (ref m);
+ }
+ #endregion
+
+ #region Events
+ public event EventHandler PropertySortChanged;
+ public event PropertyTabChangedEventHandler PropertyTabChanged;
+ public event PropertyValueChangedEventHandler PropertyValueChanged;
+ public event SelectedGridItemChangedEventHandler SelectedGridItemChanged;
+ public event EventHandler SelectedObjectsChanged;
+
+ [Browsable(false)]
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public new event EventHandler BackgroundImageChanged;
+
+ [Browsable(false)]
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public new event EventHandler ForeColorChanged;
+ #endregion
+
+ #region Com2Interop.IComPropertyBrowser Interface
+ [MonoTODO]
+ bool ComponentModel.Com2Interop.IComPropertyBrowser.InPropertySet {
+ get {
+ throw new NotImplementedException();
+ }
+ }
+
+ [MonoTODO]
+ void ComponentModel.Com2Interop.IComPropertyBrowser.DropDownDone() {
+ throw new NotImplementedException();
+ }
+
+ [MonoTODO]
+ bool ComponentModel.Com2Interop.IComPropertyBrowser.EnsurePendingChangesCommitted() {
+ throw new NotImplementedException();
+ }
+
+ [MonoTODO]
+ void ComponentModel.Com2Interop.IComPropertyBrowser.HandleF4() {
+ throw new NotImplementedException();
+ }
+
+ [MonoTODO]
+ void ComponentModel.Com2Interop.IComPropertyBrowser.LoadState(Microsoft.Win32.RegistryKey key) {
+ throw new NotImplementedException();
+ }
+
+ [MonoTODO]
+ void ComponentModel.Com2Interop.IComPropertyBrowser.SaveState(Microsoft.Win32.RegistryKey key) {
+ throw new NotImplementedException();
+ }
+
+ [MonoTODO]
+ private event ComponentRenameEventHandler com_component_name_changed;
+ event ComponentRenameEventHandler ComponentModel.Com2Interop.IComPropertyBrowser.ComComponentNameChanged {
+ add { com_component_name_changed += value; }
+ remove { com_component_name_changed -= value; }
+ }
+ #endregion // Com2Interop.IComPropertyBrowser Interface
+
+ #region PropertyTabCollection Class
+ public class PropertyTabCollection : ICollection, IEnumerable
+ {
+ System.Collections.ArrayList list;
+ #region Private Constructors
+ internal PropertyTabCollection() {
+ list = new ArrayList();
+ }
+
+ #endregion // Private Constructors
+
+ public PropertyTab this[int index] {
+ get {
+ return (PropertyTab)list[index];
+ }
+ }
+
+ #region ICollection Members
+ bool ICollection.IsSynchronized
+ {
+ get {
+ return list.IsSynchronized;
+ }
+ }
+
+ void ICollection.CopyTo(Array array, int index)
+ {
+ list.CopyTo(array, index);
+ }
+
+ object ICollection.SyncRoot
+ {
+ get {
+ return list.SyncRoot;
+ }
+ }
+
+ #endregion
+
+ #region IEnumerable Members
+ public IEnumerator GetEnumerator() {
+ return list.GetEnumerator();
+ }
+
+ #endregion
+
+ #region ICollection Members
+ public int Count {
+ get {
+ return list.Count;
+ }
+ }
+
+ #endregion
+
+ #region Public Instance Methods
+ public void AddTabType(System.Type propertyTabType)
+ {
+ list.Add(Activator.CreateInstance(propertyTabType));
+ }
+ [MonoTODO]
+ public void AddTabType(System.Type propertyTabType,
+ System.ComponentModel.PropertyTabScope tabScope)
+ {
+ AddTabType(propertyTabType);
+ }
+ [MonoTODO]
+ public void Clear(System.ComponentModel.PropertyTabScope tabScope)
+ {
+ throw new NotImplementedException();
+ }
+ [MonoTODO]
+ public void RemoveTabType(System.Type propertyTabType)
+ {
+ throw new NotImplementedException();
+ }
+ #endregion
+ }
+ #endregion // PropertyTabCollection Class
+
+ #region Private Helper Methods
+
+ private void toolbar_ButtonClick (object sender, ToolBarButtonClickEventArgs e)
+ {
+ if (e.Button == alphabetic_toolbarbutton) {
+ this.PropertySort = PropertySort.Alphabetical;
+ }
+ else if (e.Button == categorized_toolbarbutton) {
+ this.PropertySort = PropertySort.Categorized;
+ }
+ UpdateToolBarButtons();
+ ReflectObjects();
+ Console.WriteLine("toolbar_ButtonClick");
+ property_grid_view.Refresh();
+ }
+
+ internal void UpdateToolBarButtons ()
+ {
+ if (PropertySort == PropertySort.Alphabetical) {
+ categorized_toolbarbutton.Pushed = false;
+ alphabetic_toolbarbutton.Pushed = true;
+ }
+ else if (PropertySort == PropertySort.Categorized) {
+ categorized_toolbarbutton.Pushed = true;
+ alphabetic_toolbarbutton.Pushed = false;
+ }
+ else {
+ categorized_toolbarbutton.Pushed = false;
+ alphabetic_toolbarbutton.Pushed = false;
+ }
+ }
+
+ private void OnResetPropertyClick (object sender, EventArgs e)
+ {
+ ResetSelectedProperty();
+ }
+
+ private void OnDescriptionClick (object sender, EventArgs e)
+ {
+ this.HelpVisible = !this.HelpVisible;
+ description_menuitem.Checked = this.HelpVisible;
+
+ }
+
+ private void ReflectObjects ()
+ {
+ grid_items = new GridItemCollection();
+ foreach (object obj in selected_objects) {
+ if (obj != null) {
+ PopulateGridItemCollection(obj,grid_items, true);
+ }
+ }
+ }
+
+ private void PopulateGridItemCollection (object obj, GridItemCollection grid_item_coll, bool recurse)
+ {
+ //TypeConverter converter = TypeDescriptor.GetConverter(obj);
+ PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(obj);
+ foreach (PropertyDescriptor property in properties) {
+ if (property.IsBrowsable) {
+ GridEntry grid_entry = new GridEntry(obj, property);
+ if (property_sort == PropertySort.Alphabetical || !recurse)
+ {
+ if (grid_item_coll[property.Name] == null)
+ grid_item_coll.Add(property.Name,grid_entry);
+ }
+ else if (property_sort == PropertySort.Categorized || property_sort == PropertySort.CategorizedAlphabetical)
+ {
+
+ string category = property.Category;
+ GridItem cat_item = grid_item_coll[category];
+ if (cat_item == null)
+ {
+ cat_item = new CategoryGridEntry(category);
+ grid_item_coll.Add(category,cat_item);
+ }
+ cat_item.GridItems.Add(property.Name,grid_entry);
+ }
+ if (recurse)
+ {
+ object propObj = property.GetValue(obj);
+ if (propObj != null)
+ PopulateGridItemCollection(propObj,grid_entry.GridItems, false);
+ }
+ }
+ }
+ }
+
+ #endregion // Private Helper Methods
+
+ private void help_panel_Paint(object sender, PaintEventArgs e)
+ {
+ e.Graphics.FillRectangle(ThemeEngine.Current.ResPool.GetSolidBrush(help_panel.BackColor), help_panel.ClientRectangle );
+ e.Graphics.DrawRectangle(SystemPens.ControlDark, 0,0,help_panel.Width-1,help_panel.Height-1 );
+ }
+#if NET_2_0
+
+ public bool UseCompatibleTextRendering {
+ get {
+ return use_compatible_text_rendering;
+ }
+
+ set {
+ use_compatible_text_rendering = value;
+ }
+ }
+#endif
+ }
+}