diff --git a/.gitattributes b/.gitattributes index 5455daa277..f7cee598b3 100644 --- a/.gitattributes +++ b/.gitattributes @@ -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 diff --git a/ide/addtoprojectdlg.lfm b/ide/addtoprojectdlg.lfm index 73ae90a5a2..c8fa5c2c8e 100644 --- a/ide/addtoprojectdlg.lfm +++ b/ide/addtoprojectdlg.lfm @@ -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 diff --git a/ide/addtoprojectdlg.pas b/ide/addtoprojectdlg.pas index 86324754d6..44d132ad1a 100644 --- a/ide/addtoprojectdlg.pas +++ b/ide/addtoprojectdlg.pas @@ -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; diff --git a/ide/projectinspector.pas b/ide/projectinspector.pas index 42b16ed7e0..a53a644b4c 100644 --- a/ide/projectinspector.pas +++ b/ide/projectinspector.pas @@ -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); diff --git a/packager/addpkgdependencydlg.lfm b/packager/addpkgdependencydlg.lfm new file mode 100644 index 0000000000..feb4907665 --- /dev/null +++ b/packager/addpkgdependencydlg.lfm @@ -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 diff --git a/packager/addpkgdependencydlg.pas b/packager/addpkgdependencydlg.pas new file mode 100644 index 0000000000..10e471d6bc --- /dev/null +++ b/packager/addpkgdependencydlg.pas @@ -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; + + { 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. + diff --git a/packager/addtopackagedlg.lfm b/packager/addtopackagedlg.lfm index ad26c550ed..fe17c72bf5 100644 --- a/packager/addtopackagedlg.lfm +++ b/packager/addtopackagedlg.lfm @@ -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 diff --git a/packager/addtopackagedlg.pas b/packager/addtopackagedlg.pas index 826f8bdd00..fc1a29de38 100644 --- a/packager/addtopackagedlg.pas +++ b/packager/addtopackagedlg.pas @@ -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; diff --git a/packager/packageeditor.pas b/packager/packageeditor.pas index fe70b0cf7c..007549e283 100644 --- a/packager/packageeditor.pas +++ b/packager/packageeditor.pas @@ -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); diff --git a/packager/projpackchecks.pas b/packager/projpackchecks.pas index 0948f3ba59..cc2160eec6 100644 --- a/packager/projpackchecks.pas +++ b/packager/projpackchecks.pas @@ -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.