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