




 
One of the major uses the CAPI itself makes of pinboard objects is to implement graph panes. The 
graph-pane
 itself is a 
pinboard-layout
 and it is built using 
pinboard-object
s for the nodes and edges. This is because each node (and sometimes each edge) of the graph needs to react individually to the user. For instance, when an event is received by the 
graph-pane
, it is told which pinboard object was under the pointer at the time, and it can then use this information to change the selection.
Create the following 
graph-pane
 and notice that every node in the graph is made from an 
item-pinboard-object
 as described in the previous section and that each edge is made from a 
line-pinboard-object
.
(defun node-children (node)
(when (< node 16)
(list (* node 2)
(1+ (* node 2)))))
(contain
(make-instance
'graph-pane
:roots '(1)
:children-function 'node-children)
:best-width 300 :best-height 400)
Figure 12.5 A graph pane with pinboard object nodes
 
 
As mentioned before, 
pinboard-layout
s can just as easily display ordinary panes inside themselves, and so the 
graph-pane
 provides the ability to specify the class used to represent the nodes. As an example, here is a 
graph-pane
 with the nodes made from 
push-button
s.
(contain
(make-instance
'graph-pane
:roots '(1)
:children-function 'node-children
:node-pinboard-class 'push-button)
:best-width 300 :best-height 400)
Figure 12.6 A graph pane with push-button nodes
 
 
CAPI User Guide (Macintosh version) - 30 Aug 2011