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;
83 #endregion // Private Members
86 public PropertyGrid() {
87 selected_objects = new object[1];
88 grid_items = new GridItemCollection();
89 property_tabs = new PropertyTabCollection();
91 line_color = SystemColors.ScrollBar;
92 line_color = SystemColors.ScrollBar;
93 browsable_attributes = new AttributeCollection(new Attribute[] {});
94 commands_visible_if_available = false;
95 property_sort = PropertySort.Categorized;
97 property_grid_view = new PropertyGridView(this);
98 property_grid_view.Dock = DockStyle.Fill;
100 splitter = new Splitter();
101 splitter.Dock = DockStyle.Bottom;
103 help_panel = new Panel();
104 help_panel.Dock = DockStyle.Bottom;
105 //help_panel.DockPadding.All = 3;
106 help_panel.Height = 50;
107 help_panel.BackColor = SystemColors.Control;
110 help_title_label = new Label();
111 help_title_label.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
112 help_title_label.Name = "help_title_label";
113 help_title_label.Font = new Font(this.Font,FontStyle.Bold);
114 help_title_label.Text = "Title";
115 help_title_label.Location = new Point(2,2);
116 help_title_label.Height = 17;
117 help_title_label.Width = help_panel.Width - 4;
120 help_description_label = new Label();
121 help_description_label.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
122 help_description_label.Name = "help_description_label";
123 help_description_label.Font = this.Font;
124 help_description_label.Text = "The long important Description";
125 help_description_label.Location = new Point(2,help_title_label.Top+help_title_label.Height);
126 help_description_label.Width = help_panel.Width - 4;
127 help_description_label.Height = 17;
129 help_panel.Controls.Add(help_description_label);
130 help_panel.Controls.Add(help_title_label);
131 help_panel.Paint+=new PaintEventHandler(help_panel_Paint);
133 toolbar = new ToolBar();
134 toolbar.Dock = DockStyle.Top;
135 categorized_toolbarbutton = new ToolBarButton();
136 alphabetic_toolbarbutton = new ToolBarButton();
137 separator_toolbarbutton = new ToolBarButton();
138 propertypages_toolbarbutton = new ToolBarButton();
139 context_menu = new ContextMenu();
141 toolbar_imagelist = new ImageList();
142 toolbar_imagelist.ColorDepth = ColorDepth.Depth32Bit;
143 toolbar_imagelist.ImageSize = new System.Drawing.Size(16, 16);
144 toolbar_imagelist.TransparentColor = System.Drawing.Color.Transparent;
145 toolbar_imagelist.Images.Add( (Image)Locale.GetResource( "propertygrid_sort_category") );
146 toolbar_imagelist.Images.Add( (Image)Locale.GetResource( "propertygrid_sort_alphabetical") );
147 toolbar_imagelist.Images.Add( (Image)Locale.GetResource( "propertygrid_tab_properties") );
149 toolbar.Appearance = ToolBarAppearance.Flat;
150 toolbar.AutoSize = false;
151 toolbar.Buttons.AddRange(new ToolBarButton[] {
152 categorized_toolbarbutton,
153 alphabetic_toolbarbutton,
154 separator_toolbarbutton,
155 propertypages_toolbarbutton});
157 toolbar.ButtonSize = new System.Drawing.Size(20, 20);
158 toolbar.ImageList = toolbar_imagelist;
159 toolbar.Location = new System.Drawing.Point(0, 0);
160 toolbar.Name = "toolbar";
161 toolbar.ShowToolTips = true;
162 toolbar.Size = new System.Drawing.Size(256, 27);
163 toolbar.TabIndex = 0;
164 toolbar.ButtonClick += new ToolBarButtonClickEventHandler(toolbar_ButtonClick);
166 categorized_toolbarbutton.ImageIndex = 0;
167 categorized_toolbarbutton.Style = ToolBarButtonStyle.ToggleButton;
168 categorized_toolbarbutton.ToolTipText = (string)Locale.GetResource( "Categorized");
170 alphabetic_toolbarbutton.ImageIndex = 1;
171 alphabetic_toolbarbutton.Style = ToolBarButtonStyle.ToggleButton;
172 alphabetic_toolbarbutton.ToolTipText = (string)Locale.GetResource( "Alphabetic");
174 separator_toolbarbutton.Style = ToolBarButtonStyle.Separator;
176 propertypages_toolbarbutton.Enabled = false;
177 propertypages_toolbarbutton.ImageIndex = 2;
178 propertypages_toolbarbutton.Style = ToolBarButtonStyle.ToggleButton;
179 propertypages_toolbarbutton.ToolTipText = "Property Pages";
182 reset_menuitem = context_menu.MenuItems.Add("Reset");
183 reset_menuitem.Click +=new EventHandler(OnResetPropertyClick);
184 context_menu.MenuItems.Add("-");
185 description_menuitem = context_menu.MenuItems.Add("Description");
186 description_menuitem.Click += new EventHandler(OnDescriptionClick);
187 description_menuitem.Checked = this.HelpVisible;
188 this.ContextMenu = context_menu;
189 toolbar.ContextMenu = context_menu;
191 this.Controls.Add(property_grid_view);
192 this.Controls.Add(toolbar);
193 this.Controls.Add(splitter);
194 this.Controls.Add(help_panel);
195 this.Name = "PropertyGrid";
196 this.Size = new System.Drawing.Size(256, 400);
200 //TextChanged+=new System.EventHandler(RedrawEvent);
201 //ForeColorChanged+=new EventHandler(RedrawEvent);
202 //BackColorChanged+=new System.EventHandler(RedrawEvent);
203 //FontChanged+=new EventHandler(RedrawEvent);
204 //SizeChanged+=new EventHandler(RedrawEvent);
206 UpdateToolBarButtons();
208 #endregion // Constructors
210 #region Public Instance Properties
212 [BrowsableAttribute(false)]
213 [EditorBrowsableAttribute(EditorBrowsableState.Advanced)]
214 [DesignerSerializationVisibilityAttribute(DesignerSerializationVisibility.Hidden)]
215 public AttributeCollection BrowsableAttributes {
217 return browsable_attributes;
221 if (browsable_attributes == value) {
225 browsable_attributes = value;
230 [EditorBrowsable(EditorBrowsableState.Never)]
231 public override bool AutoScroll {
233 return base.AutoScroll;
236 base.AutoScroll = value;
240 public override Color BackColor {
242 return base.BackColor;
246 if (base.BackColor == value) {
249 base.BackColor = value;
254 [EditorBrowsable(EditorBrowsableState.Never)]
255 public override Image BackgroundImage {
257 return base.BackgroundImage;
260 base.BackgroundImage = value;
265 [BrowsableAttribute(false)]
266 [EditorBrowsableAttribute(EditorBrowsableState.Advanced)]
267 public virtual bool CanShowCommands {
269 return can_show_commands;
273 public Color CommandsBackColor {
275 return commands_back_color;
279 if (commands_back_color == value) {
282 commands_back_color = value;
286 public Color CommandsForeColor {
288 return commands_fore_color;
292 if (commands_fore_color == value) {
295 commands_fore_color = value;
299 [BrowsableAttribute(false)]
300 [EditorBrowsableAttribute(EditorBrowsableState.Advanced)]
301 public virtual bool CommandsVisible {
303 return commands_visible;
307 [DefaultValue(false)]
308 public virtual bool CommandsVisibleIfAvailable {
310 return commands_visible_if_available;
314 if (commands_visible_if_available == value) {
317 commands_visible_if_available = value;
321 [BrowsableAttribute(false)]
322 [EditorBrowsableAttribute(EditorBrowsableState.Advanced)]
323 [DesignerSerializationVisibilityAttribute(DesignerSerializationVisibility.Hidden)]
324 public Point ContextMenuDefaultLocation {
326 return context_menu_default_location;
331 [EditorBrowsable(EditorBrowsableState.Never)]
332 [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
333 public new Control.ControlCollection Controls {
335 return base.Controls;
340 [EditorBrowsable(EditorBrowsableState.Never)]
341 public override Color ForeColor
344 return base.ForeColor;
347 base.ForeColor = value;
351 public Color HelpBackColor {
354 return help_panel.BackColor;
358 if (help_panel.BackColor == value) {
362 help_panel.BackColor = value;
366 public Color HelpForeColor {
368 return help_panel.ForeColor;
372 if (help_panel.ForeColor == value) {
376 help_panel.ForeColor = value;
382 public virtual bool HelpVisible {
384 return help_panel.Visible;
388 if (help_panel.Visible == value) {
392 help_panel.Visible = value;
396 public bool LargeButtons {
398 return large_buttons;
402 if (large_buttons == value) {
406 large_buttons = value;
410 public Color LineColor {
416 if (line_color == value) {
424 [DefaultValue(PropertySort.CategorizedAlphabetical)]
425 public PropertySort PropertySort {
427 return property_sort;
431 if (!Enum.IsDefined (typeof (PropertySort), value)) {
432 throw new InvalidEnumArgumentException (string.Format("Enum argument value '{0}' is not valid for PropertySort", value));
435 if (property_sort == value) {
439 property_sort = value;
442 Console.WriteLine("PropertySort");
443 property_grid_view.Refresh();
445 if (PropertySortChanged != null) {
446 PropertySortChanged(this, EventArgs.Empty);
451 [BrowsableAttribute(false)]
452 [EditorBrowsableAttribute(EditorBrowsableState.Advanced)]
453 [DesignerSerializationVisibilityAttribute(DesignerSerializationVisibility.Hidden)]
454 public PropertyTabCollection PropertyTabs {
456 return property_tabs;
460 [BrowsableAttribute(false)]
461 [EditorBrowsableAttribute(EditorBrowsableState.Advanced)]
462 [DesignerSerializationVisibilityAttribute(DesignerSerializationVisibility.Hidden)]
463 public GridItem SelectedGridItem {
465 return selected_grid_item;
469 if (selected_grid_item == value) {
473 GridItem oldItem = selected_grid_item;
474 selected_grid_item = value;
475 this.help_title_label.Text = selected_grid_item.Label;
476 if (selected_grid_item.PropertyDescriptor != null)
477 this.help_description_label.Text = selected_grid_item.PropertyDescriptor.Description;
479 Console.WriteLine("SelectedGridItem");
480 current_property_value = value.Value;
481 if (oldItem != null && oldItem.PropertyDescriptor != null)
482 oldItem.PropertyDescriptor.RemoveValueChanged(SelectedObject, new EventHandler(HandlePropertyValueChanged));
483 if (selected_grid_item.PropertyDescriptor != null)
484 selected_grid_item.PropertyDescriptor.AddValueChanged(SelectedObject, new EventHandler(HandlePropertyValueChanged));
485 OnSelectedGridItemChanged(new SelectedGridItemChangedEventArgs( oldItem, selected_grid_item));
490 private void HandlePropertyValueChanged(object sender, EventArgs e)
492 OnPropertyValueChanged(new PropertyValueChangedEventArgs( selected_grid_item, current_property_value));
496 [TypeConverter("System.Windows.Forms.PropertyGrid+SelectedObjectConverter, " + Consts.AssemblySystem_Windows_Forms)]
497 public object SelectedObject {
499 return selected_objects[0];
503 selected_objects = new object[] {value};
504 if (this.SelectedObject == null)
506 PropertyTabAttribute[] propTabs = (PropertyTabAttribute[])this.SelectedObject.GetType().GetCustomAttributes(typeof(PropertyTabAttribute),true);
507 if (propTabs.Length > 0)
509 foreach (Type tabType in propTabs[0].TabClasses)
511 this.PropertyTabs.AddTabType(tabType);
514 RefreshTabs(PropertyTabScope.Component);
515 Console.WriteLine("SelectedObject");
517 property_grid_view.Refresh();
521 [BrowsableAttribute(false)]
522 [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
523 public object[] SelectedObjects {
525 return selected_objects;
529 selected_objects = value;
534 [BrowsableAttribute(false)]
535 [EditorBrowsable(EditorBrowsableState.Advanced)]
536 [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
537 public PropertyTab SelectedTab {
543 public override ISite Site {
555 public virtual bool ToolbarVisible {
557 return toolbar.Visible;
561 if (toolbar.Visible == value) {
565 toolbar.Visible = value;
569 public Color ViewBackColor {
571 return property_grid_view.BackColor;
575 if (property_grid_view.BackColor == value) {
579 property_grid_view.BackColor = value;
583 public Color ViewForeColor {
585 return property_grid_view.ForeColor;
589 if (property_grid_view.ForeColor == value) {
593 property_grid_view.ForeColor = value;
597 #endregion // Public Instance Properties
599 #region Protected Instance Properties
601 protected override Size DefaultSize {
603 return base.DefaultSize;
609 [EditorBrowsable(EditorBrowsableState.Advanced)]
610 [DesignerSerializationVisibilityAttribute(DesignerSerializationVisibility.Hidden)]
611 protected virtual Type DefaultTabType {
613 return typeof(PropertiesTab);
617 protected bool DrawFlatToolbar {
619 return (toolbar.Appearance == ToolBarAppearance.Flat);
623 toolbar.Appearance = ToolBarAppearance.Flat;
625 toolbar.Appearance = ToolBarAppearance.Normal;
629 protected override bool ShowFocusCues {
631 return base.ShowFocusCues;
635 #endregion // Protected Instance Properties
637 #region Public Instance Methods
639 protected override void Dispose(bool val)
644 public void CollapseAllGridItems ()
646 foreach (GridItem item in this.grid_items)
648 item.Expanded = false;
652 public void ExpandAllGridItems ()
654 foreach (GridItem item in this.grid_items)
656 item.Expanded = true;
660 public override void Refresh ()
665 public void RefreshTabs (PropertyTabScope tabScope)
668 /*button = new ToolBarButton("C");
669 button.ImageIndex = 0;
670 this.toolbar.Buttons.Add(button);
671 button = new ToolBarButton();
672 button.ImageIndex = 0;
673 button.Style = ToolBarButtonStyle.Separator;
674 this.toolbar.Buttons.Add(button);
675 foreach (PropertyTab tab in this.PropertyTabs)
678 int index = toolbar.ImageList.Images.Count;
679 this.toolbar.ImageList.Images.Add(tab.Bitmap);
680 button = new ToolBarButton();
681 button.ImageIndex = index;
682 this.toolbar.Buttons.Add(button);
687 public void ResetSelectedProperty()
689 if (selected_grid_item == null || selected_grid_item.PropertyDescriptor == null)
692 selected_grid_item.PropertyDescriptor.ResetValue(SelectedObject);
694 #endregion // Public Instance Methods
696 #region Protected Instance Methods
698 protected virtual PropertyTab CreatePropertyTab(Type tabType)
700 return (PropertyTab)Activator.CreateInstance(tabType);
704 protected void OnComComponentNameChanged(ComponentRenameEventArgs e)
706 throw new NotImplementedException();
709 protected override void OnFontChanged(EventArgs e)
711 base.OnFontChanged (e);
714 protected override void OnGotFocus(EventArgs e)
720 protected override void OnHandleCreated (EventArgs e)
722 base.OnHandleCreated (e);
725 protected override void OnHandleDestroyed (EventArgs e)
727 base.OnHandleDestroyed (e);
730 protected override void OnMouseDown (MouseEventArgs e)
732 base.OnMouseDown (e);
735 protected override void OnMouseMove (MouseEventArgs e)
737 base.OnMouseMove (e);
740 protected override void OnMouseUp (MouseEventArgs e)
746 protected void OnNotifyPropertyValueUIItemsChanged(object sender, EventArgs e)
750 protected override void OnPaint (PaintEventArgs pevent)
752 base.OnPaint (pevent);
756 protected virtual void OnPropertyTabChanged (PropertyTabChangedEventArgs e)
758 throw new NotImplementedException();
761 protected virtual void OnPropertyValueChanged (PropertyValueChangedEventArgs e)
763 if (PropertyValueChanged != null)
765 PropertyValueChanged(this, e);
766 current_property_value = selected_grid_item.Value;
770 protected override void OnResize (EventArgs e)
775 protected virtual void OnSelectedGridItemChanged (SelectedGridItemChangedEventArgs e)
777 if (SelectedGridItemChanged != null)
779 SelectedGridItemChanged(this, e);
783 protected virtual void OnSelectedObjectsChanged (EventArgs e)
785 if (SelectedObjectsChanged != null)
787 SelectedObjectsChanged(this, e);
791 protected override void OnSystemColorsChanged (EventArgs e)
793 base.OnSystemColorsChanged (e);
796 protected override void OnVisibleChanged (EventArgs e)
798 base.OnVisibleChanged (e);
801 protected override bool ProcessDialogKey (Keys keyData)
803 return base.ProcessDialogKey (keyData);
806 protected override void ScaleCore (float dx, float dy)
808 base.ScaleCore (dx, dy);
812 protected void ShowEventsButton(bool value)
814 throw new NotImplementedException();
817 protected override void WndProc (ref Message m)
819 base.WndProc (ref m);
824 public event EventHandler PropertySortChanged;
825 public event PropertyTabChangedEventHandler PropertyTabChanged;
826 public event PropertyValueChangedEventHandler PropertyValueChanged;
827 public event SelectedGridItemChangedEventHandler SelectedGridItemChanged;
828 public event EventHandler SelectedObjectsChanged;
831 [EditorBrowsable(EditorBrowsableState.Never)]
832 public new event EventHandler BackgroundImageChanged {
833 add { base.BackgroundImageChanged += value; }
834 remove { base.BackgroundImageChanged -= value; }
838 [EditorBrowsable(EditorBrowsableState.Never)]
839 public new event EventHandler ForeColorChanged {
840 add { base.ForeColorChanged += value; }
841 remove { base.ForeColorChanged -= value; }
845 #region Com2Interop.IComPropertyBrowser Interface
847 bool ComponentModel.Com2Interop.IComPropertyBrowser.InPropertySet {
849 throw new NotImplementedException();
854 void ComponentModel.Com2Interop.IComPropertyBrowser.DropDownDone() {
855 throw new NotImplementedException();
859 bool ComponentModel.Com2Interop.IComPropertyBrowser.EnsurePendingChangesCommitted() {
860 throw new NotImplementedException();
864 void ComponentModel.Com2Interop.IComPropertyBrowser.HandleF4() {
865 throw new NotImplementedException();
869 void ComponentModel.Com2Interop.IComPropertyBrowser.LoadState(Microsoft.Win32.RegistryKey key) {
870 throw new NotImplementedException();
874 void ComponentModel.Com2Interop.IComPropertyBrowser.SaveState(Microsoft.Win32.RegistryKey key) {
875 throw new NotImplementedException();
879 private event ComponentRenameEventHandler com_component_name_changed;
880 event ComponentRenameEventHandler ComponentModel.Com2Interop.IComPropertyBrowser.ComComponentNameChanged {
881 add { com_component_name_changed += value; }
882 remove { com_component_name_changed -= value; }
884 #endregion // Com2Interop.IComPropertyBrowser Interface
886 #region PropertyTabCollection Class
887 public class PropertyTabCollection : ICollection, IEnumerable
889 System.Collections.ArrayList list;
890 #region Private Constructors
891 internal PropertyTabCollection() {
892 list = new ArrayList();
895 #endregion // Private Constructors
897 public PropertyTab this[int index] {
899 return (PropertyTab)list[index];
903 #region ICollection Members
904 bool ICollection.IsSynchronized
907 return list.IsSynchronized;
911 void ICollection.CopyTo(Array array, int index)
913 list.CopyTo(array, index);
916 object ICollection.SyncRoot
919 return list.SyncRoot;
925 #region IEnumerable Members
926 public IEnumerator GetEnumerator() {
927 return list.GetEnumerator();
932 #region ICollection Members
941 #region Public Instance Methods
942 public void AddTabType(System.Type propertyTabType)
944 list.Add(Activator.CreateInstance(propertyTabType));
947 public void AddTabType(System.Type propertyTabType,
948 System.ComponentModel.PropertyTabScope tabScope)
950 AddTabType(propertyTabType);
953 public void Clear(System.ComponentModel.PropertyTabScope tabScope)
955 throw new NotImplementedException();
958 public void RemoveTabType(System.Type propertyTabType)
960 throw new NotImplementedException();
964 #endregion // PropertyTabCollection Class
966 #region Private Helper Methods
968 private void toolbar_ButtonClick (object sender, ToolBarButtonClickEventArgs e)
970 if (e.Button == alphabetic_toolbarbutton) {
971 this.PropertySort = PropertySort.Alphabetical;
973 else if (e.Button == categorized_toolbarbutton) {
974 this.PropertySort = PropertySort.Categorized;
976 UpdateToolBarButtons();
978 Console.WriteLine("toolbar_ButtonClick");
979 property_grid_view.Refresh();
982 internal void UpdateToolBarButtons ()
984 if (PropertySort == PropertySort.Alphabetical) {
985 categorized_toolbarbutton.Pushed = false;
986 alphabetic_toolbarbutton.Pushed = true;
988 else if (PropertySort == PropertySort.Categorized) {
989 categorized_toolbarbutton.Pushed = true;
990 alphabetic_toolbarbutton.Pushed = false;
993 categorized_toolbarbutton.Pushed = false;
994 alphabetic_toolbarbutton.Pushed = false;
998 private void OnResetPropertyClick (object sender, EventArgs e)
1000 ResetSelectedProperty();
1003 private void OnDescriptionClick (object sender, EventArgs e)
1005 this.HelpVisible = !this.HelpVisible;
1006 description_menuitem.Checked = this.HelpVisible;
1010 private void ReflectObjects ()
1012 grid_items = new GridItemCollection();
1013 foreach (object obj in selected_objects) {
1015 PopulateGridItemCollection(obj,grid_items, true);
1020 private void PopulateGridItemCollection (object obj, GridItemCollection grid_item_coll, bool recurse)
1022 //TypeConverter converter = TypeDescriptor.GetConverter(obj);
1023 PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(obj);
1024 foreach (PropertyDescriptor property in properties) {
1025 if (property.IsBrowsable) {
1026 GridEntry grid_entry = new GridEntry(obj, property);
1027 if (property_sort == PropertySort.Alphabetical || !recurse)
1029 if (grid_item_coll[property.Name] == null)
1030 grid_item_coll.Add(property.Name,grid_entry);
1032 else if (property_sort == PropertySort.Categorized || property_sort == PropertySort.CategorizedAlphabetical)
1035 string category = property.Category;
1036 GridItem cat_item = grid_item_coll[category];
1037 if (cat_item == null)
1039 cat_item = new CategoryGridEntry(category);
1040 grid_item_coll.Add(category,cat_item);
1042 cat_item.GridItems.Add(property.Name,grid_entry);
1046 object propObj = property.GetValue(obj);
1047 if (propObj != null)
1048 PopulateGridItemCollection(propObj,grid_entry.GridItems, false);
1054 #endregion // Private Helper Methods
1056 private void help_panel_Paint(object sender, PaintEventArgs e)
1058 e.Graphics.FillRectangle(ThemeEngine.Current.ResPool.GetSolidBrush(help_panel.BackColor), help_panel.ClientRectangle );
1059 e.Graphics.DrawRectangle(SystemPens.ControlDark, 0,0,help_panel.Width-1,help_panel.Height-1 );
1063 public bool UseCompatibleTextRendering {
1065 return use_compatible_text_rendering;
1069 use_compatible_text_rendering = value;