lazarus/components/daemon/reglazdaemon.pp

272 lines
7.2 KiB
ObjectPascal

{
*****************************************************************************
See the file COPYING.modifiedLGPL.txt, included in this distribution,
for details about the license.
*****************************************************************************
This unit installs the IDE items.
It is not needed by daemons.
}
unit RegLazDaemon;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FormEditingIntf, ProjectIntf, NewItemIntf, LazIDEIntf,
Controls, Forms;
Type
{ TDaemonMapperDescriptor }
TDaemonMapperDescriptor = Class(TFileDescPascalUnitWithResource)
Public
Constructor Create; override;
Function GetLocalizedName : String; override;
Function GetLocalizedDescription : String; override;
Function GetInterfaceUsesSection : String; override;
function GetImplementationSource(const Filename, SourceName, ResourceName: string): string; override;
end;
{ TDaemonFileDescriptor }
TDaemonFileDescriptor = Class(TFileDescPascalUnitWithResource)
Public
Constructor Create; override;
Function GetLocalizedName : String; override;
Function GetLocalizedDescription : String; override;
Function GetInterfaceUsesSection : String; override;
function GetImplementationSource(const Filename, SourceName, ResourceName: string): string; override;
end;
{ TDaemonProjectDescriptor }
TDaemonProjectDescriptor = class(TProjectDescriptor)
public
constructor create; override;
function GetLocalizedName: string; override;
function GetLocalizedDescription: string; override;
function InitProject(AProject: TLazProject) : TModalResult; override;
function CreateStartFiles(AProject: TLazProject) : TModalResult; override;
published
{ Published declarations }
end;
Procedure Register;
implementation
uses daemonapp;
Resourcestring
SDaemonApps = 'Daemon (service) applications';
SDaemonAppName = 'Daemon (service) application';
SDaemonAppDescr = 'Daemon (service) application is a non-gui application that runs in the background.';
SDaemonName = 'Daemon Module';
SDaemonDescr = 'Daemon Module for inclusion in a daemon application';
SDaemonMapperName = 'Daemon mapper';
SDaemonMapperDescr = 'Daemon mapper for inclusion in a daemon application.'+LineEnding+
'Only one daemon mapper may exist in a daemon application.';
Procedure Register;
begin
RegisterNewItemCategory(TNewIDEItemCategory.Create(SDaemonApps));
RegisterProjectDescriptor(TDaemonProjectDescriptor.Create,SDaemonApps);
RegisterProjectFileDescriptor(TDaemonFileDescriptor.Create,SDaemonApps);
RegisterProjectFileDescriptor(TDaemonMapperDescriptor.Create,SDaemonApps);
FormEditingHook.RegisterDesignerBaseClass(TDaemonMapper);
FormEditingHook.RegisterDesignerBaseClass(TDaemon);
end;
{ TDaemonFileDescriptor }
constructor TDaemonFileDescriptor.Create;
begin
inherited Create;
ResourceClass:=TDaemon;
Name:='Daemon Module';
UseCreateFormStatements:=False;
end;
function TDaemonFileDescriptor.GetLocalizedName: String;
begin
Result:=SDaemonName;
end;
function TDaemonFileDescriptor.GetLocalizedDescription: String;
begin
Result:=SDaemonDescr;
end;
function TDaemonFileDescriptor.GetInterfaceUsesSection: String;
begin
Result:=inherited GetInterfaceUsesSection+', DaemonApp';
end;
function TDaemonFileDescriptor.GetImplementationSource(const Filename,
SourceName, ResourceName: string): string;
Var
Src : TStrings;
begin
Src:=TStringList.Create;
try
Result:=inherited GetImplementationSource(Filename, SourceName, ResourceName);
With Src do
begin
Add('Procedure RegisterDaemon;');
Add('begin');
Add(' RegisterDaemonClass(T'+ResourceName+')');
Add('end;');
Add('');
Add(Result);
if GetResourceType = rtRes then
Add('initialization');
Add(' RegisterDaemon;');
Result:=Text;
end;
finally
Src.Free;
end;
end;
{ TDaemonProjectDescriptor }
constructor TDaemonProjectDescriptor.create;
begin
Inherited;
Flags:=Flags - [pfMainUnitHasCreateFormStatements];
Name:='Daemon Application';
end;
function TDaemonProjectDescriptor.GetLocalizedName: string;
begin
Result:=SDaemonAppName;
end;
function TDaemonProjectDescriptor.GetLocalizedDescription: string;
begin
Result:=SDaemonAppDescr;
end;
function TDaemonProjectDescriptor.InitProject(AProject: TLazProject
): TModalResult;
Var
F : TLazProjectFile;
Src : TStrings;
begin
Result:=Inherited InitProject(AProject);
If (Result=mrOK) then
begin
AProject.AddPackageDependency('FCL');
AProject.AddPackageDependency('LCL');
AProject.AddPackageDependency('LazDaemon');
AProject.Title:='Daemon application';
AProject.LazCompilerOptions.Win32GraphicApp:=False;
AProject.LazCompilerOptions.UnitOutputDirectory:='lib'+PathDelim+'$(TargetCPU)-$(TargetOS)';
AProject.LazCompilerOptions.TargetFilename:='project1';
AProject.ProjectInfoFile:='project1.lpi';
F:=AProject.CreateProjectFile('project1.lpr');
F.IsPartOfProject:=True;
AProject.AddFile(F,False);
AProject.MainFileID:=0;
Src:=TStringList.Create;
try
With Src do
begin
Add('Program project1;');
Add('');
Add('Uses');
Add('{$IFDEF UNIX}{$IFDEF UseCThreads}');
Add(' CThreads,');
Add('{$ENDIF}{$ENDIF}');
Add(' DaemonApp, lazdaemonapp');
Add(' { add your units here };');
Add('');
Add('begin');
Add(' Application.Initialize;');
Add(' Application.Run;');
Add('end.');
end;
F.SetSourceText(Src.Text);
finally
Src.Free;
end;
end;
end;
function TDaemonProjectDescriptor.CreateStartFiles(AProject: TLazProject): TModalResult;
Var
FD : TProjectFileDescriptor;
O : TNewFlags;
begin
FD:=ProjectFileDescriptors.FindByName('Daemon Mapper');
O:=[nfIsPartOfProject,nfOpenInEditor,nfCreateDefaultSrc];
Result:=LazarusIDE.DoNewEditorFile(FD,'DaemonMapperUnit1.pas','',O);
FD:=ProjectFileDescriptors.FindByName('Daemon Module');
Result:=LazarusIDE.DoNewEditorFile(FD,'DaemonUnit1.pas','',O );
end;
{ TDaemonMapperDescriptor }
constructor TDaemonMapperDescriptor.Create;
begin
inherited Create;
Name:='Daemon Mapper';
ResourceClass:=TDaemonMapper;
UseCreateFormStatements:=False;
end;
function TDaemonMapperDescriptor.GetLocalizedName: String;
begin
Result:=SDaemonMapperName;
end;
function TDaemonMapperDescriptor.GetLocalizedDescription: String;
begin
Result:=SDaemonMapperDescr;
end;
function TDaemonMapperDescriptor.GetInterfaceUsesSection: String;
begin
Result:=inherited GetInterfaceUsesSection+', DaemonApp';
end;
function TDaemonMapperDescriptor.GetImplementationSource(const Filename,
SourceName, ResourceName: string): string;
Var
Src : TStrings;
begin
Src:=TStringList.Create;
try
Result:=inherited GetImplementationSource(Filename, SourceName, ResourceName);
With Src do
begin
Add('Procedure RegisterMapper;');
Add('begin');
Add(' RegisterDaemonMapper(T'+ResourceName+')');
Add('end;');
Add('');
Add(Result);
if GetResourceType = rtRes then
Add('initialization');
Add(' RegisterMapper;');
Result:=Text;
end;
finally
Src.Free;
end;
end;
end.