home *** CD-ROM | disk | FTP | other *** search
/ linuxmafia.com 2016 / linuxmafia.com.tar / linuxmafia.com / pub / palmos / linkmaster-src-1.0.4.tar.gz / linkmaster-src-1.0.4.tar / linkmaster-1.0.4 / proxy / db / proxydb.c < prev    next >
C/C++ Source or Header  |  2000-10-22  |  5KB  |  226 lines

  1. /* Main code for Proxy Datebook */
  2.  
  3. #include <Pilot.h>
  4. #include "callback.h"
  5. #include "DateDB.h"
  6.  
  7. #include "linkaware.h"
  8. #include "proxydbRsc.h"
  9.  
  10. static DmOpenRef DatebookDB;
  11. static Word FirstIndex;
  12.  
  13. static VoidPtr GetObjectPtr(Word id)
  14. {
  15.    FormPtr frm;
  16.    frm=FrmGetActiveForm();
  17.    return FrmGetObjectPtr(frm, FrmGetObjectIndex(frm, id));
  18. }
  19.  
  20. static void MainListDraw(UInt item, RectanglePtr bounds, CharPtr* text)
  21. {
  22.    ApptDBRecordType r;
  23.    VoidHand handle;
  24.    Word index;
  25.    
  26.    CALLBACK_PROLOGUE;
  27.  
  28.    index=FirstIndex;
  29.    DmSeekRecordInCategory(DatebookDB, &index, item, dmSeekForward,
  30.               dmAllCategories);
  31.  
  32.    ApptGetRecord(DatebookDB, index, &r, &handle);
  33.    WinDrawChars(r.description, StrLen(r.description),
  34.         bounds->topLeft.x, bounds->topLeft.y);
  35.    MemHandleUnlock(handle);
  36.    CALLBACK_EPILOGUE;
  37. }
  38. static void MainFormInit()
  39. {
  40.    Boolean showpast;
  41.    FormPtr frm;
  42.    DateType date;
  43.    ListPtr list;
  44.  
  45.    frm=FrmGetActiveForm();
  46.    showpast=CtlGetValue(GetObjectPtr(MainPastCheckBox));
  47.  
  48.    if (!DatebookDB)
  49.       DatebookDB=DmOpenDatabaseByTypeCreator('DATA', 'date', dmModeReadOnly);
  50.    DateSecondsToDate(TimGetSeconds(), &date);
  51.       
  52.    FirstIndex=0;
  53.    if (!showpast)
  54.       ApptFindFirst(DatebookDB, date, &FirstIndex);
  55.    
  56.    list=GetObjectPtr(MainList);
  57.    LstSetListChoices(list, NULL,
  58.              DmNumRecordsInCategory(DatebookDB, dmAllCategories)
  59.              -DmPositionInCategory(DatebookDB,
  60.                        FirstIndex, dmAllCategories));
  61.    LstSetDrawFunction(list, MainListDraw);
  62. }
  63.  
  64. static Boolean MainFormHandleEvent (EventPtr e)
  65. {
  66.    Boolean handled = false;
  67.    FormPtr frm;
  68.     
  69.    CALLBACK_PROLOGUE
  70.  
  71.       switch (e->eType) {
  72.       case frmOpenEvent:
  73.      MainFormInit();
  74.      frm = FrmGetActiveForm();
  75.      FrmDrawForm(frm);
  76.      handled = true;
  77.      break;
  78.  
  79.       case frmCloseEvent:
  80.      DmCloseDatabase(DatebookDB);
  81.      break;
  82.  
  83.       case menuEvent:
  84.      MenuEraseStatus(NULL);
  85.  
  86.      switch(e->data.menu.itemID) {
  87.      }
  88.  
  89.      handled = true;
  90.      break;
  91.  
  92.       case ctlSelectEvent:
  93.      switch(e->data.ctlSelect.controlID) {
  94.      case MainPastCheckBox:
  95.         MainFormInit();
  96.         FrmDrawForm(FrmGetActiveForm());
  97.         break;
  98.  
  99.      case MainPublishButton: {
  100.         ApptDBRecordType r;
  101.         Word index;
  102.         VoidHand handle;
  103.         
  104.         index=FirstIndex;
  105.         DmSeekRecordInCategory(DatebookDB, &index,
  106.                    LstGetSelection(GetObjectPtr(MainList)),
  107.                    dmSeekForward, dmAllCategories);
  108.         ApptGetRecord(DatebookDB, index, &r, &handle);
  109.         LinkPublish((LinkInfoPtr)LinkSimpleNew(DatebookDB,
  110.                            index, r.description));
  111.         MemHandleUnlock(handle);
  112.         break;
  113.      };
  114.  
  115.      default:
  116.         break;
  117.      }
  118.      break;
  119.  
  120.       default:
  121.      break;
  122.       }
  123.  
  124.    CALLBACK_EPILOGUE
  125.  
  126.       return handled;
  127. }
  128.  
  129. static Boolean ApplicationHandleEvent(EventPtr e)
  130. {
  131.    FormPtr frm;
  132.    Word    formId;
  133.    Boolean handled = false;
  134.  
  135.    if (e->eType == frmLoadEvent) {
  136.       formId = e->data.frmLoad.formID;
  137.       frm = FrmInitForm(formId);
  138.       FrmSetActiveForm(frm);
  139.  
  140.       switch(formId) {
  141.       case MainForm:
  142.      FrmSetEventHandler(frm, MainFormHandleEvent);
  143.      break;
  144.       }
  145.       handled = true;
  146.    }
  147.  
  148.    return handled;
  149. }
  150.  
  151. /* Get preferences, open (or create) app database */
  152. static Word StartApplication(void)
  153. {
  154.    FrmGotoForm(MainForm);
  155.    return 0;
  156. }
  157.  
  158. /* Save preferences, close forms, close app database */
  159. static void StopApplication(void)
  160. {
  161.    FrmSaveAllForms();
  162.    FrmCloseAllForms();
  163. }
  164.  
  165. /* The main event loop */
  166. static void EventLoop(void)
  167. {
  168.    Word err;
  169.    EventType e;
  170.  
  171.    do {
  172.       EvtGetEvent(&e, evtWaitForever);
  173.       if (! SysHandleEvent (&e))
  174.      if (! MenuHandleEvent (NULL, &e, &err))
  175.         if (! ApplicationHandleEvent (&e))
  176.            FrmDispatchEvent (&e);
  177.    } while (e.eType != appStopEvent);
  178. }
  179.  
  180. /* Main entry point; it is unlikely you will need to change this except to
  181.    handle other launch command codes */
  182. DWord PilotMain(Word cmd, Ptr cmdPBP, Word launchFlags)
  183. {
  184.    Word err;
  185.  
  186.    switch (cmd) {
  187.    case sysAppLaunchCmdNormalLaunch:
  188.    case linkAppLaunchRequestLink:
  189.       err = StartApplication();
  190.       if (err) return err;
  191.       EventLoop();
  192.       StopApplication();
  193.       break;
  194.  
  195.    case linkAppLaunchFollowLinkSubCall: {
  196.       GoToParamsPtr gotoparams;
  197.       DmSearchStateType searchstate;
  198.       UInt cardno;
  199.       LocalID dbid;
  200.       Err err;
  201.       
  202.       gotoparams=LinkSimpleToGoToParams((LinkSimplePtr)cmdPBP);
  203.       /* try datebk3/4 first, then actionnames, then fallback to standard db */
  204.       err=DmGetNextDatabaseByTypeCreator(true, &searchstate, 'appl', 'CESF',
  205.                      true, &cardno, &dbid);
  206.       if (err==dmErrCantFind)
  207.      err=DmGetNextDatabaseByTypeCreator(true, &searchstate, 'appl', 'CESD',
  208.                         true, &cardno, &dbid);
  209.       if (err==dmErrCantFind)
  210.          err=DmGetNextDatabaseByTypeCreator(true, &searchstate, 'appl', 'Actn',
  211.                                             true, &cardno, &dbid);
  212.       if (err==dmErrCantFind)
  213.      err=DmGetNextDatabaseByTypeCreator(true, &searchstate, 'appl', 'date',
  214.                         true, &cardno, &dbid);
  215.       MemPtrSetOwner(gotoparams, 0);
  216.       SysUIAppSwitch(cardno, dbid, sysAppLaunchCmdGoTo, (Ptr)gotoparams);
  217.       break;      
  218.    };
  219.  
  220.    default:
  221.       return sysErrParamErr;
  222.    };
  223.  
  224.    return 0;
  225. }
  226.