RKM Libraries: 2 Intuition and the Amiga Graphical User Interface
Intuition is the collective name for the function libraries, data
structures and other elements needed to create a graphical interface for
Amiga applications. Programmers use Intuition to perform user interface
chores such as opening windows, managing menus, monitoring gadgets,
reading the mouse position and so forth.
Newcomers to the Amiga sometimes think of Intuition as the Amiga's
operating system but it is not. Intuition is just one component that
together with Exec, AmigaDOS, and other subsystems make up the whole
operating system. Intuition is the most visible part of the operating
system though since it provides the graphical user interface familiar to
all Amiga users.
About User Interfaces How an Application Sees Intuition
How the User Sees Intuition A Simple Intuition Program
2 Intuition and the Graphical User Interface / About User Interfaces
What is a user interface? This sweeping phrase covers all aspects of
communication between the user and the computer. It includes the
innermost mechanisms of the computer and rises to the height of defining a
philosophy to guide the interaction between human and machine. Intuition
is, above all else, a philosophy turned into software.
Intuition's user interface philosophy is simple to describe: the
interaction between the user and the computer should be consistent, simple
and enjoyable; in a word, intuitive. Intuition supplies the tools needed
to turn this philosophy into practice.
Implicit in this philosophy is the idea that the user interface should be
graphical. A graphical user interface, or GUI, is a visually oriented
method of communicating with a computer in which system resources are
represented by pictorial symbols that can be manipulated with a pointing
device such as a mouse. Other types of user interfaces are possible such
as the Amiga's Shell in which text commands are entered by typing them at
the keyboard. For more information about user interfaces, refer to the
Amiga User Interface Style Guide.
Elements of the Amiga Graphical User Interface System
Goals of Intuition
2 / User Interfaces / Elements of the Graphical User Interface System
There is more to the Amiga user interface than Intuition. To build a
complete user interface, application writers need to understand these
other elements of the system software.
Table 2-1: Elements of the Amiga Graphical User Interface System
______________________________________________________________________
| |
| System Element Purpose |
|======================================================================|
| Intuition The main toolkit and function library for |
| creating a graphical user interface (GUI) on the |
| Amiga. |
| |
| Workbench The Amiga file system GUI in which icons |
| represent applications and files. |
| |
| Preferences A family of editors and configuration files for |
| setting Amiga system options. |
| |
| BOOPSI Subsystem of Intuition that allows applications |
| to add extensions to Intuition through |
| object-oriented techniques (Release 2 only). |
|----------------------------------------------------------------------|
| Gadtools Library A support library for creating Intuition gadgets |
| and menus (Release 2 only). |
| |
| ASL Library A support library for creating Intuition |
| requesters (Release 2 only). |
| |
| Icon Library Main library for using Workbench icons. |
| |
| Workbench Library A support library for Workbench icons and menus |
| (Release 2 only). |
|----------------------------------------------------------------------|
| Console Device An I/O support module which allows windows to be |
| treated as text-based virtual terminals. |
| |
| Graphics Library The main library of rendering and drawing |
| routines. |
| |
| Layers Library A support library that manages overlapping, |
| rectangular drawing areas which Intuition uses |
| for windows. |
|______________________________________________________________________|
As you read about Intuition in the chapters to follow, you will be
introduced to each of these elements of the Amiga user interface in more
detail.
2 / About User Interfaces / Goals of Intuition
Intuition was designed with two major goals in mind. The first is to give
users a friendly and consistent environment to control the functions of
the Amiga operating system and its applications.
The second goal (the big one) is to give application designers a graphical
user interface toolkit that manages all the complexities of sharing the
system with other programs that may be running at the same time. Since
the Amiga is a multitasking computer, many programs can reside in memory
at the same time sharing the system's resources with one another. Programs
take turns running so that, from the user's point of view, it appears that
many programs are running simultaneously.
On a multitasking computer like the Amiga, the user interface design must
allow the user to control many programs with just one monitor, one
keyboard, and one mouse. (Imagine driving many cars simultaneously with
one steering wheel.) Intuition supplies the tools needed to solve this
problem.
2 Intuition and the Graphical Interface / How the User Sees Intuition
Intuition solves the problem of interacting with multiple programs by
dividing the display up into multiple screens and overlapping windows so
that each application has its own work area. The user sees the Amiga
environment through these windows, each of which can represent a different
task or application context.
Figure 2-1: The Workbench Screen With Windows
The user performs operations inside screens and windows with the mouse, a
mechanical device that moves a pointer over the Amiga's display. The user
moves the mouse to position the pointer on graphic symbols of various
objects or actions. Buttons on the mouse are pressed to select or
activate the item pointed to.
The user can switch back and forth between different jobs, such as writing
a document, drawing an illustration, printing text, or getting help from
the system simply by moving from one window to another with the mouse.
With the mouse, the user can also change the shape and size of application
windows, move them around on the screen, overlap them, bring a window to
the foreground, and send a window to the background. By changing the
arrangement of the windows, the user selects which information is visible
and which application to work with next. (Screens may also be moved up or
down in the display, and they can be moved in front of or behind other
screens.)
Workbench and Preferences Intuition's 3D Look
2 / How the User Sees Intuition / Workbench and Preferences

