mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-05-02 12:44:20 +02:00
127 lines
3.1 KiB
ObjectPascal
127 lines
3.1 KiB
ObjectPascal
unit reglazopenapi;
|
|
|
|
{$mode objfpc}{$H+}
|
|
|
|
interface
|
|
|
|
uses
|
|
Classes, SysUtils, LazIDEIntf, IDECommands;
|
|
|
|
procedure register;
|
|
|
|
implementation
|
|
|
|
uses MenuIntf, frmopenapiwizard, forms, controls, fpopenapi.reader, fpopenapi.objects, fpopenapi.codegen;
|
|
|
|
Resourcestring
|
|
SCMDOpenAPIWizard = 'ShowOpenAPICodeGenerator';
|
|
SCMDOpenAPIWizardCaption = 'OpenAPI code generator...';
|
|
|
|
Type
|
|
|
|
{ TLazOpenAPICodeGen }
|
|
|
|
TLazOpenAPICodeGen = class(TOpenAPICodeGen)
|
|
Function ResolveFullFileName(aKind : TUnitKind) : String;
|
|
end;
|
|
|
|
Procedure GenerateFiles(const aOpenAPIFile, aBaseOutputFile : string; aGenerator : TLazOpenAPICodeGen);
|
|
|
|
var
|
|
Loader : TOpenAPIReader;
|
|
API : TOpenAPI;
|
|
|
|
begin
|
|
Loader:=Nil;
|
|
API:=TOpenAPI.Create;
|
|
try
|
|
Loader:=TOpenAPIReader.Create(Nil);
|
|
Loader.ReadFromFile(API,aOpenAPIFile);
|
|
aGenerator.API:=API;
|
|
aGenerator.BaseOutputFileName:=aBaseOutputFile;
|
|
aGenerator.Execute;
|
|
finally
|
|
Loader.Free;
|
|
API.Free;
|
|
end;
|
|
end;
|
|
|
|
procedure ShowOpenAPIWizard(Sender: TObject);
|
|
|
|
var
|
|
opts : TOpenFlags;
|
|
|
|
var
|
|
frm : TOpenapiWizardForm;
|
|
lGenerator : TLazOpenAPICodeGen;
|
|
|
|
begin
|
|
opts:=[ofOnlyIfExists, ofRevert, ofAddToRecent, ofRegularFile];
|
|
|
|
frm:=Nil;
|
|
lGenerator:=TLazOpenAPICodeGen.Create(Application);
|
|
try
|
|
frm:=TOpenapiWizardForm.Create(Application);
|
|
frm.InitFileNameEdits(ExtractFilePath(lazarusIDE.ActiveProject.ProjectInfoFile));
|
|
frm.Generator:=lGenerator;
|
|
if frm.ShowModal=mrOK then
|
|
begin
|
|
if frm.AddToProject then
|
|
Include(opts,ofAddToProject);
|
|
GenerateFiles(frm.OpenAPIFileName,frm.BaseFileName,lGenerator);
|
|
if frm.OpenGeneratedFiles then
|
|
begin
|
|
LazarusIDE.DoOpenEditorFile(lGenerator.ResolveFullFileName(ukDto),-1,-1,opts);
|
|
LazarusIDE.DoOpenEditorFile(lGenerator.ResolveFullFileName(ukSerialize),-1,-1,opts);
|
|
if lGenerator.GenerateClient then
|
|
begin
|
|
LazarusIDE.DoOpenEditorFile(lGenerator.ResolveFullFileName(ukClientServiceIntf),-1,-1,opts);
|
|
LazarusIDE.DoOpenEditorFile(lGenerator.ResolveFullFileName(ukClientServiceImpl),-1,-1,opts);
|
|
end;
|
|
if lGenerator.GenerateServer then
|
|
begin
|
|
LazarusIDE.DoOpenEditorFile(lGenerator.ResolveFullFileName(ukServerServiceHandler),-1,-1,opts);
|
|
LazarusIDE.DoOpenEditorFile(lGenerator.ResolveFullFileName(ukServerServiceImpl),-1,-1,opts);
|
|
end;
|
|
end;
|
|
end;
|
|
finally
|
|
lGenerator.Free;
|
|
frm.Free;
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
procedure register;
|
|
|
|
var
|
|
CmdToolsMenu : TIDECommandCategory;
|
|
OpenAPIWizardCommand : TIDECommand;
|
|
|
|
begin
|
|
// search shortcut category
|
|
CmdToolsMenu:=IDECommandList.FindCategoryByName(CommandCategoryToolMenuName);
|
|
// register shortcut
|
|
OpenAPIWizardCommand:=RegisterIDECommand(CmdToolsMenu,
|
|
SCMDOpenAPIWizard,
|
|
SCMDOpenAPIWizardCaption,
|
|
CleanIDEShortCut,
|
|
CleanIDEShortCut, nil, @ShowOpenAPIWizard);
|
|
// register menu item in View menu
|
|
RegisterIDEMenuCommand(itmCustomTools,
|
|
SCMDOpenAPIWizard,
|
|
SCMDOpenAPIWizardCaption, nil, nil, OpenAPIWizardCommand);
|
|
|
|
end;
|
|
|
|
{ TLazOpenAPICodeGen }
|
|
|
|
function TLazOpenAPICodeGen.ResolveFullFileName(aKind: TUnitKind): String;
|
|
begin
|
|
Result:=ResolveUnit(aKind,True);
|
|
end;
|
|
|
|
end.
|
|
|