home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 514b.lha / GadgetED_v2.3 / Source / pref.c < prev    next >
C/C++ Source or Header  |  1991-06-08  |  13KB  |  417 lines

  1. /*----------------------------------------------------------------------*
  2.    pref.c Version 2.3 - © Copyright 1990-91 Jaba Development
  3.  
  4.    Author  : Jan van den Baard
  5.    Purpose : the preferences requester
  6.  *----------------------------------------------------------------------*/
  7.  
  8. static UBYTE UNDOBUFFER[80];
  9.  
  10. static SHORT MainPairs2[] =
  11.  { 0,0,296,0,296,127,0,127,0,0
  12.  };
  13. static struct Border MainBorder2 =
  14.  { 2,1,0,0,JAM1,5,MainPairs2,NULL
  15.  };
  16. static SHORT MainPairs1[] =
  17.  { 0,0,296,0
  18.  };
  19. static struct Border MainBorder1 =
  20.  { 2,12,0,0,JAM1,2,MainPairs1,&MainBorder2
  21.  };
  22.  
  23. static SHORT SUPairs[] =
  24.  { 0,0,87,0,87,13,0,13,0,0
  25.  };
  26. static struct Border SUBorder =
  27.  { -1,-1,0,0,JAM1,5,SUPairs,NULL
  28.  };
  29.  
  30. static struct IntuiText SUText =
  31.  { 0,0,JAM1,3,2,NULL,(UBYTE *)"Save & Use",NULL
  32.  };
  33. static struct Gadget SU =
  34.  { NULL,203,113,86,12,NULL,RELVERIFY,BOOLGADGET,
  35.    (APTR)&SUBorder,NULL,&SUText,NULL,NULL,9,NULL
  36.  };
  37.  
  38. static struct IntuiText USText =
  39.  { 0,0,JAM1,33,2,NULL,(UBYTE *)"Use",NULL
  40.  };
  41. static struct Gadget US =
  42.  { &SU,107,113,86,12,NULL,RELVERIFY,BOOLGADGET,
  43.    (APTR)&SUBorder,NULL,&USText,NULL,NULL,8,NULL
  44.  };
  45.  
  46. static struct IntuiText SAText =
  47.  { 0,0,JAM1,27,2,NULL,(UBYTE *)"Save",NULL
  48.  };
  49. static struct Gadget SA =
  50.  { &US,12,113,86,12,NULL,RELVERIFY,BOOLGADGET,
  51.    (APTR)&SUBorder,NULL,&SAText,NULL,NULL,7,NULL
  52.  };
  53.  
  54. static SHORT RWPairs[] =
  55.  { 0,0,136,0,136,10,0,10,0,0
  56.  };
  57. static struct Border RWBorder =
  58.  { -1,-1,0,0,JAM1,5,RWPairs,NULL
  59.  };
  60.  
  61. static struct IntuiText REText =
  62.  { 0,0,JAM1,30,1,NULL,(UBYTE *)"REQUESTER",NULL
  63.  };
  64. static struct Gadget RE =
  65.  { &SA,155,99,135,9,NULL,GADGIMMEDIATE+TOGGLESELECT,BOOLGADGET,
  66.    (APTR)&RWBorder,NULL,&REText,1L,NULL,3,NULL
  67.  };
  68.  
  69. static struct IntuiText WDText =
  70.  { 0,0,JAM1,43,1,NULL,(UBYTE *)"WINDOW",NULL
  71.  };
  72. static struct Gadget WD =
  73.  { &RE,12,99,135,9,NULL,GADGIMMEDIATE+TOGGLESELECT,BOOLGADGET,
  74.    (APTR)&RWBorder,NULL,&WDText,2L,NULL,2,NULL
  75.  };
  76.  
  77. static SHORT OPPairs[] =
  78.  { 0,0,279,0,279,11,0,11,0,0
  79.  };
  80. static struct Border OPBorder =
  81.  { -1,-1,0,0,JAM1,5,OPPairs,NULL
  82.  };
  83.  
  84. static struct IntuiText NFText =
  85.  { 0,0,JAM1,59,1,NULL,(UBYTE *)"RAW Assembler Source",NULL
  86.  };
  87. static struct Gadget NF =
  88.  { &WD,12,85,278,10,NULL,GADGIMMEDIATE+TOGGLESELECT,BOOLGADGET,
  89.    (APTR)&OPBorder,NULL,&NFText,NULL,NULL,4,NULL
  90.  };
  91.  
  92. static struct IntuiText STText =
  93.  { 0,0,JAM1,71,1,NULL,(UBYTE *)"Static Structures",NULL
  94.  };
  95. static struct Gadget ST =
  96.  { &NF,12,71,278,10,NULL,GADGIMMEDIATE+TOGGLESELECT,BOOLGADGET,
  97.    (APTR)&OPBorder,NULL,&STText,NULL,NULL,1,NULL
  98.  };
  99.  
  100. static struct IntuiText TCText =
  101.  { 0,0,JAM1,103,1,NULL,(UBYTE *)"Text Copy",NULL
  102.  };
  103. static struct Gadget TC =
  104.  { &ST,12,57,278,10,NULL,GADGIMMEDIATE+TOGGLESELECT,BOOLGADGET,
  105.    (APTR)&OPBorder,NULL,&TCText,NULL,NULL,1,NULL
  106.  };
  107.  
  108. static struct IntuiText ICText =
  109.  { 0,0,JAM1,99,1,NULL,(UBYTE *)"Image Copy",NULL
  110.  };
  111. static struct Gadget IC =
  112.  { &TC,12,43,278,10,NULL,GADGIMMEDIATE+TOGGLESELECT,BOOLGADGET,
  113.    (APTR)&OPBorder,NULL,&ICText,NULL,NULL,1,NULL
  114.  };
  115.  
  116. static struct IntuiText AUSText =
  117.  { 0,0,JAM1,40,1,NULL,(UBYTE *)"Auto Gadget -> Image size",NULL
  118.  };
  119. static struct Gadget AUS =
  120.  { &IC,12,29,278,10,NULL,GADGIMMEDIATE+TOGGLESELECT,BOOLGADGET,
  121.    (APTR)&OPBorder,NULL,&AUSText,1,NULL,0,NULL
  122.  };
  123.  
  124. static struct IntuiText SZPText =
  125.  { 0,0,JAM1,58,1,NULL,(UBYTE *)"Skip zero bit-planes",NULL
  126.  };
  127. static struct Gadget SZP =
  128.  { &AUS,12,15,278,10,NULL,GADGIMMEDIATE+TOGGLESELECT,BOOLGADGET,
  129.    (APTR)&OPBorder,NULL,&SZPText,NULL,NULL,0,NULL
  130.  };
  131.  
  132. static struct IntuiText MainText =
  133.  { 0,0,JAM1,107,3,NULL,(UBYTE *)"Preferences",NULL
  134.  };
  135.  
  136. static struct NewWindow pr_req =
  137.  { 10,15,301,130,0,1,GADGETUP+GADGETDOWN,
  138.    NOCAREREFRESH+SMART_REFRESH+ACTIVATE+RMBTRAP,
  139.    NULL,NULL,NULL,NULL,NULL,0,0,0,0,CUSTOMSCREEN
  140.  };
  141.  
  142. extern struct Window     *MainWindow;
  143. extern struct Screen     *MainScreen;
  144. extern BOOL               REQUESTER;
  145. extern struct ge_prefs    prefs;
  146. extern ULONG              Class;
  147. extern USHORT             GadgetCount, BackFill, BackPen, FrontPen;
  148. extern struct Gadget     *Gadget;
  149. extern struct RastPort   *MainRP;
  150. extern struct NewWindow   nw_main;
  151. extern struct GadgetList  Gadgets;
  152. extern UBYTE              wdt[80],wlb[MAXLABEL];
  153. extern ULONG              WindowFlags;
  154. extern struct Gadget      TextGadget;
  155.  
  156. static struct Window  *pw;
  157. static struct ge_prefs pbuf;
  158. static BOOL            req;
  159.  
  160. /*
  161.  * write the preferences to "DEVS:GadgetEd.PREFS"
  162.  */
  163. static BOOL save_prefs()
  164. {
  165.     BPTR file;
  166.     BOOL ret = TRUE;
  167.  
  168.     if(NOT(file = Open("DEVS:GadgetEd.PREFS",MODE_NEWFILE))) return(FALSE);
  169.  
  170.     if(Write(file,(char *)&prefs,sizeof(struct ge_prefs)) == -1) ret = FALSE;
  171.     Close(file);
  172.  
  173.     return(ret);
  174. }
  175.  
  176. /*
  177.  * set the preferences
  178.  */
  179. static VOID set_prefs()
  180. {
  181.     USHORT i;
  182.  
  183.     if(SelectTest(&SZP))  prefs.skip_zero_planes = TRUE;
  184.     else                  prefs.skip_zero_planes = FALSE;
  185.     if(SelectTest(&AUS))  prefs.auto_size        = TRUE;
  186.     else                  prefs.auto_size = FALSE;
  187.     if(SelectTest(&IC))   prefs.image_copy = TRUE;
  188.     else                  prefs.image_copy = FALSE;
  189.     if(SelectTest(&RE)) { REQUESTER = TRUE; BackFill = BackPen; }
  190.     else                  REQUESTER = FALSE;
  191.     if(SelectTest(&ST))   prefs.static_structures = TRUE;
  192.     else                  prefs.static_structures = FALSE;
  193.     if(SelectTest(&TC))   prefs.text_copy = TRUE;
  194.     else                  prefs.text_copy = FALSE;
  195.     if(SelectTest(&NF))   prefs.no_flags = TRUE;
  196.     else                  prefs.no_flags = FALSE;
  197.     for(i=0;i<2;i++)      prefs.res[i] = FALSE;
  198.     refresh();
  199. }
  200.  
  201. #define REQ WINDOWDRAG+WINDOWSIZING+SIZEBRIGHT+SIZEBBOTTOM+GIMMEZEROZERO+BORDERLESS;
  202.  
  203. /*
  204.  * re arrange the gadget list
  205.  */
  206. struct Gadget *re_arrange()
  207. {
  208.     register struct MyGadget *g;
  209.     register struct Gadget *gd;
  210.  
  211.     if(Gadgets.TailPred == (struct MyGadget *)&Gadgets) return(NULL);
  212.  
  213.     for(g = Gadgets.TailPred; g != (struct MyGadget *)&Gadgets; g = g->Pred)
  214.     {   gd = &g->Gadget;
  215.         if(g->Pred == (struct MyGadget *)&Gadgets) gd->NextGadget = NULL;
  216.         else gd->NextGadget = &g->Pred->Gadget;
  217.     }
  218.     return(&Gadgets.TailPred->Gadget);
  219. }
  220.  
  221. /*
  222.  * change the window to requester or viceversa
  223.  */
  224. BOOL change_window()
  225. {
  226.     register struct Gadget    *g, *g1, *gl;
  227.     register struct IntuiText *t;
  228.     struct Window             *w;
  229.  
  230.     nw_main.LeftEdge       =   MainWindow->LeftEdge;
  231.     nw_main.TopEdge        =   MainWindow->TopEdge;
  232.     nw_main.Width          =   MainWindow->Width;
  233.     nw_main.Height         =   MainWindow->Height;
  234.     nw_main.Flags          =   NULL;
  235.     nw_main.FirstGadget    =   NULL;
  236.     nw_main.Screen         =   MainScreen;
  237.     nw_main.MinWidth       =   MainWindow->MinWidth;
  238.     nw_main.MinHeight      =   MainWindow->MinHeight;
  239.     nw_main.MaxWidth       =   MainScreen->Width;
  240.     nw_main.MaxHeight      =   MainScreen->Height;
  241.  
  242.     add_bo();
  243.  
  244.     g = gl = re_arrange();
  245.  
  246.     if(REQUESTER)
  247.     {   nw_main.DetailPen    =   0;
  248.         nw_main.BlockPen     =   1;
  249.         BackFill             =   1;
  250.         FrontPen             =   0;
  251.         BackPen              =   1;
  252.         nw_main.Flags        =   REQ;
  253.         strcpy((char *)&wlb,"requester");
  254.         strcpy((char *)&wdt,"Requester");
  255.         nw_main.Title        =   (UBYTE *)"Work Requester";
  256.         if((nw_main.LeftEdge + nw_main.Width + 17) < MainScreen->Width)
  257.             nw_main.Width += 17;
  258.         if((nw_main.TopEdge + nw_main.Height + 8) < MainScreen->Height)
  259.             nw_main.Height += 8;
  260.     }
  261.     else
  262.     {   nw_main.DetailPen    =   MainWindow->DetailPen;
  263.         nw_main.BlockPen     =   MainWindow->BlockPen;
  264.         strcpy((char *)&wdt,"Work Window");
  265.         nw_main.Title        =   (UBYTE *)&wdt;
  266.         strcpy((char *)&wlb,"new_window");
  267.         FrontPen             =   1;
  268.         BackPen              =   0;
  269.         nw_main.Width       -=   17;
  270.         nw_main.Height      -=   8;
  271.         if(TestBits(WindowFlags,WINDOWCLOSE))  nw_main.Flags |= WINDOWCLOSE;
  272.         if(TestBits(WindowFlags,WINDOWDRAG))   nw_main.Flags |= WINDOWDRAG;
  273.         if(TestBits(WindowFlags,WINDOWDEPTH))  nw_main.Flags |= WINDOWDEPTH;
  274.         if(TestBits(WindowFlags,WINDOWSIZING)) nw_main.Flags |= WINDOWSIZING;
  275.         if(TestBits(WindowFlags,SIZEBRIGHT))   nw_main.Flags |= SIZEBRIGHT;
  276.         if(TestBits(WindowFlags,SIZEBBOTTOM))  nw_main.Flags |= SIZEBBOTTOM;
  277.     }
  278.     nw_main.Flags |= NOCAREREFRESH+SMART_REFRESH+ACTIVATE;
  279.  
  280.     if(NOT(w = OpenWindow(&nw_main)))
  281.     {   Error("Can't change window !");
  282.         if(g) AddGList(MainWindow,g,-1L,GadgetCount,NULL);
  283.         return;
  284.     }
  285.  
  286.     if(REQUESTER)
  287.     {  if(g)
  288.        {   while(1)
  289.            {   g1 = g->NextGadget;
  290.                un_grel(MainWindow,g);
  291.                if(TestBits((ULONG)g->Flags,GRELWIDTH))  g->Flags ^= GRELWIDTH;
  292.                if(TestBits((ULONG)g->Flags,GRELHEIGHT)) g->Flags ^= GRELHEIGHT;
  293.                if(TestBits((ULONG)g->Flags,GRELRIGHT))  g->Flags ^= GRELRIGHT;
  294.                if(TestBits((ULONG)g->Flags,GRELBOTTOM)) g->Flags ^= GRELBOTTOM;
  295.  
  296.                if(TestBits((ULONG)g->Activation,RIGHTBORDER))
  297.                     g->Activation ^= RIGHTBORDER;
  298.                if(TestBits((ULONG)g->Activation,LEFTBORDER))
  299.                     g->Activation ^= LEFTBORDER;
  300.                if(TestBits((ULONG)g->Activation,TOPBORDER))
  301.                     g->Activation ^= TOPBORDER;
  302.                if(TestBits((ULONG)g->Activation,BOTTOMBORDER))
  303.                     g->Activation ^= BOTTOMBORDER;
  304.  
  305.                g->TopEdge  -= MainWindow->BorderTop - 1;
  306.  
  307.                if(NOT g1) break;
  308.                g = g1;
  309.            }
  310.        }
  311.        if((t = TextGadget.GadgetText))
  312.        {   while(1)
  313.            {   t->TopEdge -= MainWindow->BorderTop - 1;
  314.                if(NOT(t = t->NextText)) break;
  315.            }
  316.        }
  317.     }
  318.     else
  319.     {   if(g)
  320.         {   while(1)
  321.             {   g1 = g->NextGadget;
  322.                 if(TestBits((ULONG)g->Activation,ENDGADGET))
  323.                 g->Activation ^= ENDGADGET;
  324.                 g->TopEdge  += MainWindow->BorderTop + 1;
  325.                 if(NOT g1) break;
  326.                 g = g1;
  327.             }
  328.         }
  329.         if((t = TextGadget.GadgetText))
  330.         {   while(1)
  331.             {   t->TopEdge += MainWindow->BorderTop + 1;
  332.                 if(NOT(t = t->NextText)) break;
  333.             }
  334.         }
  335.     }
  336.  
  337.     ClearMenuStrip(MainWindow);
  338.     CloseWindow(MainWindow);
  339.     MainWindow = w;
  340.     MainRP     = MainWindow->RPort;
  341.     SetMenu(MainWindow);
  342.     if(gl) AddGList(MainWindow,gl,-1L,GadgetCount,NULL);
  343.     rem_bo();
  344.     refresh();
  345. }
  346.  
  347. /*
  348.  * open the preferences window
  349.  */
  350. VOID preferences()
  351. {
  352.     struct RastPort *rp;
  353.     BOOL             running = TRUE, req;
  354.     USHORT           g_id;
  355.  
  356.     pr_req.Screen = MainScreen;
  357.     if(NOT(pw = OpenWindow(&pr_req))) return;
  358.     disable_window();
  359.     rp = pw->RPort;
  360.     draw(pw,&SZP,&MainBorder1,&MainText);
  361.     DeSelectGList(pw,&SZP,NULL,6);
  362.     if(prefs.skip_zero_planes) SelectGadget(pw,&SZP,NULL);
  363.     if(prefs.auto_size) SelectGadget(pw,&AUS,NULL);
  364.     if(prefs.image_copy) SelectGadget(pw,&IC,NULL);
  365.     if(prefs.static_structures) SelectGadget(pw,&ST,NULL);
  366.     if(prefs.text_copy) SelectGadget(pw,&TC,NULL);
  367.     if(prefs.no_flags) SelectGadget(pw,&NF,NULL);
  368.     if(REQUESTER) SelectGadget(pw,&RE,NULL);
  369.     else SelectGadget(pw,&WD,NULL);
  370.     req = REQUESTER;
  371.     do
  372.     {   Wait(1 << pw->UserPort->mp_SigBit);
  373.         while(read_msg(pw))
  374.         {   g_id = Gadget->GadgetID;
  375.             switch(g_id)
  376.             {   case 2:
  377.                 case 3: MutualExclude(pw,Gadget,&WD,NULL);
  378.                         SelectGadget(pw,Gadget,NULL);
  379.                         break;
  380.                 case 7:
  381.                 case 8:
  382.                 case 9: running = FALSE;
  383.                         break;
  384.             }
  385.         }
  386.     } while(running == TRUE);
  387.     CloseWindow(pw);
  388.     enable_window();
  389.     if(g_id == 7)
  390.     {    req = REQUESTER;
  391.          CopyMem((char *)&prefs,(char *)&pbuf,(long)sizeof(struct ge_prefs));
  392.          set_prefs();
  393.          if(NOT save_prefs())
  394.          {   Error("Error writing preferences !");
  395.              REQUESTER = req;
  396.              CopyMem((char *)&pbuf,(char *)&prefs,(long)sizeof(struct ge_prefs));
  397.              return;
  398.          }
  399.          REQUESTER = req;
  400.          CopyMem((char *)&pbuf,(char *)&prefs,(long)sizeof(struct ge_prefs));
  401.     }
  402.     else if(g_id == 8)
  403.     {   set_prefs();
  404.         if(REQUESTER != req) change_window();
  405.         set_extra_items(MainWindow);
  406.     }
  407.     else
  408.     {   set_prefs();
  409.         if(REQUESTER != req) change_window();
  410.         set_extra_items(MainWindow);
  411.         if(NOT save_prefs())
  412.         {   Error("Error writing preferences !");
  413.             return;
  414.         }
  415.     }
  416. }
  417.