Windows fixes
[commonqt.git] / tutorial / conv.lisp
1 #|
2  Currency conversion example written by Robert Synnott.
3
4  http://myblog.rsynnott.com/2009/03/macos-fun-with-commonqt-qt-for-common.html
5 |#
6
7 (defpackage :qt-conv
8   (:use :cl :qt)
9   (:export :main))
10
11 (in-package :qt-conv)
12 (named-readtables:in-readtable :qt)
13
14 (defvar *qapp*)
15
16 (defclass my-window()
17     ((dollarAmount :accessor dollarAmount)
18      (conversionRate :accessor conversionRate)
19      (result :accessor result))
20   (:metaclass qt-class)
21   (:qt-superclass "QWidget")
22   (:slots ("convert()" convert)))
23
24 (defmethod convert ((instance my-window) &aux (res 0))
25   ;; Just ignore if input isn't numeric...
26   (handler-case
27       (setf res (* (read-from-string (#_text (dollarAmount instance)))
28                    (read-from-string (#_text (conversionRate instance)))))
29     (t () nil))
30   (#_setText (result instance) (format nil "~A" res)))
31
32 (defmethod initialize-instance :after ((instance my-window) &key)
33   (new instance)
34   (#_setFixedSize instance 360 170)
35   (let ((convert (#_new QPushButton "Convert" instance)))
36     (setf (conversionRate instance) (#_new QLineEdit "1.00" instance)
37           (dollarAmount instance) (#_new QLineEdit "0.00" instance)
38           (result instance) (#_new QLineEdit "0.00" instance))
39     (#_move (#_new QLabel "Exchange Rate per $1:" instance) 20 20)
40     (#_move (#_new QLabel "Dollars to Covert:" instance) 20 60)
41     (#_move (#_new QLabel "Amount in other Currency:" instance) 20 100)
42     (#_move (dollarAmount instance) 200 60)
43     (#_move (conversionRate instance) 200 20)
44     (#_move (result instance) 200 100)
45     (#_move convert 220 130)
46     (#_connect "QObject"
47                convert (QSIGNAL "clicked()")
48                instance (QSLOT "convert()"))))
49
50 (defun main (&optional style)
51   (when style
52     (#_setStyle "QApplication"
53                 (#_create "QStyleFactory" (ecase style
54                                             (:cde "CDE")
55                                             (:macintosh "Macintosh")
56                                             (:windows "Windows")
57                                             (:motif "Motif")))))
58   (setf *qapp* (make-qapplication))
59   (let ((window (make-instance 'my-window)))
60     (#_show window)
61     (unwind-protect
62          (#_exec *qapp*)
63       (#_hide window))))