(* REVISION HEADER ×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××× *

 | $VER: GuiFrontD.def 1.00 (25.09.95) by Stefan Schulz [sts]

 | Desc: Interface to GuiFront.library, Definition Part

 | Dist: This Module is © Copyright 1995 by Stefan Schulz
 |       It may be freely Distributed (Freeware)

 | Rqrs: guifront.library V38
 |       GuiFront is © Copyright 1994 by Michael Berg

 | Lang: M2Amiga
 | Trns: M2Amiga Modula 2 Software Development System
 |       © Copyright by A+L AG, CH-2540 Grenchen

 | Hist: Revision 1.00 [sts] \24.09.95\\25.09.95\
 |        `- initial revision

 * ×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××× *)

DEFINITION MODULE GuiFrontD; (*$ Implementation:= FALSE *)

(* /// ------------------------------------------- "Imports" -------------------------------------------- *)

IMPORT  S       : SYSTEM,
        ed      : ExecD,
        gtd     : GadToolsD,
        id      : IntuitionD,
        ud      : UtilityD,
        wd      : WorkbenchD;

(* \\\ -------------------------------------------------------------------------------------------------- *)

(* /// ----------------------------------- "Library Name and Version" ----------------------------------- *)

CONST   guifrontName    = "guifront.library";
        guifrontVersion = 38;

(* \\\ -------------------------------------------------------------------------------------------------- *)

(* /// ------------------------------------ "Pointers to everything" ------------------------------------ *)

TYPE    ExtErrorDataPtr         = POINTER TO ExtErrorData;
        GadgetSpecPtr           = POINTER TO GadgetSpecPtr;
        LocaleHookMsgPtr        = POINTER TO LocaleHookMsgPtr;
        FrameStyleQueryPtr      = POINTER TO FrameStyleQuery;

        GadgetSpecPtrPtr        = POINTER TO GadgetSpecPtr;    (* Pointer to a List of Pointers           *)

TYPE    StringPtr               = S.ADDRESS;                   (* Dummy for a Pointer to ARRAY [] OF CHAR *)

(* \\\ -------------------------------------------------------------------------------------------------- *)

(* /// ------------------------------------ "Tags for CreateGUIAppA" ------------------------------------ *)

CONST   aAuthor                 = ud.tagUser;           (* Author of software (70 chars max)              *)
        aDate                   = ud.tagUser + 1;       (* Date of release (14 chars max)                 *)
        aLongDesc               = ud.tagUser + 2;       (* Longer description (70 chars max)              *)
        aVersion                = ud.tagUser + 3;       (* Version information (20 chars max)             *)

        (* V38 *)
        aVisualUpdateSigTask    = ud.tagUser + 4;       (* Task to signal when prefs change               *)
                                                        (* (defaults to FindTask(0))                      *)
        aVisualUpdateSigBit     = ud.tagUser + 5;       (* Signal to send task when prefs change          *)

(* \\\ -------------------------------------------------------------------------------------------------- *)

(* /// ------------------------------------- "Tags for CreateGUIA" -------------------------------------- *)

CONST   guiInitialOrientation   = ud.tagUser;
        guiInitialSpacing       = ud.tagUser + 1;
        guiLocaleFunc           = ud.tagUser + 2;
        guiExtendedError        = ud.tagUser + 3;
        guiUserData             = ud.tagUser + 4;
        guiOpenGUI              = ud.tagUser + 5;
        guiExtraIDCMP           = ud.tagUser + 6;
        guiWindowTitle          = ud.tagUser + 7;
        guiWindow               = ud.tagUser + 8;       (* Read-only                            *)
        guiBackfill             = ud.tagUser + 9;       (* Please backfill this window          *)
        guiNewMenu              = ud.tagUser + 10;
        guiNewMenuLoc           = ud.tagUser + 11;
        guiMenuStrip            = ud.tagUser + 12;      (* Read-only                            *)

        (* V38 *)
        guiActualFont           = ud.tagUser + 13;      (* Read-only                            *)
        guiScreenTitle          = ud.tagUser + 14;
        guiLeftEdge             = ud.tagUser + 15;
        guiTopEdge              = ud.tagUser + 16;
        guiHelp                 = ud.tagUser + 17;      (* Not currently implemented            *)

        guiGroupMask            = ud.tagUser + 18;      (* Group masking bits                   *)
        guiGadgetMask           = ud.tagUser + 19;      (* Gadget masking bits                  *)
        guiLockGUI              = ud.tagUser + 20;      (* Like LockGUI()                       *)

(* \\\ -------------------------------------------------------------------------------------------------- *)

(* /// --------------- "Extended error report from CreateGUIA() (via GUI_ExtendedError)" ---------------- *)

TYPE    ExtErrorCode       =
              ( errUnknown:= 100,                       (* Unknown error                                *)
                errNotEnoughMemory,
                errMissingLocalizer,                    (* Found GS_LocaleFunc but no GUI_Localizer     *)
                errGuiTooWide,
                errGuiTooTall,
                errCantFindScreen,                      (* Can't find or open required screen           *)
                errMissingGadgetSpecArray,              (* lGadgetSpecID used but no guiGadgetSpecArray *)
                                                        (* supplied                                     *)
                errCantFindGadgetSpecID,                (* Unable to locate gadget with this ID         *)
                errUnknownLayoutTag,                    (* Layout tag list contains garbage             *)
                errCantOpenWindow,                      (* Unable to open gui (GUI_OpenGUI)             *)
                errCantCreateMenus                      (* Unable to create or layout menus             *)
              );

TYPE    ExtErrorData            = RECORD
                                  errorCode     : ExtErrorCode;
                                  errorData     : LONGCARD;
                                  END;

(* \\\ -------------------------------------------------------------------------------------------------- *)

(* /// --------------------------- "Tags and Flags for gadget layout lists" ----------------------------- *)

CONST   lVertGroup              = 1;
        lHorizGroup             = 2;
        lGadgetSpec             = 3;
        lGadgetSpecID           = 4;
        lFrameType              = 5;            (* See below *)
        lHFrameOffset           = 6;
        lVFrameOffset           = 7;
        lFlags                  = 8;            (* See below *)
        lFrameHeadline          = 9;
        lFrameHeadlineLoc       = 10;           (* Localized - will call your localizer function *)

        (* V38 *)
        lGadgetMask             = 11;           (* Set current gadget masking value              *)
        lGroupMask              = 12;           (* Set masking value for current group           *)

CONST   (* Extension methods *)
        lfPropShare             = 1;    (* Members maintain their relative size                         *)
        lfEqualShare            = 2;    (* All members forced to equally share all available space      *)
        lfEqualSize             = 4;    (* All members forced to equal size                             *)

CONST   (* Secondary dimension ajustments *)
        lfEqualWidth            = 8;
        lfEqualHeight           = lfEqualWidth;

CONST   (* Special label layout *)
        lfLabelAlign            = 16;

CONST   (* FrameType *)
        lftNormal               = 1;
        lftRecess               = 2;
        lftRidge                = 3;    (* NeXT style           *)
        lftIconDropBox          = 4;    (* Not implemented      *)

(* \\\ -------------------------------------------------------------------------------------------------- *)

(* /// ------------------------------------------ "GadgetSpec" ------------------------------------------ *)

TYPE    GadgetSpec      = RECORD

                          kind          : INTEGER;
                          minWidth,
                          minHeight     : CARDINAL;
                          ng            : gtd.NewGadget;
                          tags          : ud.TagItemPtr;
                          flags         : CARDINAL;             (* See below                            *)

                          private       : ARRAY [0..4] OF LONGCARD;     (* Hands off! :-)               *)

                          gadget        : id.GadgetPtr;         (* Valid when gadget has been created   *)
                                                                (* - Read-only! -                       *)

                          END; (* GadgetSpec *)

CONST   (* Flags *)
        gsNoWidthExtend         = 1;            (* Lock hitbox width                    *)
        gsNoHeightExtend        = 2;            (* Lock hitbox height                   *)
        gsLocalized             = 4;            (* Call localizer with this gadget      *)
        gsBoldLabel             = 8;            (* Render label in bold-face            *)
        gsDefaultTags           = 16;           (* Supply reasonable default tags       *)

(* \\\ -------------------------------------------------------------------------------------------------- *)

(* /// ------------------------------ "Hook message (GS_LocaleFunc hook) " ------------------------------ *)

TYPE    LocaleHookMsgKind       =
              ( lhmkStringID,                   (* Obtain generic catalog string        *)
                lhmkGadgetSpec,                 (* Return localized GadgetSpec string   *)
                lhmkNewMenu                     (* Return localized NewMenu string      *)
              );                                 

TYPE    LocaleHookMsg           = RECORD

                                  (* Your hook should look at the following union, localize the item in
                                   * question (kind tells you which), and return the localized
                                   * string.
                                   *)

                                  CASE  kind : LocaleHookMsgKind OF
                                   | lhmkStringID :     stringID        : LONGCARD;
                                   | lhmkGadgetSpec:    gadgetSpec      : GadgetSpecPtr;
                                   | lhmkNewMenu:       newMenu         : gtd.NewMenuPtr;
                                   END; (* case *)

                                  END; (* LocaleHookMsg *)

(* \\\ -------------------------------------------------------------------------------------------------- *)

(* /// --------------------------- "Black-box access to private structures " ---------------------------- *)

TYPE    GuiFrontPtr     = S.ADDRESS;            (* Per-gui anchor structure             *)
        GuiFrontAppPtr  = S.ADDRESS;            (* Per-application anchor structure     *)

(* \\\ -------------------------------------------------------------------------------------------------- *)

(* /// ------------------------------------ "GUIFront bonus kinds " ------------------------------------- *)

CONST   GetAltKind              = 08000H;

CONST   (* Gadget creation tags for GetAltKind *)
        altImage                = ud.tagUser;           (* See enum below                               *)
        altAslTags              = ud.tagUser + 1;       (* (TagItemPtr) Tag items for ASL requester     *)
        altAslRequester         = ud.tagUser + 2;       (* (BOOLEAN) Enable automatic ASL requester     *)
        altXenMode              = ud.tagUser + 3;       (* Do not use                                   *)
        altFrameColor           = ud.tagUser + 4;       (* Do not use                                   *)

CONST   (* Image types (AltImage) *)
        altiGetMisc             = 0;                    (* Arrow down with line (get anything)          *)
        altiGetDir              = 1;                    (* Folder image (get directory or volume)       *)
        altiGetFile             = 2;                    (* Paper image (get a file)                     *)
        altiGetFont             = 3;                    (* Copy of arrow down image                     *)
        altiGetScreenMode       = 4;                    (* Copy of arrow down image (not implemented)   *)

(* \\\ -------------------------------------------------------------------------------------------------- *)

(* /// ---------------------------------- "Preferences related stuff " ---------------------------------- *)

TYPE    (* Black-box access to preferences nodes (all fields are private) *)
        PrefsHandlePtr  = S.ADDRESS;

CONST   (* Tags for GetPrefAttrA() and SetPrefAttrA() *)

        (* Flags *)
        prfGadgetScreenFont     = ud.tagUser;           (* (BOOLEAN)                            *)
        prfFrameScreenFont      = ud.tagUser + 1;       (* (BOOLEAN)                            *)

        (* Backfill control magic *)
        prfAllowBackfill        = ud.tagUser + 2;       (* (BOOLEAN)                            *)
        prfBackfillFGPen        = ud.tagUser + 3;       (* (CARDINAL)                           *)
        prfBackfillBGPen        = ud.tagUser + 4;       (* (CARDINAL)                           *)

        (* Frametype preferences (per supported gadgetkind) *)
        prfFrameStyleQuery      = ud.tagUser + 5;       (* (FrameStyleQueryPtr) - see below     *)

        prfXenFrameColor        = ud.tagUser + 6;       (* (CARDINAL)                           *)
        prfGadgetFontYSize      = ud.tagUser + 7;       (* (CARDINAL)                           *)
        prfGadgetFontName       = ud.tagUser + 8;       (* (StringPtr) (max 50 chars)           *)
        prfFrameFontName        = ud.tagUser + 9;       (* (StringPtr) (max 50 chars)           *)
        prfFrameFontYSize       = ud.tagUser + 10;      (* (CARDINAL)                           *)
        prfFrameFontBold        = ud.tagUser + 11;      (* (BOOLEAN)                            *)
        prfFrameFontItalics     = ud.tagUser + 12;      (* (BOOLEAN)                            *)
        prfFrameFont3D          = ud.tagUser + 13;      (* (BOOLEAN)                            *)
        prfFrameFontFGPen       = ud.tagUser + 14;      (* (CARDINAL)                           *)
        prfFrameFontCenter      = ud.tagUser + 15;      (* (BOOLEAN)                            *)
        prfFrameFontCentering   = ud.tagUser + 16;      (* (see prffc* below)                   *)

        (* Miscellaneous *)
        prfSimpleRefresh        = ud.tagUser + 17;      (* (BOOLEAN)                            *)

        (* Application Info (READ ONLY!) *)
        prfAuthor               = ud.tagUser + 18;      (* (StringPtr) (max 70 chars)           *)
        prfDate                 = ud.tagUser + 19;      (* (StringPtr) (max 14 chars)           *)
        prfLongDesc             = ud.tagUser + 20;      (* (StringPtr) (max 70 chars)           *)
        prfVersion              = ud.tagUser + 21;      (* (StringPtr) (max 20 chars)           *)

        (* Public Screen tags (V38) *)
        PRF_PubScreenType       = ud.tagUser + 22;      (* (UWORD)                              *)
        PRF_PubScreenName       = ud.tagUser + 23;      (* (StringPtr)                          *)

CONST   (* Frame headline centering *)
        prffcLeft               = 0;    (* Left aligned         *)
        prffcCenter             = 1;    (* Centered             *)
        prffcRight              = 2;    (* Right aligned        *)

TYPE    FrameStyleQuery         = RECORD

                                  gadgetKind    : INTEGER;      (* As passed to CreateGadgetA() *)
                                  xen           : BOOLEAN;      (* True: Xen, false: Normal     *)

                                  END; (* FrameStyleQuery *)

(* \\\ -------------------------------------------------------------------------------------------------- *)

(* /// ---------------------------------------- "PubScreenType" ----------------------------------------- *)

CONST   pstWorkbench            = 0;
        pstFrontmost            = 1;
        pstDefault              = 2;
        pstPublic               = 3;

(* \\\ -------------------------------------------------------------------------------------------------- *)

(* /// ------------------------- "Tags for GetGUIAppAttrA()/SetGUIAppAttrA() " -------------------------- *)

CONST   aWindowPort             = ud.tagUser;           (* Read only                    *)
        aUserData               = ud.tagUser + 1;       (* Free for application use     *)

(* \\\ -------------------------------------------------------------------------------------------------- *)



(* /// ------------------- "Tags for GetPubScreenAttrA()/SetPubScreenAttrA() (V38)" --------------------- *)

CONST   psaDisplayID            = ud.tagUser;           (* (LONGCARD)                  *)
        psaWidth                = ud.tagUser + 1;       (* (CARDINAL)                  *)
        psaHeight               = ud.tagUser + 2;       (* (CARDINAL)                  *)
        psaDepth                = ud.tagUser + 3;       (* (CARDINAL)                  *)
        psaOverscan             = ud.tagUser + 4;       (* (CARDINAL)                  *)
        psaDraggable            = ud.tagUser + 5;       (* (BOOLEAN)                   *)
        psaInterleaved          = ud.tagUser + 6;       (* (BOOLEAN)                   *)
        psaAutoScroll           = ud.tagUser + 7;       (* (BOOLEAN)                   *)
        psaLeaveOpen            = ud.tagUser + 8;       (* (BOOLEAN)                   *)
        psaShowTitle            = ud.tagUser + 9;       (* (BOOLEAN)                   *)
        psaBehind               = ud.tagUser + 10;      (* (BOOLEAN)                   *)
        psaQuiet                = ud.tagUser + 11;      (* (BOOLEAN)                   *)
        psaSharePens            = ud.tagUser + 12;      (* (BOOLEAN)                   *)
        psaExclusive            = ud.tagUser + 13;      (* (BOOLEAN)                   *)
        psaMakeDefault          = ud.tagUser + 14;      (* (BOOLEAN)                   *)
        psaPopPubScreen         = ud.tagUser + 15;      (* (BOOLEAN)                   *)
        psaShanghai             = ud.tagUser + 16;      (* (BOOLEAN)                   *)
        psaScreenTitle          = ud.tagUser + 17;      (* (StringPtr) (max 139 chars) *)
        psaScreenFont           = ud.tagUser + 18;      (* (StringPtr) (max 50 chars)  *)
        psaScreenFontSize       = ud.tagUser + 19;      (* (CARDINAL)                  *)

(* \\\ -------------------------------------------------------------------------------------------------- *)

END GuiFrontD.def

