📄 testfiveway.c
字号:
/***********************************************************************
*
* Copyright (c) 2002 Palm Computing, Inc. or its subsidiaries.
* All rights reserved.
*
***********************************************************************/
/***********************************************************************
*
* File:
* TestFiveWay.c
*
* Description:
* Test Application for Five Way
*
* Version 1.0 - Initial Revision (09/19/02)
*
***********************************************************************/
#include <PalmOS.h>
#include <KeyMgr.h>
#include <68K/Hs.h>
#include <68K/Libraries/PmKeyLib/PmKeyLib.h>
#include <common/system/HsKeyCodes.h>
#include "Common.h"
#include "PalmOneNavigator.h"
#include "TestFiveWay.h"
#include "TestFiveWayRsc.h"
/*********************************************************************
* Internal Constants
*********************************************************************/
#define ourMinVersion sysMakeROMVersion(3,0,0,sysROMStageDevelopment,0)
#define kPalmOS20Version sysMakeROMVersion(2,0,0,sysROMStageDevelopment,0)
static Char* keyName[] = { "Select", "Up", "Down", "Right", "Left" };
static Char* keyState[] = { "Pressed", "Repeat", "Released", "Not Pressed" };
static UInt16 gLibRefNum;
static Boolean OldLibrary = false;
Boolean MainFormDoCommand(UInt16 command);
/***********************************************************************
*
* FUNCTION: DisplayKeyState
*
* DESCRIPTION: Display the 5 Way states.
*
* PARAMETERS: frmP - Pointer to a form
* eventP - Event to process
*
* RETURNED: True is the key was handled.
*
***********************************************************************/
static Boolean NewDisplayKeyState(FormType *frmP, EventType *eventP)
{
Boolean handled = false;
FieldType *fieldP = NULL;
ControlType *ctlP = NULL;
eventsEnum eType = eventP->eType;
WChar chr = NULL;
UInt16 keyCode = NULL;
UInt16 modifiers = NULL;
// Get the KeyEvent fields
switch(eType)
{
case keyUpEvent:
chr = eventP->data.keyUp.chr;
keyCode = eventP->data.keyUp.keyCode;
modifiers = eventP->data.keyUp.modifiers;
break;
case keyDownEvent:
chr = eventP->data.keyDown.chr;
keyCode = eventP->data.keyDown.keyCode;
modifiers = eventP->data.keyDown.modifiers;
break;
case keyHoldEvent:
chr = eventP->data.keyHold.chr;
keyCode = eventP->data.keyHold.keyCode;
modifiers = eventP->data.keyHold.modifiers;
break;
}
//
// Macro section
//
// Use macro to determine is a Up has been pressed
ctlP = FrmGetPtr(frmP, MainUpCheckbox);
if(ctlP) CtlSetValue(ctlP, chr == vchrPageUp && !(eType == keyUpEvent));
// Use macro to determine is a Down has been pressed
ctlP = FrmGetPtr(frmP, MainDownCheckbox);
if(ctlP) CtlSetValue(ctlP, chr == vchrPageDown && !(eType == keyUpEvent));
// Use macro to determine is a Right has been pressed
ctlP = FrmGetPtr(frmP, MainRightCheckbox);
if(ctlP) CtlSetValue(ctlP, chr == vchrRockerRight && !(eType == keyUpEvent));
// Use macro to determine is a Left has been pressed
ctlP = FrmGetPtr(frmP, MainLeftCheckbox);
if(ctlP) CtlSetValue(ctlP, chr == vchrRockerLeft && !(eType == keyUpEvent));
// Use macro to determine is a Select has been pressed
ctlP = FrmGetPtr(frmP, MainSelectCheckbox);
if(ctlP) CtlSetValue(ctlP, keyCode == keyRockerCenter && (eType == keyUpEvent));
//
// Chr section
//
fieldP = FrmGetPtr(frmP, MainChrField);
switch(keyCode)
{
case keyRockerUp:
case keyPageUp:
SetFieldTextFromStr(fieldP, keyName[1] , true);
break;
case keyRockerDown:
case keyPageDown:
SetFieldTextFromStr(fieldP, keyName[2] , true);
break;
case keyRockerRight:
SetFieldTextFromStr(fieldP, keyName[3] , true);
break;
case keyRockerLeft:
SetFieldTextFromStr(fieldP, keyName[4] , true);
break;
case keyRockerCenter:
SetFieldTextFromStr(fieldP, keyName[0] , true);
break;
}
//
// Key state section
//
// Up
fieldP = FrmGetPtr(frmP, MainUpField);
if(chr == vchrPageUp)
{
if (eType == keyHoldEvent
|| (eType == keyDownEvent && (modifiers & autoRepeatKeyMask)))
SetFieldTextFromStr(fieldP, keyState[1], true);
else if (eType == keyDownEvent)
SetFieldTextFromStr(fieldP, keyState[0], true);
else if (eType == keyUpEvent)
SetFieldTextFromStr(fieldP, keyState[2], true);
}
else
SetFieldTextFromStr(fieldP, keyState[3], true);
// Down
fieldP = FrmGetPtr(frmP, MainDownField);
if(chr == vchrPageDown)
{
if (eType == keyHoldEvent
|| (eType == keyDownEvent && (modifiers & autoRepeatKeyMask)))
SetFieldTextFromStr(fieldP, keyState[1], true);
else if (eType == keyDownEvent)
SetFieldTextFromStr(fieldP, keyState[0], true);
else if (eType == keyUpEvent)
SetFieldTextFromStr(fieldP, keyState[2], true);
}
else
SetFieldTextFromStr(fieldP, keyState[3], true);
// Left
fieldP = FrmGetPtr(frmP, MainLeftField);
if(chr == vchrRockerLeft)
{
if (eType == keyHoldEvent
|| (eType == keyDownEvent && (modifiers & autoRepeatKeyMask)))
SetFieldTextFromStr(fieldP, keyState[1], true);
else if (eType == keyDownEvent)
SetFieldTextFromStr(fieldP, keyState[0], true);
else if (eType == keyUpEvent)
SetFieldTextFromStr(fieldP, keyState[2], true);
}
else
SetFieldTextFromStr(fieldP, keyState[3], true);
// Right
fieldP = FrmGetPtr(frmP, MainRightField);
if(chr == vchrRockerRight)
{
if (eType == keyHoldEvent
|| (eType == keyDownEvent && (modifiers & autoRepeatKeyMask)))
SetFieldTextFromStr(fieldP, keyState[1], true);
else if (eType == keyDownEvent)
SetFieldTextFromStr(fieldP, keyState[0], true);
else if (eType == keyUpEvent)
SetFieldTextFromStr(fieldP, keyState[2], true);
}
else
SetFieldTextFromStr(fieldP, keyState[3], true);
// Select
fieldP = FrmGetPtr(frmP, MainSelectField);
if(keyCode == vchrRockerCenter)
{
if (eType == keyHoldEvent
|| (eType == keyDownEvent && (modifiers & autoRepeatKeyMask)))
SetFieldTextFromStr(fieldP, keyState[1], true);
else if (eType == keyDownEvent)
SetFieldTextFromStr(fieldP, keyState[0], true);
else if (eType == keyUpEvent)
SetFieldTextFromStr(fieldP, keyState[2], true);
}
else
SetFieldTextFromStr(fieldP, keyState[3], true);
// Draw a line for the select button
WinDrawLine(76, 49, 105, 34);
return true;
}
static Boolean OldDisplayKeyState(FormType *frmP, EventType *eventP)
{
Boolean handled = false;
FieldType *fieldP = NULL;
ControlType *ctlP = NULL;
// Get the KeyEvent fields
WChar chr = eventP->data.keyDown.chr;
UInt16 keyCode = eventP->data.keyDown.keyCode;
UInt16 modifiers = eventP->data.keyDown.modifiers;
//
// Macro section
//
// Use macro to determine is a Select has been pressed
ctlP = FrmGetPtr(frmP, MainSelectCheckbox);
if(ctlP) CtlSetValue(ctlP, NavKeyPressed(eventP, Select)?true:false);
// Use macro to determine is a Up has been pressed
ctlP = FrmGetPtr(frmP, MainUpCheckbox);
if(ctlP) CtlSetValue(ctlP, NavKeyPressed(eventP, Up)?true:false);
// Use macro to determine is a Down has been pressed
ctlP = FrmGetPtr(frmP, MainDownCheckbox);
if(ctlP) CtlSetValue(ctlP, NavKeyPressed(eventP, Down)?true:false);
// Use macro to determine is a Right has been pressed
ctlP = FrmGetPtr(frmP, MainRightCheckbox);
if(ctlP) CtlSetValue(ctlP, NavKeyPressed(eventP, Right)?true:false);
// Use macro to determine is a Left has been pressed
ctlP = FrmGetPtr(frmP, MainLeftCheckbox);
if(ctlP) CtlSetValue(ctlP, NavKeyPressed(eventP, Left)?true:false);
//
// Chr section
//
fieldP = FrmGetPtr(frmP, MainChrField);
switch(chr)
{
case vchrPageUp:
SetFieldTextFromStr(fieldP, keyName[1] , true);
break;
case vchrPageDown:
SetFieldTextFromStr(fieldP, keyName[2] , true);
break;
case vchrNavChange:
if(keyCode & navBitRight)
SetFieldTextFromStr(fieldP, keyName[3] , true);
else if(keyCode & navBitLeft)
SetFieldTextFromStr(fieldP, keyName[4] , true);
else if(keyCode & navBitSelect)
SetFieldTextFromStr(fieldP, keyName[0] , true);
break;
}
//
// Key state section
//
// Up
fieldP = FrmGetPtr(frmP, MainUpField);
if( keyCode & navBitUp ) {
if( keyCode & navChangeUp )
SetFieldTextFromStr(fieldP, keyState[0], true); // Press
else
SetFieldTextFromStr(fieldP, keyState[1], true); // Repeat
} else {
if( keyCode & navChangeUp )
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 == vchrPageUp ) {
// if( modifiers & autoRepeatKeyMask )
// SetFieldTextFromStr(fieldP, keyState[1], true);
// else
// SetFieldTextFromStr(fieldP, keyState[0], true);
// } else {
// SetFieldTextFromStr(fieldP, keyState[2], true);
// }
////////////////////////////////////////////////////////////
// Down
fieldP = FrmGetPtr(frmP, MainDownField);
if( keyCode & navBitDown ) {
if( keyCode & navChangeDown )
SetFieldTextFromStr(fieldP, keyState[0], true); // Press
else
SetFieldTextFromStr(fieldP, keyState[1], true); // Repeat
} else {
if( keyCode & navChangeDown )
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 == vchrPageDown ) {
// if( modifiers & autoRepeatKeyMask )
// SetFieldTextFromStr(fieldP, keyState[1], true);
// else
// SetFieldTextFromStr(fieldP, keyState[0], true);
// } else {
// SetFieldTextFromStr(fieldP, keyState[2], true);
// }
////////////////////////////////////////////////////////////
// Left
fieldP = FrmGetPtr(frmP, MainLeftField);
if( keyCode & navBitLeft ) {
if( keyCode & navChangeLeft )
SetFieldTextFromStr(fieldP, keyState[0], true); // Press
else
SetFieldTextFromStr(fieldP, keyState[1], true); // Repeat
} else {
if( keyCode & navChangeLeft )
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 & navBitLeft)) {
// if( modifiers & autoRepeatKeyMask )
// SetFieldTextFromStr(fieldP, keyState[1], true);
// else
// SetFieldTextFromStr(fieldP, keyState[0], true);
// } else {
// SetFieldTextFromStr(fieldP, keyState[2], true);
// }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -