1 /* Copyright (C) 2008-2012 by George Williams */
2 /*
3 * Redistribution and use in source and binary forms, with or without
4 * modification, are permitted provided that the following conditions are met:
5
6 * Redistributions of source code must retain the above copyright notice, this
7 * list of conditions and the following disclaimer.
8
9 * Redistributions in binary form must reproduce the above copyright notice,
10 * this list of conditions and the following disclaimer in the documentation
11 * and/or other materials provided with the distribution.
12
13 * The name of the author may not be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15
16 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
17 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
18 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
19 * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
20 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
21 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
22 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
23 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
24 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
25 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28 #include <fontforge-config.h>
29
30 #include "gdrawP.h" /* Need resolution of screen */
31 #include "ggadget.h"
32 #include "ggadgetP.h"
33 #include "gresedit.h"
34 #include "gwidget.h"
35 #include "ustring.h"
36
37 struct tofree {
38 GGadgetCreateData *gcd;
39 GTextInfo *lab;
40 GGadgetCreateData mainbox[2], flagsbox, colbox, extrabox, ibox, fontbox,
41 sabox;
42 GGadgetCreateData *marray[11], *farray[5][6], *carray[12][9], *(*earray)[8];
43 GGadgetCreateData *iarray[4], *fontarray[5], *saarray[5];
44 char *fontname;
45 char **extradefs;
46 char bw[20], padding[20], rr[20];
47 GResInfo *res;
48 int startcid, fontcid, btcid;
49 };
50
51 typedef struct greseditdlg {
52 struct tofree *tofree;
53 GWindow gw;
54 GGadget *tabset;
55 const char *def_res_file;
56 void (*change_res_filename)(const char *);
57 int done;
58 } GRE;
59
60 static GTextInfo bordertype[] = {
61 { (unichar_t *) "None", NULL, 0, 0, (void *) (intpt) bt_none, NULL, 0, 0, 0, 0, 0, 0, 1, 0, 0, '\0' },
62 { (unichar_t *) "Box", NULL, 0, 0, (void *) (intpt) bt_box, NULL, 0, 0, 0, 0, 0, 0, 1, 0, 0, '\0' },
63 { (unichar_t *) "Raised", NULL, 0, 0, (void *) (intpt) bt_raised, NULL, 0, 0, 0, 0, 0, 0, 1, 0, 0, '\0' },
64 { (unichar_t *) "Lowered", NULL, 0, 0, (void *) (intpt) bt_lowered, NULL, 0, 0, 0, 0, 0, 0, 1, 0, 0, '\0' },
65 { (unichar_t *) "Engraved", NULL, 0, 0, (void *) (intpt) bt_engraved, NULL, 0, 0, 0, 0, 0, 0, 1, 0, 0, '\0' },
66 { (unichar_t *) "Embossed", NULL, 0, 0, (void *) (intpt) bt_embossed, NULL, 0, 0, 0, 0, 0, 0, 1, 0, 0, '\0' },
67 { (unichar_t *) "Double", NULL, 0, 0, (void *) (intpt) bt_double, NULL, 0, 0, 0, 0, 0, 0, 1, 0, 0, '\0' },
68 GTEXTINFO_EMPTY
69 };
70
71 static GTextInfo bordershape[] = {
72 { (unichar_t *) "Rect", NULL, 0, 0, (void *) (intpt) bs_rect, NULL, 0, 0, 0, 0, 0, 0, 1, 0, 0, '\0' },
73 { (unichar_t *) "Round Rect", NULL, 0, 0, (void *) (intpt) bs_roundrect, NULL, 0, 0, 0, 0, 0, 0, 1, 0, 0, '\0' },
74 { (unichar_t *) "Elipse", NULL, 0, 0, (void *) (intpt) bs_elipse, NULL, 0, 0, 0, 0, 0, 0, 1, 0, 0, '\0' },
75 { (unichar_t *) "Diamond", NULL, 0, 0, (void *) (intpt) bs_diamond, NULL, 0, 0, 0, 0, 0, 0, 1, 0, 0, '\0' },
76 GTEXTINFO_EMPTY
77 };
78
GRE_RefreshAll(GRE * gre)79 static void GRE_RefreshAll(GRE *gre) {
80 GDrawRequestExpose(gre->gw,NULL,false);
81 GDrawRequestExpose(GTabSetGetSubwindow(gre->tabset,GTabSetGetSel(gre->tabset)),NULL,false);
82 }
83
GFontSpec2String(GFont * font)84 static char *GFontSpec2String(GFont *font) {
85 int len;
86 char *fontname;
87 FontRequest rq;
88
89 if ( font==NULL )
90 return( copy(""));
91
92 GDrawDecomposeFont(font,&rq);
93 if ( rq.family_name!=NULL )
94 len = 4*u_strlen(rq.family_name);
95 else
96 len = strlen(rq.utf8_family_name);
97 len += 6 /* point size */ + 1 +
98 5 /* weight */ + 1 +
99 10 /* style */;
100 fontname = malloc(len);
101 if ( rq.family_name!=NULL ) {
102 char *utf8_name = u2utf8_copy(rq.family_name);
103 sprintf( fontname, "%d %s%dpt %s", rq.weight,
104 rq.style&1 ? "italic " : "",
105 rq.point_size,
106 utf8_name );
107 free(utf8_name );
108 } else
109 sprintf( fontname, "%d %s%dpt %s", rq.weight,
110 rq.style&1 ? "italic " : "",
111 rq.point_size,
112 rq.utf8_family_name );
113 return( fontname );
114 }
115
GRE_Reflow(GRE * gre,GResInfo * res)116 static void GRE_Reflow(GRE *gre,GResInfo *res) {
117 if ( res->examples!=NULL &&
118 ( res->examples->creator==GHBoxCreate ||
119 res->examples->creator==GVBoxCreate ||
120 res->examples->creator==GHVBoxCreate ))
121 GHVBoxReflow(res->examples->ret);
122 GRE_RefreshAll(gre);
123 }
124
GRE_FigureInheritance(GRE * gre,GResInfo * parent,int cid_off_inh,int cid_off_data,int is_font,void * whatever,void (* do_something)(GRE * gre,int child_index,int cid_off_data,void * whatever))125 static void GRE_FigureInheritance( GRE *gre, GResInfo *parent, int cid_off_inh,
126 int cid_off_data, int is_font, void *whatever,
127 void (*do_something)(GRE *gre, int child_index, int cid_off_data, void *whatever)) {
128 /* Look through the gadget tree for gadgets which inherit from parent */
129 /* (which just changed) then check if this child ggadget actually does */
130 /* inherit this field. If it does, set the field to the new value, and */
131 /* look for any grandchildren which inherit from the child, and so forth */
132 GResInfo *child;
133 int i;
134
135 for ( i=0; (child = gre->tofree[i].res)!=NULL; ++i ) {
136 if ( child->inherits_from==parent &&
137 (( is_font && child->font!=NULL ) ||
138 ( !is_font && child->boxdata!=NULL)) ) {
139 /* Fonts may have a different cid offset depending on wether */
140 /* The ResInfo has a box or not */
141 if (( is_font && GGadgetIsChecked(GWidgetGetControl(gre->gw,gre->tofree[i].fontcid-2)) ) ||
142 ( !is_font && GGadgetIsChecked(GWidgetGetControl(gre->gw,gre->tofree[i].startcid+cid_off_inh)) )) {
143 (do_something)(gre,i,cid_off_data,whatever);
144 GRE_FigureInheritance(gre,child,cid_off_inh,cid_off_data,is_font,whatever,do_something);
145 }
146 }
147 }
148 }
149
inherit_color_change(GRE * gre,int childindex,int cid_off,void * whatever)150 static void inherit_color_change(GRE *gre, int childindex, int cid_off,
151 void *whatever) {
152 GGadget *g = GWidgetGetControl(gre->gw,gre->tofree[childindex].startcid+cid_off);
153 Color col = (Color) (intpt) whatever;
154
155 GColorButtonSetColor(g,col);
156 *((Color *) GGadgetGetUserData(g)) = col;
157 }
158
inherit_list_change(GRE * gre,int childindex,int cid_off,void * whatever)159 static void inherit_list_change(GRE *gre, int childindex, int cid_off,
160 void *whatever) {
161 GGadget *g = GWidgetGetControl(gre->gw,gre->tofree[childindex].startcid+cid_off);
162 int sel = (intpt) whatever;
163
164 GGadgetSelectOneListItem(g,sel);
165 *((uint8 *) GGadgetGetUserData(g)) = sel;
166 }
167
inherit_byte_change(GRE * gre,int childindex,int cid_off,void * whatever)168 static void inherit_byte_change(GRE *gre, int childindex, int cid_off,
169 void *whatever) {
170 GGadget *g = GWidgetGetControl(gre->gw,gre->tofree[childindex].startcid+cid_off);
171 int val = (intpt) whatever;
172 char buf[20];
173
174 sprintf( buf, "%d", val );
175 GGadgetSetTitle8(g,buf);
176 *((uint8 *) GGadgetGetUserData(g)) = val;
177 }
178
inherit_flag_change(GRE * gre,int childindex,int cid_off,void * whatever)179 static void inherit_flag_change(GRE *gre, int childindex, int cid_off,
180 void *whatever) {
181 GGadget *g = GWidgetGetControl(gre->gw,gre->tofree[childindex].startcid+cid_off);
182 int on = (intpt) whatever;
183 int flag = (intpt) GGadgetGetUserData(g);
184 GResInfo *res = gre->tofree[childindex].res;
185
186 if ( on )
187 res->boxdata->flags |= flag;
188 else
189 res->boxdata->flags &= ~flag;
190 GGadgetSetChecked(g,on);
191 }
192
193 struct inherit_font_data { char *spec; GFont *font; };
194
inherit_font_change(GRE * gre,int childindex,int cid_off,void * whatever)195 static void inherit_font_change(GRE *gre, int childindex, int cid_off,
196 void *whatever) {
197 GGadget *g = GWidgetGetControl(gre->gw,gre->tofree[childindex].fontcid);
198 struct inherit_font_data *ifd = (struct inherit_font_data *) whatever;
199
200 if ( ifd->font!=NULL )
201 *(gre->tofree[childindex].res->font) = ifd->font;
202 GGadgetSetTitle8(g,ifd->spec);
203 }
204
GRE_InheritColChange(GGadget * g,GEvent * e)205 static int GRE_InheritColChange(GGadget *g, GEvent *e) {
206
207 if ( e->type==et_controlevent && e->u.control.subtype == et_radiochanged ) {
208 GRE *gre = GDrawGetUserData(GGadgetGetWindow(g));
209 int cid = GGadgetGetCid(g), on = GGadgetIsChecked(g);
210 GGadgetSetEnabled(GWidgetGetControl(gre->gw,cid+1),!on);
211 g = GWidgetGetControl(gre->gw,cid+2);
212 GGadgetSetEnabled(g,!on);
213 if ( on ) {
214 int index = GTabSetGetSel(gre->tabset);
215 GResInfo *res = gre->tofree[index].res;
216 int offset = ((char *) GGadgetGetUserData(g)) - ((char *) (res->boxdata));
217 Color col = *((Color *) (((char *) (res->inherits_from->boxdata))+offset));
218 if ( col!= *(Color *) GGadgetGetUserData(g) ) {
219 int cid_off = cid - gre->tofree[index].startcid;
220 GColorButtonSetColor(g,col);
221 *((Color *) GGadgetGetUserData(g)) = col;
222 GRE_FigureInheritance(gre,res,cid_off,cid_off+2,false,
223 (void *) (intpt) col, inherit_color_change);
224 GRE_RefreshAll(gre);
225 }
226 }
227 }
228 return( true );
229 }
230
GRE_InheritListChange(GGadget * g,GEvent * e)231 static int GRE_InheritListChange(GGadget *g, GEvent *e) {
232
233 if ( e->type==et_controlevent && e->u.control.subtype == et_radiochanged ) {
234 GRE *gre = GDrawGetUserData(GGadgetGetWindow(g));
235 int cid = GGadgetGetCid(g), on = GGadgetIsChecked(g);
236 GGadgetSetEnabled(GWidgetGetControl(gre->gw,cid+1),!on);
237 g = GWidgetGetControl(gre->gw,cid+2);
238 GGadgetSetEnabled(g,!on);
239 if ( on ) {
240 int index = GTabSetGetSel(gre->tabset);
241 GResInfo *res = gre->tofree[index].res;
242 int offset = ((char *) GGadgetGetUserData(g)) - ((char *) (res->boxdata));
243 int sel = *((uint8 *) (((char *) (res->inherits_from->boxdata))+offset));
244 if ( sel != *(uint8 *) GGadgetGetUserData(g) ) {
245 int cid_off = cid - gre->tofree[index].startcid;
246 GGadgetSelectOneListItem(g,sel);
247 *((uint8 *) GGadgetGetUserData(g)) = sel;
248 GRE_FigureInheritance(gre,res,cid_off,cid_off+2,false,
249 (void *) (intpt) sel, inherit_list_change);
250 GRE_Reflow(gre,res);
251 }
252 }
253 }
254 return( true );
255 }
256
GRE_InheritByteChange(GGadget * g,GEvent * e)257 static int GRE_InheritByteChange(GGadget *g, GEvent *e) {
258
259 if ( e->type==et_controlevent && e->u.control.subtype == et_radiochanged ) {
260 GRE *gre = GDrawGetUserData(GGadgetGetWindow(g));
261 int cid = GGadgetGetCid(g), on = GGadgetIsChecked(g);
262 GGadgetSetEnabled(GWidgetGetControl(gre->gw,cid+1),!on);
263 g = GWidgetGetControl(gre->gw,cid+2);
264 GGadgetSetEnabled(g,!on);
265 if ( on ) {
266 int index = GTabSetGetSel(gre->tabset);
267 GResInfo *res = gre->tofree[index].res;
268 int offset = ((char *) GGadgetGetUserData(g)) - ((char *) (res->boxdata));
269 int val = *((uint8 *) (((char *) (res->inherits_from->boxdata))+offset));
270 if ( val != *(uint8 *) GGadgetGetUserData(g) ) {
271 int cid_off = cid - gre->tofree[index].startcid;
272 char buf[20];
273 sprintf( buf, "%d", val );
274 GGadgetSetTitle8(g,buf);
275 *((uint8 *) GGadgetGetUserData(g)) = val;
276 GRE_FigureInheritance(gre,res,cid_off,cid_off+2,false,
277 (void *) (intpt) val, inherit_byte_change);
278 GRE_Reflow(gre,res);
279 }
280 }
281 }
282 return( true );
283 }
284
GRE_InheritFlagChange(GGadget * g,GEvent * e)285 static int GRE_InheritFlagChange(GGadget *g, GEvent *e) {
286
287 if ( e->type==et_controlevent && e->u.control.subtype == et_radiochanged ) {
288 GRE *gre = GDrawGetUserData(GGadgetGetWindow(g));
289 int cid = GGadgetGetCid(g), on = GGadgetIsChecked(g);
290 g = GWidgetGetControl(gre->gw,cid+1);
291 GGadgetSetEnabled(g,!on);
292 if ( on ) {
293 int index = GTabSetGetSel(gre->tabset);
294 GResInfo *res = gre->tofree[index].res;
295 int flag = (intpt) GGadgetGetUserData(g);
296 if ( (res->boxdata->flags&flag) != (res->inherits_from->boxdata->flags&flag)) {
297 int cid_off = cid - gre->tofree[index].startcid;
298 int on = (res->inherits_from->boxdata->flags&flag)?1:0 ;
299 GGadgetSetChecked(g,on);
300 if ( on )
301 res->boxdata->flags |= flag;
302 else
303 res->boxdata->flags &= ~flag;
304 GRE_FigureInheritance(gre,res,cid_off,cid_off+2,false,
305 (void *) (intpt) on, inherit_flag_change);
306 GRE_Reflow(gre,res);
307 }
308 }
309 }
310 return( true );
311 }
312
GRE_InheritFontChange(GGadget * g,GEvent * e)313 static int GRE_InheritFontChange(GGadget *g, GEvent *e) {
314
315 if ( e->type==et_controlevent && e->u.control.subtype == et_radiochanged ) {
316 GRE *gre = GDrawGetUserData(GGadgetGetWindow(g));
317 int cid = GGadgetGetCid(g), on = GGadgetIsChecked(g);
318 GGadgetSetEnabled(GWidgetGetControl(gre->gw,cid+1),!on);
319 g = GWidgetGetControl(gre->gw,cid+2);
320 GGadgetSetEnabled(g,!on);
321 if ( on ) {
322 int index = GTabSetGetSel(gre->tabset);
323 GResInfo *res = gre->tofree[index].res;
324 int pi;
325 for ( pi=0; gre->tofree[pi].res!=NULL && gre->tofree[pi].res!=res->inherits_from; ++pi );
326 if ( gre->tofree[pi].res!=NULL ) {
327 struct inherit_font_data ifd;
328 int cid_off = cid - gre->tofree[index].startcid;
329
330 ifd.spec = GGadgetGetTitle8(GWidgetGetControl(gre->gw,gre->tofree[pi].fontcid));
331 ifd.font = *gre->tofree[pi].res->font;
332 *res->font = ifd.font;
333
334 GGadgetSetTitle8(g,ifd.spec);
335 GRE_FigureInheritance(gre,res,cid_off,cid_off+2,true,
336 (void *) &ifd, inherit_font_change);
337 free( ifd.spec );
338 }
339 }
340 }
341 return( true );
342 }
343
GRE_FlagChanged(GGadget * g,GEvent * e)344 static int GRE_FlagChanged(GGadget *g, GEvent *e) {
345
346 if ( e->type==et_controlevent && e->u.control.subtype == et_radiochanged ) {
347 GRE *gre = GDrawGetUserData(GGadgetGetWindow(g));
348 int index = GTabSetGetSel(gre->tabset);
349 GResInfo *res = gre->tofree[index].res;
350 int cid_off = GGadgetGetCid(g) - gre->tofree[index].startcid;
351 int on;
352 if ( (on = GGadgetIsChecked(g)) )
353 res->boxdata->flags |= (int) (intpt) GGadgetGetUserData(g);
354 else
355 res->boxdata->flags &= ~(int) (intpt) GGadgetGetUserData(g);
356 GRE_FigureInheritance(gre,res,cid_off-1,cid_off,false,
357 (void *) (intpt) on, inherit_flag_change);
358 GRE_Reflow(gre,res);
359 }
360 return( true );
361 }
362
GRE_ListChanged(GGadget * g,GEvent * e)363 static int GRE_ListChanged(GGadget *g, GEvent *e) {
364
365 if ( e->type==et_controlevent && e->u.control.subtype == et_listselected ) {
366 GRE *gre = GDrawGetUserData(GGadgetGetWindow(g));
367 int index = GTabSetGetSel(gre->tabset);
368 GResInfo *res = gre->tofree[index].res;
369 int cid_off = GGadgetGetCid(g) - gre->tofree[index].startcid;
370 int sel = GGadgetGetFirstListSelectedItem(g);
371
372 *((uint8 *) GGadgetGetUserData(g)) = sel;
373 GRE_FigureInheritance(gre,res,cid_off-2,cid_off,false,
374 (void *) (intpt) sel, inherit_list_change);
375 GRE_Reflow(gre,res);
376 }
377 return( true );
378 }
379
GRE_BoolChanged(GGadget * g,GEvent * e)380 static int GRE_BoolChanged(GGadget *g, GEvent *e) {
381
382 if ( e->type==et_controlevent && e->u.control.subtype == et_radiochanged ) {
383 *((int *) GGadgetGetUserData(g)) = GGadgetIsChecked(g);
384 }
385 return( true );
386 }
387
GRE_ByteChanged(GGadget * g,GEvent * e)388 static int GRE_ByteChanged(GGadget *g, GEvent *e) {
389
390 if ( e->type==et_controlevent && e->u.control.subtype == et_textchanged ) {
391 GRE *gre = GDrawGetUserData(GGadgetGetWindow(g));
392 char *txt = GGadgetGetTitle8(g), *end;
393 int val = strtol(txt,&end,10);
394 int index = GTabSetGetSel(gre->tabset);
395 GResInfo *res = gre->tofree[index].res;
396 if ( *end=='\0' && val>=0 && val<=255 ) {
397 int cid_off = GGadgetGetCid(g) - gre->tofree[index].startcid;
398 *((uint8 *) GGadgetGetUserData(g)) = val;
399 GRE_FigureInheritance(gre,res,cid_off-2,cid_off,false,
400 (void *) (intpt) val, inherit_byte_change);
401 GRE_Reflow(gre,res);
402 }
403 free(txt);
404 }
405 return( true );
406 }
407
GRE_IntChanged(GGadget * g,GEvent * e)408 static int GRE_IntChanged(GGadget *g, GEvent *e) {
409
410 if ( e->type==et_controlevent && e->u.control.subtype == et_textchanged ) {
411 GRE *gre = GDrawGetUserData(GGadgetGetWindow(g));
412 char *txt = GGadgetGetTitle8(g), *end;
413 int val = strtol(txt,&end,10);
414 int index = GTabSetGetSel(gre->tabset);
415 GResInfo *res = gre->tofree[index].res;
416 if ( *end=='\0' ) {
417 *((int *) GGadgetGetUserData(g)) = val;
418 GRE_Reflow(gre,res);
419 }
420 free(txt);
421 }
422 return( true );
423 }
424
GRE_DoubleChanged(GGadget * g,GEvent * e)425 static int GRE_DoubleChanged(GGadget *g, GEvent *e) {
426
427 if ( e->type==et_controlevent && e->u.control.subtype == et_textchanged ) {
428 char *txt = GGadgetGetTitle8(g), *end;
429 double val = strtod(txt,&end);
430 if ( *end=='\0' )
431 *((double *) GGadgetGetUserData(g)) = val;
432 free(txt);
433 }
434 return( true );
435 }
436
GRE_ColorChanged(GGadget * g,GEvent * e)437 static int GRE_ColorChanged(GGadget *g, GEvent *e) {
438
439 if ( e->type==et_controlevent && e->u.control.subtype == et_buttonactivate ) {
440 GRE *gre = GDrawGetUserData(GGadgetGetWindow(g));
441 int index = GTabSetGetSel(gre->tabset);
442 GResInfo *res = gre->tofree[index].res;
443 int cid_off = GGadgetGetCid(g) - gre->tofree[index].startcid;
444 Color col = GColorButtonGetColor(g);
445
446 *((Color *) GGadgetGetUserData(g)) = col;
447 GRE_FigureInheritance(gre,res,cid_off-2,cid_off,false,
448 (void *) (intpt) col, inherit_color_change);
449 GRE_RefreshAll(gre);
450 }
451 return( true );
452 }
453
GRE_ExtraColorChanged(GGadget * g,GEvent * e)454 static int GRE_ExtraColorChanged(GGadget *g, GEvent *e) {
455
456 if ( e->type==et_controlevent && e->u.control.subtype == et_buttonactivate ) {
457 Color col = GColorButtonGetColor(g);
458
459 *((Color *) GGadgetGetUserData(g)) = col;
460 }
461 return( true );
462 }
463
GRE_FontChanged(GGadget * g,GEvent * e)464 static int GRE_FontChanged(GGadget *g, GEvent *e) {
465 struct inherit_font_data ifd;
466
467 if ( e->type==et_controlevent && e->u.control.subtype == et_textchanged ) {
468 GRE *gre = GDrawGetUserData(GGadgetGetWindow(g));
469 int index = GTabSetGetSel(gre->tabset);
470 GResInfo *res = gre->tofree[index].res;
471 int cid_off = GGadgetGetCid(g) - gre->tofree[index].startcid;
472 char *fontdesc = GGadgetGetTitle8(g);
473 ifd.spec = fontdesc;
474 ifd.font = NULL;
475
476 GRE_FigureInheritance(gre,res,cid_off-2,cid_off,true,
477 (void *) &ifd, inherit_font_change);
478 free(fontdesc);
479 } else if ( e->type==et_controlevent && e->u.control.subtype == et_textfocuschanged &&
480 !e->u.control.u.tf_focus.gained_focus ) {
481 GRE *gre = GDrawGetUserData(GGadgetGetWindow(g));
482 if ( gre->tabset!=NULL ) {
483 int index = GTabSetGetSel(gre->tabset);
484 GResInfo *res = gre->tofree[index].res;
485 int cid_off = GGadgetGetCid(g) - gre->tofree[index].startcid;
486 char *fontdesc = GGadgetGetTitle8(g);
487 GFont *new = GResource_font_cvt(fontdesc,NULL);
488
489 if ( new==NULL )
490 gwwv_post_error(_("Bad font"),_("Bad font specification"));
491 else {
492 ifd.spec = fontdesc;
493 ifd.font = new;
494
495 *((GFont **) GGadgetGetUserData(g)) = new;
496 GRE_FigureInheritance(gre,res,cid_off-2,cid_off,true,
497 (void *) &ifd, inherit_font_change);
498 GRE_Reflow(gre,res);
499 }
500 free(fontdesc);
501 }
502 }
503 return( true );
504 }
505
GRE_ParseFont(GGadget * g)506 static void GRE_ParseFont(GGadget *g) {
507 char *fontdesc = GGadgetGetTitle8(g);
508 GFont *new = GResource_font_cvt(fontdesc,NULL);
509
510 if ( new==NULL )
511 gwwv_post_error(_("Bad font"),_("Bad font specification"));
512 else {
513 *((GFont **) GGadgetGetUserData(g)) = new;
514 }
515 free(fontdesc);
516 }
517
GRE_ExtraFontChanged(GGadget * g,GEvent * e)518 static int GRE_ExtraFontChanged(GGadget *g, GEvent *e) {
519
520 if ( e->type==et_controlevent && e->u.control.subtype == et_textfocuschanged &&
521 !e->u.control.u.tf_focus.gained_focus ) {
522 GRE *gre = GDrawGetUserData(GGadgetGetWindow(g));
523 if ( gre->tabset!=NULL ) {
524 GRE_ParseFont(g);
525 }
526 }
527 return( true );
528 }
529
GRE_StringChanged(GGadget * g,GEvent * e)530 static int GRE_StringChanged(GGadget *g, GEvent *e) {
531
532 if ( e->type==et_controlevent && e->u.control.subtype == et_textchanged ) {
533 /*GRE *gre = GDrawGetUserData(GGadgetGetWindow(g));*/
534 }
535 return( true );
536 }
537
GRE_ImageChanged(GGadget * g,GEvent * e)538 static int GRE_ImageChanged(GGadget *g, GEvent *e) {
539
540 if ( e->type==et_controlevent && e->u.control.subtype == et_buttonactivate ) {
541 GRE *gre = GDrawGetUserData(GGadgetGetWindow(g));
542 GResImage **ri = GGadgetGetUserData(g);
543 char *new;
544 GImage *newi;
545 GRect size;
546 new = gwwv_open_filename_with_path("Find Image",
547 (*ri)==NULL?NULL: (*ri)->filename,
548 "*.{png,jpeg,jpg,tiff,bmp,xbm}",NULL,
549 _GGadget_GetImagePath());
550 if ( new==NULL )
551 return( true );
552 newi = GImageRead(new);
553 if ( newi==NULL ) {
554 gwwv_post_error(_("Could not open image"),_("Could not open %s"), new );
555 free( new );
556 } else if ( *ri==NULL ) {
557 *ri = calloc(1,sizeof(GResImage));
558 (*ri)->filename = new;
559 (*ri)->image = newi;
560 GGadgetSetTitle8(g,"...");
561 } else {
562 free( (*ri)->filename );
563 (*ri)->filename = new;
564 if ( !_GGadget_ImageInCache((*ri)->image ) )
565 GImageDestroy((*ri)->image);
566 (*ri)->image = newi;
567 }
568 ((GButton *) g)->image = newi;
569 GGadgetGetDesiredSize(g,&size,NULL);
570 GGadgetResize(g,size.width,size.height);
571 GRE_RefreshAll(gre);
572 }
573 return( true );
574 }
575
GRE_DoCancel(GRE * gre)576 static void GRE_DoCancel(GRE *gre) {
577 int i;
578
579 for ( i=0; gre->tofree[i].res!=NULL; ++i ) {
580 GResInfo *res = gre->tofree[i].res;
581 struct resed *extras;
582 GResImage **_ri, *ri;
583 if ( res->boxdata!=NULL )
584 *res->boxdata = res->orig_state;
585 if ( res->extras!=NULL ) {
586 for ( extras = res->extras; extras->name!=NULL; extras++ ) {
587 switch ( extras->type ) {
588 case rt_bool:
589 case rt_int:
590 case rt_color:
591 case rt_coloralpha:
592 *(int *) (extras->val) = extras->orig.ival;
593 break;
594 case rt_double:
595 *(int *) (extras->val) = extras->orig.dval;
596 break;
597 case rt_font:
598 *(GFont **) (extras->val) = extras->orig.fontval;
599 break;
600 case rt_image:
601 _ri = extras->val;
602 ri = *_ri;
603 if ( extras->orig.sval==NULL ) {
604 if ( ri!=NULL ) {
605 free(ri->filename);
606 if ( ri->image!=NULL )
607 GImageDestroy(ri->image);
608 free(ri);
609 *_ri = NULL;
610 }
611 } else {
612 if ( strcmp(extras->orig.sval,ri->filename)!=0 ) {
613 GImage *temp;
614 temp = GImageRead(extras->orig.sval);
615 if ( temp!=NULL ) {
616 if ( !_GGadget_ImageInCache(ri->image ) )
617 GImageDestroy(ri->image);
618 ri->image = temp;
619 free(ri->filename);
620 ri->filename = copy(extras->orig.sval);
621 }
622 }
623 }
624 break;
625 case rt_string: case rt_stringlong:
626 /* These don't change dynamically */
627 /* Nothing to revert here */
628 break;
629 }
630 }
631 }
632 }
633 gre->done = true;
634 }
635
GRE_ChangePane(GGadget * g,GEvent * e)636 static int GRE_ChangePane(GGadget *g, GEvent *e) {
637
638 if ( e->type==et_controlevent && e->u.control.subtype == et_buttonactivate ) {
639 GRE *gre = GDrawGetUserData(GGadgetGetWindow(g));
640 GResInfo *new = GGadgetGetUserData(g);
641 int i;
642 for ( i=0; gre->tofree[i].res!=NULL && gre->tofree[i].res != new; ++i );
643 if ( gre->tofree[i].res!=NULL )
644 GTabSetSetSel(gre->tabset,i);
645 }
646 return( true );
647 }
648
GRE_Cancel(GGadget * g,GEvent * e)649 static int GRE_Cancel(GGadget *g, GEvent *e) {
650
651 if ( e->type==et_controlevent && e->u.control.subtype == et_buttonactivate ) {
652 GRE *gre = GDrawGetUserData(GGadgetGetWindow(g));
653 GRE_DoCancel(gre);
654 }
655 return( true );
656 }
657
TogglePrefs(GGadget * g,GEvent * e)658 static int TogglePrefs(GGadget *g, GEvent *e) {
659
660 if ( e->type==et_controlevent && e->u.control.subtype == et_radiochanged ) {
661 *((int *) GGadgetGetUserData(g)) = GGadgetIsChecked(g);
662 }
663 return( true );
664 }
665
GRE_Save(GGadget * g,GEvent * e)666 static int GRE_Save(GGadget *g, GEvent *e) {
667 static char *shapes[] = { "rect", "roundrect", "elipse", "diamond", NULL };
668 static char *types[] = { "none", "box", "raised", "lowered", "engraved",
669 "embossed", "double", NULL };
670
671 if ( e->type==et_controlevent && e->u.control.subtype == et_buttonactivate ) {
672 GRE *gre = GDrawGetUserData(GGadgetGetWindow(g));
673 char *filename;
674 FILE *output;
675 GGadgetCreateData gcd[2], *gcdp=NULL;
676 GTextInfo lab[1];
677 int update_prefs = true;
678 int i,j;
679 static char *flagnames[] = { "BorderInner", "BorderOuter", "ActiveInner",
680 "ShadowOuter", "DoDepressedBackground", "DrawDefault",
681 "GradientBG", NULL };
682 static char *colornames[] = { "NormalForeground", "DisabledForeground", "NormalBackground",
683 "DisabledBackground", "PressedBackground", "GradientStartCol", "BorderBrightest",
684 "BorderBrighter", "BorderDarker", "BorderDarkest", "BorderInnerCol", "BorderOuterCol",
685 "ActiveBorder",
686 NULL };
687 static char *intnames[] = { "BorderWidth", "Padding", "Radius", NULL };
688 struct resed *extras;
689
690 if ( gre->change_res_filename != NULL ) {
691 memset(gcd,0,sizeof(gcd));
692 memset(lab,0,sizeof(lab));
693 lab[0].text = (unichar_t *) _("Store this filename in preferences");
694 lab[0].text_is_1byte = true;
695 gcd[0].gd.label = &lab[0];
696 gcd[0].gd.flags = gg_visible|gg_enabled|gg_cb_on;
697 gcd[0].gd.handle_controlevent = TogglePrefs;
698 gcd[0].data = &update_prefs;
699 gcd[0].creator = GCheckBoxCreate;
700 gcdp = gcd;
701 }
702
703 filename = gwwv_save_filename_with_gadget(_("Save Resource file as..."),gre->def_res_file,NULL,gcdp);
704 if ( filename==NULL )
705 return true;
706 output = fopen( filename,"w" );
707 if ( output==NULL ) {
708 gwwv_post_error(_("Open failed"), _("Failed to open %s for output"), filename );
709 free(filename);
710 return true;
711 }
712 for ( i=0; gre->tofree[i].res!=NULL; ++i ) {
713 GResInfo *res = gre->tofree[i].res;
714 int cid = gre->tofree[i].startcid;
715 if ( res->boxdata!=NULL ) {
716 for ( j=0; flagnames[j]!=NULL; ++j ) {
717 if ( !GGadgetIsChecked( GWidgetGetControl(gre->gw,cid)) ||
718 (res->override_mask&(1<<j)) ) {
719 fprintf( output, "%s.%s.Box.%s: %s\n",
720 res->progname, res->resname, flagnames[j],
721 GGadgetIsChecked( GWidgetGetControl(gre->gw,cid+1))?"True" : "False" );
722 }
723 cid += 2;
724 }
725 for ( j=0; colornames[j]!=NULL; ++j ) {
726 if ( !GGadgetIsChecked( GWidgetGetControl(gre->gw,cid))
727 || (res->override_mask&(1<<(j+16))) ) {
728 fprintf( output, "%s.%s.Box.%s: #%06x\n",
729 res->progname, res->resname, colornames[j],
730 GColorButtonGetColor( GWidgetGetControl(gre->gw,cid+2)) );
731 }
732 cid += 3;
733 }
734 if ( !GGadgetIsChecked( GWidgetGetControl(gre->gw,cid))
735 || (res->override_mask&omf_border_type) ) {
736 fprintf( output, "%s.%s.Box.BorderType: %s\n",
737 res->progname, res->resname,
738 types[ GGadgetGetFirstListSelectedItem(
739 GWidgetGetControl(gre->gw,cid+2)) ] );
740 }
741 cid += 3;
742 if ( !GGadgetIsChecked( GWidgetGetControl(gre->gw,cid))
743 || (res->override_mask&omf_border_shape) ) {
744 fprintf( output, "%s.%s.Box.BorderShape: %s\n",
745 res->progname, res->resname,
746 shapes[ GGadgetGetFirstListSelectedItem(
747 GWidgetGetControl(gre->gw,cid+2)) ] );
748 }
749 cid += 3;
750 for ( j=0; intnames[j]!=NULL; ++j ) {
751 if ( !GGadgetIsChecked( GWidgetGetControl(gre->gw,cid))
752 || (res->override_mask&(1<<(j+10))) ) {
753 char *ival = GGadgetGetTitle8( GWidgetGetControl(gre->gw,cid+2));
754 char *end;
755 int val = strtol(ival,&end,10);
756 if ( *end!='\0' || val<0 || val>255 )
757 gwwv_post_error(_("Bad Number"), _("Bad numeric value for %s.%s"),
758 res->resname, intnames[j]);
759 fprintf( output, "%s.%s.Box.%s: %s\n",
760 res->progname, res->resname, intnames[j], ival );
761 free(ival);
762 }
763 cid += 3;
764 }
765 }
766 if ( res->font!=NULL ) {
767 if ( !GGadgetIsChecked( GWidgetGetControl(gre->gw,gre->tofree[i].fontcid-1))
768 || (res->override_mask&omf_font) ) {
769 char *ival = GGadgetGetTitle8( GWidgetGetControl(gre->gw,gre->tofree[i].fontcid));
770 fprintf( output, "%s.%s.Font: %s\n",
771 res->progname, res->resname, ival );
772 free(ival);
773 }
774 }
775 if ( res->extras!=NULL )
776 for ( extras=res->extras; extras->name!=NULL; ++extras ) {
777 GGadget *g = GWidgetGetControl(gre->gw,extras->cid);
778 switch ( extras->type ) {
779 case rt_bool:
780 fprintf( output, "%s.%s%s%s: %s\n",
781 res->progname, res->resname, *res->resname=='\0'?"":".",extras->resname,
782 GGadgetIsChecked(g)?"True":"False");
783 break;
784 case rt_int: {
785 char *ival = GGadgetGetTitle8( g );
786 char *end;
787 (void) strtol(ival,&end,10);
788 if ( *end!='\0' )
789 gwwv_post_error(_("Bad Number"), _("Bad numeric value for %s.%s"),
790 res->resname, extras->name );
791 fprintf( output, "%s.%s%s%s: %s\n",
792 res->progname, res->resname, *res->resname=='\0'?"":".", extras->resname,
793 ival );
794 free(ival);
795 } break;
796 case rt_double: {
797 char *dval = GGadgetGetTitle8( g );
798 char *end;
799 (void) strtod(dval,&end);
800 if ( *end!='\0' )
801 gwwv_post_error(_("Bad Number"), _("Bad numeric value for %s.%s"),
802 res->resname, extras->name );
803 fprintf( output, "%s.%s%s%s: %s\n",
804 res->progname, res->resname, *res->resname=='\0'?"":".", extras->resname,
805 dval );
806 free(dval);
807 } break;
808 case rt_color:
809 case rt_coloralpha:
810 fprintf( output, "%s.%s%s%s: #%06x\n",
811 res->progname, res->resname, *res->resname=='\0'?"":".", extras->resname,
812 GColorButtonGetColor(g) );
813 break;
814 case rt_font: {
815 char *fontdesc = GGadgetGetTitle8(g);
816 if ( *fontdesc!='\0' )
817 fprintf( output, "%s.%s%s%s: %s\n",
818 res->progname, res->resname, *res->resname=='\0'?"":".", extras->resname,
819 fontdesc );
820 free(fontdesc);
821 } break;
822 case rt_image: {
823 GResImage *ri = *((GResImage **) (extras->val));
824 if ( ri!=NULL && ri->filename!=NULL ) {
825 const char* const* paths = _GGadget_GetImagePath();
826 int i;
827 for ( i=0; paths[i]!=NULL; ++i ) {
828 if ( strncmp(paths[i],ri->filename,strlen(paths[i]))==0 ) {
829 char *pt = ri->filename+strlen(paths[i]);
830 while ( *pt=='/' ) ++pt;
831 fprintf( output, "%s.%s%s%s: %s\n",
832 res->progname, res->resname, *res->resname=='\0'?"":".", extras->resname,
833 pt );
834 break;
835 }
836 }
837 if ( paths[i]==NULL )
838 fprintf( output, "%s.%s%s%s: %s\n",
839 res->progname, res->resname, *res->resname=='\0'?"":".", extras->resname,
840 ri->filename );
841 }
842 } break;
843 case rt_string: case rt_stringlong: {
844 char *sval = GGadgetGetTitle8( g );
845 fprintf( output, "%s.%s%s%s: %s\n",
846 res->progname, res->resname, *res->resname=='\0'?"":".", extras->resname,
847 sval );
848 free(sval);
849 } break;
850 }
851 }
852 fprintf( output, "\n" );
853 }
854 if ( ferror(output) )
855 gwwv_post_error(_("Write failed"),_("An error occurred when writing the resource file"));
856 fclose(output);
857 if ( gre->change_res_filename != NULL && update_prefs )
858 (gre->change_res_filename)(filename);
859 free(filename);
860 }
861 return true;
862 }
863
GRE_OK(GGadget * g,GEvent * e)864 static int GRE_OK(GGadget *g, GEvent *e) {
865 int i;
866 struct resed *extras;
867
868 if ( e->type==et_controlevent && e->u.control.subtype == et_buttonactivate ) {
869 GRE *gre = GDrawGetUserData(GGadgetGetWindow(g));
870 /* Handle fonts, strings and images */
871 for ( i=0; gre->tofree[i].res!=NULL; ++i ) {
872 GResInfo *res = gre->tofree[i].res;
873 if ( res->boxdata!=NULL ) {
874 static char *names[] = { N_("Border Width"), N_("Padding"), N_("Radius"), NULL };
875 int j;
876 for ( j=0; j<3; ++j ) {
877 char *sval = GGadgetGetTitle8(GWidgetGetControl(gre->gw,gre->tofree[i].btcid+6+3*j));
878 char *end;
879 int val = strtol(sval,&end,10);
880 if ( *end!='\0' || val<0 || val>255 ) {
881 gwwv_post_error(_("Bad Number"), _("Bad numeric value for %s.%s must be between 0 and 255"),
882 res->resname, _(names[j]) );
883 free(sval);
884 return( true );
885 }
886 free(sval);
887 }
888 }
889 if ( res->font!=NULL ) {
890 /* We try to do this as we go along, but we wait for a focus */
891 /* out event to parse changes. Now if the last thing they were*/
892 /* doing was editing the font, then we might not get a focus */
893 /* out. So parse things here, just in case */
894 GRE_ParseFont(GWidgetGetControl(gre->gw,gre->tofree[i].fontcid));
895 }
896 if ( res->extras!=NULL ) {
897
898 for ( extras = res->extras; extras->name!=NULL; extras++ ) {
899 switch ( extras->type ) {
900 case rt_int: {
901 /* Has already been parsed and set -- unless there were */
902 /* an error. We need to complain about that */
903 char *ival = GGadgetGetTitle8( GWidgetGetControl(gre->gw,extras->cid) );
904 char *end;
905 (void) strtol(ival,&end,10);
906 if ( *end!='\0' ) {
907 gwwv_post_error(_("Bad Number"), _("Bad numeric value for %s.%s"),
908 res->resname, extras->name );
909 free(ival);
910 return( true );
911 }
912 free(ival);
913 } break;
914 case rt_double: {
915 /* Has already been parsed and set -- unless there were */
916 /* an error. We need to complain about that */
917 char *ival = GGadgetGetTitle8( GWidgetGetControl(gre->gw,extras->cid) );
918 char *end;
919 (void) strtod(ival,&end);
920 if ( *end!='\0' ) {
921 gwwv_post_error(_("Bad Number"), _("Bad numeric value for %s.%s"),
922 res->resname, extras->name );
923 free(ival);
924 return( true );
925 }
926 free(ival);
927 } break;
928 case rt_bool:
929 case rt_color:
930 case rt_coloralpha:
931 case rt_image:
932 /* These should have been set as we went along */
933 break;
934 case rt_font:
935 GRE_ParseFont(GWidgetGetControl(gre->gw,extras->cid));
936 break;
937 case rt_string: case rt_stringlong:
938 {
939 char *spec = GGadgetGetTitle8(GWidgetGetControl(gre->gw,extras->cid));
940 /* We can't free the old value, because sometimes it is a */
941 /* static string, not something allocated */
942 if ( *spec=='\0' ) { free( spec ); spec=NULL; }
943 *(char **) (extras->val) = spec;
944 } break;
945 }
946 }
947 }
948 }
949 gre->done = true;
950 }
951 return( true );
952 }
953
gre_e_h(GWindow gw,GEvent * event)954 static int gre_e_h(GWindow gw, GEvent *event) {
955 if ( event->type==et_close ) {
956 GRE *gre = GDrawGetUserData(gw);
957 GRE_DoCancel(gre);
958 } else if ( event->type == et_char ) {
959 return( false );
960 }
961 return( true );
962 }
963
GResEditDlg(GResInfo * all,const char * def_res_file,void (* change_res_filename)(const char *))964 static void GResEditDlg(GResInfo *all,const char *def_res_file,void (*change_res_filename)(const char *)) {
965 GResInfo *res, *parent;
966 int cnt;
967 GGadgetCreateData topgcd[4], topbox[3], *gcd, *barray[10], *tarray[3][2];
968 GTextInfo *lab, toplab[4];
969 GTabInfo *panes;
970 struct tofree *tofree;
971 struct resed *extras;
972 int i,j,k,l,cid;
973 static GBox small_blue_box;
974 extern GBox _GGadget_button_box;
975 GRE gre;
976 GRect pos;
977 GWindow gw;
978 GWindowAttrs wattrs;
979
980 memset(&gre,0,sizeof(gre));
981 gre.def_res_file = def_res_file;
982 gre.change_res_filename = change_res_filename;
983
984 memset(&wattrs,0,sizeof(wattrs));
985 wattrs.mask = wam_events|wam_cursor|wam_utf8_wtitle|wam_isdlg|wam_restrict;
986 wattrs.event_masks = ~(1<<et_charup);
987 wattrs.restrict_input_to_me = 1;
988 wattrs.is_dlg = true;
989 wattrs.cursor = ct_pointer;
990 wattrs.utf8_window_title = _("X Resource Editor");
991 pos.x = pos.y = 10;
992 pos.width = pos.height = 100;
993 gre.gw = gw = GDrawCreateTopWindow(NULL,&pos,gre_e_h,&gre,&wattrs);
994
995 if ( small_blue_box.main_foreground==0 ) {
996 extern void _GButtonInit(void);
997 _GButtonInit();
998 small_blue_box = _GGadget_button_box;
999 small_blue_box.border_type = bt_box;
1000 small_blue_box.border_shape = bs_rect;
1001 small_blue_box.border_width = 0;
1002 small_blue_box.flags = box_foreground_shadow_outer;
1003 small_blue_box.padding = 0;
1004 small_blue_box.main_foreground = 0x0000ff;
1005 small_blue_box.border_darker = small_blue_box.main_foreground;
1006 small_blue_box.border_darkest = small_blue_box.border_brighter =
1007 small_blue_box.border_brightest =
1008 small_blue_box.main_background = small_blue_box.main_background;
1009 }
1010
1011 for ( res=all, cnt=0; res!=NULL; res=res->next, ++cnt );
1012
1013 panes = calloc(cnt+1,sizeof(GTabInfo));
1014 gre.tofree = tofree = calloc(cnt+1,sizeof(struct tofree));
1015 cid = 0;
1016 for ( res=all, i=0; res!=NULL; res=res->next, ++i ) {
1017 tofree[i].res = res;
1018 tofree[i].startcid = cid+1;
1019
1020 cnt = 0;
1021 if ( res->extras!=NULL )
1022 for ( extras=res->extras, cnt = 0; extras->name!=NULL; ++cnt, ++extras );
1023 tofree[i].earray = calloc(cnt+1,sizeof(GGadgetCreateData*[8]));
1024 tofree[i].extradefs = calloc(cnt+1,sizeof(char *));
1025 cnt *= 2;
1026 if ( res->initialcomment!=NULL )
1027 ++cnt;
1028 if ( res->boxdata!=NULL )
1029 cnt += 3*18 + 8*2;
1030 if ( res->font )
1031 cnt+=3;
1032 if ( res->inherits_from!=NULL )
1033 cnt+=2;
1034 if ( res->seealso1!=NULL ) {
1035 cnt+=2;
1036 if ( res->seealso2!=NULL )
1037 ++cnt;
1038 }
1039
1040 tofree[i].gcd = gcd = calloc(cnt,sizeof(GGadgetCreateData));
1041 tofree[i].lab = lab = calloc(cnt,sizeof(GTextInfo));
1042
1043 j=k=l=0;
1044 if ( res->initialcomment!=NULL ) {
1045 lab[k].text = (unichar_t *) S_(res->initialcomment);
1046 lab[k].text_is_1byte = true;
1047 gcd[k].gd.label = &lab[k];
1048 gcd[k].gd.flags = gg_visible|gg_enabled;
1049 gcd[k++].creator = GLabelCreate;
1050 tofree[i].marray[j++] = &gcd[k-1];
1051 }
1052 if ( res->examples!=NULL )
1053 tofree[i].marray[j++] = res->examples;
1054 if ( res->inherits_from != NULL ) {
1055 lab[k].text = (unichar_t *) _("Inherits from");
1056 lab[k].text_is_1byte = true;
1057 gcd[k].gd.label = &lab[k];
1058 gcd[k].gd.flags = gg_visible|gg_enabled;
1059 gcd[k++].creator = GLabelCreate;
1060 tofree[i].iarray[0] = &gcd[k-1];
1061
1062 lab[k].text = (unichar_t *) S_(res->inherits_from->name);
1063 lab[k].text_is_1byte = true;
1064 gcd[k].gd.label = &lab[k];
1065 gcd[k].gd.flags = gg_visible|gg_enabled|gg_dontcopybox;
1066 gcd[k].gd.box = &small_blue_box;
1067 gcd[k].data = res->inherits_from;
1068 gcd[k].gd.handle_controlevent = GRE_ChangePane;
1069 gcd[k++].creator = GButtonCreate;
1070 tofree[i].iarray[1] = &gcd[k-1];
1071
1072 tofree[i].iarray[2] = GCD_Glue; tofree[i].iarray[3] = NULL;
1073 tofree[i].ibox.gd.flags = gg_visible|gg_enabled;
1074 tofree[i].ibox.gd.u.boxelements = tofree[i].iarray;
1075 tofree[i].ibox.creator = GHBoxCreate;
1076 tofree[i].marray[j++] = &tofree[i].ibox;
1077 } else if ( res->boxdata!=NULL ) {
1078 lab[k].text = (unichar_t *) _("Does not inherit from anything");
1079 lab[k].text_is_1byte = true;
1080 gcd[k].gd.label = &lab[k];
1081 gcd[k].gd.flags = gg_visible|gg_enabled;
1082 gcd[k++].creator = GLabelCreate;
1083 tofree[i].marray[j++] = &gcd[k-1];
1084 }
1085
1086 if ( res->boxdata!=NULL ) {
1087 res->orig_state = *res->boxdata;
1088
1089 lab[k].text = (unichar_t *) _("Inherit");
1090 lab[k].text_is_1byte = true;
1091 gcd[k].gd.label = &lab[k];
1092 gcd[k].gd.flags = gg_visible|gg_enabled;
1093 gcd[k].gd.popup_msg = _("Inherits for same field in parent");
1094 gcd[k].gd.cid = ++cid;
1095 gcd[k].gd.handle_controlevent = GRE_InheritFlagChange;
1096 gcd[k++].creator = GCheckBoxCreate;
1097 tofree[i].farray[l][0] = &gcd[k-1];
1098
1099 lab[k].text = (unichar_t *) _("Outline Inner Border");
1100 lab[k].text_is_1byte = true;
1101 gcd[k].gd.label = &lab[k];
1102 gcd[k].gd.flags = gg_visible|gg_enabled;
1103 gcd[k].gd.cid = ++cid;
1104 if ( res->boxdata->flags & box_foreground_border_inner )
1105 gcd[k].gd.flags |= gg_cb_on;
1106 gcd[k].gd.handle_controlevent = GRE_FlagChanged;
1107 gcd[k].data = (void *) (intpt) box_foreground_border_inner;
1108 gcd[k++].creator = GCheckBoxCreate;
1109 tofree[i].farray[l][1] = &gcd[k-1];
1110 if ( res->inherits_from==NULL )
1111 gcd[k-2].gd.flags &= ~gg_enabled;
1112 else if ( (res->inherits_from->boxdata->flags&box_foreground_border_inner) == (res->boxdata->flags&box_foreground_border_inner) ) {
1113 gcd[k-2].gd.flags |= gg_cb_on;
1114 gcd[k-1].gd.flags &= ~gg_enabled;
1115 }
1116
1117 lab[k].text = (unichar_t *) _("Inherit");
1118 lab[k].text_is_1byte = true;
1119 gcd[k].gd.label = &lab[k];
1120 gcd[k].gd.flags = gg_visible|gg_enabled;
1121 gcd[k].gd.popup_msg = _("Inherits for same field in parent");
1122 gcd[k].gd.cid = ++cid;
1123 gcd[k].gd.handle_controlevent = GRE_InheritFlagChange;
1124 gcd[k++].creator = GCheckBoxCreate;
1125 tofree[i].farray[l][2] = &gcd[k-1];
1126
1127 lab[k].text = (unichar_t *) _("Outline Outer Border");
1128 lab[k].text_is_1byte = true;
1129 gcd[k].gd.label = &lab[k];
1130 gcd[k].gd.flags = gg_visible|gg_enabled;
1131 gcd[k].gd.cid = ++cid;
1132 if ( res->boxdata->flags & box_foreground_border_outer )
1133 gcd[k].gd.flags |= gg_cb_on;
1134 gcd[k].gd.handle_controlevent = GRE_FlagChanged;
1135 gcd[k].data = (void *) (intpt) box_foreground_border_outer;
1136 gcd[k++].creator = GCheckBoxCreate;
1137 tofree[i].farray[l][3] = &gcd[k-1];
1138 if ( res->inherits_from==NULL )
1139 gcd[k-2].gd.flags &= ~gg_enabled;
1140 else if ( (res->inherits_from->boxdata->flags&box_foreground_border_outer) == (res->boxdata->flags&box_foreground_border_outer) ) {
1141 gcd[k-2].gd.flags |= gg_cb_on;
1142 gcd[k-1].gd.flags &= ~gg_enabled;
1143 }
1144 tofree[i].farray[l][4] = GCD_Glue;
1145 tofree[i].farray[l++][5] = NULL;
1146
1147
1148 lab[k].text = (unichar_t *) _("Inherit");
1149 lab[k].text_is_1byte = true;
1150 gcd[k].gd.label = &lab[k];
1151 gcd[k].gd.flags = gg_visible|gg_enabled;
1152 gcd[k].gd.popup_msg = _("Inherits for same field in parent");
1153 gcd[k].gd.cid = ++cid;
1154 gcd[k].gd.handle_controlevent = GRE_InheritFlagChange;
1155 gcd[k++].creator = GCheckBoxCreate;
1156 tofree[i].farray[l][0] = &gcd[k-1];
1157
1158 lab[k].text = (unichar_t *) _("Show Active Border");
1159 lab[k].text_is_1byte = true;
1160 gcd[k].gd.label = &lab[k];
1161 gcd[k].gd.flags = gg_visible|gg_enabled;
1162 gcd[k].gd.cid = ++cid;
1163 if ( res->boxdata->flags & box_active_border_inner )
1164 gcd[k].gd.flags |= gg_cb_on;
1165 gcd[k].gd.handle_controlevent = GRE_FlagChanged;
1166 gcd[k].data = (void *) (intpt) box_active_border_inner;
1167 gcd[k++].creator = GCheckBoxCreate;
1168 tofree[i].farray[l][1] = &gcd[k-1];
1169 if ( res->inherits_from==NULL )
1170 gcd[k-2].gd.flags &= ~gg_enabled;
1171 else if ( (res->inherits_from->boxdata->flags&box_active_border_inner) == (res->boxdata->flags&box_active_border_inner) ) {
1172 gcd[k-2].gd.flags |= gg_cb_on;
1173 gcd[k-1].gd.flags &= ~gg_enabled;
1174 }
1175
1176 lab[k].text = (unichar_t *) _("Inherit");
1177 lab[k].text_is_1byte = true;
1178 gcd[k].gd.label = &lab[k];
1179 gcd[k].gd.flags = gg_visible|gg_enabled;
1180 gcd[k].gd.popup_msg = _("Inherits for same field in parent");
1181 gcd[k].gd.cid = ++cid;
1182 gcd[k].gd.handle_controlevent = GRE_InheritFlagChange;
1183 gcd[k++].creator = GCheckBoxCreate;
1184 tofree[i].farray[l][2] = &gcd[k-1];
1185
1186 lab[k].text = (unichar_t *) _("Outer Shadow");
1187 lab[k].text_is_1byte = true;
1188 gcd[k].gd.label = &lab[k];
1189 gcd[k].gd.flags = gg_visible|gg_enabled;
1190 gcd[k].gd.cid = ++cid;
1191 if ( res->boxdata->flags & box_foreground_shadow_outer )
1192 gcd[k].gd.flags |= gg_cb_on;
1193 gcd[k].gd.handle_controlevent = GRE_FlagChanged;
1194 gcd[k].data = (void *) (intpt) box_foreground_shadow_outer;
1195 gcd[k++].creator = GCheckBoxCreate;
1196 tofree[i].farray[l][3] = &gcd[k-1];
1197 if ( res->inherits_from==NULL )
1198 gcd[k-2].gd.flags &= ~gg_enabled;
1199 else if ( (res->inherits_from->boxdata->flags&box_foreground_shadow_outer) == (res->boxdata->flags&box_foreground_shadow_outer) ) {
1200 gcd[k-2].gd.flags |= gg_cb_on;
1201 gcd[k-1].gd.flags &= ~gg_enabled;
1202 }
1203 tofree[i].farray[l][4] = GCD_Glue;
1204 tofree[i].farray[l++][5] = NULL;
1205
1206
1207 lab[k].text = (unichar_t *) _("Inherit");
1208 lab[k].text_is_1byte = true;
1209 gcd[k].gd.label = &lab[k];
1210 gcd[k].gd.flags = gg_visible|gg_enabled;
1211 gcd[k].gd.popup_msg = _("Inherits for same field in parent");
1212 gcd[k].gd.cid = ++cid;
1213 gcd[k].gd.handle_controlevent = GRE_InheritFlagChange;
1214 gcd[k++].creator = GCheckBoxCreate;
1215 tofree[i].farray[l][0] = &gcd[k-1];
1216
1217 lab[k].text = (unichar_t *) _("Depressed Background");
1218 lab[k].text_is_1byte = true;
1219 gcd[k].gd.label = &lab[k];
1220 gcd[k].gd.flags = gg_visible|gg_enabled;
1221 gcd[k].gd.cid = ++cid;
1222 if ( res->boxdata->flags & box_do_depressed_background )
1223 gcd[k].gd.flags |= gg_cb_on;
1224 gcd[k].gd.handle_controlevent = GRE_FlagChanged;
1225 gcd[k].data = (void *) (intpt) box_do_depressed_background;
1226 gcd[k++].creator = GCheckBoxCreate;
1227 tofree[i].farray[l][1] = &gcd[k-1];
1228 if ( res->inherits_from==NULL )
1229 gcd[k-2].gd.flags &= ~gg_enabled;
1230 else if ( (res->inherits_from->boxdata->flags&box_do_depressed_background) == (res->boxdata->flags&box_do_depressed_background) ) {
1231 gcd[k-2].gd.flags |= gg_cb_on;
1232 gcd[k-1].gd.flags &= ~gg_enabled;
1233 }
1234
1235 lab[k].text = (unichar_t *) _("Inherit");
1236 lab[k].text_is_1byte = true;
1237 gcd[k].gd.label = &lab[k];
1238 gcd[k].gd.flags = gg_visible|gg_enabled;
1239 gcd[k].gd.popup_msg = _("Inherits for same field in parent");
1240 gcd[k].gd.cid = ++cid;
1241 gcd[k].gd.handle_controlevent = GRE_InheritFlagChange;
1242 gcd[k++].creator = GCheckBoxCreate;
1243 tofree[i].farray[l][2] = &gcd[k-1];
1244
1245 lab[k].text = (unichar_t *) _("Outline Default Button");
1246 lab[k].text_is_1byte = true;
1247 gcd[k].gd.label = &lab[k];
1248 gcd[k].gd.flags = gg_visible|gg_enabled;
1249 gcd[k].gd.cid = ++cid;
1250 if ( res->boxdata->flags & box_draw_default )
1251 gcd[k].gd.flags |= gg_cb_on;
1252 gcd[k].gd.handle_controlevent = GRE_FlagChanged;
1253 gcd[k].data = (void *) (intpt) box_draw_default;
1254 gcd[k++].creator = GCheckBoxCreate;
1255 tofree[i].farray[l][3] = &gcd[k-1];
1256 if ( res->inherits_from==NULL )
1257 gcd[k-2].gd.flags &= ~gg_enabled;
1258 else if ( (res->inherits_from->boxdata->flags&box_draw_default) == (res->boxdata->flags&box_draw_default) ) {
1259 gcd[k-2].gd.flags |= gg_cb_on;
1260 gcd[k-1].gd.flags &= ~gg_enabled;
1261 }
1262 tofree[i].farray[l][4] = GCD_Glue;
1263 tofree[i].farray[l++][5] = NULL;
1264
1265
1266 lab[k].text = (unichar_t *) _("Inherit");
1267 lab[k].text_is_1byte = true;
1268 gcd[k].gd.label = &lab[k];
1269 gcd[k].gd.flags = gg_visible|gg_enabled;
1270 gcd[k].gd.popup_msg = _("Inherits for same field in parent");
1271 gcd[k].gd.cid = ++cid;
1272 gcd[k].gd.handle_controlevent = GRE_InheritFlagChange;
1273 gcd[k++].creator = GCheckBoxCreate;
1274 tofree[i].farray[l][0] = &gcd[k-1];
1275
1276 lab[k].text = (unichar_t *) _("Background Gradient");
1277 lab[k].text_is_1byte = true;
1278 gcd[k].gd.label = &lab[k];
1279 gcd[k].gd.flags = gg_visible|gg_enabled;
1280 gcd[k].gd.cid = ++cid;
1281 if ( res->boxdata->flags & box_gradient_bg )
1282 gcd[k].gd.flags |= gg_cb_on;
1283 gcd[k].gd.handle_controlevent = GRE_FlagChanged;
1284 gcd[k].data = (void *) (intpt) box_gradient_bg;
1285 gcd[k++].creator = GCheckBoxCreate;
1286 tofree[i].farray[l][1] = &gcd[k-1];
1287 if ( res->inherits_from==NULL )
1288 gcd[k-2].gd.flags &= ~gg_enabled;
1289 else if ( (res->inherits_from->boxdata->flags&box_gradient_bg) == (res->boxdata->flags&box_gradient_bg) ) {
1290 gcd[k-2].gd.flags |= gg_cb_on;
1291 gcd[k-1].gd.flags &= ~gg_enabled;
1292 }
1293 tofree[i].farray[l][2] = GCD_Glue;
1294 tofree[i].farray[l][3] = GCD_Glue;
1295 tofree[i].farray[l][4] = GCD_Glue;
1296 tofree[i].farray[l++][5] = NULL;
1297 tofree[i].farray[l][0] = NULL;
1298
1299 tofree[i].flagsbox.gd.flags = gg_enabled | gg_visible;
1300 tofree[i].flagsbox.gd.u.boxelements = tofree[i].farray[0];
1301 tofree[i].flagsbox.creator = GHVBoxCreate;
1302 tofree[i].marray[j++] = &tofree[i].flagsbox;
1303
1304 l = 0;
1305
1306 /* GT: "I." is an abreviation for "Inherits" */
1307 lab[k].text = (unichar_t *) _("I.");
1308 lab[k].text_is_1byte = true;
1309 gcd[k].gd.label = &lab[k];
1310 gcd[k].gd.flags = gg_visible|gg_enabled;
1311 gcd[k].gd.popup_msg = _("Inherits for same field in parent");
1312 gcd[k].gd.cid = ++cid;
1313 gcd[k].gd.handle_controlevent = GRE_InheritColChange;
1314 gcd[k++].creator = GCheckBoxCreate;
1315 tofree[i].carray[l][0] = &gcd[k-1];
1316
1317 lab[k].text = (unichar_t *) _("Normal Text Color:");
1318 lab[k].text_is_1byte = true;
1319 gcd[k].gd.label = &lab[k];
1320 gcd[k].gd.flags = gg_visible|gg_enabled;
1321 gcd[k].gd.cid = ++cid;
1322 gcd[k++].creator = GLabelCreate;
1323 tofree[i].carray[l][1] = &gcd[k-1];
1324
1325 gcd[k].gd.u.col = res->boxdata->main_foreground;
1326 gcd[k].gd.flags = gg_visible|gg_enabled;
1327 gcd[k].gd.cid = ++cid;
1328 gcd[k].gd.handle_controlevent = GRE_ColorChanged;
1329 gcd[k].data = &res->boxdata->main_foreground;
1330 gcd[k++].creator = GColorButtonCreate;
1331 tofree[i].carray[l][2] = &gcd[k-1];
1332 tofree[i].carray[l][3] = GCD_Glue;
1333 if ( res->inherits_from==NULL )
1334 gcd[k-3].gd.flags &= ~gg_enabled;
1335 else if ( res->inherits_from->boxdata->main_foreground == res->boxdata->main_foreground ) {
1336 gcd[k-3].gd.flags |= gg_cb_on;
1337 gcd[k-2].gd.flags &= ~gg_enabled;
1338 gcd[k-1].gd.flags &= ~gg_enabled;
1339 }
1340
1341 /* GT: "I." is an abreviation for "Inherits" */
1342 lab[k].text = (unichar_t *) _("I.");
1343 lab[k].text_is_1byte = true;
1344 gcd[k].gd.label = &lab[k];
1345 gcd[k].gd.flags = gg_visible|gg_enabled;
1346 gcd[k].gd.popup_msg = _("Inherits for same field in parent");
1347 gcd[k].gd.cid = ++cid;
1348 gcd[k].gd.handle_controlevent = GRE_InheritColChange;
1349 gcd[k++].creator = GCheckBoxCreate;
1350 tofree[i].carray[l][4] = &gcd[k-1];
1351
1352 lab[k].text = (unichar_t *) _("Disabled Text Color:");
1353 lab[k].text_is_1byte = true;
1354 gcd[k].gd.label = &lab[k];
1355 gcd[k].gd.flags = gg_visible|gg_enabled;
1356 gcd[k].gd.cid = ++cid;
1357 gcd[k++].creator = GLabelCreate;
1358 tofree[i].carray[l][5] = &gcd[k-1];
1359
1360 gcd[k].gd.u.col = res->boxdata->disabled_foreground;
1361 gcd[k].gd.flags = gg_visible|gg_enabled;
1362 gcd[k].gd.cid = ++cid;
1363 gcd[k].gd.handle_controlevent = GRE_ColorChanged;
1364 gcd[k].data = &res->boxdata->disabled_foreground;
1365 gcd[k++].creator = GColorButtonCreate;
1366 tofree[i].carray[l][6] = &gcd[k-1];
1367 if ( res->inherits_from==NULL )
1368 gcd[k-3].gd.flags &= ~gg_enabled;
1369 else if ( res->inherits_from->boxdata->disabled_foreground == res->boxdata->disabled_foreground ) {
1370 gcd[k-3].gd.flags |= gg_cb_on;
1371 gcd[k-2].gd.flags &= ~gg_enabled;
1372 gcd[k-1].gd.flags &= ~gg_enabled;
1373 }
1374
1375 tofree[i].carray[l][7] = GCD_Glue;
1376 tofree[i].carray[l++][8] = NULL;
1377
1378 /* GT: "I." is an abreviation for "Inherits" */
1379 lab[k].text = (unichar_t *) _("I.");
1380 lab[k].text_is_1byte = true;
1381 gcd[k].gd.label = &lab[k];
1382 gcd[k].gd.flags = gg_visible|gg_enabled;
1383 gcd[k].gd.popup_msg = _("Inherits for same field in parent");
1384 gcd[k].gd.cid = ++cid;
1385 gcd[k].gd.handle_controlevent = GRE_InheritColChange;
1386 gcd[k++].creator = GCheckBoxCreate;
1387 tofree[i].carray[l][0] = &gcd[k-1];
1388
1389 lab[k].text = (unichar_t *) _("Normal Background:");
1390 lab[k].text_is_1byte = true;
1391 gcd[k].gd.label = &lab[k];
1392 gcd[k].gd.flags = gg_visible|gg_enabled;
1393 gcd[k].gd.cid = ++cid;
1394 gcd[k++].creator = GLabelCreate;
1395 tofree[i].carray[l][1] = &gcd[k-1];
1396
1397 gcd[k].gd.u.col = res->boxdata->main_background;
1398 gcd[k].gd.flags = gg_visible|gg_enabled;
1399 gcd[k].gd.cid = ++cid;
1400 gcd[k].gd.handle_controlevent = GRE_ColorChanged;
1401 gcd[k].data = &res->boxdata->main_background;
1402 gcd[k++].creator = GColorButtonCreate;
1403 tofree[i].carray[l][2] = &gcd[k-1];
1404 tofree[i].carray[l][3] = GCD_Glue;
1405 if ( res->inherits_from==NULL )
1406 gcd[k-3].gd.flags &= ~gg_enabled;
1407 else if ( res->inherits_from->boxdata->main_background == res->boxdata->main_background ) {
1408 gcd[k-3].gd.flags |= gg_cb_on;
1409 gcd[k-2].gd.flags &= ~gg_enabled;
1410 gcd[k-1].gd.flags &= ~gg_enabled;
1411 }
1412
1413 /* GT: "I." is an abreviation for "Inherits" */
1414 lab[k].text = (unichar_t *) _("I.");
1415 lab[k].text_is_1byte = true;
1416 gcd[k].gd.label = &lab[k];
1417 gcd[k].gd.flags = gg_visible|gg_enabled;
1418 gcd[k].gd.popup_msg = _("Inherits for same field in parent");
1419 gcd[k].gd.cid = ++cid;
1420 gcd[k].gd.handle_controlevent = GRE_InheritColChange;
1421 gcd[k++].creator = GCheckBoxCreate;
1422 tofree[i].carray[l][4] = &gcd[k-1];
1423
1424 lab[k].text = (unichar_t *) _("Disabled Background:");
1425 lab[k].text_is_1byte = true;
1426 gcd[k].gd.label = &lab[k];
1427 gcd[k].gd.flags = gg_visible|gg_enabled;
1428 gcd[k].gd.cid = ++cid;
1429 gcd[k++].creator = GLabelCreate;
1430 tofree[i].carray[l][5] = &gcd[k-1];
1431
1432 gcd[k].gd.u.col = res->boxdata->disabled_background;
1433 gcd[k].gd.flags = gg_visible|gg_enabled;
1434 gcd[k].gd.cid = ++cid;
1435 gcd[k].gd.handle_controlevent = GRE_ColorChanged;
1436 gcd[k].data = &res->boxdata->disabled_background;
1437 gcd[k++].creator = GColorButtonCreate;
1438 tofree[i].carray[l][6] = &gcd[k-1];
1439 if ( res->inherits_from==NULL )
1440 gcd[k-3].gd.flags &= ~gg_enabled;
1441 else if ( res->inherits_from->boxdata->disabled_background == res->boxdata->disabled_background ) {
1442 gcd[k-3].gd.flags |= gg_cb_on;
1443 gcd[k-2].gd.flags &= ~gg_enabled;
1444 gcd[k-1].gd.flags &= ~gg_enabled;
1445 }
1446
1447 tofree[i].carray[l][7] = GCD_Glue;
1448 tofree[i].carray[l++][8] = NULL;
1449
1450 /* GT: "I." is an abreviation for "Inherits" */
1451 lab[k].text = (unichar_t *) _("I.");
1452 lab[k].text_is_1byte = true;
1453 gcd[k].gd.label = &lab[k];
1454 gcd[k].gd.flags = gg_visible|gg_enabled;
1455 gcd[k].gd.popup_msg = _("Inherits for same field in parent");
1456 gcd[k].gd.cid = ++cid;
1457 gcd[k].gd.handle_controlevent = GRE_InheritColChange;
1458 gcd[k++].creator = GCheckBoxCreate;
1459 tofree[i].carray[l][0] = &gcd[k-1];
1460
1461 lab[k].text = (unichar_t *) _("Depressed Background:");
1462 lab[k].text_is_1byte = true;
1463 gcd[k].gd.label = &lab[k];
1464 gcd[k].gd.flags = gg_visible|gg_enabled;
1465 gcd[k].gd.cid = ++cid;
1466 gcd[k++].creator = GLabelCreate;
1467 tofree[i].carray[l][1] = &gcd[k-1];
1468
1469 gcd[k].gd.u.col = res->boxdata->depressed_background;
1470 gcd[k].gd.flags = gg_visible|gg_enabled;
1471 gcd[k].gd.cid = ++cid;
1472 gcd[k].gd.handle_controlevent = GRE_ColorChanged;
1473 gcd[k].data = &res->boxdata->depressed_background;
1474 gcd[k++].creator = GColorButtonCreate;
1475 tofree[i].carray[l][2] = &gcd[k-1];
1476 tofree[i].carray[l][3] = GCD_Glue;
1477 if ( res->inherits_from==NULL )
1478 gcd[k-3].gd.flags &= ~gg_enabled;
1479 else if ( res->inherits_from->boxdata->depressed_background == res->boxdata->depressed_background ) {
1480 gcd[k-3].gd.flags |= gg_cb_on;
1481 gcd[k-2].gd.flags &= ~gg_enabled;
1482 gcd[k-1].gd.flags &= ~gg_enabled;
1483 }
1484
1485 /* GT: "I." is an abreviation for "Inherits" */
1486 lab[k].text = (unichar_t *) _("I.");
1487 lab[k].text_is_1byte = true;
1488 gcd[k].gd.label = &lab[k];
1489 gcd[k].gd.flags = gg_visible|gg_enabled;
1490 gcd[k].gd.popup_msg = _("Inherits for same field in parent");
1491 gcd[k].gd.cid = ++cid;
1492 gcd[k].gd.handle_controlevent = GRE_InheritColChange;
1493 gcd[k++].creator = GCheckBoxCreate;
1494 tofree[i].carray[l][4] = &gcd[k-1];
1495
1496 lab[k].text = (unichar_t *) _("Background Gradient:");
1497 lab[k].text_is_1byte = true;
1498 gcd[k].gd.label = &lab[k];
1499 gcd[k].gd.flags = gg_visible|gg_enabled;
1500 gcd[k].gd.cid = ++cid;
1501 gcd[k++].creator = GLabelCreate;
1502 tofree[i].carray[l][5] = &gcd[k-1];
1503
1504 gcd[k].gd.u.col = res->boxdata->gradient_bg_end;
1505 gcd[k].gd.flags = gg_visible|gg_enabled;
1506 gcd[k].gd.cid = ++cid;
1507 gcd[k].gd.handle_controlevent = GRE_ColorChanged;
1508 gcd[k].data = &res->boxdata->gradient_bg_end;
1509 gcd[k++].creator = GColorButtonCreate;
1510 tofree[i].carray[l][6] = &gcd[k-1];
1511 if ( res->inherits_from==NULL )
1512 gcd[k-3].gd.flags &= ~gg_enabled;
1513 else if ( res->inherits_from->boxdata->gradient_bg_end == res->boxdata->gradient_bg_end ) {
1514 gcd[k-3].gd.flags |= gg_cb_on;
1515 gcd[k-2].gd.flags &= ~gg_enabled;
1516 gcd[k-1].gd.flags &= ~gg_enabled;
1517 }
1518
1519 tofree[i].carray[l][7] = GCD_Glue;
1520 tofree[i].carray[l++][8] = NULL;
1521
1522 /* GT: "I." is an abreviation for "Inherits" */
1523 lab[k].text = (unichar_t *) _("I.");
1524 lab[k].text_is_1byte = true;
1525 gcd[k].gd.label = &lab[k];
1526 gcd[k].gd.flags = gg_visible|gg_enabled;
1527 gcd[k].gd.popup_msg = _("Inherits for same field in parent");
1528 gcd[k].gd.cid = ++cid;
1529 gcd[k].gd.handle_controlevent = GRE_InheritColChange;
1530 gcd[k++].creator = GCheckBoxCreate;
1531 tofree[i].carray[l][0] = &gcd[k-1];
1532
1533 lab[k].text = (unichar_t *) _("Brightest Border:");
1534 lab[k].text_is_1byte = true;
1535 gcd[k].gd.label = &lab[k];
1536 gcd[k].gd.flags = gg_visible|gg_enabled;
1537 gcd[k].gd.cid = ++cid;
1538 gcd[k++].creator = GLabelCreate;
1539 tofree[i].carray[l][1] = &gcd[k-1];
1540
1541 gcd[k].gd.u.col = res->boxdata->border_brightest;
1542 gcd[k].gd.flags = gg_visible|gg_enabled;
1543 gcd[k].gd.cid = ++cid;
1544 gcd[k].gd.handle_controlevent = GRE_ColorChanged;
1545 gcd[k].data = &res->boxdata->border_brightest;
1546 gcd[k++].creator = GColorButtonCreate;
1547 tofree[i].carray[l][2] = &gcd[k-1];
1548 tofree[i].carray[l][3] = GCD_Glue;
1549 if ( res->inherits_from==NULL )
1550 gcd[k-3].gd.flags &= ~gg_enabled;
1551 else if ( res->inherits_from->boxdata->border_brightest == res->boxdata->border_brightest ) {
1552 gcd[k-3].gd.flags |= gg_cb_on;
1553 gcd[k-2].gd.flags &= ~gg_enabled;
1554 gcd[k-1].gd.flags &= ~gg_enabled;
1555 }
1556
1557 /* GT: "I." is an abreviation for "Inherits" */
1558 lab[k].text = (unichar_t *) _("I.");
1559 lab[k].text_is_1byte = true;
1560 gcd[k].gd.label = &lab[k];
1561 gcd[k].gd.flags = gg_visible|gg_enabled;
1562 gcd[k].gd.popup_msg = _("Inherits for same field in parent");
1563 gcd[k].gd.cid = ++cid;
1564 gcd[k].gd.handle_controlevent = GRE_InheritColChange;
1565 gcd[k++].creator = GCheckBoxCreate;
1566 tofree[i].carray[l][4] = &gcd[k-1];
1567
1568 lab[k].text = (unichar_t *) _("Brighter Border:");
1569 lab[k].text_is_1byte = true;
1570 gcd[k].gd.label = &lab[k];
1571 gcd[k].gd.flags = gg_visible|gg_enabled;
1572 gcd[k].gd.cid = ++cid;
1573 gcd[k++].creator = GLabelCreate;
1574 tofree[i].carray[l][5] = &gcd[k-1];
1575
1576 gcd[k].gd.u.col = res->boxdata->border_brighter;
1577 gcd[k].gd.flags = gg_visible|gg_enabled;
1578 gcd[k].gd.cid = ++cid;
1579 gcd[k].gd.handle_controlevent = GRE_ColorChanged;
1580 gcd[k].data = &res->boxdata->border_brighter;
1581 gcd[k++].creator = GColorButtonCreate;
1582 tofree[i].carray[l][6] = &gcd[k-1];
1583 if ( res->inherits_from==NULL )
1584 gcd[k-3].gd.flags &= ~gg_enabled;
1585 else if ( res->inherits_from->boxdata->border_brighter == res->boxdata->border_brighter ) {
1586 gcd[k-3].gd.flags |= gg_cb_on;
1587 gcd[k-2].gd.flags &= ~gg_enabled;
1588 gcd[k-1].gd.flags &= ~gg_enabled;
1589 }
1590
1591 tofree[i].carray[l][7] = GCD_Glue;
1592 tofree[i].carray[l++][8] = NULL;
1593
1594
1595 /* GT: "I." is an abreviation for "Inherits" */
1596 lab[k].text = (unichar_t *) _("I.");
1597 lab[k].text_is_1byte = true;
1598 gcd[k].gd.label = &lab[k];
1599 gcd[k].gd.flags = gg_visible|gg_enabled;
1600 gcd[k].gd.popup_msg = _("Inherits for same field in parent");
1601 gcd[k].gd.cid = ++cid;
1602 gcd[k].gd.handle_controlevent = GRE_InheritColChange;
1603 gcd[k++].creator = GCheckBoxCreate;
1604 tofree[i].carray[l][0] = &gcd[k-1];
1605
1606 lab[k].text = (unichar_t *) _("Darker Border:");
1607 lab[k].text_is_1byte = true;
1608 gcd[k].gd.label = &lab[k];
1609 gcd[k].gd.flags = gg_visible|gg_enabled;
1610 gcd[k].gd.cid = ++cid;
1611 gcd[k++].creator = GLabelCreate;
1612 tofree[i].carray[l][1] = &gcd[k-1];
1613
1614 gcd[k].gd.u.col = res->boxdata->border_darker;
1615 gcd[k].gd.flags = gg_visible|gg_enabled;
1616 gcd[k].gd.cid = ++cid;
1617 gcd[k].gd.handle_controlevent = GRE_ColorChanged;
1618 gcd[k].data = &res->boxdata->border_darker;
1619 gcd[k++].creator = GColorButtonCreate;
1620 tofree[i].carray[l][2] = &gcd[k-1];
1621 tofree[i].carray[l][3] = GCD_Glue;
1622 if ( res->inherits_from==NULL )
1623 gcd[k-3].gd.flags &= ~gg_enabled;
1624 else if ( res->inherits_from->boxdata->border_darker == res->boxdata->border_darker ) {
1625 gcd[k-3].gd.flags |= gg_cb_on;
1626 gcd[k-2].gd.flags &= ~gg_enabled;
1627 gcd[k-1].gd.flags &= ~gg_enabled;
1628 }
1629
1630 /* GT: "I." is an abreviation for "Inherits" */
1631 lab[k].text = (unichar_t *) _("I.");
1632 lab[k].text_is_1byte = true;
1633 gcd[k].gd.label = &lab[k];
1634 gcd[k].gd.flags = gg_visible|gg_enabled;
1635 gcd[k].gd.popup_msg = _("Inherits for same field in parent");
1636 gcd[k].gd.cid = ++cid;
1637 gcd[k].gd.handle_controlevent = GRE_InheritColChange;
1638 gcd[k++].creator = GCheckBoxCreate;
1639 tofree[i].carray[l][4] = &gcd[k-1];
1640
1641 lab[k].text = (unichar_t *) _("Darkest Border:");
1642 lab[k].text_is_1byte = true;
1643 gcd[k].gd.label = &lab[k];
1644 gcd[k].gd.flags = gg_visible|gg_enabled;
1645 gcd[k].gd.cid = ++cid;
1646 gcd[k++].creator = GLabelCreate;
1647 tofree[i].carray[l][5] = &gcd[k-1];
1648
1649 gcd[k].gd.u.col = res->boxdata->border_darkest;
1650 gcd[k].gd.flags = gg_visible|gg_enabled;
1651 gcd[k].gd.cid = ++cid;
1652 gcd[k].gd.handle_controlevent = GRE_ColorChanged;
1653 gcd[k].data = &res->boxdata->border_darkest;
1654 gcd[k++].creator = GColorButtonCreate;
1655 tofree[i].carray[l][6] = &gcd[k-1];
1656 if ( res->inherits_from==NULL )
1657 gcd[k-3].gd.flags &= ~gg_enabled;
1658 else if ( res->inherits_from->boxdata->border_darkest == res->boxdata->border_darkest ) {
1659 gcd[k-3].gd.flags |= gg_cb_on;
1660 gcd[k-2].gd.flags &= ~gg_enabled;
1661 gcd[k-1].gd.flags &= ~gg_enabled;
1662 }
1663
1664 tofree[i].carray[l][7] = GCD_Glue;
1665 tofree[i].carray[l++][8] = NULL;
1666
1667
1668 /* GT: "I." is an abreviation for "Inherits" */
1669 lab[k].text = (unichar_t *) _("I.");
1670 lab[k].text_is_1byte = true;
1671 gcd[k].gd.label = &lab[k];
1672 gcd[k].gd.flags = gg_visible|gg_enabled;
1673 gcd[k].gd.popup_msg = _("Inherits for same field in parent");
1674 gcd[k].gd.cid = ++cid;
1675 gcd[k].gd.handle_controlevent = GRE_InheritColChange;
1676 gcd[k++].creator = GCheckBoxCreate;
1677 tofree[i].carray[l][0] = &gcd[k-1];
1678
1679 lab[k].text = (unichar_t *) _("Inner Border:");
1680 lab[k].text_is_1byte = true;
1681 gcd[k].gd.label = &lab[k];
1682 gcd[k].gd.flags = gg_visible|gg_enabled;
1683 gcd[k].gd.cid = ++cid;
1684 gcd[k++].creator = GLabelCreate;
1685 tofree[i].carray[l][1] = &gcd[k-1];
1686
1687 gcd[k].gd.u.col = res->boxdata->border_inner;
1688 gcd[k].gd.flags = gg_visible|gg_enabled;
1689 gcd[k].gd.cid = ++cid;
1690 gcd[k].gd.handle_controlevent = GRE_ColorChanged;
1691 gcd[k].data = &res->boxdata->border_inner;
1692 gcd[k++].creator = GColorButtonCreate;
1693 tofree[i].carray[l][2] = &gcd[k-1];
1694 tofree[i].carray[l][3] = GCD_Glue;
1695 if ( res->inherits_from==NULL )
1696 gcd[k-3].gd.flags &= ~gg_enabled;
1697 else if ( res->inherits_from->boxdata->border_inner == res->boxdata->border_inner ) {
1698 gcd[k-3].gd.flags |= gg_cb_on;
1699 gcd[k-2].gd.flags &= ~gg_enabled;
1700 gcd[k-1].gd.flags &= ~gg_enabled;
1701 }
1702
1703 /* GT: "I." is an abreviation for "Inherits" */
1704 lab[k].text = (unichar_t *) _("I.");
1705 lab[k].text_is_1byte = true;
1706 gcd[k].gd.label = &lab[k];
1707 gcd[k].gd.flags = gg_visible|gg_enabled;
1708 gcd[k].gd.popup_msg = _("Inherits for same field in parent");
1709 gcd[k].gd.cid = ++cid;
1710 gcd[k].gd.handle_controlevent = GRE_InheritColChange;
1711 gcd[k++].creator = GCheckBoxCreate;
1712 tofree[i].carray[l][4] = &gcd[k-1];
1713
1714 lab[k].text = (unichar_t *) _("Outer Border:");
1715 lab[k].text_is_1byte = true;
1716 gcd[k].gd.label = &lab[k];
1717 gcd[k].gd.flags = gg_visible|gg_enabled;
1718 gcd[k].gd.cid = ++cid;
1719 gcd[k++].creator = GLabelCreate;
1720 tofree[i].carray[l][5] = &gcd[k-1];
1721
1722 gcd[k].gd.u.col = res->boxdata->border_outer;
1723 gcd[k].gd.flags = gg_visible|gg_enabled;
1724 gcd[k].gd.cid = ++cid;
1725 gcd[k].gd.handle_controlevent = GRE_ColorChanged;
1726 gcd[k].data = &res->boxdata->border_outer;
1727 gcd[k++].creator = GColorButtonCreate;
1728 tofree[i].carray[l][6] = &gcd[k-1];
1729 if ( res->inherits_from==NULL )
1730 gcd[k-3].gd.flags &= ~gg_enabled;
1731 else if ( res->inherits_from->boxdata->border_outer == res->boxdata->border_outer ) {
1732 gcd[k-3].gd.flags |= gg_cb_on;
1733 gcd[k-2].gd.flags &= ~gg_enabled;
1734 gcd[k-1].gd.flags &= ~gg_enabled;
1735 }
1736
1737 tofree[i].carray[l][7] = GCD_Glue;
1738 tofree[i].carray[l++][8] = NULL;
1739
1740
1741 /* GT: "I." is an abreviation for "Inherits" */
1742 lab[k].text = (unichar_t *) _("I.");
1743 lab[k].text_is_1byte = true;
1744 gcd[k].gd.label = &lab[k];
1745 gcd[k].gd.flags = gg_visible|gg_enabled;
1746 gcd[k].gd.popup_msg = _("Inherits for same field in parent");
1747 gcd[k].gd.cid = ++cid;
1748 gcd[k].gd.handle_controlevent = GRE_InheritColChange;
1749 gcd[k++].creator = GCheckBoxCreate;
1750 tofree[i].carray[l][0] = &gcd[k-1];
1751
1752 lab[k].text = (unichar_t *) _("Active Border:");
1753 lab[k].text_is_1byte = true;
1754 gcd[k].gd.label = &lab[k];
1755 gcd[k].gd.flags = gg_visible|gg_enabled;
1756 gcd[k].gd.cid = ++cid;
1757 gcd[k++].creator = GLabelCreate;
1758 tofree[i].carray[l][1] = &gcd[k-1];
1759
1760 gcd[k].gd.u.col = res->boxdata->active_border;
1761 gcd[k].gd.flags = gg_visible|gg_enabled;
1762 gcd[k].gd.cid = ++cid;
1763 gcd[k].gd.handle_controlevent = GRE_ColorChanged;
1764 gcd[k].data = &res->boxdata->active_border;
1765 gcd[k++].creator = GColorButtonCreate;
1766 tofree[i].carray[l][2] = &gcd[k-1];
1767 tofree[i].carray[l][3] = GCD_Glue;
1768 if ( res->inherits_from==NULL )
1769 gcd[k-3].gd.flags &= ~gg_enabled;
1770 else if ( res->inherits_from->boxdata->active_border == res->boxdata->active_border ) {
1771 gcd[k-3].gd.flags |= gg_cb_on;
1772 gcd[k-2].gd.flags &= ~gg_enabled;
1773 gcd[k-1].gd.flags &= ~gg_enabled;
1774 }
1775
1776 tofree[i].carray[l][4] = GCD_Glue;
1777 tofree[i].carray[l][5] = GCD_Glue;
1778 tofree[i].carray[l][6] = GCD_Glue;
1779 tofree[i].carray[l][7] = GCD_Glue;
1780 tofree[i].carray[l++][8] = NULL;
1781
1782 /* GT: "I." is an abreviation for "Inherits" */
1783 lab[k].text = (unichar_t *) _("I.");
1784 lab[k].text_is_1byte = true;
1785 gcd[k].gd.label = &lab[k];
1786 gcd[k].gd.flags = gg_visible|gg_enabled;
1787 gcd[k].gd.popup_msg = _("Inherits for same field in parent");
1788 gcd[k].gd.cid = ++cid;
1789 gcd[k].gd.handle_controlevent = GRE_InheritListChange;
1790 gcd[k++].creator = GCheckBoxCreate;
1791 tofree[i].carray[l][0] = &gcd[k-1];
1792
1793 lab[k].text = (unichar_t *) _("Border Type:");
1794 lab[k].text_is_1byte = true;
1795 gcd[k].gd.label = &lab[k];
1796 gcd[k].gd.flags = gg_visible|gg_enabled;
1797 gcd[k].gd.cid = ++cid;
1798 gcd[k++].creator = GLabelCreate;
1799 tofree[i].carray[l][1] = &gcd[k-1];
1800
1801 gcd[k].gd.u.list = bordertype;
1802 gcd[k].gd.label = &bordertype[res->boxdata->border_type];
1803 gcd[k].gd.flags = gg_visible|gg_enabled;
1804 gcd[k].gd.cid = tofree[i].btcid = ++cid;
1805 gcd[k].gd.handle_controlevent = GRE_ListChanged;
1806 gcd[k].data = &res->boxdata->border_type;
1807 gcd[k++].creator = GListButtonCreate;
1808 tofree[i].carray[l][2] = &gcd[k-1];
1809 tofree[i].carray[l][3] = GCD_ColSpan;
1810 if ( res->inherits_from==NULL )
1811 gcd[k-3].gd.flags &= ~gg_enabled;
1812 else if ( res->inherits_from->boxdata->border_type == res->boxdata->border_type ) {
1813 gcd[k-3].gd.flags |= gg_cb_on;
1814 gcd[k-2].gd.flags &= ~gg_enabled;
1815 gcd[k-1].gd.flags &= ~gg_enabled;
1816 }
1817
1818 /* GT: "I." is an abreviation for "Inherits" */
1819 lab[k].text = (unichar_t *) _("I.");
1820 lab[k].text_is_1byte = true;
1821 gcd[k].gd.label = &lab[k];
1822 gcd[k].gd.flags = gg_visible|gg_enabled;
1823 gcd[k].gd.popup_msg = _("Inherits for same field in parent");
1824 gcd[k].gd.cid = ++cid;
1825 gcd[k].gd.handle_controlevent = GRE_InheritListChange;
1826 gcd[k++].creator = GCheckBoxCreate;
1827 tofree[i].carray[l][4] = &gcd[k-1];
1828
1829 lab[k].text = (unichar_t *) _("Border Shape:");
1830 lab[k].text_is_1byte = true;
1831 gcd[k].gd.label = &lab[k];
1832 gcd[k].gd.flags = gg_visible|gg_enabled;
1833 gcd[k].gd.cid = ++cid;
1834 gcd[k++].creator = GLabelCreate;
1835 tofree[i].carray[l][5] = &gcd[k-1];
1836
1837 gcd[k].gd.u.list = bordershape;
1838 gcd[k].gd.label = &bordershape[res->boxdata->border_shape];
1839 gcd[k].gd.flags = gg_visible|gg_enabled;
1840 gcd[k].gd.cid = ++cid;
1841 gcd[k].gd.handle_controlevent = GRE_ListChanged;
1842 gcd[k].data = &res->boxdata->border_shape;
1843 gcd[k++].creator = GListButtonCreate;
1844 tofree[i].carray[l][6] = &gcd[k-1];
1845 if ( res->inherits_from==NULL )
1846 gcd[k-3].gd.flags &= ~gg_enabled;
1847 else if ( res->inherits_from->boxdata->border_shape == res->boxdata->border_shape ) {
1848 gcd[k-3].gd.flags |= gg_cb_on;
1849 gcd[k-2].gd.flags &= ~gg_enabled;
1850 gcd[k-1].gd.flags &= ~gg_enabled;
1851 }
1852
1853 tofree[i].carray[l][7] = GCD_Glue;
1854 tofree[i].carray[l++][8] = NULL;
1855
1856 /* GT: "I." is an abreviation for "Inherits" */
1857 lab[k].text = (unichar_t *) _("I.");
1858 lab[k].text_is_1byte = true;
1859 gcd[k].gd.label = &lab[k];
1860 gcd[k].gd.flags = gg_visible|gg_enabled;
1861 gcd[k].gd.popup_msg = _("Inherits for same field in parent");
1862 gcd[k].gd.cid = ++cid;
1863 gcd[k].gd.handle_controlevent = GRE_InheritByteChange;
1864 gcd[k++].creator = GCheckBoxCreate;
1865 tofree[i].carray[l][0] = &gcd[k-1];
1866
1867 lab[k].text = (unichar_t *) _("Border Width:");
1868 lab[k].text_is_1byte = true;
1869 gcd[k].gd.label = &lab[k];
1870 gcd[k].gd.flags = gg_visible|gg_enabled;
1871 gcd[k].gd.cid = ++cid;
1872 gcd[k++].creator = GLabelCreate;
1873 tofree[i].carray[l][1] = &gcd[k-1];
1874
1875 sprintf( tofree[i].bw, "%d", res->boxdata->border_width );
1876 lab[k].text = (unichar_t *) tofree[i].bw;
1877 lab[k].text_is_1byte = true;
1878 gcd[k].gd.pos.width = 50;
1879 gcd[k].gd.label = &lab[k];
1880 gcd[k].gd.flags = gg_visible|gg_enabled;
1881 gcd[k].gd.cid = ++cid;
1882 gcd[k].gd.handle_controlevent = GRE_ByteChanged;
1883 gcd[k].data = &res->boxdata->border_width;
1884 gcd[k++].creator = GNumericFieldCreate;
1885 tofree[i].carray[l][2] = &gcd[k-1];
1886 tofree[i].carray[l][3] = GCD_ColSpan;
1887 if ( res->inherits_from==NULL )
1888 gcd[k-3].gd.flags &= ~gg_enabled;
1889 else if ( res->inherits_from->boxdata->border_width == res->boxdata->border_width ) {
1890 gcd[k-3].gd.flags |= gg_cb_on;
1891 gcd[k-2].gd.flags &= ~gg_enabled;
1892 gcd[k-1].gd.flags &= ~gg_enabled;
1893 }
1894
1895 /* GT: "I." is an abreviation for "Inherits" */
1896 lab[k].text = (unichar_t *) _("I.");
1897 lab[k].text_is_1byte = true;
1898 gcd[k].gd.label = &lab[k];
1899 gcd[k].gd.flags = gg_visible|gg_enabled;
1900 gcd[k].gd.popup_msg = _("Inherits for same field in parent");
1901 gcd[k].gd.cid = ++cid;
1902 gcd[k].gd.handle_controlevent = GRE_InheritByteChange;
1903 gcd[k++].creator = GCheckBoxCreate;
1904 tofree[i].carray[l][4] = &gcd[k-1];
1905
1906 lab[k].text = (unichar_t *) _("Padding:");
1907 lab[k].text_is_1byte = true;
1908 gcd[k].gd.label = &lab[k];
1909 gcd[k].gd.flags = gg_visible|gg_enabled;
1910 gcd[k].gd.cid = ++cid;
1911 gcd[k++].creator = GLabelCreate;
1912 tofree[i].carray[l][5] = &gcd[k-1];
1913
1914 sprintf( tofree[i].padding, "%d", res->boxdata->padding );
1915 lab[k].text = (unichar_t *) tofree[i].padding;
1916 lab[k].text_is_1byte = true;
1917 gcd[k].gd.pos.width = 50;
1918 gcd[k].gd.label = &lab[k];
1919 gcd[k].gd.flags = gg_visible|gg_enabled;
1920 gcd[k].gd.cid = ++cid;
1921 gcd[k].gd.handle_controlevent = GRE_ByteChanged;
1922 gcd[k].data = &res->boxdata->padding;
1923 gcd[k++].creator = GNumericFieldCreate;
1924 tofree[i].carray[l][6] = &gcd[k-1];
1925 if ( res->inherits_from==NULL )
1926 gcd[k-3].gd.flags &= ~gg_enabled;
1927 else if ( res->inherits_from->boxdata->padding == res->boxdata->padding ) {
1928 gcd[k-3].gd.flags |= gg_cb_on;
1929 gcd[k-2].gd.flags &= ~gg_enabled;
1930 gcd[k-1].gd.flags &= ~gg_enabled;
1931 }
1932
1933 tofree[i].carray[l][7] = GCD_Glue;
1934 tofree[i].carray[l++][8] = NULL;
1935
1936 /* GT: "I." is an abreviation for "Inherits" */
1937 lab[k].text = (unichar_t *) _("I.");
1938 lab[k].text_is_1byte = true;
1939 gcd[k].gd.label = &lab[k];
1940 gcd[k].gd.flags = gg_visible|gg_enabled;
1941 gcd[k].gd.popup_msg = _("Inherits for same field in parent");
1942 gcd[k].gd.cid = ++cid;
1943 gcd[k].gd.handle_controlevent = GRE_InheritByteChange;
1944 gcd[k++].creator = GCheckBoxCreate;
1945 tofree[i].carray[l][0] = &gcd[k-1];
1946
1947 lab[k].text = (unichar_t *) _("Radius:");
1948 lab[k].text_is_1byte = true;
1949 gcd[k].gd.label = &lab[k];
1950 gcd[k].gd.flags = gg_visible|gg_enabled;
1951 gcd[k].gd.cid = ++cid;
1952 gcd[k++].creator = GLabelCreate;
1953 tofree[i].carray[l][1] = &gcd[k-1];
1954
1955 sprintf( tofree[i].rr, "%d", res->boxdata->rr_radius );
1956 lab[k].text = (unichar_t *) tofree[i].rr;
1957 lab[k].text_is_1byte = true;
1958 gcd[k].gd.pos.width = 50;
1959 gcd[k].gd.label = &lab[k];
1960 gcd[k].gd.flags = gg_visible|gg_enabled;
1961 gcd[k].gd.cid = ++cid;
1962 gcd[k].gd.handle_controlevent = GRE_ByteChanged;
1963 gcd[k].data = &res->boxdata->rr_radius;
1964 gcd[k++].creator = GNumericFieldCreate;
1965 tofree[i].carray[l][2] = &gcd[k-1];
1966 tofree[i].carray[l][3] = GCD_ColSpan;
1967 if ( res->inherits_from==NULL )
1968 gcd[k-3].gd.flags &= ~gg_enabled;
1969 else if ( res->inherits_from->boxdata->rr_radius == res->boxdata->rr_radius ) {
1970 gcd[k-3].gd.flags |= gg_cb_on;
1971 gcd[k-2].gd.flags &= ~gg_enabled;
1972 gcd[k-1].gd.flags &= ~gg_enabled;
1973 }
1974
1975 tofree[i].carray[l][4] = GCD_Glue;
1976 tofree[i].carray[l][5] = GCD_Glue;
1977 tofree[i].carray[l][6] = GCD_Glue;
1978 tofree[i].carray[l][7] = GCD_Glue;
1979 tofree[i].carray[l++][8] = NULL;
1980 tofree[i].carray[l][0] = NULL;
1981
1982 tofree[i].colbox.gd.flags = gg_enabled | gg_visible;
1983 tofree[i].colbox.gd.u.boxelements = tofree[i].carray[0];
1984 tofree[i].colbox.creator = GHVBoxCreate;
1985 tofree[i].marray[j++] = &tofree[i].colbox;
1986 }
1987
1988 if ( res->font!=NULL ) {
1989 tofree[i].fontname = GFontSpec2String( *res->font );
1990
1991 lab[k].text = (unichar_t *) _("I.");
1992 lab[k].text_is_1byte = true;
1993 gcd[k].gd.label = &lab[k];
1994 gcd[k].gd.flags = gg_visible|gg_enabled;
1995 gcd[k].gd.popup_msg = _("Inherits for same field in parent");
1996 gcd[k].gd.cid = ++cid;
1997 gcd[k].gd.handle_controlevent = GRE_InheritFontChange;
1998 gcd[k++].creator = GCheckBoxCreate;
1999 tofree[i].fontarray[0] = &gcd[k-1];
2000
2001 lab[k].text = (unichar_t *) _("Font:");
2002 lab[k].text_is_1byte = true;
2003 gcd[k].gd.label = &lab[k];
2004 gcd[k].gd.flags = gg_visible|gg_enabled;
2005 gcd[k].gd.cid = ++cid;
2006 gcd[k++].creator = GLabelCreate;
2007 tofree[i].fontarray[1] = &gcd[k-1];
2008
2009 lab[k].text = (unichar_t *) tofree[i].fontname;
2010 lab[k].text_is_1byte = true;
2011 gcd[k].gd.label = &lab[k];
2012 gcd[k].gd.flags = gg_visible|gg_enabled;
2013 gcd[k].gd.cid = tofree[i].fontcid = ++cid;
2014 gcd[k].gd.handle_controlevent = GRE_FontChanged;
2015 gcd[k].data = res->font;
2016 gcd[k++].creator = GTextFieldCreate;
2017 tofree[i].fontarray[2] = &gcd[k-1];
2018 if ( res->inherits_from==NULL )
2019 gcd[k-3].gd.flags &= ~gg_enabled;
2020 else if ( *res->inherits_from->font == *res->font ) {
2021 gcd[k-3].gd.flags |= gg_cb_on;
2022 gcd[k-2].gd.flags &= ~gg_enabled;
2023 gcd[k-1].gd.flags &= ~gg_enabled;
2024 }
2025 tofree[i].fontarray[3] = GCD_Glue;
2026 tofree[i].fontarray[4] = NULL;
2027
2028 tofree[i].fontbox.gd.flags = gg_enabled | gg_visible;
2029 tofree[i].fontbox.gd.u.boxelements = tofree[i].fontarray;
2030 tofree[i].fontbox.creator = GHBoxCreate;
2031 tofree[i].marray[j++] = &tofree[i].fontbox;
2032 }
2033 if ( res->seealso1 != NULL ) {
2034 lab[k].text = (unichar_t *) _("See also:");
2035 lab[k].text_is_1byte = true;
2036 gcd[k].gd.label = &lab[k];
2037 gcd[k].gd.flags = gg_visible|gg_enabled;
2038 gcd[k++].creator = GLabelCreate;
2039 tofree[i].saarray[0] = &gcd[k-1];
2040
2041 lab[k].text = (unichar_t *) S_(res->seealso1->name);
2042 lab[k].text_is_1byte = true;
2043 gcd[k].gd.label = &lab[k];
2044 gcd[k].gd.flags = gg_visible|gg_enabled|gg_dontcopybox;
2045 gcd[k].gd.box = &small_blue_box;
2046 gcd[k].data = res->seealso1;
2047 gcd[k].gd.handle_controlevent = GRE_ChangePane;
2048 gcd[k++].creator = GButtonCreate;
2049 tofree[i].saarray[1] = &gcd[k-1];
2050
2051 if ( res->seealso2!=NULL ) {
2052 lab[k].text = (unichar_t *) S_(res->seealso2->name);
2053 lab[k].text_is_1byte = true;
2054 gcd[k].gd.label = &lab[k];
2055 gcd[k].gd.flags = gg_visible|gg_enabled|gg_dontcopybox;
2056 gcd[k].gd.box = &small_blue_box;
2057 gcd[k].data = res->seealso2;
2058 gcd[k].gd.handle_controlevent = GRE_ChangePane;
2059 gcd[k++].creator = GButtonCreate;
2060 tofree[i].saarray[2] = &gcd[k-1];
2061 } else
2062 tofree[i].saarray[2] = GCD_Glue;
2063
2064 tofree[i].saarray[3] = GCD_Glue; tofree[i].saarray[4] = NULL;
2065 tofree[i].sabox.gd.flags = gg_visible|gg_enabled;
2066 tofree[i].sabox.gd.u.boxelements = tofree[i].saarray;
2067 tofree[i].sabox.creator = GHBoxCreate;
2068 tofree[i].marray[j++] = &tofree[i].sabox;
2069 }
2070
2071 if ( res->extras!=NULL ) {
2072 int hl=-1, base=3;
2073 for ( l=0, extras = res->extras ; extras->name!=NULL; ++extras, ++l ) {
2074 if ( base==3 ) {
2075 base=0;
2076 ++hl;
2077 } else
2078 base=3;
2079 if ( base==3 ) {
2080 tofree[i].earray[hl][6] = GCD_Glue;
2081 tofree[i].earray[hl][7] = NULL;
2082 }
2083 switch ( extras->type ) {
2084 case rt_bool:
2085 extras->orig.ival = *(int *) (extras->val);
2086 lab[k].text = (unichar_t *) S_(extras->name);
2087 lab[k].text_is_1byte = true;
2088 gcd[k].gd.label = &lab[k];
2089 gcd[k].gd.flags = gg_visible|gg_enabled;
2090 if ( extras->orig.ival )
2091 gcd[k].gd.flags |= gg_cb_on;
2092 if ( extras->popup!=NULL )
2093 gcd[k].gd.popup_msg = _(extras->popup);
2094 gcd[k].gd.cid = extras->cid = ++cid;
2095 gcd[k].data = extras->val;
2096 gcd[k].gd.handle_controlevent = GRE_BoolChanged;
2097 gcd[k++].creator = GCheckBoxCreate;
2098 tofree[i].earray[hl][base] = &gcd[k-1];
2099 tofree[i].earray[hl][base+1] = GCD_ColSpan;
2100 tofree[i].earray[hl][base+2] = GCD_ColSpan;
2101 break;
2102 case rt_int:
2103 extras->orig.ival = *(int *) (extras->val);
2104 lab[k].text = (unichar_t *) S_(extras->name);
2105 lab[k].text_is_1byte = true;
2106 gcd[k].gd.label = &lab[k];
2107 gcd[k].gd.flags = gg_visible|gg_enabled;
2108 if ( extras->popup!=NULL )
2109 gcd[k].gd.popup_msg = _(extras->popup);
2110 gcd[k++].creator = GLabelCreate;
2111 tofree[i].earray[hl][base] = &gcd[k-1];
2112
2113 tofree[i].extradefs[l] = malloc(20);
2114 sprintf( tofree[i].extradefs[l], "%d", extras->orig.ival );
2115 lab[k].text = (unichar_t *) tofree[i].extradefs[l];
2116 lab[k].text_is_1byte = true;
2117 gcd[k].gd.pos.width = 60;
2118 gcd[k].gd.label = &lab[k];
2119 gcd[k].gd.flags = gg_visible|gg_enabled;
2120 if ( extras->popup!=NULL )
2121 gcd[k].gd.popup_msg = S_(extras->popup);
2122 gcd[k].gd.cid = extras->cid = ++cid;
2123 gcd[k].data = extras->val;
2124 gcd[k].gd.handle_controlevent = GRE_IntChanged;
2125 gcd[k++].creator = GNumericFieldCreate;
2126 tofree[i].earray[hl][base+1] = &gcd[k-1];
2127 tofree[i].earray[hl][base+2] = GCD_ColSpan;
2128 break;
2129 case rt_double:
2130 extras->orig.dval = *(double *) (extras->val);
2131 lab[k].text = (unichar_t *) S_(extras->name);
2132 lab[k].text_is_1byte = true;
2133 gcd[k].gd.label = &lab[k];
2134 gcd[k].gd.flags = gg_visible|gg_enabled;
2135 if ( extras->popup!=NULL )
2136 gcd[k].gd.popup_msg = _(extras->popup);
2137 gcd[k++].creator = GLabelCreate;
2138 tofree[i].earray[hl][base] = &gcd[k-1];
2139
2140 tofree[i].extradefs[l] = malloc(40);
2141 sprintf( tofree[i].extradefs[l], "%g", extras->orig.dval );
2142 lab[k].text = (unichar_t *) tofree[i].extradefs[l];
2143 lab[k].text_is_1byte = true;
2144 gcd[k].gd.label = &lab[k];
2145 gcd[k].gd.flags = gg_visible|gg_enabled;
2146 if ( extras->popup!=NULL )
2147 gcd[k].gd.popup_msg = _(extras->popup);
2148 gcd[k].data = extras->val;
2149 gcd[k].gd.cid = extras->cid = ++cid;
2150 gcd[k].gd.handle_controlevent = GRE_DoubleChanged;
2151 gcd[k++].creator = GTextFieldCreate;
2152 tofree[i].earray[hl][base+1] = &gcd[k-1];
2153 tofree[i].earray[hl][base+2] = GCD_ColSpan;
2154 break;
2155 case rt_coloralpha:
2156 case rt_color:
2157 extras->orig.ival = *(int *) (extras->val);
2158 lab[k].text = (unichar_t *) S_(extras->name);
2159 lab[k].text_is_1byte = true;
2160 gcd[k].gd.label = &lab[k];
2161 gcd[k].gd.flags = gg_visible|gg_enabled;
2162 if ( extras->popup!=NULL )
2163 gcd[k].gd.popup_msg = _(extras->popup);
2164 gcd[k++].creator = GLabelCreate;
2165 tofree[i].earray[hl][base] = &gcd[k-1];
2166
2167 gcd[k].gd.u.col = extras->orig.ival;
2168 if ( (extras->orig.ival&0xff000000)==0 && extras->type==rt_coloralpha )
2169 gcd[k].gd.u.col |= 0xfe000000;
2170 gcd[k].gd.flags = gg_visible|gg_enabled;
2171 if ( extras->popup!=NULL )
2172 gcd[k].gd.popup_msg = _(extras->popup);
2173 gcd[k].gd.cid = extras->cid = ++cid;
2174 gcd[k].data = extras->val;
2175 gcd[k].gd.handle_controlevent = GRE_ExtraColorChanged;
2176 gcd[k++].creator = GColorButtonCreate;
2177 tofree[i].earray[hl][base+1] = &gcd[k-1];
2178 tofree[i].earray[hl][base+2] = GCD_ColSpan;
2179 break;
2180 case rt_stringlong:
2181 if ( base==3 ) {
2182 tofree[i].earray[hl][3] = GCD_Glue;
2183 tofree[i].earray[hl][4] = GCD_Glue;
2184 tofree[i].earray[hl][5] = GCD_Glue;
2185 tofree[i].earray[hl][6] = GCD_Glue;
2186 tofree[i].earray[hl][7] = NULL;
2187 base=0; ++hl;
2188 }
2189 /* Fall through */
2190 case rt_string:
2191 extras->orig.sval = *(char **) (extras->val);
2192 lab[k].text = (unichar_t *) S_(extras->name);
2193 lab[k].text_is_1byte = true;
2194 gcd[k].gd.label = &lab[k];
2195 gcd[k].gd.flags = gg_visible|gg_enabled;
2196 if ( extras->popup!=NULL )
2197 gcd[k].gd.popup_msg = _(extras->popup);
2198 gcd[k++].creator = GLabelCreate;
2199 tofree[i].earray[hl][base] = &gcd[k-1];
2200
2201 if ( extras->orig.sval != NULL ) {
2202 lab[k].text = (unichar_t *) extras->orig.sval;
2203 lab[k].text_is_1byte = true;
2204 gcd[k].gd.label = &lab[k];
2205 }
2206 gcd[k].gd.flags = gg_visible|gg_enabled;
2207 if ( extras->popup!=NULL )
2208 gcd[k].gd.popup_msg = _(extras->popup);
2209 gcd[k].data = extras->val;
2210 gcd[k].gd.cid = extras->cid = ++cid;
2211 gcd[k].gd.handle_controlevent = GRE_StringChanged;
2212 gcd[k++].creator = GTextFieldCreate;
2213 tofree[i].earray[hl][base+1] = &gcd[k-1];
2214 tofree[i].earray[hl][base+2] = GCD_ColSpan;
2215 if ( extras->type==rt_stringlong ) {
2216 tofree[i].earray[hl][3] = GCD_ColSpan;
2217 tofree[i].earray[hl][4] = GCD_ColSpan;
2218 tofree[i].earray[hl][5] = GCD_ColSpan;
2219 tofree[i].earray[hl][6] = GCD_ColSpan;
2220 base=3;
2221 }
2222 break;
2223 case rt_font:
2224 if ( base==3 ) {
2225 tofree[i].earray[hl][3] = GCD_Glue;
2226 tofree[i].earray[hl][4] = GCD_Glue;
2227 tofree[i].earray[hl][5] = GCD_Glue;
2228 tofree[i].earray[hl][6] = GCD_Glue;
2229 tofree[i].earray[hl][7] = NULL;
2230 base=0; ++hl;
2231 }
2232 extras->orig.fontval = *(GFont **) (extras->val);
2233 lab[k].text = (unichar_t *) S_(extras->name);
2234 lab[k].text_is_1byte = true;
2235 gcd[k].gd.label = &lab[k];
2236 gcd[k].gd.flags = gg_visible|gg_enabled;
2237 if ( extras->popup!=NULL )
2238 gcd[k].gd.popup_msg = _(extras->popup);
2239 gcd[k++].creator = GLabelCreate;
2240 tofree[i].earray[hl][base] = &gcd[k-1];
2241
2242 if ( extras->orig.fontval != NULL ) {
2243 tofree[i].extradefs[l] = GFontSpec2String( extras->orig.fontval );
2244 lab[k].text = (unichar_t *) tofree[i].extradefs[l];
2245 lab[k].text_is_1byte = true;
2246 gcd[k].gd.label = &lab[k];
2247 }
2248 gcd[k].gd.flags = gg_visible|gg_enabled;
2249 if ( extras->popup!=NULL )
2250 gcd[k].gd.popup_msg = _(extras->popup);
2251 gcd[k].data = extras->val;
2252 gcd[k].gd.cid = extras->cid = ++cid;
2253 gcd[k].gd.handle_controlevent = GRE_ExtraFontChanged;
2254 gcd[k++].creator = GTextFieldCreate;
2255 tofree[i].earray[hl][base+1] = &gcd[k-1];
2256 tofree[i].earray[hl][base+2] = GCD_ColSpan;
2257
2258 /* Font names (with potentially many families) tend to be long */
2259 tofree[i].earray[hl][3] = GCD_ColSpan;
2260 tofree[i].earray[hl][4] = GCD_ColSpan;
2261 tofree[i].earray[hl][5] = GCD_ColSpan;
2262 tofree[i].earray[hl][6] = GCD_ColSpan;
2263 base=3;
2264 break;
2265 case rt_image: {
2266 GResImage *ri = *(GResImage **) (extras->val);
2267 extras->orig.sval = copy( ri==NULL ? NULL : ri->filename );
2268 lab[k].text = (unichar_t *) S_(extras->name);
2269 lab[k].text_is_1byte = true;
2270 gcd[k].gd.label = &lab[k];
2271 gcd[k].gd.flags = gg_visible|gg_enabled;
2272 if ( extras->popup!=NULL )
2273 gcd[k].gd.popup_msg = _(extras->popup);
2274 gcd[k++].creator = GLabelCreate;
2275 tofree[i].earray[hl][base] = &gcd[k-1];
2276
2277 if ( ri != NULL && ri->image!=NULL ) {
2278 lab[k].text = (unichar_t *) "...";
2279 lab[k].image = ri->image;
2280 } else
2281 lab[k].text = (unichar_t *) "? ...";
2282 lab[k].text_is_1byte = true;
2283 gcd[k].gd.label = &lab[k];
2284 gcd[k].gd.flags = gg_visible|gg_enabled;
2285 if ( extras->popup!=NULL )
2286 gcd[k].gd.popup_msg = _(extras->popup);
2287 gcd[k].data = extras->val;
2288 gcd[k].gd.cid = extras->cid = ++cid;
2289 gcd[k].gd.handle_controlevent = GRE_ImageChanged;
2290 gcd[k++].creator = GButtonCreate;
2291 tofree[i].earray[hl][base+1] = &gcd[k-1];
2292 tofree[i].earray[hl][base+2] = GCD_ColSpan;
2293 } break;
2294 }
2295 }
2296 if ( base==0 ) {
2297 tofree[i].earray[hl][3] = GCD_Glue;
2298 tofree[i].earray[hl][4] = GCD_Glue;
2299 tofree[i].earray[hl][5] = GCD_Glue;
2300 tofree[i].earray[hl][6] = GCD_Glue;
2301 tofree[i].earray[hl][7] = NULL;
2302 }
2303 tofree[i].earray[hl+1][0] = NULL;
2304 tofree[i].extrabox.gd.flags = gg_visible|gg_enabled;
2305 tofree[i].extrabox.gd.u.boxelements = tofree[i].earray[0];
2306 tofree[i].extrabox.creator = GHVBoxCreate;
2307 tofree[i].marray[j++] = &tofree[i].extrabox;
2308 }
2309 tofree[i].marray[j++] = GCD_Glue;
2310 tofree[i].marray[j++] = NULL;
2311 tofree[i].mainbox[0].gd.flags = gg_visible|gg_enabled;
2312 tofree[i].mainbox[0].gd.u.boxelements = tofree[i].marray;
2313 tofree[i].mainbox[0].creator = GVBoxCreate;
2314 panes[i].text = (unichar_t *) S_(res->name);
2315 panes[i].text_is_1byte = true;
2316 panes[i].gcd = &tofree[i].mainbox[0];
2317 for ( parent=res; parent!=NULL; parent=parent->inherits_from, ++panes[i].nesting );
2318 if ( k>cnt )
2319 GDrawIError( "ResEdit Miscounted, expect a crash" );
2320 }
2321
2322 memset(topgcd,0,sizeof(topgcd));
2323 memset(topbox,0,sizeof(topbox));
2324 memset(toplab,0,sizeof(toplab));
2325
2326 topgcd[0].gd.flags = gg_visible|gg_enabled|gg_tabset_vert|gg_tabset_scroll;
2327 topgcd[0].gd.u.tabs = panes;
2328 topgcd[0].creator = GTabSetCreate;
2329
2330 toplab[1].text = (unichar_t *) _("_OK");
2331 toplab[1].text_is_1byte = true;
2332 toplab[1].text_in_resource = true;
2333 topgcd[1].gd.label = &toplab[1];
2334 topgcd[1].gd.flags = gg_visible|gg_enabled | gg_but_default;
2335 topgcd[1].gd.handle_controlevent = GRE_OK;
2336 topgcd[1].creator = GButtonCreate;
2337
2338 toplab[2].text = (unichar_t *) _("_Save As...");
2339 toplab[2].text_is_1byte = true;
2340 toplab[2].text_in_resource = true;
2341 topgcd[2].gd.label = &toplab[2];
2342 topgcd[2].gd.flags = gg_visible|gg_enabled;
2343 topgcd[2].gd.handle_controlevent = GRE_Save;
2344 topgcd[2].creator = GButtonCreate;
2345
2346 toplab[3].text = (unichar_t *) _("_Cancel");
2347 toplab[3].text_is_1byte = true;
2348 toplab[3].text_in_resource = true;
2349 topgcd[3].gd.label = &toplab[3];
2350 topgcd[3].gd.flags = gg_visible|gg_enabled | gg_but_cancel;
2351 topgcd[3].gd.handle_controlevent = GRE_Cancel;
2352 topgcd[3].creator = GButtonCreate;
2353
2354 barray[0] = GCD_Glue; barray[1] = &topgcd[1]; barray[2] = GCD_Glue;
2355 barray[3] = GCD_Glue; barray[4] = &topgcd[2]; barray[5] = GCD_Glue;
2356 barray[6] = GCD_Glue; barray[7] = &topgcd[3]; barray[8] = GCD_Glue;
2357 barray[9] = NULL;
2358
2359 topbox[2].gd.flags = gg_visible | gg_enabled;
2360 topbox[2].gd.u.boxelements = barray;
2361 topbox[2].creator = GHBoxCreate;
2362
2363 tarray[0][0] = &topgcd[0]; tarray[0][1] = NULL;
2364 tarray[1][0] = &topbox[2]; tarray[1][1] = NULL;
2365 tarray[2][0] = NULL;
2366
2367 topbox[0].gd.pos.x = topbox[0].gd.pos.y = 2;
2368 topbox[0].gd.flags = gg_visible | gg_enabled;
2369 topbox[0].gd.u.boxelements = tarray[0];
2370 topbox[0].creator = GHVGroupCreate;
2371
2372 GGadgetsCreate(gw,topbox);
2373 gre.tabset = topgcd[0].ret;
2374
2375 GHVBoxSetExpandableRow(topbox[0].ret,0);
2376 GHVBoxSetExpandableCol(topbox[2].ret,gb_expandgluesame);
2377
2378 for ( res=all, i=0; res!=NULL; res=res->next, ++i ) {
2379 GHVBoxSetExpandableRow(tofree[i].mainbox[0].ret,gb_expandglue);
2380 if ( res->examples!=NULL &&
2381 ( res->examples->creator==GHBoxCreate ||
2382 res->examples->creator==GVBoxCreate ||
2383 res->examples->creator==GHVBoxCreate )) {
2384 GHVBoxSetExpandableCol(res->examples->ret,gb_expandglue);
2385 GHVBoxSetExpandableRow(res->examples->ret,gb_expandglue);
2386 }
2387 if ( tofree[i].ibox.ret!=NULL )
2388 GHVBoxSetExpandableCol(tofree[i].ibox.ret,gb_expandglue);
2389 if ( tofree[i].flagsbox.ret!=NULL )
2390 GHVBoxSetExpandableCol(tofree[i].flagsbox.ret,gb_expandglue);
2391 if ( tofree[i].colbox.ret!=NULL )
2392 GHVBoxSetExpandableCol(tofree[i].colbox.ret,gb_expandglue);
2393 if ( tofree[i].extrabox.ret!=NULL )
2394 GHVBoxSetExpandableCol(tofree[i].extrabox.ret,gb_expandglue);
2395 if ( tofree[i].sabox.ret!=NULL )
2396 GHVBoxSetExpandableCol(tofree[i].sabox.ret,gb_expandglue);
2397 if ( tofree[i].fontbox.ret!=NULL )
2398 GHVBoxSetExpandableCol(tofree[i].fontbox.ret,2);
2399 if ( res->boxdata!=NULL ) {
2400 GGadgetSelectOneListItem(GWidgetGetControl(gw,tofree[i].btcid),res->boxdata->border_type);
2401 GGadgetSelectOneListItem(GWidgetGetControl(gw,tofree[i].btcid+3),res->boxdata->border_shape);
2402 }
2403 }
2404
2405 GHVBoxFitWindowCentered(topbox[0].ret);
2406 GDrawSetVisible(gw,true);
2407
2408 while ( !gre.done )
2409 GDrawProcessOneEvent(NULL);
2410 GDrawDestroyWindow(gw);
2411
2412 for ( res=all, i=0; res!=NULL; res=res->next, ++i ) {
2413 free(tofree[i].gcd);
2414 free(tofree[i].lab);
2415 free(tofree[i].earray);
2416 free(tofree[i].fontname);
2417 if ( res->extras!=NULL ) {
2418 for ( l=0, extras = res->extras ; extras->name!=NULL; ++extras, ++l ) {
2419 free( tofree[i].extradefs[l]);
2420 }
2421 }
2422 free(tofree[i].extradefs);
2423 }
2424 free( tofree );
2425 free( panes );
2426 }
2427
2428 static double _GDraw_Width_cm, _GDraw_Width_Inches;
2429 static Color _GDraw_fg, _GDraw_bg;
2430 static struct resed gdrawcm_re[] = {
2431 {N_("Default Background"), "Background", rt_color, &_GDraw_bg, N_("Default background color for windows"), NULL, { 0 }, 0, 0 },
2432 {N_("Default Foreground"), "Foreground", rt_color, &_GDraw_fg, N_("Default foreground color for windows"), NULL, { 0 }, 0, 0 },
2433 {N_("Screen Width in Centimeters"), "ScreenWidthCentimeters", rt_double, &_GDraw_Width_cm, N_("Physical screen width, measured in centimeters\nFor this to take effect you must save the resource data (press the [Save] button)\nand restart fontforge"), NULL, { 0 }, 0, 0 },
2434 RESED_EMPTY
2435 };
2436 static struct resed gdrawin_re[] = {
2437 {N_("Default Background"), "Background", rt_color, &_GDraw_bg, N_("Default background color for windows"), NULL, { 0 }, 0, 0 },
2438 {N_("Default Foreground"), "Foreground", rt_color, &_GDraw_fg, N_("Default foreground color for windows"), NULL, { 0 }, 0, 0 },
2439 {N_("Screen Width in Inches"), "ScreenWidthInches", rt_double, &_GDraw_Width_Inches, N_("Physical screen width, measured in inches\nFor this to take effect you must save the resource data (press the [Save] button)\nand restart fontforge"), NULL, { 0 }, 0, 0 },
2440 RESED_EMPTY
2441 };
2442 static GResInfo gdraw_ri = {
2443 NULL, NULL,NULL, NULL,
2444 NULL,
2445 NULL,
2446 NULL,
2447 gdrawcm_re,
2448 N_("GDraw"),
2449 N_("General facts about the windowing system"),
2450 "",
2451 "Gdraw",
2452 false,
2453 0,
2454 NULL,
2455 GBOX_EMPTY,
2456 NULL,
2457 NULL,
2458 NULL
2459 };
2460
refresh_eh(GWindow cover,GEvent * event)2461 static int refresh_eh(GWindow cover,GEvent *event) {
2462 if ( event->type==et_expose )
2463 GDrawDestroyWindow(cover);
2464 return( true );
2465 }
2466
GResEdit(GResInfo * additional,const char * def_res_file,void (* change_res_filename)(const char *))2467 void GResEdit(GResInfo *additional,const char *def_res_file,void (*change_res_filename)(const char *)) {
2468 GResInfo *re_end, *re;
2469 static int initted = false;
2470 char *oldimagepath;
2471 extern char *_GGadget_ImagePath;
2472
2473 if ( !initted ) {
2474 initted = true;
2475 _GDraw_Width_Inches = screen_display->groot->pos.width / (double) screen_display->res;
2476 _GDraw_Width_cm = _GDraw_Width_Inches * 2.54;
2477 _GDraw_bg = GDrawGetDefaultBackground(NULL);
2478 _GDraw_fg = GDrawGetDefaultForeground(NULL);
2479 if ( getenv("LC_MESSAGES")!=NULL ) {
2480 if ( strstr(getenv("LC_MESSAGES"),"_US")!=NULL )
2481 gdraw_ri.extras = gdrawin_re;
2482 } else if ( getenv("LANG")!=NULL ) {
2483 if ( strstr(getenv("LANG"),"_US")!=NULL )
2484 gdraw_ri.extras = gdrawin_re;
2485 }
2486 gdraw_ri.next = _GProgressRIHead();
2487 for ( re_end = _GProgressRIHead(); re_end->next!=NULL; re_end = re_end->next );
2488 re_end->next = _GGadgetRIHead();
2489 for ( re_end = _GGadgetRIHead(); re_end->next!=NULL; re_end = re_end->next );
2490 re_end->next = _GButtonRIHead();
2491 for ( re_end = _GButtonRIHead(); re_end->next!=NULL; re_end = re_end->next );
2492 re_end->next = _GRadioRIHead();
2493 for ( re_end = _GRadioRIHead(); re_end->next!=NULL; re_end = re_end->next );
2494 re_end->next = _GTextFieldRIHead();
2495 for ( re_end = _GTextFieldRIHead(); re_end->next!=NULL; re_end = re_end->next );
2496 re_end->next = _GListRIHead();
2497 for ( re_end = _GListRIHead(); re_end->next!=NULL; re_end = re_end->next );
2498 re_end->next = _GScrollBarRIHead();
2499 for ( re_end = _GScrollBarRIHead(); re_end->next!=NULL; re_end = re_end->next );
2500 re_end->next = _GLineRIHead();
2501 for ( re_end = _GLineRIHead(); re_end->next!=NULL; re_end = re_end->next );
2502 re_end->next = _GHVBoxRIHead();
2503 for ( re_end = _GHVBoxRIHead(); re_end->next!=NULL; re_end = re_end->next );
2504 re_end->next = _GMenuRIHead();
2505 for ( re_end = _GMenuRIHead(); re_end->next!=NULL; re_end = re_end->next );
2506 re_end->next = _GMatrixEditRIHead();
2507 for ( re_end = _GMatrixEditRIHead(); re_end->next!=NULL; re_end = re_end->next );
2508 re_end->next = _GDrawableRIHead();
2509 for ( re_end = _GDrawableRIHead(); re_end->next!=NULL; re_end = re_end->next );
2510 re_end->next = _GTabSetRIHead();
2511 for ( re_end = _GTabSetRIHead(); re_end->next!=NULL; re_end = re_end->next );
2512 }
2513 if ( additional!=NULL ) {
2514 for ( re_end=additional; re_end->next!=NULL; re_end = re_end->next );
2515 re_end->next = &gdraw_ri;
2516 } else {
2517 additional = &gdraw_ri;
2518 re_end = NULL;
2519 }
2520 oldimagepath = copy( _GGadget_ImagePath );
2521 GResEditDlg(additional,def_res_file,change_res_filename);
2522 if (( oldimagepath!=NULL && _GGadget_ImagePath==NULL ) ||
2523 ( oldimagepath==NULL && _GGadget_ImagePath!=NULL ) ||
2524 ( oldimagepath!=NULL && _GGadget_ImagePath!=NULL &&
2525 strcmp(oldimagepath,_GGadget_ImagePath)!=0 )) {
2526 char *new = _GGadget_ImagePath;
2527 _GGadget_ImagePath = oldimagepath;
2528 GGadgetSetImagePath(new);
2529 } else
2530 free( oldimagepath );
2531 for ( re=additional; re!=NULL; re=re->next ) {
2532 if ( (re->override_mask&omf_refresh) && re->refresh!=NULL )
2533 (re->refresh)();
2534 }
2535 if ( re_end!=NULL )
2536 re_end->next = NULL;
2537
2538 /* Now create a window which covers the entire screen, and then destroy it*/
2539 /* point is to force a refresh on all our windows (it'll refresh everyone's*/
2540 /* else windows too, but oh well */
2541 {
2542 GWindowAttrs wattrs;
2543 GWindow root = GDrawGetRoot(screen_display);
2544 GRect screen;
2545 static GWindow gw;
2546
2547 GDrawGetSize(root,&screen);
2548 wattrs.mask = wam_events|wam_nodecor|wam_positioned|wam_bordwidth|wam_backcol;
2549 wattrs.event_masks = -1;
2550 wattrs.nodecoration = true;
2551 wattrs.positioned = true;
2552 wattrs.border_width = 0;
2553 wattrs.background_color = COLOR_UNKNOWN;
2554 gw = GDrawCreateTopWindow(screen_display,&screen,refresh_eh,&gw,&wattrs);
2555 GDrawSetVisible(gw,true);
2556 }
2557 }
2558
GResEditFind(struct resed * resed,char * prefix)2559 void GResEditFind( struct resed *resed, char *prefix) {
2560 int i;
2561 GResStruct *info;
2562
2563 for ( i=0; resed[i].name!=NULL; ++i );
2564
2565 info = calloc(i+1,sizeof(GResStruct));
2566 for ( i=0; resed[i].name!=NULL; ++i ) {
2567 info[i].resname = resed[i].resname;
2568 info[i].type = resed[i].type;
2569 if ( info[i].type==rt_stringlong )
2570 info[i].type = rt_string;
2571 else if ( info[i].type==rt_coloralpha )
2572 info[i].type = rt_color;
2573 info[i].val = resed[i].val;
2574 info[i].cvt = resed[i].cvt;
2575 if ( info[i].type==rt_font ) {
2576 info[i].type = rt_string;
2577 info[i].cvt = GResource_font_cvt;
2578 }
2579 }
2580 GResourceFind(info,prefix);
2581 for ( i=0; resed[i].name!=NULL; ++i )
2582 resed[i].found = info[i].found;
2583 free(info);
2584 }
2585