Ticket #586: timer.scm

File timer.scm, 2.7 KB (added by ewfalor, 15 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)