home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 514b.lha / GadgetED_v2.3 / Source / editgad.c < prev    next >
Text File  |  1991-06-08  |  27KB  |  765 lines

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