shown above) is the first screen the user
sees upon booting the Amiga. Workbench is a special program supplied with
every Amiga that gives the user a friendly and consistent graphic
interface to the file system. It's the default environment the user
starts out with.
In Workbench, disks, directories, files and other objects are symbolized
by small pictures called icons which can be manipulated with the mouse.
For instance, a program file can be executed by pointing to its icon with
the mouse and double-clicking the left mouse button. The Workbench screen
is automatically set up by Intuition and can be easily shared, so many
application programs use it too.
User control of the OS is also supported through Preferences. Preferences
is a family of editors and associated configuration files that allow the
user to control the basic set up of the operating system. For example
Printer Preferences sets up all the printer options.
Workbench, together with Preferences, gives the user an easy way to
control the OS and launch applications. These programs are built with the
same Intuition tools available to application programmers giving the whole
Amiga system an integrated look and feel. Workbench and Preferences are
important components of the Amiga graphic user interface system and are
discussed in greater detail in later chapters.
2 / How the User Sees Intuition / Intuition's 3D Look
The Amiga operating system comes in different versions. The latest
version, Release 2, contains significant improvements in the appearance of
the Intuition graphical user interface, usually referred to as the 3D Look
of Intuition.
Figure 2-2: An Example of the 3D Look of Intuition
In the new 3D look of Intuition, objects are drawn so that light appears
to come from the upper left of the display with shadows cast to the lower
right. Using light and shadow gives the illusion of depth so that images
appear to stand out or recede from the display. By convention, an image
with a raised appearance indicates an object that is available for use or
modifiable. An image with a recessed appearance indicates an object that
is unmodifiable, or for display purposes only. Applications should follow
the same conventions.
Release 2 has other improvements over 1.3 (V34) and earlier versions of
the operating system. Among these are new display resolutions, display
sizes, and new function libraries to support Intuition. Most of the
examples listed in this book assume Release 2. Where appropriate, the old
1.3 methods are also described.
2 Intuition & Graphical Interface / How an Application Sees Intuition
Intuition is organized as a library of over 100 functions. Before using
an Intuition function you must first open the Intuition library. (In
general, you must always open a library before you can call the functions
of that library. See Chapter 1, "Introduction to Amiga System Libraries".)
Components of Intuition
Screens and Windows
Gadgets, Menus and Requesters
2 / How an Application Sees Intuition / Components of Intuition
The types of data objects that the Intuition library functions create and
control fall into six broad categories. These are the main components an
application uses to build and operate a graphic user interface on the
Amiga.
Table 2-2: GUI Components of Intuition
____________________________________________________________________
| |
| Screens The display environment. Sets the resolution and |
| number of colors. |
| |
| Windows A graphic rectangle within a screen representing a |
| working context. |
| |
| Menus A list of choices displayed at the top of a screen |
| that can be selected with the mouse. |
| |
| Gadgets A control symbolized by a graphic image that can be |
| operated with the mouse or keyboard. |
| |
| Requesters Sub-windows for confirming actions, accessing files |
| and other special options. |
| |
| Input events Mouse, keyboard or other input activity. |
|____________________________________________________________________|
2 / How an Application Sees Intuition / Screens and Windows
As mentioned earlier, Intuition allows multiple programs to share the
display by managing a system of multiple screens and overlapping windows.
A screen sets up the display environment and forms the background that
application windows operate in. A window is simply a graphic rectangle
that represents a work context. Each screen can have many windows on it.
Multiple screens and windows give each application its own separate visual
context so that many programs can output graphics and text to the display
at the same time without interfering with one another. Intuition (using
the layers library) handles all the details of clipping graphics so they
stay inside window bounds and remembering graphics that go temporarily out
of sight when the user rearranges windows.
The keyboard and mouse are shared among applications through a simpler
technique: only one application window at a time can have the
input focus. Hence, Intuition ensures that only one window, called the
active window gets to know about keyboard, mouse and other types of input
activity.
Each application window is like a virtual terminal or console. Your
program will seem to have the entire machine and display to itself. It
can send text and graphics to its terminal window, and ask for input from
any number of sources, ignoring the fact that other programs may be
performing these same operations. Intuition handles all the housekeeping.
In fact, your program can open several of these virtual terminals and
treat each one as if it were the only program running on the machine.
Intuition will keep track of all the activity and make sure commands and
data are dispatched to the right place.
2 / How an Application Sees Intuition / Gadgets, Menus And Requesters
Intuition screens and windows provide an orderly way for multiple programs
to share the display and input devices. Each application also needs a
method for the user to send commands to it and select its options.
Intuition supplies gadgets, menus and requesters for this purpose.
Gadgets Requesters
Menus The Intuition Input Event Loop
2 / / Gadgets, Menus And Requesters / Gadgets
A gadget is an application control symbolized by a graphic image that can
be operated with the mouse or keyboard. The imagery used for a gadget
could look like a switch, a knob, a button, or just about anything.
Intuition supplies some pre-fabricated gadgets, called system gadgets, for
controlling window and screen arrangements. Other gadget types allow the
user to select colors, enter text or numbers, and perform other simple
operations.
Figure 2-3: An Intuition Window with Gadgets
Most of the user's input for a typical Intuition application will be
obtained with gadgets. Gadgets are discussed in detail in Chapter 5,
"Intuition Gadgets". Additional information on programming gadgets for
Release 2 of the operating system can be found in Chapter 15,
"GadTools Library".
2 / / Gadgets, Menus And Requesters / Menus
Intuition also supplies a menu system for accepting commands and options
from the user. A menu is a list of choices displayed at the top of the
screen from which the user can select with the mouse. Each screen has one
menu bar that all application windows operating on the screen share.
Whichever window is active controls what appears in the menu bar.
Figure 2-4: An Intuition Menu
The current set of menu choices can always be brought into view by
pressing the right mouse button (the menu button) thus providing the user
with a familiar landmark even in unfamiliar applications. Menus allow the
user to browse through the possible set of actions that can be performed
giving an outline-like overview of the functions offered by a program.
Menus are discussed in detail in Chapter 6, "Intuition Menus". Additional
information on programming menus for Release 2 of the operating system can
be found in Chapter 15, "GadTools Library".
2 / / Gadgets, Menus And Requesters / Requesters
Gadgets and menus do much of the work of getting commands and option
choices from the user. Sometimes though, an application needs to get
further information from a user in response to a command which has already
been initiated. In that case, a requester can be used. A requester is a
temporary sub-window, usually containing several gadgets, used to confirm
actions, access files, or adjust the special options of a command the user
has already given.
Figure 2-5: An Intuition Requester
Requesters are discussed in detail in Chapter 7,
"Intuition Requesters and Alerts". Additional information on programming
requesters for Release 2 of the system can be found in Chapter 16,
"ASL Library".
2 / / Gadgets, Menus And Requesters / The Intuition Input Event Loop
Once an application has set up the appropriate screen, window, gadgets
menus and requesters, it waits for the user to do something. Intuition
can notify an application whenever user activity occurs by sending a
message. The message is simply a pointer to some memory owned by
Intuition that contains an IntuiMessage data structure describing the user
activity that occurred.
To wait for user activity or other events, the Exec library provides a
special function named Wait(). The Exec Wait() function suspends your
task allowing other applications or system tasks to run while your
application is waiting for input or events from Intuition and other
sources.
Thus, the basic outline for any Intuition program is:
* Set up the window, screen and any required gadgets, menus or
requesters.
* Wait() for a message from Intuition about user activity or other
events. Copy needed data from the message and tell Intuition you
received it by replying. Look at the data and take the appropriate
action.
* Repeat until the user wants to quit.
These steps, sometimes referred to as the Intuition input event loop are
basically the same for any Intuition application.
As you might expect, Intuition can send a message to your application
whenever the user presses a key on the keyboard or moves the mouse. Other
types of input events Intuition will notify you about include gadget hits,
menu item selection, time elapsing, disk insertion, disk removal, and
window rearrangement.
Gadgets, menus, requesters are the nuts and bolts of the Intuition GUI
toolkit. Much of the code in an application that uses Intuition deals
with the set up and operation of these important data objects. No matter
how simple, complex, or fanciful your program design, it will fit within
the basic Intuition framework of windows and screens, gadgets, menus and
requesters. The users of the Amiga understand these basic Intuition
elements and trust that the building blocks remain constant. This
consistency ensures that a well-designed program will be understandable to
the naive user as well as to the sophisticate.
2 Intuition and the Graphical Interface / A Simple Intuition Program
The sample Intuition program that follows shows all of the basic
requirements for an Intuition application. There are three important
points:
* You must open the Intuition library before you can use the Intuition
functions. Certain languages such as C require the pointer to the
Intuition library to be assigned to a variable called IntuitionBase
(see Chapter 1 for more about this).
* When you set up a window, you also specify the events that you want
to know about. If the user performs some activity that triggers one
of the events you specified, Intuition signals you and sends a
message. The message is a pointer to an IntuiMessage data structure
that describes the event in more detail. Messages about Intuition
events are sent to a MsgPort structure which queues up the messages
for you in a linked list so that you may respond to them at your
convenience.
* Resources must be returned to the system. In this case, any windows,
screens or libraries that were opened are closed before exiting.
Example Intuition Event Loop
Intuition Example (V36 And Later)
Intuition Example (All Versions)
2 / A Simple Intuition Program / Example Intuition Event Loop
The Intuition event loop used in the example is very simple. The example
first sets up a custom screen, opens a window on it, then waits for
Intuition to send messages about user input with the following event loop:
winsignal = 1L << window1->UserPort->mp_SigBit; /* window signal */
signalmask = winsignal; /* example only waits for window events */
while( !done ) {
signals = Wait(signalmask);
if (signals & winsignal)
done = handleIDCMP(window1);
}
Intuition sends messages about user activity to a special port known as
the IDCMP. Each window can have its own IDCMP (in the code above the
IDCMP is window1->UserPort). To wait for event messages to arrive at the
IDCMP port, the example code calls the Exec Wait() function. It then
processes and replies to any event messages that it gets in a subroutine
named handleIDCMP(). For this example, the only event Intuition will
report is the close window event. When the example detects this event, it
closes the window, closes the screen, closes the Intuition library and
exits. Event loops similar to this one are used in Intuition examples
throughout this book. For more information about IDCMP and user input,
see the chapters on "Intuition Windows" and "Intuition Input and Output".
Converted on 22 Apr 2000 with RexxDoesAmigaGuide2HTML 2.1 by Michael Ranner.