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

  1. /* reconcilePanel.c 
  2.  *
  3.  *  defines the GUIFront characteristics of the reconcile panel 
  4.  */
  5.   
  6. #include <stdio.h>  
  7. #include <intuition/gadgetclass.h>
  8. #include "amiCheck.h"
  9. #include "mainPanel.h"
  10. #include "reconcilePanel.h"
  11. #include "dataBase.h"
  12. #include <string.h>
  13. #include "regGadget.h"
  14.  
  15.  
  16. /* prototypes */
  17. BOOL RecHandleGadget(struct IntuiMessage *);
  18. void RecInit(void);
  19.  
  20. ExtErrorData RecExtData;
  21. GUIFront *recGUI;
  22. char recstr[AMNTSIZE+1];
  23. BOOL doit = FALSE;
  24.  
  25. /* quick configure of some gadgets */
  26. struct TagItem warnTags[] =
  27. {
  28.     {GTTX_Text,"If this does not match statement,"}, 
  29.     {TAG_DONE},
  30. };
  31.  
  32. struct TagItem resTags[] =
  33. {
  34.     {GTTX_Text,"POSTPONE reconcile by canceling."},
  35.     {TAG_DONE},
  36. };
  37.  
  38.  
  39. /* define gadgetspec */
  40. GadgetSpec RCPgadgetspecs[] = 
  41. {
  42.     {TEXT_KIND,AMNTSIZE,0,{0,0,0,0,"Reconcile Result:",NULL,GID_RCPCURR,
  43.         PLACETEXT_LEFT},TxtBorder,GS_DefaultTags},
  44.  
  45.     {TEXT_KIND,0,0,{0,0,0,0,NULL,NULL,GID_RCPWARN,
  46.         PLACETEXT_LEFT},warnTags,GS_DefaultTags},
  47.  
  48.     {TEXT_KIND,0,0,{0,0,0,0,NULL,NULL,GID_RCPRESULTS,
  49.         PLACETEXT_LEFT},resTags,GS_DefaultTags},
  50.  
  51.         {BUTTON_KIND,0,0,{0,0,0,0,"_OK", NULL, GID_RCPOK,         
  52.                 PLACETEXT_IN}, NULL, GS_DefaultTags},
  53.  
  54.         {BUTTON_KIND,0,0,{0,0,0,0,"_Cancel", NULL, GID_RCPCANCEL,        
  55.                 PLACETEXT_IN}, NULL, GS_DefaultTags},
  56.  
  57. };
  58.  
  59. /* set up array of pointers to our specs */
  60. GadgetSpec *RCP_RecSpecs[] =
  61. {
  62.         &RCPgadgetspecs[0],
  63.         &RCPgadgetspecs[1],
  64.         &RCPgadgetspecs[2],
  65.         &RCPgadgetspecs[3],
  66.     &RCPgadgetspecs[4],
  67.            NULL,
  68. };
  69.  
  70.  
  71. /* define the layout of this panel */
  72. ULONG RCP_RecPanel[] =
  73. {
  74.    GUIL_Flags, GUILF_PropShare | GUILF_EqualWidth,
  75.  
  76.    GUIL_HorizGroup, 2,
  77.         GUIL_Flags, GUILF_PropShare | GUILF_EqualHeight,
  78.     GUIL_FrameType, GUILFT_Recess,
  79.         
  80.     GUIL_VertGroup, 3,
  81.         GUIL_Flags, GUILF_PropShare | GUILF_EqualWidth,
  82.  
  83.         GUIL_GadgetSpecID, GID_RCPCURR,
  84.  
  85.         GUIL_VertGroup,0,
  86.             GUIL_GadgetSpecID, GID_RCPWARN,
  87.             GUIL_GadgetSpecID, GID_RCPRESULTS,
  88.         TAG_DONE,
  89.     TAG_DONE,
  90.     TAG_DONE,
  91.     
  92.     GUIL_HorizGroup,1,
  93.         GUIL_Flags, GUILF_EqualSize | GUILF_EqualWidth,
  94.         
  95.            GUIL_GadgetSpecID, GID_RCPOK,
  96.            GUIL_GadgetSpecID, GID_RCPCANCEL,
  97.            
  98.     TAG_DONE,   
  99.            
  100. TAG_DONE,
  101. };
  102.  
  103.  
  104. /****************************************************
  105. * ReconcileGUI ()
  106. *
  107. *    Creates the GUI for the sort panel.
  108. *****************************************************/
  109. void ReconcileGUI(void)
  110. {
  111.  BOOL done = FALSE;
  112.  ULONG signal;
  113.  
  114.    AmiLock();
  115.    doit = FALSE;   
  116.         
  117.         GF_SetGUIAttr(recGUI, GUI_OpenGUI, TRUE, TAG_DONE);
  118.         RecInit();
  119.                 /* Process input events */
  120.                 while (!done)
  121.                 {
  122.                     struct IntuiMessage *imsg;
  123.  
  124.                     /* Wait for an event to occur */
  125.  
  126.                     signal = GF_Wait(guiapp,AmigaGuideSignal(agc));
  127.  
  128.                     /* We only bother to listen for CLOSEWINDOW events.
  129.                      * Of course, in a real application, you would be
  130.                      * examining the Class field for IDCMP_GADGETUP
  131.                      * messages and act accordingly.
  132.                      */
  133.  
  134.             if (signal & AmigaGuideSignal(agc)) {
  135.             AmiHelpMsg();
  136.             continue;
  137.             }
  138.  
  139.                     while (imsg = GF_GetIMsg(guiapp))
  140.                     {
  141.                         switch (imsg->Class) {
  142.                 case IDCMP_RAWKEY:
  143.                     AmiHelpKey(imsg,RECONCILE_PANEL);
  144.                     break;
  145.  
  146.                                 case IDCMP_CLOSEWINDOW:
  147.                     done = TRUE;
  148.                                         break;
  149.  
  150.                 case IDCMP_GADGETUP:
  151.                     done=RecHandleGadget(imsg);
  152.                     break;
  153.  
  154.                 case IDCMP_REFRESHWINDOW:
  155.                     RegRefresh(TRUE);
  156.                     break;
  157.                         }
  158.                                      
  159.                               
  160.                         GF_ReplyIMsg(imsg);
  161.                     }
  162.                 }
  163.  
  164.    GF_SetGUIAttr(recGUI, GUI_OpenGUI, FALSE, TAG_DONE);   
  165.    AmiUnlock();
  166.   
  167.    if (doit == TRUE) {
  168.     /* re-filter now that we have potentially marked up flags */
  169.     AmiDisableSel(TRUE);
  170.     AmiLock();
  171.     DataRebuildFilters();
  172.     if (autosort == TRUE && !IsListEmpty(&sortfields))
  173.         DataSortFilter((filterNode *)filtered.mlh_Head,
  174.             (filterNode *)filtered.mlh_TailPred,
  175.             (sortNode *)sortfields.lh_Head);
  176.     RegNewFilter();
  177.  
  178.     /* update the filter balance */
  179.     DataFilterBalance(&filtered);
  180.     DataBuildBal(usrAccount.decimal,&filtAmnt,filtStr);
  181.     AmiUpdateFilt(filtStr);
  182.     
  183.     AmiUnlock();
  184.   }
  185.  
  186.  return;
  187. }
  188.  
  189. /***************************************************
  190. * RecHandleGadget()
  191. *
  192. *    Handles gadget events for this panel
  193. ****************************************************/
  194. BOOL  RecHandleGadget(struct IntuiMessage *imsg)
  195. {
  196.  BOOL done = FALSE;
  197.  struct Gadget *gad =  (struct Gadget *)(imsg->IAddress);
  198.  UWORD code = imsg->Code;
  199.  
  200.  char amntstr[AMNTSIZE+1];
  201.  
  202.  switch (gad->GadgetID) {
  203.  
  204.     case GID_RCPCANCEL:
  205.         done = TRUE;
  206.         break;
  207.                                                          
  208.     case GID_RCPOK:
  209.         amiChangedItems = TRUE;
  210.         amntState.stateAmnt = DataReconcile(TRUE);
  211.         DataBuildBal(usrAccount.decimal,&amntState.stateAmnt,amntstr);
  212.         AmiUpdateState(amntstr);    
  213.  
  214.         done= doit= TRUE;
  215.          break;
  216.  }
  217.  
  218.  return (done);
  219. }
  220.  
  221. /****************************************************
  222. * RecInit()
  223. *
  224. *    Set up some globals
  225. *****************************************************/
  226. void RecInit(void)
  227. {
  228.  balanceType bal;
  229.  
  230.  bal = DataReconcile(FALSE);
  231.  DataBuildBal(usrAccount.decimal,&bal,recstr);
  232.  
  233.  /* initialize our amount */
  234.  GF_SetGadgetAttrs (recGUI, RCP_RecSpecs[GID_RCPCURR]->gs_Gadget,
  235.         GTTX_Text, recstr,
  236.         TAG_DONE);
  237.  
  238. }
  239.