From 1f8ffea110b5058ba10a7b8322b511934daf98e0 Mon Sep 17 00:00:00 2001 From: joncham Date: Tue, 18 Apr 2006 04:50:35 +0000 Subject: [PATCH] 2006-04-17 Jonathan Chambers * PropertyGridTextBox.cs: Formatting, copyright * PropertiesTab.cs: Formatting * PropertyGrid.cs: Formatting * PropertyGridView.cs: Formatting, fix drop down, enabled double click toggling of values git-svn-id: svn+ssh://mono-cvs.ximian.com/source/trunk/mcs@59574 e3ebcda4-bce8-0310-ba0a-eca2169e7518 --- .../System.Windows.Forms/ChangeLog | 8 + .../System.Windows.Forms/PropertiesTab.cs | 44 +- .../System.Windows.Forms/PropertyGrid.cs | 209 +++----- .../System.Windows.Forms/PropertyGridTextBox.cs | 302 ++++++------ .../System.Windows.Forms/PropertyGridView.cs | 527 ++++++++++----------- 5 files changed, 496 insertions(+), 594 deletions(-) rewrite class/Managed.Windows.Forms/System.Windows.Forms/PropertyGridTextBox.cs (64%) diff --git a/class/Managed.Windows.Forms/System.Windows.Forms/ChangeLog b/class/Managed.Windows.Forms/System.Windows.Forms/ChangeLog index db017baf7d..0baf8dfb36 100644 --- a/class/Managed.Windows.Forms/System.Windows.Forms/ChangeLog +++ b/class/Managed.Windows.Forms/System.Windows.Forms/ChangeLog @@ -1,3 +1,11 @@ +2006-04-17 Jonathan Chambers + + * PropertyGridTextBox.cs: Formatting, copyright + * PropertiesTab.cs: Formatting + * PropertyGrid.cs: Formatting + * PropertyGridView.cs: Formatting, fix drop down, enabled double + click toggling of values + 2006-04-17 Peter Dennis Bartok * KeyPressEventArgs: Added 2.0 only setter for KeyChar diff --git a/class/Managed.Windows.Forms/System.Windows.Forms/PropertiesTab.cs b/class/Managed.Windows.Forms/System.Windows.Forms/PropertiesTab.cs index fe1c4505ae..3546ceb095 100755 --- a/class/Managed.Windows.Forms/System.Windows.Forms/PropertiesTab.cs +++ b/class/Managed.Windows.Forms/System.Windows.Forms/PropertiesTab.cs @@ -24,54 +24,38 @@ // -// NOT COMPLETE +// COMPLETE using System; -namespace System.Windows.Forms.PropertyGridInternal -{ - /// - /// Summary description for PropertiesTab. - /// - public class PropertiesTab : System.Windows.Forms.Design.PropertyTab - { - public PropertiesTab() - { +namespace System.Windows.Forms.PropertyGridInternal { + + public class PropertiesTab : System.Windows.Forms.Design.PropertyTab { + public PropertiesTab() { } - public override System.ComponentModel.PropertyDescriptorCollection GetProperties(object component, Attribute[] attributes) - { + public override System.ComponentModel.PropertyDescriptorCollection GetProperties(object component, Attribute[] attributes) { return base.GetProperties(null, component, attributes); } - public override System.ComponentModel.PropertyDescriptorCollection GetProperties(System.ComponentModel.ITypeDescriptorContext context, object component, Attribute[] attributes) - { + public override System.ComponentModel.PropertyDescriptorCollection GetProperties(System.ComponentModel.ITypeDescriptorContext context, object component, Attribute[] attributes) { return base.GetProperties (context, component, attributes); } - public override System.ComponentModel.PropertyDescriptor GetDefaultProperty (object component) - { + public override System.ComponentModel.PropertyDescriptor GetDefaultProperty (object component) { return base.GetDefaultProperty(component); } - public override string HelpKeyword - { - get - { - return base.HelpKeyword; + public override string HelpKeyword { + get { + return "vs.properties"; } } - - public override string TabName - { - get - { - return string.Empty; + public override string TabName { + get { + return "Properties"; } } - - - } } diff --git a/class/Managed.Windows.Forms/System.Windows.Forms/PropertyGrid.cs b/class/Managed.Windows.Forms/System.Windows.Forms/PropertyGrid.cs index 001e0ba048..e4b1aa6c10 100644 --- a/class/Managed.Windows.Forms/System.Windows.Forms/PropertyGrid.cs +++ b/class/Managed.Windows.Forms/System.Windows.Forms/PropertyGrid.cs @@ -35,11 +35,9 @@ using System.Reflection; using System.Windows.Forms.Design; using System.Windows.Forms.PropertyGridInternal; -namespace System.Windows.Forms -{ +namespace System.Windows.Forms { [Designer("System.Windows.Forms.Design.PropertyGridDesigner, " + Consts.AssemblySystem_Design, "System.ComponentModel.Design.IDesigner")] - public class PropertyGrid : System.Windows.Forms.ContainerControl, ComponentModel.Com2Interop.IComPropertyBrowser - { + public class PropertyGrid : System.Windows.Forms.ContainerControl, ComponentModel.Com2Interop.IComPropertyBrowser { #region Private Members @@ -149,15 +147,14 @@ namespace System.Windows.Forms toolbar.Appearance = ToolBarAppearance.Flat; toolbar.AutoSize = false; toolbar.Buttons.AddRange(new ToolBarButton[] { - categorized_toolbarbutton, - alphabetic_toolbarbutton, - separator_toolbarbutton, - propertypages_toolbarbutton}); + categorized_toolbarbutton, + alphabetic_toolbarbutton, + separator_toolbarbutton, + propertypages_toolbarbutton}); toolbar.ButtonSize = new System.Drawing.Size(20, 20); toolbar.ImageList = toolbar_imagelist; toolbar.Location = new System.Drawing.Point(0, 0); - toolbar.Name = "toolbar"; toolbar.ShowToolTips = true; toolbar.Size = new System.Drawing.Size(256, 27); toolbar.TabIndex = 0; @@ -195,14 +192,6 @@ namespace System.Windows.Forms this.Name = "PropertyGrid"; this.Size = new System.Drawing.Size(256, 400); - has_focus = false; - - //TextChanged+=new System.EventHandler(RedrawEvent); - //ForeColorChanged+=new EventHandler(RedrawEvent); - //BackColorChanged+=new System.EventHandler(RedrawEvent); - //FontChanged+=new EventHandler(RedrawEvent); - //SizeChanged+=new EventHandler(RedrawEvent); - UpdateToolBarButtons(); } #endregion // Constructors @@ -338,8 +327,7 @@ namespace System.Windows.Forms [Browsable(false)] [EditorBrowsable(EditorBrowsableState.Never)] - public override Color ForeColor - { + public override Color ForeColor { get { return base.ForeColor; } @@ -349,12 +337,10 @@ namespace System.Windows.Forms } public Color HelpBackColor { - get - { + get { return help_panel.BackColor; } - set - { + set { if (help_panel.BackColor == value) { return; } @@ -439,7 +425,6 @@ namespace System.Windows.Forms property_sort = value; ReflectObjects(); - Console.WriteLine("PropertySort"); property_grid_view.Refresh(); if (PropertySortChanged != null) { @@ -476,7 +461,6 @@ namespace System.Windows.Forms if (selected_grid_item.PropertyDescriptor != null) this.help_description_label.Text = selected_grid_item.PropertyDescriptor.Description; - Console.WriteLine("SelectedGridItem"); current_property_value = value.Value; if (oldItem != null && oldItem.PropertyDescriptor != null) oldItem.PropertyDescriptor.RemoveValueChanged(SelectedObject, new EventHandler(HandlePropertyValueChanged)); @@ -487,8 +471,7 @@ namespace System.Windows.Forms } } - private void HandlePropertyValueChanged(object sender, EventArgs e) - { + private void HandlePropertyValueChanged(object sender, EventArgs e) { OnPropertyValueChanged(new PropertyValueChangedEventArgs( selected_grid_item, current_property_value)); } @@ -504,15 +487,12 @@ namespace System.Windows.Forms if (this.SelectedObject == null) return; PropertyTabAttribute[] propTabs = (PropertyTabAttribute[])this.SelectedObject.GetType().GetCustomAttributes(typeof(PropertyTabAttribute),true); - if (propTabs.Length > 0) - { - foreach (Type tabType in propTabs[0].TabClasses) - { + if (propTabs.Length > 0) { + foreach (Type tabType in propTabs[0].TabClasses) { this.PropertyTabs.AddTabType(tabType); } } RefreshTabs(PropertyTabScope.Component); - Console.WriteLine("SelectedObject"); ReflectObjects(); property_grid_view.Refresh(); } @@ -636,34 +616,27 @@ namespace System.Windows.Forms #region Public Instance Methods - protected override void Dispose(bool val) - { + protected override void Dispose(bool val) { base.Dispose(val); } - public void CollapseAllGridItems () - { - foreach (GridItem item in this.grid_items) - { + public void CollapseAllGridItems () { + foreach (GridItem item in this.grid_items) { item.Expanded = false; } } - public void ExpandAllGridItems () - { - foreach (GridItem item in this.grid_items) - { + public void ExpandAllGridItems () { + foreach (GridItem item in this.grid_items) { item.Expanded = true; } } - public override void Refresh () - { + public override void Refresh () { base.Refresh (); } - public void RefreshTabs (PropertyTabScope tabScope) - { + public void RefreshTabs (PropertyTabScope tabScope) { /*button = new ToolBarButton("C"); button.ImageIndex = 0; @@ -684,8 +657,7 @@ namespace System.Windows.Forms } - public void ResetSelectedProperty() - { + public void ResetSelectedProperty() { if (selected_grid_item == null || selected_grid_item.PropertyDescriptor == null) return; @@ -695,127 +667,101 @@ namespace System.Windows.Forms #region Protected Instance Methods - protected virtual PropertyTab CreatePropertyTab(Type tabType) - { + protected virtual PropertyTab CreatePropertyTab(Type tabType) { return (PropertyTab)Activator.CreateInstance(tabType); } [MonoTODO] - protected void OnComComponentNameChanged(ComponentRenameEventArgs e) - { + protected void OnComComponentNameChanged(ComponentRenameEventArgs e) { throw new NotImplementedException(); } - protected override void OnFontChanged(EventArgs e) - { + protected override void OnFontChanged(EventArgs e) { base.OnFontChanged (e); } - protected override void OnGotFocus(EventArgs e) - { - has_focus=true; + protected override void OnGotFocus(EventArgs e) { base.OnGotFocus(e); } - protected override void OnHandleCreated (EventArgs e) - { + protected override void OnHandleCreated (EventArgs e) { base.OnHandleCreated (e); } - protected override void OnHandleDestroyed (EventArgs e) - { + protected override void OnHandleDestroyed (EventArgs e) { base.OnHandleDestroyed (e); } - protected override void OnMouseDown (MouseEventArgs e) - { + protected override void OnMouseDown (MouseEventArgs e) { base.OnMouseDown (e); } - protected override void OnMouseMove (MouseEventArgs e) - { + protected override void OnMouseMove (MouseEventArgs e) { base.OnMouseMove (e); } - protected override void OnMouseUp (MouseEventArgs e) - { + protected override void OnMouseUp (MouseEventArgs e) { base.OnMouseUp (e); } [MonoTODO] - protected void OnNotifyPropertyValueUIItemsChanged(object sender, EventArgs e) - { + protected void OnNotifyPropertyValueUIItemsChanged(object sender, EventArgs e) { } - protected override void OnPaint (PaintEventArgs pevent) - { + protected override void OnPaint (PaintEventArgs pevent) { base.OnPaint (pevent); } [MonoTODO] - protected virtual void OnPropertyTabChanged (PropertyTabChangedEventArgs e) - { + protected virtual void OnPropertyTabChanged (PropertyTabChangedEventArgs e) { throw new NotImplementedException(); } - protected virtual void OnPropertyValueChanged (PropertyValueChangedEventArgs e) - { - if (PropertyValueChanged != null) - { + protected virtual void OnPropertyValueChanged (PropertyValueChangedEventArgs e) { + if (PropertyValueChanged != null) { PropertyValueChanged(this, e); current_property_value = selected_grid_item.Value; } } - protected override void OnResize (EventArgs e) - { + protected override void OnResize (EventArgs e) { base.OnResize (e); } - protected virtual void OnSelectedGridItemChanged (SelectedGridItemChangedEventArgs e) - { - if (SelectedGridItemChanged != null) - { + protected virtual void OnSelectedGridItemChanged (SelectedGridItemChangedEventArgs e) { + if (SelectedGridItemChanged != null) { SelectedGridItemChanged(this, e); } } - protected virtual void OnSelectedObjectsChanged (EventArgs e) - { - if (SelectedObjectsChanged != null) - { + protected virtual void OnSelectedObjectsChanged (EventArgs e) { + if (SelectedObjectsChanged != null) { SelectedObjectsChanged(this, e); } } - protected override void OnSystemColorsChanged (EventArgs e) - { + protected override void OnSystemColorsChanged (EventArgs e) { base.OnSystemColorsChanged (e); } - protected override void OnVisibleChanged (EventArgs e) - { + protected override void OnVisibleChanged (EventArgs e) { base.OnVisibleChanged (e); } - protected override bool ProcessDialogKey (Keys keyData) - { + protected override bool ProcessDialogKey (Keys keyData) { return base.ProcessDialogKey (keyData); } - protected override void ScaleCore (float dx, float dy) - { + protected override void ScaleCore (float dx, float dy) { base.ScaleCore (dx, dy); } [MonoTODO] - protected void ShowEventsButton(bool value) - { + protected void ShowEventsButton(bool value) { throw new NotImplementedException(); } - protected override void WndProc (ref Message m) - { + protected override void WndProc (ref Message m) { base.WndProc (ref m); } #endregion @@ -884,8 +830,7 @@ namespace System.Windows.Forms #endregion // Com2Interop.IComPropertyBrowser Interface #region PropertyTabCollection Class - public class PropertyTabCollection : ICollection, IEnumerable - { + public class PropertyTabCollection : ICollection, IEnumerable { System.Collections.ArrayList list; #region Private Constructors internal PropertyTabCollection() { @@ -901,20 +846,17 @@ namespace System.Windows.Forms } #region ICollection Members - bool ICollection.IsSynchronized - { + bool ICollection.IsSynchronized { get { return list.IsSynchronized; } } - void ICollection.CopyTo(Array array, int index) - { + void ICollection.CopyTo(Array array, int index) { list.CopyTo(array, index); } - object ICollection.SyncRoot - { + object ICollection.SyncRoot { get { return list.SyncRoot; } @@ -939,24 +881,20 @@ namespace System.Windows.Forms #endregion #region Public Instance Methods - public void AddTabType(System.Type propertyTabType) - { + public void AddTabType(System.Type propertyTabType) { list.Add(Activator.CreateInstance(propertyTabType)); } [MonoTODO] public void AddTabType(System.Type propertyTabType, - System.ComponentModel.PropertyTabScope tabScope) - { + System.ComponentModel.PropertyTabScope tabScope) { AddTabType(propertyTabType); } [MonoTODO] - public void Clear(System.ComponentModel.PropertyTabScope tabScope) - { + public void Clear(System.ComponentModel.PropertyTabScope tabScope) { throw new NotImplementedException(); } [MonoTODO] - public void RemoveTabType(System.Type propertyTabType) - { + public void RemoveTabType(System.Type propertyTabType) { throw new NotImplementedException(); } #endregion @@ -965,8 +903,7 @@ namespace System.Windows.Forms #region Private Helper Methods - private void toolbar_ButtonClick (object sender, ToolBarButtonClickEventArgs e) - { + private void toolbar_ButtonClick (object sender, ToolBarButtonClickEventArgs e) { if (e.Button == alphabetic_toolbarbutton) { this.PropertySort = PropertySort.Alphabetical; } @@ -975,12 +912,10 @@ namespace System.Windows.Forms } UpdateToolBarButtons(); ReflectObjects(); - Console.WriteLine("toolbar_ButtonClick"); property_grid_view.Refresh(); } - internal void UpdateToolBarButtons () - { + internal void UpdateToolBarButtons () { if (PropertySort == PropertySort.Alphabetical) { categorized_toolbarbutton.Pushed = false; alphabetic_toolbarbutton.Pushed = true; @@ -995,20 +930,17 @@ namespace System.Windows.Forms } } - private void OnResetPropertyClick (object sender, EventArgs e) - { + private void OnResetPropertyClick (object sender, EventArgs e) { ResetSelectedProperty(); } - private void OnDescriptionClick (object sender, EventArgs e) - { + private void OnDescriptionClick (object sender, EventArgs e) { this.HelpVisible = !this.HelpVisible; description_menuitem.Checked = this.HelpVisible; } - private void ReflectObjects () - { + private void ReflectObjects () { grid_items = new GridItemCollection(); foreach (object obj in selected_objects) { if (obj != null) { @@ -1017,32 +949,26 @@ namespace System.Windows.Forms } } - private void PopulateGridItemCollection (object obj, GridItemCollection grid_item_coll, bool recurse) - { - //TypeConverter converter = TypeDescriptor.GetConverter(obj); + private void PopulateGridItemCollection (object obj, GridItemCollection grid_item_coll, bool recurse) { PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(obj); foreach (PropertyDescriptor property in properties) { if (property.IsBrowsable) { GridEntry grid_entry = new GridEntry(obj, property); - if (property_sort == PropertySort.Alphabetical || !recurse) - { + if (property_sort == PropertySort.Alphabetical || !recurse) { if (grid_item_coll[property.Name] == null) grid_item_coll.Add(property.Name,grid_entry); } - else if (property_sort == PropertySort.Categorized || property_sort == PropertySort.CategorizedAlphabetical) - { + else if (property_sort == PropertySort.Categorized || property_sort == PropertySort.CategorizedAlphabetical) { string category = property.Category; GridItem cat_item = grid_item_coll[category]; - if (cat_item == null) - { + if (cat_item == null) { cat_item = new CategoryGridEntry(category); grid_item_coll.Add(category,cat_item); } cat_item.GridItems.Add(property.Name,grid_entry); } - if (recurse) - { + if (recurse) { object propObj = property.GetValue(obj); if (propObj != null) PopulateGridItemCollection(propObj,grid_entry.GridItems, false); @@ -1051,13 +977,14 @@ namespace System.Windows.Forms } } - #endregion // Private Helper Methods - - private void help_panel_Paint(object sender, PaintEventArgs e) - { + private void help_panel_Paint(object sender, PaintEventArgs e) { e.Graphics.FillRectangle(ThemeEngine.Current.ResPool.GetSolidBrush(help_panel.BackColor), help_panel.ClientRectangle ); e.Graphics.DrawRectangle(SystemPens.ControlDark, 0,0,help_panel.Width-1,help_panel.Height-1 ); } + + #endregion // Private Helper Methods + + #if NET_2_0 public bool UseCompatibleTextRendering { diff --git a/class/Managed.Windows.Forms/System.Windows.Forms/PropertyGridTextBox.cs b/class/Managed.Windows.Forms/System.Windows.Forms/PropertyGridTextBox.cs dissimilarity index 64% index be8110e959..4bb41a3ad4 100644 --- a/class/Managed.Windows.Forms/System.Windows.Forms/PropertyGridTextBox.cs +++ b/class/Managed.Windows.Forms/System.Windows.Forms/PropertyGridTextBox.cs @@ -1,146 +1,156 @@ -using System; - -namespace System.Windows.Forms.PropertyGridInternal { - internal class PropertyGridTextBox : System.Windows.Forms.UserControl { - private TextBox textbox; - private Button dialog_button; - private Button dropdown_button; - /// - /// Required designer variable. - /// - private System.ComponentModel.Container components = null; - - public PropertyGridTextBox() { - // This call is required by the Windows.Forms Form Designer. - InitializeComponent(); - dropdown_button.Paint+=new PaintEventHandler(dropdown_button_Paint); - - // TODO: Add any initialization after the InitializeComponent call - - } - - /// - /// Clean up any resources being used. - /// - protected override void Dispose( bool disposing ) { - if( disposing ) { - if(components != null) { - components.Dispose(); - } - } - base.Dispose( disposing ); - } - - #region Component Designer generated code - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() { - this.dialog_button = new System.Windows.Forms.Button(); - this.dropdown_button = new System.Windows.Forms.Button(); - this.textbox = new System.Windows.Forms.TextBox(); - this.SuspendLayout(); - // - // dialog_button - // - this.dialog_button.Dock = System.Windows.Forms.DockStyle.Right; - this.dialog_button.Location = new System.Drawing.Point(256, 0); - this.dialog_button.Name = "dialog_button"; - this.dialog_button.Size = new System.Drawing.Size(16, 16); - this.dialog_button.TabIndex = 1; - this.dialog_button.Text = "D"; - this.dialog_button.Visible = false; - this.dialog_button.Click += new System.EventHandler(this.dialog_button_Click); - // - // dropdown_button - // - this.dropdown_button.Dock = System.Windows.Forms.DockStyle.Right; - this.dropdown_button.Location = new System.Drawing.Point(240, 0); - this.dropdown_button.Name = "dropdown_button"; - this.dropdown_button.Size = new System.Drawing.Size(16, 16); - this.dropdown_button.TabIndex = 2; - this.dropdown_button.Visible = false; - this.dropdown_button.Click += new System.EventHandler(this.dropdown_button_Click); - // - // textbox - // - this.textbox.AutoSize = false; - this.textbox.BackColor = System.Drawing.SystemColors.Window; - this.textbox.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textbox.Dock = System.Windows.Forms.DockStyle.Fill; - this.textbox.Location = new System.Drawing.Point(0, 0); - this.textbox.Name = "textbox"; - this.textbox.Size = new System.Drawing.Size(240, 16); - this.textbox.TabIndex = 3; - this.textbox.Text = "textbox"; - // - // PropertyGridTextBox - // - this.Controls.Add(this.textbox); - this.Controls.Add(this.dropdown_button); - this.Controls.Add(this.dialog_button); - this.Name = "PropertyGridTextBox"; - this.Size = new System.Drawing.Size(272, 16); - this.ResumeLayout(false); - - } - #endregion - - private void dropdown_button_Click(object sender, System.EventArgs e) { - if (DropDownButtonClicked != null) - DropDownButtonClicked(this, EventArgs.Empty); - } - - private void dialog_button_Click(object sender, System.EventArgs e) { - if (DialogButtonClicked != null) - DialogButtonClicked(this, EventArgs.Empty); - } - - - public event EventHandler DropDownButtonClicked; - public event EventHandler DialogButtonClicked; - - public bool DialogButtonVisible { - get{ - return dialog_button.Visible; - } - set { - dialog_button.Visible = value; - dropdown_button.Redraw(); - } - } - public bool DropDownButtonVisible { - get{ - return dropdown_button.Visible; - } - set { - dropdown_button.Visible = value; - dropdown_button.Redraw(); - } - } - - public bool ReadOnly { - get { - return textbox.ReadOnly; - } - set { - textbox.ReadOnly = value; - } - } - - public new string Text { - get { - return textbox.Text; - } - set { - textbox.Text = value; - } - } - - private void dropdown_button_Paint(object sender, PaintEventArgs e) - { - ThemeEngine.Current.CPDrawComboButton(e.Graphics, dropdown_button.ClientRectangle, dropdown_button.ButtonState); - } - } -} +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +// Copyright (c) 2004-2005 Novell, Inc. +// +// Authors: +// Jonathan Chambers (jonathan.chambers@ansys.com) +// + +// COMPLETE + +using System; +using System.Drawing; + +namespace System.Windows.Forms.PropertyGridInternal { + internal class PropertyGridTextBox : System.Windows.Forms.UserControl { + #region Private Members + + private TextBox textbox; + private Button dialog_button; + private Button dropdown_button; + + #endregion Private Members + + #region Contructors + public PropertyGridTextBox() { + dialog_button = new Button(); + dropdown_button = new Button(); + textbox = new TextBox(); + + SuspendLayout(); + + dialog_button.Dock = DockStyle.Right; + dialog_button.Size = new Size(16, 16); + dialog_button.TabIndex = 1; + dialog_button.Visible = false; + dialog_button.Click += new System.EventHandler(dialog_button_Click); + + dropdown_button.Dock = DockStyle.Right; + dropdown_button.Size = new Size(16, 16); + dropdown_button.TabIndex = 2; + dropdown_button.Visible = false; + dropdown_button.Click += new System.EventHandler(dropdown_button_Click); + + textbox.AutoSize = false; + textbox.BorderStyle = BorderStyle.None; + textbox.Dock = DockStyle.Fill; + textbox.TabIndex = 3; + + Controls.Add(textbox); + Controls.Add(dropdown_button); + Controls.Add(dialog_button); + + ResumeLayout(false); + + dropdown_button.Paint+=new PaintEventHandler(dropdown_button_Paint); + dialog_button.Paint+=new PaintEventHandler(dialog_button_Paint); + textbox.DoubleClick+=new EventHandler(textbox_DoubleClick); + } + + + #endregion Contructors + + #region Public Instance Properties + + public bool DialogButtonVisible { + get{ + return dialog_button.Visible; + } + set { + dialog_button.Visible = value; + } + } + public bool DropDownButtonVisible { + get{ + return dropdown_button.Visible; + } + set { + dropdown_button.Visible = value; + } + } + + public bool ReadOnly { + get { + return textbox.ReadOnly; + } + set { + textbox.ReadOnly = value; + } + } + + public new string Text { + get { + return textbox.Text; + } + set { + textbox.Text = value; + } + } + + #endregion Public Instance Properties + + #region Events + + public event EventHandler DropDownButtonClicked; + public event EventHandler DialogButtonClicked; + public event EventHandler ToggleValue; + + #endregion Events + + #region Private Helper Methods + + private void dropdown_button_Paint(object sender, PaintEventArgs e) + { + ThemeEngine.Current.CPDrawComboButton(e.Graphics, dropdown_button.ClientRectangle, dropdown_button.ButtonState); + } + + private void dialog_button_Paint(object sender, PaintEventArgs e) { + // best way to draw the ellipse? + e.Graphics.DrawString("...", new Font(Font,FontStyle.Bold), Brushes.Black, 0,0); + } + + private void dropdown_button_Click(object sender, System.EventArgs e) { + if (DropDownButtonClicked != null) + DropDownButtonClicked(this, EventArgs.Empty); + } + + private void dialog_button_Click(object sender, System.EventArgs e) { + if (DialogButtonClicked != null) + DialogButtonClicked(this, EventArgs.Empty); + } + + #endregion Private Helper Methods + + private void textbox_DoubleClick(object sender, EventArgs e) { + if (ToggleValue != null) + ToggleValue(this, EventArgs.Empty); + } + } +} diff --git a/class/Managed.Windows.Forms/System.Windows.Forms/PropertyGridView.cs b/class/Managed.Windows.Forms/System.Windows.Forms/PropertyGridView.cs index eeb37b33fb..1b57cd7af2 100644 --- a/class/Managed.Windows.Forms/System.Windows.Forms/PropertyGridView.cs +++ b/class/Managed.Windows.Forms/System.Windows.Forms/PropertyGridView.cs @@ -33,10 +33,8 @@ using System.Drawing.Design; using System.ComponentModel; using System.Windows.Forms.Design; -namespace System.Windows.Forms.PropertyGridInternal -{ - internal class PropertyGridView : System.Windows.Forms.ScrollableControl, IWindowsFormsEditorService - { +namespace System.Windows.Forms.PropertyGridInternal { + internal class PropertyGridView : System.Windows.Forms.ScrollableControl, IWindowsFormsEditorService { #region Private Members private const int V_INDENT = 16; @@ -53,22 +51,21 @@ namespace System.Windows.Forms.PropertyGridInternal private bool dropdown_form_showing; private Form dialog_form; private VScrollBar vbar; - private StringFormat stringFormat; + private StringFormat string_format; + private Font bold_font; #endregion #region Contructors - public PropertyGridView (PropertyGrid propertyGrid) - { + public PropertyGridView (PropertyGrid propertyGrid) { property_grid = propertyGrid; property_grid.SelectedGridItemChanged+=new SelectedGridItemChangedEventHandler(HandleSelectedGridItemChanged); property_grid.PropertyValueChanged+=new PropertyValueChangedEventHandler(HandlePropertyValueChanged); - stringFormat = new StringFormat(); - stringFormat.FormatFlags = StringFormatFlags.NoWrap; - stringFormat.Trimming = StringTrimming.None; + string_format = new StringFormat(); + string_format.FormatFlags = StringFormatFlags.NoWrap; + string_format.Trimming = StringTrimming.None; - this.BackColor = Color.Beige; grid_textbox = new PropertyGridTextBox(); grid_textbox.DropDownButtonClicked +=new EventHandler(DropDownButtonClicked); grid_textbox.DialogButtonClicked +=new EventHandler(DialogButtonClicked); @@ -79,15 +76,17 @@ namespace System.Windows.Forms.PropertyGridInternal dropdown_form.ShowInTaskbar = false; dialog_form = new Form(); - //dialog_form.FormBorderStyle = FormBorderStyle.None; + dialog_form.FormBorderStyle = FormBorderStyle.None; + dialog_form.ShowInTaskbar = false; grid_textbox.Visible = false; - grid_textbox.Font = this.Font;//new Font(this.Font,FontStyle.Bold); + grid_textbox.Font = this.Font; grid_textbox.BackColor = this.BackColor; // Not working at all, used to?? grid_textbox.Validating += new CancelEventHandler(TextBoxValidating); + grid_textbox.ToggleValue+=new EventHandler(grid_textbox_ToggleValue); this.Controls.Add(grid_textbox); vbar = new VScrollBar(); @@ -99,6 +98,8 @@ namespace System.Windows.Forms.PropertyGridInternal splitter_location = 65; resizing_grid = false; + bold_font = new Font(this.Font, FontStyle.Bold); + ForeColorChanged+=new EventHandler(RedrawEvent); BackColorChanged+=new System.EventHandler(RedrawEvent); FontChanged+=new EventHandler(RedrawEvent); @@ -108,56 +109,53 @@ namespace System.Windows.Forms.PropertyGridInternal SetStyle(ControlStyles.UserPaint, true); SetStyle(ControlStyles.AllPaintingInWmPaint, true); SetStyle(ControlStyles.ResizeRedraw, false); - SetStyle(ControlStyles.StandardClick | ControlStyles.StandardDoubleClick, false); } #endregion #region Protected Instance Methods - - protected override void OnPaint(PaintEventArgs e) - { - if (property_grid.SelectedGridItem != null && property_grid.SelectedGridItem.GridItemType == GridItemType.Property) - { - grid_textbox.Visible = true; - if (!grid_textbox.Focused) - grid_textbox.Focus(); - } + + protected override void OnFontChanged(EventArgs e) { + bold_font = new Font(this.Font, FontStyle.Bold); + base.OnFontChanged (e); + } + + protected override void OnDoubleClick(EventArgs e) { + if (property_grid.SelectedGridItem.Expandable) + property_grid.SelectedGridItem.Expanded = !property_grid.SelectedGridItem.Expanded; else - { - grid_textbox.Visible = false; - } + ToggleValue(); + Invalidate(); + base.OnDoubleClick (e); + } + protected override void OnPaint(PaintEventArgs e) { // Decide if we need a scrollbar open_grid_item_count = 0; - // draw grid outline - //DrawBackground(e); - + // Background e.Graphics.FillRectangle (ThemeEngine.Current.ResPool.GetSolidBrush (BackColor), ClientRectangle); + + // Left column + e.Graphics.FillRectangle (ThemeEngine.Current.ResPool.GetSolidBrush (property_grid.LineColor), 0,0,V_INDENT, ClientRectangle.Height); + + // Grid + DrawGrid(e); - // draw grid items - // can we use the transform - //pevent.Graphics.TranslateTransform(0, -vbar.Value*ROW_HEIGHT); int yLoc = -vbar.Value*ROW_HEIGHT; DrawGridItems(property_grid.grid_items, e, 1, ref yLoc); - DrawGrid(e, yLoc); + // Border e.Graphics.DrawRectangle(SystemPens.ControlDark, 0,0,Width-1,Height-1 ); - - - UpdateScrollBar(); base.OnPaint(e); } - protected override void OnMouseMove (MouseEventArgs e) - { + protected override void OnMouseMove (MouseEventArgs e) { - if (resizing_grid) - { + if (resizing_grid) { splitter_location = Math.Max(e.X,2*V_INDENT); Refresh(); } @@ -168,42 +166,17 @@ namespace System.Windows.Forms.PropertyGridInternal base.OnMouseMove (e); } - private GridItem GetSelectedGridItem (GridItemCollection grid_items, int y, ref int current) - { - foreach (GridItem child_grid_item in grid_items) - { - if (y > current && y < current + ROW_HEIGHT) - { - return child_grid_item; - } - current += ROW_HEIGHT; - if (child_grid_item.Expanded) - { - GridItem foundItem = GetSelectedGridItem(child_grid_item.GridItems, y, ref current); - if (foundItem != null) - return foundItem; - } - } - return null; - } - - protected override void OnMouseDown (MouseEventArgs e) - { - if (e.X > splitter_location - RESIZE_WIDTH && e.X < splitter_location + RESIZE_WIDTH) - { + protected override void OnMouseDown (MouseEventArgs e) { + if (e.X > splitter_location - RESIZE_WIDTH && e.X < splitter_location + RESIZE_WIDTH) { resizing_grid = true; } - else - { + else { int offset = -vbar.Value*ROW_HEIGHT; GridItem foundItem = GetSelectedGridItem(property_grid.grid_items, e.Y, ref offset); - if (foundItem != null) - { - if (foundItem.Expandable) - { - if (e.X >=3 && e.X <= 11 && (e.Y % ROW_HEIGHT >= 3 && e.Y % ROW_HEIGHT <= 11)) - { + if (foundItem != null) { + if (foundItem.Expandable) { + if (e.X >=3 && e.X <= 11 && (e.Y % ROW_HEIGHT >= 3 && e.Y % ROW_HEIGHT <= 11)) { foundItem.Expanded = !foundItem.Expanded; Invalidate(); } @@ -215,121 +188,123 @@ namespace System.Windows.Forms.PropertyGridInternal } } - protected override void OnMouseUp (MouseEventArgs e) - { + protected override void OnMouseUp (MouseEventArgs e) { resizing_grid = false; base.OnMouseUp (e); } - protected override void OnKeyDown (KeyEventArgs e) - { - base.OnKeyDown (e); + protected override void OnKeyPress(KeyPressEventArgs e) { + if (property_grid.SelectedGridItem.Expandable) + property_grid.SelectedGridItem.Expanded = !property_grid.SelectedGridItem.Expanded; + base.OnKeyPress (e); } #endregion #region Private Helper Methods + private GridItem GetSelectedGridItem (GridItemCollection grid_items, int y, ref int current) { + foreach (GridItem child_grid_item in grid_items) { + if (y > current && y < current + ROW_HEIGHT) { + return child_grid_item; + } + current += ROW_HEIGHT; + if (child_grid_item.Expanded) { + GridItem foundItem = GetSelectedGridItem(child_grid_item.GridItems, y, ref current); + if (foundItem != null) + return foundItem; + } + } + return null; + } - private void UpdateScrollBar() - { + private void UpdateScrollBar() { int visible_rows = this.ClientRectangle.Height/ROW_HEIGHT; - if (open_grid_item_count > visible_rows) - { + if (open_grid_item_count > visible_rows) { vbar.Visible = true; vbar.SmallChange = 1; vbar.Minimum = 0; vbar.Maximum = open_grid_item_count-1; vbar.LargeChange = visible_rows; } - else - { + else { vbar.Visible = false; } } - private GridItem GetGridItemAt (int y) - { - return null; - } - #region Drawing Code - private void DrawGrid(PaintEventArgs pevent, int yLoc) - { + private void DrawGrid(PaintEventArgs pevent) { Pen pen = ThemeEngine.Current.ResPool.GetPen(property_grid.LineColor); // vertical divider line - pevent.Graphics.DrawLine(pen, splitter_location, 0, splitter_location, yLoc); + pevent.Graphics.DrawLine(pen, splitter_location, 0, splitter_location, ClientRectangle.Height); - while (yLoc >= 0) - { + int y = 0; + while (y < ClientRectangle.Height) { // horizontal lines - pevent.Graphics.DrawLine(pen, 0, yLoc, ClientRectangle.Width, yLoc); - yLoc -= ROW_HEIGHT; + pevent.Graphics.DrawLine(pen, 0, y, ClientRectangle.Width, y); + y += ROW_HEIGHT; } } - private void DrawGridItems(GridItemCollection grid_items, PaintEventArgs pevent, int depth, ref int yLoc) - { - foreach (GridItem grid_item in grid_items) - { + private void DrawGridItems(GridItemCollection grid_items, PaintEventArgs pevent, int depth, ref int yLoc) { + foreach (GridItem grid_item in grid_items) { DrawGridItem (grid_item, pevent, depth, ref yLoc); if (grid_item.Expanded) DrawGridItems(grid_item.GridItems, pevent, (grid_item.GridItemType == GridItemType.Category) ? depth : depth+1, ref yLoc); } } - private void DrawGridItemLabel(GridItem grid_item, PaintEventArgs pevent, Rectangle rect) - { + private void DrawGridItemLabel(GridItem grid_item, PaintEventArgs pevent, Rectangle rect) { int x = rect.X+1; if (grid_item.Parent != null && grid_item.Parent.GridItemType != GridItemType.Category) x += V_INDENT; Font font = this.Font; Brush brush = SystemBrushes.WindowText; - if (grid_item.GridItemType == GridItemType.Category) - { - font = new Font(font, FontStyle.Bold); + if (grid_item.GridItemType == GridItemType.Category) { + font = bold_font; brush = SystemBrushes.ControlDark; } - if (grid_item == property_grid.SelectedGridItem && grid_item.GridItemType != GridItemType.Category) - { + if (grid_item == property_grid.SelectedGridItem && grid_item.GridItemType != GridItemType.Category) { pevent.Graphics.FillRectangle (SystemBrushes.Highlight, rect); // Label brush = SystemBrushes.HighlightText; } - pevent.Graphics.DrawString(grid_item.Label,font,brush,new Rectangle(x, rect.Y + 2,x-rect.X+rect.Width-2,rect.Height-2),stringFormat); + if (grid_item.GridItemType == GridItemType.Category) { + pevent.Graphics.DrawString(grid_item.Label,font,brush,x, rect.Y + 2); + if (grid_item == property_grid.SelectedGridItem) { + SizeF size = pevent.Graphics.MeasureString(grid_item.Label, bold_font); + ControlPaint.DrawFocusRectangle(pevent.Graphics, new Rectangle(x,rect.Y+2, (int)size.Width, (int)size.Height)); + } + } + else + pevent.Graphics.DrawString(grid_item.Label,font,brush,new Rectangle(x, rect.Y + 2,x-rect.X+rect.Width-2,rect.Height-2),string_format); } - private void DrawGridItemValue(GridItem grid_item, PaintEventArgs pevent, Rectangle rect) - { + private void DrawGridItemValue(GridItem grid_item, PaintEventArgs pevent, Rectangle rect) { // Value - if (grid_item.PropertyDescriptor != null) - { + if (grid_item.PropertyDescriptor != null) { bool paintsValue = false; UITypeEditor editor = null; object temp = grid_item.PropertyDescriptor.GetEditor(typeof(UITypeEditor)); editor = (UITypeEditor)temp;//grid_item.PropertyDescriptor.GetEditor(typeof(UITypeEditor)); - if (editor != null) - { + if (editor != null) { paintsValue = editor.GetPaintValueSupported(); } - if (grid_item == property_grid.SelectedGridItem) - { + if (grid_item == property_grid.SelectedGridItem) { grid_textbox.ReadOnly = false; grid_textbox.DropDownButtonVisible = false; grid_textbox.DialogButtonVisible = false; - if (editor != null) - { + if (editor != null) { UITypeEditorEditStyle style = editor.GetEditStyle(); - switch (style) - { + switch (style) { case UITypeEditorEditStyle.DropDown: grid_textbox.DropDownButtonVisible = true; break; @@ -338,27 +313,21 @@ namespace System.Windows.Forms.PropertyGridInternal break; } } - else - { - try - { - if (grid_item.PropertyDescriptor.Converter != null) - { - if (grid_item.PropertyDescriptor.Converter.GetStandardValuesSupported()) - { + else { + try { + if (grid_item.PropertyDescriptor.Converter != null) { + if (grid_item.PropertyDescriptor.Converter.GetStandardValuesSupported()) { grid_textbox.DropDownButtonVisible = true; grid_textbox.ReadOnly = true; } } - else - { + else { System.Console.WriteLine("Converter not available for type {0}",grid_item.PropertyDescriptor.PropertyType); } } - catch (Exception ex) - { + catch (Exception ex) { } } } @@ -366,15 +335,12 @@ namespace System.Windows.Forms.PropertyGridInternal int xLoc = splitter_location+1; - if (paintsValue) - { + if (paintsValue) { pevent.Graphics.DrawRectangle(ThemeEngine.Current.ResPool.GetPen(Color.Black), splitter_location+2,rect.Y+2, 20, ROW_HEIGHT-4); - try - { + try { editor.PaintValue(grid_item.Value, pevent.Graphics, new Rectangle(splitter_location+3,rect.Y+3, 19, ROW_HEIGHT-5)); } - catch (Exception ex) - { + catch (Exception ex) { System.Console.WriteLine(ex.Message); System.Console.WriteLine("Paint Value failed for type {0}",grid_item.PropertyDescriptor.PropertyType); // design time stuff is not playing nice @@ -383,69 +349,52 @@ namespace System.Windows.Forms.PropertyGridInternal } Font font = this.Font; - try - { - if (grid_item.PropertyDescriptor.Converter != null) - { + try { + if (grid_item.PropertyDescriptor.Converter != null) { string value = grid_item.PropertyDescriptor.Converter.ConvertToString(grid_item.Value); if (grid_item.PropertyDescriptor.CanResetValue(property_grid.SelectedObject)) - font = new Font(font, FontStyle.Bold); + font = bold_font; - pevent.Graphics.DrawString(value,font,SystemBrushes.WindowText,new RectangleF(xLoc,rect.Y+2, ClientRectangle.Width-(xLoc), ROW_HEIGHT),stringFormat); + pevent.Graphics.DrawString(value,font,SystemBrushes.WindowText,new RectangleF(xLoc,rect.Y+2, ClientRectangle.Width-(xLoc), ROW_HEIGHT),string_format); } - else - { + else { System.Console.WriteLine("No converter for type {0}",grid_item.PropertyDescriptor.PropertyType); } } - catch (Exception e) - { + catch (Exception e) { } - if (grid_item == property_grid.SelectedGridItem && grid_item.GridItemType != GridItemType.Category) - { + if (grid_item == property_grid.SelectedGridItem && grid_item.GridItemType != GridItemType.Category) { grid_textbox.SetBounds(xLoc, rect.Top, ClientRectangle.Width-xLoc - (vbar.Visible ? vbar.Width: 0),ROW_HEIGHT); } } } - private void DrawGridItem (GridItem grid_item, PaintEventArgs pevent, int depth, ref int yLoc) - { - if (yLoc > -ROW_HEIGHT && yLoc < ClientRectangle.Height) - { - - // left column - pevent.Graphics.FillRectangle (ThemeEngine.Current.ResPool.GetSolidBrush (property_grid.LineColor), 0,yLoc,V_INDENT, ROW_HEIGHT); - - if (grid_item.Expandable) - { - grid_item.PlusMinusBounds = DrawPlusMinus(pevent, 3, yLoc+3, grid_item.Expanded, grid_item.GridItemType == GridItemType.Category); + private void DrawGridItem (GridItem grid_item, PaintEventArgs pevent, int depth, ref int yLoc) { + if (yLoc > -ROW_HEIGHT && yLoc < ClientRectangle.Height) { + if (grid_item.Expandable) { + grid_item.PlusMinusBounds = DrawPlusMinus(pevent.Graphics, 3, yLoc+3, grid_item.Expanded, grid_item.GridItemType == GridItemType.Category); } - if (grid_item.GridItemType == GridItemType.Category) - { + if (grid_item.GridItemType == GridItemType.Category) { pevent.Graphics.FillRectangle (ThemeEngine.Current.ResPool.GetSolidBrush (property_grid.LineColor), depth*V_INDENT,yLoc,ClientRectangle.Width-(depth*V_INDENT), ROW_HEIGHT); } DrawGridItemLabel(grid_item, pevent, new Rectangle(depth*V_INDENT,yLoc, splitter_location-depth*V_INDENT, ROW_HEIGHT)); DrawGridItemValue(grid_item, pevent, new Rectangle(splitter_location+2,yLoc, ClientRectangle.Width-splitter_location-2, ROW_HEIGHT)); - - - } grid_item.Top = yLoc; yLoc += ROW_HEIGHT; open_grid_item_count++; } - private Rectangle DrawPlusMinus (PaintEventArgs pevent, int x, int y, bool expanded, bool category) - { + private Rectangle DrawPlusMinus (Graphics g, int x, int y, bool expanded, bool category) { Rectangle bounds = new Rectangle(x, y, 8, 8); - if (!category) pevent.Graphics.FillRectangle (ThemeEngine.Current.ResPool.GetSolidBrush(Color.White), bounds); - pevent.Graphics.DrawRectangle (SystemPens.ControlDark, bounds); - pevent.Graphics.DrawLine (SystemPens.ControlDark, x+2, y+4, x + 6, y+4); + if (!category) g.FillRectangle (ThemeEngine.Current.ResPool.GetSolidBrush(Color.White), bounds); + g.DrawRectangle (SystemPens.ControlDark, bounds); + g.DrawLine (SystemPens.ControlDark, x+2, y+4, x + 6, y+4); if (!expanded) - pevent.Graphics.DrawLine (SystemPens.ControlDark, x+4, y+2, x+4, y+6); + g.DrawLine (SystemPens.ControlDark, x+4, y+2, x+4, y+6); return bounds; } @@ -453,31 +402,23 @@ namespace System.Windows.Forms.PropertyGridInternal #endregion #region Event Handling - private void RedrawEvent (object sender, System.EventArgs e) - { + private void RedrawEvent (object sender, System.EventArgs e) { Refresh(); } - private void TextBoxValidating (object sender, CancelEventArgs e) - { - if (this.property_grid.SelectedGridItem != null) - { + private void TextBoxValidating (object sender, CancelEventArgs e) { + if (this.property_grid.SelectedGridItem != null) { PropertyDescriptor desc = property_grid.SelectedGridItem.PropertyDescriptor; - if (desc != null) - { - try - { - if (desc.Converter != null) - { + if (desc != null) { + try { + if (desc.Converter != null) { SetPropertyValue(desc.Converter.ConvertFromString(grid_textbox.Text)); } - else - { + else { System.Console.WriteLine("No converter for type {0}",desc.PropertyType); } } - catch (Exception ex) - { + catch (Exception ex) { Console.WriteLine("Error converting string"); } } @@ -486,62 +427,78 @@ namespace System.Windows.Forms.PropertyGridInternal #endregion - - #endregion + private void ToggleValue() { + if (property_grid.SelectedGridItem.GridItemType == GridItemType.Property) { + if (property_grid.SelectedGridItem.PropertyDescriptor != null) { + if (property_grid.SelectedGridItem.PropertyDescriptor.PropertyType == typeof(bool)) + SetPropertyValue(!(bool)property_grid.SelectedGridItem.Value); + else if (property_grid.SelectedGridItem.PropertyDescriptor.Converter.GetStandardValuesSupported()){ + System.ComponentModel.TypeConverter.StandardValuesCollection coll = + (System.ComponentModel.TypeConverter.StandardValuesCollection)property_grid.SelectedGridItem.PropertyDescriptor.Converter.GetStandardValues(); + for (int i = 0; i < coll.Count; i++) { + if (property_grid.SelectedGridItem.Value.Equals(coll[i])){ + if (i < coll.Count-1) + SetPropertyValue(coll[i+1]); + else + SetPropertyValue(coll[0]); + break; + } - private void dropdown_form_Deactivate (object sender, EventArgs e) - { + } + } + } + } + } + + private void dropdown_form_Deactivate (object sender, EventArgs e) { dropdown_form_showing = false; dropdown_form.Hide(); - //dropdown_form = new Form(); } - private void listBox_SelectedIndexChanged (object sender, EventArgs e) - { - if (this.property_grid.SelectedGridItem != null) - { + private void listBox_MouseUp(object sender, MouseEventArgs e) { + if (this.property_grid.SelectedGridItem != null) { PropertyDescriptor desc = property_grid.SelectedGridItem.PropertyDescriptor; - if (desc != null) - { - SetPropertyValue(((ListBox)sender).SelectedItem); + if (desc != null) { + SetPropertyValue(((PropertyGridListBox)sender).SelectedItem); } } + dropdown_form_showing = false; dropdown_form.Hide(); - //dropdown_form = new Form(); Refresh(); } - private void SetPropertyValue(object newVal) - { - if (this.property_grid.SelectedGridItem != null) - { + private void SetPropertyValue(object newVal) { + if (this.property_grid.SelectedGridItem != null) { PropertyDescriptor desc = property_grid.SelectedGridItem.PropertyDescriptor; - if (desc != null) - { + if (desc != null) { desc.SetValue(property_grid.SelectedObject, newVal); } } } - private void DropDownButtonClicked (object sender, EventArgs e) - { - if (property_grid.SelectedGridItem.PropertyDescriptor.GetEditor(typeof(UITypeEditor)) == null) - { - //dropdown_form.FormBorderStyle = FormBorderStyle.None; + private void DropDownButtonClicked (object sender, EventArgs e) { + if (property_grid.SelectedGridItem.PropertyDescriptor.GetEditor(typeof(UITypeEditor)) == null) { dropdown_form.Deactivate +=new EventHandler(dropdown_form_Deactivate); - ListBox listBox = new ListBox(); + PropertyGridListBox listBox = new PropertyGridListBox(); + listBox.BorderStyle = BorderStyle.FixedSingle; listBox.Dock = DockStyle.Fill; - listBox.SelectedIndexChanged +=new EventHandler(listBox_SelectedIndexChanged); - foreach (object obj in property_grid.SelectedGridItem.PropertyDescriptor.Converter.GetStandardValues()) + int selected_index = 0; + int i = 0; + foreach (object obj in property_grid.SelectedGridItem.PropertyDescriptor.Converter.GetStandardValues()) { listBox.Items.Add(obj); + if (property_grid.SelectedGridItem.Value.Equals(obj)) + selected_index = i; + i++; + } + listBox.SelectedIndex = selected_index; + listBox.MouseUp+=new MouseEventHandler(listBox_MouseUp); dropdown_form.Controls.Clear(); dropdown_form.Controls.Add(listBox); dropdown_form.Location = PointToScreen(new Point(grid_textbox.Location.X,grid_textbox.Location.Y+ROW_HEIGHT)); dropdown_form.Width = grid_textbox.Width; dropdown_form.Show(); } - else // use editor - { + else { // use editor UITypeEditor editor = (UITypeEditor)property_grid.SelectedGridItem.PropertyDescriptor.GetEditor(typeof(UITypeEditor)); System.ComponentModel.Design.ServiceContainer service_container = new System.ComponentModel.Design.ServiceContainer(); service_container.AddService(typeof(System.Windows.Forms.Design.IWindowsFormsEditorService), this); @@ -549,39 +506,30 @@ namespace System.Windows.Forms.PropertyGridInternal } } - private void DialogButtonClicked(object sender, EventArgs e) - { - //dialog_form.Location = PointToScreen(new Point(grid_textbox.Location.X,grid_textbox.Location.Y+ROW_HEIGHT)); - //dropdown_form.Width = grid_textbox.Width; + private void DialogButtonClicked(object sender, EventArgs e) { dialog_form.Show(); } - private void HandleScroll(object sender, ScrollEventArgs e) - { - if (e.NewValue <= 0) - { + private void HandleScroll(object sender, ScrollEventArgs e) { + if (e.NewValue <= 0) { e.NewValue = 0; if (e.NewValue == vbar.Value)return; } - if (e.NewValue > vbar.Maximum-ClientRectangle.Height/ROW_HEIGHT) - { + if (e.NewValue > vbar.Maximum-ClientRectangle.Height/ROW_HEIGHT) { e.NewValue = vbar.Maximum-ClientRectangle.Height/ROW_HEIGHT+1; if (e.NewValue == vbar.Value)return; } - switch (e.Type) - { + switch (e.Type) { case ScrollEventType.SmallDecrement: XplatUI.ScrollWindow(Handle, 0, ROW_HEIGHT, false); grid_textbox.Top += ROW_HEIGHT; Invalidate(ClientRectangle); - //Invalidate(new Rectangle(0,0,ClientRectangle.Width,ROW_HEIGHT)); break; case ScrollEventType.SmallIncrement: XplatUI.ScrollWindow(Handle, 0, -ROW_HEIGHT, false); grid_textbox.Top -= ROW_HEIGHT; Invalidate(ClientRectangle); - //Invalidate(new Rectangle(0,ClientRectangle.Bottom-ROW_HEIGHT,ClientRectangle.Width,ROW_HEIGHT)); break; case ScrollEventType.LargeDecrement: XplatUI.ScrollWindow(Handle, 0, ROW_HEIGHT, false); @@ -601,20 +549,27 @@ namespace System.Windows.Forms.PropertyGridInternal } } + private void grid_textbox_ToggleValue(object sender, EventArgs e) { + ToggleValue(); + Invalidate(); + } - private void HandleSelectedGridItemChanged(object sender, SelectedGridItemChangedEventArgs e) - { + private void HandleSelectedGridItemChanged(object sender, SelectedGridItemChangedEventArgs e) { // Region not working correctly //Region clip = new Region(); //if (property_grid.SelectedGridItem != null) // clip.Union(new Rectangle(0,property_grid.SelectedGridItem.Top, ClientRectangle.Width, ROW_HEIGHT)); // clip.Union(new Rectangle(0,property_grid.SelectedGridItem.Top, ClientRectangle.Width, ROW_HEIGHT)); - if (e.NewSelection.PropertyDescriptor != null) - { + if (e.NewSelection.GridItemType == GridItemType.Property) + grid_textbox.Visible = true; + else + grid_textbox.Visible = false; + + if (e.NewSelection.PropertyDescriptor != null) { grid_textbox.Text = e.NewSelection.PropertyDescriptor.Converter.ConvertToString(e.NewSelection.Value); if (e.NewSelection.PropertyDescriptor.CanResetValue(property_grid.SelectedObject)) - grid_textbox.Font = new Font(this.Font, FontStyle.Bold); + grid_textbox.Font = bold_font; else grid_textbox.Font = this.Font; } @@ -623,29 +578,28 @@ namespace System.Windows.Forms.PropertyGridInternal Update(); } - private void HandlePropertyValueChanged(object s, PropertyValueChangedEventArgs e) - { - if (e.ChangedItem.PropertyDescriptor != null) - { + private void HandlePropertyValueChanged(object s, PropertyValueChangedEventArgs e) { + if (e.ChangedItem.PropertyDescriptor != null) { grid_textbox.Text = e.ChangedItem.PropertyDescriptor.Converter.ConvertToString(e.ChangedItem.Value); if (e.ChangedItem.PropertyDescriptor.CanResetValue(property_grid.SelectedObject)) - grid_textbox.Font = new Font(this.Font, FontStyle.Bold); + grid_textbox.Font = bold_font; else grid_textbox.Font = this.Font; } } + + + #endregion + #region IWindowsFormsEditorService Members - public void CloseDropDown() - { + public void CloseDropDown() { dropdown_form_showing = false; dropdown_form.Hide(); } - public void DropDownControl(Control control) - { - //dropdown_form.FormBorderStyle = FormBorderStyle.None; + public void DropDownControl(Control control) { dropdown_form.Deactivate +=new EventHandler(dropdown_form_Deactivate); dropdown_form.Size = control.Size; control.Dock = DockStyle.Fill; @@ -657,15 +611,13 @@ namespace System.Windows.Forms.PropertyGridInternal dropdown_form_showing = true; dropdown_form.Show(); System.Windows.Forms.MSG msg = new MSG(); - while (XplatUI.GetMessage(ref msg, IntPtr.Zero, 0, 0) && dropdown_form_showing) - { + while (XplatUI.GetMessage(ref msg, IntPtr.Zero, 0, 0) && dropdown_form_showing) { XplatUI.TranslateMessage(ref msg); XplatUI.DispatchMessage(ref msg); } } - public System.Windows.Forms.DialogResult ShowDialog(Form dialog) - { + public System.Windows.Forms.DialogResult ShowDialog(Form dialog) { return dialog.ShowDialog(this); } @@ -675,46 +627,36 @@ namespace System.Windows.Forms.PropertyGridInternal #endregion DropDownForm Class #region Internal Classes - internal class ITypeDescriptorContextImpl : System.ComponentModel.ITypeDescriptorContext - { + internal class ITypeDescriptorContextImpl : System.ComponentModel.ITypeDescriptorContext { private PropertyGrid property_grid; - public ITypeDescriptorContextImpl(PropertyGrid propertyGrid) - { + public ITypeDescriptorContextImpl(PropertyGrid propertyGrid) { property_grid = propertyGrid; } #region ITypeDescriptorContext Members - public void OnComponentChanged() - { + public void OnComponentChanged() { // TODO: Add SystemComp.OnComponentChanged implementation } - public IContainer Container - { - get - { + public IContainer Container { + get { return property_grid as IContainer; } } - public bool OnComponentChanging() - { + public bool OnComponentChanging() { // TODO: Add SystemComp.OnComponentChanging implementation return false; } - public object Instance - { - get - { + public object Instance { + get { return property_grid.SelectedGridItem.Value; } } - public PropertyDescriptor PropertyDescriptor - { - get - { + public PropertyDescriptor PropertyDescriptor { + get { return property_grid.SelectedGridItem.PropertyDescriptor; } } @@ -723,8 +665,7 @@ namespace System.Windows.Forms.PropertyGridInternal #region IServiceProvider Members - public object GetService(Type serviceType) - { + public object GetService(Type serviceType) { // TODO: Add SystemComp.GetService implementation return null; } @@ -738,12 +679,9 @@ namespace System.Windows.Forms.PropertyGridInternal /* class ComboListBox */ - internal class PropertyGridDropDown : Form - { - protected override CreateParams CreateParams - { - get - { + internal class PropertyGridDropDown : Form { + protected override CreateParams CreateParams { + get { CreateParams cp = base.CreateParams; cp.Style = unchecked ((int)(WindowStyles.WS_POPUP | WindowStyles.WS_VISIBLE | WindowStyles.WS_CLIPSIBLINGS | WindowStyles.WS_CLIPCHILDREN)); cp.ExStyle |= (int)(WindowExStyles.WS_EX_TOOLWINDOW | WindowExStyles.WS_EX_TOPMOST); @@ -752,7 +690,42 @@ namespace System.Windows.Forms.PropertyGridInternal } } - #endregion + internal class PropertyGridListBox : ListBox { + private bool mouse_down; + public PropertyGridListBox() { + SetStyle(ControlStyles.DoubleBuffer, true); + mouse_down =false; + } + + protected override void OnMouseDown(MouseEventArgs e) { + mouse_down = true; + base.OnMouseDown (e); + } + + protected override void OnMouseUp(MouseEventArgs e) { + mouse_down = false; + base.OnMouseUp (e); + } + + protected override void OnMouseMove(MouseEventArgs e) { + if (!mouse_down) + return; + for (int i = 0; i < Items.Count; i++) { + if (GetItemRectangle(i).Contains(e.X, e.Y)) { + SelectedIndex = i; + break; + } + } + base.OnMouseMove (e); + } + + + + + + } + + #endregion } } -- 2.11.4.GIT