2
/* Lefteris Koutsofios - AT&T Bell Laboratories */
8
#define WLU widget->u.l
10
int GLcreatewidget (Gwidget_t *parent, Gwidget_t *widget,
11
int attrn, Gwattr_t *attrp) {
18
Gerr (POS, G_ERRNOPARENTWIDGET);
22
ps.x = ps.y = MINLWSIZE;
24
for (ai = 0; ai < attrn; ai++) {
25
switch (attrp[ai].id) {
27
GETSIZE (attrp[ai].u.s, ps, MINLWSIZE);
29
case G_ATTRBORDERWIDTH:
30
ADD2ARGS (XtNborderWidth, attrp[ai].u.i);
33
ADD2ARGS (XtNlabel, attrp[ai].u.t);
36
color = attrp[ai].u.c.index;
37
if (color != 0 && color != 1) {
38
Gerr (POS, G_ERRBADCOLORINDEX, color);
41
c.red = attrp[ai].u.c.r * 257;
42
c.green = attrp[ai].u.c.g * 257;
43
c.blue = attrp[ai].u.c.b * 257;
45
Gdisplay, DefaultColormap (Gdisplay, Gscreenn), &c
48
ADD2ARGS (XtNbackground, c.pixel);
50
ADD2ARGS (XtNforeground, c.pixel);
53
Gerr (POS, G_ERRCANNOTSETATTR1, "windowid");
56
WLU->func = (Glabelcb) attrp[ai].u.func;
59
widget->udata = attrp[ai].u.u;
62
Gerr (POS, G_ERRBADATTRID, attrp[ai].id);
66
ADD2ARGS (XtNwidth, ps.x);
67
ADD2ARGS (XtNheight, ps.y);
68
ADD2ARGS (XtNhighlightThickness, 0);
69
ADD2ARGS (XtNinternalHeight, 0);
70
ADD2ARGS (XtNinternalWidth, 0);
71
ADD2ARGS (XtNjustify, XtJustifyLeft);
72
if (!(widget->w = XtCreateWidget ("label", labelWidgetClass,
73
parent->w, argp, argn))) {
74
Gerr (POS, G_ERRCANNOTCREATEWIDGET);
77
XtOverrideTranslations (widget->w, Glwanytable);
78
Glazymanage (widget->w);
82
int GLsetwidgetattr (Gwidget_t *widget, int attrn, Gwattr_t *attrp) {
89
for (ai = 0; ai < attrn; ai++) {
90
switch (attrp[ai].id) {
92
GETSIZE (attrp[ai].u.s, ps, MINLWSIZE);
93
ADD2ARGS (XtNwidth, ps.x);
94
ADD2ARGS (XtNheight, ps.y);
96
case G_ATTRBORDERWIDTH:
97
ADD2ARGS (XtNborderWidth, attrp[ai].u.i);
100
ADD2ARGS (XtNlabel, attrp[ai].u.t);
103
color = attrp[ai].u.c.index;
104
if (color != 0 && color != 1) {
105
Gerr (POS, G_ERRBADCOLORINDEX, color);
108
c.red = attrp[ai].u.c.r * 257;
109
c.green = attrp[ai].u.c.g * 257;
110
c.blue = attrp[ai].u.c.b * 257;
112
Gdisplay, DefaultColormap (Gdisplay, Gscreenn), &c
115
ADD2ARGS (XtNbackground, c.pixel);
117
ADD2ARGS (XtNforeground, c.pixel);
120
Gerr (POS, G_ERRCANNOTSETATTR2, "windowid");
123
WLU->func = (Glabelcb) attrp[ai].u.func;
126
widget->udata = attrp[ai].u.u;
129
Gerr (POS, G_ERRBADATTRID, attrp[ai].id);
133
XtSetValues (widget->w, argp, argn);
137
int GLgetwidgetattr (Gwidget_t *widget, int attrn, Gwattr_t *attrp) {
138
Dimension width, height;
142
for (ai = 0; ai < attrn; ai++) {
144
switch (attrp[ai].id) {
146
ADD2ARGS (XtNwidth, &width);
147
ADD2ARGS (XtNheight, &height);
148
XtGetValues (widget->w, argp, argn);
149
attrp[ai].u.s.x = width, attrp[ai].u.s.y = height;
151
case G_ATTRBORDERWIDTH:
152
ADD2ARGS (XtNborderWidth, &width);
153
XtGetValues (widget->w, argp, argn);
154
attrp[ai].u.i = width;
157
ADD2ARGS (XtNlabel, &s);
158
XtGetValues (widget->w, argp, argn);
162
sprintf (&Gbufp[0], "0x%lx", XtWindow (widget->w));
163
attrp[ai].u.t = &Gbufp[0];
166
attrp[ai].u.func = WLU->func;
169
attrp[ai].u.u = widget->udata;
172
Gerr (POS, G_ERRBADATTRID, attrp[ai].id);
179
int GLdestroywidget (Gwidget_t *widget) {
180
XtDestroyWidget (widget->w);
184
void Glwbutaction (Widget w, XEvent *evp, char **app, unsigned int *anp) {
189
widget = findwidget ((unsigned long) w, G_LABELWIDGET);
190
switch ((xtype = evp->type)) {
194
gev.code = (xtype == ButtonPress) ? G_DOWN : G_UP;
195
gev.data = evp->xbutton.button - Button1;
200
wi = gev.wi = widget - &Gwidgets[0];
204
Gpopdownflag = FALSE;
205
if (gev.code == G_DOWN) {
207
widget = &Gwidgets[wi];
208
if (widget->inuse && WLU->func)
214
void Glwkeyaction (Widget w, XEvent *evp, char **app, unsigned int *anp) {
220
widget = findwidget ((unsigned long) w, G_LABELWIDGET);
221
switch ((xtype = evp->type)) {
224
if (!XLookupString ((XKeyEvent *) evp, &c, 1, NULL, NULL))
227
gev.code = (xtype == KeyPress) ? G_DOWN : G_UP;
233
gev.wi = widget - &Gwidgets[0];
237
Gpopdownflag = FALSE;