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