From 9991e30723ab5b26fb3689411d52b4f31f9bacd0 Mon Sep 17 00:00:00 2001 From: mattias Date: Sat, 13 Mar 2004 15:28:58 +0000 Subject: [PATCH] implemented: showing only existing packages on add requirement git-svn-id: trunk@5303 - --- ide/addtoprojectdlg.pas | 4 ++-- packager/addtopackagedlg.pas | 4 ++-- packager/packagelinks.pas | 20 ++++++++++++-------- packager/packagesystem.pas | 8 +++++--- 4 files changed, 21 insertions(+), 15 deletions(-) diff --git a/ide/addtoprojectdlg.pas b/ide/addtoprojectdlg.pas index 09c1b9c7c4..8e07ec7f89 100644 --- a/ide/addtoprojectdlg.pas +++ b/ide/addtoprojectdlg.pas @@ -158,7 +158,7 @@ begin end; // check if required package exists - if not PackageGraph.DependencyExists(NewDependency,fpfSearchPackageEverywhere) + if not PackageGraph.DependencyExists(NewDependency,fpfSearchAllExisting) then begin MessageDlg(lisProjAddPackageNotFound, Format(lisProjAddTheDependencyWasNotFound, ['"', NewDependency.AsString, @@ -494,7 +494,7 @@ var sl: TStringList; begin fPackages.Clear; - PackageGraph.IteratePackages(fpfSearchPackageEverywhere,@OnIteratePackages); + PackageGraph.IteratePackages(fpfSearchAllExisting,@OnIteratePackages); sl:=TStringList.Create; ANode:=fPackages.FindLowest; while ANode<>nil do begin diff --git a/packager/addtopackagedlg.pas b/packager/addtopackagedlg.pas index 6408e08ac0..c0179025fb 100644 --- a/packager/addtopackagedlg.pas +++ b/packager/addtopackagedlg.pas @@ -391,7 +391,7 @@ begin end; // check if required package exists - if not PackageGraph.DependencyExists(NewDependency,fpfSearchPackageEverywhere) + if not PackageGraph.DependencyExists(NewDependency,fpfSearchAllExisting) then begin MessageDlg(lisProjAddPackageNotFound, Format(lisA2PNoPackageFoundForDependencyPleaseChooseAnExisting, ['"', @@ -1828,7 +1828,7 @@ var sl: TStringList; begin fPackages.Clear; - PackageGraph.IteratePackages(fpfSearchPackageEverywhere,@OnIteratePackages); + PackageGraph.IteratePackages(fpfSearchAllExisting,@OnIteratePackages); sl:=TStringList.Create; ANode:=fPackages.FindLowest; while ANode<>nil do begin diff --git a/packager/packagelinks.pas b/packager/packagelinks.pas index f200d6336c..3b55291107 100644 --- a/packager/packagelinks.pas +++ b/packager/packagelinks.pas @@ -90,7 +90,7 @@ type Dependency: TPkgDependency): TPackageLink; function FindLinkWithPackageIDInTree(LinkTree: TAVLTree; APackageID: TLazPackageID): TPackageLink; - procedure IteratePackagesInTree(LinkTree: TAVLTree; + procedure IteratePackagesInTree(MustExist: boolean; LinkTree: TAVLTree; Event: TIteratePackagesEvent); procedure SetModified(const AValue: boolean); public @@ -109,7 +109,7 @@ type function FindLinkWithPkgName(const PkgName: string): TPackageLink; function FindLinkWithDependency(Dependency: TPkgDependency): TPackageLink; function FindLinkWithPackageID(APackageID: TLazPackageID): TPackageLink; - procedure IteratePackages(Event: TIteratePackagesEvent); + procedure IteratePackages(MustExist: boolean; Event: TIteratePackagesEvent); procedure AddUserLink(APackage: TLazPackage); procedure RemoveLink(APackageID: TLazPackageID); public @@ -525,14 +525,17 @@ begin Result:=nil; end; -procedure TPackageLinks.IteratePackagesInTree(LinkTree: TAVLTree; - Event: TIteratePackagesEvent); +procedure TPackageLinks.IteratePackagesInTree(MustExist: boolean; + LinkTree: TAVLTree; Event: TIteratePackagesEvent); var ANode: TAVLTreeNode; + PkgLink: TPackageLink; begin ANode:=LinkTree.FindLowest; while ANode<>nil do begin - Event(TPackageLink(ANode.Data)); + PkgLink:=TPackageLink(ANode.Data); + if (not MustExist) or FileExists(PkgLink.Filename) then + Event(PkgLink); ANode:=LinkTree.FindSuccessor(ANode); end; end; @@ -566,10 +569,11 @@ begin Result:=FindLinkWithPackageIDInTree(FGlobalLinks,APackageID); end; -procedure TPackageLinks.IteratePackages(Event: TIteratePackagesEvent); +procedure TPackageLinks.IteratePackages(MustExist: boolean; + Event: TIteratePackagesEvent); begin - IteratePackagesInTree(FUserLinks,Event); - IteratePackagesInTree(FGlobalLinks,Event); + IteratePackagesInTree(MustExist,FUserLinks,Event); + IteratePackagesInTree(MustExist,FGlobalLinks,Event); end; procedure TPackageLinks.AddUserLink(APackage: TLazPackage); diff --git a/packager/packagesystem.pas b/packager/packagesystem.pas index a0166589f8..d80b7cb37d 100644 --- a/packager/packagesystem.pas +++ b/packager/packagesystem.pas @@ -56,14 +56,16 @@ type fpfSearchInPckgsWithEditor, fpfSearchInLoadedPkgs, fpfSearchInPkgLinks, + fpfPkgLinkMustExist, // check if .pkg file exists fpfIgnoreVersion ); TFindPackageFlags = set of TFindPackageFlag; const - fpfSearchPackageEverywhere = + fpfSearchEverywhere = [fpfSearchInInstalledPckgs,fpfSearchInAutoInstallPckgs, fpfSearchInPckgsWithEditor,fpfSearchInPkgLinks,fpfSearchInLoadedPkgs]; + fpfSearchAllExisting = fpfSearchEverywhere+[fpfPkgLinkMustExist]; type TPkgAddedEvent = procedure(APackage: TLazPackage) of object; @@ -1802,7 +1804,7 @@ begin if Dependency.LoadPackageResult=lprUndefined then begin BeginUpdate(false); // search compatible package in opened packages - ANode:=FindNodeOfDependency(Dependency,fpfSearchPackageEverywhere); + ANode:=FindNodeOfDependency(Dependency,fpfSearchEverywhere); if (ANode<>nil) then begin Dependency.RequiredPackage:=TLazPackage(ANode.Data); Dependency.LoadPackageResult:=lprSuccess; @@ -1964,7 +1966,7 @@ begin end; // iterate in package links if (fpfSearchInPkgLinks in Flags) then begin - PkgLinks.IteratePackages(Event); + PkgLinks.IteratePackages(fpfPkgLinkMustExist in Flags,Event); end; end;