* Control.cs : call OnTextChange
[mono.git] / mcs / class / System.Windows.Forms / System.Windows.Forms / DomainUpDown.cs
1 //
2 // System.Windows.Forms.DomainUpDown
3 //
4 // Author:
5 //   stubbed out by Richard Baumann (biochem333@nyc.rr.com)
6 //   Dennis Hayes (dennish@Raytek.com)
7 //   implemented by Aleksey Ryabchuk (ryabchuk@yahoo.com)
8 // (C) Ximian, Inc., 2002
9 //
10 using System.Collections;
11 using System.ComponentModel;
12
13 namespace System.Windows.Forms {
14
15         // <summary>
16         //      Represents a Windows up-down control that displays string values.
17         // </summary>
18         public class DomainUpDown : UpDownBase {
19
20                 
21                 DomainUpDownItemCollection items;
22                 int selectedIndex;
23                 bool sorted;
24                 bool wrap;
25
26                 [MonoTODO]
27                 public DomainUpDown() : base()
28                 {
29                         selectedIndex = -1;
30                         sorted = false;
31                         wrap = false;
32                         TextChanged += new EventHandler ( this.BuddyTextChanged );
33                 }
34
35                 
36                 public override void DownButton()
37                 {
38                         int newIndex = SelectedIndex + 1;
39                         if (  newIndex < Items.Count )
40                                 SelectedIndex = newIndex;
41                         else if ( Wrap && Items.Count > 0)
42                                 SelectedIndex = 0;
43                                 
44                 }
45
46                 public override string ToString()
47                 {
48                         return GetType( ).FullName.ToString( ) + ", Items.Count: " + Items.Count.ToString ( ) + 
49                                 ", SelectedIndex: " + SelectedIndex;
50                 }
51
52                 public override void UpButton()
53                 {
54                         int newIndex = SelectedIndex - 1;
55                         if ( newIndex > -1 && newIndex < Items.Count )
56                                 SelectedIndex = newIndex;
57                         else if ( Wrap && Items.Count > 0 )
58                                 SelectedIndex = Items.Count - 1;
59                 }
60
61                 [MonoTODO]
62                 protected override AccessibleObject CreateAccessibilityInstance()
63                 {
64                         //FIXME:
65                         return base.CreateAccessibilityInstance();
66                 }
67
68                 protected void OnSelectedItemChanged(object source, EventArgs e)
69                 {
70                         if (SelectedItemChanged != null) 
71                                 SelectedItemChanged(this, e);
72                 }
73
74                 [MonoTODO]
75                 protected override void OnTextBoxKeyDown(object source, KeyEventArgs e)
76                 {
77                         base.OnTextBoxKeyDown ( source, e );
78                 }
79
80                 protected override void UpdateEditText ( )
81                 {
82                         if ( SelectedIndex != -1 )
83                                 Text = Items [ SelectedIndex ].ToString ( );
84                         else
85                                 Text = String.Empty;
86                 }
87
88                 public event EventHandler SelectedItemChanged;
89
90                 public DomainUpDown.DomainUpDownItemCollection Items {
91                         get {
92                                 if ( items == null )
93                                         items = new DomainUpDownItemCollection ( this );
94                                 return items; 
95                         }
96                 }
97
98                 [MonoTODO]
99                 public int SelectedIndex {
100                         get { return selectedIndex; }
101                         set {
102                                 if ( value < -1 || value >= Items.Count )
103                                         throw new ArgumentException ( ); // FIXME: message
104
105                                 if ( selectedIndex != value ) {
106                                         selectedIndex = value;
107                                         UpdateEditText ( );
108                                 }
109                         }
110                 }
111
112                 [MonoTODO]
113                 public object SelectedItem {
114                         get { 
115                                 if ( SelectedIndex == -1 )
116                                         return null;
117                                 return Items[ SelectedIndex ];
118                         }
119                         set {
120                                 SelectedIndex = Items.IndexOf ( value );
121                         }
122                 }
123
124                 [MonoTODO]
125                 public bool Sorted {
126                         get { return sorted; }
127                         set { 
128                                 if ( sorted != value ) {
129                                         object selectedItem = SelectedItem;
130                                         Items.Sort ( );
131                                         SelectedItem = selectedItem;
132                                 }
133                         }
134                 }
135
136                 public bool Wrap { 
137                         get { return wrap; }
138                         set { wrap = value; }
139                 }
140
141                 private void itemAdded ( object item )
142                 {
143                 }
144
145                 private void itemInserted ( int index, object item )
146                 {
147                 }
148
149                 private void itemRemoved ( object item )
150                 {
151                 }
152
153                 private void itemRemoved ( int index )
154                 {
155                 }
156
157                 private void itemChanged ( int index )
158                 {
159                 }
160
161                 private void BuddyTextChanged ( object sender, EventArgs e )
162                 {
163                         OnSelectedItemChanged ( this, EventArgs.Empty );
164                 }
165
166                 //System.Windows.Forms.DomainUpDown.DomainUpDownItemCollection
167                 //
168                 //Author:
169                 //stubbed out by Richard Baumann (biochem333@nyc.rr.com)
170                 //
171                 //(C) Ximian, Inc., 2002
172                 //
173                 //<summary>
174                 //Encapsulates a collection of objects for use by the DomainUpDown class.
175                 //</summary>
176                 public class DomainUpDownItemCollection : ArrayList {
177
178                         DomainUpDown owner;
179
180                         internal DomainUpDownItemCollection( DomainUpDown owner )
181                         {
182                                 this.owner = owner;
183                         }
184
185                         public override int Add( object value )
186                         {
187                                 int index =  base.Add ( value );
188                                 owner.itemAdded ( value );
189                                 return index;
190                         }
191
192                         public override void Insert( int index, object value )
193                         {
194                                 base.Insert ( index, value );
195                                 owner.itemInserted ( index, value );
196                         }
197
198                         public override void Remove( object obj )
199                         {
200                                 base.Remove ( obj );
201                                 owner.itemRemoved ( obj );
202                         }
203
204                         public override void RemoveAt( int index )
205                         {
206                                 base.RemoveAt ( index );
207                                 owner.itemRemoved ( index );
208                         }
209
210                         public override object this[ int index ]
211                         {
212                                 get {
213                                         return base[index];
214                                 }
215                                 set {
216                                         base[index] = value;
217                                         owner.itemChanged ( index );
218                                 }
219                         }
220                 }
221         }
222 }