SynEdit, Markup-Current-Word Added: TrimSpaces, Keep Markup while typing, Toggle fixed word (alt m), No timer(just toggle)

git-svn-id: trunk@18247 -
This commit is contained in:
martin 2009-01-11 02:51:28 +00:00
parent ce19796997
commit a10dc20b6a
9 changed files with 297 additions and 95 deletions

View File

@ -1604,6 +1604,7 @@ begin
UpdateCaret;
if fStatusChanges <> [] then
DoOnStatusChange(fStatusChanges);
fMarkupHighCaret.CheckState; // Todo need a global lock, including the markup
end;
end;
@ -7312,6 +7313,8 @@ begin
EcUnFoldCurrent:
FFoldedLinesView.UnFoldAtTextIndex(CaretY-1);
{$ENDIF}
EcToggleMarkupWord:
FMarkupHighCaret.ToggleCurrentWord;
end;
finally
DecPaintLock;

View File

@ -177,6 +177,7 @@ const
EcFoldLevel0 = EcFoldLevel9 + 1;
EcFoldCurrent = 381;
EcUnFoldCurrent = 382;
EcToggleMarkupWord = 383;
ecDeleteLastChar = 501; // Delete last char (i.e. backspace key)
ecDeleteChar = 502; // Delete char at cursor (i.e. delete key)
@ -407,7 +408,7 @@ type
{$ENDIF}
const
EditorCommandStrs: array[0..111] of TIdentMapEntry = (
EditorCommandStrs: array[0..112] of TIdentMapEntry = (
(Value: ecNone; Name: 'ecNone'),
(Value: ecLeft; Name: 'ecLeft'),
(Value: ecRight; Name: 'ecRight'),
@ -519,7 +520,8 @@ const
(Value: EcFoldLevel9; Name: 'EcFoldLevel9'),
(Value: EcFoldLevel0; Name: 'EcFoldLevel0'),
(Value: EcFoldCurrent; Name: 'EcFoldCurrent'),
(Value: EcUnFoldCurrent; Name: 'EcUnFoldCurrent')
(Value: EcUnFoldCurrent; Name: 'EcUnFoldCurrent'),
(Value: EcToggleMarkupWord; Name: 'EcToggleMarkupWord')
);
procedure GetEditorCommandValues(Proc: TGetStrProc);
@ -958,6 +960,7 @@ begin
AddKey(ecFoldLevel0, ord('0'), [ssAlt,ssShift]);
AddKey(ecFoldCurrent, ord('-'), [ssAlt,ssShift]);
AddKey(ecUnFoldCurrent, ord('+'), [ssAlt,ssShift]);
AddKey(EcToggleMarkupWord, ord('M'), [ssAlt]);
AddKey(ecNormalSelect, ord('N'), [ssCtrl,ssShift]);
AddKey(ecColumnSelect, ord('C'), [ssCtrl,ssShift]);
AddKey(ecLineSelect, ord('L'), [ssCtrl,ssShift]);

View File

@ -27,7 +27,8 @@ interface
uses
Classes, SysUtils, ExtCtrls, SynEditMarkup, SynEditTypes, SynEditSearch,
SynEditMiscClasses, Controls, LCLProc, SynEditHighlighter, SynEditPointClasses;
SynEditMiscClasses, Controls, LCLProc, SynEditHighlighter, SynEditPointClasses,
SynEditMiscProcs;
type
@ -103,15 +104,17 @@ type
Procedure FindStartPoint;
Procedure FindInitialize(Backward: Boolean);
function GetMatchCount: Integer;
Procedure ValidateMatches;
procedure SetSearchOptions(const AValue : TSynSearchOptions);
procedure SetSearchString(const AValue : String);
protected
procedure SetSearchString(const AValue : String); virtual;
procedure DoTopLineChanged(OldTopLine : Integer); override;
procedure DoLinesInWindoChanged(OldLinesInWindow : Integer); override;
procedure DoMarkupChanged(AMarkup: TSynSelectedColor); override;
procedure DoTextChanged(StartLine, EndLine: Integer); override;
property HideSingleMatch: Boolean read FHideSingleMatch write FHideSingleMatch;
property MatchCount: Integer read GetMatchCount;
public
constructor Create(ASynEdit : TCustomControl);
destructor Destroy; override;
@ -131,19 +134,27 @@ type
TSynEditMarkupHighlightAllCaret = class(TSynEditMarkupHighlightAll)
private
FTimer: TTimer;
FTrim: Boolean;
FWaitTime: Integer;
FFullWord: Boolean;
FFullWordMaxLen: Integer;
FIgnoreKeywords: Boolean;
FSelection: TSynEditSelection;
FHighlighter: TSynCustomHighlighter;
FLowBound, FUpBound, FOldLowBound, FOldUpBound: TPoint;
FToggledWord: String;
FToggledOption: TSynSearchOptions;
FStateChanged: Boolean;
procedure SetFullWord(const AValue: Boolean);
procedure SetFullWordMaxLen(const AValue: Integer);
procedure SetHighlighter(const AValue: TSynCustomHighlighter);
procedure SetIgnoreKeywords(const AValue: Boolean);
procedure SetSelection(const AValue: TSynEditSelection);
procedure SetTrim(const AValue: Boolean);
procedure SetWaitTime(const AValue: Integer);
function LogicalCaret: TPoint;
protected
procedure SetSearchString(const AValue : String); override;
procedure SelectionChanged(Sender: TObject);
procedure DoCaretChanged(OldCaret : TPoint); override;
procedure DoTextChanged(StartLine, EndLine : Integer); override;
@ -155,7 +166,10 @@ type
public
constructor Create(ASynEdit : TCustomControl);
destructor Destroy; override;
procedure CheckState; // Todo need a global lock, including the markup
procedure ToggleCurrentWord;
property WaitTime: Integer read FWaitTime write SetWaitTime;
property Trim: Boolean read FTrim write SetTrim;
property FullWord: Boolean read FFullWord write SetFullWord;
property FullWordMaxLen: Integer read FFullWordMaxLen write SetFullWordMaxLen;
property IgnoreKeywords: Boolean read FIgnoreKeywords write SetIgnoreKeywords;
@ -361,6 +375,11 @@ begin
fSearch.Backwards := Backward;
end;
function TSynEditMarkupHighlightAll.GetMatchCount: Integer;
begin
Result := fMatches.Count;
end;
procedure TSynEditMarkupHighlightAll.FindStartPoint;
var
ptStart, ptEnd, ptFoundStart, ptFoundEnd: TPoint;
@ -405,13 +424,13 @@ begin
While (true) do begin
if not fSearch.FindNextOne(Lines, ptStart, ptEnd, ptFoundStart, ptFoundEnd)
then break;
if ptFoundStart.Y > LastLine
then break;
ptStart := ptFoundEnd;
{ TODO: skip if all folded }
fMatches.StartPoint[Pos] := LogicalToPhysicalPos(ptFoundStart);
fMatches.EndPoint[Pos]:= LogicalToPhysicalPos(ptFoundEnd);
if ptFoundStart.Y > LastLine
then break;
inc(Pos);
end;
@ -547,15 +566,24 @@ begin
if FWaitTime = AValue then exit;
FWaitTime := AValue;
FTimer.Interval := FWaitTime;
if FWaitTime = 0 then
SearchString := '';
RestartTimer;
end;
procedure TSynEditMarkupHighlightAllCaret.SelectionChanged(Sender: TObject);
function TSynEditMarkupHighlightAllCaret.LogicalCaret: TPoint;
begin
if (SearchString = GetCurrentText) and (SearchOptions = GetCurrentOption) then
exit;
SearchString := '';
RestartTimer;
Result := TCustomSynEdit(SynEdit).PhysicalToLogicalPos
(TCustomSynEdit(SynEdit).CaretXY);
end;
procedure TSynEditMarkupHighlightAllCaret.SetSearchString(const AValue: String);
begin
inherited SetSearchString(AValue);
if AValue = '' then
FLowBound.X := -1;
FOldLowBound := FLowBound;
FOldUpBound := FUpBound;
end;
procedure TSynEditMarkupHighlightAllCaret.SetFullWord(const AValue: Boolean);
@ -595,18 +623,55 @@ begin
FSelection.AddChangeHandler({$IFDEF FPC}@{$ENDIF}SelectionChanged);
end;
procedure TSynEditMarkupHighlightAllCaret.DoCaretChanged(OldCaret: TPoint);
procedure TSynEditMarkupHighlightAllCaret.SetTrim(const AValue: Boolean);
begin
if (SearchString = GetCurrentText) and (SearchOptions = GetCurrentOption) then
if FTrim = AValue then exit;
FTrim := AValue;
ScrollTimerHandler(self);
end;
procedure TSynEditMarkupHighlightAllCaret.CheckState;
var
t: String;
begin
if not FStateChanged then
exit;
FStateChanged := False;
t := GetCurrentText;
if (SearchString = t) and (SearchOptions = GetCurrentOption) then begin
SearchString := t; // Update old bounds
exit;
end;
if (SearchString <> '') and
( ((CompareCarets(FLowBound, FOldLowBound) = 0) and
(CompareCarets(LogicalCaret, FUpBound) >= 0) and (MatchCount > 1) )
OR ((CompareCarets(FUpBound, FOldUpBound) = 0) and
(CompareCarets(LogicalCaret, FLowBound) <= 0) and (MatchCount > 1) )
) then begin
ScrollTimerHandler(self);
exit;
end;
SearchString := '';
RestartTimer;
end;
procedure TSynEditMarkupHighlightAllCaret.SelectionChanged(Sender: TObject);
begin
FStateChanged := True; // Something changed, paint will be called
inherited;
end;
procedure TSynEditMarkupHighlightAllCaret.DoCaretChanged(OldCaret: TPoint);
begin
FStateChanged := True; // Something changed, paint will be called
inherited;
end;
procedure TSynEditMarkupHighlightAllCaret.DoTextChanged(StartLine, EndLine: Integer);
begin
SearchString := '';
RestartTimer;
FStateChanged := True; // Something changed, paint will be called
inherited;
end;
procedure TSynEditMarkupHighlightAllCaret.DoMarkupChanged(AMarkup: TSynSelectedColor);
@ -618,7 +683,7 @@ end;
procedure TSynEditMarkupHighlightAllCaret.RestartTimer;
begin
FTimer.Enabled := False;
if MarkupInfo.IsEnabled then
if (MarkupInfo.IsEnabled) and (FWaitTime > 0) then
FTimer.Enabled := True;
end;
@ -633,20 +698,43 @@ begin
end;
function TSynEditMarkupHighlightAllCaret.GetCurrentText: String;
function TrimS(s: String): String;
var
i: Integer;
begin
i := 1;
while (i <= length(s)) and (s[i] in [#1..#32]) do inc(i);
Result := copy(s, i, MaxInt);
i := length(Result);
while (i > 0) and (Result[i] in [#1..#32]) do dec(i);
Result := copy(Result, 1, i);
end;
begin
If TCustomSynEdit(SynEdit).SelAvail then
Result := TCustomSynEdit(SynEdit).SelText
else begin
Result := TCustomSynEdit(SynEdit).GetWordAtRowCol
(TCustomSynEdit(SynEdit).PhysicalToLogicalPos(TCustomSynEdit(SynEdit).CaretXY));
if FToggledWord <> '' then
exit(FToggledWord);
If TCustomSynEdit(SynEdit).SelAvail then begin
if FTrim then
Result := TrimS(TCustomSynEdit(SynEdit).SelText)
else
Result := TCustomSynEdit(SynEdit).SelText;
if TrimS(Result) = '' then Result := '';
FLowBound := TCustomSynEdit(SynEdit).BlockBegin;
FUpBound := TCustomSynEdit(SynEdit).BlockEnd;
end else begin
Result := TCustomSynEdit(SynEdit).GetWordAtRowCol(LogicalCaret);
if FIgnoreKeywords and assigned(FHighlighter)
and FHighlighter.IsKeyword(Result) then
Result := '';
FLowBound.Y := LogicalCaret.Y;
FUpBound.Y := LogicalCaret.Y;
TCustomSynEdit(SynEdit).GetWordBoundsAtRowCol(LogicalCaret, FLowBound.X, FUpBound.X);
end;
end;
function TSynEditMarkupHighlightAllCaret.GetCurrentOption: TSynSearchOptions;
begin
if FToggledWord <> '' then
exit(FToggledOption);
If TCustomSynEdit(SynEdit).SelAvail or not(FFullWord) then
Result := []
else
@ -659,10 +747,16 @@ end;
constructor TSynEditMarkupHighlightAllCaret.Create(ASynEdit: TCustomControl);
begin
inherited Create(ASynEdit);
FStateChanged := False;
MarkupInfo.Clear;
HideSingleMatch := True;
FFullWord := False;
FWaitTime := 1500;
FTrim := True;
FLowBound := Point(-1, -1);
FUpBound := Point(-1, -1);
FOldLowBound := Point(-1, -1);
FOldUpBound := Point(-1, -1);
FTimer := TTimer.Create(nil);
FTimer.Enabled := False;
FTimer.Interval := FWaitTime;
@ -677,5 +771,29 @@ begin
inherited Destroy;
end;
procedure TSynEditMarkupHighlightAllCaret.ToggleCurrentWord;
var
s: String;
begin
if FToggledWord = '' then begin
FToggledWord := GetCurrentText;
FToggledOption := GetCurrentOption;
end else begin
s := FToggledWord;
FToggledWord := '';
if GetCurrentText <> s then begin
FToggledWord := GetCurrentText;
FToggledOption := GetCurrentOption;
end;
end;
SearchString := FToggledWord;
SearchOptions := GetCurrentOption;
if FToggledWord = '' then begin
RestartTimer;
end else begin
ScrollTimerHandler(self);
end;
end;
end.

View File

@ -469,6 +469,8 @@ type
FMarkupCurWordFull: Boolean;
FMarkupCurWordFullLen: Integer;
FMarkupCurWordNoKeyword: Boolean;
FMarkupCurWordTrim: Boolean;
FMarkupCurWordNoTimer: Boolean;
// Code tools options (MG: these will move to an unit of their own)
fAutoIdentifierCompletion: Boolean;
@ -595,11 +597,14 @@ type
read FMarkupCurWordTime write FMarkupCurWordTime default 1500;
property MarkupCurWordFull: Boolean
read FMarkupCurWordFull write FMarkupCurWordFull default False;
property MarkupCurWordFullLen: Integer
read FMarkupCurWordFullLen write FMarkupCurWordFullLen default 3;
property MarkupCurWordNoKeyword: Boolean
read FMarkupCurWordNoKeyword write FMarkupCurWordNoKeyword default False;
property MarkupCurWordTrim: Boolean
read FMarkupCurWordTrim write FMarkupCurWordTrim default True;
property MarkupCurWordNoTimer: Boolean
read FMarkupCurWordNoTimer write FMarkupCurWordNoTimer default False;
// Code Tools options
property AutoIdentifierCompletion: Boolean
@ -1409,6 +1414,8 @@ begin
FMarkupCurWordFull := False;
FMarkupCurWordFullLen := 3;
FMarkupCurWordNoKeyword := False;
FMarkupCurWordTrim := True;
FMarkupCurWordNoTimer := False;
// Code Tools options
fCodeTemplateFileName := SetDirSeparators(GetPrimaryConfigPath + '/lazarus.dci');
@ -1588,6 +1595,12 @@ begin
FMarkupCurWordNoKeyword :=
XMLConfig.GetValue(
'EditorOptions/Display/MarkupCurrentWord/NoKeyword', False);
FMarkupCurWordTrim :=
XMLConfig.GetValue(
'EditorOptions/Display/MarkupCurrentWord/Trim', True);
FMarkupCurWordNoTimer :=
XMLConfig.GetValue(
'EditorOptions/Display/MarkupCurrentWord/NoTimer', False);
// Code Tools options
fAutoIdentifierCompletion :=
@ -1744,6 +1757,10 @@ begin
FMarkupCurWordFullLen, 3);
XMLConfig.SetDeleteValue('EditorOptions/Display/MarkupCurrentWord/NoKeyword',
FMarkupCurWordNoKeyword, False);
XMLConfig.SetDeleteValue('EditorOptions/Display/MarkupCurrentWord/Trim',
FMarkupCurWordTrim, True);
XMLConfig.SetDeleteValue('EditorOptions/Display/MarkupCurrentWord/NoTimer',
FMarkupCurWordNoTimer, False);
// Code Tools options
XMLConfig.SetDeleteValue('EditorOptions/CodeTools/AutoIdentifierCompletion'
@ -2363,10 +2380,14 @@ begin
MarkCaret := TSynEditMarkupHighlightAllCaret(ASynEdit.MarkupByClass[TSynEditMarkupHighlightAllCaret]);
if assigned(MarkCaret) then begin
MarkCaret.Enabled := FMarkupCurWordEnabled;
MarkCaret.WaitTime := FMarkupCurWordTime;
if FMarkupCurWordNoTimer then
MarkCaret.WaitTime := 0
else
MarkCaret.WaitTime := FMarkupCurWordTime;
MarkCaret.FullWord := FMarkupCurWordFull;
MarkCaret.FullWordMaxLen := FMarkupCurWordFullLen;
MarkCaret.IgnoreKeywords := FMarkupCurWordNoKeyword;
MarkCaret.Trim := FMarkupCurWordTrim;
end;
// Code Folding
@ -2410,10 +2431,15 @@ begin
MarkCaret := TSynEditMarkupHighlightAllCaret(ASynEdit.MarkupByClass[TSynEditMarkupHighlightAllCaret]);
if assigned(MarkCaret) then begin
FMarkupCurWordEnabled := MarkCaret.Enabled;
FMarkupCurWordTime := MarkCaret.WaitTime;
FMarkupCurWordNoTimer := MarkCaret.WaitTime = 0;
if FMarkupCurWordNoTimer then
FMarkupCurWordTime := 1500
else
FMarkupCurWordTime := MarkCaret.WaitTime;
FMarkupCurWordFull := MarkCaret.FullWord;
FMarkupCurWordFullLen := MarkCaret.FullWordMaxLen;
FMarkupCurWordNoKeyword := MarkCaret.IgnoreKeywords;
FMarkupCurWordTrim := MarkCaret.Trim;
end;
end;

View File

@ -5,8 +5,8 @@ inherited EditorCodetoolsOptionsFrame: TEditorCodetoolsOptionsFrame
ClientWidth = 496
TabOrder = 0
Visible = False
DesignLeft = 46
DesignTop = 46
DesignLeft = 23
DesignTop = 23
object AutoDelayMaxLabel: TLabel[0]
AnchorSideTop.Control = AutoDelayTrackBar
AnchorSideTop.Side = asrBottom
@ -86,17 +86,16 @@ inherited EditorCodetoolsOptionsFrame: TEditorCodetoolsOptionsFrame
ParentColor = False
end
object MarkupWordFullLenLabel: TLabel[6]
AnchorSideLeft.Control = Owner
AnchorSideLeft.Control = MarkupWordFullCheckBox
AnchorSideTop.Control = MarkupWordEnabledCheckBox
AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = MarkupWordFullLenSpin
Left = 307
Left = 230
Height = 16
Top = 236
Width = 137
Anchors = [akTop, akRight]
BorderSpacing.Left = 230
BorderSpacing.Top = 6
BorderSpacing.Right = 4
Caption = 'MarkupWordFullLenLabel'
ParentColor = False
end
@ -234,17 +233,44 @@ inherited EditorCodetoolsOptionsFrame: TEditorCodetoolsOptionsFrame
TabOrder = 9
end
object MarkupWordFullLenSpin: TSpinEdit[17]
AnchorSideLeft.Control = Owner
AnchorSideLeft.Control = MarkupWordFullLenLabel
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = MarkupWordEnabledCheckBox
AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = Owner
AnchorSideRight.Side = asrBottom
Left = 448
Left = 373
Height = 19
Top = 236
Width = 48
Anchors = [akTop, akRight]
BorderSpacing.Left = 6
BorderSpacing.Top = 6
TabOrder = 10
end
object MarkupWordNoTimerCheckBox: TCheckBox[18]
AnchorSideLeft.Control = MarkupWordEnabledCheckBox
AnchorSideTop.Control = AutoDelayLabel
AnchorSideTop.Side = asrBottom
Left = 230
Height = 19
Top = 211
Width = 171
BorderSpacing.Left = 230
BorderSpacing.Top = 6
Caption = 'MarkupWordNoTimerCheckBox'
TabOrder = 11
end
object MarkupWordTrim: TCheckBox[19]
AnchorSideLeft.Control = MarkupWordNoKeyword
AnchorSideTop.Control = MarkupWordFullCheckBox
AnchorSideTop.Side = asrBottom
Left = 230
Height = 19
Top = 261
Width = 102
BorderSpacing.Left = 230
BorderSpacing.Top = 6
Caption = 'MarkupWordTrim'
TabOrder = 12
end
end

View File

@ -3,7 +3,7 @@
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
+#240#1#8'TabOrder'#2#0#7'Visible'#8#10'DesignLeft'#2#23#9'DesignTop'#2#23#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
@ -32,63 +32,73 @@ LazarusResources.Add('TEditorCodetoolsOptionsFrame','FORMDATA',[
+'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'
+'ption'#6#20'MarkupWordDelayLabel'#11'ParentColor'#8#0#0#242#2#6#6'TLabel'#22
+'MarkupWordFullLenLabel'#22'AnchorSideLeft.Control'#7#5'Owner'#21'AnchorSide'
+'Top.Control'#7#25'MarkupWordEnabledCheckBox'#18'AnchorSideTop.Side'#7#9'asr'
+'Bottom'#23'AnchorSideRight.Control'#7#21'MarkupWordFullLenSpin'#4'Left'#3'3'
+#1#6'Height'#2#16#3'Top'#3#236#0#5'Width'#3#137#0#7'Anchors'#11#5'akTop'#7'a'
+'kRight'#0#17'BorderSpacing.Top'#2#6#19'BorderSpacing.Right'#2#4#7'Caption'#6
+#22'MarkupWordFullLenLabel'#11'ParentColor'#8#0#0#242#2#7#9'TCheckBox AutoId'
+'entifierCompletionCheckBox'#22'AnchorSideLeft.Control'#7#5'Owner'#21'Anchor'
+'SideTop.Control'#7#5'Owner'#4'Left'#2#0#6'Height'#2#19#3'Top'#2#0#5'Width'#3
+#183#0#7'Caption'#6' AutoIdentifierCompletionCheckBox'#8'TabOrder'#2#0#0#0
+#242#2#8#9'TCheckBox'#28'AutoRemoveEmptyMethodsOnSave'#22'AnchorSideLeft.Con'
+'trol'#7#5'Owner'#21'AnchorSideTop.Control'#7' AutoIdentifierCompletionCheck'
+'Box'#18'AnchorSideTop.Side'#7#9'asrBottom'#4'Left'#2#0#6'Height'#2#19#3'Top'
+#2#25#5'Width'#3#191#0#17'BorderSpacing.Top'#2#6#7'Caption'#6#28'AutoRemoveE'
+'mptyMethodsOnSave'#8'TabOrder'#2#1#0#0#242#2#9#9'TCheckBox'#28'AutoToolTipS'
+'ymbToolsCheckBox'#22'AnchorSideLeft.Control'#7#5'Owner'#21'AnchorSideTop.Co'
+'ntrol'#7#28'AutoRemoveEmptyMethodsOnSave'#18'AnchorSideTop.Side'#7#9'asrBot'
+'tom'#4'Left'#2#0#6'Height'#2#19#3'Top'#2'2'#5'Width'#3#179#0#17'BorderSpaci'
+'ng.Top'#2#6#7'Caption'#6#28'AutoToolTipSymbToolsCheckBox'#8'TabOrder'#2#2#0
+#0#242#2#10#9'TCheckBox'#26'AutoCodeParametersCheckBox'#22'AnchorSideLeft.Co'
+'ntrol'#7#5'Owner'#21'AnchorSideTop.Control'#7#28'AutoToolTipSymbToolsCheckB'
+'ox'#18'AnchorSideTop.Side'#7#9'asrBottom'#4'Left'#2#0#6'Height'#2#19#3'Top'
+#2'K'#5'Width'#3#169#0#17'BorderSpacing.Top'#2#6#7'Caption'#6#26'AutoCodePar'
+'ametersCheckBox'#7'Enabled'#8#8'TabOrder'#2#3#0#0#242#2#11#9'TCheckBox'#27
+'AutoToolTipExprEvalCheckBox'#22'AnchorSideLeft.Control'#7#5'Owner'#21'Ancho'
+'rSideTop.Control'#7#26'AutoCodeParametersCheckBox'#18'AnchorSideTop.Side'#7
+#9'asrBottom'#4'Left'#2#0#6'Height'#2#19#3'Top'#2'd'#5'Width'#3#169#0#17'Bor'
+'derSpacing.Top'#2#6#7'Caption'#6#27'AutoToolTipExprEvalCheckBox'#8'TabOrder'
+#2#4#0#0#242#2#12#9'TTrackBar'#17'AutoDelayTrackBar'#22'AnchorSideLeft.Contr'
+'ol'#7#5'Owner'#21'AnchorSideTop.Control'#7#27'AutoToolTipExprEvalCheckBox'
+#18'AnchorSideTop.Side'#7#9'asrBottom'#23'AnchorSideRight.Control'#7#5'Owner'
+#20'AnchorSideRight.Side'#7#9'asrBottom'#4'Left'#2#0#6'Height'#2'('#3'Top'#2
+'}'#5'Width'#3#240#1#9'Frequency'#3#250#0#3'Max'#3#160#15#3'Min'#3#244#1#8'P'
+'osition'#3#244#1#7'Anchors'#11#5'akTop'#6'akLeft'#7'akRight'#0#17'BorderSpa'
,'cing.Top'#2#6#5'Ctl3D'#8#8'TabOrder'#2#5#0#0#242#2#13#9'TCheckBox'#25'Marku'
+'pWordEnabledCheckBox'#22'AnchorSideLeft.Control'#7#5'Owner'#21'AnchorSideTo'
+'p.Control'#7#14'AutoDelayLabel'#18'AnchorSideTop.Side'#7#9'asrBottom'#4'Lef'
+'t'#2#0#6'Height'#2#19#3'Top'#3#211#0#5'Width'#3#170#0#17'BorderSpacing.Top'
+#2#6#7'Caption'#6#25'MarkupWordEnabledCheckBox'#8'TabOrder'#2#6#0#0#242#2#14
+#9'TTrackBar'#22'MarkupWordTimeTrackBar'#22'AnchorSideLeft.Control'#7#5'Owne'
+'r'#21'AnchorSideTop.Control'#7#19'MarkupWordNoKeyword'#18'AnchorSideTop.Sid'
+'e'#7#9'asrBottom'#23'AnchorSideRight.Control'#7#5'Owner'#20'AnchorSideRight'
+'.Side'#7#9'asrBottom'#4'Left'#2#0#6'Height'#2'('#3'Top'#3#30#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#15#9'TCheckBox'#22'MarkupWordFullCheckBo'
+'x'#22'AnchorSideLeft.Control'#7#5'Owner'#21'AnchorSideTop.Control'#7#25'Mar'
+'kupWordEnabledCheckBox'#18'AnchorSideTop.Side'#7#9'asrBottom'#4'Left'#2#0#6
+'Height'#2#19#3'Top'#3#236#0#5'Width'#3#147#0#17'BorderSpacing.Top'#2#6#7'Ca'
+'ption'#6#22'MarkupWordFullCheckBox'#8'TabOrder'#2#8#0#0#242#2#16#9'TCheckBo'
+'x'#19'MarkupWordNoKeyword'#22'AnchorSideLeft.Control'#7#5'Owner'#21'AnchorS'
+'ideTop.Control'#7#22'MarkupWordFullCheckBox'#18'AnchorSideTop.Side'#7#9'asr'
+'Bottom'#4'Left'#2#0#6'Height'#2#19#3'Top'#3#5#1#5'Width'#3#137#0#17'BorderS'
+'pacing.Top'#2#6#7'Caption'#6#19'MarkupWordNoKeyword'#8'TabOrder'#2#9#0#0#242
+#2#17#9'TSpinEdit'#21'MarkupWordFullLenSpin'#22'AnchorSideLeft.Control'#7#5
+'Owner'#21'AnchorSideTop.Control'#7#25'MarkupWordEnabledCheckBox'#18'AnchorS'
+'ideTop.Side'#7#9'asrBottom'#23'AnchorSideRight.Control'#7#5'Owner'#20'Ancho'
+'rSideRight.Side'#7#9'asrBottom'#4'Left'#3#192#1#6'Height'#2#19#3'Top'#3#236
+#0#5'Width'#2'0'#7'Anchors'#11#5'akTop'#7'akRight'#0#17'BorderSpacing.Top'#2
+#6#8'TabOrder'#2#10#0#0#0
+'MarkupWordFullLenLabel'#22'AnchorSideLeft.Control'#7#22'MarkupWordFullCheck'
+'Box'#21'AnchorSideTop.Control'#7#25'MarkupWordEnabledCheckBox'#18'AnchorSid'
+'eTop.Side'#7#9'asrBottom'#23'AnchorSideRight.Control'#7#21'MarkupWordFullLe'
+'nSpin'#4'Left'#3#230#0#6'Height'#2#16#3'Top'#3#236#0#5'Width'#3#137#0#18'Bo'
+'rderSpacing.Left'#3#230#0#17'BorderSpacing.Top'#2#6#7'Caption'#6#22'MarkupW'
+'ordFullLenLabel'#11'ParentColor'#8#0#0#242#2#7#9'TCheckBox AutoIdentifierCo'
+'mpletionCheckBox'#22'AnchorSideLeft.Control'#7#5'Owner'#21'AnchorSideTop.Co'
+'ntrol'#7#5'Owner'#4'Left'#2#0#6'Height'#2#19#3'Top'#2#0#5'Width'#3#183#0#7
+'Caption'#6' AutoIdentifierCompletionCheckBox'#8'TabOrder'#2#0#0#0#242#2#8#9
+'TCheckBox'#28'AutoRemoveEmptyMethodsOnSave'#22'AnchorSideLeft.Control'#7#5
+'Owner'#21'AnchorSideTop.Control'#7' AutoIdentifierCompletionCheckBox'#18'An'
+'chorSideTop.Side'#7#9'asrBottom'#4'Left'#2#0#6'Height'#2#19#3'Top'#2#25#5'W'
+'idth'#3#191#0#17'BorderSpacing.Top'#2#6#7'Caption'#6#28'AutoRemoveEmptyMeth'
+'odsOnSave'#8'TabOrder'#2#1#0#0#242#2#9#9'TCheckBox'#28'AutoToolTipSymbTools'
+'CheckBox'#22'AnchorSideLeft.Control'#7#5'Owner'#21'AnchorSideTop.Control'#7
+#28'AutoRemoveEmptyMethodsOnSave'#18'AnchorSideTop.Side'#7#9'asrBottom'#4'Le'
+'ft'#2#0#6'Height'#2#19#3'Top'#2'2'#5'Width'#3#179#0#17'BorderSpacing.Top'#2
+#6#7'Caption'#6#28'AutoToolTipSymbToolsCheckBox'#8'TabOrder'#2#2#0#0#242#2#10
+#9'TCheckBox'#26'AutoCodeParametersCheckBox'#22'AnchorSideLeft.Control'#7#5
+'Owner'#21'AnchorSideTop.Control'#7#28'AutoToolTipSymbToolsCheckBox'#18'Anch'
+'orSideTop.Side'#7#9'asrBottom'#4'Left'#2#0#6'Height'#2#19#3'Top'#2'K'#5'Wid'
+'th'#3#169#0#17'BorderSpacing.Top'#2#6#7'Caption'#6#26'AutoCodeParametersChe'
+'ckBox'#7'Enabled'#8#8'TabOrder'#2#3#0#0#242#2#11#9'TCheckBox'#27'AutoToolTi'
+'pExprEvalCheckBox'#22'AnchorSideLeft.Control'#7#5'Owner'#21'AnchorSideTop.C'
+'ontrol'#7#26'AutoCodeParametersCheckBox'#18'AnchorSideTop.Side'#7#9'asrBott'
+'om'#4'Left'#2#0#6'Height'#2#19#3'Top'#2'd'#5'Width'#3#169#0#17'BorderSpacin'
+'g.Top'#2#6#7'Caption'#6#27'AutoToolTipExprEvalCheckBox'#8'TabOrder'#2#4#0#0
+#242#2#12#9'TTrackBar'#17'AutoDelayTrackBar'#22'AnchorSideLeft.Control'#7#5
+'Owner'#21'AnchorSideTop.Control'#7#27'AutoToolTipExprEvalCheckBox'#18'Ancho'
+'rSideTop.Side'#7#9'asrBottom'#23'AnchorSideRight.Control'#7#5'Owner'#20'Anc'
+'horSideRight.Side'#7#9'asrBottom'#4'Left'#2#0#6'Height'#2'('#3'Top'#2'}'#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#5#0#0#242#2#13#9'TCheckBox'#25'MarkupWord'
+'EnabledCheckBox'#22'AnchorSideLeft.Control'#7#5'Owner'#21'AnchorSideTop.Con'
+'trol'#7#14'AutoDelayLabel'#18'AnchorSideTop.Side'#7#9'asrBottom'#4'Left'#2#0
+#6'Height'#2#19#3'Top'#3#211#0#5'Width'#3#170#0#17'BorderSpacing.Top'#2#6#7
+'Caption'#6#25'MarkupWordEnabledCheckBox'#8'TabOrder'#2#6#0#0#242#2#14#9'TTr'
+'ackBar'#22'MarkupWordTimeTrackBar'#22'AnchorSideLeft.Control'#7#5'Owner'#21
+'AnchorSideTop.Control'#7#19'MarkupWordNoKeyword'#18'AnchorSideTop.Side'#7#9
+'asrBottom'#23'AnchorSideRight.Control'#7#5'Owner'#20'AnchorSideRight.Side'#7
+#9'asrBottom'#4'Left'#2#0#6'Height'#2'('#3'Top'#3#30#1#5'Width'#3#240#1#9'Fr'
+'equency'#3#250#0#3'Max'#3#160#15#3'Min'#3#244#1#8'Position'#3#244#1#7'Ancho'
+'rs'#11#5'akTop'#6'akLeft'#7'akRight'#0#17'BorderSpacing.Top'#2#6#5'Ctl3D'#8
+#8'TabOrder'#2#7#0#0#242#2#15#9'TCheckBox'#22'MarkupWordFullCheckBox'#22'Anc'
+'horSideLeft.Control'#7#5'Owner'#21'AnchorSideTop.Control'#7#25'MarkupWordEn'
+'abledCheckBox'#18'AnchorSideTop.Side'#7#9'asrBottom'#4'Left'#2#0#6'Height'#2
+#19#3'Top'#3#236#0#5'Width'#3#147#0#17'BorderSpacing.Top'#2#6#7'Caption'#6#22
+'MarkupWordFullCheckBox'#8'TabOrder'#2#8#0#0#242#2#16#9'TCheckBox'#19'Markup'
+'WordNoKeyword'#22'AnchorSideLeft.Control'#7#5'Owner'#21'AnchorSideTop.Contr'
+'ol'#7#22'MarkupWordFullCheckBox'#18'AnchorSideTop.Side'#7#9'asrBottom'#4'Le'
+'ft'#2#0#6'Height'#2#19#3'Top'#3#5#1#5'Width'#3#137#0#17'BorderSpacing.Top'#2
+#6#7'Caption'#6#19'MarkupWordNoKeyword'#8'TabOrder'#2#9#0#0#242#2#17#9'TSpin'
+'Edit'#21'MarkupWordFullLenSpin'#22'AnchorSideLeft.Control'#7#22'MarkupWordF'
+'ullLenLabel'#19'AnchorSideLeft.Side'#7#9'asrBottom'#21'AnchorSideTop.Contro'
+'l'#7#25'MarkupWordEnabledCheckBox'#18'AnchorSideTop.Side'#7#9'asrBottom'#23
+'AnchorSideRight.Control'#7#5'Owner'#20'AnchorSideRight.Side'#7#9'asrBottom'
+#4'Left'#3'u'#1#6'Height'#2#19#3'Top'#3#236#0#5'Width'#2'0'#18'BorderSpacing'
+'.Left'#2#6#17'BorderSpacing.Top'#2#6#8'TabOrder'#2#10#0#0#242#2#18#9'TCheck'
+'Box'#25'MarkupWordNoTimerCheckBox'#22'AnchorSideLeft.Control'#7#25'MarkupWo'
+'rdEnabledCheckBox'#21'AnchorSideTop.Control'#7#14'AutoDelayLabel'#18'Anchor'
+'SideTop.Side'#7#9'asrBottom'#4'Left'#3#230#0#6'Height'#2#19#3'Top'#3#211#0#5
+'Width'#3#171#0#18'BorderSpacing.Left'#3#230#0#17'BorderSpacing.Top'#2#6#7'C'
+'aption'#6#25'MarkupWordNoTimerCheckBox'#8'TabOrder'#2#11#0#0#242#2#19#9'TCh'
+'eckBox'#14'MarkupWordTrim'#22'AnchorSideLeft.Control'#7#19'MarkupWordNoKeyw'
+'ord'#21'AnchorSideTop.Control'#7#22'MarkupWordFullCheckBox'#18'AnchorSideTo'
+'p.Side'#7#9'asrBottom'#4'Left'#3#230#0#6'Height'#2#19#3'Top'#3#5#1#5'Width'
+#2'f'#18'BorderSpacing.Left'#3#230#0#17'BorderSpacing.Top'#2#6#7'Caption'#6
+#14'MarkupWordTrim'#8'TabOrder'#2#12#0#0#0
]);

View File

@ -40,6 +40,7 @@ type
AutoIdentifierCompletionCheckBox: TCheckBox;
AutoToolTipExprEvalCheckBox: TCheckBox;
MarkupWordDelayLabel: TLabel;
MarkupWordNoTimerCheckBox: TCheckBox;
MarkupWordFullCheckBox: TCheckBox;
MarkupWordFullLenSpin: TSpinEdit;
MarkupWordFullLenLabel: TLabel;
@ -47,6 +48,7 @@ type
MarkupWordMaxLabel: TLabel;
MarkupWordMinLabel: TLabel;
MarkupWordEnabledCheckBox: TCheckBox;
MarkupWordTrim: TCheckBox;
MarkupWordTimeTrackBar: TTrackBar;
AutoToolTipSymbToolsCheckBox: TCheckBox;
AutoRemoveEmptyMethodsOnSave: TCheckBox;
@ -88,6 +90,8 @@ begin
MarkupWordMaxLabel.Caption := '4.0 ' + DlgTimeSecondUnit;;
MarkupWordFullLenLabel.Caption := dlgMarkupWordFullLen;
MarkupWordNoKeyword.Caption := dlgMarkupWordNoKeyword;
MarkupWordTrim.Caption := dlgMarkupWordTrim;
MarkupWordNoTimerCheckBox.Caption := dlgMarkupWordNoTimer;
end;
procedure TEditorCodetoolsOptionsFrame.ReadSettings(AOptions: TAbstractIDEOptions);
@ -105,6 +109,8 @@ begin
MarkupWordTimeTrackBar.Position := MarkupCurWordTime;
MarkupWordFullLenSpin. Value := MarkupCurWordFullLen;
MarkupWordNoKeyword.Checked := MarkupCurWordNoKeyword;
MarkupWordTrim.Checked := MarkupCurWordTrim;
MarkupWordNoTimerCheckBox.Checked := MarkupCurWordNoTimer;
end;
end;
@ -123,6 +129,8 @@ begin
MarkupCurWordTime := MarkupWordTimeTrackBar.Position;
MarkupCurWordFullLen := MarkupWordFullLenSpin.Value;
MarkupCurWordNoKeyword := MarkupWordNoKeyword.Checked;
MarkupCurWordTrim := MarkupWordTrim.Checked;
MarkupCurWordNoTimer := MarkupWordNoTimerCheckBox.Checked;
end;
end;

View File

@ -422,6 +422,7 @@ begin
EcFoldLevel0: SetResult(VK_0,[ssAlt,ssShift],VK_UNKNOWN,[]);
EcFoldCurrent: SetResult(VK_OEM_MINUS,[ssAlt,ssShift],VK_UNKNOWN,[]);
EcUnFoldCurrent: SetResult(VK_OEM_PLUS,[ssAlt,ssShift],VK_UNKNOWN,[]);
EcToggleMarkupWord: SetResult(VK_M,[ssAlt],VK_UNKNOWN,[]);
// file menu
ecNew: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
@ -753,6 +754,7 @@ begin
EcFoldLevel0: SetResult(VK_0,[ssAlt,ssShift],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
EcFoldCurrent: SetResult(VK_OEM_PLUS,[ssAlt,ssShift],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
EcUnFoldCurrent: SetResult(VK_OEM_MINUS,[ssAlt,ssShift],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
EcToggleMarkupWord: SetResult(VK_M,[ssAlt],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
// file menu
ecNew: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
@ -1272,6 +1274,7 @@ begin
EcFoldLevel0: SetResult(VK_0,[ssAlt,ssShift],VK_UNKNOWN,[]);
EcFoldCurrent: SetResult(VK_OEM_PLUS,[ssAlt,ssShift],VK_UNKNOWN,[]);
EcUnFoldCurrent: SetResult(VK_OEM_MINUS,[ssAlt,ssShift],VK_UNKNOWN,[]);
EcToggleMarkupWord: SetResult(VK_M,[ssAlt],VK_UNKNOWN,[]);
// file menu
ecNew: SetResult(VK_N,[ssMeta],VK_UNKNOWN,[]);
@ -1587,6 +1590,7 @@ begin
EcFoldLevel0 : Result:= srkmecUnFoldAll;
EcFoldCurrent : Result:= srkmecFoldCurrent;
EcUnFoldCurrent : Result:= srkmecUnFoldCurrent;
EcToggleMarkupWord : Result := srkmecToggleMarkupWord;
// file menu
ecNew : Result:= lisMenuNewOther;
@ -1988,6 +1992,7 @@ begin
AddDefault(C, 'Select word', lisMenuSelectWord, ecSelectWord);
AddDefault(C, 'Select line', lisMenuSelectLine, ecSelectLine);
AddDefault(C, 'Select paragraph', lisMenuSelectParagraph, ecSelectParagraph);
AddDefault(C, 'Toggle Current-Word highlight', srkmecToggleMarkupWord, EcToggleMarkupWord);
// editing - without menu items in the IDE bar
C:=Categories[AddCategory('text editing commands',srkmCatEditing,

View File

@ -1194,9 +1194,11 @@ resourcestring
dlgTooltipEval = 'Tooltip expression evaluation';
dlgTooltipTools = 'Tooltip symbol Tools';
dlgMarkupWordEnabled = 'Highlight Current Word/Block';
dlgMarkupWordFull = 'Highlight Current Word match word boundaries';
dlgMarkupWordFull = 'Current Word match word boundaries';
dlgMarkupWordFullLen = 'Only if shorter than';
dlgMarkupWordNoKeyword = 'Ignore Keywords';
dlgMarkupWordTrim = 'Trim Spaces';
dlgMarkupWordNoTimer = 'Disable Timer';
dlgAutoRemoveEmptyMethods = 'Auto remove empty methods';
dlgEdDelay = 'Delay';
dlgTimeSecondUnit = 'sec';
@ -1927,6 +1929,7 @@ resourcestring
srkmecUnFoldAll = 'Unfold all';
srkmecFoldCurrent = 'Fold at Cursor';
srkmecUnFoldCurrent = 'Unfold at Cursor';
srkmecToggleMarkupWord = 'Toggle Current-Word highlight';
// edit menu
srkmecSelectionTabs2Spaces = 'Convert tabs to spaces in selection';