mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-11 07:08:35 +02:00
IDE: package graph: show indriectly installed packages with install icons
git-svn-id: trunk@53530 -
This commit is contained in:
parent
c94e49018d
commit
16f22c6fc1
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user