1 unit AddFPMakeDependencyDlg;
2 
3 {$mode objfpc}{$H+}
4 
5 interface
6 
7 uses
8   Classes, SysUtils,
9   // LCL
10   LResources, Forms, Controls, Graphics, Dialogs, ButtonPanel, StdCtrls,
11   // LazControls
12   ListFilterEdit,
13   // LazUtils
14   LazUTF8,
15   // BuildIntf
16   PackageIntf,
17   // IdeIntf
18   IDEWindowIntf,
19   // IDE
20   LazarusIDEStrConsts, ProjPackCommon, PackageDefs, AddPkgDependencyDlg,
21   // fppkg
22   FppkgHelper;
23 
24 type
25 
26   { TAddFPMakeDependencyDialog }
27 
28   TAddFPMakeDependencyDialog = class(TForm)
29     BP: TButtonPanel;
30     DependPkgNameFilter: TListFilterEdit;
31     DependPkgNameLabel: TLabel;
32     DependPkgNameListBox: TListBox;
33     procedure OKButtonClick(Sender: TObject);
34   private
35     FResultDependencies: TPkgDependencyList;
36     FPackageNameList: TStringListUTF8Fast;
37     procedure UpdateAvailableDependencyNames;
38   public
39     constructor Create(TheOwner: TComponent); override;
40     destructor Destroy; override;
41   end;
42 
ShowAddFPMakeDependencyDlgnull43 function ShowAddFPMakeDependencyDlg({%H-}AProjPack: IProjPack;
44   out AResultDependencies: TPkgDependencyList): TModalResult;
45 
46 implementation
47 
48 {$R *.lfm}
49 
ShowAddFPMakeDependencyDlgnull50 function ShowAddFPMakeDependencyDlg(AProjPack: IProjPack; out AResultDependencies: TPkgDependencyList): TModalResult;
51 var
52   AddDepDialog: TAddFPMakeDependencyDialog;
53 begin
54   AddDepDialog:=TAddFPMakeDependencyDialog.Create(nil);
55   AddDepDialog.UpdateAvailableDependencyNames;
56 
57   Result:=AddDepDialog.ShowModal;
58   if Result=mrOk then
59     begin
60     AResultDependencies:=AddDepDialog.FResultDependencies;
61     AddDepDialog.fResultDependencies:=nil;
62     end
63   else
64     begin
65     AResultDependencies:=nil;
66     end;
67   AddDepDialog.Free;
68 end;
69 
70 { TAddFPMakeDependencyDialog }
71 
72 procedure TAddFPMakeDependencyDialog.OKButtonClick(Sender: TObject);
73 var
74   NewDependency: TPkgDependency;
75   i: Integer;
76 begin
77   // Add all selected packages.
78   FResultDependencies := TPkgDependencyList.Create; // Will be freed by the caller.
79   if DependPkgNameListBox.SelCount > 0 then
80   begin
81     for i := 0 to DependPkgNameListBox.Count-1 do
82     begin
83       if DependPkgNameListBox.Selected[i] then
84       begin
85         NewDependency := TPkgDependency.Create;   // Will be added to package graph.
86         NewDependency.PackageName := DependPkgNameListBox.Items[i];
87         NewDependency.DependencyType := pdtFPMake;
88         //if not CheckAddingDependency(fProjPack, NewDependency) then exit;
89         FResultDependencies.Add(NewDependency);
90         NewDependency := nil;
91       end;
92     end;
93   end;
94   ModalResult := mrOk;
95 end;
96 
97 procedure TAddFPMakeDependencyDialog.UpdateAvailableDependencyNames;
98 begin
99   FPackageNameList.Clear;
100   TFppkgHelper.Instance.ListPackages(FPackageNameList);
101 
102   FPackageNameList.Sort;
103 
104   DependPkgNameFilter.Items.BeginUpdate;
105   try
106     DependPkgNameFilter.Items.Clear;
107     DependPkgNameFilter.Items.Assign(FPackageNameList);
108     DependPkgNameFilter.InvalidateFilter;
109   finally
110     DependPkgNameFilter.Items.EndUpdate;
111   end;
112 end;
113 
114 constructor TAddFPMakeDependencyDialog.Create(TheOwner: TComponent);
115 begin
116   inherited Create(TheOwner);
117   FPackageNameList := TStringListUTF8Fast.Create;
118 
119   Caption:=lisProjAddNewRequirement;
120 
121   DependPkgNameLabel.Caption:=lisProjAddPackageName;
122   BP.CloseButton.Caption := lisPckEditInstall;
123 
124   IDEDialogLayoutList.ApplyLayout(Self,450,300);
125 end;
126 
127 destructor TAddFPMakeDependencyDialog.Destroy;
128 begin
129   FPackageNameList.Free;
130   inherited Destroy;
131 end;
132 
133 end.
134 
135