mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-05 19:17:52 +02:00
272 lines
7.2 KiB
ObjectPascal
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.
|
|
|