fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonCtrlCandidateCharacter.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonCtrlCandidateCharacter.cpp Wed Sep 15 12:34:44 2010 +0300
@@ -0,0 +1,226 @@
+/*
+* 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 CAknFepUICtrlCandidateCharacter methods.
+*
+*/
+
+
+
+
+
+
+
+
+
+
+
+#include <AknUtils.h>
+#include <AknsDrawUtils.h>
+#include <eiklabel.h>
+#include <skinlayout.cdl.h>
+#include <aknlayoutscalable_avkon.cdl.h>
+
+#include "AknFepUiInputStateBase.h"
+#include "AknFepUIAvkonCtrlCandidateCharacter.h"
+#include "AknFepUIAvkonCtrlPinyinPopup.h"
+#include "AknFepUiInterfacePanic.h"
+#include "AknFepUIAvkonCtrlCandidatePane.h"
+
+
+CAknFepUICtrlCandidateCharacter* CAknFepUICtrlCandidateCharacter::NewL( RWindowTreeNode& aParent,
+ MAknFepUIEventObserver* aObserver )
+ {
+ CAknFepUICtrlCandidateCharacter* self = new(ELeave) CAknFepUICtrlCandidateCharacter;
+ CleanupStack::PushL(self);
+ self->ConstructL( aParent, aObserver );
+ CleanupStack::Pop();
+ return self;
+ }
+
+CAknFepUICtrlCandidateCharacter::~CAknFepUICtrlCandidateCharacter()
+ {
+ delete iCandidateLabel;
+ }
+
+const TDesC* CAknFepUICtrlCandidateCharacter::Text() const
+ {
+ return iCandidateLabel->Text();
+ }
+
+void CAknFepUICtrlCandidateCharacter::SetText( const TDesC& aCharacter )
+ {
+ // make sure that we only copy as many characters as we can show
+ TInt textLen = aCharacter.Length();
+ TInt textLength = textLen > EMaxSelectedCandidateLength? EMaxSelectedCandidateLength:textLen;
+ TPtrC newText = aCharacter.Left( textLength );
+ TPtr ptr = iBuffer.Des();
+ if ( ptr.Compare( newText ) != 0 )
+ {
+ ptr.Copy( newText );
+
+ // ignore any errors... we have guaranteed that the descriptor already has sufficient characters to avoid a realloc
+ TRAP_IGNORE( iCandidateLabel->SetTextL( iBuffer ));
+ }
+ }
+
+void CAknFepUICtrlCandidateCharacter::SizeChanged()
+ {
+ LayoutRects();
+ LayoutContainedControls();
+ }
+
+TInt CAknFepUICtrlCandidateCharacter::CountComponentControls() const
+ {
+ CCoeControl* controls[] =
+ {
+ iCandidateLabel
+ } ;
+
+ TInt count = 0 ;
+ for ( TUint ii = 0; ii < ( sizeof(controls) / sizeof(CCoeControl*)) ;ii++ )
+ {
+ if(controls[ii])
+ {
+ count++;
+ }
+ }
+ return count ;
+ }
+
+CCoeControl* CAknFepUICtrlCandidateCharacter::ComponentControl( TInt aIndex ) const
+ {
+ CCoeControl* controls[] =
+ {
+ iCandidateLabel
+ } ;
+
+ 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 CAknFepUICtrlCandidateCharacter::Draw( const TRect& /*aRect*/ ) const
+ {
+ CWindowGc& gc = SystemGc();
+
+ TBool skinnedDraw = EFalse;
+ MAknsSkinInstance* skin = AknsUtils::SkinInstance();
+ TRect outerRect;
+ TRect innerRect;
+ CalculateFrameRects( outerRect, innerRect );
+
+ // draw the whole frame background according to the containing context, which in this case
+ // is the candidate pane, to avoid corner drawing mess and to cope with masked grid frame centre
+ MAknsControlContext* cc = AknsDrawUtils::ControlContext(this);
+
+ // Set highlight color to gray
+ if( iIsHighligt )
+ {
+
+ skinnedDraw = AknsDrawUtils::DrawFrame( skin, gc, outerRect, innerRect,
+ KAknsIIDQsnFrKeypadButtonFrPressed,
+ KAknsIIDDefault );
+ }
+ else
+ {
+
+ skinnedDraw = AknsDrawUtils::DrawFrame( skin, gc, outerRect, innerRect,
+ KAknsIIDQsnFrKeypadButtonFrNormal,
+ KAknsIIDDefault );
+ }
+
+ if ( !skinnedDraw )
+ {
+ iRectShadow.DrawRect( gc );
+ iRectHighlight.DrawRect( gc );
+ }
+ }
+
+void CAknFepUICtrlCandidateCharacter::ConstructL( RWindowTreeNode& aParent, MAknFepUIEventObserver* aObserver )
+ {
+ CreateWindowL( aParent );
+
+ iCandidateLabel = new(ELeave) CEikLabel;
+ iCandidateLabel->SetBufferReserveLengthL( EMaxSelectedCandidateLength ); // this will do a realloc now, so no need to later
+ iCandidateLabel->SetContainerWindowL( *this );
+ iCandidateLabel->SetLabelAlignment( ELayoutAlignCenter );
+ }
+
+CAknFepUICtrlCandidateCharacter::CAknFepUICtrlCandidateCharacter()
+ {
+ }
+
+void CAknFepUICtrlCandidateCharacter::LayoutRects()
+ {
+ TRect rect = Rect();
+ iRectShadow.LayoutRect( rect, AKN_LAYOUT_WINDOW_Candidate_selection_highlight_Line_1(rect));
+ iRectHighlight.LayoutRect( rect, AKN_LAYOUT_WINDOW_Candidate_selection_highlight_Line_2(rect));
+ iRectShadow.LayoutRect( rect, AknLayoutScalable_Avkon::cell_hyb_candi_pane_g1( 0 ));
+ }
+
+
+void CAknFepUICtrlCandidateCharacter::LayoutContainedControls()
+ {
+ TRect rect = Rect();
+
+ TAknTextLineLayout candidateLayout = AknLayoutScalable_Avkon::cell_hyb_candi_pane_t1(0);
+
+ TAknLayoutText layoutText;
+ layoutText.LayoutText( rect, candidateLayout );
+ TRect rectText = layoutText.TextRect();
+ const CFont* font = layoutText.Font();
+
+ iCandidateLabel->SetRect( rectText );
+ iCandidateLabel->SetFont( font );
+
+ // override with skin text color
+ MAknsSkinInstance* skin = AknsUtils::SkinInstance();
+ TRgb labelTextColor;
+
+ AknsUtils::GetCachedColor( skin, labelTextColor,
+ KAknsIIDQsnTextColors, EAknsCIQsnTextColorsCG11 );
+
+ TRAP_IGNORE(
+ iCandidateLabel->OverrideColorL(EColorLabelText, labelTextColor);
+ );
+ }
+
+void CAknFepUICtrlCandidateCharacter::CalculateFrameRects(TRect& aOuterRect, TRect& aInnerRect) const
+ {
+ TRect windowRect = Rect();
+
+ TAknLayoutRect topLeft;
+ topLeft.LayoutRect( windowRect, SkinLayout::Highlight_skin_placing__grid__Line_2());
+
+ TAknLayoutRect bottomRight;
+ bottomRight.LayoutRect( windowRect, SkinLayout::Highlight_skin_placing__grid__Line_5());
+
+ aOuterRect = TRect( topLeft.Rect().iTl, bottomRight.Rect().iBr );
+ aInnerRect = TRect( topLeft.Rect().iBr, bottomRight.Rect().iTl );
+ }
+
+void CAknFepUICtrlCandidateCharacter::SetHighlight( TBool bHighlight )
+ {
+ iIsHighligt = bHighlight;
+ DrawDeferred();
+ }
+
+// End of file