NextPrevUpTopContentsIndex

pinboard-layout

Class
Summary

The class pinboard-layout provides two very useful pieces of functionality for displaying CAPI windows. Firstly it is a layout that allows its children to be positioned anywhere within itself (like a pinboard). Secondly it supports pinboard-objects which are rectangular areas within the layout which have size and drawing functionality.

Package

capi

Superclasses

output-pane
layout

Subclasses

simple-pinboard-layout

Description

When a pinboard-layout lays out its children, it positions them at the x and y specified as hints (using :x and :y ), and sizes them to their minimum size (which can be specified using :visible-min-width and :visible-max-width ). The pinboard layout itself has a minimum size of one pixel by one pixel which is not affected by the size of its children. If you need the sizing capabilities, then use the class simple-pinboard-layout which surrounds a single child, and adopts the size constraints of that child.

The pinboard layout handles the display of pinboard objects itself by calculating which objects are visible in the region that needs redrawing, and then by calling the generic function draw-pinboard-object on these objects in the order that they are specified in the layout description. This means that if two pinboard objects overlap, the later one in the layout description will be on top of the other one. In other words, the description defines the Z-order. For information about controlling the order, see layout and manipulate-pinboard.

Example

Here is an example of a pinboard layout placing simple panes at arbitrary positions inside itself.

(capi:contain 
 (make-instance
  'capi:pinboard-layout
  :description
  (list (make-instance
         'capi:text-input-pane
         :x 20
         :y 100)
        (make-instance
         'capi:push-button-panel
         :x 30
         :y 200
         :items '(1 2 3))))
 :best-width 300 :best-height 300)

Here are some examples of the use of pinboard objects with pinboard layouts.

(capi:contain 
 (make-instance
  'capi:pinboard-layout
  :description 
  (list
   (make-instance
    'capi:image-pinboard-object
    :image 
    (sys:lispworks-file 
     "examples/capi/graphics/lwsplash.bmp")
    :x 20 :y 20)))
 :best-width 540 :best-height 415)
(capi:contain 
 (make-instance
  'capi:pinboard-layout
  :description (list
                (make-instance
                 'capi:item-pinboard-object
                 :text "Hello"
                 :x 40 :y 10)
                (make-instance
                 'capi:line-pinboard-object
                 :x 10 :y 30
                 :visible-min-width 100)))
                :best-width 200 :best-height 200)

There are further examples in the directories examples/capi/applications/ and examples/capi/graphics/ .

See also

manipulate-pinboard
pinboard-object
redraw-pinboard-object


LispWorks CAPI Reference Manual - 25 Jul 2006

NextPrevUpTopContentsIndex