diff -r 000000000000 -r eb1f2e154e89 textinput/peninputcommonlayout/src/peninputdatamgr.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/textinput/peninputcommonlayout/src/peninputdatamgr.cpp Tue Feb 02 01:02:04 2010 +0200 @@ -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 +#include +#include // Use resource utils,laf env,rep notifier +#include +#include +#include + +// 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( 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; + } + } +