diff options
author | Taru Karttunen <taruti@taruti.net> | 2011-03-30 16:47:56 +0300 |
---|---|---|
committer | Taru Karttunen <taruti@taruti.net> | 2011-03-30 16:47:56 +0300 |
commit | c558a99e0be506a9abdf677f0ca4490644e05fc1 (patch) | |
tree | 17aef678ad05a32ef96ce8385703cb3fe089a5c7 /sys/include/control.h | |
parent | e5888a1ffdae813d7575f5fb02275c6bb07e5199 (diff) |
Import sources from 2011-03-30 iso image - sys/include
Diffstat (limited to 'sys/include/control.h')
-rwxr-xr-x | sys/include/control.h | 213 |
1 files changed, 213 insertions, 0 deletions
diff --git a/sys/include/control.h b/sys/include/control.h new file mode 100755 index 000000000..29f2e6548 --- /dev/null +++ b/sys/include/control.h @@ -0,0 +1,213 @@ +#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, + Ctltextbutton3, + 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*); +Control* createtextbutton3(Controlset*, char*); + +/* user-supplied */ +void resizecontrolset(Controlset*); + +int _ctlsnarffd; +char *alignnames[]; +int ctldeletequits; |