textinput/peninputcommonlayout/src/peninputdatamgr.cpp
branchRCL_3
changeset 44 ecbabf52600f
parent 0 eb1f2e154e89
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/textinput/peninputcommonlayout/src/peninputdatamgr.cpp	Wed Sep 01 12:23:33 2010 +0100
@@ -0,0 +1,488 @@
+/*
+* 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:  Implementation of the common layout data manager
+*
+*/
+
+
+// System includes
+#include <aknfeppeninputenums.h>
+#include <PtiEngine.h>
+#include <peninputpluginutils.h>   // Use resource utils,laf env,rep notifier
+#include <centralrepository.h>
+#include <AknFepInternalCRKeys.h>
+#include <settingsinternalcrkeys.h>
+
+// User includes
+#include "peninputdatamgr.h"
+#include "peninputdataprovider.h"
+#include "peninputlayoutcontext.h"
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// --------------------------------------------------------------------------
+// CPeninputDataMgr::NewL
+// (other items were commented in a header)
+// --------------------------------------------------------------------------
+//           
+EXPORT_C CPeninputDataMgr* CPeninputDataMgr::NewL( 
+    MPeninputLayoutContext* aContext )
+    {
+    CPeninputDataMgr* self = NewLC( aContext );
+    CleanupStack::Pop( self );
+
+    return self;
+    }
+
+// --------------------------------------------------------------------------
+// CPeninputDataMgr::NewLC
+// (other items were commented in a header)
+// --------------------------------------------------------------------------
+//           
+EXPORT_C CPeninputDataMgr* CPeninputDataMgr::NewLC( 
+    MPeninputLayoutContext* aContext )
+    {
+    CPeninputDataMgr* self = new ( ELeave ) CPeninputDataMgr( aContext );
+    CleanupStack::PushL( self );
+    self->ConstructL(); 
+
+    return self;        
+    } 
+
+// --------------------------------------------------------------------------
+// CPeninputDataMgr::~CPeninputDataMgr
+// (other items were commented in a header)
+// --------------------------------------------------------------------------
+//           
+EXPORT_C CPeninputDataMgr::~CPeninputDataMgr()
+    {    
+    delete iGSRepositoryWatcher;
+    delete iGSRepository;
+    delete iAknFepRepository;
+    delete iUserDefinedResource;
+    } 
+
+// --------------------------------------------------------------------------
+// CPeninputDataMgr::CPeninputDataMgr
+// (other items were commented in a header).
+// --------------------------------------------------------------------------
+//      
+EXPORT_C CPeninputDataMgr::CPeninputDataMgr( 
+    MPeninputLayoutContext* aContext ) 
+    : iContext(aContext),
+      iUnitWidthSet(EFalse),
+      iUnitHeightSet(EFalse)
+    {
+    }
+
+// --------------------------------------------------------------------------
+// CPeninputDataMgr::ConstructL
+// (other items were commented in a header)
+// --------------------------------------------------------------------------
+//
+EXPORT_C void CPeninputDataMgr::ConstructL()
+    {
+    TInt ret = 0;
+    
+    // Construct aknfep CenRep
+    TRAP( ret, iAknFepRepository = CRepository::NewL( KCRUidAknFep ) );
+
+    // Construct GS CenRep
+    TRAP( ret, iGSRepository = 
+          CRepository::NewL( KCRUidPersonalizationSettings ) );
+
+    if ( iGSRepository )
+        {
+        // Read Language
+        iGSRepository->Get( KSettingsPenInputLang, iInputLanguage );       
+        }
+    
+    // Add GS Watcher
+    if ( ret == KErrNone )
+        {
+        iGSRepositoryWatcher = CAknFepRepositoryWatcher::NewL( 
+            KCRUidPersonalizationSettings, 
+            TCallBack( HandleGSRepositoryCallBack, this ),
+            iGSRepository );
+        }
+
+    // Call init function, which is virutal function
+    InitMore();
+    }
+
+// ---------------------------------------------------------------------------
+// CPeninputDataMgr::IsShiftPermitted
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//           
+EXPORT_C TBool CPeninputDataMgr::IsShiftPermitted()
+    {
+    if( !iAllowCaseChange && iCurrentRange == ERangeNative )
+        {
+        return EFalse;
+        }
+        
+    return (iPermittedCase & ECaseText) ||
+           (iPermittedCase & ECaseInverseText);
+    }
+    
+// ---------------------------------------------------------------------------
+// CPeninputDataMgr::IsCapsLockPermitted
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//  
+EXPORT_C TBool CPeninputDataMgr::IsCapsLockPermitted()
+    {
+    if( !iAllowCaseChange && iCurrentRange == ERangeNative )
+        {
+        return EFalse;
+        }
+        
+    return iPermittedCase & ECaseUpper;
+    }
+    
+// --------------------------------------------------------------------------
+// CPeninputDataMgr::SetData
+// (other items were commented in a header)
+// --------------------------------------------------------------------------
+//
+EXPORT_C void CPeninputDataMgr::SetData( TPeninputDataType aDataType, 
+                                         TAny* aData )
+    {
+    switch ( aDataType )
+        {
+        case EPeninputDataTypeCase:
+            {
+            iCase = *( ( TInt* ) aData );
+            }
+            break;
+        case EPeninputDataTypeInputLanguage:
+            {
+            iInputLanguage = *( ( TInt* ) aData );
+            }
+            break;
+        case EPeninputDataTypePermittedRange:
+            {
+            iPermittedRange = *( ( TInt* ) aData );
+            }
+            break;
+        case EAkninputDataTypeAllowCaseChange:
+            {
+            iAllowCaseChange = *((TBool*)aData);    
+            }
+            break;
+        case EPeninputDataTypePermittedCase:
+            {
+            iPermittedCase = *( (TInt* ) aData );
+            }
+            break;
+        case EPeninputDataTypeCurrentRange:
+            {
+            iCurrentRange = *( ( TInt* ) aData );
+            }
+            break;
+        case EPeninputDataTypeClientLayout:
+            {
+            iClientLayout = *( ( TInt* ) aData );
+            }
+            break;
+        case EPeninputDataTypeVkbLayout:
+            {
+            iVkbLayoutId = *( ( TInt* ) aData );
+            }
+            break;
+        case EPeninputDataTypeNumericKeymap:
+            {
+            iEditorNumericKeymap = *( ( TInt* ) aData );
+            }
+            break;
+        case EPeninputDataTypeShiftDown:
+            {
+            iShiftDown = *( ( TInt* ) aData );
+            }
+            break;
+        case EPeninputDataTypeCapslockDown:
+            {
+            iCapslockDown = *( ( TInt* ) aData );
+            }
+            break;
+        case EPeninputDataTypeCurrentAccent:
+            {
+            iCurrentAccent = *( ( TInt* ) aData );
+            }
+            break;
+        case EPeninputDataTypeScreenMode:
+            {
+            SetScreenMode( *( ( TPixelsTwipsAndRotation* ) aData ) );
+            }
+            break;
+        case EPeninputDataTypeScreenSize:
+            {
+            iScreenSize = *( ( TSize* ) aData );  
+            }
+            break;
+        case EPeninputDataTypeWindowPosition:
+            {
+            iWindowPosition = *( ( TInt* ) aData );
+            }
+            break;
+        case EPeninputDataTypeUnitWidth:
+            {
+            iUnitWidth = *( ( TInt* ) aData );
+            iUnitWidthSet = ETrue;
+            }
+            break;
+        case EPeninputDataTypeUnitHeight:
+            {
+            iUnitHeight = *( ( TInt* ) aData );
+            iUnitHeightSet = ETrue;
+            }
+            break;
+        case EPeninputDataTypeDataQueryDlgRect:
+            {
+            iDataQueryDlgRect = *( ( TRect* ) aData );
+            }
+            break;        
+        case EAknFepDataTypeUseDefinedResource:
+            {
+            delete iUserDefinedResource;
+            TInt* len = (TInt*)((TUint8*)aData - 4);
+            TPtrC16 keymapRes((const TUint16*)aData, *len/2);  
+            iUserDefinedResource = keymapRes.Alloc();
+            }
+            break;
+        case EPeninputDataTypeReserve_1:
+            {
+            iReserve_1 = aData;
+            }
+            break;
+        case EAkninputDataTypeSizeChanging:
+            {
+            iLayoutSizeChanging =  *((TBool*)aData);	
+            }
+            break;
+        case EAkninputDataTypeLatchedSet:
+            {
+            iLatched = *((TBool*)aData);
+            }
+            break;
+        default:
+            break;
+        }
+        
+    NotifyEngine( aDataType, aData ) ;
+    } 
+
+    
+// --------------------------------------------------------------------------
+// CPeninputDataMgr::RequestData
+// (other items were commented in a header)
+// --------------------------------------------------------------------------
+//
+EXPORT_C TAny* CPeninputDataMgr::RequestData( TPeninputDataType aDataType )  
+    {
+    switch ( aDataType )
+        {
+        case EPeninputDataTypeCase:
+            return &iCase;
+        case EPeninputDataTypeInputLanguage:
+            return &iInputLanguage;
+        case EPeninputDataTypePermittedRange:
+            return &iPermittedRange;
+        case EPeninputDataTypePermittedCase:
+            return &iPermittedCase;
+        case EPeninputDataTypeCurrentRange:
+            return &iCurrentRange;
+        case EPeninputDataTypeClientLayout:
+            return &iClientLayout;
+        case EPeninputDataTypeVkbLayout:
+            return &iVkbLayoutId;
+        case EPeninputDataTypeNumericKeymap:
+            return &iEditorNumericKeymap;
+        case EPeninputDataTypeShiftDown:
+            return &iShiftDown;
+        case EPeninputDataTypeCapslockDown:
+            return &iCapslockDown;
+        case EPeninputDataTypeCurrentAccent:
+            return &iCurrentAccent;
+        case EPeninputDataTypeScreenMode:
+            return &iScreenMode;
+        case EPeninputDataTypeScreenSize:
+            return &iScreenSize;        
+        case EPeninputDataTypeWindowPosition:
+            return &iWindowPosition;
+        case EPeninputDataTypePositionSettingId:
+            return &iPositionSettingId;
+        case EPeninputDataTypeUnitWidth:
+            return &iUnitWidth;
+        case EPeninputDataTypeUnitHeight:
+            return &iUnitHeight;
+        case EPeninputDataTypeDataQueryDlgRect:
+            return &iDataQueryDlgRect;
+        case EAknFepDataTypeUseDefinedResource:
+            return iUserDefinedResource;
+        case EPeninputDataTypeReserve_1:
+            return iReserve_1;
+        case EAkninputDataTypeGuideLineTop:
+            return &iGuideLineTop;
+        case EAkninputDataTypeGuideLineBottom:
+            return &iGuideLineBottom;
+        case EAkninputDataTypeSizeChanging:
+            return &iLayoutSizeChanging;
+        case EAkninputDataTypeLatchedSet:
+            return &iLatched;
+        case EAkninputDataTypeUnitSizeSet:
+             {
+             iUnitSizeSet = (iUnitWidthSet & iUnitHeightSet);
+             return &iUnitSizeSet;	
+             }
+        default:
+            break;
+        }
+
+    return NULL;
+    }
+
+// --------------------------------------------------------------------------
+// CPeninputDataMgr::Reset
+// (other items were commented in a header)
+// --------------------------------------------------------------------------
+//           
+EXPORT_C void CPeninputDataMgr::Reset()
+    { 
+    }        
+
+// --------------------------------------------------------------------------
+// CPeninputDataMgr::HandleGSRepositoryCallBack
+// (other items were commented in a header)
+// --------------------------------------------------------------------------
+// 
+EXPORT_C TInt CPeninputDataMgr::HandleGSRepositoryCallBack( TAny* aPtr )
+    {
+    CPeninputDataMgr* self = static_cast<CPeninputDataMgr*>( aPtr );
+    
+    CAknFepRepositoryWatcher* watcher = self->iGSRepositoryWatcher;
+    if ( watcher )
+        {        
+        self->HandleGSRepositoryChange( watcher->ChangedKey() );
+        }
+
+    return KErrNone;
+    }
+
+// --------------------------------------------------------------------------
+// CPeninputDataMgr::SaveKey
+// (other items were commented in a header)
+// --------------------------------------------------------------------------
+// 
+EXPORT_C void CPeninputDataMgr::SaveKey( TInt aKey, TInt aValue )
+    {
+    if ( iAknFepRepository )
+        {
+        iAknFepRepository->Set( aKey, aValue );
+        }
+    }
+
+// --------------------------------------------------------------------------
+// CPeninputDataMgr::SetScreenMode
+// (other items were commented in a header).
+// --------------------------------------------------------------------------
+// 
+void CPeninputDataMgr::SetScreenMode(
+    const TPixelsTwipsAndRotation& aScreenMode )
+    {
+    switch ( aScreenMode.iRotation )
+        {
+        case CFbsBitGc::EGraphicsOrientationNormal:
+            {
+            iPositionSettingId = KAknFepHwrWindowPosition0;
+            }
+            break;
+        case CFbsBitGc::EGraphicsOrientationRotated90:
+            {
+            iPositionSettingId = KAknFepHwrWindowPosition1;
+            }
+            break;
+        case CFbsBitGc::EGraphicsOrientationRotated180:
+            {
+            iPositionSettingId = KAknFepHwrWindowPosition2;
+            }
+            break;
+        case CFbsBitGc::EGraphicsOrientationRotated270:
+            {
+            iPositionSettingId = KAknFepHwrWindowPosition3;
+            }
+            break;
+        default:
+            break;
+        }
+        
+    iScreenSize = aScreenMode.iPixelSize;    
+    iScreenMode = aScreenMode;
+    if ( iAknFepRepository )
+        {
+        iAknFepRepository->Get( iPositionSettingId, iWindowPosition );        
+        }               
+    }         
+
+// --------------------------------------------------------------------------
+// CPeninputDataMgr::InitMore
+// (other items were commented in a header)
+// --------------------------------------------------------------------------
+//   
+EXPORT_C void CPeninputDataMgr::InitMore()
+    {
+    }
+
+// --------------------------------------------------------------------------
+// CPeninputDataMgr::HandleGSRepositoryChange
+// (other items were commented in a header)
+// --------------------------------------------------------------------------
+// 
+EXPORT_C void CPeninputDataMgr::HandleGSRepositoryChange( TInt /*aChangedKey*/ )
+  {
+  }
+
+// --------------------------------------------------------------------------
+// CPeninputDataMgr::NotifyEngine
+// (other items were commented in a header).
+// --------------------------------------------------------------------------
+// 
+EXPORT_C void CPeninputDataMgr::NotifyEngine( TPeninputDataType aType, 
+                                              TAny*  aData )
+    {
+    TInt data = *( (TInt*) aData );
+    switch ( aType )
+        {
+        case EPeninputDataTypeCurrentRange:
+            if (iAknFepRepository)
+                {
+                if ( ( data == ERangeEnglish ) || ( data == ERangeNative ) )
+                    {
+                    iAknFepRepository->Set(KAknFepLastUsedRange, data );
+                    }                
+                }          
+            break;
+        case EPeninputDataTypeWindowPosition:
+            if (iAknFepRepository)
+                {
+                iAknFepRepository->Set(iPositionSettingId, data );
+                }
+            break;
+        default:
+            break;
+        }
+    }
+