Contents | < Browse | Browse >

               » GadOutline Library v2.4 available for FTP «


        GadOutline Library - font-sensitive gadget layout library




        Dianne Hackborn



     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.


     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 (

        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.