{ *************************************************************************** * * * 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.