IdeIntf: Add base class TPkgDependencyBase to new unit PackageDependencyIntf.

git-svn-id: trunk@54404 -
This commit is contained in:
juha 2017-03-15 13:13:34 +00:00
parent 6b6acd5124
commit f4df80d90f
14 changed files with 392 additions and 266 deletions

1
.gitattributes vendored
View File

@ -1869,6 +1869,7 @@ components/ideintf/objectinspector.lfm svneol=native#text/plain
components/ideintf/objectinspector.pp svneol=native#text/pascal
components/ideintf/objinspstrconsts.pas svneol=native#text/pascal
components/ideintf/oifavoriteproperties.pas svneol=native#text/pascal
components/ideintf/packagedependencyintf.pas svneol=native#text/pascal
components/ideintf/packageintf.pas svneol=native#text/pascal
components/ideintf/pagespropeditdlg.lfm svneol=native#text/plain
components/ideintf/pagespropeditdlg.pas svneol=native#text/pascal

View File

@ -20,7 +20,7 @@
<Description Value="IDEIntf - the interface units for the Lazarus IDE"/>
<License Value="Modified LGPL2"/>
<Version Major="1"/>
<Files Count="81">
<Files Count="82">
<Item1>
<Filename Value="actionseditor.pas"/>
<UnitName Value="ActionsEditor"/>
@ -346,6 +346,10 @@
<Filename Value="changeparentdlg.lfm"/>
<Type Value="LFM"/>
</Item81>
<Item82>
<Filename Value="packagedependencyintf.pas"/>
<UnitName Value="PackageDependencyIntf"/>
</Item82>
</Files>
<LazDoc Paths="docs"/>
<i18n>

View File

@ -22,7 +22,7 @@ uses
ProjectIntf, ProjectResourcesIntf, PropEdits, PropEditUtils, SrcEditorIntf,
StatusBarPropEdit, StringsPropEditDlg, TextTools, TreeViewPropEdit,
UnitResources, ProjPackIntf, DBGridColumnsPropEditForm, ToolBarIntf,
ChangeParentDlg, LazarusPackageIntf;
ChangeParentDlg, PackageDependencyIntf, LazarusPackageIntf;
implementation

View File

