mirror of
				https://gitlab.com/freepascal.org/lazarus/lazarus.git
				synced 2025-11-04 12:49:42 +01: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