massive refactoring in preparation of release.
[clinton/lisp-on-lines.git] / src / attributes / numbers.lisp
CommitLineData
2b0fd9c8
DC
1(in-package :lisp-on-lines)
2
3(defattribute number-attribute (base-attribute)
4 ()
5 (:type-name number))
6
7;;;; INTEGER
a4e6154d 8(defattribute integer-attribute (number-attribute)
2b0fd9c8
DC
9 ()
10 (:type-name integer))
11
a4e6154d
DC
12
13(define-layered-method (setf attribute-value) ((value string) object (attribute integer-attribute))
14 (let ((*read-eval* nil))
15 (unless (string= "" value)
16 (let ((value (read-from-string value)))
17 (when (numberp value)
18 (setf (attribute-value object attribute) value))))))
19
2b0fd9c8
DC
20;;;; REALS
21
a4e6154d 22(defattribute real-attribute (number-attribute)
2b0fd9c8
DC
23 ()
24 (:type-name real))
25
a4e6154d
DC
26(define-layered-method (setf attribute-value) ((value string) object (attribute real-attribute))
27 (let ((*read-eval* nil))
28 (unless (string= "" value)
29 (let ((value (read-from-string value)))
30 (when (numberp value)
31 (setf (attribute-value object attribute) value))))))
32
2b0fd9c8
DC
33
34;;;; Currency
a4e6154d 35(defattribute currency-attribute (real-attribute)
2b0fd9c8
DC
36 ()
37 (:type-name currency))
38
39(defdisplay
40 ((currency currency-attribute) object)
a4e6154d
DC
41 (<:as-html "$")
42 (call-next-method))
43
44(defdisplay :in-layer editor
45 ((currency currency-attribute) object)
46 (<:as-html "$")
47 (<:input
48 :type "text"
49 :id (id currency)
50 :name (callback currency)
51 :value (format nil "~$" (or (attribute-value object currency) ""))))