@ -0,0 +1,233 @@
unit PackageDependencyIntf;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils;
type
{ TPkgVersion }
TPkgVersionValid = (
pvtNone,
pvtMajor,
pvtMinor,
pvtRelease,
pvtBuild
);
TPkgVersion = class
public
Major: integer;
Minor: integer;
Release: integer;
Build: integer;
Valid: TPkgVersionValid;
OnChange: TNotifyEvent;
procedure Clear;
function Compare(Version2: TPkgVersion): integer;
function CompareMask(ExactVersion: TPkgVersion): integer;
procedure Assign(Source: TPkgVersion);
function AsString: string;
function AsWord: string;
function ReadString(const s: string): boolean;
procedure SetValues(NewMajor, NewMinor, NewRelease, NewBuild: integer;
NewValid: TPkgVersionValid = pvtBuild);
function VersionBound(v: integer): integer;
end;
{ PkgDependency flags }
TPkgDependencyFlag = (
pdfMinVersion, // >= MinVersion
pdfMaxVersion // <= MaxVersion
);
TPkgDependencyFlags = set of TPkgDependencyFlag;
{ TPkgDependencyBase }
TPkgDependencyBase = class
private
protected
FFlags: TPkgDependencyFlags;
FMaxVersion: TPkgVersion;
FMinVersion: TPkgVersion;
FPackageName: string;
FRemoved: boolean;
//FRequiredPackage: TIDEPackage;
procedure SetPackageName(const AValue: string); virtual; abstract;
public
constructor Create;
destructor Destroy; override;
procedure Clear; virtual;
// API for iterating dependencies.
function NextUsedByDependency: TPkgDependencyBase; virtual; abstract;
function PrevUsedByDependency: TPkgDependencyBase; virtual; abstract;
function NextRequiresDependency: TPkgDependencyBase; virtual; abstract;
function PrevRequiresDependency: TPkgDependencyBase; virtual; abstract;
// API for adding / removing dependencies.
procedure AddRequiresDep(var FirstDependency: TPkgDependencyBase); virtual; abstract;
procedure AddUsedByDep(var FirstDependency: TPkgDependencyBase); virtual; abstract;
procedure RemoveRequiresDep(var FirstDependency: TPkgDependencyBase); virtual; abstract;
procedure RemoveUsedByDep(var FirstDependency: TPkgDependencyBase); virtual; abstract;
public
property Flags: TPkgDependencyFlags read FFlags write FFlags;
property MinVersion: TPkgVersion read FMinVersion write FMinVersion;
property MaxVersion: TPkgVersion read FMaxVersion write FMaxVersion;
property PackageName: string read FPackageName write SetPackageName;
property Removed: boolean read FRemoved write FRemoved;
end;
implementation
{ TPkgVersion }
procedure TPkgVersion.Clear;
begin
SetValues(0,0,0,0,pvtBuild);
end;
function TPkgVersion.Compare(Version2: TPkgVersion): integer;
begin
Result:=Major-Version2.Major;
if Result<>0 then exit;
Result:=Minor-Version2.Minor;
if Result<>0 then exit;
Result:=Release-Version2.Release;
if Result<>0 then exit;
Result:=Build-Version2.Build;
end;
function TPkgVersion.CompareMask(ExactVersion: TPkgVersion): integer;
begin
if Valid=pvtNone then exit(0);
Result:=Major-ExactVersion.Major;
if Result<>0 then exit;
if Valid=pvtMajor then exit;
Result:=Minor-ExactVersion.Minor;
if Result<>0 then exit;
if Valid=pvtMinor then exit;
Result:=Release-ExactVersion.Release;
if Result<>0 then exit;
if Valid=pvtRelease then exit;
Result:=Build-ExactVersion.Build;
end;
procedure TPkgVersion.Assign(Source: TPkgVersion);
begin
SetValues(Source.Major,Source.Minor,Source.Release,Source.Build,Source.Valid);
end;
function TPkgVersion.AsString: string;
begin
Result:=IntToStr(Major)+'.'+IntToStr(Minor);
if (Build<>0) then
Result:=Result+'.'+IntToStr(Release)+'.'+IntToStr(Build)
else if (Release<>0) then
Result:=Result+'.'+IntToStr(Release)
end;
function TPkgVersion.AsWord: string;
begin
Result:=IntToStr(Major)+'_'+IntToStr(Minor);
if (Build<>0) then
Result:=Result+'_'+IntToStr(Release)+'_'+IntToStr(Build)
else if (Release<>0) then
Result:=Result+'_'+IntToStr(Release)
end;
function TPkgVersion.ReadString(const s: string): boolean;
var
ints: array[1..4] of integer;
i: integer;
CurPos: Integer;
StartPos: Integer;
NewValid: TPkgVersionValid;
begin
Result:=false;
CurPos:=1;
NewValid:=pvtNone;
for i:=1 to 4 do begin
ints[i]:=0;
if CurPos<length(s) then begin
if i>Low(ints) then begin
// read point
if s[CurPos]<>'.' then exit;
inc(CurPos);
end;
// read int
StartPos:=CurPos;
while (CurPos<=length(s)) and (i<=9999)
and (s[CurPos] in ['0'..'9']) do begin
ints[i]:=ints[i]*10+ord(s[CurPos])-ord('0');
inc(CurPos);
end;
if (StartPos=CurPos) then exit;
NewValid:=succ(NewValid);
end;
end;
if CurPos<=length(s) then exit;
SetValues(ints[1],ints[2],ints[3],ints[4],NewValid);
Result:=true;
end;
procedure TPkgVersion.SetValues(NewMajor, NewMinor, NewRelease,
NewBuild: integer; NewValid: TPkgVersionValid);
begin
NewMajor:=VersionBound(NewMajor);
NewMinor:=VersionBound(NewMinor);
NewRelease:=VersionBound(NewRelease);
NewBuild:=VersionBound(NewBuild);
if (NewMajor=Major) and (NewMinor=Minor) and (NewRelease=Release)
and (NewBuild=Build) and (NewValid=Valid) then exit;
Major:=NewMajor;
Minor:=NewMinor;
Release:=NewRelease;
Build:=NewBuild;
Valid:=NewValid;
if Assigned(OnChange) then OnChange(Self);
end;
function TPkgVersion.VersionBound(v: integer): integer;
begin
if v>9999 then
Result:=9999
else if v<0 then
Result:=0
else
Result:=v;
end;
{ TLazPackageID }
constructor TPkgDependencyBase.Create;
begin
inherited Create;
MinVersion:=TPkgVersion.Create;
MaxVersion:=TPkgVersion.Create;
Clear;
end;
destructor TPkgDependencyBase.Destroy;
begin
PackageName:='';
FreeAndNil(fMinVersion);
FreeAndNil(fMaxVersion);
inherited Destroy;
end;
procedure TPkgDependencyBase.Clear;
begin
PackageName:='';
FRemoved:=false;
FFlags:=[];
FMaxVersion.Clear;
FMinVersion.Clear;
end;
end.

