Packager: Reuse TPkgDependency.AsString.

git-svn-id: trunk@63956 -
This commit is contained in:
juha 2020-10-04 17:34:14 +00:00
parent 5382b08b6e
commit ab4eeb5ffc
4 changed files with 46 additions and 66 deletions

View File

@ -71,7 +71,7 @@ uses
LazarusIDEStrConsts, MainIntf, IDEProcs, DialogProcs, IDEOptionDefs,
PackageDefs, Project, InputHistory, MainBase, EnvironmentOpts,
AddToProjectDlg, AddPkgDependencyDlg, AddFPMakeDependencyDlg,
ProjPackChecks, ProjPackEditing, ProjPackFilePropGui, PackageSystem, PackageLinks;
ProjPackChecks, ProjPackEditing, ProjPackFilePropGui, PackageSystem;
type
TOnAddUnitToProject =
@ -821,7 +821,7 @@ begin
Exit;
end;
end else begin
PackageLink:=FPropGui.FindOPLink(CurDependency);
PackageLink:=FindOPLink(CurDependency);
if PackageLink<>nil then
PkgLinks.Add(PackageLink);
end;
@ -1222,7 +1222,6 @@ procedure TProjectInspectorForm.UpdateRequiredPackages;
var
Dependency: TPkgDependency;
RequiredBranch, RemovedBranch: TTreeFilterBranch;
NodeText, AFilename: String;
ANodeData : TPENodeData;
begin
if not CanUpdate(pefNeedUpdateRequiredPkgs) then exit;
@ -1234,23 +1233,9 @@ begin
// required packages
Dependency:=LazProject.FirstRequiredDependency;
while Dependency<>nil do begin
// Figure out the item's caption
NodeText:=Dependency.AsString;
if Dependency.DefaultFilename<>'' then begin
AFilename:=Dependency.MakeFilenameRelativeToOwner(Dependency.DefaultFilename);
if Dependency.PreferDefaultFilename then
NodeText:=Format(lisCEIn, [NodeText,AFilename]) // like the 'in' keyword in the uses section
else
NodeText:=Format(lisPckEditDefault, [NodeText, AFilename]);
end;
if Dependency.LoadPackageResult<>lprSuccess then
if FPropGui.FindOPLink(Dependency)<>nil then
NodeText:=NodeText+' '+lisPckEditAvailableOnline;
if Dependency.DependencyType=pdtFPMake then
NodeText:=NodeText+' '+lisPckEditFPMakePackage;
// Add the required package under the branch
ANodeData := FPropGui.CreateNodeData(penDependency, Dependency.PackageName, False);
RequiredBranch.AddNodeData(NodeText, ANodeData);
ANodeData:=FPropGui.CreateNodeData(penDependency, Dependency.PackageName, False);
RequiredBranch.AddNodeData(Dependency.AsString(False,True)+OPNote(Dependency), ANodeData);
Dependency:=Dependency.NextRequiresDependency;
end;

View File

@ -278,7 +278,7 @@ type
procedure ConsistencyCheck;
function IsCompatible(Pkg: TLazPackageID): boolean; overload;
procedure MakeCompatible(const PkgName: string; const Version: TPkgVersion);
function AsString(WithOwner: boolean; WithDefaults: boolean): string; overload;
function AsString(WithOwner, WithDefaults: boolean): string; overload;
// API for iterating dependencies.
function NextUsedByDependency: TPkgDependency; override;
function PrevUsedByDependency: TPkgDependency; override;
@ -1933,21 +1933,25 @@ begin
if MaxVersion.Compare(Version)<0 then MaxVersion.Assign(Version);
end;
function TPkgDependency.AsString(WithOwner: boolean; WithDefaults: boolean): string;
function TPkgDependency.AsString(WithOwner, WithDefaults: boolean): string;
var
FN: String;
begin
Result:=inherited AsString;
if WithOwner and (Owner<>nil) then
Result:=GetDependencyOwnerAsString(Self)+' uses '+Result;
if WithDefaults then
begin
if DefaultFilename<>'' then begin
Result+=', ';
if DefaultFilename<>'' then
begin
FN:=MakeFilenameRelativeToOwner(DefaultFilename);
if PreferDefaultFilename then
Result+='preferred'
Result:=Format(lisCEIn, [Result,FN]) // like 'in' keyword in uses section
else
Result+='default';
Result+='="'+DefaultFilename+'"';
Result:=Format(lisPckEditDefault, [Result,FN]);
end;
if DependencyType=pdtFPMake then
Result:=Result+' '+lisPckEditFPMakePackage;
end;
end;

View File

