File: frmcreatecode.pp

package info (click to toggle)
lazarus 2.0.0%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 214,460 kB
  • sloc: pascal: 1,862,622; xml: 265,709; cpp: 56,595; sh: 3,008; java: 609; makefile: 535; perl: 297; sql: 222; ansic: 137
file content (140 lines) | stat: -rw-r--r-- 3,202 bytes parent folder | download | duplicates (2)
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.