home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 3 / AACD03.BIN / AACD / Programming / Triton / Source / internal.h < prev    next >
C/C++ Source or Header  |  1998-05-23  |  18KB  |  370 lines

  1. /*
  2.  *  OpenTriton -- A free release of the triton.library source code
  3.  *  Copyright (C) 1993-1998  Stefan Zeiger
  4.  *
  5.  *  This program is free software; you can redistribute it and/or modify
  6.  *  it under the terms of the GNU General Public License as published by
  7.  *  the Free Software Foundation; either version 2 of the License, or
  8.  *  (at your option) any later version.
  9.  *
  10.  *  This program is distributed in the hope that it will be useful,
  11.  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13.  *  GNU General Public License for more details.
  14.  *
  15.  *  You should have received a copy of the GNU General Public License
  16.  *  along with this program; if not, write to the Free Software
  17.  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  18.  *
  19.  *  internal.h - Internal function definitions
  20.  *
  21.  */
  22.  
  23.  
  24. #ifndef TR_PREFSONLY
  25.  
  26. // Includes
  27.  
  28. #include <exec/memory.h>
  29.  
  30. #include <clib/exec_protos.h>
  31. #include <clib/intuition_protos.h>
  32. #include <clib/graphics_protos.h>
  33. #include <clib/gadtools_protos.h>
  34. #include <clib/diskfont_protos.h>
  35. #include <clib/utility_protos.h>
  36. #include <clib/wb_protos.h>
  37.  
  38. #include <pragmas/exec_pragmas.h>
  39. #include <pragmas/intuition_pragmas.h>
  40. #include <pragmas/graphics_pragmas.h>
  41. #include <pragmas/gadtools_pragmas.h>
  42. #include <pragmas/diskfont_pragmas.h>
  43. #include <pragmas/utility_pragmas.h>
  44. #include <pragmas/wb_pragmas.h>
  45.  
  46.  
  47. // Pool support
  48.  
  49. #ifndef TR_THIS_IS_REALLY_TRITON
  50.   #ifdef TR_OS39
  51.     #define TR_AllocPooled(a,b) AllocPooled(a,b)
  52.     #define TR_FreePooled(a,b,c) FreePooled(a,b,c)
  53.   #else
  54.     extern void *TR_AllocPooled(void *poolHeader, ULONG memSize);
  55.     extern void *TR_FreePooled(void *poolHeader, APTR memory, ULONG memSize);
  56.   #endif
  57. #endif
  58.  
  59.  
  60. // Helping functions
  61.  
  62. struct TROD_Object *  __regargs TR_AddObjectToIDList(struct TR_Project *project, struct TROD_Object * object);
  63. struct Gadget *       __regargs TR_CreateGadget(struct TR_Project *project, struct TROD_Object *object, ULONG kind, ULONG left, ULONG top, ULONG width, ULONG height, struct TagItem *tags);
  64. ULONG                 __regargs TR_CountListEntries(struct List *list);
  65. ULONG                 __regargs TR_GetDisplayInfoData (UBYTE *buf, ULONG size, ULONG tagID, ULONG displayID);
  66. ULONG                 __regargs TR_GetBottomBorderHeight(struct Screen *scr);
  67. ULONG                 __regargs TR_IdFromPlace(struct TR_Project *project, UWORD x, UWORD y);
  68. struct TROD_DisplayObject * __regargs TR_ObjectFromPlace(struct TR_Project *project, UWORD x, UWORD y);
  69. struct TR_Class *     __regargs TR_FindClass(struct TR_App *app, ULONG tag);
  70. VOID                  __regargs TR_AddDefaultClasses(VOID);
  71. ULONG                 __regargs TR_GetTagType(ULONG tag);
  72.  
  73. static struct Gadget * __inline
  74. TR_CreateGadgetTags(struct TR_Project *project, struct TROD_Object *object, ULONG kind, ULONG left,
  75.             ULONG top, ULONG width, ULONG height, ULONG tags,...)
  76. {
  77.   return TR_CreateGadget(project,object,kind,left,top,width,height,(struct TagItem *)&tags);
  78. }
  79.  
  80. static BOOL __inline
  81. TR_InternalAddClassTags(ULONG tag, ULONG superTag, TR_Method defaultMethod, ULONG datasize, ULONG tags,...)
  82. {
  83.   return TR_AddClass(NULL,tag,superTag,defaultMethod,datasize,(struct TagItem *)&tags);
  84. }
  85.  
  86.  
  87. // Text
  88.  
  89. VOID __regargs TR_DoShortcut(struct TR_Project *project, UBYTE shortcut, UWORD code, struct TROM_EventData * edata);
  90.  
  91.  
  92. // Gadgets
  93.  
  94. VOID __regargs TR_SelectGadget(struct TR_Project *project, struct Gadget *gad, BOOL selected);
  95. VOID __regargs TR_DisableGadget(struct TR_Project *project, struct Gadget *gad, BOOL disabled);
  96.  
  97.  
  98. // Other
  99.  
  100. VOID __regargs TR_DoMethodID(struct TR_Project *project, ULONG objectid, ULONG method, APTR data);
  101. VOID __regargs TR_InternalAreaFill(struct TR_Project *project, struct RastPort *rp, ULONG left, ULONG top, ULONG right, ULONG bottom, ULONG type);
  102. VOID __stdargs TR_SPrintF (STRPTR buf, STRPTR format, ...);
  103. VOID TR_UpdateQuickHelp(struct TR_Project *project, ULONG x, ULONG y, BOOL removeNow);
  104.  
  105.  
  106. // Library bases
  107.  
  108. extern struct IntuitionBase *IntuitionBase;
  109. extern struct GfxBase *GfxBase;
  110. extern struct Library *GadToolsBase;
  111. extern struct Library *UtilityBase;
  112. extern struct Library *DiskfontBase;
  113. extern struct Library *KeymapBase;
  114. extern struct Library *SysBase;
  115. extern struct Library *DOSBase;
  116. extern struct Library *WorkbenchBase;
  117.  
  118.  
  119. // Global data
  120.  
  121. extern struct TR_Global
  122. {
  123.   UWORD                 trg_OSVersion;        // OS version (e.g. 39 for OS3.0)
  124.   struct MinList        trg_ClassList;        // Contains classes
  125.   VOID *                trg_ClassListPool;    // Pool for the class list
  126.   struct MinList        trg_ScreenList;       // Contains opened public screens
  127.   VOID *                trg_ScreenListPool;   // Pool for the screen list
  128. } TR_Global;
  129.  
  130.  
  131. ////////////////////////////////////////////////////////////////////////////
  132. //////////////////////////////////////////////////////// Class management //
  133. ////////////////////////////////////////////////////////////////////////////
  134.  
  135. typedef struct TR_Class
  136. {
  137.   struct MinNode                trc_Node;
  138.   struct TR_Class             * trc_SuperClass;
  139.   ULONG                         trc_Tag;
  140.   TR_Method                     trc_Dispatcher[25];
  141.   struct TR_Class             * trc_MetaClass[25];
  142.   ULONG                         trc_SizeOfClassData;
  143. } TR_Class;
  144.  
  145.  
  146. ////////////////////////////////////////////////////////////////////////////
  147. //////////////////////////////////////////////////////// Dispatcher stuff //
  148. ////////////////////////////////////////////////////////////////////////////
  149.  
  150. /* Object Messages */
  151.  
  152. #define TROM_PREGTREMOVE        5L         /* Is called before GadTools gadgets are removed */
  153. #define TROM_GETBETTERHEIGHT    21L        /* Get a better height for an object */
  154.  
  155.  
  156. ////////////////////////////////////////////////////////////////////////////
  157. //////////////////////////////////////////////////// Private window flags //
  158. ////////////////////////////////////////////////////////////////////////////
  159.  
  160. #define TRWF_QUICKHELP          0x10000000L     /* Quick help active? */
  161.  
  162.  
  163. /**************************************************************************************************** Text */
  164.  
  165. extern BOOL __regargs TR_ThickBorders(struct TR_Project *project);
  166.  
  167. extern VOID __asm TR_InternalPrintText(register __a0 struct TR_Project *project,
  168.                        register __a1 struct RastPort *rp,
  169.                        register __a2 STRPTR text,
  170.                        register __d1 ULONG x, register __d2 ULONG y,
  171.                        register __d3 width, register __d0 ULONG flags);
  172.  
  173.  
  174. /*************************************************************************************************** Frame */
  175.  
  176. extern VOID __asm TR_InternalDrawFrame(register __a0 struct TR_Project *project,
  177.                        register __a1 struct RastPort *rp, register __d1 UWORD left,
  178.                        register __d2 UWORD top, register __d3 UWORD width,
  179.                        register __d4 UWORD height, register __d0 UWORD type,
  180.                        register __d5 BOOL inverted);
  181.  
  182.  
  183. ////////////////////////////////////////////////////////////////////////////
  184. /////////////////////////////////////////////// Class construction macros //
  185. ////////////////////////////////////////////////////////////////////////////
  186.  
  187. #define TR_METHOD(class,method,dstr) ULONG __asm TRDP_ ## class ## _ ## method \
  188.                 (register __a0 struct TROD_ ## class *object,\
  189.                  register __d0 ULONG messageid,\
  190.                  register __a2 struct TROM_ ## dstr *data,\
  191.                  register __a1 struct TR_Class *metaclass)
  192.  
  193. #define TR_SIMPLEMETHOD(class,method) ULONG __asm TRDP_ ## class ## _ ## method \
  194.                                 (register __a0 struct TROD_ ## class *object,\
  195.                  register __d0 ULONG messageid,\
  196.                  register __a2 void *data,\
  197.                  register __a1 struct TR_Class *metaclass)
  198.  
  199. #define TR_DEFAULTMETHOD(class) ULONG __asm TRDP_ ## class \
  200.                                 (register __a0 struct TROD_ ## class *object,\
  201.                  register __d0 ULONG messageid,\
  202.                  register __a2 void *data,\
  203.                  register __a1 struct TR_Class *metaclass)
  204.  
  205. #define NEWDATA ((struct TROM_NewData *)data)
  206. #define SETATDATA ((struct TROM_SetAttributeData *)data)
  207.  
  208. #define TR_CLASS_BEG(c,sc)      if(!(TR_InternalAddClassTags(TROB_ ## c,TROB_ ## sc,TRDP_ ## c,\
  209.                                  sizeof(struct TROD_ ## c),
  210. #define TR_CLASS_BEG_ND(c,sc)   if(!(TR_InternalAddClassTags(TROB_ ## c,TROB_ ## sc,NULL,\
  211.                                  sizeof(struct TROD_ ## c),
  212. #define TR_CLASS_MET(c,m)       TROM_ ## m, TRDP_ ## c ## _ ## m ,
  213. #define TR_CLASS_DMET(c,m,d)    TROM_ ## m, TRDP_ ## c ## _ ## d ,
  214. #define TR_CLASS_END            TAG_END))) goto failed;
  215.  
  216. #define TR_DIRECTMETHODCALL(c,m) TRDP_ ## c ## _ ## m(object,messageid,data,metaclass)
  217.  
  218.  
  219. ////////////////////////////////////////////////////////////////////////////
  220. ///////////////////////////////////////////////////////////// PREFERENCES //
  221. ////////////////////////////////////////////////////////////////////////////
  222.  
  223. #endif /* TR_PREFSONLY */
  224.  
  225.  
  226. ////////////////////////////////////////////////////////////////////////////
  227. //////////////////////////////////////////////////////////// Magic values //
  228. ////////////////////////////////////////////////////////////////////////////
  229.  
  230. #define TRWP_MAGIC              1024L           /* PRIVATE! */
  231.  
  232. #define TRCA_MagicPrefs         (TAG_USER+1000) /* PRIVATE! */
  233.  
  234.  
  235. /* Definitions for TR_DoShortcut() */
  236.  
  237. #define TR_SHORTCUT_KEYDOWN   1
  238. #define TR_SHORTCUT_KEYUP     2
  239. #define TR_SHORTCUT_CANCELLED 3
  240.  
  241.  
  242. /************************************************************************** The Triton application message */
  243.  
  244. struct TR_Message
  245. {
  246.   struct TR_Project *           trm_Project;    /* The project which triggered the message */
  247.   ULONG                         trm_ID;         /* The object's ID (where appropriate) */
  248.   ULONG                         trm_Class;      /* The Triton message class */
  249.   ULONG                         trm_Data;       /* The class-specific data */
  250.   ULONG                         trm_Code;       /* Currently only used by TRMS_KEYPRESSED */
  251.   ULONG                         trm_Qualifier;  /* IEQUALIFIERs */
  252.   ULONG                         trm_Seconds;    /* \ Copy of system clock time (Only where */
  253.   ULONG                         trm_Micros;     /* / available! If not set, trm_Seconds is 0) */
  254.   struct TR_App *               trm_App;        /* The project's application */
  255.   /* FIELDS BELOW THIS LINE ARE PRIVATE */
  256.   struct MinNode                trm_Node;       /* Used for insertion into the message queue */
  257. };
  258.  
  259. #define TR_NODE2MSG(n) ((struct TR_Message *)(((char *)n)-36))
  260.  
  261.  
  262. /******************************************************************************* The Application Structure */
  263.  
  264. typedef struct TR_App
  265. {
  266.   VOID *                        tra_MemPool;    /* The memory pool */
  267.   ULONG                         tra_BitMask;    /* Bits to Wait() for */
  268.   STRPTR                        tra_Name;       /* Unique name */
  269.   /* PRIVATE PARTS FOLLOWING */
  270.   struct MinList                tra_ClassList;  /* The private classes of this application */
  271.   ULONG                         tra_LastError;  /* TRER code of last error */
  272.   STRPTR                        tra_LongName;   /* User-readable name */
  273.   STRPTR                        tra_Info;       /* Info string */
  274.   STRPTR                        tra_Version;    /* Version */
  275.   STRPTR                        tra_Release;    /* Release */
  276.   STRPTR                        tra_Date;       /* Compilation date */
  277.   struct MsgPort *              tra_AppPort;    /* Application message port */
  278.   struct MsgPort *              tra_IDCMPPort;  /* IDCMP message port */
  279.   VOID *                        tra_Prefs;      /* Pointer to Triton app prefs */
  280.   struct TR_Project *           tra_CurProject; /* Used by TR_CreateMsg() */
  281.   ULONG                         tra_CurSecs;    /* Used by TR_CreateMsg() */
  282.   ULONG                         tra_CurMicros;  /* Used by TR_CreateMsg() */
  283.   ULONG                         tra_CurQual;    /* Used by TR_CreateMsg() */
  284.   struct InputEvent *           tra_InputEvent; /* Used for RAWKEY conversion */
  285.   struct MinList                tra_MsgList;    /* Message queue */
  286. } TR_App;
  287.  
  288.  
  289. /*********************************************************************************** The Project structure */
  290.  
  291. #include <classes/object.def>
  292.  
  293. typedef struct TR_Project
  294. {
  295.   struct TROD_Object            tro_SC_Object;                  /* Superclass object data */
  296.   struct TR_App *               trp_App;                        /* Our application */
  297.   VOID *                        trp_MemPool;                    /* The memory pool for the lists */
  298.   ULONG                         trp_ID;                         /* The project's ID */
  299.   ULONG                         trp_IDCMPFlags;                 /* The IDCMP flags */
  300.   struct Window *               trp_Window;                     /* The default window */
  301.   UWORD                         trp_AspectFixing;               /* Pixel aspect correction factor */
  302.  
  303.   /* PRIVATE PARTS FOLLOWING */
  304.  
  305.   struct Screen *               trp_Screen;                     /* Our screen, always valid */
  306.   ULONG                         trp_ScreenType;                 /* Type of screen (WA_...Screen) */
  307.   struct Screen *               trp_LockedPubScreen;            /* Only valid if we're using a PubScreen */
  308.   STRPTR                        trp_ScreenTitle;                /* The screen title */
  309.  
  310.   struct AppWindow *            trp_AppWindow;                  /* AppWindow for icon dropping */
  311.  
  312.   ULONG                         trp_Flags;                      /* Triton window flags */
  313.  
  314.   struct NewMenu *              trp_NewMenu;                    /* The newmenu stucture built by Triton */
  315.   ULONG                         trp_NewMenuSize;                /* The number of menu items in the list */
  316.   struct Menu *                 trp_Menu;                       /* The menu structure */
  317.  
  318.   VOID *                        trp_VisualInfo;                 /* The VisualInfo of our window */
  319.   struct DrawInfo *             trp_DrawInfo;                   /* The DrawInfo of the screen */
  320.   struct TR_Dimensions *        trp_UserDimensions;             /* User-supplied dimensions */
  321.   struct TR_Dimensions *        trp_Dimensions;                 /* Private dimensions */
  322.  
  323.   ULONG                         trp_WindowStdHeight;            /* The standard height of the window */
  324.   ULONG                         trp_LeftBorder;                 /* The width of the left window border */
  325.   ULONG                         trp_RightBorder;                /* The width of the right window border */
  326.   ULONG                         trp_TopBorder;                  /* The height of the top window border */
  327.   ULONG                         trp_BottomBorder;               /* The height of the bottom window border */
  328.   ULONG                         trp_InnerWidth;                 /* The inner width of the window */
  329.   ULONG                         trp_InnerHeight;                /* The inner height of the window */
  330.   WORD                          trp_ZipDimensions[4];           /* The dimensions for the zipped window */
  331.  
  332.   struct TROD_DisplayObject *   trp_RootObject;                 /* The root object of the window */
  333.   struct MinList                trp_MenuList;                   /* The list of menus */
  334.   struct MinList                trp_IDList;                     /* The ID linking list (menus & objects) */
  335.  
  336.   struct TextAttr *             trp_PropAttr;                   /* The proportional font attributes */
  337.   struct TextAttr *             trp_FixedWidthAttr;             /* The fixed-width font attributes */
  338.   struct TextFont *             trp_PropFont;                   /* The proportional font */
  339.   struct TextFont *             trp_FixedWidthFont;             /* The fixed-width font */
  340.   BOOL                          trp_OpenedPropFont;             /* \ Have we opened the fonts ? */
  341.   BOOL                          trp_OpenedFixedWidthFont;       /* /                            */
  342.   UWORD                         trp_TotalPropFontHeight;        /* Height of prop font incl. underscore */
  343.  
  344.   ULONG                         trp_BackfillType;               /* The backfill type */
  345.   struct Hook *                 trp_BackfillHook;               /* The backfill hook */
  346.  
  347.   struct Gadget *               trp_GadToolsGadgetList;         /* List of GadTools gadgets */
  348.   struct Gadget *               trp_PrevGadget;                 /* Previous GadTools gadget */
  349.   struct NewGadget *            trp_NewGadget;                  /* GadTools NewGadget */
  350.  
  351.   struct Requester *            trp_InvisibleRequest;           /* The invisible blocking requester */
  352.   BOOL                          trp_IsUserLocked;               /* Project locked by the user? */
  353.  
  354.   ULONG                         trp_CurrentID;                  /* The currently keyboard-selected ID */
  355.   BOOL                          trp_IsShortcutDown;             /* Shortcut key pressed? */
  356.   UBYTE                         trp_Underscore;                 /* The underscore character */
  357.  
  358.   BOOL                          trp_EscClose;                   /* Close window on Esc? */
  359.   BOOL                          trp_DelZip;                     /* Zip window on Del? */
  360.   BOOL                          trp_PubScreenFallBack;          /* Fall back onto default public screen? */
  361.   BOOL                          trp_FontFallBack;               /* Fall back to topaz.8? */
  362.  
  363.   UWORD                         trp_OldWidth;                   /* Old window width */
  364.   UWORD                         trp_OldHeight;                  /* Old window height */
  365.  
  366.   struct Window *               trp_QuickHelpWindow;            /* The QuickHelp window */
  367.   struct TROD_DisplayObject *   trp_QuickHelpObject;            /* Object for which help is popped up */
  368.   ULONG                         trp_TicksPassed;                /* IntuiTicks passed since last MouseMove */
  369. } TR_Project;
  370.