mirror of
				https://gitlab.com/freepascal.org/lazarus/lazarus.git
				synced 2025-11-04 15:32:00 +01: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.
 | 
						|
 |