View File

@ -16,8 +16,13 @@ unit PackageIntf;
interface
uses
Classes, SysUtils, contnrs, LCLProc, Forms, LazConfigStorage,
NewItemIntf, ProjPackIntf, IDEOptionsIntf;
Classes, SysUtils, contnrs,
// LCL
LCLProc, Forms,
// LazUtils
LazConfigStorage,
// IdeIntf
NewItemIntf, ProjPackIntf, PackageDependencyIntf;
const
PkgDescGroupName = 'Package';
@ -42,36 +47,6 @@ const
PkgFileRealUnitTypes = [pftUnit,pftMainUnit];
type
{ TPkgVersion }
TPkgVersionValid = (
pvtNone,
pvtMajor,
pvtMinor,
pvtRelease,
pvtBuild
);
TPkgVersion = class
public
Major: integer;
Minor: integer;
Release: integer;
Build: integer;
Valid: TPkgVersionValid;
OnChange: TNotifyEvent;
procedure Clear;
function Compare(Version2: TPkgVersion): integer;
function CompareMask(ExactVersion: TPkgVersion): integer;
procedure Assign(Source: TPkgVersion);
function AsString: string;
function AsWord: string;
function ReadString(const s: string): boolean;
procedure SetValues(NewMajor, NewMinor, NewRelease, NewBuild: integer;
NewValid: TPkgVersionValid = pvtBuild);
function VersionBound(v: integer): integer;
end;
TIDEPackage = class;
{ TLazPackageFile }
@ -96,6 +71,32 @@ type
property InUses: boolean read GetInUses write SetInUses; // added to uses section of package
end;
{ PkgDependency flags }
TLoadPackageResult = (
lprUndefined,
lprSuccess,
lprNotFound,
lprLoadError
);
{ TPkgDependencyID }
TPkgDependencyID = class(TPkgDependencyBase)
private
procedure SetRequiredPackage(const AValue: TIDEPackage);
protected
FLoadPackageResult: TLoadPackageResult;
FRequiredPackage: TIDEPackage;
public
constructor Create;
destructor Destroy; override;
procedure Clear; override;
public
property LoadPackageResult: TLoadPackageResult read FLoadPackageResult write FLoadPackageResult;
property RequiredIDEPackage: TIDEPackage read FRequiredPackage write SetRequiredPackage;
end;
{ TLazPackageID }
TLazPackageID = class(TIDEProjPackBase)
@ -135,9 +136,9 @@ type
TIDEPackage = class(TLazPackageID)
protected
FAutoInstall: TPackageInstallType;
FChangeStamp: integer;
FCustomOptions: TConfigStorage;
FFilename: string;
FChangeStamp: integer;
function GetDirectoryExpanded: string; virtual; abstract;
function GetFileCount: integer; virtual; abstract;
function GetPkgFiles(Index: integer): TLazPackageFile; virtual; abstract;
@ -154,16 +155,18 @@ type
constructor Create; override;
destructor Destroy; override;
procedure ClearCustomOptions;
// used by dependencies
procedure AddUsedByDependency(Dependency: TPkgDependencyBase); virtual; abstract;
procedure RemoveUsedByDependency(Dependency: TPkgDependencyBase); virtual; abstract;
public
property AutoInstall: TPackageInstallType read FAutoInstall
write SetAutoInstall;
property AutoInstall: TPackageInstallType read FAutoInstall write SetAutoInstall;
property Filename: string read FFilename write SetFilename;//the .lpk filename
property Modified: boolean read GetModified write SetModified;
property DirectoryExpanded: string read GetDirectoryExpanded;
property CustomOptions: TConfigStorage read FCustomOptions;
property ChangeStamp: integer read FChangeStamp;
property CustomOptions: TConfigStorage read FCustomOptions;
property DirectoryExpanded: string read GetDirectoryExpanded;
property FileCount: integer read GetFileCount;
property Files[Index: integer]: TLazPackageFile read GetPkgFiles;
property Modified: boolean read GetModified write SetModified;
property RemovedFilesCount: integer read GetRemovedCount;
property RemovedFiles[Index: integer]: TLazPackageFile read GetRemovedPkgFiles;
end;
@ -474,123 +477,36 @@ begin
FDescriptor:=TNewItemPackage(Source).Descriptor;
end;
{ TPkgVersion }
{ TLazPackageID }
procedure TPkgVersion.Clear;
constructor TPkgDependencyID.Create;
begin
SetValues(0,0,0,0,pvtBuild);
inherited Create;
end;
function TPkgVersion.Compare(Version2: TPkgVersion): integer;
destructor TPkgDependencyID.Destroy;
begin
Result:=Major-Version2.Major;
if Result<>0 then exit;
Result:=Minor-Version2.Minor;
if Result<>0 then exit;
Result:=Release-Version2.Release;
if Result<>0 then exit;
Result:=Build-Version2.Build;
RequiredIDEPackage:=nil;
inherited Destroy;
end;
function TPkgVersion.CompareMask(ExactVersion: TPkgVersion): integer;
procedure TPkgDependencyID.Clear;
begin
if Valid=pvtNone then exit(0);
Result:=Major-ExactVersion.Major;
if Result<>0 then exit;
if Valid=pvtMajor then exit;
Result:=Minor-ExactVersion.Minor;
if Result<>0 then exit;
if Valid=pvtMinor then exit;
Result:=Release-ExactVersion.Release;
if Result<>0 then exit;
if Valid=pvtRelease then exit;
Result:=Build-ExactVersion.Build;
inherited Clear;
RequiredIDEPackage:=nil;
end;
procedure TPkgVersion.Assign(Source: TPkgVersion);
begin
SetValues(Source.Major,Source.Minor,Source.Release,Source.Build,Source.Valid);
end;
// Setters
function TPkgVersion.AsString: string;
procedure TPkgDependencyID.SetRequiredPackage(const AValue: TIDEPackage);
begin
Result:=IntToStr(Major)+'.'+IntToStr(Minor);
if (Build<>0) then
Result:=Result+'.'+IntToStr(Release)+'.'+IntToStr(Build)
else if (Release<>0) then
Result:=Result+'.'+IntToStr(Release)
end;
function TPkgVersion.AsWord: string;
begin
Result:=IntToStr(Major)+'_'+IntToStr(Minor);
if (Build<>0) then
Result:=Result+'_'+IntToStr(Release)+'_'+IntToStr(Build)
else if (Release<>0) then
Result:=Result+'_'+IntToStr(Release)
end;
function TPkgVersion.ReadString(const s: string): boolean;
var
ints: array[1..4] of integer;
i: integer;
CurPos: Integer;
StartPos: Integer;
NewValid: TPkgVersionValid;
begin
Result:=false;
CurPos:=1;
NewValid:=pvtNone;
for i:=1 to 4 do begin
ints[i]:=0;
if CurPos<length(s) then begin
if i>Low(ints) then begin
// read point
if s[CurPos]<>'.' then exit;
inc(CurPos);
end;
// read int
StartPos:=CurPos;
while (CurPos<=length(s)) and (i<=9999)
and (s[CurPos] in ['0'..'9']) do begin
ints[i]:=ints[i]*10+ord(s[CurPos])-ord('0');
inc(CurPos);
end;
if (StartPos=CurPos) then exit;
NewValid:=succ(NewValid);
end;
end;
if CurPos<=length(s) then exit;
SetValues(ints[1],ints[2],ints[3],ints[4],NewValid);
Result:=true;
end;
procedure TPkgVersion.SetValues(NewMajor, NewMinor, NewRelease,
NewBuild: integer; NewValid: TPkgVersionValid);
begin
NewMajor:=VersionBound(NewMajor);
NewMinor:=VersionBound(NewMinor);
NewRelease:=VersionBound(NewRelease);
NewBuild:=VersionBound(NewBuild);
if (NewMajor=Major) and (NewMinor=Minor) and (NewRelease=Release)
and (NewBuild=Build) and (NewValid=Valid) then exit;
Major:=NewMajor;
Minor:=NewMinor;
Release:=NewRelease;
Build:=NewBuild;
Valid:=NewValid;
if Assigned(OnChange) then OnChange(Self);
end;
function TPkgVersion.VersionBound(v: integer): integer;
begin
if v>9999 then
Result:=9999
else if v<0 then
Result:=0
else
Result:=v;
if FRequiredPackage=AValue then exit;
if FRequiredPackage<>nil then
FRequiredPackage.RemoveUsedByDependency(Self);
FLoadPackageResult:=lprUndefined;
FRequiredPackage:=AValue;
if FRequiredPackage<>nil then
FRequiredPackage.AddUsedByDependency(Self);
end;
{ TLazPackageID }

View File

@ -11,7 +11,7 @@ uses
// LazControls
ListFilterEdit,
// IDEIntf
IDEWindowIntf, PackageIntf, IDEDialogs,
IDEWindowIntf, PackageDependencyIntf, PackageIntf, IDEDialogs,
// IDE
LazarusIDEStrConsts, PackageDefs, PackageSystem, ProjPackCommon, ProjPackChecks;

View File

@ -5,9 +5,13 @@ unit package_description_options;
interface
uses
Classes, SysUtils, FileUtil, Forms, Dialogs, Controls, StdCtrls, Spin, LCLProc,
PackageIntf, IDEOptionsIntf, LazarusIDEStrConsts, PackageDefs, PackageSystem,
BrokenDependenciesDlg;
Classes, SysUtils,
// LCL
Forms, Controls, StdCtrls, Spin, LCLProc,
// IdeIntf
PackageDependencyIntf, IDEOptionsIntf,
// IDE
LazarusIDEStrConsts, PackageDefs, PackageSystem, BrokenDependenciesDlg;
type

View File

@ -41,14 +41,14 @@ uses
LCLType, LCLProc, Forms, Controls, Graphics, Dialogs, StdCtrls, Buttons,
ExtCtrls, ComCtrls, ImgList, TreeFilterEdit,
// Codetools
KeywordFuncLists, BasicCodeTools,
BasicCodeTools,
// LazUtils
FileUtil, LazFileUtils, LazUTF8, AvgLvlTree, Laz2_XMLCfg,
LazFileUtils, AvgLvlTree, Laz2_XMLCfg,
// IdeIntf
PackageIntf, IDEImagesIntf, IDEHelpIntf, IDEDialogs, IDEWindowIntf,
PackageDependencyIntf, PackageIntf, IDEImagesIntf, IDEHelpIntf, IDEDialogs, IDEWindowIntf,
// IDE
LazarusIDEStrConsts, EnvironmentOpts, InputHistory,
LazConf, IDEProcs, PackageDefs, PackageSystem, PackageLinks, LPKCache;
LazarusIDEStrConsts, InputHistory,
LazConf, PackageDefs, PackageSystem, LPKCache;
type
TOnCheckInstallPackageList =

