Warning: Attempt to read property "date" on null in /usr/local/www/websvn.planix.org/blame.php on line 247

Warning: Attempt to read property "msg" on null in /usr/local/www/websvn.planix.org/blame.php on line 247
WebSVN – planix.SVN – Blame – /os/branches/feature_fixcpp/sys/include/control.h – Rev 2

Subversion Repositories planix.SVN

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 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;