project groups: removed GetLazProject/Package

git-svn-id: trunk@50359 -
This commit is contained in:
mattias 2015-11-17 12:43:11 +00:00
parent c97a53a9ba
commit cb2ab87cd6
4 changed files with 234 additions and 190 deletions

View File

@ -41,10 +41,13 @@ Modified LGPL-2."/>
<UnitName Value="ProjectGroupStrConst"/>
</Item6>
</Files>
<RequiredPkgs Count="1">
<RequiredPkgs Count="2">
<Item1>
<PackageName Value="IDEIntf"/>
<PackageName Value="CodeTools"/>
</Item1>
<Item2>
<PackageName Value="IDEIntf"/>
</Item2>
</RequiredPkgs>
<UsageOptions>
<UnitPath Value="$(PkgOutDir)"/>

View File

@ -13,28 +13,31 @@ interface
uses
Classes, SysUtils, contnrs,
Laz2_XMLCfg,
Controls, Forms, Dialogs, LazFileUtils, LazFileCache,
Controls, Forms, Dialogs, LCLProc, LazFileUtils, LazFileCache,
PackageIntf, ProjectIntf, MenuIntf,
LazIDEIntf, IDEDialogs, CompOptsIntf, ProjectGroupIntf,
ProjectGroupStrConst;
ProjectGroupStrConst, FileProcs;
type
{ TIDECompileTarget }
TIDECompileTarget = class(TCompileTarget)
TIDECompileTarget = class(TPGCompileTarget)
private
FTarget: TPersistent;
FFiles: TStringList;
FRequiredPackages: TObjectList; // list of TPGDependency
protected
function GetFileCount: integer; override;
function GetFiles(Index: integer): string; override;
function GetRequiredPackageCount: integer; override;
function GetRequiredPackages(Index: integer): TPGDependency; override;
procedure LoadPackage;
procedure LoadProject;
procedure LoadProjectGroup;
function ProjectAction(AAction: TPGTargetAction): TPGActionResult;
function PackageAction(AAction: TPGTargetAction): TPGActionResult;
function ProjectGroupAction(AAction: TPGTargetAction): TPGActionResult;
function GetIDEPackage: TIDEPackage; override;
function GetLazProject: TLazProject; override;
function GetProjectGroup: TProjectGroup; override;
function PerformAction(AAction: TPGTargetAction): TPGActionResult; override;
public
@ -54,8 +57,8 @@ type
constructor Create(AProjectGroup: TProjectGroup);
end;
TTargetEvent = procedure(Sender: TObject; Target: TCompileTarget) of object;
TTargetExchangeEvent = procedure(Sender: TObject; Target1,Target2: TCompileTarget) of object; // ToDo: use index
TTargetEvent = procedure(Sender: TObject; Target: TPGCompileTarget) of object;
TTargetExchangeEvent = procedure(Sender: TObject; Target1,Target2: TPGCompileTarget) of object; // ToDo: use index
{ TIDEProjectGroup }
@ -70,19 +73,19 @@ type
FRemovedTargets: TFPObjectList;
protected
procedure SetFileName(AValue: String); override;
function GetTarget(Index: Integer): TCompileTarget; override;
function GetTarget(Index: Integer): TPGCompileTarget; override;
function GetTargetCount: Integer; override;
function GetRemovedTargetCount: Integer; override;
function GetRemovedTarget(Index: Integer): TCompileTarget; override;
function GetRemovedTarget(Index: Integer): TPGCompileTarget; override;
public
constructor Create;
destructor Destroy; override;
function IndexOfTarget(const Target: TCompileTarget): Integer; override;
function IndexOfRemovedTarget(const Target: TCompileTarget): Integer; override;
function AddTarget(Const AFileName: String): TCompileTarget; override;
function IndexOfTarget(const Target: TPGCompileTarget): Integer; override;
function IndexOfRemovedTarget(const Target: TPGCompileTarget): Integer; override;
function AddTarget(Const AFileName: String): TPGCompileTarget; override;
procedure RemoveTarget(Index: Integer); override;
procedure ExchangeTargets(ASource, ATarget: Integer); override; // ToDo: replace with MoveTarget
procedure ActivateTarget(T: TCompileTarget); override;
procedure ActivateTarget(T: TPGCompileTarget); override;
function LoadFromFile(Options: TProjectGroupLoadOptions): Boolean;
function SaveToFile: Boolean;
property OnFileNameChange: TNotifyEvent Read FOnFileNameChange Write FOnFileNameChange;
@ -325,9 +328,9 @@ begin
FOnFileNameChange(Self);
end;
function TIDEProjectGroup.GetTarget(Index: Integer): TCompileTarget;
function TIDEProjectGroup.GetTarget(Index: Integer): TPGCompileTarget;
begin
Result:=TCompileTarget(FTargets[Index]);
Result:=TPGCompileTarget(FTargets[Index]);
end;
function TIDEProjectGroup.GetTargetCount: Integer;
@ -340,9 +343,9 @@ begin
Result:=FRemovedTargets.Count;
end;
function TIDEProjectGroup.GetRemovedTarget(Index: Integer): TCompileTarget;
function TIDEProjectGroup.GetRemovedTarget(Index: Integer): TPGCompileTarget;
begin
Result:=TCompileTarget(FRemovedTargets[Index]);
Result:=TPGCompileTarget(FRemovedTargets[Index]);
end;
constructor TIDEProjectGroup.Create;
@ -359,34 +362,34 @@ begin
inherited Destroy;
end;
function TIDEProjectGroup.IndexOfTarget(const Target: TCompileTarget): Integer;
function TIDEProjectGroup.IndexOfTarget(const Target: TPGCompileTarget): Integer;
begin
Result:=FTargets.IndexOf(Target);
end;
function TIDEProjectGroup.IndexOfRemovedTarget(const Target: TCompileTarget
function TIDEProjectGroup.IndexOfRemovedTarget(const Target: TPGCompileTarget
): Integer;
begin
Result:=FRemovedTargets.IndexOf(Target);
end;
function TIDEProjectGroup.AddTarget(const AFileName: String): TCompileTarget;
function TIDEProjectGroup.AddTarget(const AFileName: String): TPGCompileTarget;
begin
Result:=Nil;
if FileExistsCached(AFileName) then
begin
Result:=TIDECompileTarget.Create;
Result.FileName:=AFileName;
FTargets.Add(Result);
IncreaseChangeStamp;
If Assigned(FOnTargetAdded) then
FOnTargetAdded(Self,Result);
end;
if not FilenameIsAbsolute(AFileName) then
RaiseGDBException(AFileName);
if not FileExistsCached(AFileName) then exit;
Result:=TIDECompileTarget.Create;
Result.FileName:=AFileName;
FTargets.Add(Result);
IncreaseChangeStamp;
If Assigned(FOnTargetAdded) then
FOnTargetAdded(Self,Result);
end;
procedure TIDEProjectGroup.RemoveTarget(Index: Integer);
var
Target: TCompileTarget;
Target: TPGCompileTarget;
begin
Target:=Targets[Index];
FTargets.Delete(Index);
@ -405,7 +408,7 @@ begin
IncreaseChangeStamp;
end;
procedure TIDEProjectGroup.ActivateTarget(T: TCompileTarget);
procedure TIDEProjectGroup.ActivateTarget(T: TPGCompileTarget);
begin
if T.Active then exit;
inherited ActivateTarget(T);
@ -421,7 +424,7 @@ Var
TargetPath: String;
XMLConfig: TXMLConfig;
I,ACount: Integer;
Target: TCompileTarget;
Target: TPGCompileTarget;
begin
TargetPath:=ExpandFileNameUTF8(ExtractFilePath(FileName));
Result:=True;
@ -494,7 +497,7 @@ Var
ARoot: String;
XMLConfig: TXMLConfig;
I,ACount: Integer;
CompTarget: TCompileTarget;
CompTarget: TPGCompileTarget;
begin
TargetPath:=ExtractFilePath(FileName);
Result:=True;
@ -547,9 +550,38 @@ end;
procedure TIDECompileTarget.UnLoadTarget;
begin
if (FTarget<>Nil) and (FTarget is TProjectGroup) then
if FTarget<>nil then
FreeAndNil(FTarget);
FTarget:=Nil;
if FFiles<>nil then
FreeAndNil(FFiles);
if FRequiredPackages<>nil then
FreeAndNil(FRequiredPackages);
end;
function TIDECompileTarget.GetFileCount: integer;
begin
if FFiles=nil then
Result:=0
else
Result:=FFiles.Count;
end;
function TIDECompileTarget.GetFiles(Index: integer): string;
begin
Result:=FFiles[Index];
end;
function TIDECompileTarget.GetRequiredPackageCount: integer;
begin
if FRequiredPackages<>nil then
Result:=FRequiredPackages.Count
else
Result:=0;
end;
function TIDECompileTarget.GetRequiredPackages(Index: integer): TPGDependency;
begin
Result:=TPGDependency(FRequiredPackages[Index]);
end;
procedure TIDECompileTarget.LoadPackage;
@ -557,37 +589,48 @@ var
MR: TModalResult;
I: Integer;
Pkg: TIDEPackage;
PkgName: String;
begin
FTarget:=Nil;
MR:=PackageEditingInterface.DoOpenPackageFile(Filename,
[pofRevert, pofConvertMacros, pofDoNotOpenEditor],
False);
if (MR=mrOK) then
begin
I:=0;
while (FTarget=Nil) and (I<PackageEditingInterface.GetPackageCount) do
begin
Pkg:=PackageEditingInterface.GetPackages(I);
if CompareFilenames(Pkg.Filename,Self.Filename)=0 then
FTarget:=Pkg; // ToDo: free notification
Inc(I);
PkgName:=ExtractFileUnitname(Filename,true);
if PkgName='' then begin
debugln(['Warning: (lazarus) [TIDECompileTarget.LoadPackage] invalid package filename "',Filename,'"']);
exit;
end;
Pkg:=PackageEditingInterface.FindPackageWithName(PkgName);
if Pkg=nil then begin
MR:=PackageEditingInterface.DoOpenPackageFile(Filename,
[pofDoNotOpenEditor],False);
if MR<>mrOk then begin
debugln(['Warning: (lazarus) [TIDECompileTarget.LoadPackage] DoOpenPackageFile failed on file "',Filename,'"']);
exit;
end;
Pkg:=PackageEditingInterface.FindPackageWithName(PkgName);
if Pkg=nil then begin
debugln(['Warning: (lazarus) [TIDECompileTarget.LoadPackage] DoOpenPackageFile failed pkgname="',PkgName,'" on file "',Filename,'"']);
exit;
end;
end;
if CompareFilenames(Pkg.Filename,Filename)<>0 then begin
debugln(['Warning: (lazarus) [TIDECompileTarget.LoadPackage] there is already a package with that name: wanted="',Filename,'" loaded="',Pkg.Filename,'"']);
exit;
end;
// load list of file
FFiles:=TStringList.Create;
for i:=0 to Pkg.FileCount-1 do
FFiles.Add(Pkg.Files[i].Filename);
// load list of required package
FRequiredPackages:=TObjectList.Create;
// ToDo
end;
procedure TIDECompileTarget.LoadProject;
const
Flags = [];
{ Flags = [ofOnlyIfExists, ofProjectLoading, ofQuiet, ofVirtualFile,
ofUseCache, ofMultiOpen, ofDoNotLoadResource,
ofLoadHiddenResource, ofInternalFile];}
var
MR: TModalResult;
begin
UnloadTarget;
MR:=LazarusIDE.DoOpenProjectFile(FileName,Flags);
if (MR=mrOK) then
FTarget:=LazarusIDE.ActiveProject; // ToDo: free notification
// ToDo
end;
procedure TIDECompileTarget.LoadProjectGroup;
@ -603,34 +646,42 @@ function TIDECompileTarget.ProjectAction(AAction: TPGTargetAction): TPGActionRes
var
F: TProjectBuildFlags;
begin
Result:=arOK;
if (LazarusIDE.ActiveProject.ProjectInfoFile<>LazProject.ProjectInfoFile) then
if LazarusIDE.DoOpenProjectFile(FileName,[ofOnlyIfExists,ofQuiet,ofUseCache])<>mrOK then
exit;
// If action was open, we're now all set
case AAction of
taSettings :
; // TODO: Need IDE integration
taCompileClean,
taCompile :
begin
F:=[];
if (AAction=taCompileClean) then
Include(F,pbfCleanCompile);
LazarusIDE.DoBuildProject(crCompile,F);
end;
taRun :
; // TODO: Need IDE integration
Result:=arFailed;
// ToDo: if project loaded
if (LazarusIDE.ActiveProject<>nil)
and (CompareFilenames(LazarusIDE.ActiveProject.ProjectInfoFile,Filename)=0)
then begin
// project loaded => use IDE functions
// ToDo
case AAction of
taSettings :
; // TODO: Need IDE integration
taCompileClean,
taCompile :
begin
F:=[];
if (AAction=taCompileClean) then
Include(F,pbfCleanCompile);
if LazarusIDE.DoBuildProject(crCompile,F)=mrOk then
exit(arOK);
end;
taRun :
; // TODO: Need IDE integration
end;
end else begin
// project not loaded => use lazbuild
// ToDo
end;
end;
function TIDECompileTarget.PackageAction(AAction: TPGTargetAction): TPGActionResult;
Var
L: TObjectList;
begin
Result:=arOK;
Result:=arFailed;
if (AAction in [taOpen,taSettings]) then
PackageEditingInterface.DoOpenPackageFile(FileName,[],False);
if PackageEditingInterface.DoOpenPackageFile(FileName,[pofDoNotOpenEditor],False)<>mrOk then
exit;
case AAction of
taSettings :
; // TODO: Need IDE integration
@ -639,15 +690,7 @@ begin
taCompileClean :
; // TODO: Need IDE integration
taInstall :
begin
L:=TObjectList.Create(False);
try
L.Add(LazPackage);
PackageEditingInterface.InstallPackages(L,[]);
finally
L.Free;
end;
end;
; // TODO: Need IDE integration
taUninstall :
; // TODO: Need IDE integration
end;
@ -662,20 +705,6 @@ begin
Result:=GetProjectGroup.PerformFrom(0,AAction);
end;
function TIDECompileTarget.GetIDEPackage: TIDEPackage;
begin
If FTarget=Nil then
LoadTarget;
Result:=TIDEPackage(FTarget);
end;
function TIDECompileTarget.GetLazProject: TLazProject;
begin
If FTarget=Nil then
LoadTarget;
Result:=TLazProject(FTarget);
end;
function TIDECompileTarget.GetProjectGroup: TProjectGroup;
begin
If FTarget=Nil then

View File

@ -35,7 +35,7 @@ type
TNodeData = class(TObject)
NodeType: TNodeType;
Target: TCompileTarget;
Target: TPGCompileTarget;
ProjectGroup: TProjectGroup; // projectgroup to which target belongs
end;
TTargetNodes = Array[Boolean] of TTreeNode;
@ -118,17 +118,17 @@ type
procedure TVPGDblClick(Sender: TObject);
private
FProjectGroup: TProjectGroup;
FProjectGroupTarget: TCompileTarget;
FProjectGroupTarget: TPGCompileTarget;
FNPG: TTreeNode;
FActiveTarget: TCompileTarget;
FActiveTarget: TPGCompileTarget;
FTargetNodes: TTargetNodes;
// Project group callbacks
procedure ConfigNode(Node: TTreeNode; Const ACaption: String;
ANodeData: TNodeData);
procedure DoTargetAdded(Sender: TObject; Target: TCompileTarget);
procedure DoTargetDeleted(Sender: TObject; Target: TCompileTarget);
procedure DoTargetActivated(Sender: TObject; Target: TCompileTarget);
procedure DoTargetExchanged(Sender: TObject; Target1, Target2: TCompileTarget);
procedure DoTargetAdded(Sender: TObject; Target: TPGCompileTarget);
procedure DoTargetDeleted(Sender: TObject; Target: TPGCompileTarget);
procedure DoTargetActivated(Sender: TObject; Target: TPGCompileTarget);
procedure DoTargetExchanged(Sender: TObject; Target1, Target2: TPGCompileTarget);
function AllowPerform(ATargetAction: TPGTargetAction; AAction: TAction= Nil): Boolean;
procedure ClearEventCallBacks(AProjectGroup: TProjectGroup);
procedure SetEventCallBacks(AProjectGroup: TProjectGroup);
@ -137,21 +137,21 @@ type
procedure ShowDependencies(AParent: TTreeNode; AProjectGroup: TProjectGroup; T: TObject; Out PD: TTargetNodes);
procedure ShowFileName;
procedure Perform(ATargetAction: TPGTargetAction);
function GetActiveTarget: TCompileTarget;
function GetActiveTarget: TPGCompileTarget;
// Treeview Node management
function FindNodeFromTarget(ATarget: TCompileTarget): TTreeNode;
function FindNodeFromTarget(ATarget: TPGCompileTarget): TTreeNode;
procedure FreeNodeData;
class function TargetFromNode(N: TTreeNode): TCompileTarget;
class function TargetFromNode(N: TTreeNode): TPGCompileTarget;
function DisplayFileName(AProjectGroup: TProjectGroup;NodeType: TNodeType; AFileName: String): String;
function CreateNode(AParent: TTreeNode; Const ACaption: String; ANodeType: TNodeType; ANodeData: TCompileTarget; AProjectGroup: TProjectGroup): TTreeNode;
procedure FillPackageNode(AParent: TTreeNode; AProjectGroup: TProjectGroup; T: TIDEPackage);
procedure FillProjectNode(AParent: TTreeNode; AProjectGroup: TProjectGroup; T: TLazProject);
procedure FillTargetNode(AParent: TTreeNode; AProjectGroup: TProjectGroup; T: TCompileTarget);
function CreateNode(AParent: TTreeNode; Const ACaption: String; ANodeType: TNodeType; ANodeData: TPGCompileTarget; AProjectGroup: TProjectGroup): TTreeNode;
procedure FillPackageNode(AParent: TTreeNode; AProjectGroup: TProjectGroup; T: TPGCompileTarget);
procedure FillProjectNode(AParent: TTreeNode; AProjectGroup: TProjectGroup; T: TPGCompileTarget);
procedure FillTargetNode(AParent: TTreeNode; AProjectGroup: TProjectGroup; T: TPGCompileTarget);
procedure FillProjectGroupNode(AParent: TTreeNode; AProjectGroup: TProjectGroup; Out TargetNodes: TTargetNodes);
function GetNodeIndex(ANodeType: TNodeType; ANodeData: TCompileTarget ): Integer;
function GetNodeIndex(ANodeType: TNodeType; ANodeData: TPGCompileTarget ): Integer;
function SelectedNodeData: TNodeData;
function SelectedTarget: TCompileTarget;
function SelectedNodeType: TCompileTarget;
function SelectedTarget: TPGCompileTarget;
function SelectedNodeType: TPGCompileTarget;
procedure UpdateIDEMenuCommandFromAction(Sender: TObject; Item: TIDEMenuCommand);
protected
procedure Localize;
@ -159,7 +159,7 @@ type
procedure UpdateShowing; override;
public
property ProjectGroup: TProjectGroup Read FProjectGroup Write SetProjectGroup;
property ActiveTarget: TCompileTarget Read GetActiveTarget;
property ActiveTarget: TPGCompileTarget Read GetActiveTarget;
end;
var
@ -476,7 +476,7 @@ begin
end;
procedure TProjectGroupEditorForm.DoTargetAdded(Sender: TObject;
Target: TCompileTarget);
Target: TPGCompileTarget);
Var
PG: TProjectGroup;
N: TTreeNode;
@ -490,7 +490,7 @@ begin
end;
procedure TProjectGroupEditorForm.DoTargetDeleted(Sender: TObject;
Target: TCompileTarget);
Target: TPGCompileTarget);
Var
PG: TProjectGroup;
N: TTreeNode;
@ -505,7 +505,7 @@ begin
end;
procedure TProjectGroupEditorForm.DoTargetActivated(Sender: TObject;
Target: TCompileTarget);
Target: TPGCompileTarget);
Var
NC,NA: TTreeNode;
N: String;
@ -525,7 +525,7 @@ begin
end;
procedure TProjectGroupEditorForm.DoTargetExchanged(Sender: TObject; Target1,
Target2: TCompileTarget);
Target2: TPGCompileTarget);
Var
S,N1,N2: TTreeNode;
ND1,ND2: TNodeData;
@ -578,7 +578,7 @@ end;
procedure TProjectGroupEditorForm.ATargetActivateUpdate(Sender: TObject);
Var
T: TCompileTarget;
T: TPGCompileTarget;
begin
T:=SelectedTarget;
(Sender as TAction).Enabled:=Assigned(T) and Not T.Active;
@ -608,7 +608,7 @@ end;
function TProjectGroupEditorForm.AllowPerform(ATargetAction: TPGTargetAction; AAction: TAction = Nil): Boolean;
Var
T: TCompileTarget;
T: TPGCompileTarget;
begin
T:=SelectedTarget;
Result:=Assigned(T) and (ATargetAction in T.AllowedActions);
@ -638,7 +638,7 @@ end;
procedure TProjectGroupEditorForm.AProjectGroupDeleteExecute(Sender: TObject);
Var
T: TCompileTarget;
T: TPGCompileTarget;
begin
T:=SelectedTarget;
FProjectGroup.RemoveTarget(T);
@ -646,7 +646,7 @@ end;
procedure TProjectGroupEditorForm.AProjectGroupDeleteUpdate(Sender: TObject);
Var
T: TCompileTarget;
T: TPGCompileTarget;
begin
T:=SelectedTarget;
(Sender as TAction).Enabled:=(T<>Nil) and (T<>FProjectGroupTarget) and Not T.Removed;
@ -718,7 +718,7 @@ begin
end;
end;
function TProjectGroupEditorForm.GetNodeIndex(ANodeType: TNodeType; ANodeData: TCompileTarget): Integer;
function TProjectGroupEditorForm.GetNodeIndex(ANodeType: TNodeType; ANodeData: TPGCompileTarget): Integer;
begin
Case ANodeType of
ntProjectGroup: Result:=NIProjectGroup;
@ -760,7 +760,7 @@ begin
Result:=Nil;
end;
function TProjectGroupEditorForm.SelectedTarget: TCompileTarget;
function TProjectGroupEditorForm.SelectedTarget: TPGCompileTarget;
Var
N: TNodeData;
begin
@ -771,7 +771,7 @@ begin
Result:=Nil;
end;
function TProjectGroupEditorForm.SelectedNodeType: TCompileTarget;
function TProjectGroupEditorForm.SelectedNodeType: TPGCompileTarget;
Var
N: TNodeData;
begin
@ -797,7 +797,7 @@ begin
end;
function TProjectGroupEditorForm.CreateNode(AParent: TTreeNode;
const ACaption: String; ANodeType: TNodeType; ANodeData: TCompileTarget;
const ACaption: String; ANodeType: TNodeType; ANodeData: TPGCompileTarget;
AProjectGroup: TProjectGroup): TTreeNode;
Var
ND: TNodeData;
@ -839,7 +839,7 @@ begin
FNPG.Text:=DisplayFileName(FProjectGroup,ntProjectGroup,FProjectGroup.FileName);
end;
function TProjectGroupEditorForm.FindNodeFromTarget(ATarget: TCompileTarget): TTreeNode;
function TProjectGroupEditorForm.FindNodeFromTarget(ATarget: TPGCompileTarget): TTreeNode;
Var
I: Integer;
begin
@ -888,7 +888,7 @@ procedure TProjectGroupEditorForm.FillProjectGroupNode(AParent: TTreeNode;
Const
TNT: Array[Boolean] of TNodeType = (ntTarget,ntRemovedTarget);
Var
T: TCompileTarget;
T: TPGCompileTarget;
TTN,TN: TTreeNode;
I: Integer;
begin
@ -935,7 +935,7 @@ begin
end;
end;
procedure TProjectGroupEditorForm.FillProjectNode(AParent: TTreeNode; AProjectGroup: TProjectGroup; T: TLazProject);
procedure TProjectGroupEditorForm.FillProjectNode(AParent: TTreeNode; AProjectGroup: TProjectGroup; T: TPGCompileTarget);
Var
PF,PD: TTargetNodes;
I: Integer;
@ -944,12 +944,14 @@ begin
PF[True]:=CreateNode(AParent,lisNodeRemovedFiles,ntFiles,Nil,AProjectGroup);
// TODO Ideally, we can show removed files
For I:=0 to T.FileCount-1 do
CreateNode(PF[False],DisplayFileName(AProjectGroup,ntFile,T.Files[i].Filename),ntFile,Nil,AProjectGroup);
CreateNode(PF[False],DisplayFileName(AProjectGroup,
ntFile,T.Files[i]),ntFile,Nil,AProjectGroup);
ShowDependencies(AParent,AProjectGroup,T,PD);
// TODO: Build mode info Not available ?
end;
procedure TProjectGroupEditorForm.FillPackageNode(AParent: TTreeNode; AProjectGroup: TProjectGroup; T: TIDEPackage);
procedure TProjectGroupEditorForm.FillPackageNode(AParent: TTreeNode;
AProjectGroup: TProjectGroup; T: TPGCompileTarget);
Var
PF,PD: TTargetNodes;
I: Integer;
@ -958,11 +960,13 @@ begin
PF[True]:=CreateNode(AParent,lisNodeRemovedFiles,ntFiles,Nil,AProjectGroup);
// ToDo Ideally, we can show removed files
For I:=0 to T.FileCount-1 do
CreateNode(PF[False],DisplayFileName(AProjectGroup,ntFile,T.Files[i].Filename),ntFile,Nil,AProjectGroup);
CreateNode(PF[False],DisplayFileName(AProjectGroup,
ntFile,T.Files[i]),ntFile,Nil,AProjectGroup);
ShowDependencies(AParent,AProjectGroup,T,PD);
end;
procedure TProjectGroupEditorForm.FillTargetNode(AParent: TTreeNode; AProjectGroup: TProjectGroup; T: TCompileTarget);
procedure TProjectGroupEditorForm.FillTargetNode(AParent: TTreeNode;
AProjectGroup: TProjectGroup; T: TPGCompileTarget);
Var
PN: TTargetNodes;
begin
@ -971,19 +975,19 @@ begin
if T=Nil then
exit;
Case T.TargetType of
ttProject: FillProjectNode(AParent,AProjectGroup,T.LazProject);
ttPackage: FillPackageNode(AParent,AProjectGroup,T.LazPackage);
ttProject: FillProjectNode(AParent,AProjectGroup,T);
ttPackage: FillPackageNode(AParent,AProjectGroup,T);
ttProjectGroup: FillProjectgroupNode(AParent,T.ProjectGroup,PN);
end;
end;
function TProjectGroupEditorForm.GetActiveTarget: TCompileTarget;
function TProjectGroupEditorForm.GetActiveTarget: TPGCompileTarget;
begin
Result:=FActiveTarget;
end;
class function TProjectGroupEditorForm.TargetFromNode(N: TTreeNode
): TCompileTarget;
): TPGCompileTarget;
begin
if (N<>Nil) and (N.Data<>Nil) then
Result:=TNodeData(N.Data).Target

