Initial clock implementation.
[kaya.git] / lib / themes / clocks / digital.rb
blob1a9b3e66d65a21c383452dbf89b0ed46d6a5a9ee
1 require 'themes/theme'
2 require 'constrained_text_item'
4 class DigitalClock < Qt::GraphicsItemGroup
5   include Theme
6   include ItemBag
7   include ItemUtils
8   include Observer
9   
10   theme :name => 'Digital Clock',
11         :keywords => %w(clock)
13   attr_reader :items, :rect, :clock
14   
15   OFF_TEXT = '-'
16           
17   def initialize(scene)
18     super(nil, @scene = scene)
19     
20     @items = {
21       :border => Qt::GraphicsRectItem.new(self),
22       :time => ConstrainedTextItem.new(OFF_TEXT, self)
23     }
24   end
25   
26   def set_geometry(rect)
27     @rect = rect
28     redraw
29   end
30   
31   def redraw
32     @items[:border].set_rect(@rect.x, @rect.y, @rect.width, @rect.height)
33     @items[:time].constraint = @rect
34   end
35   
36   def clock=(clock)
37     if @clock
38       @clock.delete_observer(self)
39     end
40     
41     @clock = clock
42     clock.add_observer(self)
43     on_timer(clock.timer)
44   end
45   
46   def on_timer(data)
47     min = data[:main] / 60
48     sec = data[:main] % 60
49     
50     @items[:time].text = "%02d:%02d" % [min, sec]
51   end
52 end