diff --git a/components/projectgroups/projectgroup.pp b/components/projectgroups/projectgroup.pp index 7007e74d6f..ce2ddb6149 100644 --- a/components/projectgroups/projectgroup.pp +++ b/components/projectgroups/projectgroup.pp @@ -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; diff --git a/components/projectgroups/projectgroupeditor.pas b/components/projectgroups/projectgroupeditor.pas index 99f08dd6f8..f0f8a1af39 100644 --- a/components/projectgroups/projectgroupeditor.pas +++ b/components/projectgroups/projectgroupeditor.pas @@ -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; diff --git a/components/projectgroups/projectgroupintf.pp b/components/projectgroups/projectgroupintf.pp index 2eacc05b86..ba2e9f27aa 100644 --- a/components/projectgroups/projectgroupintf.pp +++ b/components/projectgroups/projectgroupintf.pp @@ -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); diff --git a/components/projectgroups/projectgroupstrconst.pas b/components/projectgroups/projectgroupstrconst.pas index 3b7515473e..64586e63a1 100644 --- a/components/projectgroups/projectgroupstrconst.pas +++ b/components/projectgroups/projectgroupstrconst.pas @@ -49,6 +49,7 @@ Resourcestring lisProjectGroup = 'Project group %s'; lisNodeTargets = 'Targets'; lisNodeRemovedTargets = 'Removed targets'; + lisNodeBuildModes = 'Build Modes'; lisNodeFiles = 'Files'; lisNodeRemovedFiles = 'Removed files'; lisNodeDependencies = 'Dependencies';