You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
68 lines
1.5 KiB
68 lines
1.5 KiB
require 'Qt'
|
|
|
|
class DigitalClock < TQt::LCDNumber
|
|
|
|
slots 'stopDate()', 'showTime()'
|
|
|
|
# Constructs a DigitalClock widget
|
|
def initialize
|
|
super
|
|
|
|
@showingColon = false
|
|
setFrameStyle(TQt::Frame.Panel | TQt::Frame.Raised)
|
|
setLineWidth(2) # set frame line width
|
|
showTime # display the current time
|
|
@normalTimer = startTimer(500) # 1/2 second timer events
|
|
@showDateTimer = -1 # not showingdate
|
|
end
|
|
|
|
# Handles timer events for 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.
|
|
def timerEvent (e)
|
|
if (e.timerId == @showDateTimer) # stop showing date
|
|
stopDate
|
|
else # normal timer
|
|
if (@showDateTimer == -1) # not showing date
|
|
showTime()
|
|
end
|
|
end
|
|
end
|
|
|
|
# Enters date mode when the left mouse button is pressed.
|
|
def mousePressEvent (e)
|
|
if (e.button == TQt::MouseEvent.LeftButton) # left button pressed
|
|
showDate
|
|
end
|
|
end
|
|
|
|
def stopDate
|
|
killTimer(@showDateTimer)
|
|
@showDateTimer = -1
|
|
showTime
|
|
end
|
|
|
|
def showTime
|
|
@showingColon = !@showingColon # toggle/blink colon
|
|
s = TQt::Time.currentTime.toString[0..4]
|
|
if (!@showingColon)
|
|
s[2] = ' '
|
|
end
|
|
if (s[0] == '0')
|
|
s[0] = ' '
|
|
end
|
|
display(s) # set LCD number/text
|
|
end
|
|
|
|
def showDate
|
|
if (@showDateTimer != -1) # already showing date
|
|
return
|
|
end
|
|
date = TQt::Date.currentDate
|
|
s = sprintf('%2d %2d', date.month, date.day)
|
|
display(s) # sets the LCD number/text
|
|
@showDateTimer = startTimer(2000) # keep this state for 2 secs
|
|
end
|
|
|
|
end
|