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);
96 property_grid_view
.Dock
= DockStyle
.Fill
;
98 splitter
= new Splitter();
99 splitter
.Dock
= DockStyle
.Bottom
;
101 help_panel
= new Panel();
102 help_panel
.Dock
= DockStyle
.Bottom
;
103 //help_panel.DockPadding.All = 3;
104 help_panel
.Height
= 50;
105 help_panel
.BackColor
= SystemColors
.Control
;
108 help_title_label
= new Label();
109 help_title_label
.Anchor
= AnchorStyles
.Top
| AnchorStyles
.Left
| AnchorStyles
.Right
;
110 help_title_label
.Name
= "help_title_label";
111 help_title_label
.Font
= new Font(this.Font
,FontStyle
.Bold
);
112 help_title_label
.Text
= "Title";
113 help_title_label
.Location
= new Point(2,2);
114 help_title_label
.Height
= 17;
115 help_title_label
.Width
= help_panel
.Width
- 4;
118 help_description_label
= new Label();
119 help_description_label
.Anchor
= AnchorStyles
.Top
| AnchorStyles
.Left
| AnchorStyles
.Right
;
120 help_description_label
.Name
= "help_description_label";
121 help_description_label
.Font
= this.Font
;
122 help_description_label
.Text
= "The long important Description";
123 help_description_label
.Location
= new Point(2,help_title_label
.Top
+help_title_label
.Height
);
124 help_description_label
.Width
= help_panel
.Width
- 4;
125 help_description_label
.Height
= 17;
127 help_panel
.Controls
.Add(help_description_label
);
128 help_panel
.Controls
.Add(help_title_label
);
129 help_panel
.Paint
+=new PaintEventHandler(help_panel_Paint
);
131 toolbar
= new ToolBar();
132 toolbar
.Dock
= DockStyle
.Top
;
133 categorized_toolbarbutton
= new ToolBarButton();
134 alphabetic_toolbarbutton
= new ToolBarButton();
135 separator_toolbarbutton
= new ToolBarButton();
136 propertypages_toolbarbutton
= new ToolBarButton();
137 context_menu
= new ContextMenu();
139 toolbar_imagelist
= new ImageList();
140 toolbar_imagelist
.ColorDepth
= ColorDepth
.Depth32Bit
;
141 toolbar_imagelist
.ImageSize
= new System
.Drawing
.Size(16, 16);
142 toolbar_imagelist
.TransparentColor
= System
.Drawing
.Color
.Transparent
;
143 toolbar_imagelist
.Images
.Add( (Image
)Locale
.GetResource( "propertygrid_sort_category") );
144 toolbar_imagelist
.Images
.Add( (Image
)Locale
.GetResource( "propertygrid_sort_alphabetical") );
145 toolbar_imagelist
.Images
.Add( (Image
)Locale
.GetResource( "propertygrid_tab_properties") );
147 toolbar
.Appearance
= ToolBarAppearance
.Flat
;
148 toolbar
.AutoSize
= false;
149 toolbar
.Buttons
.AddRange(new ToolBarButton
[] {
150 categorized_toolbarbutton
,
151 alphabetic_toolbarbutton
,
152 separator_toolbarbutton
,
153 propertypages_toolbarbutton
});
155 toolbar
.ButtonSize
= new System
.Drawing
.Size(20, 20);
156 toolbar
.ImageList
= toolbar_imagelist
;
157 toolbar
.Location
= new System
.Drawing
.Point(0, 0);
158 toolbar
.ShowToolTips
= true;
159 toolbar
.Size
= new System
.Drawing
.Size(256, 27);
160 toolbar
.TabIndex
= 0;
161 toolbar
.ButtonClick
+= new ToolBarButtonClickEventHandler(toolbar_ButtonClick
);
163 categorized_toolbarbutton
.ImageIndex
= 0;
164 categorized_toolbarbutton
.Style
= ToolBarButtonStyle
.ToggleButton
;
165 categorized_toolbarbutton
.ToolTipText
= (string)Locale
.GetResource( "Categorized");
167 alphabetic_toolbarbutton
.ImageIndex
= 1;
168 alphabetic_toolbarbutton
.Style
= ToolBarButtonStyle
.ToggleButton
;
169 alphabetic_toolbarbutton
.ToolTipText
= (string)Locale
.GetResource( "Alphabetic");
171 separator_toolbarbutton
.Style
= ToolBarButtonStyle
.Separator
;
173 propertypages_toolbarbutton
.Enabled
= false;
174 propertypages_toolbarbutton
.ImageIndex
= 2;
175 propertypages_toolbarbutton
.Style
= ToolBarButtonStyle
.ToggleButton
;
176 propertypages_toolbarbutton
.ToolTipText
= "Property Pages";
179 reset_menuitem
= context_menu
.MenuItems
.Add("Reset");
180 reset_menuitem
.Click
+=new EventHandler(OnResetPropertyClick
);
181 context_menu
.MenuItems
.Add("-");
182 description_menuitem
= context_menu
.MenuItems
.Add("Description");
183 description_menuitem
.Click
+= new EventHandler(OnDescriptionClick
);
184 description_menuitem
.Checked
= this.HelpVisible
;
185 this.ContextMenu
= context_menu
;
186 toolbar
.ContextMenu
= context_menu
;
188 this.Controls
.Add(property_grid_view
);
189 this.Controls
.Add(toolbar
);
190 this.Controls
.Add(splitter
);
191 this.Controls
.Add(help_panel
);
192 this.Name
= "PropertyGrid";
193 this.Size
= new System
.Drawing
.Size(256, 400);
195 UpdateToolBarButtons();
197 #endregion // Constructors
199 #region Public Instance Properties
201 [BrowsableAttribute(false)]
202 [EditorBrowsableAttribute(EditorBrowsableState
.Advanced
)]
203 [DesignerSerializationVisibilityAttribute(DesignerSerializationVisibility
.Hidden
)]
204 public AttributeCollection BrowsableAttributes
{
206 return browsable_attributes
;
210 if (browsable_attributes
== value) {
214 browsable_attributes
= value;
219 [EditorBrowsable(EditorBrowsableState
.Never
)]
220 public override bool AutoScroll
{
222 return base.AutoScroll
;
225 base.AutoScroll
= value;
229 public override Color BackColor
{
231 return base.BackColor
;
235 if (base.BackColor
== value) {
238 base.BackColor
= value;
243 [EditorBrowsable(EditorBrowsableState
.Never
)]
244 public override Image BackgroundImage
{
246 return base.BackgroundImage
;
249 base.BackgroundImage
= value;
254 [BrowsableAttribute(false)]
255 [EditorBrowsableAttribute(EditorBrowsableState
.Advanced
)]
256 public virtual bool CanShowCommands
{
258 return can_show_commands
;
262 public Color CommandsBackColor
{
264 return commands_back_color
;
268 if (commands_back_color
== value) {
271 commands_back_color
= value;
275 public Color CommandsForeColor
{
277 return commands_fore_color
;
281 if (commands_fore_color
== value) {
284 commands_fore_color
= value;
288 [BrowsableAttribute(false)]
289 [EditorBrowsableAttribute(EditorBrowsableState
.Advanced
)]
290 public virtual bool CommandsVisible
{
292 return commands_visible
;
296 [DefaultValue(false)]
297 public virtual bool CommandsVisibleIfAvailable
{
299 return commands_visible_if_available
;
303 if (commands_visible_if_available
== value) {
306 commands_visible_if_available
= value;
310 [BrowsableAttribute(false)]
311 [EditorBrowsableAttribute(EditorBrowsableState
.Advanced
)]
312 [DesignerSerializationVisibilityAttribute(DesignerSerializationVisibility
.Hidden
)]
313 public Point ContextMenuDefaultLocation
{
315 return context_menu_default_location
;
320 [EditorBrowsable(EditorBrowsableState
.Never
)]
321 [DesignerSerializationVisibility(DesignerSerializationVisibility
.Hidden
)]
322 public new Control
.ControlCollection Controls
{
324 return base.Controls
;
329 [EditorBrowsable(EditorBrowsableState
.Never
)]
330 public override Color ForeColor
{
332 return base.ForeColor
;
335 base.ForeColor
= value;
339 public Color HelpBackColor
{
341 return help_panel
.BackColor
;
344 if (help_panel
.BackColor
== value) {
348 help_panel
.BackColor
= value;
352 public Color HelpForeColor
{
354 return help_panel
.ForeColor
;
358 if (help_panel
.ForeColor
== value) {
362 help_panel
.ForeColor
= value;
368 public virtual bool HelpVisible
{
370 return help_panel
.Visible
;
374 if (help_panel
.Visible
== value) {
378 help_panel
.Visible
= value;
382 public bool LargeButtons
{
384 return large_buttons
;
388 if (large_buttons
== value) {
392 large_buttons
= value;
396 public Color LineColor
{
402 if (line_color
== value) {
410 [DefaultValue(PropertySort
.CategorizedAlphabetical
)]
411 public PropertySort PropertySort
{
413 return property_sort
;
417 if (!Enum
.IsDefined (typeof (PropertySort
), value)) {
418 throw new InvalidEnumArgumentException (string.Format("Enum argument value '{0}' is not valid for PropertySort", value));
421 if (property_sort
== value) {
425 property_sort
= value;
428 property_grid_view
.Refresh();
430 if (PropertySortChanged
!= null) {
431 PropertySortChanged(this, EventArgs
.Empty
);
436 [BrowsableAttribute(false)]
437 [EditorBrowsableAttribute(EditorBrowsableState
.Advanced
)]
438 [DesignerSerializationVisibilityAttribute(DesignerSerializationVisibility
.Hidden
)]
439 public PropertyTabCollection PropertyTabs
{
441 return property_tabs
;
445 [BrowsableAttribute(false)]
446 [EditorBrowsableAttribute(EditorBrowsableState
.Advanced
)]
447 [DesignerSerializationVisibilityAttribute(DesignerSerializationVisibility
.Hidden
)]
448 public GridItem SelectedGridItem
{
450 return selected_grid_item
;
454 if (selected_grid_item
== value) {
458 GridItem oldItem
= selected_grid_item
;
459 selected_grid_item
= value;
460 this.help_title_label
.Text
= selected_grid_item
.Label
;
461 if (selected_grid_item
.PropertyDescriptor
!= null)
462 this.help_description_label
.Text
= selected_grid_item
.PropertyDescriptor
.Description
;
464 current_property_value
= value.Value
;
465 if (oldItem
!= null && oldItem
.PropertyDescriptor
!= null)
466 oldItem
.PropertyDescriptor
.RemoveValueChanged(SelectedObject
, new EventHandler(HandlePropertyValueChanged
));
467 if (selected_grid_item
.PropertyDescriptor
!= null)
468 selected_grid_item
.PropertyDescriptor
.AddValueChanged(SelectedObject
, new EventHandler(HandlePropertyValueChanged
));
469 OnSelectedGridItemChanged(new SelectedGridItemChangedEventArgs( oldItem
, selected_grid_item
));
474 private void HandlePropertyValueChanged(object sender
, EventArgs e
) {
475 OnPropertyValueChanged(new PropertyValueChangedEventArgs( selected_grid_item
, current_property_value
));
479 [TypeConverter("System.Windows.Forms.PropertyGrid+SelectedObjectConverter, " + Consts
.AssemblySystem_Windows_Forms
)]
480 public object SelectedObject
{
482 return selected_objects
[0];
486 selected_objects
= new object[] {value}
;
487 if (this.SelectedObject
== null)
489 PropertyTabAttribute
[] propTabs
= (PropertyTabAttribute
[])this.SelectedObject
.GetType().GetCustomAttributes(typeof(PropertyTabAttribute
),true);
490 if (propTabs
.Length
> 0) {
491 foreach (Type tabType
in propTabs
[0].TabClasses
) {
492 this.PropertyTabs
.AddTabType(tabType
);
495 RefreshTabs(PropertyTabScope
.Component
);
497 property_grid_view
.Refresh();
501 [BrowsableAttribute(false)]
502 [DesignerSerializationVisibility(DesignerSerializationVisibility
.Hidden
)]
503 public object[] SelectedObjects
{
505 return selected_objects
;
509 selected_objects
= value;
514 [BrowsableAttribute(false)]
515 [EditorBrowsable(EditorBrowsableState
.Advanced
)]
516 [DesignerSerializationVisibility(DesignerSerializationVisibility
.Hidden
)]
517 public PropertyTab SelectedTab
{
523 public override ISite Site
{
535 public virtual bool ToolbarVisible
{
537 return toolbar
.Visible
;
541 if (toolbar
.Visible
== value) {
545 toolbar
.Visible
= value;
549 public Color ViewBackColor
{
551 return property_grid_view
.BackColor
;
555 if (property_grid_view
.BackColor
== value) {
559 property_grid_view
.BackColor
= value;
563 public Color ViewForeColor
{
565 return property_grid_view
.ForeColor
;
569 if (property_grid_view
.ForeColor
== value) {
573 property_grid_view
.ForeColor
= value;
577 #endregion // Public Instance Properties
579 #region Protected Instance Properties
581 protected override Size DefaultSize
{
583 return base.DefaultSize
;
589 [EditorBrowsable(EditorBrowsableState
.Advanced
)]
590 [DesignerSerializationVisibilityAttribute(DesignerSerializationVisibility
.Hidden
)]
591 protected virtual Type DefaultTabType
{
593 return typeof(PropertiesTab
);
597 protected bool DrawFlatToolbar
{
599 return (toolbar
.Appearance
== ToolBarAppearance
.Flat
);
603 toolbar
.Appearance
= ToolBarAppearance
.Flat
;
605 toolbar
.Appearance
= ToolBarAppearance
.Normal
;
609 protected override bool ShowFocusCues
{
611 return base.ShowFocusCues
;
615 #endregion // Protected Instance Properties
617 #region Public Instance Methods
619 protected override void Dispose(bool val
) {
623 public void CollapseAllGridItems () {
624 foreach (GridItem item
in this.grid_items
) {
625 item
.Expanded
= false;
629 public void ExpandAllGridItems () {
630 foreach (GridItem item
in this.grid_items
) {
631 item
.Expanded
= true;
635 public override void Refresh () {
639 public void RefreshTabs (PropertyTabScope tabScope
) {
641 /*button = new ToolBarButton("C");
642 button.ImageIndex = 0;
643 this.toolbar.Buttons.Add(button);
644 button = new ToolBarButton();
645 button.ImageIndex = 0;
646 button.Style = ToolBarButtonStyle.Separator;
647 this.toolbar.Buttons.Add(button);
648 foreach (PropertyTab tab in this.PropertyTabs)
651 int index = toolbar.ImageList.Images.Count;
652 this.toolbar.ImageList.Images.Add(tab.Bitmap);
653 button = new ToolBarButton();
654 button.ImageIndex = index;
655 this.toolbar.Buttons.Add(button);
660 public void ResetSelectedProperty() {
661 if (selected_grid_item
== null || selected_grid_item
.PropertyDescriptor
== null)
664 selected_grid_item
.PropertyDescriptor
.ResetValue(SelectedObject
);
666 #endregion // Public Instance Methods
668 #region Protected Instance Methods
670 protected virtual PropertyTab
CreatePropertyTab(Type tabType
) {
671 return (PropertyTab
)Activator
.CreateInstance(tabType
);
675 protected void OnComComponentNameChanged(ComponentRenameEventArgs e
) {
676 throw new NotImplementedException();
679 protected override void OnFontChanged(EventArgs e
) {
680 base.OnFontChanged (e
);
683 protected override void OnGotFocus(EventArgs e
) {
687 protected override void OnHandleCreated (EventArgs e
) {
688 base.OnHandleCreated (e
);
691 protected override void OnHandleDestroyed (EventArgs e
) {
692 base.OnHandleDestroyed (e
);
695 protected override void OnMouseDown (MouseEventArgs e
) {
696 base.OnMouseDown (e
);
699 protected override void OnMouseMove (MouseEventArgs e
) {
700 base.OnMouseMove (e
);
703 protected override void OnMouseUp (MouseEventArgs e
) {
708 protected void OnNotifyPropertyValueUIItemsChanged(object sender
, EventArgs e
) {
711 protected override void OnPaint (PaintEventArgs pevent
) {
712 base.OnPaint (pevent
);
716 protected virtual void OnPropertyTabChanged (PropertyTabChangedEventArgs e
) {
717 throw new NotImplementedException();
720 protected virtual void OnPropertyValueChanged (PropertyValueChangedEventArgs e
) {
721 if (PropertyValueChanged
!= null) {
722 PropertyValueChanged(this, e
);
723 current_property_value
= selected_grid_item
.Value
;
727 protected override void OnResize (EventArgs e
) {
731 protected virtual void OnSelectedGridItemChanged (SelectedGridItemChangedEventArgs e
) {
732 if (SelectedGridItemChanged
!= null) {
733 SelectedGridItemChanged(this, e
);
737 protected virtual void OnSelectedObjectsChanged (EventArgs e
) {
738 if (SelectedObjectsChanged
!= null) {
739 SelectedObjectsChanged(this, e
);
743 protected override void OnSystemColorsChanged (EventArgs e
) {
744 base.OnSystemColorsChanged (e
);
747 protected override void OnVisibleChanged (EventArgs e
) {
748 base.OnVisibleChanged (e
);
751 protected override bool ProcessDialogKey (Keys keyData
) {
752 return base.ProcessDialogKey (keyData
);
755 protected override void ScaleCore (float dx
, float dy
) {
756 base.ScaleCore (dx
, dy
);
760 protected void ShowEventsButton(bool value) {
761 throw new NotImplementedException();
764 protected override void WndProc (ref Message m
) {
765 base.WndProc (ref m
);
770 public event EventHandler PropertySortChanged
;
771 public event PropertyTabChangedEventHandler PropertyTabChanged
;
772 public event PropertyValueChangedEventHandler PropertyValueChanged
;
773 public event SelectedGridItemChangedEventHandler SelectedGridItemChanged
;
774 public event EventHandler SelectedObjectsChanged
;
777 [EditorBrowsable(EditorBrowsableState
.Never
)]
778 public new event EventHandler BackgroundImageChanged
{
779 add { base.BackgroundImageChanged += value; }
780 remove { base.BackgroundImageChanged -= value; }
784 [EditorBrowsable(EditorBrowsableState
.Never
)]
785 public new event EventHandler ForeColorChanged
{
786 add { base.ForeColorChanged += value; }
787 remove { base.ForeColorChanged -= value; }
791 #region Com2Interop.IComPropertyBrowser Interface
793 bool ComponentModel
.Com2Interop
.IComPropertyBrowser
.InPropertySet
{
795 throw new NotImplementedException();
800 void ComponentModel
.Com2Interop
.IComPropertyBrowser
.DropDownDone() {
801 throw new NotImplementedException();
805 bool ComponentModel
.Com2Interop
.IComPropertyBrowser
.EnsurePendingChangesCommitted() {
806 throw new NotImplementedException();
810 void ComponentModel
.Com2Interop
.IComPropertyBrowser
.HandleF4() {
811 throw new NotImplementedException();
815 void ComponentModel
.Com2Interop
.IComPropertyBrowser
.LoadState(Microsoft
.Win32
.RegistryKey key
) {
816 throw new NotImplementedException();
820 void ComponentModel
.Com2Interop
.IComPropertyBrowser
.SaveState(Microsoft
.Win32
.RegistryKey key
) {
821 throw new NotImplementedException();
825 private event ComponentRenameEventHandler com_component_name_changed
;
826 event ComponentRenameEventHandler ComponentModel
.Com2Interop
.IComPropertyBrowser
.ComComponentNameChanged
{
827 add { com_component_name_changed += value; }
828 remove { com_component_name_changed -= value; }
830 #endregion // Com2Interop.IComPropertyBrowser Interface
832 #region PropertyTabCollection Class
833 public class PropertyTabCollection
: ICollection
, IEnumerable
{
834 System
.Collections
.ArrayList list
;
835 #region Private Constructors
836 internal PropertyTabCollection() {
837 list
= new ArrayList();
840 #endregion // Private Constructors
842 public PropertyTab
this[int index
] {
844 return (PropertyTab
)list
[index
];
848 #region ICollection Members
849 bool ICollection
.IsSynchronized
{
851 return list
.IsSynchronized
;
855 void ICollection
.CopyTo(Array array
, int index
) {
856 list
.CopyTo(array
, index
);
859 object ICollection
.SyncRoot
{
861 return list
.SyncRoot
;
867 #region IEnumerable Members
868 public IEnumerator
GetEnumerator() {
869 return list
.GetEnumerator();
874 #region ICollection Members
883 #region Public Instance Methods
884 public void AddTabType(System
.Type propertyTabType
) {
885 list
.Add(Activator
.CreateInstance(propertyTabType
));
888 public void AddTabType(System
.Type propertyTabType
,
889 System
.ComponentModel
.PropertyTabScope tabScope
) {
890 AddTabType(propertyTabType
);
893 public void Clear(System
.ComponentModel
.PropertyTabScope tabScope
) {
894 throw new NotImplementedException();
897 public void RemoveTabType(System
.Type propertyTabType
) {
898 throw new NotImplementedException();
902 #endregion // PropertyTabCollection Class
904 #region Private Helper Methods
906 private void toolbar_ButtonClick (object sender
, ToolBarButtonClickEventArgs e
) {
907 if (e
.Button
== alphabetic_toolbarbutton
) {
908 this.PropertySort
= PropertySort
.Alphabetical
;
910 else if (e
.Button
== categorized_toolbarbutton
) {
911 this.PropertySort
= PropertySort
.Categorized
;
913 UpdateToolBarButtons();
915 property_grid_view
.Refresh();
918 internal void UpdateToolBarButtons () {
919 if (PropertySort
== PropertySort
.Alphabetical
) {
920 categorized_toolbarbutton
.Pushed
= false;
921 alphabetic_toolbarbutton
.Pushed
= true;
923 else if (PropertySort
== PropertySort
.Categorized
) {
924 categorized_toolbarbutton
.Pushed
= true;
925 alphabetic_toolbarbutton
.Pushed
= false;
928 categorized_toolbarbutton
.Pushed
= false;
929 alphabetic_toolbarbutton
.Pushed
= false;
933 private void OnResetPropertyClick (object sender
, EventArgs e
) {
934 ResetSelectedProperty();
937 private void OnDescriptionClick (object sender
, EventArgs e
) {
938 this.HelpVisible
= !this.HelpVisible
;
939 description_menuitem
.Checked
= this.HelpVisible
;
943 private void ReflectObjects () {
944 grid_items
= new GridItemCollection();
945 foreach (object obj
in selected_objects
) {
947 PopulateGridItemCollection(obj
,grid_items
, true);
952 private void PopulateGridItemCollection (object obj
, GridItemCollection grid_item_coll
, bool recurse
) {
953 PropertyDescriptorCollection properties
= TypeDescriptor
.GetProperties(obj
);
954 foreach (PropertyDescriptor property
in properties
) {
955 if (property
.IsBrowsable
) {
956 GridEntry grid_entry
= new GridEntry(obj
, property
);
957 if (property_sort
== PropertySort
.Alphabetical
|| !recurse
) {
958 if (grid_item_coll
[property
.Name
] == null)
959 grid_item_coll
.Add(property
.Name
,grid_entry
);
961 else if (property_sort
== PropertySort
.Categorized
|| property_sort
== PropertySort
.CategorizedAlphabetical
) {
963 string category
= property
.Category
;
964 GridItem cat_item
= grid_item_coll
[category
];
965 if (cat_item
== null) {
966 cat_item
= new CategoryGridEntry(category
);
967 grid_item_coll
.Add(category
,cat_item
);
969 cat_item
.GridItems
.Add(property
.Name
,grid_entry
);
972 object propObj
= property
.GetValue(obj
);
974 PopulateGridItemCollection(propObj
,grid_entry
.GridItems
, false);
980 private void help_panel_Paint(object sender
, PaintEventArgs e
) {
981 e
.Graphics
.FillRectangle(ThemeEngine
.Current
.ResPool
.GetSolidBrush(help_panel
.BackColor
), help_panel
.ClientRectangle
);
982 e
.Graphics
.DrawRectangle(SystemPens
.ControlDark
, 0,0,help_panel
.Width
-1,help_panel
.Height
-1 );
985 #endregion // Private Helper Methods
990 public bool UseCompatibleTextRendering
{
992 return use_compatible_text_rendering
;
996 use_compatible_text_rendering
= value;