project groups: started loading build modes

git-svn-id: trunk@50428 -
This commit is contained in:
mattias 2015-11-19 23:31:50 +00:00
parent 71bb489d46
commit 42f2cc6200
4 changed files with 93 additions and 25 deletions

View File

@ -28,10 +28,13 @@ type
TIDECompileTarget = class(TPGCompileTarget)
private
FBuildModes: TObjectList;
FFiles: TStringList;
FRequiredPackages: TObjectList; // list of TPGDependency
function CompileUsingLazBuild(const AAction: TPGTargetAction): TPGActionResult;
protected
function GetBuildModeCount: integer; override;
function GetBuildModes(Index: integer): TPGBuildMode; override;
function GetFileCount: integer; override;
function GetFiles(Index: integer): string; override;
function GetRequiredPackageCount: integer; override;
@ -724,6 +727,7 @@ begin
Target:=AddTarget(TargetFileName);
if pgloLoadRecursively in Options then
(Target as TIDECompileTarget).LoadTarget(true);
// ToDo: load buildmode flags
end
else if (pgloRemoveInvalid in Options) then
begin
@ -835,6 +839,8 @@ procedure TIDECompileTarget.UnLoadTarget;
begin
if (FProjectGroup<>nil) and not (Self is TRootProjectGroupTarget) then
FreeAndNil(FProjectGroup);
if FBuildModes<>nil then
FreeAndNil(FBuildModes);
if FFiles<>nil then
FreeAndNil(FFiles);
if FRequiredPackages<>nil then
@ -916,6 +922,19 @@ begin
end;
end;
function TIDECompileTarget.GetBuildModeCount: integer;
begin
if FBuildModes=nil then
Result:=0
else
Result:=FBuildModes.Count;
end;
function TIDECompileTarget.GetBuildModes(Index: integer): TPGBuildMode;
begin
Result:=TPGBuildMode(FBuildModes[Index]);
end;
function TIDECompileTarget.GetFileCount: integer;
begin
if FFiles=nil then
@ -1007,12 +1026,13 @@ var
ProjFile: TLazProjectFile;
PkgList: TFPList;
Pkg: TIDEPackage;
PkgName, Path, SubPath, CurFilename, BaseDir: String;
PkgName, Path, SubPath, CurFilename, BaseDir, BuildMode: String;
xml: TXMLConfig;
begin
if FFiles<>nil then exit; // already loaded
debugln(['TIDECompileTarget.LoadProject ',Filename]);
//debugln(['TIDECompileTarget.LoadProject ',Filename]);
FBuildModes:=TObjectList.Create(True);
FFiles:=TStringList.Create;
FRequiredPackages:=TObjectList.Create(True);
@ -1070,6 +1090,17 @@ begin
if PkgName='' then continue;
FRequiredPackages.Add(TPGDependency.Create(PkgName));
end;
// load build modes
Path:='ProjectOptions/BuildModes/';
Cnt:=xml.GetValue(Path+'Count',0);
for i:=1 to Cnt do begin
SubPath:=Path+'Item'+IntToStr(i)+'/';
BuildMode:=xml.GetValue(SubPath+'Name','');
// ToDo: load/store compile in lpg
if BuildMode<>'' then
FBuildModes.Add(TPGBuildMode.Create(BuildMode,false));
end;
end;
finally
xml.Free;

View File

