improved insert fraction dialog

svn: r11501
This commit is contained in:
Robby Findler 2008-08-31 21:31:07 +00:00
parent 790e8ebb46
commit fa10d3f67c
2 changed files with 28 additions and 19 deletions

View File

@ -275,25 +275,29 @@ module browser threading seems wrong.
[whole-s (if (string=? (send whole get-value) "") [whole-s (if (string=? (send whole get-value) "")
0 0
(string->number (send whole get-value)))]) (string->number (send whole get-value)))])
(if (and num-s den-s whole-s) (cond
(let ([ans (+ whole-s (/ num-s den-s))]) [(or (not whole-s) (not (integer? whole-s)))
(if (and (exact? ans) (string-constant insert-number/bad-whole-part)]
(real? ans) [(or (not num-s) (not (integer? num-s)) (< num-s 0))
(not (integer? ans))) (string-constant insert-number/bad-numerator)]
ans [(or (not den-s) (not (integer? den-s)) (<= den-s 0))
#f)) (string-constant insert-number/bad-denominator)]
#f)))] [else
(if (< whole-s 0)
(- whole-s (/ num-s den-s))
(+ whole-s (/ num-s den-s)))])))]
[ok-callback [ok-callback
(λ () (λ ()
(let ([v (validate-number)])
(cond (cond
[(validate-number) [(number? v)
(set! ok? #t) (set! ok? #t)
(send dlg show #f)] (send dlg show #f)]
[else [else
(message-box (message-box
(string-constant drscheme) (string-constant drscheme)
(string-constant invalid-number) v
dlg)]))] dlg)])))]
[cancel-callback [cancel-callback
(λ () (send dlg show #f))]) (λ () (send dlg show #f))])
(let-values ([(ok cancel) (let-values ([(ok cancel)
@ -306,7 +310,10 @@ module browser threading seems wrong.
(send num-m min-width mw)) (send num-m min-width mw))
(send bp set-alignment 'right 'center) (send bp set-alignment 'right 'center)
(send dlg show #t) (send dlg show #t)
(and ok? (validate-number))))) (and ok?
(let ([v (validate-number)])
(and (number? v)
v))))))
;; create-executable : (instanceof drscheme:unit:frame<%>) -> void ;; create-executable : (instanceof drscheme:unit:frame<%>) -> void
(define (create-executable frame) (define (create-executable frame)

View File

@ -928,7 +928,9 @@ please adhere to these guidelines:
(whole-part "Whole Part") (whole-part "Whole Part")
(numerator "Numerator") (numerator "Numerator")
(denominator "Denominator") (denominator "Denominator")
(invalid-number "Invalid number: must be an exact, real, non-integral number.") (insert-number/bad-whole-part "The whole part of the number must be an integral number")
(insert-number/bad-numerator "The numerator part of the number must be a non-negative, integral number")
(insert-number/bad-denominator "The denominator part of the number must be a positive, integral number")
(insert-fraction-menu-item-label "Insert Fraction...") (insert-fraction-menu-item-label "Insert Fraction...")
;; number snip popup menu ;; number snip popup menu