cody: unitdependencies: packages

git-svn-id: trunk@40310 -
This commit is contained in:
mattias 2013-02-13 21:02:54 +00:00
parent 92bb4c705f
commit bec25eb2c8
4 changed files with 38 additions and 6 deletions

View File

@ -154,6 +154,7 @@ end;
constructor TUGGroup.Create(aName: string; TheGroups: TUGGroups); constructor TUGGroup.Create(aName: string; TheGroups: TUGGroups);
begin begin
FName:=aName;
FGroups:=TheGroups; FGroups:=TheGroups;
FUnits:=TAVLTree.Create(@CompareUGUnitFilenames); FUnits:=TAVLTree.Create(@CompareUGUnitFilenames);
end; end;

View File

@ -171,6 +171,8 @@ begin
Parent:=GroupsTabSheet; Parent:=GroupsTabSheet;
end; end;
MainPageControl.ActivePage:=GroupsTabSheet;
IdleConnected:=true; IdleConnected:=true;
end; end;
@ -231,6 +233,7 @@ var
begin begin
if AProject=nil then exit; if AProject=nil then exit;
Result:=Groups.GetGroup(GroupPrefixProject,true); Result:=Groups.GetGroup(GroupPrefixProject,true);
//debugln(['TUnitDependenciesDialog.CreateProjectGroup ',Result.Name]);
for i:=0 to AProject.FileCount-1 do begin for i:=0 to AProject.FileCount-1 do begin
Filename:=AProject.Files[i].Filename; Filename:=AProject.Files[i].Filename;
CurUnit:=UsesGraph.GetUnit(Filename,false); CurUnit:=UsesGraph.GetUnit(Filename,false);
@ -250,6 +253,7 @@ var
begin begin
if APackage=nil then exit; if APackage=nil then exit;
Result:=Groups.GetGroup(APackage.Name,true); Result:=Groups.GetGroup(APackage.Name,true);
//debugln(['TUnitDependenciesDialog.CreatePackageGroup ',Result.Name]);
for i:=0 to APackage.FileCount-1 do begin for i:=0 to APackage.FileCount-1 do begin
Filename:=APackage.Files[i].GetFullFilename; Filename:=APackage.Files[i].GetFullFilename;
CurUnit:=UsesGraph.GetUnit(Filename,false); CurUnit:=UsesGraph.GetUnit(Filename,false);
@ -280,6 +284,7 @@ begin
Directory:=ExtractFilePath(CurUnit.Filename); Directory:=ExtractFilePath(CurUnit.Filename);
Directory:=copy(Directory,length(FPCSrcDir)+1,length(Directory)); Directory:=copy(Directory,length(FPCSrcDir)+1,length(Directory));
Grp:=Groups.GetGroup(GroupPrefixFPCSrc+Directory,true); Grp:=Groups.GetGroup(GroupPrefixFPCSrc+Directory,true);
debugln(['TUnitDependenciesDialog.CreateFPCSrcGroups ',Grp.Name]);
Grp.AddUnit(TUGGroupUnit(CurUnit)); Grp.AddUnit(TUGGroupUnit(CurUnit));
end; end;
Node:=UsesGraph.FilesTree.FindSuccessor(Node); Node:=UsesGraph.FilesTree.FindSuccessor(Node);
@ -304,6 +309,7 @@ begin
CurUnit:=TUGGroupUnit(Node.Data); CurUnit:=TUGGroupUnit(Node.Data);
if TUGGroupUnit(CurUnit).Group=nil then begin if TUGGroupUnit(CurUnit).Group=nil then begin
Filename:=CurUnit.Filename; Filename:=CurUnit.Filename;
debugln(['TUnitDependenciesDialog.GuessGroupOfUnits no group for ',Filename]);
CurDirectory:=ExtractFilePath(Filename); CurDirectory:=ExtractFilePath(Filename);
if CompareFilenames(CurDirectory,LastDirectory)<>0 then begin if CompareFilenames(CurDirectory,LastDirectory)<>0 then begin
FreeAndNil(Owners); FreeAndNil(Owners);
@ -314,15 +320,19 @@ begin
for i:=0 to Owners.Count-1 do begin for i:=0 to Owners.Count-1 do begin
if TObject(Owners[i]) is TLazProject then begin if TObject(Owners[i]) is TLazProject then begin
Group:=Groups.GetGroup(GroupPrefixProject,true); Group:=Groups.GetGroup(GroupPrefixProject,true);
debugln(['TUnitDependenciesDialog.GuessGroupOfUnits ',Group.Name]);
break; break;
end else if TObject(Owners[i]) is TIDEPackage then begin end else if TObject(Owners[i]) is TIDEPackage then begin
Group:=Groups.GetGroup(TIDEPackage(Owners[i]).Name,true); Group:=Groups.GetGroup(TIDEPackage(Owners[i]).Name,true);
debugln(['TUnitDependenciesDialog.GuessGroupOfUnits ',Group.Name]);
break; break;
end; end;
end; end;
end; end;
if Group=nil then if Group=nil then begin
Group:=Groups.GetGroup(GroupNone,true); Group:=Groups.GetGroup(GroupNone,true);
debugln(['TUnitDependenciesDialog.GuessGroupOfUnits ',Group.Name]);
end;
Group.AddUnit(TUGGroupUnit(CurUnit)); Group.AddUnit(TUGGroupUnit(CurUnit));
end; end;
Node:=UsesGraph.FilesTree.FindSuccessor(Node); Node:=UsesGraph.FilesTree.FindSuccessor(Node);
@ -446,6 +456,10 @@ var
AVLNode: TAVLTreeNode; AVLNode: TAVLTreeNode;
Group: TUGGroup; Group: TUGGroup;
Graph: TLvlGraph; Graph: TLvlGraph;
PkgList: TFPList;
i: Integer;
RequiredPkg: TIDEPackage;
GroupObj: TObject;
begin begin
GroupsLvlGraph.BeginUpdate; GroupsLvlGraph.BeginUpdate;
Graph:=GroupsLvlGraph.Graph; Graph:=GroupsLvlGraph.Graph;
@ -454,11 +468,26 @@ begin
while AVLNode<>nil do begin while AVLNode<>nil do begin
Group:=TUGGroup(AVLNode.Data); Group:=TUGGroup(AVLNode.Data);
Graph.GetNode(Group.Name,true); Graph.GetNode(Group.Name,true);
GroupObj:=nil;
if Group.Name=GroupPrefixProject then begin if Group.Name=GroupPrefixProject then begin
// project // project
GroupObj:=LazarusIDE.ActiveProject;
end else begin end else begin
// package
GroupObj:=PackageEditingInterface.FindPackageWithName(Group.Name);
end;
PkgList:=nil;
try
PackageEditingInterface.GetRequiredPackages(GroupObj,PkgList,[pirNotRecursive]);
if (PkgList<>nil) then begin
// add for each dependency an edge in the Graph
for i:=0 to PkgList.Count-1 do begin
RequiredPkg:=TIDEPackage(PkgList[i]);
Graph.GetEdge(Group.Name,RequiredPkg.Name,true);
end;
end;
finally
PkgList.Free;
end; end;
AVLNode:=Groups.Groups.FindSuccessor(AVLNode); AVLNode:=Groups.Groups.FindSuccessor(AVLNode);
end; end;

