⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 testfiveway.c

📁 palm编程
💻 C
📖 第 1 页 / 共 2 页
字号:
/***********************************************************************
 *
 * 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 + -