View File

@ -51,9 +51,14 @@ unit LPKCache;
interface
uses
Classes, SysUtils, PackageLinks, PackageDefs, PackageSystem, PackageIntf,
EnvironmentOpts, LCLProc, LazFileUtils, AvgLvlTree, Laz2_XMLCfg,
LazLoggerBase, LazMethodList;
Classes, SysUtils,
LCLProc,
// LazUtils
LazFileUtils, AvgLvlTree, Laz2_XMLCfg, LazLoggerBase, LazMethodList,
// IdeIntf
PackageDependencyIntf, PackageIntf,
// IDE
EnvironmentOpts, PackageLinks, PackageDefs, PackageSystem;
type
TLPKInfoState = (

View File

@ -46,8 +46,8 @@ uses
// LazUtils
LazFileUtils, LazFileCache, LazUTF8,
// IDEIntf
PropEdits, LazIDEIntf, MacroIntf, MacroDefIntf, PackageIntf, IDEOptionsIntf,
ProjPackIntf, IDEDialogs, ComponentReg,
PropEdits, LazIDEIntf, MacroIntf, MacroDefIntf, IDEOptionsIntf,
PackageDependencyIntf, PackageIntf, IDEDialogs, ComponentReg,
// IDE
EditDefineTree, CompilerOptions, CompOptsModes, IDEOptionDefs, ProjPackCommon,
LazarusIDEStrConsts, IDEProcs, TransferMacros, FileReferenceList, PublishModule;
@ -221,25 +221,12 @@ type
{ TPkgDependency }
TPkgDependencyFlag = (
pdfMinVersion, // >= MinVersion
pdfMaxVersion // <= MaxVersion
);
TPkgDependencyFlags = set of TPkgDependencyFlag;
TPkgMarkerFlag = (
pmfVisited,
pmfMarked
);
TPkgMarkerFlags = set of TPkgMarkerFlag;
TLoadPackageResult = (
lprUndefined,
lprSuccess,
lprNotFound,
lprLoadError
);
TPkgDependencyList = (
pdlRequires,
pdlUsedBy
@ -247,33 +234,23 @@ type
{ TPkgDependency }
TPkgDependency = class
TPkgDependency = class(TPkgDependencyID)
private
FDefaultFilename: string;
FFlags: TPkgDependencyFlags;
FHoldPackage: boolean;
FLoadPackageResult: TLoadPackageResult;
FMarkerFlags: TPKgMarkerFlags;
FOwner: TObject;
FMaxVersion: TPkgVersion;
FMinVersion: TPkgVersion;
FPackageName: string;
FPreferDefaultFilename: boolean;
FRemoved: boolean;
FRequiredPackage: TLazPackage;
procedure SetFlags(const AValue: TPkgDependencyFlags);
function GetRequiredPackage: TLazPackage;
procedure SetHoldPackage(const AValue: boolean);
procedure SetLoadPackageResult(const AValue: TLoadPackageResult);
procedure SetMaxVersion(const AValue: TPkgVersion);
procedure SetMinVersion(const AValue: TPkgVersion);
procedure SetPackageName(const AValue: string);
procedure SetRemoved(const AValue: boolean);
procedure SetRequiredPackage(const AValue: TLazPackage);
procedure SetRequiredPackage(AValue: TLazPackage);
protected
procedure SetPackageName(const AValue: string); override;
public
NextDependency, PrevDependency: array[TPkgDependencyList] of TPkgDependency;
constructor Create;
destructor Destroy; override;
procedure Clear;
procedure Clear; override;
procedure LoadFromXMLConfig(XMLConfig: TXMLConfig; const Path: string;
FileVersion: integer);
procedure SaveToXMLConfig(XMLConfig: TXMLConfig; const Path: string;
@ -289,35 +266,36 @@ type
function IsCompatible(Pkg: TLazPackageID): boolean;
procedure MakeCompatible(const PkgName: string; const Version: TPkgVersion);
function AsString(WithOwner: boolean = false; WithDefaults: boolean = false): string;
function NextUsedByDependency: TPkgDependency;
function PrevUsedByDependency: TPkgDependency;
function NextRequiresDependency: TPkgDependency;
function PrevRequiresDependency: TPkgDependency;
// API for iterating dependencies.
function NextUsedByDependency: TPkgDependency; override;
function PrevUsedByDependency: TPkgDependency; override;
function NextRequiresDependency: TPkgDependency; override;
function PrevRequiresDependency: TPkgDependency; override;
// API for adding / removing dependencies, defined in base class.
procedure AddUsedByDep(var FirstDependency: TPkgDependencyBase); override;
procedure RemoveUsedByDep(var FirstDependency: TPkgDependencyBase); override;
procedure AddRequiresDep(var FirstDependency: TPkgDependencyBase); override;
procedure RemoveRequiresDep(var FirstDependency: TPkgDependencyBase); override;
// API using ListType.
procedure AddToList(var FirstDependency: TPkgDependency;
ListType: TPkgDependencyList);
ListType: TPkgDependencyList);
procedure AddToEndOfList(var LastDependency: TPkgDependency;
ListType: TPkgDependencyList);
ListType: TPkgDependencyList);
procedure RemoveFromList(var FirstDependency: TPkgDependency;
ListType: TPkgDependencyList);
ListType: TPkgDependencyList);
function MoveUpInList(var FirstDependency: TPkgDependency;
ListType: TPkgDependencyList): Boolean;
ListType: TPkgDependencyList): Boolean;
function MoveDownInList(var FirstDependency: TPkgDependency;
ListType: TPkgDependencyList): Boolean;
function MakeFilenameRelativeToOwner(const AFilename: string): string;
function FindDefaultFilename: string;
public
property PackageName: string read FPackageName write SetPackageName;
property Flags: TPkgDependencyFlags read FFlags write SetFlags;
property MinVersion: TPkgVersion read FMinVersion write SetMinVersion;
property MaxVersion: TPkgVersion read FMaxVersion write SetMaxVersion;
property Removed: boolean read FRemoved write SetRemoved;
property Owner: TObject read FOwner write FOwner;// package or project or IDE
property RequiredPackage: TLazPackage read FRequiredPackage write SetRequiredPackage;
property LoadPackageResult: TLoadPackageResult read FLoadPackageResult write SetLoadPackageResult;
property HoldPackage: boolean read FHoldPackage write SetHoldPackage;
property MarkerFlags: TPKgMarkerFlags read FMarkerFlags write FMarkerFlags;
property DefaultFilename: string read FDefaultFilename write FDefaultFilename;
property PreferDefaultFilename: boolean read FPreferDefaultFilename write FPreferDefaultFilename;
property RequiredPackage: TLazPackage read GetRequiredPackage write SetRequiredPackage;
end;
PPkgDependency = ^TPkgDependency;
@ -736,8 +714,8 @@ type
WithUsedPackages: boolean);
procedure SetAllComponentPriorities(const p: TComponentPriority);
// used by dependencies
procedure AddUsedByDependency(Dependency: TPkgDependency);
procedure RemoveUsedByDependency(Dependency: TPkgDependency);
procedure AddUsedByDependency(Dependency: TPkgDependencyBase); override;
procedure RemoveUsedByDependency(Dependency: TPkgDependencyBase); override;
function UsedByDepByIndex(Index: integer): TPkgDependency;
function FindUsedByDepPrefer(Ignore: TPkgDependency): TPkgDependency;
// provides
@ -1813,12 +1791,6 @@ end;
{ TPkgDependency }
procedure TPkgDependency.SetFlags(const AValue: TPkgDependencyFlags);
begin
if FFlags=AValue then exit;
FFlags:=AValue;
end;
procedure TPkgDependency.SetHoldPackage(const AValue: boolean);
begin
if FHoldPackage=AValue then exit;
@ -1831,22 +1803,14 @@ begin
end;
end;
procedure TPkgDependency.SetLoadPackageResult(const AValue: TLoadPackageResult);
function TPkgDependency.GetRequiredPackage: TLazPackage;
begin
if FLoadPackageResult=AValue then exit;
FLoadPackageResult:=AValue;
Result := TLazPackage(FRequiredPackage);
end;
procedure TPkgDependency.SetMaxVersion(const AValue: TPkgVersion);
procedure TPkgDependency.SetRequiredPackage(AValue: TLazPackage);
begin
if FMaxVersion=AValue then exit;
FMaxVersion:=AValue;
end;
procedure TPkgDependency.SetMinVersion(const AValue: TPkgVersion);
begin
if FMinVersion=AValue then exit;
FMinVersion:=AValue;
RequiredIDEPackage := AValue;
end;
procedure TPkgDependency.SetPackageName(const AValue: string);
@ -1860,47 +1824,19 @@ begin
FDefaultFilename:='';
end;
procedure TPkgDependency.SetRemoved(const AValue: boolean);
begin
if FRemoved=AValue then exit;
FRemoved:=AValue;
end;
procedure TPkgDependency.SetRequiredPackage(const AValue: TLazPackage);
begin
if FRequiredPackage=AValue then exit;
if FRequiredPackage<>nil then
FRequiredPackage.RemoveUsedByDependency(Self);
fLoadPackageResult:=lprUndefined;
FRequiredPackage:=AValue;
if FRequiredPackage<>nil then
FRequiredPackage.AddUsedByDependency(Self);
end;
constructor TPkgDependency.Create;
begin
MinVersion:=TPkgVersion.Create;
MaxVersion:=TPkgVersion.Create;
Clear;
inherited Create;
end;
destructor TPkgDependency.Destroy;
begin
RequiredPackage:=nil;
PackageName:='';
FreeAndNil(fMinVersion);
FreeAndNil(fMaxVersion);
inherited Destroy;
end;
procedure TPkgDependency.Clear;
begin
RequiredPackage:=nil;
PackageName:='';
FRemoved:=false;
FFlags:=[];
FMaxVersion.Clear;
FMinVersion.Clear;
inherited Clear;
FDefaultFilename:='';
FPreferDefaultFilename:=false;
end;
@ -2078,6 +2014,26 @@ begin
Result:=PrevDependency[pdlRequires];
end;
procedure TPkgDependency.AddUsedByDep(var FirstDependency: TPkgDependencyBase);
begin
AddToList(TPkgDependency(FirstDependency), pdlUsedBy);
end;
procedure TPkgDependency.RemoveUsedByDep(var FirstDependency: TPkgDependencyBase);
begin
RemoveFromList(TPkgDependency(FirstDependency), pdlUsedBy);
end;
procedure TPkgDependency.AddRequiresDep(var FirstDependency: TPkgDependencyBase);
begin
AddToList(TPkgDependency(FirstDependency), pdlRequires);
end;
procedure TPkgDependency.RemoveRequiresDep(var FirstDependency: TPkgDependencyBase);
begin
RemoveFromList(TPkgDependency(FirstDependency), pdlRequires);
end;
procedure TPkgDependency.AddToList(var FirstDependency: TPkgDependency;
ListType: TPkgDependencyList);
begin
@ -3770,17 +3726,17 @@ begin
APackage)<>nil;
end;
procedure TLazPackage.AddUsedByDependency(Dependency: TPkgDependency);
procedure TLazPackage.AddUsedByDependency(Dependency: TPkgDependencyBase);
begin
Dependency.AddToList(FFirstUsedByDependency,pdlUsedBy);
if Dependency.HoldPackage then
Dependency.AddUsedByDep(TPkgDependencyBase(FFirstUsedByDependency));
if TPkgDependency(Dependency).HoldPackage then
inc(FHoldPackageCount);
end;
procedure TLazPackage.RemoveUsedByDependency(Dependency: TPkgDependency);
procedure TLazPackage.RemoveUsedByDependency(Dependency: TPkgDependencyBase);
begin
Dependency.RemoveFromList(FFirstUsedByDependency,pdlUsedBy);
if Dependency.HoldPackage then
Dependency.RemoveUsedByDep(TPkgDependencyBase(FFirstUsedByDependency));
if TPkgDependency(Dependency).HoldPackage then
dec(FHoldPackageCount);
end;

