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

📄 eqtapstroke.cpp

📁 Symbian平台 数字键盘手机输入法源码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	if(UpisActive() ==TRUE)
	{
		DrawArrow(UP_ENABLE);
	}
	else
	{
		DrawArrow(UP_DISABLE);
	}
	
				

	if(DownisActive()  ==TRUE)
	{
		DrawArrow(DOWN_ENABLE);
	}
	else
	{
		DrawArrow(DOWN_DISABLE);
	}

}
TBool CeQTapStroke::UpisActive(void) const
{
	
	if (m_pSentenceChinese==NULL)
	{
		return EFalse;
	}
	if(m_pSentenceChinese->nUnifiedCandTotal==0)
	{
		return EFalse;
	}

	if(m_pSentenceChinese->nUnifiedCandBegin==0)  
	{
		return EFalse;
	}
    else
	{
		return ETrue;	
	}

}

TBool CeQTapStroke::DownisActive(void) const
{
#ifdef USE_UNIFIEDCAND
	if(m_pSentenceChinese->nUnifiedCandTotal==0)
	{
		return EFalse;
	}
	if(m_pSentenceChinese->nUnifiedCandBegin+m_pSentenceChinese->nUnifiedCandNum ==m_pSentenceChinese->nUnifiedCandTotal)  
	{
		return EFalse;
	}
    else
	{
		return ETrue;	
	}
#else
	if(m_pSentenceChinese->nCandTotal==0)
	{
		return EFalse;
	}
	if(m_pSentenceChinese->nCandBegin+m_pSentenceChinese->nCandNum ==m_pSentenceChinese->nCandTotal)  
	{
		return EFalse;
	}
    else
	{
		return ETrue;	
	}
#endif

}
void CeQTapStroke::DrawSentence(int Style)  const
{
	
	CWindowGc& gc = SystemGc();
	TBuf<32>	iWholeSentence;
	TBuf<5>     signalWord;
	int			sentencePos;

	
    iWholeSentence.Zero();
	iWholeSentence.Format(_L("%s"),m_pSentenceChinese->szFakeResult);
	
	if (m_bKeyMode == EMoveLRUD)
	{
		gc.SetPenColor(TEXTCOLOR);
	}
	else
	{
		gc.SetPenColor(DISABLETEXTCOLOR);
	}
	const CFont* fontUsed = iEikonEnv->SymbolFont();
	gc.UseFont(fontUsed);
	gc.DrawText(iWholeSentence, TPoint(1, 14));

	//gc.DrawText(iDefault, TPoint(1, 14));
	
	if(m_bKeyMode == EMoveLRUD)  //此时需要画高亮的字
	{
		gc.SetPenColor(HIGHLIGHTTEXTCOLOR);
		signalWord.Zero();
		sentencePos = m_pSentenceChinese->nActivePreWordCharNo*12+1;
		signalWord.Append(iWholeSentence.Mid(m_pSentenceChinese->nActivePreWordCharNo,1));
		gc.DrawText(signalWord, TPoint(sentencePos, 14));
	}
	gc.DiscardFont();

}
void CeQTapStroke::DrawCand() const
{
	CWindowGc& gc = SystemGc();
	TInt len,i;
	TBuf<16> wordTemp;

/*
	if(m_bCurrentWordIsNull==CURRENT_WORD_NULL && m_bKeyMode == ENoMove)
	{
		return ;
	}
*/

	const CFont* fontUsed = iEikonEnv->SymbolFont();
	gc.UseFont(fontUsed);
	len=0;
#ifdef USE_UNIFIEDCAND
	for( i=0; i < m_pSentenceChinese->nUnifiedCandNum; i++)
#else
	for( i=0; i < m_pSentenceChinese->nCandNum; i++)
#endif
	{
						
		wordTemp.Zero();
		wordTemp.Append('8');
		len = len + fontUsed->TextWidthInPixels(wordTemp);
	
		gc.SetPenColor(TEXTCOLOR);
		wordTemp.Zero();
#ifdef USE_UNIFIEDCAND
		wordTemp.Format(_L("%s "),m_pSentenceChinese->pszUnifiedCand[i]);
#else
		wordTemp.Format(_L("%s "),m_pSentenceChinese->pszCand[i]);
#endif
		gc.DrawText(wordTemp,TPoint(len,43));
		len = len + fontUsed->TextWidthInPixels(wordTemp);
	}
	gc.DiscardFont();

}
void CeQTapStroke::DrawCandWithNumber() const
{
	
	
	CWindowGc& gc = SystemGc();
	TInt len,i;
	TBuf<16> wordTemp;
	
	char *Number[]={
					"7",
					"8",
					"9",
					"*",
					"0",
					"#"
	};
	
	const CFont* fontUsed = iEikonEnv->SymbolFont();
	gc.UseFont(fontUsed);
	len=0;
#ifdef USE_UNIFIEDCAND
	for( i=0; i < m_pSentenceChinese->nUnifiedCandNum; i++)
#else
	for( i=0; i < m_pSentenceChinese->nCandNum; i++)
#endif
	{
						
		wordTemp.Zero();
		wordTemp.Append(Number[i][0]);
		//wordTemp.Append(32);
		gc.SetPenColor(CANDCOLOR);
		gc.DrawText(wordTemp,TPoint(len,43));
		len = len + fontUsed->TextWidthInPixels(wordTemp);
			
		gc.SetPenColor(TEXTCOLOR);
		wordTemp.Zero();
#ifdef USE_UNIFIEDCAND
		wordTemp.Format(_L("%s "),m_pSentenceChinese->pszUnifiedCand[i]);
#else
		wordTemp.Format(_L("%s "),m_pSentenceChinese->pszCand[i]);
#endif
		gc.DrawText(wordTemp,TPoint(len,43));
		len = len + fontUsed->TextWidthInPixels(wordTemp);
	}
	gc.DiscardFont();
}
void CeQTapStroke::DrawPinYin(void)  const
{

	CWindowGc& gc = SystemGc();
	int i;
	TBuf<20> wordTemp;
	TBuf<64>	iCharacter;

	TUint8 heng[4] ={0x00,0x4E,0x00,0x00};                    //横
	TUint8 shu [4] ={0x28,0x4E,0x00,0x00};                    //竖
	TUint8 pie [4] ={0x3F,0x4E,0x00,0x00};                    //撇
	TUint8 na  [4] ={0xFD,0x30,0x00,0x00};                    //捺
	TUint8 zhe [4] ={0x59,0x4E,0x00,0x00};                    //折

	TUint8 *Stroke[] ={heng,shu,pie,na,zhe};


	i =0;

	iCharacter.Zero();
	//笔画和拼音分开,因为笔画输入的时候只要显示笔画轨迹即可 -史敬威
	i = 0;
	while (m_pSentenceChinese->szDigi[i]!=0)
	{
		wordTemp.Format (_L("%s"),Stroke[m_pSentenceChinese->szDigi[i]-'1']);
		iCharacter.Append(wordTemp);
		i++;
	}
	

	gc.SetPenColor(TEXTCOLOR);
	const CFont* fontUsed = iEikonEnv->SymbolFont();
	gc.UseFont(fontUsed);
	gc.DrawText(iCharacter, TPoint(1, 29));
	gc.DiscardFont();

}
TKeyResponse CeQTapStroke::OfferKeyEventInOKModeL(TUint keyCode)
{

	int Select=-2;
	TBuf<32> iWholeSentence;

	switch (keyCode)
	{
		case '7':
			Select = 0;
			break;
		case '8':
			Select = 1;
			break;
		case '9':
			Select = 2;
			break;
		case '*':
			Select = 3;
			break;
		case '0':
			Select = 4;
			break;
		case '#':
			Select = 5;
			break;
		case -1:
			Select = -1;
			break;
	}

	if(Select==-2)
	{
		return EKeyWasConsumed;
	}
	if(Select==-1)
	{
//		m_pSentenceChinese->szDigi[0]=0;
		SendSelectToClient(0, FALSE);
		m_bKeyMode=ENoMove;
		return EKeyWasConsumed;
	}

	if (m_bKeyMode == EMoveLRUD)            // 移动状态只选择
	{
		//这时只是更换词语
#ifdef USE_UNIFIEDCAND
		NEXTAP_ChooseCandPredict(m_pSentenceChinese, m_pDictionaryChinese,Select, PATTREE_UNIFIED_CAND, FALSE ,0);
#else
		NEXTAP_ChooseCandPredict(m_pSentenceChinese, m_pDictionaryChinese,Select, PATTREE_CAND, FALSE ,0);
#endif
		if(m_pSentenceChinese->nActivePreWordCharNo +1==m_pSentenceChinese->nCharacterNum)
		{
		   //已经是最后一个字,移到第一个 
		   while (NEXTAP_MoveState(m_pSentenceChinese,m_pDictionaryChinese,PATTREE_MOVESTATE_LEFT)>0);
		}
		else
		{
			NEXTAP_MoveState(m_pSentenceChinese,m_pDictionaryChinese,PATTREE_MOVESTATE_RIGHT);
		 }
		 m_peQTapCtrl->FreshSCWindow();
	}
	else                                   //直接提交选择
	{
		SendSelectToClient(Select, TRUE);
		m_bSelectMode = ETrue;
		m_bKeyMode = ENoMove;
			
	}

	return EKeyWasNotConsumed;
}
void CeQTapStroke::SendSelectToClient(TInt Select, TBool bChangeLast)
{
		
		int nLen;
		int i;
		TBuf<32> iWholeSentence;
		int nsel = Select;

		if(m_pSentenceChinese->szDigi[0]==0)
		{
#ifdef USE_UNIFIEDCAND
			iWholeSentence.Format(_L("%s"),m_pSentenceChinese->pszUnifiedCand[Select]);
#else
			iWholeSentence.Format(_L("%s"),m_pSentenceChinese->pszCand[Select]);
#endif 
		}
		else
		{
			if(bChangeLast==TRUE)
			{
#ifdef USE_UNIFIEDCAND
				NEXTAP_ChooseCandPredict(m_pSentenceChinese, m_pDictionaryChinese,Select, PATTREE_UNIFIED_CAND, FALSE ,0);
#else
				NEXTAP_ChooseCandPredict(m_pSentenceChinese, m_pDictionaryChinese,Select, PATTREE_CAND, FALSE ,0);
#endif
			}
			iWholeSentence.Format(_L("%s"),m_pSentenceChinese->szFakeResult);
			if(bChangeLast==FALSE)
			{
				nsel =-1;
			}
		}
		
		m_peQTapCtrl->UpdateInlineEditL(iWholeSentence,iWholeSentence.Length());
		m_peQTapCtrl->CommitInlineEdit(ETrue);	
					
		//调整词频
		if(nsel !=-1)
		{
#ifdef USE_UNIFIEDCAND
			NEXTAP_ChooseCandPredict(m_pSentenceChinese, m_pDictionaryChinese,Select, PATTREE_UNIFIED_CAND, TRUE ,0);
#else
			NEXTAP_ChooseCandPredict(m_pSentenceChinese, m_pDictionaryChinese,Select, PATTREE_CAND, TRUE ,0);
#endif
		}
		NEXTAP_AddSentence2UserDic(m_pDictionaryChinese, m_pSentenceChinese,nsel);
		nLen = NEXTAP_GetLastWordLen(m_pSentenceChinese, m_pDictionaryChinese ); 
		i=0;
		while (m_pSentenceChinese->szFakeResult[i]!=0)
		{
			m_pSentenceChinese->szAllInput[i]=m_pSentenceChinese->szFakeResult[i];
			i++;
		}
		m_pSentenceChinese->szAllInput[i]=0;
		m_pSentenceChinese->nNextPredictCharNumber = nLen; 
		NEXTAP_ResetSentence(m_pSentenceChinese, m_pDictionaryChinese, m_pSentenceChinese->IMMethod, MAXCAND , MAXCAND  );
		ResetValue();

}
TKeyResponse  CeQTapStroke::OnKeyMoveLeft(const TKeyEvent& aKeyEvent)
{

		
	//如果输入法没有工作,即窗体不是弹出状态。则将左键交给系统处理
	if((m_pSentenceChinese->szDigi[0]==0)||(m_peQTapCtrl->GetWindowVisibleState()==FALSE))
	{
		return  EKeyWasNotConsumed;
	}
	
		
	if (GetSentence()==0)
	{
		return  EKeyWasConsumed;
	}
	if(NEXTAP_MoveState(m_pSentenceChinese,m_pDictionaryChinese,PATTREE_MOVESTATE_LEFT)==-1)
    {
		//已经是开始的第一个字,则跳到最后一个字
		while(NEXTAP_MoveState(m_pSentenceChinese,m_pDictionaryChinese,PATTREE_MOVESTATE_RIGHT)>0);
		NEXTAP_MoveState(m_pSentenceChinese,m_pDictionaryChinese,PATTREE_MOVESTATE_LEFT);
    }
	m_bKeyMode = EMoveLRUD;
	m_bSelectMode=TRUE;

	m_peQTapCtrl->FreshSCWindow();
	return EKeyWasConsumed;
}
int  CeQTapStroke::GetSentence()
{
	TBuf<64>	iSentence;
	
	iSentence.Zero();
	iSentence.Format(_L("%s"),m_pSentenceChinese->szFakeResult);
	return iSentence.Length();

}  
TKeyResponse  CeQTapStroke::OnKeyMoveRight(const TKeyEvent& aKeyEvent)
{
		
	if((m_pSentenceChinese->szDigi[0]==0)||(m_peQTapCtrl->GetWindowVisibleState()==FALSE))
	{
		return  EKeyWasNotConsumed;
	}

	 if (GetSentence()==0)
	 {
		 return  EKeyWasConsumed;
	 }
	 if(m_pSentenceChinese->nActivePreWordCharNo +1==m_pSentenceChinese->nCharacterNum)
	 {
			//已经是最后一个字,则跳到第一个字
			while(NEXTAP_MoveState(m_pSentenceChinese,m_pDictionaryChinese,PATTREE_MOVESTATE_LEFT)>0);
	 } 
	 else
	 {
			NEXTAP_MoveState(m_pSentenceChinese,m_pDictionaryChinese,PATTREE_MOVESTATE_RIGHT);
	 }
	m_bKeyMode = EMoveLRUD;
	m_bSelectMode=TRUE;

	m_peQTapCtrl->FreshSCWindow();
	return EKeyWasConsumed;
}
TKeyResponse  CeQTapStroke::OnKeyMoveDown(const TKeyEvent& aKeyEvent)
{

	if(m_peQTapCtrl->GetWindowVisibleState()==FALSE)
	{
		return  EKeyWasNotConsumed;
	}

#ifdef USE_UNIFIEDCAND
	NEXTAP_MoveCandPredict(m_pSentenceChinese,m_pDictionaryChinese,PATTREE_MOVESTATE_RIGHT, PATTREE_UNIFIED_CAND);
#else
	NEXTAP_MoveCandPredict(m_pSentenceChinese,m_pDictionaryChinese,PATTREE_MOVESTATE_RIGHT, PATTREE_CAND);
#endif
	m_peQTapCtrl->FreshSCWindow();

	m_bSelectMode=TRUE;
	return EKeyWasConsumed;
}


