home *** CD-ROM | disk | FTP | other *** search
/ World of A1200 / World_Of_A1200.iso / programs / printer / graphpaper / src / src.lha / sliders.c < prev    next >
C/C++ Source or Header  |  1993-04-06  |  8KB  |  302 lines

  1. #include "graph.h"
  2.  
  3. void setstrgadget(struct Gadget *gad, char *str)
  4. {
  5.     /* set the string field to str */
  6.     strcpy(((struct StringInfo *)(gad->SpecialInfo)) -> Buffer, str);
  7.            ((struct StringInfo *)(gad->SpecialInfo)) -> DispPos   = 0;
  8.            ((struct StringInfo *)(gad->SpecialInfo)) -> BufferPos = 0;
  9.     RefreshOneGad(gad);
  10. }
  11.  
  12. void setslider(struct Gadget *slider,  float val)
  13. {
  14.   struct PropInfo *Prop = ((struct PropInfo *)slider->SpecialInfo);
  15.   int newvert;
  16.  
  17.   newvert = (int)((1.0-val)*0xFFFF + 0.5);
  18.   SnipAllBut(slider);
  19. #if 1
  20.   ModifyProp(slider, wG, NULL,  Prop->Flags,
  21.              Prop->HorizPot,    newvert,
  22.              Prop->HorizBody,   Prop->VertBody
  23.             );
  24. #else
  25.   /* what is NumGad??? */
  26.   NewModifyProp(slider ,wG ,NULL, Prop->Flags,
  27.                 Prop->HorizPot,   newvert,
  28.                 Prop->HorizBody,  Prop->VertBody,
  29.                 1 /* NumGad, what is this ??? */
  30.                );
  31. #endif
  32.   RestoreGads();
  33. }
  34.  
  35. void setintgad(struct Gadget *intgad, int value)
  36. {
  37.   char buf[50];
  38.  
  39.   sprintf(buf, "%d", value);
  40.   INTFIELD((*intgad)) = value;
  41.   setstrgadget(intgad, buf);
  42. }
  43.  
  44. void setfloatgad(struct Gadget *intgad, float value)
  45. {
  46.   char buf[50];
  47.  
  48.   sprintf(buf, "%.3f", value);
  49.   setstrgadget(intgad, buf);
  50. }
  51.  
  52. void setstrgad(struct Gadget *strgad, char *value)
  53. {
  54.   setstrgadget(strgad, value);
  55. }
  56.  
  57. /*  ********************  */
  58.  
  59. #define SIZES_RANGE 176
  60. float sizes[SIZES_RANGE] =
  61.       {       0.100, 0.125, 0.200, 0.250, 0.300, 0.375, 0.400,
  62.        0.500, 0.600, 0.625, 0.700, 0.750, 0.800, 0.875, 0.900,
  63.        1.000, 1.100, 1.125, 1.200, 1.250, 1.300, 1.375, 1.400,
  64.        1.500, 1.600, 1.625, 1.700, 1.750, 1.800, 1.875, 1.900,
  65.        2.000, 2.100, 2.125, 2.200, 2.250, 2.300, 2.375, 2.400,
  66.        2.500, 2.600, 2.625, 2.700, 2.750, 2.800, 2.875, 2.900,
  67.        3.000, 3.100, 3.125, 3.200, 3.250, 3.300, 3.375, 3.400,
  68.        3.500, 3.600, 3.625, 3.700, 3.750, 3.800, 3.875, 3.900,
  69.        4.000, 4.100, 4.125, 4.200, 4.250, 4.300, 4.375, 4.400,
  70.        4.500, 4.600, 4.625, 4.700, 4.750, 4.800, 4.875, 4.900,
  71.        5.000, 5.100, 5.125, 5.200, 5.250, 5.300, 5.375, 5.400,
  72.        5.500, 5.600, 5.625, 5.700, 5.750, 5.800, 5.875, 5.900,
  73.        6.000, 6.100, 6.125, 6.200, 6.250, 6.300, 6.375, 6.400,
  74.        6.500, 6.600, 6.625, 6.700, 6.750, 6.800, 6.875, 6.900,
  75.        7.000, 7.100, 7.125, 7.200, 7.250, 7.300, 7.375, 7.400,
  76.        7.500, 7.600, 7.625, 7.700, 7.750, 7.800, 7.875, 7.900,
  77.        8.000, 8.100, 8.125, 8.200, 8.250, 8.300, 8.375, 8.400,
  78.        8.500, 8.600, 8.625, 8.700, 8.750, 8.800, 8.875, 8.900,
  79.        9.000, 9.100, 9.125, 9.200, 9.250, 9.300, 9.375, 9.400,
  80.        9.500, 9.600, 9.625, 9.700, 9.750, 9.800, 9.875, 9.900,
  81.       10.000,10.100,10.125,10.200,10.250,10.300,10.375,10.400,
  82.       10.500,10.600,10.625,10.700,10.750,10.800,10.875,10.900,
  83.       11.000};
  84.  
  85. int find_size_index(float val)
  86. {
  87.     int i;
  88.     for (i=0; i<SIZES_RANGE; ++i) {
  89.         if (val <= sizes[i]) {
  90.             return i;
  91.         }
  92.     }
  93.     return SIZES_RANGE-1;
  94. }
  95.  
  96. #define RAWVAL(gad) (((struct PropInfo *)(gad.SpecialInfo))->VertPot)
  97.  
  98. #define SIZE(gad) sizes[(int)(SIZES_RANGE-1 - \
  99.                         (RAWVAL(gad) * (SIZES_RANGE-1)) / 0xFFFF + .5)]
  100.  
  101. #define GETSTRFIELD_F(gad,val) \
  102.         sscanf((char *)(((struct StringInfo *)(gad.SpecialInfo))->Buffer), "%f", &val)
  103.  
  104. #define GETSTRFIELD_I(gad,val) \
  105.         sscanf((char *)(((struct StringInfo *)(gad.SpecialInfo))->Buffer), "%d", &val)
  106.  
  107. static void size_setmiddle(void)
  108. {
  109.     float mean = (SIZE(size_slider_right) + SIZE(size_slider_left)) /2.;
  110.  
  111.     setslider  (&size_slider_middle,  mean/sizes[SIZES_RANGE-1]);
  112. }
  113.  
  114. void size_init(void)
  115. {
  116.     setslider(&size_slider_left,    x_size_v/sizes[SIZES_RANGE-1]);
  117.     setslider(&size_slider_right,   y_size_v/sizes[SIZES_RANGE-1]);
  118.     size_setmiddle();
  119.     setfloatgad(&x_size,            x_size_v);
  120.     setfloatgad(&y_size,            y_size_v);
  121. }
  122.  
  123. void y_size_func(APTR object)
  124. {
  125.     int index;
  126.     float val;
  127.     GETSTRFIELD_F(y_size, val);
  128.  
  129.     index = find_size_index(val);
  130.     setslider(&size_slider_right, ((float)index)/(SIZES_RANGE-1));
  131.     size_setmiddle();
  132. }
  133.  
  134. void size_slider_middle_func (APTR object)
  135. {
  136.     float size = SIZE(size_slider_middle);
  137.  
  138.     setslider(&size_slider_right,  ((float)SIZE(size_slider_middle))/sizes[SIZES_RANGE-1]);
  139.     setslider(&size_slider_left,   ((float)SIZE(size_slider_middle))/sizes[SIZES_RANGE-1]);
  140.     setfloatgad(&x_size, size);
  141.     setfloatgad(&y_size, size);
  142. }
  143.  
  144. void size_slider_right_func  (APTR object)
  145. {
  146.     float size =  SIZE(size_slider_right);
  147.  
  148.     setfloatgad(&y_size, size);
  149.     size_setmiddle();
  150. }
  151.  
  152. void size_slider_left_func   (APTR object)
  153. {
  154.     float size =  SIZE(size_slider_left);
  155.  
  156.     setfloatgad(&x_size, size);
  157.     size_setmiddle();
  158. }
  159.  
  160. void x_size_func(APTR object)
  161. {
  162.     int index;
  163.     float val;
  164.     GETSTRFIELD_F(x_size, val);
  165.  
  166.     index = find_size_index(val);
  167.     setslider     (&size_slider_left, ((float)index)/(SIZES_RANGE-1));
  168.     size_setmiddle();
  169. }
  170.  
  171. /*  ********************  */
  172.  
  173. #define GRIDS_MAX (50)
  174.  
  175. #define GRIDS(gad) ((int)(GRIDS_MAX - RAWVAL(gad)*(GRIDS_MAX-1.)/0xFFFF + .5))
  176.  
  177. static void grids_setmiddle(void)
  178. {
  179.     int mean  = (GRIDS(grids_slider_right) + GRIDS(grids_slider_left)) /2.;
  180.  
  181.     setslider(&grids_slider_middle,  ((float)mean)/(GRIDS_MAX-1));
  182. }
  183.  
  184. void grids_init()
  185. {
  186.     setslider(&grids_slider_left,   ((float)x_grids_page_v-1)/(GRIDS_MAX-1));
  187.     setslider(&grids_slider_right,  ((float)y_grids_page_v-1)/(GRIDS_MAX-1));
  188.     grids_setmiddle();
  189.     setintgad(&x_grids_page,x_grids_page_v);
  190.     setintgad(&y_grids_page,y_grids_page_v);
  191. }
  192.  
  193. void grids_slider_right_func (APTR object)
  194. {
  195.     int grids =  GRIDS(grids_slider_right);
  196.  
  197.     setintgad(&y_grids_page, grids);
  198.     grids_setmiddle();
  199. }
  200.  
  201. void grids_slider_middle_func(APTR object)
  202. {
  203.     int grids = GRIDS(grids_slider_middle);
  204.  
  205.     setslider(&grids_slider_left,   ((float)grids-1)/(GRIDS_MAX-1));
  206.     setslider(&grids_slider_right,  ((float)grids-1)/(GRIDS_MAX-1));
  207.     setintgad(&x_grids_page,grids);
  208.     setintgad(&y_grids_page,grids);
  209. }
  210.  
  211. void grids_slider_left_func  (APTR object)
  212. {
  213.     int grids =  GRIDS(grids_slider_left);
  214.  
  215.     setintgad     (&x_grids_page, grids);
  216.     grids_setmiddle();
  217. }
  218.  
  219. void y_grids_func            (APTR object)
  220. {
  221.     int val;
  222.     GETSTRFIELD_I(y_grids_page, val);
  223.  
  224.     setslider     (&grids_slider_right, ((float)val-1)/(GRIDS_MAX-1));
  225.     grids_setmiddle();
  226. }
  227.  
  228. void x_grids_func            (APTR object)
  229. {
  230.     int val;
  231.     GETSTRFIELD_I(x_grids_page, val);
  232.  
  233.     setslider     (&grids_slider_left, ((float)val-1)/(GRIDS_MAX-1));
  234.     grids_setmiddle();
  235. }
  236.  
  237. /*  ********************  */
  238.  
  239. #define MINORS_MAX (50)
  240.  
  241. #define MINORS(gad) ((int)(MINORS_MAX - RAWVAL(gad)*(MINORS_MAX-1.)/0xFFFF + .5))
  242.  
  243. static void minor_setmiddle(void)
  244. {
  245.     int mean   = (MINORS(minor_slider_right) + MINORS(minor_slider_left)) /2.;
  246.  
  247.     setslider(&minor_slider_middle,  ((float)mean)/(MINORS_MAX-1));
  248. }
  249.  
  250. void minors_init()
  251. {
  252.     setslider(&minor_slider_left,   ((float)minor_x_v-1)/(MINORS_MAX-1));
  253.     setslider(&minor_slider_right,  ((float)minor_y_v-1)/(MINORS_MAX-1));
  254.     minor_setmiddle();
  255.     setintgad(&minor_x,minor_x_v);
  256.     setintgad(&minor_y,minor_y_v);
  257. }
  258.  
  259. void minor_slider_left_func  (APTR object)
  260. {
  261.     int minors =  MINORS(minor_slider_left);
  262.  
  263.     setintgad(&minor_x, minors);
  264.     minor_setmiddle();
  265. }
  266.  
  267. void minor_slider_middle_func(APTR object)
  268. {
  269.     int minors = MINORS(minor_slider_middle);
  270.  
  271.     setslider(&minor_slider_left,   ((float)minors-1)/(MINORS_MAX-1));
  272.     setslider(&minor_slider_right,  ((float)minors-1)/(MINORS_MAX-1));
  273.     setintgad(&minor_x,minors);
  274.     setintgad(&minor_y,minors);
  275. }
  276.  
  277. void minor_slider_right_func (APTR object)
  278. {
  279.     int minors =  MINORS(minor_slider_right);
  280.  
  281.     setintgad(&minor_y, minors);
  282.     minor_setmiddle();
  283. }
  284.  
  285. void minor_y_func            (APTR object)
  286. {
  287.     int val;
  288.     GETSTRFIELD_I(minor_y, val);
  289.  
  290.     setslider     (&minor_slider_right, ((float)val-1)/(MINORS_MAX-1));
  291.     minor_setmiddle();
  292. }
  293.  
  294. void minor_x_func            (APTR object)
  295. {
  296.     int val;
  297.     GETSTRFIELD_I(minor_x, val);
  298.  
  299.     setslider     (&minor_slider_left, ((float)val-1)/(MINORS_MAX-1));
  300.     minor_setmiddle();
  301. }
  302.