home *** CD-ROM | disk | FTP | other *** search
/ Photo CD Demo 1 / Demo.bin / icoons / source / config.c < prev    next >
C/C++ Source or Header  |  1992-10-20  |  9KB  |  278 lines

  1. /************************************************************************/
  2. /*                                                                      */
  3. /* This file contains code for the Edit_Config command.            */
  4. /*                                                                      */
  5. /************************************************************************/
  6.  
  7. #include <stdio.h>
  8. #include <stdlib.h>
  9. #include <string.h>
  10. #include <ctype.h>
  11. #include <math.h>
  12.  
  13. #include "general.h"
  14. #include "globals.h"
  15. #include "intui.h"
  16. #include "spl_gfx.h"
  17. #include "config.h"
  18.  
  19.  
  20. /* Get Stringinfo buffer for the string gadget with id 'G':    */
  21. #define Get_Gadget_String(G) (((struct StringInfo *) \
  22.                 (ConfigGadgets[G]->SpecialInfo))->Buffer)
  23.  
  24.     /* Set string to 'S' in string gadget 'G':    */
  25. #define Set_Gadget_String(G, S) \
  26.         GT_SetGadgetAttrs(ConfigGadgets[G], \
  27.             Windows[W_Config].Window, NULL, \
  28.             GTST_String, S)
  29.  
  30. /* Get Stringinfo LongInt for the integer gadget with id 'G':    */
  31. #define Get_Gadget_Int(G) (((struct StringInfo *) \
  32.                 (ConfigGadgets[G]->SpecialInfo))->LongInt)
  33.  
  34.     /* Set number to 'N' in integer gadget 'G':    */
  35. #define Set_Gadget_Int(G, N) \
  36.         GT_SetGadgetAttrs(ConfigGadgets[G], \
  37.             Windows[W_Config].Window, NULL, \
  38.             GTIN_Number, N)
  39.  
  40.     /* Set check state to  to 'On_Off' in check gadget 'G':    */
  41. #define Set_Gadget_State(G, On_Off) \
  42.         GT_SetGadgetAttrs(ConfigGadgets[G], \
  43.             Windows[W_Config].Window, NULL, \
  44.             GTCB_Checked, (BOOL) (On_Off))
  45.  
  46.     /* Get gadget state for check gadget 'G':    */
  47. #define Get_Gadget_State(G) \
  48.         (ConfigGadgets[G]->Flags & GFLG_SELECTED)
  49.  
  50. void Config_Set_Values()
  51. /************************************************************************/
  52. /*                                                                      */
  53. /* Set fields in screen from global variables.                */
  54. /*                                                                      */
  55. /************************************************************************/
  56. {
  57.     char    Buffer[Buffer_Length+1];
  58.     double    D1, D2, D3;
  59.  
  60.     D1 = Delay_Draw_Seconds;
  61.     D2 = Delay_Draw_Micros;
  62.     D3 = D1 + D2 / 1000000.0;
  63.  
  64.     sprintf(Buffer, "%.2lf", D3);
  65.     Set_Gadget_String(GDX_Delay_Draw_Value, Buffer);
  66.  
  67.     Set_Gadget_Int(GDX_Spline_Resolution_Value, Spline_Resolution);
  68.     Set_Gadget_Int(GDX_Patch_Resolution_Value, Patch_Resolution);
  69.  
  70.     sprintf(Buffer, "%.2lf", Grid_Size);
  71.     Set_Gadget_String(GDX_Grid_Size_Value, Buffer);
  72.  
  73.     Set_Gadget_Int(GDX_MQ_Size_KnotInfo_Value, MQ_Size_KnotInfo);
  74.     Set_Gadget_Int(GDX_MQ_Size_Rotate_P_Value, MQ_Size_Rotate_P);
  75.     Set_Gadget_Int(GDX_MQ_Size_Rotate_G_Value, MQ_Size_Rotate_G);
  76.     Set_Gadget_Int(GDX_MQ_Size_Scale_G_Value, MQ_Size_Scale_G);
  77.     Set_Gadget_Int(GDX_MQ_Size_Move_G_Value, MQ_Size_Move_G);
  78.     Set_Gadget_Int(GDX_MQ_Size_Move_Value, MQ_Size_Move);
  79.  
  80. } /* Config_Set_Values */
  81.  
  82. void Config_Get_Values()
  83. /************************************************************************/
  84. /*                                                                      */
  85. /* Get configuration parameters from the window, and set the global    */
  86. /* variables accordingly.                        */
  87. /*                                                                      */
  88. /************************************************************************/
  89. {
  90.     char    Buffer[Buffer_Length+1];
  91.     double    D1, D2, D3;
  92.  
  93.     D1 = Delay_Draw_Seconds;
  94.     D2 = Delay_Draw_Micros;
  95.     D3 = D1 + D2 / 1000000.0;
  96.  
  97.     D1 = atof(Get_Gadget_String(GDX_Delay_Draw_Value));
  98.     if (D1 >  0.0) {
  99.     D3 = modf(D1, &D2);
  100.     Delay_Draw_Seconds = D2;
  101.     Delay_Draw_Micros  = D3 * 1000000.0;
  102.     }
  103.  
  104.     Spline_Resolution= Get_Gadget_Int(GDX_Spline_Resolution_Value);
  105.     Patch_Resolution = Get_Gadget_Int(GDX_Patch_Resolution_Value);
  106.  
  107.     Grid_Size        = atof(Get_Gadget_String(GDX_Grid_Size_Value));
  108.     MQ_Size_KnotInfo = Get_Gadget_Int(GDX_MQ_Size_KnotInfo_Value);
  109.     MQ_Size_Rotate_P = Get_Gadget_Int(GDX_MQ_Size_Rotate_P_Value);
  110.     MQ_Size_Rotate_G = Get_Gadget_Int(GDX_MQ_Size_Rotate_G_Value);
  111.     MQ_Size_Scale_G  = Get_Gadget_Int(GDX_MQ_Size_Scale_G_Value);
  112.     MQ_Size_Move_G   = Get_Gadget_Int(GDX_MQ_Size_Move_G_Value);
  113.     MQ_Size_Move     = Get_Gadget_Int(GDX_MQ_Size_Move_Value);
  114.  
  115. } /* Config_Get_Values */
  116.  
  117. static
  118. Boolean_T Config_Handle_Gadget_Event(struct IntuiMessage *Msg)
  119. /************************************************************************/
  120. /*                                                                      */
  121. /* Dispatcher for gadget events.                    */
  122. /*                                                                      */
  123. /************************************************************************/
  124. {
  125.     char    Buffer[Buffer_Length+1];
  126.     double    D;
  127.     long    L;
  128.     Boolean_T     Config_Done;
  129.     struct Gadget *Gad = (struct Gadget *) Msg->IAddress;
  130.     
  131.  
  132.     Config_Done = FALSE;
  133.  
  134.     switch (Gad->GadgetID) {
  135.  
  136.     case GD_Delay_Draw_Value:
  137.     D = atof(Get_Gadget_String(GDX_Delay_Draw_Value));
  138.     if (D < 0.0) D = 1.0;
  139.     sprintf(Buffer, "%.2lf", D);
  140.     Set_Gadget_String(GDX_Delay_Draw_Value, Buffer);
  141.     break;
  142.  
  143.     case GD_Spline_Resolution_Value:
  144.     L = Get_Gadget_Int(GDX_Spline_Resolution_Value);
  145.     if (L < 1 || L > Max_Spline_Resolution) L = 4;
  146.     Set_Gadget_Int(GDX_Spline_Resolution_Value, L);
  147.     break;
  148.  
  149.     case GD_Patch_Resolution_Value:
  150.     L = Get_Gadget_Int(GDX_Patch_Resolution_Value);
  151.     if (L < 1 || L > Max_Patch_Resolution) L = 4;
  152.     Set_Gadget_Int(GDX_Patch_Resolution_Value, L);
  153.     break;
  154.  
  155.     case GD_Grid_Size_Value:
  156.     D = atof(Get_Gadget_String(GDX_Grid_Size_Value));
  157.     if (D < 0.5 || D > 500.0) D = 40.0;
  158.     sprintf(Buffer, "%.2lf", D);
  159.     Set_Gadget_String(GDX_Grid_Size_Value, Buffer);
  160.     break;
  161.  
  162.     case GD_MQ_Size_KnotInfo_Value:
  163.     L = Get_Gadget_Int(GDX_MQ_Size_KnotInfo_Value);
  164.     if (L < 0 || L > 5) L = 2;
  165.     Set_Gadget_Int(GDX_MQ_Size_KnotInfo_Value, L);
  166.     break;
  167.  
  168.     case GD_MQ_Size_Rotate_P_Value:
  169.     L = Get_Gadget_Int(GDX_MQ_Size_Rotate_P_Value);
  170.     if (L < 0 || L > 5) L = 2;
  171.     Set_Gadget_Int(GDX_MQ_Size_Rotate_P_Value, L);
  172.     break;
  173.  
  174.     case GD_MQ_Size_Rotate_G_Value:
  175.     L = Get_Gadget_Int(GDX_MQ_Size_Rotate_G_Value);
  176.     if (L < 0 || L > 5) L = 2;
  177.     Set_Gadget_Int(GDX_MQ_Size_Rotate_G_Value, L);
  178.     break;
  179.  
  180.     case GD_MQ_Size_Scale_G_Value:
  181.     L = Get_Gadget_Int(GDX_MQ_Size_Scale_G_Value);
  182.     if (L < 0 || L > 5) L = 2;
  183.     Set_Gadget_Int(GDX_MQ_Size_Scale_G_Value, L);
  184.     break;
  185.  
  186.     case GD_MQ_Size_Move_G_Value:
  187.     L = Get_Gadget_Int(GDX_MQ_Size_Move_G_Value);
  188.     if (L < 0 || L > 5) L = 2;
  189.     Set_Gadget_Int(GDX_MQ_Size_Move_G_Value, L);
  190.     break;
  191.  
  192.     case GD_MQ_Size_Move_Value:
  193.     L = Get_Gadget_Int(GDX_MQ_Size_Move_Value);
  194.     if (L < 0 || L > 5) L = 2;
  195.     Set_Gadget_Int(GDX_MQ_Size_Move_Value, L);
  196.     break;
  197.  
  198.     case GD_Config_Ok:
  199.     Config_Get_Values();
  200.     Config_Done = TRUE;
  201.     break;
  202.  
  203.     case GD_Config_Cancel:
  204.     Config_Done = TRUE;
  205.     break;
  206.  
  207.     } /* switch */
  208.  
  209.     return(Config_Done);
  210.  
  211. } /* Handle_Gadget_Event */
  212.  
  213. static
  214. Boolean_T Config_Check_Event()
  215. /************************************************************************/
  216. /*                                                                      */
  217. /* Check for an event and handle it.                    */
  218. /*                                                                      */
  219. /************************************************************************/
  220. {
  221.     struct         IntuiMessage *Msg_Ptr;
  222.     struct         IntuiMessage Msg;
  223.     struct         Gadget *Gad;
  224.     Boolean_T        Config_Done;
  225.  
  226.     Config_Done = FALSE;
  227.  
  228.     WaitPort(User_Port);
  229.  
  230.     while ((Msg_Ptr = GT_GetIMsg(User_Port)) != NULL) {
  231.  
  232.     Msg = *Msg_Ptr;
  233.     
  234.         GT_ReplyIMsg(Msg_Ptr);
  235.  
  236.         switch (Msg.Class) {
  237.  
  238.     case IDCMP_REFRESHWINDOW:
  239.         GT_BeginRefresh(Msg.IDCMPWindow);
  240.         if (Msg.IDCMPWindow == Windows[W_Config].Window) ConfigRender();
  241.         GT_EndRefresh(Msg.IDCMPWindow, TRUE);
  242.         break;
  243.  
  244.     case IDCMP_GADGETUP:
  245.     case IDCMP_GADGETDOWN:
  246.         Config_Done = Config_Handle_Gadget_Event(&Msg);
  247.         break;
  248.  
  249.     } /* switch */
  250.  
  251.     } /* while */
  252.  
  253.     return(Config_Done);
  254.  
  255. } /* Config_Check_Event */
  256.  
  257. void Edit_Configuration()
  258. /************************************************************************/
  259. /*                                                                      */
  260. /* Edit configuration of the program.                    */
  261. /*                                                                      */
  262. /************************************************************************/
  263. {
  264.     if (Windows[(int)W_Config].Window == NULL) Window_Open(W_Config);
  265.     WindowToFront(Windows[W_Config].Window);
  266.  
  267.     Config_Set_Values();
  268.  
  269.     while (!Config_Check_Event()) ;
  270.  
  271.     Window_Close(W_Config);
  272.  
  273.     Compute_Splines();
  274.     Redraw_Mask |= What_All;
  275.  
  276.  
  277. } /* Edit_Configuration */
  278.