home *** CD-ROM | disk | FTP | other *** search
/ The Fred Fish Collection 1.5 / ffcollection-1-5-1992-11.iso / ff_disks / 500-599 / ff583.lza / TplEdit / src.lzh / edit.c < prev    next >
C/C++ Source or Header  |  1991-12-03  |  20KB  |  820 lines

  1.  
  2. /*
  3.  * EDIT.C
  4.  */
  5.  
  6. #include "defs.h"
  7.  
  8. Prototype int  OpenEditWindow(void);
  9. Prototype void CloseEditWindow(void);
  10. Prototype void HandleEditGadget(IMsg *);
  11. Prototype void HandleSliders(IMsg *);
  12. Prototype void UpdateEWinInfo(TplRegion *);
  13. Prototype void selectEgad(Gadget *);
  14. Prototype void DisableEGads(TplRegion *);
  15. Prototype void CheckSpecial(TplRegion *, long);
  16.  
  17. Prototype Window *EWin;
  18. Prototype long   EWinMask;
  19.  
  20. Prototype long   BufSpace;
  21. Prototype long   MaxVal;
  22. Prototype long   DefVal;
  23. Prototype long   SpecFlag;
  24.  
  25. Window    *EWin;
  26. long      EWinMask;
  27.  
  28. long  BufSpace  = 0;
  29. long  MaxVal    = 0;
  30. long  DefVal    = 0;
  31. long  SpecFlag  = 0;
  32. short checked   = 0;
  33. short disable   = 0;
  34. long  excl      = 0;
  35.  
  36. /***********************  OpenEditWindow()  **************************/
  37. int
  38. OpenEditWindow()
  39. {
  40.   if (DDebug)
  41.     puts("OpenEditWindow");
  42.   Gadget *gadgets;
  43.  
  44.   if (InitGads() == NULL)
  45.     exit(22);
  46.  
  47.   if (DDebug)
  48.     puts("Done InitGads");
  49.  
  50.   EWin = (Window *)OpenWindowTags(NULL,
  51.            WA_Flags,     WFLG_DRAGBAR|
  52.                          WFLG_DEPTHGADGET|
  53.                          WFLG_CLOSEGADGET|
  54.                          WFLG_SIZEGADGET|
  55.                          WFLG_SIMPLE_REFRESH|
  56.                           /*  WFLG_REPORTMOUSE| */
  57.                          WFLG_ACTIVATE,
  58.  
  59.            WA_IDCMP,     IDCMP_GADGETUP|
  60.                          IDCMP_GADGETDOWN|
  61.                          IDCMP_MOUSEMOVE|
  62.                          IDCMP_NEWSIZE|
  63.                          IDCMP_MENUPICK|
  64.                           /*  IDCMP_VANILLAKEY| */
  65.                          IDCMP_RAWKEY|
  66.                          IDCMP_CHANGEWINDOW|
  67.                          IDCMP_CLOSEWINDOW|
  68.                          IDCMP_REFRESHWINDOW|
  69.                          IDCMP_ACTIVEWINDOW,
  70.  
  71.            WA_Left,      WLEF,
  72.            WA_Top,       WTOP,
  73.            WA_Width,     WWID,
  74.            WA_Height,    WHEI,
  75.            WA_Title,     "TPL CONTROL",
  76.            WA_MinWidth,  32,
  77.            WA_MinHeight, 32,
  78.            WA_MaxWidth,  -1,
  79.            WA_MaxHeight, -1,
  80.            WA_AutoAdjust, 1,
  81.            WA_PubScreen, NULL,
  82.            WA_PubScreenFallBack, 1,
  83.            WA_Gadgets,   EGList,
  84.            TAG_END );
  85.  
  86.   if (EWin == NULL)
  87.     return (-1);
  88.  
  89.   EWinMask = 1 << EWin->UserPort->mp_SigBit;
  90.   GT_RefreshWindow(EWin, NULL);
  91.  
  92.   drawborders();
  93.   if (DDebug)
  94.     puts("done drawborders");
  95.  
  96.   return (1);
  97. }
  98.  
  99. /***********************  CloseEditWindow() **************************/
  100. void
  101. CloseEditWindow()
  102. {
  103.   if (EWin)
  104.   {
  105.     ClearMenuStrip(EWin);
  106.     CloseWindow(EWin);
  107.     EWin = NULL;
  108.   }
  109.   FreeGads();
  110. }
  111.  
  112. /***********************  HandleEditGadget(im)  **********************/
  113. void
  114. HandleEditGadget(im)
  115.   IMsg  *im;
  116. {
  117.   StringInfo *si = (StringInfo *) (((Gadget *) im->IAddress)->SpecialInfo);
  118.   short id       = ((Gadget *)im->IAddress)->GadgetID;
  119.   long  flag     = 0;
  120.  
  121.   switch (id)
  122.   {
  123.   case GAD_gadgets_lv:
  124.     if (DDebug)
  125.       puts("GAD_gadgets_lv:");
  126.     NewType     = im->Code;
  127.     Menu *menu  = GMenu->NextMenu;    /*  update menu ! */
  128.  
  129.     MenuItem *item = menu->FirstItem;
  130.  
  131.     for (short i = 0; i <= 13; ++i)
  132.     {
  133.       if (item->Flags & CHECKED)
  134.         item->Flags -= CHECKED;
  135.  
  136.       if (i == NewType)
  137.         item->Flags |= CHECKED;
  138.  
  139.       item = item->NextItem;
  140.     }
  141.     ResetMenuStrip(EWin, GMenu);
  142.     if (CurRegion)
  143.       DisableEGads(CurRegion);
  144.     else
  145.       DisableEGads((void *)0L);
  146.     break;
  147.  
  148.   case GAD_flags_mx:
  149.     if (DDebug)
  150.       printf("GAD_flags_mx: %d\n", 1L << im->Code );
  151.     NewFlags = 1L << im->Code;
  152.     break;
  153.  
  154.   case GAD_actions_mx:
  155.     if (DDebug)
  156.       puts("GAD_actions_mx:");
  157.     DisableGadgets();
  158.     switch (im->Code)
  159.     {
  160.     case ACT_NEW:
  161.       if (DDebug)
  162.         puts("ACT_NEW:");
  163.       Title("Choose Place for New Gadget");
  164.       CurState = STATE_NEWREGION;
  165.       break;
  166.  
  167.     case ACT_COPY:
  168.       if (DDebug)
  169.         puts("ACT_COPY:");
  170.       Title("Choose Gadget to Copy");
  171.       CurState = STATE_COPYREGION;
  172.       break;
  173.  
  174.     case ACT_MOVE:
  175.       if (DDebug)
  176.         puts("ACT_MOVE:");
  177.       Title("Move to New Place");
  178.       CurState = STATE_MOVEREGION;
  179.       break;
  180.  
  181.     case ACT_SIZE:
  182.       if (DDebug)
  183.         puts("ACT_SIZE:");
  184.       Title("Move to New Size");
  185.       CurState = STATE_SIZEREGION;
  186.       break;
  187.  
  188.     case ACT_EXCL:
  189.       if (DDebug)
  190.         puts("ACT_EXCL:");
  191.       Title("Choose Gadget to Exclude");
  192.       CurState = STATE_EXCLREGION;
  193.       break;
  194.  
  195.     case ACT_DEL:
  196.       if (DDebug)
  197.         puts("ACT_DEL:");
  198.       Title("Choose Gadget to Delete");
  199.       CurState = STATE_DELREGION;
  200.       break;
  201.  
  202.     case ACT_TEST:
  203.       if (DDebug)
  204.         puts("ACT_TEST:");
  205.       Title("Test Gadgets");
  206.       CurState = STATE_TEST;
  207.       EnableGadgets();
  208.       break;
  209.  
  210.     default:
  211.       break;
  212.     }
  213.     break;
  214.  
  215.   case GAD_region_str:
  216.     if (DDebug)
  217.       puts("GAD_region_str:");
  218.     if (CurRegion)
  219.     {
  220.       if (CurRegion->rg_Node.ln_Name)
  221.         free(CurRegion->rg_Node.ln_Name);
  222.       CurRegion->rg_Node.ln_Name = strdup(si->Buffer);
  223.       SetCurRegion(CurRegion);
  224.     }
  225.     break;
  226.  
  227.   case GAD_label_str:
  228.     if (DDebug)
  229.       puts("GAD_label_str:");
  230.     if (CurRegion)
  231.     {
  232.       if (CurRegion->rg_LabText)
  233.         free(CurRegion->rg_LabText);
  234.       CurRegion->rg_LabText = strdup(si->Buffer);
  235.     }
  236.     break;
  237.  
  238.   case GAD_default_str:
  239.     if (DDebug)
  240.       puts("GAD_default_str:");
  241.     if (CurRegion)
  242.     {
  243.       if (CurRegion->rg_DefText)
  244.         free(CurRegion->rg_DefText);
  245.       CurRegion->rg_DefText = strdup(si->Buffer);
  246.     }
  247.     break;
  248.  
  249.   case GAD_items_str:
  250.     if (DDebug)
  251.       puts("GAD_items_str:");
  252.   case GAD_items_add:
  253.     if (DDebug)
  254.       puts("GAD_items_add:");
  255.     if (Buf_items_str[0] == 0)
  256.       break;
  257.  
  258.     GT_SetGadgetAttrs(Gad_items_lv, EWin, NULL,
  259.                       GTLV_Labels, -1,
  260.                       TAG_END);
  261.     MaxNode *mn;
  262.     for (mn = GetHead(&List_items_lv); mn; mn = GetSucc(mn))
  263.     {
  264.       if (strcmp(Buf_items_str, mn->ln_Name) == 0)
  265.         break;
  266.     }
  267.     if (mn == NULL)
  268.     {
  269.       AddNode(&List_items_lv, Buf_items_str, 1);
  270.       if (CurRegion)
  271.         GT_SetGadgetAttrs(Gad_maxval_sl, EWin, NULL,
  272.                           GTSL_Level, ++CurRegion->rg_MaxVal,
  273.                           TAG_END);
  274.     }
  275.     SortList(&List_items_lv);
  276.  
  277.     GT_SetGadgetAttrs(Gad_items_lv, EWin, NULL,
  278.                       GTLV_Labels, &List_items_lv,
  279.                       TAG_END);
  280.     break;
  281.  
  282.   case GAD_items_up:
  283.   case GAD_items_down:
  284.     if (Buf_items_str[0] == 0)
  285.       break;
  286.  
  287.     GT_SetGadgetAttrs(Gad_items_lv, EWin, NULL,
  288.                       GTLV_Labels, -1,
  289.                       TAG_END);
  290.  
  291.     SortList(&List_items_lv);
  292.  
  293.     short i = 0;
  294.     MaxNode *mn;
  295.     for (mn = GetHead(&List_items_lv); mn; mn = GetSucc(mn))
  296.     {
  297.       if (strcmp(Buf_items_str, mn->ln_Name) == 0)
  298.       {
  299.         Remove(mn);
  300.         break;
  301.       }
  302.       ++i;
  303.     }
  304.     if (mn == NULL)
  305.       break;
  306.  
  307.     if (id == GAD_items_up)
  308.     {
  309.       mn->ln_Pri += 2;
  310.       --i;
  311.     }
  312.     else
  313.     {
  314.       --mn->ln_Pri;
  315.       ++i;
  316.     }
  317.     Enqueue(&List_items_lv, mn);
  318.     SortList(&List_items_lv);
  319.  
  320.     GT_SetGadgetAttrs(Gad_items_lv, EWin, NULL,
  321.                       GTLV_Labels,    &List_items_lv,
  322.                       GTLV_Selected,  i,
  323.                       GTLV_Top,       ( i > 4) ? i - 4 :
  324.                                       ((i > 3) ? i - 3 :
  325.                                       ((i > 2) ? i - 2 :
  326.                                       ((i > 1) ? i - 1 : 0))),
  327.                       TAG_END);
  328.     break;
  329.  
  330.  
  331.   case GAD_items_del:
  332.     if (DDebug)
  333.       puts("GAD_items_del:");
  334.     GT_SetGadgetAttrs(Gad_items_lv, EWin, NULL,
  335.                       GTLV_Labels, -1,
  336.                       TAG_END);
  337.     short cnt;
  338.     MaxNode *mn;
  339.  
  340.     for (mn = GetHead(&List_items_lv); mn; mn = GetSucc(mn))
  341.     {
  342.       if (strcmp(Buf_items_str, mn->ln_Name) == 0)
  343.       {
  344.         Remove(mn);
  345.         free(mn->ln_Name);
  346.         free(mn);
  347.         if (CurRegion)
  348.         {
  349.           CurRegion->rg_MaxVal = (CurRegion->rg_MaxVal) ?
  350.                                 --CurRegion->rg_MaxVal  : 0;
  351.  
  352.           GT_SetGadgetAttrs(Gad_maxval_sl, EWin, NULL,
  353.                             GTSL_Level, CurRegion->rg_MaxVal,
  354.                             TAG_END);
  355.  
  356.           if (CurRegion->rg_DefVal > CurRegion->rg_MaxVal)
  357.             GT_SetGadgetAttrs(Gad_defval_sl, EWin, NULL,
  358.                               GTSL_Level, CurRegion->rg_MaxVal,
  359.                               TAG_END);
  360.         }
  361.         SortList(&List_items_lv);
  362.         break;
  363.       }
  364.     }
  365.  
  366.     GT_SetGadgetAttrs(Gad_items_lv, EWin, NULL,
  367.                       GTLV_Labels, &List_items_lv,
  368.                       TAG_END);
  369.     break;
  370.  
  371.   case GAD_update_but: /* Update currently selected gadget from TPL CONTROL window */
  372.     if (DDebug)
  373.       puts("GAD_update_but:");
  374.     if (CurRegion)
  375.     {
  376.       if (DDebug)
  377.         puts("UpdateTplRegion(CurRegion)");
  378.       UpdateTplRegion(CurRegion);
  379.       SetCurRegion(CurRegion);
  380.       ReMakeEverything();
  381.       init_test();
  382.       issaved = FALSE;
  383.     }
  384.     break;
  385.  
  386.   case GAD_relverify_box:
  387.     flag = SPEC_RELVERIFY;
  388.     break;
  389.   case GAD_disabled_box:
  390.     flag = SPEC_DISABLED;
  391.     break;
  392.   case GAD_immediate_box:
  393.     flag = SPEC_IMMEDIATE;
  394.     break;
  395.   case GAD_readonly_box:
  396.     flag = SPEC_READONLY;
  397.     break;
  398.   case GAD_recessed_box:
  399.     flag = SPEC_RECESSED;
  400.     break;
  401.   case GAD_highlabel_box:
  402.     flag = SPEC_HIGHLABEL;
  403.     break;
  404.   case GAD_vertical_box:
  405.     flag = SPEC_VERTICAL;
  406.     break;
  407.   case GAD_border_box:
  408.     flag = SPEC_BORDER;
  409.     break;
  410.   case GAD_checked_box:
  411.     flag = SPEC_CHECKED;
  412.     break;
  413.  
  414.   default:
  415.     break;
  416.   }
  417.  
  418.   if (flag)
  419.   {
  420.     if (SpecFlag & flag)
  421.       SpecFlag -= flag;
  422.     else
  423.       SpecFlag |= flag;
  424.  
  425.     if (DDebug)
  426.       printf("SpecFlag = %d\n", SpecFlag);
  427.  
  428.     if (CurRegion)
  429.       CurRegion->rg_SpecFlags = SpecFlag;
  430.   }
  431. }
  432.  
  433. /***********************  HandleSliders(im);  ************************/
  434. void
  435. HandleSliders(IMsg *im)
  436. {
  437.   switch (((Gadget *)im->IAddress)->GadgetID)
  438.   {
  439.   case GAD_buf_space_sl:
  440.     if (DDebug)
  441.       puts("GAD_buf_space_sl:");
  442.     BufSpace = im->Code;
  443.     break;
  444.  
  445.   case GAD_defval_sl:
  446.     if (DDebug)
  447.       puts("GAD_defval_sl:");
  448.     DefVal = (im->Code < MaxVal) ? im->Code : MaxVal;
  449.     break;
  450.  
  451.   case GAD_maxval_sl:
  452.     if (DDebug)
  453.       puts("GAD_maxval_sl:");
  454.     long val = im->Code;
  455.     MaxVal   = val;
  456.  
  457.     if (DefVal > val)
  458.       DefVal = val;
  459.  
  460.     GT_SetGadgetAttrs(Gad_defval_sl, EWin, NULL,
  461.                       GTSL_Max,   val,
  462.                       GTSL_Level, DefVal,
  463.                       TAG_END);
  464.   default:
  465.     break;
  466.   }
  467. }
  468.  
  469.  
  470. /***********************  UpdateEWinInfo(rg)  ************************/
  471. void
  472. UpdateEWinInfo(rg)
  473.   TplRegion *rg;
  474. {
  475.   NewType   = rg->rg_Type;
  476.   NewFlags  = rg->rg_Flags;
  477.   SpecFlag  = rg->rg_SpecFlags;
  478.   MaxVal    = rg->rg_MaxVal;
  479.   DefVal    = rg->rg_DefVal;
  480.   BufSpace  = rg->rg_BufSpace;
  481.  
  482.   if (DDebug)
  483.   {
  484.     printf("NewType   = %d\n", rg->rg_Type);
  485.     printf("NewFlags  = %d\n", rg->rg_Flags);
  486.     printf("SpecFlag  = %d\n", rg->rg_SpecFlags);
  487.     printf("MaxVal    = %d\n", rg->rg_MaxVal);
  488.     printf("DefVal    = %d\n", rg->rg_DefVal);
  489.     printf("BufSpace  = %d\n", rg->rg_BufSpace);
  490.   }
  491.  
  492.   GT_SetGadgetAttrs(Gad_items_lv, EWin, NULL,
  493.                     GTLV_Labels, -1,
  494.                     TAG_END);
  495.  
  496.   MaxNode *mn;
  497.   while (mn = RemHead(&List_items_lv))
  498.   {
  499.     free(mn->ln_Name);
  500.     free(mn);
  501.   }
  502.   if (rg->rg_Type == RGT_CYCLE    ||
  503.       rg->rg_Type == RGT_LISTVIEW ||
  504.       rg->rg_Type == RGT_MX)
  505.   {
  506.     for (mn = GetHead(&rg->rg_ListSet); mn; mn = GetSucc(mn))
  507.       AddNode(&List_items_lv, mn->ln_Name, 1);
  508.   }
  509.   GT_SetGadgetAttrs(Gad_items_lv, EWin, NULL,
  510.                     GTLV_Labels, &List_items_lv,
  511.                     TAG_END);
  512.  
  513.  
  514.   DisableEGads(rg);
  515.   drawborders();
  516. }
  517.  
  518. /***********************  selectEgad  **************************/
  519. void
  520. selectEgad(Gadget *gadget)
  521. {
  522.   if ((gadget->GadgetType & GTYP_BOOLGADGET) &&
  523.      !(gadget->Flags      & SELECTED))
  524.   {
  525.     short gad_pos   = RemoveGadget(EWin, gadget);
  526.     gadget->Flags  += SELECTED;
  527.     AddGadget(EWin, gadget, gad_pos);
  528.     RefreshGList(gadget, EWin, NULL, 1);
  529.  
  530.     long mx;
  531.     if (mx = gadget->MutualExclude)
  532.     {
  533.       for (short i = 1; i < ALLGADS; ++i)
  534.       {
  535.         if (gadget->GadgetID == i)
  536.           continue;
  537.  
  538.         Gadget *gad = Egadlist[i];
  539.         if ((gad->GadgetType & GTYP_BOOLGADGET) &&
  540.             (gad->Flags      & SELECTED) &&
  541.             (mx & (1L << i)))
  542.         {
  543.           gad_pos      = RemoveGadget(EWin, gad);
  544.           gad->Flags  -= SELECTED;
  545.           AddGadget(EWin, gad, gad_pos);
  546.           RefreshGList(gad, EWin, NULL, 1);
  547.         }
  548.       }
  549.     }
  550.   }
  551. }
  552.  
  553.  
  554. /***********************  DisableEGads()  ****************************/
  555. void
  556. DisableEGads(rg)
  557.   TplRegion *rg;
  558. {
  559.   if (DDebug)
  560.     return;
  561.  
  562.   excl = SPEC_EXCL;
  563.  
  564.   switch(NewType)
  565.   {
  566.     case RGT_BUTTON:
  567.     case RGT_CHECKBOX:
  568.       excl -= SPEC_CHECKED  |
  569.               SPEC_DISABLED |
  570.               SPEC_HIGHLABEL;
  571.       break;
  572.  
  573.     case RGT_CYCLE:
  574.       excl -= SPEC_DISABLED |
  575.               SPEC_HIGHLABEL|
  576.               SPEC_ITEM     |
  577.               SPEC_BUFSPACE |
  578.               SPEC_DEFVAL   ;
  579.       break;
  580.  
  581.     case RGT_STRING:
  582.       excl -= SPEC_DISABLED |
  583.               SPEC_HIGHLABEL|
  584.               SPEC_BUFSPACE |
  585.               SPEC_DEFAULT  ;
  586.       break;
  587.  
  588.     case RGT_INTEGER:
  589.       excl -= SPEC_DISABLED |
  590.               SPEC_HIGHLABEL|
  591.               SPEC_BUFSPACE |
  592.               SPEC_DEFVAL   ;
  593.       break;
  594.  
  595.     case RGT_LISTVIEW:
  596.       excl -= SPEC_READONLY |
  597.               SPEC_HIGHLABEL|
  598.               SPEC_BUFSPACE |
  599.               SPEC_ITEM     |
  600.               SPEC_DEFVAL   ;
  601.       break;
  602.  
  603.     case RGT_NUMBER:
  604.       excl -= SPEC_HIGHLABEL|
  605.               SPEC_BORDER   |
  606.               SPEC_DEFVAL   ;
  607.       break;
  608.  
  609.     case RGT_TEXT:
  610.       excl -= SPEC_HIGHLABEL|
  611.               SPEC_BORDER   |
  612.               SPEC_DEFAULT  ;
  613.       break;
  614.  
  615.     case RGT_MX:
  616.       excl -= SPEC_HIGHLABEL|
  617.               SPEC_ITEM     |
  618.               SPEC_BUFSPACE |
  619.               SPEC_DEFVAL   ;
  620.       break;
  621.  
  622.     case RGT_SLIDER:
  623.     case RGT_SCROLLER:
  624.       excl -= SPEC_HIGHLABEL|
  625.               SPEC_VERTICAL |
  626.               SPEC_DISABLED |
  627.               SPEC_RELVERIFY|
  628.               SPEC_IMMEDIATE|
  629.               SPEC_BUFSPACE |
  630.               SPEC_MAXVAL   |
  631.               SPEC_DEFVAL   ;
  632.       break;
  633.  
  634.     case RGT_BEVELBOX:
  635.       excl -= SPEC_RECESSED;
  636.       break;
  637.  
  638.     case RGT_PALETTE:
  639.       excl -= SPEC_HIGHLABEL|
  640.               SPEC_DISABLED |
  641.               SPEC_BUFSPACE |
  642.               SPEC_MAXVAL   |
  643.               SPEC_DEFVAL   ;
  644.  
  645.     default:
  646.       break;
  647.   }
  648.  
  649.   Forbid();
  650.  
  651.   GT_SetGadgetAttrs(Gad_buf_space_sl, EWin, NULL,
  652.                     GTSL_Level,   BufSpace,
  653.                     GA_Disabled, (excl & SPEC_BUFSPACE)   ? TRUE : FALSE,
  654.                     TAG_END);
  655.  
  656.   GT_SetGadgetAttrs(Gad_maxval_sl, EWin, NULL,
  657.                     GTSL_Level,   MaxVal,
  658.                     GA_Disabled, (excl & SPEC_MAXVAL)     ? TRUE : FALSE,
  659.                     TAG_END);
  660.  
  661.   GT_SetGadgetAttrs(Gad_defval_sl, EWin, NULL,
  662.                     GTSL_Max,     MaxVal,
  663.                     GTSL_Level,   DefVal,
  664.                     GA_Disabled, (excl & SPEC_DEFVAL)     ? TRUE : FALSE,
  665.                     TAG_END);
  666.  
  667.   GT_SetGadgetAttrs(Gad_gadgets_lv, EWin, NULL,
  668.                     GTLV_Selected,  NewType,
  669.                     TAG_END);
  670.  
  671.   short flag =  (NewFlags &  1) ? 0 :
  672.                 (NewFlags &  2) ? 1 :
  673.                 (NewFlags &  4) ? 2 :
  674.                 (NewFlags &  8) ? 3 :
  675.                 (NewFlags & 16) ? 4 : -1;
  676.  
  677.   if (flag >= 0)
  678.     GT_SetGadgetAttrs(Gad_flags_mx, EWin, NULL,
  679.                       GTMX_Active, flag,
  680.                       TAG_END);
  681.  
  682.   GT_SetGadgetAttrs(Gad_region_str, EWin, NULL,
  683.                     GTST_String, (rg) ?
  684.                                 ((rg->rg_Node.ln_Name[0]) ?
  685.                                   rg->rg_Node.ln_Name     : "") : "",
  686.                     TAG_END);
  687.  
  688.   GT_SetGadgetAttrs(Gad_label_str, EWin, NULL,
  689.                     GTST_String, (rg) ?
  690.                                 ((rg->rg_LabText[0]) ?
  691.                                   rg->rg_LabText     : "") : "",
  692.                     TAG_END);
  693.  
  694.   GT_SetGadgetAttrs(Gad_default_str, EWin, NULL,
  695.                     GTST_String, (rg) ?
  696.                                 ((rg->rg_DefText[0]) ?
  697.                                   rg->rg_DefText     : "") : "",
  698.                     GA_Disabled, (excl & SPEC_DEFAULT)    ? TRUE : FALSE,
  699.                     TAG_END);
  700.  
  701.  
  702.   disable = (excl & SPEC_ITEM);
  703.  
  704.   GT_SetGadgetAttrs(Gad_items_add, EWin, NULL,
  705.                     GA_Disabled, disable,
  706.                     TAG_END);
  707.  
  708.   GT_SetGadgetAttrs(Gad_items_del, EWin, NULL,
  709.                     GA_Disabled, disable,
  710.                     TAG_END);
  711.  
  712.   GT_SetGadgetAttrs(Gad_items_up, EWin, NULL,
  713.                     GA_Disabled, disable,
  714.                     TAG_END);
  715.  
  716.   GT_SetGadgetAttrs(Gad_items_down, EWin, NULL,
  717.                     GA_Disabled, disable,
  718.                     TAG_END);
  719.  
  720.   GT_SetGadgetAttrs(Gad_items_str, EWin, NULL,
  721.                     GA_Disabled, disable,
  722.                     TAG_END);
  723.  
  724.   CheckSpecial(rg, SPEC_DISABLED);
  725.  
  726.   GT_SetGadgetAttrs(Gad_disabled_box, EWin, NULL,
  727.                     GTCB_Checked, checked,
  728.                     GA_Disabled,  disable,
  729.                     TAG_END);
  730.  
  731.   CheckSpecial(rg, SPEC_CHECKED);
  732.  
  733.   GT_SetGadgetAttrs(Gad_checked_box, EWin, NULL,
  734.                     GTCB_Checked, checked,
  735.                     GA_Disabled,  disable,
  736.                     TAG_END);
  737.  
  738.   CheckSpecial(rg, SPEC_BORDER);
  739.  
  740.   GT_SetGadgetAttrs(Gad_border_box, EWin, NULL,
  741.                     GTCB_Checked, checked,
  742.                     GA_Disabled,  disable,
  743.                     TAG_END);
  744.  
  745.   CheckSpecial(rg, SPEC_VERTICAL);
  746.  
  747.   GT_SetGadgetAttrs(Gad_vertical_box, EWin, NULL,
  748.                     GTCB_Checked, checked,
  749.                     GA_Disabled,  disable,
  750.                     TAG_END);
  751.  
  752.   CheckSpecial(rg, SPEC_HIGHLABEL);
  753.  
  754.   GT_SetGadgetAttrs(Gad_highlabel_box, EWin, NULL,
  755.                     GTCB_Checked, checked,
  756.                     GA_Disabled,  disable,
  757.                     TAG_END);
  758.  
  759.   CheckSpecial(rg, SPEC_RECESSED);
  760.  
  761.   GT_SetGadgetAttrs(Gad_recessed_box, EWin, NULL,
  762.                     GTCB_Checked, checked,
  763.                     GA_Disabled,  disable,
  764.                     TAG_END);
  765.  
  766.   CheckSpecial(rg, SPEC_READONLY);
  767.  
  768.   GT_SetGadgetAttrs(Gad_readonly_box, EWin, NULL,
  769.                     GTCB_Checked, checked,
  770.                     GA_Disabled,  disable,
  771.                     TAG_END);
  772.  
  773.   CheckSpecial(rg, SPEC_IMMEDIATE);
  774.  
  775.   GT_SetGadgetAttrs(Gad_immediate_box, EWin, NULL,
  776.                     GTCB_Checked, checked,
  777.                     GA_Disabled,  disable,
  778.                     TAG_END);
  779.  
  780.   CheckSpecial(rg, SPEC_RELVERIFY);
  781.  
  782.   GT_SetGadgetAttrs(Gad_relverify_box, EWin, NULL,
  783.                     GTCB_Checked, checked,
  784.                     GA_Disabled,  disable,
  785.                     TAG_END);
  786.  
  787.   checked = 0;
  788.   disable = 0;
  789.  
  790.   GT_RefreshWindow(EWin, NULL);
  791.  
  792.   Permit();
  793. }
  794.  
  795.  
  796. /***********************  CheckSpecial(rg, special) **********************/
  797. void
  798. CheckSpecial(rg, special)
  799.   TplRegion *rg;
  800.   long special;
  801. {
  802.   checked = (SpecFlag & special);
  803.   disable = (excl     & special);
  804.  
  805.   if (checked && disable)
  806.   {
  807.     SpecFlag -= special;
  808.     checked   = FALSE;
  809.     return;
  810.   }
  811.   if (rg && !checked && !disable)
  812.   {
  813.     if (rg->rg_SpecFlags & special)
  814.     {
  815.       SpecFlag |= special;
  816.       checked   = TRUE;
  817.     }
  818.   }
  819. }
  820.