mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-25 14:19:12 +02:00
144 lines
3.3 KiB
ObjectPascal
144 lines
3.3 KiB
ObjectPascal
unit frmcreatecode;
|
|
|
|
{$mode objfpc}{$H+}
|
|
|
|
interface
|
|
|
|
uses
|
|
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, ComCtrls, ButtonPanel, Spin, EditBtn, StdCtrls, ExtCtrls, SynEdit,
|
|
SynHighlighterPas, fpjson, fpjsontopas;
|
|
|
|
type
|
|
|
|
{ TCreateCodeForm }
|
|
|
|
TCreateCodeForm = class(TForm)
|
|
BPCode: TButtonPanel;
|
|
CGOptions: TCheckGroup;
|
|
EConstructorArgs: TEdit;
|
|
EDefaultParentName: TEdit;
|
|
EExtraUnitNames: TEdit;
|
|
EPropertyTypeSuffixEdit: TEdit;
|
|
EUnitName: TEdit;
|
|
EFieldPrefix: TEdit;
|
|
ETopLevelClassName: TEdit;
|
|
FECode: TFileNameEdit;
|
|
LETopLevelClassName: TLabel;
|
|
LParentName: TLabel;
|
|
LExtraUnitNames: TLabel;
|
|
LEConstructorArgsLabel1: TLabel;
|
|
LEPropertyTypeSuffix: TLabel;
|
|
LEunitName: TLabel;
|
|
LEunitName1: TLabel;
|
|
LFECode: TLabel;
|
|
LSEindent: TLabel;
|
|
PCCode: TPageControl;
|
|
SEIndent: TSpinEdit;
|
|
SECode: TSynEdit;
|
|
SynFPC: TSynFreePascalSyn;
|
|
TSOptions: TTabSheet;
|
|
TSCode: TTabSheet;
|
|
procedure FormCreate(Sender: TObject);
|
|
procedure OKButtonClick(Sender: TObject);
|
|
procedure PCCodeChange(Sender: TObject);
|
|
private
|
|
FGenerator : TJSONToPascal;
|
|
procedure FormToGenerator;
|
|
function GetJSON: TJSONData;
|
|
procedure SetJSON(AValue: TJSONData);
|
|
public
|
|
Property JSON : TJSONData Read GetJSON Write SetJSON;
|
|
end;
|
|
|
|
Procedure CreateCodeFromJSON(aData : TJSONData);
|
|
|
|
implementation
|
|
|
|
{$R *.lfm}
|
|
|
|
uses msgjsonviewer;
|
|
|
|
Procedure CreateCodeFromJSON(aData : TJSONData);
|
|
|
|
begin
|
|
With TCreateCodeForm.Create(Application) do
|
|
try
|
|
JSON:=aData;
|
|
ShowModal;
|
|
finally
|
|
Free;
|
|
end;
|
|
end;
|
|
|
|
{ TCreateCodeForm }
|
|
|
|
procedure TCreateCodeForm.FormCreate(Sender: TObject);
|
|
begin
|
|
FGenerator:=TJSONToPascal.Create(Self);
|
|
end;
|
|
|
|
procedure TCreateCodeForm.OKButtonClick(Sender: TObject);
|
|
begin
|
|
if (FECode.FileName='') then
|
|
begin
|
|
ShowMessage(SEFileNameNeeded);
|
|
exit;
|
|
end;
|
|
FormToGenerator;
|
|
FGenerator.Code.Clear;
|
|
FGenerator.Execute;
|
|
FGenerator.Code.SaveToFile(FECode.FileName);
|
|
ModalResult:=mrOK;
|
|
end;
|
|
|
|
procedure TCreateCodeForm.PCCodeChange(Sender: TObject);
|
|
begin
|
|
If PCCode.ActivePage=TSCode then
|
|
begin
|
|
FormToGenerator;
|
|
FGenerator.Code.Clear;
|
|
FGenerator.Execute;
|
|
SECode.Lines:=FGenerator.Code;
|
|
end;
|
|
end;
|
|
|
|
function TCreateCodeForm.GetJSON: TJSONData;
|
|
begin
|
|
Result:=FGenerator.JSONData;
|
|
end;
|
|
|
|
procedure TCreateCodeForm.SetJSON(AValue: TJSONData);
|
|
begin
|
|
FGenerator.JSONData:=AValue;
|
|
end;
|
|
|
|
procedure TCreateCodeForm.FormToGenerator;
|
|
|
|
Var
|
|
O : TJSONToPascaloptions;
|
|
T : TJSONToPascaloption;
|
|
|
|
begin
|
|
O:=[];
|
|
For T in TJSONToPascaloption do
|
|
if CGoptions.Checked[Ord(T)] then
|
|
Include(O,T);
|
|
FGenerator.Options:=O;
|
|
FGenerator.TopLevelObjectClassName:=ETopLevelClassName.Text;
|
|
FGenerator.DestUnitName:=EUnitName.Text;
|
|
if (FGenerator.DestUnitName='') then
|
|
FGenerator.DestUnitName:=ChangeFileExt(ExtractFileName(FECode.FileName),'');
|
|
FGenerator.IndentSize:=SEIndent.Value;
|
|
if (EFieldPrefix.Text<>'') then
|
|
FGenerator.FieldPrefix:=EFieldPrefix.Text
|
|
else
|
|
FGenerator.FieldPrefix:='F';
|
|
FGenerator.PropertyTypeSuffix:=EPropertyTypeSuffixEdit.Text;
|
|
FGenerator.ObjectConstructorArguments:=EConstructorArgs.Text;
|
|
FGenerator.ExtraUnitNames:=EExtraUnitNames.Text;
|
|
FGenerator.DefaultParentName:=EDefaultParentName.Text;
|
|
end;
|
|
|
|
end.
|
|
|