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

  1. /* enterPanel.c 
  2.  *
  3.  *  defines the GUIFront characteristics of the data-entry panel 
  4.  */
  5.  
  6. #include <stdio.h>  
  7. #include <intuition/gadgetclass.h>
  8. #include <clib/intuition_protos.h>
  9. #include "amiCheck.h"
  10. #include "dataBase.h"
  11. #include "enterPanel.h"
  12. #include "qdatePanel.h"
  13. #include "qmemoPanel.h"
  14. #include "qnamePanel.h"
  15. #include "qamntPanel.h"
  16. #include "regGadget.h"
  17. #include <string.h>
  18.  
  19.  
  20. void EntryInit(BOOL, entryNode *, BOOL *);
  21. BOOL EntryHandleGadget(struct IntuiMessage *);
  22. BOOL EntryGoodbye(struct IntuiMessage *, entryNode *); 
  23. BOOL skipped;
  24.  
  25. BOOL *deleteit;
  26. ExtErrorData enterExtData;
  27. entryNode     newnode, *entryretval;
  28. GUIFront *entryGUI;
  29. static char amntstr[AMNTSIZE];
  30. WORD catactive;
  31. struct Window *myWin;
  32.  
  33. /* define gadgetspec */
  34. GadgetSpec EPgadgetspecs[] = 
  35. {
  36.  
  37.         {STRING_KIND,50,1,{0,0,0,0,"_Name",NULL,GID_EPNAME, /* 50 */
  38.                 PLACETEXT_LEFT}, strNameTags,GS_DefaultTags},
  39.  
  40.         {STRING_KIND,50,1,{0,0,0,0,"_Memo",NULL,GID_EPMEMO,
  41.                 PLACETEXT_LEFT}, strMemoTags,GS_DefaultTags},
  42.  
  43.         {STRING_KIND,10,1,{0,0,0,0,"_Amount",NULL,GID_EPAMNT, /* 10 */
  44.                 PLACETEXT_LEFT}, strAmntTags,GS_DefaultTags},
  45.  
  46.         {STRING_KIND,10,1,{0,0,0,0,"_Date",NULL,GID_EPDATE,
  47.                 PLACETEXT_LEFT}, strDateTags,GS_DefaultTags},
  48.         
  49.  
  50.         {CHECKBOX_KIND,0,1,{0,0,0,0,"Mark _Printed",NULL,GID_EPPRINTED,
  51.                 PLACETEXT_RIGHT}, NULL,GS_DefaultTags},
  52.  
  53.         {CHECKBOX_KIND,0,1,{0,0,0,0,"_Tax Deductible",NULL,GID_EPTAX,
  54.                 PLACETEXT_RIGHT}, NULL,GS_DefaultTags},
  55.  
  56.         {CHECKBOX_KIND,0,1,{0,0,0,0,"Mark _Voided",NULL,GID_EPVOIDED,
  57.                 PLACETEXT_RIGHT}, NULL,GS_DefaultTags},
  58.  
  59.     
  60.         {LISTVIEW_KIND, 30,1,{0,0,0,0,NULL,NULL,GID_EPCATEGORY,
  61.                 PLACETEXT_LEFT}, ListView, GS_DefaultTags},
  62.  
  63.         {INTEGER_KIND,9,1,{0,0,0,0,"Ch_eck", NULL, GID_EPNUMBER, /* 9 */
  64.                 PLACETEXT_LEFT}, strCheckTags, GS_DefaultTags },
  65.                 
  66.         {BUTTON_KIND,0,0,{0,0,0,0,"_OK", NULL, GID_EPOK, 
  67.                 PLACETEXT_IN}, NULL, GS_DefaultTags},
  68.                 
  69.         {BUTTON_KIND,0,0,{0,0,0,0,"_Skip", NULL, GID_EPSKIP, 
  70.                 PLACETEXT_IN}, NULL, GS_DefaultTags}, 
  71.                 
  72.         {BUTTON_KIND,0,0,{0,0,0,0,"_Cancel", NULL, GID_EPCANCEL, 
  73.                 PLACETEXT_IN}, NULL, GS_DefaultTags},
  74.  
  75.     {TEXT_KIND,0,0,{0,0,0,0,"Type",NULL,GID_EPTEMPLATE,
  76.         PLACETEXT_LEFT},TxtBorder,GS_DefaultTags},
  77.  
  78.         {BUTTON_KIND,0,0,{0,0,0,0,"_Remove", NULL, GID_EPREMOVE, 
  79.                 PLACETEXT_IN}, NULL, GS_DefaultTags},
  80.  
  81.         {GETALT_KIND, 0,0,{0,0,0,0,NULL,NULL,GID_EPDATELIST,
  82.                 PLACETEXT_LEFT}, MiscButton, GS_DefaultTags }, 
  83.  
  84.         {GETALT_KIND, 0,0,{0,0,0,0,NULL,NULL,GID_EPMEMOLIST,
  85.                 PLACETEXT_LEFT}, MiscButton, GS_DefaultTags }, 
  86.  
  87.         {GETALT_KIND, 0,0,{0,0,0,0,NULL,NULL,GID_EPNAMELIST,
  88.                 PLACETEXT_LEFT}, MiscButton, GS_DefaultTags },
  89.  
  90.         {GETALT_KIND, 0,0,{0,0,0,0,NULL,NULL,GID_EPAMNTLIST,
  91.                 PLACETEXT_LEFT}, MiscButton, GS_DefaultTags },
  92.  
  93.         {CHECKBOX_KIND,0,1,{0,0,0,0,"Mark C_leared",NULL,GID_EPCLEARED,
  94.                 PLACETEXT_RIGHT}, NULL,GS_DefaultTags},  
  95.  
  96.     {STRING_KIND,0,0,{0,0,0,0,"Date Cleared",NULL,GID_EPCLEARDATE,
  97.         PLACETEXT_LEFT},strDateTags,GS_DefaultTags},
  98.  
  99.         {GETALT_KIND, 0,0,{0,0,0,0,NULL,NULL,GID_EPCLEARDATEQ,
  100.                 PLACETEXT_LEFT}, MiscButton, GS_DefaultTags },
  101.  
  102.     {TEXT_KIND,0,0,{0,0,0,0,"% Budgeted",NULL,GID_EPBUDGETED,
  103.         PLACETEXT_LEFT},TxtBorder,GS_DefaultTags},
  104.  
  105.         {GETALT_KIND, 0,0,{0,0,0,0,NULL,NULL,GID_EPBUDGET,
  106.                 PLACETEXT_LEFT}, MiscButton, GS_DefaultTags },
  107.  
  108.         {BUTTON_KIND,0,0,{0,0,0,0,"Address...", NULL, GID_EPADDRESS, 
  109.                 PLACETEXT_IN}, NULL, GS_DefaultTags},
  110. };
  111.  
  112. /* set up array of pointers to our specs */
  113. GadgetSpec *EP_EnterSpecs[] =
  114. {
  115.         &EPgadgetspecs[0],
  116.         &EPgadgetspecs[1],
  117.         &EPgadgetspecs[2],
  118.         &EPgadgetspecs[3],
  119.         &EPgadgetspecs[4],
  120.         &EPgadgetspecs[5],
  121.         &EPgadgetspecs[6],
  122.         &EPgadgetspecs[7],
  123.         &EPgadgetspecs[8],
  124.         &EPgadgetspecs[9],
  125.         &EPgadgetspecs[10],
  126.         &EPgadgetspecs[11],
  127.     &EPgadgetspecs[12],
  128.     &EPgadgetspecs[13],
  129.     &EPgadgetspecs[14],
  130.     &EPgadgetspecs[15],
  131.     &EPgadgetspecs[16],
  132.     &EPgadgetspecs[17],
  133.     &EPgadgetspecs[18],
  134.     &EPgadgetspecs[19],
  135.     &EPgadgetspecs[20],
  136.     &EPgadgetspecs[21],
  137.     &EPgadgetspecs[22],
  138.     &EPgadgetspecs[23],
  139.         NULL,
  140. };
  141.  
  142.  
  143. /* define the layout of this panel */
  144. ULONG EP_EnterPanel[] =
  145. {
  146.    GUIL_Flags, GUILF_PropShare | GUILF_EqualWidth,
  147.       
  148.    GUIL_HorizGroup, 1,
  149.         GUIL_Flags, GUILF_PropShare, /* | GUILF_LabelAlign,*/
  150.         GUIL_FrameType, GUILFT_Recess,
  151.         
  152.                 GUIL_VertGroup,1,
  153.             GUIL_HorizGroup,1,
  154.                 GUIL_VertGroup,1,
  155.                                 GUIL_Flags, GUILF_LabelAlign | GUILF_EqualWidth,
  156.  
  157.                     GUIL_GadgetSpecID, GID_EPTEMPLATE,
  158.                                    
  159.                                 GUIL_HorizGroup, 2,
  160.                                         GUIL_Flags,GUILF_EqualSize,
  161.  
  162.                         GUIL_GadgetSpecID, GID_EPNUMBER,
  163.                         
  164.                         GUIL_HorizGroup,0,
  165.                             GUIL_GadgetSpecID, GID_EPDATE,
  166.                             GUIL_GadgetSpecID, GID_EPDATELIST,
  167.                         TAG_DONE,
  168.  
  169.                         GUIL_HorizGroup,0,
  170.                             GUIL_GadgetSpecID, GID_EPAMNT,
  171.                             GUIL_GadgetSpecID, GID_EPAMNTLIST,
  172.                         TAG_DONE,
  173.                                 TAG_DONE, 
  174.   
  175.                     GUIL_HorizGroup,0,
  176.                                       GUIL_GadgetSpecID, GID_EPNAME,
  177.                         GUIL_GadgetSpecID, GID_EPNAMELIST,
  178.                     TAG_DONE,
  179.  
  180.                     GUIL_HorizGroup,0,
  181.                                     GUIL_GadgetSpecID, GID_EPMEMO,
  182.                         GUIL_GadgetSpecID, GID_EPMEMOLIST,
  183.                     TAG_DONE,
  184.                 TAG_DONE,
  185.  
  186.             TAG_DONE,
  187.         
  188.             GUIL_HorizGroup, 1,
  189.                 GUIL_Flags, GUILF_PropShare | GUILF_EqualHeight,
  190.                 
  191.                 GUIL_VertGroup,1,
  192.                     GUIL_FrameType, GUILFT_Ridge,
  193.                     GUIL_Flags, GUILF_LabelAlign | GUILF_EqualWidth,
  194.                     GUIL_FrameHeadline, " Misc",
  195. #if 1
  196.                               GUIL_GadgetSpecID, GID_EPCATEGORY,
  197. #endif
  198. #if 0
  199.  
  200.                     GUIL_VertGroup,1,
  201.                         GUIL_Flags, GUILF_LabelAlign | GUILF_EqualWidth,
  202.                         GUIL_HorizGroup,0,
  203.                             GUIL_GadgetSpecID, GID_EPCLEARDATE,
  204.                             GUIL_GadgetSpecID, GID_EPCLEARDATEQ,
  205.                         TAG_DONE,
  206.         
  207.                         GUIL_HorizGroup, 0, 
  208.                             GUIL_GadgetSpecID, GID_EPBUDGETED,
  209.                             GUIL_GadgetSpecID, GID_EPBUDGET,
  210.                         TAG_DONE,
  211.                     TAG_DONE,
  212.     
  213.                     GUIL_GadgetSpecID, GID_EPADDRESS,
  214. #endif
  215.                 TAG_DONE,
  216.                    
  217.                 GUIL_VertGroup, 1,
  218.                     GUIL_FrameType, GUILFT_Ridge,
  219.                     GUIL_FrameHeadline, "Flags",
  220.                     GUIL_GadgetSpecID, GID_EPCLEARED,
  221.                     GUIL_GadgetSpecID, GID_EPTAX,
  222.                     GUIL_GadgetSpecID, GID_EPVOIDED,
  223.                             GUIL_GadgetSpecID, GID_EPPRINTED,
  224.                                   
  225.                 TAG_DONE,
  226.  
  227.             TAG_DONE,
  228.  
  229.         TAG_DONE,   
  230.     TAG_DONE,
  231.     
  232.     GUIL_HorizGroup,1,
  233.         GUIL_Flags, GUILF_EqualSize | GUILF_EqualWidth,
  234.         
  235.            GUIL_GadgetSpecID, GID_EPOK,
  236.        GUIL_GadgetSpecID, GID_EPREMOVE,
  237.            GUIL_GadgetSpecID, GID_EPSKIP,
  238.            GUIL_GadgetSpecID, GID_EPCANCEL,
  239.            
  240.     TAG_DONE,
  241.                   
  242. TAG_DONE,
  243. };
  244.  
  245.  
  246. /****************************************************************
  247. * EntryGUI()
  248. *
  249. *    creates gui for this panel
  250. ****************************************************************/
  251. entryNode *EntryGUI(char *title, BOOL scripted, entryNode *editnode, BOOL *del)
  252. {
  253.  BOOL noreply,done = FALSE;
  254.  UWORD ordinal;
  255.  categoryNode *cat;
  256.  ULONG signal;
  257.      
  258.    AmiLock();
  259.  
  260.         
  261.         GF_SetGUIAttr(entryGUI, GUI_OpenGUI, TRUE, TAG_DONE);
  262.         /* grab window */
  263.          GF_GetGUIAttr(entryGUI,GUI_Window,&myWin,TAG_DONE);
  264.         SetWindowTitles(myWin,title,(UBYTE *)-1);
  265.         EntryInit(scripted, editnode, del);
  266.  
  267. #if 0
  268.         /* map keys to quickwindows */
  269.         GF_SetAliasKey(entryGUI,0x0f ,GID_EPDATELIST);
  270.         GF_SetAliasKey(entryGUI,0x1d ,GID_EPAMNTLIST);
  271.         GF_SetAliasKey(entryGUI,0x1e ,GID_EPNAMELIST);
  272.         GF_SetAliasKey(entryGUI,0x1f ,GID_EPMEMOLIST);
  273. #endif
  274.  
  275.  
  276.                 /* Process input events */
  277.                 while (!done)
  278.                 {
  279.                     struct IntuiMessage *imsg;
  280.  
  281.                     /* Wait for an event to occur */
  282.  
  283.                     signal = GF_Wait(guiapp,AmigaGuideSignal(agc));
  284.             if (signal & AmigaGuideSignal(agc)) {
  285.             AmiHelpMsg();
  286.             continue;
  287.             }
  288.  
  289.                     /* We only bother to listen for CLOSEWINDOW events.
  290.                      * Of course, in a real application, you would be
  291.                      * examining the Class field for IDCMP_GADGETUP
  292.                      * messages and act accordingly.
  293.                      */
  294.  
  295.                     while (imsg = GF_GetIMsg(guiapp))
  296.                     {
  297.             noreply = TRUE;
  298.                         switch (imsg->Class) {
  299.                 case IDCMP_REFRESHWINDOW:
  300.                     RegRefresh(TRUE);
  301.                     break;
  302.  
  303.                                 case IDCMP_CLOSEWINDOW:
  304.                     entryretval = NULL;
  305.                                         done = TRUE;
  306.                                         break;
  307.  
  308.                 case IDCMP_RAWKEY:
  309.                     if (GF_ProcessListView(entryGUI,EP_EnterSpecs[GID_EPCATEGORY],
  310.                         imsg,&ordinal)) {
  311.                         catactive = ordinal;
  312.                         cat = (categoryNode *)DataOrd2Node(&categories,catactive);
  313.                         strncpy(newnode.category,cat->node.ln_Name,CATNAMESIZE);
  314.                     }
  315.                     else AmiHelpKey(imsg,ENTRY_PANEL);
  316.                     break;
  317.  
  318.                 case IDCMP_GADGETUP:
  319.                     done=EntryHandleGadget(imsg);
  320.                     noreply = FALSE;
  321.                     break;
  322.                         }
  323.                                      
  324.             catactive = ordinal;                              
  325.                         if (noreply) GF_ReplyIMsg(imsg);
  326.                     }
  327.                 }
  328.  
  329. #if 1
  330.    GF_SetGadgetAttrs (entryGUI, EP_EnterSpecs[GID_EPCATEGORY]->gs_Gadget,
  331.         GTLV_Labels, ~0,
  332.         TAG_DONE);
  333. #endif
  334.  
  335.    GF_SetGUIAttr(entryGUI, GUI_OpenGUI, FALSE, TAG_DONE);            
  336.    AmiUnlock();
  337.   
  338.  return (entryretval);
  339. }
  340.  
  341. /*********************************************************************
  342. * EntryInit()
  343. *
  344. *    Initializes this panel
  345. **********************************************************************/
  346. void EntryInit(BOOL scripted, entryNode *edit, BOOL *del)
  347. {
  348.  char strdate[DATESIZE];
  349.  templateNode *curr;
  350.  entryNode *data;
  351.  
  352.  /* grab window */
  353.  GF_GetGUIAttr(entryGUI,GUI_Window,&myWin,TAG_DONE);
  354.  
  355.  deleteit = del;
  356.  *deleteit = FALSE;
  357.  
  358.  GF_SetGadgetAttrs(entryGUI,EP_EnterSpecs[GID_EPSKIP]->gs_Gadget,
  359.     GA_Disabled,!scripted,
  360.     TAG_DONE);
  361.  
  362.  if (edit == NULL) {
  363.     GF_SetGadgetAttrs(entryGUI,EPgadgetspecs[GID_EPREMOVE].gs_Gadget,
  364.         GA_Disabled,TRUE,
  365.         TAG_DONE);
  366.  
  367.     /* copy template in */
  368.       curr = (templateNode *)DataOrd2Node(&templates,amntState.currTemplate);
  369.     data = &curr->template;
  370.  }
  371.  else {
  372.     GF_SetGadgetAttrs(entryGUI,EPgadgetspecs[GID_EPREMOVE].gs_Gadget,
  373.         GA_Disabled,FALSE,
  374.         TAG_DONE);
  375.  
  376.     data = edit;
  377.  }
  378.  
  379.  memcpy(&newnode,data,sizeof(entryNode));
  380.  
  381.  DataBuildAmnt(FALSE,&data->amount,amntstr);
  382.   
  383.   /* update gfx */
  384.   if (data->type != CHECKTYPE) 
  385.     GF_SetGadgetAttrs (entryGUI, EP_EnterSpecs[GID_EPNUMBER]->gs_Gadget,
  386.         GA_Disabled,TRUE,
  387.         TAG_DONE);
  388.   else { 
  389.     if (edit == NULL) {
  390.           GF_SetGadgetAttrs (entryGUI, EP_EnterSpecs[GID_EPNUMBER]->gs_Gadget,
  391.             GTIN_Number, amntState.currCheckNumber,
  392.             GA_Disabled, FALSE,
  393.             TAG_DONE); 
  394.         newnode.check = amntState.currCheckNumber;
  395.     }
  396.     else 
  397.         GF_SetGadgetAttrs (entryGUI, EP_EnterSpecs[GID_EPNUMBER]->gs_Gadget,
  398.             GTIN_Number, data->check,
  399.             GA_Disabled, FALSE,
  400.             TAG_DONE); 
  401.   }
  402.  
  403.   GF_SetGadgetAttrs (entryGUI, EP_EnterSpecs[GID_EPNAME]->gs_Gadget,
  404.     GTST_String,data->name,
  405.     TAG_DONE);
  406.  
  407.   GF_SetGadgetAttrs (entryGUI, EP_EnterSpecs[GID_EPMEMO]->gs_Gadget,
  408.     GTST_String,data->memo,
  409.     TAG_DONE);
  410.  
  411.   GF_SetGadgetAttrs (entryGUI, EP_EnterSpecs[GID_EPAMNT]->gs_Gadget,
  412.     GTST_String,amntstr,
  413.     TAG_DONE);
  414.  
  415.   GF_SetGadgetAttrs (entryGUI, EP_EnterSpecs[GID_EPPRINTED]->gs_Gadget,
  416.     GTCB_Checked,(data->flags & PRINTED)?1:0,
  417.     GA_Disabled, (data->type != CHECKTYPE)?TRUE:FALSE,
  418.     TAG_DONE);
  419.  
  420.   GF_SetGadgetAttrs (entryGUI, EP_EnterSpecs[GID_EPCLEARED]->gs_Gadget,
  421.     GTCB_Checked,(data->flags & CLEARED)?1:0,
  422.     TAG_DONE);
  423.  
  424.   GF_SetGadgetAttrs (entryGUI, EP_EnterSpecs[GID_EPVOIDED]->gs_Gadget,
  425.     GTCB_Checked,(data->flags & VOIDED)?1:0,
  426.     GA_Disabled, (data->type != CHECKTYPE)?TRUE:FALSE,
  427.     TAG_DONE);
  428.  
  429.   GF_SetGadgetAttrs (entryGUI, EP_EnterSpecs[GID_EPTAX]->gs_Gadget,
  430.         GTCB_Checked,(data->flags & TAXDEDUCT)?1:0,
  431.         TAG_DONE);
  432.  
  433.   catactive=DataNode2Ord(&categories,data->category);
  434. #if 1
  435.   GF_SetGadgetAttrs (entryGUI, EP_EnterSpecs[GID_EPCATEGORY]->gs_Gadget,
  436.         GTLV_Labels, &categories,
  437.         GTLV_Selected, catactive,
  438.         GTLV_MakeVisible, catactive,
  439.         TAG_DONE);
  440. #endif
  441.  
  442.   if (edit == NULL) {
  443.       /* stuff in current date */
  444.      memcpy(&newnode.date,&currDate,sizeof(dateType));
  445.   }
  446.   else {
  447.     /* stuff in old date */
  448.     memcpy(&newnode.date,&edit->date,sizeof(dateType));
  449.   }
  450.   DataBuildDate(&newnode.date,strdate);
  451.   GF_SetGadgetAttrs (entryGUI, EP_EnterSpecs[GID_EPDATE]->gs_Gadget,
  452.     GTST_String,strdate,
  453.     TAG_DONE);
  454.   
  455.  if (edit != NULL)
  456.         curr =  (templateNode *)DataOrd2Node(&templates,edit->type);
  457.  
  458.    GF_SetGadgetAttrs (entryGUI, EP_EnterSpecs[GID_EPTEMPLATE]->gs_Gadget,
  459.         GTTX_Text,curr->tempname,
  460.         TAG_DONE);
  461.  
  462.   entryretval = NULL;
  463.  skipped = FALSE;
  464. }
  465.  
  466. /***************************************************
  467. * EntryHandleGadget()
  468. *
  469. *    Handles gadget events for this panel
  470. ****************************************************/
  471. BOOL EntryHandleGadget(struct IntuiMessage *imsg)
  472. {
  473.  categoryNode *cat;
  474.  nameNode *dn;
  475.  amntNode *da;
  476.  memoNode *dm;
  477.  struct Gadget *gad = (struct Gadget *)(imsg->IAddress);
  478.  UWORD code = imsg->Code;
  479.  BOOL done = FALSE;
  480.  struct EasyStruct es;
  481.  struct Window *win = NULL;
  482.  static char newamntstr[AMNTSIZE], newdatestr[DATESIZE];
  483.  
  484.  switch (gad->GadgetID) {
  485.     case GID_EPDATELIST:
  486.         if (QDateGUI(((struct StringInfo *)(EP_EnterSpecs[GID_EPDATE]->gs_Gadget)->SpecialInfo)->Buffer)) {
  487.             memcpy(&newnode.date,&edate,sizeof(dateType));
  488.             DataBuildDate(&edate,newdatestr);
  489.  
  490.             GF_SetGadgetAttrs(entryGUI,EP_EnterSpecs[GID_EPDATE]->gs_Gadget,
  491.                 GTST_String,newdatestr,
  492.                 TAG_DONE);
  493.         }
  494.         break;
  495.  
  496.     case GID_EPMEMOLIST:
  497.         if (QMemoGUI(entryGUI)) {
  498.             dm=(memoNode*)DataOrd2Node(&memolist,qmemoSel);
  499.             strcpy(newnode.memo,dm->memoStr);
  500.             GF_SetGadgetAttrs(entryGUI,EP_EnterSpecs[GID_EPMEMO]->gs_Gadget,
  501.                 GTST_String,newnode.memo,
  502.                 TAG_DONE);
  503.         }
  504.         break;
  505.  
  506.     case GID_EPNAMELIST:
  507.         if (QNameGUI(entryGUI)) {
  508.             dn=(nameNode*)DataOrd2Node(&namelist,qnameSel);
  509.             strcpy(newnode.name,dn->nameStr);
  510.             GF_SetGadgetAttrs(entryGUI,EP_EnterSpecs[GID_EPNAME]->gs_Gadget,
  511.                 GTST_String,newnode.name,
  512.                 TAG_DONE);
  513.         }
  514.         break;
  515.  
  516.     case GID_EPAMNTLIST:
  517.         if (QAmntGUI(entryGUI)) {
  518.             da=(amntNode*)DataOrd2Node(&amntlist,qamntSel);
  519.             strcpy(newamntstr,da->amntStr);
  520.             GF_SetGadgetAttrs(entryGUI,EP_EnterSpecs[GID_EPAMNT]->gs_Gadget,
  521.                 GTST_String,newamntstr,
  522.                 TAG_DONE);
  523.         }
  524.         break;
  525.  
  526.     case GID_EPCATEGORY:
  527.         catactive = code;
  528.         cat = (categoryNode *)DataOrd2Node(&categories,catactive);
  529.         strncpy(newnode.category,cat->node.ln_Name,CATNAMESIZE);
  530.         break;
  531.  
  532.     case GID_EPNAME:
  533.         strncpy(newnode.name,((struct StringInfo *)gad->SpecialInfo)->Buffer, STRINGSIZE);
  534.         break;
  535.  
  536.     case GID_EPMEMO:
  537.         strncpy(newnode.memo,((struct StringInfo *)gad->SpecialInfo)->Buffer, STRINGSIZE);
  538.         break;
  539.  
  540.     case GID_EPAMNT:
  541.         /* special case return early.... activated gadget */
  542.         if (!DataVerifyAmnt(((struct StringInfo*)gad->SpecialInfo)->Buffer,newamntstr) ) {
  543.             DisplayBeep(myWin->WScreen);
  544.             DataAnnounceAmount(entryGUI);
  545.             GF_ReplyIMsg(imsg);
  546.             DataSitNSpin(EP_EnterSpecs[GID_EPAMNT]->gs_Gadget,myWin);
  547.               return (done);
  548.         }
  549.          else {
  550.             DataStoreAmnt(&newnode.amount,newamntstr );
  551.             DataBuildAmnt(FALSE,&newnode.amount,newamntstr);
  552.             GF_SetGadgetAttrs(entryGUI,EP_EnterSpecs[GID_EPAMNT]->gs_Gadget,
  553.                 GTST_String,newamntstr,
  554.                 TAG_DONE);
  555.         }
  556.         break;
  557.     
  558.     case GID_EPDATE:
  559.         /* special case return early.... activated gadget */
  560.         if (!DataVerifyDate(((struct StringInfo*)gad->SpecialInfo)->Buffer,newdatestr) ) {
  561.             DisplayBeep(myWin->WScreen);
  562.             DataAnnounceDate(entryGUI);
  563.             GF_ReplyIMsg(imsg);
  564.             DataSitNSpin(EP_EnterSpecs[GID_EPDATE]->gs_Gadget,myWin);
  565.              return (done);
  566.         }
  567.          else {
  568.             DataStoreDate(&newnode.date,newdatestr );
  569.             GF_SetGadgetAttrs(entryGUI,EP_EnterSpecs[GID_EPDATE]->gs_Gadget,
  570.                 GTST_String,newdatestr,
  571.                 TAG_DONE);
  572.         }
  573.         break;
  574.     
  575.     case GID_EPVOIDED:
  576.         if (code)
  577.             newnode.flags |= VOIDED;
  578.         else    newnode.flags &= ~VOIDED;
  579.         break;
  580.  
  581.     case GID_EPCLEARED:
  582.         if (code)
  583.             newnode.flags |= CLEARED;
  584.         else    newnode.flags &= ~CLEARED;
  585.         break;
  586.  
  587.     case GID_EPPRINTED:
  588.         if (code)
  589.             newnode.flags |= PRINTED;
  590.         else    newnode.flags &= ~PRINTED;
  591.         break;
  592.  
  593.     case GID_EPTAX:
  594.         if (code)
  595.             newnode.flags |= TAXDEDUCT;
  596.         else    newnode.flags &= ~TAXDEDUCT;
  597.         break;
  598.  
  599.     case GID_EPNUMBER:
  600.         newnode.check =(UWORD)((struct StringInfo*)gad->SpecialInfo)->LongInt;
  601.         break;
  602.  
  603.     case GID_EPSKIP:
  604.         skipped = TRUE;
  605.         /* fall through */
  606.     case GID_EPCANCEL:
  607.         entryretval = NULL;
  608.         done=TRUE;
  609.         break;
  610.  
  611.     case GID_EPREMOVE:
  612.         /* why don't we first make _sure_ */
  613.         es.es_StructSize = sizeof(struct EasyStruct);
  614.         es.es_Flags = 0;
  615.         es.es_Title = "amiCheck NOTICE:";
  616.         es.es_TextFormat = "Are you sure you wish\nto delete this transaction?";
  617.         es.es_GadgetFormat = "OK|Cancel";
  618.  
  619.         GF_GetGUIAttr(gui,
  620.             GUI_Window,&win,
  621.             TAG_DONE);
  622.         
  623.         GF_LockGUI(entryGUI);
  624.         if (GF_EasyRequest(gui,win,&es,NULL) != FALSE) {
  625.  
  626.             *deleteit = TRUE;
  627.             entryretval = NULL;
  628.             done = TRUE;
  629.         }
  630.         GF_UnlockGUI(entryGUI);
  631.         break;
  632.  
  633.     case GID_EPOK:
  634.         if (EntryGoodbye(imsg, &newnode)) {
  635.             amiChangedItems = TRUE;
  636.             if (newnode.type == CHECKTYPE)
  637.                 amntState.currCheckNumber = newnode.check + 1;
  638.             entryretval = &newnode;
  639.             done = TRUE;
  640.             QDateAdd(&newnode.date);
  641.         }
  642.         else return (FALSE);
  643.         break;
  644.  
  645.  }
  646.  
  647.  GF_ReplyIMsg(imsg);
  648.  return (done);
  649. }
  650.  
  651. /*****************************************************
  652. * EntryGoodbye()
  653. *
  654. *    Checks for invalid strings
  655. ******************************************************/
  656. BOOL EntryGoodbye(struct IntuiMessage *imsg, entryNode *temp)
  657. {
  658.  char *grab;
  659.  char newamntstr[AMNTSIZE+1];
  660.  char newdatestr[DATESIZE+1];
  661.  
  662.  /* check for "special" entries */
  663.  grab = ((struct StringInfo *)(EP_EnterSpecs[GID_EPDATE]->gs_Gadget)->SpecialInfo)->Buffer; 
  664.  if (!DataVerifyDate(grab,newdatestr) ) {
  665.     DisplayBeep(myWin->WScreen);
  666.     DataAnnounceDate(entryGUI);
  667.     GF_ReplyIMsg(imsg);
  668.     DataSitNSpin(EP_EnterSpecs[GID_EPDATE]->gs_Gadget,myWin);
  669.       return (FALSE);
  670.  }
  671.  else {
  672.     DataStoreDate(&temp->date,newdatestr );
  673.  }
  674.  
  675.  grab = ((struct StringInfo *)(EP_EnterSpecs[GID_EPAMNT]->gs_Gadget)->SpecialInfo)->Buffer;
  676.  if (!DataVerifyAmnt(grab,newamntstr) ) {
  677.     DisplayBeep(myWin->WScreen);
  678.     DataAnnounceAmount(entryGUI);
  679.     GF_ReplyIMsg(imsg);
  680.     DataSitNSpin(EP_EnterSpecs[GID_EPAMNT]->gs_Gadget,myWin);
  681.        return (FALSE);
  682.  }
  683.  else {
  684.     DataStoreAmnt(&temp->amount,newamntstr );
  685.  }
  686.  
  687.  /* check for strange amount */
  688.  if (temp->amount == 0) {
  689.     DisplayBeep(myWin->WScreen);
  690.     if (DataQuery(entryGUI,"Amount field is ZERO\nAccept this?", "OK|Cancel") == 0) {
  691.         DataSitNSpin(EP_EnterSpecs[GID_EPAMNT]->gs_Gadget,myWin);
  692.         return (FALSE);
  693.     }
  694.  }
  695.  
  696.  
  697.  
  698.  /* copy over new strings */
  699.  grab = ((struct StringInfo *)(EP_EnterSpecs[GID_EPNAME]->gs_Gadget)->SpecialInfo)->Buffer;
  700.  strncpy(temp->name,grab, STRINGSIZE);
  701.  
  702.  grab = ((struct StringInfo *)(EP_EnterSpecs[GID_EPMEMO]->gs_Gadget)->SpecialInfo)->Buffer;
  703.  strncpy(temp->memo,grab, STRINGSIZE);
  704.  
  705.  temp->check= (UWORD)((struct StringInfo *)(EP_EnterSpecs[GID_EPNUMBER]->gs_Gadget)->SpecialInfo)->LongInt;
  706.  return (TRUE);
  707. }
  708.