What is ReAction?

ReAction is a set of BOOPSI classes originally created by a 3rd party software development company. During integration into AmigaOS, the package was renamed from ClassAct to ReAction and all the macros and headers changed accordingly.

ReAction is not the name of the AmigaOS GUI system. Intuition is the term used to describe the AmigaOS GUI and this has not changed. What has changed is many new BOOPSI classes have been added to Intuition.

Class Access

BOOPSI has had many improvements both in usability and features. The addition of the ReAction set of BOOPSI classes greatly simplifies GUI programming as well.

Many BOOPSI classes that are not built into some other component and need to be explicitly loaded from disk. This is now accomplished with IIntuition->OpenClass() to load them and IIntuition->CloseClass() to unload them.

All BOOPSI classes also use struct ClassLibrary as a base which is a requirement for using IIntuition->OpenClass(). The reason for this is to enable the programmer to obtain access to the Class pointer. The Class pointer is required for obtaining the interface to a class.

Using these new functions also eliminates the need for all those redundant GetClass() functions which are now deprecated. Use of the Class pointer is not only faster but it also eliminates the need to open an Interface for many classes.

window.class

The window.class has had many enhancements and is easier to use. Gadget help hints, built-in scroll wheel support and simplified keyboard controls are some examples.

Applications which make use of window.class inherit a lot of functionality which can be useful to speed up development. Be sure to check out all the examples in the SDK as well to save even more time.

Dynamic Layouts

It is possible to add, remove and modify BOOPSI objects already added to a layout.gadget object. This feature existed prior to AmigaOS 4.x but the design was fundamentally flawed and used the LAYOUT_AddChild, LAYOUT_AddImage, LAYOUT_RemoveChild and LAYOUT_ModifyChild tags.

The correct way to dynamically add, remove or modify objects in a layout is with the new LM_ADDCHILD, LM_ADDIMAGE, LM_REMOVECHILD and LM_MODIFYCHILD methods. Only by using these methods can you be guaranteed not to run the risk of a GUI deadlock.

A good alternative to dynamically changing objects is to use a page.gadget instead. With a page.gadget object you can change pages to display a different set of options to the user. This method usually requires less code and is less error prone as well.