--- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonCtrlPinyinPopup.cpp Fri Jul 23 16:49:01 2010 +0800
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1271 +0,0 @@
-/*
-* Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0""
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:
-* Provides the CAknFepUICtrlPinyinPopup methods.
-*
-*/
-
-
-
-
-
-
-
-
-
-
-
-
-#include <gdi.h>
-#include <eiklabel.h>
-#include <AknsDrawUtils.h>
-#include <AknsUtils.h>
-#include <AknIconUtils.h>
-
-#include <AknsFrameBackgroundControlContext.h>
-#include <aknfepuictrls.mbg>
-
-#include "AknFepUiInterfacePanic.h"
-#include "AknFepUIAvkonCtrlPinyinPopup.h"
-#include "AknFepUIAvkonCtrlInputPane.h"
-#include "aknfepchineseuidataconv.h"
-#include "aknfepuilayoutdatamgr.h"
-#include <skinlayout.cdl.h>
-
-#include "data_caging_path_literals.hrh"
-
-_LIT(KFepUiControlsBitmapFile, "aknfepuictrls.mbm");
-
-CAknFepUICtrlPinyinPopup* CAknFepUICtrlPinyinPopup::NewL(RWindow& aParent, CAknFepUiLayoutDataMgr* aLafDataMgr )
- {
- CAknFepUICtrlPinyinPopup* self = new(ELeave) CAknFepUICtrlPinyinPopup( aLafDataMgr );
- CleanupStack::PushL(self);
- self->ConstructL(aParent);
- CleanupStack::Pop();
- return self;
- }
-
-CAknFepUICtrlPinyinPopup::~CAknFepUICtrlPinyinPopup()
- {
- iInputPaneArray.ResetAndDestroy();
- iPages.Reset();
- delete iSpellingArray;
- delete iSpellingIndexArray;
- delete iNaviArrowBitmapLeft;
- delete iNaviArrowBitmapLeftMask;
- delete iNaviArrowBitmapRight;
- delete iNaviArrowBitmapRightMask;
- delete iBgContext;
- delete iKeystrokeArray;
- delete iInEffectKeystrokeArray;
- delete iShowKeystrokeArray;
- delete iOptimizeSpelling;
- delete iTempSpelling;
- delete iChooseChineseCharacterArray;
- delete iChooseChineseCharacterArrayKeystroke;
-
- delete iKeystrokeArrayForStroke;
- delete iInEffectKeystrokeArrayForStroke;
- delete iShowKeystrokeArrayForStroke;
- delete iChooseChineseCharacterArrayForStroke;
- delete iChooseChineseCharacterArrayKeystrokeForStroke;
-
- delete iZhuyinSymbols;
- delete iZhuyinShowSymbols;
- delete iFirstValidZhuyinGrp;
- delete iChineseCharsDisped;
- delete iZhuyinSymbolsForChineseCharsDisped;
- }
-
-void CAknFepUICtrlPinyinPopup::SetSizeChangedObserver(
- MAknFepUICtrlPinyinPopupSizeChangedObserver* aObserver)
- {
- iSizeChangedObserver = aObserver;
- }
-
-TBool CAknFepUICtrlPinyinPopup::IsEnabled() const
- {
- return iEnabled;
- }
-
-void CAknFepUICtrlPinyinPopup::Enable(TBool aEnable)
- {
- // fix the refresh bug.
- TBool redraw = ( aEnable || iEnabled != aEnable );
-
- iEnabled = aEnable;
- if(aEnable)
- {
- Window().SetOrdinalPosition(0, ECoeWinPriorityFep); // right at the front
- }
-
- iSizeChangedObserver->SelectionPopupEnabled(aEnable);
- if (!aEnable)
- {
- for(TInt i = 0; i < iVisibleCount; i++)
- {
- CAknFepUICtrlInputPane* inputPane = iInputPaneArray[i];
- inputPane->SetText(KNullDesC);
- }
- iVisibleCount = 0;
- }
- MakeVisible(aEnable);
-
- // fix the refresh bug.
- if( redraw )
- {
- DrawDeferred();
- }
- }
-
-void CAknFepUICtrlPinyinPopup::SetVisibleSelectionCount(TInt aCount)
- {
- __ASSERT_DEBUG(aCount <= EMaxPhraseCandidate, AknFepUiInterfacePanic(EAknFepUiInterfacePanicNewVisibleCountExceedsRange));
- __ASSERT_DEBUG(aCount >= 1, AknFepUiInterfacePanic(EAknFepUiInterfacePanicNewVisibleCountExceedsRange));
-
- if(iVisibleCount != aCount)
- {
- iVisibleCount = aCount;
- TInt oldSelected = iSelected;
-
- if (iVisibleCount > 1) //the layout does not support a visible count of 1
- {
- if(aCount - 1 < oldSelected)
- {
- // automatically move the selection to be at the end of the new
- // candidate buffer, by forcing the one that will become the new
- // highlighted one to be layout out highlighted before we are resized
- // (note that briefly, there will be two items highlighted, but at least
- // there will be no flicker)
- iSelected = aCount - 1;
- LayoutInputPane(aCount - 1);
- }
-
- // note that the old highlighted one isn't shown any more, so we don't need to lay it out again to hide its highlight
- SetInputPaneVisibility();
- iSizeChangedObserver->SelectionPopupSizeChanged(iVisibleCount);
- DrawDeferred();
- }
- }
- }
-
-void CAknFepUICtrlPinyinPopup::SetVisibleCount(TInt aCount)
- {
- if(iVisibleCount != aCount)
- {
- iVisibleCount = aCount;
- }
- }
-
-TInt CAknFepUICtrlPinyinPopup::VisibleSelectionCount() const
- {
- return iVisibleCount;
- }
-
-CDesCArrayFlat* CAknFepUICtrlPinyinPopup::PhoneticSpellingArray(void)
- {
- return iSpellingArray;
- }
-
-CDesCArrayFlat* CAknFepUICtrlPinyinPopup::PhoneticSpellingIndexArray(void)
- {
- return iSpellingIndexArray;
- }
-
-void CAknFepUICtrlPinyinPopup::SplitPhraseSpellingIntoPages(void)
- {
- iPages.Reset();
- TPage curPage;
- TInt spellingNum = iSpellingArray->Count();
- if(spellingNum == 0)
- {
- iVisibleCount = 0;
- return;
- }
-
- TInt index = 0;
- TBool beAppend = EFalse;
-
- while(index < spellingNum)
- {
- beAppend = EFalse;
- curPage.iStartIndex = index;
- curPage.iEndIndex = index;
-
- TInt spellingLeftNum = spellingNum - index > EMaxPhraseCandidate? EMaxPhraseCandidate:spellingNum - index;
- for(TInt j = 0; j < spellingLeftNum; j ++)
- {
- iInputPaneArray[j]->SetText((*iSpellingArray)[index + j]);
- }
-
- TAknWindowLineLayout layoutEntryItem =
- CAknFepChineseUIDataConv::AnyToWindowLine( iLafDataMgr->RequestData(ELayoutEntryItem));
- TAknTextLineLayout entryTextLine =
- CAknFepChineseUIDataConv::AnyToTextLine( iLafDataMgr->RequestData(EEntryTextLayout));
- TInt layoutLinePrevLeft = 0;
- TInt layoutLinePrevWidth = 0;
-
- TAknLayoutRect layoutRectEntryItem;
- layoutRectEntryItem.LayoutRect(Rect(),layoutEntryItem);
- TRect rectEntryItem = layoutRectEntryItem.Rect();
-
- TAknLayoutText layoutText;
- layoutText.LayoutText(rectEntryItem,entryTextLine);
- TRect rectText = layoutText.TextRect();
-
- TInt rightLimit = iIndiFepArrowRight.Rect().iTl.iX;
- // value is 3 for 176*208 resolution
- TInt distance = rectText.iTl.iX - rectEntryItem.iTl.iX + rectEntryItem.iBr.iX - rectText.iBr.iX;
-
- for(TInt i = 0;i < spellingLeftNum;i ++)
- {
- if(i > 0)
- {
- rectText.iTl.iX = TInt16(layoutLinePrevLeft + layoutLinePrevWidth);
- }
- rectText.SetWidth(iInputPaneArray[i]->LabelTextWidthInPixels() + distance);
-
- // if label's layout out of screen, forms another display page
- // > change >= change for phrase creation.
- if((rectText.iTl.iX >= rightLimit) || ((rectText.iTl.iX + rectText.Width()) >= rightLimit))
- {
- curPage.iEndIndex = index - 1;
- iPages.Append(curPage);
- beAppend = ETrue;
- break;
- }
-
- layoutLinePrevLeft = rectText.iTl.iX;
- layoutLinePrevWidth = rectText.Width();
-
- index ++;
-
- if( i == EMaxPhraseCandidate -1 )
- {
- curPage.iEndIndex = index - 1;
- iPages.Append(curPage);
- beAppend = ETrue;
- break;
- }
-
- }
- }
-
- if( beAppend == EFalse)
- {
- curPage.iEndIndex = index - 1;
- iPages.Append(curPage);
- }
- iCurDisplayPage = 0;
- SetVisibleSelectionCount(iPages[0].iEndIndex - iPages[0].iStartIndex + 1);
- }
-
-void CAknFepUICtrlPinyinPopup::SplitSpellingIntoPages(TInt aCount)
- {
- iPages.Reset();
- TPage curPage;
- if(aCount == 0)
- {
- return;
- }
- TInt index = 0;
- TBool beAppend = EFalse;
-
- while(index < aCount)
- {
- beAppend = EFalse;
- curPage.iStartIndex = index;
- curPage.iEndIndex = index;
- TInt spellingLeftNum = aCount - index > EMaxCandidates? EMaxCandidates:aCount - index;
-
- TAknWindowLineLayout layoutEntryItem =
- CAknFepChineseUIDataConv::AnyToWindowLine( iLafDataMgr->RequestData(ELayoutEntryItem));
- TAknTextLineLayout entryTextLine =
- CAknFepChineseUIDataConv::AnyToTextLine( iLafDataMgr->RequestData(EEntryTextLayout));
- TInt layoutLinePrevLeft = 0;
- TInt layoutLinePrevWidth = 0;
-
- TAknLayoutRect layoutRectEntryItem;
- layoutRectEntryItem.LayoutRect(Rect(),layoutEntryItem);
- TRect rectEntryItem = layoutRectEntryItem.Rect();
-
- TAknLayoutText layoutText;
- layoutText.LayoutText(rectEntryItem,entryTextLine);
- TRect rectText = layoutText.TextRect();
-
- TInt rightLimit = rectEntryItem.iTl.iX + rectEntryItem.Width();
- // value is 3 for 176*208 resolution
- TInt distance = rectText.iTl.iX - rectEntryItem.iTl.iX + rectEntryItem.iBr.iX - rectText.iBr.iX;
- for(TInt i = 0;i < spellingLeftNum;i ++)
- {
- if(i > 0)
- {
- rectText.iTl.iX = TInt16(layoutLinePrevLeft + layoutLinePrevWidth);
- }
- rectText.SetWidth(iInputPaneArray[i]->LabelTextWidthInPixels() + distance);
-
- // if label's layout out of screen, forms another display page
- if((rectText.iTl.iX >= rightLimit) || ((rectText.iTl.iX + rectText.Width()) >= rightLimit))
- {
- curPage.iEndIndex = index - 1;
- iPages.Append(curPage);
- beAppend = ETrue;
- break;
- }
- layoutLinePrevLeft = rectText.iTl.iX;
- layoutLinePrevWidth = rectText.Width();
- index ++;
-
- if( i == EMaxPhraseCandidate -1 )
- {
- curPage.iEndIndex = index - 1;
- iPages.Append(curPage);
- beAppend = ETrue;
- break;
- }
-
- }
- }
-
- if(beAppend == EFalse)
- {
- curPage.iEndIndex = index - 1;
- iPages.Append(curPage);
- }
-
- iCurDisplayPage = 0;
- SetVisibleSelectionCount(iPages[0].iEndIndex - iPages[0].iStartIndex + 1);
- SelectIndex(0);
- }
-
-void CAknFepUICtrlPinyinPopup::SetDisplayPage(TInt aSelection)
- {
- if(aSelection >= iVisibleCount)
- {
- for(TInt i = 0 ; i < iPages.Count(); i ++)
- {
- if((aSelection >= iPages[i].iStartIndex) && (aSelection <= iPages[i].iEndIndex))
- {
- iCurDisplayPage = i;
- SetVisibleSelectionCount(iPages[i].iEndIndex - iPages[i].iStartIndex + 1);
- SelectIndex(aSelection - iPages[i].iStartIndex);
- break;
- }
- }
- }
- else
- {
- SelectIndex(aSelection);
- }
- UpdateInputPaneVisibility();
- }
-
-TInt CAknFepUICtrlPinyinPopup::CurrentPageStartIndex(void)
- {
- return iPages[iCurDisplayPage].iStartIndex;
- }
-
-CDesCArrayFlat* CAknFepUICtrlPinyinPopup::KeystrokeArray()
- {
- return iKeystrokeArray;
- }
-
-CDesCArrayFlat* CAknFepUICtrlPinyinPopup::InEffectKeystrokeArray()
- {
- return iInEffectKeystrokeArray;
- }
-
-CDesCArrayFlat* CAknFepUICtrlPinyinPopup::ShowKeystrokeArray()
- {
- return iShowKeystrokeArray;
- }
-
-CDesCArrayFlat* CAknFepUICtrlPinyinPopup::OptimizeSpelling()
- {
- return iOptimizeSpelling;
- }
-
-CDesCArrayFlat* CAknFepUICtrlPinyinPopup::TempSpelling()
- {
- return iTempSpelling;
- }
-
-CDesCArrayFlat* CAknFepUICtrlPinyinPopup::ChooseChineseCharacterArray()
- {
- return iChooseChineseCharacterArray;
- }
-
-CDesCArrayFlat* CAknFepUICtrlPinyinPopup::ChooseChineseCharacterArrayKeystroke()
- {
- return iChooseChineseCharacterArrayKeystroke;
- }
-
-TBool CAknFepUICtrlPinyinPopup::GetTonemarkState()
- {
- return iTonemarkState;
- }
-
-void CAknFepUICtrlPinyinPopup::SetTonemarkState( TBool aState )
- {
- iTonemarkState = aState;
- }
-
-void CAknFepUICtrlPinyinPopup::UpdateInputPaneVisibility()
- {
- TInt number = 0;
- if(iPages.Count() != 0)
- {
- number = iPages[iCurDisplayPage].iEndIndex - iPages[iCurDisplayPage].iStartIndex + 1;
- }
- if(number > iVisibleCount)
- {
- number = iVisibleCount;
- }
- for(TInt i = 0; i < EMaxPhraseCandidate; i++)
- {
- CAknFepUICtrlInputPane* inputPane = iInputPaneArray[i];
-
- if(i < number)
- {
- inputPane->MakeVisible(ETrue);
- }
- else
- {
- inputPane->MakeVisible(EFalse);
- }
- }
- }
-
-TBool CAknFepUICtrlPinyinPopup::SetItemText(TInt aIndex, const TDesC& aText)
- {
- __ASSERT_DEBUG(aIndex < EMaxPhraseCandidate, AknFepUiInterfacePanic(EAknFepUiInterfacePanicAttemptedSetItemTextOutsideMaxCandidates));
- __ASSERT_DEBUG(aIndex >= 0, AknFepUiInterfacePanic(EAknFepUiInterfacePanicAttemptedSetItemTextOutsideMaxCandidates));
-
- if(aIndex > iVisibleCount)
- {
- return EFalse;
- }
-
- CAknFepUICtrlInputPane* inputPane = iInputPaneArray[aIndex];
- inputPane->SetText(aText);
- return ETrue;
- }
-
-TBool CAknFepUICtrlPinyinPopup::SetPhraseItemTexts()
- {
- for(TInt i = 0; i < iVisibleCount; i ++)
- {
- TPtrC spelling = (*iSpellingArray)[i + iPages[iCurDisplayPage].iStartIndex]; // our index is zero based, engine index is one based
- SetItemText(i, spelling);
- }
- return ETrue;
- }
-
-TBool CAknFepUICtrlPinyinPopup::GetItemText(TInt aIndex, TDes& aText) const
- {
- __ASSERT_DEBUG(aIndex < EMaxCandidates, AknFepUiInterfacePanic(EAknFepUiInterfacePanicAttemptedSetItemTextOutsideMaxCandidates));
- __ASSERT_DEBUG(aIndex >= 0, AknFepUiInterfacePanic(EAknFepUiInterfacePanicAttemptedSetItemTextOutsideMaxCandidates));
-
- const CAknFepUICtrlInputPane* inputPane = iInputPaneArray[aIndex];
- inputPane->GetText(aText);
-
- return ETrue;
- }
-
-void CAknFepUICtrlPinyinPopup::SetToneMark(const TDesC& aToneMark)
- {
- for(TInt i = 0; i < EMaxPhraseCandidate; i++)
- {
- CAknFepUICtrlInputPane* inputPane = iInputPaneArray[i];
- inputPane->SetToneMark(aToneMark);
- }
- }
-
-void CAknFepUICtrlPinyinPopup::SetToneMark(TInt aIndex, const TDesC& aToneMark)
- {
- CAknFepUICtrlInputPane* inputPane = iInputPaneArray[aIndex];
- inputPane->SetToneMark(aToneMark);
-
- LayoutInputPane(aIndex);
- }
-
-void CAknFepUICtrlPinyinPopup::GetToneMark(TInt aIndex, TDes& aToneMark) const
- {
- const CAknFepUICtrlInputPane* inputPane = iInputPaneArray[aIndex];
- inputPane->GetToneMark(aToneMark);
- }
-
-void CAknFepUICtrlPinyinPopup::SetItemToneMarkValidity(TInt aIndex, TBool aValid)
- {
- CAknFepUICtrlInputPane* inputPane = iInputPaneArray[aIndex];
- inputPane->SetToneMarkValidity(aValid);
- }
-
-
-
-TBool CAknFepUICtrlPinyinPopup::SelectNextPhrase()
- {
- TInt maxIndex = iVisibleCount - 1;
- TInt newIndex = iSelected;
-
- if((iSelected == maxIndex) )
- {
- // is last page
- if(iCurDisplayPage == (iPages.Count() - 1))
- {
- iCurDisplayPage = 0;
- }
- else
- {
- iCurDisplayPage ++;
- }
- SetVisibleSelectionCount(iPages[iCurDisplayPage].iEndIndex - iPages[iCurDisplayPage].iStartIndex + 1);
- SetFlag(EDispPageChanged);
- newIndex = 0;
- }
- else if(iSelected < maxIndex)
- {
- newIndex ++;
- }
- else if(iSelected > maxIndex)
- {
- return EFalse;
- }
- return SelectIndex(newIndex);
- }
-
-
-TBool CAknFepUICtrlPinyinPopup::SelectPrevPhrase()
- {
- TInt maxIndex = iVisibleCount - 1;
- TInt newIndex = iSelected;
- if(iSelected == 0)
- {
- // first page
- if(iCurDisplayPage == 0)
- {
- iCurDisplayPage = iPages.Count() - 1;
- }
- else
- {
- iCurDisplayPage --;
- }
- // loop to the end
- SetVisibleSelectionCount(iPages[iCurDisplayPage].iEndIndex - iPages[iCurDisplayPage].iStartIndex + 1);
- SetFlag(EDispPageChanged);
- newIndex = iVisibleCount - 1 ;
- }
- else if(iSelected > 0)
- {
- newIndex--;
- }
- else if(iSelected > maxIndex)
- {
- return EFalse;
- }
- return SelectIndex(newIndex);
- }
-
-TBool CAknFepUICtrlPinyinPopup::SelectIndex(TInt aIndex)
- {
- __ASSERT_DEBUG(aIndex < iVisibleCount, AknFepUiInterfacePanic(EAknFepUiInterfacePanicAttemptedSelectionOutsideVisibleCandidates));
- __ASSERT_DEBUG(aIndex >= 0, AknFepUiInterfacePanic(EAknFepUiInterfacePanicAttemptedSelectionOutsideVisibleCandidates));
- // If the value of the index changes, the control is redrawn to show the new position.
- if(iSelected != aIndex)
- {
- // only want to layout the two controls between which the selection is moving
- TInt oldSelected = iSelected;
- iSelected = aIndex;
-
- LayoutInputPane(oldSelected);
- LayoutInputPane(iSelected);
- }
- return ETrue;
- }
-
-TInt CAknFepUICtrlPinyinPopup::CurrentSelection() const
- {
- if(iPages.Count() != 0)
- {
- return iPages[iCurDisplayPage].iStartIndex + iSelected;
- }
- else
- {
- return 0;
- }
- }
-
-TInt CAknFepUICtrlPinyinPopup::CurrentVisibleSelection() const
- {
- return iSelected;
- }
-
-void CAknFepUICtrlPinyinPopup::PopupSizeChanged()
- {
- SizeChanged();
- }
-
-void CAknFepUICtrlPinyinPopup::SizeChanged()
- {
- LayoutRects();
- LayoutContainedControls();
- LayoutFrames();
- }
-
-TInt CAknFepUICtrlPinyinPopup::CountComponentControls() const
- {
- TInt count = 0;
- count += iInputPaneArray.Count();
-
- CCoeControl* controls[] =
- {
- 0
- } ;
-
- for (TUint ii = 0 ; ii < (sizeof(controls) / sizeof(CCoeControl*)) ; ii++)
- {
- if(controls[ii])
- {
- count++ ;
- }
- }
- return count ;
- }
-
-CCoeControl* CAknFepUICtrlPinyinPopup::ComponentControl(TInt aIndex) const
- {
- TInt candidateCount = iInputPaneArray.Count();
-
- if(aIndex < candidateCount)
- {
- // because this method is const, the const [] operator is selected
- // which means that the pointer is const, so have to cast away constness
- // - a possible alternative is to make the array mutable
- return CONST_CAST(CAknFepUICtrlInputPane*, iInputPaneArray[aIndex]);
- }
- aIndex -= candidateCount;
-
- CCoeControl* controls[] =
- {
- 0
- } ;
-
- for (TUint ii = 0; (ii < sizeof(controls) / sizeof(CCoeControl*)) ; ii++)
- {
- if (controls[ii] && aIndex-- == 0)
- {
- return controls[ii] ;
- }
- }
- // shouldn't be called while no components.
- return NULL ;
- }
-
-void CAknFepUICtrlPinyinPopup::Draw(const TRect& /*aRect*/) const
- {
- CWindowGc& gc = SystemGc();
- TBool skinnedDraw = EFalse;
- MAknsSkinInstance* skin = AknsUtils::SkinInstance();
-
- TRect outerRect;
- TRect innerRect;
- CalculateFrameRects(outerRect, innerRect);
-
- gc.Clear(outerRect);
- TRect tmpRect;
- tmpRect.iTl.iX = innerRect.iTl.iX;
- tmpRect.iTl.iY = outerRect.iTl.iY;
- tmpRect.SetWidth(innerRect.Width());
- tmpRect.SetHeight(outerRect.Height());
- skinnedDraw = AknsDrawUtils::DrawFrame(skin, gc, outerRect, tmpRect,
- KAknsIIDQsnFrPopupSub, KAknsIIDQsnFrPopupCenterSubmenu);
-
- // draw the rectangles
- if(!skinnedDraw)
- {
- iRectCoverMainPaneInput.DrawRect(gc);
- iRectFirstShadowInput.DrawRect(gc);
- iRectOutlineFrameInput.DrawRect(gc);
- iRectInsideAreaInput.DrawRect(gc);
- }
-
- if((iVisibleCount >= 1) && (iPages.Count() > 1))
- {
- if(iCurDisplayPage != 0)
- {
- iIndiFepArrowLeft.DrawImage(gc, iNaviArrowBitmapLeft, iNaviArrowBitmapLeftMask);
- }
-
- if (iPages.Count() > iCurDisplayPage + 1)
- {
- iIndiFepArrowRight.DrawImage(gc, iNaviArrowBitmapRight, iNaviArrowBitmapRightMask);
- }
- }
- }
-
-TTypeUid::Ptr CAknFepUICtrlPinyinPopup::MopSupplyObject(TTypeUid aId)
- {
- if (aId.iUid == MAknsControlContext::ETypeId)
- return ( MAknsControlContext::SupplyMopObject(aId, iBgContext));
- return CCoeControl::MopSupplyObject(aId);
- }
-
-void CAknFepUICtrlPinyinPopup::ConstructL(RWindow& /*aParent*/)
- {
- CreateWindowL();
- ConstructBitmapsL();
- RWindow& window = Window();
-
- for(TInt i = 0; i < EMaxPhraseCandidate; i++)
- {
- CAknFepUICtrlInputPane* inputPane =
- CAknFepUICtrlInputPane::NewL(window, CAknFepUICtrlInputPane::ELayoutPhrasePinyinPopupPane, iLafDataMgr);
- inputPane->SetMopParent(this);
- CleanupStack::PushL(inputPane);
- // ownership is passed, unless allocation is unsuccessful, in which case we still have it on the stack
- User::LeaveIfError(iInputPaneArray.Append(inputPane));
- CleanupStack::Pop(); // inputPane
- }
-
- iSpellingArray = new(ELeave)CDesCArrayFlat(1);
- iSpellingIndexArray = new(ELeave)CDesCArrayFlat(1);
- iKeystrokeArray = new(ELeave)CDesCArrayFlat(1);
- iShowKeystrokeArray = new(ELeave)CDesCArrayFlat(1);
- iOptimizeSpelling = new(ELeave)CDesCArrayFlat(1);
- iTempSpelling = new(ELeave)CDesCArrayFlat(1);
- iInEffectKeystrokeArray = new(ELeave)CDesCArrayFlat(1);
- iChooseChineseCharacterArray = new(ELeave)CDesCArrayFlat(1);
- iChooseChineseCharacterArrayKeystroke = new(ELeave)CDesCArrayFlat(1);
- //For stroke
- iKeystrokeArrayForStroke = new(ELeave)CDesCArrayFlat(1);
- iInEffectKeystrokeArrayForStroke = new(ELeave)CDesCArrayFlat(1);
- iShowKeystrokeArrayForStroke = new(ELeave)CDesCArrayFlat(1);
- iChooseChineseCharacterArrayForStroke = new(ELeave)CDesCArrayFlat(1);
- iChooseChineseCharacterArrayKeystrokeForStroke = new(ELeave)CDesCArrayFlat(1);
-
- iZhuyinSymbols = new(ELeave)CDesCArrayFlat(1);
- iZhuyinShowSymbols = new(ELeave)CDesCArrayFlat(1);
- iFirstValidZhuyinGrp = new(ELeave)CDesCArrayFlat(1);
- iChineseCharsDisped = new(ELeave)CDesCArrayFlat(1);
- iZhuyinSymbolsForChineseCharsDisped = new(ELeave)CDesCArrayFlat(1);
-
- SetNonFocusing();
- window.SetOrdinalPosition(0, ECoeWinPriorityFep); // right at the front
- window.SetNonFading(ETrue);
-
- TRect outerRect = TRect();
- TRect innerRect = TRect();
- CalculateFrameRects(outerRect, innerRect);
-
- iBgContext = CAknsFrameBackgroundControlContext::NewL(KAknsIIDQsnFrPopupSub, outerRect, innerRect, ETrue);
- iLastResouce = 0;
- MakeVisible(EFalse);
- }
-
-void CAknFepUICtrlPinyinPopup::ConstructBitmapsL()
- {
- MAknsSkinInstance* skin = AknsUtils::SkinInstance();
-
- TFileName bmpFile;
- bmpFile.Copy(_L("z:"));
- bmpFile.Append(KDC_BITMAP_DIR);
- bmpFile.Append(KFepUiControlsBitmapFile);
-
- AknsUtils::CreateColorIconL( skin,
- KAknsIIDQgnIndiFepArrowLeft,
- KAknsIIDQsnIconColors,
- EAknsCIQsnIconColorsCG20,
- iNaviArrowBitmapLeft,
- iNaviArrowBitmapLeftMask,
- bmpFile,
- EMbmAknfepuictrlsQgn_indi_fep_arrow_left,
- EMbmAknfepuictrlsQgn_indi_fep_arrow_left_mask,
- AKN_LAF_COLOR( 0 )
- );
-
- AknsUtils::CreateColorIconL( skin,
- KAknsIIDQgnIndiFepArrowRight,
- KAknsIIDQsnIconColors,
- EAknsCIQsnIconColorsCG20,
- iNaviArrowBitmapRight,
- iNaviArrowBitmapRightMask,
- bmpFile,
- EMbmAknfepuictrlsQgn_indi_fep_arrow_right,
- EMbmAknfepuictrlsQgn_indi_fep_arrow_right_mask,
- AKN_LAF_COLOR( 0 )
- );
- }
-
-CAknFepUICtrlPinyinPopup::CAknFepUICtrlPinyinPopup( CAknFepUiLayoutDataMgr* aLafDataMgr )
- :
- iSelected(0),
- iEnabled(EFalse),
- iVisibleCount(CAknFepUICtrlPinyinPopup::EMaxPhraseCandidate),
- iCurDisplayPage(0),
- iTonemarkState(1),
- iStrokeState(0),
- iHighLightFlag( 0 ),
- iFlags(0),
- iValidKeystrokeCount( 0 ),
- iPhraseCreation(0),
- iPhraseCreationEditingState( 0 ),
- iState(1),
- iChangeStateFromEditToSpelling( 0 ),
- iValidKeystrokeChanged( 0 )
- {
- iLafDataMgr = aLafDataMgr;
- iEEPContent.Zero();
- }
-
-void CAknFepUICtrlPinyinPopup::LayoutRects()
- {
- // left arrow
- iIndiFepArrowLeft =
- CAknFepChineseUIDataConv::AnyToLayoutRect( iLafDataMgr->RequestData( EIndiFepArrowLeft ));
- AknIconUtils::SetSize( iNaviArrowBitmapLeft, iIndiFepArrowLeft.Rect().Size());
-
- // right arrow
- iIndiFepArrowRight =
- CAknFepChineseUIDataConv::AnyToLayoutRect( iLafDataMgr->RequestData( EIndiFepArrowRight ));
- AknIconUtils::SetSize( iNaviArrowBitmapRight, iIndiFepArrowRight.Rect().Size());
-
- // cover main pane
- iRectCoverMainPaneInput =
- CAknFepChineseUIDataConv::AnyToLayoutRect( iLafDataMgr->RequestData( ERectCoverMainPaneInput ));
- // first shadow
- iRectFirstShadowInput =
- CAknFepChineseUIDataConv::AnyToLayoutRect( iLafDataMgr->RequestData( ERectFirstShadowInput ));
- // outline frame
- iRectOutlineFrameInput =
- CAknFepChineseUIDataConv::AnyToLayoutRect( iLafDataMgr->RequestData( ERectOutlineFrameInput ));
- // inside area
- iRectInsideAreaInput =
- CAknFepChineseUIDataConv::AnyToLayoutRect( iLafDataMgr->RequestData( ERectInsideAreaInput ));
- }
-
-void CAknFepUICtrlPinyinPopup::LayoutContainedControls()
- {
- LayoutInputPanes();
- }
-
-void CAknFepUICtrlPinyinPopup::LayoutInputPanes()
- {
- for(TInt i = 0; i < EMaxPhraseCandidate; i++)
- {
- LayoutInputPane(i);
- }
- }
-
-void CAknFepUICtrlPinyinPopup::LayoutInputPane(TInt aIndex)
- {
- TRect rect = Rect();
-
- CAknFepUICtrlInputPane* inputPane = iInputPaneArray[aIndex];
- TAknWindowLineLayout layoutEntryItem =
- CAknFepChineseUIDataConv::AnyToWindowLine( iLafDataMgr->RequestData(ELayoutEntryItem));
- TAknTextLineLayout layoutLineText =
- CAknFepChineseUIDataConv::AnyToTextLine( iLafDataMgr->RequestData(EEntryTextLayout));
- TAknLayoutRect layoutRectEntryItem;
- layoutRectEntryItem.LayoutRect(rect,layoutEntryItem);
- TRect rectEntryItem = layoutRectEntryItem.Rect();
-
- TAknLayoutText layoutText;
- layoutText.LayoutText(rectEntryItem,layoutLineText);
- TRect rectText = layoutText.TextRect();
-
- // value is 3 for 176*208 resolution
- TInt distance = rectText.iTl.iX - rectEntryItem.iTl.iX + rectEntryItem.iBr.iX - rectText.iBr.iX;
-
- if( aIndex > 0)
- {
- CAknFepUICtrlInputPane* inputPanePrev = iInputPaneArray[aIndex - 1];
- rectText.iTl.iX = inputPanePrev->Rect().iBr.iX;
- }
- rectText.SetWidth(inputPane->LabelTextWidthInPixels() + distance);
- rectText.SetHeight(rect.Height());
-
- inputPane->SetRect(rectText);
- inputPane->SetHighlighted(aIndex == iSelected);
- }
-
-void CAknFepUICtrlPinyinPopup::SetInputPaneVisibility()
- {
- TInt number = iVisibleCount;
- CWindowGc& gc = SystemGc();
- MAknsSkinInstance* skin = AknsUtils::SkinInstance();
- MAknsControlContext* cc = AknsDrawUtils::ControlContext(this);
- TBool skinnedDraw = AknsDrawUtils::Background(skin, cc, this, gc, Rect(),KAknsDrawParamPrepareOnly);
-
- for(TInt i = 0; i < EMaxPhraseCandidate; i++)
- {
- CAknFepUICtrlInputPane* inputPane = iInputPaneArray[i];
-
- //TBool skinnedDraw = AknsDrawUtils::HasBitmapBackground(skin, cc);
- if(skinnedDraw)
- {
- // show input panes, when skinned, as they must draw background context
- // to avoid (the one that is almost off-screen) flickering behind
- // however, need to hide the text so that is doesn't show
- inputPane->MakeTextVisible(i < number);
- }
- else
- {
- // if not skinned, must hide the offscreen input panes otherwise they
- // will draw over the border rectangle
- inputPane->MakeVisible(i < number);
- }
- }
- }
-
-void CAknFepUICtrlPinyinPopup::LayoutFrames()
- {
- TRect outerRect;
- TRect innerRect;
- CalculateFrameRects(outerRect, innerRect);
- iBgContext->SetFrameRects(outerRect, innerRect);
- iBgContext->SetParentPos(PositionRelativeToScreen());
- }
-
-void CAknFepUICtrlPinyinPopup::CalculateFrameRects(TRect& aOuterRect, TRect& aInnerRect) const
- {
- TRect windowRect =
- CAknFepChineseUIDataConv::AnyToRect( iLafDataMgr->RequestData( EPopupRectEntry ));
- TInt rectHeight = windowRect.iBr.iY - windowRect.iTl.iY;
- TInt rectWidth = windowRect.Width();
- windowRect.iTl.iX = 0;
- windowRect.iTl.iY = 0;
- windowRect.SetHeight(rectHeight);
- windowRect.SetWidth(rectWidth);
-
- TAknLayoutRect topLeft;
- topLeft.LayoutRect(windowRect, SkinLayout::Submenu_skin_placing_Line_2());
-
- TAknLayoutRect bottomRight;
- bottomRight.LayoutRect(windowRect, SkinLayout::Submenu_skin_placing_Line_5());
-
- aOuterRect = TRect(topLeft.Rect().iTl, bottomRight.Rect().iBr);
- aInnerRect = TRect(topLeft.Rect().iBr, bottomRight.Rect().iTl);
- }
-
-void CAknFepUICtrlPinyinPopup::SetNoneHighlighted()
- {
- TInt number = iVisibleCount;
- CWindowGc& gc = SystemGc();
- MAknsSkinInstance* skin = AknsUtils::SkinInstance();
- MAknsControlContext* cc = AknsDrawUtils::ControlContext(this);
- TBool skinnedDraw = AknsDrawUtils::Background(skin, cc, this, gc, Rect(),KAknsDrawParamPrepareOnly);
-
- for(TInt i = 0; i < EMaxPhraseCandidate; i++)
- {
- CAknFepUICtrlInputPane* inputPane = iInputPaneArray[i];
-
- //TBool skinnedDraw = AknsDrawUtils::HasBitmapBackground(skin, cc);
- if(skinnedDraw)
- {
- // show input panes, when skinned, as they must draw background context
- // to avoid (the one that is almost off-screen) flickering behind
- // however, need to hide the text so that is doesn't show
- inputPane->SetHighlighted( !(i < number) );
- }
- }
- }
-CDesCArrayFlat* CAknFepUICtrlPinyinPopup::KeystrokeArrayForStroke()
- {
- return iKeystrokeArrayForStroke;
- }
-
-CDesCArrayFlat* CAknFepUICtrlPinyinPopup::InEffectKeystrokeArrayForStroke()
- {
- return iInEffectKeystrokeArrayForStroke;
- }
-
-CDesCArrayFlat* CAknFepUICtrlPinyinPopup::ShowKeystrokeArrayForStroke()
- {
- return iShowKeystrokeArrayForStroke;
- }
-
-CDesCArrayFlat* CAknFepUICtrlPinyinPopup::ChooseChineseCharacterArrayForStroke()
- {
- return iChooseChineseCharacterArrayForStroke;
- }
-
-CDesCArrayFlat* CAknFepUICtrlPinyinPopup::ChooseChineseCharacterArrayKeystrokeForStroke()
- {
- return iChooseChineseCharacterArrayKeystrokeForStroke;
- }
-
-CDesCArrayFlat* CAknFepUICtrlPinyinPopup::ZhuyinSymbols()
- {
- return this->iZhuyinSymbols;
- }
-
-CDesCArrayFlat* CAknFepUICtrlPinyinPopup::ZhuyinShowSymbols()
- {
- return this->iZhuyinShowSymbols;
- }
-
-CDesCArrayFlat* CAknFepUICtrlPinyinPopup::FirstValidZhuyinGrp()
- {
- return this->iFirstValidZhuyinGrp;
- }
-
-void CAknFepUICtrlPinyinPopup::SetEEPContent ( const TDes& aDes )
- {
- iEEPContent = aDes;
- }
-
-TDes& CAknFepUICtrlPinyinPopup::GetEEPContent ( )
- {
- return iEEPContent;
- }
-
-void CAknFepUICtrlPinyinPopup::SetEEPContentValid ( TBool aValid )
- {
- iEEPContentValid = aValid;
- }
-
-TBool CAknFepUICtrlPinyinPopup::GetEEPContentValid ( )
- {
- return iEEPContentValid;
- }
-
-CDesCArrayFlat* CAknFepUICtrlPinyinPopup::ChineseCharsDisped()
- {
- return this->iChineseCharsDisped;
- }
-
-CDesCArrayFlat* CAknFepUICtrlPinyinPopup::ZhuyinSymbolsForChineseCharsDisped()
- {
- return this->iZhuyinSymbolsForChineseCharsDisped;
- }
-
-void CAknFepUICtrlPinyinPopup::ResetStrokeArray()
- {
- //reset pinyin array
- iSpellingArray->Reset();
- iSpellingArray->Compress();
- iSpellingIndexArray->Reset();
- iSpellingIndexArray->Compress();
- iKeystrokeArray->Reset();
- iKeystrokeArray->Compress();
- iInEffectKeystrokeArray->Reset();
- iInEffectKeystrokeArray->Compress();
- iShowKeystrokeArray->Reset();
- iShowKeystrokeArray->Compress();
- iChooseChineseCharacterArray->Reset();
- iChooseChineseCharacterArray->Compress();
- iChooseChineseCharacterArrayKeystroke->Reset();
- iChooseChineseCharacterArrayKeystroke->Compress();
- iOptimizeSpelling->Reset();
- iOptimizeSpelling->Compress();
- iTempSpelling->Reset();
- iTempSpelling->Compress();
-
- //reset stroke array
- iKeystrokeArrayForStroke->Reset();
- iKeystrokeArrayForStroke->Compress();
- iInEffectKeystrokeArrayForStroke->Reset();
- iInEffectKeystrokeArrayForStroke->Compress();
- iShowKeystrokeArrayForStroke->Reset();
- iShowKeystrokeArrayForStroke->Compress();
- iChooseChineseCharacterArrayForStroke->Reset();
- iChooseChineseCharacterArrayForStroke->Compress();
- iChooseChineseCharacterArrayKeystrokeForStroke->Reset();
- iChooseChineseCharacterArrayKeystrokeForStroke->Compress();
-
- //reset zhuyin array
- iZhuyinSymbols->Reset();
- iFirstValidZhuyinGrp->Reset();
- iChineseCharsDisped->Reset();
- iZhuyinSymbolsForChineseCharsDisped->Reset();
-
- iZhuyinSymbols->Compress();
- iFirstValidZhuyinGrp->Compress();
- iChineseCharsDisped->Compress();
- iZhuyinSymbolsForChineseCharsDisped->Compress();
-
- iLastResouce = 0;
- iValidKeystrokeCount = 0;
- iPhraseCreation = 0;
- iPhraseCreationEditingState = 0;
- iHighLightFlag = 0;
- iChangeStateFromEditToSpelling = 0;
- iValidKeystrokeChanged = 0;
-
- }
-
-void CAknFepUICtrlPinyinPopup::SetChangeState( TBool aChangeState )
- {
- iChangeState = aChangeState ;
- }
-
-TBool CAknFepUICtrlPinyinPopup::IsChangeStatet() const
- {
- return iChangeState;
- }
-
-void CAknFepUICtrlPinyinPopup::SetState( TInt aState )
- {
- iState = aState;
- }
-
-TInt CAknFepUICtrlPinyinPopup::GetState()
- {
- return iState;
- }
-
-void CAknFepUICtrlPinyinPopup::SetPhraseCreationState( TBool aState )
- {
- iPhraseCreation = aState;
- }
-
-TBool CAknFepUICtrlPinyinPopup::GetPhraseCreationState()
- {
- return iPhraseCreation;
- }
-
-void CAknFepUICtrlPinyinPopup::SetPhraseCreationEditingState( TBool aState )
- {
- iPhraseCreationEditingState = aState;
- }
-
-TBool CAknFepUICtrlPinyinPopup::GetPhraseCreationEditingState()
- {
- return iPhraseCreationEditingState;
- }
-
-// ---------------------------------------------------------
-// Set flag whether from candidate state change state.
-// ---------------------------------------------------------
-//
-void CAknFepUICtrlPinyinPopup::SetFromCandidateChangeStateFlag( TBool aFlag )
- {
- iHighLightFlag = aFlag;
- }
-
-// ---------------------------------------------------------
-// Get flag whether from candidate state change state.
-// ---------------------------------------------------------
-//
-TBool CAknFepUICtrlPinyinPopup::GetFromCandidateChangeStateFlag()
- {
- return iHighLightFlag;
- }
-
-// ---------------------------------------------------------
-// Set count of valid keystroke.
-// ---------------------------------------------------------
-//
-void CAknFepUICtrlPinyinPopup::SetValidKeystrokeCount( TInt aCount )
- {
- iValidKeystrokeCount = aCount;
- }
-
-// ---------------------------------------------------------
-// Set count of valid keystroke.
-// ---------------------------------------------------------
-//
-TInt CAknFepUICtrlPinyinPopup::GetValidKeystrokeCount()
- {
- return iValidKeystrokeCount;
- }
-
-// ---------------------------------------------------------
-// Set last cba resouce id.
-// ---------------------------------------------------------
-//
-void CAknFepUICtrlPinyinPopup::SetLastResouce( TInt aResouceId )
- {
- iLastResouce = aResouceId;
- }
-
-// ---------------------------------------------------------
-// Get last cba resouce id.
-// ---------------------------------------------------------
-//
-TInt CAknFepUICtrlPinyinPopup::GetLastResouce()
- {
- return iLastResouce;
- }
-
-// ---------------------------------------------------------
-// Set change state from Edit to Spelling flag.
-// ---------------------------------------------------------
-//
-void CAknFepUICtrlPinyinPopup::SetFromEditToSpellingFlag( TBool aFlag )
- {
- iChangeStateFromEditToSpelling = aFlag;
- }
-
-// ---------------------------------------------------------
-// Get change state from Edit to Spelling flag.
-// ---------------------------------------------------------
-//
-TInt CAknFepUICtrlPinyinPopup::GetFromEditToSpellingFlag()
- {
- return iChangeStateFromEditToSpelling;
- }
-
-// ---------------------------------------------------------
-// Set valid keystroke change flag.
-// ---------------------------------------------------------
-//
-void CAknFepUICtrlPinyinPopup::SetValidKeystrokeChange( TBool aFlag )
- {
- iValidKeystrokeChanged = aFlag;
- }
-
-// ---------------------------------------------------------
-// Get valid keystroke change flag.
-// ---------------------------------------------------------
-//
-TBool CAknFepUICtrlPinyinPopup::GetValidKeystrokeChange()
- {
- return iValidKeystrokeChanged;
- }
-
-// ---------------------------------------------------------
-// Set PreStateIsPredict flag.
-// ---------------------------------------------------------
-//
-void CAknFepUICtrlPinyinPopup::SetPreStateIsPredictive( TBool aFlag )
- {
- iPreStateIsPredictive = aFlag;
- }
-
-// ---------------------------------------------------------
-// Set PreStateIsPredict flag.
-// ---------------------------------------------------------
-//
-TBool CAknFepUICtrlPinyinPopup::GetPreStateIsPredictive()
- {
- return iPreStateIsPredictive;
- }
-
-void CAknFepUICtrlPinyinPopup::SetInputLayoutMiniQwertyZhuyin()
- {
- for(TInt i = 0; i < EMaxPhraseCandidate; i++)
- {
- iInputPaneArray[i]->SetLayout( CAknFepUICtrlInputPane::ELayoutPhraseMiniQwertyZhuyin );
- }
- }
-
-void CAknFepUICtrlPinyinPopup::ResetInputLayoutMiniQwertyZhuyin()
- {
- for(TInt i = 0; i < EMaxPhraseCandidate; i++)
- {
- iInputPaneArray[i]->SetLayout( CAknFepUICtrlInputPane::ELayoutPhrasePinyinPopupPane );
- }
- }
-// End of file