home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / x / volume19 / xephem / part18 / preferences.c < prev    next >
C/C++ Source or Header  |  1993-05-15  |  7KB  |  248 lines

  1. /* code to support the preferences facility.
  2.  * not much now, but expected to grow.
  3.  * not all of these are necessarily settable in the Preferences mainmenu
  4.  *   pulldown yet.
  5.  */
  6.  
  7. #include <Xm/Xm.h>
  8. #include <Xm/RowColumn.h>
  9. #include <Xm/ToggleB.h>
  10. #include <Xm/CascadeB.h>
  11. #include "astro.h"
  12. #include "circum.h"
  13. #include "preferences.h"
  14.  
  15. #if defined(__STDC__) || defined(__cplusplus)
  16. #define P_(s) s
  17. #else
  18. #define P_(s) ()
  19. #endif
  20.  
  21. extern void redraw_screen P_((int how_much));
  22. extern void set_xmstring P_((Widget w, char *resource, char *txt));
  23. extern void xe_msg P_((char *msg, int app_modal));
  24.  
  25. void pref_create_pulldown P_((Widget menu_bar));
  26. int pref_get P_((int pref));
  27. static void pref_algo_cb P_((Widget w, XtPointer client, XtPointer call));
  28. static void pref_date_cb P_((Widget w, XtPointer client, XtPointer call));
  29. static void pref_units_cb P_((Widget w, XtPointer client, XtPointer call));
  30.  
  31. #undef P_
  32.  
  33. extern char *myclass;
  34. extern Widget toplevel_w;
  35. #define    XtD    XtDisplay(toplevel_w)
  36.  
  37. /* record of preferences values */
  38. static int prefs[NPREFS];
  39.  
  40. /* Create "Preferences" PulldownMenu.
  41.  * use the given menu_bar widget as a base.
  42.  * this is called early when the main menu bar is being built..
  43.  * initialize the prefs[] array from the initial state of the toggle buttons.
  44.  */
  45. void
  46. pref_create_pulldown (menu_bar)
  47. Widget menu_bar;
  48. {
  49.     Widget tb1, tb2, tb3;
  50.     Widget cascade, menu_pane, pull_right;
  51.     Arg args[20];
  52.     int n;
  53.  
  54.     n = 0;
  55.     menu_pane = XmCreatePulldownMenu (menu_bar, "Preferences", args, n);
  56.  
  57.         /* create the algorithms pullright menu */
  58.  
  59.         n = 0;
  60.         XtSetArg (args[n], XmNradioBehavior, True); n++;
  61.         pull_right = XmCreatePulldownMenu (menu_pane, "Algorithms", args,n);
  62.  
  63.         n = 0;
  64.         XtSetArg (args[n], XmNmnemonic, 'A'); n++;
  65.         tb1 = XmCreateToggleButton (pull_right, "Accurate", args, n);
  66.         XtAddCallback (tb1, XmNvalueChangedCallback, pref_algo_cb,
  67.                             (XtPointer)PREF_ACCURATE);
  68.         XtManageChild (tb1);
  69.  
  70.         n = 0;
  71.         XtSetArg (args[n], XmNmnemonic, 'F'); n++;
  72.         tb2 = XmCreateToggleButton (pull_right, "Fast", args, n);
  73.         XtAddCallback (tb2, XmNvalueChangedCallback, pref_algo_cb,
  74.                             (XtPointer)PREF_FAST);
  75.         XtManageChild (tb2);
  76.  
  77.         if (XmToggleButtonGetState(tb1))
  78.         prefs[PREF_ALGO] = PREF_ACCURATE;
  79.         else if (XmToggleButtonGetState(tb2))
  80.         prefs[PREF_ALGO] = PREF_FAST;
  81.         else {
  82.         xe_msg ("Neither Alogirthms preference is set -- defaulting to Accurate\n", 0);
  83.         XmToggleButtonSetState (tb1, True, False);
  84.         prefs[PREF_ALGO] = PREF_ACCURATE;
  85.         }
  86.  
  87.         n = 0;
  88.         XtSetArg (args[n], XmNsubMenuId, pull_right);  n++;
  89.         XtSetArg (args[n], XmNmnemonic, 'A'); n++;
  90.         cascade = XmCreateCascadeButton (menu_pane, "AlgorithmsCB",args,n);
  91.         XtManageChild (cascade);
  92.         set_xmstring (cascade, XmNlabelString, "Algorithms");
  93.  
  94.         /* create the date formats pullright menu */
  95.  
  96.         n = 0;
  97.         XtSetArg (args[n], XmNradioBehavior, True); n++;
  98.         pull_right = XmCreatePulldownMenu (menu_pane, "DateFormat",args,n);
  99.  
  100.         n = 0;
  101.         XtSetArg (args[n], XmNmnemonic, 'm'); n++;
  102.         tb1 = XmCreateToggleButton (pull_right, "MDY", args, n);
  103.         XtManageChild (tb1);
  104.         XtAddCallback (tb1, XmNvalueChangedCallback, pref_date_cb,
  105.                             (XtPointer)PREF_MDY);
  106.         set_xmstring (tb1, XmNlabelString, "M/D/Y");
  107.         n = 0;
  108.         XtSetArg (args[n], XmNmnemonic, 'y'); n++;
  109.         tb2 = XmCreateToggleButton (pull_right, "YMD", args, n);
  110.         XtAddCallback (tb2, XmNvalueChangedCallback, pref_date_cb,
  111.                             (XtPointer)PREF_YMD);
  112.         XtManageChild (tb2);
  113.         set_xmstring (tb2, XmNlabelString, "Y/M/D");
  114.         n = 0;
  115.         XtSetArg (args[n], XmNmnemonic, 'd'); n++;
  116.         tb3 = XmCreateToggleButton (pull_right, "DMY", args, n);
  117.         XtAddCallback (tb3, XmNvalueChangedCallback, pref_date_cb,
  118.                             (XtPointer)PREF_DMY);
  119.         XtManageChild (tb3);
  120.         set_xmstring (tb3, XmNlabelString, "D/M/Y");
  121.  
  122.         if (XmToggleButtonGetState(tb1))
  123.         prefs[PREF_DATE_FORMAT] = PREF_MDY;
  124.         else if (XmToggleButtonGetState(tb2))
  125.         prefs[PREF_DATE_FORMAT] = PREF_YMD;
  126.         else if (XmToggleButtonGetState(tb3))
  127.         prefs[PREF_DATE_FORMAT] = PREF_DMY;
  128.         else {
  129.         xe_msg ("No DateFormat preference is set -- defaulting to MDY\n", 0);
  130.         XmToggleButtonSetState (tb1, True, False);
  131.         prefs[PREF_DATE_FORMAT] = PREF_MDY;
  132.         }
  133.  
  134.         n = 0;
  135.         XtSetArg (args[n], XmNsubMenuId, pull_right);  n++;
  136.         XtSetArg (args[n], XmNmnemonic, 'D'); n++;
  137.         cascade = XmCreateCascadeButton (menu_pane, "DateFormatCB",args, n);
  138.         XtManageChild (cascade);
  139.         set_xmstring (cascade, XmNlabelString, "Date formats");
  140.  
  141.         /* create the units pullright menu */
  142.  
  143.         n = 0;
  144.         XtSetArg (args[n], XmNradioBehavior, True); n++;
  145.         pull_right = XmCreatePulldownMenu (menu_pane, "Units", args,n);
  146.  
  147.         n = 0;
  148.         XtSetArg (args[n], XmNmnemonic, 'E'); n++;
  149.         tb1 = XmCreateToggleButton (pull_right, "English", args, n);
  150.         XtAddCallback (tb1, XmNvalueChangedCallback, pref_units_cb,
  151.                             (XtPointer)PREF_ENGLISH);
  152.         XtManageChild (tb1);
  153.  
  154.         n = 0;
  155.         XtSetArg (args[n], XmNmnemonic, 'M'); n++;
  156.         tb2 = XmCreateToggleButton (pull_right, "Metric", args, n);
  157.         XtAddCallback (tb2, XmNvalueChangedCallback, pref_units_cb,
  158.                             (XtPointer)PREF_METRIC);
  159.         XtManageChild (tb2);
  160.  
  161.         if (XmToggleButtonGetState(tb1))
  162.         prefs[PREF_UNITS] = PREF_ENGLISH;
  163.         else if (XmToggleButtonGetState(tb2))
  164.         prefs[PREF_UNITS] = PREF_METRIC;
  165.         else {
  166.         xe_msg ("Neither Units preference is set -- defaulting to English\n", 0);
  167.         XmToggleButtonSetState (tb1, True, False);
  168.         prefs[PREF_UNITS] = PREF_ENGLISH;
  169.         }
  170.  
  171.         n = 0;
  172.         XtSetArg (args[n], XmNsubMenuId, pull_right);  n++;
  173.         XtSetArg (args[n], XmNmnemonic, 'U'); n++;
  174.         cascade = XmCreateCascadeButton (menu_pane, "UnitsCB", args, n);
  175.         XtManageChild (cascade);
  176.         set_xmstring (cascade, XmNlabelString, "Units");
  177.  
  178.     n = 0;
  179.     XtSetArg (args[n], XmNsubMenuId, menu_pane);  n++;
  180.     XtSetArg (args[n], XmNmnemonic, 'P'); n++;
  181.     cascade = XmCreateCascadeButton (menu_bar, "PreferencesCB", args, n);
  182.     set_xmstring (cascade, XmNlabelString, "Preferences");
  183.     XtManageChild (cascade);
  184. }
  185.  
  186. /* called anytime we want to know a preference.
  187.  */
  188. int
  189. pref_get(pref)
  190. int pref;
  191. {
  192.     return (prefs[pref]);
  193. }
  194.  
  195. /* called when a PREF_ALGO preference changes.
  196.  * the new value is in client.
  197.  */
  198. /* ARGSUSED */
  199. static void
  200. pref_algo_cb (w, client, call)
  201. Widget w;
  202. XtPointer client;
  203. XtPointer call;
  204. {
  205.     XmToggleButtonCallbackStruct *s = (XmToggleButtonCallbackStruct *)call;
  206.  
  207.     if (s->set) {
  208.         prefs[PREF_ALGO] = (int)client;
  209.         redraw_screen (1);
  210.     }
  211. }
  212.  
  213. /* called when a PREF_DATE_FORMAT preference changes.
  214.  * the new value is in client.
  215.  */
  216. /* ARGSUSED */
  217. static void
  218. pref_date_cb (w, client, call)
  219. Widget w;
  220. XtPointer client;
  221. XtPointer call;
  222. {
  223.     XmToggleButtonCallbackStruct *s = (XmToggleButtonCallbackStruct *)call;
  224.  
  225.     if (s->set) {
  226.         prefs[PREF_DATE_FORMAT] = (int)client;
  227.         redraw_screen (1);
  228.     }
  229. }
  230.  
  231. /* called when a PREF_UNITS preference changes.
  232.  * the new value is in client.
  233.  */
  234. /* ARGSUSED */
  235. static void
  236. pref_units_cb (w, client, call)
  237. Widget w;
  238. XtPointer client;
  239. XtPointer call;
  240. {
  241.     XmToggleButtonCallbackStruct *s = (XmToggleButtonCallbackStruct *)call;
  242.  
  243.     if (s->set) {
  244.         prefs[PREF_UNITS] = (int)client;
  245.         redraw_screen (1);
  246.     }
  247. }
  248.