SynEdit, highlight current word: More options

git-svn-id: trunk@18077 -
This commit is contained in:
martin 2009-01-03 15:04:47 +00:00
parent 96f69ddc65
commit 18520f8a49
7 changed files with 94 additions and 38 deletions

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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

View File

@ -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
]);

View File

@ -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;

View File

@ -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';