@ -18,26 +18,29 @@ uses
LazLogger, ProjectGroupStrConst, ProjectGroup;
type
TNodeType = (ntUnknown,
ntProjectGroup,
ntTargets,
ntRemovedTargets,
ntTarget,
ntRemovedTarget,
ntFiles,
ntFile,
//ntRemovedFiles,
//ntRemovedFile,
ntDependencies,
ntDependency
//ntRemovedDependencies,
//ntRemovedDependency
);
TNodeType = (
ntUnknown,
ntProjectGroup,
ntTargets,
ntRemovedTargets,
ntTarget,
ntRemovedTarget,
ntBuildModes,
ntBuildMode,
ntFiles,
ntFile,
//ntRemovedFiles,
//ntRemovedFile,
ntDependencies,
ntDependency
//ntRemovedDependencies,
//ntRemovedDependency
);
TNodeData = class(TObject)
NodeType: TNodeType;
Target, ParentTarget: TPGCompileTarget;
Value: string; // ntFile = Filename, ntDependency = PkgName
Value: string; // ntFile = Filename, ntDependency = PkgName, ntBuildMode = BuildMode name
end;
TTargetNodes = Array[Boolean] of TTreeNode;
@ -208,6 +211,8 @@ var
NIRemovedTargetProject : integer = 3;
NIRemovedTargetPackage : integer = 4;
NIRemovedTargetProjectGroup: integer = 5;
NIBuildModes : integer = 16;
NIBuildMode : integer = 17;
NIFiles : integer = 16;
NIFile : integer = 17;
//NIRemovedFiles : integer = 18;
@ -540,7 +545,6 @@ begin
PG.Perform(ND.Target,taOpen);
end;
end;
ntFiles: ;
ntFile:
begin
// open file in source editor
@ -844,7 +848,8 @@ begin
end;
end;
function TProjectGroupEditorForm.GetNodeIndex(ANodeType: TNodeType; ANodeData: TPGCompileTarget): Integer;
function TProjectGroupEditorForm.GetNodeIndex(ANodeType: TNodeType;
ANodeData: TPGCompileTarget): Integer;
begin
Case ANodeType of
ntProjectGroup: Result:=NIProjectGroup;
@ -862,6 +867,8 @@ begin
ttPackage: Result:=NIRemovedTargetPackage;
ttProjectGroup: Result:=NIRemovedTargetProjectGroup;
end;
ntBuildModes: Result:=NIBuildModes;
ntBuildMode: Result:=NIBuildMode;
ntFiles: Result:=NIFiles;
ntFile: Result:=NIFile;
//ntRemovedFiles: Result:=NIRemovedFiles;
@ -1187,16 +1194,25 @@ end;
procedure TProjectGroupEditorForm.FillProjectNode(AParent: TTreeNode;
T: TPGCompileTarget);
Var
PF,PD: TTargetNodes;
FileNodes,DepNodes: TTargetNodes;
i: Integer;
BuildModeNode: TTreeNode;
begin
TVPG.BeginUpdate;
try
PF[False]:=CreateSectionNode(AParent,lisNodeFiles,ntFiles);
PF[True]:=nil; //CreateNode(AParent,lisNodeRemovedFiles,ntFiles,Nil,AProjectGroup);
// buildmodes
if T.BuildModeCount>0 then begin
BuildModeNode:=CreateSectionNode(AParent,lisNodeBuildModes,ntBuildModes);
for i:=0 to T.BuildModeCount-1 do
CreateSubNode(BuildModeNode,ntBuildMode,T,T.BuildModes[i].Name);
end;
// files
FileNodes[False]:=CreateSectionNode(AParent,lisNodeFiles,ntFiles);
FileNodes[True]:=nil; //CreateNode(AParent,lisNodeRemovedFiles,ntFiles,Nil,AProjectGroup);
for i:=0 to T.FileCount-1 do
CreateSubNode(PF[False],ntFile,T,T.Files[i]);
ShowDependencies(AParent,T,PD);
CreateSubNode(FileNodes[False],ntFile,T,T.Files[i]);
// dependencies
ShowDependencies(AParent,T,DepNodes);
// TODO: Build mode info Not available ?
finally
TVPG.EndUpdate;

View File

@ -37,6 +37,14 @@ Type
TProjectGroup = class;
{ TPGBuildMode }
TPGBuildMode = class
Name: string;
Compile: boolean;
constructor Create(const aName: string; aCompile: boolean);
end;
{ TPGDependency }
TPGDependency = class
@ -57,6 +65,8 @@ Type
FParent: TPGCompileTarget;
FProjectGroup: TProjectGroup;
function GetAllowedActions: TPGTargetActions; virtual; // By default, return all allowed actions for target type.
function GetBuildModeCount: integer; virtual; abstract;
function GetBuildModes(Index: integer): TPGBuildMode; virtual; abstract;
function GetFileCount: integer; virtual; abstract;
function GetFiles(Index: integer): string; virtual; abstract;
function GetRequiredPackageCount: integer; virtual; abstract;
@ -85,6 +95,8 @@ Type
property AllowedActions: TPGTargetActions Read GetAllowedActions;
//
property ProjectGroup: TProjectGroup read FProjectGroup; // set if TargetType is ttProjectGroup
property BuildModes[Index: integer]: TPGBuildMode read GetBuildModes;
property BuildModeCount: integer read GetBuildModeCount;
property Files[Index: integer]: string read GetFiles;
property FileCount: integer read GetFileCount;
property RequiredPackages[Index: integer]: TPGDependency read GetRequiredPackages;
@ -226,6 +238,14 @@ begin
Result:=AAction in [taCompile,taCompileClean];
end;
{ TPGBuildMode }
constructor TPGBuildMode.Create(const aName: string; aCompile: boolean);
begin
Name:=aName;
Compile:=aCompile;
end;
{ TPGDependency }
constructor TPGDependency.Create(const aPkgName: string);

View File

@ -49,6 +49,7 @@ Resourcestring
lisProjectGroup = 'Project group %s';
lisNodeTargets = 'Targets';
lisNodeRemovedTargets = 'Removed targets';
lisNodeBuildModes = 'Build Modes';
lisNodeFiles = 'Files';
lisNodeRemovedFiles = 'Removed files';
lisNodeDependencies = 'Dependencies';