📄 testfiveway.c
字号:
////////////////////////////////////////////////////////////
// Right
fieldP = FrmGetPtr(frmP, MainRightField);
if( keyCode & navBitRight ) {
if( keyCode & navChangeRight )
SetFieldTextFromStr(fieldP, keyState[0], true); // Press
else
SetFieldTextFromStr(fieldP, keyState[1], true); // Repeat
} else {
if( keyCode & navChangeRight )
SetFieldTextFromStr(fieldP, keyState[2], true); // Released
else
SetFieldTextFromStr(fieldP, keyState[3], true); // Not Pressed
}
////////////////////////////////////////////////////////////
// Other Way, but doesn't handle multiple keys correctly
////////////////////////////////////////////////////////////
//
// if( chr == vchrNavChange && (keyCode & navBitRight)) {
// if( modifiers & autoRepeatKeyMask )
// SetFieldTextFromStr(fieldP, keyState[1], true);
// else
// SetFieldTextFromStr(fieldP, keyState[0], true);
// } else {
// SetFieldTextFromStr(fieldP, keyState[2], true);
// }
////////////////////////////////////////////////////////////
// Select
fieldP = FrmGetPtr(frmP, MainSelectField);
if( keyCode & navBitSelect ) {
if( keyCode & navChangeSelect )
SetFieldTextFromStr(fieldP, keyState[0], true); // Press
else
SetFieldTextFromStr(fieldP, keyState[1], true); // Repeat
} else {
if( keyCode & navChangeSelect )
SetFieldTextFromStr(fieldP, keyState[2], true); // Released
else
SetFieldTextFromStr(fieldP, keyState[3], true); // Not Pressed
}
////////////////////////////////////////////////////////////
// Other Way, but doesn't handle multiple keys correctly
////////////////////////////////////////////////////////////
//
// if( chr == vchrNavChange && (keyCode & navBitSelect)) {
// if( modifiers & autoRepeatKeyMask )
// SetFieldTextFromStr(fieldP, keyState[1], true);
// else
// SetFieldTextFromStr(fieldP, keyState[0], true);
// } else {
// SetFieldTextFromStr(fieldP, keyState[2], true);
// }
////////////////////////////////////////////////////////////
// Draw a line for the select button
WinDrawLine(76, 49, 105, 34);
return true;
}
/**
* @brief MainFormDoCommand
* This routine performs the menu command specified.
*
*
* @param command menu item id
* @retval true if the event was handled and should not be passed to
* FrmHandleEvent
*
**/
Boolean MainFormDoCommand(UInt16 command)
{
Boolean handled = false;
UInt16 cardNo;
LocalID dbID;
DmSearchStateType searchState;
DmGetNextDatabaseByTypeCreator(true, &searchState, sysFileTApplication,
appFileCreator, true, &cardNo, &dbID);
switch (command)
{
case OptionsAbout:
MenuEraseStatus(0);
HsAboutHandspringApp(cardNo, dbID, "2006", "Palm DTS Team");
handled = true;
break;
}
return handled;
}
/***********************************************************************
*
* FUNCTION: MainFormHandleEvent
*
* DESCRIPTION: 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();
EventType cleanEvent;
cleanEvent.eType = keyDownEvent;
cleanEvent.data.keyDown.chr = 0;
cleanEvent.data.keyDown.keyCode = 0;
cleanEvent.data.keyDown.modifiers = 0;
switch(eventP->eType)
{
case menuEvent:
return MainFormDoCommand(eventP->data.menu.itemID);
case frmOpenEvent:
FrmDrawForm(frmP);
// Refresh the display
if (OldLibrary)
OldDisplayKeyState(frmP, &cleanEvent);
else
NewDisplayKeyState(frmP, &cleanEvent);
handled = true;
break;
case keyUpEvent: if (OldLibrary) break;
case keyHoldEvent: if (OldLibrary) break;
case keyDownEvent:
if (OldLibrary)
handled = OldDisplayKeyState(frmP, eventP);
else
handled = NewDisplayKeyState(frmP, eventP);
break;
default:
break;
}
return handled;
}
/***********************************************************************
*
* 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;
UInt16 error;
Boolean err;
do
{
EvtGetEvent(&event, evtWaitForever);
if(EvtKeydownIsVirtual(&event) && (event.data.keyDown.chr == vchrNavChange)
&& ((event.data.keyDown.keyCode & (navChangeBitsAll | navBitsAll)) == (navChangeSelect | navBitSelect))
&& (event.data.keyDown.modifiers & poweredOnKeyMask) )
{
// If you want your application to turn on and not to show the pop-up clock
// Use the following code:
// // Simply reset the auto off...
// EvtResetAutoOffTimer();
// Pop the regular clock dialog
err = SysHandleEvent(&event);
// Skip the loop
continue;
}
// If the event is a five way event, pass it to the form
// event handler.
if(IsFiveWayNavEvent(&event) || !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)
{
/*
// Check for 5 Way
UInt32 version = 0;
Err err = FtrGet(navFtrCreator, navFtrVersion, &version);
if(err)
FrmAlert(NotAvailableAlert);
*/
Err error = errNone;
error = SysLibFind(kPmKeyLibName, &gLibRefNum);
if (error)
{
error = SysLibLoad(sysFileTLibrary, kPmKeyLibCreator, &gLibRefNum);
if (error)
{
gLibRefNum = sysInvalidRefNum;
OldLibrary = true;
error = errNone;
}
}
return error;
}
/***********************************************************************
*
* 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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -