racket/collects/frtime/demos/gui/demo/bindec.ss
Greg Cooper 9fe113940e - moved README into demos/
- updated GUI bindings

svn: r2710
2006-04-18 23:43:59 +00:00

44 lines
1.4 KiB
Scheme

(require "../simple.ss")
(require (rename (lib "mred.ss" "mred") horizontal-panel% horizontal-panel%))
; just change this to change the range of the binary/decimal converter
(define SIZE 10)
(define (bool-lst->num bool-lst)
(let loop ([lst bool-lst] [sum 0] [pow 0])
(if (empty? lst)
sum
(loop (cdr lst)
(+ sum
(if (car lst)
(expt 2 pow)
0))
(add1 pow)))))
(define (place-num->bool loc num)
(if (= 0 loc)
(odd? num)
(place-num->bool (sub1 loc) (quotient num 2))))
(current-widget-parent (new ft-frame% (label "Binary<-->Decimal")))
(define-values-rec
[sld (mode value-b ft-slider%
(stretchable-width #t)
(min-value 0)
(max-value (sub1 (expt 2 SIZE)))
(value-set (changes
(bool-lst->num
boxes))))]
[boxes (parameterize ([current-widget-parent
(mode widget horizontal-panel%)])
(build-list SIZE ; build-list is right associative.
(lambda (i)
(mode value-b ft-check-box%
(label (number->string (expt 2 i)))
(value-set
(changes (place-num->bool i sld)))))))])
(send (current-widget-parent) show #t)