IDE: package graph: remove unneeded dependencies

git-svn-id: trunk@40772 -
This commit is contained in:
mattias 2013-04-09 20:02:31 +00:00
parent 4cd89917de
commit 14405e3826
2 changed files with 36 additions and 16 deletions

View File

@ -73,10 +73,11 @@ type
procedure ClearTreeData;
procedure UpdateTransitivityTree;
procedure UpdateButtons;
procedure AddTransitivities(NodeCaption: string; ImgIndex: integer;
procedure AddTransitivities(DepOwner: TObject; ImgIndex: integer;
FirstDependency: TPkgDependency);
function FindAlternativeRoute(Dependency, StartDependency: TPkgDependency): TFPList;
property TVNodeChecked[TVNode: TTreeNode]: boolean read GetTVNodeChecked write SetTVNodeChecked;
function GetDepOwnerName(DepOwner: TObject; WithVersion: boolean): string;
public
property Owners: TFPList read FOwners write SetOwners;
function FetchDeletes: TObjectList; // list of TCPDNodeInfo
@ -238,10 +239,10 @@ begin
CurOwner:=TObject(Owners[i]);
if CurOwner is TProject then begin
AProject:=TProject(CurOwner);
AddTransitivities(CPDProjectName,ImgIndexProject,AProject.FirstRequiredDependency);
AddTransitivities(AProject,ImgIndexProject,AProject.FirstRequiredDependency);
end else if CurOwner is TLazPackage then begin
APackage:=TLazPackage(CurOwner);
AddTransitivities(APackage.IDAsString,ImgIndexPackage,APackage.FirstRequiredDependency);
AddTransitivities(APackage,ImgIndexPackage,APackage.FirstRequiredDependency);
end;
end;
TransitivityTreeView.EndUpdate;
@ -262,8 +263,8 @@ begin
DeleteSelectedBitBtn.Enabled:=CheckCnt>0;
end;
procedure TCleanPkgDepsDlg.AddTransitivities(NodeCaption: string;
ImgIndex: integer; FirstDependency: TPkgDependency);
procedure TCleanPkgDepsDlg.AddTransitivities(DepOwner: TObject; ImgIndex: integer;
FirstDependency: TPkgDependency);
var
Dependency: TPkgDependency;
AltRoute: TFPList;
@ -279,7 +280,7 @@ begin
AltRoute:=FindAlternativeRoute(Dependency,FirstDependency);
if AltRoute<>nil then begin
if MainTVNode=nil then begin
MainTVNode:=TransitivityTreeView.Items.Add(nil,NodeCaption);
MainTVNode:=TransitivityTreeView.Items.Add(nil,GetDepOwnerName(DepOwner,true));
MainTVNode.ImageIndex:=ImgIndex;
MainTVNode.SelectedIndex:=MainTVNode.ImageIndex;
end;
@ -294,7 +295,7 @@ begin
TVNode.SelectedIndex:=TVNode.ImageIndex;
Info:=TCPDNodeInfo.Create;
TVNode.Data:=Info;
Info.Owner:=NodeCaption;
Info.Owner:=GetDepOwnerName(DepOwner,false);
Info.Dependency:=Dependency.RequiredPackage.Name;
MainTVNode.Expand(true);
AltRoute.Free;
@ -353,6 +354,19 @@ begin
end;
end;
function TCleanPkgDepsDlg.GetDepOwnerName(DepOwner: TObject; WithVersion: boolean
): string;
begin
if DepOwner is TProject then
Result:=CPDProjectName
else if DepOwner is TLazPackage then begin
if WithVersion then
Result:=TLazPackage(DepOwner).IDAsString
else
Result:=TLazPackage(DepOwner).Name;
end;
end;
function TCleanPkgDepsDlg.FetchDeletes: TObjectList;
var
i: Integer;
@ -362,7 +376,7 @@ begin
Result:=TObjectList.Create(true);
for i:=0 to TransitivityTreeView.Items.Count-1 do begin
TVNode:=TransitivityTreeView.Items[i];
if TObject(TVNode.Data) is TCPDNodeInfo then begin
if TVNodeChecked[TVNode] and (TObject(TVNode.Data) is TCPDNodeInfo) then begin
Info:=TCPDNodeInfo(TVNode.Data);
TVNode.Data:=nil;
Result.Add(Info);

View File

@ -161,28 +161,34 @@ var
i: Integer;
Info: TCPDNodeInfo;
Pkg: TLazPackage;
Dependency: TPkgDependency;
begin
Owners:=TFPList.Create;
ListOfNodeInfos:=nil;
try
if (Project1<>nil) then
Owners.Add(Project1);
//if (Project1<>nil) then
// Owners.Add(Project1);
for i:=0 to PackageGraph.Count-1 do
Owners.Add(PackageGraph[i]);
if ShowCleanPkgDepDlg(Owners,true,ListOfNodeInfos)<>mrOk then exit;
for i:=0 to ListOfNodeInfos.Count-1 do begin
Info:=TCPDNodeInfo(ListOfNodeInfos[i]);
debugln(['TPkgGraphExplorerDlg.CleanPkgDepsMenuItemClick ',Info.Owner,'->',Info.Dependency]);
if Info.Owner=CPDProjectName then begin
end else begin
Pkg:=PackageGraph.FindPackageWithName(Info.Owner,nil);
if Pkg<>nil then begin
// open package editor
if Assigned(OnOpenPackage) then
OnOpenPackage(Self,Pkg);
end;
debugln(['TPkgGraphExplorerDlg.CleanPkgDepsMenuItemClick Pkg=',Pkg<>nil]);
if Pkg=nil then continue;
Dependency:=Pkg.FindDependencyByName(Info.Dependency);
debugln(['TPkgGraphExplorerDlg.CleanPkgDepsMenuItemClick Dep=',Dependency<>nil]);
if Dependency=nil then continue;
// open package editor
if Assigned(OnOpenPackage) then
OnOpenPackage(Self,Pkg);
// remove dependency
PackageGraph.RemoveDependencyFromPackage(Pkg,Dependency,true);
end;
end;
finally