📄 eqtapstroke.cpp
字号:
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 + -