📄 eqtapsmartchinese.cpp
字号:
}
if(m_pSentenceChinese->nUnifiedCandBegin==0)
{
return EFalse;
}
else
{
return ETrue;
}
}
TBool CeQTapSmartChinese::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 CeQTapSmartChinese::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 CeQTapSmartChinese::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 CeQTapSmartChinese::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 CeQTapSmartChinese::DrawPinYin(void) const
{
CWindowGc& gc = SystemGc();
int i;
TBuf<20> wordTemp;
TBuf<64> iCharacter;
i =0;
iCharacter.Zero();
if(m_bCurrentWordIsNull==CURRENT_WORD_NULL)
{
DrawWholeSentencePinyin();
}
else
{
while (m_pSentenceChinese->szCurWordPinyin[i] != NULL)
{
iCharacter.Append(m_pSentenceChinese->szCurWordPinyin[i]);
i++;
}
}
gc.SetPenColor(TEXTCOLOR);
const CFont* fontUsed = iEikonEnv->SymbolFont();
gc.UseFont(fontUsed);
gc.DrawText(iCharacter, TPoint(1, 29));
gc.DiscardFont();
}
int CeQTapSmartChinese:: DrawWholeSentencePinyin() const
{
int i,j,k;
char PinYinText[256];
TBuf<64> iCharacter;
CWindowGc& gc = SystemGc();
//没有拼音
if(m_pSentenceChinese->szDigi[0] ==0)
{
PinYinText[0] =0;
return 0;
}
j=0;
k=0;
for (i=0;i<m_pSentenceChinese->nCharacterNum ;i++)
{
while (j<=m_pSentenceChinese->byPinyinIndexForEachChar[i])
{
PinYinText[k]=m_pSentenceChinese->szPinyin [j];
j++;
k++;
}
PinYinText[k]='\'';
k++;
}
PinYinText[k-1]=0;
j = strlen(PinYinText)/28;
if (j!=0)
{
i = j*28;
while (*(PinYinText+i)!='\'')
{
i--;
if(i<0) break;
}
i++;
}
else
{
//return 0;
i=0;
}
while (PinYinText[i] != 0)
{
iCharacter.Append(*(PinYinText+i));
i++;
}
gc.SetPenColor(TEXTCOLOR);
const CFont* fontUsed = iEikonEnv->SymbolFont();
gc.UseFont(fontUsed);
gc.DrawText(iCharacter, TPoint(1, 29));
gc.DiscardFont();
}
TKeyResponse CeQTapSmartChinese::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 = EFalse;
m_bKeyMode = ENoMove;
}
return EKeyWasNotConsumed;
}
void CeQTapSmartChinese::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 CeQTapSmartChinese::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 CeQTapSmartChinese::GetSentence()
{
TBuf<64> iSentence;
iSentence.Zero();
iSentence.Format(_L("%s"),m_pSentenceChinese->szFakeResult);
return iSentence.Length();
}
TKeyResponse CeQTapSmartChinese::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 CeQTapSmartChinese::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 CeQTapSmartChinese::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 CeQTapSmartChinese::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 CeQTapSmartChinese::DoFunctionKeys(TInt keycode)
{
TKeyResponse response = EKeyWasNotConsumed;
switch(keycode)
{
case EKeyCBA1:
NEXTAP_AddDigi2Sentence(m_pSentenceChinese, m_pDictionaryChinese, '\'');
response = EKeyWasConsumed;
m_peQTapCtrl->FreshSCWindow ();
break;
case EKeyCBA2:
break;
case EKeyMenu:
break;
default:
break;
}
return response;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -