IDE+codetools: implemented complete blocks in statements

git-svn-id: trunk@20108 -
This commit is contained in:
mattias 2009-05-21 16:49:01 +00:00
parent f8012d194e
commit 9bd290d86e
8 changed files with 454 additions and 129 deletions

View File

@ -69,6 +69,7 @@ function FindMainUnitHint(const ASource: string; out Filename: string): boolean;
procedure GetLineStartEndAtPosition(const Source:string; Position:integer; procedure GetLineStartEndAtPosition(const Source:string; Position:integer;
var LineStart,LineEnd:integer); var LineStart,LineEnd:integer);
function GetLineIndent(const Source: string; Position: integer): integer; function GetLineIndent(const Source: string; Position: integer): integer;
function GetPosInLine(const Source: string; Position: integer): integer;
function GetBlockMinIndent(const Source: string; function GetBlockMinIndent(const Source: string;
StartPos, EndPos: integer): integer; StartPos, EndPos: integer): integer;
function GetIndentStr(Indent: integer): string; function GetIndentStr(Indent: integer): string;
@ -3526,6 +3527,15 @@ begin
until false; until false;
end; end;
function GetPosInLine(const Source: string; Position: integer): integer;
begin
Result:=0;
while (Position>1) and (not (Source[Position] in [#10,#13])) do begin
inc(Result);
dec(Position);
end;
end;
function GetBlockMinIndent(const Source: string; function GetBlockMinIndent(const Source: string;
StartPos, EndPos: integer): integer; StartPos, EndPos: integer): integer;
var var

View File

@ -979,6 +979,7 @@ begin
if (CurPos.EndPos-CurPos.StartPos=3) if (CurPos.EndPos-CurPos.StartPos=3)
and (Src[CurPos.StartPos+1] in ['n','N']) and (Src[CurPos.StartPos+1] in ['n','N'])
and (Src[CurPos.StartPos+2] in ['d','D']) and (Src[CurPos.StartPos+2] in ['d','D'])
and ((CurPos.StartPos=1) or (Src[CurPos.StartPos-1]<>'@'))
then then
CurPos.Flag:=cafEnd; CurPos.Flag:=cafEnd;
'r','R': 'r','R':

View File

@ -5086,32 +5086,338 @@ end;
function TStandardCodeTool.CompleteBlock(const CursorPos: TCodeXYPosition; function TStandardCodeTool.CompleteBlock(const CursorPos: TCodeXYPosition;
SourceChangeCache: TSourceChangeCache; SourceChangeCache: TSourceChangeCache;
out NewPos: TCodeXYPosition; out NewTopLine: integer): boolean; out NewPos: TCodeXYPosition; out NewTopLine: integer): boolean;
{ begin: end; { For example:
asm: end; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
try: finally end; begin
finally: end; |
except: end; ...
repeat: until ; something
case of: end; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
case :: ; if then begin
case else: end; |
(: ) ...
[: ] something
record: end; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
class: end; begin
object: end; |
interface: end;
procedure
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ToDo:
if then begin
|
else
while do begin
|
foo;
bar;
Statements:
begin: end;
asm: end;
try: finally end;
finally: end;
except: end;
repeat: until ;
case of: end;
case :: ;
case else: end;
(: )
[: ]
Types:
(: )
[: ]
record: end;
class: end;
object: end;
interface: end;
} }
type
TBlockType = (
btNone,
btBegin,
btAsm,
btEdgedBracket,
btRoundBracket,
btTry,
btFinally,
btExcept,
btCase,
btCaseOf,
btCaseColon,
btCaseElse,
btRepeat,
btClass,
btInterface,
btObject,
btRecord
);
TBlock = record
Typ: TBlockType;
StartPos: integer;
end;
PBlock = ^TBlock;
TBlockStack = record
Stack: PBlock;
Capacity: integer;
Top: integer;
end;
var var
CleanCursorPos: integer; CleanCursorPos: integer;
Node: TCodeTreeNode; StartNode: TCodeTreeNode;
procedure InitStack(out Stack: TBlockStack);
begin
FillByte(Stack,SizeOf(Stack),0);
Stack.Top:=-1;
end;
procedure FreeStack(var Stack: TBlockStack);
begin
ReAllocMem(Stack.Stack,0);
Stack.Capacity:=0;
Stack.Top:=-1;
end;
procedure BeginBlock(var Stack: TBlockStack; Typ: TBlockType;
StartPos: integer);
var
Block: PBlock;
begin
inc(Stack.Top);
if Stack.Top>=Stack.Capacity then begin
if Stack.Capacity=0 then
Stack.Capacity:=16
else
Stack.Capacity:=Stack.Capacity*2;
ReAllocMem(Stack.Stack,SizeOf(TBlock)*Stack.Capacity);
end;
Block:=@Stack.Stack[Stack.Top];
Block^.Typ:=Typ;
Block^.StartPos:=StartPos;
end;
procedure EndBlock(var Stack: TBlockStack);
begin
dec(Stack.Top);
end;
function TopBlockType(const Stack: TBlockStack): TBlockType;
begin
if Stack.Top>=0 then
Result:=Stack.Stack[Stack.Top].Typ
else
Result:=btNone;
end;
function ReadStatements(var Stack: TBlockStack): Boolean;
var
CursorBlockLvl: Integer; // the stack level of the cursor
LastPos: Integer;
LineStart: boolean; // Atom is first atom of a line in cursor block (not in sub block)
Indent: Integer;
CursorBlockIndent: LongInt;
CursorBlock: TBlock;
BehindCursorBlock: Boolean; // atom behind cursor block
InCursorBlock: Boolean;
NeedCompletion: Boolean;
InsertPos: LongInt;
NewCode: String;
function EndBlockIsOk: boolean;
begin
//DebugLn(['EndBlockIsOk ']);
EndBlock(Stack);
Result:=true;
if (not BehindCursorBlock) and (Stack.Top<CursorBlockLvl) then
BehindCursorBlock:=true;
end;
begin
Result:=false;
MoveCursorToNodeStart(StartNode);
CursorBlockLvl:=-2;
LastPos:=-1;
CursorBlockIndent:=0;
Indent:=0;
CursorBlock.StartPos:=0;
BehindCursorBlock:=false;
NeedCompletion:=false;
repeat
ReadNextAtom;
//DebugLn(['ReadStatements Atom=',GetAtom,' TopTyp=',ord(TopBlockType(Stack)),' Top=',Stack.Top]);
// check if cursor reached
if (CurPos.StartPos>=CleanCursorPos) and (CursorBlockLvl<0) then begin
// reached cursor
CursorBlockLvl:=Stack.Top;
if CursorBlockLvl<0 then
CursorBlockIndent:=GetLineIndent(Src,CurPos.StartPos)
else begin
CursorBlock:=Stack.Stack[CursorBlockLvl];
CursorBlockIndent:=GetLineIndent(Src,CursorBlock.StartPos);
end;
//DebugLn(['ReadStatements CursorBlockLvl=',CursorBlockLvl,' Indent=',CursorBlockIndent]);
end;
// check if end of node
if (CurPos.StartPos>SrcLen) or (CurPos.StartPos>=StartNode.EndPos) then
break;
// check if line start
InCursorBlock:=(CursorBlockLvl=Stack.Top) and (not BehindCursorBlock);
LineStart:=InCursorBlock and (LastPos>0)
and not PositionsInSameLine(Src,LastPos,CurPos.StartPos);
if LineStart then
Indent:=GetLineIndent(Src,CurPos.StartPos);
if LineStart then begin
// atom is in same block as cursor (not sub block)
// and first atom of a line
// => check indent
if Indent<CursorBlockIndent then begin
//DebugLn(['ReadStatements Indent=',Indent,' < CursorBlockIndent=',CursorBlockIndent]);
NeedCompletion:=true;
end;
end;
// check block starts/ends
case CurPos.Flag of
cafEnd:
begin
case TopBlockType(Stack) of
btBegin,btFinally,btExcept,btCase,btCaseOf,btCaseColon,btCaseElse:
if not EndBlockIsOk then exit;
btAsm:
if (CurPos.StartPos>1) and (Src[CurPos.StartPos-1]<>'@') then begin
if not EndBlockIsOk then exit;
end;
else
// missing begin
exit;
end;
end;
cafEdgedBracketOpen:
BeginBlock(Stack,btEdgedBracket,CurPos.StartPos);
cafEdgedBracketClose:
if TopBlockType(Stack)=btEdgedBracket then begin
if not EndBlockIsOk then exit;
end else begin
// missing [
exit;
end;
cafRoundBracketOpen:
BeginBlock(Stack,btRoundBracket,CurPos.StartPos);
cafRoundBracketClose:
if TopBlockType(Stack)=btRoundBracket then begin
if not EndBlockIsOk then exit;
end else begin
// missing (
exit;
end;
cafColon:
if TopBlockType(Stack)=btCaseOf then
BeginBlock(Stack,btCaseColon,CurPos.StartPos);
cafSemicolon:
if TopBlockType(Stack)=btCaseColon then
if not EndBlockIsOk then exit;
cafBegin:
BeginBlock(Stack,btBegin,CurPos.StartPos);
cafWord:
if TopBlockType(Stack)<>btAsm then begin
if UpAtomIs('TRY') then
BeginBlock(Stack,btTry,CurPos.StartPos)
else if UpAtomIs('FINALLY') then
BeginBlock(Stack,btFinally,CurPos.StartPos)
else if UpAtomIs('EXCEPT') then
BeginBlock(Stack,btExcept,CurPos.StartPos)
else if UpAtomIs('REPEAT') then
BeginBlock(Stack,btRepeat,CurPos.StartPos)
else if UpAtomIs('UNTIL') then begin
if TopBlockType(Stack)=btRepeat then begin
if not EndBlockIsOk then exit;
end else begin
// until without repeat
end;
end else if UpAtomIs('ASM') then begin
BeginBlock(Stack,btAsm,CurPos.StartPos);
end else if UpAtomIs('CASE') then begin
BeginBlock(Stack,btCase,CurPos.StartPos)
end else if UpAtomIs('OF') then begin
if TopBlockType(Stack)=btCase then
BeginBlock(Stack,btCaseOf,CurPos.StartPos);
end else if UpAtomIs('ELSE') then begin
if TopBlockType(Stack)=btCaseOf then begin
if not EndBlockIsOk then exit;
BeginBlock(Stack,btCaseElse,CurPos.StartPos);
end;
end;
end;
end;
LastPos:=CurPos.StartPos;
until false;
//DebugLn(['ReadStatements END Stack.Top=',Stack.Top,' CursorBlockLvl=',CursorBlockLvl,' BehindCursorBlock=',BehindCursorBlock]);
if (not NeedCompletion) and (Stack.Top>=0)
and (not BehindCursorBlock) and (CursorBlockLvl=Stack.Top) then begin
NeedCompletion:=true;
end;
if NeedCompletion then begin
InsertPos:=CleanCursorPos;
Indent:=CursorBlockIndent;
NewCode:='';
case CursorBlock.Typ of
btBegin,btFinally,btExcept,btAsm,btCaseOf,btCaseElse:
NewCode:='end;';
btRepeat:
NewCode:='until ;';
btTry:
NewCode:='finally'+SourceChangeCache.BeautifyCodeOptions.LineEnd
+'end;';
end;
if NewCode<>'' then begin
NewCode:=SourceChangeCache.BeautifyCodeOptions.BeautifyStatement(
NewCode,Indent,[bcfIndentExistingLineBreaks]);
if not SourceChangeCache.Replace(gtNewLine,gtNewLine,
InsertPos,InsertPos,NewCode) then exit;
if not SourceChangeCache.Apply then exit;
end;
end;
Result:=true;
end;
var
Stack: TBlockStack;
begin begin
Result:=false; Result:=false;
NewPos:=CursorPos;
BuildTreeAndGetCleanPos(trTillCursor,CursorPos,CleanCursorPos, BuildTreeAndGetCleanPos(trTillCursor,CursorPos,CleanCursorPos,
[{$IFNDEF DisableIgnoreErrorAfter}btSetIgnoreErrorPos{$ENDIF}]); [{$IFNDEF DisableIgnoreErrorAfter}btSetIgnoreErrorPos{$ENDIF}]);
Node:=FindDeepestNodeAtPos(CleanCursorPos,true); StartNode:=FindDeepestNodeAtPos(CleanCursorPos,true);
SourceChangeCache.MainScanner:=Scanner;
InitStack(Stack);
try
//DebugLn(['TStandardCodeTool.CompleteBlock ',StartNode.DescAsString]);
DebugLn(['TStandardCodeTool.CompleteBlock ',Node.DescAsString]); if StartNode.Desc in AllPascalStatements then begin
if (StartNode.Parent<>nil)
and (StartNode.Parent.Desc in AllPascalStatements) then
StartNode:=StartNode.Parent;
if not ReadStatements(Stack) then exit;
end;
finally
FreeStack(Stack);
end;
Result:=true;
end; end;
function TStandardCodeTool.GuessMisplacedIfdefEndif( function TStandardCodeTool.GuessMisplacedIfdefEndif(

View File

@ -5,16 +5,17 @@ inherited EditorCodetoolsOptionsFrame: TEditorCodetoolsOptionsFrame
ClientWidth = 492 ClientWidth = 492
TabOrder = 0 TabOrder = 0
Visible = False Visible = False
DesignTop = 25 DesignLeft = 398
DesignTop = 291
object AutoDelayMaxLabel: TLabel[0] object AutoDelayMaxLabel: TLabel[0]
AnchorSideTop.Control = AutoDelayTrackBar AnchorSideTop.Control = AutoDelayTrackBar
AnchorSideTop.Side = asrBottom AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = Owner AnchorSideRight.Control = Owner
AnchorSideRight.Side = asrBottom AnchorSideRight.Side = asrBottom
Left = 360 Left = 365
Height = 18 Height = 18
Top = 182 Top = 182
Width = 132 Width = 127
Alignment = taRightJustify Alignment = taRightJustify
Anchors = [akTop, akRight] Anchors = [akTop, akRight]
BorderSpacing.Top = 2 BorderSpacing.Top = 2
@ -28,7 +29,7 @@ inherited EditorCodetoolsOptionsFrame: TEditorCodetoolsOptionsFrame
Left = 0 Left = 0
Height = 18 Height = 18
Top = 182 Top = 182
Width = 128 Width = 123
BorderSpacing.Top = 2 BorderSpacing.Top = 2
Caption = 'AutoDelayMinLabel' Caption = 'AutoDelayMinLabel'
ParentColor = False ParentColor = False
@ -40,7 +41,7 @@ inherited EditorCodetoolsOptionsFrame: TEditorCodetoolsOptionsFrame
Left = 0 Left = 0
Height = 18 Height = 18
Top = 204 Top = 204
Width = 104 Width = 101
BorderSpacing.Top = 24 BorderSpacing.Top = 24
Caption = 'AutoDelayLabel' Caption = 'AutoDelayLabel'
ParentColor = False ParentColor = False
@ -52,7 +53,7 @@ inherited EditorCodetoolsOptionsFrame: TEditorCodetoolsOptionsFrame
Left = 0 Left = 0
Height = 18 Height = 18
Top = 354 Top = 354
Width = 180 Width = 171
BorderSpacing.Top = 2 BorderSpacing.Top = 2
Caption = 'MarkupWordDelayMinLabel' Caption = 'MarkupWordDelayMinLabel'
ParentColor = False ParentColor = False
@ -62,10 +63,10 @@ inherited EditorCodetoolsOptionsFrame: TEditorCodetoolsOptionsFrame
AnchorSideTop.Side = asrBottom AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = Owner AnchorSideRight.Control = Owner
AnchorSideRight.Side = asrBottom AnchorSideRight.Side = asrBottom
Left = 308 Left = 317
Height = 18 Height = 18
Top = 354 Top = 354
Width = 184 Width = 175
Alignment = taRightJustify Alignment = taRightJustify
Anchors = [akTop, akRight] Anchors = [akTop, akRight]
BorderSpacing.Top = 2 BorderSpacing.Top = 2
@ -79,7 +80,7 @@ inherited EditorCodetoolsOptionsFrame: TEditorCodetoolsOptionsFrame
Left = 0 Left = 0
Height = 18 Height = 18
Top = 376 Top = 376
Width = 156 Width = 149
BorderSpacing.Top = 24 BorderSpacing.Top = 24
Caption = 'MarkupWordDelayLabel' Caption = 'MarkupWordDelayLabel'
ParentColor = False ParentColor = False
@ -90,10 +91,10 @@ inherited EditorCodetoolsOptionsFrame: TEditorCodetoolsOptionsFrame
AnchorSideTop.Control = MarkupWordFullCheckBox AnchorSideTop.Control = MarkupWordFullCheckBox
AnchorSideTop.Side = asrCenter AnchorSideTop.Side = asrCenter
AnchorSideRight.Control = MarkupWordFullLenSpin AnchorSideRight.Control = MarkupWordFullLenSpin
Left = 239 Left = 230
Height = 18 Height = 18
Top = 258 Top = 258
Width = 164 Width = 156
BorderSpacing.Left = 45 BorderSpacing.Left = 45
BorderSpacing.Top = 6 BorderSpacing.Top = 6
Caption = 'MarkupWordFullLenLabel' Caption = 'MarkupWordFullLenLabel'
@ -105,7 +106,7 @@ inherited EditorCodetoolsOptionsFrame: TEditorCodetoolsOptionsFrame
Left = 0 Left = 0
Height = 22 Height = 22
Top = 0 Top = 0
Width = 252 Width = 245
Caption = 'AutoIdentifierCompletionCheckBox' Caption = 'AutoIdentifierCompletionCheckBox'
TabOrder = 0 TabOrder = 0
end end
@ -116,7 +117,7 @@ inherited EditorCodetoolsOptionsFrame: TEditorCodetoolsOptionsFrame
Left = 0 Left = 0
Height = 22 Height = 22
Top = 28 Top = 28
Width = 255 Width = 251
BorderSpacing.Top = 6 BorderSpacing.Top = 6
Caption = 'AutoRemoveEmptyMethodsOnSave' Caption = 'AutoRemoveEmptyMethodsOnSave'
TabOrder = 1 TabOrder = 1
@ -128,32 +129,31 @@ inherited EditorCodetoolsOptionsFrame: TEditorCodetoolsOptionsFrame
Left = 0 Left = 0
Height = 22 Height = 22
Top = 56 Top = 56
Width = 235 Width = 227
BorderSpacing.Top = 6 BorderSpacing.Top = 6
Caption = 'AutoToolTipSymbToolsCheckBox' Caption = 'AutoToolTipSymbToolsCheckBox'
TabOrder = 2 TabOrder = 2
end end
object AutoCodeParametersCheckBox: TCheckBox[10] object AutoCompleteBlockCheckBox: TCheckBox[10]
AnchorSideLeft.Control = Owner AnchorSideLeft.Control = Owner
AnchorSideTop.Control = AutoToolTipSymbToolsCheckBox AnchorSideTop.Control = AutoToolTipSymbToolsCheckBox
AnchorSideTop.Side = asrBottom AnchorSideTop.Side = asrBottom
Left = 0 Left = 0
Height = 22 Height = 22
Top = 84 Top = 84
Width = 226 Width = 213
BorderSpacing.Top = 6 BorderSpacing.Top = 6
Caption = 'AutoCodeParametersCheckBox' Caption = 'AutoCompleteBlockCheckBox'
Enabled = False
TabOrder = 3 TabOrder = 3
end end
object AutoToolTipExprEvalCheckBox: TCheckBox[11] object AutoToolTipExprEvalCheckBox: TCheckBox[11]
AnchorSideLeft.Control = Owner AnchorSideLeft.Control = Owner
AnchorSideTop.Control = AutoCodeParametersCheckBox AnchorSideTop.Control = AutoCompleteBlockCheckBox
AnchorSideTop.Side = asrBottom AnchorSideTop.Side = asrBottom
Left = 0 Left = 0
Height = 22 Height = 22
Top = 112 Top = 112
Width = 222 Width = 213
BorderSpacing.Top = 6 BorderSpacing.Top = 6
Caption = 'AutoToolTipExprEvalCheckBox' Caption = 'AutoToolTipExprEvalCheckBox'
TabOrder = 4 TabOrder = 4
@ -201,7 +201,7 @@ inherited EditorCodetoolsOptionsFrame: TEditorCodetoolsOptionsFrame
Left = 0 Left = 0
Height = 22 Height = 22
Top = 256 Top = 256
Width = 194 Width = 185
BorderSpacing.Top = 6 BorderSpacing.Top = 6
Caption = 'MarkupWordFullCheckBox' Caption = 'MarkupWordFullCheckBox'
TabOrder = 7 TabOrder = 7
@ -213,7 +213,7 @@ inherited EditorCodetoolsOptionsFrame: TEditorCodetoolsOptionsFrame
Left = 0 Left = 0
Height = 22 Height = 22
Top = 284 Top = 284
Width = 180 Width = 172
BorderSpacing.Top = 6 BorderSpacing.Top = 6
Caption = 'MarkupWordNoKeyword' Caption = 'MarkupWordNoKeyword'
TabOrder = 8 TabOrder = 8
@ -225,11 +225,10 @@ inherited EditorCodetoolsOptionsFrame: TEditorCodetoolsOptionsFrame
AnchorSideTop.Side = asrCenter AnchorSideTop.Side = asrCenter
AnchorSideRight.Control = Owner AnchorSideRight.Control = Owner
AnchorSideRight.Side = asrBottom AnchorSideRight.Side = asrBottom
Left = 409 Left = 392
Height = 27 Height = 27
Top = 254 Top = 254
Width = 48 Width = 48
AutoSize = True
BorderSpacing.Left = 6 BorderSpacing.Left = 6
BorderSpacing.Top = 6 BorderSpacing.Top = 6
TabOrder = 9 TabOrder = 9
@ -241,7 +240,7 @@ inherited EditorCodetoolsOptionsFrame: TEditorCodetoolsOptionsFrame
Left = 0 Left = 0
Height = 22 Height = 22
Top = 228 Top = 228
Width = 227 Width = 219
BorderSpacing.Top = 6 BorderSpacing.Top = 6
Caption = 'MarkupWordNoTimerCheckBox' Caption = 'MarkupWordNoTimerCheckBox'
TabOrder = 10 TabOrder = 10
@ -249,10 +248,10 @@ inherited EditorCodetoolsOptionsFrame: TEditorCodetoolsOptionsFrame
object MarkupWordTrim: TCheckBox[18] object MarkupWordTrim: TCheckBox[18]
AnchorSideLeft.Control = MarkupWordFullLenLabel AnchorSideLeft.Control = MarkupWordFullLenLabel
AnchorSideTop.Control = MarkupWordNoKeyword AnchorSideTop.Control = MarkupWordNoKeyword
Left = 239 Left = 230
Height = 22 Height = 22
Top = 284 Top = 284
Width = 134 Width = 128
Caption = 'MarkupWordTrim' Caption = 'MarkupWordTrim'
TabOrder = 11 TabOrder = 11
end end

View File

@ -3,66 +3,66 @@
LazarusResources.Add('TEditorCodetoolsOptionsFrame','FORMDATA',[ LazarusResources.Add('TEditorCodetoolsOptionsFrame','FORMDATA',[
'TPF0'#241#28'TEditorCodetoolsOptionsFrame'#27'EditorCodetoolsOptionsFrame'#6 'TPF0'#241#28'TEditorCodetoolsOptionsFrame'#27'EditorCodetoolsOptionsFrame'#6
+'Height'#3#184#1#5'Width'#3#240#1#12'ClientHeight'#3#180#1#11'ClientWidth'#3 +'Height'#3#184#1#5'Width'#3#240#1#12'ClientHeight'#3#180#1#11'ClientWidth'#3
+#236#1#8'TabOrder'#2#0#7'Visible'#8#9'DesignTop'#2#25#0#242#2#0#6'TLabel'#17 +#236#1#8'TabOrder'#2#0#7'Visible'#8#10'DesignLeft'#3#142#1#9'DesignTop'#3'#'
+'AutoDelayMaxLabel'#21'AnchorSideTop.Control'#7#17'AutoDelayTrackBar'#18'Anc' +#1#0#242#2#0#6'TLabel'#17'AutoDelayMaxLabel'#21'AnchorSideTop.Control'#7#17
+'horSideTop.Side'#7#9'asrBottom'#23'AnchorSideRight.Control'#7#5'Owner'#20'A' +'AutoDelayTrackBar'#18'AnchorSideTop.Side'#7#9'asrBottom'#23'AnchorSideRight'
+'nchorSideRight.Side'#7#9'asrBottom'#4'Left'#3'h'#1#6'Height'#2#18#3'Top'#3 +'.Control'#7#5'Owner'#20'AnchorSideRight.Side'#7#9'asrBottom'#4'Left'#3'm'#1
+#182#0#5'Width'#3#132#0#9'Alignment'#7#14'taRightJustify'#7'Anchors'#11#5'ak' +#6'Height'#2#18#3'Top'#3#182#0#5'Width'#2''#9'Alignment'#7#14'taRightJustif'
+'Top'#7'akRight'#0#17'BorderSpacing.Top'#2#2#7'Caption'#6#17'AutoDelayMaxLab' +'y'#7'Anchors'#11#5'akTop'#7'akRight'#0#17'BorderSpacing.Top'#2#2#7'Caption'
+'el'#11'ParentColor'#8#0#0#242#2#1#6'TLabel'#17'AutoDelayMinLabel'#22'Anchor' +#6#17'AutoDelayMaxLabel'#11'ParentColor'#8#0#0#242#2#1#6'TLabel'#17'AutoDela'
+'SideLeft.Control'#7#5'Owner'#21'AnchorSideTop.Control'#7#17'AutoDelayTrackB' +'yMinLabel'#22'AnchorSideLeft.Control'#7#5'Owner'#21'AnchorSideTop.Control'#7
+'ar'#18'AnchorSideTop.Side'#7#9'asrBottom'#4'Left'#2#0#6'Height'#2#18#3'Top' +#17'AutoDelayTrackBar'#18'AnchorSideTop.Side'#7#9'asrBottom'#4'Left'#2#0#6'H'
+#3#182#0#5'Width'#3#128#0#17'BorderSpacing.Top'#2#2#7'Caption'#6#17'AutoDela' +'eight'#2#18#3'Top'#3#182#0#5'Width'#2'{'#17'BorderSpacing.Top'#2#2#7'Captio'
+'yMinLabel'#11'ParentColor'#8#0#0#242#2#2#6'TLabel'#14'AutoDelayLabel'#22'An' +'n'#6#17'AutoDelayMinLabel'#11'ParentColor'#8#0#0#242#2#2#6'TLabel'#14'AutoD'
+'chorSideLeft.Control'#7#5'Owner'#21'AnchorSideTop.Control'#7#17'AutoDelayTr' +'elayLabel'#22'AnchorSideLeft.Control'#7#5'Owner'#21'AnchorSideTop.Control'#7
+'ackBar'#18'AnchorSideTop.Side'#7#9'asrBottom'#4'Left'#2#0#6'Height'#2#18#3 +#17'AutoDelayTrackBar'#18'AnchorSideTop.Side'#7#9'asrBottom'#4'Left'#2#0#6'H'
+'Top'#3#204#0#5'Width'#2'h'#17'BorderSpacing.Top'#2#24#7'Caption'#6#14'AutoD' +'eight'#2#18#3'Top'#3#204#0#5'Width'#2'e'#17'BorderSpacing.Top'#2#24#7'Capti'
+'elayLabel'#11'ParentColor'#8#0#0#242#2#3#6'TLabel'#18'MarkupWordMinLabel'#22 +'on'#6#14'AutoDelayLabel'#11'ParentColor'#8#0#0#242#2#3#6'TLabel'#18'MarkupW'
+'AnchorSideLeft.Control'#7#5'Owner'#21'AnchorSideTop.Control'#7#22'MarkupWor' +'ordMinLabel'#22'AnchorSideLeft.Control'#7#5'Owner'#21'AnchorSideTop.Control'
+'dTimeTrackBar'#18'AnchorSideTop.Side'#7#9'asrBottom'#4'Left'#2#0#6'Height'#2 +#7#22'MarkupWordTimeTrackBar'#18'AnchorSideTop.Side'#7#9'asrBottom'#4'Left'#2
+#18#3'Top'#3'b'#1#5'Width'#3#180#0#17'BorderSpacing.Top'#2#2#7'Caption'#6#23 +#0#6'Height'#2#18#3'Top'#3'b'#1#5'Width'#3#171#0#17'BorderSpacing.Top'#2#2#7
+'MarkupWordDelayMinLabel'#11'ParentColor'#8#0#0#242#2#4#6'TLabel'#18'MarkupW' +'Caption'#6#23'MarkupWordDelayMinLabel'#11'ParentColor'#8#0#0#242#2#4#6'TLab'
+'ordMaxLabel'#21'AnchorSideTop.Control'#7#22'MarkupWordTimeTrackBar'#18'Anch' +'el'#18'MarkupWordMaxLabel'#21'AnchorSideTop.Control'#7#22'MarkupWordTimeTra'
+'orSideTop.Side'#7#9'asrBottom'#23'AnchorSideRight.Control'#7#5'Owner'#20'An' +'ckBar'#18'AnchorSideTop.Side'#7#9'asrBottom'#23'AnchorSideRight.Control'#7#5
+'chorSideRight.Side'#7#9'asrBottom'#4'Left'#3'4'#1#6'Height'#2#18#3'Top'#3'b' +'Owner'#20'AnchorSideRight.Side'#7#9'asrBottom'#4'Left'#3'='#1#6'Height'#2#18
+#1#5'Width'#3#184#0#9'Alignment'#7#14'taRightJustify'#7'Anchors'#11#5'akTop' +#3'Top'#3'b'#1#5'Width'#3#175#0#9'Alignment'#7#14'taRightJustify'#7'Anchors'
+#7'akRight'#0#17'BorderSpacing.Top'#2#2#7'Caption'#6#23'MarkupWordDelayMaxLa' +#11#5'akTop'#7'akRight'#0#17'BorderSpacing.Top'#2#2#7'Caption'#6#23'MarkupWo'
+'bel'#11'ParentColor'#8#0#0#242#2#5#6'TLabel'#20'MarkupWordDelayLabel'#22'An' +'rdDelayMaxLabel'#11'ParentColor'#8#0#0#242#2#5#6'TLabel'#20'MarkupWordDelay'
+'chorSideLeft.Control'#7#5'Owner'#21'AnchorSideTop.Control'#7#22'MarkupWordT' +'Label'#22'AnchorSideLeft.Control'#7#5'Owner'#21'AnchorSideTop.Control'#7#22
+'imeTrackBar'#18'AnchorSideTop.Side'#7#9'asrBottom'#4'Left'#2#0#6'Height'#2 +'MarkupWordTimeTrackBar'#18'AnchorSideTop.Side'#7#9'asrBottom'#4'Left'#2#0#6
+#18#3'Top'#3'x'#1#5'Width'#3#156#0#17'BorderSpacing.Top'#2#24#7'Caption'#6#20 +'Height'#2#18#3'Top'#3'x'#1#5'Width'#3#149#0#17'BorderSpacing.Top'#2#24#7'Ca'
+'MarkupWordDelayLabel'#11'ParentColor'#8#0#0#242#2#6#6'TLabel'#22'MarkupWord' +'ption'#6#20'MarkupWordDelayLabel'#11'ParentColor'#8#0#0#242#2#6#6'TLabel'#22
+'FullLenLabel'#22'AnchorSideLeft.Control'#7#22'MarkupWordFullCheckBox'#19'An' +'MarkupWordFullLenLabel'#22'AnchorSideLeft.Control'#7#22'MarkupWordFullCheck'
+'chorSideLeft.Side'#7#9'asrBottom'#21'AnchorSideTop.Control'#7#22'MarkupWord' +'Box'#19'AnchorSideLeft.Side'#7#9'asrBottom'#21'AnchorSideTop.Control'#7#22
+'FullCheckBox'#18'AnchorSideTop.Side'#7#9'asrCenter'#23'AnchorSideRight.Cont' +'MarkupWordFullCheckBox'#18'AnchorSideTop.Side'#7#9'asrCenter'#23'AnchorSide'
+'rol'#7#21'MarkupWordFullLenSpin'#4'Left'#3#239#0#6'Height'#2#18#3'Top'#3#2#1 +'Right.Control'#7#21'MarkupWordFullLenSpin'#4'Left'#3#230#0#6'Height'#2#18#3
+#5'Width'#3#164#0#18'BorderSpacing.Left'#2'-'#17'BorderSpacing.Top'#2#6#7'Ca' +'Top'#3#2#1#5'Width'#3#156#0#18'BorderSpacing.Left'#2'-'#17'BorderSpacing.To'
+'ption'#6#22'MarkupWordFullLenLabel'#11'ParentColor'#8#0#0#242#2#7#9'TCheckB' +'p'#2#6#7'Caption'#6#22'MarkupWordFullLenLabel'#11'ParentColor'#8#0#0#242#2#7
+'ox AutoIdentifierCompletionCheckBox'#22'AnchorSideLeft.Control'#7#5'Owner' +#9'TCheckBox AutoIdentifierCompletionCheckBox'#22'AnchorSideLeft.Control'#7#5
+#21'AnchorSideTop.Control'#7#5'Owner'#4'Left'#2#0#6'Height'#2#22#3'Top'#2#0#5 +'Owner'#21'AnchorSideTop.Control'#7#5'Owner'#4'Left'#2#0#6'Height'#2#22#3'To'
+'Width'#3#252#0#7'Caption'#6' AutoIdentifierCompletionCheckBox'#8'TabOrder'#2 +'p'#2#0#5'Width'#3#245#0#7'Caption'#6' AutoIdentifierCompletionCheckBox'#8'T'
+#0#0#0#242#2#8#9'TCheckBox'#28'AutoRemoveEmptyMethodsOnSave'#22'AnchorSideLe' +'abOrder'#2#0#0#0#242#2#8#9'TCheckBox'#28'AutoRemoveEmptyMethodsOnSave'#22'A'
+'ft.Control'#7#5'Owner'#21'AnchorSideTop.Control'#7' AutoIdentifierCompletio' +'nchorSideLeft.Control'#7#5'Owner'#21'AnchorSideTop.Control'#7' AutoIdentifi'
+'nCheckBox'#18'AnchorSideTop.Side'#7#9'asrBottom'#4'Left'#2#0#6'Height'#2#22 +'erCompletionCheckBox'#18'AnchorSideTop.Side'#7#9'asrBottom'#4'Left'#2#0#6'H'
+#3'Top'#2#28#5'Width'#3#255#0#17'BorderSpacing.Top'#2#6#7'Caption'#6#28'Auto' +'eight'#2#22#3'Top'#2#28#5'Width'#3#251#0#17'BorderSpacing.Top'#2#6#7'Captio'
+'RemoveEmptyMethodsOnSave'#8'TabOrder'#2#1#0#0#242#2#9#9'TCheckBox'#28'AutoT' +'n'#6#28'AutoRemoveEmptyMethodsOnSave'#8'TabOrder'#2#1#0#0#242#2#9#9'TCheckB'
+'oolTipSymbToolsCheckBox'#22'AnchorSideLeft.Control'#7#5'Owner'#21'AnchorSid' +'ox'#28'AutoToolTipSymbToolsCheckBox'#22'AnchorSideLeft.Control'#7#5'Owner'
+'eTop.Control'#7#28'AutoRemoveEmptyMethodsOnSave'#18'AnchorSideTop.Side'#7#9 +#21'AnchorSideTop.Control'#7#28'AutoRemoveEmptyMethodsOnSave'#18'AnchorSideT'
+'asrBottom'#4'Left'#2#0#6'Height'#2#22#3'Top'#2'8'#5'Width'#3#235#0#17'Borde' +'op.Side'#7#9'asrBottom'#4'Left'#2#0#6'Height'#2#22#3'Top'#2'8'#5'Width'#3
+'rSpacing.Top'#2#6#7'Caption'#6#28'AutoToolTipSymbToolsCheckBox'#8'TabOrder' +#227#0#17'BorderSpacing.Top'#2#6#7'Caption'#6#28'AutoToolTipSymbToolsCheckBo'
+#2#2#0#0#242#2#10#9'TCheckBox'#26'AutoCodeParametersCheckBox'#22'AnchorSideL' +'x'#8'TabOrder'#2#2#0#0#242#2#10#9'TCheckBox'#25'AutoCompleteBlockCheckBox'
+'eft.Control'#7#5'Owner'#21'AnchorSideTop.Control'#7#28'AutoToolTipSymbTools' +#22'AnchorSideLeft.Control'#7#5'Owner'#21'AnchorSideTop.Control'#7#28'AutoTo'
+'CheckBox'#18'AnchorSideTop.Side'#7#9'asrBottom'#4'Left'#2#0#6'Height'#2#22#3 +'olTipSymbToolsCheckBox'#18'AnchorSideTop.Side'#7#9'asrBottom'#4'Left'#2#0#6
+'Top'#2'T'#5'Width'#3#226#0#17'BorderSpacing.Top'#2#6#7'Caption'#6#26'AutoCo' +'Height'#2#22#3'Top'#2'T'#5'Width'#3#213#0#17'BorderSpacing.Top'#2#6#7'Capti'
+'deParametersCheckBox'#7'Enabled'#8#8'TabOrder'#2#3#0#0#242#2#11#9'TCheckBox' +'on'#6#25'AutoCompleteBlockCheckBox'#8'TabOrder'#2#3#0#0#242#2#11#9'TCheckBo'
+#27'AutoToolTipExprEvalCheckBox'#22'AnchorSideLeft.Control'#7#5'Owner'#21'An' +'x'#27'AutoToolTipExprEvalCheckBox'#22'AnchorSideLeft.Control'#7#5'Owner'#21
+'chorSideTop.Control'#7#26'AutoCodeParametersCheckBox'#18'AnchorSideTop.Side' +'AnchorSideTop.Control'#7#25'AutoCompleteBlockCheckBox'#18'AnchorSideTop.Sid'
+#7#9'asrBottom'#4'Left'#2#0#6'Height'#2#22#3'Top'#2'p'#5'Width'#3#222#0#17'B' +'e'#7#9'asrBottom'#4'Left'#2#0#6'Height'#2#22#3'Top'#2'p'#5'Width'#3#213#0#17
+'orderSpacing.Top'#2#6#7'Caption'#6#27'AutoToolTipExprEvalCheckBox'#8'TabOrd' +'BorderSpacing.Top'#2#6#7'Caption'#6#27'AutoToolTipExprEvalCheckBox'#8'TabOr'
+'er'#2#4#0#0#242#2#12#9'TTrackBar'#17'AutoDelayTrackBar'#22'AnchorSideLeft.C' +'der'#2#4#0#0#242#2#12#9'TTrackBar'#17'AutoDelayTrackBar'#22'AnchorSideLeft.'
+'ontrol'#7#5'Owner'#21'AnchorSideTop.Control'#7#27'AutoToolTipExprEvalCheckB' +'Control'#7#5'Owner'#21'AnchorSideTop.Control'#7#27'AutoToolTipExprEvalCheck'
+'ox'#18'AnchorSideTop.Side'#7#9'asrBottom'#23'AnchorSideRight.Control'#7#5'O' +'Box'#18'AnchorSideTop.Side'#7#9'asrBottom'#23'AnchorSideRight.Control'#7#5
+'wner'#20'AnchorSideRight.Side'#7#9'asrBottom'#4'Left'#2#0#6'Height'#2'('#3 +'Owner'#20'AnchorSideRight.Side'#7#9'asrBottom'#4'Left'#2#0#6'Height'#2'('#3
+'Top'#3#140#0#5'Width'#3#236#1#9'Frequency'#3#250#0#3'Max'#3#160#15#3'Min'#3 +'Top'#3#140#0#5'Width'#3#236#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 +#244#1#8'Position'#3#244#1#7'Anchors'#11#5'akTop'#6'akLeft'#7'akRight'#0#17
,'BorderSpacing.Top'#2#6#8'TabOrder'#2#5#0#0#242#2#13#9'TTrackBar'#22'MarkupW' ,'BorderSpacing.Top'#2#6#8'TabOrder'#2#5#0#0#242#2#13#9'TTrackBar'#22'MarkupW'
@ -75,24 +75,24 @@ LazarusResources.Add('TEditorCodetoolsOptionsFrame','FORMDATA',[
+#9'TCheckBox'#22'MarkupWordFullCheckBox'#22'AnchorSideLeft.Control'#7#5'Owne' +#9'TCheckBox'#22'MarkupWordFullCheckBox'#22'AnchorSideLeft.Control'#7#5'Owne'
+'r'#21'AnchorSideTop.Control'#7#25'MarkupWordNoTimerCheckBox'#18'AnchorSideT' +'r'#21'AnchorSideTop.Control'#7#25'MarkupWordNoTimerCheckBox'#18'AnchorSideT'
+'op.Side'#7#9'asrBottom'#4'Left'#2#0#6'Height'#2#22#3'Top'#3#0#1#5'Width'#3 +'op.Side'#7#9'asrBottom'#4'Left'#2#0#6'Height'#2#22#3'Top'#3#0#1#5'Width'#3
+#194#0#17'BorderSpacing.Top'#2#6#7'Caption'#6#22'MarkupWordFullCheckBox'#8'T' +#185#0#17'BorderSpacing.Top'#2#6#7'Caption'#6#22'MarkupWordFullCheckBox'#8'T'
+'abOrder'#2#7#0#0#242#2#15#9'TCheckBox'#19'MarkupWordNoKeyword'#22'AnchorSid' +'abOrder'#2#7#0#0#242#2#15#9'TCheckBox'#19'MarkupWordNoKeyword'#22'AnchorSid'
+'eLeft.Control'#7#5'Owner'#21'AnchorSideTop.Control'#7#22'MarkupWordFullChec' +'eLeft.Control'#7#5'Owner'#21'AnchorSideTop.Control'#7#22'MarkupWordFullChec'
+'kBox'#18'AnchorSideTop.Side'#7#9'asrBottom'#4'Left'#2#0#6'Height'#2#22#3'To' +'kBox'#18'AnchorSideTop.Side'#7#9'asrBottom'#4'Left'#2#0#6'Height'#2#22#3'To'
+'p'#3#28#1#5'Width'#3#180#0#17'BorderSpacing.Top'#2#6#7'Caption'#6#19'Markup' +'p'#3#28#1#5'Width'#3#172#0#17'BorderSpacing.Top'#2#6#7'Caption'#6#19'Markup'
+'WordNoKeyword'#8'TabOrder'#2#8#0#0#242#2#16#9'TSpinEdit'#21'MarkupWordFullL' +'WordNoKeyword'#8'TabOrder'#2#8#0#0#242#2#16#9'TSpinEdit'#21'MarkupWordFullL'
+'enSpin'#22'AnchorSideLeft.Control'#7#22'MarkupWordFullLenLabel'#19'AnchorSi' +'enSpin'#22'AnchorSideLeft.Control'#7#22'MarkupWordFullLenLabel'#19'AnchorSi'
+'deLeft.Side'#7#9'asrBottom'#21'AnchorSideTop.Control'#7#22'MarkupWordFullLe' +'deLeft.Side'#7#9'asrBottom'#21'AnchorSideTop.Control'#7#22'MarkupWordFullLe'
+'nLabel'#18'AnchorSideTop.Side'#7#9'asrCenter'#23'AnchorSideRight.Control'#7 +'nLabel'#18'AnchorSideTop.Side'#7#9'asrCenter'#23'AnchorSideRight.Control'#7
+#5'Owner'#20'AnchorSideRight.Side'#7#9'asrBottom'#4'Left'#3#153#1#6'Height'#2 +#5'Owner'#20'AnchorSideRight.Side'#7#9'asrBottom'#4'Left'#3#136#1#6'Height'#2
+#27#3'Top'#3#254#0#5'Width'#2'0'#8'AutoSize'#9#18'BorderSpacing.Left'#2#6#17 +#27#3'Top'#3#254#0#5'Width'#2'0'#18'BorderSpacing.Left'#2#6#17'BorderSpacing'
+'BorderSpacing.Top'#2#6#8'TabOrder'#2#9#0#0#242#2#17#9'TCheckBox'#25'MarkupW' +'.Top'#2#6#8'TabOrder'#2#9#0#0#242#2#17#9'TCheckBox'#25'MarkupWordNoTimerChe'
+'ordNoTimerCheckBox'#22'AnchorSideLeft.Control'#7#5'Owner'#21'AnchorSideTop.' +'ckBox'#22'AnchorSideLeft.Control'#7#5'Owner'#21'AnchorSideTop.Control'#7#14
+'Control'#7#14'AutoDelayLabel'#18'AnchorSideTop.Side'#7#9'asrBottom'#4'Left' +'AutoDelayLabel'#18'AnchorSideTop.Side'#7#9'asrBottom'#4'Left'#2#0#6'Height'
+#2#0#6'Height'#2#22#3'Top'#3#228#0#5'Width'#3#227#0#17'BorderSpacing.Top'#2#6 +#2#22#3'Top'#3#228#0#5'Width'#3#219#0#17'BorderSpacing.Top'#2#6#7'Caption'#6
+#7'Caption'#6#25'MarkupWordNoTimerCheckBox'#8'TabOrder'#2#10#0#0#242#2#18#9 +#25'MarkupWordNoTimerCheckBox'#8'TabOrder'#2#10#0#0#242#2#18#9'TCheckBox'#14
+'TCheckBox'#14'MarkupWordTrim'#22'AnchorSideLeft.Control'#7#22'MarkupWordFul' +'MarkupWordTrim'#22'AnchorSideLeft.Control'#7#22'MarkupWordFullLenLabel'#21
+'lLenLabel'#21'AnchorSideTop.Control'#7#19'MarkupWordNoKeyword'#4'Left'#3#239 +'AnchorSideTop.Control'#7#19'MarkupWordNoKeyword'#4'Left'#3#230#0#6'Height'#2
+#0#6'Height'#2#22#3'Top'#3#28#1#5'Width'#3#134#0#7'Caption'#6#14'MarkupWordT' +#22#3'Top'#3#28#1#5'Width'#3#128#0#7'Caption'#6#14'MarkupWordTrim'#8'TabOrde'
+'rim'#8'TabOrder'#2#11#0#0#0 +'r'#2#11#0#0#0
]); ]);

View File

@ -32,7 +32,7 @@ type
{ TEditorCodetoolsOptionsFrame } { TEditorCodetoolsOptionsFrame }
TEditorCodetoolsOptionsFrame = class(TAbstractIDEOptionsEditor) TEditorCodetoolsOptionsFrame = class(TAbstractIDEOptionsEditor)
AutoCodeParametersCheckBox: TCheckBox; AutoCompleteBlockCheckBox: TCheckBox;
AutoDelayLabel: TLabel; AutoDelayLabel: TLabel;
AutoDelayMaxLabel: TLabel; AutoDelayMaxLabel: TLabel;
AutoDelayMinLabel: TLabel; AutoDelayMinLabel: TLabel;
@ -73,7 +73,7 @@ end;
procedure TEditorCodetoolsOptionsFrame.Setup(ADialog: TAbstractOptionsEditorDialog); procedure TEditorCodetoolsOptionsFrame.Setup(ADialog: TAbstractOptionsEditorDialog);
begin begin
AutoIdentifierCompletionCheckBox.Caption := dlgEdIdComlet; AutoIdentifierCompletionCheckBox.Caption := dlgEdIdComlet;
AutoCodeParametersCheckBox.Caption := dlgEdCodeParams; AutoCompleteBlockCheckBox.Caption := dlgEdCompleteBlocks;
AutoToolTipExprEvalCheckBox.Caption := dlgTooltipEval; AutoToolTipExprEvalCheckBox.Caption := dlgTooltipEval;
AutoToolTipSymbToolsCheckBox.Caption := dlgTooltipTools; AutoToolTipSymbToolsCheckBox.Caption := dlgTooltipTools;
AutoRemoveEmptyMethodsOnSave.Caption := dlgAutoRemoveEmptyMethods; AutoRemoveEmptyMethodsOnSave.Caption := dlgAutoRemoveEmptyMethods;
@ -97,7 +97,7 @@ begin
with AOptions as TEditorOptions do with AOptions as TEditorOptions do
begin begin
AutoIdentifierCompletionCheckBox.Checked := AutoIdentifierCompletion; AutoIdentifierCompletionCheckBox.Checked := AutoIdentifierCompletion;
AutoCodeParametersCheckBox.Checked := AutoCodeParameters; AutoCompleteBlockCheckBox.Checked := AutoBlockCompletion;
AutoToolTipExprEvalCheckBox.Checked := AutoToolTipExprEval; AutoToolTipExprEvalCheckBox.Checked := AutoToolTipExprEval;
AutoToolTipSymbToolsCheckBox.Checked := AutoToolTipSymbTools; AutoToolTipSymbToolsCheckBox.Checked := AutoToolTipSymbTools;
AutoDelayTrackBar.Position := AutoDelayInMSec; AutoDelayTrackBar.Position := AutoDelayInMSec;
@ -116,7 +116,7 @@ begin
with AOptions as TEditorOptions do with AOptions as TEditorOptions do
begin begin
AutoIdentifierCompletion := AutoIdentifierCompletionCheckBox.Checked; AutoIdentifierCompletion := AutoIdentifierCompletionCheckBox.Checked;
AutoCodeParameters := AutoCodeParametersCheckBox.Checked; AutoBlockCompletion := AutoCompleteBlockCheckBox.Checked;
AutoToolTipExprEval := AutoToolTipExprEvalCheckBox.Checked; AutoToolTipExprEval := AutoToolTipExprEvalCheckBox.Checked;
AutoToolTipSymbTools := AutoToolTipSymbToolsCheckBox.Checked; AutoToolTipSymbTools := AutoToolTipSymbToolsCheckBox.Checked;
AutoDelayInMSec := AutoDelayTrackBar.Position; AutoDelayInMSec := AutoDelayTrackBar.Position;

View File

@ -1222,7 +1222,7 @@ resourcestring
dlgEdOff = 'Off'; dlgEdOff = 'Off';
dlgEdInvert = 'Invert'; dlgEdInvert = 'Invert';
dlgEdIdComlet = 'Identifier completion'; dlgEdIdComlet = 'Identifier completion';
dlgEdCodeParams = 'Code parameters'; dlgEdCompleteBlocks = 'Complete blocks';
dlgTooltipEval = 'Tooltip expression evaluation'; dlgTooltipEval = 'Tooltip expression evaluation';
dlgTooltipTools = 'Tooltip symbol Tools'; dlgTooltipTools = 'Tooltip symbol Tools';
dlgMarkupWordFull = 'Current Word match word boundaries'; dlgMarkupWordFull = 'Current Word match word boundaries';

View File

@ -1550,10 +1550,8 @@ begin
if AutoCompleteChar(aChar,AddChar,acoLineBreak) then ; if AutoCompleteChar(aChar,AddChar,acoLineBreak) then ;
//DebugLn(['TSourceEditor.ProcessCommand ecLineBreak AddChar=',AddChar]); //DebugLn(['TSourceEditor.ProcessCommand ecLineBreak AddChar=',AddChar]);
if not AddChar then Command:=ecNone; if not AddChar then Command:=ecNone;
{$IFDEF EnableCompleteBlock}
if EditorOpts.AutoBlockCompletion then if EditorOpts.AutoBlockCompletion then
AutoCompleteBlock; AutoCompleteBlock;
{$ENDIF}
end; end;
ecPrevBookmark: // Note: book mark commands lower than ecUserFirst must be handled here ecPrevBookmark: // Note: book mark commands lower than ecUserFirst must be handled here
@ -2342,10 +2340,21 @@ var
begin begin
if not LazarusIDE.SaveSourceEditorChangesToCodeCache(PageIndex) then exit; if not LazarusIDE.SaveSourceEditorChangesToCodeCache(PageIndex) then exit;
XY:=FEditor.LogicalCaretXY; XY:=FEditor.LogicalCaretXY;
if not CodeToolBoss.CompleteBlock(CodeBuffer,XY.X,XY.Y, FEditor.BeginUndoBlock;
NewCode,NewX,NewY,NewTopLine) then exit; try
if (NewCode<>CodeBuffer) or (NewX<>XY.X) or (NewY<>XY.Y) or (NewTopLine>0) if not CodeToolBoss.CompleteBlock(CodeBuffer,XY.X,XY.Y,
then ; NewCode,NewX,NewY,NewTopLine) then exit;
XY:=FEditor.LogicalCaretXY;
//DebugLn(['TSourceEditor.AutoCompleteBlock XY=',dbgs(XY),' NewX=',NewX,' NewY=',NewY]);
if (NewCode<>CodeBuffer) or (NewX<>XY.X) or (NewY<>XY.Y) or (NewTopLine>0)
then begin
XY.X:=NewX;
XY.Y:=NewY;
FEditor.LogicalCaretXY:=XY;
end;
finally
FEditor.EndUndoBlock;
end;
end; end;
Procedure TSourceEditor.CreateEditor(AOwner: TComponent; AParent: TWinControl); Procedure TSourceEditor.CreateEditor(AOwner: TComponent; AParent: TWinControl);