diff --git a/collects/drscheme/info.ss b/collects/drscheme/info.ss index b4bafc9e14..7aab9241a5 100644 --- a/collects/drscheme/info.ss +++ b/collects/drscheme/info.ss @@ -1,8 +1,23 @@ (module info (lib "infotab.ss" "setup") + (require (lib "string-constant.ss" "string-constants")) + ;; added a comment, in windows ... (define name "DrScheme") (define tools (list "syncheck.ss")) (define tool-names (list "Check Syntax")) + (define splash-questions + (list (list (string-constant use-with-htdp) + (string-constant teaching-languages) + (string-constant how-to-design-programs) + (string-constant beginning-student)) + + (list (string-constant use-seasoned) + (string-constant professional-languages) + "(module ...)") + (list (string-constant use-other) + (string-constant professional-languages) + (string-constant plt) + (string-constant pretty-big-scheme)))) (define mred-launcher-names (list "DrScheme")) (define mred-launcher-libraries (list "drscheme.ss")) (define mred-launcher-flags (list (list "-ZmvqL" "drscheme.ss" "drscheme")))) diff --git a/collects/drscheme/private/app.ss b/collects/drscheme/private/app.ss index 2a56dfaf36..05661c1049 100644 --- a/collects/drscheme/private/app.ss +++ b/collects/drscheme/private/app.ss @@ -1,15 +1,17 @@ (module app mzscheme - (require (lib "string-constant.ss" "string-constants") - (lib "unitsig.ss") + (require (lib "unitsig.ss") (lib "class.ss") - (lib "mred.ss" "mred") - (lib "external.ss" "browser") - "drsig.ss" - "../acks.ss" - (lib "framework.ss" "framework") + (lib "list.ss") (lib "file.ss") - (lib "check-gui.ss" "version")) + (lib "string-constant.ss" "string-constants") + (lib "mred.ss" "mred") + (lib "framework.ss" "framework") + (lib "external.ss" "browser") + (lib "getinfo.ss" "setup") + (lib "check-gui.ss" "version") + "drsig.ss" + "../acks.ss") (provide app@) (define app@ @@ -42,7 +44,9 @@ (let ([this-version (version)] [last-version (preferences:get 'drscheme:last-version)] [last-language (preferences:get 'drscheme:last-language)]) - (when (or (not last-version) + (when (or (and (getenv "PLTDRWIZARD") + (printf "PLTDRWIZARD: showing wizard\n")) + (not last-version) (not last-language) (not (equal? last-version this-version)) (not (equal? last-language (this-language)))) @@ -160,28 +164,28 @@ (case state [(natural-language) (when (okay-to-leave-nl-state?) - (set-state 'check-updates))] - [(check-updates) - (set-state 'programming-language)] + (set-state 'programming-language))] [(programming-language) (cond [(get-selected-language) - (send dlg show #f)] + (set-state 'check-updates)] [else (message-box (string-constant drscheme) - (string-constant please-select-a-language))])])) + (string-constant please-select-a-language))])] + [(check-updates) + (send dlg show #f)])) ;; prev-state : -> void ;; pre: state != 'natural-language (define (prev-state) (case state - [(programming-language) (set-state 'check-updates)] - [(check-updates) (set-state 'natural-language)] - [else (error 'next-state "no next state from: ~s" state)])) + [(programming-language) (set-state 'natural-language)] + [(check-updates) (set-state 'programming-language)] + [else (error 'prev-state "no prev state from: ~s" state)])) ;; first-state?, last-state? : -> boolean (define (first-state?) (eq? state 'natural-language)) - (define (last-state?) (eq? state 'programming-language)) + (define (last-state?) (eq? state 'check-updates)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;; @@ -246,7 +250,7 @@ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;; - ;; State 2 GUI ;; + ;; State 3 GUI ;; ;; ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -286,27 +290,135 @@ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;; - ;; State 3 GUI ;; + ;; State 2 GUI ;; ;; ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;; need to sort these somehow ... + (define question/answer-table + (let* ([get-qa + (λ (info-filename) + (let ([proc (get-info/full info-filename)]) + (if proc + (let ([qs (proc 'splash-questions)]) + (unless (list? qs) + (error 'splash-questions "expected a list, got ~e" qs)) + (for-each + (lambda (pr) + (unless (and (pair? pr) + (pair? (cdr pr)) + (andmap string? pr)) + (error + 'splash-questions + "expected a list of lists of strings, with each inner list being at least two elements long, got ~e" + pr))) + qs) + qs) + '())))] + [all-qas + (apply + append + (map get-qa (find-relevant-directories '(splash-questions))))] + [item->index + (lambda (x) + (let loop ([lst all-qas] + [i 0]) + (cond + [(equal? (car lst) x) i] + [else (loop (cdr lst) + (+ i 1))])))] + [drs-qas (get-qa (collection-path "drscheme"))] + [in-order + (lambda (s1 s2) + (cond + [(equal? s1 (car drs-qas)) #t] + [(equal? s2 (car (last-pair drs-qas))) #t] + [else + (<= (item->index s1) (item->index s2))]))]) + (quicksort all-qas in-order))) + (define programming-language-state-panel (instantiate vertical-panel% () (parent sp) (alignment '(center center)))) - (define pl-main-panel (instantiate vertical-panel% () - (parent programming-language-state-panel) - (stretchable-width #t) - (stretchable-height #t))) + (define pl-outer-panel (new vertical-panel% + (parent programming-language-state-panel))) + (define pl-single-panel (new panel:single% + (parent pl-outer-panel))) + (define pl-button-panel (new horizontal-panel% + (parent pl-outer-panel) + (stretchable-height #f))) + (define pl-show-all-languages? #f) + (define pl-simple-lang-choice (cdr (car question/answer-table))) + (define pl-show-lang-btn + (new button% + (parent pl-button-panel) + (stretchable-width #t) + (label (string-constant show-all-languages)) + (callback + (lambda (a b) + (set! pl-show-all-languages? (not pl-show-all-languages?)) + (send pl-single-panel active-child + (if pl-show-all-languages? + pl-all-languages-panel + pl-questions-panel)) + (send pl-show-lang-btn set-label + (if pl-show-all-languages? + (string-constant show-drscheme-usage-questions) + (string-constant show-all-languages))))))) + + (define pl-questions-panel (new vertical-panel% + (parent pl-single-panel))) + + (define pl-msg-rb-parent1 + (new vertical-panel% + (parent pl-questions-panel) + (alignment '(center center)))) + (define pl-msg-rb-parent2 + (new vertical-panel% + (parent pl-msg-rb-parent1) + (alignment '(left center)))) + (define pl-are-you-message + (new message% + (label (string-constant are-you...-kind-of-drscheme-user)) + (parent pl-msg-rb-parent2))) + (define pl-radio-box + (new radio-box% + (label #f) + (choices (map car question/answer-table)) + (parent pl-msg-rb-parent2) + (callback + (lambda (a b) + (let* ([i (send pl-radio-box get-selection)] + [q/a (list-ref question/answer-table i)]) + (send pl-lang-message set-label + (format + (string-constant pl-lang-choice-format) + (car (last-pair q/a)))) + (set! pl-simple-lang-choice (cdr q/a))))))) + + (define pl-lang-message (new message% + (stretchable-width #t) + (label (format + (string-constant pl-lang-choice-format) + (car (last-pair (car question/answer-table))))) + (parent pl-questions-panel))) + + (define pl-all-languages-panel + (instantiate vertical-panel% () + (parent pl-single-panel) + (stretchable-width #t) + (stretchable-height #t))) + (define pl-choose-language-message (instantiate message% () - (parent pl-main-panel) + (parent pl-all-languages-panel) (label (string-constant please-select-a-language)))) - (define language-config-panel (make-object vertical-panel% pl-main-panel)) + (define language-config-panel (make-object vertical-panel% pl-all-languages-panel)) (define language-config-button-panel (instantiate horizontal-panel% () - (parent pl-main-panel) + (parent pl-all-languages-panel) (stretchable-height #f))) - (define-values (get-selected-language get-selected-language-settings) + (define-values (get-all-lang-selected-language get-all-lang-selected-language-settings) (drscheme:language-configuration:fill-language-dialog language-config-panel language-config-button-panel @@ -314,6 +426,23 @@ drscheme:language-configuration:settings-preferences-symbol) dlg)) + (define (get-selected-language) + (cond + [pl-show-all-languages? (get-all-lang-selected-language)] + [else + (let ([langs (drscheme:language-configuration:get-languages)]) + (or (ormap (λ (lang) + (and (equal? pl-simple-lang-choice + (send lang get-language-position)) + lang)) + langs) + (car langs)))])) + + (define (get-selected-language-settings) + (cond + [pl-show-all-languages? (get-all-lang-selected-language-settings)] + [else (send (get-selected-language) default-settings)])) + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;; ;; GO ;; diff --git a/collects/drscheme/private/drsig.ss b/collects/drscheme/private/drsig.ss index 166788390d..071050c0b5 100644 --- a/collects/drscheme/private/drsig.ss +++ b/collects/drscheme/private/drsig.ss @@ -91,6 +91,7 @@ (define-signature drscheme:language-configuration^ (add-language + get-languages (struct language-settings (language settings) -setters) get-settings-preferences-symbol language-dialog @@ -100,7 +101,6 @@ (add-info-specified-languages get-default-language-settings (open drscheme:language-configuration^) - get-languages settings-preferences-symbol add-built-in-languages diff --git a/collects/drscheme/private/number-snip.ss b/collects/drscheme/private/number-snip.ss index ad65fda3d6..21bbf01ed5 100644 --- a/collects/drscheme/private/number-snip.ss +++ b/collects/drscheme/private/number-snip.ss @@ -1,11 +1,3 @@ -#| - -This file is only here for backwards compatibility reasons. -Old, saved number snips expect to find this file to be -load-able in mred. - -|# - (module number-snip mzscheme (require (lib "mred.ss" "mred") (lib "class.ss") diff --git a/collects/drscheme/private/rep.ss b/collects/drscheme/private/rep.ss index 77f37f0f8f..3465168423 100644 --- a/collects/drscheme/private/rep.ss +++ b/collects/drscheme/private/rep.ss @@ -1095,7 +1095,8 @@ TODO (parameterize ([current-eventspace (get-user-eventspace)]) (queue-callback (λ () - (thnk) + (parameterize ([current-error-port drscheme:init:original-output-port]) + (thnk)) (semaphore-post wait)))) (semaphore-wait wait)))]) diff --git a/collects/drscheme/private/tool-contracts.ss b/collects/drscheme/private/tool-contracts.ss index 72266384f0..50c4aeda3e 100644 --- a/collects/drscheme/private/tool-contracts.ss +++ b/collects/drscheme/private/tool-contracts.ss @@ -758,6 +758,13 @@ ; ; ; ; ;;;; + (drscheme:language-configuration:get-languages + (-> (listof (is-a?/c drscheme:language:language<%>))) + () + "This can only be called after all of the tools initialization phases have completed." + "" + "Returns the list of all of the langauges installed in DrScheme.") + (drscheme:language-configuration:add-language ((and/c (is-a?/c drscheme:language:language<%>) language-object) . -> . void?) diff --git a/collects/eopl/info.ss b/collects/eopl/info.ss index c7903d2474..d4ef867d43 100644 --- a/collects/eopl/info.ss +++ b/collects/eopl/info.ss @@ -1,7 +1,12 @@ (module info (lib "infotab.ss" "setup") + (require (lib "string-constant.ss" "string-constants")) (define name "EoPL") (define doc.txt "doc.txt") (define tools (list "eopl-tool.ss")) + (define splash-questions + (list (list (string-constant use-eopl) + (string-constant teaching-languages) + "Essentials of Programming Languages (2nd ed.)"))) (define tool-icons (list "eopl-small.gif")) (define tool-names (list "Essentials of Programming Languages")) (define tool-urls (list "http://www.cs.indiana.edu/eopl/"))) diff --git a/collects/string-constants/english-string-constants.ss b/collects/string-constants/english-string-constants.ss index e80f8ca933..7e2a5219d7 100644 --- a/collects/string-constants/english-string-constants.ss +++ b/collects/string-constants/english-string-constants.ss @@ -945,9 +945,19 @@ please adhere to these guidelines: (use-mixed-fractions "Mixed fractions") (use-repeating-decimals "Repeating decimals") (decimal-notation-for-rationals "Use decimal notation for rationals") - (please-select-a-language "Please select a language") - + ;; startup wizard screen language selection section + (please-select-a-language "Please select a language") + (show-all-languages "Show all languages") + (show-drscheme-usage-questions "Show DrScheme usage questions") + (are-you...-kind-of-drscheme-user "Are you...") + (use-with-htdp "... using DrScheme with How to Design Programs?") + (use-seasoned "... a seasoned PLT Schemer?") + (use-other "... using DrScheme for some other reason?") + (use-eopl "... using DrScheme with Essentials of Programming Languages?") + (pl-lang-choice-format "Initial language: ~a") + + ;;; languages (beginning-student "Beginning Student") (beginning-one-line-summary "define, cond, structs, constants, and primitives")