Changeset main,45 for main/form.lisp


Ignore:
Timestamp:
11/09/2007 12:29:19 AM (19 years ago)
Author:
David Owen <dsowen@…>
branch-nick:
tui-new
revision id:
dsowen@fugue88.ws-20071109002919-u3q6f17xwbxvy3b0
Message:

Added numberbox support to forms.
Fixed indentation of defform and added documentation.
Fix: Labels weren't being pushed to the screen.
Fix: (activate label) should return something useful to the form.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • main/form.lisp

    r44 r45  
    7070(defvar *form-definitions* (make-hash-table :test #'eq ))
    7171
    72 (defmacro defform (name (&rest widgets))
     72(defmacro defform (name (&body widgets))
     73  "Each widget is one of:
     74- (:label row column text)
     75- (:textbox row column name display-width &key data-width read-only)
     76- (:numberbox row column name display-width &key data-width precision read-only)"
    7377  (with-gensyms (elements)
    7478    `(let ((,elements (list ,@(mapcar 'parse-widget-form widgets))))
     
    8286   (name :initarg :name)))
    8387
     88(defun make-reflector (data name)
     89  (make-instance 'reflector :data data :name name))
     90
    8491(defmethod text ((r reflector))
    8592  (with-slots (data name) r
     
    93100
    94101(defgeneric create-peer (widget-def form)
     102  (:method ((ld label-def) form)
     103    (with-slots (row column text) ld
     104      (with-slots (window) form
     105        (create-label window row column text))))
    95106  (:method ((tbd textbox-def) form)
    96107    (with-slots (row column name display-width) tbd
    97108      (with-slots (data window scroll) form
    98         (let ((r (make-instance 'reflector :data data :name name)))
    99           (create-textbox window (- row scroll) column r display-width))))))
     109        (let ((r (make-reflector data name)))
     110          (create-textbox window (- row scroll) column r display-width)))))
     111  (:method ((nbd numberbox-def) form)
     112    (with-slots (row column name display-width) nbd
     113      (with-slots (data window scroll) form
     114        (let ((r (make-reflector data name)))
     115          (create-numberbox window (- row scroll) column r display-width))))))
    100116
    101117
     
    108124   (peers :type vector :initarg :peers)
    109125   (scroll :type (integer 0) :accessor scroll)))
     126
     127(defmethod refresh ((form form))
     128  (with-slots (window) form
     129    (refresh window)))
    110130
    111131(defun max-scroll (form)
     
    189209        (loop
    190210           (ensure-widget-visible form focus)
     211           (refresh form)
    191212           (let ((key (activate (aref peers focus) #'callback)))
    192213             (case key
Note: See TracChangeset for help on using the changeset viewer.