1 /*
2 **
3 ** options_gv.c
4 **
5 ** Copyright (C) 1995, 1996, 1997 Johannes Plass
6 ** Copyright (C) 2004 Jose E. Marchesi
7 **
8 ** This program is free software; you can redistribute it and/or modify
9 ** it under the terms of the GNU General Public License as published by
10 ** the Free Software Foundation; either version 3 of the License, or
11 ** (at your option) any later version.
12 **
13 ** This program is distributed in the hope that it will be useful,
14 ** but WITHOUT ANY WARRANTY; without even the implied warranty of
15 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 ** GNU General Public License for more details.
17 **
18 ** You should have received a copy of the GNU General Public License
19 ** along with GNU gv; see the file COPYING. If not, write to
20 ** the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
21 ** Boston, MA 02111-1307, USA.
22 **
23 ** Author: Johannes Plass (plass@thep.physik.uni-mainz.de)
24 ** Department of Physics
25 ** Johannes Gutenberg-University
26 ** Mainz, Germany
27 **
28 ** Jose E. Marchesi (jemarch@gnu.org)
29 ** GNU Project
30 **
31 */
32 #include "ac_config.h"
33
34 /*
35 #define MESSAGES
36 */
37 #include "message.h"
38
39 #include "config.h"
40
41 #include <stdio.h>
42 #include <stdlib.h>
43 #include <ctype.h>
44 #include <math.h>
45
46 #include <inttypes.h>
47
48 #include "paths.h"
49 #include INC_X11(Intrinsic.h)
50 #include INC_X11(StringDefs.h)
51 #include INC_X11(Shell.h)
52 #include INC_XAW(SimpleMenu.h)
53 #include INC_XAW(SmeBSB.h)
54 #include "Aaa.h"
55 #include "Button.h"
56 #include "FileSel.h"
57 #include "Ghostview.h"
58 #include "Frame.h"
59 #include "MButton.h"
60 #include "Switch.h"
61
62 #include "types.h"
63 #include "callbacks.h"
64 #include "file.h"
65 #include "widgets_misc.h"
66 #include "main_resources.h"
67 #include "main_globals.h"
68 #include "misc.h"
69 #include "note.h"
70 #include "options.h"
71 #include "options_gv.h"
72 #include "ps.h"
73 #include "doc_misc.h"
74 #include "version.h"
75
76 #include "resource.h"
77
78 #include <string.h>
79
80 static Widget popup=NULL,optionControl;
81 static Widget antialiasToggle;
82 static Widget dscToggle,eofToggle,autoResizeToggle;
83 static Widget swapLandscapeToggle,watchToggle;
84 static Widget infoPopupLabel,infoPopupButton,infoPopupMenu;
85 static Widget ascale;
86 static Widget mediaLabel,mediaButton,mediaMenu=NULL;
87 static Widget fmediaLabel,fmediaButton,fmediaMenu=NULL;
88 static Widget orientLabel,orientButton,orientMenu;
89 static Widget forientLabel,forientButton,forientMenu;
90 static Widget scalesLabel,scalesButton,scalesMenu=NULL;
91 static Widget scaleBaseLabel,scaleBaseButton,scaleBaseMenu=NULL;
92
93 static int opt_orientation;
94 static int opt_pagemedia;
95
96 String orientations[5] = { 0 };
97 String popupVerb[5] = { 0 };
98 static String popupVerbExtern[5] = { "Silent", "Errors", "All", NULL };
99 static String orientationsExtern[5] = { "Portrait", "Landscape", "Upside-Down", "Seascape", 0 };
100
101 static void options_gv_create(void);
102 static void options_gv_setOptionsAtEntry(void);
103
104 /*------------------------------------------------------
105 OptionPopupStruct
106 ------------------------------------------------------*/
107
108 OptionPopupStruct gv_options_gv_struct = {
109 NULL,
110 options_gv_create,
111 options_gv_setOptionsAtEntry,
112 False
113 };
114
115 OptionPopup gv_options_gv = (OptionPopup) &gv_options_gv_struct;
116
117 /*------------------------------------------------------
118 options_gv_setOptionsAtEntry
119 ------------------------------------------------------*/
120
options_gv_setOptionsAtEntry(void)121 static void options_gv_setOptionsAtEntry(void)
122 {
123 String s;
124 Arg args[2];
125 Cardinal n;
126 int i;
127
128 BEGINMESSAGE(options_gv_setOptionsAtEntry)
129
130 widgets_setToggle(antialiasToggle, (app_res.antialias ? 1 : 0));
131 widgets_setToggle(dscToggle, ((gv_scanstyle & SCANSTYLE_IGNORE_DSC) ? 0 : 1));
132 widgets_setToggle(eofToggle, ((gv_scanstyle & SCANSTYLE_IGNORE_EOF) ? 1 : 0));
133 widgets_setToggle(autoResizeToggle, (app_res.auto_resize ? 1 : 0));
134 widgets_setToggle(swapLandscapeToggle, (gv_swap_landscape ? 1 : 0));
135 widgets_setToggle(watchToggle, (app_res.watch_file ? 1 : 0));
136
137 s=NULL;
138
139 for (i = 0; orientations[i]; i++) {
140 if (!strcasecmp(app_res.default_orientation,orientationsExtern[i]))
141 s = orientations[i];
142 }
143 if (!s) s = automaticLabel;
144 n=0;
145 XtSetArg(args[n], XtNlabel, s); n++;
146 XtSetValues(orientButton, args, n);
147 opt_orientation = doc_convStringToDocOrient(s);
148
149 s=NULL;
150 for (i = 0; orientations[i]; i++) {
151 if (!strcasecmp(app_res.fallback_orientation,orientationsExtern[i]))
152 s = orientations[i];
153 }
154 if (!s) s = orientations[0];
155 n=0;
156 XtSetArg(args[n], XtNlabel, s); n++;
157 XtSetValues(forientButton, args, n);
158
159 s=popupVerb[gv_infoVerbose];
160 n=0;
161 XtSetArg(args[n], XtNlabel, s); n++;
162 XtSetValues(infoPopupButton, args, n);
163
164 {
165 char number[80];
166 sprintf(number, "%.3f", gv_ascale*gv_ascale);
167 widgets_setText(ascale, number);
168 }
169
170 ENDMESSAGE(options_gv_setOptionsAtEntry)
171 }
172
173 /*------------------------------------------------------
174 options_gv_getScales
175 ------------------------------------------------------*/
176
options_gv_getScales(int * bP,int * sP)177 static void options_gv_getScales(int *bP,int *sP)
178 {
179 Arg args[1];
180 Cardinal n;
181 String bl,sl;
182 int i,si=0,bi=0;
183 BEGINMESSAGE(options_gv_getScales)
184 *sP=*bP=-1;
185 n=0;
186 XtSetArg(args[n], XtNlabel, &bl); n++;
187 XtGetValues(scaleBaseButton, args, n);
188 n=0;
189 XtSetArg(args[n], XtNlabel, &sl); n++;
190 XtGetValues(scalesButton, args, n);
191 for (i=0; gv_scales[i];i++) {
192 if (gv_scales[i]->is_base) {
193 if (!strcmp(gv_scales[i]->name,bl)) *bP=bi;
194 si++;
195 bi++;
196 } else {
197 if (!strcmp(gv_scales[i]->name,sl)) *sP=si;
198 si++;
199 }
200 }
201 ENDMESSAGE(options_gv_getScales)
202 }
203
204 /*------------------------------------------------------
205 options_gv_cb_apply
206 ------------------------------------------------------*/
207
options_gv_cb_apply(Widget w _GL_UNUSED,XtPointer client_data _GL_UNUSED,XtPointer call_data _GL_UNUSED)208 static void options_gv_cb_apply(Widget w _GL_UNUSED, XtPointer client_data _GL_UNUSED, XtPointer call_data _GL_UNUSED)
209 {
210 Arg args[5];
211 Cardinal n;
212 static Boolean s_media = False;
213 static Boolean s_fmedia = False;
214 static Boolean s_orient = False;
215 static Boolean s_forient = False;
216 Boolean b;
217 int i,j,k;
218 char* l;
219 Boolean redisplay=False;
220 Boolean reopen=False;
221 String v;
222 float Ascale;
223
224 BEGINMESSAGE(options_gv_cb_apply)
225
226 b = app_res.antialias;
227 app_res.antialias = SwitchIsSet(antialiasToggle) ? True : False;
228 cb_antialias(NULL,NULL,NULL); /* only change the menu entry */
229 if (b != app_res.antialias) reopen=True;
230
231 i = gv_swap_landscape;
232 gv_swap_landscape = SwitchIsSet(swapLandscapeToggle) ? 1 : 0;
233 if (i != gv_swap_landscape) redisplay=True;
234
235 b = SwitchIsSet(autoResizeToggle) ? True : False;
236 if (b != app_res.auto_resize) {
237 cb_autoResize(NULL,(XtPointer)1,NULL);
238 }
239
240 i = (gv_scanstyle & SCANSTYLE_IGNORE_DSC) ? 0 : 1;
241 j = SwitchIsSet(dscToggle) ? 1 : 0;
242 if (i != j) {
243 gv_scanstyle = (gv_scanstyle & SCANSTYLE_IGNORE_DSC) ?
244 (gv_scanstyle & ~SCANSTYLE_IGNORE_DSC) :
245 (gv_scanstyle | SCANSTYLE_IGNORE_DSC);
246 cb_handleDSC(NULL,NULL,NULL);
247 reopen=True;
248 }
249
250 b = SwitchIsSet(watchToggle) ? True : False;
251 if (b != app_res.watch_file) {
252 cb_watchFile(NULL,(XtPointer)1,NULL);
253 }
254
255 i = (gv_scanstyle & SCANSTYLE_IGNORE_EOF ? 1 : 0);
256 j = SwitchIsSet(eofToggle) ? 1 : 0;
257 if (i != j) {
258 gv_scanstyle = (gv_scanstyle & SCANSTYLE_IGNORE_EOF) ?
259 (gv_scanstyle & ~SCANSTYLE_IGNORE_EOF) :
260 (gv_scanstyle | SCANSTYLE_IGNORE_EOF);
261 cb_handleEOF(NULL,NULL,NULL);
262 reopen=True;
263 }
264
265 if (s_media) XtFree(app_res.default_pagemedia);
266 n=0;
267 XtSetArg(args[n], XtNlabel, &app_res.default_pagemedia);n++;
268 XtGetValues(mediaButton, args, n);
269 app_res.default_pagemedia = XtNewString(app_res.default_pagemedia);
270 i = doc_convStringToPageMedia(NULL,app_res.default_pagemedia);
271 if (i != opt_pagemedia) {
272 INFMESSAGE(pagemedia changed)
273 opt_pagemedia = i;
274 j = gv_pagemedia_auto;
275 k = gv_pagemedia;
276 gv_pagemedia_auto = 0;
277 i = doc_convStringToPageMedia(doc,app_res.default_pagemedia);
278 cb_setPagemedia(NULL,(XtPointer)(intptr_t)i,(XtPointer)1);
279 if ((j != gv_pagemedia_auto) || (k != gv_pagemedia)) redisplay = True;
280 }
281 s_media = True;
282
283 if (s_fmedia) XtFree(app_res.fallback_pagemedia);
284 n=0;
285 XtSetArg(args[n], XtNlabel, &app_res.fallback_pagemedia);n++;
286 XtGetValues(fmediaButton, args, n);
287 app_res.fallback_pagemedia = XtNewString(app_res.fallback_pagemedia);
288 gv_fallback_pagemedia = doc_convStringToPageMedia(NULL,app_res.fallback_pagemedia);
289 s_fmedia = True;
290
291 if (s_orient) XtFree(app_res.default_orientation);
292 n=0;
293 XtSetArg(args[n], XtNlabel, &v);n++;
294 XtGetValues(orientButton, args, n);
295
296 if (!strcmp(v, automaticLabel)) app_res.default_orientation = XtNewString("Automatic");
297 else if (!strcmp(v, orientations[0])) app_res.default_orientation = XtNewString(orientationsExtern[0]);
298 else if (!strcmp(v, orientations[1])) app_res.default_orientation = XtNewString(orientationsExtern[1]);
299 else if (!strcmp(v, orientations[2])) app_res.default_orientation = XtNewString(orientationsExtern[2]);
300 else if (!strcmp(v, orientations[3])) app_res.default_orientation = XtNewString(orientationsExtern[3]);
301
302 i = doc_convStringToDocOrient(app_res.default_orientation);
303 if (i != opt_orientation) {
304 INFMESSAGE(orientation changed)
305 opt_orientation = i;
306 j = gv_orientation_auto;
307 k = gv_orientation;
308 gv_orientation_auto = 0;
309 cb_setOrientation(NULL,(XtPointer)(intptr_t)i,(XtPointer)(intptr_t)1);
310 if ((j != gv_orientation_auto) || (k != gv_orientation)) redisplay = True;
311 }
312 s_orient = True;
313
314 if (s_forient) XtFree(app_res.fallback_orientation);
315 n=0;
316 XtSetArg(args[n], XtNlabel, &v);n++;
317 XtGetValues(forientButton, args, n);
318
319 if (!strcmp(v, orientations[0])) app_res.fallback_orientation = XtNewString(orientationsExtern[0]);
320 else if (!strcmp(v, orientations[1])) app_res.fallback_orientation = XtNewString(orientationsExtern[1]);
321 else if (!strcmp(v, orientations[2])) app_res.fallback_orientation = XtNewString(orientationsExtern[2]);
322 else if (!strcmp(v, orientations[3])) app_res.fallback_orientation = XtNewString(orientationsExtern[3]);
323
324 gv_fallback_orientation = doc_convStringToDocOrient(app_res.fallback_orientation);
325 s_forient = True;
326
327 options_gv_getScales(&i,&j);
328 if (i>=0 && i != gv_scale_base_current) {
329 gv_scale_base = i;
330 redisplay = True;
331 }
332 if (j>=0 && j != gv_scale_current) {
333 gv_scale = j;
334 redisplay = True;
335 }
336
337 n=0;
338 XtSetArg(args[n], XtNlabel, &l); n++;
339 XtGetValues(infoPopupButton, args, n);
340 i=0;j=0;
341 while (i<3) {
342 if (!strcmp(popupVerb[i],l)) j = i;
343 ++i;
344 }
345 if (j != gv_infoVerbose) {
346 gv_infoVerbose = j;
347 }
348
349 v = options_squeeze(widgets_getText(ascale));
350 sscanf(v, "%f", &Ascale);
351 Ascale=sqrt(Ascale);
352 if (Ascale != gv_ascale)
353 {
354 gv_ascale = Ascale;
355 redisplay = True;
356 }
357
358
359 if (reopen && gv_filename) {
360 cb_stopInterpreter(page,NULL,NULL);
361 show_page(REQUEST_REOPEN,NULL);
362 } else if (redisplay) show_page(REQUEST_OPTION_CHANGE,NULL);
363
364 ENDMESSAGE(options_gv_cb_apply)
365 }
366
orientation2extern(String l)367 static char* orientation2extern(String l)
368 {
369 int i;
370 for (i=0; orientations[i]; i++)
371 if (!strcmp(l, orientations[i]))
372 return orientationsExtern[i];
373 if (!strcmp(l, automaticLabel))
374 return "Automatic";
375 return l;
376 }
377
pagemedia2extern(String l)378 static char* pagemedia2extern(String l)
379 {
380 if (!strcmp(l, automaticLabel))
381 return "Automatic";
382 return l;
383 }
384
385 /*------------------------------------------------------
386 options_gv_cb_save
387 ------------------------------------------------------*/
388
389 static
options_gv_cb_save(Widget w _GL_UNUSED,XtPointer client_data _GL_UNUSED,XtPointer call_data _GL_UNUSED)390 void options_gv_cb_save(Widget w _GL_UNUSED, XtPointer client_data _GL_UNUSED, XtPointer call_data _GL_UNUSED)
391 {
392 int argn = 0;
393 String argi[30];
394 String argv[30];
395 String l;
396 Arg args[1];
397 Cardinal n;
398 String t = "True";
399 String f = "False";
400 int i,s,b;
401 char tmp[20];
402
403 BEGINMESSAGE(options_gv_cb_save)
404
405 options_setArg(&(argi[argn]),&(argv[argn]),s_version ,gv_class ,versionResource);
406 ++argn;
407 options_setArg(&(argi[argn]),&(argv[argn]),s_respectDSC ,gv_class ,SwitchIsSet(dscToggle) ? t : f);
408 ++argn;
409 options_setArg(&(argi[argn]),&(argv[argn]),s_ignoreEOF ,gv_class ,SwitchIsSet(eofToggle) ? t : f);
410 ++argn;
411 options_setArg(&(argi[argn]),&(argv[argn]),s_watchFile ,gv_class ,SwitchIsSet(watchToggle) ? t : f);
412 ++argn;
413 options_setArg(&(argi[argn]),&(argv[argn]),s_antialias ,gv_class ,SwitchIsSet(antialiasToggle) ? t : f);
414 ++argn;
415 options_setArg(&(argi[argn]),&(argv[argn]),s_autoResize ,gv_class ,SwitchIsSet(autoResizeToggle) ? t : f);
416 ++argn;
417 options_setArg(&(argi[argn]),&(argv[argn]),s_swapLandscape ,gv_class ,SwitchIsSet(swapLandscapeToggle) ? t : f);
418 ++argn;
419 n=0;
420 XtSetArg(args[n], XtNlabel, &l); n++;
421 XtGetValues(mediaButton, args, n);
422 options_setArg(&(argi[argn]),&(argv[argn]),s_pageMedia ,gv_class ,pagemedia2extern(l));
423 ++argn;
424 XtGetValues(fmediaButton, args, n);
425 options_setArg(&(argi[argn]),&(argv[argn]),s_fallbackPageMedia ,gv_class ,pagemedia2extern(l));
426 ++argn;
427 XtGetValues(orientButton, args, n);
428 options_setArg(&(argi[argn]),&(argv[argn]),s_orientation ,gv_class ,orientation2extern(l));
429 ++argn;
430 XtGetValues(forientButton, args, n);
431 options_setArg(&(argi[argn]),&(argv[argn]),s_fallbackOrientation,gv_class ,orientation2extern(l));
432 ++argn;
433
434 options_gv_getScales(&b,&s);
435 if (b>=0) {
436 sprintf(tmp,"%d",b+1);
437 options_setArg(&(argi[argn]),&(argv[argn]),s_scaleBase, gv_class ,tmp);
438 ++argn;
439 }
440 if (s>=0) {
441 for (i=0; gv_scales[i];i++) if (gv_scales[i]->is_center) break;
442 sprintf(tmp,"%d",s-i);
443 options_setArg(&(argi[argn]),&(argv[argn]),s_scale, gv_class ,tmp);
444 ++argn;
445 }
446
447
448 n=0;
449 XtSetArg(args[n], XtNlabel, &l); n++;
450 XtGetValues(infoPopupButton, args, n);
451 i=0; while (i<3) {
452 if (!strcmp(popupVerb[i],l)) sprintf(tmp,"%s",popupVerbExtern[i]);
453 ++i;
454 }
455 options_setArg(&(argi[argn]),&(argv[argn]),s_infoVerbose ,gv_class ,tmp);
456 ++argn;
457
458
459 options_save(argn,argi,argv);
460 while (--argn >=0) {
461 XtFree(argi[argn]);
462 XtFree(argv[argn]);
463 }
464
465 ENDMESSAGE(options_gv_cb_save)
466 }
467
468 /*######################################################
469 options_gv_createScaleMenus
470 ######################################################*/
471
options_gv_createScaleMenus(void)472 void options_gv_createScaleMenus(void)
473 {
474 int i,sn=0,bn=0;
475 Boolean change;
476 Widget p,w;
477
478 BEGINMESSAGE(options_gv_createScaleMenus)
479 if (!popup) {
480 INFMESSAGE(options not created)
481 ENDMESSAGE(options_gv_createScaleMenus)
482 return;
483 }
484 if (scalesMenu) {
485 XtDestroyWidget(scalesMenu);
486 scalesMenu = XtCreatePopupShell("menu", simpleMenuWidgetClass,scalesButton,NULL,(Cardinal)0);
487 } else {
488 options_createLabeledMenu("scales",optionControl,&scalesLabel,&scalesButton,&scalesMenu);
489 }
490 if (scaleBaseMenu) {
491 XtDestroyWidget(scaleBaseMenu);
492 scaleBaseMenu = XtCreatePopupShell("menu", simpleMenuWidgetClass,scaleBaseButton,NULL,(Cardinal)0);
493 } else {
494 options_createLabeledMenu("scaleBase",optionControl,&scaleBaseLabel,&scaleBaseButton,&scaleBaseMenu);
495 }
496 for (i = 0; gv_scales[i]; i++) {
497 change=False;
498 if (gv_scales[i]->is_base) {
499 p = scaleBaseMenu;
500 if (gv_scale_base_current==bn) change=True;
501 sn++;
502 bn++;
503 } else {
504 p = scalesMenu;
505 if (gv_scale_current==sn) change=True;
506 sn++;
507 }
508 w = XtCreateManagedWidget(gv_scales[i]->name,smeBSBObjectClass,p,NULL,(Cardinal)0);
509 XtAddCallback(w, XtNcallback,options_cb_changeMenuLabel,NULL);
510 if (change) options_cb_changeMenuLabel(w,NULL,NULL);
511 }
512 ENDMESSAGE(options_gv_createScaleMenus)
513 }
514
515 /*######################################################
516 options_gv_createMediaMenus
517 ######################################################*/
518
options_gv_createMediaMenus(void)519 void options_gv_createMediaMenus(void)
520 {
521 int i;
522 Widget w;
523 char *s;
524 Arg args[1];
525 Cardinal n;
526
527 BEGINMESSAGE(options_gv_createMediaMenus)
528 if (!popup) {
529 INFMESSAGE(options not created)
530 ENDMESSAGE(options_gv_createMediaMenus)
531 return;
532 }
533 if (mediaMenu) {
534 XtDestroyWidget(mediaMenu);
535 mediaMenu = XtCreatePopupShell("menu", simpleMenuWidgetClass,mediaButton,NULL,(Cardinal)0);
536 } else {
537 options_createLabeledMenu("media",optionControl,&mediaLabel,&mediaButton,&mediaMenu);
538 }
539 if (fmediaMenu) {
540 XtDestroyWidget(fmediaMenu);
541 fmediaMenu = XtCreatePopupShell("menu", simpleMenuWidgetClass,fmediaButton,NULL,(Cardinal)0);
542 } else {
543 options_createLabeledMenu("fmedia",optionControl,&fmediaLabel,&fmediaButton,&fmediaMenu);
544 }
545 w = XtCreateManagedWidget(automaticLabel,smeBSBObjectClass,mediaMenu,NULL,(Cardinal)0);
546 XtAddCallback(w, XtNcallback,options_cb_changeMenuLabel,NULL);
547 for (i = 0; gv_medias[i]; i++) {
548 if (gv_medias[i]->used) {
549 w = XtCreateManagedWidget(gv_medias[i]->name,smeBSBObjectClass, mediaMenu,NULL,(Cardinal)0);
550 XtAddCallback(w, XtNcallback,options_cb_changeMenuLabel,NULL);
551 if (i>0) { /* skip the bounding box */
552 w = XtCreateManagedWidget(gv_medias[i]->name,smeBSBObjectClass, fmediaMenu,NULL,(Cardinal)0);
553 XtAddCallback(w, XtNcallback,options_cb_changeMenuLabel,NULL);
554 }
555 }
556 }
557
558 s=NULL;
559 for (i = 0; gv_medias[i]; i++) {
560 if (gv_medias[i]->used && !strcasecmp(app_res.default_pagemedia,gv_medias[i]->name))
561 s = gv_medias[i]->name;
562 }
563 if (!s) s = automaticLabel;
564 n=0;
565 XtSetArg(args[n], XtNlabel, s); n++;
566 XtSetValues(mediaButton, args, n);
567 opt_pagemedia = doc_convStringToPageMedia(NULL,s);
568
569 s=NULL;
570 for (i = 0; gv_medias[i]; i++) {
571 if (gv_medias[i]->used && !strcasecmp(app_res.fallback_pagemedia,gv_medias[i]->name))
572 s = gv_medias[i]->name;
573 }
574 if (!s) {
575 i=1; while (!gv_medias[i]->used) i++;
576 s = gv_medias[1]->name;
577 }
578 n=0;
579 XtSetArg(args[n], XtNlabel, s); n++;
580 XtSetValues(fmediaButton, args, n);
581
582 ENDMESSAGE(options_gv_createMediaMenus)
583 }
584
585 /*------------------------------------------------------
586 options_gv_create
587 ------------------------------------------------------*/
588
options_gv_create(void)589 void options_gv_create(void)
590 {
591 Arg args[10];
592 Cardinal n;
593 Widget w;
594 int i;
595
596 BEGINMESSAGE(options_gv_create)
597
598 if (popup) {
599 INFMESSAGE(popup exists)
600 ENDMESSAGE(options_gv_create)
601 return;
602 }
603
604 n=0;
605 XtSetArg(args[n], XtNallowShellResize, True); n++;
606 popup = XtCreatePopupShell("optiongvPopup",transientShellWidgetClass,toplevel, args, n);
607 gv_options_gv->popup = popup;
608
609 n=0;
610 optionControl = XtCreateManagedWidget("optionControl",aaaWidgetClass,popup,args,n);
611
612 antialiasToggle = XtCreateManagedWidget("antialias",switchWidgetClass,optionControl,NULL,(Cardinal)0);
613 autoResizeToggle = XtCreateManagedWidget("autoResize",switchWidgetClass,optionControl,NULL,(Cardinal)0);
614 swapLandscapeToggle = XtCreateManagedWidget("swapLandscape",switchWidgetClass,optionControl,NULL,(Cardinal)0);
615 dscToggle = XtCreateManagedWidget("respectDSC",switchWidgetClass,optionControl,NULL,(Cardinal)0);
616 eofToggle = XtCreateManagedWidget("eof",switchWidgetClass,optionControl,NULL,(Cardinal)0);
617 watchToggle = XtCreateManagedWidget("watch",switchWidgetClass,optionControl,NULL,(Cardinal)0);
618
619 options_gv_createScaleMenus();
620 options_gv_createMediaMenus();
621 options_createLabeledMenu("orient",optionControl,&orientLabel,&orientButton,&orientMenu);
622 w = XtCreateManagedWidget(automaticLabel,smeBSBObjectClass,orientMenu,args,n);
623 XtAddCallback(w, XtNcallback,options_cb_changeMenuLabel,NULL);
624 options_createLabeledMenu("forient",optionControl,&forientLabel,&forientButton,&forientMenu);
625 for (i = 0; orientations[i]; i++) {
626 w = XtCreateManagedWidget(orientations[i],smeBSBObjectClass, orientMenu,NULL,(Cardinal)0);
627 XtAddCallback(w, XtNcallback,options_cb_changeMenuLabel,NULL);
628 w = XtCreateManagedWidget(orientations[i],smeBSBObjectClass, forientMenu,NULL,(Cardinal)0);
629 XtAddCallback(w, XtNcallback,options_cb_changeMenuLabel,NULL);
630 }
631 n=0;
632 options_createLabeledMenu("infoVerbose",optionControl,&infoPopupLabel,&infoPopupButton,&infoPopupMenu);
633 for (i = 0; popupVerb[i]; i++) {
634 w = XtCreateManagedWidget(popupVerb[i],smeBSBObjectClass, infoPopupMenu,NULL,(Cardinal)0);
635 XtAddCallback(w, XtNcallback,options_cb_changeMenuLabel,NULL);
636 }
637
638 ascale = widgets_createLabeledLineTextField("ascale", optionControl);
639
640 w = XtCreateManagedWidget("apply", buttonWidgetClass,optionControl, args, n);
641 XtAddCallback(w, XtNcallback, options_gv_cb_apply,NULL);
642 XtInstallAccelerators(optionControl, w);
643 w = XtCreateManagedWidget("save", buttonWidgetClass,optionControl, args, n);
644 XtAddCallback(w, XtNcallback, options_gv_cb_save,NULL);
645 XtInstallAccelerators(optionControl, w);
646 w = XtCreateManagedWidget("dismiss", buttonWidgetClass,optionControl, args, n);
647 XtAddCallback(w, XtNcallback, options_cb_popdown, (XtPointer)gv_options_gv);
648 XtInstallAccelerators(optionControl, w);
649
650 options_gv_setOptionsAtEntry();
651 options_realize(popup,optionControl);
652
653 ENDMESSAGE(options_gv_create)
654 }
655
656