IDE: Move adding default initial recent projects out from EnvironmentOptions.

This commit is contained in:
Juha 2023-06-19 21:30:10 +03:00
parent 967034aff5
commit b99f4dc28d
6 changed files with 46 additions and 37 deletions

View File

@ -376,7 +376,7 @@ end;
constructor TBuildManager.Create(AOwner: TComponent);
begin
EnvironmentOptions := TEnvironmentOptions.Create(Application.ExeName);
EnvironmentOptions := TEnvironmentOptions.Create;
IDEEnvironmentOptions := EnvironmentOptions;
EnvironmentOptions.IsGlobalMode:=@EnvironmentOptionsIsGlobalMode;

View File

@ -286,7 +286,7 @@ begin
AFilename:=SaveDialog.Filename;
if ExtractFileExt(AFilename)='' then
AFilename:=AFilename+'.lds';
AnEnvironmentOptions := TEnvironmentOptions.Create(Application.ExeName);
AnEnvironmentOptions := TEnvironmentOptions.Create;
try
AnEnvironmentOptions.Filename := AFilename;
DoSaveSettings(AnEnvironmentOptions);
@ -323,7 +323,7 @@ begin
+'|'+dlgFilterAll+' ('+GetAllFilesMask+')|' + GetAllFilesMask;
if OpenDialog.Execute then
begin
AnEnvironmentOptions := TEnvironmentOptions.Create(Application.ExeName);
AnEnvironmentOptions := TEnvironmentOptions.Create;
try
AnEnvironmentOptions.Filename := OpenDialog.Filename;
AnEnvironmentOptions.Load(true);

View File

@ -1219,6 +1219,7 @@
<Unit>
<Filename Value="helpoptions.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="HelpOptions"/>
</Unit>
<Unit>
<Filename Value="findinfilesdlg.pas"/>

View File

