2006-04-17 Jonathan Chambers <jonathan.chambers@ansys.com>
[mcs.git] / class / Managed.Windows.Forms / System.Windows.Forms / PropertyGrid.cs
blobe4b1aa6c10acb2d314df28847166533e775b4b54
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:
8 //
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.
22 // Authors:
23 // Jonathan Chambers (jonathan.chambers@ansys.com)
26 // NOT COMPLETE
28 using System;
29 using System.Drawing;
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
83 #region Contructors
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 {
205 get {
206 return browsable_attributes;
209 set {
210 if (browsable_attributes == value) {
211 return;
214 browsable_attributes = value;
218 [Browsable(false)]
219 [EditorBrowsable(EditorBrowsableState.Never)]
220 public override bool AutoScroll {
221 get {
222 return base.AutoScroll;
224 set {
225 base.AutoScroll = value;
229 public override Color BackColor {
230 get {
231 return base.BackColor;
234 set {
235 if (base.BackColor == value) {
236 return;
238 base.BackColor = value;
242 [Browsable(false)]
243 [EditorBrowsable(EditorBrowsableState.Never)]
244 public override Image BackgroundImage {
245 get {
246 return base.BackgroundImage;
248 set {
249 base.BackgroundImage = value;
254 [BrowsableAttribute(false)]
255 [EditorBrowsableAttribute(EditorBrowsableState.Advanced)]
256 public virtual bool CanShowCommands {
257 get {
258 return can_show_commands;
262 public Color CommandsBackColor {
263 get {
264 return commands_back_color;
267 set {
268 if (commands_back_color == value) {
269 return;
271 commands_back_color = value;
275 public Color CommandsForeColor {
276 get {
277 return commands_fore_color;
280 set {
281 if (commands_fore_color == value) {
282 return;
284 commands_fore_color = value;
288 [BrowsableAttribute(false)]
289 [EditorBrowsableAttribute(EditorBrowsableState.Advanced)]
290 public virtual bool CommandsVisible {
291 get {
292 return commands_visible;
296 [DefaultValue(false)]
297 public virtual bool CommandsVisibleIfAvailable {
298 get {
299 return commands_visible_if_available;
302 set {
303 if (commands_visible_if_available == value) {
304 return;
306 commands_visible_if_available = value;
310 [BrowsableAttribute(false)]
311 [EditorBrowsableAttribute(EditorBrowsableState.Advanced)]
312 [DesignerSerializationVisibilityAttribute(DesignerSerializationVisibility.Hidden)]
313 public Point ContextMenuDefaultLocation {
314 get {
315 return context_menu_default_location;
319 [Browsable(false)]
320 [EditorBrowsable(EditorBrowsableState.Never)]
321 [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
322 public new Control.ControlCollection Controls {
323 get {
324 return base.Controls;
328 [Browsable(false)]
329 [EditorBrowsable(EditorBrowsableState.Never)]
330 public override Color ForeColor {
331 get {
332 return base.ForeColor;
334 set {
335 base.ForeColor = value;
339 public Color HelpBackColor {
340 get {
341 return help_panel.BackColor;
343 set {
344 if (help_panel.BackColor == value) {
345 return;
348 help_panel.BackColor = value;
352 public Color HelpForeColor {
353 get {
354 return help_panel.ForeColor;
357 set {
358 if (help_panel.ForeColor == value) {
359 return;
362 help_panel.ForeColor = value;
366 [DefaultValue(true)]
367 [Localizable(true)]
368 public virtual bool HelpVisible {
369 get {
370 return help_panel.Visible;
373 set {
374 if (help_panel.Visible == value) {
375 return;
378 help_panel.Visible = value;
382 public bool LargeButtons {
383 get {
384 return large_buttons;
387 set {
388 if (large_buttons == value) {
389 return;
392 large_buttons = value;
396 public Color LineColor {
397 get {
398 return line_color;
401 set {
402 if (line_color == value) {
403 return;
406 line_color = value;
410 [DefaultValue(PropertySort.CategorizedAlphabetical)]
411 public PropertySort PropertySort {
412 get {
413 return property_sort;
416 set {
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) {
422 return;
425 property_sort = value;
427 ReflectObjects();
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 {
440 get {
441 return property_tabs;
445 [BrowsableAttribute(false)]
446 [EditorBrowsableAttribute(EditorBrowsableState.Advanced)]
447 [DesignerSerializationVisibilityAttribute(DesignerSerializationVisibility.Hidden)]
448 public GridItem SelectedGridItem {
449 get {
450 return selected_grid_item;
453 set {
454 if (selected_grid_item == value) {
455 return;
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));
478 [DefaultValue(null)]
479 [TypeConverter("System.Windows.Forms.PropertyGrid+SelectedObjectConverter, " + Consts.AssemblySystem_Windows_Forms)]
480 public object SelectedObject {
481 get {
482 return selected_objects[0];
485 set {
486 selected_objects = new object[] {value};
487 if (this.SelectedObject == null)
488 return;
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);
496 ReflectObjects();
497 property_grid_view.Refresh();
501 [BrowsableAttribute(false)]
502 [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
503 public object[] SelectedObjects {
504 get {
505 return selected_objects;
508 set {
509 selected_objects = value;
510 ReflectObjects();
514 [BrowsableAttribute(false)]
515 [EditorBrowsable(EditorBrowsableState.Advanced)]
516 [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
517 public PropertyTab SelectedTab {
518 get {
519 return selected_tab;
523 public override ISite Site {
524 get {
525 return base.Site;
528 set {
529 base.Site = value;
534 [DefaultValue(true)]
535 public virtual bool ToolbarVisible {
536 get {
537 return toolbar.Visible;
540 set {
541 if (toolbar.Visible == value) {
542 return;
545 toolbar.Visible = value;
549 public Color ViewBackColor {
550 get {
551 return property_grid_view.BackColor;
554 set {
555 if (property_grid_view.BackColor == value) {
556 return;
559 property_grid_view.BackColor = value;
563 public Color ViewForeColor {
564 get {
565 return property_grid_view.ForeColor;
568 set {
569 if (property_grid_view.ForeColor == value) {
570 return;
573 property_grid_view.ForeColor = value;
577 #endregion // Public Instance Properties
579 #region Protected Instance Properties
581 protected override Size DefaultSize {
582 get {
583 return base.DefaultSize;
588 [Browsable(false)]
589 [EditorBrowsable(EditorBrowsableState.Advanced)]
590 [DesignerSerializationVisibilityAttribute(DesignerSerializationVisibility.Hidden)]
591 protected virtual Type DefaultTabType {
592 get {
593 return typeof(PropertiesTab);
597 protected bool DrawFlatToolbar {
598 get {
599 return (toolbar.Appearance == ToolBarAppearance.Flat);
601 set {
602 if (value)
603 toolbar.Appearance = ToolBarAppearance.Flat;
604 else
605 toolbar.Appearance = ToolBarAppearance.Normal;
609 protected override bool ShowFocusCues {
610 get {
611 return base.ShowFocusCues;
615 #endregion // Protected Instance Properties
617 #region Public Instance Methods
619 protected override void Dispose(bool val) {
620 base.Dispose(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 () {
636 base.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)
662 return;
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);
674 [MonoTODO]
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) {
684 base.OnGotFocus(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) {
704 base.OnMouseUp (e);
707 [MonoTODO]
708 protected void OnNotifyPropertyValueUIItemsChanged(object sender, EventArgs e) {
711 protected override void OnPaint (PaintEventArgs pevent) {
712 base.OnPaint (pevent);
715 [MonoTODO]
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) {
728 base.OnResize (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);
759 [MonoTODO]
760 protected void ShowEventsButton(bool value) {
761 throw new NotImplementedException();
764 protected override void WndProc (ref Message m) {
765 base.WndProc (ref m);
767 #endregion
769 #region Events
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;
776 [Browsable(false)]
777 [EditorBrowsable(EditorBrowsableState.Never)]
778 public new event EventHandler BackgroundImageChanged {
779 add { base.BackgroundImageChanged += value; }
780 remove { base.BackgroundImageChanged -= value; }
783 [Browsable(false)]
784 [EditorBrowsable(EditorBrowsableState.Never)]
785 public new event EventHandler ForeColorChanged {
786 add { base.ForeColorChanged += value; }
787 remove { base.ForeColorChanged -= value; }
789 #endregion
791 #region Com2Interop.IComPropertyBrowser Interface
792 [MonoTODO]
793 bool ComponentModel.Com2Interop.IComPropertyBrowser.InPropertySet {
794 get {
795 throw new NotImplementedException();
799 [MonoTODO]
800 void ComponentModel.Com2Interop.IComPropertyBrowser.DropDownDone() {
801 throw new NotImplementedException();
804 [MonoTODO]
805 bool ComponentModel.Com2Interop.IComPropertyBrowser.EnsurePendingChangesCommitted() {
806 throw new NotImplementedException();
809 [MonoTODO]
810 void ComponentModel.Com2Interop.IComPropertyBrowser.HandleF4() {
811 throw new NotImplementedException();
814 [MonoTODO]
815 void ComponentModel.Com2Interop.IComPropertyBrowser.LoadState(Microsoft.Win32.RegistryKey key) {
816 throw new NotImplementedException();
819 [MonoTODO]
820 void ComponentModel.Com2Interop.IComPropertyBrowser.SaveState(Microsoft.Win32.RegistryKey key) {
821 throw new NotImplementedException();
824 [MonoTODO]
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] {
843 get {
844 return (PropertyTab)list[index];
848 #region ICollection Members
849 bool ICollection.IsSynchronized {
850 get {
851 return list.IsSynchronized;
855 void ICollection.CopyTo(Array array, int index) {
856 list.CopyTo(array, index);
859 object ICollection.SyncRoot {
860 get {
861 return list.SyncRoot;
865 #endregion
867 #region IEnumerable Members
868 public IEnumerator GetEnumerator() {
869 return list.GetEnumerator();
872 #endregion
874 #region ICollection Members
875 public int Count {
876 get {
877 return list.Count;
881 #endregion
883 #region Public Instance Methods
884 public void AddTabType(System.Type propertyTabType) {
885 list.Add(Activator.CreateInstance(propertyTabType));
887 [MonoTODO]
888 public void AddTabType(System.Type propertyTabType,
889 System.ComponentModel.PropertyTabScope tabScope) {
890 AddTabType(propertyTabType);
892 [MonoTODO]
893 public void Clear(System.ComponentModel.PropertyTabScope tabScope) {
894 throw new NotImplementedException();
896 [MonoTODO]
897 public void RemoveTabType(System.Type propertyTabType) {
898 throw new NotImplementedException();
900 #endregion
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();
914 ReflectObjects();
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;
927 else {
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) {
946 if (obj != null) {
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);
971 if (recurse) {
972 object propObj = property.GetValue(obj);
973 if (propObj != null)
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
988 #if NET_2_0
990 public bool UseCompatibleTextRendering {
991 get {
992 return use_compatible_text_rendering;
995 set {
996 use_compatible_text_rendering = value;
999 #endif