Author: rolf
Date: 2007-05-10 15:07:39 -0400 (Thu, 10 May 2007)
New Revision: 77152

Modified:
   trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ChangeLog
   trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/MaskedTextBox.cs
Log:
* MaskedTextBox.cs: Started implementing parts of it.

Modified: trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ChangeLog
===================================================================
--- trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ChangeLog        
2007-05-10 19:06:43 UTC (rev 77151)
+++ trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ChangeLog        
2007-05-10 19:07:39 UTC (rev 77152)
@@ -1,3 +1,7 @@
+2007-05-10  Rolf Bjarne Kvinge <[EMAIL PROTECTED]> 
+
+       * MaskedTextBox.cs: Started implementing parts of it.
+
 2007-05-10  Carlos Alberto Cortez <[EMAIL PROTECTED]>
 
        * ListView.cs: When clicking the checkbox on the items

Modified: 
trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/MaskedTextBox.cs
===================================================================
--- trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/MaskedTextBox.cs 
2007-05-10 19:06:43 UTC (rev 77151)
+++ trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/MaskedTextBox.cs 
2007-05-10 19:07:39 UTC (rev 77152)
@@ -61,6 +61,7 @@
                private MaskFormat cut_copy_mask_format;
                private bool use_system_password_char;
                private Type validating_type;
+               private bool is_empty_mask;
                
 #endregion
 #region Events
@@ -119,14 +120,17 @@
                public MaskedTextBox ()
                {
                        provider = new MaskedTextProvider ("<>", 
CultureInfo.CurrentCulture);
+                       is_empty_mask = true;
+                       Init ();
                }
 
                public MaskedTextBox (MaskedTextProvider maskedTextProvider)
                {
-                       if (provider == null) {
+                       if (maskedTextProvider == null) {
                                throw new ArgumentNullException ();
                        }
                        provider = maskedTextProvider;
+                       Init ();
                }
 
                public MaskedTextBox (string mask)
@@ -135,7 +139,13 @@
                                throw new ArgumentNullException ();
                        }
                        provider = new MaskedTextProvider (mask, 
CultureInfo.CurrentCulture);
+                       Init ();
                }
+               private void Init ()
+               {
+                       BackColor = SystemColors.Window;
+                       cut_copy_mask_format = MaskFormat.IncludeLiterals;
+               }
 #endregion
 #region Public and protected methods
                [EditorBrowsable (EditorBrowsableState.Never)]
@@ -214,7 +224,26 @@
 
                protected override void OnKeyPress (KeyPressEventArgs e)
                {
-                       base.OnKeyPress (e);
+                       if (is_empty_mask) {
+                               base.OnKeyPress (e);
+                               return;
+                       }
+                       
+                       int testPosition;
+                       MaskedTextResultHint resultHint;
+                       bool result;
+                       
+                       if (IsOverwriteMode) {
+                               result = provider.InsertAt (e.KeyChar, 
SelectionStart, out testPosition, out resultHint);
+                       } else {
+                               result = provider.Replace (e.KeyChar, 
SelectionStart, out testPosition, out resultHint);
+                       }
+                       
+                       if (!result) {
+                               OnMaskInputRejected (new 
MaskInputRejectedEventArgs (testPosition, resultHint));
+                       }
+                       
+                       e.Handled = true;
                }
 
                protected override void OnKeyUp (KeyEventArgs e)
@@ -230,6 +259,13 @@
                                eh (this, e);
                }
                
+               private void OnMaskInputRejected (MaskInputRejectedEventArgs e)
+               {
+                       MaskInputRejectedEventHandler eh = 
(MaskInputRejectedEventHandler) Events [MaskInputRejectedEvent];
+                       if (eh != null)
+                               eh (this, e);
+               }
+               
                [EditorBrowsable (EditorBrowsableState.Never)]
                protected override void OnMultilineChanged (EventArgs e)
                {
@@ -377,6 +413,9 @@
                                return cut_copy_mask_format;
                        }
                        set {
+                               if (!Enum.IsDefined (typeof (MaskFormat), 
value)) {
+                                       throw new InvalidEnumArgumentException 
("value", (int)value, typeof (MaskFormat));
+                               }
                                cut_copy_mask_format = value;
                        }
                }
@@ -409,6 +448,9 @@
                                return insert_key_mode;
                        }
                        set {
+                               if (!Enum.IsDefined (typeof (InsertKeyMode), 
value)) {
+                                       throw new InvalidEnumArgumentException 
("value", (int)value, typeof (InsertKeyMode));
+                               }
                                insert_key_mode = value;
                        }
                }
