Author: andreia
Date: 2007-03-14 13:25:08 -0500 (Wed, 14 Mar 2007)
New Revision: 74291

Modified:
   trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ChangeLog
   trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/TabControl.cs
   trunk/mcs/class/Managed.Windows.Forms/Test/System.Windows.Forms/ChangeLog
   
trunk/mcs/class/Managed.Windows.Forms/Test/System.Windows.Forms/TabControlTest.cs
Log:
2007-03-14  Andreia Gaita  <[EMAIL PROTECTED]>

* TabControl.cs: Add support for 2.0 Deselecting, Deselected and
Selecting events. Fire Leave and Enter events when changing tabs.

* TabControlTest.cs: Add tests for Deselecting, Deselected, 
Selecting events.

Modified: trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ChangeLog
===================================================================
--- trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ChangeLog        
2007-03-14 18:21:16 UTC (rev 74290)
+++ trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ChangeLog        
2007-03-14 18:25:08 UTC (rev 74291)
@@ -1,3 +1,8 @@
+2007-03-14  Andreia Gaita  <[EMAIL PROTECTED]>
+
+       * TabControl.cs: Add support for 2.0 Deselecting, Deselected and
+       Selecting events. Fire Leave and Enter events when changing tabs.
+
 2007-03-14  George Giolfan  <[EMAIL PROTECTED]>
 
        * TreeView.cs: Add TreeViewNodeSorter.

Modified: 
trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/TabControl.cs
===================================================================
--- trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/TabControl.cs    
2007-03-14 18:21:16 UTC (rev 74290)
+++ trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/TabControl.cs    
2007-03-14 18:25:08 UTC (rev 74291)
@@ -236,23 +236,44 @@
                                        return;
                                }
 
+#if NET_2_0
+                               TabControlCancelEventArgs ret = new 
TabControlCancelEventArgs (SelectedTab, selected_index, false, 
TabControlAction.Deselecting);
+                               OnDeselecting (ret);
+                               if (ret.Cancel)
+                                       return;
+
+#endif
+                               int old_index = selected_index;
+                               int new_index = value;
+
+                               selected_index = new_index;
+
+#if NET_2_0
+                               ret = new TabControlCancelEventArgs 
(SelectedTab, selected_index, false, TabControlAction.Selecting);
+                               OnSelecting (ret);
+                               if (ret.Cancel) {
+                                       selected_index = old_index;
+                                       return;
+                               }
+#endif
+
                                SuspendLayout ();
 
                                Rectangle invalid = Rectangle.Empty;
                                bool refresh = false;
