From 9b3f2427d7adb6fcfb7e737fdec36b313c8f5b69 Mon Sep 17 00:00:00 2001 From: Robby Findler Date: Tue, 4 Oct 2011 16:46:23 -0500 Subject: [PATCH] make right-click in the space between the definitions and interactions window pop up a menu to let you change from vertical to horizontal orientation --- collects/drracket/private/unit.rkt | 20 ++++++++++++++++--- collects/framework/private/panel.rkt | 9 +++++++-- collects/scribblings/framework/panel.scrbl | 10 ++++++++++ .../private/english-string-constants.rkt | 5 +++++ 4 files changed, 39 insertions(+), 5 deletions(-) diff --git a/collects/drracket/private/unit.rkt b/collects/drracket/private/unit.rkt index e8630a2cac..77eecc548e 100644 --- a/collects/drracket/private/unit.rkt +++ b/collects/drracket/private/unit.rkt @@ -1100,7 +1100,8 @@ module browser threading seems wrong. (define dragable/def-int-mixin (mixin (panel:dragable<%>) () (init-field unit-frame) - (inherit get-percentages) + (inherit get-percentages popup-menu + set-orientation get-vertical?) (define/augment (after-percentage-change) (let ([percentages (get-percentages)]) (when (and (= 1 @@ -1109,6 +1110,21 @@ module browser threading seems wrong. (= 2 (length percentages))) (preferences:set 'drracket:unit-window-size-percentage (car percentages)))) (inner (void) after-percentage-change)) + (define/override (right-click-in-gap evt before after) + (define menu (new popup-menu%)) + (define vertical? (get-vertical?)) + (new menu-item% + [parent menu] + [label + ;; something seems to be wrong with the get-vertical? method... + (if vertical? + (string-constant change-to-vertical-alignment) + (string-constant change-to-horizontal-alignment))] + [callback + (λ (a b) + (preferences:set 'drracket:defs/ints-horizontal vertical?) + (set-orientation vertical?))]) + (popup-menu menu (send evt get-x) (send evt get-y))) (super-new))) (define vertical-dragable/def-int% (dragable/def-int-mixin panel:vertical-dragable%)) @@ -4112,8 +4128,6 @@ module browser threading seems wrong. vertical-dragable/def-int%) (unit-frame this) (parent panel-with-tabs))] - [define orientation-callback (λ (p v) (send resizable-panel set-orientation v))] - (preferences:add-callback 'drracket:defs/ints-horizontal orientation-callback #t) [define definitions-canvas #f] (initialize-definitions-canvas) diff --git a/collects/framework/private/panel.rkt b/collects/framework/private/panel.rkt index 0cdd5f2506..ca48f1cfb4 100644 --- a/collects/framework/private/panel.rkt +++ b/collects/framework/private/panel.rkt @@ -171,7 +171,9 @@ set-percentages get-percentages get-vertical? - get-default-percentages)) + get-default-percentages + right-click-in-gap + set-orientation)) (define vertical-dragable<%> (interface (dragable<%>))) @@ -184,7 +186,6 @@ (init parent) (init-field vertical?) - (define/public-final (get-vertical?) vertical?) (define/public-final (set-orientation h?) (define v? (not h?)) @@ -205,6 +206,8 @@ (icon:get-up/down-cursor) (icon:get-left/right-cursor))) + (define/public (right-click-in-gap evt before after) (void)) + (inherit get-client-size container-flow-modified) (init-field [bar-thickness 5]) @@ -285,6 +288,8 @@ (and (send c ok?) c)))) (cond + [(and gap (send evt button-down? 'right)) + (right-click-in-gap evt (gap-before gap) (gap-after gap))] [(and gap (send evt button-down? 'left)) (set! resizing-dim (event-get-dim evt)) (set! resizing-gap gap)] diff --git a/collects/scribblings/framework/panel.scrbl b/collects/scribblings/framework/panel.scrbl index 7215d289e1..8695dfed8e 100644 --- a/collects/scribblings/framework/panel.scrbl +++ b/collects/scribblings/framework/panel.scrbl @@ -81,6 +81,16 @@ The numbers in the result list must sum to @racket[1]. } + @defmethod[(right-click-in-gap [evt (is-a?/c mouse-event%)] + [before (is-a?/c subarea<%>)] + [after (is-a?/c subarea<%>)]) + void?]{ + This method is called when the user right-clicks in the space + between two children. It receives the mouse event and the + child before and after the gap where the user clicked. + } + + @defmethod*[(((set-percentages (new-percentages (listof number?))) void?))]{ Call this method to set the percentages that each window takes up of the panel. diff --git a/collects/string-constants/private/english-string-constants.rkt b/collects/string-constants/private/english-string-constants.rkt index d821d98590..1c8233502c 100644 --- a/collects/string-constants/private/english-string-constants.rkt +++ b/collects/string-constants/private/english-string-constants.rkt @@ -807,6 +807,11 @@ please adhere to these guidelines: "Would you like to create a new window, or clear out the current one?") (clear-current "Clear Current") (new-window "New Window") + + ;; popup menu when right-clicking in the gap between + ;; the definitions and interactions window + (change-to-vertical-alignment "Change to vertical") + (change-to-horizontal-alignment "Change to horizontal") ;;; exiting and quitting ``are you sure'' dialog ;;; exit is used on windows, quit on macos, in English. Other