palm-os-sdk/PalmOne/Samples/StatusBar/Src/StatusBar.c

474 lines
9.8 KiB
C

/***********************************************************************
*
* Copyright (c) 2005 palmOne, Inc. or its subsidiaries.
* All rights reserved.
*
***********************************************************************/
/***********************************************************************
*
* File:
* StatusBar.c
*
* Description:
* Main file
*
* Version 1.0 - Initial Revision (03/02/05)
*
***********************************************************************/
#include <PalmOS.h>
#include <PceNativeCall.h>
#include <HsExt.h>
#include "Common.h"
#include "StatusBar.h"
#include "StatusBar_Rsc.h"
#define kRotationLibTrapOpen sysLibTrapOpen
#define kRotationLibTrapClose sysLibTrapClose
#define kRotationLibTrapGetRotation (sysLibTrapCustom + 1)
typedef enum RotationTypeTag
{
Rotation0 = 0,
Rotation90 = 90,
Rotation180 = 180,
Rotation270 = 270
} RotationType;
Err RotationLibOpen(UInt16 refnum)
SYS_TRAP(kRotationLibTrapOpen);
Err RotationLibClose(UInt16 refnum)
SYS_TRAP(kRotationLibTrapClose);
RotationType RotationGetRotation(UInt16 refnum)
SYS_TRAP(kRotationLibTrapGetRotation);
static MemPtr PrvLockResource(DmResType type, DmResID resID)
{
MemHandle resH = NULL;
MemPtr resP = NULL;
resH = DmGetResource(type, resID);
resP = MemHandleLock(resH);
DmReleaseResource(resH);
return resP;
}
static void PrvUnlockResource(DmResType type, DmResID resID)
{
MemHandle resH = NULL;
resH = DmGetResource(type, resID);
MemHandleUnlock(resH);
DmReleaseResource(resH);
}
/***********************************************************************
*
* FUNCTION: MainFormInit
*
* DESCRIPTION:
*
* PARAMETERS: -
*
* RETURNED: -
*
***********************************************************************/
static void MainFormInit(FormType *frmP)
{
}
/***********************************************************************
*
* FUNCTION: MainFormDeinit
*
* DESCRIPTION:
*
* PARAMETERS: -
*
* RETURNED: -
*
***********************************************************************/
static void MainFormDeinit(FormType *frmP)
{
}
/*
* FUNCTION: MainFormDoCommand
*
* DESCRIPTION: This routine performs the menu command specified.
*
* PARAMETERS:
*
* command
* menu item id
*/
Boolean MainFormDoCommand(UInt16 command)
{
Boolean handled = false;
UInt16 cardNo;
LocalID dbID;
DmSearchStateType searchState;
DmGetNextDatabaseByTypeCreator(true, &searchState, sysFileTApplication,
appCreatorID, true, &cardNo, &dbID);
switch (command)
{
case MainOptionsAbout:
MenuEraseStatus(0);
HsAboutHandspringApp(cardNo, dbID, "2007", "Palm DTS Team");
handled = true;
break;
default:
break;
}
return handled;
}
/***********************************************************************
*
* FUNCTION: MainFormHandleEvent
*
* DESCRIPTION: Main form event handler.
*
* PARAMETERS: eventP - Pointer to an event.
*
* RETURNED: True if event was handled.
*
***********************************************************************/
static Boolean MainFormHandleEvent(EventType *eventP)
{
Boolean handled = false;
FormType *frmP = FrmGetActiveForm( );
Err err = errNone;
// UInt32 processor = 0;
UInt32 result = 0;
// void *ftrMem = NULL;
// UInt32 ftrValue = NULL;
// UInt16 orientation = 0;
FieldPtr fieldSliderP = (FieldPtr)NULL;
FieldPtr fieldStatusBarP = (FieldPtr)NULL;
// FieldPtr fieldScreenWidthP = (FieldPtr)NULL;
// FieldPtr fieldScreenHeightP = (FieldPtr)NULL;
// UInt32 ftrBits = 0;
// UInt32 sliderState = 0;
// UInt32 screenWidth = 0;
// UInt32 screenHeight = 0;
UInt16 refNum = 0;
RotationType rotation = 0;
UInt32 *action = (UInt32 *)NULL;
NativeFuncType *ARMletP = NULL;
fieldSliderP = (FieldPtr)FrmGetPtr( frmP, MainSliderField );
fieldStatusBarP = (FieldPtr)FrmGetPtr( frmP, MainStatusBarField );
switch(eventP->eType)
{
case frmOpenEvent:
MainFormInit(frmP);
// Set focus on MainGetStatusButton button
FrmSetFocus(frmP, noFocus);
FrmSetFocus(frmP, FrmGetObjectIndex(frmP, MainGetStatusButton));
FrmDrawForm(frmP);
handled = true;
break;
case frmCloseEvent:
MainFormDeinit(frmP);
break;
case menuEvent:
return MainFormDoCommand(eventP->data.menu.itemID);
case ctlSelectEvent:
switch (eventP->data.ctlSelect.controlID)
{
case MainGetStatusButton:
action = MemPtrNew( sizeof(UInt32) );
ARMletP = (NativeFuncType *)PrvLockResource( 'ARMC', 1 );
*action = Swap32( 4 );
result = PceNativeCall( ARMletP, action );
PrvUnlockResource( 'ARMC', 1 );
MemPtrFree( action );
switch ( result )
{
case 0:
SetFieldTextFromStr( fieldSliderP, "The Slider is Open", true );
break;
case 1:
SetFieldTextFromStr( fieldSliderP, "The Slider is Closed", true );
break;
default:
SetFieldTextFromStr( fieldSliderP, "No Slider", true );
break;
}
err = SysLibFind( "rotmgr", &refNum );
if ( err != errNone )
{
err = SysLibLoad( sysFileTLibrary, 'rotM', &refNum );
}
RotationLibOpen( refNum );
rotation = RotationGetRotation( refNum );
RotationLibClose( refNum );
switch ( rotation )
{
case Rotation0:
SetFieldTextFromStr( fieldStatusBarP, "0", true );
break;
case Rotation90:
SetFieldTextFromStr( fieldStatusBarP, "90", true );
break;
case Rotation180:
SetFieldTextFromStr( fieldStatusBarP, "180", true );
break;
case Rotation270:
SetFieldTextFromStr( fieldStatusBarP, "270", true );
break;
default:
SetFieldTextFromStr( fieldStatusBarP, "This device does not rotate", true );
break;
}
handled = true;
break;
default:
break;
}
break;
default:
break;
}
return handled;
}
#if 0
#pragma mark -
#endif
/***********************************************************************
*
* FUNCTION: AppHandleEvent
*
* DESCRIPTION: Main application event handler.
*
* PARAMETERS: eventP - Pointer to an event.
*
* RETURNED: True if event was handled.
*
***********************************************************************/
static Boolean AppHandleEvent(EventType *eventP)
{
UInt16 formId = 0;
FormType *frmP = NULL;
if(eventP->eType == frmLoadEvent)
{
formId = eventP->data.frmLoad.formID;
frmP = FrmInitForm(formId);
FrmSetActiveForm(frmP);
switch (formId)
{
case MainForm:
FrmSetEventHandler(frmP, MainFormHandleEvent);
break;
default:
break;
}
return true;
}
return false;
}
/***********************************************************************
*
* FUNCTION: ApplEventLoop
*
* DESCRIPTION: Main Application event loop.
*
* PARAMETERS: -
*
* RETURNED: -
*
***********************************************************************/
static void AppEventLoop(void)
{
EventType event;
Err error = errNone;
do
{
EvtGetEvent(&event, evtWaitForever);
if(!SysHandleEvent(&event))
{
if (!MenuHandleEvent(0, &event, &error))
{
if(!AppHandleEvent(&event))
{
FrmDispatchEvent(&event);
}
}
}
} while(event.eType != appStopEvent);
}
/***********************************************************************
*
* FUNCTION: AppStart
*
* DESCRIPTION: Called when the application starts
*
* PARAMETERS: -
*
* RETURNED: -
*
***********************************************************************/
static Err AppStart(void)
{
return errNone;
}
/***********************************************************************
*
* FUNCTION: AppStop
*
* DESCRIPTION: Called when the application exits
*
* PARAMETERS: -
*
* RETURNED: -
*
***********************************************************************/
static void AppStop(void)
{
FrmCloseAllForms();
}
/* all code from here to end of file should use no global variables */
#pragma warn_a5_access on
/***********************************************************************
*
* FUNCTION: RomVersionCompatible
*
* DESCRIPTION: Check the if the ROM is compatible with the application
*
* PARAMETERS: -
*
* RETURNED: -
*
***********************************************************************/
static Err RomVersionCompatible(UInt32 requiredVersion, UInt16 launchFlags)
{
UInt32 romVersion;
FtrGet(sysFtrCreator, sysFtrNumROMVersion, &romVersion);
if (romVersion < requiredVersion)
{
if ((launchFlags &
(sysAppLaunchFlagNewGlobals | sysAppLaunchFlagUIApp)) ==
(sysAppLaunchFlagNewGlobals | sysAppLaunchFlagUIApp))
{
FrmAlert (RomIncompatibleAlert);
if (romVersion < kPalmOS20Version)
{
AppLaunchWithCommand(
sysFileCDefaultApp,
sysAppLaunchCmdNormalLaunch, NULL);
}
}
return sysErrRomIncompatible;
}
return errNone;
}
/***********************************************************************
*
* FUNCTION: PilotMain
*
* DESCRIPTION: Main entry point for the application.
*
* PARAMETERS: -
*
* RETURNED: -
*
***********************************************************************/
UInt32 PilotMain(UInt16 cmd, MemPtr cmdPBP, UInt16 launchFlags)
{
Err error;
error = RomVersionCompatible (ourMinVersion, launchFlags);
if (error) return (error);
switch (cmd)
{
case sysAppLaunchCmdNormalLaunch:
error = AppStart();
if (error)
return error;
FrmGotoForm(MainForm);
AppEventLoop();
AppStop();
break;
default:
break;
}
return errNone;
}
/* turn a5 warning off to prevent it being set off by C++
* static initializer code generation */
#pragma warn_a5_access reset