home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 6 / AACD06.ISO / AACD / Utilities / amiCheck / Source / newtempPanel.c < prev    next >
C/C++ Source or Header  |  1998-06-11  |  16KB  |  587 lines

  1. /* newTempPanel.c 
  2.  *
  3.  *  defines the GUIFront characteristics of the template data-entry panel 
  4.  */
  5.  
  6. #include <stdio.h>  
  7. #include <intuition/gadgetclass.h>
  8. #include "amiCheck.h"
  9. #include "regGadget.h"
  10. #include "dataBase.h"
  11. #include "newtempPanel.h"
  12. #include "edittempPanel.h"
  13. #include "qmemoPanel.h"
  14. #include "qamntPanel.h"
  15. #include "qnamePanel.h"
  16. #include <string.h>
  17. #include <exec/memory.h>
  18. #include <clib/exec_protos.h>
  19. #include <clib/intuition_protos.h>
  20.  
  21. BOOL NewHandleGadget(struct IntuiMessage *);
  22. BOOL NewTempFill(templateNode *);
  23. BOOL NewGoodbye(struct IntuiMessage *,templateNode *);
  24. void NewTempStrip(void);
  25.  
  26. BOOL ntAttach = FALSE;
  27. char temporigstr[STRINGSIZE];
  28. ExtErrorData NewTempExtData;
  29. UWORD newcatActive;
  30. templateNode mytemp, *retval, *dest;
  31. GUIFront *newGUI;
  32. struct Window *newWin;
  33. static char amntstr[AMNTSIZE];
  34. BOOL fixamnt;
  35.  
  36. /* quick configure of some gadgets */
  37.  
  38. STRPTR temptypelabels[] =
  39. {
  40.     "Check",
  41.     "Withdrawal",
  42.     "Deposit",
  43.     NULL,
  44. };
  45.  
  46. struct TagItem typeCycleTags[] =
  47. {
  48.     {GTCY_Labels, temptypelabels},
  49.     {TAG_DONE},
  50. };
  51.  
  52.  
  53. /* define gadgetspec */
  54. GadgetSpec NPgadgetspecs[] = 
  55. {
  56.     {CYCLE_KIND,15,1,{0,0,0,0,"_Kind",NULL,GID_NPTYPE,
  57.         PLACETEXT_LEFT},typeCycleTags,GS_DefaultTags,GS_NoWidthExtend},
  58.  
  59.     {STRING_KIND,20,1,{0,0,0,0,"_ID Name",NULL,GID_NPTYPENAME,
  60.         PLACETEXT_LEFT},strTempTags,GS_DefaultTags,GS_NoWidthExtend},
  61.  
  62.         {STRING_KIND,40,1,{0,0,0,0,"_Name",NULL,GID_NPNAME,
  63.                 PLACETEXT_LEFT}, strNameTags,GS_DefaultTags},
  64.  
  65.         {STRING_KIND,40,1,{0,0,0,0,"_Memo",NULL,GID_NPMEMO,
  66.                 PLACETEXT_LEFT}, strMemoTags,GS_DefaultTags},
  67.  
  68.         {STRING_KIND,15,1,{0,0,0,0,"_Amount",NULL,GID_NPAMNT,
  69.                 PLACETEXT_LEFT}, strAmntTags,GS_DefaultTags,GS_NoWidthExtend},
  70.            
  71.         {CHECKBOX_KIND,0,0,{0,0,0,0,"Mark _Printed",NULL,GID_NPPRINTED,
  72.                 PLACETEXT_RIGHT}, NULL,GS_DefaultTags},
  73.  
  74.         {CHECKBOX_KIND,0,0,{0,0,0,0,"_Tax Deductible",NULL,GID_NPTAX,
  75.                 PLACETEXT_RIGHT}, NULL,GS_DefaultTags},
  76.  
  77.         {CHECKBOX_KIND,0,0,{0,0,0,0,"Mark _Voided",NULL,GID_NPVOIDED,
  78.                 PLACETEXT_RIGHT}, NULL,GS_DefaultTags},
  79.  
  80.         {LISTVIEW_KIND,  30,4,{0,0,0,0,NULL,NULL,GID_NPCATEGORY,
  81.                 PLACETEXT_ABOVE}, ListView, GS_DefaultTags},
  82.           
  83.         {BUTTON_KIND,0,0,{0,0,0,0,"_OK", NULL, GID_NPOK, 
  84.                 PLACETEXT_IN}, NULL, GS_DefaultTags},
  85.                               
  86.         {BUTTON_KIND,0,0,{0,0,0,0,"_Cancel", NULL, GID_NPCANCEL, 
  87.                 PLACETEXT_IN}, NULL, GS_DefaultTags},
  88.  
  89.         {GETALT_KIND, 0,0,{0,0,0,0,NULL,NULL,GID_NPMEMOLIST,
  90.                 PLACETEXT_LEFT}, MiscButton, GS_DefaultTags}, 
  91.  
  92.         {GETALT_KIND, 0,0,{0,0,0,0,NULL,NULL,GID_NPAMNTLIST,
  93.                 PLACETEXT_LEFT}, MiscButton, GS_DefaultTags}, 
  94.  
  95.         {GETALT_KIND, 0,0,{0,0,0,0,NULL,NULL,GID_NPNAMELIST,
  96.                 PLACETEXT_LEFT}, MiscButton, GS_DefaultTags}, 
  97. };
  98.  
  99. /* set up array of pointers to our specs */
  100. GadgetSpec *NP_EnterSpecs[] =
  101. {
  102.         &NPgadgetspecs[0],
  103.         &NPgadgetspecs[1],
  104.         &NPgadgetspecs[2],
  105.         &NPgadgetspecs[3],
  106.         &NPgadgetspecs[4],
  107.         &NPgadgetspecs[5],
  108.         &NPgadgetspecs[6],
  109.         &NPgadgetspecs[7],
  110.         &NPgadgetspecs[8],
  111.         &NPgadgetspecs[9],
  112.         &NPgadgetspecs[10],
  113.     &NPgadgetspecs[11],
  114.         &NPgadgetspecs[12],
  115.     &NPgadgetspecs[13],
  116.         NULL,
  117. };
  118.  
  119.  
  120. /* define the layout of this panel */
  121. ULONG NP_EnterPanel[] =
  122. {
  123.    GUIL_Flags, GUILF_PropShare | GUILF_EqualWidth,
  124.       
  125.    GUIL_HorizGroup, 1,
  126.         GUIL_Flags, GUILF_PropShare, /* | GUILF_LabelAlign,*/
  127.         GUIL_FrameType, GUILFT_Recess,
  128.         
  129.                 GUIL_VertGroup,1,
  130.             GUIL_HorizGroup, 1,
  131.                 GUIL_VertGroup,1,
  132.                                 GUIL_Flags, GUILF_PropShare | GUILF_LabelAlign | GUILF_EqualWidth,
  133.                    
  134.                     GUIL_GadgetSpecID, GID_NPTYPE,
  135.                     GUIL_GadgetSpecID, GID_NPTYPENAME,
  136.  
  137.                     GUIL_HorizGroup,0,
  138.                         GUIL_GadgetSpecID, GID_NPAMNT,
  139.                         GUIL_GadgetSpecID, GID_NPAMNTLIST,
  140.                     TAG_DONE,
  141.                     GUIL_HorizGroup,0,
  142.                                GUIL_GadgetSpecID, GID_NPNAME,
  143.                         GUIL_GadgetSpecID, GID_NPNAMELIST,
  144.                     TAG_DONE,
  145.                     GUIL_HorizGroup,0,
  146.                                     GUIL_GadgetSpecID, GID_NPMEMO,
  147.                         GUIL_GadgetSpecID, GID_NPMEMOLIST,
  148.                     TAG_DONE,
  149.                 TAG_DONE,
  150.             TAG_DONE,     
  151.  
  152.             GUIL_HorizGroup, 1,
  153.                 GUIL_Flags, GUILF_PropShare | GUILF_EqualHeight,
  154.  
  155.                 GUIL_VertGroup,1,
  156.                     GUIL_FrameType, GUILFT_Ridge,
  157.                     GUIL_FrameHeadline, "Category",
  158.  
  159.                     GUIL_GadgetSpecID, GID_NPCATEGORY,
  160.  
  161.                 TAG_DONE,
  162.  
  163.                 GUIL_VertGroup, 1,
  164.                     GUIL_FrameType, GUILFT_Ridge,
  165.                     GUIL_FrameHeadline,"Flags",
  166.                     GUIL_GadgetSpecID, GID_NPTAX,
  167.                     GUIL_GadgetSpecID, GID_NPVOIDED,
  168.                              GUIL_GadgetSpecID, GID_NPPRINTED,
  169.                             
  170.                 TAG_DONE,
  171.             TAG_DONE,
  172.  
  173.         TAG_DONE,
  174.              
  175.     TAG_DONE,
  176.     
  177.     GUIL_HorizGroup,1,
  178.         GUIL_Flags, GUILF_EqualSize | GUILF_EqualWidth,
  179.         
  180.            GUIL_GadgetSpecID, GID_NPOK,
  181.            GUIL_GadgetSpecID, GID_NPCANCEL,
  182.            
  183.     TAG_DONE,
  184.                   
  185. TAG_DONE,
  186. };
  187.  
  188.  
  189.  
  190. /*********************************************************************
  191. * NewTempGUI()
  192. *
  193. *    GUI for this panel
  194. **********************************************************************/
  195. templateNode *NewTempGUI(templateNode *def, char *wint)
  196. {
  197.  BOOL noreply,done = FALSE;
  198.  UWORD ordinal;
  199.  categoryNode *temp;
  200.  ULONG signal;
  201.      
  202.    GF_LockGUI(edittempGUI);
  203.  
  204.    GF_SetGUIAttr(newGUI, GUI_OpenGUI, TRUE, TAG_DONE);
  205.    NewTempStrip();
  206.    GF_GetGUIAttr(newGUI, GUI_Window, &newWin, TAG_DONE);
  207.    SetWindowTitles(newWin,wint,(UBYTE *)-1);
  208.    if (NewTempFill(def) != TRUE) done = TRUE;
  209.           
  210.         newcatActive = 0;
  211.         retval = NULL;
  212.  
  213.         
  214.                 /* Process input events */
  215.                 while (!done)
  216.                 {
  217.                     struct IntuiMessage *imsg;
  218.  
  219.                     /* Wait for an event to occur */
  220.                     signal = GF_Wait(guiapp,AmigaGuideSignal(agc));
  221.  
  222.                     /* We only bother to listen for CLOSEWINDOW events.
  223.                      * Of course, in a real application, you would be
  224.                      * examining the Class field for IDCMP_GADGETUP
  225.                      * messages and act accordingly.
  226.                      */
  227.  
  228.             if (signal & AmigaGuideSignal(agc)) {
  229.             AmiHelpMsg();
  230.             continue;
  231.             }
  232.  
  233.                     while (imsg = GF_GetIMsg(guiapp))
  234.                     {
  235.             noreply = TRUE;
  236.                         switch (imsg->Class) {
  237.                 case IDCMP_REFRESHWINDOW:
  238.                     RegRefresh(TRUE);
  239.                     break;
  240.  
  241.                                 case IDCMP_CLOSEWINDOW:
  242.                     retval=NULL;
  243.                                         done = TRUE;
  244.                                         break;
  245.  
  246.                 case IDCMP_RAWKEY:
  247.                     if (GF_ProcessListView(newGUI,NP_EnterSpecs[GID_NPCATEGORY],
  248.                         imsg,&ordinal)) {
  249.                         newcatActive = ordinal;
  250.                         temp = (categoryNode *)DataOrd2Node(&categories,newcatActive);
  251.                         strncpy(mytemp.template.category,temp->node.ln_Name,CATNAMESIZE);
  252.                     }
  253.                     else AmiHelpKey(imsg,NEWTEMP_PANEL);    
  254.                     break;
  255.     
  256.                 case IDCMP_GADGETUP:
  257.                     noreply = FALSE;
  258.                     done=NewHandleGadget(imsg);
  259.                     break;
  260.                         }
  261.                                      
  262.                         if (noreply)   GF_ReplyIMsg(imsg);
  263.                     }
  264.  
  265.                }
  266.  
  267.    NewTempStrip();
  268.    GF_SetGUIAttr(newGUI, GUI_OpenGUI, FALSE, TAG_DONE);
  269.    GF_UnlockGUI(edittempGUI);
  270.  
  271.    return (retval);
  272. }
  273.  
  274. /***************************************************
  275. * NewHandleGadget()
  276. *
  277. *    Handles gadget events for this panel
  278. ****************************************************/
  279. BOOL  NewHandleGadget(struct IntuiMessage *imsg)
  280. {
  281.  struct Gadget *gad = (struct Gadget *)(imsg->IAddress);
  282.  UWORD code = imsg->Code;
  283.  BOOL done = FALSE;
  284.  struct Node *temp;
  285.  memoNode *dm;
  286.  amntNode *da;
  287.  nameNode *dn;
  288.  static char newamntstr[AMNTSIZE];
  289.  
  290.  switch (gad->GadgetID) {
  291.  
  292.     case GID_NPMEMOLIST:
  293.         if (QMemoGUI(newGUI)) {
  294.             dm=(memoNode*)DataOrd2Node(&memolist,qmemoSel);
  295.             strcpy(mytemp.template.memo,dm->memoStr);
  296.             GF_SetGadgetAttrs(newGUI,NP_EnterSpecs[GID_NPMEMO]->gs_Gadget,
  297.                 GTST_String,mytemp.template.memo,
  298.                 TAG_DONE);
  299.         }
  300.         break;
  301.  
  302.     case GID_NPAMNTLIST:
  303.         if (QAmntGUI(newGUI)) {
  304.             da=(amntNode*)DataOrd2Node(&amntlist,qamntSel);
  305.             strcpy(newamntstr,da->amntStr);
  306.             GF_SetGadgetAttrs(newGUI,NP_EnterSpecs[GID_NPAMNT]->gs_Gadget,
  307.                 GTST_String,newamntstr,
  308.                 TAG_DONE);
  309.         }
  310.         break;
  311.  
  312.     case GID_NPNAMELIST:
  313.         if (QNameGUI(newGUI)) {
  314.             dn=(nameNode*)DataOrd2Node(&namelist,qnameSel);
  315.             strcpy(mytemp.template.name,dn->nameStr);
  316.             GF_SetGadgetAttrs(newGUI,NP_EnterSpecs[GID_NPNAME]->gs_Gadget,
  317.                 GTST_String,mytemp.template.name,
  318.                 TAG_DONE);
  319.         }
  320.         break;
  321.  
  322.  
  323.     case GID_NPCATEGORY:
  324.         newcatActive = code;
  325.         temp = DataOrd2Node(&categories,newcatActive);
  326.         strncpy(mytemp.template.category,temp->ln_Name,CATNAMESIZE);
  327.         break;
  328.  
  329.     case GID_NPTYPE:
  330.         mytemp.template.type = (WORD)code;
  331.         GF_SetGadgetAttrs (newGUI, NP_EnterSpecs[GID_NPPRINTED]->gs_Gadget,
  332.             GA_Disabled, (mytemp.template.type != CHECKTYPE)?TRUE:FALSE,
  333.             TAG_DONE);
  334.  
  335.         GF_SetGadgetAttrs (newGUI, NP_EnterSpecs[GID_NPVOIDED]->gs_Gadget,
  336.             GA_Disabled,( mytemp.template.type != CHECKTYPE)?TRUE:FALSE,
  337.             TAG_DONE);
  338.         break;
  339.  
  340.     case GID_NPTYPENAME:
  341.         /* is it simply the original name? */
  342.         if (temporigstr[0] != NULL && 
  343.             (strcmpi(temporigstr,((struct StringInfo *)gad->SpecialInfo)->Buffer) == 0) ) {
  344.             strncpy(mytemp.tempname,((struct StringInfo *)gad->SpecialInfo)->Buffer, TEMPNAMESIZE);
  345.         }
  346.  
  347.         else {
  348.             if (DataIsUnique(newGUI, &testtemps,((struct StringInfo *)gad->SpecialInfo)->Buffer,TRUE,
  349.                 "Template ID name already exists\nor is invalid.\n")==TRUE) {
  350.                 strncpy(mytemp.tempname,((struct StringInfo *)gad->SpecialInfo)->Buffer, TEMPNAMESIZE);
  351.             }
  352.             else {
  353.                 GF_ReplyIMsg(imsg);
  354.                 DataSitNSpin(NP_EnterSpecs[GID_NPTYPENAME]->gs_Gadget,newWin);
  355.                    return (done);
  356.             }
  357.         }
  358.         break;
  359.  
  360.     case GID_NPNAME:
  361.         strncpy(mytemp.template.name,((struct StringInfo *)gad->SpecialInfo)->Buffer, STRINGSIZE);
  362.         break;
  363.  
  364.     case GID_NPMEMO:
  365.         strncpy(mytemp.template.memo,((struct StringInfo *)gad->SpecialInfo)->Buffer, STRINGSIZE);
  366.         break;
  367.  
  368.     case GID_NPAMNT:
  369.         
  370.         /* special case return early.... activated gadget */
  371.         if (!DataVerifyAmnt(((struct StringInfo*)gad->SpecialInfo)->Buffer,newamntstr) ) {
  372.             DisplayBeep(newWin->WScreen);
  373.             DataAnnounceAmount(newGUI);
  374.             GF_ReplyIMsg(imsg);
  375.             DataSitNSpin(NP_EnterSpecs[GID_NPAMNT]->gs_Gadget,newWin);
  376.               return (done);
  377.         }
  378.          else {
  379.             DataStoreAmnt(&mytemp.template.amount,newamntstr );
  380.             GF_SetGadgetAttrs(newGUI,NP_EnterSpecs[GID_NPAMNT]->gs_Gadget,
  381.                 GTST_String,newamntstr,
  382.                 TAG_DONE);
  383.         }
  384.         break;
  385.     
  386.     case GID_NPVOIDED:
  387.         if (code)
  388.             mytemp.template.flags |= VOIDED;
  389.         else     mytemp.template.flags &= !VOIDED;
  390.         break;
  391.  
  392.     case GID_NPPRINTED:
  393.         if (code)
  394.             mytemp.template.flags |= PRINTED;
  395.         else    mytemp.template.flags &= ~PRINTED;
  396.         break;
  397.  
  398.     case GID_NPTAX:
  399.         if (code)
  400.             mytemp.template.flags |= TAXDEDUCT;
  401.         else     mytemp.template.flags &= ~TAXDEDUCT;
  402.         break;
  403.  
  404.     case GID_NPCANCEL:
  405.         retval = NULL;
  406.         done=TRUE;
  407.         break;
  408.  
  409.     case GID_NPOK:
  410.         if (NewGoodbye(imsg, &mytemp)) {
  411.             retval = &mytemp;
  412.             done = TRUE;
  413.         }
  414.         else return (FALSE);
  415.         break;
  416.  }
  417.  
  418.  GF_ReplyIMsg(imsg);
  419.  return (done);
  420. }
  421.  
  422. /***************************************************
  423. * NewTempFill()
  424. *
  425. *    Fills in default if editing node
  426. ****************************************************/
  427. BOOL NewTempFill(templateNode *def)
  428. {
  429. int active;
  430.  
  431.  dest = def;
  432.  
  433.  NewTempStrip();
  434.  if (def != NULL) {
  435.     strcpy(temporigstr,def->tempname);
  436.     memcpy(&mytemp,def,sizeof(templateNode));
  437.     DataBuildAmnt(FALSE,&mytemp.template.amount,amntstr);
  438.  
  439.     /* update gfx */
  440.     GF_SetGadgetAttrs (newGUI, NP_EnterSpecs[GID_NPTYPE]->gs_Gadget,
  441.         GTCY_Active,def->template.type,
  442.         TAG_DONE);
  443.  
  444.     GF_SetGadgetAttrs (newGUI, NP_EnterSpecs[GID_NPTYPENAME]->gs_Gadget,
  445.         GTST_String,def->tempname,
  446.         TAG_DONE);
  447.  
  448.     GF_SetGadgetAttrs (newGUI, NP_EnterSpecs[GID_NPNAME]->gs_Gadget,
  449.         GTST_String,def->template.name,
  450.         TAG_DONE);
  451.  
  452.     GF_SetGadgetAttrs (newGUI, NP_EnterSpecs[GID_NPMEMO]->gs_Gadget,
  453.         GTST_String,def->template.memo,
  454.         TAG_DONE);
  455.  
  456.     GF_SetGadgetAttrs (newGUI, NP_EnterSpecs[GID_NPAMNT]->gs_Gadget,
  457.         GTST_String,amntstr,
  458.         TAG_DONE);
  459.  
  460.     GF_SetGadgetAttrs (newGUI, NP_EnterSpecs[GID_NPPRINTED]->gs_Gadget,
  461.         GTCB_Checked,(def->template.flags & PRINTED)?1:0,
  462.         TAG_DONE);
  463.  
  464.     GF_SetGadgetAttrs (newGUI, NP_EnterSpecs[GID_NPVOIDED]->gs_Gadget,
  465.         GTCB_Checked,(def->template.flags & VOIDED)?1:0,
  466.         TAG_DONE);
  467.  
  468.     GF_SetGadgetAttrs (newGUI, NP_EnterSpecs[GID_NPTAX]->gs_Gadget,
  469.         GTCB_Checked,(def->template.flags & TAXDEDUCT)?1:0,
  470.         TAG_DONE);
  471.  
  472.     active =  DataNode2Ord(&categories,def->template.category);
  473.  
  474.     GF_SetGadgetAttrs (newGUI, NP_EnterSpecs[GID_NPCATEGORY]->gs_Gadget,
  475.         GTLV_Labels, &categories,
  476.         GTLV_Selected,active,
  477.         GTLV_MakeVisible,active,
  478.         TAG_DONE);                          
  479.  }
  480.  else  {
  481.     temporigstr[0]=NULL;
  482.     memset(&mytemp, 0, sizeof(templateNode));
  483.     GF_SetGadgetAttrs (newGUI, NP_EnterSpecs[GID_NPAMNT]->gs_Gadget,
  484.         GTST_String,"0.00",
  485.         TAG_DONE);
  486.  
  487.     GF_SetGadgetAttrs (newGUI, NP_EnterSpecs[GID_NPCATEGORY]->gs_Gadget,
  488.         GTLV_Labels, &categories,
  489.         GTLV_Selected, 0,
  490.         GTLV_MakeVisible,0,
  491.         TAG_DONE);
  492.  
  493.  }
  494.  
  495.  /* comment out voided & printed if this is not a check! */
  496.  GF_SetGadgetAttrs (newGUI, NP_EnterSpecs[GID_NPPRINTED]->gs_Gadget,
  497.     GA_Disabled, (mytemp.template.type == CHECKTYPE)?FALSE:TRUE,
  498.     TAG_DONE);
  499.  
  500.  GF_SetGadgetAttrs (newGUI, NP_EnterSpecs[GID_NPVOIDED]->gs_Gadget,
  501.     GA_Disabled, (mytemp.template.type == CHECKTYPE)?FALSE:TRUE,
  502.     TAG_DONE);
  503.  
  504.  ntAttach=TRUE;
  505.  return (TRUE);
  506. }
  507.  
  508. /**************************************************************
  509. * NewGoodbye()
  510. *
  511. *    Ensures correct data in strings
  512. ***************************************************************/
  513. BOOL NewGoodbye(struct IntuiMessage *imsg, templateNode *temp)
  514. {
  515.  BOOL retval = TRUE;
  516.  char *grab;
  517.  char newamntstr[AMNTSIZE+1];
  518.  categoryNode *tempcat;
  519.  
  520.  /* verify data from "special" strings */
  521.  grab = ((struct StringInfo *)(NP_EnterSpecs[GID_NPAMNT]->gs_Gadget)->SpecialInfo)->Buffer;
  522.  if (!DataVerifyAmnt(grab,newamntstr) ) {
  523.     DisplayBeep(newWin->WScreen);
  524.     DataAnnounceAmount(newGUI);
  525.     GF_ReplyIMsg(imsg);
  526.     DataSitNSpin(NP_EnterSpecs[GID_NPAMNT]->gs_Gadget,newWin);
  527.     return (FALSE);
  528.  }
  529.  else {
  530.     DataStoreAmnt(&temp->template.amount,newamntstr );
  531.  }
  532.  
  533.  grab = ((struct StringInfo *)(NP_EnterSpecs[GID_NPTYPENAME]->gs_Gadget)->SpecialInfo)->Buffer;
  534.  
  535.  /* don't test if id unchanged */
  536.  if (temporigstr[0] == NULL || strcmpi(temporigstr,temp->tempname)!= 0) {
  537.  
  538.      if (DataIsUnique(newGUI, &testtemps,grab,TRUE,
  539.         "Template ID name already exists\nor is invalid.\n")==TRUE) {
  540.         strncpy(temp->tempname,grab, TEMPNAMESIZE);
  541.      }
  542.      else {
  543.         GF_ReplyIMsg(imsg);
  544.         DataSitNSpin(NP_EnterSpecs[GID_NPTYPENAME]->gs_Gadget,newWin);
  545.         return (FALSE);
  546.      }
  547.  }
  548.  
  549.  /* pull data from each string */
  550.  grab = ((struct StringInfo *)(NP_EnterSpecs[GID_NPNAME]->gs_Gadget)->SpecialInfo)->Buffer;
  551.  strncpy(temp->template.name,grab, STRINGSIZE);
  552.  
  553.  grab = ((struct StringInfo *)(NP_EnterSpecs[GID_NPMEMO]->gs_Gadget)->SpecialInfo)->Buffer;
  554.  strncpy(temp->template.memo,grab, STRINGSIZE);
  555.  
  556.  /* check for non-check and void/print */
  557.  if (temp->template.type != CHECKTYPE) {
  558.     temp->template.flags &= ~(VOIDED|PRINTED);
  559.  }
  560.  
  561.  /* grab category string and stuff it in! */
  562.  tempcat = (categoryNode *)DataOrd2Node(&categories,newcatActive);
  563.  strncpy(temp->template.category,tempcat->node.ln_Name,CATNAMESIZE); 
  564.  
  565.  return (retval);
  566. }
  567.  
  568. /**********************************************************
  569. * NewTempStrip()
  570. *  Strip away labels
  571. ***********************************************************/
  572. void NewTempStrip()
  573. {
  574.   if (ntAttach == TRUE) {
  575.         GF_SetGadgetAttrs (newGUI, NP_EnterSpecs[GID_NPCATEGORY]->gs_Gadget,
  576.                         GTLV_Selected, ~0,
  577.                         TAG_DONE);
  578.  
  579.         GF_SetGadgetAttrs (newGUI, NP_EnterSpecs[GID_NPCATEGORY]->gs_Gadget,
  580.                         GTLV_Labels, ~0,
  581.                         TAG_DONE);
  582.             
  583.         ntAttach = FALSE;
  584.   }
  585. }
  586.