mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-07 21:38:00 +02:00
101 lines
2.7 KiB
PHP
101 lines
2.7 KiB
PHP
{%MainUnit ../extctrls.pp}
|
|
|
|
{******************************************************************************
|
|
TIdleTimer
|
|
******************************************************************************
|
|
|
|
*****************************************************************************
|
|
This file is part of the Lazarus Component Library (LCL)
|
|
|
|
See the file COPYING.modifiedLGPL.txt, included in this distribution,
|
|
for details about the license.
|
|
*****************************************************************************
|
|
|
|
}
|
|
|
|
{ TIdleTimer }
|
|
|
|
procedure TCustomIdleTimer.SetAutoEnabled(const AValue: boolean);
|
|
begin
|
|
if FAutoEnabled=AValue then exit;
|
|
FAutoEnabled:=AValue;
|
|
UpdateHandlers;
|
|
end;
|
|
|
|
procedure TCustomIdleTimer.DoOnIdle(Sender: TObject; var Done: Boolean);
|
|
begin
|
|
if FFireOnIdle then begin
|
|
DoOnTimer;
|
|
Done:=not FFireOnIdle;
|
|
end;
|
|
if not AutoEnabled then exit;
|
|
// automatic start, stop or restart
|
|
if AutoEndEvent=itaOnIdle then
|
|
Enabled:=false;
|
|
if AutoStartEvent=itaOnIdle then
|
|
Enabled:=true;
|
|
end;
|
|
|
|
procedure TCustomIdleTimer.DoOnIdleEnd(Sender: TObject);
|
|
begin
|
|
if not AutoEnabled then exit;
|
|
// automatic start, stop or restart
|
|
if AutoEndEvent=itaOnIdleEnd then
|
|
Enabled:=false;
|
|
if AutoStartEvent=itaOnIdleEnd then
|
|
Enabled:=true;
|
|
end;
|
|
|
|
procedure TCustomIdleTimer.DoOnUserInput(Sender: TObject; Msg: Cardinal);
|
|
begin
|
|
FireOnIdle:=false;
|
|
if not AutoEnabled then exit;
|
|
// automatic start, stop or restart
|
|
if AutoEndEvent=itaOnUserInput then
|
|
Enabled:=false;
|
|
if AutoStartEvent=itaOnUserInput then
|
|
Enabled:=true;
|
|
end;
|
|
|
|
procedure TCustomIdleTimer.Loaded;
|
|
begin
|
|
inherited Loaded;
|
|
UpdateHandlers;
|
|
end;
|
|
|
|
constructor TCustomIdleTimer.Create(TheOwner: TComponent);
|
|
begin
|
|
inherited Create(TheOwner);
|
|
FAutoEnabled := False;
|
|
FAutoStartEvent := itaOnIdle;
|
|
FAutoEndEvent := itaOnUserInput;
|
|
end;
|
|
|
|
destructor TCustomIdleTimer.Destroy;
|
|
begin
|
|
AutoEnabled := False;
|
|
inherited Destroy;
|
|
end;
|
|
|
|
procedure TCustomIdleTimer.UpdateHandlers;
|
|
begin
|
|
if FAutoEnabled
|
|
and ([csDesigning,csLoading,csDestroying]*ComponentState=[]) then begin
|
|
// connect handlers
|
|
if FHandlersConnected or (Application=nil) then exit;
|
|
Application.AddOnIdleHandler(@DoOnIdle,true);
|
|
Application.AddOnIdleEndHandler(@DoOnIdleEnd,true);
|
|
Application.AddOnUserInputHandler(@DoOnUserInput,true);
|
|
FHandlersConnected:=true;
|
|
end else begin
|
|
// disconnect handlers
|
|
if (not FHandlersConnected) or (Application=nil) then exit;
|
|
Application.RemoveOnIdleHandler(@DoOnIdle);
|
|
Application.RemoveOnIdleEndHandler(@DoOnIdleEnd);
|
|
Application.RemoveOnUserInputHandler(@DoOnUserInput);
|
|
FHandlersConnected:=false;
|
|
end;
|
|
end;
|
|
|
|
// included by extctrls.pp
|