IDE: package graph: show indriectly installed packages with install icons

git-svn-id: trunk@53530 -
This commit is contained in:
mattias 2016-12-02 20:55:07 +00:00
parent c94e49018d
commit 16f22c6fc1

View File

@ -96,7 +96,7 @@ type
FUpdatingSelection: boolean;
procedure OpenDependencyOwner(DependencyOwner: TObject);
procedure SetupComponents;
function GetPackageImageIndex(Pkg: TLazPackage): integer;
function GetPackageImageIndex(Pkg: TLazPackage; InstallPkgList: TFPList): integer;
function GetSelectedPackage: TLazPackage;
function FindPackage(const NodeText: string): TLazPackage;
function PackageAsNodeText(Pkg: TLazPackage): string;
@ -282,6 +282,7 @@ var
ImgIndex: Integer;
NodeText: String;
ReqPkg: TLazPackage;
InstallPkgList: TFPList;
begin
TV:=PkgTreeView;
Pkg:=FindPackage(Node.Text);
@ -291,40 +292,47 @@ begin
Node.HasChildren:=false;
exit;
end;
i:=0;
Dependency:=Pkg.FirstRequiredDependency;
while Dependency<>nil do begin
ReqPkg:=Dependency.RequiredPackage;
if ReqPkg<>nil then
NodeText:=PackageAsNodeText(ReqPkg)
else
NodeText:=Dependency.AsString;
if Node.Count=i then
SubNode:=TV.Items.AddChild(Node,NodeText)
else begin
SubNode:=Node[i];
SubNode.Text:=NodeText;
end;
if ReqPkg<>nil then begin
CycleNode:=Node;
while (CycleNode<>nil) and (CycleNode.Text<>NodeText) do
CycleNode:=CycleNode.Parent;
if CycleNode<>nil then
ImgIndex:=ImgIndexCyclePackage
InstallPkgList:=nil;
try
PackageGraph.GetAllRequiredPackages(nil,
PackageGraph.FirstAutoInstallDependency,InstallPkgList,[]);
i:=0;
Dependency:=Pkg.FirstRequiredDependency;
while Dependency<>nil do begin
ReqPkg:=Dependency.RequiredPackage;
if ReqPkg<>nil then
NodeText:=PackageAsNodeText(ReqPkg)
else
ImgIndex:=GetPackageImageIndex(ReqPkg);
SubNode.HasChildren:=ReqPkg.FirstRequiredDependency<>nil;
end else begin
ImgIndex:=ImgIndexMissingPackage;
SubNode.HasChildren:=false;
NodeText:=Dependency.AsString;
if Node.Count=i then
SubNode:=TV.Items.AddChild(Node,NodeText)
else begin
SubNode:=Node[i];
SubNode.Text:=NodeText;
end;
if ReqPkg<>nil then begin
CycleNode:=Node;
while (CycleNode<>nil) and (CycleNode.Text<>NodeText) do
CycleNode:=CycleNode.Parent;
if CycleNode<>nil then
ImgIndex:=ImgIndexCyclePackage
else
ImgIndex:=GetPackageImageIndex(ReqPkg,InstallPkgList);
SubNode.HasChildren:=ReqPkg.FirstRequiredDependency<>nil;
end else begin
ImgIndex:=ImgIndexMissingPackage;
SubNode.HasChildren:=false;
end;
SubNode.ImageIndex:=ImgIndex;
SubNode.SelectedIndex:=ImgIndex;
inc(i);
Dependency:=Dependency.NextRequiresDependency;
end;
SubNode.ImageIndex:=ImgIndex;
SubNode.SelectedIndex:=ImgIndex;
inc(i);
Dependency:=Dependency.NextRequiresDependency;
while Node.Count>i do
Node[Node.Count-1].Free;
finally
InstallPkgList.Free;
end;
while Node.Count>i do
Node[Node.Count-1].Free;
end;
procedure TPkgGraphExplorerDlg.PkgTreeViewSelectionChanged(Sender: TObject);
@ -369,16 +377,23 @@ begin
LvlGraphControl1.Caption:='';
end;
function TPkgGraphExplorerDlg.GetPackageImageIndex(Pkg: TLazPackage): integer;
function TPkgGraphExplorerDlg.GetPackageImageIndex(Pkg: TLazPackage;
InstallPkgList: TFPList): integer;
var
WillInstall: Boolean;
begin
WillInstall:=(Pkg.AutoInstall<>pitNope)
or ((InstallPkgList<>nil) and (InstallPkgList.IndexOf(Pkg)>=0));
if Pkg.Installed<>pitNope then begin
if Pkg.AutoInstall<>pitNope then begin
// installed
if WillInstall then begin
Result:=ImgIndexInstalledPackage;
end else begin
Result:=ImgIndexUninstallPackage;
end;
end else begin
if Pkg.AutoInstall<>pitNope then begin
// not installed
if WillInstall then begin
Result:=ImgIndexInstallPackage;
end else begin
Result:=ImgIndexPackage;
@ -479,13 +494,17 @@ var
CurPkg: TLazPackage;
OldExpanded: TTreeNodeExpandedState;
fSortedPackages: TAVLTree;
InstallPkgList: TFPList;
begin
InstallPkgList:=nil;
fSortedPackages:=TAVLTree.Create(@CompareLazPackageID);
try
// get list of packages
Cnt:=PackageGraph.Count;
for i:=0 to Cnt-1 do
fSortedPackages.Add(PackageGraph[i]);
PackageGraph.GetAllRequiredPackages(nil,
PackageGraph.FirstAutoInstallDependency,InstallPkgList,[]);
// rebuild the TreeView
PkgTreeView.BeginUpdate;
// save old expanded state
@ -502,7 +521,7 @@ begin
ViewNode.Text:=PackageAsNodeText(CurPkg);
ViewNode.HasChildren:=CurPkg.FirstRequiredDependency<>nil;
ViewNode.Expanded:=false;
ViewNode.ImageIndex:=GetPackageImageIndex(CurPkg);
ViewNode.ImageIndex:=GetPackageImageIndex(CurPkg,InstallPkgList);
ViewNode.SelectedIndex:=ViewNode.ImageIndex;
ViewNode:=ViewNode.GetNextSibling;
HiddenNode:=fSortedPackages.FindSuccessor(HiddenNode);
@ -518,6 +537,7 @@ begin
OldExpanded.Free;
// completed
finally
InstallPkgList.Free;
fSortedPackages.Free;
PkgTreeView.EndUpdate;
end;
@ -545,7 +565,9 @@ var
ProjectNode: TLvlGraphNode;
IDENode: TLvlGraphNode;
fSortedPackages: TAVLTree;
InstallPkgList: TFPList;
begin
InstallPkgList:=nil;
fSortedPackages:=TAVLTree.Create(@CompareLazPackageID);
LvlGraphControl1.BeginUpdate;
try
@ -553,6 +575,8 @@ begin
Cnt:=PackageGraph.Count;
for i:=0 to Cnt-1 do
fSortedPackages.Add(PackageGraph[i]);
PackageGraph.GetAllRequiredPackages(nil,
PackageGraph.FirstAutoInstallDependency,InstallPkgList,[]);
// save old selection
OldSelected:='';
@ -578,7 +602,7 @@ begin
while AVLNode<>nil do begin
CurPkg:=TLazPackage(AVLNode.Data);
ViewNode:=LvlGraphControl1.Graph.GetNode(PackageAsNodeText(CurPkg),true);
ViewNode.ImageIndex:=GetPackageImageIndex(CurPkg);
ViewNode.ImageIndex:=GetPackageImageIndex(CurPkg,InstallPkgList);
AVLNode:=fSortedPackages.FindSuccessor(AVLNode);
end;
@ -600,6 +624,7 @@ begin
LvlGraphControl1.SelectedNode:=LvlGraphControl1.Graph.GetNode(OldSelected,false);
finally
InstallPkgList.Free;
fSortedPackages.Free;
LvlGraphControl1.EndUpdate;
end;