Next Prev Up Top Contents Index

12.4.5 Using menu-choose

The simplest use of menu-choose is when each item is not a list. In that case, the entire item will be printed and is also the value to be returned.

(clim:menu-choose '("One" "Two" "Seventeen"))

If you want to return a value that is different from what was printed, the simplest method is as follows. Each item is a list; the first element is what will be printed, the remainder of the list is treated as a plist --the :value property will be returned. (Note nil is returned if you click on Seventeen since it has no :value .)

 '(("One" :value 1 :documentation "the loneliest number")     
   ("Two" :value 2 :documentation "for tea")  
    :documentation "teen magazine")))

The list of items you pass to menu-choose can serve other purposes in your application, so you might not want to put the printed appearance in the first element. You can supply a :printer function that will be called on the item to produce its printed appearance.

(clim:menu-choose '(1 2 17)     
                  :printer #'(lambda (item stream)
                               (format stream "~R" item)))

The items in the menu needn't be printed textually:

  '(circle square triangle)
  #'(lambda (item stream)       
      (case item                
        (circle (clim:draw-circle* stream 0 0 10))
        (square (clim:draw-polygon* stream '(-8 -8 -8 8 8 8 8 -8)))
        (triangle (clim:draw-polygon* stream '(10 8 0 -10 -10 8))))))

The :item-list option of the list form of menu item can be used to describe a set of hierarchical menus.

  '(("Class: Osteichthyes" :documentation "Bony fishes"
     :style (nil :italic nil))
    ("Class: Chondrichthyes"
     :documentation "Cartilaginous fishes"
     :style (nil :italic nil)
      :item-list (("Order: Squaliformes" :documentation "Sharks")                 
               ("Order: Rajiformes" :documentation "Rays")))
    ("Class: Mammalia" :documentation "Mammals" :style (nil :italic nil)
     (("Order Rodentia" :item-list ("Family Sciuridae"
                                   "Family Muridae"
                                   "Family Cricetidae"
                                   ("..." :value nil)))
      ("Order Carnivora" :item-list ("Family: Felidae"
                                    "Family: Canidae"
                                    "Family: Ursidae"
                                    ("..." :value nil)))          
      ("..." :value nil)))
 ("..." :value nil)) )

Common Lisp Interface Manager 2.0 User Guide - 14 Dec 2001

Next Prev Up Top Contents Index