allow radio-box% to have no selected buttons
svn: r17865 original commit: a09e671f347d4f1d2b5f8937df5ab26f135f7f5f
This commit is contained in:
parent
d5be68f049
commit
0b0c06b56e
|
@ -117,7 +117,7 @@
|
||||||
(unless (and (integer? i) (exact? i) (not (negative? i)))
|
(unless (and (integer? i) (exact? i) (not (negative? i)))
|
||||||
(raise-type-error (who->name who)
|
(raise-type-error (who->name who)
|
||||||
(if false-ok?
|
(if false-ok?
|
||||||
"non-negative exact integeror #f"
|
"non-negative exact integer or #f"
|
||||||
"non-negative exact integer" )
|
"non-negative exact integer" )
|
||||||
i))))
|
i))))
|
||||||
|
|
||||||
|
|
|
@ -264,40 +264,47 @@
|
||||||
(check-container-parent cwho parent)
|
(check-container-parent cwho parent)
|
||||||
(check-callback cwho callback)
|
(check-callback cwho callback)
|
||||||
(check-orientation cwho style)
|
(check-orientation cwho style)
|
||||||
(check-non-negative-integer cwho selection)))
|
(check-non-negative-integer/false cwho selection)))
|
||||||
(private-field
|
(private-field
|
||||||
[wx #f])
|
[wx #f])
|
||||||
(private
|
(private
|
||||||
[check-button
|
[check-button
|
||||||
(lambda (method n)
|
(lambda (method n false-ok?)
|
||||||
(check-non-negative-integer `(method radio-box% ,method) n)
|
((if false-ok?
|
||||||
(unless (< n (length chcs))
|
check-non-negative-integer/false
|
||||||
(raise-mismatch-error (who->name `(method radio-box% ,method)) "no such button: " n)))])
|
check-non-negative-integer)
|
||||||
|
`(method radio-box% ,method) n)
|
||||||
|
(when n
|
||||||
|
(unless (< n (length chcs))
|
||||||
|
(raise-mismatch-error (who->name `(method radio-box% ,method)) "no such button: " n))))])
|
||||||
(override
|
(override
|
||||||
[enable (entry-point
|
[enable (entry-point
|
||||||
(case-lambda
|
(case-lambda
|
||||||
[(on?) (send wx enable on?)]
|
[(on?) (send wx enable on?)]
|
||||||
[(which on?) (check-button 'enable which)
|
[(which on?) (check-button 'enable which #f)
|
||||||
(send wx enable which on?)]))]
|
(send wx enable which on?)]))]
|
||||||
[is-enabled? (entry-point
|
[is-enabled? (entry-point
|
||||||
(case-lambda
|
(case-lambda
|
||||||
[() (send wx is-enabled?)]
|
[() (send wx is-enabled?)]
|
||||||
[(which) (check-button 'is-enabled? which)
|
[(which) (check-button 'is-enabled? which #f)
|
||||||
(send wx is-enabled? which)]))])
|
(send wx is-enabled? which)]))])
|
||||||
(public
|
(public
|
||||||
[get-number (lambda () (length chcs))]
|
[get-number (lambda () (length chcs))]
|
||||||
[get-item-label (lambda (n)
|
[get-item-label (lambda (n)
|
||||||
(check-button 'get-item-label n)
|
(check-button 'get-item-label n #f)
|
||||||
(list-ref chcs n))]
|
(list-ref chcs n))]
|
||||||
[get-item-plain-label (lambda (n)
|
[get-item-plain-label (lambda (n)
|
||||||
(check-button 'get-item-plain-label n)
|
(check-button 'get-item-plain-label n #f)
|
||||||
(wx:label->plain-label (list-ref chcs n)))]
|
(wx:label->plain-label (list-ref chcs n)))]
|
||||||
|
|
||||||
[get-selection (entry-point (lambda () (send wx get-selection)))]
|
[get-selection (entry-point (lambda () (let ([v (send wx get-selection)])
|
||||||
|
(if (equal? v -1)
|
||||||
|
#f
|
||||||
|
v))))]
|
||||||
[set-selection (entry-point
|
[set-selection (entry-point
|
||||||
(lambda (v)
|
(lambda (v)
|
||||||
(check-button 'set-selection v)
|
(check-button 'set-selection v #t)
|
||||||
(send wx set-selection v)))])
|
(send wx set-selection (or v -1))))])
|
||||||
(sequence
|
(sequence
|
||||||
(as-entry
|
(as-entry
|
||||||
(lambda ()
|
(lambda ()
|
||||||
|
@ -317,7 +324,7 @@
|
||||||
(length choices))
|
(length choices))
|
||||||
selection))))
|
selection))))
|
||||||
label parent callback #f)))
|
label parent callback #f)))
|
||||||
(when (positive? selection)
|
(when (or (not selection) (positive? selection))
|
||||||
(set-selection selection)))))
|
(set-selection selection)))))
|
||||||
|
|
||||||
(define slider%
|
(define slider%
|
||||||
|
|
|
@ -203,7 +203,7 @@ information@|details|, even if the editor currently has delayed refreshing (see
|
||||||
monitor @|whatsit| changes.})
|
monitor @|whatsit| changes.})
|
||||||
|
|
||||||
(define (MonitorCallbackX a b c d)
|
(define (MonitorCallbackX a b c d)
|
||||||
(MonitorMethod a b @elem{the @|d|callback procedure (provided as an initialization argument)} c))
|
(MonitorMethod a b @elem{the @|d| callback procedure (provided as an initialization argument)} c))
|
||||||
|
|
||||||
(define (MonitorCallback a b c)
|
(define (MonitorCallback a b c)
|
||||||
(MonitorCallbackX a b c "control"))
|
(MonitorCallbackX a b c "control"))
|
||||||
|
|
|
@ -28,7 +28,7 @@ Whenever the user changes the selected radio button, the radio box's
|
||||||
'vertical-label 'horizontal-label
|
'vertical-label 'horizontal-label
|
||||||
'deleted))
|
'deleted))
|
||||||
'(vertical)]
|
'(vertical)]
|
||||||
[selection exact-nonnegative-integer? 0]
|
[selection (or/c exact-nonnegative-integer? #f) 0]
|
||||||
[font (is-a?/c font%) normal-control-font]
|
[font (is-a?/c font%) normal-control-font]
|
||||||
[enabled any/c #t]
|
[enabled any/c #t]
|
||||||
[vert-margin (integer-in 0 1000) 2]
|
[vert-margin (integer-in 0 1000) 2]
|
||||||
|
@ -64,8 +64,9 @@ The @scheme[style] argument must include either @scheme['vertical] for a
|
||||||
@HVLabelNote[@scheme[style]]{radio box} @DeletedStyleNote[@scheme[style] @scheme[parent]]{radio box}
|
@HVLabelNote[@scheme[style]]{radio box} @DeletedStyleNote[@scheme[style] @scheme[parent]]{radio box}
|
||||||
|
|
||||||
By default, the first radio button is initially selected. If
|
By default, the first radio button is initially selected. If
|
||||||
@scheme[selection] is positive, it is passed to @method[radio-box%
|
@scheme[selection] is positive or @scheme[#f], it is passed to
|
||||||
set-selection] to set the initial radio button selection.
|
@method[radio-box% set-selection] to set the initial radio button
|
||||||
|
selection.
|
||||||
|
|
||||||
@FontKWs[@scheme[font]] @WindowKWs[@scheme[enabled]] @SubareaKWs[] @AreaKWs[]
|
@FontKWs[@scheme[font]] @WindowKWs[@scheme[enabled]] @SubareaKWs[] @AreaKWs[]
|
||||||
|
|
||||||
|
@ -115,10 +116,10 @@ Returns the number of radio buttons in the radio box.
|
||||||
}
|
}
|
||||||
|
|
||||||
@defmethod[(get-selection)
|
@defmethod[(get-selection)
|
||||||
exact-nonnegative-integer?]{
|
(or/c exact-nonnegative-integer? #f)]{
|
||||||
|
|
||||||
Gets the position of the selected radio button. Radio buttons are
|
Gets the position of the selected radio button, returning @scheme[#f]
|
||||||
numbered from @scheme[0].
|
if no button is selected. Radio buttons are numbered from @scheme[0].
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -139,10 +140,11 @@ box, @|MismatchExn|.
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@defmethod[(set-selection [n exact-nonnegative-integer?])
|
@defmethod[(set-selection [n (or/c exact-nonnegative-integer? #f)])
|
||||||
void?]{
|
void?]{
|
||||||
|
|
||||||
Sets the selected radio button by position. (The control's callback
|
Sets the selected radio button by position, or deselects all radio
|
||||||
|
buttons if @scheme[n] is @scheme[#f]. (The control's callback
|
||||||
procedure is @italic{not} invoked.) Radio buttons are numbered from
|
procedure is @italic{not} invoked.) Radio buttons are numbered from
|
||||||
@scheme[0]. If @scheme[n] is equal to or larger than the number of
|
@scheme[0]. If @scheme[n] is equal to or larger than the number of
|
||||||
radio buttons in the radio box, @|MismatchExn|.
|
radio buttons in the radio box, @|MismatchExn|.
|
||||||
|
|
|
@ -1299,6 +1299,7 @@
|
||||||
(define mismatch-err (mk-err exn:fail:contract?))
|
(define mismatch-err (mk-err exn:fail:contract?))
|
||||||
|
|
||||||
(define do-sel (lambda (sel n) (for-each (lambda (rb) (sel rb (n rb))) rbs)))
|
(define do-sel (lambda (sel n) (for-each (lambda (rb) (sel rb (n rb))) rbs)))
|
||||||
|
(define sel-false (lambda (sel) (do-sel sel (lambda (rb) #f))))
|
||||||
(define sel-minus (lambda (sel) (do-sel (type-err sel) (lambda (rb) -1))))
|
(define sel-minus (lambda (sel) (do-sel (type-err sel) (lambda (rb) -1))))
|
||||||
(define sel-first (lambda (sel) (do-sel sel (lambda (rb) 0))))
|
(define sel-first (lambda (sel) (do-sel sel (lambda (rb) 0))))
|
||||||
(define sel-middle (lambda (sel) (do-sel sel (lambda (rb) (floor (/ (send rb get-number) 2))))))
|
(define sel-middle (lambda (sel) (do-sel sel (lambda (rb) (floor (/ (send rb get-number) 2))))))
|
||||||
|
@ -1311,7 +1312,9 @@
|
||||||
(make-object button% (format "Select First~a" title) hp2 (lambda (b e) (sel-first sel)))
|
(make-object button% (format "Select First~a" title) hp2 (lambda (b e) (sel-first sel)))
|
||||||
(make-object button% (format "Select Middle ~a" title) hp2 (lambda (b e) (sel-middle sel)))
|
(make-object button% (format "Select Middle ~a" title) hp2 (lambda (b e) (sel-middle sel)))
|
||||||
(make-object button% (format "Select Last~a" title) hp2 (lambda (b e) (sel-last sel)))
|
(make-object button% (format "Select Last~a" title) hp2 (lambda (b e) (sel-last sel)))
|
||||||
(make-object button% (format "Select N~a" title) hp2 (lambda (b e) (sel-N sel))))
|
(make-object button% (format "Select N~a" title) hp2 (lambda (b e) (sel-N sel)))
|
||||||
|
(when (equal? title "")
|
||||||
|
(make-object button% (format "Select #f~a" title) hp2 (lambda (b e) (sel-false sel)))))
|
||||||
(make-selectors "" normal-sel)
|
(make-selectors "" normal-sel)
|
||||||
(make-selectors " by Simulate" simulate-sel)
|
(make-selectors " by Simulate" simulate-sel)
|
||||||
(make-object button% "Check" p
|
(make-object button% "Check" p
|
||||||
|
|
|
@ -1,3 +1,10 @@
|
||||||
|
Version 4.2.4.1
|
||||||
|
|
||||||
|
Changed radio-box% to allow #f as a selection so that no buttons are
|
||||||
|
selected
|
||||||
|
|
||||||
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
Version 4.2.4, January 2010
|
Version 4.2.4, January 2010
|
||||||
|
|
||||||
Minor bug fixes
|
Minor bug fixes
|
||||||
|
|
Loading…
Reference in New Issue
Block a user