mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-12 22:19:18 +02:00
implemented package iterations
git-svn-id: trunk@4019 -
This commit is contained in:
parent
3fe22d290e
commit
54169af978
@ -37,7 +37,8 @@ interface
|
|||||||
uses
|
uses
|
||||||
Classes, SysUtils, IDEProcs, LazConf, LResources, Forms, Controls, Buttons,
|
Classes, SysUtils, IDEProcs, LazConf, LResources, Forms, Controls, Buttons,
|
||||||
ExtCtrls, StdCtrls, ComCtrls, Dialogs, Laz_XMLCfg, CodeToolManager,
|
ExtCtrls, StdCtrls, ComCtrls, Dialogs, Laz_XMLCfg, CodeToolManager,
|
||||||
DefineTemplates, SourceChanger, EditDefineTree, SynEdit,LazarusIDEStrConsts;
|
DefineTemplates, SourceChanger, SynEdit,
|
||||||
|
IDEOptionDefs, EditDefineTree, LazarusIDEStrConsts;
|
||||||
|
|
||||||
type
|
type
|
||||||
TCodeToolsOptions = class
|
TCodeToolsOptions = class
|
||||||
@ -645,6 +646,7 @@ begin
|
|||||||
Width:=485;
|
Width:=485;
|
||||||
Height:=435;
|
Height:=435;
|
||||||
Position:=poScreenCenter;
|
Position:=poScreenCenter;
|
||||||
|
IDEDialogLayoutList.ApplyLayout(Self,485,435);
|
||||||
Caption:=dlgCodeToolsOpts;
|
Caption:=dlgCodeToolsOpts;
|
||||||
OnResize:=@CodeToolsOptsDlgResize;
|
OnResize:=@CodeToolsOptsDlgResize;
|
||||||
|
|
||||||
@ -1690,6 +1692,7 @@ begin
|
|||||||
CodeToolsOptsDlg.OnGetSynEditSettings:=OnGetSynEditSettings;
|
CodeToolsOptsDlg.OnGetSynEditSettings:=OnGetSynEditSettings;
|
||||||
CodeToolsOptsDlg.UpdatePreviewSettings;
|
CodeToolsOptsDlg.UpdatePreviewSettings;
|
||||||
Result:=CodeToolsOptsDlg.ShowModal;
|
Result:=CodeToolsOptsDlg.ShowModal;
|
||||||
|
IDEDialogLayoutList.SaveLayout(CodeToolsOptsDlg);
|
||||||
if Result=mrOk then begin
|
if Result=mrOk then begin
|
||||||
CodeToolsOptsDlg.WriteSettings(Options);
|
CodeToolsOptsDlg.WriteSettings(Options);
|
||||||
Options.AssignTo(CodeToolBoss);
|
Options.AssignTo(CodeToolBoss);
|
||||||
|
@ -39,8 +39,8 @@ interface
|
|||||||
|
|
||||||
uses
|
uses
|
||||||
Classes, SysUtils, LResources, Forms, Controls, Buttons, StdCtrls, ExtCtrls,
|
Classes, SysUtils, LResources, Forms, Controls, Buttons, StdCtrls, ExtCtrls,
|
||||||
Dialogs, LazarusIDEStrConsts, IDEOptionDefs, InputHistory, FileCtrl, IDEProcs,
|
Dialogs, LazarusIDEStrConsts, IDEOptionDefs, InputHistory, FileCtrl, AVL_Tree,
|
||||||
EnvironmentOpts, PackageDefs;
|
IDEProcs, EnvironmentOpts, PackageSystem, PackageDefs, ComponentReg;
|
||||||
|
|
||||||
type
|
type
|
||||||
TAddToPackageDlg = class(TForm)
|
TAddToPackageDlg = class(TForm)
|
||||||
@ -48,6 +48,7 @@ type
|
|||||||
NoteBook: TNoteBook;
|
NoteBook: TNoteBook;
|
||||||
AddUnitPage: TPage;
|
AddUnitPage: TPage;
|
||||||
NewComponentPage: TPage;
|
NewComponentPage: TPage;
|
||||||
|
NewDependPage: TPage;
|
||||||
// add unit page
|
// add unit page
|
||||||
AddUnitFilenameLabel: TLabel;
|
AddUnitFilenameLabel: TLabel;
|
||||||
AddUnitFilenameEdit: TEdit;
|
AddUnitFilenameEdit: TEdit;
|
||||||
@ -66,6 +67,16 @@ type
|
|||||||
ComponentUnitButton: TButton;
|
ComponentUnitButton: TButton;
|
||||||
NewComponentButton: TButton;
|
NewComponentButton: TButton;
|
||||||
CancelNewComponentButton: TButton;
|
CancelNewComponentButton: TButton;
|
||||||
|
// new require/conflict
|
||||||
|
DependPkgNameLabel: TLabel;
|
||||||
|
DependPkgNameComboBox: TComboBox;
|
||||||
|
DependTypeRadioGroup: TRadioGroup;
|
||||||
|
DependMinVersionLabel: TLabel;
|
||||||
|
DependMinVersionEdit: TEdit;
|
||||||
|
DependMaxVersionLabel: TLabel;
|
||||||
|
DependMaxVersionEdit: TEdit;
|
||||||
|
NewDependButton: TButton;
|
||||||
|
CancelDependButton: TButton;
|
||||||
procedure AddToPackageDlgResize(Sender: TObject);
|
procedure AddToPackageDlgResize(Sender: TObject);
|
||||||
procedure AddUnitButtonClick(Sender: TObject);
|
procedure AddUnitButtonClick(Sender: TObject);
|
||||||
procedure AddUnitFileBrowseButtonClick(Sender: TObject);
|
procedure AddUnitFileBrowseButtonClick(Sender: TObject);
|
||||||
@ -75,15 +86,21 @@ type
|
|||||||
procedure ComponentUnitButtonClick(Sender: TObject);
|
procedure ComponentUnitButtonClick(Sender: TObject);
|
||||||
procedure NewComponentButtonClick(Sender: TObject);
|
procedure NewComponentButtonClick(Sender: TObject);
|
||||||
procedure NewComponentPageResize(Sender: TObject);
|
procedure NewComponentPageResize(Sender: TObject);
|
||||||
|
procedure NewDependPageResize(Sender: TObject);
|
||||||
private
|
private
|
||||||
FLazPackage: TLazPackage;
|
FLazPackage: TLazPackage;
|
||||||
fCurAncestorIndex: integer;
|
fPkgComponents: TAVLTree;// tree of TPkgComponent
|
||||||
|
fPackages: TAVLTree;// tree of TLazPackage or TPackageLink
|
||||||
procedure SetLazPackage(const AValue: TLazPackage);
|
procedure SetLazPackage(const AValue: TLazPackage);
|
||||||
procedure SetupComponents;
|
procedure SetupComponents;
|
||||||
|
procedure OnIterateComponentClasses(PkgComponent: TPkgComponent);
|
||||||
|
procedure OnIteratePackages(APackageID: TLazPackageID);
|
||||||
public
|
public
|
||||||
constructor Create(TheOwner: TComponent); override;
|
constructor Create(TheOwner: TComponent); override;
|
||||||
destructor Destroy; override;
|
destructor Destroy; override;
|
||||||
procedure UpdateAvailableAncestorTypes;
|
procedure UpdateAvailableAncestorTypes;
|
||||||
|
procedure UpdateAvailablePageNames;
|
||||||
|
procedure UpdateAvailableDependencyNames;
|
||||||
public
|
public
|
||||||
property LazPackage: TLazPackage read FLazPackage write SetLazPackage;
|
property LazPackage: TLazPackage read FLazPackage write SetLazPackage;
|
||||||
end;
|
end;
|
||||||
@ -101,6 +118,7 @@ begin
|
|||||||
AddDlg:=TAddToPackageDlg.Create(Application);
|
AddDlg:=TAddToPackageDlg.Create(Application);
|
||||||
AddDlg.LazPackage:=Pkg;
|
AddDlg.LazPackage:=Pkg;
|
||||||
Result:=AddDlg.ShowModal;
|
Result:=AddDlg.ShowModal;
|
||||||
|
IDEDialogLayoutList.SaveLayout(AddDlg);
|
||||||
AddDlg.Free;
|
AddDlg.Free;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -187,6 +205,7 @@ begin
|
|||||||
try
|
try
|
||||||
InputHistories.ApplyFileDialogSettings(OpenDialog);
|
InputHistories.ApplyFileDialogSettings(OpenDialog);
|
||||||
OpenDialog.Title:=lisOpenFile;
|
OpenDialog.Title:=lisOpenFile;
|
||||||
|
OpenDialog.Options:=OpenDialog.Options+[ofPathMustExist];
|
||||||
if OpenDialog.Execute then begin
|
if OpenDialog.Execute then begin
|
||||||
AFilename:=CleanAndExpandFilename(OpenDialog.Filename);
|
AFilename:=CleanAndExpandFilename(OpenDialog.Filename);
|
||||||
if FilenameIsPascalUnit(AFilename) then begin
|
if FilenameIsPascalUnit(AFilename) then begin
|
||||||
@ -266,11 +285,54 @@ begin
|
|||||||
SetBounds(x,y,80,Height);
|
SetBounds(x,y,80,Height);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TAddToPackageDlg.NewDependPageResize(Sender: TObject);
|
||||||
|
var
|
||||||
|
x: Integer;
|
||||||
|
y: Integer;
|
||||||
|
begin
|
||||||
|
x:=5;
|
||||||
|
y:=5;
|
||||||
|
|
||||||
|
with DependPkgNameLabel do
|
||||||
|
SetBounds(x,y+3,110,Height);
|
||||||
|
|
||||||
|
with DependPkgNameComboBox do
|
||||||
|
SetBounds(x+DependPkgNameLabel.Width+5,y,150,Height);
|
||||||
|
inc(y,DependPkgNameComboBox.Height+5);
|
||||||
|
|
||||||
|
with DependTypeRadioGroup do
|
||||||
|
SetBounds(x,y,200,50);
|
||||||
|
inc(y,DependTypeRadioGroup.Height+10);
|
||||||
|
|
||||||
|
with DependMinVersionLabel do
|
||||||
|
SetBounds(x,y+3,170,Height);
|
||||||
|
|
||||||
|
with DependMinVersionEdit do
|
||||||
|
SetBounds(x+DependMinVersionLabel.Width+5,y,100,Height);
|
||||||
|
inc(y,DependMinVersionEdit.Height+5);
|
||||||
|
|
||||||
|
with DependMaxVersionLabel do
|
||||||
|
SetBounds(x,y+3,DependMinVersionLabel.Width,Height);
|
||||||
|
|
||||||
|
with DependMaxVersionEdit do
|
||||||
|
SetBounds(x+DependMaxVersionLabel.Width+5,y,
|
||||||
|
DependMinVersionEdit.Width,Height);
|
||||||
|
inc(y,DependMaxVersionEdit.Height+20);
|
||||||
|
|
||||||
|
with NewDependButton do
|
||||||
|
SetBounds(x,y,80,Height);
|
||||||
|
|
||||||
|
with CancelDependButton do
|
||||||
|
SetBounds(x+NewDependButton.Width+10,y,80,Height);
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TAddToPackageDlg.SetLazPackage(const AValue: TLazPackage);
|
procedure TAddToPackageDlg.SetLazPackage(const AValue: TLazPackage);
|
||||||
begin
|
begin
|
||||||
if FLazPackage=AValue then exit;
|
if FLazPackage=AValue then exit;
|
||||||
FLazPackage:=AValue;
|
FLazPackage:=AValue;
|
||||||
UpdateAvailableAncestorTypes;
|
UpdateAvailableAncestorTypes;
|
||||||
|
UpdateAvailablePageNames;
|
||||||
|
UpdateAvailableDependencyNames;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TAddToPackageDlg.SetupComponents;
|
procedure TAddToPackageDlg.SetupComponents;
|
||||||
@ -283,13 +345,18 @@ begin
|
|||||||
AddUnitPage:=Page[0];
|
AddUnitPage:=Page[0];
|
||||||
Pages.Add('New Component');
|
Pages.Add('New Component');
|
||||||
NewComponentPage:=Page[1];
|
NewComponentPage:=Page[1];
|
||||||
|
Pages.Add('New Require, Conflict');
|
||||||
|
NewDependPage:=Page[2];
|
||||||
PageIndex:=0;
|
PageIndex:=0;
|
||||||
Align:=alClient;
|
Align:=alClient;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
// add unit
|
||||||
|
|
||||||
AddUnitPage.OnResize:=@AddUnitPageResize;
|
AddUnitPage.OnResize:=@AddUnitPageResize;
|
||||||
NewComponentPage.OnResize:=@NewComponentPageResize;
|
NewComponentPage.OnResize:=@NewComponentPageResize;
|
||||||
|
NewDependPage.OnResize:=@NewDependPageResize;
|
||||||
|
|
||||||
AddUnitFilenameLabel:=TLabel.Create(Self);
|
AddUnitFilenameLabel:=TLabel.Create(Self);
|
||||||
with AddUnitFilenameLabel do begin
|
with AddUnitFilenameLabel do begin
|
||||||
Name:='AddUnitFilenameLabel';
|
Name:='AddUnitFilenameLabel';
|
||||||
@ -327,6 +394,9 @@ begin
|
|||||||
Caption:='Cancel';
|
Caption:='Cancel';
|
||||||
OnClick:=@CancelAddUnitButtonClick;
|
OnClick:=@CancelAddUnitButtonClick;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
// add new component unit
|
||||||
|
|
||||||
AncestorTypeLabel:=TLabel.Create(Self);
|
AncestorTypeLabel:=TLabel.Create(Self);
|
||||||
with AncestorTypeLabel do begin
|
with AncestorTypeLabel do begin
|
||||||
@ -407,27 +477,163 @@ begin
|
|||||||
Caption:='Cancel';
|
Caption:='Cancel';
|
||||||
OnClick:=@CancelNewComponentButtonClick;
|
OnClick:=@CancelNewComponentButtonClick;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
// add require, conflict
|
||||||
|
|
||||||
|
DependPkgNameLabel:=TLabel.Create(Self);
|
||||||
|
with DependPkgNameLabel do begin
|
||||||
|
Name:='DependPkgNameLabel';
|
||||||
|
Parent:=NewDependPage;
|
||||||
|
Caption:='Package Name:';
|
||||||
|
end;
|
||||||
|
|
||||||
|
DependPkgNameComboBox:=TComboBox.Create(Self);
|
||||||
|
with DependPkgNameComboBox do begin
|
||||||
|
Name:='DependPkgNameComboBox';
|
||||||
|
Parent:=NewDependPage;
|
||||||
|
Text:='';
|
||||||
|
end;
|
||||||
|
|
||||||
|
DependTypeRadioGroup:=TRadioGroup.Create(Self);
|
||||||
|
with DependTypeRadioGroup do begin
|
||||||
|
Name:='DependTypeRadioGroup';
|
||||||
|
Parent:=NewDependPage;
|
||||||
|
Items.Add('Require');
|
||||||
|
Items.Add('Conflict');
|
||||||
|
ItemIndex:=0;
|
||||||
|
Columns:=2;
|
||||||
|
Caption:='Type';
|
||||||
|
end;
|
||||||
|
|
||||||
|
DependMinVersionLabel:=TLabel.Create(Self);
|
||||||
|
with DependMinVersionLabel do begin
|
||||||
|
Name:='DependMinVersionLabel';
|
||||||
|
Parent:=NewDependPage;
|
||||||
|
Caption:='Minimum Version (optional):';
|
||||||
|
end;
|
||||||
|
|
||||||
|
DependMinVersionEdit:=TEdit.Create(Self);
|
||||||
|
with DependMinVersionEdit do begin
|
||||||
|
Name:='DependMinVersionEdit';
|
||||||
|
Parent:=NewDependPage;
|
||||||
|
Text:='';
|
||||||
|
end;
|
||||||
|
|
||||||
|
DependMaxVersionLabel:=TLabel.Create(Self);
|
||||||
|
with DependMaxVersionLabel do begin
|
||||||
|
Name:='DependMaxVersionLabel';
|
||||||
|
Parent:=NewDependPage;
|
||||||
|
Caption:='Maximum Version (optional):';
|
||||||
|
end;
|
||||||
|
|
||||||
|
DependMaxVersionEdit:=TEdit.Create(Self);
|
||||||
|
with DependMaxVersionEdit do begin
|
||||||
|
Name:='DependMaxVersionEdit';
|
||||||
|
Parent:=NewDependPage;
|
||||||
|
Text:='';
|
||||||
|
end;
|
||||||
|
|
||||||
|
NewDependButton:=TButton.Create(Self);
|
||||||
|
with NewDependButton do begin
|
||||||
|
Name:='NewDependButton';
|
||||||
|
Parent:=NewDependPage;
|
||||||
|
Caption:='Ok';
|
||||||
|
end;
|
||||||
|
|
||||||
|
CancelDependButton:=TButton.Create(Self);
|
||||||
|
with CancelDependButton do begin
|
||||||
|
Name:='CancelDependButton';
|
||||||
|
Parent:=NewDependPage;
|
||||||
|
Caption:='Cancel';
|
||||||
|
ModalResult:=mrCancel;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TAddToPackageDlg.OnIterateComponentClasses(PkgComponent: TPkgComponent
|
||||||
|
);
|
||||||
|
begin
|
||||||
|
if fPkgComponents.Find(PkgComponent)=nil then
|
||||||
|
fPkgComponents.Add(PkgComponent);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TAddToPackageDlg.OnIteratePackages(APackageID: TLazPackageID);
|
||||||
|
begin
|
||||||
|
if (APackageID<>LazPackage) and (fPackages.Find(APackageID)=nil) then
|
||||||
|
fPackages.Add(APackageID);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
constructor TAddToPackageDlg.Create(TheOwner: TComponent);
|
constructor TAddToPackageDlg.Create(TheOwner: TComponent);
|
||||||
begin
|
begin
|
||||||
inherited Create(TheOwner);
|
inherited Create(TheOwner);
|
||||||
|
fPkgComponents:=TAVLTree.Create(@CompareIDEComponentByClassName);
|
||||||
|
fPackages:=TAVLTree.Create(@CompareLazPackageID);
|
||||||
Position:=poScreenCenter;
|
Position:=poScreenCenter;
|
||||||
Width:=450;
|
IDEDialogLayoutList.ApplyLayout(Self,500,300);
|
||||||
Height:=300;
|
|
||||||
SetupComponents;
|
SetupComponents;
|
||||||
OnResize:=@AddToPackageDlgResize;
|
OnResize:=@AddToPackageDlgResize;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
destructor TAddToPackageDlg.Destroy;
|
destructor TAddToPackageDlg.Destroy;
|
||||||
begin
|
begin
|
||||||
|
FreeAndNil(fPkgComponents);
|
||||||
|
FreeAndNil(fPackages);
|
||||||
inherited Destroy;
|
inherited Destroy;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TAddToPackageDlg.UpdateAvailableAncestorTypes;
|
procedure TAddToPackageDlg.UpdateAvailableAncestorTypes;
|
||||||
|
var
|
||||||
|
ANode: TAVLTreeNode;
|
||||||
|
sl: TStringList;
|
||||||
begin
|
begin
|
||||||
fCurAncestorIndex:=0;
|
// get all available registered components
|
||||||
//LazPackage.IterateComponentClasses(@OnIterateComponentClasses);
|
fPkgComponents.Clear;
|
||||||
|
PackageGraph.IterateComponentClasses(LazPackage,@OnIterateComponentClasses,
|
||||||
|
true,true);
|
||||||
|
// put them into the combobox
|
||||||
|
sl:=TStringList.Create;
|
||||||
|
ANode:=fPkgComponents.FindLowest;
|
||||||
|
while ANode<>nil do begin
|
||||||
|
sl.Add(TPkgComponent(ANode.Data).ComponentClass.ClassName);
|
||||||
|
ANode:=fPkgComponents.FindSuccessor(ANode);
|
||||||
|
end;
|
||||||
|
AncestorComboBox.Items.Assign(sl);
|
||||||
|
sl.Free;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TAddToPackageDlg.UpdateAvailablePageNames;
|
||||||
|
var
|
||||||
|
i: Integer;
|
||||||
|
APageName: String;
|
||||||
|
sl: TStringList;
|
||||||
|
begin
|
||||||
|
// get all current pagenames (excluding the hidden page)
|
||||||
|
sl:=TStringList.Create;
|
||||||
|
for i:=0 to IDEComponentPalette.Count-1 do begin
|
||||||
|
APageName:=IDEComponentPalette[i].PageName;
|
||||||
|
if APageName<>'' then
|
||||||
|
sl.Add(APageName);
|
||||||
|
end;
|
||||||
|
sl.Sort;
|
||||||
|
PalettePageCombobox.Items.Assign(sl);
|
||||||
|
sl.Free;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TAddToPackageDlg.UpdateAvailableDependencyNames;
|
||||||
|
var
|
||||||
|
ANode: TAVLTreeNode;
|
||||||
|
sl: TStringList;
|
||||||
|
begin
|
||||||
|
fPackages.Clear;
|
||||||
|
PackageGraph.IteratePackages(fpfSearchPackageEverywhere,@OnIteratePackages);
|
||||||
|
sl:=TStringList.Create;
|
||||||
|
ANode:=fPackages.FindLowest;
|
||||||
|
while ANode<>nil do begin
|
||||||
|
sl.Add(TLazPackageID(ANode.Data).IDAsString);
|
||||||
|
ANode:=fPackages.FindSuccessor(ANode);
|
||||||
|
end;
|
||||||
|
DependPkgNameComboBox.Items.Assign(sl);
|
||||||
|
sl.Free;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
end.
|
end.
|
||||||
|
@ -139,6 +139,7 @@ var
|
|||||||
IDEComponentPalette: TIDEComponentPalette;
|
IDEComponentPalette: TIDEComponentPalette;
|
||||||
|
|
||||||
function ComparePriority(const p1,p2: TComponentPriority): integer;
|
function ComparePriority(const p1,p2: TComponentPriority): integer;
|
||||||
|
function CompareIDEComponentByClassName(Data1, Data2: pointer): integer;
|
||||||
|
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
@ -151,6 +152,17 @@ begin
|
|||||||
Result:=p1.Level-p2.Level;
|
Result:=p1.Level-p2.Level;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function CompareIDEComponentByClassName(Data1, Data2: pointer): integer;
|
||||||
|
var
|
||||||
|
Comp1: TIDEComponent;
|
||||||
|
Comp2: TIDEComponent;
|
||||||
|
begin
|
||||||
|
Comp1:=TIDEComponent(Data1);
|
||||||
|
Comp2:=TIDEComponent(Data2);
|
||||||
|
Result:=AnsiCompareText(Comp1.ComponentClass.Classname,
|
||||||
|
Comp2.ComponentClass.Classname);
|
||||||
|
end;
|
||||||
|
|
||||||
{ TIDEComponent }
|
{ TIDEComponent }
|
||||||
|
|
||||||
constructor TIDEComponent.Create(TheComponentClass: TComponentClass;
|
constructor TIDEComponent.Create(TheComponentClass: TComponentClass;
|
||||||
|
@ -138,6 +138,8 @@ type
|
|||||||
function IsVirtual: boolean;
|
function IsVirtual: boolean;
|
||||||
function GetShortFilename: string;
|
function GetShortFilename: string;
|
||||||
function ComponentCount: integer;
|
function ComponentCount: integer;
|
||||||
|
procedure AddPkgComponent(APkgComponent: TPkgComponent);
|
||||||
|
procedure RemovePkgComponent(APkgComponent: TPkgComponent);
|
||||||
public
|
public
|
||||||
property Filename: string read FFilename write SetFilename;
|
property Filename: string read FFilename write SetFilename;
|
||||||
property FileType: TPkgFileType read FFileType write SetFileType;
|
property FileType: TPkgFileType read FFileType write SetFileType;
|
||||||
@ -200,6 +202,22 @@ type
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
{ TLazPackageID }
|
||||||
|
|
||||||
|
TLazPackageID = class
|
||||||
|
protected
|
||||||
|
FName: string;
|
||||||
|
FVersion: TPkgVersion;
|
||||||
|
procedure SetName(const AValue: string); virtual;
|
||||||
|
public
|
||||||
|
function IDAsString: string;
|
||||||
|
function Compare(PackageID2: TLazPackageID): integer;
|
||||||
|
public
|
||||||
|
property Name: string read FName write SetName;
|
||||||
|
property Version: TPkgVersion read FVersion;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
{ TLazPackage }
|
{ TLazPackage }
|
||||||
|
|
||||||
TLazPackageType = (
|
TLazPackageType = (
|
||||||
@ -231,38 +249,36 @@ type
|
|||||||
pitStatic,
|
pitStatic,
|
||||||
pitDynamic
|
pitDynamic
|
||||||
);
|
);
|
||||||
|
|
||||||
TLazPackage = class
|
TLazPackage = class(TLazPackageID)
|
||||||
private
|
private
|
||||||
FAuthor: string;
|
FAuthor: string;
|
||||||
FAutoCreated: boolean;
|
FAutoCreated: boolean;
|
||||||
FAutoInstall: TPackageInstallType;
|
FAutoInstall: TPackageInstallType;
|
||||||
FComponentCount: integer;
|
|
||||||
FConflictPkgs: TList; // TList of TPkgDependency
|
|
||||||
FCompilerOptions: TPkgCompilerOptions;
|
FCompilerOptions: TPkgCompilerOptions;
|
||||||
FComponents: TList; // TList of TPkgComponent
|
FComponents: TList; // TList of TPkgComponent
|
||||||
|
FConflictPkgs: TList; // TList of TPkgDependency
|
||||||
FDependingPkgs: TList; // TList of TLazPackage
|
FDependingPkgs: TList; // TList of TLazPackage
|
||||||
FDescription: string;
|
FDescription: string;
|
||||||
FDirectory: string;
|
FDirectory: string;
|
||||||
FEditorRect: TRect;
|
FEditorRect: TRect;
|
||||||
FInstalled: TPackageInstallType;
|
|
||||||
FRegistered: boolean;
|
|
||||||
FPackageEditor: TBasePackageEditor;
|
|
||||||
FReadOnly: boolean;
|
|
||||||
FVersion: TPkgVersion;
|
|
||||||
FFilename: string;
|
FFilename: string;
|
||||||
FFiles: TList; // TList of TPkgFile
|
FFiles: TList; // TList of TPkgFile
|
||||||
FFlags: TLazPackageFlags;
|
FFlags: TLazPackageFlags;
|
||||||
FIconFile: string;
|
FIconFile: string;
|
||||||
FName: string;
|
FInstalled: TPackageInstallType;
|
||||||
FModifiedLock: integer;
|
FModifiedLock: integer;
|
||||||
|
FPackageEditor: TBasePackageEditor;
|
||||||
FPackageType: TLazPackageType;
|
FPackageType: TLazPackageType;
|
||||||
|
FReadOnly: boolean;
|
||||||
|
FRegistered: boolean;
|
||||||
FRequiredPkgs: TList; // TList of TPkgDependency
|
FRequiredPkgs: TList; // TList of TPkgDependency
|
||||||
FTitle: string;
|
FTitle: string;
|
||||||
FUsageOptions: TAdditionalCompilerOptions;
|
FUsageOptions: TAdditionalCompilerOptions;
|
||||||
FUsedPkgs: TList; // list of TLazPackage
|
FUsedPkgs: TList; // list of TLazPackage
|
||||||
function GetAutoIncrementVersionOnBuild: boolean;
|
function GetAutoIncrementVersionOnBuild: boolean;
|
||||||
function GetAutoUpdate: boolean;
|
function GetAutoUpdate: boolean;
|
||||||
|
function GetComponentCount: integer;
|
||||||
function GetComponents(Index: integer): TPkgComponent;
|
function GetComponents(Index: integer): TPkgComponent;
|
||||||
function GetConflictPkgCount: integer;
|
function GetConflictPkgCount: integer;
|
||||||
function GetConflictPkgs(Index: integer): TPkgDependency;
|
function GetConflictPkgs(Index: integer): TPkgDependency;
|
||||||
@ -288,7 +304,7 @@ type
|
|||||||
procedure SetInstalled(const AValue: TPackageInstallType);
|
procedure SetInstalled(const AValue: TPackageInstallType);
|
||||||
procedure SetRegistered(const AValue: boolean);
|
procedure SetRegistered(const AValue: boolean);
|
||||||
procedure SetModified(const AValue: boolean);
|
procedure SetModified(const AValue: boolean);
|
||||||
procedure SetName(const AValue: string);
|
procedure SetName(const AValue: string); override;
|
||||||
procedure SetPackageEditor(const AValue: TBasePackageEditor);
|
procedure SetPackageEditor(const AValue: TBasePackageEditor);
|
||||||
procedure SetPackageType(const AValue: TLazPackageType);
|
procedure SetPackageType(const AValue: TLazPackageType);
|
||||||
procedure SetReadOnly(const AValue: boolean);
|
procedure SetReadOnly(const AValue: boolean);
|
||||||
@ -303,11 +319,10 @@ type
|
|||||||
procedure SaveToXMLConfig(XMLConfig: TXMLConfig; const Path: string);
|
procedure SaveToXMLConfig(XMLConfig: TXMLConfig; const Path: string);
|
||||||
function IsVirtual: boolean;
|
function IsVirtual: boolean;
|
||||||
procedure CheckInnerDependencies;
|
procedure CheckInnerDependencies;
|
||||||
function Compare(Package2: TLazPackage): integer;
|
|
||||||
procedure ShortenFilename(var ExpandedFilename: string);
|
procedure ShortenFilename(var ExpandedFilename: string);
|
||||||
procedure LongenFilename(var AFilename: string);
|
procedure LongenFilename(var AFilename: string);
|
||||||
procedure IterateComponentClasses(Event: TIterateComponentClassesEvent;
|
procedure IterateComponentClasses(Event: TIterateComponentClassesEvent;
|
||||||
WithRequiredPackages: boolean);
|
WithUsedPackages: boolean);
|
||||||
procedure ConsistencyCheck;
|
procedure ConsistencyCheck;
|
||||||
function IndexOfPkgComponent(PkgComponent: TPkgComponent): integer;
|
function IndexOfPkgComponent(PkgComponent: TPkgComponent): integer;
|
||||||
function FindUnit(const TheUnitName: string): TPkgFile;
|
function FindUnit(const TheUnitName: string): TPkgFile;
|
||||||
@ -320,6 +335,8 @@ type
|
|||||||
function CreateDependencyForThisPkg: TPkgDependency;
|
function CreateDependencyForThisPkg: TPkgDependency;
|
||||||
function AddComponent(PkgFile: TPkgFile; const Page: string;
|
function AddComponent(PkgFile: TPkgFile; const Page: string;
|
||||||
TheComponentClass: TComponentClass): TPkgComponent;
|
TheComponentClass: TComponentClass): TPkgComponent;
|
||||||
|
procedure AddPkgComponent(APkgComponent: TPkgComponent);
|
||||||
|
procedure RemovePkgComponent(APkgComponent: TPkgComponent);
|
||||||
public
|
public
|
||||||
property Author: string read FAuthor write SetAuthor;
|
property Author: string read FAuthor write SetAuthor;
|
||||||
property AutoCreated: boolean read FAutoCreated write SetAutoCreated;
|
property AutoCreated: boolean read FAutoCreated write SetAutoCreated;
|
||||||
@ -329,7 +346,7 @@ type
|
|||||||
property AutoUpdate: boolean read GetAutoUpdate write SetAutoUpdate;
|
property AutoUpdate: boolean read GetAutoUpdate write SetAutoUpdate;
|
||||||
property CompilerOptions: TPkgCompilerOptions
|
property CompilerOptions: TPkgCompilerOptions
|
||||||
read FCompilerOptions;
|
read FCompilerOptions;
|
||||||
property ComponentCount: integer read FComponentCount;
|
property ComponentCount: integer read GetComponentCount;
|
||||||
property Components[Index: integer]: TPkgComponent read GetComponents;
|
property Components[Index: integer]: TPkgComponent read GetComponents;
|
||||||
property ConflictPkgCount: integer read GetConflictPkgCount;
|
property ConflictPkgCount: integer read GetConflictPkgCount;
|
||||||
property ConflictPkgs[Index: integer]: TPkgDependency read GetConflictPkgs;
|
property ConflictPkgs[Index: integer]: TPkgDependency read GetConflictPkgs;
|
||||||
@ -347,7 +364,6 @@ type
|
|||||||
property Installed: TPackageInstallType read FInstalled write SetInstalled;
|
property Installed: TPackageInstallType read FInstalled write SetInstalled;
|
||||||
property Registered: boolean read FRegistered write SetRegistered;
|
property Registered: boolean read FRegistered write SetRegistered;
|
||||||
property Modified: boolean read GetModified write SetModified;
|
property Modified: boolean read GetModified write SetModified;
|
||||||
property Name: string read FName write SetName;
|
|
||||||
property PackageType: TLazPackageType
|
property PackageType: TLazPackageType
|
||||||
read FPackageType write SetPackageType;
|
read FPackageType write SetPackageType;
|
||||||
property ReadOnly: boolean read FReadOnly write SetReadOnly;
|
property ReadOnly: boolean read FReadOnly write SetReadOnly;
|
||||||
@ -358,7 +374,6 @@ type
|
|||||||
read FUsageOptions;
|
read FUsageOptions;
|
||||||
property UsedPkgCount: integer read GetUsedPkgCount;
|
property UsedPkgCount: integer read GetUsedPkgCount;
|
||||||
property UsedPkgs[Index: integer]: TLazPackage read GetUsedPkgs;
|
property UsedPkgs[Index: integer]: TLazPackage read GetUsedPkgs;
|
||||||
property Version: TPkgVersion read FVersion;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
@ -391,7 +406,7 @@ const
|
|||||||
function PkgFileTypeIdentToType(const s: string): TPkgFileType;
|
function PkgFileTypeIdentToType(const s: string): TPkgFileType;
|
||||||
function LazPackageTypeIdentToType(const s: string): TLazPackageType;
|
function LazPackageTypeIdentToType(const s: string): TLazPackageType;
|
||||||
procedure SortDependencyList(Dependencies: TList);
|
procedure SortDependencyList(Dependencies: TList);
|
||||||
function CompareLazPackage(Data1, Data2: Pointer): integer;
|
function CompareLazPackageID(Data1, Data2: Pointer): integer;
|
||||||
function CompareNameWithPackage(Key, Data: Pointer): integer;
|
function CompareNameWithPackage(Key, Data: Pointer): integer;
|
||||||
|
|
||||||
|
|
||||||
@ -446,13 +461,13 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function CompareLazPackage(Data1, Data2: Pointer): integer;
|
function CompareLazPackageID(Data1, Data2: Pointer): integer;
|
||||||
var
|
var
|
||||||
Pkg1: TLazPackage;
|
Pkg1: TLazPackageID;
|
||||||
Pkg2: TLazPackage;
|
Pkg2: TLazPackageID;
|
||||||
begin
|
begin
|
||||||
Pkg1:=TLazPackage(Data1);
|
Pkg1:=TLazPackageID(Data1);
|
||||||
Pkg2:=TLazPackage(Data2);
|
Pkg2:=TLazPackageID(Data2);
|
||||||
Result:=Pkg1.Compare(Pkg2);
|
Result:=Pkg1.Compare(Pkg2);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -608,6 +623,22 @@ begin
|
|||||||
Result:=0;
|
Result:=0;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TPkgFile.AddPkgComponent(APkgComponent: TPkgComponent);
|
||||||
|
begin
|
||||||
|
if FComponents=nil then FComponents:=TList.Create;
|
||||||
|
FComponents.Add(APkgComponent);
|
||||||
|
if LazPackage<>nil then
|
||||||
|
LazPackage.AddPkgComponent(APkgComponent);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TPkgFile.RemovePkgComponent(APkgComponent: TPkgComponent);
|
||||||
|
begin
|
||||||
|
if FComponents<>nil then
|
||||||
|
FComponents.Remove(APkgComponent);
|
||||||
|
if LazPackage<>nil then
|
||||||
|
LazPackage.RemovePkgComponent(APkgComponent);
|
||||||
|
end;
|
||||||
|
|
||||||
{ TPkgDependency }
|
{ TPkgDependency }
|
||||||
|
|
||||||
procedure TPkgDependency.SetFlags(const AValue: TPkgDependencyFlags);
|
procedure TPkgDependency.SetFlags(const AValue: TPkgDependencyFlags);
|
||||||
@ -805,6 +836,11 @@ begin
|
|||||||
Result:=lpfAutoUpdate in FFlags;
|
Result:=lpfAutoUpdate in FFlags;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function TLazPackage.GetComponentCount: integer;
|
||||||
|
begin
|
||||||
|
Result:=FComponents.Count;
|
||||||
|
end;
|
||||||
|
|
||||||
function TLazPackage.GetComponents(Index: integer): TPkgComponent;
|
function TLazPackage.GetComponents(Index: integer): TPkgComponent;
|
||||||
begin
|
begin
|
||||||
Result:=TPkgComponent(FComponents[Index]);
|
Result:=TPkgComponent(FComponents[Index]);
|
||||||
@ -1036,16 +1072,16 @@ var
|
|||||||
begin
|
begin
|
||||||
FAuthor:='';
|
FAuthor:='';
|
||||||
FAutoInstall:=pitNope;
|
FAutoInstall:=pitNope;
|
||||||
for i:=0 to FConflictPkgs.Count-1 do ConflictPkgs[i].Free;
|
for i:=FConflictPkgs.Count-1 downto 0 do ConflictPkgs[i].Free;
|
||||||
FConflictPkgs.Clear;
|
FConflictPkgs.Clear;
|
||||||
for i:=0 to FComponents.Count-1 do Components[i].Free;
|
for i:=FComponents.Count-1 downto 0 do Components[i].Free;
|
||||||
FComponents.Clear;
|
FComponents.Clear;
|
||||||
FCompilerOptions.Clear;
|
FCompilerOptions.Clear;
|
||||||
FDescription:='';
|
FDescription:='';
|
||||||
FDirectory:='';
|
FDirectory:='';
|
||||||
FVersion.Clear;
|
FVersion.Clear;
|
||||||
FFilename:='';
|
FFilename:='';
|
||||||
for i:=0 to FFiles.Count-1 do Files[i].Free;
|
for i:=FFiles.Count-1 downto 0 do Files[i].Free;
|
||||||
FFiles.Clear;
|
FFiles.Clear;
|
||||||
FFlags:=[lpfAutoIncrementVersionOnBuild,lpfAutoUpdate];
|
FFlags:=[lpfAutoIncrementVersionOnBuild,lpfAutoUpdate];
|
||||||
FIconFile:='';
|
FIconFile:='';
|
||||||
@ -1053,7 +1089,7 @@ begin
|
|||||||
FName:='';
|
FName:='';
|
||||||
FPackageType:=lptRunTime;
|
FPackageType:=lptRunTime;
|
||||||
FRegistered:=false;
|
FRegistered:=false;
|
||||||
for i:=0 to FRequiredPkgs.Count-1 do RequiredPkgs[i].Free;
|
for i:=FRequiredPkgs.Count-1 downto 0 do RequiredPkgs[i].Free;
|
||||||
FRequiredPkgs.Clear;
|
FRequiredPkgs.Clear;
|
||||||
FTitle:='';
|
FTitle:='';
|
||||||
FUsageOptions.Clear;
|
FUsageOptions.Clear;
|
||||||
@ -1204,20 +1240,13 @@ begin
|
|||||||
// ToDo: make some checks like deactivating double requirements
|
// ToDo: make some checks like deactivating double requirements
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TLazPackage.Compare(Package2: TLazPackage): integer;
|
|
||||||
begin
|
|
||||||
Result:=AnsiCompareText(Name,Package2.Name);
|
|
||||||
if Result<>0 then exit;
|
|
||||||
Result:=Version.Compare(Package2.Version);
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure TLazPackage.ShortenFilename(var ExpandedFilename: string);
|
procedure TLazPackage.ShortenFilename(var ExpandedFilename: string);
|
||||||
var
|
var
|
||||||
PkgDir: String;
|
PkgDir: String;
|
||||||
CurPath: String;
|
CurPath: String;
|
||||||
begin
|
begin
|
||||||
PkgDir:=FDirectory;
|
PkgDir:=FDirectory;
|
||||||
if (PkgDir='') and (PkgDir[length(PkgDir)]<>PathDelim) then exit;
|
if (PkgDir='') or (PkgDir[length(PkgDir)]<>PathDelim) then exit;
|
||||||
CurPath:=copy(ExtractFilePath(ExpandedFilename),1,length(PkgDir));
|
CurPath:=copy(ExtractFilePath(ExpandedFilename),1,length(PkgDir));
|
||||||
if CompareFilenames(PkgDir,CurPath)=0 then begin
|
if CompareFilenames(PkgDir,CurPath)=0 then begin
|
||||||
ExpandedFilename:=copy(ExpandedFilename,length(CurPath)+1,
|
ExpandedFilename:=copy(ExpandedFilename,length(CurPath)+1,
|
||||||
@ -1227,13 +1256,14 @@ end;
|
|||||||
|
|
||||||
procedure TLazPackage.LongenFilename(var AFilename: string);
|
procedure TLazPackage.LongenFilename(var AFilename: string);
|
||||||
begin
|
begin
|
||||||
if (FDirectory='') and (FDirectory[length(FDirectory)]<>PathDelim) then exit;
|
if (FDirectory='') or (FDirectory[length(FDirectory)]<>PathDelim) then exit;
|
||||||
if not FilenameIsAbsolute(AFilename) then
|
if not FilenameIsAbsolute(AFilename) then
|
||||||
AFilename:=TrimFilename(Directory+AFilename);
|
AFilename:=TrimFilename(Directory+AFilename);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TLazPackage.IterateComponentClasses(
|
procedure TLazPackage.IterateComponentClasses(
|
||||||
Event: TIterateComponentClassesEvent; WithRequiredPackages: boolean);
|
Event: TIterateComponentClassesEvent;
|
||||||
|
WithUsedPackages: boolean);
|
||||||
var
|
var
|
||||||
Cnt: Integer;
|
Cnt: Integer;
|
||||||
i: Integer;
|
i: Integer;
|
||||||
@ -1242,8 +1272,10 @@ begin
|
|||||||
Cnt:=ComponentCount;
|
Cnt:=ComponentCount;
|
||||||
for i:=0 to Cnt-1 do Event(Components[i]);
|
for i:=0 to Cnt-1 do Event(Components[i]);
|
||||||
// iterate through all used packages
|
// iterate through all used packages
|
||||||
if WithRequiredPackages then begin
|
if WithUsedPackages then begin
|
||||||
// ToDo
|
Cnt:=UsedPkgCount;
|
||||||
|
for i:=0 to Cnt-1 do
|
||||||
|
UsedPkgs[i].IterateComponentClasses(Event,false);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -1323,7 +1355,16 @@ function TLazPackage.AddComponent(PkgFile: TPkgFile; const Page: string;
|
|||||||
TheComponentClass: TComponentClass): TPkgComponent;
|
TheComponentClass: TComponentClass): TPkgComponent;
|
||||||
begin
|
begin
|
||||||
Result:=TPkgComponent.Create(PkgFile,TheComponentClass,Page);
|
Result:=TPkgComponent.Create(PkgFile,TheComponentClass,Page);
|
||||||
FComponents.Add(Result);
|
end;
|
||||||
|
|
||||||
|
procedure TLazPackage.AddPkgComponent(APkgComponent: TPkgComponent);
|
||||||
|
begin
|
||||||
|
FComponents.Add(APkgComponent);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TLazPackage.RemovePkgComponent(APkgComponent: TPkgComponent);
|
||||||
|
begin
|
||||||
|
FComponents.Remove(APkgComponent);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TPkgComponent }
|
{ TPkgComponent }
|
||||||
@ -1331,11 +1372,9 @@ end;
|
|||||||
procedure TPkgComponent.SetPkgFile(const AValue: TPkgFile);
|
procedure TPkgComponent.SetPkgFile(const AValue: TPkgFile);
|
||||||
begin
|
begin
|
||||||
if FPkgFile=AValue then exit;
|
if FPkgFile=AValue then exit;
|
||||||
if (FPkgFile<>nil) and (FPkgFile.FComponents<>nil) then
|
if (FPkgFile<>nil) then PkgFile.RemovePkgComponent(Self);
|
||||||
FPkgFile.FComponents.Remove(Self);
|
|
||||||
FPkgFile:=AValue;
|
FPkgFile:=AValue;
|
||||||
if FPkgFile<>nil then
|
if (FPkgFile<>nil) then PkgFile.AddPkgComponent(Self);
|
||||||
FPkgFile.GetComponentList.Add(Self);
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
constructor TPkgComponent.Create(ThePkgFile: TPkgFile;
|
constructor TPkgComponent.Create(ThePkgFile: TPkgFile;
|
||||||
@ -1404,5 +1443,25 @@ begin
|
|||||||
Result:=Page.PageName<>'';
|
Result:=Page.PageName<>'';
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
{ TLazPackageID }
|
||||||
|
|
||||||
|
procedure TLazPackageID.SetName(const AValue: string);
|
||||||
|
begin
|
||||||
|
if FName=AValue then exit;
|
||||||
|
FName:=AValue;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TLazPackageID.IDAsString: string;
|
||||||
|
begin
|
||||||
|
Result:=Name+' '+Version.AsString;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TLazPackageID.Compare(PackageID2: TLazPackageID): integer;
|
||||||
|
begin
|
||||||
|
Result:=AnsiCompareText(Name,PackageID2.Name);
|
||||||
|
if Result<>0 then exit;
|
||||||
|
Result:=Version.Compare(PackageID2.Version);
|
||||||
|
end;
|
||||||
|
|
||||||
end.
|
end.
|
||||||
|
|
||||||
|
@ -243,7 +243,8 @@ begin
|
|||||||
// draw registered component
|
// draw registered component
|
||||||
CurComponent:=TPkgComponent(CurObject);
|
CurComponent:=TPkgComponent(CurObject);
|
||||||
with RegisteredListBox.Canvas do begin
|
with RegisteredListBox.Canvas do begin
|
||||||
CurStr:=CurComponent.ComponentClass.ClassName;
|
CurStr:=CurComponent.ComponentClass.ClassName
|
||||||
|
+', Page: '+CurComponent.Page.PageName;
|
||||||
TxtH:=TextHeight(CurStr);
|
TxtH:=TextHeight(CurStr);
|
||||||
CurRect:=ARect;
|
CurRect:=ARect;
|
||||||
inc(CurRect.Left,25);
|
inc(CurRect.Left,25);
|
||||||
@ -598,7 +599,7 @@ begin
|
|||||||
FPlugins.AddObject(CurLine,CurComponent);
|
FPlugins.AddObject(CurLine,CurComponent);
|
||||||
inc(CurListIndex);
|
inc(CurListIndex);
|
||||||
end;
|
end;
|
||||||
// show them in the RegisteredListBox
|
// put them in the RegisteredListBox
|
||||||
RegisteredListBox.Items.Assign(FPlugins);
|
RegisteredListBox.Items.Assign(FPlugins);
|
||||||
end else begin
|
end else begin
|
||||||
CallRegisterProcCheckBox.Checked:=false;
|
CallRegisterProcCheckBox.Checked:=false;
|
||||||
|
@ -42,6 +42,10 @@ uses
|
|||||||
PackageDefs, LazConf;
|
PackageDefs, LazConf;
|
||||||
|
|
||||||
type
|
type
|
||||||
|
TIteratePackagesEvent =
|
||||||
|
procedure(APackage: TLazPackageID) of object;
|
||||||
|
|
||||||
|
|
||||||
{ TPackageLink }
|
{ TPackageLink }
|
||||||
|
|
||||||
TPkgLinkOrigin = (
|
TPkgLinkOrigin = (
|
||||||
@ -50,24 +54,17 @@ type
|
|||||||
);
|
);
|
||||||
TPkgLinkOrigins = set of TPkgLinkOrigin;
|
TPkgLinkOrigins = set of TPkgLinkOrigin;
|
||||||
|
|
||||||
TPackageLink = class
|
TPackageLink = class(TLazPackageID)
|
||||||
private
|
private
|
||||||
FFilename: string;
|
FFilename: string;
|
||||||
FOrigin: TPkgLinkOrigin;
|
FOrigin: TPkgLinkOrigin;
|
||||||
FPkgName: string;
|
|
||||||
FVersion: TPkgVersion;
|
|
||||||
procedure SetFilename(const AValue: string);
|
procedure SetFilename(const AValue: string);
|
||||||
procedure SetOrigin(const AValue: TPkgLinkOrigin);
|
procedure SetOrigin(const AValue: TPkgLinkOrigin);
|
||||||
procedure SetPkgName(const AValue: string);
|
|
||||||
procedure SetVersion(const AValue: TPkgVersion);
|
|
||||||
public
|
public
|
||||||
constructor Create;
|
constructor Create;
|
||||||
destructor Destroy; override;
|
destructor Destroy; override;
|
||||||
function Compare(Link2: TPackageLink): integer;
|
|
||||||
public
|
public
|
||||||
property Origin: TPkgLinkOrigin read FOrigin write SetOrigin;
|
property Origin: TPkgLinkOrigin read FOrigin write SetOrigin;
|
||||||
property PkgName: string read FPkgName write SetPkgName;
|
|
||||||
property Version: TPkgVersion read FVersion write SetVersion;
|
|
||||||
property Filename: string read FFilename write SetFilename;
|
property Filename: string read FFilename write SetFilename;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -108,6 +105,7 @@ type
|
|||||||
var
|
var
|
||||||
PkgLinks: TPackageLinks;
|
PkgLinks: TPackageLinks;
|
||||||
|
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
|
|
||||||
|
|
||||||
@ -134,7 +132,7 @@ begin
|
|||||||
else begin
|
else begin
|
||||||
PkgName:=AnsiString(Key);
|
PkgName:=AnsiString(Key);
|
||||||
Link:=TPackageLink(Data);
|
Link:=TPackageLink(Data);
|
||||||
Result:=AnsiCompareText(PkgName,Link.PkgName);
|
Result:=AnsiCompareText(PkgName,Link.Name);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -152,18 +150,6 @@ begin
|
|||||||
FFilename:=AValue;
|
FFilename:=AValue;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TPackageLink.SetPkgName(const AValue: string);
|
|
||||||
begin
|
|
||||||
if FPkgName=AValue then exit;
|
|
||||||
FPkgName:=AValue;
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure TPackageLink.SetVersion(const AValue: TPkgVersion);
|
|
||||||
begin
|
|
||||||
if FVersion=AValue then exit;
|
|
||||||
FVersion:=AValue;
|
|
||||||
end;
|
|
||||||
|
|
||||||
constructor TPackageLink.Create;
|
constructor TPackageLink.Create;
|
||||||
begin
|
begin
|
||||||
FVersion:=TPkgVersion.Create;
|
FVersion:=TPkgVersion.Create;
|
||||||
@ -175,13 +161,6 @@ begin
|
|||||||
inherited Destroy;
|
inherited Destroy;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TPackageLink.Compare(Link2: TPackageLink): integer;
|
|
||||||
begin
|
|
||||||
Result:=AnsiCompareText(PkgName,Link2.PkgName);
|
|
||||||
if Result=0 then
|
|
||||||
Result:=Version.Compare(Link2.Version);
|
|
||||||
end;
|
|
||||||
|
|
||||||
{ TPackageLinks }
|
{ TPackageLinks }
|
||||||
|
|
||||||
function TPackageLinks.FindLeftMostNode(LinkTree: TAVLTree;
|
function TPackageLinks.FindLeftMostNode(LinkTree: TAVLTree;
|
||||||
@ -198,7 +177,7 @@ begin
|
|||||||
while Result<>nil do begin
|
while Result<>nil do begin
|
||||||
PriorNode:=LinkTree.FindPrecessor(Result);
|
PriorNode:=LinkTree.FindPrecessor(Result);
|
||||||
if (PriorNode=nil)
|
if (PriorNode=nil)
|
||||||
or (AnsiCompareText(TPackageLink(PriorNode.Data).PkgName,PkgName)<>0)
|
or (AnsiCompareText(TPackageLink(PriorNode.Data).Name,PkgName)<>0)
|
||||||
then
|
then
|
||||||
break;
|
break;
|
||||||
Result:=PriorNode;
|
Result:=PriorNode;
|
||||||
@ -320,10 +299,10 @@ begin
|
|||||||
|
|
||||||
NewPkgLink:=TPackageLink.Create;
|
NewPkgLink:=TPackageLink.Create;
|
||||||
NewPkgLink.Origin:=ploGlobal;
|
NewPkgLink.Origin:=ploGlobal;
|
||||||
NewPkgLink.PkgName:=NewPkgName;
|
NewPkgLink.Name:=NewPkgName;
|
||||||
NewPkgLink.Version.Assign(PkgVersion);
|
NewPkgLink.Version.Assign(PkgVersion);
|
||||||
NewPkgLink.Filename:=NewFilename;
|
NewPkgLink.Filename:=NewFilename;
|
||||||
if IsValidIdent(NewPkgLink.PkgName) and FileExists(NewPkgLink.Filename)
|
if IsValidIdent(NewPkgLink.Name) and FileExists(NewPkgLink.Filename)
|
||||||
then
|
then
|
||||||
FGlobalLinks.Add(NewPkgLink)
|
FGlobalLinks.Add(NewPkgLink)
|
||||||
else
|
else
|
||||||
@ -363,11 +342,11 @@ begin
|
|||||||
ItemPath:=Path+'Item'+IntToStr(i)+'/';
|
ItemPath:=Path+'Item'+IntToStr(i)+'/';
|
||||||
NewPkgLink:=TPackageLink.Create;
|
NewPkgLink:=TPackageLink.Create;
|
||||||
NewPkgLink.Origin:=ploUser;
|
NewPkgLink.Origin:=ploUser;
|
||||||
NewPkgLink.PkgName:=XMLConfig.GetValue(ItemPath+'PkgName/Value','');
|
NewPkgLink.Name:=XMLConfig.GetValue(ItemPath+'Name/Value','');
|
||||||
NewPkgLink.Version.LoadFromXMLConfig(XMLConfig,ItemPath+'Version/',
|
NewPkgLink.Version.LoadFromXMLConfig(XMLConfig,ItemPath+'Version/',
|
||||||
LazPkgXMLFileVersion);
|
LazPkgXMLFileVersion);
|
||||||
NewPkgLink.Filename:=XMLConfig.GetValue(ItemPath+'Filename/Value','');
|
NewPkgLink.Filename:=XMLConfig.GetValue(ItemPath+'Filename/Value','');
|
||||||
if IsValidIdent(NewPkgLink.PkgName) and FileExists(NewPkgLink.Filename)
|
if IsValidIdent(NewPkgLink.Name) and FileExists(NewPkgLink.Filename)
|
||||||
then
|
then
|
||||||
FUserLinks.Add(NewPkgLink)
|
FUserLinks.Add(NewPkgLink)
|
||||||
else
|
else
|
||||||
@ -430,7 +409,7 @@ begin
|
|||||||
break;
|
break;
|
||||||
end;
|
end;
|
||||||
CurNode:=LinkTree.FindSuccessor(CurNode);
|
CurNode:=LinkTree.FindSuccessor(CurNode);
|
||||||
if AnsiCompareText(TPackageLink(CurNode.Data).PkgName,Dependency.PackageName)
|
if AnsiCompareText(TPackageLink(CurNode.Data).Name,Dependency.PackageName)
|
||||||
<>0
|
<>0
|
||||||
then begin
|
then begin
|
||||||
CurNode:=nil;
|
CurNode:=nil;
|
||||||
|
@ -107,6 +107,11 @@ type
|
|||||||
procedure RegisterStaticPackages;
|
procedure RegisterStaticPackages;
|
||||||
function OpenDependency(Dependency: TPkgDependency;
|
function OpenDependency(Dependency: TPkgDependency;
|
||||||
Flags: TFindPackageFlags; var APackage: TLazPackage): TLoadPackageResult;
|
Flags: TFindPackageFlags; var APackage: TLazPackage): TLoadPackageResult;
|
||||||
|
procedure IterateComponentClasses(APackage: TLazPackage;
|
||||||
|
Event: TIterateComponentClassesEvent;
|
||||||
|
WithUsedPackages, WithRequiredPackages: boolean);
|
||||||
|
procedure IteratePackages(Flags: TFindPackageFlags;
|
||||||
|
Event: TIteratePackagesEvent);
|
||||||
public
|
public
|
||||||
property Packages[Index: integer]: TLazPackage read GetPackages; default;
|
property Packages[Index: integer]: TLazPackage read GetPackages; default;
|
||||||
property RegistrationPackage: TLazPackage read FRegistrationPackage
|
property RegistrationPackage: TLazPackage read FRegistrationPackage
|
||||||
@ -168,7 +173,7 @@ end;
|
|||||||
|
|
||||||
constructor TLazPackageGraph.Create;
|
constructor TLazPackageGraph.Create;
|
||||||
begin
|
begin
|
||||||
FTree:=TAVLTree.Create(@CompareLazPackage);
|
FTree:=TAVLTree.Create(@CompareLazPackageID);
|
||||||
FItems:=TList.Create;
|
FItems:=TList.Create;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -187,9 +192,16 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TLazPackageGraph.Clear;
|
procedure TLazPackageGraph.Clear;
|
||||||
|
var
|
||||||
|
i: Integer;
|
||||||
|
CurPkg: TLazPackage;
|
||||||
begin
|
begin
|
||||||
FTree.FreeAndClear;
|
for i:=FItems.Count-1 downto 0 do begin
|
||||||
FItems.Clear;
|
CurPkg:=Packages[i];
|
||||||
|
FItems.Delete(i);
|
||||||
|
FTree.Remove(CurPkg);
|
||||||
|
CurPkg.Free;
|
||||||
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TLazPackageGraph.Count: integer;
|
function TLazPackageGraph.Count: integer;
|
||||||
@ -554,6 +566,55 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TLazPackageGraph.IterateComponentClasses(APackage: TLazPackage;
|
||||||
|
Event: TIterateComponentClassesEvent; WithUsedPackages,
|
||||||
|
WithRequiredPackages: boolean);
|
||||||
|
var
|
||||||
|
Cnt: Integer;
|
||||||
|
i: Integer;
|
||||||
|
ARequiredPackage: TLazPackage;
|
||||||
|
ADependency: TPkgDependency;
|
||||||
|
begin
|
||||||
|
APackage.IterateComponentClasses(Event,WithUsedPackages);
|
||||||
|
// iterate through all required packages
|
||||||
|
if WithRequiredPackages then begin
|
||||||
|
Cnt:=APackage.RequiredPkgCount;
|
||||||
|
for i:=0 to Cnt-1 do begin
|
||||||
|
ADependency:=APackage.RequiredPkgs[i];
|
||||||
|
if OpenDependency(ADependency,[fpfSearchInInstalledPckgs],ARequiredPackage)
|
||||||
|
=lprSuccess
|
||||||
|
then begin
|
||||||
|
ARequiredPackage.IterateComponentClasses(Event,false);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TLazPackageGraph.IteratePackages(Flags: TFindPackageFlags;
|
||||||
|
Event: TIteratePackagesEvent);
|
||||||
|
var
|
||||||
|
CurPkg: TLazPackage;
|
||||||
|
i: Integer;
|
||||||
|
begin
|
||||||
|
// iterate opened packages
|
||||||
|
for i:=0 to FItems.Count-1 do begin
|
||||||
|
CurPkg:=Packages[i];
|
||||||
|
// check installed packages
|
||||||
|
if ((fpfSearchInInstalledPckgs in Flags) and (CurPkg.Installed<>pitNope))
|
||||||
|
// check autoinstall packages
|
||||||
|
or ((fpfSearchInAutoInstallPckgs in Flags) and (CurPkg.AutoInstall<>pitNope))
|
||||||
|
// check packages with opened editor
|
||||||
|
or ((fpfSearchInPckgsWithEditor in Flags) and (CurPkg.Editor<>nil))
|
||||||
|
then
|
||||||
|
Event(CurPkg);
|
||||||
|
end;
|
||||||
|
// iterate in package links
|
||||||
|
if (fpfSearchInPkgLinks in Flags) then begin
|
||||||
|
// ToDo
|
||||||
|
//PkgLinks.IteratePackageNames();
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
initialization
|
initialization
|
||||||
PackageGraph:=nil;
|
PackageGraph:=nil;
|
||||||
|
|
||||||
|
@ -152,8 +152,13 @@ var
|
|||||||
CurEditor: TPackageEditorForm;
|
CurEditor: TPackageEditorForm;
|
||||||
begin
|
begin
|
||||||
Result:=mrCancel;
|
Result:=mrCancel;
|
||||||
// create a new package
|
// create a new package with standard dependencies
|
||||||
NewPackage:=PackageGraph.NewPackage('NewPackage');
|
NewPackage:=PackageGraph.NewPackage('NewPackage');
|
||||||
|
NewPackage.AddRequiredDependency(
|
||||||
|
PackageGraph.FCLPackage.CreateDependencyForThisPkg);
|
||||||
|
NewPackage.AddRequiredDependency(
|
||||||
|
PackageGraph.LCLPackage.CreateDependencyForThisPkg);
|
||||||
|
|
||||||
// open a package editor
|
// open a package editor
|
||||||
CurEditor:=PackageEditors.OpenEditor(NewPackage);
|
CurEditor:=PackageEditors.OpenEditor(NewPackage);
|
||||||
CurEditor.Show;
|
CurEditor.Show;
|
||||||
|
Loading…
Reference in New Issue
Block a user