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>.