diff options
Diffstat (limited to 'src/MTools/MTimer.pm')
-rw-r--r-- | src/MTools/MTimer.pm | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/src/MTools/MTimer.pm b/src/MTools/MTimer.pm new file mode 100644 index 0000000..68d1a00 --- /dev/null +++ b/src/MTools/MTimer.pm @@ -0,0 +1,104 @@ +package MTools::MTimer; +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU LGPL Libray General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Library General Public License for more details. +# +# You should have received a copy of the GNU Library General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA, +# or refer to http://www.gnu.org/copyleft/lgpl.html +# +################################################################## + +# Le composant MTimer encapsule la d?claration et l'utilisation d'un timer. +# Les param?tres : +# * $timeout : repr?sente timeout en ms du timer (totologique ? non...) +# * $repeat : active ou non le caract?re r?p?titif du timer (valeur 0 ou 1) +# * $callback : est optionnel et permet d'appeler une callback au timeout. +# Les ?v?nements : +# * TIME_OUT : ?mis au timeout en plus de l'appel ? une ?ventuelle callback +# * TIMER_STOPPED : ?mis si le timer est interrompu avant un timeout +# Les propi?t?s : +# * timeout : ... +# * repeat : ... +# * callback : ... +# * -visible : d?finie pour assurer la compatibilit? avec les autres objets MTools. +# Si la valeur est 0 le composant est d?sactiv? (appel ? la fonction stop), +# si la valeur est 1 (appel ? la fonction start), le composant est activ?. +# Cette propri?t? permet notamment d'activer un timer dans un ?tat d'un MSwitch. +# Les fonctions public : +# * start permet de d?marrer le timer +# * stop permet de stopper le timer +# Nota : cf. ci-dessus, ces fonctions peuvent ?tre contr?l?es par la propri?t? -visible + +use strict; +use MTools; +use MTools::MObjet; + +use vars qw /@ISA/; + +BEGIN +{ + @ISA = qw /MTools::MObjet/; +} + +use Tk; + + +sub new { + my ($class, $timeout, $repeat, $callback, %options) = @_; + my $self = {}; + bless $self, $class; + + $repeat = 0 if !defined $repeat; + $repeat = 0 if !defined $callback; + + $self -> recordEvent ('TIME_OUT'); + $self -> recordEvent ('TIMER_STOPPED'); + $self -> recordProperty ('timeout', $timeout); + $self -> recordProperty ('repeat', $repeat); + $self -> recordProperty ('callback', $callback); + $self -> recordProperty ('-visible', 0); + $self -> plisten ('-visible', sub { + my ($src, $key, $val) = @_; + if ($val == 0) + { + $self -> stop (); + } + else + { + $self -> start (); + } + }); + $self -> mconfigure (%options); + + return $self; +} + +sub start { + my ($self) = @_; + my $repeat = $self -> mget ('repeat'); + my $timeout = $self -> mget ('timeout'); + my $callback = $self -> mget ('callback'); + my $function = $repeat ? 'repeat' : 'after'; + $self -> {__timer} = $zinc -> $function ($timeout, sub { + $self -> notify ('TIME_OUT'); + if ($callback) + { + executer ($callback); + } + }); +} + +sub stop { + my ($self) = @_; + $zinc -> afterCancel ($self -> {__timer}); + $self -> notify ('TIMER_STOPPED'); +} +1; |