127 lines
3.0 KiB
C#
127 lines
3.0 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Text;
|
|
using System.Drawing;
|
|
using System.Windows.Forms;
|
|
using System.Reflection;
|
|
using System.ComponentModel;
|
|
|
|
namespace Aga.Controls.Tree.NodeControls
|
|
{
|
|
public class NodeTextBox : BaseTextControl
|
|
{
|
|
private const int MinTextBoxWidth = 30;
|
|
|
|
public NodeTextBox()
|
|
{
|
|
}
|
|
|
|
protected override Size CalculateEditorSize(EditorContext context)
|
|
{
|
|
if (Parent.UseColumns)
|
|
return context.Bounds.Size;
|
|
else
|
|
{
|
|
Size size = GetLabelSize(context.CurrentNode, context.DrawContext, _label);
|
|
int width = Math.Max(size.Width + Font.Height, MinTextBoxWidth); // reserve a place for new typed character
|
|
return new Size(width, size.Height);
|
|
}
|
|
}
|
|
|
|
public override void KeyDown(KeyEventArgs args)
|
|
{
|
|
if (args.KeyCode == Keys.F2 && Parent.CurrentNode != null && EditEnabled)
|
|
{
|
|
args.Handled = true;
|
|
BeginEdit();
|
|
}
|
|
}
|
|
|
|
protected override Control CreateEditor(TreeNodeAdv node)
|
|
{
|
|
TextBox textBox = CreateTextBox();
|
|
textBox.TextAlign = TextAlign;
|
|
textBox.Text = GetLabel(node);
|
|
textBox.BorderStyle = BorderStyle.FixedSingle;
|
|
textBox.TextChanged += EditorTextChanged;
|
|
textBox.KeyDown += EditorKeyDown;
|
|
_label = textBox.Text;
|
|
SetEditControlProperties(textBox, node);
|
|
return textBox;
|
|
}
|
|
|
|
protected virtual TextBox CreateTextBox()
|
|
{
|
|
return new TextBox();
|
|
}
|
|
|
|
protected override void DisposeEditor(Control editor)
|
|
{
|
|
var textBox = editor as TextBox;
|
|
textBox.TextChanged -= EditorTextChanged;
|
|
textBox.KeyDown -= EditorKeyDown;
|
|
}
|
|
|
|
private void EditorKeyDown(object sender, KeyEventArgs e)
|
|
{
|
|
if (e.KeyCode == Keys.Escape)
|
|
EndEdit(false);
|
|
else if (e.KeyCode == Keys.Enter)
|
|
EndEdit(true);
|
|
}
|
|
|
|
private string _label;
|
|
private void EditorTextChanged(object sender, EventArgs e)
|
|
{
|
|
var textBox = sender as TextBox;
|
|
_label = textBox.Text;
|
|
Parent.UpdateEditorBounds();
|
|
}
|
|
|
|
protected override void DoApplyChanges(TreeNodeAdv node, Control editor)
|
|
{
|
|
var label = (editor as TextBox).Text;
|
|
string oldLabel = GetLabel(node);
|
|
if (oldLabel != label)
|
|
{
|
|
SetLabel(node, label);
|
|
OnLabelChanged(node.Tag, oldLabel, label);
|
|
}
|
|
}
|
|
|
|
public override void Cut(Control control)
|
|
{
|
|
(control as TextBox).Cut();
|
|
}
|
|
|
|
public override void Copy(Control control)
|
|
{
|
|
(control as TextBox).Copy();
|
|
}
|
|
|
|
public override void Paste(Control control)
|
|
{
|
|
(control as TextBox).Paste();
|
|
}
|
|
|
|
public override void Delete(Control control)
|
|
{
|
|
var textBox = control as TextBox;
|
|
int len = Math.Max(textBox.SelectionLength, 1);
|
|
if (textBox.SelectionStart < textBox.Text.Length)
|
|
{
|
|
int start = textBox.SelectionStart;
|
|
textBox.Text = textBox.Text.Remove(textBox.SelectionStart, len);
|
|
textBox.SelectionStart = start;
|
|
}
|
|
}
|
|
|
|
public event EventHandler<LabelEventArgs> LabelChanged;
|
|
protected void OnLabelChanged(object subject, string oldLabel, string newLabel)
|
|
{
|
|
if (LabelChanged != null)
|
|
LabelChanged(this, new LabelEventArgs(subject, oldLabel, newLabel));
|
|
}
|
|
}
|
|
}
|