rendered paste bodyIndex: ListView.cs
===================================================================
--- ListView.cs (Revision 67259)
+++ ListView.cs (Arbeitskopie)
@@ -1302,6 +1302,10 @@
ListViewItem last_clicked_item;
bool hover_processed = false;
bool checking = false;
+
+ LabelEditTextBox edit_text_box;
+ internal ListViewItem edit_item;
+ LabelEditEventArgs edit_args;
public ItemControl (ListView owner)
{
@@ -1491,8 +1495,11 @@
owner.OnDoubleClick (EventArgs.Empty);
if (owner.CheckBoxes)
ToggleCheckState (clicked_item);
- } else if (me.Clicks == 1)
+ } else if (me.Clicks == 1) {
owner.OnClick (EventArgs.Empty);
+ if (!changed)
+ BeginEdit (clicked_item); // this is probably not the correct place to execute BeginEdit
+ }
} else {
if (owner.MultiSelect) {
Keys mods = XplatUI.State.ModifierKeys;
@@ -1591,6 +1598,64 @@
box_select_mode = BoxSelect.None;
checking = false;
}
+
+ internal void LabelEditFinished (object sender, EventArgs e)
+ {
+ EndEdit (edit_item);
+ }
+
+ internal void BeginEdit (ListViewItem item)
+ {
+ if (edit_item != null)
+ EndEdit (edit_item);
+
+ if (edit_text_box == null) {
+ edit_text_box = new LabelEditTextBox ();
+ edit_text_box.BorderStyle = BorderStyle.FixedSingle;
+ edit_text_box.EditingFinished += new EventHandler (LabelEditFinished);
+ Controls.Add (edit_text_box);
+ }
+
+ item.EnsureVisible();
+
+ edit_text_box.Bounds = item.GetBounds (ItemBoundsPortion.Label);
+ edit_text_box.Width += 4;
+
+ edit_text_box.Text = item.Text;
+ edit_text_box.Visible = true;
+ edit_text_box.Focus ();
+ edit_text_box.SelectAll ();
+
+ edit_args = new LabelEditEventArgs (owner.Items.IndexOf(edit_item));
+ owner.OnBeforeLabelEdit (edit_args);
+
+ if (edit_args.CancelEdit)
+ EndEdit (item);
+
+ edit_item = item;
+ }
+
+ internal void EndEdit (ListViewItem item)
+ {
+ if (edit_text_box != null && edit_text_box.Visible) {
+ edit_text_box.Visible = false;
+ }
+
+ if (edit_item != null && edit_item == item) {
+ owner.OnAfterLabelEdit (edit_args);
+
+ if (!edit_args.CancelEdit) {
+ if (edit_args.Label != null)
+ edit_item.Text = edit_args.Label;
+ else
+ edit_item.Text = edit_text_box.Text;
+ }
+
+ }
+
+
+ edit_item = null;
+ }
internal override void OnPaintInternal (PaintEventArgs pe)
{
@@ -1664,6 +1729,8 @@
private void HorizontalScroller (object sender, EventArgs e)
{
+ item_control.EndEdit (item_control.edit_item);
+
// Avoid unnecessary flickering, when button is
// kept pressed at the end
if (h_marker != h_scroll.Value) {
@@ -1680,6 +1747,8 @@
private void VerticalScroller (object sender, EventArgs e)
{
+ item_control.EndEdit (item_control.edit_item);
+
// Avoid unnecessary flickering, when button is
// kept pressed at the end
if (v_marker != v_scroll.Value) {
Index: ListViewItem.cs
===================================================================
--- ListViewItem.cs (Revision 67259)
+++ ListViewItem.cs (Arbeitskopie)
@@ -338,6 +338,9 @@
#region Public Instance Methods
public void BeginEdit ()
{
+ if (owner != null && owner.LabelEdit) {
+ owner.item_control.BeginEdit (this);
+ }
// FIXME: TODO
// if (owner != null && owner.LabelEdit
// && owner.Activation == ItemActivation.Standard)