136 lines
6.5 KiB
Racket
136 lines
6.5 KiB
Racket
#lang racket/base
|
|
(require "test-suite-utils.rkt")
|
|
|
|
(test
|
|
'single-panel
|
|
(lambda (x) (eq? x 'passed))
|
|
(λ ()
|
|
(queue-sexp-to-mred
|
|
`(let* ([semaphore (make-semaphore 0)]
|
|
[semaphore-frame%
|
|
(class frame%
|
|
(define/augment (on-close) (semaphore-post semaphore))
|
|
(super-new))]
|
|
[f (make-object semaphore-frame% "Single Panel Test")]
|
|
[blue-brush (send the-brush-list find-or-create-brush "navy" 'solid)]
|
|
[green-brush (send the-brush-list find-or-create-brush "lightblue" 'solid)]
|
|
[grid-canvas%
|
|
(class canvas%
|
|
(init-field lines)
|
|
(init label)
|
|
(inherit get-dc get-client-size)
|
|
(override on-paint)
|
|
(define (on-paint)
|
|
(let-values ([(width height) (get-client-size)])
|
|
(let ([dc (get-dc)]
|
|
[single-width (/ width lines)]
|
|
[single-height (/ height lines)])
|
|
(send dc set-pen "black" 1 'transparent)
|
|
(let loop ([i lines])
|
|
(cond
|
|
[(zero? i) (void)]
|
|
[else
|
|
(let loop ([j lines])
|
|
(cond
|
|
[(zero? j) (void)]
|
|
[else
|
|
(send dc set-brush
|
|
(if (= 0 (modulo (+ i j) 2))
|
|
blue-brush green-brush))
|
|
(send dc draw-rectangle
|
|
(* single-width (- i 1))
|
|
(* single-height (- j 1))
|
|
single-width
|
|
single-height)
|
|
(loop (- j 1))]))
|
|
(loop (- i 1))])))))
|
|
(super-instantiate ())
|
|
|
|
;; soon to be obsolete, hopefully.
|
|
(inherit set-label)
|
|
(set-label label)
|
|
|
|
(inherit min-width min-height)
|
|
(min-width 50)
|
|
(min-height 50))]
|
|
[border-panel (make-object horizontal-panel% f '(border))]
|
|
[single-panel (make-object panel:single% border-panel)]
|
|
[children
|
|
(list
|
|
(new grid-canvas% (lines 3) (parent single-panel) (label "Small") (stretchable-width #f) (stretchable-height #f))
|
|
(new grid-canvas% (lines 3) (parent single-panel) (label "Wide") (stretchable-width #t) (stretchable-height #f))
|
|
(new grid-canvas% (lines 3) (parent single-panel) (label "Tall") (stretchable-width #f) (stretchable-height #t))
|
|
(new grid-canvas% (lines 3) (parent single-panel) (label "Wide and Tall") (stretchable-width #t) (stretchable-height #t)))]
|
|
[active-child (car children)]
|
|
[radios (make-object horizontal-panel% f)]
|
|
[make-radio
|
|
(lambda (label choices callback)
|
|
(let* ([panel (make-object vertical-panel% radios '(border))]
|
|
[message (make-object message% label panel)]
|
|
[radio (make-object radio-box% #f choices panel (lambda (radio _) (callback radio)))]
|
|
[button (make-object button%
|
|
"Cycle" panel
|
|
(lambda (_1 _2)
|
|
(let ([before (send radio get-selection)]
|
|
[tot (send radio get-number)])
|
|
(let loop ([n tot])
|
|
(unless (zero? n)
|
|
(send radio set-selection (- tot n))
|
|
(callback radio)
|
|
(sleep/yield 1)
|
|
(loop (- n 1))))
|
|
(send radio set-selection before)
|
|
(callback radio))))])
|
|
radio))]
|
|
[radio
|
|
(make-radio
|
|
"Active Child"
|
|
(map (lambda (x) (send x get-label)) children)
|
|
(lambda (radio)
|
|
(let loop ([n (length children)]
|
|
[cs children])
|
|
(cond
|
|
[(null? cs) (void)]
|
|
[else (let ([c (car cs)])
|
|
(if (string=? (send radio get-item-label (send radio get-selection))
|
|
(send c get-label))
|
|
(begin (set! active-child c)
|
|
(send single-panel active-child active-child))
|
|
(loop (- n 1)
|
|
(cdr cs))))]))))]
|
|
[vertical-alignment 'center]
|
|
[horizontal-alignment 'center]
|
|
[update-alignment (lambda ()
|
|
(send single-panel set-alignment horizontal-alignment vertical-alignment))]
|
|
[horiz
|
|
(make-radio
|
|
"Horizontal Alignment"
|
|
(list "left" "center" "right")
|
|
(lambda (radio)
|
|
(set! horizontal-alignment (string->symbol (send radio get-item-label (send radio get-selection))))
|
|
(update-alignment)))]
|
|
[vert
|
|
(make-radio
|
|
"Vertical Alignment"
|
|
(list "top" "center" "bottom")
|
|
(lambda (radio)
|
|
(set! vertical-alignment (string->symbol (send radio get-item-label (send radio get-selection))))
|
|
(update-alignment)))]
|
|
[buttons (make-object horizontal-panel% f)]
|
|
[result 'failed]
|
|
[failed (make-object button% "Failed" buttons (lambda (_1 _2) (semaphore-post semaphore)))]
|
|
[passed (make-object button% "Passed" buttons (lambda (_1 _2)
|
|
(set! result 'passed)
|
|
(semaphore-post semaphore)))])
|
|
(send border-panel min-width 100)
|
|
(send border-panel min-height 100)
|
|
(send vert set-selection 1)
|
|
(send horiz set-selection 1)
|
|
(send buttons stretchable-height #f)
|
|
(send buttons set-alignment 'right 'center)
|
|
(send radios stretchable-height #f)
|
|
(send f show #t)
|
|
(yield semaphore)
|
|
(send f show #f)
|
|
result))))
|