From 8651c30a2f22c19a011ac2f8951ddf9791b36e47 Mon Sep 17 00:00:00 2001 From: martin Date: Mon, 9 Mar 2015 13:07:39 +0000 Subject: [PATCH] SynEdit/IDE: More multi caret git-svn-id: trunk@48176 - --- ide/editoroptions.pp | 13 +++++++++++- ide/frames/editor_general_options.lfm | 30 +++++++++++++++++++++++---- ide/frames/editor_general_options.pas | 17 ++++++++++++++- ide/lazarusidestrconsts.pas | 2 ++ 4 files changed, 56 insertions(+), 6 deletions(-) diff --git a/ide/editoroptions.pp b/ide/editoroptions.pp index d9d051280f..c92f931544 100644 --- a/ide/editoroptions.pp +++ b/ide/editoroptions.pp @@ -1296,6 +1296,8 @@ type FBlockTabIndent: Integer; FCompletionLongLineHintInMSec: Integer; FCompletionLongLineHintType: TSynCompletionLongHintType; + FMultiCaretDefaultColumnSelectMode: TSynPluginMultiCaretDefaultMode; + FMultiCaretDefaultMode: TSynPluginMultiCaretDefaultMode; FPasExtendedKeywordsMode: Boolean; FHideSingleTabInWindow: Boolean; FPasStringKeywordMode: TSynPasStringMode; @@ -1605,6 +1607,10 @@ type property UseTabHistory: Boolean read fUseTabHistory write fUseTabHistory; property MultiCaretOnColumnSelect: Boolean read FMultiCaretOnColumnSelect write FMultiCaretOnColumnSelect default True; + property MultiCaretDefaultMode: TSynPluginMultiCaretDefaultMode + read FMultiCaretDefaultMode write FMultiCaretDefaultMode default mcmMoveAllCarets; + property MultiCaretDefaultColumnSelectMode: TSynPluginMultiCaretDefaultMode + read FMultiCaretDefaultColumnSelectMode write FMultiCaretDefaultColumnSelectMode default mcmCancelOnCaretMove; // Highlighter Pas property PasExtendedKeywordsMode: Boolean @@ -4461,6 +4467,8 @@ begin fSynEditOptions := SynEditDefaultOptions; fSynEditOptions2 := SynEditDefaultOptions2; FMultiCaretOnColumnSelect := True; + FMultiCaretDefaultMode := mcmMoveAllCarets; + FMultiCaretDefaultColumnSelectMode := mcmCancelOnCaretMove; // Display options fEditorFont := SynDefaultFontName; @@ -5614,8 +5622,11 @@ begin end; {$IFnDEF WithoutSynMultiCaret} - if ASynEdit is TIDESynEditor then + if ASynEdit is TIDESynEditor then begin TIDESynEditor(ASynEdit).MultiCaret.EnableWithColumnSelection := MultiCaretOnColumnSelect; + TIDESynEditor(ASynEdit).MultiCaret.DefaultMode := FMultiCaretDefaultMode; + TIDESynEditor(ASynEdit).MultiCaret.DefaultColumnSelectMode := FMultiCaretDefaultColumnSelectMode; + end; {$ENDIF} // Display options diff --git a/ide/frames/editor_general_options.lfm b/ide/frames/editor_general_options.lfm index be034ce91d..9ef94dd082 100644 --- a/ide/frames/editor_general_options.lfm +++ b/ide/frames/editor_general_options.lfm @@ -200,7 +200,7 @@ object EditorGeneralOptionsFrame: TEditorGeneralOptionsFrame AnchorSideTop.Side = asrBottom Left = 6 Height = 19 - Top = 273 + Top = 292 Width = 152 BorderSpacing.Left = 6 BorderSpacing.Top = 6 @@ -214,7 +214,7 @@ object EditorGeneralOptionsFrame: TEditorGeneralOptionsFrame AnchorSideTop.Side = asrBottom Left = 218 Height = 19 - Top = 273 + Top = 292 Width = 152 BorderSpacing.Top = 6 Caption = 'OverwriteBlockCheckBox' @@ -289,13 +289,13 @@ object EditorGeneralOptionsFrame: TEditorGeneralOptionsFrame end object BlockGroupDivider: TDividerBevel AnchorSideLeft.Control = Owner - AnchorSideTop.Control = MultiCaretOnColumnSelection + AnchorSideTop.Control = chkMultiCaretMode AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 0 Height = 15 - Top = 252 + Top = 271 Width = 434 Caption = 'BlockGroupDivider' Anchors = [akTop, akLeft, akRight] @@ -326,4 +326,26 @@ object EditorGeneralOptionsFrame: TEditorGeneralOptionsFrame Caption = 'MultiCaretOnColumnSelection' TabOrder = 17 end + object chkMultiCaretColumnMode: TCheckBox + AnchorSideLeft.Control = EndKeyJumpsToNearestStartCheckBox + AnchorSideTop.Control = MultiCaretOnColumnSelection + Left = 218 + Height = 19 + Top = 227 + Width = 169 + Caption = 'chkMultiCaretColumnMode' + TabOrder = 18 + end + object chkMultiCaretMode: TCheckBox + AnchorSideLeft.Control = Owner + AnchorSideTop.Control = MultiCaretOnColumnSelection + AnchorSideTop.Side = asrBottom + Left = 6 + Height = 19 + Top = 246 + Width = 126 + BorderSpacing.Left = 6 + Caption = 'chkMultiCaretMode' + TabOrder = 19 + end end diff --git a/ide/frames/editor_general_options.pas b/ide/frames/editor_general_options.pas index 20fd408ec7..045675ad7a 100644 --- a/ide/frames/editor_general_options.pas +++ b/ide/frames/editor_general_options.pas @@ -27,13 +27,15 @@ interface uses Classes, SysUtils, LCLProc, LCLType, StdCtrls, Controls, ExtCtrls, Graphics, EditorOptions, LazarusIDEStrConsts, IDEProcs, SourceSynEditor, IDEOptionsIntf, - IDEUtils, SynEdit, SynBeautifier, SynHighlighterPas, DividerBevel; + IDEUtils, SynEdit, SynBeautifier, SynHighlighterPas, SynPluginMultiCaret, DividerBevel; type TPreviewEditor = TSynEdit; { TEditorGeneralOptionsFrame } TEditorGeneralOptionsFrame = class(TAbstractIDEOptionsEditor) + chkMultiCaretColumnMode: TCheckBox; + chkMultiCaretMode: TCheckBox; MultiCaretOnColumnSelection: TCheckBox; CursorSkipsTabCheckBox: TCheckBox; CaretGroupDivider: TDividerBevel; @@ -140,6 +142,8 @@ begin HomeKeyJumpsToNearestStartCheckBox.Caption := dlgHomeKeyJumpsToNearestStart; EndKeyJumpsToNearestStartCheckBox.Caption := dlgEndKeyJumpsToNearestStart; MultiCaretOnColumnSelection.Caption := dlgMultiCaretOnColumnSelection; + chkMultiCaretColumnMode.Caption := dlgMultiCaretColumnMode; + chkMultiCaretMode.Caption := dlgMultiCaretMode; // Block BlockGroupDivider.Caption := dlgBlockGroupOptions; @@ -174,6 +178,8 @@ begin HomeKeyJumpsToNearestStartCheckBox.Checked := eoEnhanceHomeKey in SynEditOptions; EndKeyJumpsToNearestStartCheckBox.Checked := eoEnhanceEndKey in SynEditOptions2; MultiCaretOnColumnSelection.Checked := MultiCaretOnColumnSelect; + chkMultiCaretColumnMode.Checked := MultiCaretDefaultColumnSelectMode = mcmMoveAllCarets; + chkMultiCaretMode.Checked := MultiCaretDefaultMode = mcmMoveAllCarets; // block PersistentBlockCheckBox.Checked := eoPersistentBlock in SynEditOptions2; @@ -234,6 +240,15 @@ begin UpdateOptionFromBool(HomeKeyJumpsToNearestStartCheckBox.Checked, eoEnhanceHomeKey); UpdateOptionFromBool(EndKeyJumpsToNearestStartCheckBox.Checked, eoEnhanceEndKey); MultiCaretOnColumnSelect := MultiCaretOnColumnSelection.Checked; + if chkMultiCaretColumnMode.Checked then + MultiCaretDefaultColumnSelectMode := mcmMoveAllCarets + else + MultiCaretDefaultColumnSelectMode := mcmCancelOnCaretMove; + if chkMultiCaretMode.Checked then + MultiCaretDefaultMode := mcmMoveAllCarets + else + MultiCaretDefaultMode := mcmCancelOnCaretMove; + // block UpdateOptionFromBool(PersistentBlockCheckBox.Checked, eoPersistentBlock); diff --git a/ide/lazarusidestrconsts.pas b/ide/lazarusidestrconsts.pas index 2953d10cc4..d6d9320444 100644 --- a/ide/lazarusidestrconsts.pas +++ b/ide/lazarusidestrconsts.pas @@ -1693,6 +1693,8 @@ resourcestring dlgHomeKeyJumpsToNearestStart = 'Home key jumps to nearest start'; dlgEndKeyJumpsToNearestStart = 'End key jumps to nearest end'; dlgMultiCaretOnColumnSelection = 'Enable multi caret for column selection'; + dlgMultiCaretColumnMode = 'Multi-caret (column-select) move with cursor'; + dlgMultiCaretMode = 'Multi-caret move with cursor'; dlgColorLink = '(Edit Color)'; dlgKeyLink = '(Edit Key)'; dlgBracketHighlight = 'Bracket highlight';