diff -r 000000000000 -r eb1f2e154e89 textinput/peninputcommonlayout/src/peninputlayoutconfig.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/textinput/peninputcommonlayout/src/peninputlayoutconfig.cpp Tue Feb 02 01:02:04 2010 +0200 @@ -0,0 +1,281 @@ +/* +* Copyright (c) 2002-2005 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: common layout config management +* +*/ + + +// System includes +#include +#include +#include + +// User includes +#include "peninputlayoutconfig.h" +#include "peninputrangebarinfo.h" +#include +#include "peninputclientlayoutinfo.h" +#include "peninputshiftcapsInfo.h" + + +// Constants +const TInt KPeninputLayoutConfigInvalidId = -1; + + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// CPeninputLayoutConfig::NewL +// (other items were commented in a header) +// --------------------------------------------------------------------------- +// +EXPORT_C CPeninputLayoutConfig* CPeninputLayoutConfig::NewL( + CAknFepCtrlVkbLayout& aVkblayout, TResourceReader& aReader ) + { + CPeninputLayoutConfig* self = new ( ELeave ) CPeninputLayoutConfig(); + CleanupStack::PushL( self ); + self->ConstructL( aVkblayout, aReader ); + CleanupStack::Pop( self ); + + return self; + } + +// --------------------------------------------------------------------------- +// CPeninputLayoutConfig::CPeninputLayoutConfig +// (other items were commented in a header) +// --------------------------------------------------------------------------- +// +CPeninputLayoutConfig::CPeninputLayoutConfig() + : iLanguageString( NULL ), iRangeBarInfo( NULL ) + { + } + +// --------------------------------------------------------------------------- +// CPeninputLayoutConfig::ConstructL +// (other items were commented in a header) +// --------------------------------------------------------------------------- +// +void CPeninputLayoutConfig::ConstructL( CAknFepCtrlVkbLayout& aVkblayout, + TResourceReader& aReader ) + { + TResourceReader reader; + TInt count = 0; + TInt i = 0; + + iLanguage = aReader.ReadInt16(); + iLanguageString = aReader.ReadHBufCL(); + + if ( aReader.ReadInt16() != 0 ) + { + iCaseSensitive = ETrue; + } + else + { + iCaseSensitive = EFalse; + } + + iGuideLine = aReader.ReadInt16(); + iPositionTopLine = aReader.ReadInt16(); + iPositionBottomLine = aReader.ReadInt16(); + + const TInt32 clientLayoutInfoListResId = aReader.ReadInt32(); + const TInt32 vkbLayoutInfoListResId = aReader.ReadInt32(); + const TInt32 rangeBarInfoResId = aReader.ReadInt32(); + const TInt32 shiftCapsInfoResId = aReader.ReadInt32(); + + iRangeBarResId = aReader.ReadInt32(); + + // Create client layout list + if ( clientLayoutInfoListResId > 0 ) + { + CCoeEnv::Static()->CreateResourceReaderLC( reader, clientLayoutInfoListResId ); + + count = reader.ReadInt16(); + for ( i = 0; i < count; i++ ) + { + CPeninputClientLayoutInfo* clientLayoutInfo = + CPeninputClientLayoutInfo::NewL( reader ); + iClientLayoutInfoList.Append( clientLayoutInfo ); + } + // Pop and destroy reader + CleanupStack::PopAndDestroy( 1 ); + } + + // Create vkb layout list + if ( vkbLayoutInfoListResId > 0 ) + { + aVkblayout.SetResourceId( vkbLayoutInfoListResId ); + aVkblayout.ConstructFromResourceL(); + iVkbLayoutInfoList = aVkblayout.VkbLayoutInfoList(); + } + + // Create range bar + if ( rangeBarInfoResId > 0 ) + { + CCoeEnv::Static()->CreateResourceReaderLC( reader, rangeBarInfoResId ); + iRangeBarInfo = CPeninputRangeBarInfo::NewL( reader ); + // Pop and destroy reader + CleanupStack::PopAndDestroy( 1 ); + } + + // Create shift & caps + if ( shiftCapsInfoResId > 0 ) + { + CCoeEnv::Static()->CreateResourceReaderLC( reader, shiftCapsInfoResId ); + count = reader.ReadInt16(); + for ( i = 0; i < count; i++ ) + { + CPeninputShiftCapsInfo* shiftCapsInfo = + CPeninputShiftCapsInfo::NewL( reader ); + iShiftCapsInfoList.Append( shiftCapsInfo ); + } + // Pop and destroy reader + CleanupStack::PopAndDestroy( 1 ); + } + } + +// --------------------------------------------------------------------------- +// CPeninputLayoutConfig::~CPeninputLayoutConfig +// (other items were commented in a header) +// --------------------------------------------------------------------------- +// +EXPORT_C CPeninputLayoutConfig::~CPeninputLayoutConfig() + { + delete iLanguageString; + delete iRangeBarInfo; + iClientLayoutInfoList.ResetAndDestroy(); + iShiftCapsInfoList.ResetAndDestroy(); + } + +// --------------------------------------------------------------------------- +// CPeninputLayoutConfig::FindClientLayoutInfo +// (other items were commented in a header) +// --------------------------------------------------------------------------- +// +EXPORT_C CPeninputClientLayoutInfo* + CPeninputLayoutConfig::FindClientLayoutInfo( TInt aLayoutId ) + { + const TInt count = iClientLayoutInfoList.Count(); + + for ( TInt i = 0; i < count; i++ ) + { + if ( iClientLayoutInfoList[i]->LayoutID() == aLayoutId ) + { + return iClientLayoutInfoList[i]; + } + } + + return NULL; + } + +// --------------------------------------------------------------------------- +// CPeninputLayoutConfig::FindVkbLayoutInfo +// (other items were commented in a header) +// --------------------------------------------------------------------------- +// +EXPORT_C CPeninputVkbLayoutInfo* + CPeninputLayoutConfig::FindVkbLayoutInfo( TInt aLayoutId ) + { + const TInt count = iVkbLayoutInfoList.Count(); + + for ( TInt i = 0; i < count; i++ ) + { + if ( iVkbLayoutInfoList[i]->LayoutID() == aLayoutId ) + { + return iVkbLayoutInfoList[i]; + } + } + + return NULL; + } + +// --------------------------------------------------------------------------- +// CPeninputLayoutConfig::FindShiftCapsInfo +// (other items were commented in a header) +// --------------------------------------------------------------------------- +// +EXPORT_C CPeninputShiftCapsInfo* + CPeninputLayoutConfig::FindShiftCapsInfo( TInt aRangeId ) + { + const TInt count = iShiftCapsInfoList.Count(); + + for ( TInt i = 0; i < count; i++ ) + { + if ( iShiftCapsInfoList[i]->RangeId() == aRangeId ) + { + return iShiftCapsInfoList[i]; + } + } + + return NULL; + } + +// --------------------------------------------------------------------------- +// CPeninputLayoutConfig::ShiftCapsSingleVkbLayoutId +// (other items were commented in a header) +// --------------------------------------------------------------------------- +// +EXPORT_C TInt CPeninputLayoutConfig::ShiftCapsSingleVkbLayoutId( + TInt aRangeId, TInt aShiftCapsSingleId ) + { + CPeninputShiftCapsInfo* shiftCapsInfo = FindShiftCapsInfo( aRangeId ); + + if ( !shiftCapsInfo ) + { + return KPeninputLayoutConfigInvalidId; + } + else + { + CPeninputShiftCapsInfo::TPeninputShiftCapsSingle* shiftCapsSingle = + shiftCapsInfo->FindShiftCapsSingleById( aShiftCapsSingleId ); + if ( shiftCapsSingle ) + { + return shiftCapsSingle->iVkbLayoutId; + } + else + { + return KPeninputLayoutConfigInvalidId; + } + } + } + + +// --------------------------------------------------------------------------- +// CPeninputLayoutConfig::FindVkbLayoutIdByCase +// (other items were commented in a header) +// --------------------------------------------------------------------------- +// +EXPORT_C TInt CPeninputLayoutConfig::ShiftCapsSingleVkbLayoutByCase( + TInt aRangeId, TInt aCase ) + { + CPeninputShiftCapsInfo* shiftCapsInfo = FindShiftCapsInfo( aRangeId ); + + if ( !shiftCapsInfo ) + { + return KPeninputLayoutConfigInvalidId; + } + else + { + CPeninputShiftCapsInfo::TPeninputShiftCapsSingle* shiftCapsSingle = + shiftCapsInfo->FindShiftCapsSingleByCase( aCase ); + if ( shiftCapsSingle ) + { + return shiftCapsSingle->iVkbLayoutId; + } + else + { + return KPeninputLayoutConfigInvalidId; + } + } + }