View File

@ -16,7 +16,7 @@ Type
ttProject,
ttPackage,
ttProjectGroup, // nested group
ttFile, // build/run file, parameters stored IDE directives
ttPascalFile, // build/run file, parameters stored IDE directives
ttExternalTool
);
TPGTargetTypes = set of TPGTargetType;
@ -36,27 +36,33 @@ Type
TProjectGroup = class;
{ TCompileTarget - a node in the tree, e.g. a project, package or group }
TPGDependency = class
public
PackageName: string;
end;
TCompileTarget = class
{ TPGCompileTarget - a node in the tree, see TPGTargetType }
TPGCompileTarget = class
private
FActive: Boolean;
FFilename: string;
FTargetType: TPGTargetType;
FRemoved: boolean;
protected
function PerformAction (AAction: TPGTargetAction): TPGActionResult; virtual; abstract;
function Perform (AAction: TPGTargetAction): TPGActionResult;
// By default, return all allowed actions for target type.
function GetAllowedActions: TPGTargetActions; virtual;
function GetLazProject: TLazProject; virtual; abstract;
function GetAllowedActions: TPGTargetActions; virtual; // By default, return all allowed actions for target type.
function GetFileCount: integer; virtual; abstract;
function GetFiles(Index: integer): string; virtual; abstract;
function GetProjectGroup: TProjectGroup; virtual; abstract;
procedure SetTargetType(AValue: TPGTargetType); virtual;
procedure SetFilename(const AValue: string); virtual;
function GetIDEPackage: TIDEPackage; virtual; abstract;
procedure SetRemoved(const AValue: boolean); virtual;
function GetRequiredPackageCount: integer; virtual; abstract;
function GetRequiredPackages(Index: integer): TPGDependency; virtual; abstract;
function Perform (AAction: TPGTargetAction): TPGActionResult;
function PerformAction (AAction: TPGTargetAction): TPGActionResult; virtual; abstract;
procedure Activate; virtual;
procedure DeActivate; virtual;
procedure SetFilename(const AValue: string); virtual;
procedure SetRemoved(const AValue: boolean); virtual;
procedure SetTargetType(AValue: TPGTargetType); virtual;
public
property Filename: string read FFilename write SetFilename; // Absolute, not relative. (ToDo: store them relative)
property Removed: boolean read FRemoved write SetRemoved;
@ -65,9 +71,11 @@ Type
// Currently allowed actions.
property AllowedActions: TPGTargetActions Read GetAllowedActions;
//
property LazPackage: TIDEPackage read GetIDEPackage;
property LazProject: TLazProject Read GetLazProject;
property ProjectGroup: TProjectGroup Read GetProjectGroup;
property Files[Index: integer]: string read GetFiles;
property FileCount: integer read GetFileCount;
property RequiredPackages[Index: integer]: TPGDependency read GetRequiredPackages;
property RequiredPackageCount: integer read GetRequiredPackageCount;
end;
{ TProjectGroup }
@ -77,41 +85,41 @@ Type
FChangeStamp: int64;
FFileName: String;
FLastSavedChangeStamp: int64;
function GetActiveTarget: TCompileTarget;
procedure SetActiveTarget(AValue: TCompileTarget);
function GetActiveTarget: TPGCompileTarget;
procedure SetActiveTarget(AValue: TPGCompileTarget);
procedure SetModified(AValue: Boolean);
protected
procedure SetFileName(AValue: String); virtual;
function GetModified: Boolean; virtual;
function GetTargetCount: Integer; virtual; abstract;
function GetTarget(Index: Integer): TCompileTarget; virtual; abstract;
function GetTarget(Index: Integer): TPGCompileTarget; virtual; abstract;
function GetRemovedTargetCount: Integer; virtual; abstract;
function GetRemovedTarget(Index: Integer): TCompileTarget; virtual; abstract;
function GetRemovedTarget(Index: Integer): TPGCompileTarget; virtual; abstract;
public
function Perform(Index: Integer; AAction: TPGTargetAction): TPGActionResult;
function Perform(Const AFileName: String; AAction: TPGTargetAction): TPGActionResult;
function Perform(Target: TCompileTarget; AAction: TPGTargetAction): TPGActionResult; virtual;
function Perform(Target: TPGCompileTarget; AAction: TPGTargetAction): TPGActionResult; virtual;
function ActionAllowsFrom(Index: Integer; AAction: TPGTargetAction): Boolean; virtual;
function PerformFrom(AIndex: Integer; AAction: TPGTargetAction): TPGActionResult; virtual;
function IndexOfTarget(Const Target: TCompileTarget): Integer; virtual; abstract;
function IndexOfTarget(Const Target: TPGCompileTarget): Integer; virtual; abstract;
function IndexOfTarget(Const AFilename: String): Integer; virtual;
function IndexOfRemovedTarget(Const Target: TCompileTarget): Integer; virtual; abstract;
function IndexOfRemovedTarget(Const Target: TPGCompileTarget): Integer; virtual; abstract;
function IndexOfRemovedTarget(Const AFilename: String): Integer; virtual;
function AddTarget(Const AFileName: String): TCompileTarget; virtual; abstract;
function AddTarget(Const AFileName: String): TPGCompileTarget; virtual; abstract;
procedure ExchangeTargets(ASource, ATarget: Integer); virtual; abstract;
procedure RemoveTarget(Index: Integer); virtual; abstract;
procedure RemoveTarget(Const AFileName: String);
procedure RemoveTarget(Target: TCompileTarget);
procedure RemoveTarget(Target: TPGCompileTarget);
procedure ActivateTarget(Index: Integer);
procedure ActivateTarget(Const AFileName: String);
procedure ActivateTarget(Target: TCompileTarget); virtual;
procedure ActivateTarget(Target: TPGCompileTarget); virtual;
procedure IncreaseChangeStamp;
property FileName: String Read FFileName Write SetFileName; // absolute
property Targets[Index: Integer]: TCompileTarget Read GetTarget;
property Targets[Index: Integer]: TPGCompileTarget Read GetTarget;
property TargetCount: Integer Read GetTargetCount;
property RemovedTargets[Index: Integer]: TCompileTarget Read GetRemovedTarget;
property RemovedTargets[Index: Integer]: TPGCompileTarget Read GetRemovedTarget;
property RemovedTargetCount: Integer Read GetRemovedTargetCount;
property ActiveTarget: TCompileTarget Read GetActiveTarget Write SetActiveTarget;
property ActiveTarget: TPGCompileTarget Read GetActiveTarget Write SetActiveTarget;
property Modified: Boolean Read GetModified write SetModified;
property ChangeStamp: int64 read FChangeStamp;
end;
@ -144,7 +152,7 @@ const
[taOpen,taSettings,taCompile,taCompileClean,taRun], // ttProject
[taOpen,taSettings,taCompile,taCompileClean,taInstall,taUninstall], // ttPackage
[taOpen,taCompile,taCompileClean], // ttProjectGroup
[taOpen,taCompile,taRun], // ttFile
[taOpen,taCompile,taRun], // ttPascalFile
[taOpen,taRun] // ttExternalTool
);
@ -165,7 +173,7 @@ begin
'lpg': Result:=ttProjectGroup;
'pas',
'pp',
'p' : Result:=ttFile;
'p' : Result:=ttPascalFile;
else
Result:=ttUnknown;
end;
@ -185,7 +193,7 @@ end;
{ TProjectGroup }
function TProjectGroup.GetActiveTarget: TCompileTarget;
function TProjectGroup.GetActiveTarget: TPGCompileTarget;
Var
I: Integer;
begin
@ -198,7 +206,7 @@ begin
Result:=Nil;
end;
procedure TProjectGroup.SetActiveTarget(AValue: TCompileTarget);
procedure TProjectGroup.SetActiveTarget(AValue: TPGCompileTarget);
begin
ActivateTarget(AValue);
end;
@ -234,7 +242,7 @@ begin
Result:=Perform(IndexOfTarget(AFileName),AAction);
end;
function TProjectGroup.Perform(Target: TCompileTarget; AAction: TPGTargetAction): TPGActionResult;
function TProjectGroup.Perform(Target: TPGCompileTarget; AAction: TPGTargetAction): TPGActionResult;
begin
Result:=Target.Perform(AAction);
end;
@ -243,7 +251,7 @@ function TProjectGroup.ActionAllowsFrom(Index: Integer; AAction: TPGTargetAction
): Boolean;
Var
C: Integer;
T: TCompileTarget;
T: TPGCompileTarget;
begin
Result:=ActionAllowsMulti(AAction);
C:=TargetCount;
@ -290,7 +298,7 @@ begin
RemoveTarget(IndexOfTarget(AFileName))
end;
procedure TProjectGroup.RemoveTarget(Target: TCompileTarget);
procedure TProjectGroup.RemoveTarget(Target: TPGCompileTarget);
begin
RemoveTarget(IndexOfTarget(Target))
end;
@ -305,10 +313,10 @@ begin
ActivateTarget(IndexOfTarget(AFileName));
end;
procedure TProjectGroup.ActivateTarget(Target: TCompileTarget);
procedure TProjectGroup.ActivateTarget(Target: TPGCompileTarget);
var
I: Integer;
TD: TCompileTarget;
TD: TPGCompileTarget;
begin
if Target.Active then exit;
for I:=0 to TargetCount-1 do
@ -325,27 +333,27 @@ begin
LUIncreaseChangeStamp64(FChangeStamp);
end;
{ TCompileTarget }
{ TPGCompileTarget }
function TCompileTarget.GetAllowedActions: TPGTargetActions;
function TPGCompileTarget.GetAllowedActions: TPGTargetActions;
begin
Result:=PGTargetActions[TargetType];
end;
procedure TCompileTarget.SetTargetType(AValue: TPGTargetType);
procedure TPGCompileTarget.SetTargetType(AValue: TPGTargetType);
begin
if FTargetType=AValue then Exit;
FTargetType:=AValue;
end;
procedure TCompileTarget.SetFilename(const AValue: string);
procedure TPGCompileTarget.SetFilename(const AValue: string);
begin
if FFileName=AValue then Exit;
FFileName:=AValue;
TargetType:=TargetTypeFromExtenstion(ExtractFileExt(AValue));
end;
procedure TCompileTarget.SetRemoved(const AValue: boolean);
procedure TPGCompileTarget.SetRemoved(const AValue: boolean);
begin
if Removed=AValue then exit;
FRemoved:=AValue;
@ -353,17 +361,17 @@ begin
Deactivate;
end;
procedure TCompileTarget.Activate;
procedure TPGCompileTarget.Activate;
begin
FActive:=True;
end;
procedure TCompileTarget.DeActivate;
procedure TPGCompileTarget.DeActivate;
begin
FActive:=False;
end;
function TCompileTarget.Perform(AAction: TPGTargetAction): TPGActionResult;
function TPGCompileTarget.Perform(AAction: TPGTargetAction): TPGActionResult;
begin
if Not (AAction in AllowedActions) then
Result:=arNotAllowed