fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonCtrlCandidateCharacter.cpp
branchRCL_3
changeset 50 5a1685599b76
--- /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