Changeset main,43 for main


Ignore:
Timestamp:
11/08/2007 07:13:21 PM (19 years ago)
Author:
David Owen <dsowen@…>
branch-nick:
tui-new
revision id:
dsowen@fugue88.ws-20071108191321-hjhsnqe3pkp72kl8
Message:

Scrolling now works.

Location:
main
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • main/form-test.lisp

    r42 r43  
    4646        (unwind-protect
    4747             (progn
     48               (setf (scroll form) 4)
    4849               (tui-input:read-key w))
    4950          (destroy-form form))))))
  • main/form.lisp

    r42 r43  
    33(defpackage #:tui-form
    44  (:use #:cl #:dso-util #:tui-input #:tui-widget #:tui-window)
    5   (:export #:form-value #:defform #:create-form #:destroy-form))
     5  (:export #:form-value #:defform #:create-form #:destroy-form #:scroll))
    66
    77(in-package #:tui-form)
     
    9494  (:method ((tbd textbox-def) form)
    9595    (with-slots (row column name display-width) tbd
    96       (with-slots (data window) form
     96      (with-slots (data window scroll) form
    9797        (let ((r (make-instance 'reflector :data data :name name)))
    98           (create-textbox window row column r display-width))))))
     98          (create-textbox window (- row scroll) column r display-width))))))
    9999
    100100
     
    112112    (let ((lowest (reduce #'max (map 'list #'slot-value widget-defs (inflist 'row))))
    113113          (max (1- (size window))))
    114       (min 0 (- lowest max)))))
     114      (max 0 (- lowest max)))))
    115115
    116116(defun percent-scroll (form)
     
    123123      (setf widget (aref widgets widget)))
    124124    (with-slots (row) widget
    125         (<= scroll row (1- (size window))))))
     125      (<= 0 (- row scroll) (1- (size window))))))
    126126
    127127(defmethod (setf scroll) :around (i (form form))
    128   (with-slots (widget-defs peers) form
     128  (with-slots (widget-defs window peers) form
    129129    (let ((r (call-next-method (bound i 0 (max-scroll form)) form)))
    130130      (dotimes (i (length widget-defs))
    131         (let ((widget (aref widget-defs i))
    132               (peer (aref peers i)))
    133           (when (and peer (not (widget-visible-p form widget)))
     131        (let ((peer (aref peers i)))
     132          (when peer
    134133            (destroy peer)
    135             (setf (aref peers i) nil))
    136           (when (and (not peer) (widget-visible-p form widget))
    137             (setf (aref peers i) (create-peer widget form)))))
     134            (setf (aref peers i) nil))))
     135      (erase window)
     136      (dotimes (i (length widget-defs))
     137        (let ((widget-def (aref widget-defs i)))
     138          (when (widget-visible-p form widget-def)
     139            (setf (aref peers i) (create-peer widget-def form)))))
    138140      r)))
    139141
Note: See TracChangeset for help on using the changeset viewer.