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