@@ -429,7 +471,11 @@
                [Browsable (false)]
                public new string [] Lines {
                        get {
-                               return base.Lines;
+                               string text = Text;
+                               if (text == null || text == string.Empty)
+                                       return new string [] {};
+                               
+                               return Text.Split (new string [] {"\r\n", "\r", 
"\n"}, StringSplitOptions.None);
                        }
                        set {
                                // Do nothing, not supported by MTB.
@@ -442,9 +488,17 @@
                [DefaultValue ("")]
                public string Mask {
                        get {
+                               if (is_empty_mask)
+                                       return string.Empty;
+                               
                                return provider.Mask;
                        }
                        set {
+                               is_empty_mask = (value == string.Empty || value 
== null);
+                               if (is_empty_mask) {
+                                       value = "<>";
+                               }
+                               
                                provider = new MaskedTextProvider (value, 
provider.Culture, provider.AllowPromptAsInput, provider.PromptChar, 
provider.PasswordChar, provider.AsciiOnly);
                        }
                }
@@ -460,6 +514,9 @@
                [DesignerSerializationVisibility 
(DesignerSerializationVisibility.Hidden)]
                public MaskedTextProvider MaskedTextProvider {
                        get {
+                               if (is_empty_mask)
+                                       return null;
+                                       
                                return provider.Clone () as MaskedTextProvider;
                        }
                }
@@ -583,10 +640,27 @@
                [DefaultValue ("")]
                public override string Text {
                        get {
+                               if (is_empty_mask)
+                                       return base.Text;
+                               
+                               // The base constructor may call Text before we 
get to create a provider, 
+                               // so it may be null even though it's not an 
empty mask.
+                               if (provider == null)
+                                       return string.Empty;
+                                       
                                return provider.ToString ();
                        }
                        set {
-                               provider.Set (value);
+                               string initial_text = Text;
+                               
+                               if (is_empty_mask) {
+                                       base.Text = value;
+                               } else {
+                                       InputText (value, true, true);
+                               }
+                               if (Text != initial_text) {
+                                       OnTextChanged (EventArgs.Empty);
+                               }
                        }
                }
                
@@ -629,8 +703,12 @@
                                }
                        }
                        set {
-                               provider.IncludeLiterals = (value == 
MaskFormat.IncludeLiterals) || (value == MaskFormat.IncludePromptAndLiterals);
-                               provider.IncludePrompt = (value == 
MaskFormat.IncludePrompt) || (value == MaskFormat.IncludePromptAndLiterals);
+                               if (!Enum.IsDefined (typeof (MaskFormat), 
value)) {
+                                       throw new InvalidEnumArgumentException 
("value", (int)value, typeof (MaskFormat));
+                               }
+                               
+                               provider.IncludeLiterals = (value & 
MaskFormat.IncludeLiterals) == MaskFormat.IncludeLiterals;
+                               provider.IncludePrompt = (value & 
MaskFormat.IncludePrompt) == MaskFormat.IncludePrompt;
                        }
                }
                        
@@ -671,15 +749,50 @@
                internal override Color ChangeBackColor (Color backColor)
                {
 #if NET_2_0
-                       backcolor_set = false;
-                       if (!ReadOnly) {
-                               backColor = SystemColors.Window;
-                       }
+                       //backcolor_set = false;
+                       //if (!ReadOnly) {
+                       //        backColor = SystemColors.Window;
+                       //}
 #else
                                backColor = SystemColors.Window;
 #endif
                        return backColor;
                }
+               
+               private void InputText (string text, bool overwrite, bool clear)
+               {
+                       string input = text;
+                       
+                       if (clear) {
+                               provider.Clear ();
+                       }
+
+                       int testPosition;
+                       MaskedTextResultHint resultHint;
+                       bool result = false;
+                       
+                       if (RejectInputOnFirstFailure) {
+                               if (overwrite) {
+                                       provider.Replace (input, 
SelectionStart, SelectionStart + SelectionLength, out testPosition, out 
resultHint);
+                               } else {
+                                       provider.InsertAt (input, 
SelectionStart);
+                               }
+                       } else {
+                               while (!result && input.Length > 0) {
+                                       if (overwrite) {
+                                               result = provider.Replace 
(input, SelectionStart, SelectionStart + input.Length, out testPosition, out 
resultHint);
+                                       } else {
+                                               result = provider.InsertAt 
(input, SelectionStart, out testPosition, out resultHint);
+                                       }
+                                       
+                                       if (result) {
+                                               break;
+                                       }
+                                       
+                                       input = input.Substring (0, 
Math.Min(testPosition - SelectionStart - 1, input.Length - 1));
+                               }
+                       }
+               }
 #endregion
        }
 }

_______________________________________________
Mono-patches maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches

Reply via email to