2.3 Linking code into CAPI elements

Getting a CAPI element to perform an action is done by specifying a
callback. This is a function which is performed whenever you change the state of a CAPI element. It calls a piece of code whenever a choice is made in a window.

Note that the result of the callback function is ignored, and that its usefulness is in its side-effects.

Try the following:

(make-instance 'push-button

:data "Hello"

:callback

#'(lambda (&rest args)

(display-message

"Hello World")))

(contain *)

Figure 2.3 Specifying a callback

Click on the
Hello
button.

A dialog appears containing the message "Hello World".

Figure 2.4 A dialog displayed by a callback.

The CAPI provides the function
display-message
to allow you to pop up a dialog box containing a message and a Confirm button. This is one of many pre-defined facilities that the CAPI offers.

Note: When developing applications in the CAPI, note that your CAPI application windows are run in the same Window system event loop as the Common LispWorks environment itself. This - and the fact that in Common Lisp, user code exists in the same global namespace as the Common Lisp implementation itself - means that a CAPI application running under the Common LispWorks environment can modify the same values as you can concurrently modify from one of the environment's programming tools.

For example, your CAPI application might have a button that, when pressed, sets a slot in a particular object that you could also set by hand in the listener. This situation can lead to unexpected values and behavior in your CAPI application, which may seem to reveal bugs in the application or the Common Lisp product that do not in fact exist.