Author: jackson
Date: 2006-07-15 00:52:36 -0400 (Sat, 15 Jul 2006)
New Revision: 62630
Modified:
trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ChangeLog
trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/TreeNode.cs
trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/TreeView.cs
Log:
* TreeNode.cs:
* TreeView.cs: Make the editing work similar to MSs, firing the
events correctly and ending edits correctly.
Modified: trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ChangeLog
===================================================================
--- trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ChangeLog
2006-07-15 04:06:53 UTC (rev 62629)
+++ trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ChangeLog
2006-07-15 04:52:36 UTC (rev 62630)
@@ -1,3 +1,9 @@
+2006-07-14 Jackson Harper <[EMAIL PROTECTED]>
+
+ * TreeNode.cs:
+ * TreeView.cs: Make the editing work similar to MSs, firing the
+ events correctly and ending edits correctly.
+
2006-07-14 Mike Kestner <[EMAIL PROTECTED]>
* ToolBarButton.cs:
Modified: trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/TreeNode.cs
===================================================================
--- trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/TreeNode.cs
2006-07-15 04:06:53 UTC (rev 62629)
+++ trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/TreeNode.cs
2006-07-15 04:52:36 UTC (rev 62630)
@@ -48,7 +48,6 @@
internal bool is_expanded = false;
private bool check;
- private bool is_editing;
internal OwnerDrawPropertyBag prop_bag;
private object tag;
@@ -308,7 +307,12 @@
}
public bool IsEditing {
- get { return is_editing; }
+ get {
+ TreeView tv = TreeView;
+ if (tv == null)
+ return false;
+ return tv.edit_node == this;
+ }
}
public bool IsExpanded {
@@ -497,10 +501,9 @@
#region Public Instance Methods
public void BeginEdit () {
- is_editing = true;
TreeView tv = TreeView;
if (tv != null)
- tv.edit_node = this;
+ tv.BeginEdit (this);
}
public void Collapse () {
@@ -508,9 +511,9 @@
}
public void EndEdit (bool cancel) {
- is_editing = false;
- if (!cancel && TreeView != null)
- Text = TreeView.LabelEditText;
+ TreeView tv = TreeView;
+ if (!cancel && tv != null)
+ tv.EndEdit (this);
}
public void Expand () {
Modified: trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/TreeView.cs
===================================================================
--- trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/TreeView.cs
2006-07-15 04:06:53 UTC (rev 62629)
+++ trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/TreeView.cs
2006-07-15 04:52:36 UTC (rev 62630)
@@ -57,6 +57,7 @@
private bool hot_tracking;
private int indent = 19;
+ private NodeLabelEditEventArgs edit_args;
private TextBox edit_text_box;
internal TreeNode edit_node;
@@ -544,8 +545,8 @@
return node.prop_bag;
}
- protected override bool IsInputKey (Keys key_data) {
-
+ protected override bool IsInputKey (Keys key_data)
+ {
if ((key_data & Keys.Alt) == 0) {
switch (key_data & Keys.KeyCode) {
case Keys.Enter:
@@ -758,14 +759,6 @@
#endregion // Protected Instance Methods
#region Internal & Private Methods and Properties
- internal string LabelEditText {
- get {
- if (edit_text_box == null)
- return String.Empty;
- return edit_text_box.Text;
- }
- }
-
internal IntPtr CreateNodeHandle ()
{
return (IntPtr) handle_count++;
@@ -1145,10 +1138,22 @@
}
}
- private void DrawEditNode (TreeNode node)
+ private void EditTextBoxKeyDown (object sender, KeyEventArgs e)
{
- SuspendLayout ();
+ if (e.KeyCode == Keys.Return)
+ edit_text_box.Visible = false;
+ }
+ private void EditTextBoxLostFocus (object sender, EventArgs e)
+ {
+ EndEdit (edit_node);
+ }
+
+ internal void BeginEdit (TreeNode node)
+ {
+ if (edit_node != null)
+ EndEdit (edit_node);
+
if (edit_text_box == null) {
edit_text_box = new FixedSizeTextBox ();
edit_text_box.BorderStyle =
BorderStyle.FixedSingle;
@@ -1165,33 +1170,36 @@
edit_text_box.Focus ();
edit_text_box.SelectAll ();
- ResumeLayout ();
+ edit_args = new NodeLabelEditEventArgs (edit_node);
+ OnBeforeLabelEdit (edit_args);
+
+ if (edit_args.CancelEdit)
+ EndEdit (node);
+
+ edit_node = node;
}
- private void EditTextBoxKeyDown (object sender, KeyEventArgs e)
+ internal void EndEdit (TreeNode node)
{
- if (e.KeyCode == Keys.Return)
+ if (edit_text_box != null && edit_text_box.Visible) {
edit_text_box.Visible = false;
- }
+ }
- private void EditTextBoxLostFocus (object sender, EventArgs e)
- {
- EndEdit ();
- }
+ if (edit_node != null && edit_node == node) {
+ OnAfterLabelEdit (edit_args);
- private void EndEdit ()
- {
- if (edit_text_box != null)
- edit_text_box.Visible = false;
+ if (!edit_args.CancelEdit) {
+ if (edit_args.Label != null)
+ edit_node.Text =
edit_args.Label;
+ else
+ edit_node.Text =
edit_text_box.Text;
+ }
- if (edit_node != null) {
- NodeLabelEditEventArgs e = new
NodeLabelEditEventArgs (edit_node, edit_text_box.Text);
- OnAfterLabelEdit (e);
+ }
- edit_node.EndEdit (e.CancelEdit);
- UpdateNode (edit_node);
- edit_node = null;
- }
+
+ edit_node = null;
+ UpdateNode (node);
}
internal int GetNodeWidth (TreeNode node)
@@ -1252,9 +1260,7 @@
if (ImageList != null)
DrawNodeImage (node, dc, clip, node.GetImageX
(), y);
- if (node.IsEditing)
- DrawEditNode (node);
- else
+ if (!node.IsEditing)
DrawStaticNode (node, dc);
}
@@ -1362,8 +1368,8 @@
private void VScrollBarValueChanged (object sender, EventArgs e)
{
- if (edit_node != null)
- EndEdit ();
+ EndEdit (edit_node);
+
SetVScrollPos (vbar.Value, null);
}
@@ -1403,8 +1409,7 @@
private void HScrollBarValueChanged(object sender, EventArgs e)
{
- if (edit_node != null)
- EndEdit ();
+ EndEdit (edit_node);
int old_offset = hbar_offset;
hbar_offset = hbar.Value;
@@ -1513,9 +1518,7 @@
TreeNode old_selected = selected_node;
SelectedNode = node;
if (label_edit && e.Clicks == 1 &&
selected_node == old_selected) {
- if (edit_node != null)
- EndEdit ();
- node.BeginEdit ();
+ BeginEdit (node);
} else if (selected_node != focused_node) {
select_mmove = true;
}
_______________________________________________
Mono-patches maillist - [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches