home *** CD-ROM | disk | FTP | other *** search
- #ifndef _DOPUS_LAYOUT
- #define _DOPUS_LAYOUT
-
- /*****************************************************************************
-
- Layout routines
-
- *****************************************************************************/
-
- #ifndef LIBRARIES_GADTOOLS_H
- #include <libraries/gadtools.h>
- #endif
-
- #define POS_CENTER -1 // Center position
- #define POS_RIGHT_JUSTIFY -2 // Right-justified
-
- #define POS_MOUSE_CENTER -3 // Center over mouse
- #define POS_MOUSE_REL -4 // Relative to mouse
-
- #define POS_PROPORTION 1024 // Proportion of space left
- #define POS_SQUARE 1124
- #define POS_REL_RIGHT (1<<14) // Relative to another
-
- #define FPOS_TEXT_OFFSET 16384
-
- #define SIZE_MAXIMUM -1
- #define SIZE_MAX_LESS -101
-
- // Defines a window
- typedef struct {
- struct IBox cw_CharDims;
- struct IBox cw_FineDims;
- } ConfigWindow;
-
- // Opens a window
- typedef struct {
- void *nw_Parent; // Parent to open on
- ConfigWindow *nw_Dims; // Window dimensions
- char *nw_Title; // Window title
- struct DOpusLocale *nw_Locale; // Locale to use
- struct MsgPort *nw_Port; // Message port to use
- ULONG nw_Flags; // Flags
- struct TextFont *nw_Font; // Alternative font to use
- } NewConfigWindow;
-
- // Set by the user
- #define WINDOW_SCREEN_PARENT (1<<0) // Parent is a screen
- #define WINDOW_NO_CLOSE (1<<1) // No close gadget
- #define WINDOW_NO_BORDER (1<<2) // No border
- #define WINDOW_LAYOUT_ADJUST (1<<3) // Adjust window size to fit objects
- #define WINDOW_SIMPLE (1<<4) // Simple refresh
- #define WINDOW_AUTO_REFRESH (1<<5) // Refresh window automatically
- #define WINDOW_AUTO_KEYS (1<<6) // Handle keys automatically
- #define WINDOW_OBJECT_PARENT (1<<7) // Parent is an existing object
- #define WINDOW_REQ_FILL (1<<8) // Backfill as a requester
- #define WINDOW_NO_ACTIVATE (1<<9) // Don't activate
- #define WINDOW_VISITOR (1<<10) // Open as visitor window
- #define WINDOW_SIZE_RIGHT (1<<11) // Size gadget, in right border
- #define WINDOW_SIZE_BOTTOM (1<<12) // Size gadget, in bottom border
- #define WINDOW_ICONIFY (1<<13) // Iconify gadget
-
- // Set by the system
- #define OPEN_USED_DEFAULT (1<<16) // To open had to use default font
- #define OPEN_USED_TOPAZ (1<<17) // To open had to use topaz
- #define OPEN_SHRUNK_VERT (1<<18) // Window is not full vertical size requested
- #define OPEN_SHRUNK_HORIZ (1<<19) // Window is not full horizontal size requested
- #define OPEN_SHRUNK (OPEN_SHRUNK_VERT|OPEN_SHRUNK_HORIZ)
-
-
- // ID of the iconify gadget
- #define GAD_ID_ICONIFY 0xffa0
-
- // Defines an object
- typedef struct {
- BYTE od_Type;
- UBYTE od_ObjectKind;
- struct IBox od_CharDims;
- struct IBox od_FineDims;
- ULONG od_GadgetText;
- ULONG od_Flags;
- USHORT od_ID;
- struct TagItem *od_TagList;
- } ObjectDef;
-
- #define TEXTFLAG_TEXT_STRING (1<<17) // Text is a string, not a Locale ID
- #define TEXTFLAG_NO_USCORE (1<<18) // No underscore in text
- #define BUTTONFLAG_OKAY_BUTTON (1<<18) // Button is an "ok" button
- #define BUTTONFLAG_CANCEL_BUTTON (1<<19) // Button is a "cancel" button
- #define BUTTONFLAG_TOGGLE_SELECT (1<<20) // Button is toggle-select
- #define LISTVIEWFLAG_CURSOR_KEYS (1<<21) // Lister responds to cursor
- #define BUTTONFLAG_THIN_BORDERS (1<<22) // Button has thin borders
- #define FILEBUTFLAG_SAVE (1<<21) // Save mode
-
- #define TEXTFLAG_ADJUST_TEXT (1<<23) // Adjust for text
- #define POSFLAG_ADJUST_POS_X (1<<24) // Position adjustor
- #define POSFLAG_ADJUST_POS_Y (1<<25) // Position adjustor
- #define POSFLAG_ALIGN_POS_X (1<<26) // Align
- #define POSFLAG_ALIGN_POS_Y (1<<27) // Align
-
- #define TEXTFLAG_RIGHT_JUSTIFY (1<<1) // Right-justify text
- #define TEXTFLAG_CENTER (1<<2) // Center text
-
- #define AREAFLAG_RAISED (1<<8) // Raised rectangle
- #define AREAFLAG_RECESSED (1<<9) // Recessed rectangle
- #define AREAFLAG_THIN (1<<10) // Thin borders
- #define AREAFLAG_ICON (1<<11) // Icon drop box
- #define AREAFLAG_ERASE (1<<12) // Erase interior
- #define AREAFLAG_LINE (1<<13) // Line (separator)
- #define AREAFLAG_OPTIM (1<<15) // Optimised refreshing
- #define AREAFLAG_TITLE (1<<16) // Box with a title
- #define AREAFLAG_NOFILL (1<<18) // No fill
-
- #define OBJECTFLAG_DRAWN (1<<31) // Object has been drawn
-
- #define OD_END 0 // End of a list
- #define OD_GADGET 1 // A gadget
- #define OD_TEXT 2 // Some text
- #define OD_AREA 3 // A rectangular area
- #define OD_IMAGE 4 // An image
- #define OD_SKIP -1 // Skip this entry
-
- typedef struct _GL_Object
- {
- struct _GL_Object *next; // Next object
- short type; // Type of object
- char key; // Key equivalent
-
- unsigned char flags2; // Additional flags
-
- unsigned short id; // Object ID
- unsigned short control_id; // Object that this controls
- struct IBox dims; // Object dimensions
- ULONG flags; // Object flags
- char *text; // Text
- USHORT object_kind; // Object kind
-
- union
- {
- struct _gl_gadget
- {
- struct Gadget *context; // Context data for the gadget
- struct Gadget *gadget; // The gadget itself
- int components; // Number of component gadgets
- LONG data; // Some data for the gadget
- short choice_max; // Number of choices
- short choice_min; // Minimum choice
- struct Image *image; // Gadget image
- } gl_gadget;
-
- struct _gl_text
- {
- struct IBox text_pos; // Text position
- WORD base_pos; // Baseline position
- short uscore_pos; // Underscore position
- } gl_text;
-
- struct _gl_area
- {
- struct IBox text_pos; // Text position within area
- struct IBox area_pos; // Area position
- int frametype; // Frame type
- } gl_area;
-
- struct _gl_image
- {
- struct IBox image_pos; // Image position
- struct Image *image; // Image
- } gl_image;
- } gl_info;
-
- APTR memory; // Any other memory
-
- char *original_text; // Original text string
- char fg,bg; // Current pen colours
-
- ULONG data_ptr; // Pointer to other data
-
- struct TagItem *tags; // Copy of tags
-
- struct IBox char_dims; // Original dimensions
- struct IBox fine_dims;
- } GL_Object;
-
- typedef struct _ObjectList {
- GL_Object *firstobject; // First object
- struct TextAttr attr; // Font used
- struct Window *window; // Window used
- struct _ObjectList *next_list; // Next list
- } ObjectList;
-
- #define OBJECTF_NO_SELECT_NEXT (1<<0) // Don't select next field
- #define OBJECTF_PATH_FILTER (1<<1) // Filter path characters
- #define OBJECTF_SECURE (1<<2) // Hide string
- #define OBJECTF_INTEGER (1<<3) // Integer gadget
- #define OBJECTF_READ_ONLY (1<<4) // Read-only
- #define OBJECTF_HOTKEY (1<<5) // Hotkey string
-
- typedef struct {
- UBYTE md_Type; // Menu type
- ULONG md_ID; // Menu ID
- ULONG md_Name; // Menu name
- ULONG md_Flags; // Menu flags
- } MenuData;
-
- #define MENUFLAG_TEXT_STRING (1<<16) // Menu name is a real string
- #define MENUFLAG_COMM_SEQ (1<<17) // Give menu a command sequence
- #define MENUFLAG_AUTO_MUTEX (1<<18) // Automatic mutual exclusion
- #define MENUFLAG_USE_SEQ (1<<19) // Use command sequence supplied
-
- #define MENUFLAG_MAKE_SEQ(c) ((ULONG)(c)<<24)
- #define MENUFLAG_GET_SEQ(fl) ((char)((fl)>>24))
-
- #define NM_NEXT 10
- #define NM_BAR_LABEL (ULONG)NM_BARLABEL
-
- #define IS_GADTOOLS(obj) (BOOL)(obj->gl_info.gl_gadget.context)
-
- typedef struct
- {
- ULONG magic; // Magic ID
- struct Window *window; // Pointer back to window
- ULONG window_id; // User window ID
- struct MsgPort *app_port; // "Window's" application port
- } WindowID;
-
- #define WINDOW_MAGIC 0x83224948
- #define WINDOW_UNKNOWN (ULONG)-1
- #define WINDOW_UNDEFINED 0
-
- #define SET_WINDOW_ID(w,id) (((WindowID *)((w)->UserData))->window_id=(id))
-
- // Window types
- #define WINDOW_BACKDROP 0x4000001
- #define WINDOW_LISTER 0x4000002
- #define WINDOW_BUTTONS 0x4000004
- #define WINDOW_GROUP 0x4000008
- #define WINDOW_LISTER_ICONS 0x4000010
- #define WINDOW_FUNCTION 0x4000020 // not really a window
- #define WINDOW_START 0x4000040
-
- #define WINDOW_POPUP_MENU 0x0001200
- #define WINDOW_TEXT_VIEWER 0x0001300
-
- #define WINDOW_USER 0x2000000
-
- // This structure is pointed to by Window->UserData
- typedef struct
- {
- WindowID id; // Window ID information
-
- ObjectList *list; // Window object list
- struct FileRequester *request; // Window's file requester
- APTR visinfo; // Visual info
- struct DrawInfo *drawinfo; // Draw info
- struct DOpusLocale *locale; // Locale info
- struct MsgPort *window_port; // Window message port (if supplied)
- struct NewMenu *new_menu; // NewMenu structure allocated
- struct Menu *menu_strip; // Menu strip allocated
- struct Requester *busy_req; // Window busy requester
- ULONG data; // Window-specific data
- ULONG flags; // Flags
- APTR memory; // User memory pool, freed when window closes
-
- APTR hook_magic; // Magic for backfill hooks
- struct FontRequester *font_request; // Window's font requester
-
- ULONG userdata;
- struct TagItem *user_tags;
-
- struct List boopsi_list; // BOOPSI list
- } WindowData;
-
- #define FILE_GLASS_KIND 1000
- #define DIR_GLASS_KIND 1001
-
- #define GM_RESIZE (20)
-
- struct gpResize
- {
- ULONG MethodID;
- struct GadgetInfo *gpr_GInfo;
- struct RastPort *gpr_RPort;
- struct IBox gpr_Size;
- long gpr_Redraw;
- struct Window *gpr_Window;
- struct Requester *gpr_Requester;
- };
-
- // Custom tags
- #define GTCustom_LocaleLabels TAG_USER + 0 // Points to list of Locale IDs
- #define GTCustom_Image TAG_USER + 1 // Image for gadget
- #define GTCustom_CallBack TAG_USER + 2 // Tag ID and data filled in by callback
- #define GTCustom_LayoutRel TAG_USER + 3 // Layout relative to this object ID
- #define GTCustom_Control TAG_USER + 4 // Controls another gadget
- #define GTCustom_TextAttr TAG_USER + 6 // TextAttr to use
- #define GTCustom_MinMax TAG_USER + 24 // Minimum and maximum bounds
- #define GTCustom_ThinBorders TAG_USER + 27 // Gadget has thin borders
- #define GTCustom_LocaleKey TAG_USER + 29 // Key from locale string
- #define GTCustom_NoSelectNext TAG_USER + 31 // Don't select next field
- #define GTCustom_PathFilter TAG_USER + 32 // Filter path characters
- #define GTCustom_History TAG_USER + 33 // History
- #define GTCustom_CopyTags TAG_USER + 34 // Copy tags
- #define GTCustom_FontPens TAG_USER + 35 // Place to store pens and style
- #define GTCustom_FontPenCount TAG_USER + 36 // Number of pens for font requester
- #define GTCustom_FontPenTable TAG_USER + 37 // Table of pens for font requester
- #define GTCustom_Bold TAG_USER + 38 // Bold pen
- #define GTCustom_Secure TAG_USER + 39 // Secure string field
- #define GTCustom_Integer TAG_USER + 40 // Integer gadget
- #define GTCustom_TextPlacement TAG_USER + 41 // Position of text
- #define GTCustom_NoGhost TAG_USER + 42 // Disable without ghosting
- #define GTCustom_Style TAG_USER + 44 // Pen styles
- #define GTCustom_FrameFlags TAG_USER + 45 // Frame flags
- #define GTCustom_ChangeSigTask TAG_USER + 46 // Task to signal on change
- #define GTCustom_ChangeSigBit TAG_USER + 47 // Signal bit to use
- #define GTCustom_LayoutPos TAG_USER + 49 // Use with the POSFLAGs
- #define GTCustom_Borderless TAG_USER + 50 // Borderless
- #define GTCustom_Justify TAG_USER + 51 // Justification
-
- #define LAYOUTF_SAME_HEIGHT (1<<0)
- #define LAYOUTF_SAME_WIDTH (1<<1)
- #define LAYOUTF_TOP_ALIGN (1<<2)
- #define LAYOUTF_BOTTOM_ALIGN (1<<3)
- #define LAYOUTF_LEFT_ALIGN (1<<4)
- #define LAYOUTF_RIGHT_ALIGN (1<<5)
-
- #define JUSTIFY_LEFT 0
- #define JUSTIFY_RIGHT 1
- #define JUSTIFY_CENTER 2
-
- #define DIA_Type TAG_USER + 5 // Image type
- #define DIA_FrontPen TAG_USER + 7 // Image front pen
-
- #define IM_ARROW_UP 0
- #define IM_ARROW_DOWN 1
- #define IM_CHECK 2
- #define IM_DRAWER 3
- #define IM_BORDER_BOX 4
- #define IM_BBOX 5
- #define IM_ICONIFY 6
- #define IM_CROSS 7
- #define IM_LOCK 8
-
- #define OPUS_LISTVIEW_KIND 127 // Custom listview gadget
- #define FILE_BUTTON_KIND 126 // File button gadget
- #define DIR_BUTTON_KIND 125 // Directory button gadget
- #define FONT_BUTTON_KIND 124 // Font button gadget
- #define FIELD_KIND 123 // Text field (no editing)
- #define FRAME_KIND 122 // Frame
- #define HOTKEY_KIND 121 // Hotkey field
-
- // Listview tags
- #define DLV_TextAttr TAG_USER + 6 // TextAttr to use
- #define DLV_ScrollUp TAG_USER + 7 // Scroll list up
- #define DLV_ScrollDown TAG_USER + 8 // Scroll list down
- #define DLV_SelectPrevious TAG_USER + 11 // Select previous item
- #define DLV_SelectNext TAG_USER + 12 // Select next item
- #define DLV_Labels GTLV_Labels // Labels
- #define DLV_Top GTLV_Top // Top item
- #define DLV_MakeVisible GTLV_MakeVisible // Make visible
- #define DLV_Selected GTLV_Selected // Selected
- #define DLV_ScrollWidth GTLV_ScrollWidth // Scroller width
- #define DLV_ShowSelected GTLV_ShowSelected // Show selected
- #define DLV_Check TAG_USER + 10 // Check selection
- #define DLV_Highlight TAG_USER + 14 // Highlight selection
- #define DLV_MultiSelect TAG_USER + 9 // Multi-selection
- #define DLV_ReadOnly GTLV_ReadOnly // Read only
- #define DLV_Lines TAG_USER + 13 // Visible lines (get only)
- #define DLV_ShowChecks TAG_USER + 15 // Show checkmarks
- #define DLV_Flags TAG_USER + 16 // Layout flags
- #define DLV_NoScroller TAG_USER + 17 // No scroller necessary
- #define DLV_TopJustify TAG_USER + 18 // Top-justify items
- #define DLV_RightJustify TAG_USER + 19 // Right-justify items
- #define DLV_DragNotify TAG_USER + 20 // Notify of drags
- #define DLV_GetLine TAG_USER + 25 // Get line from coordinate
- #define DLV_DrawLine TAG_USER + 26 // Draw a line from the listview
- #define DLV_Object TAG_USER + 27 // Pointer to object
- #define DLV_DoubleClick TAG_USER + 28 // Indicates double-click
- #define DLV_ShowFilenames TAG_USER + 48 // Show filenames only
-
- typedef struct
- {
- struct RastPort *rp;
- struct DrawInfo *drawinfo;
- struct Node *node;
- unsigned short line;
- struct IBox box;
- } ListViewDraw;
-
- // Listview node data
- #define lve_Flags ln_Type // Listview entry flags
- #define lve_Pen ln_Pri // Listview entry pen
- #define LVEF_SELECTED (1<<0) // Entry is selected
- #define LVEF_USE_PEN (1<<1) // Use pen to render entry
- #define LVEF_TEMP (1<<2) // Temporary flag for something
-
- // File button tags
- #define DFB_DefPath TAG_USER + 19 // Default path
-
- // Palette tags
- #define DPG_Pen TAG_USER + 21 // Ordinal selected pen
- #define DPG_SelectPrevious TAG_USER + 22 // Select previous pen
- #define DPG_SelectNext TAG_USER + 23 // Select next pen
-
- // Some useful macros
- #define GADGET(obj) (obj->gl_info.gl_gadget.gadget)
- #define AREA(obj) obj->gl_info.gl_area
- #define DATA(win) ((WindowData *)win->UserData)
- #define WINFLAG(win) (DATA(win)->flags)
- #define WINMEMORY(win) (DATA(win)->memory)
- #define WINREQUESTER(win) (DATA(win)->request)
- #define OBJLIST(win) (DATA(win)->list)
- #define DRAWINFO(win) (DATA(win)->drawinfo)
- #define VISINFO(win) (DATA(win)->visinfo)
- #define GADSPECIAL(list,id) (GADGET(L_GetObject(list,id))->SpecialInfo)
- #define GADSTRING(list,id) ((struct StringInfo *)GADSPECIAL(list,id))->Buffer
- #define GADNUMBER(list,id) ((struct StringInfo *)GADSPECIAL(list,id))->LongInt
- #define GADSEL(list,id) (GADGET(L_GetObject(list,id))->Flags&GFLG_SELECTED)
- #define GADGET_SPECIAL(list,id) (GADGET(GetObject(list,id))->SpecialInfo)
- #define GADGET_STRING(list,id) ((struct StringInfo *)GADGET_SPECIAL(list,id))->Buffer
- #define GADGET_NUMBER(list,id) ((struct StringInfo *)GADGET_SPECIAL(list,id))->LongInt
- #define GADGET_SEL(list,id) (GADGET(GetObject(list,id))->Flags&GFLG_SELECTED)
- #define CFGDATA(win) (((WindowData *)win->UserData)->data)
-
- #define MENUID(menu) ((ULONG)GTMENUITEM_USERDATA(menu))
-
- // Layout functions
- struct Window *OpenConfigWindow(NewConfigWindow *);
- void CloseConfigWindow(struct Window *);
-
- struct IntuiMessage *GetWindowMsg(struct MsgPort *);
- void ReplyWindowMsg(struct IntuiMessage *);
-
- ObjectList *AddObjectList(struct Window *,ObjectDef *);
- void FreeObjectList(ObjectList *);
- GL_Object *GetObject(ObjectList *,ULONG);
- void SetGadgetValue(ObjectList *,USHORT,ULONG);
- long GetGadgetValue(ObjectList *,USHORT);
- void SetGadgetChoices(ObjectList *list,ULONG id,APTR choices);
- BOOL CheckObjectArea(GL_Object *,long,long);
- void DisableObject(ObjectList *,ULONG,BOOL);
-
- void DisplayObject(struct Window *,GL_Object *,long,long,char *);
- void SetWindowBusy(struct Window *);
- void ClearWindowBusy(struct Window *);
- long BoundsCheckGadget(ObjectList *,ULONG,long,long);
- BOOL GetObjectRect(ObjectList *,ULONG,struct Rectangle *);
- void SetConfigWindowLimits(struct Window *,ConfigWindow *,ConfigWindow *);
- void LayoutResize(struct Window *);
-
- void AddWindowMenus(struct Window *,MenuData *);
- void FreeWindowMenus(struct Window *);
-
- void StartRefreshConfigWindow(struct Window *,long);
- void EndRefreshConfigWindow(struct Window *);
-
- struct Menu *BuildMenuStrip(MenuData *,struct DOpusLocale *);
- struct MenuItem *FindMenuItem(struct Menu *,USHORT);
- void SetWindowID(struct Window *,WindowID *,ULONG,struct MsgPort *);
- ULONG GetWindowID(struct Window *);
- struct MsgPort *GetWindowAppPort(struct Window *);
-
-
- #define RECTWIDTH(rect) (1+(rect)->MaxX-(rect)->MinX)
- #define RECTHEIGHT(rect) (1+(rect)->MaxY-(rect)->MinY)
-
- #endif
-