From 3c58e557300a6175db84b220e6eca16fdfc35229 Mon Sep 17 00:00:00 2001 From: Robby Findler Date: Thu, 9 Dec 2010 07:52:54 -0600 Subject: [PATCH] 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 --- collects/framework/private/panel.rkt | 23 ++++++++++++---------- collects/scribblings/framework/panel.scrbl | 6 ++++++ 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/collects/framework/private/panel.rkt b/collects/framework/private/panel.rkt index c2efa530..270eb3b4 100644 --- a/collects/framework/private/panel.rkt +++ b/collects/framework/private/panel.rkt @@ -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%))) diff --git a/collects/scribblings/framework/panel.scrbl b/collects/scribblings/framework/panel.scrbl index 19541b84..e3cd08d5 100644 --- a/collects/scribblings/framework/panel.scrbl +++ b/collects/scribblings/framework/panel.scrbl @@ -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