1 #ifndef GADTOOLS_INTERN_H
2 #define GADTOOLS_INTERN_H
5 Copyright © 1995-2011, The AROS Development Team. All rights reserved.
8 Desc: Internal definitions for gadtools.library.
12 #ifndef EXEC_LIBRARIES_H
13 # include <exec/libraries.h>
15 #ifndef EXEC_SEMAPHORES_H
16 # include <exec/semaphores.h>
21 #ifndef PROTO_GRAPHICS_H
22 # include <proto/graphics.h>
24 #ifndef GRAPHICS_GFXBASE_H
25 # include <graphics/gfxbase.h>
27 #ifndef PROTO_INTUITION_H
28 # include <proto/intuition.h>
30 #ifndef INTUITION_CLASSES_H
31 # include <intuition/classes.h>
33 #ifndef INTUITION_INTUITIONBASE_H
34 # include <intuition/intuitionbase.h>
36 #ifndef INTUITION_SCREENS_H
37 # include <intuition/screens.h>
39 #ifndef PROTO_UTILITY_H
40 # include <proto/utility.h>
42 #ifndef LIBRARIES_GADTOOLS_H
43 # include <libraries/gadtools.h>
45 #ifndef GADGETS_AROSMX_H
46 # include <gadgets/arosmx.h>
49 /* Needed for aros_print_not_implemented macro */
50 #include <aros/debug.h>
51 #include <aros/libcall.h>
52 #include <aros/asmcall.h>
54 /****************************************************************************************/
58 /* Some external stuff (gadtools_init.c) */
59 struct GadToolsBase_intern
; /* prerefrence */
61 /* Internal prototypes */
62 struct IntuiText
*makeitext(struct GadToolsBase_intern
*GadToolsBase
,
64 struct TagItem
*taglist
);
65 void freeitext(struct GadToolsBase_intern
*GadToolsBase
,
66 struct IntuiText
*itext
);
68 BOOL
renderlabel(struct GadToolsBase_intern
*GadToolsBase
,
69 struct Gadget
*gad
, struct RastPort
*rport
, LONG labelplace
);
70 void DoDisabledPattern(struct RastPort
*rp
, WORD x1
, WORD y1
, WORD x2
, WORD y2
,
71 WORD pen
, struct GadToolsBase_intern
*GadToolsBase
);
73 /****************************************************************************************/
75 struct Gadget
*makebutton(struct GadToolsBase_intern
*GadToolsBase
,
76 struct TagItem stdgadtags
[],
77 struct VisualInfo
*vi
,
78 struct TagItem
*taglist
);
80 struct Gadget
*makecheckbox(struct GadToolsBase_intern
*GadToolsBase
,
81 struct TagItem stdgadtags
[],
82 struct VisualInfo
*vi
,
83 struct TagItem
*taglist
);
85 struct Gadget
*makecycle(struct GadToolsBase_intern
*GadToolsBase
,
86 struct TagItem stdgadtags
[],
87 struct VisualInfo
*vi
,
88 struct TextAttr
*tattr
,
89 struct TagItem
*taglist
);
91 struct Gadget
*makemx(struct GadToolsBase_intern
*GadToolsBase
,
92 struct TagItem stdgadtags
[],
93 struct VisualInfo
*vi
,
94 struct TextAttr
*tattr
,
95 struct TagItem
*taglist
);
97 struct Gadget
*makepalette(struct GadToolsBase_intern
*GadToolsBase
,
98 struct TagItem stdgadtags
[],
99 struct VisualInfo
*vi
,
100 const struct TagItem
*taglist
);
102 struct Gadget
*maketext(struct GadToolsBase_intern
*GadToolsBase
,
103 struct TagItem stdgadtags
[],
104 struct VisualInfo
*vi
,
105 struct TextAttr
*tattr
,
106 const struct TagItem
*taglist
);
108 struct Gadget
*makenumber(struct GadToolsBase_intern
*GadToolsBase
,
109 struct TagItem stdgadtags
[],
110 struct VisualInfo
*vi
,
111 struct TextAttr
*tattr
,
112 const struct TagItem
*taglist
);
115 struct Gadget
*makeslider(struct GadToolsBase_intern
*GadToolsBase
,
116 struct TagItem stdgadtags
[],
117 struct VisualInfo
*vi
,
118 struct TextAttr
*tattr
,
119 const struct TagItem
*taglist
);
121 struct Gadget
*makescroller(struct GadToolsBase_intern
*GadToolsBase
,
122 struct TagItem stdgadtags
[],
123 struct VisualInfo
*vi
,
124 const struct TagItem
*taglist
);
126 struct Gadget
*makestring(struct GadToolsBase_intern
*GadToolsBase
,
127 struct TagItem stdgadtags
[],
128 struct VisualInfo
*vi
,
129 struct TextAttr
*tattr
,
130 const struct TagItem
*taglist
);
132 struct Gadget
*makeinteger(struct GadToolsBase_intern
*GadToolsBase
,
133 struct TagItem stdgadtags
[],
134 struct VisualInfo
*vi
,
135 struct TextAttr
*tattr
,
136 const struct TagItem
*taglist
);
138 struct Gadget
*makelistview(struct GadToolsBase_intern
*GadToolsBase
,
139 struct TagItem stdgadtags
[],
140 struct VisualInfo
*vi
,
141 struct TextAttr
*tattr
,
142 const struct TagItem
*taglist
);
144 struct Gadget
*makegeneric(struct GadToolsBase_intern
*GadToolsBase
,
145 struct TagItem stdgadtags
[],
146 struct VisualInfo
*vi
,
147 struct TextAttr
*tattr
,
148 struct TagItem
*taglist
);
150 /****************************************************************************************/
152 /* Tags for the private gadtools classes */
154 #define GT_Dummy (TAG_USER)
156 #define GTA_Text_DispFunc (GT_Dummy + 1)
157 #define GTA_Text_Format (GT_Dummy + 2)
158 #define GTA_Arrow_Type (GT_Dummy + 3)
159 #define GTA_Arrow_Pulse (GT_Dummy + 4)
160 #define GTA_Arrow_Scroller (GT_Dummy + 5)
161 #define GTA_Scroller_Dec (GT_Dummy + 6)
162 #define GTA_Scroller_Inc (GT_Dummy + 7)
163 #define GTA_Listview_Scroller (GT_Dummy + 8)
164 #define GTA_GadgetKind (GT_Dummy + 9)
165 #define GTA_ChildGadgetKind (GT_Dummy + 10)
166 #define GTA_Scroller_ScrollerKind (GT_Dummy + 11)
167 #define GTA_Scroller_ArrowKind (GT_Dummy + 12)
168 #define GTA_Scroller_Arrow1 (GT_Dummy + 13)
169 #define GTA_Scroller_Arrow2 (GT_Dummy + 14)
170 #define GTA_Text_ParentGadget (GT_Dummy + 15)
172 /****************************************************************************************/
174 /* private gadget kinds */
176 #define _ARROW_KIND 100
178 /****************************************************************************************/
180 /* Some listview specific constants */
181 #define LV_BORDER_X 4
182 #define LV_BORDER_Y 3
184 #define LV_DEF_INTERNAL_SPACING 0
186 /****************************************************************************************/
188 /* Private MX tags */
190 #define GTMX_TickLabelPlace AROSMX_TickLabelPlace
191 #define GTMX_TickHeight AROSMX_TickHeight
193 /****************************************************************************************/
195 #define NEWMENUCODE TRUE
198 struct Menu
* makemenutitle(struct NewMenu
* newmenu
,
199 UBYTE
**MyMenuMemPtr
,
200 struct TagItem
* taglist
);
202 struct MenuItem
* makemenuitem(struct NewMenu
* newmenu
,
203 UBYTE
**MyMenuMemPtr
,
204 struct Image
***MyBarTablePtr
,
206 struct TagItem
* taglist
,
207 struct GadToolsBase_intern
* GadToolsBase
);
209 ULONG
getmenutitlesize(struct NewMenu
* newmenu
,
210 struct TagItem
* taglist
);
211 ULONG
getmenuitemsize(struct NewMenu
* newmenu
,
213 struct TagItem
* taglist
,
214 struct GadToolsBase_intern
* GadToolsBase
);
218 struct Menu
* makemenutitle(struct NewMenu
* newmenu
,
219 struct TagItem
* taglist
);
221 struct MenuItem
* makemenuitem(struct NewMenu
* newmenu
,
223 struct TagItem
* taglist
,
224 struct GadToolsBase_intern
* GadToolsBase
);
226 void appendmenu(struct Menu
* firstmenu
,
227 struct Menu
* lastmenu
);
229 void appenditem(struct Menu
* curmenu
,
230 struct MenuItem
* item
);
232 void appendsubitem(struct MenuItem
* curitem
,
233 struct MenuItem
* subitem
);
235 void freeitems(struct MenuItem
* mi
, struct GadToolsBase_intern
* GadToolsBase
);
237 BOOL
layoutmenuitems(struct MenuItem
* menuitem
,
238 struct VisualInfo
* vi
,
239 struct TagItem
* taglist
,
240 struct GadToolsBase_intern
* GadToolsBase
);
242 BOOL
layoutsubitems(struct MenuItem
* motheritem
,
243 struct VisualInfo
* vi
,
244 struct TagItem
* taglist
,
245 struct GadToolsBase_intern
* GadToolsBase
);
247 BOOL
is_menubarlabelclass_image(struct Image
*im
,
248 struct GadToolsBase_intern
*GadToolsBase
);
250 /****************************************************************************************/
252 struct GadToolsBase_intern
259 Class
* scrollerclass
;
262 Class
* listviewclass
;
263 Class
* checkboxclass
;
266 Class
* paletteclass
;
268 /* Semaphore to protect the bevel object. */
269 struct SignalSemaphore bevelsema
;
270 /* Actually an Object *. The image used for bevel boxes. */
271 struct Image
* bevel
;
273 /* RenderHook for GTListView class */
274 struct Hook lv_RenderHook
;
276 /* Seglist pointer */
279 /* Required libraies */
280 APTR gt_IntuitionBase
;
286 /* extended intuimsg as used by GT_GetIMsg, GT_FilterIMsg, ... */
288 struct GT_IntuiMessage
290 struct ExtIntuiMessage imsg
;
291 struct IntuiMessage
* origmsg
;
295 #define VI(x) ((struct VisualInfo *)x)
299 struct Screen
* vi_screen
;
300 struct DrawInfo
* vi_dri
;
303 /* dummy gadget created by CreateContext */
305 struct GT_ContextGadget
307 struct ExtGadget gad
;
310 struct GT_IntuiMessage gtmsg
;
311 struct Gadget
*activegadget
;
312 struct Gadget
*parentgadget
;
315 IPTR childgadgetkind
;
322 struct GT_GenericGadget
324 struct ExtGadget gad
;
327 struct IntuiText
*itext
;
330 /****************************************************************************************/
332 #define CONTEXT_MAGIC ((IPTR)0x11223344)
333 #define CONTEXT_MAGIC2 ((IPTR)0x44332211)
335 #define GENERIC_MAGIC ((IPTR)0x11335577)
336 #define GENERIC_MAGIC2 ((IPTR)0x77553311)
338 /****************************************************************************************/
345 #define TAG_LabelPlace 5
346 #define TAG_Previous 6
348 #define TAG_DrawInfo 8
349 #define TAG_UserData 9
354 #define TAG_TextAttr 1
355 #define TAG_NewLookMenus 2
356 #define TAG_CheckMark 3
357 #define TAG_AmigaKey 4
358 #define TAG_FrontPen 5
360 #define BORDERPROPSPACINGX 2
361 #define BORDERPROPSPACINGY 2
363 #define BORDERSTRINGSPACINGX 4
364 #define BORDERSTRINGSPACINGY 2
366 #define LV_SHOWSELECTED_NONE ((struct Gadget *)~0)
368 /****************************************************************************************/
370 #define GTB(gtb) ((struct GadToolsBase_intern *)gtb)
372 extern struct ExecBase
*SysBase
;
373 /* FIXME: Remove these #define xxxBase hacks
374 Do not use this in new code !
376 #define IntuitionBase (GTB(GadToolsBase)->gt_IntuitionBase)
377 #define UtilityBase (GTB(GadToolsBase)->gt_UtilityBase)
378 #define GfxBase (GTB(GadToolsBase)->gt_GfxBase)
379 #define LayersBase (GTB(GadToolsBase)->gt_LayersBase)
383 #define DeinitRastPort(x) ((void)0)
385 #define DoMethod(MyObject, tags...) \
386 ({ULONG _tags[] = { tags }; DoMethodA((MyObject), (APTR)_tags);})
388 #define CoerceMethod(MyClass, MyObject, tags...) \
389 ({ULONG _tags[] = { tags }; CoerceMethodA((MyClass), (MyObject), (APTR)_tags);})
391 #define DoSuperMethod(MyClass, MyObject, tags...) \
392 ({ULONG _tags[] = { tags }; DoSuperMethodA((MyClass), (MyObject), (APTR)_tags);})
394 /********************************************************************************/
395 /* imageclass.h AROS extensions */
397 #define SYSIA_WithBorder IA_FGPen /* default: TRUE */
398 #define SYSIA_Style IA_BGPen /* default: SYSISTYLE_NORMAL */
400 #define SYSISTYLE_NORMAL 0
401 #define SYSISTYLE_GADTOOLS 1 /* to get arrow images in gadtools look */
403 /********************************************************************************/
404 /* gadgetclass.h AROS extenstions */
406 /* This method is invoked to learn about the sizing requirements of your class,
407 before an object is created. This is AROS specific. */
411 STACKED ULONG MethodID
; /* GM_DOMAIN */
412 STACKED
struct GadgetInfo
* gpd_GInfo
; /* see <intuition/cghooks.h> */
413 STACKED
struct RastPort
* gpd_RPort
; /* RastPort to calculate dimensions for. */
414 STACKED LONG gpd_Which
; /* see below */
415 STACKED
struct IBox gpd_Domain
; /* Resulting domain. */
416 STACKED
struct TagItem
* gpd_Attrs
; /* Additional attributes. None defined,
420 /********************************************************************************/
423 #define GDOMAIN_MINIMUM 0 /* Calculate minimum size. */
424 #define GDOMAIN_NOMINAL 1 /* Calculate nominal size. */
425 #define GDOMAIN_MAXIMUM 2 /* Calculate maximum size. */
427 /********************************************************************************/
429 /* [IS.] (struct TextAttr *) TextAttr structure (see <graphics/text.h>) to
430 use for gadget rendering. This attribute is not directly supported by
432 #define GA_TextAttr (GA_Dummy + 40)
434 /* [I..] (LONG) Choose the placing of the label. GadgetClass does not support
435 this directly. Its subclasses have to take care of that. For possible
437 #define GA_LabelPlace (GA_Dummy + 100)
440 /* Placetext values for GA_LabelPlace. */
441 #define GV_LabelPlace_In 1
442 #define GV_LabelPlace_Left 2
443 #define GV_LabelPlace_Right 3
444 #define GV_LabelPlace_Above 4
445 #define GV_LabelPlace_Below 5
447 /********************************************************************************/
449 #define MENUBARLABELCLASS "menubarlabelclass"
451 #define GTYP_GADTOOLS 0x0100
453 #define CORRECT_LISTVIEWHEIGHT TRUE
457 #define CORRECT_LISTVIEWHEIGHT FALSE
461 #define DEBUG_CREATECONTEXT(x) ;
462 #define DEBUG_CREATEGADGETA(x) ;
463 #define DEBUG_CREATEMENUSA(x) ;
464 #define DEBUG_CREATELISTVIEW(x) ;
465 #define DEBUG_CREATESCROLLER(x) ;
466 #define DEBUG_FREEGADGETS(x) ;
467 #define DEBUG_DUMPMENUS(x) ;
468 #define DEBUG_ALLOCMENUS(x) ;
469 #define DEBUG_FREEMENUS(x) ;
470 #define DEBUG_REFRESHWINDOW(x) ;
472 void DumpMenu(struct Menu
*menu
);
474 /* Structures for the class private data */
479 struct DrawInfo
*dri
;
486 struct DrawInfo
*dri
;
487 struct Gadget
*parentgadget
;
495 struct TextFont
*font
;
496 UWORD maxnumberlength
;
498 IPTR (*dispfunc
)(struct Gadget
*, WORD
);
514 /* GTScroller class */
518 struct Gadget
*arrow1
;
519 struct Gadget
*arrow2
;
538 struct TextFont
*font
;
543 /* GTListView class */
546 struct Hook
*ld_CallBack
;
547 struct List
*ld_Labels
;
548 struct DrawInfo
*ld_Dri
;
549 struct TextFont
*ld_Font
;
552 struct Gadget
*ld_ShowSelected
;
558 /* The number of first damaged entry, counting from first visible.
559 ** A value o -1 means "nothing has to be redrawn"
561 WORD ld_FirstDamaged
;
564 /* Number of entries the listview should scroll in GM_RENDER.
565 ** Negative valu means scroll up.
567 WORD ld_ScrollEntries
;
574 /* GTCheckBox class */
577 struct DrawInfo
*dri
;
585 struct TextFont
*font
;
595 struct DrawInfo
*dri
;
596 struct TextAttr
*tattr
;
597 struct Image
*mximage
;
598 struct TextFont
*font
;
599 struct Rectangle bbox
;
601 ULONG active
, newactive
; /* The active tick and the tick to be activated */
602 ULONG numlabels
; /* The number of labels */
603 LONG labelplace
, ticklabelplace
;
609 /* GTPalette class */
613 UBYTE
*pd_ColorTable
;
615 /* For state info, to know what selected entry to delete in GM_RENDER, GREDRAW_UPDATE */
618 UBYTE pd_ColorOffset
;
622 struct IBox pd_GadgetBox
; /* Box surrounding whole palette */
623 struct IBox pd_PaletteBox
; /* Box surrounding palette */
624 struct IBox pd_IndicatorBox
; /* Box surrounding indicator */
631 /* This one is used to backup pd_Color if left is clicked. This
632 ** way the old state can be restored if the left is released
633 ** outside the gadget.
635 UBYTE pd_ColorBackup
;
636 struct TextAttr
*pd_TAttr
;
642 #endif /* GADTOOLS_INTERN_H */