2007-01-03 Jonathan Pobst <monkey@jpobst.com>
[mono.git] / mcs / class / Managed.Windows.Forms / System.Windows.Forms / ToolStripComboBox.cs
index d08806fe701758e726200c3f9781fd6cbe48a3e3..fc850a2cea5b105999b7598140bcc62c7c5e3616 100644 (file)
-//\r
-// ToolStripComboBox.cs\r
-//\r
-// Permission is hereby granted, free of charge, to any person obtaining\r
-// a copy of this software and associated documentation files (the\r
-// "Software"), to deal in the Software without restriction, including\r
-// without limitation the rights to use, copy, modify, merge, publish,\r
-// distribute, sublicense, and/or sell copies of the Software, and to\r
-// permit persons to whom the Software is furnished to do so, subject to\r
-// the following conditions:\r
-// \r
-// The above copyright notice and this permission notice shall be\r
-// included in all copies or substantial portions of the Software.\r
-// \r
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,\r
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
-//\r
-// Copyright (c) 2006 Jonathan Pobst\r
-//\r
-// Authors:\r
-//     Jonathan Pobst (monkey@jpobst.com)\r
-//\r
-#if NET_2_0\r
-using System.Drawing;\r
-using System.ComponentModel;\r
-\r
-namespace System.Windows.Forms\r
-{\r
-       public class ToolStripComboBox : ToolStripControlHost\r
-       {\r
-               #region Public Constructors\r
-               public ToolStripComboBox () : base (new ToolStripComboBoxControl ())\r
-               {\r
-               }\r
-\r
-               public ToolStripComboBox (Control c) : base (c)\r
-               {\r
-                       throw new NotSupportedException ();\r
-               }\r
-\r
-               public ToolStripComboBox (string name) : this ()\r
-               {\r
-                       base.Control.Name = name;\r
-               }\r
-               #endregion\r
-\r
-               #region Public Properties\r
-               public ComboBox ComboBox {\r
-                       get { return (ComboBox)base.Control; }\r
-               }\r
-\r
-               public ComboBoxStyle DropDownStyle {\r
-                       get { return this.ComboBox.DropDownStyle; }\r
-                       set { this.ComboBox.DropDownStyle = value; }\r
-               }\r
-\r
-               public int DropDownWidth {\r
-                       get { return this.ComboBox.DropDownWidth; }\r
-                       set { this.ComboBox.DropDownWidth = value; }\r
-               }\r
-\r
-               public bool DroppedDown {\r
-                       get { return this.ComboBox.DroppedDown; }\r
-                       set { this.ComboBox.DroppedDown = value; }\r
-               }\r
-\r
-               [Localizable (true)]\r
-               public bool IntegralHeight {\r
-                       get { return this.ComboBox.IntegralHeight; }\r
-                       set { this.ComboBox.IntegralHeight = value; }\r
-               }\r
-\r
-               [Localizable (true)]\r
-               public ComboBox.ObjectCollection Items {\r
-                       get { return this.ComboBox.Items; }\r
-               }\r
-\r
-               [Localizable (true)]\r
-               public int MaxDropDownItems {\r
-                       get { return this.ComboBox.MaxDropDownItems; }\r
-                       set { this.ComboBox.MaxDropDownItems = value; }\r
-               }\r
-\r
-               [Localizable (true)]\r
-               public int MaxLength {\r
-                       get { return this.ComboBox.MaxLength; }\r
-                       set { this.ComboBox.MaxLength = value; }\r
-               }\r
-\r
-               public int SelectedIndex {\r
-                       get { return this.ComboBox.SelectedIndex; }\r
-                       set { this.ComboBox.SelectedIndex = value; }\r
-               }\r
-\r
-               [Bindable (true)]\r
-               public Object SelectedItem {\r
-                       get { return this.ComboBox.SelectedItem; }\r
-                       set { this.ComboBox.SelectedItem = value; }\r
-               }\r
-\r
-               public string SelectedText {\r
-                       get { return this.ComboBox.SelectedText; }\r
-                       set { this.ComboBox.SelectedText = value; }\r
-               }\r
-\r
-               public int SelectionLength {\r
-                       get { return this.ComboBox.SelectionLength; }\r
-                       set { this.ComboBox.SelectionLength = value; }\r
-               }\r
-\r
-               public int SelectionStart {\r
-                       get { return this.ComboBox.SelectionStart; }\r
-                       set { this.ComboBox.SelectionStart = value; }\r
-               }\r
-\r
-               public bool Sorted {\r
-                       get { return this.ComboBox.Sorted; }\r
-                       set { this.ComboBox.Sorted = value; }\r
-               }\r
-               #endregion\r
-\r
-               #region Protected Properties\r
-               protected internal override Padding DefaultMargin { get { return new Padding (2); } }\r
-               protected override Size DefaultSize { get { return new Size (100, 22); } }\r
-               #endregion\r
-\r
-               #region Public Methods\r
-               public void BeginUpdate ()\r
-               {\r
-                       this.ComboBox.BeginUpdate ();\r
-               }\r
-\r
-               public void EndUpdate ()\r
-               {\r
-                       this.ComboBox.EndUpdate ();\r
-               }\r
-\r
-               public int FindString (string s)\r
-               {\r
-                       return this.ComboBox.FindString (s);\r
-               }\r
-\r
-               public int FindString (string s, int startIndex)\r
-               {\r
-                       return this.ComboBox.FindString (s, startIndex);\r
-               }\r
-\r
-               public int FindStringExact (string s)\r
-               {\r
-                       return this.ComboBox.FindStringExact (s);\r
-               }\r
-\r
-               public int FindStringExact (string s, int startIndex)\r
-               {\r
-                       return this.ComboBox.FindStringExact (s, startIndex);\r
-               }\r
-\r
-               public int GetItemHeight (int index)\r
-               {\r
-                       return this.ComboBox.GetItemHeight (index);\r
-               }\r
-\r
-               public override Size GetPreferredSize (Size constrainingSize)\r
-               {\r
-                       return base.GetPreferredSize (constrainingSize);\r
-               }\r
-\r
-               public void Select (int start, int length)\r
-               {\r
-                       this.ComboBox.Select (start, length);\r
-               }\r
-\r
-               public void SelectAll ()\r
-               {\r
-                       this.ComboBox.SelectAll ();\r
-               }\r
-\r
-               public override string ToString ()\r
-               {\r
-                       return this.ComboBox.ToString ();\r
-               }\r
-               #endregion\r
-\r
-               #region Protected Methods\r
-               protected virtual void OnDropDown (EventArgs e)\r
-               {\r
-                       if (DropDown != null) DropDown (this, e);\r
-               }\r
-\r
-               protected virtual void OnDropDownClosed (EventArgs e)\r
-               {\r
-                       if (DropDownClosed != null) DropDownClosed (this, e);\r
-               }\r
-\r
-               protected virtual void OnDropDownStyleChanged (EventArgs e)\r
-               {\r
-                       if (DropDownStyleChanged != null) DropDownStyleChanged (this, e);\r
-               }\r
-\r
-               protected virtual void OnSelectedIndexChanged (EventArgs e)\r
-               {\r
-                       if (SelectedIndexChanged != null) SelectedIndexChanged (this, e);\r
-               }\r
-\r
-               protected virtual void OnSelectionChangeCommitted (EventArgs e)\r
-               {\r
-               }\r
-\r
-               [MonoTODO ("Needs to hook into DropDownClosed and TextUpdate when ComboBox 2.0 has them.")]\r
-               protected override void OnSubscribeControlEvents (Control control)\r
-               {\r
-                       base.OnSubscribeControlEvents (control);\r
-\r
-                       this.ComboBox.DropDown += new EventHandler (HandleDropDown);\r
-                       this.ComboBox.DropDownStyleChanged += new EventHandler (HandleDropDownStyleChanged);\r
-                       this.ComboBox.SelectedIndexChanged += new EventHandler (HandleSelectedIndexChanged);\r
-               }\r
-\r
-               protected virtual void OnTextUpdate (EventArgs e)\r
-               {\r
-                       if (TextUpdate != null) TextUpdate (this, e);\r
-               }\r
-\r
-               protected override void OnUnsubscribeControlEvents (Control control)\r
-               {\r
-                       base.OnUnsubscribeControlEvents (control);\r
-               }\r
-               #endregion\r
-\r
-               #region Public Events\r
-               [Browsable (false)]\r
-               [EditorBrowsable (EditorBrowsableState.Never)]\r
-               public event EventHandler DoubleClick;\r
-               public event EventHandler DropDown;\r
-               public event EventHandler DropDownClosed;\r
-               public event EventHandler DropDownStyleChanged;\r
-               public event EventHandler SelectedIndexChanged;\r
-               public event EventHandler TextUpdate;\r
-               #endregion\r
-\r
-               #region Private Methods\r
-               private void HandleDropDown (object sender, EventArgs e)\r
-               {\r
-                       OnDropDown (e);\r
-               }\r
-\r
-               private void HandleDropDownStyleChanged (object sender, EventArgs e)\r
-               {\r
-                       OnDisplayStyleChanged (e);\r
-               }\r
-\r
-               private void HandleSelectedIndexChanged (object sender, EventArgs e)\r
-               {\r
-                       OnSelectedIndexChanged (e);\r
-               }\r
-               #endregion\r
-\r
-               private class ToolStripComboBoxControl : ComboBox\r
-               {\r
-                       public ToolStripComboBoxControl () : base ()\r
-                       {\r
-                               this.border_style = BorderStyle.None;\r
-                       }\r
-               }\r
-       }\r
-}\r
-#endif
\ No newline at end of file
+//
+// ToolStripComboBox.cs
+//
+// 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) 2006 Jonathan Pobst
+//
+// Authors:
+//     Jonathan Pobst (monkey@jpobst.com)
+//
+#if NET_2_0
+using System.Drawing;
+using System.ComponentModel;
+using System.Windows.Forms.Design;
+
+namespace System.Windows.Forms
+{
+       [DefaultProperty ("Items")]
+       [ToolStripItemDesignerAvailability (ToolStripItemDesignerAvailability.ToolStrip)]
+       public class ToolStripComboBox : ToolStripControlHost
+       {
+               #region Public Constructors
+               public ToolStripComboBox () : base (new ToolStripComboBoxControl ())
+               {
+               }
+
+               [EditorBrowsable (EditorBrowsableState.Never)]
+               public ToolStripComboBox (Control c) : base (c)
+               {
+                       throw new NotSupportedException ();
+               }
+
+               public ToolStripComboBox (string name) : this ()
+               {
+                       base.Name = name;
+               }
+               #endregion
+
+               #region Public Properties
+               [Browsable (false)]
+               [EditorBrowsable (EditorBrowsableState.Never)]
+               [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
+               public override Image BackgroundImage {
+                       get { return base.BackgroundImage; }
+                       set { base.BackgroundImage = value; }
+               }
+
+               [Browsable (false)]
+               [EditorBrowsable (EditorBrowsableState.Never)]
+               [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
+               public override ImageLayout BackgroundImageLayout {
+                       get { return base.BackgroundImageLayout; }
+                       set { base.BackgroundImageLayout = value; }
+               }
+               
+               [Browsable (false)]
+               [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
+               public ComboBox ComboBox {
+                       get { return (ComboBox)base.Control; }
+               }
+
+               [MonoTODO ("Stub, will not actually affect anything.")]
+               [Browsable (false)]
+               [DefaultValue (106)]
+               [EditorBrowsable (EditorBrowsableState.Never)]
+               public int DropDownHeight {
+                       get { return 106; }
+                       set { }
+               }
+               
+               [DefaultValue (ComboBoxStyle.DropDown)]
+               [RefreshProperties (RefreshProperties.All)]
+               public ComboBoxStyle DropDownStyle {
+                       get { return this.ComboBox.DropDownStyle; }
+                       set { this.ComboBox.DropDownStyle = value; }
+               }
+
+               public int DropDownWidth {
+                       get { return this.ComboBox.DropDownWidth; }
+                       set { this.ComboBox.DropDownWidth = value; }
+               }
+
+               [Browsable (false)]
+               [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
+               public bool DroppedDown {
+                       get { return this.ComboBox.DroppedDown; }
+                       set { this.ComboBox.DroppedDown = value; }
+               }
+
+               [Localizable (true)]
+               [DefaultValue (true)]
+               public bool IntegralHeight {
+                       get { return this.ComboBox.IntegralHeight; }
+                       set { this.ComboBox.IntegralHeight = value; }
+               }
+
+               [Localizable (true)]
+               [DesignerSerializationVisibility (DesignerSerializationVisibility.Content)]
+               [Editor ("System.Windows.Forms.Design.ListControlStringCollectionEditor, " + Consts.AssemblySystem_Design, typeof (System.Drawing.Design.UITypeEditor))]
+               public ComboBox.ObjectCollection Items {
+                       get { return this.ComboBox.Items; }
+               }
+
+               [Localizable (true)]
+               [DefaultValue (8)]
+               public int MaxDropDownItems {
+                       get { return this.ComboBox.MaxDropDownItems; }
+                       set { this.ComboBox.MaxDropDownItems = value; }
+               }
+
+               [Localizable (true)]
+               [DefaultValue (0)]
+               public int MaxLength {
+                       get { return this.ComboBox.MaxLength; }
+                       set { this.ComboBox.MaxLength = value; }
+               }
+
+               [Browsable (false)]
+               [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
+               public int SelectedIndex {
+                       get { return this.ComboBox.SelectedIndex; }
+                       set {
+                               this.ComboBox.SelectedIndex = value;
+                               Text = Items [value].ToString ();
+                       }
+               }
+
+               [Bindable (true)]
+               [Browsable (false)]
+               [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
+               public Object SelectedItem {
+                       get { return this.ComboBox.SelectedItem; }
+                       set { this.ComboBox.SelectedItem = value; }
+               }
+
+               [Browsable (false)]
+               [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
+               public string SelectedText {
+                       get { return this.ComboBox.SelectedText; }
+                       set { this.ComboBox.SelectedText = value; }
+               }
+
+               [Browsable (false)]
+               [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
+               public int SelectionLength {
+                       get { return this.ComboBox.SelectionLength; }
+                       set { this.ComboBox.SelectionLength = value; }
+               }
+
+               [Browsable (false)]
+               [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
+               public int SelectionStart {
+                       get { return this.ComboBox.SelectionStart; }
+                       set { this.ComboBox.SelectionStart = value; }
+               }
+
+               [DefaultValue (false)]
+               public bool Sorted {
+                       get { return this.ComboBox.Sorted; }
+                       set { this.ComboBox.Sorted = value; }
+               }
+               #endregion
+
+               #region Protected Properties
+               protected internal override Padding DefaultMargin { get { return new Padding (1, 0, 1, 0); } }
+               protected override Size DefaultSize { get { return new Size (100, 22); } }
+               #endregion
+
+               #region Public Methods
+               public void BeginUpdate ()
+               {
+                       this.ComboBox.BeginUpdate ();
+               }
+
+               public void EndUpdate ()
+               {
+                       this.ComboBox.EndUpdate ();
+               }
+
+               public int FindString (string s)
+               {
+                       return this.ComboBox.FindString (s);
+               }
+
+               public int FindString (string s, int startIndex)
+               {
+                       return this.ComboBox.FindString (s, startIndex);
+               }
+
+               public int FindStringExact (string s)
+               {
+                       return this.ComboBox.FindStringExact (s);
+               }
+
+               public int FindStringExact (string s, int startIndex)
+               {
+                       return this.ComboBox.FindStringExact (s, startIndex);
+               }
+
+               public int GetItemHeight (int index)
+               {
+                       return this.ComboBox.GetItemHeight (index);
+               }
+
+               public override Size GetPreferredSize (Size constrainingSize)
+               {
+                       return base.GetPreferredSize (constrainingSize);
+               }
+
+               public void Select (int start, int length)
+               {
+                       this.ComboBox.Select (start, length);
+               }
+
+               public void SelectAll ()
+               {
+                       this.ComboBox.SelectAll ();
+               }
+
+               public override string ToString ()
+               {
+                       return this.ComboBox.ToString ();
+               }
+               #endregion
+
+               #region Protected Methods
+               protected virtual void OnDropDown (EventArgs e)
+               {
+                       EventHandler eh = (EventHandler)(Events [DropDownEvent]);
+                       if (eh != null)
+                               eh (this, e);
+               }
+
+               protected virtual void OnDropDownClosed (EventArgs e)
+               {
+                       EventHandler eh = (EventHandler)(Events [DropDownClosedEvent]);
+                       if (eh != null)
+                               eh (this, e);
+               }
+
+               protected virtual void OnDropDownStyleChanged (EventArgs e)
+               {
+                       EventHandler eh = (EventHandler)(Events [DropDownStyleChangedEvent]);
+                       if (eh != null)
+                               eh (this, e);
+               }
+
+               protected virtual void OnSelectedIndexChanged (EventArgs e)
+               {
+                       EventHandler eh = (EventHandler)(Events [SelectedIndexChangedEvent]);
+                       if (eh != null)
+                               eh (this, e);
+               }
+
+               protected virtual void OnSelectionChangeCommitted (EventArgs e)
+               {
+               }
+
+               [MonoTODO ("Needs to hook into DropDownClosed and TextUpdate when ComboBox 2.0 has them.")]
+               protected override void OnSubscribeControlEvents (Control control)
+               {
+                       base.OnSubscribeControlEvents (control);
+
+                       this.ComboBox.DropDown += new EventHandler (HandleDropDown);
+                       this.ComboBox.DropDownStyleChanged += new EventHandler (HandleDropDownStyleChanged);
+                       this.ComboBox.SelectedIndexChanged += new EventHandler (HandleSelectedIndexChanged);
+               }
+
+               protected virtual void OnTextUpdate (EventArgs e)
+               {
+                       EventHandler eh = (EventHandler)(Events [TextUpdateEvent]);
+                       if (eh != null)
+                               eh (this, e);
+               }
+
+               protected override void OnUnsubscribeControlEvents (Control control)
+               {
+                       base.OnUnsubscribeControlEvents (control);
+               }
+               #endregion
+
+               #region Public Events
+               static object DropDownEvent = new object ();
+               static object DropDownClosedEvent = new object ();
+               static object DropDownStyleChangedEvent = new object ();
+               static object SelectedIndexChangedEvent = new object ();
+               static object TextUpdateEvent = new object ();
+
+               [Browsable (false)]
+               [EditorBrowsable (EditorBrowsableState.Never)]
+               public new event EventHandler DoubleClick {
+                       add { base.DoubleClick += value; }
+                       remove { base.DoubleClick -= value; }
+               }
+
+               public event EventHandler DropDown {
+                       add { Events.AddHandler (DropDownEvent, value); }
+                       remove { Events.RemoveHandler (DropDownEvent, value); }
+               }
+
+               public event EventHandler DropDownClosed {
+                       add { Events.AddHandler (DropDownClosedEvent, value); }
+                       remove { Events.RemoveHandler (DropDownClosedEvent, value); }
+               }
+
+               public event EventHandler DropDownStyleChanged {
+                       add { Events.AddHandler (DropDownStyleChangedEvent, value); }
+                       remove { Events.RemoveHandler (DropDownStyleChangedEvent, value); }
+               }
+
+               public event EventHandler SelectedIndexChanged {
+                       add { Events.AddHandler (SelectedIndexChangedEvent, value); }
+                       remove { Events.RemoveHandler (SelectedIndexChangedEvent, value); }
+               }
+
+               public event EventHandler TextUpdate {
+                       add { Events.AddHandler (TextUpdateEvent, value); }
+                       remove { Events.RemoveHandler (TextUpdateEvent, value); }
+               }
+               #endregion
+
+               #region Private Methods
+               private void HandleDropDown (object sender, EventArgs e)
+               {
+                       OnDropDown (e);
+               }
+
+               private void HandleDropDownStyleChanged (object sender, EventArgs e)
+               {
+                       OnDropDownStyleChanged (e);
+               }
+
+               private void HandleSelectedIndexChanged (object sender, EventArgs e)
+               {
+                       OnSelectedIndexChanged (e);
+               }
+               #endregion
+
+               private class ToolStripComboBoxControl : ComboBox
+               {
+                       public ToolStripComboBoxControl () : base ()
+                       {
+                               this.border_style = BorderStyle.None;
+                       }
+               }
+       }
+}
+#endif