massive refactoring in preparation of release.
[clinton/lisp-on-lines.git] / src / attributes / numbers.lisp
index 8eeff63..6fb0460 100644 (file)
@@ -5,22 +5,47 @@
   (:type-name number))
 
 ;;;; INTEGER
   (:type-name number))
 
 ;;;; INTEGER
-(defattribute integer-attribute (base-attribute)
+(defattribute integer-attribute (number-attribute)
   ()
   (:type-name integer))
 
   ()
   (:type-name integer))
 
+
+(define-layered-method (setf attribute-value) ((value string) object (attribute integer-attribute))           
+  (let ((*read-eval* nil))
+    (unless (string= "" value)
+      (let ((value (read-from-string value)))
+       (when (numberp value)
+         (setf (attribute-value object attribute) value))))))
+
 ;;;; REALS
 
 ;;;; REALS
 
-(defattribute real-attribute (base-attribute)
+(defattribute real-attribute (number-attribute)
   ()
   (:type-name real))
 
   ()
   (:type-name real))
 
+(define-layered-method (setf attribute-value) ((value string) object (attribute real-attribute))
+  (let ((*read-eval* nil))
+    (unless (string= "" value)
+      (let ((value (read-from-string value)))
+       (when (numberp value)
+         (setf (attribute-value object attribute) value))))))
+
 
 ;;;; Currency
 
 ;;;; Currency
-(defattribute currency-attribute (base-attribute)
+(defattribute currency-attribute (real-attribute)
   ()
   (:type-name currency))
 
 (defdisplay
    ((currency currency-attribute) object)
   ()
   (:type-name currency))
 
 (defdisplay
    ((currency currency-attribute) object)
- (<:as-html (format nil "$~$" (attribute-value object currency))))
+ (<:as-html "$")
+ (call-next-method))
+
+(defdisplay :in-layer editor
+   ((currency currency-attribute) object)
+    (<:as-html "$")
+    (<:input
+     :type "text"
+     :id (id currency)
+     :name (callback currency)
+     :value (format nil "~$" (or (attribute-value object currency) ""))))