@ -1248,8 +1248,9 @@ begin
CreateConfig;
Load(false);
end;
AddDefaultRecentProjects; // Add some initial recent projects.
// read language and lazarusdir paramters, needed for translation
// read language and lazarusdir parameters, needed for translation
if Application.HasOption('language') then
begin
debugln('Hint: (lazarus) [TMainIDE.LoadGlobalOptions] overriding language with command line: ',

View File

@ -247,7 +247,6 @@ type
TEnvironmentOptions = class(TIDEEnvironmentOptions)
private
FExePath: string; // ExtractFilePath(Application.ExeName)
FFppkgCheck: boolean;
fRegisteredSubConfig: TObjectList;
// config file
@ -307,7 +306,7 @@ type
FNewProjectTemplateAtStart: string;
FMultipleInstances: TIDEMultipleInstancesOption;
// Prevent repopulating Recent project files menu with example projects if it was already cleared up.
FAlreadyPopulatedRecentFiles : Boolean;
FAlreadyPopulatedRecentFiles: Boolean;
//other recent settings
FLastEventMethodCCResult: TCodeCreationDlgResult;
FLastVariableCCResult: TCodeCreationDlgResult;
@ -371,7 +370,7 @@ type
function SubConfigCount: integer;
property SubConfig[Index: Integer]: TIDESubOptions read GetSubConfig;
public
constructor Create(AExeName: string);
constructor Create;
destructor Destroy; override;
procedure Load(OnlyDesktop: boolean);
procedure Save(OnlyDesktop: boolean);
@ -477,8 +476,8 @@ type
write FNewProjectTemplateAtStart;
property MultipleInstances: TIDEMultipleInstancesOption read FMultipleInstances
write FMultipleInstances;
property FileDialogFilter: string read FFileDialogFilter write FFileDialogFilter;
property AlreadyPopulatedRecentFiles: Boolean read FAlreadyPopulatedRecentFiles
write FAlreadyPopulatedRecentFiles;
// other recent settings
property LastEventMethodCCResult: TCodeCreationDlgResult
read FLastEventMethodCCResult write FLastEventMethodCCResult;
@ -516,8 +515,9 @@ type
// comboboxes
property DropDownCount: Integer read FDropDownCount write FDropDownCount;
// default template for each 'new item' category: Name=Path, Value=TemplateName
property NewUnitTemplate: string read FNewUnitTemplate write FNewUnitTemplate;
property NewFormTemplate: string read FNewFormTemplate write FNewFormTemplate;
property NewUnitTemplate: string read FNewUnitTemplate write FNewUnitTemplate;
property FileDialogFilter: string read FFileDialogFilter write FFileDialogFilter;
end;
var
@ -658,12 +658,11 @@ end;
{ TEnvironmentOptions }
constructor TEnvironmentOptions.Create(AExeName: string);
constructor TEnvironmentOptions.Create;
var
o: TEnvOptParseType;
begin
inherited Create;
FExePath := ExtractFilePath(AExeName);
fRegisteredSubConfig := TObjectList.Create(False);
for o:=low(FParseValues) to high(FParseValues) do
FParseValues[o].ParseStamp:=CTInvalidChangeStamp;
@ -943,18 +942,6 @@ end;
procedure TEnvironmentOptions.Load(OnlyDesktop: boolean);
procedure AddRecentProjectInitial(aProjPath, aProjFile: string);
// Add a project to the list of recent projects if the project has write access.
// The check can be removed when the IDE allows compiling read-only projects.
var
WholeFilePath: String;
begin
aProjPath:=SwitchPathDelims(aProjPath, True);
WholeFilePath:=FExePath + aProjPath + aProjFile;
if FileIsWritable(aProjPath) and FileIsWritable(WholeFilePath) then
AddToRecentList(WholeFilePath,FRecentProjectFiles,FMaxRecentProjectFiles,rltFile);
end;
procedure LoadPascalFileExt(const Path: string);
begin
fPascalFileExtension:=PascalExtToType(FXMLCfg.GetValue(
@ -971,7 +958,7 @@ procedure TEnvironmentOptions.Load(OnlyDesktop: boolean);
CCResult.Location:=CreateCodeLocationNameToLocation(FXMLCfg.GetValue(
Path+'/Location',CreateCodeLocationNames[cclLocal]));
end;
var
Path, CurPath: String;
i: Integer;
@ -1052,16 +1039,6 @@ begin
FUseUnitDlgOptions.AllUnits:=FXMLCfg.GetValue(Path+'Recent/UseUnitDlg/AllUnits',False);
FUseUnitDlgOptions.AddToImplementation:=FXMLCfg.GetValue(Path+'Recent/UseUnitDlg/AddToImplementation',False);
// Add example projects to an empty project list if examples have write access
if (FRecentProjectFiles.count=0) and (not FAlreadyPopulatedRecentFiles) then begin
AddRecentProjectInitial('examples/jpeg/', 'jpegexample.lpi');
AddRecentProjectInitial('examples/sprites/', 'spriteexample.lpi');
AddRecentProjectInitial('examples/openglcontrol/', 'openglcontrol_demo.lpi');
AddRecentProjectInitial('examples/imagelist/', 'project1.lpi');
AddRecentProjectInitial('examples/', 'hello.lpi');
FAlreadyPopulatedRecentFiles := True;
end;
// external tools
if Assigned(fExternalUserTools) then
fExternalUserTools.Load(FConfigStore,Path+'ExternalTools/');

View File

@ -32,7 +32,7 @@ unit SourceFileManager;
interface
uses
Classes, SysUtils, typinfo, math, fpjson, Laz_AVL_Tree,
Classes, SysUtils, TypInfo, Math, fpjson, Laz_AVL_Tree,
// LCL
Controls, Forms, Dialogs, LCLIntf, LCLType, LclStrConsts,
LResources, LCLMemManager,
@ -52,7 +52,7 @@ uses
IdeIntfStrConsts, ObjectInspector, SrcEditorIntf, EditorSyntaxHighlighterDef,
UnitResources, ComponentReg, InputHistory,
// IdeConfig
EnvironmentOpts, SearchPathProcs, TransferMacros,
EnvironmentOpts, SearchPathProcs, TransferMacros, RecentListProcs,
// IDE
IDEProcs, DialogProcs, IDEProtocol, LazarusIDEStrConsts, NewDialog,
NewProjectDlg, MainBase, MainBar, MainIntf, Project, ProjectDefs,
@ -223,6 +223,7 @@ function FindSourceFileImpl(const AFilename, BaseDirectory: string;
function FindUnitsOfOwnerImpl(TheOwner: TObject; Flags: TFindUnitsOfOwnerFlags): TStrings;
// project
function AddActiveUnitToProject: TModalResult;
procedure AddDefaultRecentProjects;
function AddUnitToProject(const AEditor: TSourceEditorInterface): TModalResult;
function RemoveFromProjectDialog: TModalResult;
function InitNewProject(ProjectDesc: TProjectDescriptor): TModalResult;
@ -1773,6 +1774,35 @@ begin
Result := AddUnitToProject(nil);
end;
procedure AddRecentProject(aProjPath, aProjFile: string);
// Add a project to the list of recent projects if the project has write access.
// The check can be removed when the IDE allows compiling read-only projects.
var
WholeFilePath: String;
begin
aProjPath := SwitchPathDelims(aProjPath, True);
WholeFilePath := ExtractFilePath(Application.ExeName) + aProjPath + aProjFile;
if FileIsWritable(aProjPath) and FileIsWritable(WholeFilePath) then
with EnvironmentOptions do
AddToRecentList(WholeFilePath, RecentProjectFiles, MaxRecentProjectFiles, rltFile);
end;
procedure AddDefaultRecentProjects;
begin
// Add some example projects to an empty project list.
with EnvironmentOptions do
if (RecentProjectFiles.Count=0) and not AlreadyPopulatedRecentFiles then
begin
DebugLn('AddDefaultRecentProjects: Adding default projects');
AddRecentProject('examples/jpeg/', 'jpegexample.lpi');
AddRecentProject('examples/sprites/', 'spriteexample.lpi');
AddRecentProject('examples/openglcontrol/', 'openglcontrol_demo.lpi');
AddRecentProject('examples/imagelist/', 'project1.lpi');
AddRecentProject('examples/', 'hello.lpi');
AlreadyPopulatedRecentFiles := True;
end;
end;
function AddUnitToProject(const AEditor: TSourceEditorInterface): TModalResult;
var
ActiveSourceEditor: TSourceEditor;