home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 514a.lha / TplEdit_v1.00_alpha / Src / edit.c < prev    next >
C/C++ Source or Header  |  1991-06-08  |  10KB  |  448 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 UpdateEWinInfo(TplRegion *);
  12. Prototype NewGadget *MakeENG(short, short, short, short, char *, short, long, APTR);
  13.  
  14. Prototype Window    *EWin;
  15. Prototype long    EWinMask;
  16. Prototype char    *DefName;
  17. Prototype char    *LabName;
  18. Prototype char    *RegName;
  19. Prototype char    *MaxName;
  20. Prototype List    EList;
  21.  
  22. Window        *EWin;
  23. Gadget        *EGList;
  24. long        EWinMask;
  25. NewGadget   ENg;
  26.  
  27. char        *CycLabels[] = { "Invisible", "Button", "String", "ListView", "Cycle", NULL };
  28. char        *CycOrient[] = { "Text Left", "Text Right", "Text Above", "Text Below", "Text In", NULL };
  29. List        EList;
  30.  
  31. char        *DefName;
  32. char        *LabName;
  33. char        *RegName;
  34. char        *AddName;
  35. char        *MaxName;
  36.  
  37. Gadget        *EGadType;
  38. Gadget        *EGadOrient;
  39. Gadget        *EGadRegText;
  40. Gadget        *EGadLabText;
  41. Gadget        *EGadDefText;
  42. Gadget        *EGadAddText;
  43. Gadget        *EGadMaxBufLen;
  44. Gadget        *EGadList;
  45.  
  46. OpenEditWindow()
  47. {
  48.     Gadget *gad;
  49.  
  50.     NewList(&EList);
  51.     if ((gad = CreateContext(&EGList)) == NULL)
  52.     return(-1);
  53.     ENg.ng_TextAttr = Scr->Font;
  54.     ENg.ng_VisualInfo= Ng.ng_VisualInfo;
  55.  
  56.     EGadType = gad = CreateGadget(CYCLE_KIND, gad,
  57.     MakeENG(20, 20, 110, 16, NULL, EGAD_TYPES, 0,            0),
  58.     GTCY_Labels, CycLabels,
  59.     TAG_END
  60.     );
  61.     if (gad == NULL)
  62.     return(-1);
  63.  
  64.     EGadOrient = gad = CreateGadget(CYCLE_KIND, gad,
  65.     MakeENG(20, 40, 110, 16, NULL, EGAD_LABPL, 0,            0),
  66.     GTCY_Labels, CycOrient,
  67.     TAG_END
  68.     );
  69.     if (gad == NULL)
  70.     return(-1);
  71.  
  72.     gad = CreateGadget(BUTTON_KIND, gad,
  73.     MakeENG(135, 20, 40, 16, "NEW", EGAD_NEW, PLACETEXT_IN, 0),
  74.     TAG_END
  75.     );
  76.     if (gad == NULL)
  77.     return(-1);
  78.  
  79.     gad = CreateGadget(BUTTON_KIND, gad,
  80.     MakeENG(180, 20, 40, 16, "DEL", EGAD_DEL, PLACETEXT_IN, 0),
  81.     TAG_END
  82.     );
  83.     if (gad == NULL)
  84.     return(-1);
  85.  
  86.     gad = CreateGadget(BUTTON_KIND, gad,
  87.     MakeENG(140, 40, 80, 16, "UPDATE", EGAD_UPDATE, PLACETEXT_IN, 0),
  88.     TAG_END
  89.     );
  90.  
  91.  
  92.     gad = CreateGadget(BUTTON_KIND, gad,
  93.     MakeENG(225, 20, 40, 16, "MOV", EGAD_MOVE, PLACETEXT_IN, 0),
  94.     TAG_END
  95.     );
  96.     if (gad == NULL)
  97.     return(-1);
  98.  
  99.     gad = CreateGadget(BUTTON_KIND, gad,
  100.     MakeENG(270, 20, 40, 16, "SIZ", EGAD_SIZE, PLACETEXT_IN, 0),
  101.     TAG_END
  102.     );
  103.     if (gad == NULL)
  104.     return(-1);
  105.  
  106.     gad = CreateGadget(BUTTON_KIND, gad,
  107.     MakeENG(315, 20, 70, 16, "WANDER", EGAD_WANDER, PLACETEXT_IN, 0),
  108.     TAG_END
  109.     );
  110.     if (gad == NULL)
  111.     return(-1);
  112.  
  113.     EGadRegText = gad = CreateGadget(STRING_KIND, gad,
  114.     MakeENG(100, 60, 100, 16, "REGION", EGAD_REGNAME, PLACETEXT_LEFT, 0),
  115.     GTST_MaxChars, 32,
  116.     TAG_END
  117.     );
  118.     if (gad == NULL)
  119.     return(-1);
  120.     RegName = ((StringInfo *)gad->SpecialInfo)->Buffer;
  121.  
  122.     EGadLabText = gad = CreateGadget(STRING_KIND, gad,
  123.     MakeENG(100, 80, 100, 16, "LABEL", EGAD_LABEL,   PLACETEXT_LEFT, 0),
  124.     GTST_MaxChars, 32,
  125.     TAG_END
  126.     );
  127.     if (gad == NULL)
  128.     return(-1);
  129.     LabName = ((StringInfo *)gad->SpecialInfo)->Buffer;
  130.  
  131.     EGadDefText = gad = CreateGadget(STRING_KIND, gad,
  132.     MakeENG(100, 100, 100, 16, "DEFAULT", EGAD_DEFAULT, PLACETEXT_LEFT, 0),
  133.     GTST_MaxChars, 32,
  134.     TAG_END
  135.     );
  136.     if (gad == NULL)
  137.     return(-1);
  138.     DefName = ((StringInfo *)gad->SpecialInfo)->Buffer;
  139.  
  140.     EGadMaxBufLen = gad = CreateGadget(STRING_KIND, gad,
  141.     MakeENG(100, 120, 50, 16, "BUFLEN", EGAD_MAXBUFLEN, PLACETEXT_LEFT, 0),
  142.     GTST_MaxChars, 3,
  143.     TAG_END
  144.     );
  145.     if (gad == NULL)
  146.     return(-1);
  147.     MaxName = ((StringInfo *)gad->SpecialInfo)->Buffer;
  148.  
  149.     /*
  150.      *    Item List
  151.      */
  152.  
  153.     gad = CreateGadget(BUTTON_KIND, gad,
  154.     MakeENG(225, 145, 40, 16, "ADD", EGAD_LADD, PLACETEXT_IN, 0),
  155.     TAG_END
  156.     );
  157.     if (gad == NULL)
  158.     return(-1);
  159.     gad = CreateGadget(BUTTON_KIND, gad,
  160.     MakeENG(270, 145, 40, 16, "DEL", EGAD_LDEL, PLACETEXT_IN, 0),
  161.     TAG_END
  162.     );
  163.     if (gad == NULL)
  164.     return(-1);
  165.  
  166.  
  167.     EGadAddText = gad = CreateGadget(STRING_KIND, gad,
  168.     MakeENG(225, 125, 175, 16, "ENUM", EGAD_ENUMSTR, PLACETEXT_BELOW, 0),
  169.     GTST_MaxChars, 32,
  170.     TAG_END
  171.     );
  172.     if (gad == NULL)
  173.     return(-1);
  174.     AddName = ((StringInfo *)gad->SpecialInfo)->Buffer;
  175.  
  176.     EGadList = gad = CreateGadget(LISTVIEW_KIND, gad,
  177.     MakeENG(225, 40, 175, 80, NULL, EGAD_ENUM, 0, 0),
  178.     GTLV_Labels, &EList,
  179.     GTLV_ShowSelected, EGadAddText,
  180.     TAG_END
  181.     );
  182.  
  183.     /*
  184.      *    Window
  185.      */
  186.  
  187.     EWin = OpenWindowTags(NULL,
  188.     WA_Flags,   WFLG_DRAGBAR|WFLG_DEPTHGADGET|WFLG_CLOSEGADGET|
  189.             WFLG_SIMPLE_REFRESH|WFLG_ACTIVATE|WFLG_REPORTMOUSE|
  190.             WFLG_SIZEGADGET,
  191.  
  192.     WA_IDCMP,   IDCMP_NEWSIZE|IDCMP_MOUSEBUTTONS|IDCMP_GADGETDOWN|
  193.             IDCMP_GADGETUP|IDCMP_MENUPICK|IDCMP_VANILLAKEY|
  194.             IDCMP_RAWKEY|IDCMP_CHANGEWINDOW|IDCMP_CLOSEWINDOW|
  195.             IDCMP_REFRESHWINDOW|IDCMP_MOUSEMOVE|IDCMP_ACTIVEWINDOW,
  196.  
  197.     WA_Left,    0,
  198.     WA_Top,     0,
  199.     WA_InnerWidth,    400,
  200.     WA_InnerHeight, 160,
  201.     WA_Title,   "TPL CONTROL",
  202.     WA_MinWidth,  32,
  203.     WA_MinHeight, 32,
  204.     WA_MaxWidth,  -1,
  205.     WA_MaxHeight, -1,
  206.     WA_AutoAdjust, 1,
  207.     WA_PubScreen, NULL,
  208.     WA_PubScreenFallBack, 1,
  209.     WA_Gadgets, EGList,
  210.     TAG_END
  211.     );
  212.  
  213.     if (EWin == NULL)
  214.     return(-1);
  215.  
  216.     EWinMask = 1 << EWin->UserPort->mp_SigBit;
  217.  
  218.     GT_RefreshWindow(EWin, NULL);
  219.     return(1);
  220. }
  221.  
  222. void
  223. CloseEditWindow()
  224. {
  225.     if (EWin) {
  226.     ClearMenuStrip(EWin);
  227.     CloseWindow(EWin);
  228.     EWin = NULL;
  229.     }
  230.     if (EGList) {
  231.     FreeGadgets(EGList);
  232.     EGList = NULL;
  233.     }
  234.     /*
  235.     if (ENg.ng_VisualInfo) {
  236.     FreeVisualInfo(ENg.ng_VisualInfo);
  237.     ENg.ng_VisualInfo = NULL;
  238.     }
  239.     */
  240. }
  241.  
  242. void
  243. HandleEditGadget(im)
  244. IMsg *im;
  245. {
  246.     switch(((Gadget *)im->IAddress)->GadgetID) {
  247.     case EGAD_TYPES:
  248.     NewType = im->Code;
  249.     break;
  250.     case EGAD_LABPL:
  251.     NewFlags= 1 << im->Code;
  252.     break;
  253.     case EGAD_NEW:
  254.     CurState = STATE_NEWREGION;
  255.     DisableGadgets();
  256.     break;
  257.     case EGAD_WANDER:
  258.     CurState = STATE_WANDER;
  259.     EnableGadgets();
  260.     break;
  261.     case EGAD_DEL:
  262.     DisableGadgets();
  263.     CurState = STATE_DELREGION;
  264.     break;
  265.     case EGAD_MOVE:
  266.     DisableGadgets();
  267.     CurState = STATE_MOVEREGION;
  268.     break;
  269.     case EGAD_SIZE:
  270.     DisableGadgets();
  271.     CurState = STATE_SIZEREGION;
  272.     break;
  273. #ifdef NOTDEF
  274.     case EGAD_REGNAME:
  275.     if (CurRegion) {
  276.         StringInfo *si = (StringInfo *)(((Gadget *)im->IAddress)->SpecialInfo);
  277.  
  278.         printf("%08lx %08lx\n", si->Buffer, RegName);
  279.  
  280.         if (CurRegion->rg_Node.ln_Name)
  281.         free(CurRegion->rg_Node.ln_Name);
  282.         CurRegion->rg_Node.ln_Name = strdup(si->Buffer);
  283.         SetCurRegion(CurRegion);
  284.     }
  285.     break;
  286.     case EGAD_LABEL:
  287.     if (CurRegion) {
  288.         StringInfo *si = (StringInfo *)(((Gadget *)im->IAddress)->SpecialInfo);
  289.  
  290.         if (CurRegion->rg_LabText)
  291.         free(CurRegion->rg_LabText);
  292.         CurRegion->rg_LabText = strdup(si->Buffer);
  293.     }
  294.     break;
  295.     case EGAD_DEFAULT:
  296.     if (CurRegion) {
  297.         StringInfo *si = (StringInfo *)(((Gadget *)im->IAddress)->SpecialInfo);
  298.  
  299.         if (CurRegion->rg_DefText)
  300.         free(CurRegion->rg_DefText);
  301.         CurRegion->rg_DefText = strdup(si->Buffer);
  302.     }
  303.     break;
  304. #endif
  305.     case EGAD_ENUMSTR:
  306.     case EGAD_LADD:
  307.     if (AddName[0] == 0)
  308.         break;
  309.     GT_SetGadgetAttrs(EGadList, EWin, NULL,
  310.         GTLV_Labels, -1,
  311.         TAG_END
  312.     );
  313.     {
  314.         MaxNode *mn;
  315.         for (mn = GetHead(&EList); mn; mn = GetSucc(mn)) {
  316.         if (strcmp(AddName, mn->ln_Name) == 0)
  317.             break;
  318.         }
  319.         if (mn == NULL)
  320.         AddNode(&EList, AddName, 1);
  321.     }
  322.     GT_SetGadgetAttrs(EGadList, EWin, NULL,
  323.         GTLV_Labels, &EList,
  324.         TAG_END
  325.     );
  326.     break;
  327.     case EGAD_LDEL:
  328.     GT_SetGadgetAttrs(EGadList, EWin, NULL,
  329.         GTLV_Labels, -1,
  330.         TAG_END
  331.     );
  332.     {
  333.         MaxNode *mn;
  334.         for (mn = GetHead(&EList); mn; mn = GetSucc(mn)) {
  335.         if (strcmp(AddName, mn->ln_Name) == 0) {
  336.             Remove(mn);
  337.             free(mn->ln_Name);
  338.             free(mn);
  339.             break;
  340.         }
  341.         }
  342.     }
  343.     GT_SetGadgetAttrs(EGadList, EWin, NULL,
  344.         GTLV_Labels, &EList,
  345.         TAG_END
  346.     );
  347.     break;
  348.     case EGAD_UPDATE:
  349.     /*
  350.      *  Update currently selected gadget from TPL CONTROL window
  351.      */
  352.  
  353.     if (CurRegion) {
  354.         UpdateTplRegion(CurRegion);
  355.         SetCurRegion(CurRegion);
  356.         CurState = STATE_WANDER;
  357.         ReMakeEverything();
  358.         /*
  359.         MakeAllGadgets();
  360.         RefreshGList(GList, Win, NULL, -1);
  361.         GT_RefreshWindow(Win, NULL);
  362.         */
  363.     }
  364.     break;
  365.     }
  366. }
  367.  
  368. void
  369. UpdateEWinInfo(rg)
  370. TplRegion *rg;
  371. {
  372.     NewType = rg->rg_Type;
  373.     NewFlags= rg->rg_Flags;
  374.  
  375.     sprintf(TmpBuf, "%d", rg->rg_MaxBufLen);
  376.     GT_SetGadgetAttrs(EGadMaxBufLen, EWin, NULL,
  377.     GTST_String, TmpBuf,
  378.     TAG_END
  379.     );
  380.  
  381.     GT_SetGadgetAttrs(EGadType, EWin, NULL,
  382.     GTCY_Active, rg->rg_Type,
  383.     TAG_END
  384.     );
  385.     GT_SetGadgetAttrs(EGadOrient, EWin, NULL,
  386.     GTCY_Active, (rg->rg_Flags & 0x0001) ? 0 :
  387.              (rg->rg_Flags & 0x0002) ? 1 :
  388.              (rg->rg_Flags & 0x0004) ? 2 :
  389.              (rg->rg_Flags & 0x0008) ? 4 :
  390.              (rg->rg_Flags & 0x0010) ? 5 : 0,
  391.     TAG_END
  392.     );
  393.     GT_SetGadgetAttrs(EGadRegText, EWin, NULL,
  394.     GTST_String, (rg->rg_Node.ln_Name) ? rg->rg_Node.ln_Name : "",
  395.     TAG_END
  396.     );
  397.     GT_SetGadgetAttrs(EGadLabText, EWin, NULL,
  398.     GTST_String, (rg->rg_LabText) ? rg->rg_LabText : "",
  399.     TAG_END
  400.     );
  401.     GT_SetGadgetAttrs(EGadDefText, EWin, NULL,
  402.     GTST_String, (rg->rg_DefText) ? rg->rg_DefText : "",
  403.     TAG_END
  404.     );
  405.     if (rg->rg_Type == RGT_CYCLE || rg->rg_Type == RGT_SELLIST) {
  406.     MaxNode *mn;
  407.  
  408.     GT_SetGadgetAttrs(EGadList, EWin, NULL,
  409.         GTLV_Labels, -1,
  410.         TAG_END
  411.     );
  412.     while (mn = RemHead(&EList)) {
  413.         free(mn->ln_Name);
  414.         free(mn);
  415.     }
  416.     for (mn = GetHead(&rg->rg_ListSet); mn; mn = GetSucc(mn)) {
  417.         AddNode(&EList, mn->ln_Name, 1);
  418.     }
  419.     GT_SetGadgetAttrs(EGadList, EWin, NULL,
  420.         GTLV_Labels, &EList,
  421.         TAG_END
  422.     );
  423.     }
  424. }
  425.  
  426. NewGadget *
  427. MakeENG(le, te, w, h, ltext, gadid, flags, user)
  428. short le;
  429. short te;
  430. short w;
  431. short h;
  432. char *ltext;
  433. short gadid;
  434. long flags;
  435. APTR user;
  436. {
  437.     ENg.ng_LeftEdge = le;
  438.     ENg.ng_TopEdge  = te;
  439.     ENg.ng_Width = w;
  440.     ENg.ng_Height= h;
  441.     ENg.ng_GadgetText = ltext;
  442.     ENg.ng_GadgetID = gadid;
  443.     ENg.ng_Flags = flags;
  444.     ENg.ng_UserData = user;
  445.     return(&ENg);
  446. }
  447.  
  448.