IDE: Improve setting cursor position in new programs. Issue #32089, patch by n7800.

This commit is contained in:
Juha 2024-04-06 09:24:16 +03:00
parent eb480b51d8
commit 1580d1778e

View File

@ -58,6 +58,8 @@ type
{ TProjectConsoleApplicationDescriptor } { TProjectConsoleApplicationDescriptor }
TProjectConsoleApplicationDescriptor = class(TProjectDescriptor) TProjectConsoleApplicationDescriptor = class(TProjectDescriptor)
protected
FCaretPos: TPoint;
public public
constructor Create; override; constructor Create; override;
function GetLocalizedName: string; override; function GetLocalizedName: string; override;
@ -102,6 +104,16 @@ type
implementation implementation
procedure SetCaretPosInActiveEditor(aPos: TPoint);
begin
if assigned(SourceEditorManager.ActiveEditor) then
with SourceEditorManager.ActiveEditor.EditorComponent do
begin
MoveCaretIgnoreEOL(aPos);
TopLine:=aPos.Y-LinesInWindow div 2;
end;
end;
{ TProjectApplicationDescriptor } { TProjectApplicationDescriptor }
constructor TProjectApplicationDescriptor.Create; constructor TProjectApplicationDescriptor.Create;
@ -225,9 +237,7 @@ function TProjectSimpleProgramDescriptor.CreateStartFiles(AProject: TLazProject)
begin begin
Result:=LazarusIDE.DoOpenEditorFile(AProject.MainFile.Filename,-1,-1, Result:=LazarusIDE.DoOpenEditorFile(AProject.MainFile.Filename,-1,-1,
[ofProjectLoading,ofRegularFile]); [ofProjectLoading,ofRegularFile]);
// set caret position SetCaretPosInActiveEditor(Point(3,3));
if Assigned(SourceEditorManager.ActiveEditor) then
SourceEditorManager.ActiveEditor.EditorComponent.LogicalCaretXY:=Point(3,3);
end; end;
{ TProjectProgramDescriptor } { TProjectProgramDescriptor }
@ -288,9 +298,7 @@ function TProjectProgramDescriptor.CreateStartFiles(AProject: TLazProject): TMod
begin begin
Result:=LazarusIDE.DoOpenEditorFile(AProject.MainFile.Filename,-1,-1, Result:=LazarusIDE.DoOpenEditorFile(AProject.MainFile.Filename,-1,-1,
[ofProjectLoading,ofRegularFile]); [ofProjectLoading,ofRegularFile]);
// set caret position SetCaretPosInActiveEditor(Point(3,13));
if Assigned(SourceEditorManager.ActiveEditor) then
SourceEditorManager.ActiveEditor.EditorComponent.LogicalCaretXY:=Point(3,13);
end; end;
{ TProjectManualProgramDescriptor } { TProjectManualProgramDescriptor }
@ -356,9 +364,7 @@ begin
begin begin
Result:=LazarusIDE.DoOpenEditorFile(AProject.MainFile.Filename,-1,-1, Result:=LazarusIDE.DoOpenEditorFile(AProject.MainFile.Filename,-1,-1,
[ofProjectLoading,ofRegularFile]); [ofProjectLoading,ofRegularFile]);
// set caret position SetCaretPosInActiveEditor(Point(3,10));
if Assigned(SourceEditorManager.ActiveEditor) then
SourceEditorManager.ActiveEditor.EditorComponent.LogicalCaretXY:=Point(3,10);
end end
else else
Result:=mrCancel; Result:=mrCancel;
@ -380,6 +386,7 @@ begin
Name:=ProjDescNameConsoleApplication; Name:=ProjDescNameConsoleApplication;
Flags:=Flags-[pfMainUnitHasCreateFormStatements,pfMainUnitHasTitleStatement,pfMainUnitHasScaledStatement] Flags:=Flags-[pfMainUnitHasCreateFormStatements,pfMainUnitHasTitleStatement,pfMainUnitHasScaledStatement]
+[pfUseDefaultCompilerOptions]; +[pfUseDefaultCompilerOptions];
FCaretPos := Point(1,1);
end; end;
function TProjectConsoleApplicationDescriptor.GetLocalizedName: string; function TProjectConsoleApplicationDescriptor.GetLocalizedName: string;
@ -482,9 +489,10 @@ begin
NewSource.Add(' Terminate;'); NewSource.Add(' Terminate;');
NewSource.Add(' Exit;'); NewSource.Add(' Exit;');
NewSource.Add(' end;'); NewSource.Add(' end;');
NewSource.Add('');
end; end;
NewSource.Add(''); NewSource.Add('');
NewSource.Add(' { add your program here }'); FCaretPos := Point(3,NewSource.Count); // remember position for move the caret
NewSource.Add(''); NewSource.Add('');
NewSource.Add(' // stop program loop'); NewSource.Add(' // stop program loop');
NewSource.Add(' Terminate;'); NewSource.Add(' Terminate;');
@ -540,6 +548,7 @@ function TProjectConsoleApplicationDescriptor.CreateStartFiles(
begin begin
Result:=LazarusIDE.DoOpenEditorFile(AProject.MainFile.Filename,-1,-1, Result:=LazarusIDE.DoOpenEditorFile(AProject.MainFile.Filename,-1,-1,
[ofProjectLoading,ofRegularFile]); [ofProjectLoading,ofRegularFile]);
SetCaretPosInActiveEditor(FCaretPos);
end; end;
{ TProjectLibraryDescriptor } { TProjectLibraryDescriptor }
@ -600,9 +609,7 @@ function TProjectLibraryDescriptor.CreateStartFiles(AProject: TLazProject): TMod
begin begin
Result:=LazarusIDE.DoOpenEditorFile(AProject.MainFile.Filename,-1,-1, Result:=LazarusIDE.DoOpenEditorFile(AProject.MainFile.Filename,-1,-1,
[ofProjectLoading,ofRegularFile]); [ofProjectLoading,ofRegularFile]);
// set caret position SetCaretPosInActiveEditor(Point(3,10));
if Assigned(SourceEditorManager.ActiveEditor) then
SourceEditorManager.ActiveEditor.EditorComponent.LogicalCaretXY:=Point(3,10);
end; end;
end. end.