Next: Setting Up the Buffer, Previous: User Interface, Up: Top [Contents][Index]

## 3 Programming Example

Here is the code to implement the user interface example (see User Interface).

    (require 'widget)

    (eval-when-compile
      (require 'wid-edit))

    (defvar widget-example-repeat)

    (defun widget-example ()
      "Create the widgets from the Widget manual."
      (interactive)
      (switch-to-buffer "*Widget Example*")
      (kill-all-local-variables)
      (make-local-variable 'widget-example-repeat)
      (let ((inhibit-read-only t))
        (erase-buffer))
      (remove-overlays)
      (widget-insert "Here is some documentation.\n\n")
      (widget-create 'editable-field
                     :size 13
                     :format "Name: %v " ; Text after the field!
                     "My Name")
      (widget-create 'menu-choice
                     :tag "Choose"
                     :value "This"
                     :help-echo "Choose me, please!"
                     :notify (lambda (widget &rest ignore)
                               (message "%s is a good choice!"
                                        (widget-value widget)))
                     '(item :tag "This option" :value "This")
                     '(choice-item "That option")
                     '(editable-field :menu-tag "No option" "Thus option"))
      (widget-create 'editable-field
                     :format "Address: %v"
                     "Some Place\nIn some City\nSome country.")
      (widget-insert "\nSee also ")
      (widget-create 'link
                     :notify (lambda (&rest ignore)
                               (widget-value-set widget-example-repeat
                                                 '("En" "To" "Tre"))
                               (widget-setup))
                     "other work")
      (widget-insert
        " for more information.\n\nNumbers: count to three below\n")
      (setq widget-example-repeat
            (widget-create 'editable-list
                           :entry-format "%i %d %v"
                           :notify
                           (lambda (widget &rest ignore)
                             (let ((old (widget-get widget
                                                    ':example-length))
                                   (new (length (widget-value widget))))
                               (unless (eq old new)
                                 (widget-put widget ':example-length new)
                                 (message "You can count to %d." new))))
                           :value '("One" "Eh, two?" "Five!")
                           '(editable-field :value "three")))
      (widget-insert "\n\nSelect multiple:\n\n")
      (widget-create 'checkbox t)
      (widget-insert " This\n")
      (widget-create 'checkbox nil)
      (widget-insert " That\n")
      (widget-create 'checkbox
                     :notify (lambda (&rest ignore) (message "Tickle"))
                     t)
      (widget-insert " Thus\n\nSelect one:\n\n")
      (widget-create 'radio-button-choice
                     :value "One"
                     :notify (lambda (widget &rest ignore)
                               (message "You selected %s"
                                        (widget-value widget)))
                     '(item "One") '(item "Another One.")
                     '(item "A Final One."))
      (widget-insert "\n")
      (widget-create 'push-button
                     :notify (lambda (&rest ignore)
                               (if (= (length
                                       (widget-value widget-example-repeat))
                                      3)
                                   (message "Congratulation!")
                                 (error "Three was the count!")))
                     "Apply Form")
      (widget-insert " ")
      (widget-create 'push-button
                     :notify (lambda (&rest ignore)
                               (widget-example))
                     "Reset Form")
      (widget-insert "\n")
      (use-local-map widget-keymap)
      (widget-setup))

Next: Setting Up the Buffer, Previous: User Interface, Up: Top [Contents][Index]