#chapter Displays, Windows and Frames

An X-window created by PCE consists of a `frame' and a collection of
`tiled' (i.e.  non-overlapping) windows.  Class frame handles the
communication with the X-window manager (twm, olwm, mmw, etc.).

A PCE window is an X-subwindow of the X-mainwindow owned by the frame.
PCE windows may not overlap.  The spatial relation between PCE windows
is expressed in the terms as `above', `below', `left' and `right'.
Their relative sizes are expressed in terms of an `ideal' size and
a merit for stretching and shrinking.  The layout of windows in a 
frame is maintained by tile objects.

The general window defines the management of graphical objects.  Class
picture is very similar to class window.  It is designed as a general
purpose graphics window with scrollbars.  Class dialog is a window
specialised for displaying dialog_item objects (menus, buttons,
text-entry-fields, etc.), although dialog windows can also display
normal graphical objects.  Class dialog and friends are described in a
separate chapter.  Class view and browser define window-versions of the
classes editor (EMACS-like text editor) and list_browser (browser for a
(long) list of objects).

A window may be `decorated' using scroll-bars and/or a label.  In that
case the window is wrapped in a window_decorator object.  The user
seldomly needs to be aware of this object as class window delegates
all messages concerning decorations to its <-decoration.

Class display represents an X screen.  Normally there is only a single
instance (@display) which represents the default display from the Unix
DISPLAY environment variable.  Class display is seldomly used directly
by the user.  It may be used to obtain information on the dimensions of
the X-screen or the selection and the PCE frames on it.  PCE allows for
multiple displays on different X-screen's.  The class display_manager
with its single instance @display_manager represents the collection of
available displays.  It also defines some methods for controlling
low-level event handling.

Although the classes tile and scroll_bar may be used outside the context
of frames they are described here as they are so commonly used in the
context of frames and windows.
#end chapter

#class frame
#end class

#class window
#description group area
The basic area management of a window is inherited from class graphical
and class device (->set, ->geometry, etc.).  Manipulating the area in
this sence is used by class tile to position the window on its <-frame.

Only the methods ->size, ->height and ->width may be used to manipulate
the area of the window.  These methods determine the actual drawing area
of the window (i.e. the requested value is enlarged with the dimensions
of the <-border and possible scrollbars).

The method <-visible may be used to query the visible part (viewport)
of the window.  The method <-area is inherited from class device and thus
returns the bounding box of all displayed <-graphicals.
#end description
#end class

#class window_decorator
#end class

#class display
#end class

#class application
#end class

#class display_manager
#description group current
The methods below deal with the notion of `current' display.  This idea
is not well worked-out.  Application programmers should not realy on
these methods.
#end description
#end class

#class tile
#description group layout

A tiled layout of objects is constructed using the methods ->above,
->below, ->left and right.  These methods are used to create lists
of horizontally or vertically aligned tiles.  Such a layout is
built inwards-out.  The order in which these messages are given
is important.  Assume the following layout is desired:

	aaaaa ccccccc
	aaaaa ccccccc
	      ccccccc
	bbbbb ccccccc
	bbbbb ccccccc
	bbbbb ccccccc

The proper way to arrive at this layout is:

	?- send(A, above, B),
	   send(C, right, B).	 % or send(C, left, A).

Do not try

	?- send(A, left, C),
	   send(B, left, C).

This sequence results in the following layout:

	bbbbb aaaaa ccccccc
	bbbbb aaaaa ccccccc
#end description
#end class

#class scroll_bar
#description group scroll
These methods define the `bubble'.  The bubble provides feedback on the
current location of the `viewport' in the total object and (depending
on the look-and-feel) the relative size of the viewport compared to the
total object.

To avoid updating the scrollbar multiple times if the object or window
is changed multiple times it is adviced that the scrolled object sends
->request_compute to the scroll_bar instead of using ->bubble.  During
PCE's repaint cycle this will make PCE invoke ->compute on the
scroll_bar.
#end description
#end class
