├── .gitignore
├── LICENSE
├── README.md
├── boss-lock.json
├── boss.json
├── horse_wizard.dpk
├── horse_wizard.dproj
├── img
├── Horse-New-Controller-2.png
├── Horse-New-Controller.png
├── Horse-New-Project-2.png
├── Horse-New-Project.png
├── Horse-Wizard-Demo.png
├── Horse-Wizard.png
├── Screenshot_1.png
├── install.png
└── title.png
└── src
├── HashloadIcon.ico
├── HashloadSplash.bmp
├── Horse.Boss.Initializer.pas
├── Horse.CodeGen.SourceFile.pas
├── Horse.Middlewares.pas
├── Horse.NewController.Binding.pas
├── Horse.NewController.Creator.pas
├── Horse.NewController.Model.pas
├── Horse.NewController.View.dfm
├── Horse.NewController.View.pas
├── Horse.NewController.Wizard.pas
├── Horse.NewController.pas
├── Horse.NewProject.Creator.Apache.pas
├── Horse.NewProject.Creator.Vcl.NewForm.Main.Templates.pas
├── Horse.NewProject.Creator.Vcl.NewForm.Main.pas
├── Horse.NewProject.Creator.Vcl.pas
├── Horse.NewProject.Creator.WinSvc.NewForm.Main.Templates.pas
├── Horse.NewProject.Creator.WinSvc.NewForm.Main.pas
├── Horse.NewProject.Creator.WinSvc.pas
├── Horse.NewProject.Creator.pas
├── Horse.NewProject.Templates.pas
├── Horse.NewProject.View.dfm
├── Horse.NewProject.View.pas
├── Horse.NewProject.Wizard.pas
├── Horse.NewProject.pas
├── Horse.Registration.pas
├── Horse.Splash.Registration.pas
├── Horse.Views.Boss.dfm
├── Horse.Views.Boss.pas
├── Horse.Views.Wizard.dfm
├── Horse.Views.Wizard.pas
├── Horse.Wizard.Types.pas
└── Horse.Wizard.Utils.pas
/.gitignore:
--------------------------------------------------------------------------------
1 | # Uncomment these types if you want even more clean repository. But be careful.
2 | # It can make harm to an existing project source. Read explanations below.
3 |
4 | # Resource files are binaries containing manifest, project icon and version info.
5 | # They can not be viewed as text or compared by diff-tools. Consider replacing them with .rc files.
6 | *.res
7 |
8 | # Type library file (binary). In old Delphi versions it should be stored.
9 | # Since Delphi 2009 it is produced from .ridl file and can safely be ignored.
10 | #*.tlb
11 | #
12 | # Diagram Portfolio file. Used by the diagram editor up to Delphi 7.
13 | # Uncomment this if you are not using diagrams or use newer Delphi version.
14 | #*.ddp
15 | #
16 | # Visual LiveBindings file. Added in Delphi XE2.
17 | # Uncomment this if you are not using LiveBindings Designer.
18 | #*.vlb
19 | #
20 | # Deployment Manager configuration file for your project. Added in Delphi XE2.
21 | # Uncomment this if it is not mobile development and you do not use remote debug feature.
22 | #*.deployproj
23 | #
24 | # C++ object files produced when C/C++ Output file generation is configured.
25 | # Uncomment this if you are not using external objects (zlib library for example).
26 | #*.obj
27 | #
28 |
29 | # Delphi compiler-generated binaries (safe to delete)
30 | *.exe
31 | *.dll
32 | *.bpl
33 | *.bpi
34 | *.dcp
35 | *.so
36 | *.apk
37 | *.drc
38 | *.map
39 | *.dres
40 | *.rsm
41 | *.tds
42 | *.dcu
43 | *.lib
44 | *.a
45 | *.o
46 | *.ocx
47 |
48 | # Delphi autogenerated files (duplicated info)
49 | *.cfg
50 | *.hpp
51 | *Resource.rc
52 |
53 | # Delphi local files (user-specific info)
54 | *.local
55 | *.identcache
56 | *.projdata
57 | *.tvsconfig
58 | *.dsk
59 |
60 | # Delphi history and backups
61 | __history/
62 | __recovery/
63 | *.~*
64 |
65 | # Castalia statistics file (since XE7 Castalia is distributed with Delphi)
66 | *.stat
67 |
68 | # Boss dependency manager vendor folder https://github.com/HashLoad/boss
69 | modules/
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2025 Vinicius Sanchez
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Horse Wizard
2 |
3 | Horse-wizard is a wizard for creating new [Horse](https://github.com/HashLoad/horse) applications. Easy, fast and simple. A tool to make your work easier!
4 | We created a channel on Telegram for questions and support:
5 |
6 |
7 |
8 |
9 | ## ✔️ Compatibility
10 | This Wizard is compatible with projects developed in:
11 | - [X] Delphi
12 | - [ ] Lazarus
13 |
14 |
15 | ## ⚙️ Demo and Installation
16 |
19 |
20 |
21 |
22 | ## Wizard
23 | 
24 |
25 | ## ⚡️ Horse Project
26 | The Horse Project option is to create a new project using horse and its official middlewares. The project can be created for both Windows (Apache, CGI, Console, IIS, VCL and WinService) and Linux (Apache, Console and Daemon) platforms.
27 |
28 | 
29 | 
30 |
31 | ## ⚡️ Horse Controller
32 | The Horse Controller option is to create a new Controller where you can map your routes for each respective Verb.
33 |
34 | 
35 | 
36 |
37 | ## ⚠️ License
38 | `Horse-Wizard` is free and open-source middleware licensed under the [MIT License](https://github.com/HashLoad/horse-wizard/blob/master/LICENSE).
39 |
--------------------------------------------------------------------------------
/boss-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "hash": "d41d8cd98f00b204e9800998ecf8427e",
3 | "updated": "2019-10-01T21:15:07.2665862-03:00",
4 | "installedModules": {
5 | "github.com/hashload/doscommand": {
6 | "name": "doscommand",
7 | "version": "1.0.3",
8 | "hash": "f52bdae34873ac6da67a7665dfa8cbe3",
9 | "artifacts": {
10 | "dcp": [
11 | "DOSCommandDD.bpi",
12 | "DOSCommandDD.dcp",
13 | "DOSCommandDD.lib",
14 | "DOSCommandDR.bpi",
15 | "DOSCommandDR.dcp",
16 | "DOSCommandDR.lib"
17 | ],
18 | "dcu": [
19 | "DosCommand.Register.dcu",
20 | "DosCommand.dcu"
21 | ],
22 | "bpl": [
23 | "DOSCommandDD260.bpl",
24 | "DOSCommandDR260.bpl"
25 | ]
26 | },
27 | "failed": false,
28 | "changed": false
29 | }
30 | }
31 | }
--------------------------------------------------------------------------------
/boss.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "horse-wizard",
3 | "description": "",
4 | "version": "1.0.0",
5 | "homepage": "",
6 | "mainsrc": "src/",
7 | "projects": [],
8 | "dependencies": {
9 | "github.com/hashload/doscommand": "^1.0.3"
10 | }
11 | }
--------------------------------------------------------------------------------
/horse_wizard.dpk:
--------------------------------------------------------------------------------
1 | package horse_wizard;
2 |
3 | {$R *.res}
4 | {$R *.dres}
5 | {$IFDEF IMPLICITBUILDING This IFDEF should not be used by users}
6 | {$ALIGN 8}
7 | {$ASSERTIONS ON}
8 | {$BOOLEVAL OFF}
9 | {$DEBUGINFO OFF}
10 | {$EXTENDEDSYNTAX ON}
11 | {$IMPORTEDDATA ON}
12 | {$IOCHECKS ON}
13 | {$LOCALSYMBOLS OFF}
14 | {$LONGSTRINGS ON}
15 | {$OPENSTRINGS ON}
16 | {$OPTIMIZATION ON}
17 | {$OVERFLOWCHECKS OFF}
18 | {$RANGECHECKS OFF}
19 | {$REFERENCEINFO OFF}
20 | {$SAFEDIVIDE OFF}
21 | {$STACKFRAMES OFF}
22 | {$TYPEDADDRESS OFF}
23 | {$VARSTRINGCHECKS ON}
24 | {$WRITEABLECONST OFF}
25 | {$MINENUMSIZE 1}
26 | {$IMAGEBASE $400000}
27 | {$DEFINE RELEASE}
28 | {$ENDIF IMPLICITBUILDING}
29 | {$DESCRIPTION 'Horse IDE Expert'}
30 | {$IMPLICITBUILD ON}
31 |
32 | requires
33 | rtl,
34 | designide,
35 | ExpertsCreators,
36 | IndySystem,
37 | IndyProtocols,
38 | IndyCore,
39 | dbrtl,
40 | DOSCommandDD,
41 | DOSCommandDR;
42 |
43 | contains
44 | Horse.Boss.Initializer in 'src\Horse.Boss.Initializer.pas',
45 | Horse.CodeGen.SourceFile in 'src\Horse.CodeGen.SourceFile.pas',
46 | Horse.Middlewares in 'src\Horse.Middlewares.pas',
47 | Horse.NewController.Binding in 'src\Horse.NewController.Binding.pas',
48 | Horse.NewController.Creator in 'src\Horse.NewController.Creator.pas',
49 | Horse.NewController.Model in 'src\Horse.NewController.Model.pas',
50 | Horse.NewController in 'src\Horse.NewController.pas',
51 | Horse.NewController.View in 'src\Horse.NewController.View.pas' {HorseViewsNewController},
52 | Horse.NewController.Wizard in 'src\Horse.NewController.Wizard.pas',
53 | Horse.NewProject.Creator.Apache in 'src\Horse.NewProject.Creator.Apache.pas',
54 | Horse.NewProject.Creator in 'src\Horse.NewProject.Creator.pas',
55 | Horse.NewProject.Creator.Vcl.NewForm.Main in 'src\Horse.NewProject.Creator.Vcl.NewForm.Main.pas',
56 | Horse.NewProject.Creator.Vcl.NewForm.Main.Templates in 'src\Horse.NewProject.Creator.Vcl.NewForm.Main.Templates.pas',
57 | Horse.NewProject.Creator.Vcl in 'src\Horse.NewProject.Creator.Vcl.pas',
58 | Horse.NewProject.Creator.WinSvc.NewForm.Main in 'src\Horse.NewProject.Creator.WinSvc.NewForm.Main.pas',
59 | Horse.NewProject.Creator.WinSvc.NewForm.Main.Templates in 'src\Horse.NewProject.Creator.WinSvc.NewForm.Main.Templates.pas',
60 | Horse.NewProject.Creator.WinSvc in 'src\Horse.NewProject.Creator.WinSvc.pas',
61 | Horse.NewProject in 'src\Horse.NewProject.pas',
62 | Horse.NewProject.Templates in 'src\Horse.NewProject.Templates.pas',
63 | Horse.NewProject.View in 'src\Horse.NewProject.View.pas' {HorseViewsNewProject},
64 | Horse.NewProject.Wizard in 'src\Horse.NewProject.Wizard.pas',
65 | Horse.Registration in 'src\Horse.Registration.pas',
66 | Horse.Splash.Registration in 'src\Horse.Splash.Registration.pas',
67 | Horse.Views.Boss in 'src\Horse.Views.Boss.pas' {FrmBoss},
68 | Horse.Views.Wizard in 'src\Horse.Views.Wizard.pas' {FrmNewProject},
69 | Horse.Wizard.Types in 'src\Horse.Wizard.Types.pas',
70 | Horse.Wizard.Utils in 'src\Horse.Wizard.Utils.pas';
71 |
72 | end.
73 |
--------------------------------------------------------------------------------
/horse_wizard.dproj:
--------------------------------------------------------------------------------
1 |
2 |
3 | {84344511-1DC2-41BA-8689-9F36C1D475BE}
4 | horse_wizard.dpk
5 | 19.3
6 | VCL
7 | True
8 | Release
9 | Win32
10 | 1
11 | Package
12 |
13 |
14 | true
15 |
16 |
17 | true
18 | Base
19 | true
20 |
21 |
22 | true
23 | Base
24 | true
25 |
26 |
27 | true
28 | Base
29 | true
30 |
31 |
32 | true
33 | Cfg_1
34 | true
35 | true
36 |
37 |
38 | true
39 | Base
40 | true
41 |
42 |
43 | true
44 | Cfg_2
45 | true
46 | true
47 |
48 |
49 | .\$(Platform)\$(Config)
50 | .\$(Platform)\$(Config)
51 | false
52 | false
53 | false
54 | false
55 | false
56 | true
57 | true
58 | System;Xml;Data;Datasnap;Web;Soap;Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;$(DCC_Namespace)
59 | All
60 | horse_wizard
61 | 1040
62 | CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=
63 | Horse IDE Expert
64 | modules\.dcp;modules\.dcu;modules;modules\doscommand\Source;$(DCC_UnitSearchPath)
65 |
66 |
67 | Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)
68 | Debug
69 | true
70 | 1033
71 | rtl;IndySystem;IndyProtocols;IndyCore;dbrtl;dmvcframeworkRT;dxCoreRS26;dxGDIPlusRS26;DOSCommandDR;$(DCC_UsePackage)
72 | Horse IDE Expert
73 |
74 |
75 | rtl;IndySystem;IndyProtocols;IndyCore;dbrtl;dxCoreRS26;dxGDIPlusRS26;DOSCommandDR;$(DCC_UsePackage)
76 |
77 |
78 | DEBUG;$(DCC_Define)
79 | true
80 | false
81 | true
82 | true
83 | true
84 | Horse IDE Expert
85 |
86 |
87 | false
88 | true
89 | 1033
90 | Horse
91 | CompanyName=Hashload;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=
92 | .\$(Platform)\$(Config)
93 | C:\Program Files (x86)\Embarcadero\Studio\21.0\bin\bds.exe
94 |
95 |
96 | false
97 | RELEASE;$(DCC_Define)
98 | 0
99 | 0
100 | Horse IDE Expert
101 |
102 |
103 | true
104 | 1033
105 | Horse IDE Expert
106 |
107 |
108 |
109 | MainSource
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 | dfm
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
139 |
140 |
141 |
142 |
143 |
144 | dfm
145 |
146 |
147 |
148 |
149 |
150 |
151 | dfm
152 |
153 |
154 |
155 | dfm
156 |
157 |
158 |
159 |
160 | ICON
161 | HashloadIcon
162 |
163 |
164 | BITMAP
165 | HashloadSplash
166 |
167 |
168 | Base
169 |
170 |
171 | Cfg_1
172 | Base
173 |
174 |
175 | Cfg_2
176 | Base
177 |
178 |
179 |
180 | Delphi.Personality.12
181 | Package
182 |
183 |
184 |
185 | horse_wizard.dpk
186 |
187 |
188 | Microsoft Office 2000 Sample Automation Server Wrapper Components
189 | Microsoft Office XP Sample Automation Server Wrapper Components
190 |
191 |
192 |
193 |
194 |
195 | horse_wizard.bpl
196 | true
197 |
198 |
199 |
200 |
201 | true
202 |
203 |
204 |
205 |
206 | 0
207 |
208 |
209 |
210 |
211 | 0
212 |
213 |
214 |
215 |
216 | 0
217 | .dll;.bpl
218 |
219 |
220 |
221 |
222 | 0
223 | .bpl
224 |
225 |
226 |
227 |
228 | 0
229 |
230 |
231 |
232 |
233 | 0
234 |
235 |
236 |
237 |
238 | 1
239 |
240 |
241 | 1
242 |
243 |
244 |
245 |
246 | Assets
247 | 1
248 |
249 |
250 | Assets
251 | 1
252 |
253 |
254 |
255 |
256 | Assets
257 | 1
258 |
259 |
260 | Assets
261 | 1
262 |
263 |
264 |
265 |
266 |
267 |
268 | True
269 | False
270 |
271 |
272 | 12
273 |
274 |
275 |
276 |
277 |
278 |
--------------------------------------------------------------------------------
/img/Horse-New-Controller-2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HashLoad/horse-wizard/413b760c8a90a57543257061ab319d66e736d809/img/Horse-New-Controller-2.png
--------------------------------------------------------------------------------
/img/Horse-New-Controller.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HashLoad/horse-wizard/413b760c8a90a57543257061ab319d66e736d809/img/Horse-New-Controller.png
--------------------------------------------------------------------------------
/img/Horse-New-Project-2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HashLoad/horse-wizard/413b760c8a90a57543257061ab319d66e736d809/img/Horse-New-Project-2.png
--------------------------------------------------------------------------------
/img/Horse-New-Project.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HashLoad/horse-wizard/413b760c8a90a57543257061ab319d66e736d809/img/Horse-New-Project.png
--------------------------------------------------------------------------------
/img/Horse-Wizard-Demo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HashLoad/horse-wizard/413b760c8a90a57543257061ab319d66e736d809/img/Horse-Wizard-Demo.png
--------------------------------------------------------------------------------
/img/Horse-Wizard.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HashLoad/horse-wizard/413b760c8a90a57543257061ab319d66e736d809/img/Horse-Wizard.png
--------------------------------------------------------------------------------
/img/Screenshot_1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HashLoad/horse-wizard/413b760c8a90a57543257061ab319d66e736d809/img/Screenshot_1.png
--------------------------------------------------------------------------------
/img/install.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HashLoad/horse-wizard/413b760c8a90a57543257061ab319d66e736d809/img/install.png
--------------------------------------------------------------------------------
/img/title.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HashLoad/horse-wizard/413b760c8a90a57543257061ab319d66e736d809/img/title.png
--------------------------------------------------------------------------------
/src/HashloadIcon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HashLoad/horse-wizard/413b760c8a90a57543257061ab319d66e736d809/src/HashloadIcon.ico
--------------------------------------------------------------------------------
/src/HashloadSplash.bmp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HashLoad/horse-wizard/413b760c8a90a57543257061ab319d66e736d809/src/HashloadSplash.bmp
--------------------------------------------------------------------------------
/src/Horse.Boss.Initializer.pas:
--------------------------------------------------------------------------------
1 | unit Horse.Boss.Initializer;
2 |
3 | interface
4 |
5 | uses ToolsAPI, Horse.Middlewares, System.Generics.Collections, System.Classes,
6 | Horse.Views.Boss, DosCommand;
7 |
8 | type
9 | THorseBossInitializer = class
10 | private
11 | FProject: IOTAProject;
12 | FModules: TList;
13 | FLocked: Boolean;
14 | LBossView : TFrmBoss;
15 | LDosCommand: TDosCommand;
16 |
17 | function GetDependencies: string;
18 | procedure RunBossInstall;
19 | procedure ReloadProject;
20 | procedure OnNewLineEvent(ASender: TObject; const ANewLine: string;
21 | AOutputType: TOutputType);
22 | procedure OnTerminatedEvent(ASender: TObject);
23 | public
24 | constructor Create(const AProject: IOTAProject; const AModules: TList);
25 | procedure Generate;
26 | procedure Wait;
27 | end;
28 |
29 | implementation
30 |
31 | uses System.SysUtils, System.IOUtils, Vcl.Forms;
32 |
33 | const
34 | HORSE_MODULE = 'github.com/HashLoad/horse';
35 | BOSS_COMMAND = 'boss install';
36 | BOSS_MODULE_DEFAULT = '"%s": ">0.0.0"';
37 | BOSS_NAME = 'boss.json';
38 | BOSS_BASE =
39 | '{' + sLineBreak +
40 | ' "name": "%s",' + sLineBreak +
41 | ' "description": "",' + sLineBreak +
42 | ' "version": "1.0.0",' + sLineBreak +
43 | ' "homepage": "",' + sLineBreak +
44 | ' "mainsrc": "./",' + sLineBreak +
45 | ' "projects": [],' + sLineBreak +
46 | ' "dependencies": {' + sLineBreak +
47 | ' %s' + sLineBreak +
48 | ' }' + sLineBreak +
49 | '}';
50 |
51 | { THorseBossInitializer }
52 |
53 | constructor THorseBossInitializer.Create(const AProject: IOTAProject; const AModules: TList);
54 | begin
55 | FProject := AProject;
56 | FModules := AModules;
57 | end;
58 |
59 | procedure THorseBossInitializer.Generate;
60 | var
61 | LContent: string;
62 | LName: string;
63 | LFile: TStringList;
64 | begin
65 | FLocked := True;
66 | LName := ExtractFileName(TPath.GetFileNameWithoutExtension(FProject.FileName));
67 | LContent := Format(BOSS_BASE, [LName, GetDependencies]);
68 |
69 | LFile := TStringList.Create();
70 | try
71 | LFile.Text := LContent;
72 | LFile.SaveToFile(TPath.Combine(ExtractFilePath(FProject.FileName), BOSS_NAME));
73 | finally
74 | LFile.Free;
75 | end;
76 |
77 | RunBossInstall;
78 | end;
79 |
80 | function THorseBossInitializer.GetDependencies: string;
81 | var
82 | LList: string;
83 | I: Integer;
84 | begin
85 | LList := EmptyStr;
86 |
87 | for I := 0 to Pred(FModules.Count) do
88 | LList := LList + Format(BOSS_MODULE_DEFAULT, [FModules[I].Url]) + ',' + sLineBreak;
89 |
90 | LList := LList + Format(BOSS_MODULE_DEFAULT, [HORSE_MODULE]);
91 | Result := LList;
92 | end;
93 |
94 | procedure THorseBossInitializer.ReloadProject;
95 | begin
96 | FProject.Refresh(False);
97 | end;
98 |
99 | procedure THorseBossInitializer.OnNewLineEvent(ASender: TObject; const ANewLine: string; AOutputType: TOutputType);
100 | begin
101 | LBossView.AppendText(ANewLine);
102 | end;
103 |
104 | procedure THorseBossInitializer.OnTerminatedEvent(ASender: TObject);
105 | begin
106 | LDosCommand.Free;
107 |
108 | TThread.Queue(nil,
109 | procedure
110 | begin
111 | LBossView.Close;
112 | LBossView.Free;
113 | end);
114 | ReloadProject;
115 | FLocked := False;
116 | end;
117 |
118 | procedure THorseBossInitializer.RunBossInstall;
119 | begin
120 | LDosCommand := TDosCommand.Create(nil);
121 | LBossView := TFrmBoss.Create(nil);
122 |
123 | LDosCommand.OnNewLine := OnNewLineEvent;
124 | LDosCommand.OnTerminated := OnTerminatedEvent;
125 |
126 | LDosCommand.InputToOutput := False;
127 | LDosCommand.CurrentDir := ExtractFilePath(FProject.FileName);
128 | LDosCommand.CommandLine := BOSS_COMMAND;
129 | LDosCommand.Execute;
130 | LBossView.Show;
131 | end;
132 |
133 | procedure THorseBossInitializer.Wait;
134 | begin
135 | while FLocked do
136 | Application.ProcessMessages;
137 | end;
138 |
139 | end.
140 |
--------------------------------------------------------------------------------
/src/Horse.CodeGen.SourceFile.pas:
--------------------------------------------------------------------------------
1 | unit Horse.CodeGen.SourceFile;
2 |
3 | interface
4 |
5 | uses System.SysUtils, System.Classes, ToolsAPI;
6 |
7 | type
8 | TSourceFile = class(TInterfacedObject, IOTAFile)
9 | private
10 | FSource: string;
11 | public
12 | function GetSource: string;
13 | function GetAge: TDateTime;
14 | constructor Create(const ASource: string; const AArgs: array of const);
15 | class function New(const ASource: string; const AArgs: array of const): IOTAFile;
16 | end;
17 |
18 | implementation
19 |
20 | { TSourceFile }
21 |
22 | constructor TSourceFile.Create(const ASource: string; const AArgs: array of const);
23 | begin
24 | FSource := Format(ASource, AArgs);
25 | end;
26 |
27 | function TSourceFile.GetAge: TDateTime;
28 | begin
29 | Result := Now;
30 | end;
31 |
32 | function TSourceFile.GetSource: string;
33 | begin
34 | Result := FSource;
35 | end;
36 |
37 | class function TSourceFile.New(const ASource: string; const AArgs: array of const): IOTAFile;
38 | begin
39 | Result := Self.Create(ASource, AArgs);
40 | end;
41 |
42 | end.
43 |
--------------------------------------------------------------------------------
/src/Horse.Middlewares.pas:
--------------------------------------------------------------------------------
1 | unit Horse.Middlewares;
2 |
3 | interface
4 |
5 | type
6 | IHorseMiddleware = interface
7 | ['{095E9FE2-785D-4296-84DE-BF7B0D1B44E8}']
8 | function Name: string;
9 | function Url: string;
10 | function &Uses: string;
11 | function Declaration: string;
12 | end;
13 |
14 | THorseMiddlewareBasicAuth = class(TInterfacedObject, IHorseMiddleware)
15 | public
16 | function Name: string;
17 | function Url: string;
18 | function &Uses: string;
19 | function Declaration: string;
20 | class function New: IHorseMiddleware;
21 | end;
22 |
23 | THorseMiddlewareCompression = class(TInterfacedObject, IHorseMiddleware)
24 | public
25 | function Name: string;
26 | function Url: string;
27 | function &Uses: string;
28 | function Declaration: string;
29 | class function New: IHorseMiddleware;
30 | end;
31 |
32 | THorseMiddlewareCORS = class(TInterfacedObject, IHorseMiddleware)
33 | public
34 | function Name: string;
35 | function Url: string;
36 | function &Uses: string;
37 | function Declaration: string;
38 | class function New: IHorseMiddleware;
39 | end;
40 |
41 | THorseMiddlewareHandleException = class(TInterfacedObject, IHorseMiddleware)
42 | public
43 | function Name: string;
44 | function Url: string;
45 | function &Uses: string;
46 | function Declaration: string;
47 | class function New: IHorseMiddleware;
48 | end;
49 |
50 | THorseMiddlewareJohnson = class(TInterfacedObject, IHorseMiddleware)
51 | public
52 | function Name: string;
53 | function Url: string;
54 | function &Uses: string;
55 | function Declaration: string;
56 | class function New: IHorseMiddleware;
57 | end;
58 |
59 | THorseMiddlewareJWT = class(TInterfacedObject, IHorseMiddleware)
60 | public
61 | function Name: string;
62 | function Url: string;
63 | function &Uses: string;
64 | function Declaration: string;
65 | class function New: IHorseMiddleware;
66 | end;
67 |
68 | THorseMiddlewareLogger = class(TInterfacedObject, IHorseMiddleware)
69 | public
70 | function Name: string;
71 | function Url: string;
72 | function &Uses: string;
73 | function Declaration: string;
74 | class function New: IHorseMiddleware;
75 | end;
76 |
77 | THorseMiddlewareOctetStream = class(TInterfacedObject, IHorseMiddleware)
78 | public
79 | function Name: string;
80 | function Url: string;
81 | function &Uses: string;
82 | function Declaration: string;
83 | class function New: IHorseMiddleware;
84 | end;
85 |
86 | implementation
87 |
88 | { THorseMiddlewareJohnson }
89 |
90 | function THorseMiddlewareJohnson.&Uses: string;
91 | begin
92 | Result := 'Horse.Jhonson';
93 | end;
94 |
95 | function THorseMiddlewareJohnson.Declaration: string;
96 | begin
97 | Result := 'Use(Jhonson())';
98 | end;
99 |
100 | function THorseMiddlewareJohnson.Name: string;
101 | begin
102 | Result := 'Jhonson';
103 | end;
104 |
105 | class function THorseMiddlewareJohnson.New: IHorseMiddleware;
106 | begin
107 | Result := Self.Create;
108 | end;
109 |
110 | function THorseMiddlewareJohnson.Url: string;
111 | begin
112 | Result := 'github.com/HashLoad/jhonson';
113 | end;
114 |
115 | { THorseMiddlewareCORS }
116 |
117 | function THorseMiddlewareCORS.&Uses: string;
118 | begin
119 | Result := 'Horse.CORS';
120 | end;
121 |
122 | function THorseMiddlewareCORS.Declaration: string;
123 | begin
124 | Result := 'Use(CORS)';
125 | end;
126 |
127 | function THorseMiddlewareCORS.Name: string;
128 | begin
129 | Result := 'CORS';
130 | end;
131 |
132 | class function THorseMiddlewareCORS.New: IHorseMiddleware;
133 | begin
134 | Result := Self.Create;
135 | end;
136 |
137 | function THorseMiddlewareCORS.Url: string;
138 | begin
139 | Result := 'github.com/HashLoad/horse-cors';
140 | end;
141 |
142 | { THorseMiddlewareOctetStream }
143 |
144 | function THorseMiddlewareOctetStream.&Uses: string;
145 | begin
146 | Result := 'Horse.OctetStream';
147 | end;
148 |
149 | function THorseMiddlewareOctetStream.Declaration: string;
150 | begin
151 | Result := 'Use(OctetStream)';
152 | end;
153 |
154 | function THorseMiddlewareOctetStream.Name: string;
155 | begin
156 | Result := 'Horse-Octet-Stream';
157 | end;
158 |
159 | class function THorseMiddlewareOctetStream.New: IHorseMiddleware;
160 | begin
161 | Result := Self.Create;
162 | end;
163 |
164 | function THorseMiddlewareOctetStream.Url: string;
165 | begin
166 | Result := 'github.com/HashLoad/horse-octet-stream';
167 | end;
168 |
169 | { THorseMiddlewareJWT }
170 |
171 | function THorseMiddlewareJWT.&Uses: string;
172 | begin
173 | Result := 'Horse.JWT';
174 | end;
175 |
176 | function THorseMiddlewareJWT.Declaration: string;
177 | begin
178 | Result := 'Use(HorseJWT(''MY-PASSWORD''))';
179 | end;
180 |
181 | function THorseMiddlewareJWT.Name: string;
182 | begin
183 | Result := 'Horse-JWT';
184 | end;
185 |
186 | class function THorseMiddlewareJWT.New: IHorseMiddleware;
187 | begin
188 | Result := Self.Create;
189 | end;
190 |
191 | function THorseMiddlewareJWT.Url: string;
192 | begin
193 | Result := 'github.com/HashLoad/horse-jwt';
194 | end;
195 |
196 | { THorseMiddlewareBasicAuth }
197 |
198 | function THorseMiddlewareBasicAuth.&Uses: string;
199 | begin
200 | Result := 'Horse.BasicAuthentication';
201 | end;
202 |
203 | function THorseMiddlewareBasicAuth.Declaration: string;
204 | begin
205 | Result :=
206 | 'Use(HorseBasicAuthentication(' + Chr(13) +
207 | ' function(const AUsername, APassword: string): Boolean' + Chr(13) +
208 | ' begin ' + Chr(13) +
209 | ' Result := AUsername.Equals(''user'') and APassword.Equals(''password'');' + Chr(13) +
210 | ' end))';
211 | end;
212 |
213 | function THorseMiddlewareBasicAuth.Name: string;
214 | begin
215 | Result := 'Basic-Auth';
216 | end;
217 |
218 | class function THorseMiddlewareBasicAuth.New: IHorseMiddleware;
219 | begin
220 | Result := Self.Create;
221 | end;
222 |
223 | function THorseMiddlewareBasicAuth.Url: string;
224 | begin
225 | Result := 'github.com/HashLoad/horse-basic-auth';
226 | end;
227 |
228 | { THorseMiddlewareCompression }
229 |
230 | function THorseMiddlewareCompression.&Uses: string;
231 | begin
232 | Result := 'Horse.Compression';
233 | end;
234 |
235 | function THorseMiddlewareCompression.Declaration: string;
236 | begin
237 | Result := 'Use(Compression()) // Must come before Jhonson middleware';
238 | end;
239 |
240 | function THorseMiddlewareCompression.Name: string;
241 | begin
242 | Result := 'Horse-Compression';
243 | end;
244 |
245 | class function THorseMiddlewareCompression.New: IHorseMiddleware;
246 | begin
247 | Result := Self.Create;
248 | end;
249 |
250 | function THorseMiddlewareCompression.Url: string;
251 | begin
252 | Result := 'github.com/HashLoad/horse-compression';
253 | end;
254 |
255 | { THorseMiddlewareHandleException }
256 |
257 | function THorseMiddlewareHandleException.&Uses: string;
258 | begin
259 | Result := 'Horse.HandleException';
260 | end;
261 |
262 | function THorseMiddlewareHandleException.Declaration: string;
263 | begin
264 | Result := 'Use(HandleException)';
265 | end;
266 |
267 | function THorseMiddlewareHandleException.Name: string;
268 | begin
269 | Result := 'Handle-Exception';
270 | end;
271 |
272 | class function THorseMiddlewareHandleException.New: IHorseMiddleware;
273 | begin
274 | Result := Self.Create;
275 | end;
276 |
277 | function THorseMiddlewareHandleException.Url: string;
278 | begin
279 | Result := 'github.com/HashLoad/handle-exception';
280 | end;
281 |
282 | { THorseMiddlewareLogger }
283 |
284 | function THorseMiddlewareLogger.&Uses: string;
285 | begin
286 | Result := 'Horse.Logger';
287 | end;
288 |
289 | function THorseMiddlewareLogger.Declaration: string;
290 | begin
291 | Result := 'Use(THorseLoggerManager.HorseCallback())';
292 | end;
293 |
294 | function THorseMiddlewareLogger.Name: string;
295 | begin
296 | Result := 'Horse-Logger';
297 | end;
298 |
299 | class function THorseMiddlewareLogger.New: IHorseMiddleware;
300 | begin
301 | Result := Self.Create;
302 | end;
303 |
304 | function THorseMiddlewareLogger.Url: string;
305 | begin
306 | Result := 'github.com/HashLoad/horse-logger';
307 | end;
308 |
309 | end.
310 |
--------------------------------------------------------------------------------
/src/Horse.NewController.Binding.pas:
--------------------------------------------------------------------------------
1 | unit Horse.NewController.Binding;
2 |
3 | interface
4 |
5 | uses ToolsAPI, Horse.NewController, System.SysUtils, System.Classes, Vcl.Dialogs, Vcl.Menus;
6 |
7 | type
8 | THorseNewControllerBinding = class(TNotifierObject, IOTAKeyboardBinding)
9 | private
10 | procedure Execute(const Context: IOTAKeyContext; KeyCode: TShortcut; var BindingResult: TKeyBindingResult);
11 | protected
12 | function GetBindingType: TBindingType;
13 | function GetDisplayName: string;
14 | function GetName: string;
15 | procedure BindKeyboard(const BindingServices: IOTAKeyBindingServices);
16 | public
17 | class function New: IOTAKeyboardBinding;
18 | end;
19 |
20 | var
21 | IndexNewControllerBinding: Integer = -1;
22 |
23 | procedure RegisterNewControllerBinding;
24 |
25 | implementation
26 |
27 | procedure RegisterNewControllerBinding;
28 | begin
29 | IndexNewControllerBinding := (BorlandIDEServices as IOTAKeyboardServices).AddKeyboardBinding(THorseNewControllerBinding.New);
30 | end;
31 |
32 | { THorseNewControllerBinding }
33 |
34 | procedure THorseNewControllerBinding.BindKeyboard(const BindingServices: IOTAKeyBindingServices);
35 | begin
36 | BindingServices.AddKeyBinding([TextToShortCut('Ctrl+Shift+H')], Execute, nil);
37 | end;
38 |
39 | procedure THorseNewControllerBinding.Execute(const Context: IOTAKeyContext; KeyCode: TShortcut; var BindingResult: TKeyBindingResult);
40 | begin
41 | BindingResult := krHandled;
42 | THorseNewController.CreateController;
43 | end;
44 |
45 | function THorseNewControllerBinding.GetBindingType: TBindingType;
46 | begin
47 | Result := btPartial;
48 | end;
49 |
50 | function THorseNewControllerBinding.GetDisplayName: string;
51 | begin
52 | Result := Self.ClassName;
53 | end;
54 |
55 | function THorseNewControllerBinding.GetName: string;
56 | begin
57 | Result := Self.ClassName;
58 | end;
59 |
60 | class function THorseNewControllerBinding.New: IOTAKeyboardBinding;
61 | begin
62 | Result := Self.Create;
63 | end;
64 |
65 | initialization
66 |
67 | finalization
68 | if IndexNewControllerBinding >= 0 then
69 | (BorlandIDEServices as IOTAKeyboardServices).RemoveKeyboardBinding(IndexNewControllerBinding);
70 |
71 | end.
72 |
--------------------------------------------------------------------------------
/src/Horse.NewController.Creator.pas:
--------------------------------------------------------------------------------
1 | unit Horse.NewController.Creator;
2 |
3 | interface
4 |
5 | uses ToolsAPI, Horse.CodeGen.SourceFile, Horse.NewController.Model, Vcl.Dialogs, System.SysUtils;
6 |
7 | type
8 | THorseNewControllerCreator = class(TNotifierObject, IOTACreator, IOTAModuleCreator)
9 | private
10 | FModel: THorseNewControllerModel;
11 | protected
12 | // IOTACreator
13 | function GetCreatorType: string;
14 | function GetExisting: Boolean;
15 | function GetFileSystem: string;
16 | function GetOwner: IOTAModule;
17 | function GetUnnamed: Boolean;
18 |
19 | // IOTAModuleCreator
20 | function GetAncestorName: string;
21 | function GetImplFileName: string;
22 | function GetIntfFileName: string;
23 | function GetFormName: string;
24 | function GetMainForm: Boolean;
25 | function GetShowForm: Boolean;
26 | function GetShowSource: Boolean;
27 | function NewFormFile(const AFormIdent, AAncestorIdent: string): IOTAFile;
28 | function NewIntfSource(const AModuleIdent, AFormIdent, AAncestorIdent: string): IOTAFile;
29 | function NewImplSource(const AModuleIdent, AFormIdent, AAncestorIdent: string): IOTAFile;
30 | procedure FormCreated(const AFormEditor: IOTAFormEditor);
31 | public
32 | constructor Create(const AModel: THorseNewControllerModel);
33 | class function New(const AModel: THorseNewControllerModel): IOTACreator;
34 | end;
35 |
36 | implementation
37 |
38 | { THorseNewControllerCreator }
39 |
40 | constructor THorseNewControllerCreator.Create(const AModel: THorseNewControllerModel);
41 | begin
42 | FModel := AModel;
43 | end;
44 |
45 | procedure THorseNewControllerCreator.FormCreated(const AFormEditor: IOTAFormEditor);
46 | begin
47 |
48 | end;
49 |
50 | function THorseNewControllerCreator.GetAncestorName: string;
51 | begin
52 | Result := EmptyStr;
53 | end;
54 |
55 | function THorseNewControllerCreator.GetCreatorType: string;
56 | begin
57 | Result := sUnit;
58 | end;
59 |
60 | function THorseNewControllerCreator.GetExisting: Boolean;
61 | begin
62 | Result := False;
63 | end;
64 |
65 | function THorseNewControllerCreator.GetFileSystem: string;
66 | begin
67 | Result := EmptyStr;
68 | end;
69 |
70 | function THorseNewControllerCreator.GetFormName: string;
71 | begin
72 | Result := EmptyStr;
73 | end;
74 |
75 | function THorseNewControllerCreator.GetImplFileName: string;
76 | begin
77 | Result := EmptyStr;
78 | end;
79 |
80 | function THorseNewControllerCreator.GetIntfFileName: string;
81 | begin
82 | Result := EmptyStr;
83 | end;
84 |
85 | function THorseNewControllerCreator.GetMainForm: Boolean;
86 | begin
87 | Result := False;
88 | end;
89 |
90 | function THorseNewControllerCreator.GetOwner: IOTAModule;
91 | begin
92 | Result := GetActiveProject;
93 | end;
94 |
95 | function THorseNewControllerCreator.GetShowForm: Boolean;
96 | begin
97 | Result := False;
98 | end;
99 |
100 | function THorseNewControllerCreator.GetShowSource: Boolean;
101 | begin
102 | Result := True;
103 | end;
104 |
105 | function THorseNewControllerCreator.GetUnnamed: Boolean;
106 | begin
107 | Result := True;
108 | end;
109 |
110 | class function THorseNewControllerCreator.New(const AModel: THorseNewControllerModel): IOTACreator;
111 | begin
112 | Result := Self.Create(AModel);
113 | end;
114 |
115 | function THorseNewControllerCreator.NewFormFile(const AFormIdent, AAncestorIdent: string): IOTAFile;
116 | begin
117 | Result := nil;
118 | end;
119 |
120 | function THorseNewControllerCreator.NewImplSource(const AModuleIdent, AFormIdent, AAncestorIdent: string): IOTAFile;
121 | var
122 | LUnitIdent: string;
123 | LClassName: string;
124 | LFileName: string;
125 | begin
126 | (BorlandIDEServices as IOTAModuleServices).GetNewModuleAndClassName('', LUnitIdent, LClassName, LFileName);
127 | Result := TSourceFile.New(FModel.UnitContent(LUnitIdent), []);
128 | end;
129 |
130 | function THorseNewControllerCreator.NewIntfSource(const AModuleIdent, AFormIdent, AAncestorIdent: string): IOTAFile;
131 | begin
132 | Result := nil;
133 | end;
134 |
135 | end.
136 |
--------------------------------------------------------------------------------
/src/Horse.NewController.Model.pas:
--------------------------------------------------------------------------------
1 | unit Horse.NewController.Model;
2 |
3 | interface
4 |
5 | uses System.SysUtils;
6 |
7 | type THorseNewControllerModel = class
8 | private
9 | FRoute: string;
10 | FGet: Boolean;
11 | FGetById: Boolean;
12 | FPost: Boolean;
13 | FPut: Boolean;
14 | FDelete: Boolean;
15 | FControllerName: string;
16 | public
17 | property ControllerName: string read FControllerName write FControllerName;
18 | property Route: string read FRoute write FRoute;
19 | property Get: Boolean read FGet write FGet;
20 | property GetById: Boolean read FGetById write FGetById;
21 | property Post: Boolean read FPost write FPost;
22 | property Put: Boolean read FPut write FPut;
23 | property Delete: Boolean read FDelete write FDelete;
24 | function UnitContent(const AUnitName: string): string;
25 | end;
26 |
27 | implementation
28 |
29 | { THorseNewControllerModel }
30 |
31 | function THorseNewControllerModel.UnitContent(const AUnitName: string): string;
32 | begin
33 | Result :=
34 | 'unit %2:s;' + sLineBreak +
35 | '' + sLineBreak +
36 | 'interface' + sLineBreak +
37 | '' + sLineBreak +
38 | 'uses' + sLineBreak +
39 | ' Horse;' + sLineBreak +
40 | '' + sLineBreak;
41 |
42 | Result := Result +
43 | 'procedure Registry;' + sLineBreak +
44 | '' + sLineBreak +
45 | 'implementation' + sLineBreak +
46 | '' + sLineBreak;
47 |
48 | if Self.Get then
49 | begin
50 | Result := Result +
51 | 'procedure DoGet%0:s(Req: THorseRequest; Res: THorseResponse; Next: TProc);' + sLineBreak +
52 | 'begin' + sLineBreak +
53 | '' + sLineBreak +
54 | 'end;' + sLineBreak +
55 | '' + sLineBreak;
56 | end;
57 |
58 | if Self.GetById then
59 | begin
60 | Result := Result +
61 | 'procedure DoGetById%0:s(Req: THorseRequest; Res: THorseResponse; Next: TProc);' + sLineBreak +
62 | 'var' + sLineBreak +
63 | ' id: string;' + sLineBreak +
64 | 'begin' + sLineBreak +
65 | ' id := Req.Params[''id''];' + sLineBreak +
66 | '' + sLineBreak +
67 | 'end;' + sLineBreak +
68 | '' + sLineBreak;
69 | end;
70 |
71 | if Self.Post then
72 | begin
73 | Result := Result +
74 | 'procedure DoPost%0:s(Req: THorseRequest; Res: THorseResponse; Next: TProc);' + sLineBreak +
75 | 'begin' + sLineBreak +
76 | '' + sLineBreak +
77 | 'end;' + sLineBreak +
78 | '' + sLineBreak;
79 | end;
80 |
81 | if Self.Put then
82 | begin
83 | Result := Result +
84 | 'procedure DoPut%0:s(Req: THorseRequest; Res: THorseResponse; Next: TProc);' + sLineBreak +
85 | 'var' + sLineBreak +
86 | ' id: string;' + sLineBreak +
87 | 'begin' + sLineBreak +
88 | ' id := Req.Params[''id''];' + sLineBreak +
89 | '' + sLineBreak +
90 | 'end;' + sLineBreak +
91 | '' + sLineBreak;
92 | end;
93 |
94 | if Self.Delete then
95 | begin
96 | Result := Result +
97 | 'procedure DoDelete%0:s(Req: THorseRequest; Res: THorseResponse; Next: TProc);' + sLineBreak +
98 | 'var' + sLineBreak +
99 | ' id: string;' + sLineBreak +
100 | 'begin' + sLineBreak +
101 | ' id := Req.Params[''id''];' + sLineBreak +
102 | '' + sLineBreak +
103 | 'end;' + sLineBreak +
104 | '' + sLineBreak;
105 | end;
106 |
107 | Result := result +
108 | 'procedure Registry;' + sLineBreak +
109 | 'begin' + sLineBreak +
110 | ' THorse' + sLineBreak;
111 |
112 | if Self.Get then
113 | Result := Result + ' .Get(''%1:s'', DoGet%0:s)' + sLineBreak;
114 |
115 | if Self.Post then
116 | Result := Result + ' .Post(''%1:s'', DoPost%0:s)' + sLineBreak;
117 |
118 | if Self.GetById then
119 | Result := Result + ' .Get(''%1:s/:id'', DoGetById%0:s)' + sLineBreak;
120 |
121 | if Self.Put then
122 | Result := Result + ' .Put(''%1:s/:id'', DoPut%0:s)' + sLineBreak;
123 |
124 | if Self.Delete then
125 | Result := Result + ' .Delete(''%1:s/:id'', DoDelete%0:s)' + sLineBreak;
126 |
127 | Result := Result +
128 | 'end;' + sLineBreak +
129 | '' + sLineBreak;
130 |
131 | Result := Result + 'end.';
132 | Result := Format(Result, [ControllerName, Route, AUnitName]);
133 | end;
134 |
135 | end.
136 |
--------------------------------------------------------------------------------
/src/Horse.NewController.View.dfm:
--------------------------------------------------------------------------------
1 | object HorseViewsNewController: THorseViewsNewController
2 | Left = 0
3 | Top = 0
4 | BorderStyle = bsDialog
5 | Caption = 'Horse - New Controller'
6 | ClientHeight = 395
7 | ClientWidth = 447
8 | Color = clWhite
9 | Font.Charset = DEFAULT_CHARSET
10 | Font.Color = clWindowText
11 | Font.Height = -13
12 | Font.Name = 'Segoe UI'
13 | Font.Style = []
14 | OldCreateOrder = False
15 | Position = poMainFormCenter
16 | DesignSize = (
17 | 447
18 | 395)
19 | PixelsPerInch = 96
20 | TextHeight = 17
21 | object imgHeader: TImage
22 | Left = 0
23 | Top = 0
24 | Width = 447
25 | Height = 134
26 | Align = alTop
27 | AutoSize = True
28 | Center = True
29 | Picture.Data = {
30 | 0954506E67496D61676589504E470D0A1A0A0000000D494844520000018E0000
31 | 00860806000000CA206DA5000000017352474200AECE1CE90000000467414D41
32 | 0000B18F0BFC6105000000097048597300000EC300000EC301C76FA86400002D
33 | 264944415478DAED9D0B541457BAEFFFE7E60AC7E0230F8DC90575A51317A883
34 | 8FC1233E2E3EC6D611CC04650811D00163448D30198C06C6070EF808243E0714
35 | ED8408477C8428912488493AA3C2324AA21395516125D3B9519848F44451192F
36 | 70987B773D1AFA51555DD574374ABEDF5A33C1EEEA5D55BB767DFFFDF8BE6FFF
37 | DBFF63802008822054F26F241C04411084164838088220084D9070100441109A
38 | 20E1200882203441C24110044168828483200882D0040907E126EA51FCFA22AC
39 | A9E4FE0E45E189040CD7F2F3EB657825D2800AEEEFE80C542D0AECEC1B220842
40 | 8484837013241C04D15521E120DC0409074174554838083741C241105D15120E
41 | C24D907010445785848370131E168ED65B30551A71E088119517EA616A103EEE
42 | 39A01F82C787237EA61EC39FECA6F29C13B0E3B3648478091FDFA82A43FE7B45
43 | 28AEB8853BDC07BD83B0257F15F48F393E3F7A3F82C14FF6C788C9633165FC58
44 | 040F78C4C17DD4E3FCA765D8673C818A33E6F3B132868DC2EC17231111D8CF33
45 | 8F8F201420E120DC84E784E3CEA5BD484E3D88CA06A502BB61F07309D8B2540F
46 | DF871C9DD31FE9073311F1D82D54EC4C4572513D9AAC0ED4E39DBF2C41B0584E
47 | D37725487D351F46C5F30BE85ECA44519C3FBC9DBC8F9EA32291B72E1683BB3B
48 | F75408C2159070106EC233C2D15465405462194CFCBFBAA1CFB8B148D04F80AE
49 | 37F7EF46D45D2847F1E1B3382F1A63EF71092859172A2D1E6DE7EC87157B3661
50 | C89144CCD97F8B2F77F8B489087E4A1CB1741F86E8E831E8C3FDDD508E9417B7
51 | E0C83DE1FCC1E1518898F0341E3797D9FC23AA4F9F42F1F12A360AF1C38A7DD9
52 | 88F6757C1F56E5B0322A0EED46C19916E11E9E0D475E6E3C867B75F633267EAE
53 | 9070106EC203C26169B4BBFB6345CE6A443FEB637F5C6B3D2A7252F14AF12DFE
54 | 9FBA05992899E3AF78CE88283D2A8B8CB811C88C742633D23DA42FB3AE2409D3
55 | 37D7B2BF1E415C4E0E9605FA408E3B75F5F0F2ED673FDAB8771A1B666561BF78
56 | 1FE9796CB463272E8D301D5A8BA83FD7F0A31FD97B20080F40C241B809F70BC7
57 | E58239887AB7115C0F3DFACDDD58112C6FB439F128FEA3F97AC4A9A8BE0AE7E4
58 | 18C0AEDBC0AE5B615AE8FCCE596C54C215198B124324744ED4D4E5C279887A9B
59 | 13351FC46DDD85652365EEA3B516FB1393B0E112F78F206C295D057D0F0D2722
60 | 081741C241B8094BE1E82052C2D1CC7AE9CF8BBDF421F1389A1B0E5F07C5349D
61 | D982F1AF95F33DF6C1BFCF46D16FFDAC0FB0120E1F24190A91E0A053DF261C18
62 | 831D475310A275EDA1B50A1B67A4A140E57DDC284BC5E4CC1AFEEFB0F442644D
63 | F251751A827025241C849B70B3705C3260D4E23279119082139BA94C6CB8BF83
64 | 1370ECCD50619DC28CA570A81C41DC39BE0EE3D69CE5FFF61E178B3D2B233158
65 | CB28E0DB7C4C9F5F823AB5F76171BC775C06CEBC446ECA84E721E120DC84A570
66 | F8212C2E102A4C7B3B774C282DAEE10DA49470DCF894F5BCD70B3DEFE8378BB0
67 | 22B89B8A421D4C9F5908876AA3CC4D81AD4AC29A2F84856B74F741C8CC582C54
68 | E3FE6B731F715B3FC0B2910E7E60296EE12938B3748CA4871641B813120EC24D
69 | B8778DA3EEE3D730FD2DC107292E87195C951DEFCAEDB3F07211F797C43A87C5
70 | 394352776247A8CA9889D65A1CD9BC0E691F5BBBEDF61C12848573631011AC43
71 | 4F191760CBA927CD488D9A08C2039070106EC2BDC2D1BEB6A04D38DA7FE742E1
72 | 1069BA761607F2F2B1EBD35A2170CF4C6F3F442F4E46D2347B01B1BC0FCD9070
73 | 109D040907E126DC2B1C963DF54E1F71D8D25C8FF39F1FC4AEBC13A8B8DED2F6
74 | 31B706529416099DC502BAE5C829FA8D42240DD5709E87BCD0B3879A293A8270
75 | 2D241C849B70B370B8798DA343C261799D67F2919A51D2160DEECBEEA584DD8B
76 | 795DC24A00D5AC7110C47D000907E126DC1CC761E15DE4BB201347D504C3597A
77 | 558D8CC7D1AD36AEAF6E100E9E7B55D8989086822BDC3FACF36039E51D46109D
78 | 0C0907E126DC2C1CAD3530C4A422FB1AFBDB3F1225B9B1D03DA45CA4651C87A4
79 | D8B84B3860392565334566198FA2F23E08A2B321E120DC84FB23C74D879210FE
80 | 672EDD473784A51B90354921F3AC55E4B84CCE280F0947D6079908B3C8AC6B19
81 | 011F929AEDD2F312843B20E120DC84077255594E0175D721697306128648E5AA
82 | BA858A9CE4F65C557119287A29D03EFEC15DC271F72C362E5E275CA75474B865
83 | AE2A3C8288D4D558364DDE855748E17E15DEE3021D46CB13843B20E120DC8487
84 | B2E3D6E463FEAB25382F66A71D3C250CB3F5CCA08A6B08FF55578E8FF79C6AF3
85 | 6E52971D57BD709C2F9887F5DF0C4388AE3F9E19C665B3F542DF813AF46DAEC5
86 | A51FEAF9ECBC078ACEE2B2280A728910B9ECB873979789C7B1EBECEB8F88B051
87 | 1831AC3D436E757535CE9D3C8B8A6F1BD1E44C9D12848B20E120DC84073772AA
88 | 33624D9A01C5DFB62814A8653F0E0DC2A1360EA37B3F36924847FA24F9329BBE
89 | 2BC38675BB1DDC87B93C56A747493888CE81848370139EDE01B011A6CA329B1D
90 | F8BAA1CFB3FD317ABC1E31615A7600D43055D56042E517A7F0F9C90A9CFBE12E
91 | 4CFC684084DBB96FD03308D18723624AFB2848F93E5A5077C988E20F8DA8F8FA
92 | 2A2EB7C58170F7F218460C0D41C884B1983A52612A8B20DC0C0907411004A109
93 | 120E8220084213241C04411084264838088220084D9070100441109A20E12008
94 | 82203441C24110044168828483200882D0040907411004A109120E8220084213
95 | 241C04411084264838088220084D9070100441109A20E1200882203441C24110
96 | 044168828483200882D0040907411004A109120E8220084213241C0441108426
97 | 4838088220084D9070100441109A20E1200882203441C24110F70BD7CBF04AE4
98 | 09E80F6622A26F675F0CE1143F9367E832E138BF7316E6EC57776C5CCE075816
99 | D8D9B7DE05A92BC1CB8BCB1196BB0911BE2E2EFAE3D7F0827102DEDF1A0E1717
100 | 4D9879D08C4EF3596C8CCC02D2F762D9C86E0F4ED9EE44F619B6A0727B2C9291
101 | 82634B82E0DDD9D7D9415C2B1C4DC9F8223EC8E1B15E3D7CE0FD5027DDF1D7DB
102 | F1CAB548EC08EDD74917E046AA0C084C2C738B300B1D8350149E48C0F0CEBE4F
103 | 17C389E2FE819B3ABF33F3A009077FBD062075A7EBDF277796EDF63A917A86F5
104 | 287E7D11D62001C7DE0C459F0E9F8895F787123CB3B573DE47D70A073250B5A8
105 | B3DF3E653823B1FEA1D71FACC6A8FAE6B811C72944E46522CCC586871F719CD4
106 | E3C3375CD1E8EF2F2AB7CF42C584FB6014FCA009073F2AC88177A6014943DC31
107 | E27053D9EEC4C1886343F7D5287A29B0E3238E56563FBF3A8BA99DD491FB9909
108 | 470B2A364761FFE007AC1743B8915AEC4F48425D120907E1023CF50CAF1C44D4
109 | DC9FB09284C30334D7A020311595B3483808910623D63CBF1D3DEF877537128E
110 | 071F0F3DC33BC7B3306ECDA39D36757C5F0847D3B51A7C5E79049F955E4065CD
111 | 2DDCE13EECFD088283F55890108B60B90770B716151FE5A3C0588D73DF36A289
112 | FBACBB0F060FD061C4E4B19831598FE14FB261EEDDB3C84EDD82822AF1185B82
113 | 5D35EF2870A3AA0CF9EF95A0E2423D4C0DE2350D0DC08CE805983DB29FCCFA4E
114 | 15364EDC0B1DD7E01E6B84A9F230761D32A2E28C757DC4CD9D8990013ED22796
115 | 6DB4526557E0CB8BF5B8714FBCBE5163313B261611431E91BEA7B2544C3E3651
116 | B19EEE5C2947F19E12947E7D1597AFB7B04FBA41E71F80901763B170923F7ACA
117 | AC6B716D67D74041CCA5CAE8F32CABBBC817103F2D107DE4D6C65A6FC1F4F529
118 | 947EC2EACCF6B731F1ECFC3AEBF3D795213975378C575AA4CB8B966ECBE6EB2B
119 | AE3409CF564D3B3573D7842345FB507C8CB5F32BEDD737F5F970243C17843E3F
120 | B9D6E8F0CFECFB58FE3EB8EBDE6FD887FD678467EEDDB71F42F4914898A3C7E0
121 | 1EE6F65385E243EFA3E048557BBB65ED223E3E1E61CF4AB539AE5DA50112A26B
122 | 796E73B9074E56E3B258DF3DD93B1A12168EDFCF9C00DFEED054B6657BB95155
123 | 0243FE617C2CBE2742B931581E15D4D6568467F63EF22B6A85F6AEE699B5B6A0
124 | EEDB13282F2DC7075FDB5EB775F956280887928DB4B319FCB9FA61484020A64C
125 | 0EC573C142FBAD2B4BC32BB9556DC7D8E229C7A3CE178EBA12CC89D90B4C0B43
126 | 0433F6C143FDD08BFB9CBD649F1DCEC786A29F303B278755864DC3BDC61E50BC
127 | 01E786EAB1ECB7133062900E7DBD80DBD7AA613255E1E35266400625E2D8AB63
128 | E0CD1AC19DBBCDEC474C409EDF02D3EF37618BDE62C4F190177AF670C13C6A6B
129 | 3D8C6FA522F9B837C2E22211333E10BADE3DD0D460C297274B905F7016B5C1F1
130 | 284C0D87CEEE65E15E94B5F0CEC9C633079390563B0C4931A1181D1000BF1EDC
131 | 7D9D45E5B1126CDC7F15BA056B9137C7DF7E9E545138D84BB87527744549D8F0
132 | A37CD92352B3254763CAC2D188CB856998FB36FB7DF43CC44D0EC488271FE585
133 | FDDC05230A728D38D7578F2D6F2D41C863726D67158E0E7C1FE1DB6E610AABBB
134 | 885F0660886D19431350B22E14BE762F6C0B2AB7C56249850E1173F5983152A8
135 | 77F6635CBF684476EE4154F8D9FCD6DC26589D25CF67A2FA462192865A14E9E5
136 | 839EDDADEFD1549285399BAB3184DDE382B05F6208FF6CABF1D97B6F63D3C74D
137 | 98BD95B5D391D2A2DE5465C0DCE565A8E5DBAB5E6CE737517BB10AA51FED45F1
138 | 8F1390BBAA3F76C5BB5838CA27A270F2292CCE6944C4E270CC1816C49E39AB97
139 | 2B5530E61B90FD4D00B2F23230E51ABBBE95E5E813168B68F1F971F756FED13E
140 | F977D09170B0F65232F72A92138DE8CBB58BF1FEAC53C73A4ECDCC385E38857D
141 | FB4A70A4598F4203EB354BBE0FF2C231DF2B0579C8C7E2937E5818138E9061DC
142 | FBCFD5E7591CC8DB8B5284212F371E7D8EA7E1859C9B08890E6F7B1F6F5F3B05
143 | E39EBDD878A61FD2F3595D3F695F77752549989E0784CD0CC373E3C5F6CCB8CD
144 | 09F0AEDD286890B96ECDC2D1C83E4FC49CC382CD686BF75C1D7D6FC2A5F2721C
145 | 387E13B373B311CDB933DE6BC41DD66C6B8D6988FAB31F767C98801196CDD643
146 | 8E479D2F1C8C265611DE5ED2DF5D2E9C87A893337134D7D20DF4168EAC99873F
147 | 3FB10A254AAE6DADEC7F5695283446935B3C35C406707218766C4B963490DCC8
148 | 67E3E27538C08CD851BB4566E1DA2A06B01EFFF844142E0892ECA1DFF9DA8039
149 | 7F3022F8CDDD58116CF3223B108EE2DEDDD0372C45B6ECA6CA2D18FFFA4D647C
150 | 9881B0DED6DF2909471DFB2E7C1BF05AEE6A443F2D61385B6B51BC6A29D6D4B2
151 | 972D8FBD6C36CF9A6F3B47BAA1676F262EB90908EE615F04EE9DC6865959B8BE
152 | 7C37B64C91181535B31EA1978CF8379423E5C51CF45EB7172B46D91C237AEFE8
153 | 1CF4D46E7C9A8AE9EBEB65C5C15C07197B241C13B873CC35A06E66068A16492F
154 | 8CD67D9C8A174A1BE177C907B35D291CDB4CE8E9AB476E8E8491631D9DE23F2E
155 | C286870231FAEB6684E4650AC6C906D3A124841705A1685F3C064BBC4FB2C2C1
156 | 9DDB4B8765B999D2EEE1AC5DEC4F4C42C1984C1C8DF3B7F9525938B8F6D267E8
157 | 3C144A7524EEB1F72C7E1DCEB1DEFA9DEA7E5891B744A24D35A262F33CBCD290
158 | 802FD2F5E869776D2D686223424923DC5A03437C2ACA23B35118EE67FFACB508
159 | 474D3EA6275423E13D690113CE071B3B26D66FA6EEE73D55A588F8209EFB80BD
160 | 906DC6586854CD9B3E6086404B616E148E6FF3113EFF0466E4ED46C2B30AC75D
161 | 398839738B306493AD1113AEADE0C95014EEB137AE965C2E9883A8D32FD88829
162 | 1C0A47C193E1122FBF25C2427145E46EEC98666D9C65854334CA4835206BD223
163 | 904534FC9716DBBF6C82ABAF0F920C8548F0972FC2746811C2CF84E398139E5D
164 | E77746B15EEA6A9C79C9A67DAA118E6676EDCFB36B5FC0AEFDB77E3207B1BA5B
165 | 9C844DC33370C6E61D109ED74C94E44442275BF7A2BB66A53FD25D291C992644
166 | 6F92104C11AEB330EAF572F8BE2465BC45EEB2673CC38067F20A6DDAB603E1C8
167 | AC813E4D46E82DCFBFC60785476D0DA003E1D8EF8715FBB225858E836F2B7FAE
168 | 573E3F7B67A7CFAFC5B2D255D0F78026CCA339BBB6A85138F8724AC7E2688EB6
169 | F828120E87483520E12533E83250B2488B6B9BFB8483334C734CF354AC95089E
170 | 5DAF200567968EB1B876E1DA8C0BD80B3CC75FF9647C833F8DB83D3B113DC0E2
171 | 7307C2A1A66CCE35F5E587EC9FA39C70083D4BD6804B5903763044E65FE64FF4
172 | 283130036A5577ACED1C63A2F61E1335A502BEDE8EC03F7473EA6591153E15C2
173 | 71E7F83A8C5BD38C2C899198DD39B8BAB03482ADACEE67A4A16EB9B2016DFB7D
174 | 265C2C1CFDB0E333360296EB88F0DE394508C92D42D210B992AA903D3D0D4D6F
175 | D9D69123E1E8812D8E8CF2B512BCFCE22984C94DAFCA09C75F63EDDA91258220
176 | D623CBAAC36903B7A634CBC9A9413E660AF66D51EB888395332AD184151AAFA1
177 | 6B09879AC871CD0BD1D20D889B338E4A34A2675C0AB6C605C92F9A4A94E57AE1
178 | E0827116E14048368A647BA4ED70D31E9337DB1818F3B5ADB4EFEDDBC1FB70AF
179 | C3F5F442D6CBB7983671201C76C74B20D7019033BCBCD034D98AA00C97D84BB2
180 | D8840C9B97993FE78FC9F8226D82FD9481D56DC8BCAC2AE88870F0F7F84D3C8E
181 | 3A8A9AE705BD1A0996F5CF1BC6324CB1157985FAD16A4414EFF983518A06569D
182 | 1790D051334EB67D6F1C08477E80E3CE80A3753939E1F8A78336A7AAADC89FC3
183 | 21AE120E6EBA705512D6D406217D4D22229EF55173F62E261C6A22C7A516A2CD
184 | 1E0CC6D3F8FC7C2D6EDFFBA9CD8BC18C94B740D37765D8B06E378AEBBC103233
185 | 160B7FA3C7705FA5456E7709877AC32C1CCE353A934D6F484B2316A7946CDD8A
186 | 9D78096DD1261CE2C86F988A5152DBF5EDC6609BDEADEAD1AA2363D06042E517
187 | A7F0F9C90A9CFB919DEE8AE8356646AAD3E25038C429249D8AEBE3CBDA8B1196
188 | 533AFC35FFE8B8E7ADF8FC9C438D279C5B85C3D1B915CFEF40381CB517570847
189 | 733D2E5754A0F4F4297CF97D239AAED5DB783385765C38385A6FA1B2702D92DF
190 | 35014382B0706E0C668CD2A18FC27475D7120E27A6AA9ABE2B41EAABF9A8F0F2
191 | C394C9133131F8693CFD94E0ED2320784279294D2588EE76BB3EAD45735F7F24
192 | 2C4D4474B09FC402B07B854375CF45140EEB29092D65C8BCC89D241CF6064506
193 | 1923DD61E1602F5EC5CE542417FD04DF90B188181F84003F3F3CC379F08887F0
194 | 5E28957AE785A352C57315B1EAE46819259170A82ADBFDC2D1EE41E71D380C33
195 | A68E41886F7FF80D123D3E392E1A30EE8F3EAE110E334CA8CE7F7E10BBF24EA0
196 | E23A303C3C16CBE78663B8C473F9790B07EF52BB1B589089AC993A193F7F0D06
197 | 951990CBC7F762D33639F74F1A7174BD11878537DBE66484C8183FE7A7AA847B
198 | 3C126CE3C2AD80954B247FCD2D78E72F4B10EC683A95844355D9EE168E362FC1
199 | 9CD588969B3A72D554950C4DD7CEE280E16D647FFE1342966622335C67352DF7
200 | B3168EF3EF4661CE57B1F6DE4196701E2D53B314471C7698DD3F6FD996DDB5D6
201 | 389ADF2CC28A608BA9398F0B870BD7389C150E7E817337FC143C8738F885F9CA
202 | 70278443746678D849C70FA9750F571CAB02120E6784437004A894F0FEB34458
203 | 7C77F188438236F77B9BF6FD33160E9573C7BC9F7309F45A17B0786F9133363E
204 | F1EEF3AABA5C380751275F5016411E65AFAA03D1F6EE9CD2752261603A413878
205 | 8FA34C1FBCF3613282BD94CB56F4AA72563824A7FD6C11E27E52EE39B3C6A172
206 | 91590EB1E3035B919740F0DEBAEB5AAF2A120E6DC2A132AE8777B17E7782DB85
207 | 43AEE3F233168E461833E620F9F155A85A12247B0C1FA453D2A23D945ED2CDAF
208 | 06861753712EDE0D711C7C04FCFB1891B39B5DA78281E8701C875827DFC46A8E
209 | E370877098631C6A5F7550A78EE2389C150EBE975E8584F736C90750F175BE17
210 | E7A516C7F918852DE8AB54377CAC8A017DDFD8251B192E8F10D5FEF24F328166
211 | 6D88E276DCC5711C241CDA84C3DC1EB6B2CF46CAFC4C6CCBFBEFB96871DC0152
212 | 2EF24227E3899FA3708861FDB93AECF820192112F96AB868DAF0F7EAE17BE516
213 | 422C1FEEBD5BB8E3F5886CEEA3F6796FD6BBDD136BD14B14C5AA7589E24B2CB8
214 | 1607A9F38469A305E7DF4DC09C6301D8F2560AF452464C75E4F852D908E31B6C
215 | 883CFFF50BD0E74AA49BEE0CE1801855BDB90509DB3290E0EF64E4B8B3C2E128
216 | 388FAFF32C54C00BA6A76225AE5FE84C14872904C0A17DDE7B455EA6F2265912
217 | 51BEE6CE422F99742EE6F25F286D81AEAA1B222447920698D4C4F8A87C66D665
218 | 9370B49F430CE41C94829352D3AF625B2EA8F581E9CAD80E0A470BEE34003D7B
219 | 2B7434C575E0BE2B77233DC4E2DDE23B4C464438089A75179DBB38DE5C85ECF9
220 | 69608F18CBE263A11FE5875E5C8E966F6AF0D9A1DD38706B2233C2A1A84D7DCD
221 | 3AED35D728969723645A28F46302F08C9F9F9883A61AB5B5D5283E588223DFE9
222 | B042220546D32503A21673F11F89C8F84D109FDFAAA9A11E4D4FEAE0CB1B34D6
223 | F3FB23EBF9B53A91F8D0ECDDF3D15D8C9E6999F3476DAE2A219FD490C3495877
224 | 77A2454E23219F54F987FBF89C4833D233913E49C200759270587AA1E8A68523
225 | E6F9B118CD793469CA55E5BC5795900EC48480A87948FA8D90438A6B0BE7FF5A
226 | C6EAFC027C176762E59325987C28405EF8D6D763C6D2A54898A413EBBB1EBDFC
227 | 75169D8B465CDE9F86F93BAF6248781422260462F820F3B3E1DADD77F8DC7818
228 | C5035324A71A6F546EC72B6B4E00E3C2113F4BAC1F0839A32A3E38885DDFFF12
229 | B93961B8F46A0EBCD7DB3C3F7E6DC888D939459A46DD241CCE2D8E0B36A20C08
230 | 89C4C2B9131122BEC3972F96B3B67C02B77FBD143BC26A994197486BAE493884
231 | 7ADD78270811D32D3CB7F83C55B5F8FB9923C83E5C835EA129C84B1C6313AB56
232 | CFEC5412526A83B0E2F5583C3780CBA57513B53FF5C0E0A71DAC91BA804E77C7
233 | E502602A8BDE46F6A10B386F95D1D49C515518259C9B65F170B94CA895461C38
234 | C20C52F54F622654C09C8D3578861EB3A74C804E66B470E3EB7CACCF31A282CF
235 | A8CB9D6F2232B631A3C61D2F2E3C9F5BAABC38A6C49D1A2376ED39689D1D7754
236 | 1066CD8C41F428B9E91C8B463C443E3BAE6246CF4E130E01DE13246F9F7576DC
237 | 51C3A00F8B41FC249D6276DC8EC671DCF996D579FE5E1457D8D4D7FC28047319
238 | 92B91E9AA11F0AE584AFCC800DFB4EB565ADD58D8AC2964DF66B1ADC3D16EF2B
239 | B1CA98CA9D6BF0A06710A20F47C49440B10322F57C6CB3C4DA66FEE5DAFA5ADC
240 | 5E6CFDFCB84DB4A6E7F8A95A47D2FACC483864DE8BEB675160C86FCFA86BCE14
241 | 3C371661FE8F88535AD588E9E05455D3B52A941E611DDDD37FC72573667008D9
242 | 8B478C1C83B0E7431111286333EE99509CBB1D05C72D3235C7ADC63BBFD5BC12
243 | A71997094797815F543F81590A7970DC4307A258892E8CB0389AFC500A4EBEAA
244 | C2738D203C0009870DFCA2D3912097EECFA10E120E420A6E0D66356EAFD2364D
245 | 4510EE8484C306CE83E14080E38474AE8784839080F30E7CF5265E53CC6A4C10
246 | 9E8584C30AD6BB9B7B04C3F3B4CD25BB860E0887A7B61CE572EA14E558AD47E9
247 | FC2762D966717D887039DC08787143BCD3EB6D5A50BD2EE1044DDF19919DD7BE
248 | 06C5CFE147BFEE91F978C2F59070DC37DCEFC2710BC68C04247F138415AFBE80
249 | A983C49DDCBE6981EF387F0F4FEB11EEC06DC2C1EF5573043DE312B0F2D763C5
250 | 5D27AB51DB3D00C103B4C6C510F703241CF70DF7B970F0018E46CCD893ED383D
251 | 38F140E21EE110B7F56D5D2A1D17413C909070DC37DCDFC2C13B0DE4FA39DE5F
252 | 817860718F700801967F5FAC320128F14040C2D115F08070B873FE9BB83F70CF
253 | 3326A78FAE08094757C003C2C107A195EB4938BA306E110E31A09684A36B41C2
254 | A109154912C53DA6BF5CA090629D37F446E8A512F3DDAD45C547F9283872C122
255 | 8A791822A217204E2EEADC52381EABC7F94F0F22FFE02931325EF060E1A29AE3
256 | 7F1B2AB9298C2C7546A46C3E882F2FDAECA427D29E7892EB55EE854E14AE1B67
257 | F2B17EDB1118C5C8EA9EE129F864E998F6F41DE61D1F4BCBAD22B07B0ED02124
258 | 2C06CBA364B602E6EFF32A1672D1BA5C3D1D3220FBA36A214ADD1CD91B1F8F30
259 | F31E0AAD625DEC3B215E8B392B413C162A44B25BFDB6AD1E157ECB4711E7A0AF
260 | 524A1031DF949F52965C7EFFE9166C97D8BB43D8ACACC43A2ADF3F00212F9A33
261 | 2C4817C98BC1F7B142B4F25D138A0D5B90FDA9391ADA0F2B0CED6B560E85E31E
262 | 7BCE096BF1E5E4D5D8F352A0C27A4523CE176661FD27D5763B79F248259B34D7
263 | F70767505963E1793532A43DFA5FBAD2B4B53DC225907068E4FCCE28CCF93151
264 | 7E7F6CFEE52F43D39078D914EB72EB05E6DD102B07E9B12C3A141344CFA54B5F
265 | BC8F4DB9A7D13473150A1704D91B09B370E4C7A26EDD5A540C0CC36CFD5831CF
266 | D54DD45EAC42E9A1DD2838E38308B93C575230037FE76E33FF27BF835EC55814
267 | A587C22C87ED1B16995FDED578E65022E67FF50C92625EE0738F793798F0F7D6
268 | FE08B6C89FC327B7CC03C26686E1B9F1423E2F8EDBCC38EEDFC5AEB3418F4203
269 | 1307DB7C5EE6FBCC99888A95BB71276C1EE22CF3811DCBC7BA77AF22382D1B5B
270 | C6FD88ECC4B5287E6222927E23E6FCE2EAF24C19B2B719716766866C2249FC74
271 | 1A1B976FC6010C6BBB0FBE1ECF18B1695B09CE0D8D47C93AF66CDB9E83E30DAD
272 | 8434D835F08E908F00E753F39B126CDA5623FB3C0D73DFBE8A11D1EDF70B9579
273 | C0DA8463662D9F2CAF79E63C2C08E3F279B5A0F69B9BE835AC3D458AA27030D1
274 | E0EAD3F81FABE5EBCDB22DDF6D443397F051DCC1136F142269A8F8A5EDF6D1D7
275 | CAB166F916947A05B1FA0E47C8301DFA7AB5E7F192DBCC48405BDB235C030987
276 | 46840D5C801D9F25234422D683139614E831617F159E964C5B22A69078D866DF
277 | 0DCE28CE35A04E4E1CCCBB252ECDC68E6936865FDCEBBA6E40337C631432B072
278 | D986DF6AC46B4E784629F746B997772D9AA327A2F27B3FECB032AA123041E27A
279 | F0DE52C7B4B2515D7C2ACA23257285893B089EEBFD1822D66F62BD7BFBC556EE
280 | 1EA7E700FA9126348DD98C1D52F10F7CB6DAC398209559544CBC59E0672B0E22
281 | 7CAF3B0D159399F058F4BAE5F61A111084A552178AEF0EB3FA97CC3925BDAB63
282 | DB6E7412093B85FA52CE3C2C3C371DE2700A88CE514C0B2FFB8CD968A0785512
283 | 367ACDC3FB69A1CACF56B26D28AC7198EB739454223F01F36646BE2B25DABED6
284 | B647B804120EAD284D4BF0D35459E8B52D07BAF7E6A1F83FA4A6B484E9AE1B4B
285 | 2DA72CC43D1BAAA35092C30C8F4CC317D2D007A2B0941908CB63C469908A6047
286 | 197D0503B6C1577BDE23C7C2C18C2D0291F56106C27A77AC8AF97395B373BD21
287 | BDE9D2970ABD76F3C649FB9F0C47916CB4B5903873A3CE7E84E028D53F47D399
288 | 2D18FF5A3D5658AE2929EDDEC75FF7293CF7612C6A1364D287F0ED6A1F46ECD9
289 | D92EEAFC3E204C05530DC89AA4D06B56D8EBC43CD2F17D49396DBCEC33E6323E
290 | E72423F91A6B9BEBB48A0687B2705C2E9C87A84F26A2285F3932DE742809E16F
291 | EB24123DBAB6ED11EA20E1D08CBCD1E1A7A9960379CCB0FB7E2A6368F9248ACC
292 | C058EEF5216E1ED39CE620D589CC9EDD66830A153B1B3A1A31C9A146380E44B8
293 | 28119FE27ECE0ED609C49EFBA6316C44F792FC6A2CBF6D71F36A9B0CABEAF6E6
294 | 30AF6399965A6EF32BEF766A5977756C443A1FABED52AFF3CF65F3A356D397FC
295 | EFB6E9EC3B0A12C88D7804E168C40A15493BED9FB1B0AFCDFCAFC6222F4762EA
296 | 50DDC394170E733D3ADA048C4376274517B73D4215241C4E20B795E8794BA3C0
297 | 07CC9DB2DB9447D2007FBD1D817F30215D69173B1E99C57995DB5DF2F03B23BE
298 | 8FD17985487856E33D3B100E55FBA5AB4151384A1062D92BB7432E05B88AFBE1
299 | EB261F014ABBBFF1881B823D619D229B5FFFFAE7529B2D81ADAF871FADACF2E1
300 | 3B179662705E42505CB19F7B9BF81C75BC539C6D9DF0D364FB74C833382B1AFC
301 | C394170EBEBECB3045F1799A11F6C9491B64DB217071DB235441C2E10C52FB99
302 | F33BD16D86D75BE669086127B12F232D471182C1310CB5F6B852BF7FB0CC22AC
303 | 16775CB1E7E6A5D13D528D706872B96CAEC7E58A0A949E3E852FBF6F44D33571
304 | EF9236B46DCB695B474E0987AAFDCB05F8BD157E4CB65AC8E6470D6B7CAC4708
305 | B61D08BE9DE4A0CF36CBF515A9E94BC70BEE56C88C46B5B8D85A1EDBC4894666
306 | 0D66BC5188F4711D09DC53681B7C7DFFA87AA74DBECEBF4FB099C2A43891CE80
307 | 84C329ECA725A47A92FCF4C185C8F66D6AF9A1F95AE02DEB396EF33CB46AA26D
308 | 36B1D114C7E1DC8BE63AE168DF2DD03B7018664CB5D8F9CC7CC84503C6FDD1A7
309 | 9384A34C7DA5D8AE29F1538E063C63319AE3D74C4E86591C273847AC7FDC623A
310 | 4CF2BED4DD8775DDD88F3A9D118E92B95791BCDC841193D8355C1C2BEDE1A61A
311 | 47C2E168B3A57678E130D9AEE391707406241C4E623D2D21E6E3F1B699BBB65D
312 | CFE017506F62A5CDFA02FFC27E32CACAD555112F1FF4B47C911FA011479B9750
313 | CE6A443F2BD393559CAA72B7703462C7870918A1A6526CDD4AC5731F08368F28
314 | 855167C5F3D6D762BB9EC1BB67EF0BB099FAECA411477E3D743D0290B43E05FA
315 | BEECFA1393B0E9A9641C93733F77088D38BA22241C4E62F5F2CB8C24CC0BB5E7
316 | 628491093F02B918631703222C58FBA8EE79D921B7682E85A679E5765C231C55
317 | C89E9E86CAC5CADBF2CAD687BB85436A0A522356CF58EE7A79F1CE411F7E6422
318 | 8E409EB0170897AD7168128EFE78276F0982CD86DCEC06FE6AB6BA918F1D9E59
319 | E320E1F02C241CCE62E93ED9D0EE4D65EBFDC21B92EFE3D9CB1F888A8C39D22E
320 | BAAA167D15D0E05575E7F3348C7BCB4F95A78E252E110E958BF8970BE620EADD
321 | 099E170ED1CBA7395DC96BCB0116A3CAC19FCBD5992016D903B99149A3EC0E7F
322 | FC4824D347D55EE38A5E554EAC71581ECB5DC7E435F54EC5FF28B70D61CAB73C
323 | 26DBF17E230EBCAA48383C0B0987D388415D618558F85FAF21EAFA123B174B1E
324 | CE90243623AB34089FFDEA6DF84A8A83B0D7C5C6C75350B22448BB4BA1398E63
325 | D292F6F514295AC5A98700F7C471387C7945B7E3BE4A5E4B624CC2FE7B9DB038
326 | 0E31AEE0C24C1C7DC3C94032732C4F0E1B017E1885FD83A5AFA36D8BE2A5CD48
327 | 7DD1843829F7687E213D0BB58EDC551DC571745038CC6EB9734E3AB3DEA1DC36
328 | F835A07D8128DC631FBC6889A3380E120ECF42C2D101B85E5E5443385654EF86
329 | 69AE5C9E22AE57B516889F0963FE5DA4CBA525374F09246EC68EE7147A5F5C1A
330 | 07C9942347703BB01EBD66C84D2934B2EB5D8BA8B7818C3D9908D33815E39AA9
331 | 2A61CE7FD3A014E9BD19C428E8825A1F98AE8CED14E1688B641E2F13C1EFE859
332 | 88A389FD8313A0DB7602BA3D32D7CA8B683982537DB0E6AB20D91436373E4DC5
333 | F4CD2D48D89681047F6723C73B2A1C688BE82F1D9FA12AE5483B0EDA8618A96F
334 | 1C9A8C1DCB27488AB5E3C871120E4F43C2D111B8D1C44A23D030818D28E4A77E
335 | B81C44C91FB1DE5570A2E27C7553CD5E2C597E1097064D4052D8048C0808E077
336 | 4BE3F2125DFAE12A4CE546183ED561EB510983BAB211CB363F8DD257B3503130
337 | 1CF1B3C662F4807EEC5C7771FD9BBFA278FF6E145CEC8F243903E400572D8E37
338 | 5D32206A71191012898573272244CC3375F962390A724FE0F6AF976247189757
339 | E927ACEC0CE1E0E07227ADCC412986212E7202260CF587AE770FDE85D8F47D2D
340 | FE7EA11CC587EF22224FFA3A845C64D5F01D188B4259832D06925EF441AFA84C
341 | F98498165E68BA69E188795E7CAE5A7255B94238F87A51487B238B8AB661CE0D
342 | D6A0C3ECF96198312C88B57B2DB9AA48383C0D09478710E6680D9333A4A7A9CC
343 | F0F3DE25189EAE62331B669C2ACBF6E140E985B62CA14226D4FE0818A3474C98
344 | 1EC36D3385720675CFA3D8C28952AB7D765C3EEBECE450C447E931D8C9BDC15D
345 | 1AC771FD2C0A0CF9C8AF3067691533DBCE8D4598FF23626FBC1A319D251C1CAD
346 | B770F9F861E41F396D911D98CB90FB18460CD52322528F9001320167E294DC1D
347 | 076B4EBCC0ACA946928A60CCA66B6771206F9F7576DC51C3A00F8B41BC42A65F
348 | 970A07CC232060457EA6836055332ADB065FDF7B6178CF3A3B6EC8383D66CF8D
349 | 4470DF0E964FB814120E8220084213241C04411084264838088220084D907010
350 | 3F5FAE1D01D67C09A4FF0950355F7F9F944D109D0C0907E15978835A22F36537
351 | E0D1EE806F30A01F0FF83F05FC0F775FCBFD2A1C2DC0CE64F6DFDF018B46BBB1
352 | 1208423B241C8467E10DEA4960690AF094CD7775D5EC7F57802FD9F7DFFF13F0
353 | 6607BCBC1418D6CBA953A9BB96FB55387E60BF67BF45382B23CC3DF74F104E42
354 | C2417816B506F5261391DDBB801AD6F39EB912087D4AED195C7F2D9D52B638E2
355 | F05E04CCFB85EBEF9D203A000907E15934195436EA3030D138CBFE5CF2261B79
356 | 38993FCA25D7721F954D109D0C0907E159B41AD47FFD201CDB32155817E9DA35
357 | 0F120E82700A120EC2B3386350FFF69F40F64960D12E402E39E2EDABC0C7FBD8
358 | E884FDF7AE10598D27FB03A1F381313271D0B2D7F235B0B044F8FC89DBC0C952
359 | C0C88EBBF64FE1EB6E0F030347035133D87F7B392E9B2BE32FEF03157FB32F63
360 | 7638D0FF61E9320C0BD9FF2D021214F7B125088F43C2417816A77AE2D540F216
361 | 202819981360FFF5B70781AD9F018F3303FBDC34C09F09C5FFBDC10C3533FE46
362 | F6DB914C3C5E1E6D3F5A51148E9DCC66B3CFCBD603379900FD7A322B979DBB37
363 | FBBAAE8A95CDCE77968D864292D83549AC4198CB5ECE8461172BEB61766DFAFF
364 | CDCA1800FC7B33F07FD839CA3E054CFFCDCEC3CE3152423C483888FB14120EC2
365 | B338251C6C04919D08343023BC2ACCBEBCF4127971F807FB7E2DFBFEF93FD92F
366 | B03B128E1ECC98FB474B97CBF1153BE61D766C1C13B5710F4B94CDC4A507BBF6
367 | 8929ECFCFDA56FEDFD95C017FEC0A6DFD99F838483B84F21E1203C8BB373FF85
368 | 6CB4719619D02DBFB3F89019E5ED4C50EA1CAC7F1C62C6D9C80CF7F645D6C738
369 | 120E6E9490C97EA39443BC805D57CD786043A4C47D32C11AC83E5F3155FEF74D
370 | 2781DFFF27B0641730CCE63B120EE23E858483F02CCE0A47293BFE43F6835D8B
371 | DA3FBB7D1C58BE1F78E12D40AF10EB6136E2B6C6D9917084C84C8D59729919FD
372 | AD55400ABB069DC43967B3CF272BC5A1FC00AC66E71FC3FE37C3664444C241DC
373 | A79070109EC595C2C14F155D65E5AD07FE97D28FC53512FD9FAC8DB323E198C9
374 | CA0D75908CFC5FECF78BF3EC05C23C55F50776DEC14A0588817EA3FF44C2413C
375 | 309070109EC559E1D8CD8C68CD5420D3624A484A4C24118DF3209B1184C3C571
376 | 052FAE364C406A161B9DFC49A528C95C1B0907F10041C2417816A784E336F0D6
377 | 72F6DF6860F9A4F68F79E1F841FDB9836C8CB04B8443C6F09370105D18120EC2
378 | B338231CFF62867C0933E4BF4A015EB05848E084E3F42F98984C5357CEFFEC0E
379 | 3C6C117D4E230E82700A120EC2B338231CA7B381DDD78055EB014BAFD62FD8E7
380 | 05DD544C5569BD1627D638E27280716A44C916120EE2C1838483F02C9A538E54
381 | B311C51676ACCD34555B59C7EC3D9A3A7C2DA27004A930DA7C54BBC9BE0C120E
382 | A20B43C24178162DC2F1AF1B402EEBF5FFED7160F52A09CF2971EDA3E77CE7F6
383 | ACE8701CC73F99682433DB3F55268E838483E89A9070109E45AD41FD073B6617
384 | EBCDFFD81B58B212F8854C3E27736478E82AF9E86C8E7F417BCA113E72FC77F2
385 | 869B9F2A334967EE25E120BA30241C846791DDC8A901A86146F4CA5F81AFFE06
386 | DC6C61238CF1402233DC8F3B28F36FFB819DC7D971BF004282DB734A35FC839D
387 | EF2A709A9DEF12B3DEB98B24AE4541385E669F7FC6463C4DAC5CFD2460B838E4
388 | E172557D7218B8FCDFC0ECD781C9127B859070105D18120EC2B3286D1DEBDD0B
389 | 78B40FEBBDFF12183B89098786FD379A9801FEF820131D3602B82966A0E5B7A2
390 | 65E5F98F067E3DD5BE3C355E55C315B2E3C645024FC85C230907D18521E12008
391 | 3BB4B8E312C4CF0F120E82B0838483209420E120083B4838084209120E82B083
392 | 8483209420E120083B4838084209120E82B0838483209420E120083B48380842
393 | 09120E8220084213241C04411084264838088220084D9070100441109A20E120
394 | 08822034F1FF0160616E4FB1E68DCD0000000049454E44AE426082}
395 | ExplicitLeft = -1
396 | end
397 | object Label3: TLabel
398 | Left = 16
399 | Top = 152
400 | Width = 97
401 | Height = 17
402 | Caption = 'Controller Name'
403 | Font.Charset = DEFAULT_CHARSET
404 | Font.Color = clWindowText
405 | Font.Height = -13
406 | Font.Name = 'Segoe UI'
407 | Font.Style = []
408 | ParentFont = False
409 | end
410 | object lblMiddlewares: TLabel
411 | Left = 16
412 | Top = 203
413 | Width = 28
414 | Height = 13
415 | Caption = 'Verbs'
416 | Font.Charset = DEFAULT_CHARSET
417 | Font.Color = clWindowText
418 | Font.Height = -11
419 | Font.Name = 'Segoe UI'
420 | Font.Style = [fsBold]
421 | ParentFont = False
422 | end
423 | object Label1: TLabel
424 | Left = 175
425 | Top = 152
426 | Width = 34
427 | Height = 17
428 | Caption = 'Route'
429 | Font.Charset = DEFAULT_CHARSET
430 | Font.Color = clWindowText
431 | Font.Height = -13
432 | Font.Name = 'Segoe UI'
433 | Font.Style = []
434 | ParentFont = False
435 | end
436 | object edtControllerName: TEdit
437 | Left = 16
438 | Top = 172
439 | Width = 153
440 | Height = 25
441 | TabOrder = 0
442 | OnChange = edtControllerNameChange
443 | end
444 | object Button2: TButton
445 | Left = 8
446 | Top = 350
447 | Width = 109
448 | Height = 37
449 | Anchors = [akLeft, akBottom]
450 | Caption = 'DONE'
451 | Default = True
452 | ModalResult = 1
453 | TabOrder = 7
454 | end
455 | object Button1: TButton
456 | Left = 123
457 | Top = 350
458 | Width = 109
459 | Height = 37
460 | Anchors = [akLeft, akBottom]
461 | Caption = 'CANCEL'
462 | ModalResult = 2
463 | TabOrder = 8
464 | end
465 | object chkGET: TCheckBox
466 | Left = 16
467 | Top = 222
468 | Width = 171
469 | Height = 17
470 | Anchors = [akLeft, akTop, akRight]
471 | Caption = 'GET'
472 | Checked = True
473 | Font.Charset = DEFAULT_CHARSET
474 | Font.Color = clWindowText
475 | Font.Height = -11
476 | Font.Name = 'Segoe UI'
477 | Font.Style = []
478 | ParentFont = False
479 | State = cbChecked
480 | TabOrder = 2
481 | end
482 | object chkGETID: TCheckBox
483 | Left = 16
484 | Top = 245
485 | Width = 171
486 | Height = 17
487 | Anchors = [akLeft, akTop, akRight]
488 | Caption = 'GET BY ID'
489 | Checked = True
490 | Font.Charset = DEFAULT_CHARSET
491 | Font.Color = clWindowText
492 | Font.Height = -11
493 | Font.Name = 'Segoe UI'
494 | Font.Style = []
495 | ParentFont = False
496 | State = cbChecked
497 | TabOrder = 3
498 | end
499 | object chkPOST: TCheckBox
500 | Left = 16
501 | Top = 267
502 | Width = 171
503 | Height = 17
504 | Anchors = [akLeft, akTop, akRight]
505 | Caption = 'POST'
506 | Checked = True
507 | Font.Charset = DEFAULT_CHARSET
508 | Font.Color = clWindowText
509 | Font.Height = -11
510 | Font.Name = 'Segoe UI'
511 | Font.Style = []
512 | ParentFont = False
513 | State = cbChecked
514 | TabOrder = 4
515 | end
516 | object chkPUT: TCheckBox
517 | Left = 16
518 | Top = 290
519 | Width = 171
520 | Height = 17
521 | Anchors = [akLeft, akTop, akRight]
522 | Caption = 'PUT'
523 | Checked = True
524 | Font.Charset = DEFAULT_CHARSET
525 | Font.Color = clWindowText
526 | Font.Height = -11
527 | Font.Name = 'Segoe UI'
528 | Font.Style = []
529 | ParentFont = False
530 | State = cbChecked
531 | TabOrder = 5
532 | end
533 | object chkDELETE: TCheckBox
534 | Left = 16
535 | Top = 314
536 | Width = 171
537 | Height = 17
538 | Anchors = [akLeft, akTop, akRight]
539 | Caption = 'DELETE'
540 | Checked = True
541 | Font.Charset = DEFAULT_CHARSET
542 | Font.Color = clWindowText
543 | Font.Height = -11
544 | Font.Name = 'Segoe UI'
545 | Font.Style = []
546 | ParentFont = False
547 | State = cbChecked
548 | TabOrder = 6
549 | end
550 | object edtRoute: TEdit
551 | Left = 175
552 | Top = 172
553 | Width = 255
554 | Height = 25
555 | TabOrder = 1
556 | end
557 | end
558 |
--------------------------------------------------------------------------------
/src/Horse.NewController.View.pas:
--------------------------------------------------------------------------------
1 | unit Horse.NewController.View;
2 |
3 | interface
4 |
5 | uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms,
6 | Vcl.Dialogs, Vcl.Imaging.pngimage, Vcl.ExtCtrls, Vcl.StdCtrls, Horse.NewController.Model;
7 |
8 | type
9 | THorseViewsNewController = class(TForm)
10 | imgHeader: TImage;
11 | Label3: TLabel;
12 | edtControllerName: TEdit;
13 | Button2: TButton;
14 | Button1: TButton;
15 | lblMiddlewares: TLabel;
16 | chkGET: TCheckBox;
17 | chkGETID: TCheckBox;
18 | chkPOST: TCheckBox;
19 | chkPUT: TCheckBox;
20 | chkDELETE: TCheckBox;
21 | edtRoute: TEdit;
22 | Label1: TLabel;
23 | procedure edtControllerNameChange(Sender: TObject);
24 | public
25 | { Public declarations }
26 | function GetController: THorseNewControllerModel;
27 | end;
28 |
29 | var
30 | HorseViewsNewController: THorseViewsNewController;
31 |
32 | implementation
33 |
34 | {$R *.dfm}
35 |
36 | { THorseViewsNewController }
37 |
38 | procedure THorseViewsNewController.edtControllerNameChange(Sender: TObject);
39 | begin
40 | edtRoute.Text := edtControllerName.Text;
41 | end;
42 |
43 | function THorseViewsNewController.GetController: THorseNewControllerModel;
44 | begin
45 | Result := THorseNewControllerModel.Create;
46 | try
47 | Result.ControllerName := edtControllerName.Text;
48 | Result.Route := edtRoute.Text;
49 | Result.Get := chkGET.Checked;
50 | Result.GetById := chkGETID.Checked;
51 | Result.Post := chkPOST.Checked;
52 | Result.Delete := chkDELETE.Checked;
53 | Result.Put := chkPUT.Checked;
54 | except
55 | Result.Free;
56 | raise;
57 | end;
58 | end;
59 |
60 | end.
61 |
--------------------------------------------------------------------------------
/src/Horse.NewController.Wizard.pas:
--------------------------------------------------------------------------------
1 | unit Horse.NewController.Wizard;
2 |
3 | interface
4 |
5 | uses Horse.NewController, System.SysUtils, System.Classes, ToolsAPI, Winapi.Windows;
6 |
7 | type
8 | THorseNewControllerWizard = class(TNotifierObject, IOTAWizard, IOTAProjectWizard, IOTARepositoryWizard)
9 | protected
10 | // IOTAWizard
11 | function GetIDString: string;
12 | function GetName: string;
13 | function GetState: TWizardState;
14 | procedure Execute;
15 |
16 | // IOTARepositoryWizard
17 | function GetAuthor: string;
18 | function GetComment: string;
19 | function GetPage: string;
20 | function GetGlyph: Cardinal;
21 | public
22 | class function New: IOTAWizard;
23 | end;
24 |
25 | implementation
26 |
27 | { THorseNewControllerWizard }
28 |
29 | procedure THorseNewControllerWizard.Execute;
30 | begin
31 | THorseNewController.CreateController;
32 | end;
33 |
34 | function THorseNewControllerWizard.GetAuthor: string;
35 | begin
36 | Result := 'Horse - https://github.com/HashLoad/horse';
37 | end;
38 |
39 | function THorseNewControllerWizard.GetComment: string;
40 | begin
41 | Result := 'Create a new Horse Controller';
42 | end;
43 |
44 | function THorseNewControllerWizard.GetGlyph: Cardinal;
45 | begin
46 | Result := LoadIcon(HInstance, 'HashloadIcon');
47 | end;
48 |
49 | function THorseNewControllerWizard.GetIDString: string;
50 | begin
51 | Result := Self.ClassName;
52 | end;
53 |
54 | function THorseNewControllerWizard.GetName: string;
55 | begin
56 | Result := 'Horse Controller';
57 | end;
58 |
59 | function THorseNewControllerWizard.GetPage: string;
60 | begin
61 | Result := 'Horse';
62 | end;
63 |
64 | function THorseNewControllerWizard.GetState: TWizardState;
65 | begin
66 | Result := [wsEnabled];
67 | end;
68 |
69 | class function THorseNewControllerWizard.New: IOTAWizard;
70 | begin
71 | Result := Self.Create;
72 | end;
73 |
74 | end.
75 |
--------------------------------------------------------------------------------
/src/Horse.NewController.pas:
--------------------------------------------------------------------------------
1 | unit Horse.NewController;
2 |
3 | interface
4 |
5 | uses ToolsAPI, Horse.Wizard.Utils, Horse.NewController.Model, Horse.NewController.View, Horse.NewController.Creator,
6 | System.Classes, System.SysUtils, Vcl.Controls;
7 |
8 | type
9 | THorseNewController = class
10 | private
11 | class procedure RegisterController(const AController: THorseNewControllerModel; const AModule: IOTAModule);
12 | public
13 | class procedure CreateController;
14 | end;
15 |
16 | implementation
17 |
18 | class procedure THorseNewController.CreateController;
19 | var
20 | LForm: THorseViewsNewController;
21 | LController: THorseNewControllerModel;
22 | LCreator: IOTACreator;
23 | LModule: IOTAModule;
24 | begin
25 | LForm := THorseViewsNewController.Create(nil);
26 | try
27 | LForm.ShowModal;
28 | if LForm.ModalResult = mrOK then
29 | begin
30 | LController := LForm.GetController;
31 | try
32 | LCreator := THorseNewControllerCreator.New(LController);
33 | LModule := (BorlandIDEServices as IOTAModuleServices).CreateModule(LCreator);
34 |
35 | LModule.FileName := Format('%sControllers.%s.pas',
36 | [ExtractFilePath(GetActiveProject.FileName),
37 | LController.ControllerName]);
38 |
39 | if LModule.Save(True, True) then
40 | RegisterController(LController, LModule);
41 | finally
42 | LController.Free;
43 | end;
44 | end;
45 | finally
46 | LForm.Free;
47 | end;
48 | end;
49 |
50 | class procedure THorseNewController.RegisterController(const AController: THorseNewControllerModel; const AModule: IOTAModule);
51 | var
52 | LEditorList: TStringList;
53 | I: Integer;
54 | LListenPosition: Integer;
55 | LEditView: IOTAEditView;
56 | LUnitName: String;
57 | begin
58 | LListenPosition := 0;
59 | GetActiveProject.ShowFilename(GetActiveProject.FileName);
60 | LUnitName := ChangeFileExt(ExtractFileName(AModule.FileName), EmptyStr);
61 |
62 | LEditorList := EditorAsStringList;
63 | try
64 | LEditView := (BorlandIDEServices as IOTAEditorServices).TopView;
65 | for I := 0 to Pred(LEditorList.Count) do
66 | begin
67 | if LEditorList[I].Trim.ToLower.StartsWith('thorse.listen') then
68 | begin
69 | LListenPosition := I;
70 | Break;
71 | end;
72 | end;
73 |
74 | if LListenPosition > 0 then
75 | begin
76 | LEditView.Buffer.EditPosition.GotoLine(LListenPosition + 1);
77 | LEditView.Buffer.EditPosition.Tab(1);
78 | LEditView.Buffer.EditPosition.InsertText(LUnitName + '.Registry;' + Chr(13));
79 | end;
80 |
81 | AModule.Show;
82 | finally
83 | LEditorList.Free;
84 | end;
85 | end;
86 |
87 | end.
88 |
--------------------------------------------------------------------------------
/src/Horse.NewProject.Creator.Apache.pas:
--------------------------------------------------------------------------------
1 | unit Horse.NewProject.Creator.Apache;
2 |
3 | interface
4 |
5 | uses Horse.NewProject.Creator, Horse.Wizard.Types, System.SysUtils, DCCStrs, ToolsAPI;
6 |
7 | type
8 | THorseNewProjectCreatorApache = class(THorseNewProjectCreator, IOTACreator,
9 | IOTAProjectCreator80,
10 | IOTAProjectCreator160,
11 | {$IF CompilerVersion >= 32.0}
12 | IOTAProjectCreator190,
13 | {$ENDIF}
14 | IOTAProjectCreator)
15 | protected
16 | procedure SetInitialOptions(const ANewProject: IOTAProject); override;
17 | end;
18 |
19 | implementation
20 |
21 | { THorseNewProjectCreatorApache }
22 |
23 | procedure THorseNewProjectCreatorApache.SetInitialOptions(const ANewProject: IOTAProject);
24 | var
25 | LBuild: IOTABuildConfiguration;
26 | begin
27 | inherited;
28 | if FPlatform = hpLinux64 then
29 | begin
30 | LBuild := (ANewProject.ProjectOptions as IOTAProjectOptionsConfigurations).BaseConfiguration;
31 | LBuild.SetValue('DCC_AllowUndefined', 'true');
32 | end;
33 | end;
34 |
35 | end.
36 |
--------------------------------------------------------------------------------
/src/Horse.NewProject.Creator.Vcl.NewForm.Main.Templates.pas:
--------------------------------------------------------------------------------
1 | unit Horse.NewProject.Creator.Vcl.NewForm.Main.Templates;
2 |
3 | interface
4 |
5 | resourcestring
6 | sHorseVCLMainFormPAS =
7 | 'unit %0:s;' + sLineBreak +
8 | '' + sLineBreak +
9 | 'interface' + sLineBreak +
10 | '' + sLineBreak +
11 | 'uses' + sLineBreak +
12 | ' Winapi.Windows,' + sLineBreak +
13 | ' System.Variants,' + sLineBreak +
14 | ' System.Classes,' + sLineBreak +
15 | ' System.SysUtils,' + sLineBreak +
16 | ' Vcl.Graphics,' + sLineBreak +
17 | ' Vcl.Controls,' + sLineBreak +
18 | ' Vcl.Forms,' + sLineBreak +
19 | ' Vcl.Dialogs,' + sLineBreak +
20 | ' Vcl.StdCtrls,' + sLineBreak +
21 | ' Vcl.Buttons;' + sLineBreak +
22 | '' + sLineBreak +
23 | 'type' + sLineBreak +
24 | ' TFrmMain = class(TForm)' + sLineBreak +
25 | ' btnStop: TBitBtn;' + sLineBreak +
26 | ' btnStart: TBitBtn;' + sLineBreak +
27 | ' Label1: TLabel;' + sLineBreak +
28 | ' edtPort: TEdit;' + sLineBreak +
29 | ' procedure btnStopClick(Sender: TObject);' + sLineBreak +
30 | ' procedure FormClose(Sender: TObject; var Action: TCloseAction);' + sLineBreak +
31 | ' procedure btnStartClick(Sender: TObject);' + sLineBreak +
32 | ' private' + sLineBreak +
33 | ' procedure Status;' + sLineBreak +
34 | ' procedure Start;' + sLineBreak +
35 | ' procedure Stop;' + sLineBreak +
36 | ' end;' + sLineBreak +
37 | '' + sLineBreak +
38 | 'var' + sLineBreak +
39 | ' FrmMain: TFrmMain;' + sLineBreak +
40 | '' + sLineBreak +
41 | 'implementation' + sLineBreak +
42 | '' + sLineBreak +
43 | 'uses Horse;' + sLineBreak +
44 | '' + sLineBreak +
45 | '{$R *.dfm}' + sLineBreak +
46 | '' + sLineBreak +
47 | 'procedure TFrmMain.FormClose(Sender: TObject; var Action: TCloseAction);' + sLineBreak +
48 | 'begin' + sLineBreak +
49 | ' if THorse.IsRunning then' + sLineBreak +
50 | ' Stop;' + sLineBreak +
51 | 'end;' + sLineBreak +
52 | '' + sLineBreak +
53 | 'procedure TFrmMain.Start;' + sLineBreak +
54 | 'begin' + sLineBreak +
55 | ' THorse.Get(''ping'',' + sLineBreak +
56 | ' procedure(Req: THorseRequest; Res: THorseResponse; Next: TProc)' + sLineBreak +
57 | ' begin' + sLineBreak +
58 | ' Res.Send(''pong'');' + sLineBreak +
59 | ' end);' + sLineBreak +
60 | '' + sLineBreak +
61 | ' THorse.Listen(StrToInt(edtPort.Text));' + sLineBreak +
62 | 'end;' + sLineBreak +
63 | '' + sLineBreak +
64 | 'procedure TFrmMain.Status;' + sLineBreak +
65 | 'begin' + sLineBreak +
66 | ' btnStop.Enabled := THorse.IsRunning;' + sLineBreak +
67 | ' btnStart.Enabled := not THorse.IsRunning;' + sLineBreak +
68 | ' edtPort.Enabled := not THorse.IsRunning;' + sLineBreak +
69 | 'end;' + sLineBreak +
70 | '' + sLineBreak +
71 | 'procedure TFrmMain.Stop;' + sLineBreak +
72 | 'begin' + sLineBreak +
73 | ' THorse.StopListen;' + sLineBreak +
74 | 'end;' + sLineBreak +
75 | '' + sLineBreak +
76 | 'procedure TFrmMain.btnStartClick(Sender: TObject);' + sLineBreak +
77 | 'begin' + sLineBreak +
78 | ' Start;' + sLineBreak +
79 | ' Status;' + sLineBreak +
80 | 'end;' + sLineBreak +
81 | '' + sLineBreak +
82 | 'procedure TFrmMain.btnStopClick(Sender: TObject);' + sLineBreak +
83 | 'begin' + sLineBreak +
84 | ' Stop;' + sLineBreak +
85 | ' Status;' + sLineBreak +
86 | 'end;' + sLineBreak +
87 | '' + sLineBreak +
88 | 'end.';
89 |
90 | sHorseVCLMainFormDFM =
91 | 'object FrmMain: TFrmMain' + sLineBreak +
92 | ' Left = 0' + sLineBreak +
93 | ' Top = 0' + sLineBreak +
94 | ' BorderIcons = [biSystemMenu]' + sLineBreak +
95 | ' BorderStyle = bsSingle' + sLineBreak +
96 | ' Caption = ''Main'' ' + sLineBreak +
97 | ' ClientHeight = 82' + sLineBreak +
98 | ' ClientWidth = 201' + sLineBreak +
99 | ' Color = clBtnFace' + sLineBreak +
100 | ' Font.Charset = DEFAULT_CHARSET' + sLineBreak +
101 | ' Font.Color = clWindowText' + sLineBreak +
102 | ' Font.Height = -11' + sLineBreak +
103 | ' Font.Name = ''Tahoma'' ' + sLineBreak +
104 | ' Font.Style = []' + sLineBreak +
105 | ' OldCreateOrder = False' + sLineBreak +
106 | ' Position = poScreenCenter' + sLineBreak +
107 | ' OnClose = FormClose' + sLineBreak +
108 | ' PixelsPerInch = 96' + sLineBreak +
109 | ' TextHeight = 13' + sLineBreak +
110 | ' object Label1: TLabel' + sLineBreak +
111 | ' Left = 8' + sLineBreak +
112 | ' Top = 19' + sLineBreak +
113 | ' Width = 24' + sLineBreak +
114 | ' Height = 13' + sLineBreak +
115 | ' Caption = ''Port:'' ' + sLineBreak +
116 | ' end' + sLineBreak +
117 | ' object btnStop: TBitBtn' + sLineBreak +
118 | ' Left = 104' + sLineBreak +
119 | ' Top = 50' + sLineBreak +
120 | ' Width = 90' + sLineBreak +
121 | ' Height = 25' + sLineBreak +
122 | ' Caption = ''Stop'' ' + sLineBreak +
123 | ' Enabled = False' + sLineBreak +
124 | ' TabOrder = 0' + sLineBreak +
125 | ' OnClick = btnStopClick' + sLineBreak +
126 | ' end' + sLineBreak +
127 | ' object btnStart: TBitBtn' + sLineBreak +
128 | ' Left = 8' + sLineBreak +
129 | ' Top = 50' + sLineBreak +
130 | ' Width = 90' + sLineBreak +
131 | ' Height = 25' + sLineBreak +
132 | ' Caption = ''Start'' ' + sLineBreak +
133 | ' TabOrder = 1' + sLineBreak +
134 | ' OnClick = btnStartClick' + sLineBreak +
135 | ' end' + sLineBreak +
136 | ' object edtPort: TEdit' + sLineBreak +
137 | ' Left = 38' + sLineBreak +
138 | ' Top = 16' + sLineBreak +
139 | ' Width = 156' + sLineBreak +
140 | ' Height = 21' + sLineBreak +
141 | ' NumbersOnly = True' + sLineBreak +
142 | ' TabOrder = 2' + sLineBreak +
143 | ' Text = ''%0:s'' ' + sLineBreak +
144 | ' end' + sLineBreak +
145 | 'end';
146 |
147 | implementation
148 |
149 | end.
150 |
--------------------------------------------------------------------------------
/src/Horse.NewProject.Creator.Vcl.NewForm.Main.pas:
--------------------------------------------------------------------------------
1 | unit Horse.NewProject.Creator.Vcl.NewForm.Main;
2 |
3 | interface
4 |
5 | uses ToolsAPI, Horse.CodeGen.SourceFile, Horse.NewProject.Creator.Vcl.NewForm.Main.Templates, System.SysUtils;
6 |
7 | type
8 | THorseNewProjectVclNewFormMain = class(TNotifierObject, IOTACreator, IOTAModuleCreator)
9 | protected
10 | FPort: Integer;
11 | function GetCreatorType: string;
12 | function GetExisting: Boolean;
13 | function GetFileSystem: string;
14 | function GetOwner: IOTAModule;
15 | function GetUnnamed: Boolean;
16 | function GetAncestorName: string;
17 | { Return the implementation filename, or blank to have the IDE create a new
18 | unique one. (C++ .cpp file or Delphi unit) NOTE: If a value is returned then it *must* be a
19 | fully qualified filename. This also applies to GetIntfFileName and
20 | GetAdditionalFileName on the IOTAAdditionalFilesModuleCreator interface. }
21 | function GetImplFileName: string;
22 | { Return the interface filename, or blank to have the IDE create a new
23 | unique one. (C++ header) }
24 | function GetIntfFileName: string;
25 | { Return the form name }
26 | function GetFormName: string;
27 | { Return True to Make this module the main form of the given Owner/Project }
28 | function GetMainForm: Boolean;
29 | { Return True to show the form }
30 | function GetShowForm: Boolean;
31 | { Return True to show the source }
32 | function GetShowSource: Boolean;
33 | { Create and return the Form resource for this new module if applicable }
34 | function NewFormFile(const AFormIdent, AAncestorIdent: string): IOTAFile;
35 | { Create and return the Implementation source for this module. (C++ .cpp
36 | file or Delphi unit) }
37 | function NewImplSource(const AModuleIdent, AFormIdent, AAncestorIdent: string): IOTAFile;
38 | { Create and return the Interface (C++ header) source for this module }
39 | function NewIntfSource(const AModuleIdent, AFormIdent, AAncestorIdent: string): IOTAFile;
40 | { Called when the new form/datamodule/custom module is created }
41 | procedure FormCreated(const AFormEditor: IOTAFormEditor);
42 | public
43 | constructor Create(const APort: Integer);
44 | class function New(const APort: Integer): IOTACreator;
45 | end;
46 |
47 | implementation
48 |
49 | { THorseNewProjectVclNewFormMain }
50 |
51 | constructor THorseNewProjectVclNewFormMain.create(const APort: Integer);
52 | begin
53 | FPort := APort;
54 | (BorlandIDEServices as IOTAModuleServices).CreateModule(Self);
55 | end;
56 |
57 | procedure THorseNewProjectVclNewFormMain.FormCreated(const AFormEditor: IOTAFormEditor);
58 | begin
59 |
60 | end;
61 |
62 | function THorseNewProjectVclNewFormMain.GetAncestorName: string;
63 | begin
64 | Result := 'TForm';
65 | end;
66 |
67 | function THorseNewProjectVclNewFormMain.GetCreatorType: string;
68 | begin
69 | Result := sForm;
70 | end;
71 |
72 | function THorseNewProjectVclNewFormMain.GetExisting: Boolean;
73 | begin
74 | Result := False;
75 | end;
76 |
77 | function THorseNewProjectVclNewFormMain.GetFileSystem: string;
78 | begin
79 | Result := EmptyStr;
80 | end;
81 |
82 | function THorseNewProjectVclNewFormMain.GetFormName: string;
83 | begin
84 | Result := EmptyStr;
85 | end;
86 |
87 | function THorseNewProjectVclNewFormMain.GetImplFileName: string;
88 | begin
89 | Result := EmptyStr;
90 | end;
91 |
92 | function THorseNewProjectVclNewFormMain.GetIntfFileName: string;
93 | begin
94 | Result := EmptyStr;
95 | end;
96 |
97 | function THorseNewProjectVclNewFormMain.GetMainForm: Boolean;
98 | begin
99 | Result := True;
100 | end;
101 |
102 | function THorseNewProjectVclNewFormMain.GetOwner: IOTAModule;
103 | begin
104 | Result := GetActiveProject;
105 | end;
106 |
107 | function THorseNewProjectVclNewFormMain.GetShowForm: Boolean;
108 | begin
109 | Result := True;
110 | end;
111 |
112 | function THorseNewProjectVclNewFormMain.GetShowSource: Boolean;
113 | begin
114 | Result := True;
115 | end;
116 |
117 | function THorseNewProjectVclNewFormMain.GetUnnamed: Boolean;
118 | begin
119 | Result := True;
120 | end;
121 |
122 | class function THorseNewProjectVclNewFormMain.New(const APort: Integer): IOTACreator;
123 | begin
124 | Result := Self.create(APort);
125 | end;
126 |
127 | function THorseNewProjectVclNewFormMain.NewFormFile(const AFormIdent, AAncestorIdent: string): IOTAFile;
128 | begin
129 | Result := TSourceFile.Create(sHorseVCLMainFormDFM, [FPort.ToString]);
130 | end;
131 |
132 | function THorseNewProjectVclNewFormMain.NewImplSource(const AModuleIdent, AFormIdent, AAncestorIdent: string): IOTAFile;
133 | begin
134 | Result := TSourceFile.Create(sHorseVCLMainFormPAS, [AModuleIdent]);
135 | end;
136 |
137 | function THorseNewProjectVclNewFormMain.NewIntfSource(const AModuleIdent, AFormIdent, AAncestorIdent: string): IOTAFile;
138 | begin
139 | Result := nil;
140 | end;
141 |
142 | end.
143 |
--------------------------------------------------------------------------------
/src/Horse.NewProject.Creator.Vcl.pas:
--------------------------------------------------------------------------------
1 | unit Horse.NewProject.Creator.Vcl;
2 |
3 | interface
4 |
5 | uses Horse.NewProject.Creator, Horse.NewProject.Creator.Vcl.NewForm.Main, ToolsAPI;
6 |
7 | type
8 | THorseNewProjectCreatorVcl = class(THorseNewProjectCreator, IOTACreator,
9 | IOTAProjectCreator80,
10 | IOTAProjectCreator160,
11 | {$IF CompilerVersion >= 32.0}
12 | IOTAProjectCreator190,
13 | {$ENDIF}
14 | IOTAProjectCreator)
15 | protected
16 | procedure SetInitialOptions(const ANewProject: IOTAProject); override;
17 | end;
18 |
19 | implementation
20 |
21 | { THorseNewProjectCreatorVcl }
22 |
23 | procedure THorseNewProjectCreatorVcl.SetInitialOptions(const ANewProject: IOTAProject);
24 | begin
25 | inherited;
26 | THorseNewProjectVclNewFormMain.New(FPort);
27 | end;
28 |
29 | end.
30 |
--------------------------------------------------------------------------------
/src/Horse.NewProject.Creator.WinSvc.NewForm.Main.Templates.pas:
--------------------------------------------------------------------------------
1 | unit Horse.NewProject.Creator.WinSvc.NewForm.Main.Templates;
2 |
3 | interface
4 |
5 | resourcestring
6 | sHorseWinSvcMainFormPAS =
7 | 'unit %0:s;' + sLineBreak +
8 | '' + sLineBreak +
9 | 'interface' + sLineBreak +
10 | '' + sLineBreak +
11 | 'uses' + sLineBreak +
12 | ' Winapi.Windows,' + sLineBreak +
13 | ' Winapi.Messages,' + sLineBreak +
14 | ' System.SysUtils,' + sLineBreak +
15 | ' System.Classes,' + sLineBreak +
16 | ' Vcl.Graphics,' + sLineBreak +
17 | ' Vcl.Controls,' + sLineBreak +
18 | ' Vcl.SvcMgr,' + sLineBreak +
19 | ' Vcl.Dialogs;' + sLineBreak +
20 | '' + sLineBreak +
21 | 'type' + sLineBreak +
22 | ' TMainService = class(TService)' + sLineBreak +
23 | ' procedure ServiceCreate(Sender: TObject);' + sLineBreak +
24 | ' procedure ServiceStart(Sender: TService; var Started: Boolean);' + sLineBreak +
25 | ' procedure ServiceStop(Sender: TService; var Stopped: Boolean);' + sLineBreak +
26 | ' public' + sLineBreak +
27 | ' function GetServiceController: TServiceController; override;' + sLineBreak +
28 | ' end;' + sLineBreak +
29 | '' + sLineBreak +
30 | 'var' + sLineBreak +
31 | ' MainService: TMainService;' + sLineBreak +
32 | '' + sLineBreak +
33 | 'implementation' + sLineBreak +
34 | '' + sLineBreak +
35 | 'uses' + sLineBreak +
36 | ' Horse;' + sLineBreak +
37 | '' + sLineBreak +
38 | '{$R *.dfm}' + sLineBreak +
39 | '' + sLineBreak +
40 | 'procedure ServiceController(CtrlCode: DWord); stdcall;' + sLineBreak +
41 | 'begin' + sLineBreak +
42 | ' MainService.Controller(CtrlCode);' + sLineBreak +
43 | 'end;' + sLineBreak +
44 | '' + sLineBreak +
45 | 'function TMainService.GetServiceController: TServiceController;' + sLineBreak +
46 | 'begin' + sLineBreak +
47 | ' Result := ServiceController;' + sLineBreak +
48 | 'end;' + sLineBreak +
49 | '' + sLineBreak +
50 | 'procedure TMainService.ServiceCreate(Sender: TObject);' + sLineBreak +
51 | 'begin' + sLineBreak +
52 | ' THorse.Get(''ping'',' + sLineBreak +
53 | ' procedure(Req: THorseRequest; Res: THorseResponse; Next: TProc)' + sLineBreak +
54 | ' begin' + sLineBreak +
55 | ' Res.Send(''pong'');' + sLineBreak +
56 | ' end);' + sLineBreak +
57 | 'end;' + sLineBreak +
58 | '' + sLineBreak +
59 | 'procedure TMainService.ServiceStart(Sender: TService; var Started: Boolean);' + sLineBreak +
60 | 'begin' + sLineBreak +
61 | ' THorse.Listen(%1:s);' + sLineBreak +
62 | ' Started := True;' + sLineBreak +
63 | 'end;' + sLineBreak +
64 | '' + sLineBreak +
65 | 'procedure TMainService.ServiceStop(Sender: TService; var Stopped: Boolean);' + sLineBreak +
66 | 'begin' + sLineBreak +
67 | ' THorse.StopListen;' + sLineBreak +
68 | ' Stopped := True;' + sLineBreak +
69 | 'end;' + sLineBreak +
70 | '' + sLineBreak +
71 | 'end.';
72 |
73 | sHorseWinSvcMainFormDFM =
74 | 'object MainService: TMainService' + sLineBreak +
75 | ' OldCreateOrder = False' + sLineBreak +
76 | ' OnCreate = ServiceCreate' + sLineBreak +
77 | ' DisplayName = ''MainService'' ' + sLineBreak +
78 | ' StartType = stManual' + sLineBreak +
79 | ' OnStart = ServiceStart' + sLineBreak +
80 | ' OnStop = ServiceStop' + sLineBreak +
81 | ' Height = 150' + sLineBreak +
82 | ' Width = 215' + sLineBreak +
83 | 'end';
84 |
85 | implementation
86 |
87 | end.
88 |
--------------------------------------------------------------------------------
/src/Horse.NewProject.Creator.WinSvc.NewForm.Main.pas:
--------------------------------------------------------------------------------
1 | unit Horse.NewProject.Creator.WinSvc.NewForm.Main;
2 |
3 | interface
4 |
5 | uses ToolsAPI, Horse.CodeGen.SourceFile, Horse.NewProject.Creator.WinSvc.NewForm.Main.Templates, System.SysUtils;
6 |
7 | type
8 | THorseNewProjectWinSvcNewFormMain = class(TNotifierObject, IOTACreator, IOTAModuleCreator)
9 | protected
10 | FPort: Integer;
11 | function GetCreatorType: string;
12 | function GetExisting: Boolean;
13 | function GetFileSystem: string;
14 | function GetOwner: IOTAModule;
15 | function GetUnnamed: Boolean;
16 | function GetAncestorName: string;
17 | { Return the implementation filename, or blank to have the IDE create a new
18 | unique one. (C++ .cpp file or Delphi unit) NOTE: If a value is returned then it *must* be a
19 | fully qualified filename. This also applies to GetIntfFileName and
20 | GetAdditionalFileName on the IOTAAdditionalFilesModuleCreator interface. }
21 | function GetImplFileName: string;
22 | { Return the interface filename, or blank to have the IDE create a new
23 | unique one. (C++ header) }
24 | function GetIntfFileName: string;
25 | { Return the form name }
26 | function GetFormName: string;
27 | { Return True to Make this module the main form of the given Owner/Project }
28 | function GetMainForm: Boolean;
29 | { Return True to show the form }
30 | function GetShowForm: Boolean;
31 | { Return True to show the source }
32 | function GetShowSource: Boolean;
33 | { Create and return the Form resource for this new module if applicable }
34 | function NewFormFile(const AFormIdent, AAncestorIdent: string): IOTAFile;
35 | { Create and return the Implementation source for this module. (C++ .cpp
36 | file or Delphi unit) }
37 | function NewImplSource(const AModuleIdent, AFormIdent, AAncestorIdent: string): IOTAFile;
38 | { Create and return the Interface (C++ header) source for this module }
39 | function NewIntfSource(const AModuleIdent, AFormIdent, AAncestorIdent: string): IOTAFile;
40 | { Called when the new form/datamodule/custom module is created }
41 | procedure FormCreated(const AFormEditor: IOTAFormEditor);
42 | public
43 | constructor Create(const APort: Integer);
44 | class function New(const APort: Integer): IOTACreator;
45 | end;
46 |
47 | implementation
48 |
49 | { THorseNewProjectWinSvcNewFormMain }
50 |
51 | constructor THorseNewProjectWinSvcNewFormMain.Create(const APort: Integer);
52 | begin
53 | FPort := APort;
54 | (BorlandIDEServices as IOTAModuleServices).CreateModule(Self);
55 | end;
56 |
57 | procedure THorseNewProjectWinSvcNewFormMain.FormCreated(const AFormEditor: IOTAFormEditor);
58 | begin
59 |
60 | end;
61 |
62 | function THorseNewProjectWinSvcNewFormMain.GetAncestorName: string;
63 | begin
64 | Result := 'TForm';
65 | end;
66 |
67 | function THorseNewProjectWinSvcNewFormMain.GetCreatorType: string;
68 | begin
69 | Result := sForm;
70 | end;
71 |
72 | function THorseNewProjectWinSvcNewFormMain.GetExisting: Boolean;
73 | begin
74 | Result := False;
75 | end;
76 |
77 | function THorseNewProjectWinSvcNewFormMain.GetFileSystem: string;
78 | begin
79 | Result := EmptyStr;
80 | end;
81 |
82 | function THorseNewProjectWinSvcNewFormMain.GetFormName: string;
83 | begin
84 | Result := EmptyStr;
85 | end;
86 |
87 | function THorseNewProjectWinSvcNewFormMain.GetImplFileName: string;
88 | begin
89 | Result := EmptyStr;
90 | end;
91 |
92 | function THorseNewProjectWinSvcNewFormMain.GetIntfFileName: string;
93 | begin
94 | Result := EmptyStr;
95 | end;
96 |
97 | function THorseNewProjectWinSvcNewFormMain.GetMainForm: Boolean;
98 | begin
99 | Result := True;
100 | end;
101 |
102 | function THorseNewProjectWinSvcNewFormMain.GetOwner: IOTAModule;
103 | begin
104 | Result := GetActiveProject;
105 | end;
106 |
107 | function THorseNewProjectWinSvcNewFormMain.GetShowForm: Boolean;
108 | begin
109 | Result := True;
110 | end;
111 |
112 | function THorseNewProjectWinSvcNewFormMain.GetShowSource: Boolean;
113 | begin
114 | Result := True;
115 | end;
116 |
117 | function THorseNewProjectWinSvcNewFormMain.GetUnnamed: Boolean;
118 | begin
119 | Result := True;
120 | end;
121 |
122 | class function THorseNewProjectWinSvcNewFormMain.New(const APort: Integer): IOTACreator;
123 | begin
124 | Result := Self.create(APort);
125 | end;
126 |
127 | function THorseNewProjectWinSvcNewFormMain.NewFormFile(const AFormIdent, AAncestorIdent: string): IOTAFile;
128 | begin
129 | Result := TSourceFile.Create(sHorseWinSvcMainFormDFM, []);
130 | end;
131 |
132 | function THorseNewProjectWinSvcNewFormMain.NewImplSource(const AModuleIdent, AFormIdent, AAncestorIdent: string): IOTAFile;
133 | begin
134 | Result := TSourceFile.Create(sHorseWinSvcMainFormPAS, [AModuleIdent, FPort.ToString]);
135 | end;
136 |
137 | function THorseNewProjectWinSvcNewFormMain.NewIntfSource(const AModuleIdent, AFormIdent, AAncestorIdent: string): IOTAFile;
138 | begin
139 | Result := nil;
140 | end;
141 |
142 | end.
143 |
--------------------------------------------------------------------------------
/src/Horse.NewProject.Creator.WinSvc.pas:
--------------------------------------------------------------------------------
1 | unit Horse.NewProject.Creator.WinSvc;
2 |
3 | interface
4 |
5 | uses Horse.NewProject.Creator, Horse.NewProject.Creator.WinSvc.NewForm.Main, ToolsAPI;
6 |
7 | type
8 | THorseNewProjectCreatorWinSvc = class(THorseNewProjectCreator, IOTACreator,
9 | IOTAProjectCreator80,
10 | IOTAProjectCreator160,
11 | {$IF CompilerVersion >= 32.0}
12 | IOTAProjectCreator190,
13 | {$ENDIF}
14 | IOTAProjectCreator)
15 | protected
16 | procedure SetInitialOptions(const ANewProject: IOTAProject); override;
17 | end;
18 |
19 | implementation
20 |
21 | { THorseNewProjectCreatorWinSvc }
22 |
23 | procedure THorseNewProjectCreatorWinSvc.SetInitialOptions(const ANewProject: IOTAProject);
24 | begin
25 | inherited;
26 | THorseNewProjectWinSvcNewFormMain.New(FPort);
27 | end;
28 |
29 | end.
30 |
--------------------------------------------------------------------------------
/src/Horse.NewProject.Creator.pas:
--------------------------------------------------------------------------------
1 | unit Horse.NewProject.Creator;
2 |
3 | interface
4 |
5 | uses DCCStrs, Horse.Wizard.Types, Horse.CodeGen.SourceFile, ToolsAPI, System.SysUtils;
6 |
7 | type
8 | THorseNewProjectCreator = class(TNotifierObject, IOTACreator,
9 | IOTAProjectCreator80,
10 | IOTAProjectCreator160,
11 | {$IF CompilerVersion >= 32.0}
12 | IOTAProjectCreator190,
13 | {$ENDIF}
14 | IOTAProjectCreator)
15 | protected
16 | FPlatform: THorsePlatform;
17 | FFramework: THorseFramework;
18 | FPort: Integer;
19 |
20 | // IOTACreator
21 | function GetCreatorType: string;
22 | function GetExisting: Boolean;
23 | function GetFileSystem: string;
24 | function GetOwner: IOTAModule;
25 | function GetUnnamed: Boolean;
26 |
27 | // IOTAProjectCreator
28 | function GetFileName: string;
29 | function GetOptionFileName: string;
30 | function GetShowSource: Boolean;
31 | procedure NewDefaultModule;
32 | function NewOptionSource(const AProjectName: string): IOTAFile;
33 | procedure NewProjectResource(const AProject: IOTAProject);
34 | procedure NewDefaultProjectModule(const AProject: IOTAProject);
35 |
36 | { Create and return the Project source file }
37 | function NewProjectSource(const AProjectName: string): IOTAFile;
38 |
39 | function GetProjectPersonality: string;
40 | function GetFrameworkType: string;
41 | function GetPlatforms: TArray;
42 | function GetSupportedPlatforms: TArray;
43 | function GetPreferredPlatform: string;
44 | procedure SetInitialOptions(const ANewProject: IOTAProject); virtual;
45 | public
46 | constructor Create(const APlatform: THorsePlatform; const AFramework: THorseFramework; const APort: Integer);
47 | class function New(const APlatform: THorsePlatform; const AFramework: THorseFramework; const APort: Integer): IOTACreator;
48 | end;
49 |
50 | implementation
51 |
52 | { THorseNewProjectCreator }
53 |
54 | constructor THorseNewProjectCreator.Create(const APlatform: THorsePlatform; const AFramework: THorseFramework; const APort: Integer);
55 | begin
56 | FPlatform := APlatform;
57 | FFramework := AFramework;
58 | FPort := APort;
59 | end;
60 |
61 | function THorseNewProjectCreator.GetCreatorType: string;
62 | begin
63 | Result := FFramework.ProjectType;
64 | end;
65 |
66 | function THorseNewProjectCreator.GetExisting: Boolean;
67 | begin
68 | Result := False;
69 | end;
70 |
71 | function THorseNewProjectCreator.GetFileName: string;
72 | begin
73 | Result := EmptyStr;
74 | end;
75 |
76 | function THorseNewProjectCreator.GetFileSystem: string;
77 | begin
78 | Result := EmptyStr;
79 | end;
80 |
81 | function THorseNewProjectCreator.GetFrameworkType: string;
82 | begin
83 | Result := FFramework.ToString;
84 | end;
85 |
86 | function THorseNewProjectCreator.GetOptionFileName: string;
87 | begin
88 | Result := EmptyStr;
89 | end;
90 |
91 | function THorseNewProjectCreator.GetOwner: IOTAModule;
92 | begin
93 | Result := (BorlandIDEServices as IOTAModuleServices).MainProjectGroup;
94 | end;
95 |
96 | function THorseNewProjectCreator.GetPlatforms: TArray;
97 | begin
98 | Result := [GetPreferredPlatform];
99 | end;
100 |
101 | function THorseNewProjectCreator.GetPreferredPlatform: string;
102 | begin
103 | Result := FPlatform.ToString;
104 | end;
105 |
106 | function THorseNewProjectCreator.GetProjectPersonality: string;
107 | begin
108 | Result := sDelphiPersonality;
109 | end;
110 |
111 | function THorseNewProjectCreator.GetShowSource: Boolean;
112 | begin
113 | Result := True;
114 | end;
115 |
116 | function THorseNewProjectCreator.GetSupportedPlatforms: TArray;
117 | begin
118 | Result := [GetPreferredPlatform];
119 | end;
120 |
121 | function THorseNewProjectCreator.GetUnnamed: Boolean;
122 | begin
123 | Result := True;
124 | end;
125 |
126 | class function THorseNewProjectCreator.New(const APlatform: THorsePlatform; const AFramework: THorseFramework; const APort: Integer): IOTACreator;
127 | begin
128 | Result := Self.create(APlatform, AFramework, APort);
129 | end;
130 |
131 | procedure THorseNewProjectCreator.NewDefaultModule;
132 | begin
133 |
134 | end;
135 |
136 | procedure THorseNewProjectCreator.NewDefaultProjectModule(const AProject: IOTAProject);
137 | begin
138 |
139 | end;
140 |
141 | function THorseNewProjectCreator.NewOptionSource(const AProjectName: string): IOTAFile;
142 | begin
143 | Result := nil;
144 | end;
145 |
146 | procedure THorseNewProjectCreator.NewProjectResource(const AProject: IOTAProject);
147 | begin
148 |
149 | end;
150 |
151 | function THorseNewProjectCreator.NewProjectSource(const AProjectName: string): IOTAFile;
152 | begin
153 | Result := TSourceFile.Create(FFramework.DprContent, [AProjectName, FPort.ToString]);
154 | end;
155 |
156 | procedure THorseNewProjectCreator.SetInitialOptions(const ANewProject: IOTAProject);
157 | var
158 | LBuild: IOTABuildConfiguration;
159 | begin
160 | LBuild := (ANewProject.ProjectOptions as IOTAProjectOptionsConfigurations).BaseConfiguration;
161 | LBuild.SetValue(sDefine, FFramework.Define);
162 | end;
163 |
164 | end.
165 |
--------------------------------------------------------------------------------
/src/Horse.NewProject.Templates.pas:
--------------------------------------------------------------------------------
1 | unit Horse.NewProject.Templates;
2 |
3 | interface
4 |
5 | resourcestring
6 | sHorseDPRApache =
7 | 'library %0:s;' + sLineBreak +
8 | '' + sLineBreak +
9 | '(*' + sLineBreak +
10 | ' httpd.conf entries:' + sLineBreak +
11 | ' LoadModule apache_horse_module modules/%0:s.dll' + sLineBreak +
12 | ' ' + sLineBreak +
13 | ' SetHandler apache_horse_module-handle' + sLineBreak +
14 | ' ' + sLineBreak +
15 | ' To use the feature:' + sLineBreak +
16 | ' http://localhost/apache_horse/ping' + sLineBreak +
17 | ' These entries assume that the output directory for this project is the apache/modules directory.' + sLineBreak +
18 | ' httpd.conf entries should be different if the project is changed in these ways:' + sLineBreak +
19 | ' 1. The TApacheModuleData variable name is changed.' + sLineBreak +
20 | ' 2. The project is renamed.' + sLineBreak +
21 | ' 3. The output directory is not the apache/modules directory.' + sLineBreak +
22 | ' 4. The dynamic library extension depends on a platform. Use .dll on Windows and .so on Linux.' + sLineBreak +
23 | '*)' + sLineBreak +
24 | '' + sLineBreak +
25 | '// Declare exported variable so that Apache can access this module.' + sLineBreak +
26 | '' + sLineBreak +
27 | 'uses' + sLineBreak +
28 | ' Horse,' + sLineBreak +
29 | ' Web.HTTPD24Impl;' + sLineBreak +
30 | '' + sLineBreak +
31 | 'var' + sLineBreak +
32 | ' ApacheModuleData: TApacheModuleData;' + sLineBreak +
33 | '' + sLineBreak +
34 | 'exports' + sLineBreak +
35 | ' ApacheModuleData name ''apache_horse_module'';' + sLineBreak +
36 | '' + sLineBreak +
37 | 'begin' + sLineBreak +
38 | ' THorse.DefaultModule := @ApacheModuleData;' + sLineBreak +
39 | ' THorse.HandlerName := ''apache_horse_module-handle'';' + sLineBreak +
40 | '' + sLineBreak +
41 | ' THorse.Get(''/ping'',' + sLineBreak +
42 | ' procedure(Req: THorseRequest; Res: THorseResponse; Next: TProc)' + sLineBreak +
43 | ' begin' + sLineBreak +
44 | ' Res.Send(''pong'');' + sLineBreak +
45 | ' end);' + sLineBreak +
46 | '' + sLineBreak +
47 | ' THorse.Listen;' + sLineBreak +
48 | 'end.';
49 |
50 | sHorseDPRCGI =
51 | 'program %0:s;' + sLineBreak +
52 | '' + sLineBreak +
53 | '{$APPTYPE CONSOLE}' + sLineBreak +
54 | '' + sLineBreak +
55 | 'uses' + sLineBreak +
56 | ' Horse;' + sLineBreak +
57 | '' + sLineBreak +
58 | 'begin' + sLineBreak +
59 | ' THorse.Get(''/ping'',' + sLineBreak +
60 | ' procedure(Req: THorseRequest; Res: THorseResponse; Next: TProc)' + sLineBreak +
61 | ' begin' + sLineBreak +
62 | ' Res.Send(''pong'');' + sLineBreak +
63 | ' end);' + sLineBreak +
64 | '' + sLineBreak +
65 | ' THorse.Listen;' + sLineBreak +
66 | 'end.';
67 |
68 | sHorseDPRConsole =
69 | 'program %0:s;' + sLineBreak +
70 | '' + sLineBreak +
71 | '{$APPTYPE CONSOLE}' + sLineBreak +
72 | '' + sLineBreak +
73 | 'uses' + sLineBreak +
74 | ' Horse,' + sLineBreak +
75 | ' System.SysUtils;' + sLineBreak +
76 | '' + sLineBreak +
77 | 'begin' + sLineBreak +
78 | ' THorse.Get(''/ping'',' + sLineBreak +
79 | ' procedure(Req: THorseRequest; Res: THorseResponse; Next: TProc)' + sLineBreak +
80 | ' begin' + sLineBreak +
81 | ' Res.Send(''pong'');' + sLineBreak +
82 | ' end);' + sLineBreak +
83 | '' + sLineBreak +
84 | ' THorse.Listen(%1:s, ' + sLineBreak +
85 | ' procedure' + sLineBreak +
86 | ' begin' + sLineBreak +
87 | ' Writeln(''Server is runing on port '' + IntToStr(THorse.Port));' + sLineBreak +
88 | ' Readln;' + sLineBreak +
89 | ' end);' + sLineBreak +
90 | 'end.';
91 |
92 | sHorseDPRISAPI =
93 | 'library %0:s;' + sLineBreak +
94 | '' + sLineBreak +
95 | 'uses' + sLineBreak +
96 | ' Horse;' + sLineBreak +
97 | '' + sLineBreak +
98 | 'begin' + sLineBreak +
99 | ' THorse.Get(''/ping'',' + sLineBreak +
100 | ' procedure(Req: THorseRequest; Res: THorseResponse; Next: TProc)' + sLineBreak +
101 | ' begin' + sLineBreak +
102 | ' Res.Send(''pong'');' + sLineBreak +
103 | ' end);' + sLineBreak +
104 | '' + sLineBreak +
105 | ' THorse.Listen;' + sLineBreak +
106 | 'end.';
107 |
108 | sHorseDPRVCL =
109 | 'program %0:s;' + sLineBreak +
110 | '' + sLineBreak +
111 | 'uses' + sLineBreak +
112 | ' Vcl.Forms;' + sLineBreak +
113 | '' + sLineBreak +
114 | 'begin' + sLineBreak +
115 | ' Application.Initialize;' + sLineBreak +
116 | ' Application.MainFormOnTaskbar := True;' + sLineBreak +
117 | ' Application.Run;' + sLineBreak +
118 | 'end.';
119 |
120 | sHorseDPRWinSvc =
121 | 'program %0:s;' + sLineBreak +
122 | '' + sLineBreak +
123 | 'uses' + sLineBreak +
124 | ' Vcl.Forms,' + sLineBreak +
125 | ' Vcl.SvcMgr;' + sLineBreak +
126 | '' + sLineBreak +
127 | 'begin' + sLineBreak +
128 | ' if not Application.DelayInitialize or Application.Installing then' + sLineBreak +
129 | ' Application.Initialize;' + sLineBreak +
130 | ' Application.Run;' + sLineBreak +
131 | 'end.';
132 |
133 | implementation
134 |
135 | end.
136 |
--------------------------------------------------------------------------------
/src/Horse.NewProject.View.dfm:
--------------------------------------------------------------------------------
1 | object HorseViewsNewProject: THorseViewsNewProject
2 | Left = 0
3 | Top = 0
4 | BorderStyle = bsDialog
5 | Caption = 'Horse - New Project'
6 | ClientHeight = 492
7 | ClientWidth = 501
8 | Color = clWhite
9 | Font.Charset = DEFAULT_CHARSET
10 | Font.Color = clWindowText
11 | Font.Height = -13
12 | Font.Name = 'Segoe UI'
13 | Font.Style = []
14 | OldCreateOrder = True
15 | Position = poMainFormCenter
16 | OnCreate = FormCreate
17 | DesignSize = (
18 | 501
19 | 492)
20 | PixelsPerInch = 96
21 | TextHeight = 17
22 | object imgHeader: TImage
23 | Left = 0
24 | Top = 0
25 | Width = 501
26 | Height = 134
27 | Align = alTop
28 | AutoSize = True
29 | Center = True
30 | Picture.Data = {
31 | 0954506E67496D61676589504E470D0A1A0A0000000D494844520000018E0000
32 | 00860806000000CA206DA5000000017352474200AECE1CE90000000467414D41
33 | 0000B18F0BFC6105000000097048597300000EC300000EC301C76FA86400002D
34 | 264944415478DAED9D0B541457BAEFFFE7E60AC7E0230F8DC90575A51317A883
35 | 8FC1233E2E3EC6D611CC04650811D00163448D30198C06C6070EF808243E0714
36 | ED8408477C8428912488493AA3C2324AA21395516125D3B9519848F44451192F
37 | 70987B773D1AFA51555DD574374ABEDF5A33C1EEEA5D55BB767DFFFDF8BE6FFF
38 | DBFF63802008822054F26F241C04411084164838088220084D9070100441109A
39 | 20E1200882203441C24110044168828483200882D0040907E126EA51FCFA22AC
40 | A9E4FE0E45E189040CD7F2F3EB657825D2800AEEEFE80C542D0AECEC1B220842
41 | 8484837013241C04D15521E120DC0409074174554838083741C241105D15120E
42 | C24D907010445785848370131E168ED65B30551A71E088119517EA616A103EEE
43 | 39A01F82C787237EA61EC39FECA6F29C13B0E3B3648478091FDFA82A43FE7B45
44 | 28AEB8853BDC07BD83B0257F15F48F393E3F7A3F82C14FF6C788C9633165FC58
45 | 040F78C4C17DD4E3FCA765D8673C818A33E6F3B132868DC2EC17231111D8CF33
46 | 8F8F201420E120DC84E784E3CEA5BD484E3D88CA06A502BB61F07309D8B2540F
47 | DF871C9DD31FE9073311F1D82D54EC4C4572513D9AAC0ED4E39DBF2C41B0584E
48 | D37725487D351F46C5F30BE85ECA44519C3FBC9DBC8F9EA32291B72E1683BB3B
49 | F75408C2159070106EC233C2D15465405462194CFCBFBAA1CFB8B148D04F80AE
50 | 37F7EF46D45D2847F1E1B3382F1A63EF71092859172A2D1E6DE7EC87157B3661
51 | C89144CCD97F8B2F77F8B489087E4A1CB1741F86E8E831E8C3FDDD508E9417B7
52 | E0C83DE1FCC1E1518898F0341E3797D9FC23AA4F9F42F1F12A360AF1C38A7DD9
53 | 88F6757C1F56E5B0322A0EED46C19916E11E9E0D475E6E3C867B75F633267EAE
54 | 9070106EC203C26169B4BBFB6345CE6A443FEB637F5C6B3D2A7252F14AF12DFE
55 | 9FBA05992899E3AF78CE88283D2A8B8CB811C88C742633D23DA42FB3AE2409D3
56 | 37D7B2BF1E415C4E0E9605FA408E3B75F5F0F2ED673FDAB8771A1B666561BF78
57 | 1FE9796CB463272E8D301D5A8BA83FD7F0A31FD97B20080F40C241B809F70BC7
58 | E58239887AB7115C0F3DFACDDD58112C6FB439F128FEA3F97AC4A9A8BE0AE7E4
59 | 18C0AEDBC0AE5B615AE8FCCE596C54C215198B124324744ED4D4E5C279887A9B
60 | 13351FC46DDD85652365EEA3B516FB1393B0E112F78F206C295D057D0F0D2722
61 | 081741C241B8094BE1E82052C2D1CC7AE9CF8BBDF421F1389A1B0E5F07C5349D
62 | D982F1AF95F33DF6C1BFCF46D16FFDAC0FB0120E1F24190A91E0A053DF261C18
63 | 831D475310A275EDA1B50A1B67A4A140E57DDC284BC5E4CC1AFEEFB0F442644D
64 | F251751A827025241C849B70B3705C3260D4E23279119082139BA94C6CB8BF83
65 | 1370ECCD50619DC28CA570A81C41DC39BE0EE3D69CE5FFF61E178B3D2B233158
66 | CB28E0DB7C4C9F5F823AB5F76171BC775C06CEBC446ECA84E721E120DC84A570
67 | F8212C2E102A4C7B3B774C282DAEE10DA49470DCF894F5BCD70B3DEFE8378BB0
68 | 22B89B8A421D4C9F5908876AA3CC4D81AD4AC29A2F84856B74F741C8CC582C54
69 | E3FE6B731F715B3FC0B2910E7E60296EE12938B3748CA4871641B813120EC24D
70 | B8778DA3EEE3D730FD2DC107292E87195C951DEFCAEDB3F07211F797C43A87C5
71 | 394352776247A8CA9889D65A1CD9BC0E691F5BBBEDF61C12848573631011AC43
72 | 4F191760CBA927CD488D9A08C2039070106EC2BDC2D1BEB6A04D38DA7FE742E1
73 | 1069BA761607F2F2B1EBD35A2170CF4C6F3F442F4E46D2347B01B1BC0FCD9070
74 | 109D040907E126DC2B1C963DF54E1F71D8D25C8FF39F1FC4AEBC13A8B8DED2F6
75 | 31B706529416099DC502BAE5C829FA8D42240DD5709E87BCD0B3879A293A8270
76 | 2D241C849B70B370B8798DA343C261799D67F2919A51D2160DEECBEEA584DD8B
77 | 795DC24A00D5AC7110C47D000907E126DC1CC761E15DE4BB201347D504C3597A
78 | 558D8CC7D1AD36AEAF6E100E9E7B55D8989086822BDC3FACF36039E51D46109D
79 | 0C0907E126DC2C1CAD3530C4A422FB1AFBDB3F1225B9B1D03DA45CA4651C87A4
80 | D8B84B3860392565334566198FA2F23E08A2B321E120DC84FB23C74D879210FE
81 | 672EDD473784A51B90354921F3AC55E4B84CCE280F0947D6079908B3C8AC6B19
82 | 011F929AEDD2F312843B20E120DC84077255594E0175D721697306128648E5AA
83 | BA858A9CE4F65C557119287A29D03EFEC15DC271F72C362E5E275CA75474B865
84 | AE2A3C8288D4D558364DDE855748E17E15DEE3021D46CB13843B20E120DC8487
85 | B2E3D6E463FEAB25382F66A71D3C250CB3F5CCA08A6B08FF55578E8FF79C6AF3
86 | 6E52971D57BD709C2F9887F5DF0C4388AE3F9E19C665B3F542DF813AF46DAEC5
87 | A51FEAF9ECBC078ACEE2B2280A728910B9ECB873979789C7B1EBECEB8F88B051
88 | 1831AC3D436E757535CE9D3C8B8A6F1BD1E44C9D12848B20E120DC84073772AA
89 | 33624D9A01C5DFB62814A8653F0E0DC2A1360EA37B3F36924847FA24F9329BBE
90 | 2BC38675BB1DDC87B93C56A747493888CE81848370139EDE01B011A6CA329B1D
91 | F8BAA1CFB3FD317ABC1E31615A7600D43055D56042E517A7F0F9C90A9CFBE12E
92 | 4CFC684084DBB96FD03308D18723624AFB2848F93E5A5077C988E20F8DA8F8FA
93 | 2A2EB7C58170F7F218460C0D41C884B1983A52612A8B20DC0C0907411004A109
94 | 120E8220084213241C04411084264838088220084D9070100441109A20E12008
95 | 82203441C24110044168828483200882D0040907411004A109120E8220084213
96 | 241C04411084264838088220084D9070100441109A20E1200882203441C24110
97 | 044168828483200882D0040907411004A109120E8220084213241C0441108426
98 | 4838088220084D9070100441109A20E1200882203441C24110F70BD7CBF04AE4
99 | 09E80F6622A26F675F0CE1143F9367E832E138BF7316E6EC57776C5CCE075816
100 | D8D9B7DE05A92BC1CB8BCB1196BB0911BE2E2EFAE3D7F0827102DEDF1A0E1717
101 | 4D9879D08C4EF3596C8CCC02D2F762D9C86E0F4ED9EE44F619B6A0727B2C9291
102 | 82634B82E0DDD9D7D9415C2B1C4DC9F8223EC8E1B15E3D7CE0FD5027DDF1D7DB
103 | F1CAB548EC08EDD74917E046AA0C084C2C738B300B1D8350149E48C0F0CEBE4F
104 | 17C389E2FE819B3ABF33F3A009077FBD062075A7EBDF277796EDF63A917A86F5
105 | 287E7D11D62001C7DE0C459F0E9F8895F787123CB3B573DE47D70A073250B5A8
106 | B3DF3E653823B1FEA1D71FACC6A8FAE6B811C72944E46522CCC586871F719CD4
107 | E3C3375CD1E8EF2F2AB7CF42C584FB6014FCA009073F2AC88177A6014943DC31
108 | E27053D9EEC4C1886343F7D5287A29B0E3238E56563FBF3A8BA99DD491FB9909
109 | 470B2A364761FFE007AC1743B8915AEC4F48425D120907E1023CF50CAF1C44D4
110 | DC9FB09284C30334D7A020311595B3483808910623D63CBF1D3DEF877537128E
111 | 071F0F3DC33BC7B3306ECDA39D36757C5F0847D3B51A7C5E79049F955E4065CD
112 | 2DDCE13EECFD088283F55890108B60B90770B716151FE5A3C0588D73DF36A289
113 | FBACBB0F060FD061C4E4B19831598FE14FB261EEDDB3C84EDD82822AF1185B82
114 | 5D35EF2870A3AA0CF9EF95A0E2423D4C0DE2350D0DC08CE805983DB29FCCFA4E
115 | 15364EDC0B1DD7E01E6B84A9F230761D32A2E28C757DC4CD9D8990013ED22796
116 | 6DB4526557E0CB8BF5B8714FBCBE5163313B261611431E91BEA7B2544C3E3651
117 | B19EEE5C2947F19E12947E7D1597AFB7B04FBA41E71F80901763B170923F7ACA
118 | AC6B716D67D74041CCA5CAE8F32CABBBC817103F2D107DE4D6C65A6FC1F4F529
119 | 947EC2EACCF6B731F1ECFC3AEBF3D795213975378C575AA4CB8B966ECBE6EB2B
120 | AE3409CF564D3B3573D7842345FB507C8CB5F32BEDD737F5F970243C17843E3F
121 | B9D6E8F0CFECFB58FE3EB8EBDE6FD887FD678467EEDDB71F42F4914898A3C7E0
122 | 1EE6F65385E243EFA3E048557BBB65ED223E3E1E61CF4AB539AE5DA50112A26B
123 | 796E73B9074E56E3B258DF3DD93B1A12168EDFCF9C00DFEED054B6657BB95155
124 | 0243FE617C2CBE2742B931581E15D4D6568467F63EF22B6A85F6AEE699B5B6A0
125 | EEDB13282F2DC7075FDB5EB775F956280887928DB4B319FCB9FA61484020A64C
126 | 0EC573C142FBAD2B4BC32BB9556DC7D8E229C7A3CE178EBA12CC89D90B4C0B43
127 | 0433F6C143FDD08BFB9CBD649F1DCEC786A29F303B278755864DC3BDC61E50BC
128 | 01E786EAB1ECB7133062900E7DBD80DBD7AA613255E1E35266400625E2D8AB63
129 | E0CD1AC19DBBCDEC474C409EDF02D3EF37618BDE62C4F190177AF670C13C6A6B
130 | 3D8C6FA522F9B837C2E22211333E10BADE3DD0D460C297274B905F7016B5C1F1
131 | 284C0D87CEEE65E15E94B5F0CEC9C633079390563B0C4931A1181D1000BF1EDC
132 | 7D9D45E5B1126CDC7F15BA056B9137C7DF7E9E545138D84BB87527744549D8F0
133 | A37CD92352B3254763CAC2D188CB856998FB36FB7DF43CC44D0EC488271FE585
134 | FDDC05230A728D38D7578F2D6F2D41C863726D67158E0E7C1FE1DB6E610AABBB
135 | 885F0660886D19431350B22E14BE762F6C0B2AB7C56249850E1173F5983152A8
136 | 77F6635CBF684476EE4154F8D9FCD6DC26589D25CF67A2FA462192865A14E9E5
137 | 839EDDADEFD1549285399BAB3184DDE382B05F6208FF6CABF1D97B6F63D3C74D
138 | 98BD95B5D391D2A2DE5465C0DCE565A8E5DBAB5E6CE737517BB10AA51FED45F1
139 | 8F1390BBAA3F76C5BB5838CA27A270F2292CCE6944C4E270CC1816C49E39AB97
140 | 2B5530E61B90FD4D00B2F23230E51ABBBE95E5E813168B68F1F971F756FED13E
141 | F977D09170B0F65232F72A92138DE8CBB58BF1FEAC53C73A4ECDCC385E38857D
142 | FB4A70A4598F4203EB354BBE0FF2C231DF2B0579C8C7E2937E5818138E9061DC
143 | FBCFD5E7591CC8DB8B5284212F371E7D8EA7E1859C9B08890E6F7B1F6F5F3B05
144 | E39EBDD878A61FD2F3595D3F695F77752549989E0784CD0CC373E3C5F6CCB8CD
145 | 09F0AEDD286890B96ECDC2D1C83E4FC49CC382CD686BF75C1D7D6FC2A5F2721C
146 | 387E13B373B311CDB933DE6BC41DD66C6B8D6988FAB31F767C98801196CDD643
147 | 8E479D2F1C8C265611DE5ED2DF5D2E9C87A893337134D7D20DF4168EAC99873F
148 | 3FB10A254AAE6DADEC7F5695283446935B3C35C406707218766C4B963490DCC8
149 | 67E3E27538C08CD851BB4566E1DA2A06B01EFFF844142E0892ECA1DFF9DA8039
150 | 7F3022F8CDDD58116CF3223B108EE2DEDDD0372C45B6ECA6CA2D18FFFA4D647C
151 | 9881B0DED6DF2909471DFB2E7C1BF05AEE6A443F2D61385B6B51BC6A29D6D4B2
152 | 972D8FBD6C36CF9A6F3B47BAA1676F262EB90908EE615F04EE9DC6865959B8BE
153 | 7C37B64C91181535B31EA1978CF8379423E5C51CF45EB7172B46D91C237AEFE8
154 | 1CF4D46E7C9A8AE9EBEB65C5C15C07197B241C13B873CC35A06E66068A16492F
155 | 8CD67D9C8A174A1BE177C907B35D291CDB4CE8E9AB476E8E8491631D9DE23F2E
156 | C286870231FAEB6684E4650AC6C906D3A124841705A1685F3C064BBC4FB2C2C1
157 | 9DDB4B8765B999D2EEE1AC5DEC4F4C42C1984C1C8DF3B7F9525938B8F6D267E8
158 | 3C144A7524EEB1F72C7E1DCEB1DEFA9DEA7E5891B744A24D35A262F33CBCD290
159 | 802FD2F5E869776D2D686223424923DC5A03437C2ACA23B35118EE67FFACB508
160 | 474D3EA6275423E13D690113CE071B3B26D66FA6EEE73D55A588F8209EFB80BD
161 | 906DC6586854CD9B3E6086404B616E148E6FF3113EFF0466E4ED46C2B30AC75D
162 | 398839738B306493AD1113AEADE0C95014EEB137AE965C2E9883A8D32FD88829
163 | 1C0A47C193E1122FBF25C2427145E46EEC98666D9C65854334CA4835206BD223
164 | 904534FC9716DBBF6C82ABAF0F920C8548F0972FC2746811C2CF84E398139E5D
165 | E77746B15EEA6A9C79C9A67DAA118E6676EDCFB36B5FC0AEFDB77E3207B1BA5B
166 | 9C844DC33370C6E61D109ED74C94E44442275BF7A2BB66A53FD25D291C992644
167 | 6F92104C11AEB330EAF572F8BE2465BC45EEB2673CC38067F20A6DDAB603E1C8
168 | AC813E4D46E82DCFBFC60785476D0DA003E1D8EF8715FBB225858E836F2B7FAE
169 | 573E3F7B67A7CFAFC5B2D255D0F78026CCA339BBB6A85138F8724AC7E2688EB6
170 | F828120E87483520E12533E83250B2488B6B9BFB8483334C734CF354AC95089E
171 | 5DAF200567968EB1B876E1DA8C0BD80B3CC75FF9647C833F8DB83D3B113DC0E2
172 | 7307C2A1A66CCE35F5E587EC9FA39C70083D4BD6804B5903763044E65FE64FF4
173 | 283130036A5577ACED1C63A2F61E1335A502BEDE8EC03F7473EA6591153E15C2
174 | 71E7F83A8C5BD38C2C899198DD39B8BAB03482ADACEE67A4A16EB9B2016DFB7D
175 | 265C2C1CFDB0E333360296EB88F0DE394508C92D42D210B992AA903D3D0D4D6F
176 | D9D69123E1E8812D8E8CF2B512BCFCE22984C94DAFCA09C75F63EDDA91258220
177 | D623CBAAC36903B7A634CBC9A9413E660AF66D51EB888395332AD184151AAFA1
178 | 6B09879AC871CD0BD1D20D889B338E4A34A2675C0AB6C605C92F9A4A94E57AE1
179 | E0827116E14048368A647BA4ED70D31E9337DB1818F3B5ADB4EFEDDBC1FB70AF
180 | C3F5F442D6CBB7983671201C76C74B20D7019033BCBCD034D98AA00C97D84BB2
181 | D8840C9B97993FE78FC9F8226D82FD9481D56DC8BCAC2AE88870F0F7F84D3C8E
182 | 3A8A9AE705BD1A0996F5CF1BC6324CB1157985FAD16A4414EFF983518A06569D
183 | 1790D051334EB67D6F1C08477E80E3CE80A3753939E1F8A78336A7AAADC89FC3
184 | 21AE120E6EBA705512D6D406217D4D22229EF55173F62E261C6A22C7A516A2CD
185 | 1E0CC6D3F8FC7C2D6EDFFBA9CD8BC18C94B740D37765D8B06E378AEBBC103233
186 | 160B7FA3C7705FA5456E7709877AC32C1CCE353A934D6F484B2316A7946CDD8A
187 | 9D78096DD1261CE2C86F988A5152DBF5EDC6609BDEADEAD1AA2363D06042E517
188 | A7F0F9C90A9CFB919DEE8AE8356646AAD3E25038C429249D8AEBE3CBDA8B1196
189 | 533AFC35FFE8B8E7ADF8FC9C438D279C5B85C3D1B915CFEF40381CB517570847
190 | 733D2E5754A0F4F4297CF97D239AAED5DB783385765C38385A6FA1B2702D92DF
191 | 35014382B0706E0C668CD2A18FC27475D7120E27A6AA9ABE2B41EAABF9A8F0F2
192 | C394C9133131F8693CFD94E0ED2320784279294D2588EE76BB3EAD45735F7F24
193 | 2C4D4474B09FC402B07B854375CF45140EEB29092D65C8BCC89D241CF6064506
194 | 1923DD61E1602F5EC5CE542417FD04DF90B188181F84003F3F3CC379F08887F0
195 | 5E28957AE785A352C57315B1EAE46819259170A82ADBFDC2D1EE41E71D380C33
196 | A68E41886F7FF80D123D3E392E1A30EE8F3EAE110E334CA8CE7F7E10BBF24EA0
197 | E23A303C3C16CBE78663B8C473F9790B07EF52BB1B589089AC993A193F7F0D06
198 | 951990CBC7F762D33639F74F1A7174BD11878537DBE66484C8183FE7A7AA847B
199 | 3C126CE3C2AD80954B247FCD2D78E72F4B10EC683A95844355D9EE168E362FC1
200 | 9CD588969B3A72D554950C4DD7CEE280E16D647FFE1342966622335C67352DF7
201 | B3168EF3EF4661CE57B1F6DE4196701E2D53B314471C7698DD3F6FD996DDB5D6
202 | 389ADF2CC28A608BA9398F0B870BD7389C150E7E817337FC143C8738F885F9CA
203 | 70278443746678D849C70FA9750F571CAB02120E6784437004A894F0FEB34458
204 | 7C77F188438236F77B9BF6FD33160E9573C7BC9F7309F45A17B0786F9133363E
205 | F1EEF3AABA5C380751275F5016411E65AFAA03D1F6EE9CD2752261603A413878
206 | 8FA34C1FBCF3613282BD94CB56F4AA72563824A7FD6C11E27E52EE39B3C6A172
207 | 91590EB1E3035B919740F0DEBAEB5AAF2A120E6DC2A132AE8777B17E7782DB85
208 | 43AEE3F233168E461833E620F9F155A85A12247B0C1FA453D2A23D945ED2CDAF
209 | 06861753712EDE0D711C7C04FCFB1891B39B5DA78281E8701C875827DFC46A8E
210 | E370877098631C6A5F7550A78EE2389C150EBE975E8584F736C90750F175BE17
211 | E7A516C7F918852DE8AB54377CAC8A017DDFD8251B192E8F10D5FEF24F328166
212 | 6D88E276DCC5711C241CDA84C3DC1EB6B2CF46CAFC4C6CCBFBEFB96871DC0152
213 | 2EF24227E3899FA3708861FDB93AECF820192112F96AB868DAF0F7EAE17BE516
214 | 422C1FEEBD5BB8E3F5886CEEA3F6796FD6BBDD136BD14B14C5AA7589E24B2CB8
215 | 1607A9F38469A305E7DF4DC09C6301D8F2560AF452464C75E4F852D908E31B6C
216 | 883CFFF50BD0E74AA49BEE0CE1801855BDB90509DB3290E0EF64E4B8B3C2E128
217 | 388FAFF32C54C00BA6A76225AE5FE84C14872904C0A17DDE7B455EA6F2265912
218 | 51BEE6CE422F99742EE6F25F286D81AEAA1B222447920698D4C4F8A87C66D665
219 | 9370B49F430CE41C94829352D3AF625B2EA8F581E9CAD80E0A470BEE34003D7B
220 | 2B7434C575E0BE2B77233DC4E2DDE23B4C464438089A75179DBB38DE5C85ECF9
221 | 69608F18CBE263A11FE5875E5C8E966F6AF0D9A1DD38706B2233C2A1A84D7DCD
222 | 3AED35D728969723645A28F46302F08C9F9F9883A61AB5B5D5283E588223DFE9
223 | B042220546D32503A21673F11F89C8F84D109FDFAAA9A11E4D4FEAE0CB1B34D6
224 | F3FB23EBF9B53A91F8D0ECDDF3D15D8C9E6999F3476DAE2A219FD490C3495877
225 | 77A2454E23219F54F987FBF89C4833D233913E49C200759270587AA1E8A68523
226 | E6F9B118CD793469CA55E5BC5795900EC48480A87948FA8D90438A6B0BE7FF5A
227 | C6EAFC027C176762E59325987C28405EF8D6D763C6D2A54898A413EBBB1EBDFC
228 | 75169D8B465CDE9F86F93BAF6248781422260462F820F3B3E1DADD77F8DC7818
229 | C5035324A71A6F546EC72B6B4E00E3C2113F4BAC1F0839A32A3E38885DDFFF12
230 | B93961B8F46A0EBCD7DB3C3F7E6DC888D939459A46DD241CCE2D8E0B36A20C08
231 | 89C4C2B9131122BEC3972F96B3B67C02B77FBD143BC26A994197486BAE493884
232 | 7ADD78270811D32D3CB7F83C55B5F8FB9923C83E5C835EA129C84B1C6313AB56
233 | CFEC5412526A83B0E2F5583C3780CBA57513B53FF5C0E0A71DAC91BA804E77C7
234 | E502602A8BDE46F6A10B386F95D1D49C515518259C9B65F170B94CA895461C38
235 | C20C52F54F622654C09C8D3578861EB3A74C804E66B470E3EB7CACCF31A282CF
236 | A8CB9D6F2232B631A3C61D2F2E3C9F5BAABC38A6C49D1A2376ED39689D1D7754
237 | 1066CD8C41F428B9E91C8B463C443E3BAE6246CF4E130E01DE13246F9F7576DC
238 | 51C3A00F8B41FC249D6276DC8EC671DCF996D579FE5E1457D8D4D7FC28047319
239 | 92B91E9AA11F0AE584AFCC800DFB4EB565ADD58D8AC2964DF66B1ADC3D16EF2B
240 | B1CA98CA9D6BF0A06710A20F47C49440B10322F57C6CB3C4DA66FEE5DAFA5ADC
241 | 5E6CFDFCB84DB4A6E7F8A95A47D2FACC483864DE8BEB675160C86FCFA86BCE14
242 | 3C371661FE8F88535AD588E9E05455D3B52A941E611DDDD37FC72573667008D9
243 | 8B478C1C83B0E7431111286333EE99509CBB1D05C72D3235C7ADC63BBFD5BC12
244 | A71997094797815F543F81590A7970DC4307A258892E8CB0389AFC500A4EBEAA
245 | C2738D203C0009870DFCA2D3912097EECFA10E120E420A6E0D66356EAFD2364D
246 | 4510EE8484C306CE83E14080E38474AE8784839080F30E7CF5265E53CC6A4C10
247 | 9E8584C30AD6BB9B7B04C3F3B4CD25BB860E0887A7B61CE572EA14E558AD47E9
248 | FC2762D966717D887039DC08787143BCD3EB6D5A50BD2EE1044DDF19919DD7BE
249 | 06C5CFE147BFEE91F978C2F59070DC37DCEFC2710BC68C04247F138415AFBE80
250 | A983C49DDCBE6981EF387F0F4FEB11EEC06DC2C1EF5573043DE312B0F2D763C5
251 | 5D27AB51DB3D00C103B4C6C510F703241CF70DF7B970F0018E46CCD893ED383D
252 | 38F140E21EE110B7F56D5D2A1D17413C909070DC37DCDFC2C13B0DE4FA39DE5F
253 | 817860718F700801967F5FAC320128F14040C2D115F08070B873FE9BB83F70CF
254 | 3326A78FAE08094757C003C2C107A195EB4938BA306E110E31A09684A36B41C2
255 | A109154912C53DA6BF5CA090629D37F446E8A512F3DDAD45C547F9283872C122
256 | 8A791822A217204E2EEADC52381EABC7F94F0F22FFE02931325EF060E1A29AE3
257 | 7F1B2AB9298C2C7546A46C3E882F2FDAECA427D29E7892EB55EE854E14AE1B67
258 | F2B17EDB1118C5C8EA9EE129F864E998F6F41DE61D1F4BCBAD22B07B0ED02124
259 | 2C06CBA364B602E6EFF32A1672D1BA5C3D1D3220FBA36A214ADD1CD91B1F8F30
260 | F31E0AAD625DEC3B215E8B392B413C162A44B25BFDB6AD1E157ECB4711E7A0AF
261 | 524A1031DF949F52965C7EFFE9166C97D8BB43D8ACACC43A2ADF3F00212F9A33
262 | 2C4817C98BC1F7B142B4F25D138A0D5B90FDA9391ADA0F2B0CED6B560E85E31E
263 | 7BCE096BF1E5E4D5D8F352A0C27A4523CE176661FD27D5763B79F248259B34D7
264 | F70767505963E1793532A43DFA5FBAD2B4B53DC225907068E4FCCE28CCF93151
265 | 7E7F6CFEE52F43D39078D914EB72EB05E6DD102B07E9B12C3A141344CFA54B5F
266 | BC8F4DB9A7D13473150A1704D91B09B370E4C7A26EDD5A540C0CC36CFD5831CF
267 | D54DD45EAC42E9A1DD2838E38308B93C575230037FE76E33FF27BF835EC55814
268 | A587C22C87ED1B16995FDED578E65022E67FF50C92625EE0738F793798F0F7D6
269 | FE08B6C89FC327B7CC03C26686E1B9F1423E2F8EDBCC38EEDFC5AEB3418F4203
270 | 1307DB7C5EE6FBCC99888A95BB71276C1EE22CF3811DCBC7BA77AF22382D1B5B
271 | C6FD88ECC4B5287E6222927E23E6FCE2EAF24C19B2B719716766866C2249FC74
272 | 1A1B976FC6010C6BBB0FBE1ECF18B1695B09CE0D8D47C93AF66CDB9E83E30DAD
273 | 8434D835F08E908F00E753F39B126CDA5623FB3C0D73DFBE8A11D1EDF70B9579
274 | C0DA8463662D9F2CAF79E63C2C08E3F279B5A0F69B9BE835AC3D458AA27030D1
275 | E0EAD3F81FABE5EBCDB22DDF6D443397F051DCC1136F142269A8F8A5EDF6D1D7
276 | CAB166F916947A05B1FA0E47C8301DFA7AB5E7F192DBCC48405BDB235C030987
277 | 46840D5C801D9F25234422D683139614E831617F159E964C5B22A69078D866DF
278 | 0DCE28CE35A04E4E1CCCBB252ECDC68E6936865FDCEBBA6E40337C631432B072
279 | D986DF6AC46B4E784629F746B997772D9AA327A2F27B3FECB032AA123041E27A
280 | F0DE52C7B4B2515D7C2ACA23257285893B089EEBFD1822D66F62BD7BFBC556EE
281 | 1EA7E700FA9126348DD98C1D52F10F7CB6DAC398209559544CBC59E0672B0E22
282 | 7CAF3B0D159399F058F4BAE5F61A111084A552178AEF0EB3FA97CC3925BDAB63
283 | DB6E7412093B85FA52CE3C2C3C371DE2700A88CE514C0B2FFB8CD968A0785512
284 | 367ACDC3FB69A1CACF56B26D28AC7198EB739454223F01F36646BE2B25DABED6
285 | B647B804120EAD284D4BF0D35459E8B52D07BAF7E6A1F83FA4A6B484E9AE1B4B
286 | 2DA72CC43D1BAAA35092C30C8F4CC317D2D007A2B0941908CB63C469908A6047
287 | 197D0503B6C1577BDE23C7C2C18C2D0291F56106C27A77AC8AF97395B373BD21
288 | BDE9D2970ABD76F3C649FB9F0C47916CB4B5903873A3CE7E84E028D53F47D399
289 | 2D18FF5A3D5658AE2929EDDEC75FF7293CF7612C6A1364D287F0ED6A1F46ECD9
290 | D92EEAFC3E204C05530DC89AA4D06B56D8EBC43CD2F17D49396DBCEC33E6323E
291 | E72423F91A6B9BEBB48A0687B2705C2E9C87A84F26A2285F3932DE742809E16F
292 | EB24123DBAB6ED11EA20E1D08CBCD1E1A7A9960379CCB0FB7E2A6368F9248ACC
293 | C058EEF5216E1ED39CE620D589CC9EDD66830A153B1B3A1A31C9A146380E44B8
294 | 28119FE27ECE0ED609C49EFBA6316C44F792FC6A2CBF6D71F36A9B0CABEAF6E6
295 | 30AF6399965A6EF32BEF766A5977756C443A1FABED52AFF3CF65F3A356D397FC
296 | EFB6E9EC3B0A12C88D7804E168C40A15493BED9FB1B0AFCDFCAFC6222F4762EA
297 | 50DDC394170E733D3ADA048C4376274517B73D4215241C4E20B795E8794BA3C0
298 | 07CC9DB2DB9447D2007FBD1D817F30215D69173B1E99C57995DB5DF2F03B23BE
299 | 8FD17985487856E33D3B100E55FBA5AB4151384A1062D92BB7432E05B88AFBE1
300 | EB261F014ABBBFF1881B823D619D229B5FFFFAE7529B2D81ADAF871FADACF2E1
301 | 3B179662705E42505CB19F7B9BF81C75BC539C6D9DF0D364FB74C833382B1AFC
302 | C394170EBEBECB3045F1799A11F6C9491B64DB217071DB235441C2E10C52FB99
303 | F33BD16D86D75BE669086127B12F232D471182C1310CB5F6B852BF7FB0CC22AC
304 | 16775CB1E7E6A5D13D528D706872B96CAEC7E58A0A949E3E852FBF6F44D33571
305 | EF9236B46DCB695B474E0987AAFDCB05F8BD157E4CB65AC8E6470D6B7CAC4708
306 | B61D08BE9DE4A0CF36CBF515A9E94BC70BEE56C88C46B5B8D85A1EDBC4894666
307 | 0D66BC5188F4711D09DC53681B7C7DFFA87AA74DBECEBF4FB099C2A43891CE80
308 | 84C329ECA725A47A92FCF4C185C8F66D6AF9A1F95AE02DEB396EF33CB46AA26D
309 | 36B1D114C7E1DC8BE63AE168DF2DD03B7018664CB5D8F9CC7CC84503C6FDD1A7
310 | 9384A34C7DA5D8AE29F1538E063C63319AE3D74C4E86591C273847AC7FDC623A
311 | 4CF2BED4DD8775DDD88F3A9D118E92B95791BCDC841193D8355C1C2BEDE1A61A
312 | 47C2E168B3A57678E130D9AEE391707406241C4E623D2D21E6E3F1B699BBB65D
313 | CFE017506F62A5CDFA02FFC27E32CACAD555112F1FF4B47C911FA011479B9750
314 | CE6A443F2BD393559CAA72B7703462C7870918A1A6526CDD4AC5731F08368F28
315 | 855167C5F3D6D762BB9EC1BB67EF0BB099FAECA411477E3D743D0290B43E05FA
316 | BEECFA1393B0E9A9641C93733F77088D38BA22241C4E62F5F2CB8C24CC0BB5E7
317 | 628491093F02B918631703222C58FBA8EE79D921B7682E85A679E5765C231C55
318 | C89E9E86CAC5CADBF2CAD687BB85436A0A522356CF58EE7A79F1CE411F7E6422
319 | 8E409EB0170897AD7168128EFE78276F0982CD86DCEC06FE6AB6BA918F1D9E59
320 | E320E1F02C241CCE62E93ED9D0EE4D65EBFDC21B92EFE3D9CB1F888A8C39D22E
321 | BAAA167D15D0E05575E7F3348C7BCB4F95A78E252E110E958BF8970BE620EADD
322 | 099E170ED1CBA7395DC96BCB0116A3CAC19FCBD5992016D903B99149A3EC0E7F
323 | FC4824D347D55EE38A5E554EAC71581ECB5DC7E435F54EC5FF28B70D61CAB73C
324 | 26DBF17E230EBCAA48383C0B0987D388415D618558F85FAF21EAFA123B174B1E
325 | CE90243623AB34089FFDEA6DF84A8A83B0D7C5C6C75350B22448BB4BA1398E63
326 | D292F6F514295AC5A98700F7C471387C7945B7E3BE4A5E4B624CC2FE7B9DB038
327 | 0E31AEE0C24C1C7DC3C94032732C4F0E1B017E1885FD83A5AFA36D8BE2A5CD48
328 | 7DD1843829F7687E213D0BB58EDC551DC571745038CC6EB9734E3AB3DEA1DC36
329 | F835A07D8128DC631FBC6889A3380E120ECF42C2D101B85E5E5443385654EF86
330 | 69AE5C9E22AE57B516889F0963FE5DA4CBA525374F09246EC68EE7147A5F5C1A
331 | 07C9942347703BB01EBD66C84D2934B2EB5D8BA8B7818C3D9908D33815E39AA9
332 | 2A61CE7FD3A014E9BD19C428E8825A1F98AE8CED14E1688B641E2F13C1EFE859
333 | 88A389FD8313A0DB7602BA3D32D7CA8B683982537DB0E6AB20D91436373E4DC5
334 | F4CD2D48D89681047F6723C73B2A1C688BE82F1D9FA12AE5483B0EDA8618A96F
335 | 1C9A8C1DCB27488AB5E3C871120E4F43C2D111B8D1C44A23D030818D28E4A77E
336 | B81C44C91FB1DE5570A2E27C7553CD5E2C597E1097064D4052D8048C0808E077
337 | 4BE3F2125DFAE12A4CE546183ED561EB510983BAB211CB363F8DD257B3503130
338 | 1CF1B3C662F4807EEC5C7771FD9BBFA278FF6E145CEC8F243903E400572D8E37
339 | 5D32206A71191012898573272244CC3375F962390A724FE0F6AF976247189757
340 | E927ACEC0CE1E0E07227ADCC412986212E7202260CF587AE770FDE85D8F47D2D
341 | FE7EA11CC587EF22224FFA3A845C64D5F01D188B4259832D06925EF441AFA84C
342 | F98498165E68BA69E188795E7CAE5A7255B94238F87A51487B238B8AB661CE0D
343 | D6A0C3ECF96198312C88B57B2DB9AA48383C0D09478710E6680D9333A4A7A9CC
344 | F0F3DE25189EAE62331B669C2ACBF6E140E985B62CA14226D4FE0818A3474C98
345 | 1EC36D3385720675CFA3D8C28952AB7D765C3EEBECE450C447E931D8C9BDC15D
346 | 1AC771FD2C0A0CF9C8AF3067691533DBCE8D4598FF23626FBC1A319D251C1CAD
347 | B770F9F861E41F396D911D98CB90FB18460CD52322528F9001320167E294DC1D
348 | 076B4EBCC0ACA946928A60CCA66B6771206F9F7576DC51C3A00F8B41BC42A65F
349 | 970A07CC232060457EA6836055332ADB065FDF7B6178CF3A3B6EC8383D66CF8D
350 | 4470DF0E964FB814120E8220084213241C04411084264838088220084D907010
351 | 3F5FAE1D01D67C09A4FF0950355F7F9F944D109D0C0907E15978835A22F36537
352 | E0D1EE806F30A01F0FF83F05FC0F775FCBFD2A1C2DC0CE64F6DFDF018B46BBB1
353 | 1208423B241C8467E10DEA4960690AF094CD7775D5EC7F57802FD9F7DFFF13F0
354 | 6607BCBC1418D6CBA953A9BB96FB55387E60BF67BF45382B23CC3DF74F104E42
355 | C2417816B506F5261391DDBB801AD6F39EB912087D4AED195C7F2D9D52B638E2
356 | F05E04CCFB85EBEF9D203A000907E15934195436EA3030D138CBFE5CF2261B79
357 | 38993FCA25D7721F954D109D0C0907E159B41AD47FFD201CDB32155817E9DA35
358 | 0F120E82700A120EC2B3386350FFF69F40F64960D12E402E39E2EDABC0C7FBD8
359 | E884FDF7AE10598D27FB03A1F381313271D0B2D7F235B0B044F8FC89DBC0C952
360 | C0C88EBBF64FE1EB6E0F030347035133D87F7B392E9B2BE32FEF03157FB32F63
361 | 7638D0FF61E9320C0BD9FF2D021214F7B125088F43C2417816A77AE2D540F216
362 | 202819981360FFF5B70781AD9F018F3303FBDC34C09F09C5FFBDC10C3533FE46
363 | F6DB914C3C5E1E6D3F5A51148E9DCC66B3CFCBD603379900FD7A322B979DBB37
364 | FBBAAE8A95CDCE77968D864292D83549AC4198CB5ECE8461172BEB61766DFAFF
365 | CDCA1800FC7B33F07FD839CA3E054CFFCDCEC3CE3152423C483888FB14120EC2
366 | B338251C6C04919D08343023BC2ACCBEBCF4127971F807FB7E2DFBFEF93FD92F
367 | B03B128E1ECC98FB474B97CBF1153BE61D766C1C13B5710F4B94CDC4A507BBF6
368 | 8929ECFCFDA56FEDFD95C017FEC0A6DFD99F838483B84F21E1203C8BB373FF85
369 | 6CB4719619D02DBFB3F89019E5ED4C50EA1CAC7F1C62C6D9C80CF7F645D6C738
370 | 120E6E9490C97EA39443BC805D57CD786043A4C47D32C11AC83E5F3155FEF74D
371 | 2781DFFF27B0641730CCE63B120EE23E858483F02CCE0A47293BFE43F6835D8B
372 | DA3FBB7D1C58BE1F78E12D40AF10EB6136E2B6C6D9917084C84C8D59729919FD
373 | AD55400ABB069DC43967B3CF272BC5A1FC00AC66E71FC3FE37C3664444C241DC
374 | A79070109EC595C2C14F155D65E5AD07FE97D28FC53512FD9FAC8DB323E198C9
375 | CA0D75908CFC5FECF78BF3EC05C23C55F50776DEC14A0588817EA3FF44C2413C
376 | 309070109EC559E1D8CD8C68CD5420D3624A484A4C24118DF3209B1184C3C571
377 | 052FAE364C406A161B9DFC49A528C95C1B0907F10041C2417816A784E336F0D6
378 | 72F6DF6860F9A4F68F79E1F841FDB9836C8CB04B8443C6F09370105D18120EC2
379 | B338231CFF62867C0933E4BF4A015EB05848E084E3F42F98984C5357CEFFEC0E
380 | 3C6C117D4E230E82700A120EC2B338231CA7B381DDD78055EB014BAFD62FD8E7
381 | 05DD544C5569BD1627D638E27280716A44C916120EE2C1838483F02C9A538E54
382 | B311C51676ACCD34555B59C7EC3D9A3A7C2DA27004A930DA7C54BBC9BE0C120E
383 | A20B43C24178162DC2F1AF1B402EEBF5FFED7160F52A09CF2971EDA3E77CE7F6
384 | ACE8701CC73F99682433DB3F55268E838483E89A9070109E45AD41FD073B6617
385 | EBCDFFD81B58B212F8854C3E27736478E82AF9E86C8E7F417BCA113E72FC77F2
386 | 869B9F2A334967EE25E120BA30241C846791DDC8A901A86146F4CA5F81AFFE06
387 | DC6C61238CF1402233DC8F3B28F36FFB819DC7D971BF004282DB734A35FC839D
388 | EF2A709A9DEF12B3DEB98B24AE4541385E669F7FC6463C4DAC5CFD2460B838E4
389 | E172557D7218B8FCDFC0ECD781C9127B859070105D18120EC2B3286D1DEBDD0B
390 | 78B40FEBBDFF12183B89098786FD379A9801FEF820131D3602B82966A0E5B7A2
391 | 65E5F98F067E3DD5BE3C355E55C315B2E3C645024FC85C230907D18521E12008
392 | 3BB4B8E312C4CF0F120E82B0838483209420E120083B4838084209120E82B083
393 | 8483209420E120083B4838084209120E82B0838483209420E120083B48380842
394 | 09120E8220084213241C04411084264838088220084D9070100441109A20E120
395 | 08822034F1FF0160616E4FB1E68DCD0000000049454E44AE426082}
396 | ExplicitWidth = 631
397 | end
398 | object Label1: TLabel
399 | Left = 8
400 | Top = 160
401 | Width = 90
402 | Height = 17
403 | Caption = 'Target Platform'
404 | Font.Charset = DEFAULT_CHARSET
405 | Font.Color = clWindowText
406 | Font.Height = -13
407 | Font.Name = 'Segoe UI'
408 | Font.Style = []
409 | ParentFont = False
410 | end
411 | object Label2: TLabel
412 | Left = 191
413 | Top = 160
414 | Width = 64
415 | Height = 17
416 | Caption = 'Framework'
417 | Font.Charset = DEFAULT_CHARSET
418 | Font.Color = clWindowText
419 | Font.Height = -13
420 | Font.Name = 'Segoe UI'
421 | Font.Style = []
422 | ParentFont = False
423 | end
424 | object Label3: TLabel
425 | Left = 398
426 | Top = 160
427 | Width = 24
428 | Height = 17
429 | Caption = 'Port'
430 | Font.Charset = DEFAULT_CHARSET
431 | Font.Color = clWindowText
432 | Font.Height = -13
433 | Font.Name = 'Segoe UI'
434 | Font.Style = []
435 | ParentFont = False
436 | end
437 | object lblMiddlewares: TLabel
438 | Left = 10
439 | Top = 224
440 | Width = 67
441 | Height = 13
442 | Caption = 'Middlewares'
443 | Font.Charset = DEFAULT_CHARSET
444 | Font.Color = clWindowText
445 | Font.Height = -11
446 | Font.Name = 'Segoe UI'
447 | Font.Style = [fsBold]
448 | ParentFont = False
449 | end
450 | object edtTarget: TComboBox
451 | Left = 8
452 | Top = 180
453 | Width = 177
454 | Height = 25
455 | Style = csDropDownList
456 | Font.Charset = DEFAULT_CHARSET
457 | Font.Color = clWindowText
458 | Font.Height = -13
459 | Font.Name = 'Segoe UI'
460 | Font.Style = []
461 | ItemIndex = 0
462 | ParentFont = False
463 | TabOrder = 0
464 | Text = 'Windows'
465 | OnChange = edtTargetChange
466 | Items.Strings = (
467 | 'Windows'
468 | 'Linux')
469 | end
470 | object edtFramework: TComboBox
471 | Left = 191
472 | Top = 180
473 | Width = 201
474 | Height = 25
475 | Style = csDropDownList
476 | Font.Charset = DEFAULT_CHARSET
477 | Font.Color = clWindowText
478 | Font.Height = -13
479 | Font.Name = 'Segoe UI'
480 | Font.Style = []
481 | ItemIndex = 2
482 | ParentFont = False
483 | TabOrder = 1
484 | Text = 'Console'
485 | Items.Strings = (
486 | 'Apache'
487 | 'CGI'
488 | 'Console'
489 | 'Daemon'
490 | 'Isapi'
491 | 'VCL'
492 | 'WinService'
493 | '')
494 | end
495 | object Button2: TButton
496 | Left = 8
497 | Top = 447
498 | Width = 109
499 | Height = 37
500 | Anchors = [akLeft, akBottom]
501 | Caption = 'DONE'
502 | Default = True
503 | ModalResult = 1
504 | TabOrder = 3
505 | end
506 | object Button1: TButton
507 | Left = 123
508 | Top = 447
509 | Width = 109
510 | Height = 37
511 | Anchors = [akLeft, akBottom]
512 | Caption = 'CANCEL'
513 | ModalResult = 2
514 | TabOrder = 4
515 | end
516 | object edtPort: TEdit
517 | Left = 398
518 | Top = 180
519 | Width = 93
520 | Height = 25
521 | TabOrder = 2
522 | Text = '9000'
523 | end
524 | object chkJhonson: TCheckBox
525 | Left = 10
526 | Top = 243
527 | Width = 230
528 | Height = 17
529 | Anchors = [akLeft, akTop, akRight]
530 | Caption = 'jhonson - JSON parser'
531 | Font.Charset = DEFAULT_CHARSET
532 | Font.Color = clWindowText
533 | Font.Height = -11
534 | Font.Name = 'Segoe UI'
535 | Font.Style = []
536 | ParentFont = False
537 | TabOrder = 5
538 | end
539 | object chkHorseCORS: TCheckBox
540 | Left = 10
541 | Top = 266
542 | Width = 230
543 | Height = 17
544 | Anchors = [akLeft, akTop, akRight]
545 | Caption = 'horse-cors - Inject CORS headers'
546 | Font.Charset = DEFAULT_CHARSET
547 | Font.Color = clWindowText
548 | Font.Height = -11
549 | Font.Name = 'Segoe UI'
550 | Font.Style = []
551 | ParentFont = False
552 | TabOrder = 6
553 | end
554 | object chkHorseOctetStream: TCheckBox
555 | Left = 10
556 | Top = 289
557 | Width = 230
558 | Height = 17
559 | Anchors = [akLeft, akTop, akRight]
560 | Caption = 'horse-octet-stream - Support stream'
561 | Font.Charset = DEFAULT_CHARSET
562 | Font.Color = clWindowText
563 | Font.Height = -11
564 | Font.Name = 'Segoe UI'
565 | Font.Style = []
566 | ParentFont = False
567 | TabOrder = 7
568 | end
569 | object chkHorseJWT: TCheckBox
570 | Left = 10
571 | Top = 312
572 | Width = 230
573 | Height = 17
574 | Anchors = [akLeft, akTop, akRight]
575 | Caption = 'horse-jwt - JSON Web Token'
576 | Font.Charset = DEFAULT_CHARSET
577 | Font.Color = clWindowText
578 | Font.Height = -11
579 | Font.Name = 'Segoe UI'
580 | Font.Style = []
581 | ParentFont = False
582 | TabOrder = 8
583 | end
584 | object chkHorseBasicAuth: TCheckBox
585 | Left = 10
586 | Top = 335
587 | Width = 230
588 | Height = 17
589 | Anchors = [akLeft, akTop, akRight]
590 | Caption = 'horse-basic-auth - Basic authentication'
591 | Font.Charset = DEFAULT_CHARSET
592 | Font.Color = clWindowText
593 | Font.Height = -11
594 | Font.Name = 'Segoe UI'
595 | Font.Style = []
596 | ParentFont = False
597 | TabOrder = 9
598 | end
599 | object chkHorseCompression: TCheckBox
600 | Left = 10
601 | Top = 358
602 | Width = 230
603 | Height = 17
604 | Anchors = [akLeft, akTop, akRight]
605 | Caption = 'horse-compression - Compression'
606 | Font.Charset = DEFAULT_CHARSET
607 | Font.Color = clWindowText
608 | Font.Height = -11
609 | Font.Name = 'Segoe UI'
610 | Font.Style = []
611 | ParentFont = False
612 | TabOrder = 10
613 | end
614 | object chkHandleException: TCheckBox
615 | Left = 10
616 | Top = 381
617 | Width = 230
618 | Height = 17
619 | Anchors = [akLeft, akTop, akRight]
620 | Caption = 'handle-exception - Handler exceptions'
621 | Font.Charset = DEFAULT_CHARSET
622 | Font.Color = clWindowText
623 | Font.Height = -11
624 | Font.Name = 'Segoe UI'
625 | Font.Style = []
626 | ParentFont = False
627 | TabOrder = 11
628 | end
629 | object chkLogger: TCheckBox
630 | Left = 10
631 | Top = 404
632 | Width = 230
633 | Height = 17
634 | Anchors = [akLeft, akTop, akRight]
635 | Caption = 'Logger - Access logging'
636 | Font.Charset = DEFAULT_CHARSET
637 | Font.Color = clWindowText
638 | Font.Height = -11
639 | Font.Name = 'Segoe UI'
640 | Font.Style = []
641 | ParentFont = False
642 | TabOrder = 12
643 | end
644 | object chkUseBoss: TCheckBox
645 | Left = 430
646 | Top = 223
647 | Width = 61
648 | Height = 17
649 | Anchors = [akLeft, akTop, akRight]
650 | Caption = 'Use Boss'
651 | Checked = True
652 | Font.Charset = DEFAULT_CHARSET
653 | Font.Color = clWindowText
654 | Font.Height = -11
655 | Font.Name = 'Segoe UI'
656 | Font.Style = []
657 | ParentFont = False
658 | State = cbChecked
659 | TabOrder = 13
660 | end
661 | end
662 |
--------------------------------------------------------------------------------
/src/Horse.NewProject.View.pas:
--------------------------------------------------------------------------------
1 | unit Horse.NewProject.View;
2 |
3 | interface
4 |
5 | uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
6 | Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Imaging.pngimage, Vcl.ExtCtrls, Horse.Wizard.Types,
7 | Horse.Middlewares, System.Generics.Collections;
8 |
9 | type
10 | THorseViewsNewProject = class(TForm)
11 | imgHeader: TImage;
12 | Label1: TLabel;
13 | edtTarget: TComboBox;
14 | edtFramework: TComboBox;
15 | Label2: TLabel;
16 | Button2: TButton;
17 | Button1: TButton;
18 | Label3: TLabel;
19 | edtPort: TEdit;
20 | chkJhonson: TCheckBox;
21 | chkHorseCORS: TCheckBox;
22 | chkHorseOctetStream: TCheckBox;
23 | chkHorseJWT: TCheckBox;
24 | lblMiddlewares: TLabel;
25 | chkHorseBasicAuth: TCheckBox;
26 | chkHorseCompression: TCheckBox;
27 | chkHandleException: TCheckBox;
28 | chkLogger: TCheckBox;
29 | chkUseBoss: TCheckBox;
30 | procedure edtTargetChange(Sender: TObject);
31 | procedure FormCreate(Sender: TObject);
32 | private
33 | { Private declarations }
34 | procedure SetFrameworks;
35 | public
36 | { Public declarations }
37 | function Port: Integer;
38 | function HorseFramework: THorseFramework;
39 | function HorsePlatform: THorsePlatform;
40 | function GetMiddlewares: TList;
41 | function UseBoss: Boolean;
42 | end;
43 |
44 | var
45 | HorseViewsNewProject: THorseViewsNewProject;
46 |
47 | implementation
48 |
49 | {$R *.dfm}
50 |
51 | { THorseViewsNewProject }
52 |
53 | procedure THorseViewsNewProject.edtTargetChange(Sender: TObject);
54 | begin
55 | SetFrameworks;
56 | end;
57 |
58 | procedure THorseViewsNewProject.FormCreate(Sender: TObject);
59 | begin
60 | SetFrameworks;
61 | end;
62 |
63 | function THorseViewsNewProject.GetMiddlewares: TList;
64 | begin
65 | Result := TList.Create;
66 | try
67 | if chkHorseCORS.Checked then
68 | Result.Add(THorseMiddlewareCORS.New);
69 |
70 | if chkHorseCompression.Checked then
71 | Result.Add(THorseMiddlewareCompression.New);
72 |
73 | if chkJhonson.Checked then
74 | Result.Add(THorseMiddlewareJohnson.New);
75 |
76 | if chkHorseOctetStream.Checked then
77 | Result.Add(THorseMiddlewareOctetStream.New);
78 |
79 | if chkHorseJWT.Checked then
80 | Result.Add(THorseMiddlewareJWT.New);
81 |
82 | if chkHandleException.Checked then
83 | Result.Add(THorseMiddlewareHandleException.New);
84 |
85 | if chkLogger.Checked then
86 | Result.Add(THorseMiddlewareLogger.New);
87 |
88 | if chkHorseBasicAuth.Checked then
89 | Result.Add(THorseMiddlewareBasicAuth.New);
90 | except
91 | Result.Free;
92 | raise;
93 | end;
94 | end;
95 |
96 | function THorseViewsNewProject.HorseFramework: THorseFramework;
97 | begin
98 | Result.FromString(edtFramework.Text);
99 | end;
100 |
101 | function THorseViewsNewProject.HorsePlatform: THorsePlatform;
102 | begin
103 | Result.FromString(edtTarget.Text);
104 | end;
105 |
106 | function THorseViewsNewProject.Port: Integer;
107 | begin
108 | Result := StrToIntDef(edtPort.Text, 9000);
109 | end;
110 |
111 | procedure THorseViewsNewProject.SetFrameworks;
112 | begin
113 | edtFramework.Clear;
114 | edtFramework.Items.Add('Apache');
115 | edtFramework.Items.Add('CGI');
116 | edtFramework.Items.Add('Console');
117 | edtFramework.Items.Add('Daemon');
118 | edtFramework.Items.Add('Isapi');
119 | edtFramework.Items.Add('Vcl');
120 | edtFramework.Items.Add('WinService');
121 |
122 | if edtTarget.Text = 'Windows' then
123 | begin
124 | edtFramework.Items.Delete(3);
125 | edtFramework.ItemIndex := 2;
126 | end
127 | else
128 | begin
129 | edtFramework.Items.Delete(6);
130 | edtFramework.Items.Delete(5);
131 | edtFramework.Items.Delete(4);
132 | edtFramework.Items.Delete(1);
133 | edtFramework.ItemIndex := 1;
134 | end;
135 | end;
136 |
137 | function THorseViewsNewProject.UseBoss: Boolean;
138 | begin
139 | Result := chkUseBoss.Checked;
140 | end;
141 |
142 | end.
143 |
--------------------------------------------------------------------------------
/src/Horse.NewProject.Wizard.pas:
--------------------------------------------------------------------------------
1 | unit Horse.NewProject.Wizard;
2 |
3 | interface
4 |
5 | uses Horse.NewProject, Horse.NewProject.View, Horse.Middlewares, System.Generics.Collections, ToolsAPI, Winapi.Windows,
6 | Vcl.Controls;
7 |
8 | type
9 | THorseNewProjectWizard = class(TNotifierObject, IOTAWizard, IOTAProjectWizard, IOTARepositoryWizard)
10 | protected
11 | // IOTAWizard
12 | function GetIDString: string;
13 | function GetName: string;
14 | function GetState: TWizardState;
15 | procedure Execute;
16 |
17 | // IOTARepositoryWizard
18 | function GetAuthor: string;
19 | function GetComment: string;
20 | function GetPage: string;
21 | function GetGlyph: Cardinal;
22 | public
23 | class function New: IOTAWizard;
24 | end;
25 |
26 | implementation
27 |
28 | { THorseNewProjectWizard }
29 |
30 | procedure THorseNewProjectWizard.Execute;
31 | var
32 | LForm: THorseViewsNewProject;
33 | LMiddlewares: TList;
34 | begin
35 | LForm := THorseViewsNewProject.Create(nil);
36 | try
37 | LForm.ShowModal;
38 | if LForm.ModalResult = mrOK then
39 | begin
40 | LMiddlewares := LForm.GetMiddlewares;
41 | try
42 | THorseNewProject.UseBoss(LForm.UseBoss);
43 | THorseNewProject.Port(LForm.Port);
44 | THorseNewProject.Framework(LForm.HorseFramework);
45 | THorseNewProject.&Platform(LForm.HorsePlatform);
46 | THorseNewProject.Middlewares(LMiddlewares);
47 | THorseNewProject.Execute;
48 | finally
49 | LMiddlewares.Free;
50 | end;
51 | end;
52 | finally
53 | LForm.Free;
54 | end;
55 | end;
56 |
57 | function THorseNewProjectWizard.GetAuthor: string;
58 | begin
59 | Result := 'Horse - https://github.com/HashLoad/horse';
60 | end;
61 |
62 | function THorseNewProjectWizard.GetComment: string;
63 | begin
64 | Result := 'Create a new Horse Project';
65 | end;
66 |
67 | function THorseNewProjectWizard.GetGlyph: Cardinal;
68 | begin
69 | Result := LoadIcon(HInstance, 'HashloadIcon');
70 | end;
71 |
72 | function THorseNewProjectWizard.GetIDString: string;
73 | begin
74 | Result := Self.ClassName;
75 | end;
76 |
77 | function THorseNewProjectWizard.GetName: string;
78 | begin
79 | Result := 'Horse Project';
80 | end;
81 |
82 | function THorseNewProjectWizard.GetPage: string;
83 | begin
84 | Result := 'Horse';
85 | end;
86 |
87 | function THorseNewProjectWizard.GetState: TWizardState;
88 | begin
89 | Result := [wsEnabled];
90 | end;
91 |
92 | class function THorseNewProjectWizard.New: IOTAWizard;
93 | begin
94 | Result := Self.Create;
95 | end;
96 |
97 | end.
98 |
--------------------------------------------------------------------------------
/src/Horse.NewProject.pas:
--------------------------------------------------------------------------------
1 | unit Horse.NewProject;
2 |
3 | interface
4 |
5 | uses ToolsAPI, System.Generics.Collections, System.SysUtils, System.StrUtils, System.Classes, Horse.Boss.Initializer,
6 | Horse.Middlewares, Horse.Wizard.Utils, Horse.Wizard.Types, Horse.NewProject.Creator, Horse.NewProject.Creator.Apache,
7 | Horse.NewProject.Creator.Vcl, Horse.NewProject.Creator.WinSvc, System.Math;
8 |
9 | type
10 | THorseNewProject = class
11 |
12 | private
13 | class var FUseBoss: Boolean;
14 | class var FPort: Integer;
15 | class var FPlatform: THorsePlatform;
16 | class var FFramework: THorseFramework;
17 | class var FMiddlewares: TList;
18 | class function GetCreator(const APlatform: THorsePlatform; const AFramework: THorseFramework; const APort: Integer): IOTACreator;
19 | class procedure AddMiddlewaresUses(const AProject: IOTAProject; const AMiddlewares: TList);
20 | class procedure AddMiddlewares(const AProject: IOTAProject; const AMiddlewares: TList);
21 | public
22 | class procedure Execute;
23 | class procedure Port(const AValue: Integer);
24 | class procedure UseBoss(const AValue: Boolean);
25 | class procedure &Platform(const AValue: THorsePlatform);
26 | class procedure Framework(const AValue: THorseFramework);
27 | class procedure Middlewares(const AValue: TList);
28 | end;
29 |
30 | implementation
31 |
32 | { THorseNewProject }
33 |
34 | class procedure THorseNewProject.AddMiddlewares(const AProject: IOTAProject; const AMiddlewares: TList);
35 | var
36 | LUnitText: TStringList;
37 | LEditView: IOTAEditView;
38 | I: Integer;
39 | LLinePosition: Integer;
40 | LHorseUse: string;
41 | begin
42 | LLinePosition := 0;
43 | LUnitText := EditorAsStringList;
44 | try
45 | LEditView := (BorlandIDEServices as IOTAEditorServices).TopView;
46 | for I := 0 to Pred(LUnitText.Count) do
47 | begin
48 | if LUnitText[I].Trim.StartsWith('THorse.Get') then
49 | begin
50 | LLinePosition := I + 1;
51 | Break;
52 | end;
53 | end;
54 |
55 | LEditView.Buffer.EditPosition.GotoLine(LLinePosition);
56 | LEditView.Buffer.EditPosition.InsertText(Chr(13));
57 |
58 | for I := 0 to Pred(AMiddlewares.Count) do
59 | begin
60 | LEditView.Buffer.EditPosition.GotoLine(LLinePosition);
61 | LEditView.Buffer.EditPosition.Tab(1);
62 |
63 | if I = 0 then
64 | LEditView.Buffer.EditPosition.InsertText('THorse' + Chr(13));
65 |
66 | LHorseUse := '.' + AMiddlewares[I].Declaration;
67 | LHorseUse := LHorseUse + IfThen(I = Pred(AMiddlewares.Count), ';', '') + Chr(13);
68 |
69 | LEditView.Buffer.EditPosition.Tab(1);
70 | LEditView.Buffer.EditPosition.InsertText(LHorseUse);
71 | LLinePosition := LLinePosition + IfThen(I = 0, 2, 1);
72 | end;
73 | finally
74 | LUnitText.Free;
75 | end;
76 | end;
77 |
78 | class procedure THorseNewProject.AddMiddlewaresUses(const AProject: IOTAProject; const AMiddlewares: TList);
79 | var
80 | LUnitText: TStringList;
81 | LEditView: IOTAEditView;
82 | I: Integer;
83 | LUsesPosition: Integer;
84 | begin
85 | LUsesPosition := 0;
86 | LUnitText := EditorAsStringList;
87 | try
88 | LEditView := (BorlandIDEServices as IOTAEditorServices).TopView;
89 | for I := 0 to Pred(LUnitText.Count) do
90 | begin
91 | if LUnitText[I].Trim.Equals('uses') then
92 | begin
93 | LUsesPosition := I + 2;
94 | Break;
95 | end;
96 | end;
97 |
98 | for I := 0 to Pred(AMiddlewares.Count) do
99 | begin
100 | LEditView.Buffer.EditPosition.GotoLine(LUsesPosition + 1);
101 | LEditView.Buffer.EditPosition.Tab(1);
102 | LEditView.Buffer.EditPosition.InsertText(AMiddlewares[I].&Uses + ',' + Chr(13));
103 | LUsesPosition := LUsesPosition + 1;
104 | end;
105 | finally
106 | LUnitText.Free;
107 | end;
108 | end;
109 |
110 | class procedure THorseNewProject.Execute;
111 | var
112 | LCreator: IOTACreator;
113 | LProject: IOTAProject;
114 | LBoss: THorseBossInitializer;
115 | begin
116 | LCreator := GetCreator(FPlatform, FFramework, FPort);
117 | (BorlandIDEServices as IOTAModuleServices).CreateModule(LCreator);
118 |
119 | LProject := GetActiveProject;
120 | AddMiddlewares(LProject, FMiddlewares);
121 | AddMiddlewaresUses(LProject, FMiddlewares);
122 |
123 | if (LProject.Save(True, True)) and (FUseBoss) then
124 | begin
125 | LBoss := THorseBossInitializer.Create(LProject, FMiddlewares);
126 | try
127 | LBoss.Generate;
128 | LBoss.Wait;
129 | finally
130 | LBoss.Free;
131 | end;
132 | end;
133 | end;
134 |
135 | class procedure THorseNewProject.Framework(const AValue: THorseFramework);
136 | begin
137 | FFramework := AValue;
138 | end;
139 |
140 | class function THorseNewProject.GetCreator(const APlatform: THorsePlatform; const AFramework: THorseFramework; const APort: Integer): IOTACreator;
141 | begin
142 | if AFramework = hfApache then
143 | Result := THorseNewProjectCreatorApache.New(APlatform, AFramework, APort)
144 | else if AFramework = hfVcl then
145 | Result := THorseNewProjectCreatorVcl.New(APlatform, AFramework, APort)
146 | else if AFramework = hfWinSvc then
147 | Result := THorseNewProjectCreatorWinSvc.New(APlatform, AFramework, APort)
148 | else
149 | Result := THorseNewProjectCreator.New(APlatform, AFramework, APort);
150 | end;
151 |
152 | class procedure THorseNewProject.Middlewares(const AValue: TList);
153 | begin
154 | FMiddlewares := AValue;
155 | end;
156 |
157 | class procedure THorseNewProject.&Platform(const AValue: THorsePlatform);
158 | begin
159 | FPlatform := AValue;
160 | end;
161 |
162 | class procedure THorseNewProject.Port(const AValue: Integer);
163 | begin
164 | FPort := AValue;
165 | end;
166 |
167 | class procedure THorseNewProject.UseBoss(const AValue: Boolean);
168 | begin
169 | FUseBoss := AValue;
170 | end;
171 |
172 | end.
173 |
--------------------------------------------------------------------------------
/src/Horse.Registration.pas:
--------------------------------------------------------------------------------
1 | unit Horse.Registration;
2 |
3 | interface
4 |
5 | uses ToolsApi, DesignIntf, System.SysUtils, Horse.NewController.Wizard, Horse.NewController.Binding,
6 | Horse.NewProject.Wizard;
7 |
8 | procedure register;
9 |
10 | implementation
11 |
12 | procedure Register;
13 | begin
14 | ForceDemandLoadState(dlDisable);
15 | RegisterPackageWizard(THorseNewProjectWizard.New);
16 | RegisterPackageWizard(THorseNewControllerWizard.New);
17 | RegisterNewControllerBinding;
18 | end;
19 |
20 | end.
21 |
--------------------------------------------------------------------------------
/src/Horse.Splash.Registration.pas:
--------------------------------------------------------------------------------
1 | unit Horse.Splash.Registration;
2 |
3 | interface
4 |
5 | uses Winapi.Windows;
6 |
7 | var
8 | bmSplashScreen: HBITMAP;
9 |
10 | implementation
11 |
12 | uses ToolsAPI, System.SysUtils, Vcl.Dialogs;
13 |
14 | resourcestring
15 | resPackageName = 'Horse';
16 | resLicense = 'MIT License';
17 |
18 | initialization
19 | bmSplashScreen := LoadBitmap(HInstance, 'HashloadSplash');
20 | (SplashScreenServices as IOTASplashScreenServices).AddPluginBitmap(resPackageName, bmSplashScreen);
21 |
22 | end.
23 |
--------------------------------------------------------------------------------
/src/Horse.Views.Boss.dfm:
--------------------------------------------------------------------------------
1 | object FrmBoss: TFrmBoss
2 | Left = 0
3 | Top = 0
4 | BorderIcons = [biSystemMenu, biMaximize]
5 | BorderStyle = bsNone
6 | Caption = 'Boss'
7 | ClientHeight = 400
8 | ClientWidth = 700
9 | Color = clBtnFace
10 | Font.Charset = DEFAULT_CHARSET
11 | Font.Color = clWindowText
12 | Font.Height = -11
13 | Font.Name = 'Tahoma'
14 | Font.Style = []
15 | OldCreateOrder = False
16 | Position = poMainFormCenter
17 | Visible = True
18 | PixelsPerInch = 96
19 | TextHeight = 13
20 | object MemoOut: TMemo
21 | Left = 0
22 | Top = 0
23 | Width = 700
24 | Height = 400
25 | Align = alClient
26 | Color = 986895
27 | Font.Charset = ANSI_CHARSET
28 | Font.Color = 15790320
29 | Font.Height = -13
30 | Font.Name = 'Script'
31 | Font.Style = []
32 | ParentFont = False
33 | TabOrder = 0
34 | end
35 | end
36 |
--------------------------------------------------------------------------------
/src/Horse.Views.Boss.pas:
--------------------------------------------------------------------------------
1 | unit Horse.Views.Boss;
2 |
3 | interface
4 |
5 | uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
6 | Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
7 |
8 | type
9 | TFrmBoss = class(TForm)
10 | MemoOut: TMemo;
11 | public
12 | procedure AppendText(const AText: string);
13 | end;
14 |
15 | implementation
16 |
17 | {$R *.dfm}
18 |
19 | procedure TFrmBoss.AppendText(const AText: string);
20 | begin
21 | TThread.Synchronize(nil,
22 | procedure
23 | begin
24 | MemoOut.Lines.Append(AText);
25 | end);
26 | end;
27 |
28 | end.
29 |
--------------------------------------------------------------------------------
/src/Horse.Views.Wizard.dfm:
--------------------------------------------------------------------------------
1 | object FrmNewProject: TFrmNewProject
2 | Left = 0
3 | Top = 0
4 | BorderStyle = bsDialog
5 | Caption = 'New project'
6 | ClientHeight = 546
7 | ClientWidth = 441
8 | Color = clBtnFace
9 | Constraints.MinHeight = 145
10 | Constraints.MinWidth = 250
11 | Font.Charset = DEFAULT_CHARSET
12 | Font.Color = clWindowText
13 | Font.Height = -11
14 | Font.Name = 'Tahoma'
15 | Font.Style = []
16 | OldCreateOrder = False
17 | Position = poMainFormCenter
18 | PixelsPerInch = 96
19 | TextHeight = 13
20 | object pnlContent: TPanel
21 | Left = 0
22 | Top = 0
23 | Width = 441
24 | Height = 546
25 | Align = alClient
26 | Color = clWhite
27 | ParentBackground = False
28 | TabOrder = 0
29 | DesignSize = (
30 | 441
31 | 546)
32 | object imgHeader: TImage
33 | Left = 22
34 | Top = 12
35 | Width = 398
36 | Height = 134
37 | Anchors = [akLeft, akTop, akRight]
38 | AutoSize = True
39 | Picture.Data = {
40 | 0954506E67496D61676589504E470D0A1A0A0000000D494844520000018E0000
41 | 00860806000000CA206DA5000000017352474200AECE1CE90000000467414D41
42 | 0000B18F0BFC6105000000097048597300000EC300000EC301C76FA86400002D
43 | 264944415478DAED9D0B541457BAEFFFE7E60AC7E0230F8DC90575A51317A883
44 | 8FC1233E2E3EC6D611CC04650811D00163448D30198C06C6070EF808243E0714
45 | ED8408477C8428912488493AA3C2324AA21395516125D3B9519848F44451192F
46 | 70987B773D1AFA51555DD574374ABEDF5A33C1EEEA5D55BB767DFFFDF8BE6FFF
47 | DBFF63802008822054F26F241C04411084164838088220084D9070100441109A
48 | 20E1200882203441C24110044168828483200882D0040907E126EA51FCFA22AC
49 | A9E4FE0E45E189040CD7F2F3EB657825D2800AEEEFE80C542D0AECEC1B220842
50 | 8484837013241C04D15521E120DC0409074174554838083741C241105D15120E
51 | C24D907010445785848370131E168ED65B30551A71E088119517EA616A103EEE
52 | 39A01F82C787237EA61EC39FECA6F29C13B0E3B3648478091FDFA82A43FE7B45
53 | 28AEB8853BDC07BD83B0257F15F48F393E3F7A3F82C14FF6C788C9633165FC58
54 | 040F78C4C17DD4E3FCA765D8673C818A33E6F3B132868DC2EC17231111D8CF33
55 | 8F8F201420E120DC84E784E3CEA5BD484E3D88CA06A502BB61F07309D8B2540F
56 | DF871C9DD31FE9073311F1D82D54EC4C4572513D9AAC0ED4E39DBF2C41B0584E
57 | D37725487D351F46C5F30BE85ECA44519C3FBC9DBC8F9EA32291B72E1683BB3B
58 | F75408C2159070106EC233C2D15465405462194CFCBFBAA1CFB8B148D04F80AE
59 | 37F7EF46D45D2847F1E1B3382F1A63EF71092859172A2D1E6DE7EC87157B3661
60 | C89144CCD97F8B2F77F8B489087E4A1CB1741F86E8E831E8C3FDDD508E9417B7
61 | E0C83DE1FCC1E1518898F0341E3797D9FC23AA4F9F42F1F12A360AF1C38A7DD9
62 | 88F6757C1F56E5B0322A0EED46C19916E11E9E0D475E6E3C867B75F633267EAE
63 | 9070106EC203C26169B4BBFB6345CE6A443FEB637F5C6B3D2A7252F14AF12DFE
64 | 9FBA05992899E3AF78CE88283D2A8B8CB811C88C742633D23DA42FB3AE2409D3
65 | 37D7B2BF1E415C4E0E9605FA408E3B75F5F0F2ED673FDAB8771A1B666561BF78
66 | 1FE9796CB463272E8D301D5A8BA83FD7F0A31FD97B20080F40C241B809F70BC7
67 | E58239887AB7115C0F3DFACDDD58112C6FB439F128FEA3F97AC4A9A8BE0AE7E4
68 | 18C0AEDBC0AE5B615AE8FCCE596C54C215198B124324744ED4D4E5C279887A9B
69 | 13351FC46DDD85652365EEA3B516FB1393B0E112F78F206C295D057D0F0D2722
70 | 081741C241B8094BE1E82052C2D1CC7AE9CF8BBDF421F1389A1B0E5F07C5349D
71 | D982F1AF95F33DF6C1BFCF46D16FFDAC0FB0120E1F24190A91E0A053DF261C18
72 | 831D475310A275EDA1B50A1B67A4A140E57DDC284BC5E4CC1AFEEFB0F442644D
73 | F251751A827025241C849B70B3705C3260D4E23279119082139BA94C6CB8BF83
74 | 1370ECCD50619DC28CA570A81C41DC39BE0EE3D69CE5FFF61E178B3D2B233158
75 | CB28E0DB7C4C9F5F823AB5F76171BC775C06CEBC446ECA84E721E120DC84A570
76 | F8212C2E102A4C7B3B774C282DAEE10DA49470DCF894F5BCD70B3DEFE8378BB0
77 | 22B89B8A421D4C9F5908876AA3CC4D81AD4AC29A2F84856B74F741C8CC582C54
78 | E3FE6B731F715B3FC0B2910E7E60296EE12938B3748CA4871641B813120EC24D
79 | B8778DA3EEE3D730FD2DC107292E87195C951DEFCAEDB3F07211F797C43A87C5
80 | 394352776247A8CA9889D65A1CD9BC0E691F5BBBEDF61C12848573631011AC43
81 | 4F191760CBA927CD488D9A08C2039070106EC2BDC2D1BEB6A04D38DA7FE742E1
82 | 1069BA761607F2F2B1EBD35A2170CF4C6F3F442F4E46D2347B01B1BC0FCD9070
83 | 109D040907E126DC2B1C963DF54E1F71D8D25C8FF39F1FC4AEBC13A8B8DED2F6
84 | 31B706529416099DC502BAE5C829FA8D42240DD5709E87BCD0B3879A293A8270
85 | 2D241C849B70B370B8798DA343C261799D67F2919A51D2160DEECBEEA584DD8B
86 | 795DC24A00D5AC7110C47D000907E126DC1CC761E15DE4BB201347D504C3597A
87 | 558D8CC7D1AD36AEAF6E100E9E7B55D8989086822BDC3FACF36039E51D46109D
88 | 0C0907E126DC2C1CAD3530C4A422FB1AFBDB3F1225B9B1D03DA45CA4651C87A4
89 | D8B84B3860392565334566198FA2F23E08A2B321E120DC84FB23C74D879210FE
90 | 672EDD473784A51B90354921F3AC55E4B84CCE280F0947D6079908B3C8AC6B19
91 | 011F929AEDD2F312843B20E120DC84077255594E0175D721697306128648E5AA
92 | BA858A9CE4F65C557119287A29D03EFEC15DC271F72C362E5E275CA75474B865
93 | AE2A3C8288D4D558364DDE855748E17E15DEE3021D46CB13843B20E120DC8487
94 | B2E3D6E463FEAB25382F66A71D3C250CB3F5CCA08A6B08FF55578E8FF79C6AF3
95 | 6E52971D57BD709C2F9887F5DF0C4388AE3F9E19C665B3F542DF813AF46DAEC5
96 | A51FEAF9ECBC078ACEE2B2280A728910B9ECB873979789C7B1EBECEB8F88B051
97 | 1831AC3D436E757535CE9D3C8B8A6F1BD1E44C9D12848B20E120DC84073772AA
98 | 33624D9A01C5DFB62814A8653F0E0DC2A1360EA37B3F36924847FA24F9329BBE
99 | 2BC38675BB1DDC87B93C56A747493888CE81848370139EDE01B011A6CA329B1D
100 | F8BAA1CFB3FD317ABC1E31615A7600D43055D56042E517A7F0F9C90A9CFBE12E
101 | 4CFC684084DBB96FD03308D18723624AFB2848F93E5A5077C988E20F8DA8F8FA
102 | 2A2EB7C58170F7F218460C0D41C884B1983A52612A8B20DC0C0907411004A109
103 | 120E8220084213241C04411084264838088220084D9070100441109A20E12008
104 | 82203441C24110044168828483200882D0040907411004A109120E8220084213
105 | 241C04411084264838088220084D9070100441109A20E1200882203441C24110
106 | 044168828483200882D0040907411004A109120E8220084213241C0441108426
107 | 4838088220084D9070100441109A20E1200882203441C24110F70BD7CBF04AE4
108 | 09E80F6622A26F675F0CE1143F9367E832E138BF7316E6EC57776C5CCE075816
109 | D8D9B7DE05A92BC1CB8BCB1196BB0911BE2E2EFAE3D7F0827102DEDF1A0E1717
110 | 4D9879D08C4EF3596C8CCC02D2F762D9C86E0F4ED9EE44F619B6A0727B2C9291
111 | 82634B82E0DDD9D7D9415C2B1C4DC9F8223EC8E1B15E3D7CE0FD5027DDF1D7DB
112 | F1CAB548EC08EDD74917E046AA0C084C2C738B300B1D8350149E48C0F0CEBE4F
113 | 17C389E2FE819B3ABF33F3A009077FBD062075A7EBDF277796EDF63A917A86F5
114 | 287E7D11D62001C7DE0C459F0E9F8895F787123CB3B573DE47D70A073250B5A8
115 | B3DF3E653823B1FEA1D71FACC6A8FAE6B811C72944E46522CCC586871F719CD4
116 | E3C3375CD1E8EF2F2AB7CF42C584FB6014FCA009073F2AC88177A6014943DC31
117 | E27053D9EEC4C1886343F7D5287A29B0E3238E56563FBF3A8BA99DD491FB9909
118 | 470B2A364761FFE007AC1743B8915AEC4F48425D120907E1023CF50CAF1C44D4
119 | DC9FB09284C30334D7A020311595B3483808910623D63CBF1D3DEF877537128E
120 | 071F0F3DC33BC7B3306ECDA39D36757C5F0847D3B51A7C5E79049F955E4065CD
121 | 2DDCE13EECFD088283F55890108B60B90770B716151FE5A3C0588D73DF36A289
122 | FBACBB0F060FD061C4E4B19831598FE14FB261EEDDB3C84EDD82822AF1185B82
123 | 5D35EF2870A3AA0CF9EF95A0E2423D4C0DE2350D0DC08CE805983DB29FCCFA4E
124 | 15364EDC0B1DD7E01E6B84A9F230761D32A2E28C757DC4CD9D8990013ED22796
125 | 6DB4526557E0CB8BF5B8714FBCBE5163313B261611431E91BEA7B2544C3E3651
126 | B19EEE5C2947F19E12947E7D1597AFB7B04FBA41E71F80901763B170923F7ACA
127 | AC6B716D67D74041CCA5CAE8F32CABBBC817103F2D107DE4D6C65A6FC1F4F529
128 | 947EC2EACCF6B731F1ECFC3AEBF3D795213975378C575AA4CB8B966ECBE6EB2B
129 | AE3409CF564D3B3573D7842345FB507C8CB5F32BEDD737F5F970243C17843E3F
130 | B9D6E8F0CFECFB58FE3EB8EBDE6FD887FD678467EEDDB71F42F4914898A3C7E0
131 | 1EE6F65385E243EFA3E048557BBB65ED223E3E1E61CF4AB539AE5DA50112A26B
132 | 796E73B9074E56E3B258DF3DD93B1A12168EDFCF9C00DFEED054B6657BB95155
133 | 0243FE617C2CBE2742B931581E15D4D6568467F63EF22B6A85F6AEE699B5B6A0
134 | EEDB13282F2DC7075FDB5EB775F956280887928DB4B319FCB9FA61484020A64C
135 | 0EC573C142FBAD2B4BC32BB9556DC7D8E229C7A3CE178EBA12CC89D90B4C0B43
136 | 0433F6C143FDD08BFB9CBD649F1DCEC786A29F303B278755864DC3BDC61E50BC
137 | 01E786EAB1ECB7133062900E7DBD80DBD7AA613255E1E35266400625E2D8AB63
138 | E0CD1AC19DBBCDEC474C409EDF02D3EF37618BDE62C4F190177AF670C13C6A6B
139 | 3D8C6FA522F9B837C2E22211333E10BADE3DD0D460C297274B905F7016B5C1F1
140 | 284C0D87CEEE65E15E94B5F0CEC9C633079390563B0C4931A1181D1000BF1EDC
141 | 7D9D45E5B1126CDC7F15BA056B9137C7DF7E9E545138D84BB87527744549D8F0
142 | A37CD92352B3254763CAC2D188CB856998FB36FB7DF43CC44D0EC488271FE585
143 | FDDC05230A728D38D7578F2D6F2D41C863726D67158E0E7C1FE1DB6E610AABBB
144 | 885F0660886D19431350B22E14BE762F6C0B2AB7C56249850E1173F5983152A8
145 | 77F6635CBF684476EE4154F8D9FCD6DC26589D25CF67A2FA462192865A14E9E5
146 | 839EDDADEFD1549285399BAB3184DDE382B05F6208FF6CABF1D97B6F63D3C74D
147 | 98BD95B5D391D2A2DE5465C0DCE565A8E5DBAB5E6CE737517BB10AA51FED45F1
148 | 8F1390BBAA3F76C5BB5838CA27A270F2292CCE6944C4E270CC1816C49E39AB97
149 | 2B5530E61B90FD4D00B2F23230E51ABBBE95E5E813168B68F1F971F756FED13E
150 | F977D09170B0F65232F72A92138DE8CBB58BF1FEAC53C73A4ECDCC385E38857D
151 | FB4A70A4598F4203EB354BBE0FF2C231DF2B0579C8C7E2937E5818138E9061DC
152 | FBCFD5E7591CC8DB8B5284212F371E7D8EA7E1859C9B08890E6F7B1F6F5F3B05
153 | E39EBDD878A61FD2F3595D3F695F77752549989E0784CD0CC373E3C5F6CCB8CD
154 | 09F0AEDD286890B96ECDC2D1C83E4FC49CC382CD686BF75C1D7D6FC2A5F2721C
155 | 387E13B373B311CDB933DE6BC41DD66C6B8D6988FAB31F767C98801196CDD643
156 | 8E479D2F1C8C265611DE5ED2DF5D2E9C87A893337134D7D20DF4168EAC99873F
157 | 3FB10A254AAE6DADEC7F5695283446935B3C35C406707218766C4B963490DCC8
158 | 67E3E27538C08CD851BB4566E1DA2A06B01EFFF844142E0892ECA1DFF9DA8039
159 | 7F3022F8CDDD58116CF3223B108EE2DEDDD0372C45B6ECA6CA2D18FFFA4D647C
160 | 9881B0DED6DF2909471DFB2E7C1BF05AEE6A443F2D61385B6B51BC6A29D6D4B2
161 | 972D8FBD6C36CF9A6F3B47BAA1676F262EB90908EE615F04EE9DC6865959B8BE
162 | 7C37B64C91181535B31EA1978CF8379423E5C51CF45EB7172B46D91C237AEFE8
163 | 1CF4D46E7C9A8AE9EBEB65C5C15C07197B241C13B873CC35A06E66068A16492F
164 | 8CD67D9C8A174A1BE177C907B35D291CDB4CE8E9AB476E8E8491631D9DE23F2E
165 | C286870231FAEB6684E4650AC6C906D3A124841705A1685F3C064BBC4FB2C2C1
166 | 9DDB4B8765B999D2EEE1AC5DEC4F4C42C1984C1C8DF3B7F9525938B8F6D267E8
167 | 3C144A7524EEB1F72C7E1DCEB1DEFA9DEA7E5891B744A24D35A262F33CBCD290
168 | 802FD2F5E869776D2D686223424923DC5A03437C2ACA23B35118EE67FFACB508
169 | 474D3EA6275423E13D690113CE071B3B26D66FA6EEE73D55A588F8209EFB80BD
170 | 906DC6586854CD9B3E6086404B616E148E6FF3113EFF0466E4ED46C2B30AC75D
171 | 398839738B306493AD1113AEADE0C95014EEB137AE965C2E9883A8D32FD88829
172 | 1C0A47C193E1122FBF25C2427145E46EEC98666D9C65854334CA4835206BD223
173 | 904534FC9716DBBF6C82ABAF0F920C8548F0972FC2746811C2CF84E398139E5D
174 | E77746B15EEA6A9C79C9A67DAA118E6676EDCFB36B5FC0AEFDB77E3207B1BA5B
175 | 9C844DC33370C6E61D109ED74C94E44442275BF7A2BB66A53FD25D291C992644
176 | 6F92104C11AEB330EAF572F8BE2465BC45EEB2673CC38067F20A6DDAB603E1C8
177 | AC813E4D46E82DCFBFC60785476D0DA003E1D8EF8715FBB225858E836F2B7FAE
178 | 573E3F7B67A7CFAFC5B2D255D0F78026CCA339BBB6A85138F8724AC7E2688EB6
179 | F828120E87483520E12533E83250B2488B6B9BFB8483334C734CF354AC95089E
180 | 5DAF200567968EB1B876E1DA8C0BD80B3CC75FF9647C833F8DB83D3B113DC0E2
181 | 7307C2A1A66CCE35F5E587EC9FA39C70083D4BD6804B5903763044E65FE64FF4
182 | 283130036A5577ACED1C63A2F61E1335A502BEDE8EC03F7473EA6591153E15C2
183 | 71E7F83A8C5BD38C2C899198DD39B8BAB03482ADACEE67A4A16EB9B2016DFB7D
184 | 265C2C1CFDB0E333360296EB88F0DE394508C92D42D210B992AA903D3D0D4D6F
185 | D9D69123E1E8812D8E8CF2B512BCFCE22984C94DAFCA09C75F63EDDA91258220
186 | D623CBAAC36903B7A634CBC9A9413E660AF66D51EB888395332AD184151AAFA1
187 | 6B09879AC871CD0BD1D20D889B338E4A34A2675C0AB6C605C92F9A4A94E57AE1
188 | E0827116E14048368A647BA4ED70D31E9337DB1818F3B5ADB4EFEDDBC1FB70AF
189 | C3F5F442D6CBB7983671201C76C74B20D7019033BCBCD034D98AA00C97D84BB2
190 | D8840C9B97993FE78FC9F8226D82FD9481D56DC8BCAC2AE88870F0F7F84D3C8E
191 | 3A8A9AE705BD1A0996F5CF1BC6324CB1157985FAD16A4414EFF983518A06569D
192 | 1790D051334EB67D6F1C08477E80E3CE80A3753939E1F8A78336A7AAADC89FC3
193 | 21AE120E6EBA705512D6D406217D4D22229EF55173F62E261C6A22C7A516A2CD
194 | 1E0CC6D3F8FC7C2D6EDFFBA9CD8BC18C94B740D37765D8B06E378AEBBC103233
195 | 160B7FA3C7705FA5456E7709877AC32C1CCE353A934D6F484B2316A7946CDD8A
196 | 9D78096DD1261CE2C86F988A5152DBF5EDC6609BDEADEAD1AA2363D06042E517
197 | A7F0F9C90A9CFB919DEE8AE8356646AAD3E25038C429249D8AEBE3CBDA8B1196
198 | 533AFC35FFE8B8E7ADF8FC9C438D279C5B85C3D1B915CFEF40381CB517570847
199 | 733D2E5754A0F4F4297CF97D239AAED5DB783385765C38385A6FA1B2702D92DF
200 | 35014382B0706E0C668CD2A18FC27475D7120E27A6AA9ABE2B41EAABF9A8F0F2
201 | C394C9133131F8693CFD94E0ED2320784279294D2588EE76BB3EAD45735F7F24
202 | 2C4D4474B09FC402B07B854375CF45140EEB29092D65C8BCC89D241CF6064506
203 | 1923DD61E1602F5EC5CE542417FD04DF90B188181F84003F3F3CC379F08887F0
204 | 5E28957AE785A352C57315B1EAE46819259170A82ADBFDC2D1EE41E71D380C33
205 | A68E41886F7FF80D123D3E392E1A30EE8F3EAE110E334CA8CE7F7E10BBF24EA0
206 | E23A303C3C16CBE78663B8C473F9790B07EF52BB1B589089AC993A193F7F0D06
207 | 951990CBC7F762D33639F74F1A7174BD11878537DBE66484C8183FE7A7AA847B
208 | 3C126CE3C2AD80954B247FCD2D78E72F4B10EC683A95844355D9EE168E362FC1
209 | 9CD588969B3A72D554950C4DD7CEE280E16D647FFE1342966622335C67352DF7
210 | B3168EF3EF4661CE57B1F6DE4196701E2D53B314471C7698DD3F6FD996DDB5D6
211 | 389ADF2CC28A608BA9398F0B870BD7389C150E7E817337FC143C8738F885F9CA
212 | 70278443746678D849C70FA9750F571CAB02120E6784437004A894F0FEB34458
213 | 7C77F188438236F77B9BF6FD33160E9573C7BC9F7309F45A17B0786F9133363E
214 | F1EEF3AABA5C380751275F5016411E65AFAA03D1F6EE9CD2752261603A413878
215 | 8FA34C1FBCF3613282BD94CB56F4AA72563824A7FD6C11E27E52EE39B3C6A172
216 | 91590EB1E3035B919740F0DEBAEB5AAF2A120E6DC2A132AE8777B17E7782DB85
217 | 43AEE3F233168E461833E620F9F155A85A12247B0C1FA453D2A23D945ED2CDAF
218 | 06861753712EDE0D711C7C04FCFB1891B39B5DA78281E8701C875827DFC46A8E
219 | E370877098631C6A5F7550A78EE2389C150EBE975E8584F736C90750F175BE17
220 | E7A516C7F918852DE8AB54377CAC8A017DDFD8251B192E8F10D5FEF24F328166
221 | 6D88E276DCC5711C241CDA84C3DC1EB6B2CF46CAFC4C6CCBFBEFB96871DC0152
222 | 2EF24227E3899FA3708861FDB93AECF820192112F96AB868DAF0F7EAE17BE516
223 | 422C1FEEBD5BB8E3F5886CEEA3F6796FD6BBDD136BD14B14C5AA7589E24B2CB8
224 | 1607A9F38469A305E7DF4DC09C6301D8F2560AF452464C75E4F852D908E31B6C
225 | 883CFFF50BD0E74AA49BEE0CE1801855BDB90509DB3290E0EF64E4B8B3C2E128
226 | 388FAFF32C54C00BA6A76225AE5FE84C14872904C0A17DDE7B455EA6F2265912
227 | 51BEE6CE422F99742EE6F25F286D81AEAA1B222447920698D4C4F8A87C66D665
228 | 9370B49F430CE41C94829352D3AF625B2EA8F581E9CAD80E0A470BEE34003D7B
229 | 2B7434C575E0BE2B77233DC4E2DDE23B4C464438089A75179DBB38DE5C85ECF9
230 | 69608F18CBE263A11FE5875E5C8E966F6AF0D9A1DD38706B2233C2A1A84D7DCD
231 | 3AED35D728969723645A28F46302F08C9F9F9883A61AB5B5D5283E588223DFE9
232 | B042220546D32503A21673F11F89C8F84D109FDFAAA9A11E4D4FEAE0CB1B34D6
233 | F3FB23EBF9B53A91F8D0ECDDF3D15D8C9E6999F3476DAE2A219FD490C3495877
234 | 77A2454E23219F54F987FBF89C4833D233913E49C200759270587AA1E8A68523
235 | E6F9B118CD793469CA55E5BC5795900EC48480A87948FA8D90438A6B0BE7FF5A
236 | C6EAFC027C176762E59325987C28405EF8D6D763C6D2A54898A413EBBB1EBDFC
237 | 75169D8B465CDE9F86F93BAF6248781422260462F820F3B3E1DADD77F8DC7818
238 | C5035324A71A6F546EC72B6B4E00E3C2113F4BAC1F0839A32A3E38885DDFFF12
239 | B93961B8F46A0EBCD7DB3C3F7E6DC888D939459A46DD241CCE2D8E0B36A20C08
240 | 89C4C2B9131122BEC3972F96B3B67C02B77FBD143BC26A994197486BAE493884
241 | 7ADD78270811D32D3CB7F83C55B5F8FB9923C83E5C835EA129C84B1C6313AB56
242 | CFEC5412526A83B0E2F5583C3780CBA57513B53FF5C0E0A71DAC91BA804E77C7
243 | E502602A8BDE46F6A10B386F95D1D49C515518259C9B65F170B94CA895461C38
244 | C20C52F54F622654C09C8D3578861EB3A74C804E66B470E3EB7CACCF31A282CF
245 | A8CB9D6F2232B631A3C61D2F2E3C9F5BAABC38A6C49D1A2376ED39689D1D7754
246 | 1066CD8C41F428B9E91C8B463C443E3BAE6246CF4E130E01DE13246F9F7576DC
247 | 51C3A00F8B41FC249D6276DC8EC671DCF996D579FE5E1457D8D4D7FC28047319
248 | 92B91E9AA11F0AE584AFCC800DFB4EB565ADD58D8AC2964DF66B1ADC3D16EF2B
249 | B1CA98CA9D6BF0A06710A20F47C49440B10322F57C6CB3C4DA66FEE5DAFA5ADC
250 | 5E6CFDFCB84DB4A6E7F8A95A47D2FACC483864DE8BEB675160C86FCFA86BCE14
251 | 3C371661FE8F88535AD588E9E05455D3B52A941E611DDDD37FC72573667008D9
252 | 8B478C1C83B0E7431111286333EE99509CBB1D05C72D3235C7ADC63BBFD5BC12
253 | A71997094797815F543F81590A7970DC4307A258892E8CB0389AFC500A4EBEAA
254 | C2738D203C0009870DFCA2D3912097EECFA10E120E420A6E0D66356EAFD2364D
255 | 4510EE8484C306CE83E14080E38474AE8784839080F30E7CF5265E53CC6A4C10
256 | 9E8584C30AD6BB9B7B04C3F3B4CD25BB860E0887A7B61CE572EA14E558AD47E9
257 | FC2762D966717D887039DC08787143BCD3EB6D5A50BD2EE1044DDF19919DD7BE
258 | 06C5CFE147BFEE91F978C2F59070DC37DCEFC2710BC68C04247F138415AFBE80
259 | A983C49DDCBE6981EF387F0F4FEB11EEC06DC2C1EF5573043DE312B0F2D763C5
260 | 5D27AB51DB3D00C103B4C6C510F703241CF70DF7B970F0018E46CCD893ED383D
261 | 38F140E21EE110B7F56D5D2A1D17413C909070DC37DCDFC2C13B0DE4FA39DE5F
262 | 817860718F700801967F5FAC320128F14040C2D115F08070B873FE9BB83F70CF
263 | 3326A78FAE08094757C003C2C107A195EB4938BA306E110E31A09684A36B41C2
264 | A109154912C53DA6BF5CA090629D37F446E8A512F3DDAD45C547F9283872C122
265 | 8A791822A217204E2EEADC52381EABC7F94F0F22FFE02931325EF060E1A29AE3
266 | 7F1B2AB9298C2C7546A46C3E882F2FDAECA427D29E7892EB55EE854E14AE1B67
267 | F2B17EDB1118C5C8EA9EE129F864E998F6F41DE61D1F4BCBAD22B07B0ED02124
268 | 2C06CBA364B602E6EFF32A1672D1BA5C3D1D3220FBA36A214ADD1CD91B1F8F30
269 | F31E0AAD625DEC3B215E8B392B413C162A44B25BFDB6AD1E157ECB4711E7A0AF
270 | 524A1031DF949F52965C7EFFE9166C97D8BB43D8ACACC43A2ADF3F00212F9A33
271 | 2C4817C98BC1F7B142B4F25D138A0D5B90FDA9391ADA0F2B0CED6B560E85E31E
272 | 7BCE096BF1E5E4D5D8F352A0C27A4523CE176661FD27D5763B79F248259B34D7
273 | F70767505963E1793532A43DFA5FBAD2B4B53DC225907068E4FCCE28CCF93151
274 | 7E7F6CFEE52F43D39078D914EB72EB05E6DD102B07E9B12C3A141344CFA54B5F
275 | BC8F4DB9A7D13473150A1704D91B09B370E4C7A26EDD5A540C0CC36CFD5831CF
276 | D54DD45EAC42E9A1DD2838E38308B93C575230037FE76E33FF27BF835EC55814
277 | A587C22C87ED1B16995FDED578E65022E67FF50C92625EE0738F793798F0F7D6
278 | FE08B6C89FC327B7CC03C26686E1B9F1423E2F8EDBCC38EEDFC5AEB3418F4203
279 | 1307DB7C5EE6FBCC99888A95BB71276C1EE22CF3811DCBC7BA77AF22382D1B5B
280 | C6FD88ECC4B5287E6222927E23E6FCE2EAF24C19B2B719716766866C2249FC74
281 | 1A1B976FC6010C6BBB0FBE1ECF18B1695B09CE0D8D47C93AF66CDB9E83E30DAD
282 | 8434D835F08E908F00E753F39B126CDA5623FB3C0D73DFBE8A11D1EDF70B9579
283 | C0DA8463662D9F2CAF79E63C2C08E3F279B5A0F69B9BE835AC3D458AA27030D1
284 | E0EAD3F81FABE5EBCDB22DDF6D443397F051DCC1136F142269A8F8A5EDF6D1D7
285 | CAB166F916947A05B1FA0E47C8301DFA7AB5E7F192DBCC48405BDB235C030987
286 | 46840D5C801D9F25234422D683139614E831617F159E964C5B22A69078D866DF
287 | 0DCE28CE35A04E4E1CCCBB252ECDC68E6936865FDCEBBA6E40337C631432B072
288 | D986DF6AC46B4E784629F746B997772D9AA327A2F27B3FECB032AA123041E27A
289 | F0DE52C7B4B2515D7C2ACA23257285893B089EEBFD1822D66F62BD7BFBC556EE
290 | 1EA7E700FA9126348DD98C1D52F10F7CB6DAC398209559544CBC59E0672B0E22
291 | 7CAF3B0D159399F058F4BAE5F61A111084A552178AEF0EB3FA97CC3925BDAB63
292 | DB6E7412093B85FA52CE3C2C3C371DE2700A88CE514C0B2FFB8CD968A0785512
293 | 367ACDC3FB69A1CACF56B26D28AC7198EB739454223F01F36646BE2B25DABED6
294 | B647B804120EAD284D4BF0D35459E8B52D07BAF7E6A1F83FA4A6B484E9AE1B4B
295 | 2DA72CC43D1BAAA35092C30C8F4CC317D2D007A2B0941908CB63C469908A6047
296 | 197D0503B6C1577BDE23C7C2C18C2D0291F56106C27A77AC8AF97395B373BD21
297 | BDE9D2970ABD76F3C649FB9F0C47916CB4B5903873A3CE7E84E028D53F47D399
298 | 2D18FF5A3D5658AE2929EDDEC75FF7293CF7612C6A1364D287F0ED6A1F46ECD9
299 | D92EEAFC3E204C05530DC89AA4D06B56D8EBC43CD2F17D49396DBCEC33E6323E
300 | E72423F91A6B9BEBB48A0687B2705C2E9C87A84F26A2285F3932DE742809E16F
301 | EB24123DBAB6ED11EA20E1D08CBCD1E1A7A9960379CCB0FB7E2A6368F9248ACC
302 | C058EEF5216E1ED39CE620D589CC9EDD66830A153B1B3A1A31C9A146380E44B8
303 | 28119FE27ECE0ED609C49EFBA6316C44F792FC6A2CBF6D71F36A9B0CABEAF6E6
304 | 30AF6399965A6EF32BEF766A5977756C443A1FABED52AFF3CF65F3A356D397FC
305 | EFB6E9EC3B0A12C88D7804E168C40A15493BED9FB1B0AFCDFCAFC6222F4762EA
306 | 50DDC394170E733D3ADA048C4376274517B73D4215241C4E20B795E8794BA3C0
307 | 07CC9DB2DB9447D2007FBD1D817F30215D69173B1E99C57995DB5DF2F03B23BE
308 | 8FD17985487856E33D3B100E55FBA5AB4151384A1062D92BB7432E05B88AFBE1
309 | EB261F014ABBBFF1881B823D619D229B5FFFFAE7529B2D81ADAF871FADACF2E1
310 | 3B179662705E42505CB19F7B9BF81C75BC539C6D9DF0D364FB74C833382B1AFC
311 | C394170EBEBECB3045F1799A11F6C9491B64DB217071DB235441C2E10C52FB99
312 | F33BD16D86D75BE669086127B12F232D471182C1310CB5F6B852BF7FB0CC22AC
313 | 16775CB1E7E6A5D13D528D706872B96CAEC7E58A0A949E3E852FBF6F44D33571
314 | EF9236B46DCB695B474E0987AAFDCB05F8BD157E4CB65AC8E6470D6B7CAC4708
315 | B61D08BE9DE4A0CF36CBF515A9E94BC70BEE56C88C46B5B8D85A1EDBC4894666
316 | 0D66BC5188F4711D09DC53681B7C7DFFA87AA74DBECEBF4FB099C2A43891CE80
317 | 84C329ECA725A47A92FCF4C185C8F66D6AF9A1F95AE02DEB396EF33CB46AA26D
318 | 36B1D114C7E1DC8BE63AE168DF2DD03B7018664CB5D8F9CC7CC84503C6FDD1A7
319 | 9384A34C7DA5D8AE29F1538E063C63319AE3D74C4E86591C273847AC7FDC623A
320 | 4CF2BED4DD8775DDD88F3A9D118E92B95791BCDC841193D8355C1C2BEDE1A61A
321 | 47C2E168B3A57678E130D9AEE391707406241C4E623D2D21E6E3F1B699BBB65D
322 | CFE017506F62A5CDFA02FFC27E32CACAD555112F1FF4B47C911FA011479B9750
323 | CE6A443F2BD393559CAA72B7703462C7870918A1A6526CDD4AC5731F08368F28
324 | 855167C5F3D6D762BB9EC1BB67EF0BB099FAECA411477E3D743D0290B43E05FA
325 | BEECFA1393B0E9A9641C93733F77088D38BA22241C4E62F5F2CB8C24CC0BB5E7
326 | 628491093F02B918631703222C58FBA8EE79D921B7682E85A679E5765C231C55
327 | C89E9E86CAC5CADBF2CAD687BB85436A0A522356CF58EE7A79F1CE411F7E6422
328 | 8E409EB0170897AD7168128EFE78276F0982CD86DCEC06FE6AB6BA918F1D9E59
329 | E320E1F02C241CCE62E93ED9D0EE4D65EBFDC21B92EFE3D9CB1F888A8C39D22E
330 | BAAA167D15D0E05575E7F3348C7BCB4F95A78E252E110E958BF8970BE620EADD
331 | 099E170ED1CBA7395DC96BCB0116A3CAC19FCBD5992016D903B99149A3EC0E7F
332 | FC4824D347D55EE38A5E554EAC71581ECB5DC7E435F54EC5FF28B70D61CAB73C
333 | 26DBF17E230EBCAA48383C0B0987D388415D618558F85FAF21EAFA123B174B1E
334 | CE90243623AB34089FFDEA6DF84A8A83B0D7C5C6C75350B22448BB4BA1398E63
335 | D292F6F514295AC5A98700F7C471387C7945B7E3BE4A5E4B624CC2FE7B9DB038
336 | 0E31AEE0C24C1C7DC3C94032732C4F0E1B017E1885FD83A5AFA36D8BE2A5CD48
337 | 7DD1843829F7687E213D0BB58EDC551DC571745038CC6EB9734E3AB3DEA1DC36
338 | F835A07D8128DC631FBC6889A3380E120ECF42C2D101B85E5E5443385654EF86
339 | 69AE5C9E22AE57B516889F0963FE5DA4CBA525374F09246EC68EE7147A5F5C1A
340 | 07C9942347703BB01EBD66C84D2934B2EB5D8BA8B7818C3D9908D33815E39AA9
341 | 2A61CE7FD3A014E9BD19C428E8825A1F98AE8CED14E1688B641E2F13C1EFE859
342 | 88A389FD8313A0DB7602BA3D32D7CA8B683982537DB0E6AB20D91436373E4DC5
343 | F4CD2D48D89681047F6723C73B2A1C688BE82F1D9FA12AE5483B0EDA8618A96F
344 | 1C9A8C1DCB27488AB5E3C871120E4F43C2D111B8D1C44A23D030818D28E4A77E
345 | B81C44C91FB1DE5570A2E27C7553CD5E2C597E1097064D4052D8048C0808E077
346 | 4BE3F2125DFAE12A4CE546183ED561EB510983BAB211CB363F8DD257B3503130
347 | 1CF1B3C662F4807EEC5C7771FD9BBFA278FF6E145CEC8F243903E400572D8E37
348 | 5D32206A71191012898573272244CC3375F962390A724FE0F6AF976247189757
349 | E927ACEC0CE1E0E07227ADCC412986212E7202260CF587AE770FDE85D8F47D2D
350 | FE7EA11CC587EF22224FFA3A845C64D5F01D188B4259832D06925EF441AFA84C
351 | F98498165E68BA69E188795E7CAE5A7255B94238F87A51487B238B8AB661CE0D
352 | D6A0C3ECF96198312C88B57B2DB9AA48383C0D09478710E6680D9333A4A7A9CC
353 | F0F3DE25189EAE62331B669C2ACBF6E140E985B62CA14226D4FE0818A3474C98
354 | 1EC36D3385720675CFA3D8C28952AB7D765C3EEBECE450C447E931D8C9BDC15D
355 | 1AC771FD2C0A0CF9C8AF3067691533DBCE8D4598FF23626FBC1A319D251C1CAD
356 | B770F9F861E41F396D911D98CB90FB18460CD52322528F9001320167E294DC1D
357 | 076B4EBCC0ACA946928A60CCA66B6771206F9F7576DC51C3A00F8B41BC42A65F
358 | 970A07CC232060457EA6836055332ADB065FDF7B6178CF3A3B6EC8383D66CF8D
359 | 4470DF0E964FB814120E8220084213241C04411084264838088220084D907010
360 | 3F5FAE1D01D67C09A4FF0950355F7F9F944D109D0C0907E15978835A22F36537
361 | E0D1EE806F30A01F0FF83F05FC0F775FCBFD2A1C2DC0CE64F6DFDF018B46BBB1
362 | 1208423B241C8467E10DEA4960690AF094CD7775D5EC7F57802FD9F7DFFF13F0
363 | 6607BCBC1418D6CBA953A9BB96FB55387E60BF67BF45382B23CC3DF74F104E42
364 | C2417816B506F5261391DDBB801AD6F39EB912087D4AED195C7F2D9D52B638E2
365 | F05E04CCFB85EBEF9D203A000907E15934195436EA3030D138CBFE5CF2261B79
366 | 38993FCA25D7721F954D109D0C0907E159B41AD47FFD201CDB32155817E9DA35
367 | 0F120E82700A120EC2B3386350FFF69F40F64960D12E402E39E2EDABC0C7FBD8
368 | E884FDF7AE10598D27FB03A1F381313271D0B2D7F235B0B044F8FC89DBC0C952
369 | C0C88EBBF64FE1EB6E0F030347035133D87F7B392E9B2BE32FEF03157FB32F63
370 | 7638D0FF61E9320C0BD9FF2D021214F7B125088F43C2417816A77AE2D540F216
371 | 202819981360FFF5B70781AD9F018F3303FBDC34C09F09C5FFBDC10C3533FE46
372 | F6DB914C3C5E1E6D3F5A51148E9DCC66B3CFCBD603379900FD7A322B979DBB37
373 | FBBAAE8A95CDCE77968D864292D83549AC4198CB5ECE8461172BEB61766DFAFF
374 | CDCA1800FC7B33F07FD839CA3E054CFFCDCEC3CE3152423C483888FB14120EC2
375 | B338251C6C04919D08343023BC2ACCBEBCF4127971F807FB7E2DFBFEF93FD92F
376 | B03B128E1ECC98FB474B97CBF1153BE61D766C1C13B5710F4B94CDC4A507BBF6
377 | 8929ECFCFDA56FEDFD95C017FEC0A6DFD99F838483B84F21E1203C8BB373FF85
378 | 6CB4719619D02DBFB3F89019E5ED4C50EA1CAC7F1C62C6D9C80CF7F645D6C738
379 | 120E6E9490C97EA39443BC805D57CD786043A4C47D32C11AC83E5F3155FEF74D
380 | 2781DFFF27B0641730CCE63B120EE23E858483F02CCE0A47293BFE43F6835D8B
381 | DA3FBB7D1C58BE1F78E12D40AF10EB6136E2B6C6D9917084C84C8D59729919FD
382 | AD55400ABB069DC43967B3CF272BC5A1FC00AC66E71FC3FE37C3664444C241DC
383 | A79070109EC595C2C14F155D65E5AD07FE97D28FC53512FD9FAC8DB323E198C9
384 | CA0D75908CFC5FECF78BF3EC05C23C55F50776DEC14A0588817EA3FF44C2413C
385 | 309070109EC559E1D8CD8C68CD5420D3624A484A4C24118DF3209B1184C3C571
386 | 052FAE364C406A161B9DFC49A528C95C1B0907F10041C2417816A784E336F0D6
387 | 72F6DF6860F9A4F68F79E1F841FDB9836C8CB04B8443C6F09370105D18120EC2
388 | B338231CFF62867C0933E4BF4A015EB05848E084E3F42F98984C5357CEFFEC0E
389 | 3C6C117D4E230E82700A120EC2B338231CA7B381DDD78055EB014BAFD62FD8E7
390 | 05DD544C5569BD1627D638E27280716A44C916120EE2C1838483F02C9A538E54
391 | B311C51676ACCD34555B59C7EC3D9A3A7C2DA27004A930DA7C54BBC9BE0C120E
392 | A20B43C24178162DC2F1AF1B402EEBF5FFED7160F52A09CF2971EDA3E77CE7F6
393 | ACE8701CC73F99682433DB3F55268E838483E89A9070109E45AD41FD073B6617
394 | EBCDFFD81B58B212F8854C3E27736478E82AF9E86C8E7F417BCA113E72FC77F2
395 | 869B9F2A334967EE25E120BA30241C846791DDC8A901A86146F4CA5F81AFFE06
396 | DC6C61238CF1402233DC8F3B28F36FFB819DC7D971BF004282DB734A35FC839D
397 | EF2A709A9DEF12B3DEB98B24AE4541385E669F7FC6463C4DAC5CFD2460B838E4
398 | E172557D7218B8FCDFC0ECD781C9127B859070105D18120EC2B3286D1DEBDD0B
399 | 78B40FEBBDFF12183B89098786FD379A9801FEF820131D3602B82966A0E5B7A2
400 | 65E5F98F067E3DD5BE3C355E55C315B2E3C645024FC85C230907D18521E12008
401 | 3BB4B8E312C4CF0F120E82B0838483209420E120083B4838084209120E82B083
402 | 8483209420E120083B4838084209120E82B0838483209420E120083B48380842
403 | 09120E8220084213241C04411084264838088220084D9070100441109A20E120
404 | 08822034F1FF0160616E4FB1E68DCD0000000049454E44AE426082}
405 | end
406 | object Image1: TImage
407 | AlignWithMargins = True
408 | Left = 1
409 | Top = 435
410 | Width = 439
411 | Height = 40
412 | Margins.Left = 0
413 | Margins.Top = 0
414 | Margins.Right = 0
415 | Margins.Bottom = 70
416 | Align = alBottom
417 | AutoSize = True
418 | Center = True
419 | Picture.Data = {
420 | 0954506E67496D61676589504E470D0A1A0A0000000D49484452000001530000
421 | 0028080600000043D919C2000000017352474200AECE1CE90000000467414D41
422 | 0000B18F0BFC6105000000097048597300000EC300000EC301C76FA864000006
423 | 7B4944415478DAED9DBB4E1C491486CF0CE3C168853763E54D967D00A4110E08
424 | 2D92954672E0900C5F1EC0DA0C3232C8AC7D80B54D46486009C9894548606B24
425 | 1E6021590BB2355A31333BC056DFAB4E5DBA9BA99EE6F27F1232E3EEAE3E7DEA
426 | D45FE75435D0B81210000080B168404C0100607C20A60000E001882900007800
427 | 620A00001E80980200800720A60000E001882900007800620A00001E80980200
428 | 80074A8BE9C5C545F8050D0600DC651A8D064D4D4D855F85CE2F2BA6C3E11042
429 | 0A00B8170482DA6EB78B9D5B564C078341DDCF07000013637A7ABAD079105300
430 | 007000310500000FD426A6834F5B34EAACD10F7375BB0080FA38DF5EA1CBEE0E
431 | C681C46DF5490D627A42FF6EFE42A3D3E4F306B5DFAED14C4E7BE7DB0F69D82B
432 | 766E6D9CEED0F73F8553D757A8985BAB67F06985FA7BBBE2BBE7D45AE7012AF5
433 | C5DC077A5885DDD7F1C9E116FDF36E839AAFFA34BB50F27EE35C3B6902DFECFD
434 | 4A8F569748EE8B46F7981EFD764467BF3FA54B4A3EFF34C68DE2B6C9D2C7811D
435 | 9B2F281DE055C5428C732C9B7C42D5DAE38B898B6930B8878F77E2400F9CF59E
436 | 9AEBC504F27C7B8B68F5068B69550881F8FEEDE55803CA5D09887ED8FE4CADD5
437 | C906AC1A0BC58F15F1D719ADDD7831D532304548020EE86CF32F6A7B1192FCB6
438 | 26592DDAC6B29E95FAF441B5D420A6D7EFB0B003BAF3F45F3A8BF2D98D65BD9D
439 | 7DFA310D4C4AB3168AAF6D767AD44C3B4EBDB6D109CE5B9602DB8523C34B32A5
440 | EE07BADA8BEDD666FE83340B09688A7B5F3D8EC4339AC5D9ED94E762CF6CC92A
441 | AA1153C96E71DFF6935D1AEE519C01BBB25E5E9DC43E9732B0504C4536ADFB8C
442 | 652B695625C54228A62FA9F931BB47B94C95C582E8BBC617CA06B4124749C61F
443 | FB42F45D53645D97813DAF8886C179A63ED18493F2C59465907AC66A8FA3A4AD
444 | E6CF2F68D433FB2437461C634B8D533DEB948F07763FF8F65E1753934F0AD86D
445 | EE0FD5E6E09AD6D7D806D976A726E43F974C0D657ED2E1E54B76AD3C504AC8C8
446 | 7197CF3247070372407FC4C1C404230CCC5D9A4A1CCFB299F05EC4C438178B28
447 | 851D46A9DD3CEB5283387A8E8B27D2407166A627747E4834B3E03ED7BF980676
448 | BE217A9DF9CF5C5EDBDBCECB4CFB7B1D8BCF78B6C22A1CCD16666B81381B2DF6
449 | D558F83B16C4A0ED8FF3923806F12C9E2FB433F8FEADB043DCE7243B8F0CBE37
450 | AE0BF2723B4016E2D3033AA7259A9933B7E18EA368DC5D758F157195333E7B8C
451 | E48D2D61CBE18188C1A5EC392451D4CEB594F9E6B5D21CBB9DFD21C7D26E3AF9
452 | 0C84AD246C9D2EA009CA580A8F1FD1038B6ED5B79B6FCA287230393B0D00DAA1
453 | B3DE32CD2A22A23A2B5B3F8C5007BE3AAB5F6FDDC82EA64AD969EC2469101932
454 | 6A9798F22CCFB4C6E65D4C0D590417A1BCB64B95F98A0FF2C554F3D7A9293E4C
455 | 88B6B789662D93A8B13C4DFB57BA56B241F7BDA5742D99996AEBE0CE38CAF199
456 | 2B464EF3C7965641A5F736F5BF6979CF56CEBBED76F747B138B36982B12A34EE
457 | 3D444C584C4B74A08171C554B7C591AD0433DED7656F99A9534CB9EFD84CEE3A
458 | 5F0B148B684C424CCD410B31E5BEB73EB7534CCB8F1D358ECA8B69E1B1A5F95B
459 | F6613131B5C742B562AAA26A42D9B70A6A1053B656D6295E4A2BE596E668C36C
460 | 270F202D50731C37313135079622A6861DCEA4E452ED362C11A46D5651E6CB76
461 | 47993D9528F335814C4AE4B902622A95725AD91896F93D2583306E6C18979B0C
462 | 93AC5CDE19843A1BD045C4D4B1A1E2145353962A95A4B971348698CEB9C716EF
463 | 2BBE4466EA4B79D9CBBDC9547EE2E4025B7CF2627D6F5CC3B5535B995F76673E
464 | 1D30C9A27E484E99436C7D95AD473953FA3265BEB288CDDAA7EC98F1F3429109
465 | 866F881C5B9708928D2E62AFD72824EDBBEC2EB259A3DCFB39353BE29FC53868
466 | 0BB5CD364C9263E9B571FF9E709FA9E559A3BB4F535F9E469B52CF8EA81FAE97
467 | EE13BDCBDAB66FD6989699D8920F3B87C70A7F9529F4EFE2E7D0E6E0D834BD11
468 | B6461B73AD9E2303535E8562ED89FE524BD20D6A757B34326DF86971241D0BFF
469 | 6F5EDD1C7C2DFCC9D76AE33E4DC7976B6C317F851B7622062F4DF7A7E89EAD70
470 | 43296AA369CD1C73EC5E372F31A47D6D5A832EA109017C19E00695F919F7F635
471 | A73BCC6D7DD97A72DC9ED77C26C7DDF1097E9C148C01CF48C67DB91C80DB0BC4
472 | 1400003C00310500000F404C0100C0039589297ED33E00E0BE50E96FDAC7DF80
473 | 0200DC072AFF1B500000007420A60000E001882900007800620A00001E809802
474 | 00800720A60000E001882900007800620A00001E809802008007FE0700743DF2
475 | 476B0E020000000049454E44AE426082}
476 | ExplicitTop = 416
477 | ExplicitWidth = 339
478 | end
479 | object lblMiddlewares: TLabel
480 | Left = 22
481 | Top = 211
482 | Width = 67
483 | Height = 13
484 | Caption = 'Middlewares'
485 | Font.Charset = DEFAULT_CHARSET
486 | Font.Color = clWindowText
487 | Font.Height = -11
488 | Font.Name = 'Segoe UI'
489 | Font.Style = [fsBold]
490 | ParentFont = False
491 | end
492 | object chkAddToProjectGroup: TCheckBox
493 | Left = 22
494 | Top = 174
495 | Width = 230
496 | Height = 17
497 | Anchors = [akLeft, akTop, akRight]
498 | Caption = 'Add to existing project group'
499 | Checked = True
500 | Font.Charset = DEFAULT_CHARSET
501 | Font.Color = clWindowText
502 | Font.Height = -11
503 | Font.Name = 'Segoe UI'
504 | Font.Style = []
505 | ParentFont = False
506 | State = cbChecked
507 | TabOrder = 0
508 | end
509 | object chkJhonson: TCheckBox
510 | Left = 22
511 | Top = 230
512 | Width = 230
513 | Height = 17
514 | Anchors = [akLeft, akTop, akRight]
515 | Caption = 'jhonson - JSON parser'
516 | Font.Charset = DEFAULT_CHARSET
517 | Font.Color = clWindowText
518 | Font.Height = -11
519 | Font.Name = 'Segoe UI'
520 | Font.Style = []
521 | ParentFont = False
522 | TabOrder = 1
523 | end
524 | object chkHorseCORS: TCheckBox
525 | Left = 22
526 | Top = 253
527 | Width = 230
528 | Height = 17
529 | Anchors = [akLeft, akTop, akRight]
530 | Caption = 'horse-cors - Inject CORS headers'
531 | Font.Charset = DEFAULT_CHARSET
532 | Font.Color = clWindowText
533 | Font.Height = -11
534 | Font.Name = 'Segoe UI'
535 | Font.Style = []
536 | ParentFont = False
537 | TabOrder = 2
538 | end
539 | object chkHorseOctetStream: TCheckBox
540 | Left = 22
541 | Top = 276
542 | Width = 230
543 | Height = 17
544 | Anchors = [akLeft, akTop, akRight]
545 | Caption = 'horse-octet-stream - Support stream'
546 | Font.Charset = DEFAULT_CHARSET
547 | Font.Color = clWindowText
548 | Font.Height = -11
549 | Font.Name = 'Segoe UI'
550 | Font.Style = []
551 | ParentFont = False
552 | TabOrder = 3
553 | end
554 | object chkHorseJWT: TCheckBox
555 | Left = 22
556 | Top = 299
557 | Width = 230
558 | Height = 17
559 | Anchors = [akLeft, akTop, akRight]
560 | Caption = 'horse-jwt - JSON Web Token'
561 | Font.Charset = DEFAULT_CHARSET
562 | Font.Color = clWindowText
563 | Font.Height = -11
564 | Font.Name = 'Segoe UI'
565 | Font.Style = []
566 | ParentFont = False
567 | TabOrder = 4
568 | end
569 | object chkHorseBasicAuth: TCheckBox
570 | Left = 22
571 | Top = 322
572 | Width = 230
573 | Height = 17
574 | Anchors = [akLeft, akTop, akRight]
575 | Caption = 'horse-basic-auth - Basic authentication'
576 | Font.Charset = DEFAULT_CHARSET
577 | Font.Color = clWindowText
578 | Font.Height = -11
579 | Font.Name = 'Segoe UI'
580 | Font.Style = []
581 | ParentFont = False
582 | TabOrder = 5
583 | end
584 | object chkHorseCompression: TCheckBox
585 | Left = 22
586 | Top = 345
587 | Width = 230
588 | Height = 17
589 | Anchors = [akLeft, akTop, akRight]
590 | Caption = 'horse-compression - Compression'
591 | Font.Charset = DEFAULT_CHARSET
592 | Font.Color = clWindowText
593 | Font.Height = -11
594 | Font.Name = 'Segoe UI'
595 | Font.Style = []
596 | ParentFont = False
597 | TabOrder = 6
598 | end
599 | object chkHandleException: TCheckBox
600 | Left = 22
601 | Top = 368
602 | Width = 230
603 | Height = 17
604 | Anchors = [akLeft, akTop, akRight]
605 | Caption = 'handle-exception - Handler exceptions'
606 | Font.Charset = DEFAULT_CHARSET
607 | Font.Color = clWindowText
608 | Font.Height = -11
609 | Font.Name = 'Segoe UI'
610 | Font.Style = []
611 | ParentFont = False
612 | TabOrder = 7
613 | end
614 | object Button1: TButton
615 | Left = 220
616 | Top = 488
617 | Width = 109
618 | Height = 37
619 | Caption = 'CANCEL'
620 | ModalResult = 2
621 | TabOrder = 8
622 | end
623 | object Button2: TButton
624 | Left = 105
625 | Top = 488
626 | Width = 109
627 | Height = 37
628 | Caption = 'DONE'
629 | Default = True
630 | ModalResult = 1
631 | TabOrder = 9
632 | end
633 | object chkLogger: TCheckBox
634 | Left = 22
635 | Top = 391
636 | Width = 230
637 | Height = 17
638 | Anchors = [akLeft, akTop, akRight]
639 | Caption = 'Logger - Access logging'
640 | Font.Charset = DEFAULT_CHARSET
641 | Font.Color = clWindowText
642 | Font.Height = -11
643 | Font.Name = 'Segoe UI'
644 | Font.Style = []
645 | ParentFont = False
646 | TabOrder = 10
647 | end
648 | end
649 | end
650 |
--------------------------------------------------------------------------------
/src/Horse.Views.Wizard.pas:
--------------------------------------------------------------------------------
1 | unit Horse.Views.Wizard;
2 |
3 | interface
4 |
5 | uses WinAPI.Windows, WinAPI.Messages, WinAPI.ShellAPI, System.SysUtils, System.Variants, System.Classes, VCL.Graphics,
6 | VCL.Controls, VCL.Forms, VCL.Dialogs, VCL.StdCtrls, VCL.Imaging.pngimage, VCL.ExtCtrls;
7 |
8 | type
9 | TFrmNewProject = class(TForm)
10 | pnlContent: TPanel;
11 | chkAddToProjectGroup: TCheckBox;
12 | imgHeader: TImage;
13 | Image1: TImage;
14 | lblMiddlewares: TLabel;
15 | chkJhonson: TCheckBox;
16 | chkHorseCORS: TCheckBox;
17 | chkHorseOctetStream: TCheckBox;
18 | chkHorseJWT: TCheckBox;
19 | chkHorseBasicAuth: TCheckBox;
20 | chkHorseCompression: TCheckBox;
21 | chkHandleException: TCheckBox;
22 | Button1: TButton;
23 | Button2: TButton;
24 | chkLogger: TCheckBox;
25 | private
26 | function GetAddToProjectGroup: Boolean;
27 | function GetMiddlewareList: TStringList;
28 | public
29 | property AddToProjectGroup: Boolean read GetAddToProjectGroup;
30 | property MiddlewareList: TStringList read GetMiddlewareList;
31 | end;
32 |
33 | implementation
34 |
35 | {$R *.dfm}
36 |
37 | function TFrmNewProject.GetAddToProjectGroup: Boolean;
38 | begin
39 | Result := chkAddToProjectGroup.Checked;
40 | end;
41 |
42 | function TFrmNewProject.GetMiddlewareList: TStringList;
43 | var
44 | LList: TStringList;
45 | begin
46 | LList := TStringList.Create;
47 |
48 | if chkJhonson.Checked then
49 | LList.Add('github.com/HashLoad/jhonson');
50 |
51 | if chkHorseCORS.Checked then
52 | LList.Add('github.com/HashLoad/horse-cors');
53 |
54 | if chkHorseOctetStream.Checked then
55 | LList.Add('github.com/HashLoad/horse-octet-stream');
56 |
57 | if chkHorseJWT.Checked then
58 | LList.Add('github.com/HashLoad/horse-jwt');
59 |
60 | if chkHorseBasicAuth.Checked then
61 | LList.Add('github.com/HashLoad/horse-basic-auth');
62 |
63 | if chkHorseCompression.Checked then
64 | LList.Add('github.com/HashLoad/horse-compression');
65 |
66 | if chkHandleException.Checked then
67 | LList.Add('github.com/HashLoad/handle-exception');
68 |
69 | if chkLogger.Checked then
70 | LList.Add('github.com/HashLoad/horse-logger');
71 |
72 | Result := LList;
73 | end;
74 |
75 | end.
76 |
--------------------------------------------------------------------------------
/src/Horse.Wizard.Types.pas:
--------------------------------------------------------------------------------
1 | unit Horse.Wizard.Types;
2 |
3 | interface
4 |
5 | uses System.SysUtils, Horse.NewProject.Templates, ToolsAPI;
6 |
7 | type
8 | THorsePlatform = (hpWin32, hpWin64, hpLinux64);
9 | THorseFramework = (hfApache, hfCGI, hfConsole, hfDaemon, hfIsapi, hfVcl, hfWinSvc);
10 |
11 | THorsePlatformHelper = record helper for THorsePlatform
12 | public
13 | procedure FromString(const AValue: string);
14 | function ToString: string;
15 | end;
16 |
17 | THorseFrameworkHelper = record helper for THorseFramework
18 | public
19 | procedure FromString(const AValue: string);
20 | function ToString: string;
21 | function ProjectType: string;
22 | function Define: string;
23 | function DprContent: string;
24 | end;
25 |
26 | implementation
27 |
28 | { THorsePlatformHelper }
29 |
30 | procedure THorsePlatformHelper.FromString(const AValue: string);
31 | var
32 | LValue: string;
33 | begin
34 | Self := hpWin32;
35 | LValue := AValue.ToLower.Replace(' ', '');
36 | if LValue.Equals('windows64') then
37 | Self := hpWin64;
38 | if LValue.Contains('linux') then
39 | Self := hpLinux64;
40 | end;
41 |
42 | function THorsePlatformHelper.ToString: string;
43 | begin
44 | case Self of
45 | hpWin32:
46 | Result := 'Win32';
47 | hpWin64:
48 | Result := 'Win64';
49 | hpLinux64:
50 | Result := 'Linux64';
51 | end;
52 | end;
53 |
54 | { THorseFrameworkHelper }
55 |
56 | function THorseFrameworkHelper.Define: string;
57 | begin
58 | case Self of
59 | hfApache:
60 | Result := 'HORSE_APACHE';
61 | hfCGI:
62 | Result := 'HORSE_CGI';
63 | hfConsole:
64 | Result := 'HORSE_CONSOLE';
65 | hfDaemon:
66 | Result := 'HORSE_DAEMON';
67 | hfIsapi:
68 | Result := 'HORSE_ISAPI';
69 | hfVcl:
70 | Result := 'HORSE_VCL';
71 | hfWinSvc:
72 | Result := 'HORSE_VCL';
73 | end;
74 | end;
75 |
76 | function THorseFrameworkHelper.DprContent: string;
77 | begin
78 | case Self of
79 | hfApache:
80 | Result := sHorseDPRApache;
81 | hfCGI:
82 | Result := sHorseDPRCGI;
83 | hfConsole:
84 | Result := sHorseDPRConsole;
85 | hfDaemon:
86 | Result := sHorseDPRConsole;
87 | hfIsapi:
88 | Result := sHorseDPRISAPI;
89 | hfVcl:
90 | Result := sHorseDPRVCL;
91 | hfWinSvc:
92 | Result := sHorseDPRWinSvc;
93 | end;
94 | end;
95 |
96 | procedure THorseFrameworkHelper.FromString(const AValue: string);
97 | var
98 | LValue: string;
99 | begin
100 | Self := hfConsole;
101 | LValue := AValue.ToLower.Replace(' ', '');
102 | if LValue.Equals('apache') then
103 | Self := hfApache;
104 | if LValue.Equals('cgi') then
105 | Self := hfCGI;
106 | if LValue.Equals('daemon') then
107 | Self := hfDaemon;
108 | if LValue.Equals('isapi') then
109 | Self := hfIsapi;
110 | if LValue.Equals('vcl') then
111 | Self := hfVcl;
112 | if (LValue.Equals('winservice')) or (LValue.Equals('winsvc')) then
113 | Self := hfWinSvc;
114 | end;
115 |
116 | function THorseFrameworkHelper.ProjectType: string;
117 | begin
118 | case Self of
119 | hfApache:
120 | Result := sLibrary;
121 | hfCGI:
122 | Result := sConsole;
123 | hfConsole:
124 | Result := sConsole;
125 | hfDaemon:
126 | Result := sConsole;
127 | hfIsapi:
128 | Result := sLibrary;
129 | hfVcl:
130 | Result := sApplication;
131 | hfWinSvc:
132 | Result := sApplication;
133 | end;
134 | end;
135 |
136 | function THorseFrameworkHelper.ToString: string;
137 | begin
138 | case Self of
139 | hfApache:
140 | Result := sFrameworkTypeNone;
141 | hfCGI:
142 | Result := sFrameworkTypeNone;
143 | hfConsole:
144 | Result := sFrameworkTypeNone;
145 | hfDaemon:
146 | Result := sFrameworkTypeNone;
147 | hfIsapi:
148 | Result := sFrameworkTypeNone;
149 | hfVcl:
150 | Result := sFrameworkTypeVCL;
151 | hfWinSvc:
152 | Result := sFrameworkTypeVCL;
153 | end;
154 | end;
155 |
156 | end.
157 |
--------------------------------------------------------------------------------
/src/Horse.Wizard.Utils.pas:
--------------------------------------------------------------------------------
1 | unit Horse.Wizard.Utils;
2 |
3 | interface
4 |
5 | uses System.SysUtils, System.Classes, ToolsAPI, Vcl.Dialogs;
6 |
7 | function UnitEditor: IOTASourceEditor;
8 | function EditorAsString: string;
9 | function EditorAsStringList: TStringList;
10 |
11 | implementation
12 |
13 | function EditorAsStringList: TStringList;
14 | begin
15 | Result := TStringList.Create;
16 | try
17 | Result.Text := EditorAsString;
18 | except
19 | Result.Free;
20 | raise;
21 | end;
22 | end;
23 |
24 | function EditorAsString: string;
25 | const
26 | iBufferSize: Integer = 1024;
27 | var
28 | LEditReader: IOTAEditReader;
29 | LRead: Integer;
30 | LPosition: Integer;
31 | LStringBuffer: AnsiString;
32 | begin
33 | Result := EmptyStr;
34 | LEditReader := UnitEditor.CreateReader;
35 | try
36 | LPosition := 0;
37 | repeat
38 | SetLength(LStringBuffer, iBufferSize);
39 | LRead := LEditReader.GetText(LPosition, PAnsiChar(LStringBuffer), iBufferSize);
40 | SetLength(LStringBuffer, LRead);
41 | Result := Result + string(LStringBuffer);
42 | Inc(LPosition, LRead);
43 | until LRead < iBufferSize;
44 | finally
45 | LEditReader := nil;
46 | end;
47 | end;
48 |
49 | function UnitEditor: IOTASourceEditor;
50 | var
51 | LModule: IOTAModule;
52 | I: Integer;
53 | begin
54 | LModule := (BorlandIDEServices as IOTAModuleServices).CurrentModule;
55 | for I := 0 to Pred(LModule.ModuleFileCount) do
56 | begin
57 | if LModule.ModuleFileEditors[I].QueryInterface(IOTASourceEditor, Result) = S_OK then
58 | Break;
59 | end;
60 | end;
61 |
62 | end.
63 |
--------------------------------------------------------------------------------