diff -r 000000000000 -r eb1f2e154e89 textinput/peninputcommonctrls/src/peninputvkbctrl/peninputvkbctrlext.cpp --- /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 +#include +#include +#include +#include + +// 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& keys = KeyArray(); + for(TInt i = keys.Count() - 1 ; i >= 0 ; --i) + { + RemoveKey(keys[i]); + } + + const RPointerArray& bmps = KeyHighlightBmpList(); + for(TInt i = bmps.Count() - 1 ; i >= 0 ; --i) + { + RemoveKeyHighLightBitmap(i); + } + + const RPointerArray& 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(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 ); + }