textinput/peninputcommonctrls/src/peninputvkbctrl/peninputvkbctrlext.cpp
changeset 0 eb1f2e154e89
child 9 e6a39382bb9c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/textinput/peninputcommonctrls/src/peninputvkbctrl/peninputvkbctrlext.cpp	Tue Feb 02 01:02:04 2010 +0200
@@ -0,0 +1,393 @@
+/*
+* Copyright (c) 2005-2007 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:  vkb control extension
+*
+*/
+
+
+// System includes
+#include <barsread.h>
+#include <peninputlayout.h>
+#include <AknIconUtils.h>
+#include <AknsUtils.h>
+#include <coemain.h>
+
+// User includes
+#include "peninputvkbctrlext.h"
+#include "peninputvkbctrllayout.h"
+
+// Constants
+const TUint32 KDefaultTextColor = 0x000000;
+const TInt32 KInvalidResId = -1;
+const TInt KInvalidImg = -1 ;
+// ======== MEMBER FUNCTIONS ========
+
+
+
+// --------------------------------------------------------------------------
+// CPeninputVkbCtrlExt::CPeninputVkbCtrlExt
+// (other items were commented in a header)
+// --------------------------------------------------------------------------
+//
+EXPORT_C CPeninputVkbCtrlExt::CPeninputVkbCtrlExt( const TRect& aRect,
+    CFepUiLayout* aUiLayout, TInt aControlId, const TFontSpec& aFontSpec,TBool aIrregular )
+    : CVirtualKeyboard( aRect, aUiLayout, aControlId, aFontSpec, aIrregular )
+    {
+    }
+
+// --------------------------------------------------------------------------
+// CPeninputVkbCtrlExt::NewL
+// (other items were commented in a header)
+// --------------------------------------------------------------------------
+//
+EXPORT_C CPeninputVkbCtrlExt* CPeninputVkbCtrlExt::NewL( const TRect& aRect,
+    CFepUiLayout* aUiLayout, TInt aControlId, const CFont* aFont,TBool aIrregular)
+    {
+    TFontSpec fontSpec;
+    
+    CPeninputVkbCtrlExt* vkb = new (ELeave)  
+        CPeninputVkbCtrlExt( aRect, aUiLayout, aControlId, fontSpec,aIrregular );
+    CleanupStack::PushL( vkb );
+    vkb->ConstructL();
+    vkb->SetFont( aFont );
+    CleanupStack::Pop( vkb );
+    
+    return vkb;
+    }
+            
+// --------------------------------------------------------------------------
+// CPeninputVkbCtrlExt::~CPeninputVkbCtrlExt
+// (other items were commented in a header)
+// --------------------------------------------------------------------------
+//
+EXPORT_C CPeninputVkbCtrlExt::~CPeninputVkbCtrlExt()
+    {
+    Reset();
+    if( iResourceId == KInvalidImg )
+    	{
+		SetBackgroundBmp( NULL );
+		SetBackgroundMaskBmp( NULL );    		
+    	}
+    }
+
+// --------------------------------------------------------------------------
+// CPeninputVkbCtrlExt::SizeChanged
+// (other items were commented in a header)
+// --------------------------------------------------------------------------
+//
+EXPORT_C void CPeninputVkbCtrlExt::SizeChanged( const TInt aUnitWidth,
+                                                const TInt aUnitHeight,
+                                                const TPoint& aLeftTopPoint )
+    {
+    iUnitWidth = aUnitWidth;
+    iUnitHeight = aUnitHeight;
+    iLeftTopPoint = aLeftTopPoint;
+    
+    if ( iVkbLayoutInfo )
+        {        
+        // 1.Reset the size and position of Vkb ctrl and keys
+        TRect rect = TRect( iLeftTopPoint, TSize( iUnitWidth * iVkbLayoutInfo->Columns(),
+                                                  iUnitHeight * iVkbLayoutInfo->Rows() ) );
+        SetRect( rect );
+            
+        // 2.Move all keys(Needn't change size, because it has been 
+        }
+    }
+    
+// --------------------------------------------------------------------------
+// CPeninputVkbCtrlExt::SizeChanged
+// (other items were commented in a header)
+// --------------------------------------------------------------------------
+//
+EXPORT_C void CPeninputVkbCtrlExt::SizeChanged( const TRect& aRect )
+    {
+    SetRect( aRect );
+    }
+    
+    
+// CPeninputVkbCtrlExt::ReorganizeVkbKeys
+// (other items were commented in a header)
+// --------------------------------------------------------------------------
+//
+EXPORT_C void CPeninputVkbCtrlExt::ReorganizeVkbKeys(
+    CPeninputVkbLayoutInfo* aVkbLayoutInfo )
+    {           
+    Reset();
+
+    iVkbLayoutInfo = aVkbLayoutInfo;
+
+    TRect rect = TRect( iLeftTopPoint, TSize( iUnitWidth * iVkbLayoutInfo->Columns(),
+                                              iUnitHeight * iVkbLayoutInfo->Rows() ) );
+	if( iResourceId != KInvalidImg )
+		{
+		if( BackgroundBmp() && BackgroundBmp()->SizeInPixels() != Rect().Size() )                                              
+			AknIconUtils::SetSize(BackgroundBmp(), Rect().Size(), EAspectRatioNotPreserved);
+		if( BkMaskBmp() && BkMaskBmp()->SizeInPixels() != Rect().Size() ) 
+			AknIconUtils::SetSize(BkMaskBmp(), Rect().Size(), EAspectRatioNotPreserved);
+		}
+	else
+		{		
+	    if ( iVkbLayoutInfo->BgBmp() )
+	        {	        
+	        SetBackgroundBmp( iVkbLayoutInfo->BgBmp() ) ;
+	        }
+	    
+	    if ( iVkbLayoutInfo->BgMaskBmp() )
+	        {
+	        SetBackgroundMaskBmp( iVkbLayoutInfo->BgMaskBmp() );
+	        }			
+		}	                                       
+//    SetRect( rect );
+            
+    // According the information in vkbLayout to construct all keys and
+    // then add into the keys.
+/*    
+    if ( iVkbLayoutInfo->BgBmp() )
+        {
+        TRAP_IGNORE( SetBackgroundBitmapL( iVkbLayoutInfo->BgBmp() ) );
+        }
+    
+    if ( iVkbLayoutInfo->BgMaskBmp() )
+        {
+        TRAP_IGNORE( SetBackgroundMaskBitmapL( iVkbLayoutInfo->BgMaskBmp() ) );
+        }
+*/
+    if ( iVkbLayoutInfo->DimBmp() )
+        {
+        SetDimKeyBmp( iVkbLayoutInfo->DimBmp() );
+        }
+    
+    if ( iVkbLayoutInfo->DimMaskBmp() )
+        {
+        SetDimKeyMaskBmp( iVkbLayoutInfo->DimMaskBmp() );
+        }
+
+    TInt count = iVkbLayoutInfo->HighlightBmps().Count();
+    
+    TRAP_IGNORE(
+    for ( TInt i = 0; i < count; i++ )
+        {
+        AddKeyHighLightBitmapL(iVkbLayoutInfo->HighlightBmps()[i]);
+        }
+        );
+        
+    count = iVkbLayoutInfo->HighlightMaskBmps().Count();
+
+    TRAP_IGNORE(
+        for ( TInt i = 0; i < count; i++ )
+            {
+            AddKeyHighLightMaskBitmapL(iVkbLayoutInfo->HighlightMaskBmps()[i]);
+            }
+        );
+    
+    count = iVkbLayoutInfo->KeyInfoList().Count();
+    TRAP_IGNORE(
+    for ( TInt i = 0; i < count; i++ )
+        {
+        iVkbLayoutInfo->KeyInfoList()[i]->Key()->SetDimmed( EFalse );
+        AddKeyL( iVkbLayoutInfo->KeyInfoList()[i]->Key() );
+        }
+    );
+   
+    TRgb textColor;
+    TInt error = AknsUtils::GetCachedColor(AknsUtils::SkinInstance(),
+                                           textColor,
+                                           KAknsIIDQsnTextColors,
+                                           EAknsCIQsnTextColorsCG59);
+    if (error != KErrNone)
+        {
+    	textColor = TRgb( KDefaultTextColor );
+        }  
+    SetFontColor( textColor );
+    
+    Draw();
+    }
+
+// --------------------------------------------------------------------------
+// CPeninputVkbCtrlExt::Reset
+// (other items were commented in a header)
+// --------------------------------------------------------------------------
+//
+EXPORT_C void CPeninputVkbCtrlExt::Reset()
+    {
+    const RPointerArray<CVirtualKey>& keys = KeyArray();
+    for(TInt i = keys.Count() - 1 ; i >= 0 ; --i)    
+        {
+        RemoveKey(keys[i]);
+        }
+    
+    const RPointerArray<CFbsBitmap>& bmps = KeyHighlightBmpList();
+    for(TInt i = bmps.Count() - 1 ; i >= 0 ; --i)
+        {
+        RemoveKeyHighLightBitmap(i);
+        }
+
+    const RPointerArray<CFbsBitmap>& maskbmps = KeyHighlightMaskBmpList();    
+    for(TInt i = maskbmps.Count() - 1 ; i >= 0 ; --i)
+        {
+        RemoveKeyHighLightMaskBitmap(i);
+        }    
+            
+    SetDimKeyBmp( NULL );
+    SetDimKeyMaskBmp( NULL );    
+    
+    iVkbLayoutInfo = NULL;
+    }
+
+// --------------------------------------------------------------------------
+// CPeninputVkbCtrlExt::Move
+// (other items were commented in a header)
+// --------------------------------------------------------------------------
+//
+EXPORT_C void CPeninputVkbCtrlExt::Move( const TPoint& aOffset )
+    {
+    TRect rect = Rect();
+    rect.Move( aOffset );
+    SetRect( rect );     
+    }
+    
+// --------------------------------------------------------------------------
+// CPeninputVkbCtrlExt::DimKeys
+// (other items were commented in a header)
+// --------------------------------------------------------------------------
+//
+EXPORT_C void CPeninputVkbCtrlExt::DimKeys( const HBufC* aPermitted )
+    {
+    TInt count = iVkbLayoutInfo->KeyInfoList().Count();
+    
+    for ( TInt i = 0; i < count ; i++ )
+        {
+        TChar ch = TChar( (TUint)( KeyArray()[i]->KeyCode() ) );
+        TInt index = aPermitted->Locate( ch ) ;
+        
+        if ( index == KErrNotFound )
+            {
+            DimKey( KeyArray()[i], ETrue );
+            }     
+        }
+    }
+
+// --------------------------------------------------------------------------
+// CPeninputVkbCtrlExt::DimKeySet
+// (other items were commented in a header)
+// --------------------------------------------------------------------------
+//
+EXPORT_C void CPeninputVkbCtrlExt::DimKeySet( const HBufC* aSet, TBool aDim )
+    {
+    TInt keyCount = iVkbLayoutInfo->KeyInfoList().Count();
+    TInt setCount = const_cast<HBufC*>(aSet)->Des().Length();
+    TInt findNum = 0;
+    
+    for ( TInt i = 0; i < keyCount ; i++ )
+        {
+        TChar ch = TChar( (TUint)( KeyArray()[i]->KeyCode() ) );
+        TInt index = aSet->Locate( ch ) ;
+        
+        if ( index != KErrNotFound )
+            {
+            findNum++;
+            DimKey( KeyArray()[i], aDim );
+            }     
+        
+        if ( findNum == setCount )
+            {
+            break;
+            }
+        }
+    }
+
+// --------------------------------------------------------------------------
+// CPeninputVkbCtrlExt::CancelDims
+// (other items were commented in a header)
+// --------------------------------------------------------------------------
+//
+EXPORT_C void CPeninputVkbCtrlExt::CancelDims()
+    {
+    TInt count = iVkbLayoutInfo->KeyInfoList().Count();
+    
+    for ( TInt i = 0; i < count ; i++ )
+        {
+        DimKey( KeyArray()[i], EFalse );
+        }
+    }
+
+// --------------------------------------------------------------------------
+// CPeninputVkbCtrlExt::ConstructFromResourceL
+// (other items were commented in a header)
+// --------------------------------------------------------------------------
+//
+EXPORT_C void CPeninputVkbCtrlExt::ConstructFromResourceL()
+	{
+	if (iResourceId == KInvalidResId)
+		{
+	    return;
+		}
+	
+	// Release original resource
+    if( BackgroundBmp() )
+    	{
+    	CFbsBitmap* bkBmp = BackgroundBmp();
+    	delete bkBmp;	
+    	SetBackgroundBmp( NULL );
+    	}
+    if( BkMaskBmp() )
+    	{
+    	CFbsBitmap* bkMaskBmp = BkMaskBmp();
+    	delete bkMaskBmp;
+		SetBackgroundMaskBmp( NULL );
+    	}    
+    		
+    TResourceReader resReader;
+    CCoeEnv::Static()->CreateResourceReaderLC( resReader, iResourceId );                                             
+     
+    TPtrC bmpFileName = resReader.ReadTPtrC();
+    TInt32 imgMajorSkinId = resReader.ReadInt32();
+
+    TAknsItemID id;
+    TInt skinitemid;
+    
+    MAknsSkinInstance* skininstance = AknsUtils::SkinInstance();
+    const TInt16 bmpId = resReader.ReadInt16();
+    const TInt16 bmpMskId = resReader.ReadInt16();
+    skinitemid = resReader.ReadInt16();   
+    id.Set(TInt(imgMajorSkinId), skinitemid);
+	
+    if (bmpId != KInvalidImg)
+    	{
+    	CFbsBitmap* backgroundImg = NULL;
+    	CFbsBitmap* backgroundMaskImg = NULL;
+        if (bmpMskId != KInvalidImg)
+            {
+            AknsUtils::CreateIconL(skininstance, 
+                                   id,
+                                   backgroundImg,
+                                   backgroundMaskImg,
+                                   bmpFileName,
+                                   bmpId,
+                                   bmpMskId);
+            }
+        else
+            {
+            AknsUtils::CreateIconL(skininstance,
+                                   id,
+                                   backgroundImg,
+                                   bmpFileName,
+                                   bmpId);
+            }
+       
+        SetBackgroundBmp( backgroundImg );
+        SetBackgroundMaskBmp( backgroundMaskImg );           
+    	}
+    CleanupStack::PopAndDestroy( 1 );		
+	}