1 #pragma src "/sys/src/libcontrol"
2 #pragma lib "libcontrol.a"
4 #pragma varargck argpos ctlprint 2
5 #pragma varargck argpos _ctlprint 2
7 typedef struct Control Control;
8 typedef struct Controlset Controlset;
9 typedef struct CParse CParse;
10 typedef struct CCache CCache;
11 typedef struct CCache CImage;
12 typedef struct CCache CFont;
30 Ctlgroup, /* divider between controls and metacontrols */
46 Channel *data; /* currently only for sync */
52 Keyboardctl *keyboardctl; /* will be nil if user supplied keyboard */
53 Mousectl *mousectl; /* will be nil if user supplied mouse */
54 int clicktotype; /* flag */
62 Rectangle size; /* minimum/maximum Dx, Dy (not a rect) */
63 Channel *event; /* chan(char*) to client */
64 Channel *data; /* chan(char*) to client */
66 /* internal to control set */
68 int hidden; /* hide hides, show unhides (and redraws) */
69 Controlset *controlset;
70 Image *screen; /* where Control appears */
71 char *format; /* used to generate events */
72 char wevent; /* event channel rewired */
73 char wdata; /* data channel rewired */
76 void (*ctl)(Control*, CParse*);
77 void (*mouse)(Control*, Mouse*);
78 void (*key)(Control*, Rune*);
79 void (*exit)(Control*);
80 void (*setsize)(Control*);
81 void (*activate)(Control*, int);
93 int index; /* entry number in cache */
94 int ref; /* one for client, plus one for each use */
109 enum /* alignments */
128 extern char *ctltypenames[];
130 /* Functions used internally */
131 void _ctladdgroup(Control*, Control*);
132 void _ctlargcount(Control*, CParse*, int);
133 Control* _createctl(Controlset*, char*, uint, char*);
134 Rune* _ctlrunestr(char*);
135 char* _ctlstrrune(Rune*);
136 void _ctlputsnarf(Rune*);
137 Rune* _ctlgetsnarf(void);
138 int _ctlalignment(char*);
139 Point _ctlalignpoint(Rectangle, int, int, int);
140 void _ctlfocus(Control*, int);
141 void _activategroup(Control*);
142 void _deactivategroup(Control*);
143 int _ctllookup(char *s, char *tab[], int ntab);
144 void _ctlprint(Control *c, char *fmt, ...);
147 CImage* _getctlimage(char*);
148 void _setctlimage(Control*, CImage**, char*);
149 void _putctlimage(CImage*);
150 CFont* _getctlfont(char*);
151 void _putctlfont(CFont*);
154 CImage* _getctlfont(char*);
155 void _setctlfont(Control*, CImage**, char*);
156 void _putctlfont(CImage*);
157 CFont* _getctlfont(char*);
158 void _putctlfont(CFont*);
160 /* Public functions */
163 int namectlimage(Image*, char*);
164 int freectlimage(char*);
167 int namectlfont(Font*, char*);
168 int freectlfont(char*);
171 int ctlprint(Control*, char*, ...);
174 void initcontrols(void);
175 Controlset* newcontrolset(Image*, Channel*, Channel*, Channel*);
176 void closecontrolset(Controlset*);
177 void closecontrol(Control*);
178 void ctlerror(char*, ...);
179 Control* controlcalled(char*);
181 /* publicly visible error-checking allocation routines */
182 void* ctlmalloc(uint);
183 void* ctlrealloc(void*, uint);
184 char* ctlstrdup(char*);
187 void controlwire(Control*, char*, Channel*);
188 void activate(Control*);
189 void deactivate(Control*);
190 Control* createbox(Controlset*, char*);
191 Control* createbutton(Controlset*, char*);
192 Control* createcolumn(Controlset*, char*);
193 Control* createboxbox(Controlset*, char*);
194 Control* createentry(Controlset*, char*);
195 Control* createkeyboard(Controlset*, char*);
196 Control* createlabel(Controlset*, char*);
197 Control* createmenu(Controlset*, char*);
198 Control* createradiobutton(Controlset*, char*);
199 Control* createrow(Controlset*, char*);
200 Control* createscribble(Controlset*, char*);
201 Control* createslider(Controlset*, char*);
202 Control* createstack(Controlset*, char*);
203 Control* createtab(Controlset*, char*);
204 Control* createtext(Controlset*, char*);
205 Control* createtextbutton(Controlset*, char*);
206 Control* createtextbutton3(Controlset*, char*);
209 void resizecontrolset(Controlset*);