lazarus/packager/newpkgcomponentdlg.pas
2021-01-29 19:59:04 +00:00

130 lines
3.6 KiB
ObjectPascal

{
***************************************************************************
* *
* This source is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
* This code is distributed in the hope that it will be useful, but *
* WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
* General Public License for more details. *
* *
* A copy of the GNU General Public License is available on the World *
* Wide Web at <http://www.gnu.org/copyleft/gpl.html>. You can also *
* obtain it by writing to the Free Software Foundation, *
* Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1335, USA. *
* *
***************************************************************************
Author: Mattias Gaertner
Abstract:
Dialog to select the package where to create the new component.
}
unit NewPkgComponentDlg;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils,
// LCL
Forms, Controls, StdCtrls, ButtonPanel,
// LazUtils
LazUTF8,
// IdeIntf
PackageIntf,
// IDE
PackageSystem, PackageDefs, LazarusIDEStrConsts;
type
{ TNewPkgComponentDialog }
TNewPkgComponentDialog = class(TForm)
ButtonPanel1: TButtonPanel;
Label1: TLabel;
PkgsListBox: TListBox;
procedure FormCreate(Sender: TObject);
private
procedure FillPkgsListBox;
public
function GetPackageName: string;
end;
function ShowNewPkgComponentDialog(out aPackage: TLazPackage): TModalResult;
implementation
{$R *.lfm}
function ShowNewPkgComponentDialog(out aPackage: TLazPackage): TModalResult;
var
NewPkgComponentDialog: TNewPkgComponentDialog;
PkgName: String;
begin
aPackage:=nil;
NewPkgComponentDialog:=TNewPkgComponentDialog.Create(nil);
try
Result:=NewPkgComponentDialog.ShowModal;
if Result<>mrOk then exit;
PkgName:=NewPkgComponentDialog.GetPackageName;
if PkgName<>'' then
aPackage:=PackageGraph.FindPackageWithName(PkgName,nil);
finally
NewPkgComponentDialog.Free;
end;
end;
{ TNewPkgComponentDialog }
procedure TNewPkgComponentDialog.FormCreate(Sender: TObject);
begin
Caption:=lisCreateNewPackageComponent;
Label1.Caption:=lisPkgSelectAPackage;
FillPkgsListBox;
end;
procedure TNewPkgComponentDialog.FillPkgsListBox;
var
sl: TStringListUTF8Fast;
Pkg: TLazPackage;
i: Integer;
begin
sl:=TStringListUTF8Fast.Create;
try
for i:=0 to PackageGraph.Count-1 do begin
Pkg:=PackageGraph[i];
if (not (Pkg.PackageType in [lptRunAndDesignTime,lptDesignTime]))
or Pkg.ReadOnly or Pkg.UserReadOnly
then continue;
sl.Add(Pkg.Name);
end;
sl.Sort;
// add as first item '(create new)'
sl.Insert(0,lisCreateNewPackage);
PkgsListBox.Items.Assign(sl);
PkgsListBox.ItemIndex:=0;
finally
sl.Free;
end;
end;
function TNewPkgComponentDialog.GetPackageName: string;
var
i: Integer;
begin
i:=PkgsListBox.ItemIndex;
if i<1 then
Result:=''
else
Result:=PkgsListBox.Items[i];
end;
end.