added set-orientation method to panel:dragable (lets the panels

change from being vertically aligned to horizontally aligned, even
after they have been created)

original commit: 9a485dd49270da20445eeb1c8b664f8f12b414ea
This commit is contained in:
Robby Findler 2010-12-09 07:52:54 -06:00
parent 0591eccbe6
commit 3c58e55730
2 changed files with 19 additions and 10 deletions

View File

@ -182,9 +182,15 @@
(define dragable-mixin
(mixin (window<%> area-container<%>) (dragable<%>)
(init parent)
(define/public (get-vertical?)
(error 'get-vertical "abstract method"))
(init-field vertical?)
(define/public-final (get-vertical?) vertical?)
(define/public-final (set-orientation h?)
(define v? (not h?))
(unless (eq? vertical? v?)
(set! vertical? v?)
(container-flow-modified)))
(define/private (min-extent child)
(let-values ([(w h) (send child get-graphical-min-size)])
(if (get-vertical?)
@ -413,18 +419,15 @@
(stretchable-height #f)
(min-height 10)))
(define vertical-dragable-mixin
(mixin (dragable<%>) (vertical-dragable<%>)
(define/override (get-vertical?) #t)
(super-instantiate ())))
(super-new [vertical? #t])))
(define horizontal-dragable-mixin
(mixin (dragable<%>) (vertical-dragable<%>)
(define/override (get-vertical?) #f)
(super-instantiate ())))
(super-new [vertical? #f])))
(define vertical-dragable% (vertical-dragable-mixin (dragable-mixin vertical-panel%)))
(define vertical-dragable% (vertical-dragable-mixin (dragable-mixin panel%)))
(define horizontal-dragable% (horizontal-dragable-mixin (dragable-mixin horizontal-panel%)))
(define horizontal-dragable% (horizontal-dragable-mixin (dragable-mixin panel%)))

View File

@ -98,6 +98,12 @@
horizontally aligned.
}
@defmethod[(set-orientation [horizontal? boolean?]) void?]{
Sets the orientation of the panel, switching it from behaving
like a @racket[panel:horizontal-dragable<%>] and
@racket[panel:vertical-dragable<%>].
}
}
@definterface[panel:vertical-dragable<%> (panel:dragable<%>)]{
A panel that implements