]> git.lizzy.rs Git - plan9front.git/blob - sys/include/control.h
libc, seconds: new time and date apis (try 2)
[plan9front.git] / sys / include / control.h
1 #pragma src "/sys/src/libcontrol"
2 #pragma lib "libcontrol.a"
3
4 #pragma varargck        argpos  ctlprint        2
5 #pragma varargck        argpos  _ctlprint       2
6
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;
13
14 enum    /* types */
15 {
16         Ctlunknown,
17         Ctlbox,
18         Ctlbutton,
19         Ctlentry,
20         Ctlkeyboard,
21         Ctllabel,
22         Ctlmenu,
23         Ctlradio,
24         Ctlscribble,
25         Ctlslider,
26         Ctltabs,
27         Ctltext,
28         Ctltextbutton,
29         Ctltextbutton3,
30         Ctlgroup,               /* divider between controls and metacontrols */
31         Ctlboxbox,
32         Ctlcolumn,
33         Ctlrow,
34         Ctlstack,
35         Ctltab,
36         Ntypes,
37 };
38
39 struct Controlset
40 {
41         Control         *controls;
42         Image           *screen;
43         Control         *actives;
44         Control         *focus;
45         Channel         *ctl;
46         Channel         *data;          /* currently only for sync */
47         Channel         *kbdc;
48         Channel         *mousec;
49         Channel         *resizec;
50         Channel         *resizeexitc;
51         Channel         *csexitc;
52         Keyboardctl     *keyboardctl;   /* will be nil if user supplied keyboard */
53         Mousectl        *mousectl;      /* will be nil if user supplied mouse */
54         int             clicktotype;    /* flag */
55 };
56
57 struct Control
58 {
59         /* known to client */
60         char            *name;
61         Rectangle       rect;
62         Rectangle       size;           /* minimum/maximum Dx, Dy (not a rect) */
63         Channel         *event;         /* chan(char*) to client */
64         Channel         *data;          /* chan(char*) to client */
65
66         /* internal to control set */
67         int             type;
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 */
74
75         /* method table */
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);
82         Control         *nextactive;
83         Control         *next;
84 };
85
86 struct CCache
87 {
88         union{
89                 Image   *image;
90                 Font    *font;
91         };
92         char            *name;
93         int             index;          /* entry number in cache */
94         int             ref;            /* one for client, plus one for each use */
95 };
96
97 struct CParse
98 {
99         char    str[256];
100         char    *sender;
101         char    *receiver;
102         int     cmd;
103         char    *pargs[32];
104         int     iargs[32];
105         char    **args;
106         int     nargs;
107 };
108
109 enum    /* alignments */
110 {
111         Aupperleft = 0,
112         Auppercenter,
113         Aupperright,
114         Acenterleft,
115         Acenter,
116         Acenterright,
117         Alowerleft,
118         Alowercenter,
119         Alowerright,
120         Nalignments
121 };
122
123 enum
124 {
125         _Ctlmaxsize = 10000,
126 };
127
128 extern char *ctltypenames[];
129
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, ...);
145
146 /* images */
147 CImage*         _getctlimage(char*);
148 void            _setctlimage(Control*, CImage**, char*);
149 void            _putctlimage(CImage*);
150 CFont*          _getctlfont(char*);
151 void            _putctlfont(CFont*);
152
153 /* fonts */
154 CImage*         _getctlfont(char*);
155 void            _setctlfont(Control*, CImage**, char*);
156 void            _putctlfont(CImage*);
157 CFont*          _getctlfont(char*);
158 void            _putctlfont(CFont*);
159
160 /* Public functions */
161
162 /* images */
163 int             namectlimage(Image*, char*);
164 int             freectlimage(char*);
165
166 /* fonts */
167 int             namectlfont(Font*, char*);
168 int             freectlfont(char*);
169
170 /* commands */
171 int             ctlprint(Control*, char*, ...);
172
173 /* general */
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*);
180
181 /* publicly visible error-checking allocation routines */
182 void*           ctlmalloc(uint);
183 void*           ctlrealloc(void*, uint);
184 char*           ctlstrdup(char*);
185
186 /* creation */
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*);
207
208 /* user-supplied */
209 void            resizecontrolset(Controlset*);
210
211 int             _ctlsnarffd;
212 char            *alignnames[];
213 int             ctldeletequits;