diff --git a/Terminal.Gui/ConsoleDrivers/NetDriver.cs b/Terminal.Gui/ConsoleDrivers/NetDriver.cs index 4a3c48e82..6d9fa4930 100644 --- a/Terminal.Gui/ConsoleDrivers/NetDriver.cs +++ b/Terminal.Gui/ConsoleDrivers/NetDriver.cs @@ -909,7 +909,8 @@ namespace Terminal.Gui { int redrawAttr = -1; var lastCol = -1; - Console.CursorVisible = false; + GetCursorVisibility (out CursorVisibility savedVisibitity); + SetCursorVisibility (CursorVisibility.Invisible); for (int row = top; row < rows; row++) { if (Console.WindowHeight < 1) { @@ -967,6 +968,7 @@ namespace Terminal.Gui { } } SetCursorPosition (0, 0); + SetCursorVisibility (savedVisibitity); } void SetVirtualCursorPosition (int col, int row) @@ -1444,7 +1446,13 @@ namespace Terminal.Gui { public override bool SetCursorVisibility (CursorVisibility visibility) { savedCursorVisibility = visibility; - return Console.CursorVisible = visibility == CursorVisibility.Default; + var isVisible = Console.CursorVisible = visibility == CursorVisibility.Default; + if (isVisible) { + Console.Out.Write ("\x1b[?25h"); + } else { + Console.Out.Write ("\x1b[?25l"); + } + return isVisible; } /// diff --git a/Terminal.Gui/Views/TextField.cs b/Terminal.Gui/Views/TextField.cs index 37354b37e..fff8af2cd 100644 --- a/Terminal.Gui/Views/TextField.cs +++ b/Terminal.Gui/Views/TextField.cs @@ -22,12 +22,12 @@ namespace Terminal.Gui { /// The provides editing functionality and mouse support. /// public class TextField : View { - List text; - int first, point; - int selectedStart = -1; // -1 represents there is no text selection. - string selectedText; - HistoryText historyText = new HistoryText (); - CultureInfo currentCulture; + List _text; + int _first, _point; + int _selectedStart = -1; // -1 represents there is no text selection. + string _selectedText; + HistoryText _historyText = new HistoryText (); + CultureInfo _currentCulture; /// /// Gets or sets the text to render in control when no value has @@ -79,7 +79,7 @@ namespace Terminal.Gui { /// Initial text contents. public TextField (string text) : base (text) { - Initialize (text, text.GetRuneCount () + 1); + SetInitialProperties (text, text.GetRuneCount () + 1); } /// @@ -91,25 +91,25 @@ namespace Terminal.Gui { /// Initial text contents. public TextField (int x, int y, int w, string text) : base (new Rect (x, y, w, 1)) { - Initialize (text, w); + SetInitialProperties (text, w); } - void Initialize (string text, int w) + void SetInitialProperties (string text, int w) { Height = 1; if (text == null) text = ""; - this.text = TextModel.ToRunes (text.Split ("\n") [0]); - point = text.GetRuneCount (); - first = point > w + 1 ? point - w + 1 : 0; + this._text = TextModel.ToRunes (text.Split ("\n") [0]); + _point = text.GetRuneCount (); + _first = _point > w + 1 ? _point - w + 1 : 0; CanFocus = true; Used = true; WantMousePositionReports = true; - savedCursorVisibility = desiredCursorVisibility; + _savedCursorVisibility = _desiredCursorVisibility; - historyText.ChangeText += HistoryText_ChangeText; + _historyText.ChangeText += HistoryText_ChangeText; Initialized += TextField_Initialized; @@ -214,7 +214,7 @@ namespace Terminal.Gui { AddKeyBinding (Key.R | Key.CtrlMask, Command.DeleteAll); AddKeyBinding (Key.D | Key.CtrlMask | Key.ShiftMask, Command.DeleteAll); - currentCulture = Thread.CurrentThread.CurrentUICulture; + _currentCulture = Thread.CurrentThread.CurrentUICulture; ContextMenu = new ContextMenu (this, BuildContextMenuBarItem ()); ContextMenu.KeyChanged += ContextMenu_KeyChanged; @@ -304,36 +304,36 @@ namespace Terminal.Gui { /// public new string Text { get { - return StringExtensions.ToString (text); + return StringExtensions.ToString (_text); } set { - var oldText = StringExtensions.ToString (text); + var oldText = StringExtensions.ToString (_text); if (oldText == value) return; var newText = OnTextChanging (value.Replace ("\t", "").Split ("\n") [0]); if (newText.Cancel) { - if (point > text.Count) { - point = text.Count; + if (_point > _text.Count) { + _point = _text.Count; } return; } ClearAllSelection (); - text = TextModel.ToRunes (newText.NewText); + _text = TextModel.ToRunes (newText.NewText); - if (!Secret && !historyText.IsFromHistory) { - historyText.Add (new List> () { oldText.ToRuneList () }, - new Point (point, 0)); - historyText.Add (new List> () { text }, new Point (point, 0) + if (!Secret && !_historyText.IsFromHistory) { + _historyText.Add (new List> () { oldText.ToRuneList () }, + new Point (_point, 0)); + _historyText.Add (new List> () { _text }, new Point (_point, 0) , HistoryText.LineStatus.Replaced); } TextChanged?.Invoke (this, new TextChangedEventArgs (oldText)); - if (point > text.Count) { - point = Math.Max (TextModel.DisplaySize (text, 0).size - 1, 0); + if (_point > _text.Count) { + _point = Math.Max (TextModel.DisplaySize (_text, 0).size - 1, 0); } Adjust (); @@ -353,35 +353,35 @@ namespace Terminal.Gui { /// Sets or gets the current cursor position. /// public virtual int CursorPosition { - get { return point; } + get { return _point; } set { if (value < 0) { - point = 0; - } else if (value > text.Count) { - point = text.Count; + _point = 0; + } else if (value > _text.Count) { + _point = _text.Count; } else { - point = value; + _point = value; } - PrepareSelection (selectedStart, point - selectedStart); + PrepareSelection (_selectedStart, _point - _selectedStart); } } /// /// Gets the left offset position. /// - public int ScrollOffset => first; + public int ScrollOffset => _first; /// /// Indicates whatever the text was changed or not. /// if the text was changed otherwise. /// - public bool IsDirty => historyText.IsDirty (Text); + public bool IsDirty => _historyText.IsDirty (Text); /// /// Indicates whatever the text has history changes or not. /// if the text has history changes otherwise. /// - public bool HasHistoryChanges => historyText.HasHistoryChanges; + public bool HasHistoryChanges => _historyText.HasHistoryChanges; /// /// Get the for this view. @@ -394,13 +394,13 @@ namespace Terminal.Gui { public override void PositionCursor () { var col = 0; - for (int idx = first < 0 ? 0 : first; idx < text.Count; idx++) { - if (idx == point) + for (int idx = _first < 0 ? 0 : _first; idx < _text.Count; idx++) { + if (idx == _point) break; - var cols = text [idx].GetColumns (); + var cols = _text [idx].GetColumns (); TextModel.SetCol (ref col, Frame.Width - 1, cols); } - var pos = point - first + Math.Min (Frame.X, 0); + var pos = _point - _first + Math.Min (Frame.X, 0); var offB = OffSetBackground (); var containerFrame = SuperView?.ViewToScreen (SuperView.Bounds) ?? default; var thisFrame = ViewToScreen (Bounds); @@ -418,19 +418,22 @@ namespace Terminal.Gui { } } - CursorVisibility savedCursorVisibility; + CursorVisibility _savedCursorVisibility; void HideCursorVisibility () { - if (desiredCursorVisibility != CursorVisibility.Invisible) { + if (_desiredCursorVisibility != CursorVisibility.Invisible) { DesiredCursorVisibility = CursorVisibility.Invisible; } } + CursorVisibility _visibility; + void RestoreCursorVisibility () { - if (desiredCursorVisibility != savedCursorVisibility) { - DesiredCursorVisibility = savedCursorVisibility; + Application.Driver.GetCursorVisibility (out _visibility); + if (_desiredCursorVisibility != _savedCursorVisibility || _visibility != _savedCursorVisibility) { + DesiredCursorVisibility = _savedCursorVisibility; } } @@ -443,24 +446,24 @@ namespace Terminal.Gui { Driver.SetAttribute (GetNormalColor ()); Move (0, 0); - int p = first; + int p = _first; int col = 0; int width = Frame.Width + OffSetBackground (); - var tcount = text.Count; + var tcount = _text.Count; var roc = GetReadOnlyColor (); for (int idx = p; idx < tcount; idx++) { - var rune = text [idx]; + var rune = _text [idx]; var cols = ((Rune)rune).GetColumns (); - if (idx == point && HasFocus && !Used && length == 0 && !ReadOnly) { + if (idx == _point && HasFocus && !Used && _length == 0 && !ReadOnly) { Driver.SetAttribute (selColor); } else if (ReadOnly) { - Driver.SetAttribute (idx >= start && length > 0 && idx < start + length ? selColor : roc); + Driver.SetAttribute (idx >= _start && _length > 0 && idx < _start + _length ? selColor : roc); } else if (!HasFocus && Enabled) { Driver.SetAttribute (ColorScheme.Focus); } else if (!Enabled) { Driver.SetAttribute (roc); } else { - Driver.SetAttribute (idx >= start && length > 0 && idx < start + length ? selColor : ColorScheme.Focus); + Driver.SetAttribute (idx >= _start && _length > 0 && idx < _start + _length ? selColor : ColorScheme.Focus); } if (col + cols <= width) { Driver.AddRune ((Rune)(Secret ? CM.Glyphs.Dot : rune)); @@ -468,7 +471,7 @@ namespace Terminal.Gui { if (!TextModel.SetCol (ref col, width, cols)) { break; } - if (idx + 1 < tcount && col + text [idx + 1].GetColumns () > width) { + if (idx + 1 < tcount && col + _text [idx + 1].GetColumns () > width) { break; } } @@ -545,13 +548,13 @@ namespace Terminal.Gui { return; int offB = OffSetBackground (); - if (point < first) { - first = point; - } else if (Frame.Width > 0 && (first + point - (Frame.Width + offB) == 0 || - TextModel.DisplaySize (text, first, point).size >= Frame.Width + offB)) { + if (_point < _first) { + _first = _point; + } else if (Frame.Width > 0 && (_first + _point - (Frame.Width + offB) == 0 || + TextModel.DisplaySize (_text, _first, _point).size >= Frame.Width + offB)) { - first = Math.Max (TextModel.CalculateLeftColumn (text, first, - point, Frame.Width + offB), 0); + _first = Math.Max (TextModel.CalculateLeftColumn (_text, _first, + _point, Frame.Width + offB), 0); } SetNeedsDisplay (); } @@ -588,7 +591,7 @@ namespace Terminal.Gui { Clipboard.Contents = StringExtensions.ToString (text.ToList ()); } - int oldCursorPos; + int _oldCursorPos; /// /// Processes key presses for the . @@ -613,7 +616,7 @@ namespace Terminal.Gui { // remember current cursor position // because the new calculated cursor position is needed to be set BEFORE the change event is triggest // Needed for the Elmish Wrapper issue https://github.com/DieselMeister/Terminal.Gui.Elmish/issues/2 - oldCursorPos = point; + _oldCursorPos = _point; // Give autocomplete first opportunity to respond to key presses if (SelectedLength == 0 && Autocomplete.Suggestions.Count > 0 && Autocomplete.ProcessKey (kb)) { @@ -639,30 +642,30 @@ namespace Terminal.Gui { void InsertText (KeyEvent kb, bool useOldCursorPos = true) { - historyText.Add (new List> () { text }, new Point (point, 0)); + _historyText.Add (new List> () { _text }, new Point (_point, 0)); - List newText = text; - if (length > 0) { + List newText = _text; + if (_length > 0) { newText = DeleteSelectedText (); - oldCursorPos = point; + _oldCursorPos = _point; } if (!useOldCursorPos) { - oldCursorPos = point; + _oldCursorPos = _point; } var kbstr = TextModel.ToRunes (((Rune)(uint)kb.Key).ToString ()); if (Used) { - point++; - if (point == newText.Count + 1) { + _point++; + if (_point == newText.Count + 1) { SetText (newText.Concat (kbstr).ToList ()); } else { - if (oldCursorPos > newText.Count) { - oldCursorPos = newText.Count; + if (_oldCursorPos > newText.Count) { + _oldCursorPos = newText.Count; } - SetText (newText.GetRange (0, oldCursorPos).Concat (kbstr).Concat (newText.GetRange (oldCursorPos, Math.Min (newText.Count - oldCursorPos, newText.Count)))); + SetText (newText.GetRange (0, _oldCursorPos).Concat (kbstr).Concat (newText.GetRange (_oldCursorPos, Math.Min (newText.Count - _oldCursorPos, newText.Count)))); } } else { - SetText (newText.GetRange (0, oldCursorPos).Concat (kbstr).Concat (newText.GetRange (Math.Min (oldCursorPos + 1, newText.Count), Math.Max (newText.Count - oldCursorPos - 1, 0)))); - point++; + SetText (newText.GetRange (0, _oldCursorPos).Concat (kbstr).Concat (newText.GetRange (Math.Min (_oldCursorPos + 1, newText.Count), Math.Max (newText.Count - _oldCursorPos - 1, 0)))); + _point++; } Adjust (); } @@ -686,11 +689,11 @@ namespace Terminal.Gui { public virtual void KillWordBackwards () { ClearAllSelection (); - var newPos = GetModel ().WordBackward (point, 0); + var newPos = GetModel ().WordBackward (_point, 0); if (newPos == null) return; if (newPos.Value.col != -1) { - SetText (text.GetRange (0, newPos.Value.col).Concat (text.GetRange (point, text.Count - point))); - point = newPos.Value.col; + SetText (_text.GetRange (0, newPos.Value.col).Concat (_text.GetRange (_point, _text.Count - _point))); + _point = newPos.Value.col; } Adjust (); } @@ -701,10 +704,10 @@ namespace Terminal.Gui { public virtual void KillWordForwards () { ClearAllSelection (); - var newPos = GetModel ().WordForward (point, 0); + var newPos = GetModel ().WordForward (_point, 0); if (newPos == null) return; if (newPos.Value.col != -1) { - SetText (text.GetRange (0, point).Concat (text.GetRange (newPos.Value.col, text.Count - newPos.Value.col))); + SetText (_text.GetRange (0, _point).Concat (_text.GetRange (newPos.Value.col, _text.Count - newPos.Value.col))); } Adjust (); } @@ -712,20 +715,20 @@ namespace Terminal.Gui { void MoveWordRight () { ClearAllSelection (); - var newPos = GetModel ().WordForward (point, 0); + var newPos = GetModel ().WordForward (_point, 0); if (newPos == null) return; if (newPos.Value.col != -1) - point = newPos.Value.col; + _point = newPos.Value.col; Adjust (); } void MoveWordLeft () { ClearAllSelection (); - var newPos = GetModel ().WordBackward (point, 0); + var newPos = GetModel ().WordBackward (_point, 0); if (newPos == null) return; if (newPos.Value.col != -1) - point = newPos.Value.col; + _point = newPos.Value.col; Adjust (); } @@ -734,7 +737,7 @@ namespace Terminal.Gui { if (ReadOnly) return; - historyText.Redo (); + _historyText.Redo (); //if (string.IsNullOrEmpty (Clipboard.Contents)) // return true; @@ -757,7 +760,7 @@ namespace Terminal.Gui { if (ReadOnly) return; - historyText.Undo (); + _historyText.Undo (); } void KillToStart () @@ -766,11 +769,11 @@ namespace Terminal.Gui { return; ClearAllSelection (); - if (point == 0) + if (_point == 0) return; - SetClipboard (text.GetRange (0, point)); - SetText (text.GetRange (point, text.Count - point)); - point = 0; + SetClipboard (_text.GetRange (0, _point)); + SetText (_text.GetRange (_point, _text.Count - _point)); + _point = 0; Adjust (); } @@ -780,19 +783,19 @@ namespace Terminal.Gui { return; ClearAllSelection (); - if (point >= text.Count) + if (_point >= _text.Count) return; - SetClipboard (text.GetRange (point, text.Count - point)); - SetText (text.GetRange (0, point)); + SetClipboard (_text.GetRange (_point, _text.Count - _point)); + SetText (_text.GetRange (0, _point)); Adjust (); } void MoveRight () { ClearAllSelection (); - if (point == text.Count) + if (_point == _text.Count) return; - point++; + _point++; Adjust (); } @@ -802,40 +805,40 @@ namespace Terminal.Gui { public void MoveEnd () { ClearAllSelection (); - point = text.Count; + _point = _text.Count; Adjust (); } void MoveLeft () { ClearAllSelection (); - if (point > 0) { - point--; + if (_point > 0) { + _point--; Adjust (); } } void MoveWordRightExtend () { - if (point < text.Count) { - int x = start > -1 && start > point ? start : point; + if (_point < _text.Count) { + int x = _start > -1 && _start > _point ? _start : _point; var newPos = GetModel ().WordForward (x, 0); if (newPos == null) return; if (newPos.Value.col != -1) - point = newPos.Value.col; + _point = newPos.Value.col; PrepareSelection (x, newPos.Value.col - x); } } void MoveWordLeftExtend () { - if (point > 0) { - int x = Math.Min (start > -1 && start > point ? start : point, text.Count); + if (_point > 0) { + int x = Math.Min (_start > -1 && _start > _point ? _start : _point, _text.Count); if (x > 0) { var newPos = GetModel ().WordBackward (x, 0); if (newPos == null) return; if (newPos.Value.col != -1) - point = newPos.Value.col; + _point = newPos.Value.col; PrepareSelection (x, newPos.Value.col - x); } } @@ -843,40 +846,40 @@ namespace Terminal.Gui { void MoveRightExtend () { - if (point < text.Count) { - PrepareSelection (point++, 1); + if (_point < _text.Count) { + PrepareSelection (_point++, 1); } } void MoveLeftExtend () { - if (point > 0) { - PrepareSelection (point--, -1); + if (_point > 0) { + PrepareSelection (_point--, -1); } } void MoveHome () { ClearAllSelection (); - point = 0; + _point = 0; Adjust (); } void MoveEndExtend () { - if (point <= text.Count) { - int x = point; - point = text.Count; - PrepareSelection (x, point - x); + if (_point <= _text.Count) { + int x = _point; + _point = _text.Count; + PrepareSelection (x, _point - x); } } void MoveHomeExtend () { - if (point > 0) { - int x = point; - point = 0; - PrepareSelection (x, point - x); + if (_point > 0) { + int x = _point; + _point = 0; + PrepareSelection (x, _point - x); } } @@ -888,20 +891,20 @@ namespace Terminal.Gui { if (ReadOnly) return; - historyText.Add (new List> () { text }, new Point (point, 0)); + _historyText.Add (new List> () { _text }, new Point (_point, 0)); - if (length == 0) { - if (point == 0) + if (_length == 0) { + if (_point == 0) return; if (!useOldCursorPos) { - oldCursorPos = point; + _oldCursorPos = _point; } - point--; - if (oldCursorPos < text.Count) { - SetText (text.GetRange (0, oldCursorPos - 1).Concat (text.GetRange (oldCursorPos, text.Count - oldCursorPos))); + _point--; + if (_oldCursorPos < _text.Count) { + SetText (_text.GetRange (0, _oldCursorPos - 1).Concat (_text.GetRange (_oldCursorPos, _text.Count - _oldCursorPos))); } else { - SetText (text.GetRange (0, oldCursorPos - 1)); + SetText (_text.GetRange (0, _oldCursorPos - 1)); } Adjust (); } else { @@ -919,13 +922,13 @@ namespace Terminal.Gui { if (ReadOnly) return; - historyText.Add (new List> () { text }, new Point (point, 0)); + _historyText.Add (new List> () { _text }, new Point (_point, 0)); - if (length == 0) { - if (text.Count == 0 || text.Count == point) + if (_length == 0) { + if (_text.Count == 0 || _text.Count == _point) return; - SetText (text.GetRange (0, point).Concat (text.GetRange (point + 1, text.Count - (point + 1)))); + SetText (_text.GetRange (0, _point).Concat (_text.GetRange (_point + 1, _text.Count - (_point + 1)))); Adjust (); } else { var newText = DeleteSelectedText (); @@ -936,9 +939,9 @@ namespace Terminal.Gui { void ShowContextMenu () { - if (currentCulture != Thread.CurrentThread.CurrentUICulture) { + if (_currentCulture != Thread.CurrentThread.CurrentUICulture) { - currentCulture = Thread.CurrentThread.CurrentUICulture; + _currentCulture = Thread.CurrentThread.CurrentUICulture; ContextMenu.MenuItems = BuildContextMenuBarItem (); } @@ -950,11 +953,11 @@ namespace Terminal.Gui { /// public void SelectAll () { - if (text.Count == 0) { + if (_text.Count == 0) { return; } - selectedStart = 0; + _selectedStart = 0; MoveEndExtend (); SetNeedsDisplay (); } @@ -964,11 +967,11 @@ namespace Terminal.Gui { /// public void DeleteAll () { - if (text.Count == 0) { + if (_text.Count == 0) { return; } - selectedStart = 0; + _selectedStart = 0; MoveEndExtend (); DeleteCharLeft (); SetNeedsDisplay (); @@ -978,35 +981,35 @@ namespace Terminal.Gui { /// Start position of the selected text. /// public int SelectedStart { - get => selectedStart; + get => _selectedStart; set { if (value < -1) { - selectedStart = -1; - } else if (value > text.Count) { - selectedStart = text.Count; + _selectedStart = -1; + } else if (value > _text.Count) { + _selectedStart = _text.Count; } else { - selectedStart = value; + _selectedStart = value; } - PrepareSelection (selectedStart, point - selectedStart); + PrepareSelection (_selectedStart, _point - _selectedStart); } } /// /// Length of the selected text. /// - public int SelectedLength { get => length; } + public int SelectedLength { get => _length; } /// /// The selected text. /// public string SelectedText { - get => Secret ? null : selectedText; - private set => selectedText = value; + get => Secret ? null : _selectedText; + private set => _selectedText = value; } - int start, length; - bool isButtonPressed; - bool isButtonReleased = true; + int _start, _length; + bool _isButtonPressed; + bool _isButtonReleased = true; /// public override bool MouseEvent (MouseEvent ev) @@ -1033,28 +1036,28 @@ namespace Terminal.Gui { if (ev.Flags == MouseFlags.Button1Pressed) { EnsureHasFocus (); PositionCursor (ev); - if (isButtonReleased) { + if (_isButtonReleased) { ClearAllSelection (); } - isButtonReleased = true; - isButtonPressed = true; - } else if (ev.Flags == (MouseFlags.Button1Pressed | MouseFlags.ReportMousePosition) && isButtonPressed) { + _isButtonReleased = true; + _isButtonPressed = true; + } else if (ev.Flags == (MouseFlags.Button1Pressed | MouseFlags.ReportMousePosition) && _isButtonPressed) { int x = PositionCursor (ev); - isButtonReleased = false; + _isButtonReleased = false; PrepareSelection (x); if (Application.MouseGrabView == null) { Application.GrabMouse (this); } } else if (ev.Flags == MouseFlags.Button1Released) { - isButtonReleased = true; - isButtonPressed = false; + _isButtonReleased = true; + _isButtonPressed = false; Application.UngrabMouse (); } else if (ev.Flags == MouseFlags.Button1DoubleClicked) { EnsureHasFocus (); int x = PositionCursor (ev); int sbw = x; - if (x == text.Count || (x > 0 && (char)text [x - 1].Value != ' ') - || (x > 0 && (char)text [x].Value == ' ')) { + if (x == _text.Count || (x > 0 && (char)_text [x - 1].Value != ' ') + || (x > 0 && (char)_text [x].Value == ' ')) { var newPosBw = GetModel ().WordBackward (x, 0); if (newPosBw == null) return true; @@ -1068,14 +1071,14 @@ namespace Terminal.Gui { if (newPosFw == null) return true; ClearAllSelection (); if (newPosFw.Value.col != -1 && sbw != -1) { - point = newPosFw.Value.col; + _point = newPosFw.Value.col; } PrepareSelection (sbw, newPosFw.Value.col - sbw); } else if (ev.Flags == MouseFlags.Button1TripleClicked) { EnsureHasFocus (); PositionCursor (0); ClearAllSelection (); - PrepareSelection (0, text.Count); + PrepareSelection (0, _text.Count); } else if (ev.Flags == ContextMenu.MouseFlags) { ShowContextMenu (); } @@ -1095,8 +1098,8 @@ namespace Terminal.Gui { { // We could also set the cursor position. int x; - var pX = TextModel.GetColFromX (text, first, ev.X); - if (text.Count == 0) { + var pX = TextModel.GetColFromX (_text, _first, ev.X); + if (_text.Count == 0) { x = pX - ev.OfX; } else { x = pX; @@ -1108,36 +1111,36 @@ namespace Terminal.Gui { { int pX = x; if (getX) { - pX = TextModel.GetColFromX (text, first, x); + pX = TextModel.GetColFromX (_text, _first, x); } - if (first + pX > text.Count) { - point = text.Count; - } else if (first + pX < first) { - point = 0; + if (_first + pX > _text.Count) { + _point = _text.Count; + } else if (_first + pX < _first) { + _point = 0; } else { - point = first + pX; + _point = _first + pX; } - return point; + return _point; } void PrepareSelection (int x, int direction = 0) { - x = x + first < -1 ? 0 : x; - selectedStart = selectedStart == -1 && text.Count > 0 && x >= 0 && x <= text.Count ? x : selectedStart; - if (selectedStart > -1) { - length = Math.Abs (x + direction <= text.Count ? x + direction - selectedStart : text.Count - selectedStart); + x = x + _first < -1 ? 0 : x; + _selectedStart = _selectedStart == -1 && _text.Count > 0 && x >= 0 && x <= _text.Count ? x : _selectedStart; + if (_selectedStart > -1) { + _length = Math.Abs (x + direction <= _text.Count ? x + direction - _selectedStart : _text.Count - _selectedStart); SetSelectedStartSelectedLength (); - if (start > -1 && length > 0) { - selectedText = length > 0 ? StringExtensions.ToString (text.GetRange ( - start < 0 ? 0 : start, length > text.Count ? text.Count : length)) : ""; - if (first > start) { - first = start; + if (_start > -1 && _length > 0) { + _selectedText = _length > 0 ? StringExtensions.ToString (_text.GetRange ( + _start < 0 ? 0 : _start, _length > _text.Count ? _text.Count : _length)) : ""; + if (_first > _start) { + _first = _start; } - } else if (start > -1 && length == 0) { - selectedText = null; + } else if (_start > -1 && _length == 0) { + _selectedText = null; } - } else if (length > 0 || selectedText != null) { + } else if (_length > 0 || _selectedText != null) { ClearAllSelection (); } Adjust (); @@ -1148,23 +1151,23 @@ namespace Terminal.Gui { /// public void ClearAllSelection () { - if (selectedStart == -1 && length == 0 && selectedText == "") + if (_selectedStart == -1 && _length == 0 && _selectedText == "") return; - selectedStart = -1; - length = 0; - selectedText = null; - start = 0; - length = 0; + _selectedStart = -1; + _length = 0; + _selectedText = null; + _start = 0; + _length = 0; SetNeedsDisplay (); } void SetSelectedStartSelectedLength () { - if (SelectedStart > -1 && point < SelectedStart) { - start = point; + if (SelectedStart > -1 && _point < SelectedStart) { + _start = _point; } else { - start = SelectedStart; + _start = SelectedStart; } } @@ -1173,7 +1176,7 @@ namespace Terminal.Gui { /// public virtual void Copy () { - if (Secret || length == 0) + if (Secret || _length == 0) return; Clipboard.Contents = SelectedText; @@ -1184,7 +1187,7 @@ namespace Terminal.Gui { /// public virtual void Cut () { - if (ReadOnly || Secret || length == 0) + if (ReadOnly || Secret || _length == 0) return; Clipboard.Contents = SelectedText; @@ -1197,14 +1200,14 @@ namespace Terminal.Gui { { string actualText = Text; SetSelectedStartSelectedLength (); - int selStart = SelectedStart > -1 ? start : point; - (var size, var _) = TextModel.DisplaySize (text, 0, selStart, false); - (var size2, var _) = TextModel.DisplaySize (text, selStart, selStart + length, false); - (var size3, var _) = TextModel.DisplaySize (text, selStart + length, actualText.GetRuneCount (), false); + int selStart = SelectedStart > -1 ? _start : _point; + (var size, var _) = TextModel.DisplaySize (_text, 0, selStart, false); + (var size2, var _) = TextModel.DisplaySize (_text, selStart, selStart + _length, false); + (var size3, var _) = TextModel.DisplaySize (_text, selStart + _length, actualText.GetRuneCount (), false); var newText = actualText [..size] + actualText.Substring (size + size2, size3); ClearAllSelection (); - point = selStart >= newText.GetRuneCount () ? newText.GetRuneCount () : selStart; + _point = selStart >= newText.GetRuneCount () ? newText.GetRuneCount () : selStart; return newText.ToRuneList (); } @@ -1218,16 +1221,16 @@ namespace Terminal.Gui { } SetSelectedStartSelectedLength (); - int selStart = start == -1 ? CursorPosition : start; + int selStart = _start == -1 ? CursorPosition : _start; string actualText = Text; - (int size, int _) = TextModel.DisplaySize (text, 0, selStart, false); - (var size2, var _) = TextModel.DisplaySize (text, selStart, selStart + length, false); - (var size3, var _) = TextModel.DisplaySize (text, selStart + length, actualText.GetRuneCount (), false); + (int size, int _) = TextModel.DisplaySize (_text, 0, selStart, false); + (var size2, var _) = TextModel.DisplaySize (_text, selStart, selStart + _length, false); + (var size3, var _) = TextModel.DisplaySize (_text, selStart + _length, actualText.GetRuneCount (), false); string cbTxt = Clipboard.Contents.Split ("\n") [0] ?? ""; Text = actualText [..size] + cbTxt + actualText.Substring (size + size2, size3); - point = selStart + cbTxt.GetRuneCount (); + _point = selStart + cbTxt.GetRuneCount (); ClearAllSelection (); SetNeedsDisplay (); Adjust (); @@ -1245,19 +1248,19 @@ namespace Terminal.Gui { return ev; } - CursorVisibility desiredCursorVisibility = CursorVisibility.Default; + CursorVisibility _desiredCursorVisibility = CursorVisibility.Default; /// /// Get / Set the wished cursor when the field is focused /// public CursorVisibility DesiredCursorVisibility { - get => desiredCursorVisibility; + get => _desiredCursorVisibility; set { - if (desiredCursorVisibility != value && HasFocus) { + if ((_desiredCursorVisibility != value || _visibility != value) && HasFocus) { Application.Driver.SetCursorVisibility (value); } - desiredCursorVisibility = value; + _desiredCursorVisibility = _visibility = value; } } @@ -1266,7 +1269,7 @@ namespace Terminal.Gui { /// exactly as if the user had just typed it /// /// Text to add - /// If uses the . + /// If uses the . public void InsertText (string toAdd, bool useOldCursorPos = true) { foreach (var ch in toAdd) { @@ -1289,7 +1292,7 @@ namespace Terminal.Gui { /// public void ClearHistoryChanges () { - historyText.Clear (Text); + _historyText.Clear (Text); } ///