On this page:
notify:  notify-box%
new
get
set
listen
remove-listener
remove-all-listeners
notify:  notify-box/  pref
notify:  define-notify
notify:  menu-option/  notify-box
notify:  check-box/  notify-box
notify:  choice/  notify-box
notify:  menu-group/  notify-box
6.11

22 Notify-boxes

 (require framework/notify) package: gui-lib

class

notify:notify-box% : class?

  superclass: object%

A notify-box contains a mutable cell. The notify-box notifies its listeners when the contents of the cell is changed.

Examples:
> (define nb (new notify:notify-box% (value 'apple)))
> (send nb get)

'apple

> (send nb set 'orange)
> (send nb listen (lambda (v) (printf "New value: ~s\n" v)))
> (send nb set 'potato)

New value: potato

constructor

(new notify:notify-box% [value value])

  (is-a?/c notify:notify-box%)
  value : any/c
Creates a notify-box initially containing value.

method

(send a-notify:notify-box get)  any/c

Gets the value currently stored in the notify-box.

method

(send a-notify:notify-box set v)  void?

  v : any/c
Updates the value stored in the notify-box and notifies the listeners.

method

(send a-notify:notify-box listen listener)  void?

  listener : (-> any/c any)
Adds a callback to be invoked on the new value when the notify-box’s contents change.

method

(send a-notify:notify-box remove-listener listener)  void?

  listener : (-> any/c any)
Removes a previously-added callback.

method

(send a-notify:notify-box remove-all-listeners)  void?

Removes all previously registered callbacks.

Added in version 1.18 of package gui-lib.

procedure

(notify:notify-box/pref proc 
  [#:readonly? readonly?]) 
  (is-a?/c notify:notify-box%)
  proc : (case-> (-> any/c) (-> any/c void?))
  readonly? : boolean? = #f
Creates a notify-box with an initial value of (proc). Unless readonly? is true, proc is invoked on the new value when the notify-box is updated.

Useful for tying a notify-box to a preference or parameter. Of course, changes made directly to the underlying parameter or state are not reflected in the notify-box.

Examples:
> (define animal (make-parameter 'ant))
> (define nb (notify:notify-box/pref animal))
> (send nb listen (lambda (v) (printf "New value: ~s\n" v)))
> (send nb set 'bee)

New value: bee

> (animal 'cow)
> (send nb get)

'bee

> (send nb set 'deer)

New value: deer

> (animal)

'deer

Added in version 1.18 of package gui-lib.

syntax

(notify:define-notify name value-expr)

 
  value-expr : (is-a?/c notify:notify-box%)
Class-body form. Declares name as a field and get-name, set-name, and listen-name as methods that delegate to the get, set, and listen methods of value.

The value-expr argument must evaluate to a notify-box, not just the initial contents for a notify box.

Useful for aggregating many notify-boxes together into one “configuration” object.

Examples:
> (define config%
    (class object%
      (notify:define-notify food (new notify:notify-box% (value 'apple)))
      (notify:define-notify animal (new notify:notify-box% (value 'ant)))
      (super-new)))
> (define c (new config%))
> (send c listen-food
          (lambda (v) (when (eq? v 'honey) (send c set-animal 'bear))))
> (let ([food (get-field food c)])
    (send food set 'honey))
> (send c get-animal)

'bear

Added in version 1.18 of package gui-lib.

procedure

(notify:menu-option/notify-box parent 
  label 
  notify-box) 
  (is-a?/c checkable-menu-item%)
  parent : (or/c (is-a?/c menu%) (is-a?/c popup-menu%))
  label : label-string?
  notify-box : (is-a?/c notify:notify-box%)
Creates a checkable-menu-item% tied to notify-box. The menu item is checked whenever (send notify-box get) is true. Clicking the menu item toggles the value of notify-box and invokes its listeners.

Added in version 1.18 of package gui-lib.

procedure

(notify:check-box/notify-box parent    
  label    
  notify-box)  (is-a?/c check-box%)
  parent : 
(or/c (is-a?/c frame%) (is-a?/c dialog%)
      (is-a?/c panel%) (is-a?/c pane%))
  label : label-string?
  notify-box : (is-a?/c notify:notify-box%)
Creates a check-box% tied to notify-box. The check-box is checked whenever (send notify-box get) is true. Clicking the check box toggles the value of notify-box and invokes its listeners.

Added in version 1.18 of package gui-lib.

procedure

(notify:choice/notify-box parent    
  label    
  choices    
  notify-box)  (is-a?/c choice%)
  parent : 
(or/c (is-a?/c frame%) (is-a?/c dialog%)
      (is-a?/c panel%) (is-a?/c pane%))
  label : label-string?
  choices : (listof label-string?)
  notify-box : (is-a?/c notify:notify-box%)
Creates a choice% tied to notify-box. The choice control has the value (send notify-box get) selected, and selecting a different choice updates notify-box and invokes its listeners.

If the value of notify-box is not in choices, either initially or upon an update, an error is raised.

Added in version 1.18 of package gui-lib.

procedure

(notify:menu-group/notify-box parent 
  labels 
  notify-box) 
  (listof (is-a?/c checkable-menu-item%))
  parent : (or/c (is-a?/c menu%) (is-a?/c popup-menu%))
  labels : (listof label-string?)
  notify-box : (is-a?/c notify:notify-box%)
Returns a list of checkable-menu-item% controls tied to notify-box. A menu item is checked when its label is (send notify-box get). Clicking a menu item updates notify-box to its label and invokes notify-box’s listeners.

Added in version 1.18 of package gui-lib.