mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-05 05:28:17 +02:00
136 lines
3.5 KiB
ObjectPascal
136 lines
3.5 KiB
ObjectPascal
{
|
|
*****************************************************************************
|
|
See the file COPYING.modifiedLGPL.txt, included in this distribution,
|
|
for details about the license.
|
|
*****************************************************************************
|
|
}
|
|
|
|
unit RegLazThread;
|
|
|
|
{$mode objfpc}{$H+}
|
|
|
|
interface
|
|
|
|
uses
|
|
Classes, SysUtils, ProjectIntf, LazIdeIntf, lazthreadstrconst;
|
|
|
|
type
|
|
{ TThreadFileDescriptor }
|
|
TThreadFileDescriptor = class(TFileDescPascalUnit)
|
|
private
|
|
FThreadCount:integer;
|
|
FThreadName :string;
|
|
function GetNextThreadName:string;
|
|
function GetCurrentThreadName:string;
|
|
public
|
|
constructor Create; override;
|
|
function GetLocalizedName : string; override;
|
|
function GetLocalizedDescription : string; override;
|
|
function GetInterfaceSource(const Filename, SourceName, ResourceName: string): string; override;
|
|
function GetImplementationSource(const Filename, SourceName, ResourceName: string): string; override;
|
|
end;
|
|
|
|
procedure register;
|
|
|
|
implementation
|
|
|
|
uses
|
|
Controls, ThreadOptionsDialog;
|
|
|
|
//---------------//
|
|
procedure register;
|
|
begin
|
|
RegisterProjectFileDescriptor(TThreadFileDescriptor.Create, FileDescGroupName);
|
|
end;
|
|
|
|
{ TThreadFileDescriptor }
|
|
|
|
//-------------------------------------//
|
|
constructor TThreadFileDescriptor.Create;
|
|
begin
|
|
inherited Create;
|
|
Name := SThreadName;
|
|
FThreadCount := 1;
|
|
FThreadName := TThread.ClassName;
|
|
end;
|
|
|
|
//-----------------------------------------------------//
|
|
function TThreadFileDescriptor.GetNextThreadName: string;
|
|
var
|
|
ThreadOptionsDialog:TThreadOptionsDialog;
|
|
begin
|
|
//Create Default Thread Class Name
|
|
FThreadName := TThread.ClassName + IntToStr(FThreadCount);
|
|
FThreadCount := (FThreadCount mod MaxInt) + 1;
|
|
|
|
//Show Thread Options Dialog
|
|
with(TThreadOptionsDialog.Create(nil))do
|
|
begin
|
|
ThreadNameEdit.Text := FThreadName;
|
|
if((ShowModal = mrOK)and(ThreadNameEdit.Text <> ''))then
|
|
begin
|
|
FThreadName := ThreadNameEdit.Text;
|
|
end;
|
|
Free;
|
|
end;
|
|
|
|
//Return Thread Class Name
|
|
Result := FThreadName;
|
|
end;
|
|
|
|
//--------------------------------------------------------//
|
|
function TThreadFileDescriptor.GetCurrentThreadName: string;
|
|
begin
|
|
Result := FThreadName;
|
|
end;
|
|
|
|
//----------------------------------------------------//
|
|
function TThreadFileDescriptor.GetLocalizedName: string;
|
|
begin
|
|
Result := SThreadName;
|
|
end;
|
|
|
|
//-----------------------------------------------------------//
|
|
function TThreadFileDescriptor.GetLocalizedDescription: string;
|
|
begin
|
|
Result := SThreadDescription;
|
|
end;
|
|
|
|
//--------------------------------------------------------------------------------------------------------//
|
|
function TThreadFileDescriptor.GetInterfaceSource(const Filename, SourceName, ResourceName: string): string;
|
|
begin
|
|
with(TStringList.Create)do
|
|
begin
|
|
Add('type');
|
|
Add(' ' + GetNextThreadName + ' = class(TThread)');
|
|
Add(' private');
|
|
Add('');
|
|
Add(' protected');
|
|
Add(' procedure Execute; override;');
|
|
Add(' end;');
|
|
Add('');
|
|
Result := Text;
|
|
Free;
|
|
end;
|
|
end;
|
|
|
|
//-------------------------------------------------------------------------------------------------------------//
|
|
function TThreadFileDescriptor.GetImplementationSource(const Filename, SourceName, ResourceName: string): string;
|
|
begin
|
|
with(TStringList.Create)do
|
|
begin
|
|
Add('{ ' + GetCurrentThreadName + ' }');
|
|
Add('');
|
|
Add('procedure ' + GetCurrentThreadName + '.Execute;');
|
|
Add('begin');
|
|
Add(' { Write your thread code here }');
|
|
Add('end;');
|
|
Add('');
|
|
Result := Text;
|
|
Free;
|
|
end;
|
|
end;
|
|
|
|
end.
|
|
|