Contents | < Browse | Browse >
» GadOutline Library v2.4 available for FTP «
GadOutline Library - font-sensitive gadget layout library
Gadoutline.library is intended to provide you with a means of
describing the general layout of your GUI in a font-independant
manner, and take care of the details of determining the exact
placement of the individual elements of the display and the
drudgery of creating and managing all of the gadgets. In
addition, it provides a very generalized mechanism for tracking
the state of all of its gadgets to support automatic resizing and
closing and opening of a window without loss of context,
automatic hotkey support, a vector based drawing module that can
be used for everything from drawing frames around groups of
gadgets to creating custom images for BOOPSI gadgets to adding
complex drawings and textual information to a window, the ability
to transparently use both GadTools and BOOPSI gadgets, and to use
new GadTools and BOOPSI gadgets without having to write a single
line of code.
Note that this library is based around the existing GadTools and
BOOPSI structures as provided by the operating system, and
provides no custom gadgets of its own.
WHAT IS A "GADOUTLINE?"
The library draws its name from the primary data structure used
to describe the entire gadget layout - a ULONG array 'outline'
which is composed of individual 'commands.' A command is used to
define a single element of the display - a gadget, the wrapper
around a group of gadgets, or an image - and additional 'control'
commands are used to control how groups are organized, provide
additional information to the library, and mark the end of the
array. This array is an entirely static structure; the library
only uses it to determine the dynamic data which is needed by the
layout and after that it is never referenced again. This brings
a number of important consequences:
- An application almost never refers to the elements of the
outline in terms of pointers. While ultimately all of the
commands are referenced as normal pointers to C structures, the
application almost entirely refers to the commands and their
associated gadgets in terms of an ID code which is assigned to
the command. Every command must have either a unique ID code,
or the special "none" code of 0, and everything from assigning
hotkeys to setting a gadget's attributes uses this unique ID
code to determine which command is being refered to.
- Almost all of the information needed to create a gadget is
localized into one place in the outline array, making it much
easier to see what a gadget actually is. In addition, the layout
of the gadgets is primarily determined by their position in the
array, so it is relatively easy to understand their
relationship to the rest of the window. Moving the layout
around is as easy as using cut and paste in your text editor.
- Defining connections between objects no longer requires
absolute pointers to them. Instead, you simply include the
command ID along with the rest of the definition of your
gadget, and the library takes care of resolving the pointer when
the gadget is actually created.
- All of the tags used to define the orginal layout are
dynamically tracked by the library as the gadgets are changed
and your program makes changes, so that the layout and all of its
objects can be restored to their previous state even when closing
a window and opening it on a new screen. And because all of
the library's state tracking is based on the object's tags, new
kinds of gadgets are automatically tracked by the library.
With the addition of a "translation" callback hook, automatic
localization can easily be implemented, or it is even possible to
design a method of removing all absolute memory references within
the static outline so that it could, for example, be loaded off
disk when needed by the application.
This is a slight update to version 2.0 of my layout library, as
previously uploaded to Aminet. See the gadoutline2_4.readme file
for a list of the changes since that version.
This update is mainly for bug-fixes.
OS 2.04 or greater; tested up to 3.0.
No other software requirements.
Only tested with SAS/C; no assembly language header files provided.
Has not been tested on a 68000 processer.
[But it *should* work... right? ;)]
Uploaded to the Aminet site ftp.etsu.edu (220.127.116.11).
Should be available on all other sites.
Example public screen manager program:
Shareware. A fee of $20 is asked for programmers using the
library who would like more support than the documentation
provided with it.
Copyright (C) 1993 by Dianne Hackborn.
Freely distributable as long as the contents of the archive
are kept intact.