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 {
39 [Designer("System.Windows.Forms.Design.PropertyGridDesigner, " + Consts.AssemblySystem_Design, "System.ComponentModel.Design.IDesigner")]
40 public class PropertyGrid : System.Windows.Forms.ContainerControl, ComponentModel.Com2Interop.IComPropertyBrowser {
41 #region Private Members
44 private const int GRID_ITEM_HEIGHT = 16;
45 private const int GRID_LEFT_COLUMN_WIDTH = 16;
46 private const int DIVIDER_PADDING = 2;
48 private AttributeCollection browsable_attributes = null;
49 private bool can_show_commands = false;
50 private Color commands_back_color;
51 private Color commands_fore_color;
52 private bool commands_visible;
53 private bool commands_visible_if_available;
54 private Point context_menu_default_location;
55 private bool large_buttons;
56 private Color line_color;
57 private PropertySort property_sort;
58 private PropertyTabCollection property_tabs;
59 private GridItem selected_grid_item;
60 internal GridItemCollection grid_items;
61 private object[] selected_objects;
62 private PropertyTab selected_tab;
64 private ImageList toolbar_imagelist;
65 private ToolBarButton categorized_toolbarbutton;
66 private ToolBarButton alphabetic_toolbarbutton;
67 private ToolBarButton separator_toolbarbutton;
68 private ToolBarButton propertypages_toolbarbutton;
70 internal ToolBar toolbar;
71 internal PropertyGridView property_grid_view;
72 internal Splitter splitter;
73 internal Panel help_panel;
74 internal Label help_title_label;
75 internal Label help_description_label;
76 private ContextMenu context_menu;
77 private MenuItem reset_menuitem;
78 private MenuItem description_menuitem;
79 private object current_property_value;
81 #endregion // Private Members
84 public PropertyGrid() {
85 selected_objects = new object[1];
86 grid_items = new GridItemCollection();
87 property_tabs = new PropertyTabCollection();
89 line_color = SystemColors.ScrollBar;
90 line_color = SystemColors.ScrollBar;
91 browsable_attributes = new AttributeCollection(new Attribute[] {});
92 commands_visible_if_available = false;
93 property_sort = PropertySort.Categorized;
95 property_grid_view = new PropertyGridView(this);
97 splitter = new Splitter();
98 splitter.Dock = DockStyle.Bottom;
100 help_panel = new Panel();
101 help_panel.Dock = DockStyle.Bottom;
102 //help_panel.DockPadding.All = 3;
103 help_panel.Height = 50;
104 help_panel.BackColor = SystemColors.Control;
107 help_title_label = new Label();
108 help_title_label.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
109 help_title_label.Name = "help_title_label";
110 help_title_label.Font = new Font(this.Font,FontStyle.Bold);
111 help_title_label.Text = "Title";
112 help_title_label.Location = new Point(2,2);
113 help_title_label.Height = 17;
114 help_title_label.Width = help_panel.Width - 4;
117 help_description_label = new Label();
118 help_description_label.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
119 help_description_label.Name = "help_description_label";
120 help_description_label.Font = this.Font;
121 help_description_label.Text = "The long important Description";
122 help_description_label.Location = new Point(2,help_title_label.Top+help_title_label.Height);
123 help_description_label.Width = help_panel.Width - 4;
124 help_description_label.Height = 17;
126 help_panel.Controls.Add(help_description_label);
127 help_panel.Controls.Add(help_title_label);
128 help_panel.Paint+=new PaintEventHandler(help_panel_Paint);
130 toolbar = new PropertyToolBar();
131 toolbar.Dock = DockStyle.Top;
132 categorized_toolbarbutton = new ToolBarButton();
133 alphabetic_toolbarbutton = new ToolBarButton();
134 separator_toolbarbutton = new ToolBarButton();
135 propertypages_toolbarbutton = new ToolBarButton();
136 context_menu = new ContextMenu();
138 toolbar_imagelist = new ImageList();
139 toolbar_imagelist.ColorDepth = ColorDepth.Depth32Bit;
140 toolbar_imagelist.ImageSize = new System.Drawing.Size(16, 16);
141 toolbar_imagelist.TransparentColor = System.Drawing.Color.Transparent;
142 toolbar_imagelist.Images.Add( (Image)Locale.GetResource( "propertygrid_sort_category") );
143 toolbar_imagelist.Images.Add( (Image)Locale.GetResource( "propertygrid_sort_alphabetical") );
144 toolbar_imagelist.Images.Add( (Image)Locale.GetResource( "propertygrid_tab_properties") );
146 toolbar.Appearance = ToolBarAppearance.Flat;
147 toolbar.AutoSize = false;
148 toolbar.Buttons.AddRange(new ToolBarButton[] {
149 categorized_toolbarbutton,
150 alphabetic_toolbarbutton,
151 separator_toolbarbutton,
152 propertypages_toolbarbutton});
154 toolbar.ButtonSize = new System.Drawing.Size(20, 20);
155 toolbar.ImageList = toolbar_imagelist;
156 toolbar.Location = new System.Drawing.Point(0, 0);
157 toolbar.ShowToolTips = true;
158 toolbar.Size = new System.Drawing.Size(256, 27);
159 toolbar.TabIndex = 0;
160 toolbar.ButtonClick += new ToolBarButtonClickEventHandler(toolbar_ButtonClick);
162 categorized_toolbarbutton.ImageIndex = 0;
163 categorized_toolbarbutton.Style = ToolBarButtonStyle.ToggleButton;
164 categorized_toolbarbutton.ToolTipText = (string)Locale.GetResource( "Categorized");
166 alphabetic_toolbarbutton.ImageIndex = 1;
167 alphabetic_toolbarbutton.Style = ToolBarButtonStyle.ToggleButton;
168 alphabetic_toolbarbutton.ToolTipText = (string)Locale.GetResource( "Alphabetic");
170 separator_toolbarbutton.Style = ToolBarButtonStyle.Separator;
172 propertypages_toolbarbutton.Enabled = false;
173 propertypages_toolbarbutton.ImageIndex = 2;
174 propertypages_toolbarbutton.Style = ToolBarButtonStyle.ToggleButton;
175 propertypages_toolbarbutton.ToolTipText = "Property Pages";
178 reset_menuitem = context_menu.MenuItems.Add("Reset");
179 reset_menuitem.Click +=new EventHandler(OnResetPropertyClick);
180 context_menu.MenuItems.Add("-");
181 description_menuitem = context_menu.MenuItems.Add("Description");
182 description_menuitem.Click += new EventHandler(OnDescriptionClick);
183 description_menuitem.Checked = this.HelpVisible;
184 this.ContextMenu = context_menu;
185 toolbar.ContextMenu = context_menu;
187 BorderHelperControl helper = new BorderHelperControl ();
188 helper.Dock = DockStyle.Fill;
189 helper.Controls.Add (property_grid_view);
191 this.Controls.Add(helper);
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);
198 UpdateToolBarButtons();
200 #endregion // Constructors
202 #region Public Instance Properties
204 [BrowsableAttribute(false)]
205 [EditorBrowsableAttribute(EditorBrowsableState.Advanced)]
206 [DesignerSerializationVisibilityAttribute(DesignerSerializationVisibility.Hidden)]
207 public AttributeCollection BrowsableAttributes {
209 return browsable_attributes;
213 if (browsable_attributes == value) {
217 browsable_attributes = value;
222 [EditorBrowsable(EditorBrowsableState.Never)]
223 public override bool AutoScroll {
225 return base.AutoScroll;
228 base.AutoScroll = value;
232 public override Color BackColor {
234 return base.BackColor;
238 base.BackColor = value;
239 toolbar.BackColor = value;
245 [EditorBrowsable(EditorBrowsableState.Never)]
246 public override Image BackgroundImage {
248 return base.BackgroundImage;
251 base.BackgroundImage = value;
256 [BrowsableAttribute(false)]
257 [EditorBrowsableAttribute(EditorBrowsableState.Advanced)]
258 public virtual bool CanShowCommands {
260 return can_show_commands;
264 public Color CommandsBackColor {
266 return commands_back_color;
270 if (commands_back_color == value) {
273 commands_back_color = value;
277 public Color CommandsForeColor {
279 return commands_fore_color;
283 if (commands_fore_color == value) {
286 commands_fore_color = value;
290 [BrowsableAttribute(false)]
291 [EditorBrowsableAttribute(EditorBrowsableState.Advanced)]
292 public virtual bool CommandsVisible {
294 return commands_visible;
298 [DefaultValue(false)]
299 public virtual bool CommandsVisibleIfAvailable {
301 return commands_visible_if_available;
305 if (commands_visible_if_available == value) {
308 commands_visible_if_available = value;
312 [BrowsableAttribute(false)]
313 [EditorBrowsableAttribute(EditorBrowsableState.Advanced)]
314 [DesignerSerializationVisibilityAttribute(DesignerSerializationVisibility.Hidden)]
315 public Point ContextMenuDefaultLocation {
317 return context_menu_default_location;
322 [EditorBrowsable(EditorBrowsableState.Never)]
323 [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
324 public new Control.ControlCollection Controls {
326 return base.Controls;
331 [EditorBrowsable(EditorBrowsableState.Never)]
332 public override Color ForeColor {
334 return base.ForeColor;
337 base.ForeColor = value;
341 public Color HelpBackColor {
343 return help_panel.BackColor;
346 if (help_panel.BackColor == value) {
350 help_panel.BackColor = value;
354 public Color HelpForeColor {
356 return help_panel.ForeColor;
360 if (help_panel.ForeColor == value) {
364 help_panel.ForeColor = value;
370 public virtual bool HelpVisible {
372 return help_panel.Visible;
376 if (help_panel.Visible == value) {
380 help_panel.Visible = value;
384 public bool LargeButtons {
386 return large_buttons;
390 if (large_buttons == value) {
394 large_buttons = value;
398 public Color LineColor {
404 if (line_color == value) {
412 [DefaultValue(PropertySort.CategorizedAlphabetical)]
413 public PropertySort PropertySort {
415 return property_sort;
419 if (!Enum.IsDefined (typeof (PropertySort), value)) {
420 throw new InvalidEnumArgumentException (string.Format("Enum argument value '{0}' is not valid for PropertySort", value));
423 if (property_sort == value) {
427 property_sort = value;
430 property_grid_view.Refresh();
432 if (PropertySortChanged != null) {
433 PropertySortChanged(this, EventArgs.Empty);
438 [BrowsableAttribute(false)]
439 [EditorBrowsableAttribute(EditorBrowsableState.Advanced)]
440 [DesignerSerializationVisibilityAttribute(DesignerSerializationVisibility.Hidden)]
441 public PropertyTabCollection PropertyTabs {
443 return property_tabs;
447 [BrowsableAttribute(false)]
448 [EditorBrowsableAttribute(EditorBrowsableState.Advanced)]
449 [DesignerSerializationVisibilityAttribute(DesignerSerializationVisibility.Hidden)]
450 public GridItem SelectedGridItem {
452 return selected_grid_item;
456 if (selected_grid_item == value) {
460 GridItem oldItem = selected_grid_item;
461 selected_grid_item = value;
462 this.help_title_label.Text = selected_grid_item.Label;
463 if (selected_grid_item.PropertyDescriptor != null)
464 this.help_description_label.Text = selected_grid_item.PropertyDescriptor.Description;
466 current_property_value = value.Value;
467 if (oldItem != null && oldItem.PropertyDescriptor != null)
468 oldItem.PropertyDescriptor.RemoveValueChanged(SelectedObject, new EventHandler(HandlePropertyValueChanged));
469 if (selected_grid_item.PropertyDescriptor != null)
470 selected_grid_item.PropertyDescriptor.AddValueChanged(SelectedObject, new EventHandler(HandlePropertyValueChanged));
471 OnSelectedGridItemChanged(new SelectedGridItemChangedEventArgs( oldItem, selected_grid_item));
476 private void HandlePropertyValueChanged(object sender, EventArgs e) {
477 OnPropertyValueChanged(new PropertyValueChangedEventArgs( selected_grid_item, current_property_value));
481 [TypeConverter("System.Windows.Forms.PropertyGrid+SelectedObjectConverter, " + Consts.AssemblySystem_Windows_Forms)]
482 public object SelectedObject {
484 return selected_objects[0];
488 selected_objects = new object[] {value};
489 if (this.SelectedObject == null)
491 PropertyTabAttribute[] propTabs = (PropertyTabAttribute[])this.SelectedObject.GetType().GetCustomAttributes(typeof(PropertyTabAttribute),true);
492 if (propTabs.Length > 0) {
493 foreach (Type tabType in propTabs[0].TabClasses) {
494 this.PropertyTabs.AddTabType(tabType);
497 RefreshTabs(PropertyTabScope.Component);
499 property_grid_view.Refresh();
503 [BrowsableAttribute(false)]
504 [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
505 public object[] SelectedObjects {
507 return selected_objects;
511 selected_objects = value;
516 [BrowsableAttribute(false)]
517 [EditorBrowsable(EditorBrowsableState.Advanced)]
518 [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
519 public PropertyTab SelectedTab {
525 public override ISite Site {
537 public virtual bool ToolbarVisible {
539 return toolbar.Visible;
543 if (toolbar.Visible == value) {
547 toolbar.Visible = value;
551 public Color ViewBackColor {
553 return property_grid_view.BackColor;
557 if (property_grid_view.BackColor == value) {
561 property_grid_view.BackColor = value;
565 public Color ViewForeColor {
567 return property_grid_view.ForeColor;
571 if (property_grid_view.ForeColor == value) {
575 property_grid_view.ForeColor = value;
579 #endregion // Public Instance Properties
581 #region Protected Instance Properties
583 protected override Size DefaultSize {
585 return base.DefaultSize;
591 [EditorBrowsable(EditorBrowsableState.Advanced)]
592 [DesignerSerializationVisibilityAttribute(DesignerSerializationVisibility.Hidden)]
593 protected virtual Type DefaultTabType {
595 return typeof(PropertiesTab);
599 protected bool DrawFlatToolbar {
601 return (toolbar.Appearance == ToolBarAppearance.Flat);
605 toolbar.Appearance = ToolBarAppearance.Flat;
607 toolbar.Appearance = ToolBarAppearance.Normal;
611 protected override bool ShowFocusCues {
613 return base.ShowFocusCues;
617 #endregion // Protected Instance Properties
619 #region Public Instance Methods
621 protected override void Dispose(bool val) {
625 public void CollapseAllGridItems () {
626 foreach (GridItem item in this.grid_items) {
627 item.Expanded = false;
631 public void ExpandAllGridItems () {
632 foreach (GridItem item in this.grid_items) {
633 item.Expanded = true;
637 public override void Refresh () {
641 public void RefreshTabs (PropertyTabScope tabScope) {
643 /*button = new ToolBarButton("C");
644 button.ImageIndex = 0;
645 this.toolbar.Buttons.Add(button);
646 button = new ToolBarButton();
647 button.ImageIndex = 0;
648 button.Style = ToolBarButtonStyle.Separator;
649 this.toolbar.Buttons.Add(button);
650 foreach (PropertyTab tab in this.PropertyTabs)
653 int index = toolbar.ImageList.Images.Count;
654 this.toolbar.ImageList.Images.Add(tab.Bitmap);
655 button = new ToolBarButton();
656 button.ImageIndex = index;
657 this.toolbar.Buttons.Add(button);
662 public void ResetSelectedProperty() {
663 if (selected_grid_item == null || selected_grid_item.PropertyDescriptor == null)
666 selected_grid_item.PropertyDescriptor.ResetValue(SelectedObject);
668 #endregion // Public Instance Methods
670 #region Protected Instance Methods
672 protected virtual PropertyTab CreatePropertyTab(Type tabType) {
673 return (PropertyTab)Activator.CreateInstance(tabType);
677 protected void OnComComponentNameChanged(ComponentRenameEventArgs e) {
678 throw new NotImplementedException();
681 protected override void OnFontChanged(EventArgs e) {
682 base.OnFontChanged (e);
685 protected override void OnGotFocus(EventArgs e) {
689 protected override void OnHandleCreated (EventArgs e) {
690 base.OnHandleCreated (e);
693 protected override void OnHandleDestroyed (EventArgs e) {
694 base.OnHandleDestroyed (e);
697 protected override void OnMouseDown (MouseEventArgs e) {
698 base.OnMouseDown (e);
701 protected override void OnMouseMove (MouseEventArgs e) {
702 base.OnMouseMove (e);
705 protected override void OnMouseUp (MouseEventArgs e) {
710 protected void OnNotifyPropertyValueUIItemsChanged(object sender, EventArgs e) {
713 protected override void OnPaint (PaintEventArgs pevent) {
714 pevent.Graphics.FillRectangle(ThemeEngine.Current.ResPool.GetSolidBrush(BackColor), pevent.ClipRectangle);
715 base.OnPaint (pevent);
719 protected virtual void OnPropertyTabChanged (PropertyTabChangedEventArgs e) {
720 throw new NotImplementedException();
723 protected virtual void OnPropertyValueChanged (PropertyValueChangedEventArgs e) {
724 if (PropertyValueChanged != null) {
725 PropertyValueChanged(this, e);
726 current_property_value = selected_grid_item.Value;
730 protected override void OnResize (EventArgs e) {
734 protected virtual void OnSelectedGridItemChanged (SelectedGridItemChangedEventArgs e) {
735 if (SelectedGridItemChanged != null) {
736 SelectedGridItemChanged(this, e);
740 protected virtual void OnSelectedObjectsChanged (EventArgs e) {
741 if (SelectedObjectsChanged != null) {
742 SelectedObjectsChanged(this, e);
746 protected override void OnSystemColorsChanged (EventArgs e) {
747 base.OnSystemColorsChanged (e);
750 protected override void OnVisibleChanged (EventArgs e) {
751 base.OnVisibleChanged (e);
754 protected override bool ProcessDialogKey (Keys keyData) {
755 return base.ProcessDialogKey (keyData);
758 protected override void ScaleCore (float dx, float dy) {
759 base.ScaleCore (dx, dy);
763 protected void ShowEventsButton(bool value) {
764 throw new NotImplementedException();
767 protected override void WndProc (ref Message m) {
768 base.WndProc (ref m);
773 public event EventHandler PropertySortChanged;
774 public event PropertyTabChangedEventHandler PropertyTabChanged;
775 public event PropertyValueChangedEventHandler PropertyValueChanged;
776 public event SelectedGridItemChangedEventHandler SelectedGridItemChanged;
777 public event EventHandler SelectedObjectsChanged;
780 [EditorBrowsable(EditorBrowsableState.Never)]
781 public new event EventHandler BackgroundImageChanged {
782 add { base.BackgroundImageChanged += value; }
783 remove { base.BackgroundImageChanged -= value; }
787 [EditorBrowsable(EditorBrowsableState.Never)]
788 public new event EventHandler ForeColorChanged {
789 add { base.ForeColorChanged += value; }
790 remove { base.ForeColorChanged -= value; }
794 #region Com2Interop.IComPropertyBrowser Interface
796 bool ComponentModel.Com2Interop.IComPropertyBrowser.InPropertySet {
798 throw new NotImplementedException();
803 void ComponentModel.Com2Interop.IComPropertyBrowser.DropDownDone() {
804 throw new NotImplementedException();
808 bool ComponentModel.Com2Interop.IComPropertyBrowser.EnsurePendingChangesCommitted() {
809 throw new NotImplementedException();
813 void ComponentModel.Com2Interop.IComPropertyBrowser.HandleF4() {
814 throw new NotImplementedException();
818 void ComponentModel.Com2Interop.IComPropertyBrowser.LoadState(Microsoft.Win32.RegistryKey key) {
819 throw new NotImplementedException();
823 void ComponentModel.Com2Interop.IComPropertyBrowser.SaveState(Microsoft.Win32.RegistryKey key) {
824 throw new NotImplementedException();
828 private event ComponentRenameEventHandler com_component_name_changed;
829 event ComponentRenameEventHandler ComponentModel.Com2Interop.IComPropertyBrowser.ComComponentNameChanged {
830 add { com_component_name_changed += value; }
831 remove { com_component_name_changed -= value; }
833 #endregion // Com2Interop.IComPropertyBrowser Interface
835 #region PropertyTabCollection Class
836 public class PropertyTabCollection : ICollection, IEnumerable {
837 System.Collections.ArrayList list;
838 #region Private Constructors
839 internal PropertyTabCollection() {
840 list = new ArrayList();
843 #endregion // Private Constructors
845 public PropertyTab this[int index] {
847 return (PropertyTab)list[index];
851 #region ICollection Members
852 bool ICollection.IsSynchronized {
854 return list.IsSynchronized;
858 void ICollection.CopyTo(Array array, int index) {
859 list.CopyTo(array, index);
862 object ICollection.SyncRoot {
864 return list.SyncRoot;
870 #region IEnumerable Members
871 public IEnumerator GetEnumerator() {
872 return list.GetEnumerator();
877 #region ICollection Members
886 #region Public Instance Methods
887 public void AddTabType(System.Type propertyTabType) {
888 list.Add(Activator.CreateInstance(propertyTabType));
891 public void AddTabType(System.Type propertyTabType,
892 System.ComponentModel.PropertyTabScope tabScope) {
893 AddTabType(propertyTabType);
896 public void Clear(System.ComponentModel.PropertyTabScope tabScope) {
897 throw new NotImplementedException();
900 public void RemoveTabType(System.Type propertyTabType) {
901 throw new NotImplementedException();
905 #endregion // PropertyTabCollection Class
907 #region Private Helper Methods
909 private void toolbar_ButtonClick (object sender, ToolBarButtonClickEventArgs e) {
910 if (e.Button == alphabetic_toolbarbutton) {
911 this.PropertySort = PropertySort.Alphabetical;
913 else if (e.Button == categorized_toolbarbutton) {
914 this.PropertySort = PropertySort.Categorized;
916 UpdateToolBarButtons();
918 property_grid_view.Refresh();
921 internal void UpdateToolBarButtons () {
922 if (PropertySort == PropertySort.Alphabetical) {
923 categorized_toolbarbutton.Pushed = false;
924 alphabetic_toolbarbutton.Pushed = true;
926 else if (PropertySort == PropertySort.Categorized) {
927 categorized_toolbarbutton.Pushed = true;
928 alphabetic_toolbarbutton.Pushed = false;
931 categorized_toolbarbutton.Pushed = false;
932 alphabetic_toolbarbutton.Pushed = false;
936 private void OnResetPropertyClick (object sender, EventArgs e) {
937 ResetSelectedProperty();
940 private void OnDescriptionClick (object sender, EventArgs e) {
941 this.HelpVisible = !this.HelpVisible;
942 description_menuitem.Checked = this.HelpVisible;
946 private void ReflectObjects () {
947 grid_items = new GridItemCollection();
948 foreach (object obj in selected_objects) {
950 PopulateGridItemCollection(obj,grid_items, true);
955 private void PopulateGridItemCollection (object obj, GridItemCollection grid_item_coll, bool recurse) {
956 if (!recurse && !TypeDescriptor.GetConverter(obj).GetPropertiesSupported())
958 PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(obj);
959 foreach (PropertyDescriptor property in properties) {
960 if (property.IsBrowsable) {
961 GridEntry grid_entry = new GridEntry(obj, property);
962 if (property_sort == PropertySort.Alphabetical || !recurse) {
963 if (grid_item_coll[property.Name] == null)
964 grid_item_coll.Add(property.Name,grid_entry);
966 else if (property_sort == PropertySort.Categorized || property_sort == PropertySort.CategorizedAlphabetical) {
968 string category = property.Category;
969 GridItem cat_item = grid_item_coll[category];
970 if (cat_item == null) {
971 cat_item = new CategoryGridEntry(category);
972 grid_item_coll.Add(category,cat_item);
974 cat_item.GridItems.Add(property.Name,grid_entry);
977 object propObj = property.GetValue(obj);
979 PopulateGridItemCollection(propObj,grid_entry.GridItems, false);
981 grid_entry.Expanded = false;
986 private void help_panel_Paint(object sender, PaintEventArgs e) {
987 e.Graphics.FillRectangle(ThemeEngine.Current.ResPool.GetSolidBrush(help_panel.BackColor), help_panel.ClientRectangle );
988 e.Graphics.DrawRectangle(SystemPens.ControlDark, 0,0,help_panel.Width-1,help_panel.Height-1 );
991 #endregion // Private Helper Methods
996 public bool UseCompatibleTextRendering {
998 return use_compatible_text_rendering;
1002 use_compatible_text_rendering = value;
1007 // as we can not change the color for BorderStyle.FixedSingle and we need the correct
1008 // ClientRectangle so that the ScrollBar doesn't draw over the border we need this class
1009 internal class BorderHelperControl : Control {
1011 protected override void OnPaint (PaintEventArgs e)
1013 e.Graphics.DrawRectangle (SystemPens.ControlDark, 0 , 0 , Width - 1, Height - 1);
1017 protected override void OnSizeChanged (EventArgs e)
1019 if (Controls.Count == 1) {
1020 Control control = Controls [0];
1022 if (control.Location.X != 1 || control.Location.Y != 1)
1023 control.Location = new Point (1, 1);
1025 control.Width = ClientRectangle.Width - 2;
1026 control.Height = ClientRectangle.Height - 2;
1030 base.OnSizeChanged (e);
1034 // needed! this little helper makes it possible to draw a different toolbar border
1035 // and toolbar backcolor in ThemeWin32Classic
1036 internal class PropertyToolBar : ToolBar {}