[Contents] [index] [Help] [Retrace] [browse <] [Browse >]

There are 14 public classes built into the Release 2.04 ROM:


                            rootclass
                               /
                 _____________/____________
                /         /                \
               /         /                  \
           icclass      /                gadgetclass
             /         /                      \
            /         /         _______________\___________________
           /     imageclass    /           /         \             \
          /         /         /           /           \             \
     modelclass    /      propgclass  strgclass  buttongclass  groupgclass
                  /                                     \
                 /                                       \
         _______/___________________________        frbuttongclass
        /         \            \            \
       /           \            \            \
  frameiclass  sysiclass  fillrectclass  itexticlass


This appendix documents all the standard Boopsi classes, including their
methods and attributes.

Each class entry in this document can have two sets of methods: new
methods that the class defines and inherited methods that the class has
modified significantly.  Similarly, each class entry can have two sets of
attributes: those that the class defines and those that the class
inherited and modified.  Unless documented otherwise,  all classes inherit
all of its superclass's methods and attributes.

Each method has a Boopsi message associated with it.  These messages are
in the form of C structures.  Many methods use the default message
structure:

    typedef struct
    {
        ULONG MethodID;
    } *Msg;

Some methods require a customized message so they can pass other
parameters besides the Method ID.  If a method requires a custom message,
its custom message structure is documented along with the method.

All methods have to return some sort of return value.  The meaning of the
return value depends on the class and method.  Normally a return value of
zero indicates that either the method failed or it is not supported by the
class.  A method can use the return value to return a pointer to an
object.  If a class does not directly support a particular method, the
class's dispatcher should pass the method on to its superclass for
processing.  The class dispatcher should record the return value it gets
from its superclass and use that as its return value.  Methods that assign
no meaning to their return value can return 1L to indicate that the method
is implemented.

The description of each attribute contains a code which lists the
rootclass methods that apply to that attribute:

    I  om_new     attribute can be set at initialization
    S  om_set     attribute can be set with om_set method
    G  om_get     attribute can be read with om_get method
    N  om_notify  changing the attribute triggers object to send
                  notifications
    U  om_update  attribute can be set with om_update method

For example, the itexticlass attribute ia_left has the code (isg) after
it.  This means an application can set IA_Left when it creates an instance
of itexticlass (om_new) and when it uses the om_set method.  the
application can also ask an itexticlass object what the IA_Left value is,
using the om_get method.

The om_new, om_set, om_notify, and om_update messages all contain a
pointer to a tag list.  This tag list contains the attributes and
corresponding values that the method affects.  Each tagitem in this list
makes up an attribute/value pair.  The ti_tag portion of the tagitem
contains the attribute's ID while the ti_data field contains the
attribute's value.  Note that these tag lists can also contain
utility.library Global System control tags (like tag_skip and tag_done),
so dispatchers should use the tag functions from utility.library to
process these lists.  See documentation on the utility library for more
information.

All methods are called via a class dispatcher:

    classDispatcher(Class *class, Object *object, Msg msg);

The first argument, class, is a pointer to the dispatcher's Class
structure (defined in <intuition/classes.h>).  the second parameter,
object, is a pointer to the Boopsi object to which the Boopsi message (the
third argument, msg) refers.  Both object and msg are defined in
<intuition/classusr.h>.