summaryrefslogtreecommitdiffstats
path: root/PerlTQt/examples/dclock/DigitalClock.pm
diff options
context:
space:
mode:
Diffstat (limited to 'PerlTQt/examples/dclock/DigitalClock.pm')
-rw-r--r--PerlTQt/examples/dclock/DigitalClock.pm88
1 files changed, 88 insertions, 0 deletions
diff --git a/PerlTQt/examples/dclock/DigitalClock.pm b/PerlTQt/examples/dclock/DigitalClock.pm
new file mode 100644
index 0000000..2d25428
--- /dev/null
+++ b/PerlTQt/examples/dclock/DigitalClock.pm
@@ -0,0 +1,88 @@
+package DigitalClock;
+use strict;
+use TQt;
+use TQt::isa qw(TQt::LCDNumber);
+use TQt::slots
+ stopDate => [],
+ showTime => [];
+use TQt::attributes qw(
+ showingColon
+ normalTimer
+ showDateTimer
+);
+
+#
+# Constructs a DigitalClock widget
+#
+
+sub NEW {
+ shift->SUPER::NEW(@_);
+ showingColon = 0;
+ setFrameStyle(&Panel | &Raised);
+ setLineWidth(2);
+ showTime();
+ normalTimer = startTimer(500);
+ showDateTimer = -1;
+}
+
+#
+# Handles timer events and the digital clock widget.
+# There are two different timers; one timer for updating the clock
+# and another one for switching back from date mode to time mode
+#
+
+sub timerEvent {
+ my $e = shift;
+ if($e->timerId == showDateTimer) { # stop showing date
+ stopDate();
+ } elsif(showDateTimer == -1) { # normal timer
+ showTime();
+ }
+}
+
+#
+# Enters date mode when the left mouse button is pressed
+#
+
+sub mousePressEvent {
+ my $e = shift;
+ showDate() if $e->button == &LeftButton;
+}
+
+#
+# Shows the durrent date in the internal lcd widget.
+# Fires a timer to stop showing the date.
+#
+
+sub showDate {
+ return if showDateTimer != -1; # already showing date
+ my $date = TQt::Date::currentDate();
+ my $s = sprintf("%2d %2d", $date->month, $date->day);
+ display($s); # sets the LCD number/text
+ showDateTimer = startTimer(2000); # keep this state for 2 secs
+}
+
+#
+# Stops showing the date.
+#
+
+sub stopDate {
+ killTimer(showDateTimer);
+ showDateTimer = -1;
+ showTime();
+}
+
+#
+# Shows the current time in the internal lcd widget.
+#
+
+sub showTime {
+ showingColon = !showingColon;
+ my $s = substr(TQt::Time::currentTime()->toString, 0, 5);
+ $s =~ s/^0/ /;
+ $s =~ s/:/ / unless showingColon;
+ display($s);
+}
+
+1;
+