-                               
-                               if (value != -1 && show_slider && value < 
slider_pos) {
-                                       slider_pos = value;
+
+                               if (new_index != -1 && show_slider && new_index 
< slider_pos) {
+                                       slider_pos = new_index;
                                        refresh = true;
                                }
 
-                               if (value != -1) {
-                                       int le = TabPages 
[value].TabBounds.Right;
+                               if (new_index != -1) {
+                                       int le = 
TabPages[new_index].TabBounds.Right;
                                        int re = 
ThemeEngine.Current.GetTabControlLeftScrollRect (this).Left;
                                        if (show_slider && le > re) {
                                                int i = 0;
 
-                                               for (i = value; i < 
TabPages.Count; i++) {
+                                               for (i = new_index; i < 
TabPages.Count; i++) {
                                                        if (TabPages 
[i].TabBounds.Right > re)
                                                                break;
                                                }
@@ -261,33 +282,29 @@
                                        }
                                }
 
-                               if (selected_index != -1 && value != -1) {
+                               if (old_index != -1 && new_index != -1) {
                                        if (!refresh)
-                                               invalid = GetTabRect 
(selected_index);
-                                       ((TabPage) Controls 
[selected_index]).SetVisible (false);
+                                               invalid = GetTabRect 
(old_index);
+                                       ((TabPage) 
Controls[old_index]).SetVisible (false);
                                }
-                               selected_index = value;
 
-#if NET_2_0
-                               OnSelected (new TabControlEventArgs 
(SelectedTab, selected_index, TabControlAction.Selected));
-#endif
-                               OnSelectedIndexChanged (EventArgs.Empty);
-
                                TabPage selected = null;
 
-                               if (selected_index != -1) {
-                                       selected = (TabPage) Controls 
[selected_index];
-                                       invalid = Rectangle.Union (invalid, 
GetTabRect (selected_index));
+                               if (new_index != -1) {
+                                       selected = (TabPage) 
Controls[new_index];
+                                       invalid = Rectangle.Union (invalid, 
GetTabRect (new_index));
                                        selected.SetVisible (true);
                                }
 
+                               OnSelectedIndexChanged (EventArgs.Empty);
+
                                ResumeLayout ();
 
                                if (refresh) {
                                        SizeTabs ();
                                        Refresh ();
-                               } else if (selected_index != -1 && selected.Row 
!= BottomRow) {
-                                       DropRow (TabPages [selected_index].Row);
+                               } else if (new_index != -1 && selected.Row != 
BottomRow) {
+                                       DropRow (TabPages[new_index].Row);
                                        // calculating what to invalidate here 
seems to be slower then just
                                        // refreshing the whole thing
                                        SizeTabs ();
@@ -598,11 +615,44 @@
                }
 
 #if NET_2_0
+               protected virtual void OnDeselecting (TabControlCancelEventArgs 
e)
+               {
+                       TabControlCancelEventHandler eh = 
(TabControlCancelEventHandler) (Events[DeselectingEvent]);
+                       if (eh != null)
+                               eh (this, e);
+
+                       if (!e.Cancel)
+                               OnDeselected (new TabControlEventArgs 
(SelectedTab, selected_index, TabControlAction.Deselected));
+               }
+
+               protected virtual void OnDeselected (TabControlEventArgs e)
+               {
+                       TabControlEventHandler eh = (TabControlEventHandler) 
(Events[DeselectedEvent]);
+                       if (eh != null)
+                               eh (this, e);
+
+                       if (this.SelectedTab != null)
+                               this.SelectedTab.FireLeave ();
+               }
+
+               protected virtual void OnSelecting (TabControlCancelEventArgs e)
+               {
+                       TabControlCancelEventHandler eh = 
(TabControlCancelEventHandler) (Events[SelectingEvent]);
+                       if (eh != null)
+                               eh (this, e);
+                       
+                       if (!e.Cancel)
+                               OnSelected (new TabControlEventArgs 
(SelectedTab, selected_index, TabControlAction.Selected));
+               }
+
                protected virtual void OnSelected (TabControlEventArgs e)
                {
                        TabControlEventHandler eh = 
(TabControlEventHandler)(Events[SelectedEvent]);
                        if (eh != null)
                                eh (this, e);
+
+                       if (this.SelectedTab != null)
+                               this.SelectedTab.FireEnter ();
                }
 #endif
 
@@ -1124,6 +1174,30 @@
                        add { Events.AddHandler (SelectedEvent, value); }
                        remove { Events.RemoveHandler (SelectedEvent, value); }
                }
+
+               static object DeselectedEvent = new object ();
+
+               public event TabControlEventHandler Deselected
+               {
+                       add { Events.AddHandler (DeselectedEvent, value); }
+                       remove { Events.RemoveHandler (DeselectedEvent, value); 
}
+               }
+
+               static object SelectingEvent = new object ();
+
+               public event TabControlCancelEventHandler Selecting
+               {
+                       add { Events.AddHandler (SelectingEvent, value); }
+                       remove { Events.RemoveHandler (SelectingEvent, value); }
+               }
+
+               static object DeselectingEvent = new object ();
+
+               public event TabControlCancelEventHandler Deselecting
+               {
+                       add { Events.AddHandler (DeselectingEvent, value); }
+                       remove { Events.RemoveHandler (DeselectingEvent, 
value); }
+               }
 #endif
                #endregion      // Events
 

Modified: 
trunk/mcs/class/Managed.Windows.Forms/Test/System.Windows.Forms/ChangeLog
===================================================================
--- trunk/mcs/class/Managed.Windows.Forms/Test/System.Windows.Forms/ChangeLog   
2007-03-14 18:21:16 UTC (rev 74290)
+++ trunk/mcs/class/Managed.Windows.Forms/Test/System.Windows.Forms/ChangeLog   
2007-03-14 18:25:08 UTC (rev 74291)
@@ -1,3 +1,8 @@
+2007-03-14  Andreia Gaita  <[EMAIL PROTECTED]>
+
+       * TabControlTest.cs: Add tests for Deselecting, Deselected, 
+       Selecting events.
+
 2007-03-14  George Giolfan  <[EMAIL PROTECTED]>
 
        * TreeViewTest.cs: Add TreeViewNodeSorterTest.

Modified: 
trunk/mcs/class/Managed.Windows.Forms/Test/System.Windows.Forms/TabControlTest.cs
===================================================================
--- 
trunk/mcs/class/Managed.Windows.Forms/Test/System.Windows.Forms/TabControlTest.cs
   2007-03-14 18:21:16 UTC (rev 74290)
+++ 
trunk/mcs/class/Managed.Windows.Forms/Test/System.Windows.Forms/TabControlTest.cs
   2007-03-14 18:25:08 UTC (rev 74291)
@@ -655,12 +655,18 @@
                {
                        Form f = new Form ();
                        TabControl tc = new TabControl ();
-                       TabControlEventArgs tcea = new TabControlEventArgs 
(null, 0, TabControlAction.Deselected);
+                       TabControlEventArgs tcea1 = new TabControlEventArgs 
(null, 0, TabControlAction.Deselected);
+                       TabControlEventArgs tcea2 = new TabControlEventArgs 
(null, 0, TabControlAction.Selected);
+                       TabControlCancelEventArgs tccea1 = new 
TabControlCancelEventArgs (null, 0, false, TabControlAction.Deselecting);
+                       TabControlCancelEventArgs tccea2 = new 
TabControlCancelEventArgs (null, 0, false, TabControlAction.Selecting);
                        
                        f.Controls.Add (tc);
                        string events = string.Empty;
                        tc.SelectedIndexChanged += new EventHandler (delegate 
(Object obj, EventArgs e) { events += ("SelectedIndexChanged;"); });
-                       tc.Selected += new TabControlEventHandler (delegate 
(Object obj, TabControlEventArgs e) { events += ("Selected;"); tcea = e; });
+                       tc.Deselecting += new TabControlCancelEventHandler 
(delegate (Object obj, TabControlCancelEventArgs e) { events += 
("Deselecting;"); tccea1 = e; });
+                       tc.Deselected += new TabControlEventHandler (delegate 
(Object obj, TabControlEventArgs e) { events += ("Deselected;"); tcea1 = e; });
+                       tc.Selecting += new TabControlCancelEventHandler 
(delegate (Object obj, TabControlCancelEventArgs e) { events += ("Selecting;"); 
tccea2 = e; });
+                       tc.Selected += new TabControlEventHandler (delegate 
(Object obj, TabControlEventArgs e) { events += ("Selected;"); tcea2 = e; });
                        
                        TabPage tp1 = new TabPage ("One");
                        TabPage tp2 = new TabPage ("Two");
@@ -670,10 +676,13 @@
                        
                        f.Show ();
                        tc.SelectTab (1);
-                       Assert.AreEqual ("Selected;SelectedIndexChanged;", 
events, "A1");
-                       Assert.AreEqual (TabControlAction.Selected, 
tcea.Action, "A2");
-                       Assert.AreSame (tp2, tcea.TabPage, "A3");
-                       Assert.AreEqual (1, tcea.TabPageIndex, "A4");
+                       Assert.AreEqual 
("Deselecting;Deselected;Selecting;Selected;SelectedIndexChanged;", events, 
"A1");
+                       Assert.AreEqual (TabControlAction.Deselecting, 
tccea1.Action, "A2");
+                       Assert.AreEqual (TabControlAction.Deselected, 
tcea1.Action, "A2");
+                       Assert.AreEqual (TabControlAction.Selecting, 
tccea2.Action, "A2");
+                       Assert.AreEqual (TabControlAction.Selected, 
tcea2.Action, "A2");
+                       Assert.AreSame (tp2, tcea2.TabPage, "A3");
+                       Assert.AreEqual (1, tcea2.TabPageIndex, "A4");
                        f.Close ();
                }
 #endif

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

Reply via email to