All pastes #73863 Raw Edit

Stuff

public text v1 · immutable
#73863 ·published 2006-06-28 11:08 UTC
rendered paste body
(define (option->widget option)
  (let ((name (option->name option))
        (val (option->value option))
        (vals (option->constraint->values option))
        (castproc (option->castproc option)))
    (let ((set-option-value! (make-option-value-setter name val castproc)))
      (case (option->constraint->type option)
        ((boolean)
         `(,type checkbox
                 ,state ,val
                 ,(when commit-value (set-option-value! (op-value state)))))
        (else
         (case (option->constraint->ctype option)
           ((list)
            (if (value-is-list? option)
                `(,type checklist
                        ;; ,checklist-policy excluding
                        ;; ,checklist-items ,vals
                        ,checklist-items ("hdc" "hdd")
                        ,(when commit-value (set-option-value! (op-value checklist-items))))
                `(,type combobox
                        ,rows ,vals
                        ,current ,(index-of val vals)
                        ,(when commit-value (set-option-value! (op-value text))))))
           ((range)
            (let* ((vmin (car vals))
                   (vmax (cadr vals))
                   (vstep (inexact->exact (/ (- vmax vmin) 63))))
              `(,type slider
                      ,minimum ,vmin ,maximum ,vmax ,step ,vstep ,value ,val ;; b0rken, attr order matters
                      ,(when commit-value (set-option-value! (op-value value)))
                      ,(when changed (format #t "value changed\n")))))
           (else
            `(,type edit
                    ,(if (number? val) (number->string val) val)
                    ,(when commit-value (set-option-value! (op-value text)))
                    ,(when changed (format #t "value changed\n"))))))))))

(document:envelop with-proxy-attributes
                  ((option ((proxy-set self opt)
                            (op-pixmap pixmap (option->pixmap opt))
                            (op-title text (option->title opt))
                            (apply op-value (option->widget opt))))
                   (commit ((proxy-get self)
                            (op-value commit-value)))))

(hbox
 ;;layout-policy 100 -1
 (document:id op-pixmap (label ""))
 (document:id op-title (label "")) ;; layout-policy 30 -1))
 (document:id op-value (value-widget)))