Index: main/form.lisp
===================================================================
--- main/form.lisp	(revision main,44)
+++ main/form.lisp	(revision main,45)
@@ -70,5 +70,9 @@
 (defvar *form-definitions* (make-hash-table :test #'eq ))
 
-(defmacro defform (name (&rest widgets))
+(defmacro defform (name (&body widgets))
+  "Each widget is one of:
+- (:label row column text)
+- (:textbox row column name display-width &key data-width read-only)
+- (:numberbox row column name display-width &key data-width precision read-only)"
   (with-gensyms (elements)
     `(let ((,elements (list ,@(mapcar 'parse-widget-form widgets))))
@@ -82,4 +86,7 @@
    (name :initarg :name)))
 
+(defun make-reflector (data name)
+  (make-instance 'reflector :data data :name name))
+
 (defmethod text ((r reflector))
   (with-slots (data name) r
@@ -93,9 +100,18 @@
 
 (defgeneric create-peer (widget-def form)
+  (:method ((ld label-def) form)
+    (with-slots (row column text) ld
+      (with-slots (window) form
+        (create-label window row column text))))
   (:method ((tbd textbox-def) form)
     (with-slots (row column name display-width) tbd
       (with-slots (data window scroll) form
-        (let ((r (make-instance 'reflector :data data :name name)))
-          (create-textbox window (- row scroll) column r display-width))))))
+        (let ((r (make-reflector data name)))
+          (create-textbox window (- row scroll) column r display-width)))))
+  (:method ((nbd numberbox-def) form)
+    (with-slots (row column name display-width) nbd
+      (with-slots (data window scroll) form
+        (let ((r (make-reflector data name)))
+          (create-numberbox window (- row scroll) column r display-width))))))
 
 
@@ -108,4 +124,8 @@
    (peers :type vector :initarg :peers)
    (scroll :type (integer 0) :accessor scroll)))
+
+(defmethod refresh ((form form))
+  (with-slots (window) form
+    (refresh window)))
 
 (defun max-scroll (form)
@@ -189,4 +209,5 @@
         (loop
            (ensure-widget-visible form focus)
+           (refresh form)
            (let ((key (activate (aref peers focus) #'callback)))
              (case key
