mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-06-02 07:12:41 +02:00
Packager: Use new AddPkgDependencyDlg for dependencies of projects and packages. Support multiselection.
git-svn-id: trunk@53129 -
This commit is contained in:
parent
09b6ef75ac
commit
60e607f3e0
2
.gitattributes
vendored
2
.gitattributes
vendored
@ -7817,6 +7817,8 @@ packager/adddirtopkgdlg.lfm svneol=native#text/plain
|
||||
packager/adddirtopkgdlg.pas svneol=native#text/plain
|
||||
packager/addfiletoapackagedlg.lfm svneol=native#text/plain
|
||||
packager/addfiletoapackagedlg.pas svneol=native#text/pascal
|
||||
packager/addpkgdependencydlg.lfm svneol=native#text/plain
|
||||
packager/addpkgdependencydlg.pas svneol=native#text/pascal
|
||||
packager/addtopackagedlg.lfm svneol=native#text/plain
|
||||
packager/addtopackagedlg.pas svneol=native#text/pascal
|
||||
packager/basepkgmanager.pas svneol=native#text/pascal
|
||||
|
@ -17,20 +17,20 @@ object AddToProjectDialog: TAddToProjectDialog
|
||||
Height = 317
|
||||
Top = 0
|
||||
Width = 658
|
||||
ActivePage = NewDependPage
|
||||
ActivePage = AddEditorFilePage
|
||||
Align = alClient
|
||||
TabIndex = 1
|
||||
TabIndex = 0
|
||||
TabOrder = 0
|
||||
OnChange = NotebookChange
|
||||
object AddEditorFilePage: TTabSheet
|
||||
Caption = 'AddEditorFilePage'
|
||||
ClientHeight = 273
|
||||
ClientWidth = 590
|
||||
ClientHeight = 282
|
||||
ClientWidth = 650
|
||||
object AddFileLabel: TLabel
|
||||
Left = 6
|
||||
Height = 15
|
||||
Height = 18
|
||||
Top = 6
|
||||
Width = 578
|
||||
Width = 638
|
||||
Align = alTop
|
||||
BorderSpacing.Around = 6
|
||||
Caption = 'AddFileLabel'
|
||||
@ -38,9 +38,9 @@ object AddToProjectDialog: TAddToProjectDialog
|
||||
end
|
||||
object AddFileListView: TListView
|
||||
Left = 6
|
||||
Height = 238
|
||||
Top = 27
|
||||
Width = 578
|
||||
Height = 244
|
||||
Top = 30
|
||||
Width = 638
|
||||
Align = alTop
|
||||
Anchors = [akTop, akLeft, akRight, akBottom]
|
||||
AutoWidthLastColumn = True
|
||||
@ -55,118 +55,16 @@ object AddToProjectDialog: TAddToProjectDialog
|
||||
OnSelectItem = AddFileListViewSelectItem
|
||||
end
|
||||
end
|
||||
object NewDependPage: TTabSheet
|
||||
Caption = 'NewDependPage'
|
||||
ClientHeight = 282
|
||||
ClientWidth = 650
|
||||
object DependPkgNameLabel: TLabel
|
||||
AnchorSideTop.Control = DependPkgNameFilter
|
||||
AnchorSideTop.Side = asrCenter
|
||||
AnchorSideRight.Control = DependPkgNameFilter
|
||||
Left = 141
|
||||
Height = 18
|
||||
Top = 15
|
||||
Width = 141
|
||||
Anchors = [akTop, akRight]
|
||||
BorderSpacing.Right = 6
|
||||
Caption = 'DependPkgNameLabel'
|
||||
ParentColor = False
|
||||
end
|
||||
object DependMinVersionLabel: TLabel
|
||||
AnchorSideTop.Control = DependMinVersionEdit
|
||||
AnchorSideTop.Side = asrCenter
|
||||
AnchorSideRight.Control = DependMinVersionEdit
|
||||
Left = 132
|
||||
Height = 18
|
||||
Top = 209
|
||||
Width = 150
|
||||
Anchors = [akTop, akRight]
|
||||
BorderSpacing.Right = 6
|
||||
Caption = 'DependMinVersionLabel'
|
||||
ParentColor = False
|
||||
end
|
||||
object DependMaxVersionLabel: TLabel
|
||||
AnchorSideTop.Control = DependMaxVersionEdit
|
||||
AnchorSideTop.Side = asrCenter
|
||||
AnchorSideRight.Control = DependMaxVersionEdit
|
||||
Left = 129
|
||||
Height = 18
|
||||
Top = 247
|
||||
Width = 153
|
||||
Anchors = [akTop, akRight]
|
||||
BorderSpacing.Right = 6
|
||||
Caption = 'DependMaxVersionLabel'
|
||||
ParentColor = False
|
||||
end
|
||||
object DependMinVersionEdit: TEdit
|
||||
AnchorSideLeft.Control = DependPkgNameListBox
|
||||
AnchorSideRight.Control = DependPkgNameListBox
|
||||
AnchorSideRight.Side = asrBottom
|
||||
AnchorSideBottom.Control = DependMaxVersionEdit
|
||||
Left = 288
|
||||
Height = 32
|
||||
Top = 202
|
||||
Width = 250
|
||||
Anchors = [akLeft, akRight, akBottom]
|
||||
BorderSpacing.Top = 6
|
||||
BorderSpacing.Bottom = 6
|
||||
TabOrder = 2
|
||||
Text = 'DependMinVersionEdit'
|
||||
end
|
||||
object DependMaxVersionEdit: TEdit
|
||||
AnchorSideLeft.Control = DependMinVersionEdit
|
||||
AnchorSideRight.Control = DependPkgNameListBox
|
||||
AnchorSideRight.Side = asrBottom
|
||||
Left = 288
|
||||
Height = 32
|
||||
Top = 240
|
||||
Width = 250
|
||||
Anchors = [akLeft, akRight, akBottom]
|
||||
BorderSpacing.Top = 6
|
||||
TabOrder = 3
|
||||
Text = 'DependMaxVersionEdit'
|
||||
end
|
||||
object DependPkgNameListBox: TListBox
|
||||
AnchorSideLeft.Control = DependPkgNameFilter
|
||||
AnchorSideTop.Control = DependPkgNameFilter
|
||||
AnchorSideTop.Side = asrBottom
|
||||
AnchorSideRight.Control = DependPkgNameFilter
|
||||
AnchorSideRight.Side = asrBottom
|
||||
AnchorSideBottom.Control = DependMinVersionEdit
|
||||
Left = 288
|
||||
Height = 150
|
||||
Top = 46
|
||||
Width = 250
|
||||
Anchors = [akTop, akLeft, akRight, akBottom]
|
||||
BorderSpacing.Top = 6
|
||||
BorderSpacing.Bottom = 6
|
||||
ItemHeight = 0
|
||||
OnSelectionChange = DependPkgNameListBoxSelectionChange
|
||||
TabOrder = 1
|
||||
end
|
||||
object DependPkgNameFilter: TListFilterEdit
|
||||
Left = 288
|
||||
Height = 32
|
||||
Top = 8
|
||||
Width = 250
|
||||
ButtonWidth = 23
|
||||
NumGlyphs = 1
|
||||
Anchors = [akTop]
|
||||
MaxLength = 0
|
||||
TabOrder = 0
|
||||
FilteredListbox = DependPkgNameListBox
|
||||
end
|
||||
end
|
||||
object AddFilesPage: TTabSheet
|
||||
Caption = 'AddFilesPage'
|
||||
ClientHeight = 263
|
||||
ClientWidth = 590
|
||||
ClientHeight = 282
|
||||
ClientWidth = 650
|
||||
object FilesListView: TListView
|
||||
AnchorSideBottom.Control = FilesDirButton
|
||||
Left = 6
|
||||
Height = 216
|
||||
Height = 235
|
||||
Top = 6
|
||||
Width = 578
|
||||
Width = 638
|
||||
Anchors = [akTop, akLeft, akRight, akBottom]
|
||||
AutoWidthLastColumn = True
|
||||
BorderSpacing.Around = 6
|
||||
@ -185,7 +83,7 @@ object AddToProjectDialog: TAddToProjectDialog
|
||||
AnchorSideBottom.Side = asrBottom
|
||||
Left = 6
|
||||
Height = 29
|
||||
Top = 228
|
||||
Top = 247
|
||||
Width = 101
|
||||
Anchors = [akLeft, akBottom]
|
||||
AutoSize = True
|
||||
@ -201,7 +99,7 @@ object AddToProjectDialog: TAddToProjectDialog
|
||||
AnchorSideTop.Side = asrCenter
|
||||
Left = 113
|
||||
Height = 29
|
||||
Top = 228
|
||||
Top = 247
|
||||
Width = 132
|
||||
AutoSize = True
|
||||
BorderSpacing.Around = 6
|
||||
@ -216,7 +114,7 @@ object AddToProjectDialog: TAddToProjectDialog
|
||||
AnchorSideTop.Side = asrCenter
|
||||
Left = 251
|
||||
Height = 29
|
||||
Top = 228
|
||||
Top = 247
|
||||
Width = 123
|
||||
AutoSize = True
|
||||
BorderSpacing.Around = 6
|
||||
|
@ -37,26 +37,22 @@ uses
|
||||
Classes, SysUtils, AVL_Tree,
|
||||
// LCL
|
||||
Forms, Controls, Buttons, ComCtrls, StdCtrls, Dialogs, ButtonPanel,
|
||||
ListFilterEdit,
|
||||
// LazUtils
|
||||
FileUtil, LazFileUtils,
|
||||
// IDEIntf
|
||||
IDEWindowIntf, PackageIntf, IDEDialogs,
|
||||
IDEWindowIntf, PackageIntf,
|
||||
// IDE
|
||||
LazarusIDEStrConsts, Project, InputHistory, PackageDefs, PackageSystem,
|
||||
ProjPackChecks;
|
||||
LazarusIDEStrConsts, Project, InputHistory, PackageDefs, ProjPackChecks;
|
||||
|
||||
type
|
||||
TAddToProjectType = (
|
||||
a2pFiles,
|
||||
a2pRequiredPkg,
|
||||
a2pEditorFiles
|
||||
);
|
||||
|
||||
TAddToProjectResult = class
|
||||
public
|
||||
AddType: TAddToProjectType;
|
||||
Dependency: TPkgDependency;
|
||||
FileNames: TStrings;
|
||||
destructor Destroy; override;
|
||||
end;
|
||||
@ -69,21 +65,12 @@ type
|
||||
FilesDeleteButton: TBitBtn;
|
||||
FilesDirButton: TBitBtn;
|
||||
FilesShortenButton: TBitBtn;
|
||||
DependPkgNameListBox: TListBox;
|
||||
DependPkgNameFilter: TListFilterEdit;
|
||||
// notebook
|
||||
NoteBook: TPageControl;
|
||||
AddEditorFilePage: TTabSheet;
|
||||
NewDependPage: TTabSheet;
|
||||
AddFilesPage: TTabSheet;
|
||||
// add file page
|
||||
AddFileLabel: TLabel;
|
||||
// new required package
|
||||
DependPkgNameLabel: TLabel;
|
||||
DependMinVersionLabel: TLabel;
|
||||
DependMinVersionEdit: TEdit;
|
||||
DependMaxVersionLabel: TLabel;
|
||||
DependMaxVersionEdit: TEdit;
|
||||
// add files page
|
||||
FilesListView: TListView;
|
||||
procedure AddFileButtonClick(Sender: TObject);
|
||||
@ -92,11 +79,9 @@ type
|
||||
procedure AddToProjectDialogClose(Sender: TObject;
|
||||
var {%H-}CloseAction: TCloseAction);
|
||||
procedure AddToProjectDialogShow(Sender: TObject);
|
||||
procedure DependPkgNameListBoxSelectionChange(Sender: TObject; {%H-}User: boolean);
|
||||
procedure FilesDirButtonClick(Sender: TObject);
|
||||
procedure FilesListViewSelectItem(Sender: TObject; {%H-}Item: TListItem;
|
||||
{%H-}Selected: Boolean);
|
||||
procedure NewDependButtonClick(Sender: TObject);
|
||||
procedure FilesAddButtonClick(Sender: TObject);
|
||||
procedure FilesDeleteButtonClick(Sender: TObject);
|
||||
procedure FilesShortenButtonClick(Sender: TObject);
|
||||
@ -106,17 +91,13 @@ type
|
||||
fProject: TProject;
|
||||
procedure SetupComponents;
|
||||
procedure SetupAddEditorFilePage;
|
||||
procedure SetupAddRequirementPage;
|
||||
procedure SetupAddFilesPage;
|
||||
function CheckNewReqOk: Boolean;
|
||||
procedure OnIteratePackages(APackageID: TLazPackageID);
|
||||
procedure UpdateAvailableFiles;
|
||||
procedure UpdateFilesButtons;
|
||||
public
|
||||
AddResult: TAddToProjectResult;
|
||||
constructor Create(TheOwner: TComponent); override;
|
||||
destructor Destroy; override;
|
||||
procedure UpdateAvailableDependencyNames;
|
||||
procedure UpdateAvailableFiles;
|
||||
procedure UpdateFilesButtons;
|
||||
end;
|
||||
|
||||
function ShowAddToProjectDlg(AProject: TProject;
|
||||
@ -136,12 +117,10 @@ begin
|
||||
AddToProjectDialog:=TAddToProjectDialog.Create(nil);
|
||||
AddToProjectDialog.fProject:=AProject;
|
||||
AddToProjectDialog.UpdateAvailableFiles;
|
||||
AddToProjectDialog.UpdateAvailableDependencyNames;
|
||||
|
||||
case AInitTab of
|
||||
a2pFiles: AddToProjectDialog.NoteBook.ActivePageIndex:=2;
|
||||
a2pFiles: AddToProjectDialog.NoteBook.ActivePageIndex:=1;
|
||||
a2pEditorFiles: AddToProjectDialog.NoteBook.ActivePageIndex:=0;
|
||||
a2pRequiredPkg: AddToProjectDialog.NoteBook.ActivePageIndex:=1;
|
||||
end;
|
||||
// hide tabs for simple look
|
||||
AddToProjectDialog.NoteBook.ShowTabs:=false;
|
||||
@ -173,12 +152,6 @@ begin
|
||||
SelectNext(NoteBook.ActivePage, True, True);
|
||||
end;
|
||||
|
||||
procedure TAddToProjectDialog.DependPkgNameListBoxSelectionChange(Sender: TObject;
|
||||
User: boolean);
|
||||
begin
|
||||
CheckNewReqOk;
|
||||
end;
|
||||
|
||||
procedure TAddToProjectDialog.FilesDirButtonClick(Sender: TObject);
|
||||
var
|
||||
DirDlg: TSelectDirectoryDialog;
|
||||
@ -221,52 +194,6 @@ begin
|
||||
UpdateFilesButtons;
|
||||
end;
|
||||
|
||||
procedure TAddToProjectDialog.NewDependButtonClick(Sender: TObject);
|
||||
var
|
||||
NewDependency: TPkgDependency;
|
||||
begin
|
||||
NewDependency:=TPkgDependency.Create;
|
||||
try
|
||||
// check minimum version
|
||||
if DependMinVersionEdit.Text<>'' then begin
|
||||
if not NewDependency.MinVersion.ReadString(DependMinVersionEdit.Text) then
|
||||
begin
|
||||
IDEMessageDialog(lisProjAddInvalidVersion,
|
||||
Format(lisProjAddTheMinimumVersionIsInvalid,
|
||||
[DependMinVersionEdit.Text, LineEnding, LineEnding]),
|
||||
mtError,[mbCancel]);
|
||||
exit;
|
||||
end;
|
||||
NewDependency.Flags:=NewDependency.Flags+[pdfMinVersion];
|
||||
end;
|
||||
// check maximum version
|
||||
if DependMaxVersionEdit.Text<>'' then begin
|
||||
if not NewDependency.MaxVersion.ReadString(DependMaxVersionEdit.Text) then
|
||||
begin
|
||||
IDEMessageDialog(lisProjAddInvalidVersion,
|
||||
Format(lisProjAddTheMaximumVersionIsInvalid,
|
||||
[DependMaxVersionEdit.Text, LineEnding, LineEnding]),
|
||||
mtError,[mbCancel]);
|
||||
exit;
|
||||
end;
|
||||
NewDependency.Flags:=NewDependency.Flags+[pdfMaxVersion];
|
||||
end;
|
||||
|
||||
NewDependency.PackageName:=DependPkgNameListBox.Items[DependPkgNameListBox.ItemIndex];
|
||||
if not CheckAddingProjectDependency(fProject,NewDependency) then exit;
|
||||
|
||||
// ok
|
||||
AddResult:=TAddToProjectResult.Create;
|
||||
AddResult.Dependency:=NewDependency;
|
||||
NewDependency:=nil;
|
||||
AddResult.AddType:=a2pRequiredPkg;
|
||||
|
||||
ModalResult:=mrOk;
|
||||
finally
|
||||
NewDependency.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TAddToProjectDialog.AddFileButtonClick(Sender: TObject);
|
||||
var
|
||||
i: Integer;
|
||||
@ -372,12 +299,7 @@ begin
|
||||
ButtonPanel.OkButton.OnClick:=@AddFileButtonClick;
|
||||
ButtonPanel.OkButton.Enabled:=AddFileListView.SelCount>0;
|
||||
end;
|
||||
1: begin // New Requirement
|
||||
ButtonPanel.OkButton.Caption:=lisA2PCreateNewReq;
|
||||
ButtonPanel.OkButton.OnClick:=@NewDependButtonClick;
|
||||
CheckNewReqOk;
|
||||
end;
|
||||
2: begin // Add Files
|
||||
1: begin // Add Files
|
||||
ButtonPanel.OkButton.Caption:=lisProjAddAddFilesToProject;
|
||||
ButtonPanel.OkButton.OnClick:=@FilesAddButtonClick;
|
||||
UpdateFilesButtons;
|
||||
@ -393,7 +315,6 @@ begin
|
||||
NotebookChange(NoteBook);
|
||||
|
||||
SetupAddEditorFilePage;
|
||||
SetupAddRequirementPage;
|
||||
SetupAddFilesPage;
|
||||
end;
|
||||
|
||||
@ -407,16 +328,6 @@ begin
|
||||
CurColumn.Caption:=lisA2PFilename2;
|
||||
end;
|
||||
|
||||
procedure TAddToProjectDialog.SetupAddRequirementPage;
|
||||
begin
|
||||
NewDependPage.Caption := lisProjAddNewRequirement;
|
||||
DependPkgNameLabel.Caption:=lisProjAddPackageName;
|
||||
DependMinVersionLabel.Caption:=lisProjAddMinimumVersionOptional;
|
||||
DependMinVersionEdit.Text:='';
|
||||
DependMaxVersionLabel.Caption:=lisProjAddMaximumVersionOptional;
|
||||
DependMaxVersionEdit.Text:='';
|
||||
end;
|
||||
|
||||
procedure TAddToProjectDialog.SetupAddFilesPage;
|
||||
var
|
||||
CurColumn: TListColumn;
|
||||
@ -450,18 +361,6 @@ begin
|
||||
UpdateFilesButtons;
|
||||
end;
|
||||
|
||||
function TAddToProjectDialog.CheckNewReqOk: Boolean;
|
||||
begin
|
||||
Result:=DependPkgNameListBox.ItemIndex>-1;
|
||||
ButtonPanel.OkButton.Enabled:=Result;
|
||||
end;
|
||||
|
||||
procedure TAddToProjectDialog.OnIteratePackages(APackageID: TLazPackageID);
|
||||
begin
|
||||
if (fPackages.Find(APackageID)=nil) then
|
||||
fPackages.Add(APackageID);
|
||||
end;
|
||||
|
||||
constructor TAddToProjectDialog.Create(TheOwner: TComponent);
|
||||
begin
|
||||
inherited Create(TheOwner);
|
||||
@ -477,24 +376,6 @@ begin
|
||||
inherited Destroy;
|
||||
end;
|
||||
|
||||
procedure TAddToProjectDialog.UpdateAvailableDependencyNames;
|
||||
var
|
||||
ANode: TAVLTreeNode;
|
||||
sl: TStringList;
|
||||
begin
|
||||
fPackages.Clear;
|
||||
PackageGraph.IteratePackages(fpfSearchAllExisting,@OnIteratePackages);
|
||||
sl:=TStringList.Create;
|
||||
ANode:=fPackages.FindLowest;
|
||||
while ANode<>nil do begin
|
||||
sl.Add(TLazPackageID(ANode.Data).Name);
|
||||
ANode:=fPackages.FindSuccessor(ANode);
|
||||
end;
|
||||
DependPkgNameFilter.Items.Assign(sl);
|
||||
DependPkgNameFilter.InvalidateFilter;
|
||||
sl.Free;
|
||||
end;
|
||||
|
||||
procedure TAddToProjectDialog.UpdateAvailableFiles;
|
||||
var
|
||||
CurFile: TUnitInfo;
|
||||
|
@ -63,7 +63,8 @@ uses
|
||||
PackageIntf,
|
||||
// IDE
|
||||
LazarusIDEStrConsts, IDEProcs, DialogProcs, IDEOptionDefs, EnvironmentOpts,
|
||||
PackageDefs, Project, PackageEditor, AddToProjectDlg, InputHistory, ProjPackChecks;
|
||||
PackageDefs, Project, PackageEditor, AddToProjectDlg, AddPkgDependencyDlg,
|
||||
InputHistory, ProjPackChecks;
|
||||
|
||||
type
|
||||
TOnAddUnitToProject =
|
||||
@ -173,6 +174,7 @@ type
|
||||
procedure AddMenuItemClick(Sender: TObject);
|
||||
function AddOneFile(aFilename: string): TModalResult;
|
||||
procedure DoAddMoreDialog(AInitTab: TAddToProjectType);
|
||||
procedure DoAddDepDialog;
|
||||
procedure FreeNodeData(Typ: TPENodeType);
|
||||
function CreateNodeData(Typ: TPENodeType; aName: string; aRemoved: boolean): TPENodeData;
|
||||
procedure SetDependencyDefaultFilename(AsPreferred: boolean);
|
||||
@ -373,7 +375,7 @@ end;
|
||||
|
||||
procedure TProjectInspectorForm.mnuAddReqClick(Sender: TObject);
|
||||
begin
|
||||
DoAddMoreDialog(a2pRequiredPkg);
|
||||
DoAddDepDialog;
|
||||
end;
|
||||
|
||||
procedure TProjectInspectorForm.MoveDependencyUpClick(Sender: TObject);
|
||||
@ -490,17 +492,6 @@ begin
|
||||
UpdateAll;
|
||||
EndUpdate;
|
||||
end;
|
||||
|
||||
a2pRequiredPkg:
|
||||
begin
|
||||
BeginUpdate;
|
||||
if Assigned(OnAddDependency) then
|
||||
OnAddDependency(Self,AddResult.Dependency);
|
||||
FNextSelectedPart:=AddResult.Dependency;
|
||||
UpdateRequiredPackages;
|
||||
EndUpdate;
|
||||
end;
|
||||
|
||||
else
|
||||
Showmessage('Not implemented');
|
||||
end;
|
||||
@ -508,6 +499,29 @@ begin
|
||||
AddResult.Free;
|
||||
end;
|
||||
|
||||
procedure TProjectInspectorForm.DoAddDepDialog;
|
||||
var
|
||||
Deps: TPkgDependencyList;
|
||||
i: Integer;
|
||||
Resu: TModalResult;
|
||||
begin
|
||||
Resu:=ShowAddPkgDependencyDlg(LazProject, Deps);
|
||||
try
|
||||
if (Resu<>mrOK) or (Deps.Count=0) then exit;
|
||||
BeginUpdate;
|
||||
for i := 0 to Deps.Count-1 do
|
||||
begin
|
||||
if Assigned(OnAddDependency) then
|
||||
OnAddDependency(Self, Deps[i]);
|
||||
end;
|
||||
FNextSelectedPart:=Deps[Deps.Count];
|
||||
UpdateRequiredPackages;
|
||||
EndUpdate;
|
||||
finally
|
||||
Deps.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TProjectInspectorForm.CopyMoveToDirMenuItemClick(Sender: TObject);
|
||||
begin
|
||||
OnCopyMoveFiles(Self);
|
||||
|
135
packager/addpkgdependencydlg.lfm
Normal file
135
packager/addpkgdependencydlg.lfm
Normal file
@ -0,0 +1,135 @@
|
||||
object AddPkgDependencyDialog: TAddPkgDependencyDialog
|
||||
Left = 466
|
||||
Height = 374
|
||||
Top = 122
|
||||
Width = 570
|
||||
Caption = 'AddPkgDependencyDialog'
|
||||
ClientHeight = 374
|
||||
ClientWidth = 570
|
||||
LCLVersion = '1.7'
|
||||
object DependPkgNameLabel: TLabel
|
||||
AnchorSideTop.Control = DependPkgNameFilter
|
||||
AnchorSideTop.Side = asrCenter
|
||||
AnchorSideRight.Control = DependPkgNameFilter
|
||||
Left = 141
|
||||
Height = 18
|
||||
Top = 23
|
||||
Width = 141
|
||||
Anchors = [akTop, akRight]
|
||||
BorderSpacing.Right = 6
|
||||
BorderSpacing.CellAlignHorizontal = ccaLeftTop
|
||||
BorderSpacing.CellAlignVertical = ccaCenter
|
||||
Caption = 'DependPkgNameLabel'
|
||||
ParentColor = False
|
||||
end
|
||||
object DependPkgNameFilter: TListFilterEdit
|
||||
AnchorSideRight.Side = asrBottom
|
||||
Left = 288
|
||||
Height = 32
|
||||
Top = 16
|
||||
Width = 256
|
||||
ButtonWidth = 23
|
||||
NumGlyphs = 1
|
||||
Anchors = [akTop]
|
||||
AutoSize = False
|
||||
MaxLength = 0
|
||||
TabOrder = 0
|
||||
FilteredListbox = DependPkgNameListBox
|
||||
end
|
||||
object DependPkgNameListBox: TListBox
|
||||
AnchorSideLeft.Control = DependPkgNameFilter
|
||||
AnchorSideTop.Control = DependPkgNameFilter
|
||||
AnchorSideTop.Side = asrBottom
|
||||
AnchorSideRight.Control = DependPkgNameFilter
|
||||
AnchorSideRight.Side = asrBottom
|
||||
AnchorSideBottom.Control = DependMinVersionEdit
|
||||
Left = 288
|
||||
Height = 174
|
||||
Top = 54
|
||||
Width = 256
|
||||
Anchors = [akTop, akLeft, akRight, akBottom]
|
||||
BorderSpacing.Top = 6
|
||||
BorderSpacing.Bottom = 6
|
||||
ItemHeight = 0
|
||||
MultiSelect = True
|
||||
TabOrder = 1
|
||||
end
|
||||
object DependMinVersionEdit: TEdit
|
||||
AnchorSideLeft.Control = DependPkgNameListBox
|
||||
AnchorSideRight.Control = DependPkgNameListBox
|
||||
AnchorSideRight.Side = asrBottom
|
||||
AnchorSideBottom.Control = DependMaxVersionEdit
|
||||
Left = 288
|
||||
Height = 32
|
||||
Top = 234
|
||||
Width = 256
|
||||
Anchors = [akLeft, akRight, akBottom]
|
||||
AutoSize = False
|
||||
BorderSpacing.Top = 6
|
||||
TabOrder = 2
|
||||
Text = 'DependMinVersionEdit'
|
||||
end
|
||||
object DependMaxVersionEdit: TEdit
|
||||
AnchorSideLeft.Control = DependMinVersionEdit
|
||||
AnchorSideTop.Side = asrBottom
|
||||
AnchorSideRight.Control = DependPkgNameListBox
|
||||
AnchorSideRight.Side = asrBottom
|
||||
Left = 288
|
||||
Height = 32
|
||||
Top = 272
|
||||
Width = 256
|
||||
Anchors = [akLeft, akRight, akBottom]
|
||||
AutoSize = False
|
||||
BorderSpacing.Top = 6
|
||||
TabOrder = 3
|
||||
Text = 'DependMaxVersionEdit'
|
||||
end
|
||||
object DependMinVersionLabel: TLabel
|
||||
AnchorSideTop.Control = DependMinVersionEdit
|
||||
AnchorSideTop.Side = asrCenter
|
||||
AnchorSideRight.Control = DependMinVersionEdit
|
||||
Left = 132
|
||||
Height = 18
|
||||
Top = 241
|
||||
Width = 150
|
||||
Anchors = [akTop, akRight]
|
||||
BorderSpacing.Right = 6
|
||||
BorderSpacing.CellAlignHorizontal = ccaLeftTop
|
||||
BorderSpacing.CellAlignVertical = ccaCenter
|
||||
Caption = 'DependMinVersionLabel'
|
||||
ParentColor = False
|
||||
end
|
||||
object DependMaxVersionLabel: TLabel
|
||||
AnchorSideLeft.Side = asrBottom
|
||||
AnchorSideTop.Control = DependMaxVersionEdit
|
||||
AnchorSideTop.Side = asrCenter
|
||||
AnchorSideRight.Control = DependMaxVersionEdit
|
||||
Left = 129
|
||||
Height = 18
|
||||
Top = 279
|
||||
Width = 153
|
||||
Anchors = [akTop, akRight]
|
||||
BorderSpacing.Right = 6
|
||||
BorderSpacing.CellAlignHorizontal = ccaLeftTop
|
||||
BorderSpacing.CellAlignVertical = ccaCenter
|
||||
Caption = 'DependMaxVersionLabel'
|
||||
ParentColor = False
|
||||
end
|
||||
object ButtonPanel1: TButtonPanel
|
||||
Left = 6
|
||||
Height = 37
|
||||
Top = 331
|
||||
Width = 558
|
||||
OKButton.Name = 'OKButton'
|
||||
OKButton.DefaultCaption = True
|
||||
OKButton.OnClick = OKButtonClick
|
||||
HelpButton.Name = 'HelpButton'
|
||||
HelpButton.DefaultCaption = True
|
||||
CloseButton.Name = 'CloseButton'
|
||||
CloseButton.DefaultCaption = True
|
||||
CancelButton.Name = 'CancelButton'
|
||||
CancelButton.DefaultCaption = True
|
||||
TabOrder = 4
|
||||
ShowButtons = [pbOK, pbCancel, pbHelp]
|
||||
end
|
||||
end
|
200
packager/addpkgdependencydlg.pas
Normal file
200
packager/addpkgdependencydlg.pas
Normal file
@ -0,0 +1,200 @@
|
||||
unit AddPkgDependencyDlg;
|
||||
|
||||
{$mode objfpc}{$H+}
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils, AVL_Tree, fgl,
|
||||
// LCL
|
||||
Forms, Controls, Graphics, Dialogs, StdCtrls, ButtonPanel, LCLProc,
|
||||
// LazControls
|
||||
ListFilterEdit,
|
||||
// LazUtils
|
||||
FileUtil,
|
||||
// IDEIntf
|
||||
IDEWindowIntf, PackageIntf, ProjPackIntf, IDEDialogs,
|
||||
// IDE
|
||||
LazarusIDEStrConsts, InputHistory, PackageDefs, PackageSystem,
|
||||
ProjPackBase, ProjPackChecks;
|
||||
|
||||
type
|
||||
|
||||
TPkgDependencyList = specialize TFPGList<TPkgDependency>;
|
||||
|
||||
{ TAddPkgDependencyDialog }
|
||||
|
||||
TAddPkgDependencyDialog = class(TForm)
|
||||
ButtonPanel1: TButtonPanel;
|
||||
DependMaxVersionEdit: TEdit;
|
||||
DependMaxVersionLabel: TLabel;
|
||||
DependMinVersionEdit: TEdit;
|
||||
DependMinVersionLabel: TLabel;
|
||||
DependPkgNameFilter: TListFilterEdit;
|
||||
DependPkgNameLabel: TLabel;
|
||||
DependPkgNameListBox: TListBox;
|
||||
procedure OKButtonClick(Sender: TObject);
|
||||
private
|
||||
fPackages: TAVLTree; // tree of TLazPackage or TPackageLink
|
||||
fProjPack: IProjPack;
|
||||
fResultDependencies: TPkgDependencyList;
|
||||
procedure AddUniquePackagesToList(APackageID: TLazPackageID);
|
||||
procedure UpdateAvailableDependencyNames;
|
||||
public
|
||||
constructor Create(TheOwner: TComponent); override;
|
||||
destructor Destroy; override;
|
||||
end;
|
||||
|
||||
var
|
||||
AddPkgDependencyDialog: TAddPkgDependencyDialog;
|
||||
|
||||
function ShowAddPkgDependencyDlg(AProjPack: IProjPack;
|
||||
out AResultDependencies: TPkgDependencyList): TModalResult;
|
||||
|
||||
implementation
|
||||
|
||||
{$R *.lfm}
|
||||
|
||||
function ShowAddPkgDependencyDlg(AProjPack: IProjPack;
|
||||
out AResultDependencies: TPkgDependencyList): TModalResult;
|
||||
var
|
||||
AddDepDialog: TAddPkgDependencyDialog;
|
||||
begin
|
||||
AddDepDialog:=TAddPkgDependencyDialog.Create(nil);
|
||||
AddDepDialog.fProjPack:=AProjPack;
|
||||
AddDepDialog.UpdateAvailableDependencyNames;
|
||||
|
||||
Result:=AddDepDialog.ShowModal;
|
||||
if Result=mrOk then begin
|
||||
AResultDependencies:=AddDepDialog.fResultDependencies;
|
||||
AddDepDialog.fResultDependencies:=nil;
|
||||
end else begin
|
||||
AResultDependencies:=nil;
|
||||
end;
|
||||
AddDepDialog.Free;
|
||||
end;
|
||||
|
||||
{ TAddPkgDependencyDialog }
|
||||
|
||||
constructor TAddPkgDependencyDialog.Create(TheOwner: TComponent);
|
||||
begin
|
||||
inherited Create(TheOwner);
|
||||
Caption:=lisProjAddNewRequirement;
|
||||
fPackages:=TAVLTree.Create(@CompareLazPackageIDNames);
|
||||
IDEDialogLayoutList.ApplyLayout(Self,500,300);
|
||||
|
||||
DependPkgNameLabel.Caption:=lisProjAddPackageName;
|
||||
DependMinVersionLabel.Caption:=lisProjAddMinimumVersionOptional;
|
||||
DependMinVersionEdit.Text:='';
|
||||
DependMaxVersionLabel.Caption:=lisProjAddMaximumVersionOptional;
|
||||
DependMaxVersionEdit.Text:='';
|
||||
end;
|
||||
|
||||
destructor TAddPkgDependencyDialog.Destroy;
|
||||
begin
|
||||
FreeAndNil(fPackages);
|
||||
inherited Destroy;
|
||||
end;
|
||||
|
||||
procedure TAddPkgDependencyDialog.AddUniquePackagesToList(APackageID: TLazPackageID);
|
||||
begin
|
||||
if (APackageID.IDAsString<>fProjPack.IDAsString) and (fPackages.Find(APackageID)=Nil) then
|
||||
fPackages.Add(APackageID);
|
||||
end;
|
||||
|
||||
procedure TAddPkgDependencyDialog.UpdateAvailableDependencyNames;
|
||||
var
|
||||
ANode: TAVLTreeNode;
|
||||
sl: TStringList;
|
||||
begin
|
||||
fPackages.Clear;
|
||||
PackageGraph.IteratePackages(fpfSearchAllExisting,@AddUniquePackagesToList);
|
||||
sl:=TStringList.Create;
|
||||
try
|
||||
ANode:=fPackages.FindLowest;
|
||||
while ANode<>nil do begin
|
||||
sl.Add(TLazPackageID(ANode.Data).Name);
|
||||
ANode:=fPackages.FindSuccessor(ANode);
|
||||
end;
|
||||
DependPkgNameFilter.Items.Assign(sl);
|
||||
DependPkgNameFilter.InvalidateFilter;
|
||||
finally
|
||||
sl.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TAddPkgDependencyDialog.OKButtonClick(Sender: TObject);
|
||||
var
|
||||
NewDependency: TPkgDependency;
|
||||
MinVerTest, MaxVerTest: TPkgVersion;
|
||||
MinMaxVerFlags: TPkgDependencyFlags;
|
||||
i: Integer;
|
||||
begin
|
||||
MinVerTest := Nil;
|
||||
MaxVerTest := Nil;
|
||||
MinMaxVerFlags := [];
|
||||
try
|
||||
// check minimum version
|
||||
if DependMinVersionEdit.Text <> '' then
|
||||
begin
|
||||
MinVerTest := TPkgVersion.Create;
|
||||
if not MinVerTest.ReadString(DependMinVersionEdit.Text) then
|
||||
begin
|
||||
IDEMessageDialog(lisProjAddInvalidVersion,
|
||||
Format(lisProjAddTheMinimumVersionIsInvalid,
|
||||
[DependMinVersionEdit.Text, LineEnding, LineEnding]),
|
||||
mtError,[mbCancel]);
|
||||
exit;
|
||||
end;
|
||||
MinMaxVerFlags := [pdfMinVersion];
|
||||
end;
|
||||
// check maximum version
|
||||
if DependMaxVersionEdit.Text <> '' then
|
||||
begin
|
||||
MaxVerTest := TPkgVersion.Create;
|
||||
if not MaxVerTest.ReadString(DependMaxVersionEdit.Text) then
|
||||
begin
|
||||
IDEMessageDialog(lisProjAddInvalidVersion,
|
||||
Format(lisProjAddTheMaximumVersionIsInvalid,
|
||||
[DependMaxVersionEdit.Text, LineEnding, LineEnding]),
|
||||
mtError,[mbCancel]);
|
||||
exit;
|
||||
end;
|
||||
MinMaxVerFlags := MinMaxVerFlags + [pdfMaxVersion];
|
||||
end;
|
||||
|
||||
// Add all selected packages.
|
||||
fResultDependencies := TPkgDependencyList.Create; // Will be freed by the caller.
|
||||
DebugLn(['TAddPkgDependencyDialog.OKButtonClick: ListBox.SelCount=', DependPkgNameListBox.SelCount]);
|
||||
if DependPkgNameListBox.SelCount > 0 then
|
||||
begin
|
||||
for i := 0 to DependPkgNameListBox.Count-1 do
|
||||
begin
|
||||
DebugLn(['TAddPkgDependencyDialog.OKButtonClick: Iterating ', DependPkgNameListBox.Items[i]]);
|
||||
if DependPkgNameListBox.Selected[i] then
|
||||
begin
|
||||
DebugLn(['TAddPkgDependencyDialog.OKButtonClick: ', DependPkgNameListBox.Items[i], ' is selected.']);
|
||||
NewDependency := TPkgDependency.Create; // Will be added to package graph.
|
||||
NewDependency.PackageName := DependPkgNameListBox.Items[i];
|
||||
if Assigned(MinVerTest) then
|
||||
NewDependency.MinVersion.Assign(MinVerTest);
|
||||
if Assigned(MaxVerTest) then
|
||||
NewDependency.MaxVersion.Assign(MaxVerTest);
|
||||
NewDependency.Flags := NewDependency.Flags + MinMaxVerFlags;
|
||||
DebugLn(['TAddPkgDependencyDialog.OKButtonClick: Checking ', DependPkgNameListBox.Items[i], ' ...']);
|
||||
if not CheckAddingDependency(fProjPack, NewDependency) then exit;
|
||||
DebugLn(['TAddPkgDependencyDialog.OKButtonClick: Adding ', DependPkgNameListBox.Items[i], ' to result.']);
|
||||
fResultDependencies.Add(NewDependency);
|
||||
NewDependency := nil;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
ModalResult := mrOk;
|
||||
finally
|
||||
MinVerTest.Free;
|
||||
MaxVerTest.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
end.
|
||||
|
@ -20,9 +20,9 @@ object AddToPackageDlg: TAddToPackageDlg
|
||||
Height = 316
|
||||
Top = 0
|
||||
Width = 658
|
||||
ActivePage = NewRequirementPage
|
||||
ActivePage = NewComponentPage
|
||||
Align = alClient
|
||||
TabIndex = 1
|
||||
TabIndex = 0
|
||||
TabOrder = 0
|
||||
OnChange = PageControl1Change
|
||||
object NewComponentPage: TTabSheet
|
||||
@ -250,134 +250,6 @@ object AddToPackageDlg: TAddToPackageDlg
|
||||
ParentColor = False
|
||||
end
|
||||
end
|
||||
object NewRequirementPage: TTabSheet
|
||||
Caption = 'New Requirement'
|
||||
ClientHeight = 281
|
||||
ClientWidth = 650
|
||||
object NewDepPanel: TPanel
|
||||
Left = 0
|
||||
Height = 281
|
||||
Top = 0
|
||||
Width = 650
|
||||
Align = alClient
|
||||
BevelOuter = bvNone
|
||||
ChildSizing.LeftRightSpacing = 6
|
||||
ChildSizing.TopBottomSpacing = 6
|
||||
ChildSizing.HorizontalSpacing = 6
|
||||
ChildSizing.VerticalSpacing = 6
|
||||
ChildSizing.Layout = cclLeftToRightThenTopToBottom
|
||||
ChildSizing.ControlsPerLine = 2
|
||||
ClientHeight = 281
|
||||
ClientWidth = 650
|
||||
TabOrder = 0
|
||||
object DependPkgNameLabel: TLabel
|
||||
AnchorSideTop.Control = DependPkgNameFilter
|
||||
AnchorSideTop.Side = asrCenter
|
||||
AnchorSideRight.Control = DependPkgNameFilter
|
||||
Left = 141
|
||||
Height = 18
|
||||
Top = 15
|
||||
Width = 141
|
||||
Anchors = [akTop, akRight]
|
||||
BorderSpacing.CellAlignHorizontal = ccaLeftTop
|
||||
BorderSpacing.CellAlignVertical = ccaCenter
|
||||
Caption = 'DependPkgNameLabel'
|
||||
ParentColor = False
|
||||
end
|
||||
object DependMinVersionLabel: TLabel
|
||||
AnchorSideTop.Control = DependMinVersionEdit
|
||||
AnchorSideTop.Side = asrCenter
|
||||
AnchorSideRight.Control = DependMinVersionEdit
|
||||
Left = 132
|
||||
Height = 18
|
||||
Top = 207
|
||||
Width = 150
|
||||
Anchors = [akTop, akRight]
|
||||
BorderSpacing.CellAlignHorizontal = ccaLeftTop
|
||||
BorderSpacing.CellAlignVertical = ccaCenter
|
||||
Caption = 'DependMinVersionLabel'
|
||||
ParentColor = False
|
||||
end
|
||||
object DependMinVersionEdit: TEdit
|
||||
AnchorSideLeft.Control = DependPkgNameListBox
|
||||
AnchorSideRight.Control = DependPkgNameListBox
|
||||
AnchorSideRight.Side = asrBottom
|
||||
AnchorSideBottom.Control = DependMaxVersionEdit
|
||||
Left = 288
|
||||
Height = 32
|
||||
Top = 200
|
||||
Width = 256
|
||||
Anchors = [akLeft, akRight, akBottom]
|
||||
AutoSize = False
|
||||
BorderSpacing.Top = 6
|
||||
TabOrder = 2
|
||||
Text = 'DependMinVersionEdit'
|
||||
end
|
||||
object DependMaxVersionLabel: TLabel
|
||||
AnchorSideLeft.Side = asrBottom
|
||||
AnchorSideTop.Control = DependMaxVersionEdit
|
||||
AnchorSideTop.Side = asrCenter
|
||||
AnchorSideRight.Control = DependMaxVersionEdit
|
||||
Left = 129
|
||||
Height = 18
|
||||
Top = 245
|
||||
Width = 153
|
||||
Anchors = [akTop, akRight]
|
||||
BorderSpacing.CellAlignHorizontal = ccaLeftTop
|
||||
BorderSpacing.CellAlignVertical = ccaCenter
|
||||
Caption = 'DependMaxVersionLabel'
|
||||
ParentColor = False
|
||||
end
|
||||
object DependMaxVersionEdit: TEdit
|
||||
AnchorSideLeft.Control = DependMinVersionEdit
|
||||
AnchorSideTop.Side = asrBottom
|
||||
AnchorSideRight.Control = DependPkgNameListBox
|
||||
AnchorSideRight.Side = asrBottom
|
||||
Left = 288
|
||||
Height = 32
|
||||
Top = 238
|
||||
Width = 256
|
||||
Anchors = [akLeft, akRight, akBottom]
|
||||
AutoSize = False
|
||||
BorderSpacing.Top = 6
|
||||
TabOrder = 3
|
||||
Text = 'DependMaxVersionEdit'
|
||||
end
|
||||
object DependPkgNameFilter: TListFilterEdit
|
||||
AnchorSideRight.Control = DependPkgNameListBox
|
||||
AnchorSideRight.Side = asrBottom
|
||||
Left = 288
|
||||
Height = 32
|
||||
Top = 8
|
||||
Width = 256
|
||||
ButtonWidth = 23
|
||||
NumGlyphs = 1
|
||||
Anchors = [akTop]
|
||||
AutoSize = False
|
||||
MaxLength = 0
|
||||
TabOrder = 0
|
||||
FilteredListbox = DependPkgNameListBox
|
||||
end
|
||||
object DependPkgNameListBox: TListBox
|
||||
AnchorSideLeft.Control = DependPkgNameFilter
|
||||
AnchorSideTop.Control = DependPkgNameFilter
|
||||
AnchorSideTop.Side = asrBottom
|
||||
AnchorSideRight.Control = DependPkgNameFilter
|
||||
AnchorSideRight.Side = asrBottom
|
||||
AnchorSideBottom.Control = DependMinVersionEdit
|
||||
Left = 288
|
||||
Height = 148
|
||||
Top = 46
|
||||
Width = 256
|
||||
Anchors = [akTop, akLeft, akRight, akBottom]
|
||||
BorderSpacing.Top = 6
|
||||
BorderSpacing.Bottom = 6
|
||||
ItemHeight = 0
|
||||
OnSelectionChange = DependPkgNameListBoxSelectionChange
|
||||
TabOrder = 1
|
||||
end
|
||||
end
|
||||
end
|
||||
object AddFilesPage: TTabSheet
|
||||
Caption = 'Add Files'
|
||||
ClientHeight = 281
|
||||
|
@ -34,7 +34,6 @@ uses
|
||||
// LCL
|
||||
LCLProc, LCLType, Forms, Controls, Buttons, ExtDlgs, StdCtrls, ExtCtrls,
|
||||
Dialogs, ComCtrls, ButtonPanel,
|
||||
ListFilterEdit,
|
||||
// LazUtils
|
||||
FileUtil, LazFileUtils,
|
||||
// IDEIntf
|
||||
@ -91,21 +90,12 @@ type
|
||||
ComponentUnitFileShortenButton: TButton;
|
||||
ComponentUnitNameEdit: TEdit;
|
||||
ComponentUnitNameLabel: TLabel;
|
||||
DependMaxVersionEdit: TEdit;
|
||||
DependMaxVersionLabel: TLabel;
|
||||
DependMinVersionEdit: TEdit;
|
||||
DependMinVersionLabel: TLabel;
|
||||
DependPkgNameLabel: TLabel;
|
||||
FilesDeleteButton: TBitBtn;
|
||||
FilesDirButton: TBitBtn;
|
||||
FilesListView: TListView;
|
||||
FilesShortenButton: TBitBtn;
|
||||
LabelIconInfo: TLabel;
|
||||
DependPkgNameListBox: TListBox;
|
||||
DependPkgNameFilter: TListFilterEdit;
|
||||
NewComponentPage: TTabSheet;
|
||||
NewDepPanel: TPanel;
|
||||
NewRequirementPage: TTabSheet;
|
||||
PageControl1: TPageControl;
|
||||
PalettePageCombobox: TComboBox;
|
||||
PalettePageLabel: TLabel;
|
||||
@ -121,7 +111,6 @@ type
|
||||
procedure ComponentUnitFileBrowseButtonClick(Sender: TObject);
|
||||
procedure ComponentUnitFileShortenButtonClick(Sender: TObject);
|
||||
procedure ComponentUnitNameEditChange(Sender: TObject);
|
||||
procedure DependPkgNameListBoxSelectionChange(Sender: TObject; {%H-}User: boolean);
|
||||
procedure FilesAddButtonClick(Sender: TObject);
|
||||
procedure FilesDeleteButtonClick(Sender: TObject);
|
||||
procedure FilesDirButtonClick(Sender: TObject);
|
||||
@ -132,7 +121,6 @@ type
|
||||
procedure FormShow(Sender: TObject);
|
||||
procedure NewComponentButtonClick(Sender: TObject);
|
||||
procedure NewComponentPageResize(Sender: TObject);
|
||||
procedure NewDependButtonClick(Sender: TObject);
|
||||
procedure PageControl1Change(Sender: TObject);
|
||||
private
|
||||
fLastNewComponentAncestorType: string;
|
||||
@ -148,12 +136,9 @@ type
|
||||
procedure SetLazPackage(const AValue: TLazPackage);
|
||||
procedure SetupComponents;
|
||||
procedure SetupNewComponentPage;
|
||||
procedure SetupAddDependencyPage;
|
||||
procedure SetupAddFilesPage;
|
||||
procedure OnIterateComponentClasses(PkgComponent: TPkgComponent);
|
||||
procedure OnIteratePackages(APackageID: TLazPackageID);
|
||||
function CheckNewCompOk: Boolean;
|
||||
function CheckNewReqOk: Boolean;
|
||||
function CheckFilesButtonsOk: Boolean;
|
||||
procedure AutoCompleteNewComponent;
|
||||
procedure AutoCompleteNewComponentUnitName;
|
||||
@ -164,7 +149,6 @@ type
|
||||
Params: TAddToPkgResult;
|
||||
procedure UpdateAvailableAncestorTypes;
|
||||
procedure UpdateAvailablePageNames;
|
||||
procedure UpdateAvailableDependencyNames;
|
||||
public
|
||||
property LazPackage: TLazPackage read FLazPackage write SetLazPackage;
|
||||
property OnGetIDEFileInfo: TGetIDEFileStateEvent read FOnGetIDEFileInfo
|
||||
@ -326,11 +310,6 @@ begin
|
||||
CheckNewCompOk;
|
||||
end;
|
||||
|
||||
procedure TAddToPackageDlg.DependPkgNameListBoxSelectionChange(Sender: TObject; User: boolean);
|
||||
begin
|
||||
CheckNewReqOk;
|
||||
end;
|
||||
|
||||
procedure TAddToPackageDlg.FilesAddButtonClick(Sender: TObject);
|
||||
var
|
||||
i: Integer;
|
||||
@ -634,52 +613,6 @@ begin
|
||||
AncestorComboBox.Left:=x+6;
|
||||
end;
|
||||
|
||||
procedure TAddToPackageDlg.NewDependButtonClick(Sender: TObject);
|
||||
var
|
||||
NewDependency: TPkgDependency;
|
||||
begin
|
||||
Params.Clear;
|
||||
Params.AddType:=d2ptRequiredPkg;
|
||||
|
||||
NewDependency:=TPkgDependency.Create;
|
||||
try
|
||||
// check minimum version
|
||||
if DependMinVersionEdit.Text<>'' then begin
|
||||
if not NewDependency.MinVersion.ReadString(DependMinVersionEdit.Text) then
|
||||
begin
|
||||
IDEMessageDialog(lisProjAddInvalidVersion,
|
||||
Format(lisA2PTheMinimumVersionIsInvalidPleaseUseTheFormatMajor,
|
||||
[DependMinVersionEdit.Text, LineEnding, LineEnding]),
|
||||
mtError,[mbCancel]);
|
||||
exit;
|
||||
end;
|
||||
NewDependency.Flags:=NewDependency.Flags+[pdfMinVersion];
|
||||
end;
|
||||
// check maximum version
|
||||
if DependMaxVersionEdit.Text<>'' then begin
|
||||
if not NewDependency.MaxVersion.ReadString(DependMaxVersionEdit.Text) then
|
||||
begin
|
||||
IDEMessageDialog(lisProjAddInvalidVersion,
|
||||
Format(lisA2PTheMaximumVersionIsInvalidPleaseUseTheFormatMajor,
|
||||
[DependMaxVersionEdit.Text, LineEnding, LineEnding]),
|
||||
mtError,[mbCancel]);
|
||||
exit;
|
||||
end;
|
||||
NewDependency.Flags:=NewDependency.Flags+[pdfMaxVersion];
|
||||
end;
|
||||
|
||||
NewDependency.PackageName:=DependPkgNameListBox.Items[DependPkgNameListBox.ItemIndex];
|
||||
ModalResult:=CheckAddingPackageDependency(LazPackage,NewDependency,false,true);
|
||||
if ModalResult<>mrOk then exit;
|
||||
|
||||
// ok
|
||||
Params.Dependency:=NewDependency;
|
||||
NewDependency:=nil;
|
||||
finally
|
||||
NewDependency.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TAddToPackageDlg.SetLazPackage(const AValue: TLazPackage);
|
||||
begin
|
||||
if FLazPackage=AValue then exit;
|
||||
@ -687,29 +620,23 @@ begin
|
||||
Params.Pkg:=FLazPackage;
|
||||
UpdateAvailableAncestorTypes;
|
||||
UpdateAvailablePageNames;
|
||||
UpdateAvailableDependencyNames;
|
||||
end;
|
||||
|
||||
function TAddToPackageDlg.GetActivatePage: TAddToPkgType;
|
||||
begin
|
||||
if PageControl1.ActivePage=NewComponentPage then
|
||||
Result:=d2ptNewComponent
|
||||
else if PageControl1.ActivePage=NewRequirementPage then
|
||||
Result:=d2ptRequiredPkg
|
||||
else {if PageControl1.ActivePage=AddFilesPage then } begin
|
||||
Assert(PageControl1.ActivePage=AddFilesPage,
|
||||
'TAddToPackageDlg.GetActivatePage: PageControl1.ActivePage <> AddFilesPage');
|
||||
Result:=d2ptFiles;
|
||||
end;
|
||||
//else
|
||||
// Result:=d2ptNewFile;
|
||||
end;
|
||||
|
||||
procedure TAddToPackageDlg.SetActivatePage(AValue: TAddToPkgType);
|
||||
begin
|
||||
case AValue of
|
||||
d2ptNewComponent: PageControl1.ActivePage:=NewComponentPage;
|
||||
d2ptRequiredPkg: PageControl1.ActivePage:=NewRequirementPage;
|
||||
d2ptFiles: PageControl1.ActivePage:=AddFilesPage;
|
||||
else raise Exception.Create('TAddToPackageDlg.SetActivatePage: invalid value.');
|
||||
end;
|
||||
@ -721,12 +648,6 @@ begin
|
||||
ButtonPanel1.OKButton.Enabled:=Result;
|
||||
end;
|
||||
|
||||
function TAddToPackageDlg.CheckNewReqOk: Boolean;
|
||||
begin
|
||||
Result:=DependPkgNameListBox.ItemIndex>-1;
|
||||
ButtonPanel1.OKButton.Enabled:=Result;
|
||||
end;
|
||||
|
||||
procedure TAddToPackageDlg.PageControl1Change(Sender: TObject);
|
||||
begin
|
||||
case PageControl1.PageIndex of
|
||||
@ -735,12 +656,7 @@ begin
|
||||
ButtonPanel1.OkButton.OnClick:=@NewComponentButtonClick;
|
||||
CheckNewCompOk;
|
||||
end;
|
||||
1: begin // New Requirement
|
||||
ButtonPanel1.OkButton.Caption:=lisA2PCreateNewReq;
|
||||
ButtonPanel1.OkButton.OnClick:=@NewDependButtonClick;
|
||||
CheckNewReqOk;
|
||||
end;
|
||||
2: begin // Add Files
|
||||
1: begin // Add Files
|
||||
ButtonPanel1.OkButton.Caption:=lisA2PAddFilesToPackage;
|
||||
ButtonPanel1.OkButton.OnClick:=@FilesAddButtonClick;
|
||||
CheckFilesButtonsOk;
|
||||
@ -750,17 +666,12 @@ end;
|
||||
|
||||
procedure TAddToPackageDlg.SetupComponents;
|
||||
begin
|
||||
//NewFilePage.Caption:=lisA2PNewFile;
|
||||
NewComponentPage.Caption:=lisA2PNewComponent;
|
||||
NewRequirementPage.Caption:=lisProjAddNewRequirement;
|
||||
AddFilesPage.Caption:=lisA2PAddFiles;
|
||||
ButtonPanel1.CancelButton.Caption:=lisCancel;
|
||||
PageControl1.PageIndex:=0;
|
||||
PageControl1Change(PageControl1);
|
||||
|
||||
//SetupNewFilePage;
|
||||
SetupNewComponentPage;
|
||||
SetupAddDependencyPage;
|
||||
SetupAddFilesPage;
|
||||
end;
|
||||
|
||||
@ -792,15 +703,6 @@ begin
|
||||
ComponentIconBitBtn.Height:=ComponentPaletteBtnHeight;
|
||||
end;
|
||||
|
||||
procedure TAddToPackageDlg.SetupAddDependencyPage;
|
||||
begin
|
||||
DependPkgNameLabel.Caption:=lisProjAddPackageName;
|
||||
DependMinVersionLabel.Caption:=lisProjAddMinimumVersionOptional;
|
||||
DependMinVersionEdit.Text:='';
|
||||
DependMaxVersionLabel.Caption:=lisProjAddMaximumVersionOptional;
|
||||
DependMaxVersionEdit.Text:='';
|
||||
end;
|
||||
|
||||
procedure TAddToPackageDlg.SetupAddFilesPage;
|
||||
var
|
||||
CurColumn: TListColumn;
|
||||
@ -840,14 +742,6 @@ begin
|
||||
fPkgComponents.Add(PkgComponent);
|
||||
end;
|
||||
|
||||
procedure TAddToPackageDlg.OnIteratePackages(APackageID: TLazPackageID);
|
||||
begin
|
||||
if (APackageID<>LazPackage) and (fPackages.Find(APackageID)=nil) then begin
|
||||
//DebugLn(['TAddToPackageDlg.OnIteratePackages ',APackageID.IDAsString,' ',DbgSName(APackageID)]);
|
||||
fPackages.Add(APackageID);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TAddToPackageDlg.AutoCompleteNewComponent;
|
||||
var
|
||||
PkgComponent: TPkgComponent;
|
||||
@ -906,8 +800,7 @@ begin
|
||||
ComponentUnitFileEdit.Text:=NewFileName;
|
||||
end;
|
||||
|
||||
function TAddToPackageDlg.SwitchRelativeAbsoluteFilename(const Filename: string
|
||||
): string;
|
||||
function TAddToPackageDlg.SwitchRelativeAbsoluteFilename(const Filename: string): string;
|
||||
begin
|
||||
Result:=Filename;
|
||||
if (not LazPackage.HasDirectory)
|
||||
@ -1019,29 +912,6 @@ begin
|
||||
sl.Free;
|
||||
end;
|
||||
|
||||
procedure TAddToPackageDlg.UpdateAvailableDependencyNames;
|
||||
var
|
||||
ANode: TAVLTreeNode;
|
||||
sl: TStringList;
|
||||
PkgName: String;
|
||||
Pkg: TLazPackage;
|
||||
begin
|
||||
fPackages.Clear;
|
||||
PackageGraph.IteratePackages(fpfSearchAllExisting,@OnIteratePackages);
|
||||
sl:=TStringList.Create;
|
||||
ANode:=fPackages.FindLowest;
|
||||
while ANode<>nil do begin
|
||||
Pkg:=TLazPackage(ANode.Data);
|
||||
PkgName:=Pkg.Name;
|
||||
if (sl.IndexOf(PkgName)<0) then
|
||||
sl.Add(PkgName);
|
||||
ANode:=fPackages.FindSuccessor(ANode);
|
||||
end;
|
||||
DependPkgNameFilter.Items.Assign(sl);
|
||||
DependPkgNameFilter.InvalidateFilter;
|
||||
sl.Free;
|
||||
end;
|
||||
|
||||
{ TAddToPkgResult }
|
||||
|
||||
procedure TAddToPkgResult.Clear;
|
||||
|
@ -47,8 +47,8 @@ uses
|
||||
// IDE
|
||||
MainBase, IDEProcs, LazarusIDEStrConsts, IDEDefs, CompilerOptions,
|
||||
EnvironmentOpts, DialogProcs, InputHistory,
|
||||
PackageDefs, AddToPackageDlg, PkgVirtualUnitEditor, MissingPkgFilesDlg,
|
||||
PackageSystem, ProjPackChecks, CleanPkgDeps;
|
||||
PackageDefs, AddToPackageDlg, AddPkgDependencyDlg, ProjPackChecks,
|
||||
PkgVirtualUnitEditor, MissingPkgFilesDlg, PackageSystem, CleanPkgDeps;
|
||||
|
||||
const
|
||||
PackageEditorMenuRootName = 'PackageEditor';
|
||||
@ -373,6 +373,7 @@ type
|
||||
procedure DoSortFiles;
|
||||
function DoOpenPkgFile(PkgFile: TPkgFile): TModalResult;
|
||||
function ShowAddDialog(var DlgPage: TAddToPkgType): TModalResult;
|
||||
function ShowAddDepDialog: TModalResult;
|
||||
public
|
||||
// IFilesEditorInterface
|
||||
function FilesEditTreeView: TTreeView;
|
||||
@ -1065,7 +1066,7 @@ end;
|
||||
|
||||
procedure TPackageEditorForm.mnuAddNewReqrClick(Sender: TObject);
|
||||
begin
|
||||
ShowAddDialogEx(d2ptRequiredPkg);
|
||||
ShowAddDepDialog;
|
||||
end;
|
||||
|
||||
procedure TPackageEditorForm.mnuAddNewFileClick(Sender: TObject);
|
||||
@ -2108,7 +2109,6 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
function TPackageEditorForm.ShowAddDialog(var DlgPage: TAddToPkgType): TModalResult;
|
||||
var
|
||||
IgnoreUnitPaths, IgnoreIncPaths: TFilenameToStringTree;
|
||||
@ -2183,16 +2183,6 @@ var
|
||||
PackageEditors.CreateNewFile(Self,AddParams);
|
||||
end;
|
||||
|
||||
procedure AddRequiredPkg(AddParams: TAddToPkgResult);
|
||||
begin
|
||||
// add dependency
|
||||
fForcedFlags:=[pefNeedUpdateRequiredPkgs];
|
||||
PackageGraph.AddDependencyToPackage(LazPackage,AddParams.Dependency);
|
||||
FreeAndNil(FNextSelectedPart);
|
||||
FNextSelectedPart:=TPENodeData.Create(penDependency,
|
||||
AddParams.Dependency.PackageName,false);
|
||||
end;
|
||||
|
||||
procedure AddFile(AddParams: TAddToPkgResult);
|
||||
begin
|
||||
// add file
|
||||
@ -2229,7 +2219,6 @@ begin
|
||||
d2ptUnit: AddUnit(AddParams);
|
||||
d2ptVirtualUnit: AddVirtualUnit(AddParams);
|
||||
d2ptNewComponent: AddNewComponent(AddParams);
|
||||
d2ptRequiredPkg: AddRequiredPkg(AddParams);
|
||||
d2ptFile: AddFile(AddParams);
|
||||
end;
|
||||
OldParams:=AddParams;
|
||||
@ -2238,7 +2227,7 @@ begin
|
||||
OldParams.Free;
|
||||
end;
|
||||
AddParams.Free;
|
||||
Assert(LazPackage.Modified, 'ShowAddDialog: LazPackage.Modified = False');
|
||||
Assert(LazPackage.Modified, 'TPackageEditorForm.ShowAddDialog: LazPackage.Modified = False');
|
||||
finally
|
||||
IgnoreUnitPaths.Free;
|
||||
IgnoreIncPaths.Free;
|
||||
@ -2246,6 +2235,37 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
function TPackageEditorForm.ShowAddDepDialog: TModalResult;
|
||||
var
|
||||
Deps: TPkgDependencyList;
|
||||
i: Integer;
|
||||
begin
|
||||
if LazPackage.ReadOnly then begin
|
||||
UpdateButtons;
|
||||
exit(mrCancel);
|
||||
end;
|
||||
Result:=ShowAddPkgDependencyDlg(LazPackage, Deps);
|
||||
DebugLn(['TPackageEditorForm.ShowAddDepDialog: Deps.Count=', Deps.Count]);
|
||||
try
|
||||
if (Result<>mrOk) or (Deps.Count=0) then exit;
|
||||
PackageGraph.BeginUpdate(false);
|
||||
try
|
||||
// add all dependencies
|
||||
fForcedFlags := [pefNeedUpdateRequiredPkgs];
|
||||
FreeAndNil(FNextSelectedPart);
|
||||
for i := 0 to Deps.Count-1 do
|
||||
PackageGraph.AddDependencyToPackage(LazPackage, Deps[i]);
|
||||
FNextSelectedPart := TPENodeData.Create(penDependency,
|
||||
Deps[Deps.Count-1].PackageName, false);
|
||||
Assert(LazPackage.Modified, 'TPackageEditorForm.ShowAddDepDialog: LazPackage.Modified = False');
|
||||
finally
|
||||
PackageGraph.EndUpdate;
|
||||
end;
|
||||
finally
|
||||
Deps.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TPackageEditorForm.BeginUpdate;
|
||||
begin
|
||||
inc(fUpdateLock);
|
||||
|
@ -13,7 +13,7 @@ uses
|
||||
// IDEIntf
|
||||
ComponentReg, IDEDialogs,
|
||||
// IDE
|
||||
LazarusIDEStrConsts, IDEDefs, Project, PackageSystem, PackageDefs;
|
||||
LazarusIDEStrConsts, IDEDefs, Project, PackageSystem, PackageDefs, ProjPackBase;
|
||||
|
||||
// Packages:
|
||||
type
|
||||
@ -21,7 +21,6 @@ type
|
||||
d2ptUnit,
|
||||
d2ptVirtualUnit,
|
||||
d2ptNewComponent,
|
||||
d2ptRequiredPkg,
|
||||
d2ptFile,
|
||||
d2ptFiles
|
||||
);
|
||||
@ -42,6 +41,10 @@ function CheckAddingProjectFile(AProject: TProject; NewFiles: TStringList;
|
||||
function CheckAddingProjectDependency(AProject: TProject;
|
||||
NewDependency: TPkgDependency): boolean;
|
||||
|
||||
// Project or Package using the common interface
|
||||
|
||||
function CheckAddingDependency(AProjPack: IProjPack; ADependency: TPkgDependency): boolean;
|
||||
|
||||
|
||||
implementation
|
||||
|
||||
@ -183,7 +186,7 @@ var
|
||||
s: String;
|
||||
begin
|
||||
Result:=mrCancel;
|
||||
|
||||
DebugLn(['CheckAddingPackageDependency: ', LazPackage.Name]);
|
||||
NewPkgName:=NewDependency.PackageName;
|
||||
|
||||
// check Max-Min version
|
||||
@ -199,7 +202,7 @@ begin
|
||||
end;
|
||||
|
||||
// package name is checked earlier
|
||||
Assert(IsValidPkgName(NewPkgName), 'CheckAddingDependency: '+NewPkgName+' is not valid.');
|
||||
Assert(IsValidPkgName(NewPkgName), 'CheckAddingPackageDependency: '+NewPkgName+' is not valid.');
|
||||
|
||||
// check if package is already required
|
||||
if (CompareText(NewPkgName,LazPackage.Name)=0)
|
||||
@ -230,7 +233,7 @@ begin
|
||||
ConflictDependency:=PackageGraph.FindConflictRecursively(
|
||||
LazPackage.FirstRequiredDependency,RequiredPackage);
|
||||
if ConflictDependency<>nil then begin
|
||||
DebugLn(['CheckAddingDependency ',LazPackage.Name,' requiring ',RequiredPackage.IDAsString,' conflicts with ',ConflictDependency.AsString]);
|
||||
DebugLn(['CheckAddingPackageDependency ',LazPackage.Name,' requiring ',RequiredPackage.IDAsString,' conflicts with ',ConflictDependency.AsString]);
|
||||
if not Quiet then
|
||||
IDEMessageDialog(lisVersionMismatch,
|
||||
Format(lisUnableToAddTheDependencyBecauseThePackageHasAlread, [
|
||||
@ -245,7 +248,7 @@ begin
|
||||
if PathList<>nil then begin
|
||||
try
|
||||
s:=PackagePathToStr(PathList);
|
||||
DebugLn(['CheckAddingDependency ',LazPackage.Name,' requiring ',RequiredPackage.IDAsString,' creates cycles with ',s]);
|
||||
DebugLn(['CheckAddingPackageDependency ',LazPackage.Name,' requiring ',RequiredPackage.IDAsString,' creates cycles with ',s]);
|
||||
if not Quiet then
|
||||
IDEMessageDialog(lisCircularDependencyDetected,
|
||||
Format(lisUnableToAddTheDependencyBecauseThisWouldCreateA, [
|
||||
@ -263,7 +266,7 @@ begin
|
||||
if ProvidingAPackage<>nil then
|
||||
begin
|
||||
// package is already provided by another package
|
||||
DebugLn(['CheckAddingDependency ',LazPackage.Name,' requiring ',NewPkgName,', but is already provided by ',ProvidingAPackage.IDAsString]);
|
||||
DebugLn(['CheckAddingPackageDependency ',LazPackage.Name,' requiring ',NewPkgName,', but is already provided by ',ProvidingAPackage.IDAsString]);
|
||||
if WarnIfAlreadyThere then
|
||||
IDEMessageDialog(lisProjAddDependencyAlreadyExists,
|
||||
Format(lisUnableToAddTheDependencyBecauseThePackageHasAlread, [
|
||||
@ -355,7 +358,7 @@ begin
|
||||
end;
|
||||
|
||||
// package name is checked earlier
|
||||
Assert(IsValidPkgName(NewPkgName), 'CheckAddingDependency: ' + NewPkgName + ' is not valid.');
|
||||
Assert(IsValidPkgName(NewPkgName), 'CheckAddingProjectDependency: ' + NewPkgName + ' is not valid.');
|
||||
|
||||
// check if package is already required
|
||||
if AProject.FindDependencyByName(NewPkgName)<>nil then begin
|
||||
@ -377,6 +380,19 @@ begin
|
||||
Result:=true;
|
||||
end;
|
||||
|
||||
// Package or Project:
|
||||
|
||||
function CheckAddingDependency(AProjPack: IProjPack; ADependency: TPkgDependency): boolean;
|
||||
// ToDo: Try to combine CheckAddingPackageDependency and CheckAddingProjectDependency
|
||||
// somehow to use IProjPack param.
|
||||
begin
|
||||
Assert((AProjPack is TLazPackage) or (AProjPack is TProject),
|
||||
'CheckAddingDependency: AProjPack is neither a project nor a package.');
|
||||
if AProjPack is TLazPackage then
|
||||
Result := CheckAddingPackageDependency(AProjPack as TLazPackage, ADependency, False, True) = mrOK
|
||||
else
|
||||
Result := CheckAddingProjectDependency(AProjPack as TProject, ADependency)
|
||||
end;
|
||||
|
||||
end.
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user