TKeyResponse  CeQTapStroke::OnKeyMoveUp(const TKeyEvent& aKeyEvent)
{

	if(m_peQTapCtrl->GetWindowVisibleState()==FALSE)
	{
		return  EKeyWasNotConsumed;
	}

#ifdef USE_UNIFIEDCAND
	NEXTAP_MoveCandPredict(m_pSentenceChinese,m_pDictionaryChinese,PATTREE_MOVESTATE_LEFT, PATTREE_UNIFIED_CAND);
#else
	NEXTAP_MoveCandPredict(m_pSentenceChinese,m_pDictionaryChinese,PATTREE_MOVESTATE_LEFT, PATTREE_CAND);
#endif
	m_peQTapCtrl->FreshSCWindow();

	m_bSelectMode=TRUE;
	return EKeyWasConsumed;

}
void CeQTapStroke::OnLostFocus()
{
	if(m_pSentenceChinese==NULL)
	{
		return;
	}
	if(m_pSentenceChinese->szDigi[0]!=0)
	{
		m_pSentenceChinese->szDigi[0]=0;
		NEXTAP_ResetSentence(m_pSentenceChinese, m_pDictionaryChinese, m_pSentenceChinese->IMMethod, MAXCAND , MAXCAND  );
		ResetValue();
		m_peQTapCtrl->CommitInlineEdit(TRUE);
	}
}
TKeyResponse CeQTapStroke::DoFunctionKeys(TInt keycode)
{
	TKeyResponse response = EKeyWasNotConsumed;
	switch(keycode)
	{
	case EKeyCBA1:
		NEXTAP_AddDigi2Sentence(m_pSentenceChinese, m_pDictionaryChinese, '\'');
		response = EKeyWasConsumed;
		m_peQTapCtrl->FreshSTKWindow ();
		break;
	case EKeyCBA2:
		break;
	case EKeyMenu:
		break;
	default:
		break;
	}
	return response;
}

⌨️ 快捷键说明

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