Ticket #586: timer.scm

File timer.scm, 2.7 KB (added by ewfalor, 13 years ago)

Clicking the start button demonstrates that you can begin a timer. Clicking the stop button or allowing time to run out demonstrates that the analogous qt:stop operation doesn't work.

Line 
1#!/usr/local/bin/csi -s
2; vim:filetype=chicken expandtab tabstop=2 textwidth=76:
3
4(use posix qt-light utils)
5
6(define *app* (qt:init))
7
8(define *window* (qt:widget #<<TIMER
9<?xml version="1.0" encoding="UTF-8"?>
10<ui version="4.0">
11 <class>Form</class>
12 <widget class="QWidget" name="Form">
13  <property name="geometry">
14   <rect>
15    <x>0</x>
16    <y>0</y>
17    <width>194</width>
18    <height>149</height>
19   </rect>
20  </property>
21  <property name="windowTitle">
22   <string>Form</string>
23  </property>
24  <widget class="QPushButton" name="startButton">
25   <property name="geometry">
26    <rect>
27     <x>20</x>
28     <y>80</y>
29     <width>80</width>
30     <height>24</height>
31    </rect>
32   </property>
33   <property name="text">
34    <string>qt:start</string>
35   </property>
36  </widget>
37  <widget class="QLCDNumber" name="lcdNumber">
38   <property name="geometry">
39    <rect>
40     <x>120</x>
41     <y>80</y>
42     <width>61</width>
43     <height>61</height>
44    </rect>
45   </property>
46   <property name="font">
47    <font>
48     <pointsize>9</pointsize>
49    </font>
50   </property>
51   <property name="numDigits">
52    <number>2</number>
53   </property>
54   <property name="digitCount">
55    <number>2</number>
56   </property>
57   <property name="intValue" stdset="0">
58    <number>10</number>
59   </property>
60  </widget>
61  <widget class="QLabel" name="label">
62   <property name="geometry">
63    <rect>
64     <x>10</x>
65     <y>10</y>
66     <width>181</width>
67     <height>51</height>
68    </rect>
69   </property>
70   <property name="font">
71    <font>
72     <pointsize>13</pointsize>
73    </font>
74   </property>
75   <property name="text">
76    <string>Click stop or wait
77for the time to run out</string>
78   </property>
79  </widget>
80  <widget class="QPushButton" name="stopButton">
81   <property name="geometry">
82    <rect>
83     <x>20</x>
84     <y>110</y>
85     <width>80</width>
86     <height>24</height>
87    </rect>
88   </property>
89   <property name="text">
90    <string>qt:stop</string>
91   </property>
92  </widget>
93 </widget>
94 <resources/>
95 <connections/>
96</ui>
97TIMER
98))
99
100;buttons
101(define *start* (qt:find *window* "startButton"))
102(define *stop*  (qt:find *window* "stopButton"))
103
104;lcd number display
105(define *lcd*   (qt:find *window* "lcdNumber"))
106
107;Qt timer object
108(define *ticker* (qt:timer 1))
109
110;signal to fire upon each timeout
111(qt:connect
112  *ticker* "timeout()"
113  (qt:receiver
114    (lambda ()
115      (let ((seconds (qt:property *lcd* "intValue")))
116        (cond
117          ((< seconds 1)
118                   (set! (qt:property *lcd* "intValue") 0)
119                   (qt:stop *ticker*))
120          (else
121            (set! (qt:property *lcd* "intValue") (- seconds 1))))))))
122
123(define (startButton)
124  (qt:start *ticker*))
125
126(define (stopButton)
127  (qt:stop *ticker*))
128
129(qt:connect *start* "clicked()" startButton)
130(qt:connect *stop* "clicked()" stopButton)
131
132(qt:show *window*)
133(qt:run)