123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207 |
- #pragma src "/sys/src/libcontrol"
- #pragma lib "libcontrol.a"
- #pragma varargck argpos ctlprint 2
- #pragma varargck argpos _ctlprint 2
- typedef struct Control Control;
- typedef struct Controlset Controlset;
- typedef struct CParse CParse;
- typedef struct CCache CCache;
- typedef struct CCache CImage;
- typedef struct CCache CFont;
- enum /* types */
- {
- Ctlunknown,
- Ctlbox,
- Ctlbutton,
- Ctlentry,
- Ctlkeyboard,
- Ctllabel,
- Ctlmenu,
- Ctlradio,
- Ctlscribble,
- Ctlslider,
- Ctltabs,
- Ctltext,
- Ctltextbutton,
- Ctlgroup, // divider between controls and metacontrols
- Ctlboxbox,
- Ctlcolumn,
- Ctlrow,
- Ctlstack,
- Ctltab,
- Ntypes,
- };
- struct Controlset
- {
- Control *controls;
- Image *screen;
- Control *actives;
- Control *focus;
- Channel *ctl;
- Channel *data; /* currently only for sync */
- Channel *kbdc;
- Channel *mousec;
- Channel *resizec;
- Channel *resizeexitc;
- Channel *csexitc;
- Keyboardctl *keyboardctl; /* will be nil if user supplied keyboard */
- Mousectl *mousectl; /* will be nil if user supplied mouse */
- int clicktotype; /* flag */
- };
- struct Control
- {
- /* known to client */
- char *name;
- Rectangle rect;
- Rectangle size; /* minimum/maximum Dx, Dy (not a rect) */
- Channel *event; /* chan(char*) to client */
- Channel *data; /* chan(char*) to client */
- /* internal to control set */
- int type;
- int hidden; /* hide hides, show unhides (and redraws) */
- Controlset *controlset;
- Image *screen; /* where Control appears */
- char *format; /* used to generate events */
- char wevent; /* event channel rewired */
- char wdata; /* data channel rewired */
- /* method table */
- void (*ctl)(Control*, CParse*);
- void (*mouse)(Control*, Mouse*);
- void (*key)(Control*, Rune*);
- void (*exit)(Control*);
- void (*setsize)(Control*);
- void (*activate)(Control*, int);
- Control *nextactive;
- Control *next;
- };
- struct CCache
- {
- union{
- Image *image;
- Font *font;
- };
- char *name;
- int index; /* entry number in cache */
- int ref; /* one for client, plus one for each use */
- };
- struct CParse
- {
- char str[256];
- char *sender;
- char *receiver;
- int cmd;
- char *pargs[32];
- int iargs[32];
- char **args;
- int nargs;
- };
- enum /* alignments */
- {
- Aupperleft = 0,
- Auppercenter,
- Aupperright,
- Acenterleft,
- Acenter,
- Acenterright,
- Alowerleft,
- Alowercenter,
- Alowerright,
- Nalignments
- };
- enum
- {
- _Ctlmaxsize = 10000,
- };
- extern char *ctltypenames[];
- /* Functions used internally */
- void _ctladdgroup(Control*, Control*);
- void _ctlargcount(Control*, CParse*, int);
- Control* _createctl(Controlset*, char*, uint, char*);
- Rune* _ctlrunestr(char*);
- char* _ctlstrrune(Rune*);
- void _ctlputsnarf(Rune*);
- Rune* _ctlgetsnarf(void);
- int _ctlalignment(char*);
- Point _ctlalignpoint(Rectangle, int, int, int);
- void _ctlfocus(Control*, int);
- void _activategroup(Control*);
- void _deactivategroup(Control*);
- int _ctllookup(char *s, char *tab[], int ntab);
- void _ctlprint(Control *c, char *fmt, ...);
- /* images */
- CImage* _getctlimage(char*);
- void _setctlimage(Control*, CImage**, char*);
- void _putctlimage(CImage*);
- CFont* _getctlfont(char*);
- void _putctlfont(CFont*);
- /* fonts */
- CImage* _getctlfont(char*);
- void _setctlfont(Control*, CImage**, char*);
- void _putctlfont(CImage*);
- CFont* _getctlfont(char*);
- void _putctlfont(CFont*);
- /* Public functions */
- /* images */
- int namectlimage(Image*, char*);
- int freectlimage(char*);
- /* fonts */
- int namectlfont(Font*, char*);
- int freectlfont(char*);
- /* commands */
- int ctlprint(Control*, char*, ...);
- /* general */
- void initcontrols(void);
- Controlset* newcontrolset(Image*, Channel*, Channel*, Channel*);
- void closecontrolset(Controlset*);
- void closecontrol(Control*);
- void ctlerror(char*, ...);
- Control* controlcalled(char*);
- /* publicly visible error-checking allocation routines */
- void* ctlmalloc(uint);
- void* ctlrealloc(void*, uint);
- char* ctlstrdup(char*);
- /* creation */
- void controlwire(Control*, char*, Channel*);
- void activate(Control*);
- void deactivate(Control*);
- Control* createbox(Controlset*, char*);
- Control* createbutton(Controlset*, char*);
- Control* createcolumn(Controlset*, char*);
- Control* createboxbox(Controlset*, char*);
- Control* createentry(Controlset*, char*);
- Control* createkeyboard(Controlset*, char*);
- Control* createlabel(Controlset*, char*);
- Control* createmenu(Controlset*, char*);
- Control* createradiobutton(Controlset*, char*);
- Control* createrow(Controlset*, char*);
- Control* createscribble(Controlset*, char*);
- Control* createslider(Controlset*, char*);
- Control* createstack(Controlset*, char*);
- Control* createtab(Controlset*, char*);
- Control* createtext(Controlset*, char*);
- Control* createtextbutton(Controlset*, char*);
- /* user-supplied */
- void resizecontrolset(Controlset*);
- int _ctlsnarffd;
- char *alignnames[];
- int ctldeletequits;
|