1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140
|
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;
FECode: TFileNameEdit;
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.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.
|