Fix bug where clock was not starting when beginning observation.
[kaya.git] / lib / plugins / clocks / lib / clock_display.rb
blob3ed4cba213d0fbffd093978643a594de5716be01
1 # Copyright (c) 2009 Paolo Capriotti <p.capriotti@gmail.com>
2
3 # This program is free software; you can redistribute it and/or modify
4 # it under the terms of the GNU General Public License as published by
5 # the Free Software Foundation; either version 2 of the License, or
6 # (at your option) any later version.
8 require 'constrained_text_item'
10 module ClockDisplay
11   OFF_TEXT = '-'
12   
13   def set_geometry(rect)
14     @rect = Qt::RectF.new(rect)
15     self.pos = @rect.top_left
16     redraw
17   end
18   
19   def create_display_items
20     {
21       :time => ConstrainedTextItem.new(OFF_TEXT, self),
22       :player => ConstrainedTextItem.new('', self),
23       :caption => ConstrainedTextItem.new('', self)
24     }
25   end
26   
27   def start
28     if @clock
29       @clock.start
30     else
31       # save 'started' state for when the clock is added
32       @started = true
33     end
34     self.active = true
35   end
36   
37   def stop
38     # cancel possible 'started' state
39     @started = false
40     @clock.stop if @clock
41     self.active = false
42   end
43   
44   def active=(value)
45     @active = value
46     redraw
47   end
48   
49   def active?
50     @active
51   end
52   
53   def data=(d)
54     @caption = translate[d[:color]]
55     @player = d[:player] || KDE::i18n('(unknown)')
56     
57     items[:caption].text = @caption
58     items[:player].text = @player
59   end
60   
61   def clock=(clock)
62     if @clock
63       @clock.delete_observer(self)
64     end
65     
66     @clock = clock
67     
68     # start the clock if the display was in the 'started'
69     # state before the clock was added
70     @clock.start if @started
71     @started = false
72     
73     clock.add_observer(self)
74     on_timer(clock.timer)
75   end
76   
77   def on_timer(data)
78     min = data[:main] / 60
79     sec = data[:main] % 60
80     
81     @items[:time].text = "%02d:%02d" % [min, sec]
82   end
83 end