diff --git a/components/synedit/synedit.pp b/components/synedit/synedit.pp index ab5ec8d444..21f4b56fa6 100644 --- a/components/synedit/synedit.pp +++ b/components/synedit/synedit.pp @@ -471,7 +471,6 @@ type function GetCaretX : Integer; function GetCaretY : Integer; function GetHighlightAllColor : TSynSelectedColor; - function GetHighlightCaretColor: TSynSelectedColor; function GetIncrementColor : TSynSelectedColor; function GetLineHighlightColor: TSynSelectedColor; function GetLineNumberColor: TSynSelectedColor; @@ -944,7 +943,6 @@ type read GetSelectedColor write SetSelectedColor; // Setter for compatibility property IncrementColor: TSynSelectedColor read GetIncrementColor; property HighlightAllColor: TSynSelectedColor read GetHighlightAllColor; - property HighlightCaretColor: TSynSelectedColor read GetHighlightCaretColor; property BracketMatchColor: TSynSelectedColor read GetBracketMatchColor; property MouseLinkColor: TSynSelectedColor read GetMouseLinkColor; property LineNumberColor: TSynSelectedColor read GetLineNumberColor; @@ -1093,7 +1091,6 @@ type {$IFDEF SYN_LAZARUS} property IncrementColor; property HighlightAllColor; - property HighlightCaretColor; property BracketHighlightStyle; property BracketMatchColor; property ModifiedLineColor; @@ -1740,11 +1737,6 @@ begin result := fMarkupHighAll.MarkupInfo; end; -function TCustomSynEdit.GetHighlightCaretColor: TSynSelectedColor; -begin - result := fMarkupHighCaret.MarkupInfo; -end; - function TCustomSynEdit.GetIncrementColor : TSynSelectedColor; begin result := fMarkupSelection.MarkupInfoIncr; diff --git a/components/synedit/syneditmarkuphighall.pp b/components/synedit/syneditmarkuphighall.pp index 64079c933b..ddd6411315 100644 --- a/components/synedit/syneditmarkuphighall.pp +++ b/components/synedit/syneditmarkuphighall.pp @@ -132,6 +132,8 @@ type private FTimer: TTimer; FWaitTime: Integer; + FFullWord: Boolean; + procedure SetFullWord(const AValue: Boolean); procedure SetWaitTime(const AValue: Integer); protected procedure DoCaretChanged(OldCaret : TPoint); override; @@ -140,10 +142,12 @@ type procedure RestartTimer; procedure ScrollTimerHandler(Sender: TObject); function GetCurrentText: String; + function GetCurrentOption: TSynSearchOptions; public constructor Create(ASynEdit : TCustomControl); destructor Destroy; override; property WaitTime: Integer read FWaitTime write SetWaitTime; + property FullWord: Boolean read FFullWord write SetFullWord; end; implementation @@ -532,9 +536,17 @@ begin RestartTimer; end; +procedure TSynEditMarkupHighlightAllCaret.SetFullWord(const AValue: Boolean); +begin + if FFullWord = AValue then exit; + FFullWord := AValue; + SearchOptions := GetCurrentOption; +end; + procedure TSynEditMarkupHighlightAllCaret.DoCaretChanged(OldCaret: TPoint); begin - if SearchString = GetCurrentText then exit; + if (SearchString = GetCurrentText) and (SearchOptions = GetCurrentOption) then + exit; SearchString := ''; RestartTimer; end; @@ -560,6 +572,10 @@ end; procedure TSynEditMarkupHighlightAllCaret.ScrollTimerHandler(Sender: TObject); begin + if (SearchString = GetCurrentText) and (SearchOptions = GetCurrentOption) then + exit; + SearchString := ''; // prevent double update + SearchOptions := GetCurrentOption; SearchString := GetCurrentText; end; @@ -572,11 +588,20 @@ begin (TCustomSynEdit(SynEdit).PhysicalToLogicalPos(TCustomSynEdit(SynEdit).CaretXY)); end; +function TSynEditMarkupHighlightAllCaret.GetCurrentOption: TSynSearchOptions; +begin + If TCustomSynEdit(SynEdit).SelAvail or not(FFullWord) then + Result := [] + else + Result := [ssoWholeWord]; +end; + constructor TSynEditMarkupHighlightAllCaret.Create(ASynEdit: TCustomControl); begin inherited Create(ASynEdit); MarkupInfo.Clear; HideSingleMatch := True; + FFullWord := False; FWaitTime := 1500; FTimer := TTimer.Create(nil); FTimer.Enabled := False; diff --git a/ide/editoroptions.pp b/ide/editoroptions.pp index 9766c0ba42..eff9e54803 100644 --- a/ide/editoroptions.pp +++ b/ide/editoroptions.pp @@ -415,8 +415,6 @@ type TEditorOptions = class(TAbstractIDEOptions) private - FMarkupCurWordEnabled: Boolean; - FMarkupCurWordTime: Integer; xmlconfig: TXMLConfig; // general options @@ -458,6 +456,11 @@ type // Color options fHighlighterList: TEditOptLangList; + // Markup Current Word + FMarkupCurWordEnabled: Boolean; + FMarkupCurWordFull: Boolean; + FMarkupCurWordTime: Integer; + // Code tools options (MG: these will move to an unit of their own) fAutoIdentifierCompletion: Boolean; fAutoCodeParameters: Boolean; @@ -575,6 +578,8 @@ type // Markup Current Word property MarkupCurWordEnabled: Boolean read FMarkupCurWordEnabled write FMarkupCurWordEnabled default True; + property MarkupCurWordFull: Boolean + read FMarkupCurWordFull write FMarkupCurWordFull default False; property MarkupCurWordTime: Integer read FMarkupCurWordTime write FMarkupCurWordTime default 1500; @@ -1381,6 +1386,7 @@ begin fHighlighterList := TEditOptLangList.Create; FMarkupCurWordEnabled := True; + FMarkupCurWordFull := False; FMarkupCurWordTime := 1500; // Code Tools options @@ -1544,6 +1550,9 @@ begin FMarkupCurWordEnabled := XMLConfig.GetValue( 'EditorOptions/Display/MarkupCurrentWordEnabled', True); + FMarkupCurWordFull := + XMLConfig.GetValue( + 'EditorOptions/Display/MarkupCurrentWordFull', False); FMarkupCurWordTime := XMLConfig.GetValue( 'EditorOptions/Display/MarkupCurrentWordTime', 1500); @@ -1691,6 +1700,8 @@ begin XMLConfig.SetDeleteValue('EditorOptions/Display/MarkupCurrentWordEnabled', FMarkupCurWordEnabled, True); + XMLConfig.SetDeleteValue('EditorOptions/Display/MarkupCurrentWordFull', + FMarkupCurWordFull, True); XMLConfig.SetDeleteValue('EditorOptions/Display/MarkupCurrentWordTime', FMarkupCurWordTime, 1500); @@ -2187,17 +2198,24 @@ begin end; procedure TEditorOptions.SetMarkupColors(Syn: TSrcIDEHighlighter; aSynEd: TSynEdit); + procedure SetMarkupColorByClass(AddHilightAttr: TAdditionalHilightAttribute; + aClass: TSynEditMarkupClass); + begin + if assigned(ASynEd.MarkupByClass[aClass]) then + SetMarkupColor(aSynEd.Highlighter, AddHilightAttr, + ASynEd.MarkupByClass[aClass].MarkupInfo); + end; begin SetMarkupColor(aSynEd.Highlighter, ahaTextBlock, aSynEd.SelectedColor); SetMarkupColor(aSynEd.Highlighter, ahaIncrementalSearch, aSynEd.IncrementColor); SetMarkupColor(aSynEd.Highlighter, ahaHighlightAll, aSynEd.HighlightAllColor); SetMarkupColor(aSynEd.Highlighter, ahaBracketMatch, aSynEd.BracketMatchColor); - SetMarkupColor(aSynEd.Highlighter, ahaHighlightWord, aSynEd.HighlightCaretColor); SetMarkupColor(aSynEd.Highlighter, ahaMouseLink, aSynEd.MouseLinkColor); SetMarkupColor(aSynEd.Highlighter, ahaLineNumber, aSynEd.LineNumberColor); SetMarkupColor(aSynEd.Highlighter, ahaModifiedLine, aSynEd.ModifiedLineColor); SetMarkupColor(aSynEd.Highlighter, ahaCodeFoldingTree, aSynEd.CodeFoldingTreeColor); SetMarkupColor(aSynEd.Highlighter, ahaLineHighlight, aSynEd.LineHighlightColor); + SetMarkupColorByClass(ahaHighlightWord, TSynEditMarkupHighlightAllCaret); end; procedure TEditorOptions.SetMarkupColor(Syn : TSrcIDEHighlighter; @@ -2281,6 +2299,7 @@ begin MarkCaret := TSynEditMarkupHighlightAllCaret(ASynEdit.MarkupByClass[TSynEditMarkupHighlightAllCaret]); if assigned(MarkCaret) then begin MarkCaret.Enabled := FMarkupCurWordEnabled; + MarkCaret.FullWord := FMarkupCurWordFull; MarkCaret.WaitTime := FMarkupCurWordTime; end; @@ -2324,6 +2343,7 @@ begin MarkCaret := TSynEditMarkupHighlightAllCaret(ASynEdit.MarkupByClass[TSynEditMarkupHighlightAllCaret]); if assigned(MarkCaret) then begin FMarkupCurWordEnabled := MarkCaret.Enabled; + FMarkupCurWordFull := MarkCaret.FullWord; FMarkupCurWordTime := MarkCaret.WaitTime; end; end; diff --git a/ide/frames/options_editor_codetools.lfm b/ide/frames/options_editor_codetools.lfm index 003d980352..f760d13607 100644 --- a/ide/frames/options_editor_codetools.lfm +++ b/ide/frames/options_editor_codetools.lfm @@ -5,8 +5,8 @@ inherited EditorCodetoolsOptionsFrame: TEditorCodetoolsOptionsFrame ClientWidth = 496 TabOrder = 0 Visible = False - DesignLeft = 92 - DesignTop = 92 + DesignLeft = 161 + DesignTop = 161 object AutoDelayMaxLabel: TLabel[0] AnchorSideTop.Control = AutoDelayTrackBar AnchorSideTop.Side = asrBottom @@ -52,7 +52,7 @@ inherited EditorCodetoolsOptionsFrame: TEditorCodetoolsOptionsFrame AnchorSideTop.Side = asrBottom Left = 0 Height = 16 - Top = 278 + Top = 303 Width = 149 BorderSpacing.Top = 2 Caption = 'MarkupWordDelayMinLabel' @@ -65,7 +65,7 @@ inherited EditorCodetoolsOptionsFrame: TEditorCodetoolsOptionsFrame AnchorSideRight.Side = asrBottom Left = 346 Height = 16 - Top = 278 + Top = 303 Width = 150 Alignment = taRightJustify Anchors = [akTop, akRight] @@ -79,7 +79,7 @@ inherited EditorCodetoolsOptionsFrame: TEditorCodetoolsOptionsFrame AnchorSideTop.Side = asrBottom Left = 0 Height = 16 - Top = 300 + Top = 325 Width = 128 BorderSpacing.Top = 24 Caption = 'MarkupWordDelayLabel' @@ -177,13 +177,13 @@ inherited EditorCodetoolsOptionsFrame: TEditorCodetoolsOptionsFrame end object MarkupWordTimeTrackBar: TTrackBar[13] AnchorSideLeft.Control = Owner - AnchorSideTop.Control = MarkupWordEnabledCheckBox + AnchorSideTop.Control = MarkupWordFullCheckBox AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 0 Height = 40 - Top = 236 + Top = 261 Width = 496 Frequency = 250 Max = 4000 @@ -194,4 +194,16 @@ inherited EditorCodetoolsOptionsFrame: TEditorCodetoolsOptionsFrame Ctl3D = False TabOrder = 7 end + object MarkupWordFullCheckBox: TCheckBox[14] + AnchorSideLeft.Control = Owner + AnchorSideTop.Control = MarkupWordEnabledCheckBox + AnchorSideTop.Side = asrBottom + Left = 0 + Height = 19 + Top = 236 + Width = 161 + BorderSpacing.Top = 6 + Caption = 'MarkupWordFullCheckBox' + TabOrder = 8 + end end diff --git a/ide/frames/options_editor_codetools.lrs b/ide/frames/options_editor_codetools.lrs index 5684dacd79..ea1989fb06 100644 --- a/ide/frames/options_editor_codetools.lrs +++ b/ide/frames/options_editor_codetools.lrs @@ -1,16 +1,14 @@ -{ This is an automatically generated lazarus resource file } - LazarusResources.Add('TEditorCodetoolsOptionsFrame','FORMDATA',[ 'TPF0'#241#28'TEditorCodetoolsOptionsFrame'#27'EditorCodetoolsOptionsFrame'#6 +'Height'#3#184#1#5'Width'#3#240#1#12'ClientHeight'#3#184#1#11'ClientWidth'#3 - +#240#1#8'TabOrder'#2#0#7'Visible'#8#10'DesignLeft'#2'\'#9'DesignTop'#2'\'#0 - +#242#2#0#6'TLabel'#17'AutoDelayMaxLabel'#21'AnchorSideTop.Control'#7#17'Auto' - +'DelayTrackBar'#18'AnchorSideTop.Side'#7#9'asrBottom'#23'AnchorSideRight.Con' - +'trol'#7#5'Owner'#20'AnchorSideRight.Side'#7#9'asrBottom'#4'Left'#3#134#1#6 - +'Height'#2#16#3'Top'#3#167#0#5'Width'#2'j'#9'Alignment'#7#14'taRightJustify' - +#7'Anchors'#11#5'akTop'#7'akRight'#0#17'BorderSpacing.Top'#2#2#7'Caption'#6 - +#17'AutoDelayMaxLabel'#11'ParentColor'#8#0#0#242#2#1#6'TLabel'#17'AutoDelayM' - +'inLabel'#22'AnchorSideLeft.Control'#7#5'Owner'#21'AnchorSideTop.Control'#7 + +#240#1#8'TabOrder'#2#0#7'Visible'#8#10'DesignLeft'#3#161#0#9'DesignTop'#3#161 + +#0#0#242#2#0#6'TLabel'#17'AutoDelayMaxLabel'#21'AnchorSideTop.Control'#7#17 + +'AutoDelayTrackBar'#18'AnchorSideTop.Side'#7#9'asrBottom'#23'AnchorSideRight' + +'.Control'#7#5'Owner'#20'AnchorSideRight.Side'#7#9'asrBottom'#4'Left'#3#134#1 + +#6'Height'#2#16#3'Top'#3#167#0#5'Width'#2'j'#9'Alignment'#7#14'taRightJustif' + +'y'#7'Anchors'#11#5'akTop'#7'akRight'#0#17'BorderSpacing.Top'#2#2#7'Caption' + +#6#17'AutoDelayMaxLabel'#11'ParentColor'#8#0#0#242#2#1#6'TLabel'#17'AutoDela' + +'yMinLabel'#22'AnchorSideLeft.Control'#7#5'Owner'#21'AnchorSideTop.Control'#7 +#17'AutoDelayTrackBar'#18'AnchorSideTop.Side'#7#9'asrBottom'#4'Left'#2#0#6'H' +'eight'#2#16#3'Top'#3#167#0#5'Width'#2'i'#17'BorderSpacing.Top'#2#2#7'Captio' +'n'#6#17'AutoDelayMinLabel'#11'ParentColor'#8#0#0#242#2#2#6'TLabel'#14'AutoD' @@ -20,17 +18,17 @@ LazarusResources.Add('TEditorCodetoolsOptionsFrame','FORMDATA',[ +'on'#6#14'AutoDelayLabel'#11'ParentColor'#8#0#0#242#2#3#6'TLabel'#18'MarkupW' +'ordMinLabel'#22'AnchorSideLeft.Control'#7#5'Owner'#21'AnchorSideTop.Control' +#7#22'MarkupWordTimeTrackBar'#18'AnchorSideTop.Side'#7#9'asrBottom'#4'Left'#2 - +#0#6'Height'#2#16#3'Top'#3#22#1#5'Width'#3#149#0#17'BorderSpacing.Top'#2#2#7 + +#0#6'Height'#2#16#3'Top'#3'/'#1#5'Width'#3#149#0#17'BorderSpacing.Top'#2#2#7 +'Caption'#6#23'MarkupWordDelayMinLabel'#11'ParentColor'#8#0#0#242#2#4#6'TLab' +'el'#18'MarkupWordMaxLabel'#21'AnchorSideTop.Control'#7#22'MarkupWordTimeTra' +'ckBar'#18'AnchorSideTop.Side'#7#9'asrBottom'#23'AnchorSideRight.Control'#7#5 +'Owner'#20'AnchorSideRight.Side'#7#9'asrBottom'#4'Left'#3'Z'#1#6'Height'#2#16 - +#3'Top'#3#22#1#5'Width'#3#150#0#9'Alignment'#7#14'taRightJustify'#7'Anchors' + +#3'Top'#3'/'#1#5'Width'#3#150#0#9'Alignment'#7#14'taRightJustify'#7'Anchors' +#11#5'akTop'#7'akRight'#0#17'BorderSpacing.Top'#2#2#7'Caption'#6#23'MarkupWo' +'rdDelayMaxLabel'#11'ParentColor'#8#0#0#242#2#5#6'TLabel'#20'MarkupWordDelay' +'Label'#22'AnchorSideLeft.Control'#7#5'Owner'#21'AnchorSideTop.Control'#7#22 +'MarkupWordTimeTrackBar'#18'AnchorSideTop.Side'#7#9'asrBottom'#4'Left'#2#0#6 - +'Height'#2#16#3'Top'#3','#1#5'Width'#3#128#0#17'BorderSpacing.Top'#2#24#7'Ca' + +'Height'#2#16#3'Top'#3'E'#1#5'Width'#3#128#0#17'BorderSpacing.Top'#2#24#7'Ca' +'ption'#6#20'MarkupWordDelayLabel'#11'ParentColor'#8#0#0#242#2#6#9'TCheckBox' +' AutoIdentifierCompletionCheckBox'#22'AnchorSideLeft.Control'#7#5'Owner'#21 +'AnchorSideTop.Control'#7#5'Owner'#4'Left'#2#0#6'Height'#2#19#3'Top'#2#0#5'W' @@ -65,10 +63,14 @@ LazarusResources.Add('TEditorCodetoolsOptionsFrame','FORMDATA',[ +'Left'#2#0#6'Height'#2#19#3'Top'#3#211#0#5'Width'#3#184#0#17'BorderSpacing.T' +'op'#2#6#7'Caption'#6#25'MarkupWordEnabledCheckBox'#8'TabOrder'#2#6#0#0#242#2 +#13#9'TTrackBar'#22'MarkupWordTimeTrackBar'#22'AnchorSideLeft.Control'#7#5'O' - ,'wner'#21'AnchorSideTop.Control'#7#25'MarkupWordEnabledCheckBox'#18'AnchorSi' - +'deTop.Side'#7#9'asrBottom'#23'AnchorSideRight.Control'#7#5'Owner'#20'Anchor' - +'SideRight.Side'#7#9'asrBottom'#4'Left'#2#0#6'Height'#2'('#3'Top'#3#236#0#5 - +'Width'#3#240#1#9'Frequency'#3#250#0#3'Max'#3#160#15#3'Min'#3#244#1#8'Positi' - +'on'#3#244#1#7'Anchors'#11#5'akTop'#6'akLeft'#7'akRight'#0#17'BorderSpacing.' - +'Top'#2#6#5'Ctl3D'#8#8'TabOrder'#2#7#0#0#0 + ,'wner'#21'AnchorSideTop.Control'#7#22'MarkupWordFullCheckBox'#18'AnchorSideT' + +'op.Side'#7#9'asrBottom'#23'AnchorSideRight.Control'#7#5'Owner'#20'AnchorSid' + +'eRight.Side'#7#9'asrBottom'#4'Left'#2#0#6'Height'#2'('#3'Top'#3#5#1#5'Width' + +#3#240#1#9'Frequency'#3#250#0#3'Max'#3#160#15#3'Min'#3#244#1#8'Position'#3 + +#244#1#7'Anchors'#11#5'akTop'#6'akLeft'#7'akRight'#0#17'BorderSpacing.Top'#2 + +#6#5'Ctl3D'#8#8'TabOrder'#2#7#0#0#242#2#14#9'TCheckBox'#22'MarkupWordFullChe' + +'ckBox'#22'AnchorSideLeft.Control'#7#5'Owner'#21'AnchorSideTop.Control'#7#25 + +'MarkupWordEnabledCheckBox'#18'AnchorSideTop.Side'#7#9'asrBottom'#4'Left'#2#0 + +#6'Height'#2#19#3'Top'#3#236#0#5'Width'#3#161#0#17'BorderSpacing.Top'#2#6#7 + +'Caption'#6#22'MarkupWordFullCheckBox'#8'TabOrder'#2#8#0#0#0 ]); diff --git a/ide/frames/options_editor_codetools.pas b/ide/frames/options_editor_codetools.pas index 9cea679d4c..5846d0c556 100644 --- a/ide/frames/options_editor_codetools.pas +++ b/ide/frames/options_editor_codetools.pas @@ -40,6 +40,7 @@ type AutoIdentifierCompletionCheckBox: TCheckBox; AutoToolTipExprEvalCheckBox: TCheckBox; MarkupWordDelayLabel: TLabel; + MarkupWordFullCheckBox: TCheckBox; MarkupWordMaxLabel: TLabel; MarkupWordMinLabel: TLabel; MarkupWordEnabledCheckBox: TCheckBox; @@ -78,6 +79,7 @@ begin AutoDelayMaxLabel.Caption := '4.0 ' + dlgTimeSecondUnit; MarkupWordEnabledCheckBox.Caption := dlgMarkupWordEnabled; + MarkupWordFullCheckBox.Caption := dlgMarkupWordFull; MarkupWordDelayLabel.Caption := dlgEdDelay; MarkupWordMinLabel.Caption := '0.5 ' + DlgTimeSecondUnit;; MarkupWordMaxLabel.Caption := '4.0 ' + DlgTimeSecondUnit;; @@ -94,6 +96,7 @@ begin AutoDelayTrackBar.Position := AutoDelayInMSec; AutoRemoveEmptyMethodsOnSave.Checked := AutoRemoveEmptyMethods; MarkupWordEnabledCheckBox.Checked := MarkupCurWordEnabled; + MarkupWordFullCheckBox.Checked := MarkupCurWordFull; MarkupWordTimeTrackBar.Position := MarkupCurWordTime; end; end; @@ -109,6 +112,7 @@ begin AutoDelayInMSec := AutoDelayTrackBar.Position; AutoRemoveEmptyMethods := AutoRemoveEmptyMethodsOnSave.Checked; MarkupCurWordEnabled := MarkupWordEnabledCheckBox.Checked; + MarkupCurWordFull := MarkupWordFullCheckBox.Checked; MarkupCurWordTime := MarkupWordTimeTrackBar.Position; end; end; diff --git a/ide/lazarusidestrconsts.pas b/ide/lazarusidestrconsts.pas index 66d48df662..ac8eff86a6 100644 --- a/ide/lazarusidestrconsts.pas +++ b/ide/lazarusidestrconsts.pas @@ -1189,6 +1189,7 @@ resourcestring dlgTooltipEval = 'Tooltip expression evaluation'; dlgTooltipTools = 'Tooltip symbol Tools'; dlgMarkupWordEnabled = 'Highlight Current Word/Block'; + dlgMarkupWordFull = 'Highlight Current Word match word boundaries'; dlgAutoRemoveEmptyMethods = 'Auto remove empty methods'; dlgEdDelay = 'Delay'; dlgTimeSecondUnit = 'sec';