View File

@ -251,7 +251,8 @@ type
// dependencies // dependencies
function IsOwnerDependingOnPkg(AnOwner: TObject; const PkgName: string; function IsOwnerDependingOnPkg(AnOwner: TObject; const PkgName: string;
out DependencyOwner: TObject): boolean; virtual; abstract; out DependencyOwner: TObject): boolean; virtual; abstract;
procedure GetRequiredPackages(AnOwner: TObject; PkgList: TFPList; procedure GetRequiredPackages(AnOwner: TObject; // a TLazProject or TIDEPackage
out PkgList: TFPList; // list of TIDEPackage
Flags: TPkgIntfRequiredFlags = []) virtual; abstract; Flags: TPkgIntfRequiredFlags = []) virtual; abstract;
function AddDependencyToOwners(OwnerList: TFPList; APackage: TIDEPackage; function AddDependencyToOwners(OwnerList: TFPList; APackage: TIDEPackage;
OnlyTestIfPossible: boolean = false): TModalResult; virtual; abstract; // mrOk or mrIgnore for already connected OnlyTestIfPossible: boolean = false): TModalResult; virtual; abstract; // mrOk or mrIgnore for already connected

View File

@ -241,7 +241,7 @@ type
function FindPackageWithName(const PkgName: string; IgnorePackage: TIDEPackage = nil): TIDEPackage; override; function FindPackageWithName(const PkgName: string; IgnorePackage: TIDEPackage = nil): TIDEPackage; override;
function IsOwnerDependingOnPkg(AnOwner: TObject; const PkgName: string; function IsOwnerDependingOnPkg(AnOwner: TObject; const PkgName: string;
out DependencyOwner: TObject): boolean; override; out DependencyOwner: TObject): boolean; override;
procedure GetRequiredPackages(AnOwner: TObject; PkgList: TFPList; procedure GetRequiredPackages(AnOwner: TObject; out PkgList: TFPList;
Flags: TPkgIntfRequiredFlags = []) override; Flags: TPkgIntfRequiredFlags = []) override;
function AddDependencyToOwners(OwnerList: TFPList; APackage: TIDEPackage; function AddDependencyToOwners(OwnerList: TFPList; APackage: TIDEPackage;
OnlyTestIfPossible: boolean = false): TModalResult; override; OnlyTestIfPossible: boolean = false): TModalResult; override;
@ -3269,11 +3269,12 @@ begin
Result:=true; Result:=true;
end; end;
procedure TPkgManager.GetRequiredPackages(AnOwner: TObject; PkgList: TFPList; procedure TPkgManager.GetRequiredPackages(AnOwner: TObject; out PkgList: TFPList;
Flags: TPkgIntfRequiredFlags); Flags: TPkgIntfRequiredFlags);
var var
Dependency: TPkgDependency; Dependency: TPkgDependency;
begin begin
PkgList:=nil;
Dependency:=nil; Dependency:=nil;
if AnOwner is TProject then if AnOwner is TProject then
Dependency:=TProject(AnOwner).FirstRequiredDependency Dependency:=TProject(AnOwner).FirstRequiredDependency