-//\r
-// System.Windows.Forms.DomainUpDown\r
-//\r
-// Author:\r
-// stubbed out by Richard Baumann (biochem333@nyc.rr.com)\r
-// Dennis Hayes (dennish@Raytek.com)\r
-//\r
-// (C) Ximian, Inc., 2002\r
-//\r
-using System.Collections;\r
-using System.ComponentModel;\r
-namespace System.Windows.Forms {\r
-\r
- // <summary>\r
- // This is only a template. Nothing is implemented yet.\r
- // Represents a Windows up-down control that displays string values.\r
- // </summary>\r
- public class DomainUpDown : UpDownBase {\r
-\r
- \r
- // --- Constructors/Destructors\r
- \r
- [MonoTODO]\r
- public DomainUpDown() : base()\r
- {\r
- }\r
-\r
- \r
- // --- Public Methods\r
- \r
- [MonoTODO]\r
- public override void DownButton()\r
- {\r
- throw new NotImplementedException ();\r
- }\r
- [MonoTODO]\r
- public override string ToString()\r
- {\r
- //FIXME:\r
- return base.ToString();\r
- }\r
- [MonoTODO]\r
- public override void UpButton()\r
- {\r
- throw new NotImplementedException ();\r
- }\r
-\r
- \r
- // --- Protected Methods\r
- \r
- [MonoTODO]\r
- protected override AccessibleObject CreateAccessibilityInstance()\r
- {\r
- throw new NotImplementedException ();\r
- }\r
- //[MonoTODO]\r
- //protected override void OnChanged(object source, EventArgs e)\r
- //{\r
- // //This method is internal to the .NET framework.\r
- // if (Changed != null) {\r
- //\r
- // Changed(this, e);\r
- // }\r
- //}\r
- [MonoTODO]\r
- protected void OnSelectedItemChanged(object source, EventArgs e)\r
- {\r
- if (SelectedItemChanged != null) {\r
-\r
- SelectedItemChanged(this, e);\r
- }\r
- }\r
- [MonoTODO]\r
- protected override void OnTextBoxKeyDown(object source, KeyEventArgs e)\r
- {\r
- throw new NotImplementedException ();\r
- //if (TextBoxKeyDown != null) {\r
- // TextBoxKeyDown(this, e);\r
- //}\r
- }\r
- [MonoTODO]\r
- protected override void UpdateEditText()\r
- {\r
- throw new NotImplementedException ();\r
- }\r
-\r
- //inherited\r
- //[MonoTODO]\r
- //protected override void WndProc(Message m) // override changed to virtual in .NET V.1. Beta\r
- //{\r
- // throw new NotImplementedException ();\r
- //}\r
-\r
- \r
- // --- Public Events\r
- \r
- public event EventHandler SelectedItemChanged;\r
-\r
- \r
- // --- Public Properties\r
- \r
- [MonoTODO]\r
- public DomainUpDown.DomainUpDownItemCollection Items {\r
-\r
- get { throw new NotImplementedException (); }\r
- }\r
- [MonoTODO]\r
- public int SelectedIndex{// default -1 {\r
-\r
- get { throw new NotImplementedException (); }\r
- set { throw new NotImplementedException (); }\r
- }\r
- [MonoTODO]\r
- public object SelectedItem{ // default null {\r
-\r
- get { throw new NotImplementedException (); }\r
- set { throw new NotImplementedException (); }\r
- }\r
- [MonoTODO]\r
- public bool Sorted{ // default false {\r
-\r
- get { throw new NotImplementedException (); }\r
- set { throw new NotImplementedException (); }\r
- }\r
- [MonoTODO]\r
- public bool Wrap{ // default false {\r
-\r
- get { throw new NotImplementedException (); }\r
- set { throw new NotImplementedException (); }\r
- }\r
-\r
- //System.Windows.Forms.DomainUpDown.DomainUpDownItemCollection\r
- //\r
- //Author:\r
- //stubbed out by Richard Baumann (biochem333@nyc.rr.com)\r
- //\r
- //(C) Ximian, Inc., 2002\r
- //\r
- //<summary>\r
- //This is only a template. Nothing is implemented yet.\r
- //Encapsulates a collection of objects for use by the DomainUpDown class.\r
- //</summary>\r
- public class DomainUpDownItemCollection : ArrayList {\r
-\r
- //\r
- // --- Constructors/Destructors\r
- //\r
- [MonoTODO]\r
- internal DomainUpDownItemCollection(DomainUpDown owner) : base()\r
- {\r
- throw new NotImplementedException ();\r
- }\r
-\r
- \r
- // --- Public Methods\r
- \r
- [MonoTODO]\r
- public override int Add(object item)\r
- {\r
- throw new NotImplementedException ();\r
- }\r
- [MonoTODO]\r
- public override void Insert(int index, object item)\r
- {\r
- throw new NotImplementedException ();\r
- }\r
- [MonoTODO]\r
- public override void Remove(object item)\r
- {\r
- throw new NotImplementedException ();\r
- }\r
- [MonoTODO]\r
- public override void RemoveAt(int item)\r
- {\r
- throw new NotImplementedException ();\r
- }\r
-\r
- \r
- // --- Public Properties\r
- \r
- public override object this[int index] {\r
-\r
- get {\r
- throw new NotImplementedException ();\r
- }\r
- set {\r
- throw new NotImplementedException ();\r
- }\r
- }\r
- }\r
- }\r
-}\r
+//
+// System.Windows.Forms.DomainUpDown
+//
+// Author:
+// stubbed out by Richard Baumann (biochem333@nyc.rr.com)
+// Dennis Hayes (dennish@Raytek.com)
+// implemented by Aleksey Ryabchuk (ryabchuk@yahoo.com)
+// (C) Ximian, Inc., 2002
+//
+
+//
+// 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.
+//
+using System.Collections;
+using System.ComponentModel;
+using System.Globalization;
+
+namespace System.Windows.Forms {
+
+ // <summary>
+ // Represents a Windows up-down control that displays string values.
+ // </summary>
+ public class DomainUpDown : UpDownBase {
+
+
+ DomainUpDownItemCollection items;
+ int selectedIndex;
+ bool sorted;
+ bool wrap;
+
+ [MonoTODO]
+ public DomainUpDown() : base()
+ {
+ selectedIndex = -1;
+ sorted = false;
+ wrap = false;
+ TextChanged += new EventHandler ( this.BuddyTextChanged );
+ }
+
+
+ public override void DownButton()
+ {
+ int newIndex = SelectedIndex + 1;
+ if ( newIndex < Items.Count )
+ SelectedIndex = newIndex;
+ else if ( Wrap && Items.Count > 0)
+ SelectedIndex = 0;
+
+ }
+
+ public override string ToString()
+ {
+ return GetType( ).FullName.ToString( ) + ", Items.Count: " + Items.Count.ToString ( ) +
+ ", SelectedIndex: " + SelectedIndex;
+ }
+
+ public override void UpButton()
+ {
+ int newIndex = SelectedIndex - 1;
+ if ( newIndex > -1 && newIndex < Items.Count )
+ SelectedIndex = newIndex;
+ else if ( Wrap && Items.Count > 0 )
+ SelectedIndex = Items.Count - 1;
+ }
+
+ [MonoTODO]
+ protected override AccessibleObject CreateAccessibilityInstance()
+ {
+ //FIXME:
+ return base.CreateAccessibilityInstance();
+ }
+
+ protected void OnSelectedItemChanged(object source, EventArgs e)
+ {
+ if (SelectedItemChanged != null)
+ SelectedItemChanged(this, e);
+ }
+
+ [MonoTODO]
+ protected override void OnChanged(object source, EventArgs e) {
+ base.OnChanged(source, e);
+ }
+
+ [MonoTODO]
+ protected override void OnTextBoxKeyDown(object source, KeyEventArgs e)
+ {
+ if ( ReadOnly ) {
+ char symbol = System.Convert.ToChar( (int)e.KeyCode );
+
+ if ( Char.IsLetterOrDigit ( symbol ) ) {
+ string lower = Char.ToLower ( symbol ).ToString ( );
+ string upper = Char.ToUpper ( symbol ).ToString ( );
+
+ foreach ( object item in Items ) {
+ string sitem = item.ToString ( );
+ if ( sitem.StartsWith ( upper ) || sitem.StartsWith ( lower ) ) {
+ SelectedItem = item;
+ break;
+ }
+ }
+ e.Handled = true;
+ }
+ }
+ base.OnTextBoxKeyDown ( source, e );
+ }
+
+ protected override void UpdateEditText ( )
+ {
+ if ( SelectedIndex != -1 )
+ Text = Items [ SelectedIndex ].ToString ( );
+ else
+ Text = String.Empty;
+ }
+
+ public event EventHandler SelectedItemChanged;
+
+ public DomainUpDown.DomainUpDownItemCollection Items {
+ get {
+ if ( items == null )
+ items = new DomainUpDownItemCollection ( this );
+ return items;
+ }
+ }
+
+ [MonoTODO]
+ public int SelectedIndex {
+ get { return selectedIndex; }
+ set {
+ if ( value < -1 || value >= Items.Count )
+ throw new ArgumentException ( ); // FIXME: message
+
+ if ( selectedIndex != value ) {
+ selectedIndex = value;
+ UpdateEditText ( );
+ }
+ }
+ }
+
+ [MonoTODO]
+ public object SelectedItem {
+ get {
+ if ( SelectedIndex == -1 )
+ return null;
+ return Items[ SelectedIndex ];
+ }
+ set {
+ SelectedIndex = Items.IndexOf ( value );
+ }
+ }
+
+ [MonoTODO]
+ public bool Sorted {
+ get { return sorted; }
+ set {
+ if ( sorted != value ) {
+ object selectedItem = SelectedItem;
+ Items.Sort ( );
+ SelectedItem = selectedItem;
+ }
+ }
+ }
+
+ public bool Wrap {
+ get { return wrap; }
+ set { wrap = value; }
+ }
+
+ private void itemAdded ( object item )
+ {
+ }
+
+ private void itemInserted ( int index, object item )
+ {
+ }
+
+ private void itemRemoved ( object item )
+ {
+ }
+
+ private void itemRemoved ( int index )
+ {
+ }
+
+ private void itemChanged ( int index )
+ {
+ if ( index == SelectedIndex )
+ UpdateEditText ( );
+ }
+
+ private void BuddyTextChanged ( object sender, EventArgs e )
+ {
+ OnSelectedItemChanged ( this, EventArgs.Empty );
+ }
+
+ //System.Windows.Forms.DomainUpDown.DomainUpDownItemCollection
+ //
+ //Author:
+ //stubbed out by Richard Baumann (biochem333@nyc.rr.com)
+ //
+ //(C) Ximian, Inc., 2002
+ //
+ //<summary>
+ //Encapsulates a collection of objects for use by the DomainUpDown class.
+ //</summary>
+ public class DomainUpDownItemCollection : ArrayList {
+
+ DomainUpDown owner;
+
+ internal DomainUpDownItemCollection( DomainUpDown owner )
+ {
+ this.owner = owner;
+ }
+
+ public override int Add( object value )
+ {
+ int index = base.Add ( value );
+ owner.itemAdded ( value );
+ return index;
+ }
+
+ public override void Insert( int index, object value )
+ {
+ base.Insert ( index, value );
+ owner.itemInserted ( index, value );
+ }
+
+ public override void Remove( object obj )
+ {
+ base.Remove ( obj );
+ owner.itemRemoved ( obj );
+ }
+
+ public override void RemoveAt( int index )
+ {
+ base.RemoveAt ( index );
+ owner.itemRemoved ( index );
+ }
+
+ public override object this[ int index ]
+ {
+ get {
+ return base[index];
+ }
+ set {
+ base[index] = value;
+ owner.itemChanged ( index );
+ }
+ }
+ }
+ }
+}