1 // Permission is hereby granted, free of charge, to any person obtaining
2 // a copy of this software and associated documentation files (the
3 // "Software"), to deal in the Software without restriction, including
4 // without limitation the rights to use, copy, modify, merge, publish,
5 // distribute, sublicense, and/or sell copies of the Software, and to
6 // permit persons to whom the Software is furnished to do so, subject to
7 // the following conditions:
9 // The above copyright notice and this permission notice shall be
10 // included in all copies or substantial portions of the Software.
12 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
13 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
14 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
15 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
16 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
17 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
18 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
20 // Copyright (c) 2004-2005 Novell, Inc.
23 // Jonathan Chambers (jonathan.chambers@ansys.com)
30 using System.Drawing.Design;
31 using System.ComponentModel;
32 using System.Collections;
33 using System.ComponentModel.Design;
34 using System.Reflection;
35 using System.Windows.Forms.Design;
36 using System.Windows.Forms.PropertyGridInternal;
38 namespace System.Windows.Forms
40 [Designer("System.Windows.Forms.Design.PropertyGridDesigner, " + Consts.AssemblySystem_Design, "System.ComponentModel.Design.IDesigner")]
41 public class PropertyGrid : System.Windows.Forms.ContainerControl, ComponentModel.Com2Interop.IComPropertyBrowser
43 #region Private Members
46 private const int GRID_ITEM_HEIGHT = 16;
47 private const int GRID_LEFT_COLUMN_WIDTH = 16;
48 private const int DIVIDER_PADDING = 2;
50 private AttributeCollection browsable_attributes = null;
51 private bool can_show_commands = false;
52 private Color commands_back_color;
53 private Color commands_fore_color;
54 private bool commands_visible;
55 private bool commands_visible_if_available;
56 private Point context_menu_default_location;
57 private bool large_buttons;
58 private Color line_color;
59 private PropertySort property_sort;
60 private PropertyTabCollection property_tabs;
61 private GridItem selected_grid_item;
62 internal GridItemCollection grid_items;
63 private object[] selected_objects;
64 private PropertyTab selected_tab;
66 private ImageList toolbar_imagelist;
67 private ToolBarButton categorized_toolbarbutton;
68 private ToolBarButton alphabetic_toolbarbutton;
69 private ToolBarButton separator_toolbarbutton;
70 private ToolBarButton propertypages_toolbarbutton;
72 internal ToolBar toolbar;
73 internal PropertyGridView property_grid_view;
74 internal Splitter splitter;
75 internal Panel help_panel;
76 internal Label help_title_label;
77 internal Label help_description_label;
78 private ContextMenu context_menu;
79 private MenuItem reset_menuitem;
80 private MenuItem description_menuitem;
81 private object current_property_value;
84 #endregion // Private Members
87 public PropertyGrid() {
88 selected_objects = new object[1];
89 grid_items = new GridItemCollection();
90 property_tabs = new PropertyTabCollection();
92 line_color = SystemColors.ScrollBar;
93 line_color = SystemColors.ScrollBar;
94 browsable_attributes = new AttributeCollection(new Attribute[] {});
95 commands_visible_if_available = false;
96 property_sort = PropertySort.Categorized;
98 property_grid_view = new PropertyGridView(this);
99 property_grid_view.Dock = DockStyle.Fill;
101 splitter = new Splitter();
102 splitter.Dock = DockStyle.Bottom;
104 help_panel = new Panel();
105 help_panel.Dock = DockStyle.Bottom;
106 //help_panel.DockPadding.All = 3;
107 help_panel.Height = 50;
108 help_panel.BackColor = SystemColors.Control;
111 help_title_label = new Label();
112 help_title_label.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
113 help_title_label.Name = "help_title_label";
114 help_title_label.Font = new Font(this.Font,FontStyle.Bold);
115 help_title_label.Text = "Title";
116 help_title_label.Location = new Point(2,2);
117 help_title_label.Height = 17;
118 help_title_label.Width = help_panel.Width - 4;
121 help_description_label = new Label();
122 help_description_label.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
123 help_description_label.Name = "help_description_label";
124 help_description_label.Font = this.Font;
125 help_description_label.Text = "The long important Description";
126 help_description_label.Location = new Point(2,help_title_label.Top+help_title_label.Height);
127 help_description_label.Width = help_panel.Width - 4;
128 help_description_label.Height = 17;
130 help_panel.Controls.Add(help_description_label);
131 help_panel.Controls.Add(help_title_label);
132 help_panel.Paint+=new PaintEventHandler(help_panel_Paint);
134 toolbar = new ToolBar();
135 toolbar.Dock = DockStyle.Top;
136 categorized_toolbarbutton = new ToolBarButton();
137 alphabetic_toolbarbutton = new ToolBarButton();
138 separator_toolbarbutton = new ToolBarButton();
139 propertypages_toolbarbutton = new ToolBarButton();
140 context_menu = new ContextMenu();
142 toolbar_imagelist = new ImageList();
143 toolbar_imagelist.ColorDepth = ColorDepth.Depth32Bit;
144 toolbar_imagelist.ImageSize = new System.Drawing.Size(16, 16);
145 toolbar_imagelist.TransparentColor = System.Drawing.Color.Transparent;
146 toolbar_imagelist.Images.Add( (Image)Locale.GetResource( "propertygrid_sort_category") );
147 toolbar_imagelist.Images.Add( (Image)Locale.GetResource( "propertygrid_sort_alphabetical") );
148 toolbar_imagelist.Images.Add( (Image)Locale.GetResource( "propertygrid_tab_properties") );
150 toolbar.Appearance = ToolBarAppearance.Flat;
151 toolbar.AutoSize = false;
152 toolbar.Buttons.AddRange(new ToolBarButton[] {
153 categorized_toolbarbutton,
154 alphabetic_toolbarbutton,
155 separator_toolbarbutton,
156 propertypages_toolbarbutton});
158 toolbar.ButtonSize = new System.Drawing.Size(20, 20);
159 toolbar.ImageList = toolbar_imagelist;
160 toolbar.Location = new System.Drawing.Point(0, 0);
161 toolbar.Name = "toolbar";
162 toolbar.ShowToolTips = true;
163 toolbar.Size = new System.Drawing.Size(256, 27);
164 toolbar.TabIndex = 0;
165 toolbar.ButtonClick += new ToolBarButtonClickEventHandler(toolbar_ButtonClick);
167 categorized_toolbarbutton.ImageIndex = 0;
168 categorized_toolbarbutton.Style = ToolBarButtonStyle.ToggleButton;
169 categorized_toolbarbutton.ToolTipText = (string)Locale.GetResource( "Categorized");
171 alphabetic_toolbarbutton.ImageIndex = 1;
172 alphabetic_toolbarbutton.Style = ToolBarButtonStyle.ToggleButton;
173 alphabetic_toolbarbutton.ToolTipText = (string)Locale.GetResource( "Alphabetic");
175 separator_toolbarbutton.Style = ToolBarButtonStyle.Separator;
177 propertypages_toolbarbutton.Enabled = false;
178 propertypages_toolbarbutton.ImageIndex = 2;
179 propertypages_toolbarbutton.Style = ToolBarButtonStyle.ToggleButton;
180 propertypages_toolbarbutton.ToolTipText = "Property Pages";
183 reset_menuitem = context_menu.MenuItems.Add("Reset");
184 reset_menuitem.Click +=new EventHandler(OnResetPropertyClick);
185 context_menu.MenuItems.Add("-");
186 description_menuitem = context_menu.MenuItems.Add("Description");
187 description_menuitem.Click += new EventHandler(OnDescriptionClick);
188 description_menuitem.Checked = this.HelpVisible;
189 this.ContextMenu = context_menu;
190 toolbar.ContextMenu = context_menu;
192 this.Controls.Add(property_grid_view);
193 this.Controls.Add(toolbar);
194 this.Controls.Add(splitter);
195 this.Controls.Add(help_panel);
196 this.Name = "PropertyGrid";
197 this.Size = new System.Drawing.Size(256, 400);
201 //TextChanged+=new System.EventHandler(RedrawEvent);
202 //ForeColorChanged+=new EventHandler(RedrawEvent);
203 //BackColorChanged+=new System.EventHandler(RedrawEvent);
204 //FontChanged+=new EventHandler(RedrawEvent);
205 //SizeChanged+=new EventHandler(RedrawEvent);
207 UpdateToolBarButtons();
209 #endregion // Constructors
211 #region Public Instance Properties
213 [BrowsableAttribute(false)]
214 [EditorBrowsableAttribute(EditorBrowsableState.Advanced)]
215 [DesignerSerializationVisibilityAttribute(DesignerSerializationVisibility.Hidden)]
216 public AttributeCollection BrowsableAttributes {
218 return browsable_attributes;
222 if (browsable_attributes == value) {
226 browsable_attributes = value;
231 [EditorBrowsable(EditorBrowsableState.Never)]
232 public override bool AutoScroll {
234 return base.AutoScroll;
237 base.AutoScroll = value;
241 public override Color BackColor {
243 return base.BackColor;
247 if (base.BackColor == value) {
250 base.BackColor = value;
255 [EditorBrowsable(EditorBrowsableState.Never)]
256 public override Image BackgroundImage {
258 return base.BackgroundImage;
261 base.BackgroundImage = value;
266 [BrowsableAttribute(false)]
267 [EditorBrowsableAttribute(EditorBrowsableState.Advanced)]
268 public virtual bool CanShowCommands {
270 return can_show_commands;
274 public Color CommandsBackColor {
276 return commands_back_color;
280 if (commands_back_color == value) {
283 commands_back_color = value;
287 public Color CommandsForeColor {
289 return commands_fore_color;
293 if (commands_fore_color == value) {
296 commands_fore_color = value;
300 [BrowsableAttribute(false)]
301 [EditorBrowsableAttribute(EditorBrowsableState.Advanced)]
302 public virtual bool CommandsVisible {
304 return commands_visible;
308 [DefaultValue(false)]
309 public virtual bool CommandsVisibleIfAvailable {
311 return commands_visible_if_available;
315 if (commands_visible_if_available == value) {
318 commands_visible_if_available = value;
322 [BrowsableAttribute(false)]
323 [EditorBrowsableAttribute(EditorBrowsableState.Advanced)]
324 [DesignerSerializationVisibilityAttribute(DesignerSerializationVisibility.Hidden)]
325 public Point ContextMenuDefaultLocation {
327 return context_menu_default_location;
332 [EditorBrowsable(EditorBrowsableState.Never)]
333 [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
334 public new Control.ControlCollection Controls {
336 return base.Controls;
341 [EditorBrowsable(EditorBrowsableState.Never)]
342 public override Color ForeColor
345 return base.ForeColor;
348 base.ForeColor = value;
352 public Color HelpBackColor {
355 return help_panel.BackColor;
359 if (help_panel.BackColor == value) {
363 help_panel.BackColor = value;
367 public Color HelpForeColor {
369 return help_panel.ForeColor;
373 if (help_panel.ForeColor == value) {
377 help_panel.ForeColor = value;
383 public virtual bool HelpVisible {
385 return help_panel.Visible;
389 if (help_panel.Visible == value) {
393 help_panel.Visible = value;
397 public bool LargeButtons {
399 return large_buttons;
403 if (large_buttons == value) {
407 large_buttons = value;
411 public Color LineColor {
417 if (line_color == value) {
425 [DefaultValue(PropertySort.CategorizedAlphabetical)]
426 public PropertySort PropertySort {
428 return property_sort;
432 if (!Enum.IsDefined (typeof (PropertySort), value)) {
433 throw new InvalidEnumArgumentException (string.Format("Enum argument value '{0}' is not valid for PropertySort", value));
436 if (property_sort == value) {
440 property_sort = value;
443 Console.WriteLine("PropertySort");
444 property_grid_view.Refresh();
446 if (PropertySortChanged != null) {
447 PropertySortChanged(this, EventArgs.Empty);
452 [BrowsableAttribute(false)]
453 [EditorBrowsableAttribute(EditorBrowsableState.Advanced)]
454 [DesignerSerializationVisibilityAttribute(DesignerSerializationVisibility.Hidden)]
455 public PropertyTabCollection PropertyTabs {
457 return property_tabs;
461 [BrowsableAttribute(false)]
462 [EditorBrowsableAttribute(EditorBrowsableState.Advanced)]
463 [DesignerSerializationVisibilityAttribute(DesignerSerializationVisibility.Hidden)]
464 public GridItem SelectedGridItem {
466 return selected_grid_item;
470 if (selected_grid_item == value) {
474 GridItem oldItem = selected_grid_item;
475 selected_grid_item = value;
476 this.help_title_label.Text = selected_grid_item.Label;
477 if (selected_grid_item.PropertyDescriptor != null)
478 this.help_description_label.Text = selected_grid_item.PropertyDescriptor.Description;
480 Console.WriteLine("SelectedGridItem");
481 current_property_value = value.Value;
482 if (oldItem != null && oldItem.PropertyDescriptor != null)
483 oldItem.PropertyDescriptor.RemoveValueChanged(SelectedObject, new EventHandler(HandlePropertyValueChanged));
484 if (selected_grid_item.PropertyDescriptor != null)
485 selected_grid_item.PropertyDescriptor.AddValueChanged(SelectedObject, new EventHandler(HandlePropertyValueChanged));
486 OnSelectedGridItemChanged(new SelectedGridItemChangedEventArgs( oldItem, selected_grid_item));
491 private void HandlePropertyValueChanged(object sender, EventArgs e)
493 OnPropertyValueChanged(new PropertyValueChangedEventArgs( selected_grid_item, current_property_value));
497 [TypeConverter("System.Windows.Forms.PropertyGrid+SelectedObjectConverter, " + Consts.AssemblySystem_Windows_Forms)]
498 public object SelectedObject {
500 return selected_objects[0];
504 selected_objects = new object[] {value};
505 if (this.SelectedObject == null)
507 PropertyTabAttribute[] propTabs = (PropertyTabAttribute[])this.SelectedObject.GetType().GetCustomAttributes(typeof(PropertyTabAttribute),true);
508 if (propTabs.Length > 0)
510 foreach (Type tabType in propTabs[0].TabClasses)
512 this.PropertyTabs.AddTabType(tabType);
515 RefreshTabs(PropertyTabScope.Component);
516 Console.WriteLine("SelectedObject");
518 property_grid_view.Refresh();
522 [BrowsableAttribute(false)]
523 [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
524 public object[] SelectedObjects {
526 return selected_objects;
530 selected_objects = value;
535 [BrowsableAttribute(false)]
536 [EditorBrowsable(EditorBrowsableState.Advanced)]
537 [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
538 public PropertyTab SelectedTab {
544 public override ISite Site {
556 public virtual bool ToolbarVisible {
558 return toolbar.Visible;
562 if (toolbar.Visible == value) {
566 toolbar.Visible = value;
570 public Color ViewBackColor {
572 return property_grid_view.BackColor;
576 if (property_grid_view.BackColor == value) {
580 property_grid_view.BackColor = value;
584 public Color ViewForeColor {
586 return property_grid_view.ForeColor;
590 if (property_grid_view.ForeColor == value) {
594 property_grid_view.ForeColor = value;
598 #endregion // Public Instance Properties
600 #region Protected Instance Properties
602 protected override Size DefaultSize {
604 return base.DefaultSize;
610 [EditorBrowsable(EditorBrowsableState.Advanced)]
611 [DesignerSerializationVisibilityAttribute(DesignerSerializationVisibility.Hidden)]
612 protected virtual Type DefaultTabType {
614 return typeof(PropertiesTab);
618 protected bool DrawFlatToolbar {
620 return (toolbar.Appearance == ToolBarAppearance.Flat);
624 toolbar.Appearance = ToolBarAppearance.Flat;
626 toolbar.Appearance = ToolBarAppearance.Normal;
630 protected override bool ShowFocusCues {
632 return base.ShowFocusCues;
636 #endregion // Protected Instance Properties
638 #region Public Instance Methods
640 protected override void Dispose(bool val)
645 public void CollapseAllGridItems ()
647 foreach (GridItem item in this.grid_items)
649 item.Expanded = false;
653 public void ExpandAllGridItems ()
655 foreach (GridItem item in this.grid_items)
657 item.Expanded = true;
661 public override void Refresh ()
666 public void RefreshTabs (PropertyTabScope tabScope)
669 /*button = new ToolBarButton("C");
670 button.ImageIndex = 0;
671 this.toolbar.Buttons.Add(button);
672 button = new ToolBarButton();
673 button.ImageIndex = 0;
674 button.Style = ToolBarButtonStyle.Separator;
675 this.toolbar.Buttons.Add(button);
676 foreach (PropertyTab tab in this.PropertyTabs)
679 int index = toolbar.ImageList.Images.Count;
680 this.toolbar.ImageList.Images.Add(tab.Bitmap);
681 button = new ToolBarButton();
682 button.ImageIndex = index;
683 this.toolbar.Buttons.Add(button);
688 public void ResetSelectedProperty()
690 if (selected_grid_item == null || selected_grid_item.PropertyDescriptor == null)
693 selected_grid_item.PropertyDescriptor.ResetValue(SelectedObject);
695 #endregion // Public Instance Methods
697 #region Protected Instance Methods
699 protected virtual PropertyTab CreatePropertyTab(Type tabType)
701 return (PropertyTab)Activator.CreateInstance(tabType);
705 protected void OnComComponentNameChanged(ComponentRenameEventArgs e)
707 throw new NotImplementedException();
710 protected override void OnFontChanged(EventArgs e)
712 base.OnFontChanged (e);
715 protected override void OnGotFocus(EventArgs e)
721 protected override void OnHandleCreated (EventArgs e)
723 base.OnHandleCreated (e);
726 protected override void OnHandleDestroyed (EventArgs e)
728 base.OnHandleDestroyed (e);
731 protected override void OnMouseDown (MouseEventArgs e)
733 base.OnMouseDown (e);
736 protected override void OnMouseMove (MouseEventArgs e)
738 base.OnMouseMove (e);
741 protected override void OnMouseUp (MouseEventArgs e)
747 protected void OnNotifyPropertyValueUIItemsChanged(object sender, EventArgs e)
751 protected override void OnPaint (PaintEventArgs pevent)
753 base.OnPaint (pevent);
757 protected virtual void OnPropertyTabChanged (PropertyTabChangedEventArgs e)
759 throw new NotImplementedException();
762 protected virtual void OnPropertyValueChanged (PropertyValueChangedEventArgs e)
764 if (PropertyValueChanged != null)
766 PropertyValueChanged(this, e);
767 current_property_value = selected_grid_item.Value;
771 protected override void OnResize (EventArgs e)
776 protected virtual void OnSelectedGridItemChanged (SelectedGridItemChangedEventArgs e)
778 if (SelectedGridItemChanged != null)
780 SelectedGridItemChanged(this, e);
784 protected virtual void OnSelectedObjectsChanged (EventArgs e)
786 if (SelectedObjectsChanged != null)
788 SelectedObjectsChanged(this, e);
792 protected override void OnSystemColorsChanged (EventArgs e)
794 base.OnSystemColorsChanged (e);
797 protected override void OnVisibleChanged (EventArgs e)
799 base.OnVisibleChanged (e);
802 protected override bool ProcessDialogKey (Keys keyData)
804 return base.ProcessDialogKey (keyData);
807 protected override void ScaleCore (float dx, float dy)
809 base.ScaleCore (dx, dy);
813 protected void ShowEventsButton(bool value)
815 throw new NotImplementedException();
818 protected override void WndProc (ref Message m)
820 base.WndProc (ref m);
825 public event EventHandler PropertySortChanged;
826 public event PropertyTabChangedEventHandler PropertyTabChanged;
827 public event PropertyValueChangedEventHandler PropertyValueChanged;
828 public event SelectedGridItemChangedEventHandler SelectedGridItemChanged;
829 public event EventHandler SelectedObjectsChanged;
832 [EditorBrowsable(EditorBrowsableState.Never)]
833 public new event EventHandler BackgroundImageChanged;
836 [EditorBrowsable(EditorBrowsableState.Never)]
837 public new event EventHandler ForeColorChanged;
840 #region Com2Interop.IComPropertyBrowser Interface
842 bool ComponentModel.Com2Interop.IComPropertyBrowser.InPropertySet {
844 throw new NotImplementedException();
849 void ComponentModel.Com2Interop.IComPropertyBrowser.DropDownDone() {
850 throw new NotImplementedException();
854 bool ComponentModel.Com2Interop.IComPropertyBrowser.EnsurePendingChangesCommitted() {
855 throw new NotImplementedException();
859 void ComponentModel.Com2Interop.IComPropertyBrowser.HandleF4() {
860 throw new NotImplementedException();
864 void ComponentModel.Com2Interop.IComPropertyBrowser.LoadState(Microsoft.Win32.RegistryKey key) {
865 throw new NotImplementedException();
869 void ComponentModel.Com2Interop.IComPropertyBrowser.SaveState(Microsoft.Win32.RegistryKey key) {
870 throw new NotImplementedException();
874 private event ComponentRenameEventHandler com_component_name_changed;
875 event ComponentRenameEventHandler ComponentModel.Com2Interop.IComPropertyBrowser.ComComponentNameChanged {
876 add { com_component_name_changed += value; }
877 remove { com_component_name_changed -= value; }
879 #endregion // Com2Interop.IComPropertyBrowser Interface
881 #region PropertyTabCollection Class
882 public class PropertyTabCollection : ICollection, IEnumerable
884 System.Collections.ArrayList list;
885 #region Private Constructors
886 internal PropertyTabCollection() {
887 list = new ArrayList();
890 #endregion // Private Constructors
892 public PropertyTab this[int index] {
894 return (PropertyTab)list[index];
898 #region ICollection Members
899 bool ICollection.IsSynchronized
902 return list.IsSynchronized;
906 void ICollection.CopyTo(Array array, int index)
908 list.CopyTo(array, index);
911 object ICollection.SyncRoot
914 return list.SyncRoot;
920 #region IEnumerable Members
921 public IEnumerator GetEnumerator() {
922 return list.GetEnumerator();
927 #region ICollection Members
936 #region Public Instance Methods
937 public void AddTabType(System.Type propertyTabType)
939 list.Add(Activator.CreateInstance(propertyTabType));
942 public void AddTabType(System.Type propertyTabType,
943 System.ComponentModel.PropertyTabScope tabScope)
945 AddTabType(propertyTabType);
948 public void Clear(System.ComponentModel.PropertyTabScope tabScope)
950 throw new NotImplementedException();
953 public void RemoveTabType(System.Type propertyTabType)
955 throw new NotImplementedException();
959 #endregion // PropertyTabCollection Class
961 #region Private Helper Methods
963 private void toolbar_ButtonClick (object sender, ToolBarButtonClickEventArgs e)
965 if (e.Button == alphabetic_toolbarbutton) {
966 this.PropertySort = PropertySort.Alphabetical;
968 else if (e.Button == categorized_toolbarbutton) {
969 this.PropertySort = PropertySort.Categorized;
971 UpdateToolBarButtons();
973 Console.WriteLine("toolbar_ButtonClick");
974 property_grid_view.Refresh();
977 internal void UpdateToolBarButtons ()
979 if (PropertySort == PropertySort.Alphabetical) {
980 categorized_toolbarbutton.Pushed = false;
981 alphabetic_toolbarbutton.Pushed = true;
983 else if (PropertySort == PropertySort.Categorized) {
984 categorized_toolbarbutton.Pushed = true;
985 alphabetic_toolbarbutton.Pushed = false;
988 categorized_toolbarbutton.Pushed = false;
989 alphabetic_toolbarbutton.Pushed = false;
993 private void OnResetPropertyClick (object sender, EventArgs e)
995 ResetSelectedProperty();
998 private void OnDescriptionClick (object sender, EventArgs e)
1000 this.HelpVisible = !this.HelpVisible;
1001 description_menuitem.Checked = this.HelpVisible;
1005 private void ReflectObjects ()
1007 grid_items = new GridItemCollection();
1008 foreach (object obj in selected_objects) {
1010 PopulateGridItemCollection(obj,grid_items, true);
1015 private void PopulateGridItemCollection (object obj, GridItemCollection grid_item_coll, bool recurse)
1017 //TypeConverter converter = TypeDescriptor.GetConverter(obj);
1018 PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(obj);
1019 foreach (PropertyDescriptor property in properties) {
1020 if (property.IsBrowsable) {
1021 GridEntry grid_entry = new GridEntry(obj, property);
1022 if (property_sort == PropertySort.Alphabetical || !recurse)
1024 if (grid_item_coll[property.Name] == null)
1025 grid_item_coll.Add(property.Name,grid_entry);
1027 else if (property_sort == PropertySort.Categorized || property_sort == PropertySort.CategorizedAlphabetical)
1030 string category = property.Category;
1031 GridItem cat_item = grid_item_coll[category];
1032 if (cat_item == null)
1034 cat_item = new CategoryGridEntry(category);
1035 grid_item_coll.Add(category,cat_item);
1037 cat_item.GridItems.Add(property.Name,grid_entry);
1041 object propObj = property.GetValue(obj);
1042 if (propObj != null)
1043 PopulateGridItemCollection(propObj,grid_entry.GridItems, false);
1049 #endregion // Private Helper Methods
1051 private void help_panel_Paint(object sender, PaintEventArgs e)
1053 e.Graphics.FillRectangle(ThemeEngine.Current.ResPool.GetSolidBrush(help_panel.BackColor), help_panel.ClientRectangle );
1054 e.Graphics.DrawRectangle(SystemPens.ControlDark, 0,0,help_panel.Width-1,help_panel.Height-1 );