@ -579,25 +579,6 @@ begin
PkgEditMenuViewPackageSource:=RegisterIDEMenuCommand(AParent,'View Package Source',lisPckEditViewPackageSource);
end;
function DependencyAsString(ADependency: TPkgDependency): string;
// A display text for a dependency including min/max versions + other info.
// ToDo: Modify Dependency.AsString output to replace this function,
// or create a new method for the task.
var
aFilename: String;
begin
Result:=ADependency.AsString;
if ADependency.DefaultFilename<>'' then begin
aFilename:=ADependency.MakeFilenameRelativeToOwner(ADependency.DefaultFilename);
if ADependency.PreferDefaultFilename then
Result:=Result+' in '+aFilename // like the 'in' keyword in uses section
else
Result:=Format(lisPckEditDefault, [Result, aFilename]);
end;
if ADependency.DependencyType=pdtFPMake then
Result:=Result+' '+lisPckEditFPMakePackage;
end;
{ TPackageEditorForm }
procedure TPackageEditorForm.PublishClick(Sender: TObject);
@ -2323,7 +2304,7 @@ begin
and (FNextSelectedPart.Name=NodeData.Name)
then
FilterEdit.SelectedPart:=NodeData;
RequiredBranch.AddNodeData(DependencyAsString(Dependency), NodeData);
RequiredBranch.AddNodeData(Dependency.AsString(False,True)+OPNote(Dependency), NodeData);
Dependency:=Dependency.NextRequiresDependency;
end;
if (FNextSelectedPart<>nil) and (FNextSelectedPart.Typ=penDependency) then
@ -2342,7 +2323,7 @@ begin
RemovedBranch.ClearNodeData;
while Dependency<>nil do begin
NodeData:=FPropGui.CreateNodeData(penDependency,Dependency.PackageName,true);
RemovedBranch.AddNodeData(DependencyAsString(Dependency), NodeData);
RemovedBranch.AddNodeData(Dependency.AsString(False,True)+OPNote(Dependency), NodeData);
Dependency:=Dependency.NextRequiresDependency;
end;
RemovedBranch.InvalidateBranch;
@ -2993,18 +2974,18 @@ var
OldIndex, NewIndex: Integer;
RequiredBranch: TTreeFilterBranch;
Moved: Boolean;
CurDependency: TPkgDependency;
Dependency: TPkgDependency;
begin
CurDependency:=GetSingleSelectedDependency;
if (LazPackage=nil) or (CurDependency=nil) then exit;
Dependency:=GetSingleSelectedDependency;
if (LazPackage=nil) or (Dependency=nil) then exit;
if Offset<0 then
Moved := LazPackage.MoveRequiredDependencyUp(CurDependency)
Moved := LazPackage.MoveRequiredDependencyUp(Dependency)
else
Moved := LazPackage.MoveRequiredDependencyDown(CurDependency);
Moved := LazPackage.MoveRequiredDependencyDown(Dependency);
if not Moved then exit;
LazPackage.ModifySilently;
RequiredBranch:=FilterEdit.GetExistingBranch(FRequiredPackagesNode);
OldIndex:=RequiredBranch.Items.IndexOf(DependencyAsString(CurDependency));
OldIndex:=RequiredBranch.Items.IndexOf(Dependency.AsString(False,True)+OPNote(Dependency));
NewIndex:=OldIndex+Offset;
RequiredBranch.Move(OldIndex,NewIndex);
UpdatePEProperties;

View File

@ -87,7 +87,6 @@ type
function CreateNodeData(Typ: TPENodeType; aName: string; aRemoved: boolean): TPENodeData;
procedure FreeNodeData(Typ: TPENodeType);
function GetDependencyImageIndex(aDep: TPkgDependencyID): Integer;
function FindOPLink(const ADependency: TPkgDependencyID): TPackageLink;
procedure SetAddToUsesCB(State: TMultiBool);
procedure SetCallRegisterProcCB(State: TMultiBool);
procedure SetRegisteredPluginsGB(aPlugins: TStringList);
@ -102,6 +101,8 @@ type
function GetNodeData(TVNode: TTreeNode): TPENodeData;
function NodeTreeIsIn(xIterNode, xParentNode: TTreeNode): Boolean;
function FindOPLink(const ADependency: TPkgDependencyID): TPackageLink;
function OPNote(ADep: TPkgDependencyID): string;
implementation
@ -127,6 +128,27 @@ begin
Result := NodeTreeIsIn(xIterNode.Parent, xParentNode);
end;
function FindOPLink(const ADependency: TPkgDependencyID): TPackageLink;
var
PackageLink: TPackageLink;
begin
Result := nil;
if OPMInterface = Nil then Exit;
PackageLink := LazPackageLinks.FindLinkWithPkgName(ADependency.AsString);
if Assigned(PackageLink) and (PackageLink.Origin = ploOnline)
and (ADependency.IsCompatible(PackageLink.Version)) then
Result := PackageLink;
end;
function OPNote(ADep: TPkgDependencyID): string;
// Returns a note about online package's availability, if there is one.
begin
if (ADep.LoadPackageResult<>lprSuccess) and (FindOPLink(ADep)<>nil) then
Result:=' '+lisPckEditAvailableOnline
else
Result:='';
end;
{ TProjPackFilePropGui }
constructor TProjPackFilePropGui.Create(aOwner: TWinControl; aPackageGui: Boolean);
@ -306,18 +328,6 @@ begin
Result := ImageIndexConflict;
end;
function TProjPackFilePropGui.FindOPLink(const ADependency: TPkgDependencyID): TPackageLink;
var
PackageLink: TPackageLink;
begin
Result := nil;
if OPMInterface = Nil then Exit;
PackageLink := LazPackageLinks.FindLinkWithPkgName(ADependency.AsString);
if Assigned(PackageLink) and (PackageLink.Origin = ploOnline)
and (ADependency.IsCompatible(PackageLink.Version)) then
Result := PackageLink;
end;
procedure SetCheckBox(Box: TCheckBox; aVisible: boolean; State: TMultiBool);
begin
Box.Visible:=aVisible;