--- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonCtrlCandidatePane.cpp Tue Jul 06 14:38:41 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1172 +0,0 @@
-/*
-* Copyright (c) 2002-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 CAknFepUICtrlCandidatePane methods.
-*
-*/
-
-
-
-
-
-
-
-
-
-
-
-
-#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
-#include <uikon/eikdefmacros.h>
-#endif
-#include <eiklabel.h>
-#include <AknsDrawUtils.h>
-#include <AknBidiTextUtils.h>
-#include <AknsUtils.h>
-#include <AknIconUtils.h>
-
-#include <aknfepuictrls.mbg>
-#include "AknFepUiInterfacePanic.h"
-#include "AknFepUIAvkonCtrlCandidatePane.h"
-#include "AknFepUIAvkonCtrlCandidateSelected.h"
-#include "aknfepchineseuidataconv.h"
-#include "aknfepuilayoutdatamgr.h"
-
-
-#include "data_caging_path_literals.hrh"
-
-const TInt CandidateCountLeft = 10;
-
-_LIT(KFepUiControlsBitmapFile, "aknfepuictrls.mbm");
-
-CAknFepUICtrlCandidatePane* CAknFepUICtrlCandidatePane::NewL(RWindow& aParent, CAknFepUiLayoutDataMgr* aLafDataMgr)
- {
- CAknFepUICtrlCandidatePane* self = new(ELeave) CAknFepUICtrlCandidatePane( aLafDataMgr );
- CleanupStack::PushL(self);
- self->ConstructL(aParent);
- CleanupStack::Pop();
- return self;
- }
-
-CAknFepUICtrlCandidatePane::~CAknFepUICtrlCandidatePane()
- {
- delete iCandidateSelected;
- delete iNaviArrowBitmapLeft;
- delete iNaviArrowBitmapLeftMask;
- delete iNaviArrowBitmapRight;
- delete iNaviArrowBitmapRightMask;
- delete iNaviArrowBitmapUp;
- delete iNaviArrowBitmapUpMask;
- delete iNaviArrowBitmapDown;
- delete iNaviArrowBitmapDownMask;
- if(iCandidateArray)
- {
- iCandidateArray->Reset();
- delete iCandidateArray;
- }
- iCandidateLabelArray.ResetAndDestroy();
- iOrdinalLabelArray.ResetAndDestroy();
- iCandidateModeArray.Reset();
- iPages.Reset();
- }
-
-const TDesC& CAknFepUICtrlCandidatePane::TextBuffer() const
- {
- return iBuffer;
- }
-
-void CAknFepUICtrlCandidatePane::SetCandidateBuffer(const TDesC& aBuffer)
- {
- TInt newLength = aBuffer.Length();
- TInt oldLength = iBuffer.Length();
- if(newLength > EMaxCandidates)
- {
- newLength = EMaxCandidates;
- }
- if(newLength - 1 < iSelected)
- {
- // as far as the client is concerned, they have removed the character that was selected
- // therefore we must now hide the selected candidate, although the highlighting
- // state remains unchanged
- iCandidateSelected->MakeVisible(EFalse);
- }
- else
- {
- if(iHighlighted)
- {
- // make sure that the candidate is visible, as the selection is now
- // within a visible range (it might have been hidden last time
- // the buffer was set)
- iCandidateSelected->MakeVisible(ETrue);
- }
- }
-
- TPtrC newText = aBuffer.Left(newLength);
- TPtr ptr = iBuffer.Des();
- if(ptr != newText)
- {
- for(TInt i = 0; i < newLength; i++)
- {
- TBool valueChanged = ETrue;
- TPtrC newChar = aBuffer.Mid(i, EOneCandidate);
- if(i < oldLength)
- {
- TPtrC oldChar = iBuffer.Mid(i, EOneCandidate);
- if(newChar == oldChar)
- {
- valueChanged = EFalse;
- }
- }
- // only update and redraw label background if the value has changed
- if(valueChanged)
- {
- // we have already allocated enough memory for this
- CEikLabel* candidateLabel = iCandidateLabelArray[i];
- TRAP_IGNORE(candidateLabel->SetTextL(newChar));
-
- // need to update the character if it is in the current selected candidate
- if(i == iSelected)
- {
- iCandidateSelected->SetText(newChar);
- iCandidateSelected->SetOrdinal(i + 1);
- DrawDeferred();
- }
- if(i < iVisibleCount)
- {
- // only redraw characters that are visible
- TRect rect = candidateLabel->Rect();
- Window().Invalidate(rect);
- }
- }
- }
- ptr.Copy(newText);
- LayoutLabels();
- LayoutCandidateSelected();
- iVisibleCount = newLength;
- UpdateLabelVisibility();
- }
- }
-
-CDesCArrayFlat* CAknFepUICtrlCandidatePane::CandidateArray(void)
- {
- return iCandidateArray;
- }
-
-void CAknFepUICtrlCandidatePane::SetCandidateBuffer(void)
- {
- if(iPages.Count() == 0)
- {
- return;
- }
- TPage curPage = iPages[iCurDisplayPage];
- iVisibleCount = curPage.iEndIndex - curPage.iStartIndex + 1;
-
- if(iVisibleCount - 1 < iSelected)
- {
- iCandidateSelected->MakeVisible(EFalse);
- }
- else
- {
- if(iHighlighted)
- {
- iCandidateSelected->MakeVisible(ETrue);
- }
- }
-
- TBufC<EPhraseLength> buf;
- TPtr newText = buf.Des();
-
- for(TInt i = 0; i < iVisibleCount; i ++)
- {
- CEikLabel* candidateLabel = iCandidateLabelArray[i];
- const TDesC* txtLabel = candidateLabel->Text();
- newText = (*iCandidateArray)[curPage.iStartIndex + i];
-
- if((txtLabel->Compare(newText) != 0) )
- {
- // we have already allocated enough memory for this
- TRAP_IGNORE( candidateLabel->SetTextL(newText));
- }
-
- // need to update the character if it is in the current selected candidate
- if(i == iSelected)
- {
- iCandidateSelected->SetText(newText);
- iCandidateSelected->SetOrdinal(i + 1);
- DrawDeferred();
- }
- if(i < iVisibleCount)
- {
- // only redraw labels that are visible
- TRect rect = candidateLabel->Rect();
- Window().Invalidate(rect);
- }
- }
- LayoutLabels();
- LayoutCandidateSelected();
- DrawDeferred();
- UpdateLabelVisibility();
- }
-
-void CAknFepUICtrlCandidatePane::SetHighlighted(TBool aHighlighted)
- {
- if(!COMPARE_BOOLS(iHighlighted, aHighlighted))
- {
- iHighlighted = aHighlighted;
- iCandidateSelected->MakeVisible(aHighlighted);
-
- iCandidateSelected->DrawDeferred();
- }
- }
-
-TBool CAknFepUICtrlCandidatePane::Highlighted() const
- {
- return iHighlighted;
- }
-
-void CAknFepUICtrlCandidatePane::SetCandidateMode(TInt aIndex, TCandidateMode aMode)
- {
- __ASSERT_DEBUG(aIndex < EMaxCandidates, AknFepUiInterfacePanic(EAknFepUiInterfacePanicAttemptedSetModeOutsideMaxCandidates));
- __ASSERT_DEBUG(aIndex >= 0, AknFepUiInterfacePanic(EAknFepUiInterfacePanicAttemptedSetModeOutsideMaxCandidates));
-
- TCandidateMode oldMode = iCandidateModeArray[aIndex];
- if(oldMode != aMode)
- {
- iCandidateModeArray[aIndex] = aMode;
- if(iSelected == aIndex)
- {
- LayoutCandidateSelected();
- }
- // only do drawing if visible
- if(aIndex < iVisibleCount)
- {
- LayoutLabel(aIndex);
- if(iSelected == aIndex && iHighlighted)
- {
- iCandidateSelected->DrawDeferred();
- }
- else
- {
- CEikLabel* candidateLabel = iCandidateLabelArray[aIndex];
- TRect rect = candidateLabel->Rect();
- Window().Invalidate(rect);
- }
- }
- }
- }
-
-CAknFepUICtrlCandidatePane::TCandidateMode CAknFepUICtrlCandidatePane::CandidateMode(TInt aIndex)
- {
- return iCandidateModeArray[aIndex];
- }
-
-TBool CAknFepUICtrlCandidatePane::IsShowHorizontalScrollArrows() const
- {
- return EFalse;
- }
-
-void CAknFepUICtrlCandidatePane::ShowHorizontalScrollArrows(TBool /*aValue*/)
- {
- // If the state is changed, the arrows will be redrawn in the new state.
- // if(!COMPARE_BOOLS(iShowHorizontalScrollArrows, aValue))
- // {
- // iShowHorizontalScrollArrows = aValue;
- // TRect rect = iIndiFepArrowLeft.Rect();
- // Window().Invalidate(rect);
- // rect = iIndiFepArrowRight.Rect();
- // Window().Invalidate(rect);
- // }
- }
-
-void CAknFepUICtrlCandidatePane::ShowUpScrollArrows(TBool aValue)
- {
- if (iShowUpScrollArrows != aValue)
- {
- iShowUpScrollArrows = aValue;
- TRect rect = iIndiFepArrowUp.Rect();
- Window().Invalidate(rect);
- }
- }
-
-void CAknFepUICtrlCandidatePane::ShowDownScrollArrows(TBool aValue)
- {
- if (iShowDownScrollArrows != aValue)
- {
- iShowDownScrollArrows = aValue;
- TRect rect = iIndiFepArrowDown.Rect();
- Window().Invalidate(rect);
- }
-
- }
-
-void CAknFepUICtrlCandidatePane::ShowLeftScrollArrows(TBool /*aValue*/)
- {
- // if (iShowLeftScrollArrows != aValue)
- // {
- // iShowLeftScrollArrows = aValue;
- // TRect rect = iIndiFepArrowLeft.Rect();
- // Window().Invalidate(rect);
- // }
- }
-
-void CAknFepUICtrlCandidatePane::ShowRightScrollArrows(TBool /*aValue*/)
- {
- // if (iShowRightScrollArrows != aValue)
- // {
- // iShowRightScrollArrows = aValue;
- // TRect rect = iIndiFepArrowRight.Rect();
- // Window().Invalidate(rect);
- // }
- }
-
-TBool CAknFepUICtrlCandidatePane::IsShowVerticalScrollArrows() const
- {
- return iShowVerticalScrollArrows;
- }
-
-void CAknFepUICtrlCandidatePane::ShowVerticalScrollArrows(TBool aValue)
- {
- // If the state is changed, the arrows will be redrawn in the new state.
- if(!COMPARE_BOOLS(iShowVerticalScrollArrows, aValue))
- {
- iShowVerticalScrollArrows = aValue;
- TRect rect = iIndiFepArrowUp.Rect();
- Window().Invalidate(rect);
- rect = iIndiFepArrowDown.Rect();
- Window().Invalidate(rect);
- }
- }
-
-void CAknFepUICtrlCandidatePane::ShowCandidateOrdinals(TBool aValue)
- {
- if(!COMPARE_BOOLS(iShowCandidateOrdinals, aValue))
- {
- iShowCandidateOrdinals = aValue;
- iCandidateSelected->ShowOrdinal(aValue);
- UpdateLabelVisibility();
- }
- }
-
-TBool CAknFepUICtrlCandidatePane::IsShowCandidateOrdinals() const
- {
- return iShowCandidateOrdinals;
- }
-
-TInt CAknFepUICtrlCandidatePane::VisibleCandidateCount() const
- {
- return iVisibleCount;
- }
-
-void CAknFepUICtrlCandidatePane::SetVisibleCandidateCount(TInt aCount)
- {
- __ASSERT_DEBUG(aCount > 0, AknFepUiInterfacePanic(EAknFepUiInterfacePanicNewVisibleCountExceedsRange));
- __ASSERT_DEBUG(aCount <= EMaxCandidates, AknFepUiInterfacePanic(EAknFepUiInterfacePanicNewVisibleCountExceedsRange));
- if(iVisibleCount != aCount)
- {
- if(aCount - 1 < iSelected)
- {
- // automatically move the selection to be at the end of the new
- // candidate buffer
- SelectIndex(aCount - 1); // ignore return code
- }
- iVisibleCount = aCount;
- UpdateLabelVisibility();
- }
- }
-
-TBool CAknFepUICtrlCandidatePane::SelectFirstPhrase()
- {
- if(iVisibleCount >= 1)
- {
- return SelectIndex(0,EFalse);
- }
- else
- {
- return EFalse;
- }
- }
-
-TBool CAknFepUICtrlCandidatePane::SelectFirst()
- {
- if(iBuffer.Length())
- {
- return SelectIndex(0);
- }
- else
- {
- return EFalse;
- }
- }
-
-TBool CAknFepUICtrlCandidatePane::SelectLastPhrase()
- {
- if(iVisibleCount > 1)
- {
- return SelectIndex(iVisibleCount - 1);
- }
- else
- {
- return EFalse;
- }
- }
-
-TBool CAknFepUICtrlCandidatePane::SelectLast()
- {
- TInt length = iBuffer.Length();
- if(length)
- {
- TInt index = length < iVisibleCount ? length : iVisibleCount;
- return SelectIndex(index - 1);
- }
- else
- {
- return EFalse;
- }
- }
-
-TBool CAknFepUICtrlCandidatePane::SelectNext()
- {
- if(iSelected < iVisibleCount - 1)
- {
- return SelectIndex(iSelected + 1);
- }
- else
- {
- return EFalse;
- }
- }
-
-TBool CAknFepUICtrlCandidatePane::SelectPrev()
- {
- if(iSelected > 0)
- {
- return SelectIndex(iSelected - 1);
- }
- else
- {
- return EFalse;
- }
- }
-
-TBool CAknFepUICtrlCandidatePane::SelectIndex(TInt aIndex, TBool selected)
- {
- if(aIndex + 1 > iVisibleCount || aIndex < 0)
- {
- return EFalse;
- }
- if(iSelected != aIndex)
- {
- if(iSelected + 1 > iVisibleCount && iHighlighted)
- {
- // candidate selection is currently hidden, as the current
- // selection is outside the range of valid candidates, therefore
- // show it again
- iCandidateSelected->MakeVisible(ETrue);
- }
- iSelected = aIndex;
- // move and repopulate the selected candidate control
- const TDesC* txtLabel = iCandidateLabelArray[aIndex]->Text();
- iCandidateSelected->SetText(*txtLabel);
- iCandidateSelected->SetOrdinal(iSelected + 1);
-
- LayoutCandidateSelected();
- if( selected )
- {
-
- DrawDeferred();
- }
-
- }
- return ETrue;
- }
-
-TInt CAknFepUICtrlCandidatePane::SelectedIndex() const
- {
- return iSelected;
- }
-
-TPtrC CAknFepUICtrlCandidatePane::CurrentPhraseCandidate() const
- {
- __ASSERT_DEBUG(iSelected >= 0, AknFepUiInterfacePanic(EAknFepUiInterfacePanicCurrentSelectionOutsideVisibleCandidates));
- if(iVisibleCount > iSelected)
- {
- return *(iCandidateLabelArray[iSelected]->Text());
- }
- else
- {
- return TPtrC();
- }
- }
-
-TPtrC CAknFepUICtrlCandidatePane::CurrentCandidate() const
- {
- __ASSERT_DEBUG(iSelected >= 0, AknFepUiInterfacePanic(EAknFepUiInterfacePanicCurrentSelectionOutsideVisibleCandidates));
- if(iBuffer.Length() > iSelected)
- {
- return iBuffer.Mid(iSelected, EOneCandidate);
- }
- else
- {
- return TPtrC();
- }
- }
-
-TInt CAknFepUICtrlCandidatePane::LabelTextWidthInPixels( TInt aIndex)
- {
- TAknLayoutText layoutText;
- TAknTextLineLayout candidatePaneLayoutText =
- CAknFepChineseUIDataConv::AnyToTextLine(iLafDataMgr->RequestData( ECandidatePaneTextLine ));
-
- layoutText.LayoutText(Rect(), candidatePaneLayoutText);
-
- const CFont* font = layoutText.Font();
-
- TInt labelWidthInPixels = 0;
- if(font)
- {
- const TDesC* txtLabel = iCandidateLabelArray[aIndex]->Text();
- if(txtLabel->Length() != 0)
- {
- labelWidthInPixels = font->TextWidthInPixels(*txtLabel);
- }
- }
- return labelWidthInPixels;
- }
-void CAknFepUICtrlCandidatePane::SetPaneLayout(CAknFepUICtrlContainerChinese::TPaneLayout aPaneLayout)
- {
- iPaneLayout = aPaneLayout;
- }
-
-void CAknFepUICtrlCandidatePane::SplitPhraseCandidatesIntoPages()
- {
- iPages.Reset();
- iUnpagedIndex = 0;
-
- InternalSpilitPhraseCandidate();
-
- if( iPages.Count() == 0 )
- {
- iVisibleCount = 0;
- }
- else
- {
- iCurDisplayPage = 0;
- SetVisibleCandidateCount(iPages[0].iEndIndex - iPages[0].iStartIndex + 1);
- }
- }
-
-void CAknFepUICtrlCandidatePane::NextCandidatePage(void)
- {
- if(iCurDisplayPage == (iPages.Count() - 1))
- {
- if( iUnpagedIndex < iCandidateArray->Count() )
- {
- //continue page
- InternalSpilitPhraseCandidate();
- iCurDisplayPage++;
- }
- else
- {
- iCurDisplayPage = 0;
- }
- }
- else
- {
- iCurDisplayPage ++;
- }
- // For fix bug of when the count of character in the last page is less than
- // the previous page of the last page. And then select the last character of
- // the previous page of the last page, and select next page. First of the last
- // page is not refreshed.
- iSelected = 0;
- }
-
-void CAknFepUICtrlCandidatePane::PreviousCandidatePage(void)
- {
- if(iCurDisplayPage == 0)
- {
- iCurDisplayPage = iPages.Count() - 1;
- }
- else
- {
- iCurDisplayPage --;
- }
- }
-
-void CAknFepUICtrlCandidatePane::SizeChanged()
- {
- LayoutRects();
- LayoutContainedControls();
- }
-
-TInt CAknFepUICtrlCandidatePane::CountComponentControls() const
- {
- TInt count = 0;
- count += iCandidateLabelArray.Count();
- count += iOrdinalLabelArray.Count();
-
- CCoeControl* controls[] =
- {
- iCandidateSelected
- } ;
-
- for (TUint ii = 0 ; ii < (sizeof(controls) / sizeof(CCoeControl*)) ; ii++)
- {
- if(controls[ii])
- {
- count++ ;
- }
- }
- return count ;
- }
-
-CCoeControl* CAknFepUICtrlCandidatePane::ComponentControl(TInt aIndex) const
- {
- TInt candidateCount = iCandidateLabelArray.Count();
- TInt ordinalCount = iOrdinalLabelArray.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(CEikLabel*, iCandidateLabelArray[aIndex]);
- }
- aIndex -= candidateCount;
-
- if(aIndex < ordinalCount)
- {
- // 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(CEikLabel*, iOrdinalLabelArray[aIndex]);
- }
- aIndex -= ordinalCount;
-
- CCoeControl* controls[] =
- {
- iCandidateSelected
- } ;
-
- 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 CAknFepUICtrlCandidatePane::Draw(const TRect& /* aRect */) const
- {
- CWindowGc& gc = SystemGc();
-
- if(iShowHorizontalScrollArrows)
- {
- if (iShowLeftScrollArrows)
- {
- iIndiFepArrowLeft.DrawImage(gc,
- iNaviArrowBitmapLeft,
- iNaviArrowBitmapLeftMask);
- }
-
- if (iShowRightScrollArrows)
- {
- iIndiFepArrowRight.DrawImage(gc,
- iNaviArrowBitmapRight,
- iNaviArrowBitmapRightMask);
- }
- }
- if(iShowVerticalScrollArrows)
- {
- if (iShowUpScrollArrows)
- {
- iIndiFepArrowUp.DrawImage(gc,
- iNaviArrowBitmapUp,
- iNaviArrowBitmapUpMask);
- }
-
- if (iShowDownScrollArrows)
- {
- iIndiFepArrowDown.DrawImage(gc,
- iNaviArrowBitmapDown,
- iNaviArrowBitmapDownMask);
- }
- }
- }
-
-void CAknFepUICtrlCandidatePane::ConstructL(RWindow& aParent)
- {
- SetContainerWindowL(aParent);
- ConstructBitmapsL();
-
- TBuf<EOneCandidate> ordinal;
- for(TInt i = 0; i < EMaxCandidates; i++)
- {
- CEikLabel* candidateLabel = new(ELeave) CEikLabel;
- CleanupStack::PushL(candidateLabel);
- candidateLabel->SetContainerWindowL(aParent);
- candidateLabel->SetBufferReserveLengthL(EPhraseLength);
- // ownership is passed, unless allocation is unsuccessful, in which case we still have it on the stack
- User::LeaveIfError(iCandidateLabelArray.Append(candidateLabel));
- CleanupStack::Pop(); // candidateLabel
-
- CEikLabel* ordinalLabel = new(ELeave) CEikLabel;
- CleanupStack::PushL(ordinalLabel);
- ordinalLabel->SetContainerWindowL(aParent);
- ordinalLabel->SetBufferReserveLengthL(EOneCandidate);
- ordinal.Num((i+1)%10); // digits are [1, 2,,, 9, 0] - only want the last digit in the case of 10!
- ordinalLabel->SetTextL(ordinal);
- // ownership is passed, unless allocation is unsuccessful, in which case we still have it on the stack
- User::LeaveIfError(iOrdinalLabelArray.Append(ordinalLabel));
- CleanupStack::Pop(); // ordinalLabel
-
- User::LeaveIfError(iCandidateModeArray.Append(ECandidateModeNormal));
- }
-
- iCandidateSelected = CAknFepUICtrlCandidateSelected::NewL(aParent);
- iCandidateSelected->MakeVisible(iHighlighted);
- iCandidateSelected->SetMopParent(this);
- iCandidateArray = new(ELeave) CDesCArrayFlat(1);
- }
-
-void CAknFepUICtrlCandidatePane::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 )
- );
-
- AknsUtils::CreateColorIconL( skin,
- KAknsIIDQgnIndiFepArrowUp,
- KAknsIIDQsnIconColors,
- EAknsCIQsnIconColorsCG20,
- iNaviArrowBitmapUp,
- iNaviArrowBitmapUpMask,
- bmpFile,
- EMbmAknfepuictrlsQgn_indi_fep_arrow_up,
- EMbmAknfepuictrlsQgn_indi_fep_arrow_up_mask,
- AKN_LAF_COLOR( 0 )
- );
- AknsUtils::CreateColorIconL( skin,
- KAknsIIDQgnIndiFepArrowDown,
- KAknsIIDQsnIconColors,
- EAknsCIQsnIconColorsCG20,
- iNaviArrowBitmapDown,
- iNaviArrowBitmapDownMask,
- bmpFile,
- EMbmAknfepuictrlsQgn_indi_fep_arrow_down,
- EMbmAknfepuictrlsQgn_indi_fep_arrow_down_mask,
- AKN_LAF_COLOR( 0 )
- );
- }
-
-CAknFepUICtrlCandidatePane::CAknFepUICtrlCandidatePane(CAknFepUiLayoutDataMgr* aLafDataMgr)
- :
- iPaneLayout(CAknFepUICtrlContainerChinese::ELayoutCandidate),
- iHighlighted(EFalse),
- iShowHorizontalScrollArrows(EFalse),
- iShowVerticalScrollArrows(EFalse),
- iShowUpScrollArrows(ETrue),
- iShowDownScrollArrows(ETrue),
- iShowLeftScrollArrows(ETrue),
- iShowRightScrollArrows(ETrue),
- iShowCandidateOrdinals(ETrue),
- iCurDisplayPage(0),
- iOrdinalLableWidth(0)
- {
- iLafDataMgr = aLafDataMgr;
- }
-
-void CAknFepUICtrlCandidatePane::LayoutRects()
- {
- TRect rect = Rect();
-
- TAknWindowLineLayout candidateWindowLine1 =
- CAknFepChineseUIDataConv::AnyToWindowLine( iLafDataMgr->RequestData(ECandidateWindowLine1));
- TAknWindowLineLayout candidateWindowLine2 =
- CAknFepChineseUIDataConv::AnyToWindowLine( iLafDataMgr->RequestData(ECandidateWindowLine2));
- TAknWindowLineLayout candidateWindowLine3 =
- CAknFepChineseUIDataConv::AnyToWindowLine( iLafDataMgr->RequestData(ECandidateWindowLine3));
- TAknWindowLineLayout candidateWindowLine4 =
- CAknFepChineseUIDataConv::AnyToWindowLine( iLafDataMgr->RequestData(ECandidateWindowLine4));
-
- iIndiFepArrowLeft.LayoutRect(rect, candidateWindowLine1);
- AknIconUtils::SetSize(iNaviArrowBitmapLeft, iIndiFepArrowLeft.Rect().Size());
-
- iIndiFepArrowRight.LayoutRect(rect, candidateWindowLine2);
- AknIconUtils::SetSize(iNaviArrowBitmapRight, iIndiFepArrowRight.Rect().Size());
-
- iIndiFepArrowUp.LayoutRect(rect, candidateWindowLine3);
- AknIconUtils::SetSize(iNaviArrowBitmapUp, iIndiFepArrowUp.Rect().Size());
-
- iIndiFepArrowDown.LayoutRect(rect, candidateWindowLine4);
- AknIconUtils::SetSize( iNaviArrowBitmapDown, iIndiFepArrowDown.Rect().Size() );
- }
-
-void CAknFepUICtrlCandidatePane::LayoutContainedControls()
- {
- LayoutLabels();
- LayoutCandidateSelected();
- }
-
-void CAknFepUICtrlCandidatePane::LayoutLabel(TInt aIndex)
- {
- __ASSERT_DEBUG(aIndex >= 0, AknFepUiInterfacePanic(EAknFepUiInterfacePanicAttemptedLayoutOutsideVisibleCount));
- __ASSERT_DEBUG(aIndex < iVisibleCount, AknFepUiInterfacePanic(EAknFepUiInterfacePanicAttemptedLayoutOutsideVisibleCount));
- TRect rect = Rect();
- CEikLabel* candidateLabel = iCandidateLabelArray[aIndex];
- CEikLabel* ordinalLabel = iOrdinalLabelArray[aIndex];
- TAknWindowLineLayout layoutCandidateItem =
- CAknFepChineseUIDataConv::AnyToWindowLine( iLafDataMgr->RequestData(ELayoutCandidateItem));
- TAknTextLineLayout candidateLayout =
- CAknFepChineseUIDataConv::AnyToTextLine( iLafDataMgr->RequestData(ECandidatePaneTextLine));
-
- // layout candidate label
- TAknLayoutRect layoutRectCandidateItem;
- layoutRectCandidateItem.LayoutRect(rect,layoutCandidateItem);
- TRect rectCandidateItem = layoutRectCandidateItem.Rect();
-
- if(aIndex > 0)
- {
- rectCandidateItem.iTl.iX = iCandidateLabelArray[aIndex - 1]->Rect().iBr.iX;
- }
- TAknLayoutText layoutText;
- layoutText.LayoutText(rectCandidateItem,candidateLayout);
- TRect rectText = layoutText.TextRect();
- rectText.SetWidth(LabelTextWidthInPixels(aIndex));
-
- candidateLabel->SetRect(rectText);
- candidateLabel->SetFont(layoutText.Font());
-
- // layout ordinal label
- TAknTextLineLayout ordinalLayout =
- CAknFepChineseUIDataConv::AnyToTextLine( iLafDataMgr->RequestData(EOrdinalCandidateTextLayout));
- TBufC16<1> buf;
- TAknLayoutText layoutOrdinal;
- TPtr16 ptr = buf.Des();
- ptr = (*(ordinalLabel->Text())).Left(EOneCandidate);
-
- layoutOrdinal.LayoutText(rectCandidateItem,ordinalLayout);
-
- const CFont* font = layoutOrdinal.Font();
-
- TRect rectOrdinal = layoutOrdinal.TextRect();
- // align ordinal label and candidate label
-
- /* removed in 2006.03.29
- rectOrdinal.iTl.iY = rectText.iTl.iY;
- rectOrdinal.SetWidth(font->TextWidthInPixels(ptr));
- rectOrdinal.SetHeight(font->HeightInPixels());
- */
-
- // inserted in 2006.03.29
- TPoint ordinalPosition;
- TInt ordinalWidth = font->TextWidthInPixels(ptr);
- ordinalPosition.iX = rectText.iTl.iX - ordinalWidth;
- ordinalPosition.iY = rectText.iTl.iY;
-
- rectOrdinal = TRect(ordinalPosition,
- TPoint(ordinalPosition.iX + rectOrdinal.Width(),
- ordinalPosition.iY + rectOrdinal.Height()));
- // end inserting
-
- ordinalLabel->SetRect(rectOrdinal);
- ordinalLabel->SetFont(font);
- iOrdinalLableWidth = rectOrdinal.Width();
-
- // override colours if skin data present
- MAknsSkinInstance* skin = AknsUtils::SkinInstance();
- TRgb candidateLabelTextColor = layoutText.Color();
- TRgb ordinalLabelTextColor = layoutOrdinal.Color();
-
- AknsUtils::GetCachedColor(skin, candidateLabelTextColor,
- KAknsIIDQsnTextColors, EAknsCIQsnTextColorsCG19);
-
- AknsUtils::GetCachedColor(skin, ordinalLabelTextColor,
- KAknsIIDQsnTextColors, EAknsCIQsnTextColorsCG19);
-
- TRAP_IGNORE(
- candidateLabel->OverrideColorL(EColorLabelText, candidateLabelTextColor);
- ordinalLabel->OverrideColorL(EColorLabelText, ordinalLabelTextColor);
- );
- }
-
-void CAknFepUICtrlCandidatePane::LayoutLabels()
- {
- for(TInt i = 0; i < iVisibleCount; i++)
- {
- LayoutLabel(i);
- }
- }
-
-void CAknFepUICtrlCandidatePane::LayoutCandidateSelected()
- {
- TCandidateMode candidateMode = iCandidateModeArray[iSelected];
- iCandidateSelected->SetCandidateMode(candidateMode);
- iCandidateSelected->SetLayout(iPaneLayout);
-
- TRect ordinalRect = iOrdinalLabelArray[iSelected]->Rect();
-
- TAknLayoutRect layoutRect;
- TAknWindowLineLayout layoutCandidateItem =
- CAknFepChineseUIDataConv::AnyToWindowLine( iLafDataMgr->RequestData(ELayoutCandidateItem));
- layoutRect.LayoutRect(Rect(),layoutCandidateItem);
-
- TRect rectLayoutCandidateItem = layoutRect.Rect();
- rectLayoutCandidateItem.iTl.iX = ordinalRect.iTl.iX;
-
- TAknTextLineLayout candidateLayout =
- CAknFepChineseUIDataConv::AnyToTextLine( iLafDataMgr->RequestData(ECandidatePaneTextLine));
- TAknTextLineLayout ordinalLayout =
- CAknFepChineseUIDataConv::AnyToTextLine( iLafDataMgr->RequestData(EOrdinalCandidateTextLayout));
- rectLayoutCandidateItem.SetWidth(iCandidateLabelArray[iSelected]->Rect().Width() + candidateLayout.il - ordinalLayout.il);
-
- rectLayoutCandidateItem.SetHeight(rectLayoutCandidateItem.Height() - 1);
-
- iCandidateSelected->SetRect(rectLayoutCandidateItem);
- }
-
-void CAknFepUICtrlCandidatePane::UpdateLabelVisibility()
- {
- TInt number = 0;
- // only show the labels corresponding to candidates that have been set
- if(iPages.Count() != 0)
- {
- number = iPages[iCurDisplayPage].iEndIndex - iPages[iCurDisplayPage].iStartIndex + 1;
- }
- else
- {
- number = iBuffer.Length();
- }
-
- if(number > iVisibleCount)
- {
- number = iVisibleCount;
- }
- for(TInt i = 0; i < EMaxCandidates; i++)
- {
- CEikLabel* candidateLabel = iCandidateLabelArray[i];
- CEikLabel* ordinalLabel = iOrdinalLabelArray[i];
- if(i < number)
- {
- candidateLabel->MakeVisible(ETrue);
- ordinalLabel->MakeVisible(iShowCandidateOrdinals); // only show if needed
- }
- else
- {
- candidateLabel->MakeVisible(EFalse);
- ordinalLabel->MakeVisible(EFalse); // don't show it as there is no character to go with it
- }
- }
- }
-
-void CAknFepUICtrlCandidatePane::ResetCandidateState()
- {
- iPages.Reset();
- }
-
-void CAknFepUICtrlCandidatePane::DrawBackground(const TRect& aRect) const
- {
- // instead of drawing one blank rectangle over each of the 20 labels,
- // just draw one big rectangle covering the entire pane
- CWindowGc& gc = SystemGc();
- TRgb background = AKN_LAF_COLOR(0);
- gc.SetBrushColor(background);
- gc.Clear(aRect);
- }
-
-void CAknFepUICtrlCandidatePane::InternalSpilitPhraseCandidate()
- {
- //__ASSERT_DEBUG(aStartIndex + aCount <= iCandidateArray->Count());
-
- TInt phraseCandidateNum = iCandidateArray->Count();
- if( phraseCandidateNum == iUnpagedIndex )
- {
- //nothing need to be paged
- return;
- }
-
- TPage curPage;
- TInt index = iUnpagedIndex;
- CEikLabel* candidateLabel;
-
- curPage.iStartIndex = index;
- curPage.iEndIndex = index;
- TInt candidateLeftNum = phraseCandidateNum - index > EMaxCandidates?
- EMaxCandidates : phraseCandidateNum - index;
-
- TAknWindowLineLayout layoutCandidateItem =
- CAknFepChineseUIDataConv::AnyToWindowLine( iLafDataMgr->RequestData(ELayoutCandidateItem));
- TAknTextLineLayout candidateLayout =
- CAknFepChineseUIDataConv::AnyToTextLine( iLafDataMgr->RequestData(ECandidatePaneTextLine));
-
- // avoid accessing layout data member
- TAknLayoutRect layoutRect;
- layoutRect.LayoutRect(Rect(),layoutCandidateItem);
- TRect rectLayoutCandidateItem = layoutRect.Rect();
-
- TAknLayoutText layoutText;
- layoutText.LayoutText(rectLayoutCandidateItem,candidateLayout);
- TRect rectText = layoutText.TextRect();
-
- TInt distance = rectText.iTl.iX - rectLayoutCandidateItem.iTl.iX + rectLayoutCandidateItem.iBr.iX - rectText.iBr.iX;
- rectLayoutCandidateItem.iTl.iX += distance;
-
- TInt width = 0;
- TInt i = 0;
-
- const TInt candidateWidth = rectLayoutCandidateItem.Width();
- for ( i = 0; i < candidateLeftNum; i ++ )
- {
- // Initialization
- candidateLabel = iCandidateLabelArray[i];
- // labelWidth in the font
- const CFont* font = layoutText.Font();
- TPtrC newText = (*iCandidateArray)[iUnpagedIndex + i];
- TInt labelWidth = font->TextWidthInPixels( newText );
- if ( labelWidth > candidateWidth )
- {
- TBufC<EPhraseLength+10> buf1;
- TPtr text( buf1.Des() );
-
- AknBidiTextUtils::ConvertToVisualAndClip(newText, text, *font,
- candidateWidth, candidateWidth,
- AknBidiTextUtils::EImplicit,0xFFFF);
-
- iCandidateArray->Delete( iUnpagedIndex + i );
- TRAP_IGNORE(
- {
- iCandidateArray->InsertL( iUnpagedIndex + i, text );
- candidateLabel->SetTextL(text);
- });
-
- }
- else
- {
- TRAP_IGNORE( candidateLabel->SetTextL(newText));
- width = LabelTextWidthInPixels(i)+ iOrdinalLableWidth;
- rectLayoutCandidateItem.iTl.iX += width;
- }
- if (rectLayoutCandidateItem.iTl.iX >= rectLayoutCandidateItem.iBr.iX)
- {
- if (index>0)
- {
- curPage.iEndIndex = index - 1;
- }
- else
- {
- curPage.iEndIndex = index;
- }
-
- iPages.Append(curPage);
- break;
- }
- else
- {
- index ++;
- }
-
- if( i == EMaxCandidates -1 )
- {
- curPage.iEndIndex = index - 1;
- iPages.Append(curPage);
- break;
- }
-
- }
-
- if( i >= candidateLeftNum )
- {
- curPage.iEndIndex = index - 1;
- iPages.Append(curPage);
- }
-
- iUnpagedIndex = index;
- }
-
-TBool CAknFepUICtrlCandidatePane::IsFirstPage()
- {
- return iCurDisplayPage == 0;
- }
-
-TBool CAknFepUICtrlCandidatePane::IsLastPage()
- {
- if( iCandidateArray->Count() == iUnpagedIndex )
- {
- return iCurDisplayPage == iPages.Count() - 1;
- }
- return EFalse;
- }
-
-void CAknFepUICtrlCandidatePane::SetInVisiable()
- {
- for (TInt i = 0; i < EMaxCandidates; i ++)
- {
- CEikLabel* candidateLabel = iCandidateLabelArray[i];
- CEikLabel* ordinalLabel = iOrdinalLabelArray[i];
- candidateLabel->MakeVisible(EFalse);
- ordinalLabel->MakeVisible(EFalse);
- }
- iCandidateSelected->MakeVisible(EFalse);
- }
-
-TBool CAknFepUICtrlCandidatePane::NeedGetNewCandidatePage()
- {
- return (iCandidateArray->Count() - iUnpagedIndex < CandidateCountLeft);
-
- }
-
-//Bug Fixing for ESSG-7P5CSZ
-void CAknFepUICtrlCandidatePane::Enable(TBool aEnable)
- {
- if (!aEnable)
- {
- for (TInt i=0; i<iVisibleCount; i++)
- {
- TRAP_IGNORE(iCandidateLabelArray[i]->SetTextL(KNullDesC));
- }
- iCandidateArray->Reset();
- iVisibleCount = 0;
- DrawNow();
- }
- }
-// End of file