mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-10-24 23:11:47 +02:00
IDE: define template use default flag
git-svn-id: trunk@26286 -
This commit is contained in:
parent
bef96de901
commit
d0d753564d
@ -317,6 +317,8 @@ type
|
||||
procedure Unbind;
|
||||
procedure UnmarkNodes(WithSiblings, WithChilds: boolean);
|
||||
procedure WriteDebugReport(OnlyMarked: boolean);
|
||||
function GetNext: TDefineTemplate;
|
||||
function GetNextSkipChildren: TDefineTemplate;
|
||||
public
|
||||
property ChildCount: integer read FChildCount;
|
||||
property FirstChild: TDefineTemplate read FFirstChild;
|
||||
@ -2755,6 +2757,25 @@ begin
|
||||
WriteNode(Self,' ');
|
||||
end;
|
||||
|
||||
function TDefineTemplate.GetNext: TDefineTemplate;
|
||||
begin
|
||||
if FirstChild<>nil then
|
||||
exit(FirstChild);
|
||||
Result:=GetNextSkipChildren;
|
||||
end;
|
||||
|
||||
function TDefineTemplate.GetNextSkipChildren: TDefineTemplate;
|
||||
begin
|
||||
Result:=Self;
|
||||
while (Result<>nil) do begin
|
||||
if Result.Next<>nil then begin
|
||||
Result:=Result.Next;
|
||||
exit;
|
||||
end;
|
||||
Result:=Result.Parent;
|
||||
end;
|
||||
end;
|
||||
|
||||
function TDefineTemplate.HasDefines(OnlyMarked, WithSiblings: boolean): boolean;
|
||||
var
|
||||
CurTempl: TDefineTemplate;
|
||||
|
||||
@ -43,9 +43,9 @@ uses
|
||||
LazIDEIntf,
|
||||
// IDE
|
||||
LazarusIDEStrConsts, DialogProcs, IDEProcs, CodeToolsOptions, InputHistory,
|
||||
ProjectResources, MiscOptions, LazConf, EnvironmentOpts, TransferMacros,
|
||||
CompilerOptions, OutputFilter, Compiler, Project, BaseBuildManager,
|
||||
ApplicationBundle;
|
||||
EditDefineTree, ProjectResources, MiscOptions, LazConf, EnvironmentOpts,
|
||||
TransferMacros, CompilerOptions, OutputFilter, Compiler, Project,
|
||||
BaseBuildManager, ApplicationBundle;
|
||||
|
||||
type
|
||||
|
||||
@ -580,7 +580,7 @@ begin
|
||||
UnitLinksValid:=false;
|
||||
end;
|
||||
|
||||
FPCSrcTemplate:=CodeToolBoss.DefinePool.CreateFPCSrcTemplate(
|
||||
FPCSrcTemplate:=CreateFPCSourceTemplate(
|
||||
CodeToolBoss.GlobalValues.Variables[ExternalMacroStart+'FPCSrcDir'],
|
||||
CompilerUnitSearchPath,
|
||||
CodeToolBoss.GetCompiledSrcExtForDirectory(''),
|
||||
|
||||
@ -50,7 +50,8 @@ uses
|
||||
CodeToolManager, DefineTemplates,
|
||||
IDEWindowIntf, IDEImagesIntf,
|
||||
LazarusIDEStrConsts, CodeToolsOptions, CodeToolsDefPreview, TransferMacros,
|
||||
EditorOptions, InputFileDialog, IDEOptionDefs, LazConf, IDEProcs;
|
||||
EditorOptions, InputFileDialog, IDEOptionDefs, LazConf, IDEProcs,
|
||||
EditDefineTree;
|
||||
|
||||
type
|
||||
|
||||
@ -626,7 +627,7 @@ begin
|
||||
DebugLn(' FPCSrcDir="',FPCSrcDir,'"');
|
||||
if (FPCSrcDir<>'') and (FPCSrcDir<>DefaultFPCSrcDir)
|
||||
and (UnitSearchPath<>'') then
|
||||
FPCSrcTemplate:=Boss.DefinePool.CreateFPCSrcTemplate(FPCSrcDir,
|
||||
FPCSrcTemplate:=CreateFPCSourceTemplate(FPCSrcDir,
|
||||
UnitSearchPath, 'ppu', TargetOS, TargetProcessor, false,
|
||||
UnitLinkList, CodeToolsOpts)
|
||||
else
|
||||
@ -754,7 +755,7 @@ begin
|
||||
FPCSrcDir:=FileNames[0];
|
||||
if Macros<>nil then Macros.SubstituteStr(FPCSrcDir);
|
||||
DebugLn(' FPCSrcDir="',FPCSrcDir,'"');
|
||||
FPCSrcTemplate:=Boss.DefinePool.CreateFPCSrcTemplate(FPCSrcDir,
|
||||
FPCSrcTemplate:=CreateFPCSourceTemplate(FPCSrcDir,
|
||||
UnitSearchPath, 'ppu', TargetOS, TargetProcessor, false,
|
||||
UnitLinks, CodeToolsOpts);
|
||||
if FPCSrcTemplate=nil then begin
|
||||
@ -798,7 +799,7 @@ begin
|
||||
|
||||
EndUpdate;
|
||||
if ShowModal=mrCancel then exit;
|
||||
LazTemplate:=Boss.DefinePool.CreateLazarusSrcTemplate(FileNames[0],
|
||||
LazTemplate:=CreateLazarusSourceTemplate(FileNames[0],
|
||||
'$('+ExternalMacroStart+'LCLWidgetType)','',
|
||||
CodeToolsOpts);
|
||||
if LazTemplate=nil then exit;
|
||||
|
||||
@ -45,16 +45,18 @@ function FindRootTemplate(AName: string): TDefineTemplate;
|
||||
procedure SetAdditionalGlobalSrcPathToCodeToolBoss(const SrcPath: string);
|
||||
|
||||
// global defaults
|
||||
function FindNotUsedDirectoryTemplate: TDefineTemplate;
|
||||
function CreateNotUsedDirectoryTemplate: TDefineTemplate;
|
||||
function FindFallBackTemplate: TDefineTemplate;
|
||||
function CreateFallBackTemplate: TDefineTemplate;
|
||||
function FindUseDefaultsFlagTemplate: TDefineTemplate;
|
||||
function CreateUseDefaultsFlagTemplate: TDefineTemplate;
|
||||
procedure DisableDefaultsInDirectories(DefTempl: TDefineTemplate);
|
||||
|
||||
// FPC sources
|
||||
function CreateFPCSourceTemplate(const FPCSrcDir, UnitSearchPath, PPUExt,
|
||||
DefaultTargetOS, DefaultProcessorName: string;
|
||||
UnitLinkListValid: boolean; var UnitLinkList: string;
|
||||
Owner: TObject): TDefineTemplate;
|
||||
function CreateLazarusSourceTemplate(
|
||||
const LazarusSrcDir, WidgetType, ExtraOptions: string;
|
||||
Owner: TObject): TDefineTemplate;
|
||||
|
||||
// projects
|
||||
function FindProjectsTemplate: TDefineTemplate;
|
||||
@ -79,8 +81,9 @@ function RemoveAutoGeneratedDefine(ParentTemplate: TDefineTemplate;
|
||||
|
||||
|
||||
const
|
||||
NotUsedDirectoryFlagTemplName = 'DirectoryNotUsed';
|
||||
FallBackTemplName = 'FallBack';
|
||||
UseDefaultsFlagTemplName = 'Use defaults';
|
||||
UseDefaultsFlagName = ExternalMacroStart+'UseDefaults';
|
||||
NotUseDefaultsFlagTemplName = 'Do not use defaults';
|
||||
|
||||
ProjectDefTemplName = 'Current Project';
|
||||
ProjectDirDefTemplName = 'Current Project Directory';
|
||||
@ -128,7 +131,15 @@ begin
|
||||
UnitSearchPath, PPUExt,
|
||||
DefaultTargetOS, DefaultProcessorName,
|
||||
UnitLinkListValid, UnitLinkList, Owner);
|
||||
DisableDefaultsInDirectories(Result);
|
||||
end;
|
||||
|
||||
function CreateLazarusSourceTemplate(const LazarusSrcDir, WidgetType,
|
||||
ExtraOptions: string; Owner: TObject): TDefineTemplate;
|
||||
begin
|
||||
Result:=CodeToolBoss.DefinePool.CreateLazarusSrcTemplate(LazarusSrcDir,
|
||||
WidgetType, ExtraOptions, Owner);
|
||||
DisableDefaultsInDirectories(Result);
|
||||
end;
|
||||
|
||||
function FindProjectsTemplate: TDefineTemplate;
|
||||
@ -150,14 +161,15 @@ end;
|
||||
function CreateProjectsTemplate: TDefineTemplate;
|
||||
begin
|
||||
Result:=FindProjectsTemplate;
|
||||
if Result<>nil then exit;
|
||||
if Result<>nil then begin
|
||||
CodeToolBoss.DefineTree.MoveToLast(Result);
|
||||
exit;
|
||||
end;
|
||||
Result:=TDefineTemplate.Create(ProjectsDefTemplName, lisEdtDefsAllProjects,
|
||||
'', '', da_Block);
|
||||
Result.Flags:=[dtfAutoGenerated];
|
||||
// insert behind all
|
||||
CodeToolBoss.DefineTree.ReplaceRootSameName(Result);
|
||||
// make sure the fallback comes last
|
||||
CreateFallBackTemplate;
|
||||
end;
|
||||
|
||||
function CreateProjectTemplateWithID(const ProjectID: string): TDefineTemplate;
|
||||
@ -181,8 +193,8 @@ begin
|
||||
Result.Flags:=[dtfAutoGenerated];
|
||||
// insert behind all
|
||||
CodeToolBoss.DefineTree.ReplaceRootSameName(Result);
|
||||
// make sure the fallback comes last
|
||||
CreateFallBackTemplate;
|
||||
// move projects behind
|
||||
CreateProjectsTemplate;
|
||||
end;
|
||||
|
||||
function CreatePackageTemplateWithID(const PkgID: string): TDefineTemplate;
|
||||
@ -430,43 +442,35 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
function FindNotUsedDirectoryTemplate: TDefineTemplate;
|
||||
function FindUseDefaultsFlagTemplate: TDefineTemplate;
|
||||
begin
|
||||
Result:=FindRootTemplate(NotUsedDirectoryFlagTemplName);
|
||||
Result:=FindRootTemplate(UseDefaultsFlagTemplName);
|
||||
end;
|
||||
|
||||
function CreateNotUsedDirectoryTemplate: TDefineTemplate;
|
||||
function CreateUseDefaultsFlagTemplate: TDefineTemplate;
|
||||
begin
|
||||
Result:=FindNotUsedDirectoryTemplate;
|
||||
Result:=FindUseDefaultsFlagTemplate;
|
||||
if Result<>nil then exit;
|
||||
Result:=TDefineTemplate.Create(NotUsedDirectoryFlagTemplName, 'Not used directory flag',
|
||||
'', '', da_DefineRecurse);
|
||||
Result:=TDefineTemplate.Create(UseDefaultsFlagTemplName, 'Not used directory flag',
|
||||
UseDefaultsFlagName, '1', da_DefineRecurse);
|
||||
Result.Flags:=[dtfAutoGenerated];
|
||||
// insert in front of all
|
||||
CodeToolBoss.DefineTree.ReplaceRootSameNameAddFirst(Result);
|
||||
end;
|
||||
|
||||
function FindFallBackTemplate: TDefineTemplate;
|
||||
procedure DisableDefaultsInDirectories(DefTempl: TDefineTemplate);
|
||||
// add to each directory a template to undefine the UseDefaults flag
|
||||
begin
|
||||
Result:=FindRootTemplate(FallBackTemplName);
|
||||
end;
|
||||
|
||||
function CreateFallBackTemplate: TDefineTemplate;
|
||||
begin
|
||||
Result:=FindFallBackTemplate;
|
||||
if Result<>nil then begin
|
||||
// make sure it is at the end
|
||||
if Result.Next<>nil then
|
||||
CodeToolBoss.DefineTree.MoveToLast(Result);
|
||||
exit;
|
||||
while DefTempl<>nil do begin
|
||||
if DefTempl.Action=da_Directory then begin
|
||||
DefTempl.AddChild(TDefineTemplate.Create(NotUseDefaultsFlagTemplName,
|
||||
NotUseDefaultsFlagTemplName,UseDefaultsFlagName,'',da_UndefineRecurse));
|
||||
DefTempl:=DefTempl.GetNextSkipChildren;
|
||||
end else begin
|
||||
DefTempl:=DefTempl.GetNext;
|
||||
end;
|
||||
end;
|
||||
Result:=TDefineTemplate.Create(FallBackTemplName, 'Definitions for all other directories',
|
||||
'', '', da_Block);
|
||||
Result.Flags:=[dtfAutoGenerated];
|
||||
// insert behind all
|
||||
CodeToolBoss.DefineTree.ReplaceRootSameName(Result);
|
||||
end;
|
||||
|
||||
|
||||
end.
|
||||
|
||||
|
||||
@ -13365,8 +13365,7 @@ begin
|
||||
MainBuildBoss.GetFPCCompilerParamsForEnvironmentTest(
|
||||
MainBuildBoss.CurDefinesCompilerOptions);
|
||||
//DebugLn('TMainIDE.InitCodeToolBoss CurDefinesCompilerOptions="',CurDefinesCompilerOptions,'"');
|
||||
CreateNotUsedDirectoryTemplate;
|
||||
CreateFallBackTemplate;
|
||||
CreateUseDefaultsFlagTemplate;
|
||||
|
||||
ADefTempl:=CreateFPCTemplate(MainBuildBoss.CurDefinesCompilerFilename,
|
||||
MainBuildBoss.CurDefinesCompilerOptions,
|
||||
@ -13410,7 +13409,7 @@ begin
|
||||
|
||||
// create compiler macros for the lazarus sources
|
||||
SetupLazarusDirectory(InteractiveSetup);
|
||||
ADefTempl:=CreateLazarusSrcTemplate(
|
||||
ADefTempl:=CreateLazarusSourceTemplate(
|
||||
'$('+ExternalMacroStart+'LazarusDir)',
|
||||
'$('+ExternalMacroStart+'LCLWidgetType)',
|
||||
MiscellaneousOptions.BuildLazOpts.ExtraOptions,CodeToolsOpts);
|
||||
|
||||
@ -546,7 +546,7 @@ type
|
||||
private
|
||||
FActive: boolean;
|
||||
FSrcDirectories: TDefineTemplate;
|
||||
FSrcDirIfDef: TDefineTemplate;
|
||||
FSrcDirIf: TDefineTemplate;
|
||||
FFlags: TProjectDefineTemplatesFlags;
|
||||
FMain: TDefineTemplate;
|
||||
FOutputDir: TDefineTemplate;
|
||||
@ -584,7 +584,7 @@ type
|
||||
property SrcDirectories: TDefineTemplate read FSrcDirectories;
|
||||
property OutputDir: TDefineTemplate read FOutputDir;
|
||||
property OutPutSrcPath: TDefineTemplate read FOutPutSrcPath;
|
||||
property CustomDefines: TDefineTemplate read FSrcDirIfDef;
|
||||
property CustomDefines: TDefineTemplate read FSrcDirIf;
|
||||
property Active: boolean read FActive write SetActive;
|
||||
end;
|
||||
|
||||
@ -5628,7 +5628,7 @@ end;
|
||||
|
||||
procedure TProjectDefineTemplates.UpdateSrcDirIfDef;
|
||||
var
|
||||
NewValue: String;
|
||||
NewVariable: String;
|
||||
Changed: Boolean;
|
||||
UnitPathDefTempl: TDefineTemplate;
|
||||
IncPathDefTempl: TDefineTemplate;
|
||||
@ -5645,36 +5645,45 @@ begin
|
||||
da_Block);
|
||||
FMain.AddChild(FSrcDirectories);
|
||||
end;
|
||||
if FSrcDirIfDef=nil then begin
|
||||
FSrcDirIfDef:=TDefineTemplate.Create('Source Directory Additions',
|
||||
'Additional defines for project source directories',
|
||||
'#ProjectSrcMark'+Project.IDAsWord,'',
|
||||
da_IfDef);
|
||||
FMain.AddChild(FSrcDirIfDef);
|
||||
if FSrcDirIf=nil then begin
|
||||
if Project=nil then begin
|
||||
// ToDo: main project
|
||||
FSrcDirIf:=TDefineTemplate.Create('Source Directory Additions',
|
||||
'Additional defines for project source directories and all directories using defaults',
|
||||
'','$(#ProjectSrcMark'+Project.IDAsWord+')',
|
||||
da_If);
|
||||
end else begin
|
||||
// secondary projects
|
||||
FSrcDirIf:=TDefineTemplate.Create('Source Directory Additions',
|
||||
'Additional defines for project source directories',
|
||||
'#ProjectSrcMark'+Project.IDAsWord,'',
|
||||
da_IfDef);
|
||||
end;
|
||||
FMain.AddChild(FSrcDirIf);
|
||||
|
||||
// create unit path template for this directory
|
||||
UnitPathDefTempl:=TDefineTemplate.Create('UnitPath', lisPkgDefsUnitPath,
|
||||
'#UnitPath','$(#UnitPath);$ProjectUnitPath('+Project.IDAsString+')',
|
||||
da_Define);
|
||||
FSrcDirIfDef.AddChild(UnitPathDefTempl);
|
||||
FSrcDirIf.AddChild(UnitPathDefTempl);
|
||||
|
||||
// create include path template for this directory
|
||||
IncPathDefTempl:=TDefineTemplate.Create('IncPath','Include Path',
|
||||
'#IncPath','$(#IncPath);$ProjectIncPath('+Project.IDAsString+')',
|
||||
da_Define);
|
||||
FSrcDirIfDef.AddChild(IncPathDefTempl);
|
||||
FSrcDirIf.AddChild(IncPathDefTempl);
|
||||
|
||||
// create src path template for this directory
|
||||
SrcPathDefTempl:=TDefineTemplate.Create('SrcPath','Src Path',
|
||||
'#SrcPath','$(#SrcPath);$ProjectSrcPath('+Project.IDAsString+')',
|
||||
da_Define);
|
||||
FSrcDirIfDef.AddChild(SrcPathDefTempl);
|
||||
FSrcDirIf.AddChild(SrcPathDefTempl);
|
||||
|
||||
Changed:=true;
|
||||
end else begin
|
||||
NewValue:='#ProjectSrcMark'+Project.IDAsWord;
|
||||
if FSrcDirIfDef.Value<>NewValue then begin
|
||||
FSrcDirIfDef.Value:='#ProjectSrcMark'+Project.IDAsWord;
|
||||
NewVariable:='#ProjectSrcMark'+Project.IDAsWord;
|
||||
if FSrcDirIf.Variable<>NewVariable then begin
|
||||
FSrcDirIf.Variable:=NewVariable;
|
||||
Changed:=true;
|
||||
end;
|
||||
end;
|
||||
@ -5695,6 +5704,7 @@ begin
|
||||
);
|
||||
FOutputDir.SetDefineOwner(Project,false);
|
||||
FOutputDir.SetFlags([dtfAutoGenerated],[],false);
|
||||
DisableDefaultsInDirectories(FOutputDir);
|
||||
FMain.AddChild(FOutputDir);
|
||||
end else begin
|
||||
FOutputDir.Value:=Project.GetOutputDirectory;
|
||||
@ -5772,17 +5782,18 @@ begin
|
||||
|
||||
// build source directory define templates
|
||||
fLastSourceDirectories.Assign(NewSourceDirs);
|
||||
if (FSrcDirIfDef=nil) and (fLastSourceDirectories.Count>0) then
|
||||
if (FSrcDirIf=nil) and (fLastSourceDirectories.Count>0) then
|
||||
UpdateSrcDirIfDef;
|
||||
for i:=0 to fLastSourceDirectories.Count-1 do begin
|
||||
// create directory template
|
||||
SrcDirDefTempl:=TDefineTemplate.Create('Source Directory '+IntToStr(i+1),
|
||||
fLastSourceDirectories[i],'',fLastSourceDirectories[i],da_Directory);
|
||||
DisableDefaultsInDirectories(SrcDirDefTempl);
|
||||
fLastSourceDirectories.Objects[i]:=SrcDirDefTempl;
|
||||
// add project source directory marker
|
||||
SrcDirMarkDefTempl:=TDefineTemplate.Create('ProjectSrcDirMark',
|
||||
lisProjProjectSourceDirectoryMark, '#ProjectSrcMark'+Project.IDAsWord,
|
||||
'',
|
||||
'1',
|
||||
da_Define);
|
||||
SrcDirDefTempl.AddChild(SrcDirMarkDefTempl);
|
||||
|
||||
@ -5816,13 +5827,13 @@ begin
|
||||
'Custom Options',FLastCustomOptions,false,Project);
|
||||
if OptionsDefTempl=nil then begin
|
||||
// no custom options -> delete old template
|
||||
if FSrcDirIfDef<>nil then begin
|
||||
if FSrcDirIfDef.DeleteChild('Custom Options') then
|
||||
if FSrcDirIf<>nil then begin
|
||||
if FSrcDirIf.DeleteChild('Custom Options') then
|
||||
Changed:=true;
|
||||
end;
|
||||
end else begin
|
||||
UpdateSrcDirIfDef;
|
||||
FSrcDirIfDef.ReplaceChild(OptionsDefTempl);
|
||||
FSrcDirIf.ReplaceChild(OptionsDefTempl);
|
||||
Changed:=true;
|
||||
end;
|
||||
if Changed then
|
||||
@ -5848,7 +5859,7 @@ begin
|
||||
if (CodeToolBoss<>nil) then
|
||||
CodeToolBoss.DefineTree.RemoveDefineTemplate(FMain);
|
||||
FMain:=nil;
|
||||
FSrcDirIfDef:=nil;
|
||||
FSrcDirIf:=nil;
|
||||
FSrcDirectories:=nil;
|
||||
FOutPutSrcPath:=nil;
|
||||
FOutputDir:=nil;
|
||||
|
||||
@ -3983,6 +3983,7 @@ begin
|
||||
);
|
||||
FOutputDir.SetDefineOwner(LazPackage,false);
|
||||
FOutputDir.SetFlags([dtfAutoGenerated],[],false);
|
||||
DisableDefaultsInDirectories(FOutputDir);
|
||||
FMain.AddChild(FOutputDir);
|
||||
end else begin
|
||||
FOutputDir.Value:=LazPackage.GetOutputDirectory;
|
||||
@ -4065,6 +4066,7 @@ begin
|
||||
// create directory template
|
||||
SrcDirDefTempl:=TDefineTemplate.Create('Source Directory '+IntToStr(i+1),
|
||||
fLastSourceDirectories[i],'',fLastSourceDirectories[i],da_Directory);
|
||||
DisableDefaultsInDirectories(SrcDirDefTempl);
|
||||
fLastSourceDirectories.Objects[i]:=SrcDirDefTempl;
|
||||
// add package source directory marker
|
||||
SrcDirMarkDefTempl:=TDefineTemplate.Create('PkgSrcDirMark',
|
||||
|
||||
Loading…
Reference in New Issue
Block a user