From 8169a632bc4fb9fbc53c47ce19079f4d57b417a5 Mon Sep 17 00:00:00 2001 From: Robby Findler Date: Thu, 8 May 1997 20:03:52 +0000 Subject: [PATCH] cleandup original commit: 310a05edf740f3edc760a26e97dc718e2099d9dd --- collects/mred/prefs.ss | 58 +++++++++++++++++++++++++++--------------- 1 file changed, 38 insertions(+), 20 deletions(-) diff --git a/collects/mred/prefs.ss b/collects/mred/prefs.ss index de67f428..256af321 100644 --- a/collects/mred/prefs.ss +++ b/collects/mred/prefs.ss @@ -238,7 +238,7 @@ [else (err input)])))) (mred:debug:printf 'prefs "read user preferences")))) - (define-struct ppanel (title container)) + (define-struct ppanel (title container panel)) (define ppanels (list @@ -276,7 +276,8 @@ (make-check 'mred:verify-exit "Verify exit?" id id) (make-check 'mred:verify-change-format "Ask before changing save format?" id id) (make-check 'mred:auto-set-wrap? "Wordwrap editor buffers?" id id) - main))))) + main)) + #f))) (define make-run-once (lambda () @@ -290,14 +291,23 @@ (define preferences-dialog #f) + (define add-preference-panel (lambda (title container) (run-once (lambda () - (let ([new-ppanel (make-ppanel title container)]) - (set! ppanels (append ppanels (list new-ppanel))) + (let ([new-ppanel (make-ppanel title container #f)]) + (set! ppanels + (let loop ([ppanels ppanels]) + (cond + [(null? ppanels) (list new-ppanel)] + [(string=? (ppanel-title (car ppanels)) + title) + (loop (cdr ppanels))] + [else (cons (car ppanels) + (loop (cdr ppanels)))]))) (when preferences-dialog - (send preferences-dialog added-pane new-ppanel))))))) + (send preferences-dialog added-pane))))))) (define hide-preferences-dialog (lambda () @@ -325,20 +335,21 @@ (lambda () (letrec* ([frame (make-object (class-asi mred:frame% - (public [added-pane - (lambda (ppanel) - (refresh-menu ppanel))])) + (public [added-pane (lambda () + (ensure-constructed) + (refresh-menu) + (send popup-menu set-selection (sub1 (length ppanels))) + (send single-panel active-child + (ppanel-panel (car (list-tail ppanels (sub1 (length ppanels)))))))])) '() "Preferences")] - - [panel (make-object mred:vertical-panel% frame)] [top-panel (make-object mred:horizontal-panel% panel)] [single-panel (make-object mred:single-panel% panel -1 -1 -1 -1 wx:const-border)] - [panels (map (lambda (p) ((ppanel-container p) single-panel)) ppanels)] [bottom-panel (make-object mred:horizontal-panel% panel)] [popup-callback (lambda (choice command-event) - (send single-panel active-child (list-ref panels (send command-event get-command-int))))] + (send single-panel active-child + (ppanel-panel (list-ref ppanels (send command-event get-command-int)))))] [make-popup-menu (lambda () (let ([menu (make-object mred:choice% top-panel popup-callback @@ -349,14 +360,21 @@ [top-left (make-object mred:vertical-panel% top-panel)] [popup-menu (make-popup-menu)] [top-right (make-object mred:vertical-panel% top-panel)] + [ensure-constructed + (lambda () + (for-each (lambda (ppanel) + (unless (ppanel-panel ppanel) + (set-ppanel-panel! ppanel ((ppanel-container ppanel) single-panel)))) + ppanels) + (send single-panel change-children (lambda (l) (map ppanel-panel ppanels))) + (send single-panel active-child (ppanel-panel (car ppanels))))] [refresh-menu - (lambda (ppanel) - (let ([new-panel ((ppanel-container ppanel) single-panel)]) - (set! panels (append panels (list new-panel))) - (let ([new-popup (make-popup-menu)]) - (send new-popup set-selection (send popup-menu get-selection)) - (send top-panel change-children - (lambda (l) (list top-left new-popup top-right))))))] + (lambda () + (let ([new-popup (make-popup-menu)]) + (send new-popup set-selection (send popup-menu get-selection)) + (set! popup-menu new-popup) + (send top-panel change-children + (lambda (l) (list top-left new-popup top-right)))))] [ok-callback (lambda args (save-user-preferences) (hide-preferences-dialog))] @@ -369,8 +387,8 @@ (send ok-button user-min-width (send cancel-button get-width)) (send bottom-panel stretchable-in-y #f) (send top-panel stretchable-in-y #f) + (ensure-constructed) (send popup-menu set-selection 0) - (send single-panel active-child (car panels)) (send frame show #t) frame)))