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

View File

@ -928,7 +928,9 @@ please adhere to these guidelines:
(whole-part "Whole Part")
(numerator "Numerator")
(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...")
;; number snip popup menu