--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/textinput/peninputfingerhwrar/src/peninputfingerhwarvkbutility.cpp Wed Sep 01 12:23:33 2010 +0100
@@ -0,0 +1,197 @@
+/*
+* Copyright (c) 2010 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: Implementation of virtual key ctrl utility for arabic hwr.
+*
+*/
+
+// INCLUDE
+#include <e32std.h>
+#include <barsread.h>
+#include <coemain.h>
+
+#include "peninputfingerhwarvkbutility.h"
+#include "peninputlayoutvkb.h"
+#include "peninputpluginutils.h"
+#include "hbufcarrayar.h"
+#include "peninputfingerhwrarstoreconstants.h"
+
+// ---------------------------------------------------------------------------
+// Load virtual keys image
+// ---------------------------------------------------------------------------
+//
+void PeninputFingerHwrArVkbUtility::LoadVirtualKeypadKeyL(CVirtualKeyboard& aVkbCtrl, const TInt aResId, const RArray<TRect>& aCellRects)
+ {
+ aVkbCtrl.SetResourceId(aResId);
+
+ TResourceReader reader;
+ CCoeEnv::Static()->CreateResourceReaderLC( reader, aResId );
+
+ // construct keys
+ TInt resKeyCount = reader.ReadInt16();
+ TInt existsKeyCount = aVkbCtrl.KeyArray().Count();
+ TInt rectCount = aCellRects.Count();
+
+ for ( TInt i = 0; i < resKeyCount; i++ )
+ {
+ if ( i < existsKeyCount )
+ {
+ CVirtualKey* vk = aVkbCtrl.KeyArray()[i];
+ UpdateVkbKeyL( vk, reader, aCellRects[i%rectCount] );
+ }
+ else
+ {
+ CVirtualKey* vk = CreateVkbKeyL( reader, aCellRects[i%rectCount] );
+ CleanupStack::PushL( vk );
+ aVkbCtrl.AddKeyL( vk );
+
+ CleanupStack::Pop( vk );
+ }
+ }
+
+ CleanupStack::PopAndDestroy( 1 ); // reader
+
+ aVkbCtrl.Draw();
+ aVkbCtrl.UpdateArea( aVkbCtrl.Rect() );
+ }
+
+// ---------------------------------------------------------------------------
+// Create the virtual key
+// ---------------------------------------------------------------------------
+//
+CVirtualKey* PeninputFingerHwrArVkbUtility::CreateVkbKeyL(TResourceReader& aReader,const TRect& aKeyRect)
+ {
+ CHBufCArray* keytexts = CHBufCArray::NewL();
+ CleanupStack::PushL( keytexts );
+
+ for ( TInt i = 0; i <= EPosLast; i++ )
+ {
+ HBufC* unicode = aReader.ReadHBufCL();
+ keytexts->Array().AppendL( unicode );
+ }
+
+ TInt keyscancode = aReader.ReadInt16();
+
+ HBufC* text = keytexts->Array()[0];
+
+ CVirtualKey* vk = NULL;
+ if ( text )
+ {
+ vk = CVirtualKey::NewL( *text, keyscancode, aKeyRect, aKeyRect, 0 );
+ }
+ else
+ {
+ vk = CVirtualKey::NewL( KNullDesC, keyscancode, aKeyRect, aKeyRect, 0 );
+ }
+
+ CleanupStack::PopAndDestroy( keytexts ); //keytexts
+
+
+ TRect innerrect = aKeyRect;
+ innerrect.Shrink( TSize(10, 10) );
+ vk->SetInnerRect( innerrect );
+
+ return vk;
+ }
+
+// ---------------------------------------------------------------------------
+// Load virtual keys image
+// ---------------------------------------------------------------------------
+//
+void PeninputFingerHwrArVkbUtility::LoadVkbKeyImageL(CVirtualKeyboard& aVkbCtrl, TInt aResId, const TSize& aKeySize)
+ {
+ TResourceReader reader;
+ CCoeEnv::Static()->CreateResourceReaderLC( reader, aResId );
+
+ TPtrC bmpFileName = reader.ReadTPtrC();
+ TInt32 imgMajorSkinId = reader.ReadInt32();
+ TAknsItemID id;
+
+ TSize keySize = aKeySize;
+
+ for ( TInt index = 0; index <= EKeyBmpLastType ; index += 2 )
+ {
+ // Get the image ids and mask ids from resource
+ TInt bmpId = reader.ReadInt16();
+ TInt bmpMskId = reader.ReadInt16();
+
+ // read skin item id
+ const TInt skinitemid = reader.ReadInt16();
+ id.Set( TInt( imgMajorSkinId ), skinitemid );
+
+ if ( bmpId != KInvalidImg )
+ {
+ CFbsBitmap* bmp = NULL;
+ CFbsBitmap* maskbmp = NULL;
+
+ if ( bmpMskId != KInvalidImg )
+ {
+ AknsUtils::CreateIconL( AknsUtils::SkinInstance(),
+ id, bmp, maskbmp, bmpFileName, bmpId, bmpMskId );
+
+ // set maskbmp and size
+ AknIconUtils::SetSize( maskbmp, keySize, EAspectRatioNotPreserved );
+ aVkbCtrl.SetNonIrregularKeyBitmapL(TVirtualKeyBmpType(EKeyBmpNormal + index + 1 ),maskbmp);
+ }
+ else
+ {
+ AknsUtils::CreateIconL( AknsUtils::SkinInstance(), id,
+ bmp, bmpFileName, bmpId );
+ }
+ // set bmp and size
+ AknIconUtils::SetSize( bmp, keySize, EAspectRatioNotPreserved );
+ aVkbCtrl.SetNonIrregularKeyBitmapL(TVirtualKeyBmpType( EKeyBmpNormal + index ),bmp);
+ }
+ }
+ // Pop and destroy reader
+ CleanupStack::PopAndDestroy( 1 );
+ }
+
+// ---------------------------------------------------------------------------
+// update virtual key info.
+// ---------------------------------------------------------------------------
+//
+void PeninputFingerHwrArVkbUtility::UpdateVkbKeyL(CVirtualKey* aVirtualKey, TResourceReader& aReader, const TRect& aKeyRect)
+ {
+ CHBufCArray* keytexts = CHBufCArray::NewL();
+ CleanupStack::PushL( keytexts );
+
+ for ( TInt i = 0; i <= EPosLast; i++ )
+ {
+ HBufC* unicode = aReader.ReadHBufCL();
+ keytexts->Array().AppendL( unicode );
+ }
+
+ TInt keyscancode = aReader.ReadInt16();
+
+ HBufC* text = keytexts->Array()[0];
+ if ( text )
+ {
+ aVirtualKey->SetKeyData( *text );
+ }
+ else
+ {
+ aVirtualKey->SetKeyData( KNullDesC );
+ }
+
+ aVirtualKey->SetKeyScancode( keyscancode );
+
+ CleanupStack::PopAndDestroy( keytexts ); //keytexts
+
+ aVirtualKey->SetRect(aKeyRect);
+ TRect innerrect = aKeyRect;
+ innerrect.Shrink( TSize(2,2) );
+ aVirtualKey->SetInnerRect( innerrect );
+ }
+
+// End Of File