View File

@ -42,7 +42,7 @@ uses
FileUtil, LazFileUtils, LazFileCache,
// IDEIntf
IDEImagesIntf, MenuIntf, LazIDEIntf, ProjectIntf, CodeToolsStructs,
FormEditingIntf, PackageIntf, IDEHelpIntf, IDEOptionsIntf,
FormEditingIntf, PackageDependencyIntf, PackageIntf, IDEHelpIntf, IDEOptionsIntf,
NewItemIntf, IDEWindowIntf, IDEDialogs, ComponentReg,
// IDE
MainBase, IDEProcs, LazarusIDEStrConsts, IDEDefs, CompilerOptions,

View File

@ -39,10 +39,17 @@ unit PackageLinks;
interface
uses
Classes, SysUtils, Laz2_XMLCfg, FileProcs, LazFileCache,
CodeToolManager, CodeToolsStructs,
LCLProc, Forms, FileUtil, AvgLvlTree, lazutf8classes, LazFileUtils, MacroIntf,
PackageIntf, IDEProcs, EnvironmentOpts, PackageDefs, LazConf, IDECmdLine;
Classes, SysUtils,
// LCL
Forms, LCLProc,
// LazUtils
Laz2_XMLCfg, LazFileCache, AvgLvlTree, LazUTF8Classes, LazFileUtils, FileUtil,
// Codetools
FileProcs, CodeToolManager, CodeToolsStructs,
// IdeIntf
MacroIntf, PackageDependencyIntf, PackageIntf,
// IDE
IDEProcs, EnvironmentOpts, LazConf, IDECmdLine, PackageDefs;
const
PkgLinksFileVersion = 3;

View File

@ -53,7 +53,7 @@ uses
BasicCodeTools, CodeToolsStructs, NonPascalCodeTools, SourceChanger,
CodeToolManager, DirectoryCacher,
// IDEIntf,
IDEExternToolIntf, IDEDialogs, IDEMsgIntf, PackageIntf,
IDEExternToolIntf, IDEDialogs, IDEMsgIntf, PackageDependencyIntf, PackageIntf,
CompOptsIntf, LazIDEIntf, MacroDefIntf, ProjectIntf, LazarusPackageIntf,
// IDE
LazarusIDEStrConsts, IDECmdLine, EnvironmentOpts, IDEProcs, LazConf,

View File

@ -11,7 +11,7 @@ uses
// LazUtils
FileUtil, LazFileUtils,
// IDEIntf
ComponentReg, IDEDialogs,
PackageDependencyIntf, ComponentReg, IDEDialogs,
// IDE
LazarusIDEStrConsts, IDEDefs, Project, PackageSystem, PackageDefs, ProjPackCommon;