* Timer.cs, Control.cs, Menu.cs: make control_tag private.
[mono.git] / mcs / class / Managed.Windows.Forms / System.Windows.Forms / Timer.cs
index 8bf732fff94671c640578fe8f3ff2d526c03f680..3b26332245c1dcdfcb90aa7f750fdd6976663c12 100644 (file)
@@ -34,10 +34,13 @@ namespace System.Windows.Forms {
        public class Timer : Component {
 
                private bool enabled;
-               private IContainer container;
                private int interval = 100;
                private DateTime expires;
+               internal Thread thread;
 
+#if NET_2_0
+               object control_tag;
+#endif
                internal static readonly int Minimum = 15;
 
                public Timer ()
@@ -51,7 +54,7 @@ namespace System.Windows.Forms {
                }
 
                [DefaultValue (false)]
-               public bool Enabled {
+               public virtual bool Enabled {
                        get {
                                return enabled;
                        }
@@ -59,9 +62,14 @@ namespace System.Windows.Forms {
                                if (value != enabled) {
                                        enabled = value;
                                        if (value) {
+                                               // Use AddTicks so we get some rounding
+                                               expires = DateTime.UtcNow.AddMilliseconds (interval > Minimum ? interval : Minimum);
+
+                                               thread = Thread.CurrentThread;
                                                XplatUI.SetTimer (this);
                                        } else {
                                                XplatUI.KillTimer (this);
+                                               thread = null;
                                        }
                                }
                        }
@@ -80,7 +88,7 @@ namespace System.Windows.Forms {
                                interval = value;
                                                                
                                // Use AddTicks so we get some rounding
-                               expires = DateTime.Now.AddMilliseconds (interval > Minimum ? interval : Minimum);
+                               expires = DateTime.UtcNow.AddMilliseconds (interval > Minimum ? interval : Minimum);
                                                                        
                                if (enabled == true) {                          
                                        XplatUI.KillTimer (this);
@@ -88,6 +96,23 @@ namespace System.Windows.Forms {
                                }
                        }
                }
+               
+#if NET_2_0
+               [Localizable(false)]
+               [Bindable(true)]
+               [TypeConverter(typeof(StringConverter))]
+               [DefaultValue(null)]
+               [MWFCategory("Data")]
+               public object Tag {
+                       get {
+                               return control_tag;
+                       }
+
+                       set {
+                               control_tag = value;
+                       }
+               }
+#endif
 
                public void Start ()
                {
@@ -135,9 +160,6 @@ namespace System.Windows.Forms {
                        Enabled = false;
                }
 
-               private bool has_last_fire = false;
-               private DateTime last_fire;
-
                internal void TickHandler (object sender, EventArgs e)
                {
                        OnTick (e);