Graham,

I have some sample code here that toggles between two forms (with
corresponding event handlers for each).  I use GCC, so not everything will
translate to your development environment.  Hopefully, this may help.  If
not, then continued best of luck wishes!

Dave.

--
Colorado Springs, CO  USA
____________________________________________________________________________
_

#include <pilot.h>
#include <callback.h>

#include "2forms.h"

static Boolean TestForm1Handler( EventPtr event )
{
   Boolean handled = false;

   CALLBACK_PROLOGUE

   switch ( event->eType )
   {
      case frmOpenEvent:
         FrmDrawForm( FrmGetActiveForm() );
         handled = true;
         break;
      case frmUpdateEvent:
         FrmDrawForm( FrmGetActiveForm() );
         handled = true;
         break;
      case ctlSelectEvent:
         switch ( event->data.ctlSelect.controlID )
         {
            case ctlButton11:
               FrmAlert( alertSwitch );
               FrmGotoForm( TestForm2 );
               handled = true;
         }
   }

   CALLBACK_EPILOGUE

   return handled;
}

static Boolean TestForm2Handler( EventPtr event )
{
   Boolean handled = false;

   CALLBACK_PROLOGUE

   switch ( event->eType )
   {
      case frmOpenEvent:
         FrmDrawForm( FrmGetActiveForm() );
         handled = true;
         break;
      case ctlSelectEvent:
         switch ( event->data.ctlSelect.controlID )
         {
            case ctlButton21:
               FrmAlert( alertSwitch );
               FrmGotoForm( TestForm1 );
               handled = true;
         }
   }

   CALLBACK_EPILOGUE

   return handled;
}

static Boolean AppLoadForm( EventPtr event )
{
   FormPtr frm;
   Int formId;
   Boolean handled = false;

   if ( event->eType == frmLoadEvent )
   {
      formId = event->data.frmLoad.formID;
      frm = FrmInitForm( formId );
      FrmSetActiveForm( frm );
      switch ( formId )
      {
         case TestForm1:
            FrmSetEventHandler( frm, TestForm1Handler );
            handled = true;
            break;
         case TestForm2:
            FrmSetEventHandler( frm, TestForm2Handler );
            handled = true;
            break;
      }
   }

   return handled;
}

// -------------------------------------------------------------------------
---

static Err AppStart( void )
{
   FrmGotoForm( TestForm1 );
   return true;
}

static void AppEventLoop( void )
{
  Word err;
  EventType event;

  do
  {
    EvtGetEvent( &event, evtWaitForever );

    if ( SysHandleEvent(&event) ) continue;
    if ( MenuHandleEvent((void*)0,&event,&err) ) continue;
    if ( AppLoadForm(&event) ) continue;

    FrmDispatchEvent( &event );

  } while ( event.eType != appStopEvent );
}

static void AppStop( void )
{
}

// -------------------------------------------------------------------------
---

DWord PilotMain( Word cmd, Ptr cmdPBP, Word launchFlags )
{
   if ( cmd == sysAppLaunchCmdNormalLaunch )
   {
      if ( AppStart() )
      {
         AppEventLoop();
         AppStop();
      }
   }

   return 0;
}

Reply via email to