/* Routines to create various types of gadgets, menus, etc
   Could do with a few comments and some documentation ...
   This code is placed in the public domain.
   David Gay, 1989.
*/

#ifndef GADGETS_H
#define GADGETS_H

typedef long boolean;

struct Memory *NewMemory(void);
void Free(struct Memory *);
void ModSys(long, long, long, struct TextAttr *);
void SetDepth(long);

struct Requester *InitReq(long, long, long, long, struct Memory *);
boolean SetReqBorder(struct Requester *, long, struct Memory *);
void SetReqGadgets(struct Requester *, struct Gadget *);
void SetReqText(struct Requester *, struct IntuiText *);

struct Gadget *AddBox(struct Gadget **, long, char *, long, long, long, long, l
ong, long, long, struct Memory *);
struct Gadget *AddOption(struct Gadget **, long, char *, long, long, long, long
, long, long, long, struct Memory *);
struct Gadget *AddRadio(struct Gadget **, long, char *, long, long, long, long,
 long, long, long, long, struct Memory *);
struct Gadget *AddText(struct Gadget **gl, long id, char *text, long above, cha
r *buf,
                       long maxlen, long undo, long flags, long act,
                       long x, long y, long w, long h, long noborder, struct Me
mory *mem);
struct Gadget *AddSlider(struct Gadget **gl, long id, long act,
                         long x, long y, long w, long h, long vert,
                         long knobsize, struct Memory *mem);
struct ListInfo *AddList(struct Gadget **gl, long id, char *text, struct List *
list, char *buf, long len, long flags, long act, long x, long y, long w, long h,
 long noborder, struct Memory *mem);
long ModifyList(struct Gadget *gg, struct Requester *req, struct Window *win, l
ong up);
long ChangeList(struct ListInfo *li, struct List *list, struct Requester *req,
struct Window *win);
struct Gadget *ListStr(struct ListInfo *li);
void AppendGadget(struct Gadget **, struct Gadget *);

struct IntuiText *AddIntuiText(struct IntuiText **, char *, long, long, struct
Memory *);
void AppendText(struct IntuiText **, struct IntuiText *);

struct Border *AddLineBorder(struct Border **, long, long, long, long, struct M
emory *);
struct Border *AddRectBorder(struct Border **, long, long, long, long, struct M
emory *);
void AppendBorder(struct Border **, struct Border *);

void DrawRect(struct RastPort *, long, long, long, long);
void DrawRoundedRect(struct RastPort *, long, long, long, long);
void FillRoundedRect(struct RastPort *, long, long, long, long);

struct Menu *AddMenu(struct Menu **ml, struct Screen *scr, char *text, long fla
gs, struct Memory *mem);
struct MenuItem *AddItem(struct Menu *menu, char *text, long flags, long mutex,
 long cmd, long sub, struct Memory *mem);
struct MenuItem *AddRule(struct Menu *menu, struct Memory *mem);
struct MenuItem *AddSub(struct MenuItem *item, char *text, long flags, long mut
ex, long cmd, struct Memory *mem);

#endif

