textinput/peninputcommonlayout/src/peninputlayoutconfig.cpp
changeset 0 eb1f2e154e89
--- /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 <peninputpluginutils.h>
+#include <coemain.h>
+#include <peninputctrlpool.h>
+
+// User includes
+#include "peninputlayoutconfig.h"
+#include "peninputrangebarinfo.h"
+#include <peninputlayoutvkb.h>
+#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;    
+            }
+        }
+    }