// ----------------------------------------------------------------------- // // Copyright 2014 MIT Licence. See licence.md for more information. // // ----------------------------------------------------------------------- namespace Perspex.Controls { using System; using Perspex.Controls.Primitives; public class TextBox : TemplatedControl { public static readonly PerspexProperty AcceptsReturnProperty = PerspexProperty.Register("AcceptsReturn"); public static readonly PerspexProperty AcceptsTabProperty = PerspexProperty.Register("AcceptsTab"); public static readonly PerspexProperty CaretIndexProperty = PerspexProperty.Register("CaretIndex", coerce: CoerceCaretIndex); public static readonly PerspexProperty SelectionStartProperty = PerspexProperty.Register("SelectionStart", coerce: CoerceCaretIndex); public static readonly PerspexProperty SelectionEndProperty = PerspexProperty.Register("SelectionEnd", coerce: CoerceCaretIndex); public static readonly PerspexProperty TextProperty = TextBlock.TextProperty.AddOwner(); public static readonly PerspexProperty TextWrappingProperty = TextBlock.TextWrappingProperty.AddOwner(); public bool AcceptsReturn { get { return this.GetValue(AcceptsReturnProperty); } set { this.SetValue(AcceptsReturnProperty, value); } } public bool AcceptsTab { get { return this.GetValue(AcceptsTabProperty); } set { this.SetValue(AcceptsTabProperty, value); } } public int CaretIndex { get { return this.GetValue(CaretIndexProperty); } set { this.SetValue(CaretIndexProperty, value); } } public int SelectionStart { get { return this.GetValue(SelectionStartProperty); } set { this.SetValue(SelectionStartProperty, value); } } public int SelectionEnd { get { return this.GetValue(SelectionEndProperty); } set { this.SetValue(SelectionEndProperty, value); } } public string Text { get { return this.GetValue(TextProperty); } set { this.SetValue(TextProperty, value); } } public TextWrapping TextWrapping { get { return this.GetValue(TextWrappingProperty); } set { this.SetValue(TextWrappingProperty, value); } } private static int CoerceCaretIndex(PerspexObject o, int value) { var text = o.GetValue(TextProperty); var length = (text != null) ? text.Length : 0; return Math.Max(0, Math.Min(length, value)); } } }