home *** CD-ROM | disk | FTP | other *** search
/ Fish 'n' More 2 / fishmore-publicdomainlibraryvol.ii1991xetec.iso / dirs / gadgeted_438.lzh / GadgetED / Source / editgad.c < prev    next >
Text File  |  1991-01-17  |  25KB  |  713 lines

  1. /*----------------------------------------------------------------------*
  2.    editgad.c Version 2.0 - © Copyright 1990 by Jaba Development
  3.  
  4.    Author : Jan van den Baard
  5.    Purpose: The editing of gadgets flags e.c.t.
  6.  *----------------------------------------------------------------------*/
  7.  
  8. static UBYTE UNDOBUFFER[20];
  9.  
  10. static struct TextAttr TOPAZ60 =
  11.  { (STRPTR)"topaz.font",TOPAZ_SIXTY,FS_NORMAL,FPF_ROMFONT };
  12.  
  13. static SHORT MainPairs6[] =
  14.  { 0,0,249,0,249,32,0,32,0,0 };
  15. static SHORT MainPairs5[] =
  16.  { 0,0,148,0,148,84,0,84,0,0 };
  17. static SHORT MainPairs4[] =
  18.  { 0,0,122,0,122,84,0,84,0,0 };
  19. static SHORT MainPairs3[] =
  20.  { 0,0,123,0,123,84,0,84,0,0 };
  21. static SHORT MainPairs2[] =
  22.  { 0,0,114,0,114,118,0,118,0,0 };
  23. static SHORT MainPairs1[] =
  24.  { 0,0,106,0,106,118,0,118,0,0 };
  25.  
  26. static struct Border MainBorder6 =
  27.  { 233,97,1,0,JAM1,5,MainPairs6,NULL };
  28. static struct Border MainBorder5 =
  29.  { 486,11,1,0,JAM1,5,MainPairs5,&MainBorder6 };
  30. static struct Border MainBorder4 =
  31.  { 360,11,1,0,JAM1,5,MainPairs4,&MainBorder5 };
  32. static struct Border MainBorder3 =
  33.  { 233,11,1,0,JAM1,5,MainPairs3,&MainBorder4 };
  34. static struct Border MainBorder2 =
  35.  { 115,11,1,0,JAM1,5,MainPairs2,&MainBorder3 };
  36. static struct Border MainBorder1 =
  37.  { 5,11,1,0,JAM1,5,MainPairs1,&MainBorder2 };
  38.  
  39. static struct IntuiText MainText6 =
  40.  { 2,0,JAM1,291,100,NULL,(UBYTE *)"SOURCE LABEL NAME",NULL };
  41. static struct IntuiText MainText5 =
  42.  { 2,0,JAM1,515,13,NULL,(UBYTE *)"GADGET TYPE",&MainText6 };
  43. static struct IntuiText MainText4 =
  44.  { 2,0,JAM1,366,13,NULL,(UBYTE *)"STRING SPECIAL",&MainText5 };
  45. static struct IntuiText MainText3 =
  46.  { 2,0,JAM1,249,13,NULL,(UBYTE *)"PROP SPECIAL",&MainText4 };
  47. static struct IntuiText MainText2 =
  48.  { 2,0,JAM1,132,13,NULL,(UBYTE *)"ACTIVATION",&MainText3 };
  49. static struct IntuiText MainText1 =
  50.  { 2,0,JAM1,36,13,NULL,(UBYTE *)"FLAGS",&MainText2 };
  51.  
  52. static struct Gadget BRD =
  53.  { NULL,0,0,1,1,GADGHNONE,NULL,BOOLGADGET,
  54.    (APTR)&MainBorder1,NULL,&MainText1,NULL,NULL,NULL,NULL };
  55.  
  56. static SHORT CNPairs[] =
  57.  { 0,0,72,0,72,32,0,32,0,0 };
  58. static struct Border CNBorder =
  59.  { -1,-1,1,0,JAM1,5,CNPairs,NULL };
  60.  
  61. static struct IntuiText CNText =
  62.  { 1,0,JAM1,5,11,&TOPAZ60,(UBYTE *)"CANCEL",NULL };
  63. static struct Gadget CN =
  64.  { &BRD,563,98,71,31,NULL,RELVERIFY,BOOLGADGET,
  65.    (APTR)&CNBorder,NULL,&CNText,NULL,NULL,35,NULL };
  66.  
  67. static struct IntuiText OKText =
  68.  { 1,0,JAM1,26,11,&TOPAZ60,(UBYTE *)"OK",NULL };
  69. static struct Gadget OK =
  70.  { &CN,487,98,71,31,NULL,RELVERIFY,BOOLGADGET,
  71.    (APTR)&CNBorder,NULL,&OKText,NULL,NULL,34,NULL };
  72.  
  73. static UBYTE SLBuff[MAXLABEL];
  74. static SHORT SLPairs[] =
  75.  { 0,0,239,0,239,11,0,11,0,0 };
  76. static struct Border SLBorder =
  77.  { -1,-2,1,0,JAM1,5,SLPairs,NULL };
  78. static struct StringInfo SLInfo =
  79.  { SLBuff,UNDOBUFFER,0,MAXLABEL,0,0,0,0,0,0,0,0,NULL };
  80. static struct Gadget SL =
  81.  { &OK,239,112,237,8,NULL,RELVERIFY+STRINGCENTER,STRGADGET,
  82.    (APTR)&SLBorder,NULL,NULL,NULL,(APTR)&SLInfo,33,NULL };
  83.  
  84. static SHORT GTPairs[] =
  85.  { 0,0,140,0,140,12,0,12,0,0 };
  86. static struct Border GTBorder =
  87.  { -1,-1,1,0,JAM1,5,GTPairs,NULL };
  88.  
  89. static struct IntuiText GZText =
  90.  { 1,0,JAM1,31,2,NULL,(UBYTE *)"GZZGADGET",NULL };
  91. static struct Gadget GZ =
  92.  { &SL,490,82,139,11,NULL,TOGGLESELECT,BOOLGADGET,
  93.    (APTR)>Border,NULL,&GZText,NULL,NULL,37,NULL };
  94.  
  95. static struct IntuiText BOText =
  96.  { 1,0,JAM1,27,2,NULL,(UBYTE *)"BORDERONLY",NULL };
  97. static struct Gadget BO =
  98.  { &GZ,490,67,139,11,GADGDISABLED,TOGGLESELECT,BOOLGADGET,
  99.    (APTR)>Border,NULL,&BOText,NULL,NULL,36,NULL };
  100.  
  101. static struct IntuiText STText =
  102.  { 1,0,JAM1,43,2,NULL,(UBYTE *)"STRING",NULL };
  103. static struct Gadget ST =
  104.  { &BO,490,52,139,11,NULL,GADGIMMEDIATE+TOGGLESELECT,BOOLGADGET,
  105.    (APTR)>Border,NULL,&STText,3L,NULL,32,NULL };
  106.  
  107. static struct IntuiText PRText =
  108.  { 1,0,JAM1,22,2,NULL,(UBYTE *)"PROPORTIONAL",NULL };
  109. static struct Gadget PR =
  110.  { &ST,491,37,139,11,NULL,GADGIMMEDIATE+TOGGLESELECT,BOOLGADGET,
  111.    (APTR)>Border,NULL,&PRText,5L,NULL,31,NULL };
  112.  
  113. static struct IntuiText BLText =
  114.  { 1,0,JAM1,52,2,NULL,(UBYTE *)"BOOL",NULL };
  115. static struct Gadget BL =
  116.  { &PR,491,22,139,11,NULL,GADGIMMEDIATE+TOGGLESELECT,BOOLGADGET,
  117.    (APTR)>Border,NULL,&BLText,6L,NULL,30,NULL };
  118.  
  119. static SHORT BPairs[] =
  120.  { 0,0,72,0,72,11,0,11,0,1 };
  121. static struct Border BBorder =
  122.  { -2,-2,1,0,JAM1,5,BPairs,NULL };
  123.  
  124. static UBYTE SZBuff[4] = "256";
  125. static struct StringInfo SZInfo =
  126.  { SZBuff,UNDOBUFFER,0,4,0,0,0,0,0,0,0,256L,NULL };
  127. static struct IntuiText SZText =
  128.  { 2,0,JAM1,-46,1,NULL,(UBYTE *)"SIZE",NULL };
  129. static struct Gadget SZ =
  130.  { &BL,409,84,67,8,NULL,RELVERIFY+STRINGCENTER+LONGINT,STRGADGET,
  131.    (APTR)&BBorder,NULL,&SZText,NULL,(APTR)&SZInfo,29,NULL };
  132.  
  133. static SHORT SINPairs[] =
  134.  { 0,0,115,0,115,10,0,10,0,0 };
  135. static struct Border SINBorder =
  136.  { -1,-1,1,0,JAM1,5,SINPairs,NULL };
  137.  
  138. static struct IntuiText AMText =
  139.  { 1,0,JAM1,21,1,NULL,(UBYTE *)"ALTKEYMAP",NULL };
  140. static struct Gadget AM =
  141.  { &SZ,365,70,114,9,NULL,TOGGLESELECT,BOOLGADGET,
  142.    (APTR)&SINBorder,NULL,&AMText,NULL,NULL,28,NULL };
  143.  
  144. static struct IntuiText LIText =
  145.  { 1,0,JAM1,29,1,NULL,(UBYTE *)"LONGINT",NULL };
  146. static struct Gadget LI =
  147.  { &AM,365,58,114,9,NULL,TOGGLESELECT,BOOLGADGET,
  148.    (APTR)&SINBorder,NULL,&LIText,NULL,NULL,27,NULL };
  149.  
  150. static struct IntuiText SRText =
  151.  { 1,0,JAM1,12,1,NULL,(UBYTE *)"STRINGRIGHT",NULL };
  152. static struct Gadget SR =
  153.  { &LI,365,46,114,9,NULL,GADGIMMEDIATE+TOGGLESELECT,BOOLGADGET,
  154.    (APTR)&SINBorder,NULL,&SRText,1L,NULL,26,NULL };
  155.  
  156. static struct IntuiText SCText =
  157.  { 1,0,JAM1,8,1,NULL,(UBYTE *)"STRINGCENTER",NULL };
  158. static struct Gadget SC =
  159.  { &SR,365,34,114,9,NULL,GADGIMMEDIATE+TOGGLESELECT,BOOLGADGET,
  160.    (APTR)&SINBorder,NULL,&SCText,2L,NULL,25,NULL };
  161.  
  162. static struct IntuiText UBText =
  163.  { 1,0,JAM1,16,1,NULL,(UBYTE *)"UNDOBUFFER",NULL };
  164. static struct Gadget UB =
  165.  { &SC,365,22,114,9,NULL,TOGGLESELECT,BOOLGADGET,
  166.    (APTR)&SINBorder,NULL,&UBText,NULL,NULL,24,NULL };
  167.  
  168. static UBYTE VBBuff[4] = "0";
  169. static struct StringInfo VBInfo =
  170.  { VBBuff,UNDOBUFFER,0,4,0,0,0,0,0,0,0,0,NULL };
  171. static struct IntuiText VBText =
  172.  { 2,0,JAM1,-46,1,NULL,(UBYTE *)"VBODY",NULL };
  173. static struct Gadget VB =
  174.  { &UB,282,84,67,8,NULL,RELVERIFY+STRINGCENTER+LONGINT,STRGADGET,
  175.    (APTR)&BBorder,NULL,&VBText,NULL,(APTR)&VBInfo,23,NULL };
  176.  
  177. static UBYTE HBBuff[4] = "0";
  178. static struct StringInfo HBInfo =
  179.  { HBBuff,UNDOBUFFER,0,4,0,0,0,0,0,0,0,0,NULL };
  180. static struct IntuiText HBText =
  181.  { 2,0,JAM1,-46,1,NULL,(UBYTE *)"HBODY",NULL };
  182. static struct Gadget HB =
  183.  { &VB,282,71,67,8,NULL,RELVERIFY+STRINGCENTER+LONGINT,STRGADGET,
  184.    (APTR)&BBorder,NULL,&HBText,NULL,(APTR)&HBInfo,22,NULL };
  185.  
  186. static struct IntuiText PBText =
  187.  { 1,0,JAM1,1,1,NULL,(UBYTE *)"PROPBORDERLESS",NULL };
  188. static struct Gadget PB =
  189.  { &HB,238,58,114,9,NULL,TOGGLESELECT,BOOLGADGET,
  190.    (APTR)&SINBorder,NULL,&PBText,NULL,NULL,21,NULL };
  191.  
  192. static struct IntuiText FVText =
  193.  { 1,0,JAM1,24,1,NULL,(UBYTE *)"FREEVERT",NULL };
  194. static struct Gadget FV =
  195.  { &PB,238,46,114,9,NULL,TOGGLESELECT,BOOLGADGET,
  196.    (APTR)&SINBorder,NULL,&FVText,NULL,NULL,20,NULL };
  197.  
  198. static struct IntuiText FHText =
  199.  { 1,0,JAM1,20,1,NULL,(UBYTE *)"FREEHORIZ",NULL };
  200. static struct Gadget FH =
  201.  { &FV,238,34,114,9,NULL,TOGGLESELECT,BOOLGADGET,
  202.    (APTR)&SINBorder,NULL,&FHText,NULL,NULL,19,NULL };
  203.  
  204. static struct IntuiText AKText =
  205.  { 1,0,JAM1,25,1,NULL,(UBYTE *)"AUTOKNOB",NULL };
  206. static struct Gadget AK =
  207.  { &FH,238,22,114,9,NULL,GADGIMMEDIATE+TOGGLESELECT,BOOLGADGET,
  208.    (APTR)&SINBorder,NULL,&AKText,NULL,NULL,18,NULL };
  209.  
  210. static SHORT ACTPairs[] =
  211.  { 0,0,106,0,106,10,0,10,0,0 };
  212. static struct Border ACTBorder =
  213.  { -1,-1,1,0,JAM1,5,ACTPairs,NULL };
  214.  
  215. static struct IntuiText FMText =
  216.  { 1,0,JAM1,8,1,NULL,(UBYTE *)"FOLLOWMOUSE",NULL };
  217. static struct Gadget FM =
  218.  { &AK,120,118,105,9,NULL,TOGGLESELECT,BOOLGADGET,
  219.    (APTR)&ACTBorder,NULL,&FMText,NULL,NULL,17,NULL };
  220.  
  221. static struct IntuiText EGText =
  222.  { 1,0,JAM1,15,1,NULL,(UBYTE *)"ENDGADGET",NULL };
  223. static struct Gadget EG =
  224.  { &FM,120,106,105,9,NULL,TOGGLESELECT,BOOLGADGET,
  225.    (APTR)&ACTBorder,NULL,&EGText,NULL,NULL,16,NULL };
  226.  
  227. static struct IntuiText BBText =
  228.  { 1,0,JAM1,4,1,NULL,(UBYTE *)"BOTTOMBORDER",NULL };
  229. static struct Gadget BB =
  230.  { &EG,120,94,105,9,NULL,TOGGLESELECT,BOOLGADGET,
  231.    (APTR)&ACTBorder,NULL,&BBText,NULL,NULL,15,NULL };
  232.  
  233. static struct IntuiText TBText =
  234.  { 1,0,JAM1,16,1,NULL,(UBYTE *)"TOPBORDER",NULL };
  235. static struct Gadget TB =
  236.  { &BB,120,82,105,9,NULL,TOGGLESELECT,BOOLGADGET,
  237.    (APTR)&ACTBorder,NULL,&TBText,NULL,NULL,14,NULL };
  238.  
  239. static struct IntuiText LBText =
  240.  { 1,0,JAM1,13,1,NULL,(UBYTE *)"LEFTBORDER",NULL };
  241. static struct Gadget LB =
  242.  { &TB,120,70,105,9,NULL,TOGGLESELECT,BOOLGADGET,
  243.    (APTR)&ACTBorder,NULL,&LBText,NULL,NULL,13,NULL };
  244.  
  245. static struct IntuiText RBText =
  246.  { 1,0,JAM1,9,1,NULL,(UBYTE *)"RIGHTBORDER",NULL };
  247. static struct Gadget RB =
  248.  { &LB,120,58,105,9,NULL,TOGGLESELECT,BOOLGADGET,
  249.    (APTR)&ACTBorder,NULL,&RBText,NULL,NULL,12,NULL };
  250.  
  251. static struct IntuiText GIMText =
  252.  { 1,0,JAM1,1,1,NULL,(UBYTE *)"GADGIMMEDIATE",NULL };
  253. static struct Gadget GIM =
  254.  { &RB,120,46,105,9,NULL,TOGGLESELECT,BOOLGADGET,
  255.    (APTR)&ACTBorder,NULL,&GIMText,NULL,NULL,11,NULL };
  256.  
  257. static struct IntuiText RVYText =
  258.  { 1,0,JAM1,16,1,NULL,(UBYTE *)"RELVERIFY",NULL };
  259. static struct Gadget RVY =
  260.  { &GIM,120,34,105,9,NULL,TOGGLESELECT,BOOLGADGET,
  261.    (APTR)&ACTBorder,NULL,&RVYText,NULL,NULL,10,NULL };
  262.  
  263. static struct IntuiText TGSText =
  264.  { 1,0,JAM1,4,1,NULL,(UBYTE *)"TOGGLESELECT",NULL };
  265. static struct Gadget TGS =
  266.  { &RVY,120,22,105,9,NULL,TOGGLESELECT,BOOLGADGET,
  267.    (APTR)&ACTBorder,NULL,&TGSText,NULL,NULL,9,NULL };
  268.  
  269. static SHORT FLGPairs[] =
  270.  { 0,0,98,0,98,10,0,10,0,0 };
  271. static struct Border FLGBorder =
  272.  { -1,-1,1,0,JAM1,5,FLGPairs,NULL };
  273.  
  274. static struct IntuiText GDDText =
  275.  { 1,0,JAM1,1,1,NULL,(UBYTE *)"GADGDISABLED",NULL };
  276. static struct Gadget GDD =
  277.  { &TGS,10,118,97,9,NULL,TOGGLESELECT,BOOLGADGET,
  278.    (APTR)&FLGBorder,NULL,&GDDText,NULL,NULL,8,NULL };
  279.  
  280. static struct IntuiText SLCText =
  281.  { 1,0,JAM1,17,1,NULL,(UBYTE *)"SELECTED",NULL };
  282. static struct Gadget SLC =
  283.  { &GDD,10,106,97,9,NULL,TOGGLESELECT,BOOLGADGET,
  284.    (APTR)&FLGBorder,NULL,&SLCText,NULL,NULL,7,NULL };
  285.  
  286. static struct IntuiText GRHText =
  287.  { 1,0,JAM1,9,1,NULL,(UBYTE *)"GRELHEIGHT",NULL };
  288. static struct Gadget GRH =
  289.  { &SLC,10,94,97,9,NULL,TOGGLESELECT,BOOLGADGET,
  290.    (APTR)&FLGBorder,NULL,&GRHText,NULL,NULL,6,NULL };
  291.  
  292. static struct IntuiText GRWText =
  293.  { 1,0,JAM1,12,1,NULL,(UBYTE *)"GRELWIDTH",NULL };
  294. static struct Gadget GRW =
  295.  { &GRH,10,82,97,9,NULL,TOGGLESELECT,BOOLGADGET,
  296.    (APTR)&FLGBorder,NULL,&GRWText,NULL,NULL,5,NULL };
  297.  
  298. static struct IntuiText GRRText =
  299.  { 1,0,JAM1,12,1,NULL,(UBYTE *)"GRELRIGHT",NULL };
  300. static struct Gadget GRR =
  301.  { &GRW,10,70,97,9,NULL,TOGGLESELECT,BOOLGADGET,
  302.    (APTR)&FLGBorder,NULL,&GRRText,NULL,NULL,4,NULL };
  303.  
  304. static struct IntuiText GRBText =
  305.  { 1,0,JAM1,8,1,NULL,(UBYTE *)"GRELBOTTOM",NULL };
  306. static struct Gadget GRB =
  307.  { &GRR,10,58,97,9,NULL,TOGGLESELECT,BOOLGADGET,
  308.    (APTR)&FLGBorder,NULL,&GRBText,NULL,NULL,3,NULL };
  309.  
  310. static struct IntuiText GDHBText =
  311.  { 1,0,JAM1,14,1,NULL,(UBYTE *)"GADGHBOX",NULL };
  312. static struct Gadget GDHB =
  313.  { &GRB,10,46,97,9,NULL,GADGIMMEDIATE+TOGGLESELECT,BOOLGADGET,
  314.    (APTR)&FLGBorder,NULL,&GDHBText,3L,NULL,2,NULL };
  315.  
  316. static struct IntuiText GDHCText =
  317.  { 1,0,JAM1,12,1,NULL,(UBYTE *)"GADGHCOMP",NULL };
  318. static struct Gadget GDHC =
  319.  { &GDHB,10,34,97,9,NULL,GADGIMMEDIATE+TOGGLESELECT,BOOLGADGET,
  320.    (APTR)&FLGBorder,NULL,&GDHCText,5L,NULL,1,NULL };
  321.  
  322. static struct IntuiText GDHNText =
  323.  { 1,0,JAM1,12,1,NULL,(UBYTE *)"GADGHNONE",NULL };
  324. static struct Gadget GDHN =
  325.  { &GDHC,10,22,97,9,NULL,GADGIMMEDIATE+TOGGLESELECT,BOOLGADGET,
  326.    (APTR)&FLGBorder,NULL,&GDHNText,6L,NULL,0,NULL };
  327.  
  328. static struct NewScreen ns =
  329.  { 0,0,640,132,2,0,1,HIRES,CUSTOMSCREEN|SCREENBEHIND,NULL,NULL,NULL,NULL };
  330.  
  331. static struct NewWindow nw =
  332.  { 0,0,640,132,0,1,GADGETUP|GADGETDOWN,SIMPLE_REFRESH+ACTIVATE+RMBTRAP+NOCAREREFRESH,
  333.    NULL,NULL,(UBYTE *)"Edit Gadget",NULL,NULL,0,0,0,0,CUSTOMSCREEN };
  334.  
  335. static struct Window       *w;
  336. static struct Screen       *s;
  337. static struct RastPort     *rp;
  338. static struct IntuiMessage *msg;
  339. static USHORT id;
  340.  
  341. extern struct Window *MainWindow;
  342. extern struct IntuitionBase *IntuitionBase;
  343. extern struct MemoryChain Memory;
  344. extern BOOL   REQUESTER;
  345.  
  346. static USHORT   my_colors[4] = { 0xCCC,0x000,0xFB9,0x843 };
  347.  
  348. /*
  349.  * setup the main display
  350.  */
  351. static VOID backfill()
  352. {
  353.     register struct Gadget *g;
  354.     register struct Border *b;
  355.     register SHORT         *p, l, t, i;
  356.  
  357.     LoadRGB4(&s->ViewPort,&my_colors[0],4);
  358.  
  359.     g = &GDHN;
  360.     b = &MainBorder1;
  361.  
  362.     SetAPen(rp,3);
  363.     while(1)
  364.     {   p = b->XY;
  365.         l = b->LeftEdge;
  366.         t = b->TopEdge;
  367.         RectFill(rp,l+p[0],t+p[1],l+p[4],t+p[5]);
  368.         if(NOT(b = b->NextBorder)) break;
  369.     }
  370.     SetAPen(rp,2);
  371.     while(1)
  372.     {   l = g->LeftEdge;
  373.         t = g->TopEdge;
  374.         if(g != &BRD) RectFill(rp,l,t,l + g->Width,t + g->Height);
  375.         if(NOT(g = g->NextGadget)) break;
  376.     }
  377.     SetAPen(rp,0);
  378.     RectFill(rp,280,82,352,93);
  379.     RectFill(rp,407,82,479,93);
  380.     RectFill(rp,280,69,352,80);
  381.     RectFill(rp,239,111,477,120);
  382. }
  383.  
  384. /*
  385.  * default the gadget flags of the control window
  386.  */
  387. static VOID clear_gadgets()
  388. {
  389.     register struct Gadget *g;
  390.  
  391.     g = &GDHN;
  392.  
  393.     while(1)
  394.     { if((g != &HB)&&(g != &VB)&&(g != &SZ)&&
  395.          (g != &SL)&&(g != &OK)&&(g != &CN)&&(g != &BRD)) g->Flags = NULL;
  396.       if(NOT(g = g->NextGadget)) break;
  397.     }
  398.     SLBuff[0] = 0;
  399.     strcpy((char *)HBBuff,"0");
  400.     strcpy((char *)VBBuff,"0");
  401.     strcpy((char *)SZBuff,"256");
  402. }
  403.  
  404. /*
  405.  * set the gadgets according to the information
  406.  * found in the MyGadget structure 'g'
  407.  */
  408. static VOID set_gadgets(g)
  409.     struct MyGadget *g;
  410. {
  411.     register ULONG flags, act, type;
  412.     struct Gadget     *gadget;
  413.     struct PropInfo   *pinfo;
  414.     struct StringInfo *sinfo;
  415.  
  416.     gadget = &g->Gadget;
  417.     flags  = (ULONG)gadget->Flags;
  418.     act    = (ULONG)gadget->Activation;
  419.     type   = (ULONG)gadget->GadgetType;
  420.  
  421.     if((TestBits((ULONG)gadget->Flags,GADGIMAGE)) OR
  422.        (gadget->SpecialInfo) OR
  423.        (gadget->GadgetText))    GadgetOff(w,&BO,NULL);
  424.  
  425.     if(REQUESTER)
  426.     {   OffGList(w,&GRB,NULL,4);
  427.         OffGList(w,&RB,NULL,4);
  428.     }
  429.     else GadgetOff(w,&EG,NULL);
  430.  
  431.     if(TestBits(flags,GADGIMAGE)) GadgetOff(w,&AK,NULL);
  432.  
  433.     if((TestBits(flags,GADGHIMAGE)) AND
  434.        (NOT TestBits(flags,GADGHBOX)))  OffGList(w,&GDHN,NULL,3);
  435.     else if((TestBits(flags,GADGHIMAGE)) AND
  436.             (TestBits(flags,GADGHBOX))) SelectGadget(w,&GDHN,NULL);
  437.     else if(TestBits(flags,GADGHBOX))   SelectGadget(w,&GDHB,NULL);
  438.     else                                SelectGadget(w,&GDHC,NULL);
  439.  
  440.     if(TestBits(flags,GRELBOTTOM))      SelectGadget(w,&GRB,NULL);
  441.     if(TestBits(flags,GRELRIGHT))       SelectGadget(w,&GRR,NULL);
  442.     if(TestBits(flags,GRELWIDTH))       SelectGadget(w,&GRW,NULL);
  443.     if(TestBits(flags,GRELHEIGHT))      SelectGadget(w,&GRH,NULL);
  444.     if(TestBits(flags,SELECTED))        SelectGadget(w,&SLC,NULL);
  445.  
  446.     if(TestBits((ULONG)g->SpecialFlags,GADGETOFF))
  447.                                         SelectGadget(w,&GDD,NULL);
  448.  
  449.     if(TestBits(act,TOGGLESELECT))      SelectGadget(w,&TGS,NULL);
  450.     if(!TestBits((ULONG)g->SpecialFlags,NOSIGNAL))
  451.     {   if(TestBits(act,RELVERIFY))         SelectGadget(w,&RVY,NULL);
  452.         if(TestBits(act,GADGIMMEDIATE))     SelectGadget(w,&GIM,NULL);
  453.     }
  454.     if(TestBits(act,RIGHTBORDER))       SelectGadget(w,&RB,NULL);
  455.     if(TestBits(act,LEFTBORDER))        SelectGadget(w,&LB,NULL);
  456.     if(TestBits(act,TOPBORDER))         SelectGadget(w,&TB,NULL);
  457.     if(TestBits(act,BOTTOMBORDER))      SelectGadget(w,&BB,NULL);
  458.     if(TestBits(act,ENDGADGET))         SelectGadget(w,&EG,NULL);
  459.     if(TestBits(act,FOLLOWMOUSE))       SelectGadget(w,&FM,NULL);
  460.  
  461.     if(TestBits(type,PROPGADGET))
  462.     {   SelectGadget(w,&PR,NULL);
  463.         pinfo = (struct PropInfo *)gadget->SpecialInfo;
  464.         flags = (ULONG)pinfo->Flags;
  465.         if(TestBits(flags,AUTOKNOB))       SelectGadget(w,&AK,NULL);
  466.         if(TestBits(flags,FREEHORIZ))      SelectGadget(w,&FH,NULL);
  467.         if(TestBits(flags,FREEVERT))       SelectGadget(w,&FV,NULL);
  468.         if(TestBits(flags,PROPBORDERLESS)) SelectGadget(w,&PB,NULL);
  469.         if(pinfo->HorizBody == MAXBODY)
  470.         {   strcpy((char *)HBBuff,"0");
  471.             HBInfo.LongInt = 0;
  472.         }
  473.         else
  474.         {   Format((char *)HBBuff,"%ld",MAXBODY / pinfo->HorizBody);
  475.             HBInfo.LongInt = MAXBODY / pinfo->HorizBody;
  476.         }
  477.         if(pinfo->VertBody == MAXBODY)
  478.         {   strcpy((char *)VBBuff,"0");
  479.             VBInfo.LongInt = 0;
  480.         }
  481.         else
  482.         {   Format((char *)VBBuff,"%ld",MAXBODY / pinfo->VertBody);
  483.             VBInfo.LongInt = MAXBODY / pinfo->VertBody;
  484.         }
  485.     }
  486.     else if(TestBits(type,STRGADGET))
  487.     {   SelectGadget(w,&ST,NULL);
  488.         sinfo = (struct StringInfo *)gadget->SpecialInfo;
  489.         if(sinfo->UndoBuffer)              SelectGadget(w,&UB,NULL);
  490.         if(TestBits(act,STRINGCENTER))     SelectGadget(w,&SC,NULL);
  491.         if(TestBits(act,STRINGRIGHT))      SelectGadget(w,&SR,NULL);
  492.         if(TestBits(act,LONGINT))          SelectGadget(w,&LI,NULL);
  493.         if(TestBits(act,ALTKEYMAP))        SelectGadget(w,&AM,NULL);
  494.         Format((char *)SZBuff,"%ld",sinfo->MaxChars);
  495.     }
  496.     else SelectGadget(w,&BL,NULL);
  497.     if(TestBits((ULONG)g->SpecialFlags,BORDERONLY)) SelectGadget(w,&BO,NULL);
  498.     if(TestBits((ULONG)g->SpecialFlags,GZZGADGET))  SelectGadget(w,&GZ,NULL);
  499.  
  500.     strcpy((char *)SLBuff,(char *)g->GadgetLabel);
  501.     RefreshGList(&HB,w,NULL,2);
  502.     RefreshGList(&SZ,w,NULL,1);
  503.     RefreshGList(&SL,w,NULL,1);
  504. }
  505.  
  506. /*
  507.  * change the gadget according to the control window
  508.  */
  509. static BOOL change_gadget(gad)
  510.     struct MyGadget *gad;
  511. {
  512.     struct Border     *b;
  513.     struct Image      *gi, *si;
  514.     struct StringInfo *s;
  515.     struct PropInfo   *p;
  516.     struct Gadget     *g;
  517.     USHORT bfpen, i;
  518.     BOOL   image_render = FALSE, simage_render = FALSE;
  519.  
  520.     ULONG size;
  521.  
  522.     g = &gad->Gadget;
  523.  
  524.     if((TestBits(g->Flags,GADGIMAGE)))
  525.     {   image_render = TRUE;
  526.         gi = (struct Image *)g->GadgetRender;
  527.     }
  528.     else if(NOT(TestBits(g->GadgetType,PROPGADGET)))
  529.     {   b = (struct Border *)g->GadgetRender;
  530.         bfpen = b->FrontPen;
  531.         FreeItem(&Memory,b->XY,20L);
  532.         FreeItem(&Memory,b,(long)sizeof(struct Border));
  533.     }
  534.     if((TestBits(g->Flags,GADGHIMAGE)) AND
  535.        (NOT TestBits(g->Flags,GADGHBOX)))
  536.     {   simage_render = TRUE;
  537.         si = (struct Image *)g->SelectRender;
  538.     }
  539.  
  540.     if(TestBits(g->GadgetType,PROPGADGET))
  541.     {   if(image_render == FALSE)
  542.             FreeItem(&Memory,g->GadgetRender,(long)sizeof(struct Image));
  543.          FreeItem(&Memory,g->SpecialInfo,(long)sizeof(struct PropInfo));
  544.     }
  545.     else if(TestBits(g->GadgetType,STRGADGET))
  546.     {   s = (struct StringInfo *)g->SpecialInfo;
  547.         if(s->Buffer)     FreeItem(&Memory,s->Buffer,s->MaxChars);
  548.         if(s->UndoBuffer) FreeItem(&Memory,s->UndoBuffer,s->MaxChars);
  549.         FreeItem(&Memory,s,(long)sizeof(struct StringInfo));
  550.     }
  551.  
  552.     g->Flags = g->Activation = g->GadgetType = gad->SpecialFlags = NULL;
  553.     g->SpecialInfo = NULL;
  554.  
  555.     if(SelectTest(&GDHN))                 g->Flags = GADGHNONE;
  556.     else if(SelectTest(&GDHB))            g->Flags = GADGHBOX;
  557.     else if(SelectTest(&GDHC))            g->Flags = GADGHCOMP;
  558.     else                                  g->Flags = GADGHIMAGE;
  559.  
  560.     if(image_render == TRUE)              g->Flags |= GADGIMAGE;
  561.  
  562.     if(SelectTest(&GRB))                  g->Flags |= GRELBOTTOM;
  563.     if(SelectTest(&GRR))                  g->Flags |= GRELRIGHT;
  564.     if(SelectTest(&GRW))                  g->Flags |= GRELWIDTH;
  565.     if(SelectTest(&GRH))                  g->Flags |= GRELHEIGHT;
  566.     if(SelectTest(&SLC))                  g->Flags |= SELECTED;
  567.  
  568.     if(SelectTest(&GDD))                  gad->SpecialFlags |= GADGETOFF;
  569.  
  570.     if(SelectTest(&TGS))                  g->Activation |= TOGGLESELECT;
  571.     if(SelectTest(&RVY))                  g->Activation |= RELVERIFY;
  572.     if(SelectTest(&GIM))                  g->Activation |= GADGIMMEDIATE;
  573.     if(SelectTest(&RB))                   g->Activation |= RIGHTBORDER;
  574.     if(SelectTest(&LB))                   g->Activation |= LEFTBORDER;
  575.     if(SelectTest(&TB))                   g->Activation |= TOPBORDER;
  576.     if(SelectTest(&BB))                   g->Activation |= BOTTOMBORDER;
  577.     if(SelectTest(&EG))                   g->Activation |= ENDGADGET;
  578.     if(SelectTest(&FM))                   g->Activation |= FOLLOWMOUSE;
  579.  
  580.     if(SelectTest(&PR))
  581.     {   g->GadgetType    = PROPGADGET;
  582.         if(NOT(p = (struct PropInfo *)Alloc(&Memory,(ULONG)sizeof(struct PropInfo))))
  583.         {   Error("Out of memory !");
  584.             return(FALSE);
  585.         }
  586.         if(NOT(TestBits(g->Flags,GADGIMAGE)))
  587.         {   if(NOT(g->GadgetRender = Alloc(&Memory,(ULONG)sizeof(struct Image))))
  588.             {   Error("Out of memory !");
  589.                 return(FALSE);
  590.             }
  591.         }
  592.         if(SelectTest(&AK))    p->Flags |= AUTOKNOB;
  593.         if(SelectTest(&FH))    p->Flags |= FREEHORIZ;
  594.         if(SelectTest(&FV))    p->Flags |= FREEVERT;
  595.         if(SelectTest(&PB))    p->Flags |= PROPBORDERLESS;
  596.         if(HBInfo.LongInt <= NULL) p->HorizBody = MAXBODY;
  597.         else p->HorizBody = MAXBODY / HBInfo.LongInt;
  598.         if(VBInfo.LongInt <= NULL) p->VertBody  = MAXBODY;
  599.         else p->VertBody  = MAXBODY / VBInfo.LongInt;
  600.         g->SpecialInfo = (APTR)p;
  601.     }
  602.     else if(SelectTest(&ST))
  603.     {   g->GadgetType    = STRGADGET;
  604.         if(SelectTest(&SC))    g->Activation |= STRINGCENTER;
  605.         if(SelectTest(&SR))    g->Activation |= STRINGRIGHT;
  606.         if(SelectTest(&LI))    g->Activation |= LONGINT;
  607.         if(SelectTest(&AM))    g->Activation |= ALTKEYMAP;
  608.         if(NOT(s = (struct StringInfo *)Alloc(&Memory,(ULONG)sizeof(struct StringInfo))))
  609.         {   Error("Out of memory !");
  610.             return(FALSE);
  611.         }
  612.         size = SZInfo.LongInt;
  613.         s->MaxChars = SZInfo.LongInt;
  614.         if(NOT(s->Buffer = (UBYTE *)Alloc(&Memory,size)))
  615.         {   Error("Out of memory !");
  616.             return(FALSE);
  617.         }
  618.         if(SelectTest(&UB))
  619.         {   if(NOT(s->UndoBuffer = (UBYTE *)Alloc(&Memory,size)))
  620.             {   Error("Out of memory !");
  621.                 return(FALSE);
  622.             };
  623.         }
  624.         g->SpecialInfo = (APTR)s;
  625.     }
  626.     else g->GadgetType                     = BOOLGADGET;
  627.     if(SelectTest(&BO)) gad->SpecialFlags |= BORDERONLY;
  628.     if(SelectTest(&GZ)) gad->SpecialFlags |= GZZGADGET;
  629.  
  630.     if((!SelectTest(&TGS)) AND (!SelectTest(&RVY)))
  631.     {   g->Activation     = RELVERIFY;
  632.         gad->SpecialFlags = NOSIGNAL;
  633.     }
  634.  
  635.     if(TestBits(g->Flags,GADGHIMAGE)) g->SelectRender = (APTR)si;
  636.     if(TestBits(g->Flags,GADGIMAGE))  g->GadgetRender = (APTR)gi;
  637.     else
  638.     {   if(NOT(TestBits(g->GadgetType,PROPGADGET)))
  639.         {    if(add_border(g) == FALSE)
  640.              {   Error("Out of memory !");
  641.                  return(FALSE);
  642.              }
  643.              ((struct Border *)g->GadgetRender)->FrontPen = bfpen;
  644.         }
  645.     }
  646.     for(i=0;i<strlen((char *)SLBuff);i++)
  647.     {   if(SLBuff[i] == ' ') SLBuff[i] = '_';
  648.     }
  649.     strcpy((char *)&gad->GadgetLabel,(char *)SLBuff);
  650.     return(TRUE);
  651. }
  652.  
  653. /*
  654.  * open the gadget editor control display
  655.  */
  656. BOOL edit_gadget(gadget)
  657.     struct MyGadget *gadget;
  658. {
  659.     struct Gadget *g;
  660.  
  661.     buisy();
  662.     ns.TopEdge = IntuitionBase->ActiveScreen->Height - 132;
  663.     if(NOT(s = OpenScreen(&ns)))
  664.     {   Error("Can't open display !");
  665.         return(FALSE);
  666.     }
  667.     clear_gadgets();
  668.     nw.Screen = s;
  669.     if(NOT(w = OpenWindow(&nw)))
  670.     {   Error("Can't open display !");
  671.         CloseScreen(s);
  672.         return(FALSE);
  673.     }
  674.     ScreenToFront(s);
  675.     rp = w->RPort;
  676.     backfill();
  677.     AddGList(w,&GDHN,-1L,39,NULL);
  678.     RefreshGList(&GDHN,w,NULL,39);
  679.     set_gadgets(gadget);
  680.     do
  681.     {   Wait(1 << w->UserPort->mp_SigBit);
  682.         while((msg = (struct IntuiMessage *)GetMsg(w->UserPort)))
  683.         {   g  = (struct Gadget *)msg->IAddress;
  684.             id = g->GadgetID;
  685.             ReplyMsg((struct Message *)msg);
  686.             switch(id)
  687.             {  case 0:
  688.                case 1:
  689.                case 2:  MutualExclude(w,g,&GDHN,NULL);
  690.                         SelectGadget(w,g,NULL);
  691.                         break;
  692.                case 31: if(NOT TestBits(gadget->Gadget.Flags,GADGIMAGE))
  693.                             SelectGadget(w,&AK,NULL);
  694.                case 32: DeSelectGadget(w,&BO,NULL); GadgetOff(w,&BO,NULL);
  695.                case 30: MutualExclude(w,g,&BL,NULL);
  696.                         SelectGadget(w,g,NULL);
  697.                         break;
  698.                case 18: SelectGadget(w,g,NULL);
  699.                         break;
  700.                case 25:
  701.                case 26: MutualExclude(w,g,&SC,NULL);
  702.                         break;
  703.                default: break;
  704.             }
  705.         }
  706.     } while(id != 34 && id != 35);
  707.     CloseWindow(w);
  708.     CloseScreen(s);
  709.     ok();
  710.     if(id == 34) return(change_gadget(gadget));
  711.     return(TRUE);
  712. }
  713.