Programming in XPCE/Prolog

# Footnotes

note-1
  Normal applications use almost exclusively XPCE generated references. Many of the examples in this manual are typed from the terminal and Prolog specified references are easier to type.
note-2
  The attributes of an object state are called slots. In other languages they may be called instance variables or fields.
note-3
  Prolog would normally print `@display'. The `library(pce_portray)` defines a clause for the Prolog predicate portray/1 that prints object references as `@Reference/Class'. This library is used throughout all the examples of this manual.
note-4
  Initial versions of XPCE lacked the obtainer. In this case the browser B would be passed to the predicate view/1, which would extract the current filename from the browser. Obtainers improve the readability and avoid the need to mix UI related code with application code.
note-5
  This conversion is implemented with class dict_item. In fact, the browser just specifies the desired type and the message passing kernel invokes the conversion method of class dict_item.
note-6
  Given the dynamic nature of delegation, the system cannot possibly determine all methods available through delegation. Consider a slot specified with type graphical. The system can infer it will surely be able to use behaviour defined at class graphical. If at runtime, the slot is filled with a box, all methods defined at class box will be available too.
note-7
  This example uses XPCE user-defined classes. The details of this mechanism do not matter for the argument in this section. User-defined classes are described in chapter 7.
note-8
  XPCE defines four implementation techniques for methods. C-function pointers are used for almost all the built-in behaviour. C++-function pointers are used when classes are defined in C++ (Wielemaker & Anjewierden, 1994) . Instances of c_pointer are left to the host object for interpretation and finally, code objects are executed.
note-9
  Value must be an int, name or constant in the current implementation.
note-10
  To facilitate the translation of old code, the construct `:- send(@class, ...` is treated automatically as if it was embedded using pce_class_directive/1
note-11
  On Windows systems, `~` expands to `\%HOME\%`, `\%USERPROFILE\%`, `\%HOMEDRIVE\%/\%HOMEPATH\%` or the root of the current drive. See expand_file_name/2 of the SWI-Prolog manual.
note-12
  See section 8 for the default syntax.
note-13
  Attach a drag_and_drop_dict_item_gesture to a list_browser to enable dragging the items in the dictionary
note-14
  Using the Unix/X11 version XPCE can manage windows on multiple desktops. For MS-Windows users this is not supported.
note-15
  To remember this sequence: V for Visual and all defined modifiers to avoid a conflict with application defined key-bindings.
note-16
  We will mix the terms instance and object freely in this document. They are considered synonyms.
note-17
  Class class is an instance of itself. In other systems (SmallTalk, Goldberg & Robson, 1983), classes are instances of a meta-class. Yet in other systems, classes have a completely different status (for example widgets in the X11 Intrinsics)
note-18
  Multiple inheritance introduces various technical and conceptual problems. XPCE uses delegation and templates to achieve similar results. This is explained in section C.4 and section 7.5.2.1.
note-19
  PCE assumes the object has become a support object. This is generally not correct for code objects. Class code therefore has `class`<-`un_answer: @off', which implies that objects that fill a slot of a code object will not loose their `answer' status.
note-20
  A `ground' term is a Prolog term that has no unbound variables.
note-21
  Colour screens create their colour by mixing the `primary' colours `red', `green' and `blue'. With an `RBG' triple, we refer to a triple of three numeric values representing the intensities of the three primary colours