home *** CD-ROM | disk | FTP | other *** search
/ Frozen Fish 1: Amiga / FrozenFish-Apr94.iso / bbs / alib / d5xx / d583 / tpledit.lha / TplEdit / src.lzh / region.c < prev    next >
C/C++ Source or Header  |  1991-12-03  |  4KB  |  176 lines

  1. /*
  2.  * REGION.C
  3.  */
  4.  
  5. #include "defs.h"
  6.  
  7. Prototype void        UpdateTplRegion(TplRegion *);
  8. Prototype TplRegion  *AllocTplRegion(void);
  9. Prototype void        DeleteTplRegion(TplRegion *);
  10.  
  11.  
  12. /***********************  AllocTplRegion()  **************************/
  13. TplRegion *
  14. AllocTplRegion()
  15. {
  16.   TplRegion *rg   = zalloc(sizeof(TplRegion));
  17.  
  18.   NewList(&rg->rg_ListSet);
  19.   rg->rg_Id       = ++IdNo;
  20.   rg->rg_TextAttr = *Scr->Font;
  21.   AddTail(&RegList, &rg->rg_Node);
  22.   return (rg);
  23. }
  24.  
  25. /***********************  UpdateTplRegion(rg) ************************/
  26. void
  27. UpdateTplRegion(rg)
  28.   TplRegion *rg;
  29. {
  30.   if (rg->rg_Gad)
  31.     GT_SetGadgetAttrs(rg->rg_Gad, Win, NULL,
  32.                       GA_Disabled, 1,
  33.                       TAG_END);
  34.  
  35.   if (rg->rg_DefText)
  36.     free(rg->rg_DefText);
  37.  
  38.   rg->rg_DefText = (Buf_default_str[0]) ? strdup(Buf_default_str) : (char *)NULL;
  39.  
  40.   if (rg->rg_LabText)
  41.     free(rg->rg_LabText);
  42.  
  43.   rg->rg_LabText = (Buf_label_str[0]) ? strdup(Buf_label_str) : (char *)NULL;
  44.  
  45.   if (rg->rg_Node.ln_Name)
  46.     free(rg->rg_Node.ln_Name);
  47.  
  48.   rg->rg_Node.ln_Name = strdup(Buf_region_str);
  49.  
  50.   if (rg->rg_Gad)
  51.   {
  52.     switch(rg->rg_Type)
  53.     {
  54.     case RGT_CYCLE:
  55.     case RGT_LISTVIEW:
  56.       GT_SetGadgetAttrs(rg->rg_Gad, Win, NULL,
  57.                         GTLV_Labels, -1,
  58.                         TAG_END);
  59.       break;
  60.  
  61.     case RGT_MX:
  62.       GT_SetGadgetAttrs(rg->rg_Gad, Win, NULL,
  63.                         GTMX_Labels, -1,
  64.                         TAG_END);
  65.  
  66.     default:
  67.       break;
  68.     }
  69.   }
  70.  
  71.   MaxNode *mn;
  72.   while (mn = RemHead(&rg->rg_ListSet))
  73.   {
  74.     free(mn->ln_Name);
  75.     free(mn);
  76.   }
  77.   if (rg->rg_CycleAry)
  78.   {
  79.     free(rg->rg_CycleAry);
  80.     rg->rg_CycleAry = NULL;
  81.   }
  82.  
  83.   if (NewType == RGT_CYCLE   ||
  84.       NewType == RGT_LISTVIEW ||
  85.       NewType == RGT_MX)
  86.   {
  87.     MaxNode *mn;
  88.     short  cnt = 0;
  89.  
  90.     for (mn = GetHead(&List_items_lv); mn; mn = GetSucc(mn))
  91.     {
  92.       AddNode(&rg->rg_ListSet, mn->ln_Name, 1);
  93.       ++cnt;
  94.     }
  95.     rg->rg_CycleAry = zalloc(sizeof(char *) * (cnt + 1));
  96.  
  97.     if (cnt)
  98.     {
  99.       cnt = 0;
  100.       for (mn = GetHead(&rg->rg_ListSet); mn; mn = GetSucc(mn))
  101.         rg->rg_CycleAry[cnt++] = mn->ln_Name;
  102.     }
  103.   }
  104.  
  105.   rg->rg_Flags      = NewFlags;
  106.   rg->rg_Type       = NewType;
  107.   rg->rg_SpecFlags  = SpecFlag;
  108.   rg->rg_MaxVal     = MaxVal;
  109.   rg->rg_DefVal     = DefVal;
  110.   rg->rg_BufSpace   = BufSpace;
  111.  
  112.   if (DDebug)
  113.   {
  114.     printf("rg->rg_Flags      = %d\n", NewFlags);
  115.     printf("rg->rg_Type       = %d\n", NewType);
  116.     printf("rg->rg_SpecFlags  = %d\n", SpecFlag);
  117.     printf("rg->rg_MaxVal     = %d\n", MaxVal);
  118.     printf("rg->rg_DefVal     = %d\n", DefVal);
  119.     printf("rg->rg_BufSpace   = %d\n", BufSpace);
  120.   }
  121. }
  122.  
  123. /***********************  DeleteTplRegion(rg) ************************/
  124. void
  125. DeleteTplRegion(rg)
  126.   TplRegion *rg;
  127. {
  128.   Remove(&rg->rg_Node);
  129.   ClearLinks(rg);
  130.  
  131.   if (rg->rg_Node.ln_Name)
  132.     free(rg->rg_Node.ln_Name);
  133.  
  134.   if (rg->rg_Gad)
  135.   {
  136.     switch(rg->rg_Type)
  137.     {
  138.     case RGT_CYCLE:
  139.     case RGT_LISTVIEW:
  140.       GT_SetGadgetAttrs(rg->rg_Gad, Win, NULL,
  141.                         GTLV_Labels, -1,
  142.                         TAG_END);
  143.       break;
  144.  
  145.     case RGT_MX:
  146.       GT_SetGadgetAttrs(rg->rg_Gad, Win, NULL,
  147.                         GTMX_Labels, -1,
  148.                         TAG_END);
  149.     default:
  150.       break;
  151.     }
  152.   }
  153.  
  154.   if (rg->rg_DataBase)
  155.     free(rg->rg_DataBase);
  156.   if (rg->rg_ListRef)
  157.     free(rg->rg_ListRef);
  158.   if (rg->rg_CycleAry)
  159.     free(rg->rg_CycleAry);
  160.  
  161.   MaxNode *mn;
  162.  
  163.   while (mn = RemHead(&rg->rg_ListSet))
  164.   {
  165.     free(mn->ln_Name);
  166.     free(mn);
  167.   }
  168.  
  169.   if (rg->rg_DefText)
  170.     free(rg->rg_DefText);
  171.   if (rg->rg_LabText)
  172.     free(rg->rg_LabText);
  173.   free(rg);
  174.   SetCurRegion(NULL);
  175. }
  176.