--- /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 );
+ }