From 142dccb1bfb5165d1945deee5dc57eaa969dc465 Mon Sep 17 00:00:00 2001 From: Patryk Mikos Date: Tue, 21 Jan 2014 00:19:07 +0100 Subject: [PATCH] Overstrike mode - with options --- data/resources/StringResources.resx | 3 +++ .../Src/Options/GeneralEditorOptions.xaml | 3 +++ .../Editing/TextArea.cs | 20 ++++++++++++++++++- .../TextEditorOptions.cs | 16 +++++++++++++++ 4 files changed, 41 insertions(+), 1 deletion(-) diff --git a/data/resources/StringResources.resx b/data/resources/StringResources.resx index 857df5d569..712347217b 100644 --- a/data/resources/StringResources.resx +++ b/data/resources/StringResources.resx @@ -2400,6 +2400,9 @@ system. I don't think that it needs translation. Hide cursor while typing + + Use overstrike mode + Show &Quick ClassBrowser Panel diff --git a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/Options/GeneralEditorOptions.xaml b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/Options/GeneralEditorOptions.xaml index 576ec15bef..666efcd3be 100644 --- a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/Options/GeneralEditorOptions.xaml +++ b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/Options/GeneralEditorOptions.xaml @@ -27,6 +27,9 @@ + diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/TextArea.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/TextArea.cs index f1be1f0bae..3557630d5b 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/TextArea.cs +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/TextArea.cs @@ -866,8 +866,11 @@ namespace ICSharpCode.AvalonEdit.Editing if (!e.Handled) { if (e.Text == "\n" || e.Text == "\r" || e.Text == "\r\n") ReplaceSelectionWithNewLine(); - else + else { + if (overstrikeMode && Selection.IsEmpty && Document.GetLineByNumber(Caret.Line).EndOffset > Caret.Offset) + Selection = Selection.Create(this, Caret.Offset, Caret.Offset+e.Text.Length); ReplaceSelectionWithText(e.Text); + } OnTextEntered(e); caret.BringCaretToView(); } @@ -952,6 +955,15 @@ namespace ICSharpCode.AvalonEdit.Editing protected override void OnPreviewKeyDown(KeyEventArgs e) { base.OnPreviewKeyDown(e); + + if (!this.Options.UseOverstrikeMode) { + this.overstrikeMode = false; + } else if (!e.Handled && e.Key == Key.Insert) { + this.overstrikeMode = !this.overstrikeMode; + e.Handled = true; + return; + } + HideMouseCursor(); foreach (TextAreaStackedInputHandler h in stackedInputHandlers) { if (e.Handled) @@ -1017,6 +1029,12 @@ namespace ICSharpCode.AvalonEdit.Editing #endregion + #region Overstrike mode + + bool overstrikeMode = false; + + #endregion + /// protected override HitTestResult HitTestCore(PointHitTestParameters hitTestParameters) { diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/TextEditorOptions.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/TextEditorOptions.cs index 152b02992b..d9fedd28ef 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/TextEditorOptions.cs +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/TextEditorOptions.cs @@ -462,5 +462,21 @@ namespace ICSharpCode.AvalonEdit } } } + + bool useOverstrikeMode = false; + + [DefaultValue(false)] + /// + /// Gets/Sets if overstrike mode is enabled to use + /// + public bool UseOverstrikeMode { + get { return useOverstrikeMode; } + set { + if (useOverstrikeMode != value) { + useOverstrikeMode = value; + OnPropertyChanged("UseOverstrikeMode"); + } + } + } } }