// // 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 { // // Represents a Windows up-down control that displays string values. // 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 // // //Encapsulates a collection of objects for use by the DomainUpDown class. // 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 ); } } } } }