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

📄 multitapengine.cpp

📁 Fep Example in Symbian
💻 CPP
字号:
#include "multitapengine.h"
#include "multitaptimer.h"

const TInt KMaxNumOfKeys = 10;
const TInt KMultiTapTimeout = 1000000; // 1.0s

struct TKeymap 
	{
	char*	iKeyString;
	TInt	iSize;
	};

const struct TKeymap KKeymap[KMaxNumOfKeys] = {
	{ " 0",		2 }, 
	{ "1+#.",	4 },
	{ "abc2",	4 },
	{ "def3",	4 },
	{ "ghi4",	4 },
	{ "jkl5",	4 },
	{ "mno6",	4 },
	{ "pqrs7",	5 },
	{ "tuv8",	4 },
	{ "wxyz9",	5 }
	};

//////////////////////////////////////////////////////////////////////
//
// Class CExampleFepMultiTapEngine
//
//////////////////////////////////////////////////////////////////////
CExampleFepMultiTapEngine* CExampleFepMultiTapEngine::NewL(CExampleFepControl& aControl)
	{
	CExampleFepMultiTapEngine* self = new(ELeave)CExampleFepMultiTapEngine(aControl);
	CleanupStack::PushL(self);
	self->ConstructL();
	CleanupStack::Pop();	// self
	return self;
	}

CExampleFepMultiTapEngine::CExampleFepMultiTapEngine(CExampleFepControl& aControl)
	: iFepControl(aControl),
	iBuffer(KNullDesC),
	iKeyPos(0),
	iPreviousMultiTapKeyCode(EKeyNull)
	{
	}

void CExampleFepMultiTapEngine::ConstructL()
	{
	TCallBack timerTimeout(TimerTimeout, this);
	iMultiTapTimer = CExampleFepMultiTapTimer::NewL(timerTimeout, KMultiTapTimeout);
	}

CExampleFepMultiTapEngine::~CExampleFepMultiTapEngine()
	{
	if(iMultiTapTimer)
		delete iMultiTapTimer;
	}

TInt CExampleFepMultiTapEngine::TimerTimeout(TAny* aPtr)
	{
	return REINTERPRET_CAST(CExampleFepMultiTapEngine*, aPtr)->DoTimerTimeout();
	}

TInt CExampleFepMultiTapEngine::DoTimerTimeout()
	{
	iMultiTapTimer->DoCancel();
	iPreviousMultiTapKeyCode = EKeyNull;
	return ETrue;
	}

TPtrC CExampleFepMultiTapEngine::AppendCharacter(TUint aKeyCode)
	{
	TInt offset = aKeyCode - '0';

	if (iMultiTapTimer->IsActive() && aKeyCode == iPreviousMultiTapKeyCode)
		{
		// Delete the previous letter in iBuffer
		DeleteCharacter();

		iKeyPos++;
		if ( iKeyPos >= KKeymap[offset].iSize )
			iKeyPos = 0;
		}
	else
		iKeyPos = 0;

	char ch = KKeymap[offset].iKeyString[iKeyPos];
	TBuf<1> buffer = KNullDesC();

	buffer.Append(ch);
	iBuffer += buffer;

	iPreviousMultiTapKeyCode = aKeyCode;

	// Start the multitap timer
	iMultiTapTimer->IssueRequest();

	return iBuffer.Ptr();
}

TPtrC CExampleFepMultiTapEngine::DeleteCharacter(void)
	{
	TInt len = iBuffer.Length();
	iBuffer = iBuffer.Left (len - 1);
	return iBuffer.Ptr();
	}

void CExampleFepMultiTapEngine::ClearBuffer(void)
	{
	iBuffer.SetLength(0);
	}

TPtrC CExampleFepMultiTapEngine::Buffer(void)
	{
	return iBuffer.Ptr();
	}

TBool CExampleFepMultiTapEngine::IsActive()
	{
	return iMultiTapTimer->IsActive();	
	}

void CExampleFepMultiTapEngine::Cancel()
	{
	iMultiTapTimer->Cancel();	
	}
// end of file

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -