gui/gui-lib/embedded-gui/private/alignment-helpers.rkt
2014-12-02 02:33:07 -05:00

75 lines
2.1 KiB
Racket

(module alignment-helpers mzscheme
(require
mzlib/list
mzlib/class
mred
mzlib/contract
"interface.rkt"
"snip-lib.rkt")
(provide/contract
(vacuous-max (() (listof number?) . ->* . (number?)))
(child-height ((union (is-a?/c alignment<%>) (is-a?/c snip%)) . -> . number?))
(child-width ((union (is-a?/c alignment<%>) (is-a?/c snip%)) . -> . number?))
(insert-before (any/c (listof any/c) any/c . -> . (listof any/c)))
(insert-after (any/c (listof any/c) any/c . -> . (listof any/c))))
(define (vacuous-max . n)
(if (empty? n)
0
(apply max n)))
#|
(equal? (vacuous-max 5 2) 5)
(equal? (vacuous-max) 0)
(equal? (vacuous-max -2 6) 6)
(equal? (vacuous-max -3 -5) -3)
(equal? (vacuous-max -2 0) 0)
|#
(define (child-height item)
(cond
[(is-a? item snip%) (snip-min-height item)]
[(is-a? item alignment<%>) (send item get-min-height)]))
(define (child-width item)
(cond
[(is-a? item snip%) (snip-min-width item)]
[(is-a? item alignment<%>) (send item get-min-width)]))
(define ((insert how) item alist reference)
(cond
[(empty? alist) (error 'insert "Could not find item in list")]
[(cons? alist)
(if (equal? (first alist) reference)
(how item (first alist) (rest alist))
(cons (first alist)
((insert how) item (rest alist) reference)))]))
(define insert-before
(insert (lambda (item the-first the-rest)
(cons item
(cons the-first the-rest)))))
(define insert-after
(insert (lambda (item the-first the-rest)
(cons the-first
(cons item the-rest)))))
#|
(equal? (insert-before 1 '(3 4 2 5) 2)
'(3 4 1 2 5))
(equal? (insert-before 1 '(1) 1)
'(1 1))
(equal? (insert-before 0 '(5 -5 6 -5) -5)
'(5 0 -5 6 -5))
(equal? (insert-after 1 '(3 4 2 5) 2)
'(3 4 2 1 5))
(equal? (insert-after 1 '(1) 1)
'(1 1))
(equal? (insert-after 0 '(5 -5 6 -5) -5)
'(5 -5 0 6 -5))
|#
)