diff -r fc42a86c98e3 -r 694fa80c203c textinput/peninputcommonlayout/src/peninputlayoutwindow.cpp --- a/textinput/peninputcommonlayout/src/peninputlayoutwindow.cpp Wed Jun 23 04:57:58 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,2259 +0,0 @@ -/* -* 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 window for UI interface of VKB and HWR -* -*/ - - -// System includes -#include - -#include -#include -#include -#include // Use global signal -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -// User includes -#include "peninputdataconverter.h" -#include "peninputrangebarinfo.h" -#include "peninputlayoutwindow.h" -#include "peninputclientlayoutinfo.h" -#include "peninputdataprovider.h" -#include "peninputlayoutcontext.h" -#include "peninputvkbctrlext.h" -#include "peninputnumerickeymappingmgr.h" - -// Constants -const TInt KIntLengthForByte = 8; -const TInt KPeninputLayoutWindowRegionCount = 8; -const TInt KPeninputLayoutWindowUnitWidth = 12; -const TInt KInvalidIndex = -1; - -const TInt32 KInvalidResId = -1; -const TInt KInvalidImg = -1 ; -const TUint32 KDefaultTextColor = 0x000000; -const TUint32 KDefaultShadowTextColor = 0xffffff; -const TInt KNotSupportSkin = -1; - -const TInt KIntSizeToInt16 = 2; - - - -// ======== MEMBER FUNCTIONS ======== - -// ------------------------------------------------------------------------ -// CPeninputLayoutWindow::CPeninputLayoutWindow -// (other items were commented in a header) -// ------------------------------------------------------------------------ -// -EXPORT_C CPeninputLayoutWindow::CPeninputLayoutWindow( - CFepUiLayout* aUiLayout, MPeninputLayoutContext* aLayoutContext ) - : CAknFepCtrlBaseWindow( aUiLayout, EPeninutWindowCtrlIdBaseWindow ), - iConfigInfo( NULL ), iLayoutContext( aLayoutContext ), - iLastUsedTotalColumns( KPeninputLayoutWindowUnitWidth ), - iFirstTimeConstruct( ETrue ), - iSwitchFontSet(EFalse), - iUnitSizeChange(EFalse) - { - } - -// --------------------------------------------------------------------------- -// CPeninputLayoutWindow::ConstructL -// (other items were commented in a header) -// --------------------------------------------------------------------------- -// -EXPORT_C void CPeninputLayoutWindow::ConstructL() - { - BaseConstructL(); - - if( iLayoutContext->LayoutType() == EPluginInputModeVkb ) - { - iVkbLayout = CAknFepCtrlVkbLayout::NewL(); - } - else - { - iVkbLayout = NULL; - } - - CCoeEnv* coeEnv = CCoeEnv::Static(); - - // Set up resources - TFileName resFileName = GetWindowResFileName(); - BaflUtils::NearestLanguageFile(coeEnv->FsSession(), resFileName ); - iWinResId = coeEnv->AddResourceFileL( resFileName ); - - TResourceReader reader; - - coeEnv->CreateResourceReaderLC( reader, GetWindowResId() ); - SetResourceId( GetWindowResId() ); - ConstructFromResourceL(); - // Pop and destroy reader - CleanupStack::PopAndDestroy( 1 ); - MoveButton()->AddEventObserver( UiLayout() ); - iCtrlPool = CPeninputCtrlPool::NewL(); - - CreateAllControlsL(); - SetControlsFont(); - } - -// --------------------------------------------------------------------------- -// CPeninputLayoutWindow::~CPeninputLayoutWindow -// (other items were commented in a header) -// --------------------------------------------------------------------------- -// -EXPORT_C CPeninputLayoutWindow::~CPeninputLayoutWindow() - { - delete iCtrlPool; - delete iConfigInfo; - delete iKeyMappingMgr; - delete iVkbLayout; - // Delete resource file from CoeEnv - CCoeEnv::Static()->DeleteResourceFile( iWinResId ); - - CCoeEnv::Static()->DeleteResourceFile( iConfigResId ); - - } - -// --------------------------------------------------------------------------- -// CPeninputLayoutWindow::ConstructFromResourceL -// (other items were commented in a header) -// --------------------------------------------------------------------------- -// -EXPORT_C void CPeninputLayoutWindow::ConstructFromResourceL( - TResourceReader& aResReader ) - { - TInt supportskin = aResReader.ReadInt16(); - - if (iFirstTimeConstruct && (supportskin != KNotSupportSkin)) - { - UiLayout()->AddControlL(this); - } - - const TInt32 moveBtnResId = aResReader.ReadInt32(); - const TInt32 closeBtnResId = aResReader.ReadInt32(); - const TInt32 icfResId = aResReader.ReadInt32(); - const TInt32 optionBtnResId = aResReader.ReadInt32(); - const TInt32 keymappingResId = aResReader.ReadInt32(); - const TInt32 shadowResId = aResReader.ReadInt32(); - const TInt32 arrowLeftResId = aResReader.ReadInt32(); - const TInt32 arrowRightResId = aResReader.ReadInt32(); - const TInt32 bgImageResId = aResReader.ReadInt32(); - - TResourceReader resReader; - - TBool multiLine = EFalse; - - if (iFirstTimeConstruct) - { - // Read bitmaps of close and move button - CCoeEnv::Static()->CreateResourceReaderLC( resReader, moveBtnResId ); - MoveButton()->SetResourceId( moveBtnResId ); - MoveButton()->ConstructFromResourceL(); - CleanupStack::PopAndDestroy( 1 ); - - CCoeEnv::Static()->CreateResourceReaderLC( resReader, closeBtnResId ); - CloseButton()->SetResourceId( closeBtnResId ); - CloseButton()->ConstructFromResourceL(); - CleanupStack::PopAndDestroy( 1 ); - - // Read information of key mapping - CCoeEnv::Static()->CreateResourceReaderLC( resReader, keymappingResId ); - iKeyMappingMgr = CPeninputNumericKepMappingMgr::NewL( resReader ); - CleanupStack::PopAndDestroy( 1 ); - - - multiLine = IsMultiLineIcf(); - - // Add input context field into the headpane - if (multiLine) - { - AddMultiContextFieldL(); - } - else - { - AddContextFieldL(); - } - - - // Add touch input button into the headpane - AddTouchInputButtonL( optionBtnResId ); - } - else - { - multiLine = IsMultiLineIcf(); - CControlGroup::ConstructFromResourceL(); - } - - // Read information of shadow - CCoeEnv::Static()->CreateResourceReaderLC( resReader, shadowResId ); - ReadShadowInfoL( resReader ); - CleanupStack::PopAndDestroy( 1 ); - - if (!multiLine) - { - //Read resource of icf - CCoeEnv::Static()->CreateResourceReaderLC( resReader, icfResId ); - ReadIcfInfo( resReader ); - CleanupStack::PopAndDestroy( 1 ); - } - else - { - ReadMultiLineIcfInforL(icfResId); - } - - // Read background image resource - ReadBackgroundInfoL( bgImageResId ); - iFirstTimeConstruct = EFalse; - } - -// ----------------------------------------------------------------------------- -// CPeninputLayoutWindow::ConstructFromResourceL -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -EXPORT_C void CPeninputLayoutWindow::ConstructFromResourceL() - { - if (iResourceId == KInvalidResId) - { - User::Leave(KErrArgument); - } - - TResourceReader reader; - CCoeEnv::Static()->CreateResourceReaderLC(reader, iResourceId); - - TInt supportskin = reader.ReadInt16(); - - if (iFirstTimeConstruct && (supportskin != KNotSupportSkin)) - { - UiLayout()->AddControlL(this); - } - - const TInt32 moveBtnResId = reader.ReadInt32(); - const TInt32 closeBtnResId = reader.ReadInt32(); - const TInt32 icfResId = reader.ReadInt32(); - const TInt32 optionBtnResId = reader.ReadInt32(); - const TInt32 keymappingResId = reader.ReadInt32(); - const TInt32 shadowResId = reader.ReadInt32(); - const TInt32 arrowLeftResId = reader.ReadInt32(); - const TInt32 arrowRightResId = reader.ReadInt32(); - const TInt32 bgImageResId = reader.ReadInt32(); - - - TResourceReader resReader; - TBool multiLine = EFalse; - - if (iFirstTimeConstruct) - { - // Read bitmaps of close and move button - CCoeEnv::Static()->CreateResourceReaderLC( resReader, moveBtnResId ); - MoveButton()->SetResourceId( moveBtnResId ); - MoveButton()->ConstructFromResourceL(); - CleanupStack::PopAndDestroy( 1 ); - - CCoeEnv::Static()->CreateResourceReaderLC( resReader, closeBtnResId ); - CloseButton()->SetResourceId( closeBtnResId ); - CloseButton()->ConstructFromResourceL(); - CleanupStack::PopAndDestroy( 1 ); - - // Read information of key mapping - CCoeEnv::Static()->CreateResourceReaderLC( resReader, keymappingResId ); - iKeyMappingMgr = CPeninputNumericKepMappingMgr::NewL( resReader ); - CleanupStack::PopAndDestroy( 1 ); - - multiLine = IsMultiLineIcf(); - - // Add input context field into the headpane - if (multiLine) - { - AddMultiContextFieldL(); - } - else - { - AddContextFieldL(); - } - - // Add touch input button into the headpane - AddTouchInputButtonL( optionBtnResId ); - } - else - { - multiLine = IsMultiLineIcf(); - CControlGroup::ConstructFromResourceL(); - } - - // Read information of shadow - CCoeEnv::Static()->CreateResourceReaderLC( resReader, shadowResId ); - ReadShadowInfoL( resReader ); - CleanupStack::PopAndDestroy( 1 ); - - if (!multiLine) - { - //Read resource of icf - CCoeEnv::Static()->CreateResourceReaderLC( resReader, icfResId ); - ReadIcfInfo( resReader ); - CleanupStack::PopAndDestroy( 1 ); - } - else - { - ReadMultiLineIcfInforL(icfResId); - } - - CleanupStack::PopAndDestroy(); // reader - - // Read background image resource - ReadBackgroundInfoL( bgImageResId ); - - if( iLayoutContext->LayoutType() == EPluginInputModeVkb ) - { - iVkbLayout->ConstructFromResourceL(); - } - - iFirstTimeConstruct = EFalse; - } - -// --------------------------------------------------------------------------- -// CPeninputLayoutWindow::SizeChanged -// (other items were commented in a header) -// --------------------------------------------------------------------------- -// -EXPORT_C void CPeninputLayoutWindow::SizeChanged( TBool /*aLandscapeStyle*/ ) - { - iLangOrSizeChanged = ETrue; - ChangeUnitSize(); - - ReadLafForShadow(); - - if ( iConfigInfo ) - { - ChangeClientSize(); - // Change the size of base window - SizeChangedForBaseWindow( iLastUsedTotalColumns ); - - } - - TInt style = EPeninputPositionChangeBrJustify; - TBuf bufStyle; - bufStyle = ( TUint16* )&style; - HandleControlEvent(EPeninputLayoutEventMovePosition, NULL, bufStyle); - - iLangOrSizeChanged = EFalse; - } - -// --------------------------------------------------------------------------- -// CPeninputLayoutWindow::ReadLafForShadow -// (other items were commented in a header). -// --------------------------------------------------------------------------- -// -void CPeninputLayoutWindow::ReadLafForShadow() - { - if(!CPeninputDataConverter::AnyToInt - (iLayoutContext->RequestData(EAkninputDataTypeSizeChanging))) - { - return; - } - - TRect anyRect; - - TAknWindowLineLayout shadowPane; - TAknWindowLineLayout shadowTl; - TAknWindowLineLayout shadowBr; - TAknLayoutRect shadowRect; - TAknLayoutRect shadowTlRect; - TAknLayoutRect shadowBrRect; - - shadowPane = AknLayoutScalable_Avkon::bg_popup_fep_shadow_pane(1).LayoutLine(); - shadowRect.LayoutRect(anyRect, shadowPane); - - shadowTl = AknLayoutScalable_Avkon::bg_popup_fep_shadow_pane_g1().LayoutLine(); - shadowTlRect.LayoutRect(shadowRect.Rect(), shadowTl); - - shadowBr = AknLayoutScalable_Avkon::bg_popup_fep_shadow_pane_g8().LayoutLine(); - shadowBrRect.LayoutRect(shadowRect.Rect(), shadowBr); - - iShadowTlWidth = shadowTlRect.Rect().Size().iWidth; - iShadowTlHeight = shadowTlRect.Rect().Size().iHeight; - iShadowBrWidth = shadowBrRect.Rect().Size().iWidth; - iShadowBrHeight = shadowBrRect.Rect().Size().iHeight; - - //TRect newWinRect = Rect(); - //newWinRect.iTl = ShadowRect().iTl + TPoint(iShadowTlWidth, iShadowTlHeight); - //SetRect( newWinRect ); - } - -// --------------------------------------------------------------------------- -// CPeninputLayoutWindow::SizeChanged -// (other items were commented in a header). -// --------------------------------------------------------------------------- -// -void CPeninputLayoutWindow::SizeChangedForBaseWindow( TInt aTotalColumns ) - { - //only responsible for controls that layout window managed - //if ( ( aTotalColumns != iLastUsedTotalColumns ) || iLangOrSizeChanged ) - { - TRect wndRect = Rect(); - TRect rtTitleBar = TitleBar()->Rect(); - - TInt UnitWidth = *( static_cast( iLayoutContext->RequestData - ( EPeninputDataTypeUnitWidth ) ) ); - - TInt UnitHeight = *( static_cast( iLayoutContext->RequestData - ( EPeninputDataTypeUnitHeight ) ) ); - - TInt moveBtnColumns = 1; - TInt closeBtnColumns = 1; - TInt optionBtnColumns = 1; - TInt headerPaneColumns; - TInt icfColumns; - - //Call SetRect function of dragbutton - if( iLayoutContext->LayoutType() == EPluginInputModeVkb) - { - moveBtnColumns = 2; - closeBtnColumns = 2; - } - - TRect rectClose ( rtTitleBar.iTl, TSize( closeBtnColumns * UnitWidth, UnitHeight ) ); - TRect innerRect; - AknPenImageUtils::CalculateGraphicRect( rectClose, innerRect ); - CloseButton()->SizeChanged( rectClose, innerRect, ETrue ); - - //Call SetRect function of Head pane - headerPaneColumns = aTotalColumns - moveBtnColumns - closeBtnColumns; - TRect rectHeader ( TPoint(rectClose.iBr.iX, rectClose.iTl.iY ), - TSize( headerPaneColumns * UnitWidth, UnitHeight ) ); - HeaderPane()->SetRect( rectHeader ); - - //Call SetRect function of input context field - icfColumns = headerPaneColumns - optionBtnColumns; - TRect rectIcf( rectHeader.iTl, - TSize( icfColumns * UnitWidth, UnitHeight ) ); - if(ConfigInfo()->Language() == ELangArabic) - { - rectIcf.iTl.iX = rectIcf.iTl.iX + UnitWidth; - } - if(IsMultiLineIcf()) - { - iMultiLineIcf->SetRect( rectIcf ); - } - else - { - iInputContextField->SetRect( rectIcf ); - } - if(ConfigInfo()->Language() == ELangArabic) - { - TRect rectBackspace(rectHeader.iTl, TSize(UnitWidth, UnitHeight)); - AknPenImageUtils::CalculateGraphicRect( rectBackspace, innerRect ); - iBackspaceButton->SizeChanged(rectBackspace, innerRect, ETrue); - } - //set the rect of option button - TRect rectOption ( TPoint( rectIcf.iBr.iX, rectIcf.iTl.iY ), - TSize( optionBtnColumns * UnitWidth, UnitHeight ) ); - AknPenImageUtils::CalculateGraphicRect( rectOption, innerRect ); - iTouchInputOptionButton->SizeChanged( rectOption, innerRect, ETrue ); - - //Call SetRect function of close button - TRect rectMove ( TPoint( rectHeader.iBr.iX, rectHeader.iTl.iY), - TSize( closeBtnColumns * UnitWidth, UnitHeight ) ); - AknPenImageUtils::CalculateGraphicRect( rectMove, innerRect ); - MoveButton()->SizeChanged( rectMove, innerRect, ETrue ); - - SetControlsFont(); - iLastUsedTotalColumns = aTotalColumns; - } - } -// --------------------------------------------------------------------------- -// CPeninputLayoutWindow::HandleControlEvent -// (other items were commented in a header) -// --------------------------------------------------------------------------- -// -EXPORT_C void CPeninputLayoutWindow::HandleControlEvent( TInt aEventType, - CFepUiBaseCtrl* aCtrl, const TDesC& aEventData ) - { - // Call this function in base class - CAknFepCtrlBaseWindow::HandleControlEvent( aEventType, - aCtrl, aEventData ); - - TInt* data = ( TInt* ) aEventData.Ptr(); - - switch ( aEventType ) - { - case EPeninputLayoutEventSwitchLanguage: - { - TRAP_IGNORE( ChangeInputLanguageL( *data ) ); - } - break; - case EPeninputLayoutEventRange: - { - HandleRangeEvent( *data ); - } - break; - case EPeninputLayoutEventRangeLoop: - { - HandleRangeLoopEvent( *data ); - } - break; - case EPeninputLayoutEventShift: - { - HandleShiftBtnClicked(); - } - break; - case EPeninputLayoutEventCapslock: - { - HandleCapslockBtnClicked(); - } - break; - case EPeninputLayoutEventMovePosition: - { - TInt style = *( ( TUint16* ) aEventData.Ptr() ); - ChangeLayoutPosition( style ); - } - break; - case EPeninputLayoutEventSetPermittedRange: - { - if ( *data & ERangeNative ) - { - *data = *data | ERangeAccent | ERangeNativeNumber - | ERangeMixedText | ERangeMixedNumber; - } - else if(*data & ERangeEnglish) - { - *data = *data | ERangeAccent; - } - /* - if ( *data & ERangeNative ) - { - *data = *data | ERangeNativeNumber - | ERangeMixedText | ERangeMixedNumber; - } - */ - // Update data:range - iLayoutContext->SetData( EPeninputDataTypePermittedRange, data ); - - // Set range of range bar component - CFepUiBaseCtrl* bar = - iCtrlPool->Control( EPeninutWindowCtrlIdRangeBar ); - if ( bar ) - { - CAknFepCtrlRangeBar* rangebar = - static_cast( bar ); - rangebar->SetPermittedRanges( *data ); - } - } - break; - case EPeninputLayoutEventSetPermittedCase: - { - // Update data:case - iLayoutContext->SetData( EPeninputDataTypePermittedCase, data ); - - // Set range of case - CFepUiBaseCtrl* bar = - iCtrlPool->Control( EPeninutWindowCtrlIdRangeBar ); - if ( bar ) - { - CAknFepCtrlRangeBar* rangebar = - static_cast( bar ); - - rangebar->SetPermittedCase( ERangeEnglish, ECaseUpper, - ( *data & ECaseUpper) != 0 ); - rangebar->SetPermittedCase( ERangeEnglish, ECaseLower, - ( *data & ECaseLower) != 0 ); - rangebar->SetPermittedCase( ERangeEnglish, ECaseText, - ( *data & ECaseText) != 0 ); - } - } - break; - case EPeninputLayoutEventSetCase: - { - DoCaseChange( *data ); - } - break; - case EEventSizeChanged: - { - //if icf editor size changed, we need to inform owner - if(aCtrl == iInputContextField || - aCtrl == iMultiLineIcf ) - { - iLayoutContext->Sendkey( ESignalLayoutICFLengthChanged, KNullDesC ); - } - } - break; - default: - break; - } - } - -// --------------------------------------------------------------------------- -// CPeninputLayoutWindow::SetEditorTextL -// (other items were commented in a header) -// --------------------------------------------------------------------------- -// -EXPORT_C void CPeninputLayoutWindow::SetEditorTextL( - const TFepInputContextFieldData& aData ) - { - if(IsMultiLineIcf()) - { - if (iMultiLineIcf) - { - iMultiLineIcf->SetTextL( aData ); - } - } - else - { - if (iInputContextField) - { - iInputContextField->SetTextL( aData ); - } - - } - } - -// --------------------------------------------------------------------------- -// CPeninputLayoutWindow::SetEditorTextL -// (other items were commented in a header) -// --------------------------------------------------------------------------- -// -EXPORT_C void CPeninputLayoutWindow::SetTextIsSecret( TBool aData ) - { - if(IsMultiLineIcf()) - { - if (iMultiLineIcf) - { - iMultiLineIcf->SetTextIsSecret( aData ); - } - } - else - { - if (iInputContextField) - { - iInputContextField->SetTextIsSecret( aData ); - } - } - } - -void CPeninputLayoutWindow::SetNumberGrouping( TBool aData ) - { - if(IsMultiLineIcf()) - { - if (iMultiLineIcf) - { - iMultiLineIcf->SetNumberGrouping( aData ); - } - } - } - - -// --------------------------------------------------------------------------- -// CPeninputLayoutWindow::DoClose -// (other items were commented in a header) -// --------------------------------------------------------------------------- -// -EXPORT_C TBool CPeninputLayoutWindow::DoClose() - { - // Send EVkbEventWindowClose to layout - this->ReportEvent( EPeninputLayoutEventClose, KNullDesC ); - - // Return true which will permit the window close - return EFalse; - } - -// --------------------------------------------------------------------------- -// CPeninputLayoutWindow::AddContextFieldL -// (other items were commented in a header) -// --------------------------------------------------------------------------- -// -void CPeninputLayoutWindow::AddContextFieldL() - { - // Get reference CControlGroup of headerPane - CControlGroup* headerPane = HeaderPane(); - - User::LeaveIfNull( headerPane ); - - // Input context field - iInputContextField = CFepInputContextField::NewL( TRect(), - UiLayout(), EPeninutWindowCtrlIdInputContextField ); - - // Transfer to headerPane - headerPane->AddControlL( iInputContextField ); - iInputContextField->SetFocus(ETrue); - - // Add layout as event observer - iInputContextField->AddEventObserver( UiLayout() ); - } - -// --------------------------------------------------------------------------- -// CPeninputLayoutWindow::AddTouchInputButtonL -// (other items were commented in a header) -// --------------------------------------------------------------------------- -// -void CPeninputLayoutWindow::AddTouchInputButtonL( TInt aResID ) - { - // Get reference CControlGroup of headerPane - CControlGroup* headerPane = HeaderPane(); - - User::LeaveIfNull( headerPane ); - - // Create Touch Input Option - iTouchInputOptionButton = CAknFepCtrlEventButton::NewL( UiLayout(), - EPeninutWindowCtrlIdOptionBtn, EPeninputLayoutEventOption, 0, - KAknsIIDQsnFrFunctionButtonNormal, - KAknsIIDQsnFrFunctionButtonPressed, - KAknsIIDQsnFrFunctionButtonInactive ); - - // Read resource - TResourceReader reader; - - CCoeEnv::Static()->CreateResourceReaderLC( reader, aResID ); - iTouchInputOptionButton->SetResourceId( aResID ); - iTouchInputOptionButton->ConstructFromResourceL(); - // Pop and destroy reader - CleanupStack::PopAndDestroy( 1 ); - - // Add into the group - headerPane->AddControlL( iTouchInputOptionButton ); - iTouchInputOptionButton->AddEventObserver( UiLayout() ); - } - -// --------------------------------------------------------------------------- -// Get layout config method. It does a lasy initialization for a instance of -// CPeninputLayoutWindow::ConfigInfo -// (other items were commented in a header) -// --------------------------------------------------------------------------- -// -EXPORT_C CPeninputLayoutConfig* CPeninputLayoutWindow::ConfigInfo() const - { - return iConfigInfo; - } - -// --------------------------------------------------------------------------- -// CPeninputLayoutWindow::CheckResourceExist -// (other items were commented in a header) -// --------------------------------------------------------------------------- -// -TBool CPeninputLayoutWindow::CheckResourceExist( const TDesC& aFileName ) - { - RFile file; - - if ( !aFileName.Length() ) - { - return EFalse; - } - - TInt rs = file.Open( CCoeEnv::Static()->FsSession(), aFileName, EFileRead ); - - if ( rs == KErrNotFound ) - { - return EFalse; - } - else - { - file.Close(); - - return ETrue; - } - } - -// --------------------------------------------------------------------------- -// CPeninputLayoutWindow::ChangeInputLanguageL -// (other items were commented in a header) -// --------------------------------------------------------------------------- -// -EXPORT_C void CPeninputLayoutWindow::ChangeInputLanguageL( TInt aLangID ) - { - // Determine whether a new language id is same as existing one, - if ( ConfigInfo() ) - { - // If language not changed, exit this function - if ( ConfigInfo()->Language() == aLangID ) - { - return; - } - } - - // First check file exist or not - TBool found = CheckResourceExist( GetWindowConfigResFileName( aLangID ) ); - if ( !found ) - { - aLangID = ELangEnglish; - found = CheckResourceExist( GetWindowConfigResFileName( aLangID ) ); - } - - if ( found ) - { - // Store language - iLayoutContext->SetData( EPeninputDataTypeInputLanguage, &aLangID ); - - if ( iLayoutContext->LayoutType() == EPluginInputModeVkb ) - { - CFepUiBaseCtrl* ctrl = - iCtrlPool->Control( EPeninutWindowCtrlIdVkbCtrl ); - if ( ctrl ) - { - ( static_cast( ctrl ) )->Reset(); - } - } - - ( const_cast&> - ( ClientPane()->ControlList() ) ).Reset(); - - // Re-construct config info - if ( iConfigInfo ) - { - delete iConfigInfo; - iConfigInfo = NULL; - } - - if (iConfigResId) - { - CCoeEnv::Static()->DeleteResourceFile( iConfigResId ); - } - - // construct resource utils - - CCoeEnv* coeEnv = CCoeEnv::Static(); - - // Set up resources - TFileName resFileName = GetWindowConfigResFileName( aLangID ); - BaflUtils::NearestLanguageFile(coeEnv->FsSession(), resFileName ); - iConfigResId = coeEnv->AddResourceFileL( resFileName ); - - TResourceReader reader; - - coeEnv->CreateResourceReaderLC( reader, GetWindowConfigResId() ); - if ( iLayoutContext->LayoutType() == EPluginInputModeVkb ) - { - iVkbLayout->Reset(); - } - iConfigInfo = CPeninputLayoutConfig::NewL( *iVkbLayout, reader ); - - // Pop and destroy reader - CleanupStack::PopAndDestroy( 1 ); - - // Re-construct rangebar - ChangeRangeBarL(); - - iLangOrSizeChanged = ETrue; - //ChangeClientSize(); - - TBuf<10> iISOCode; - AknPenInputUtils::GetISOLanguageCode - ( static_cast(aLangID), iISOCode ); - CFepUiBaseCtrl* langBtn = - iCtrlPool->Control( EPeninutWindowCtrlIdInputLangSwitcherBtn ); - - if ( langBtn ) - { - ( static_cast( langBtn ) )->SetText - ( iISOCode ); - UpdateArea(( static_cast( langBtn ) )->Rect(), - ETrue ); - } - TInt range = -1; - iLayoutContext->SetData( EPeninputDataTypeCurrentRange, &range ); - iLayoutContext->SetData( EPeninputDataTypeClientLayout, &range ); - - iMultiLineIcf->SetLanguageId( aLangID ); - } - else - { - // Report error, do nothing - } - } - -// --------------------------------------------------------------------------- -// CPeninputLayoutWindow::ChangeRangeBarL -// (other items were commented in a header) -// --------------------------------------------------------------------------- -// -void CPeninputLayoutWindow::ChangeRangeBarL() - { - // Read range bar from config into and reconstruct range button - if ( iConfigInfo ) - { - TInt resid = iConfigInfo->RangebarResId(); - CFepUiBaseCtrl* bar = - iCtrlPool->Control( EPeninutWindowCtrlIdRangeBar ); - - if ( bar ) - { - CAknFepCtrlRangeBar* rangebar = - static_cast( bar ); - - CAknFepCtrlRangeBar::TRangeBarActionStyle style = - ( CAknFepCtrlRangeBar::TRangeBarActionStyle ) - iConfigInfo->RangeBarInfo()->RangeStyle(); - - rangebar->SetActionStyle( style ); - - TResourceReader reader; - - CCoeEnv::Static()->CreateResourceReaderLC( reader, resid ); - - rangebar->ConstructFromResourceL( reader ); - - // Pop and destroy reader - CleanupStack::PopAndDestroy( 1 ); - } - } - } - -// --------------------------------------------------------------------------- -// CPeninputLayoutWindow::ChangeRange -// (other items were commented in a header) -// --------------------------------------------------------------------------- -// -EXPORT_C void CPeninputLayoutWindow::ChangeRange( TInt aRange, TInt aVkbLayoutId, TBool aNotify ) - { - TInt curRange = CPeninputDataConverter::AnyToInt - ( iLayoutContext->RequestData( EPeninputDataTypeCurrentRange ) ); - - - CFepUiBaseCtrl* bar = - iCtrlPool->Control( EPeninutWindowCtrlIdRangeBar ); - CAknFepCtrlRangeBar* rangebar = - static_cast( bar ); - - if ( rangebar ) - { - rangebar->ActiveRange( aRange ); - } - - if ( ( curRange != aRange ) || ( iLangOrSizeChanged ) ) - { - // Change client layout - //UiLayout()->LayoutOwner()->Hide(ETrue); - CPeninputRangeBarInfo* rangeBar = iConfigInfo->RangeBarInfo(); - CPeninputRangeInfo* rangeInfo = rangeBar->FindRange( aRange ); - - if ( !rangeInfo ) - { - aRange = ERangeNumber; - rangeInfo = rangeBar->FindRange( ERangeNumber ); - } - - // Get the whole columns - - iUnitSizeChange = ReconfigUnitSize(rangeInfo->ClientLayoutId()); - /*if (iUnitSizeChange) - { - UiLayout()->LayoutOwner()->Hide(ETrue); - } - */ - ChangeClientLayout( rangeInfo->ClientLayoutId() ); - - CPeninputClientLayoutInfo* clientLayout = - ConfigInfo()->FindClientLayoutInfo( rangeInfo->ClientLayoutId() ); - if ( clientLayout ) - { - SizeChangedForBaseWindow( clientLayout->Columns() ); - } - - // Update data:range - iLayoutContext->SetData( EPeninputDataTypeCurrentRange, &aRange ); - - // Notify fep the new range - if ( aNotify ) - { - TBuf buf; - CPeninputDataConverter::IntToDesc( aRange, buf ); - iLayoutContext->Sendkey( ESignalRange, buf ); - } - - // Change vkb layout - if ( iLayoutContext->LayoutType() == EPluginInputModeVkb ) - { - if ( ( aRange == ERangeEnglish ) || ( aRange == ERangeAccent ) - || ( ConfigInfo()->CaseSensitive() - && ( aRange == ERangeNative ) ) ) - { - // Change shift and capslock button status according to the current case - TInt curCase = CPeninputDataConverter::AnyToInt - ( iLayoutContext->RequestData( EPeninputDataTypeCase ) ); - TInt shfit; - TInt capslock; - - CPeninputDataConverter::ShiftCapslockByCase( curCase, - shfit, capslock ); - - iLayoutContext->SetData( EPeninputDataTypeShiftDown, &shfit ); - ChangeButtonStatus( shfit, EPeninutWindowCtrlIdShiftBtn ); - iLayoutContext->SetData( EPeninputDataTypeCapslockDown, &capslock ); - ChangeButtonStatus( capslock, EPeninutWindowCtrlIdCapslockBtn ); - - TInt caseid = CaseByShiftCapslockStatus(); - TInt vkblayoutid = - ConfigInfo()->ShiftCapsSingleVkbLayoutId( aRange, caseid ); - - if ( aRange == ERangeAccent ) - { - TInt curAccentIndex = CPeninputDataConverter::AnyToInt - ( iLayoutContext->RequestData( EPeninputDataTypeCurrentAccent ) ); - vkblayoutid = vkblayoutid + curAccentIndex * 2; - } - - // Change vkb layout - ChangeVkbLayout( vkblayoutid ); - } - else - { - TInt flag = 0; - - iLayoutContext->SetData( EPeninputDataTypeShiftDown, &flag ); - ChangeButtonStatus( 0, EPeninutWindowCtrlIdShiftBtn ); - iLayoutContext->SetData( EPeninputDataTypeCapslockDown, &flag ); - ChangeButtonStatus( 0, EPeninutWindowCtrlIdCapslockBtn ); - - // Change vkb layout - if ( aVkbLayoutId ) - { - ChangeVkbLayout( aVkbLayoutId ); - } - else - { - ChangeVkbLayout( rangeInfo->VkbLayoutId() ); - } - } - - } - - /*if (iUnitSizeChange) - { - //SizeChanged(ETrue); - const TRect rect = ChangeUnitSize(); - ReadLafForShadow( rect ); - if ( iConfigInfo ) - { - // Change the size of base window - SizeChangedForBaseWindow( iLastUsedTotalColumns ); - ChangeClientSize(); - } - UiLayout()->LayoutOwner()->Hide(EFalse); - iUnitSizeChange = EFalse; - }*/ - - if ( ( iLayoutContext->LayoutType() == EPluginInputModeVkb ) - && ( curRange == ERangeNumber ) && ( curRange == aRange ) ) - { - // Dimmed some keys if needed - DimKeys(); - } - - UiLayout()->Draw(); - } - - } - -// --------------------------------------------------------------------------- -// CPeninputLayoutWindow::ChangeClientLayout -// (other items were commented in a header) -// --------------------------------------------------------------------------- -// -EXPORT_C void CPeninputLayoutWindow::ChangeClientLayout( TInt aClientLayoutId ) - { - TInt curClientId = CPeninputDataConverter::AnyToInt - ( iLayoutContext->RequestData( EPeninputDataTypeClientLayout ) ); - - if ( ( curClientId != aClientLayoutId ) || ( iLangOrSizeChanged ) ) - { - // Re-Orginize all controls according to the configuration - ReorganizeControls( aClientLayoutId, ETrue ); - - // Update data:client layout id - iLayoutContext->SetData( EPeninputDataTypeClientLayout, - &aClientLayoutId ); - - // Reset lang changed flag - if ( ( iLangOrSizeChanged ) - && ( iLayoutContext->LayoutType() != EPluginInputModeVkb ) ) - { - iLangOrSizeChanged = EFalse; - } - - //iUnitSizeChange = ReconfigUnitSize(aClientLayoutId); - } - } - -// --------------------------------------------------------------------------- -// CPeninputLayoutWindow::ChangeVkbLayout -// (other items were commented in a header) -// --------------------------------------------------------------------------- -// -EXPORT_C void CPeninputLayoutWindow::ChangeVkbLayout( TInt aVkbLayoutId ) - { - TInt latchedFlag = CPeninputDataConverter::AnyToInt( - iLayoutContext->RequestData(EAkninputDataTypeLatchedSet)); - // If the DeadKey is latched, cancel it and then change the VKB layout - if(latchedFlag) - { - RPointerArray vkbListInfo; - RPointerArray keyInfoList; - - vkbListInfo = iVkbLayout->VkbLayoutInfoList(); - TInt vkbListNum = vkbListInfo.Count(); - - CVirtualKey* pKey; - TBool deadKeyChange = EFalse; - // Find the latched DeadKey in all the Vkb layout - for(TInt i = 0; i < vkbListNum; i++) - { - // Get key info list in one VKB layout - keyInfoList = vkbListInfo[i]->KeyInfoList(); - TInt keyListNum = keyInfoList.Count(); - for(TInt j = 0; j < keyListNum; j++) - { - pKey = keyInfoList[j]->Key(); - if(pKey->Latched()) - { - // Unlatch the DeadKey - pKey->SetLatched(EFalse); - - // Set the DeadKey state - iLayoutContext->SetData(EAkninputDataTypeLatchedSet, &deadKeyChange); - deadKeyChange = ETrue; - break; - } - } - if(deadKeyChange) - { - break; - } - } - } - - TInt curVkbId = CPeninputDataConverter::AnyToInt - ( iLayoutContext->RequestData( EPeninputDataTypeVkbLayout ) ); - - if ( ( curVkbId != aVkbLayoutId ) || ( iLangOrSizeChanged ) ) - { - iVkbLayout->ChangeVkbLayout( aVkbLayoutId ); - - TInt curClientId = CPeninputDataConverter::AnyToInt - ( iLayoutContext->RequestData( EPeninputDataTypeClientLayout ) ); - CPeninputControlInfo* vkbInfo = iConfigInfo->FindClientLayoutInfo - ( curClientId )->FindControlInfo( EPeninutWindowCtrlIdVkbCtrl ); - - TRect rect; - CPeninputVkbCtrlExt* vkbCtrl = static_cast - ( ClientPane()->ControlById( EPeninutWindowCtrlIdVkbCtrl ) ); - - if ( vkbInfo ) - { - TInt unitWidth = CPeninputDataConverter::AnyToInt - ( iLayoutContext->RequestData( EPeninputDataTypeUnitWidth ) ); - - TInt unitHeight = CPeninputDataConverter::AnyToInt - ( iLayoutContext->RequestData - ( EPeninputDataTypeUnitHeight ) ); - - rect.iTl = vkbCtrl->Rect().iTl + TPoint( vkbInfo->BeginColumn() - * unitWidth, vkbInfo->BeginRow() * unitHeight ); - TInt cols = vkbInfo->EndColumn() - vkbInfo->BeginColumn(); - TInt rows = vkbInfo->EndRow() - vkbInfo->BeginRow(); - rect.SetSize( TSize( cols * unitWidth, rows * unitHeight ) ); - } - - CPeninputVkbLayoutInfo* vkblayout = - ConfigInfo()->FindVkbLayoutInfo( aVkbLayoutId ); - - if ( vkbCtrl && vkblayout ) - { - vkbCtrl->SetRect( rect ); - DimKeys(); - - // Make the true draw - UpdateArea( vkbCtrl->Rect(), EFalse ); - } - - // Update data : vkb layout id - iLayoutContext->SetData( EPeninputDataTypeVkbLayout, &aVkbLayoutId ); - - // Reset lang changed flag - if ( iLangOrSizeChanged ) - { - iLangOrSizeChanged = EFalse; - } - } - - } - -// -------------------------------------------------------------------------- -// CPeninputLayoutWindow::HandleRangeEvent -// (other items were commented in a header) -// -------------------------------------------------------------------------- -// -EXPORT_C void CPeninputLayoutWindow::HandleRangeEvent( TInt aRange ) - { - TInt curRange = CPeninputDataConverter::AnyToInt - ( iLayoutContext->RequestData( EPeninputDataTypeCurrentRange ) ); - - if (!IsCanChangeRange(aRange)) - { - ChangeToPreviousRange(curRange); - return; - } - - CPeninputRangeBarInfo* rangeBar = iConfigInfo->RangeBarInfo(); - if ( !rangeBar ) - { - return; - } - - CPeninputRangeInfo* rangeInfo = rangeBar->FindRange( aRange ); - - if ( !rangeInfo ) - { - return; - } - - TInt responseStyle = rangeInfo->ResponseStyle(); - if ( responseStyle == EPeninputRangeResponseNoAction ) - { - return; - } - - if ( curRange != aRange ) - { - if ( responseStyle == EPeninputRangeResponseSwitchRange ) - { - TInt index = KInvalidIndex; - - if ( aRange == ERangeAccent ) - { - index = 0; - } - iLayoutContext->SetData( EPeninputDataTypeCurrentAccent, &index ); - - ChangeRange( aRange ); - - // When change range mannually, make the entire window visible - TInt style = EPeninputPositionChangeBrJustify; - TBuf bufStyle; - bufStyle = ( TUint16* )&style; - HandleControlEvent(EPeninputLayoutEventMovePosition, NULL, bufStyle); - } - else if ( responseStyle == EPeninputRangeResponsePopupChoiceItem ) - { - PopupChoiceList(); - } - } - } - -// -------------------------------------------------------------------------- -// CPeninputLayoutWindow::HandleRangeLoopEvent -// (other items were commented in a header) -// -------------------------------------------------------------------------- -// -EXPORT_C void CPeninputLayoutWindow::HandleRangeLoopEvent( TInt aLoop ) - { - TInt curRange = CPeninputDataConverter::AnyToInt - ( iLayoutContext->RequestData( EPeninputDataTypeCurrentRange ) ); - - CFepUiBaseCtrl* ctrl = iCtrlPool->Control( EPeninutWindowCtrlIdRangeBar ); - CAknFepCtrlRangeBar* rangebar = static_cast( ctrl ); - - if ( rangebar ) - { - TRAP_IGNORE( rangebar->SetCaseL( curRange, aLoop ) ); - - if ( ( curRange == ERangeEnglish ) || ( ConfigInfo()->CaseSensitive() - && ( curRange == ERangeNative ) ) ) - { - TInt curCase = rangebar->GetCase( curRange ); - - - - // Store case in the data manager, the engine will - // get notice at the same time - iLayoutContext->SetData( EPeninputDataTypeCase, &curCase ); - - // Notify fep the new case - TBuf buf; - CPeninputDataConverter::IntToDesc( curCase, buf ); - iLayoutContext->Sendkey( ESignalCaseMode, buf ); - } - } - } - -// -------------------------------------------------------------------------- -// CPeninputLayoutWindow::CaseByShiftCapslockStatus -// (other items were commented in a header) -// -------------------------------------------------------------------------- -// -EXPORT_C TInt CPeninputLayoutWindow::CaseByShiftCapslockStatus() - { - TInt shiftStatus = CPeninputDataConverter::AnyToInt - ( iLayoutContext->RequestData( EPeninputDataTypeShiftDown ) ); - TInt capslockStatus = CPeninputDataConverter::AnyToInt - ( iLayoutContext->RequestData( EPeninputDataTypeCapslockDown ) ); - - return ( capslockStatus * 2 + shiftStatus ); - } - -// --------------------------------------------------------------------------- -// CPeninputLayoutWindow::HandleShiftBtnClicked -// (other items were commented in a header) -// --------------------------------------------------------------------------- -// -EXPORT_C void CPeninputLayoutWindow::HandleShiftBtnClicked() - { - TInt curRange = CPeninputDataConverter::AnyToInt - ( iLayoutContext->RequestData( EPeninputDataTypeCurrentRange ) ); - TBool flag = ( curRange == ERangeEnglish ) || ( curRange == ERangeAccent ) - || ( ConfigInfo()->CaseSensitive() && ( curRange == ERangeNative ) ); - - if ( flag && !( iLayoutContext->IsShiftPermitted() ) ) - { - ChangeButtonStatus( 0, EPeninutWindowCtrlIdShiftBtn ); - return; - } - - TInt shiftStatus = CPeninputDataConverter::AnyToInt - ( iLayoutContext->RequestData( EPeninputDataTypeShiftDown ) ); - - if ( shiftStatus ) - { - shiftStatus = 0; - } - else - { - shiftStatus = 1; - } - - // Update data - iLayoutContext->SetData( EPeninputDataTypeShiftDown, &shiftStatus ); - ChangeButtonStatus( shiftStatus, EPeninutWindowCtrlIdShiftBtn ); - - // Update vkb layout - TInt caseid = CaseByShiftCapslockStatus(); - - TInt vkbLayout = iConfigInfo->ShiftCapsSingleVkbLayoutId( curRange, - caseid ); - - TInt responseStyle = - iConfigInfo->RangeBarInfo()->FindRange( curRange )->ResponseStyle(); - if ( ( curRange == ERangeAccent ) - && ( responseStyle == EPeninputRangeResponsePopupChoiceItem ) ) - { - TInt curAccentIndex = CPeninputDataConverter::AnyToInt - ( iLayoutContext->RequestData( EPeninputDataTypeCurrentAccent ) ); - vkbLayout = vkbLayout + curAccentIndex * 2; - } - - ChangeVkbLayout( vkbLayout ); - - // Synchronize case if needed - if ( flag ) - { - // Notify fep the new case - TBuf buf; - TInt fepcase = CPeninputDataConverter::FepCaseByCaseId( caseid ); - iLayoutContext->SetData( EPeninputDataTypeCase, &fepcase ); - CPeninputDataConverter::IntToDesc( fepcase, buf ); - iLayoutContext->Sendkey( ESignalCaseMode, buf ); - } - } - -// --------------------------------------------------------------------------- -// CPeninputLayoutWindow::HandleCapslockBtnClicked -// (other items were commented in a header) -// --------------------------------------------------------------------------- -// -EXPORT_C void CPeninputLayoutWindow::HandleCapslockBtnClicked() - { - TInt curRange = CPeninputDataConverter::AnyToInt - ( iLayoutContext->RequestData( EPeninputDataTypeCurrentRange ) ); - TBool flag = ( curRange == ERangeEnglish ) || ( curRange == ERangeAccent ) - || ( ConfigInfo()->CaseSensitive() && ( curRange == ERangeNative ) ); - - if ( flag && !( iLayoutContext->IsCapsLockPermitted() ) ) - { - ChangeButtonStatus( 0, EPeninutWindowCtrlIdCapslockBtn ); - return; - } - - TInt capslockStatus = CPeninputDataConverter::AnyToInt - ( iLayoutContext->RequestData( EPeninputDataTypeCapslockDown ) ); - TInt shiftStatus = CPeninputDataConverter::AnyToInt - ( iLayoutContext->RequestData( EPeninputDataTypeShiftDown ) ); - - if ( capslockStatus ) - { - capslockStatus = 0; - } - else - { - capslockStatus = 1; - } - - if( shiftStatus ) - { - shiftStatus = 0; - iLayoutContext->SetData( EPeninputDataTypeShiftDown, - &shiftStatus ); - ChangeButtonStatus( shiftStatus, EPeninutWindowCtrlIdShiftBtn ); - } - - // Update data - iLayoutContext->SetData( EPeninputDataTypeCapslockDown, - &capslockStatus ); - ChangeButtonStatus( capslockStatus, EPeninutWindowCtrlIdCapslockBtn ); - - // Update vkb layout - TInt caseid = CaseByShiftCapslockStatus(); - TInt vkbLayout = iConfigInfo->ShiftCapsSingleVkbLayoutId( curRange, - caseid ); - - TInt responseStyle = - iConfigInfo->RangeBarInfo()->FindRange( curRange )->ResponseStyle(); - if ( ( curRange == ERangeAccent ) - && ( responseStyle == EPeninputRangeResponsePopupChoiceItem ) ) - { - TInt curAccentIndex = CPeninputDataConverter::AnyToInt - ( iLayoutContext->RequestData( EPeninputDataTypeCurrentAccent ) ); - vkbLayout = vkbLayout + curAccentIndex * 2; - } - - ChangeVkbLayout( vkbLayout ); - - // Synchronize case if needed - if ( flag ) - { - // Notify fep the new case - TBuf buf; - TInt fepcase = CPeninputDataConverter::FepCaseByCaseId( caseid ); - iLayoutContext->SetData( EPeninputDataTypeCase, &fepcase ); - CPeninputDataConverter::IntToDesc( fepcase, buf ); - iLayoutContext->Sendkey( ESignalCaseMode, buf ); - } - } - -// --------------------------------------------------------------------------- -// CPeninputLayoutWindow::DimKeys -// (other items were commented in a header) -// --------------------------------------------------------------------------- -// -void CPeninputLayoutWindow::DimKeys() - { - CPeninputVkbCtrlExt* vkbCtrl = static_cast - ( ClientPane()->ControlById( EPeninutWindowCtrlIdVkbCtrl ) ); - vkbCtrl->CancelDims(); - TInt currentRange = CPeninputDataConverter::AnyToInt - ( iLayoutContext->RequestData( EPeninputDataTypeCurrentRange ) ); - TInt permitRange = CPeninputDataConverter::AnyToInt - ( iLayoutContext->RequestData( EPeninputDataTypePermittedRange ) ); - TInt keyMapping = CPeninputDataConverter::AnyToInt - ( iLayoutContext->RequestData( EPeninputDataTypeNumericKeymap ) ); - - if ( ( currentRange == ERangeNumber ) - && ( permitRange == ERangeNumber ) ) - { - HBufC* rs = NULL; - TRAP_IGNORE(rs = GetKeyMappingStringL(keyMapping)); - if( rs ) - { - vkbCtrl->DimKeys( rs ); - delete rs; - } - } - vkbCtrl->Draw(); - } - -// --------------------------------------------------------------------------- -// CPeninputLayoutWindow::AddControlL -// (other items were commented in a header) -// --------------------------------------------------------------------------- -// -EXPORT_C void CPeninputLayoutWindow::AddNotOwnedControl( - CFepUiBaseCtrl* aControl ) - { - //do nothing if we already has the control. - if ( KErrNotFound != ClientPane()->ControlList().Find( aControl ) ) - { - return; - } - - if ( aControl ) - { - ( const_cast&> - ( ClientPane()->ControlList() ) ).Append( aControl ); - aControl->SetParent( ClientPane() ); - RRegion region( KPeninputLayoutWindowRegionCount ); - region.Copy( ClientPane()->Region() ); - - region.AddRect( aControl->Rect() ); - ClientPane()->SetRegion( region ); - } - } -// --------------------------------------------------------------------------- -// CPeninputLayoutWindow::ChangeButtonStatus -// (other items were commented in a header) -// --------------------------------------------------------------------------- -// -EXPORT_C void CPeninputLayoutWindow::ChangeButtonStatus( const TInt aIsDown, - const TInt aControlId ) - { - CAknFepCtrlEventButton* button = - static_cast - ( ClientPane()->ControlById( aControlId ) ); - - if ( button ) - { - button->SetHighlight( aIsDown == 0 ? EFalse : ETrue ); - } - } - -// --------------------------------------------------------------------------- -// CPeninputLayoutWindow::ChangeLayoutPosition -// (other items were commented in a header) -// --------------------------------------------------------------------------- -// -EXPORT_C void CPeninputLayoutWindow::ChangeLayoutPosition( TInt aJustifyStyle ) - { - switch ( aJustifyStyle ) - { - case EPeninputPositionChangeBrJustify: - { - BottomRightJustify(); - } - break; - case EPeninputPositionChangeDataQuery: - { - BottomRightJustify(); - DataQueryJustify(); - } - break; - /*case EPeninputPositionChangeNone: - break;*/ - default: - { - TopLeftJustify(); - } - break; - } - } - -// --------------------------------------------------------------------------- -// CPeninputLayoutWindow::SetWindowRect -// (other items were commented in a header) -// --------------------------------------------------------------------------- -// -EXPORT_C void CPeninputLayoutWindow::SetWindowRect( const TRect& aRect ) - { - TRect rect = aRect; - - - TRect shadowRect = TRect( TPoint(), - TSize( aRect.Width() + iShadowBrWidth + iShadowTlWidth, - aRect.Height() + iShadowTlHeight + iShadowBrHeight) - ); - - rect.Move( TPoint(iShadowTlWidth, iShadowTlHeight) - rect.iTl ); - - SetRect( rect ); - RootControl()->SetRect( rect ); - UiLayout()->SetShadowRect( shadowRect ); - } - - -// ----------------------------------------------------------------------------- -// CPeninputLayoutWindow::SetSwitchBtnFont -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -EXPORT_C void CPeninputLayoutWindow::SetSwitchBtnFont(CAknFepCtrlEventButton& aSwitchBtn) - { - // read switch font laf info only when need - if (CPeninputDataConverter::AnyToInt( - iLayoutContext->RequestData(EAkninputDataTypeSizeChanging)) || (!iSwitchFontSet)) - { - TAknTextLineLayout langSwitch; - TAknTextLineLayout langSwitchShadow; - - switch( iLayoutContext->LayoutType() ) - { - case EPluginInputModeVkb: - { - langSwitch = - AknLayoutScalable_Avkon::cell_vkb_side_pane_t1().LayoutLine(); - langSwitchShadow = - AknLayoutScalable_Avkon::cell_vkb_side_pane_t1_copy1().LayoutLine(); - } - break; - case EPluginInputModeHwr: - { - langSwitch = - AknLayoutScalable_Avkon::cell_hwr_side_pane_t1().LayoutLine(); - langSwitchShadow = - AknLayoutScalable_Avkon::cell_hwr_side_pane_t1_copy1().LayoutLine(); - } - break; - default: - { - return; - } - } - - iSwitchFont = langSwitch.iFont; - iSwitchShadowFont = langSwitchShadow.iFont; - } - - aSwitchBtn.SetFont(AknLayoutUtils::FontFromId(iSwitchFont, NULL)); - aSwitchBtn.SetShadowFont(AknLayoutUtils::FontFromId(iSwitchShadowFont, NULL)); - iSwitchFontSet = ETrue; - } - -// --------------------------------------------------------------------------- -// CPeninputLayoutWindow::TopLeftJustify -// (other items were commented in a header) -// --------------------------------------------------------------------------- -// -EXPORT_C void CPeninputLayoutWindow::SetSwitchBtnTextColor(CAknFepCtrlEventButton& aSwitchBtn) - { - TRgb textColor; - TInt error = AknsUtils::GetCachedColor(AknsUtils::SkinInstance(), - textColor, - KAknsIIDQsnTextColors, - EAknsCIQsnTextColorsCG59); - - if (error != KErrNone) - { - textColor = TRgb(KDefaultTextColor); - } - - aSwitchBtn.SetFontColor( textColor ); - - TRgb shadowTextColor; - error = AknsUtils::GetCachedColor(AknsUtils::SkinInstance(), - shadowTextColor, - KAknsIIDQsnTextColors, - EAknsCIQsnTextColorsCG62); - - if (error != KErrNone) - { - shadowTextColor = TRgb(KDefaultShadowTextColor); - } - - aSwitchBtn.SetShadowFontColor( shadowTextColor ); - } - -// --------------------------------------------------------------------------- -// CPeninputLayoutWindow::TopLeftJustify -// (other items were commented in a header) -// --------------------------------------------------------------------------- -// -void CPeninputLayoutWindow::TopLeftJustify() - { - // Read position from datamgr - TSize layoutSize = UiLayout()->Rect().Size(); - - TPoint tl = UiLayout()->Position(); - - TPoint oldBr = tl + layoutSize; - - if ( tl.iX < 0 ) - { - tl.iX = 0; - } - - if ( tl.iY < 0 ) - { - tl.iY = 0; - } - - TPoint br = tl + layoutSize; - - if ( br != oldBr ) - { - //Write the new position into CenRep - TInt x = 0; - TInt y = 0; - x = 0x0000FFFF & br.iX; - y = 0xFFFF0000 & ( br.iY << 16 ); - TInt pos = x | y; - iLayoutContext->SetData( EPeninputDataTypeWindowPosition, &pos ); - } - - //Set the layout position - //UiLayout()->SetRect( newRect ); - UiLayout()->LayoutOwner()->SetPosition( tl ); - //UiLayout()->LayoutOwner()->LayoutSizeChanged( newRect.Size() ); - } - -// --------------------------------------------------------------------------- -// CPeninputLayoutWindow::BottomRightJustify -// (other items were commented in a header). -// --------------------------------------------------------------------------- -// -void CPeninputLayoutWindow::BottomRightJustify() - { - // Read position from datamgr - TSize layoutSize( UiLayout()->Rect().Size() ); - TPoint oldbr; - TPoint br; - TPoint tl; - TSize screenSize = *( ( TSize* ) iLayoutContext->RequestData - ( EPeninputDataTypeScreenSize ) ); - - TRect screenRect = TRect( TPoint( 0, 0 ), screenSize ); - - TInt windowPosition = CPeninputDataConverter::AnyToInt - ( iLayoutContext->RequestData( EPeninputDataTypeWindowPosition ) ); - - oldbr.iX = windowPosition & 0x0000FFFF; - oldbr.iY = ( windowPosition & 0xFFFF0000 ) >> 16; - - br = oldbr; - - if ( !screenRect.Contains( br ) ) - { - if ( screenSize.iWidth < br.iX ) - { - br.iX = screenSize.iWidth; - } - if ( screenSize.iHeight < br.iY ) - { - br.iY = screenSize.iHeight; - } - } - - // Check the top left point is in screen - tl.iX = br.iX - layoutSize.iWidth; - if ( tl.iX < 0 ) - { - tl.iX = 0; - br.iX = layoutSize.iWidth; - } - - tl.iY = br.iY - layoutSize.iHeight; - if ( tl.iY < 0 ) - { - tl.iY = 0; - br.iY = layoutSize.iHeight; - } - - - if ( oldbr != br ) - { - //Write the new position into CenRep - TInt x = 0; - TInt y = 0; - x = 0x0000FFFF & br.iX; - y = 0xFFFF0000 & ( br.iY << 16 ); - TInt pos = x | y; - iLayoutContext->SetData( EPeninputDataTypeWindowPosition, &pos ); - } - - //Set the layout position - //UiLayout()->SetRect( newRect ); - //UiLayout()->LayoutOwner()->LayoutSizeChanged( newRect.Size() ); - UiLayout()->LayoutOwner()->SetPosition( tl ); - } - -// --------------------------------------------------------------------------- -// CPeninputLayoutWindow::DataQueryJustify -// (other items were commented in a header) -// --------------------------------------------------------------------------- -// -void CPeninputLayoutWindow::DataQueryJustify() - { - TRect* dataQueryRect = ( TRect* )( iLayoutContext->RequestData - ( EPeninputDataTypeDataQueryDlgRect) ); - - TRect rect = TRect( UiLayout()->Position(), UiLayout()->Rect().Size() ); - - //move the VKB to the bottom-right corner - TSize scrsz = UiLayout()->ScreenSize(); - - if( scrsz.iWidth < scrsz.iHeight ) - { - return; - } - rect = TRect( TPoint( scrsz.iWidth - rect.Width(), scrsz.iHeight - rect.Height() ), - rect.Size() ); - - //Write the new position into CenRep - TInt x = 0; - TInt y = 0; - x = 0x0000FFFF & rect.iBr.iX; - y = 0xFFFF0000 & ( rect.iBr.iY << 16 ); - TInt pos = x | y; - iLayoutContext->SetData( EPeninputDataTypeWindowPosition, &pos ); - - /*if ( rect.Intersects( *dataQueryRect ) ) - { - TInt Y = dataQueryRect->iTl.iY; - TInt height = rect.iBr.iY - rect.iTl.iY; - rect.iTl.iY = Y - height; - rect.iBr.iY = Y; - - if( rect.iTl.iY <0 ) - { - rect.iTl.iY = 0; - rect.iBr.iY = height; - } - //Write the new position into CenRep - TInt x = 0; - TInt y = 0; - x = 0x0000FFFF & rect.iBr.iX; - y = 0xFFFF0000 & ( rect.iBr.iY << 16 ); - TInt pos = x | y; - iLayoutContext->SetData( EPeninputDataTypeWindowPosition, &pos ); - } - */ - //Set the layout position - UiLayout()->SetRect( rect ); - UiLayout()->LayoutOwner()->SetPosition( rect.iTl ); - UiLayout()->LayoutOwner()->LayoutSizeChanged( rect.Size() ); - } - -// --------------------------------------------------------------------------- -// CPeninputLayoutWindow::ReadShadowInfoL -// (other items were commented in a header) -// --------------------------------------------------------------------------- -// -void CPeninputLayoutWindow::ReadShadowInfoL( TResourceReader aResReader ) - { - TPtrC bmpFileName = aResReader.ReadTPtrC(); - TInt32 imgMajorSkinId = aResReader.ReadInt32(); - - TAknsItemID id; - TInt skinitemid; - - MAknsSkinInstance* skininstance = AknsUtils::SkinInstance(); - - for ( TInt i = 0; i < KShadowBmpBr + 1; i++ ) - { - const TInt16 bmpId = aResReader.ReadInt16(); - const TInt16 bmpMskId = aResReader.ReadInt16(); - skinitemid = aResReader.ReadInt16(); - - id.Set(TInt(imgMajorSkinId), skinitemid); - - if (bmpId != KInvalidImg) - { - CFbsBitmap* shadowImg = NULL; - CFbsBitmap* shadowMaskImg = NULL; - - if (bmpMskId != KInvalidImg) - { - AknsUtils::CreateIconL(skininstance, - id, - shadowImg, - shadowMaskImg, - bmpFileName, - bmpId, - bmpMskId); - } - else - { - AknsUtils::CreateIconL(skininstance, - id, - shadowImg, - bmpFileName, - bmpId); - } - - UiLayout()->SetShadowBmp(shadowImg, shadowMaskImg, TShadowBitmapIndex(i)); - } - } - } - -// --------------------------------------------------------------------------- -// CPeninputLayoutWindow::ReadBackgroundInfoL -// (other items were commented in a header) -// --------------------------------------------------------------------------- -// -void CPeninputLayoutWindow::ReadBackgroundInfoL( TInt aResId ) - { - if( aResId == 0 ) - return; - - if( BackgroundBmp() ) - { - CFbsBitmap* bkBmp = BackgroundBmp(); - delete bkBmp; - SetBackgroundBmp( NULL ); - } - if( BkMaskBmp() ) - { - CFbsBitmap* bkMaskBmp = BkMaskBmp(); - delete bkMaskBmp; - SetBackgroundMaskBmp( NULL ); - } - - TResourceReader resReader; - CCoeEnv::Static()->CreateResourceReaderLC( resReader, aResId ); - - TPtrC bmpFileName = resReader.ReadTPtrC(); - TInt32 imgMajorSkinId = resReader.ReadInt32(); - - TAknsItemID id; - TInt skinitemid; - - MAknsSkinInstance* skininstance = AknsUtils::SkinInstance(); - const TInt16 bmpId = resReader.ReadInt16(); - const TInt16 bmpMskId = resReader.ReadInt16(); - skinitemid = resReader.ReadInt16(); - id.Set(TInt(imgMajorSkinId), skinitemid); - - if (bmpId != KInvalidImg) - { - CFbsBitmap* backgroundImg = NULL; - CFbsBitmap* backgroundMaskImg = NULL; - if (bmpMskId != KInvalidImg) - { - AknsUtils::CreateIconL(skininstance, - id, - backgroundImg, - backgroundMaskImg, - bmpFileName, - bmpId, - bmpMskId); - } - else - { - AknsUtils::CreateIconL(skininstance, - id, - backgroundImg, - bmpFileName, - bmpId); - } - - SetBackgroundBmp( backgroundImg ); - SetBackgroundMaskBmp( backgroundMaskImg ); - } - CleanupStack::PopAndDestroy( 1 ); - } - -// --------------------------------------------------------------------------- -// CPeninputLayoutWindow::ReadIcfInfo -// (other items were commented in a header) -// --------------------------------------------------------------------------- -// -EXPORT_C void CPeninputLayoutWindow::ReadIcfInfo( TResourceReader aResReader ) - { - TPtrC bmpFileName = aResReader.ReadTPtrC(); - TInt32 imgMajorSkinId = aResReader.ReadInt32(); - - TAknsItemID id; - TInt skinitemid; - - MAknsSkinInstance* skininstance = AknsUtils::SkinInstance(); - - const TInt16 icfbgId = aResReader.ReadInt16(); - const TInt16 icfbgmaskId = aResReader.ReadInt16(); - skinitemid = aResReader.ReadInt16(); - - id.Set( TInt( imgMajorSkinId ), skinitemid ); - - if ( icfbgId != KInvalidImg ) - { - CFbsBitmap* icfImg = NULL; - - if (icfbgmaskId != KInvalidImg) - { - CFbsBitmap* icfmaskImg = NULL; - - TRAP_IGNORE( AknsUtils::CreateIconL(skininstance, - id, - icfImg, - icfmaskImg, - bmpFileName, - icfbgId, - icfbgmaskId ) ); - - AknIconUtils::SetSize(icfmaskImg, TSize(1,1), EAspectRatioNotPreserved); - TRAP_IGNORE( iInputContextField->SetBackgroundMaskBitmapL(icfmaskImg) ); - } - else - { - TRAP_IGNORE( AknsUtils::CreateIconL(skininstance, - id, - icfImg, - bmpFileName, - icfbgId) ); - } - - AknIconUtils::SetSize(icfImg, TSize(1,1), EAspectRatioNotPreserved); - TRAP_IGNORE( iInputContextField->SetBackgroundBitmapL(icfImg) ); - } - - // read text color - TRgb textcolor; - TInt32 colorMajorSkinId = aResReader.ReadInt32(); - skinitemid = aResReader.ReadInt16(); - - id.Set(TInt(colorMajorSkinId), skinitemid); - - const TInt16 textcoloridx = aResReader.ReadInt16(); - - TInt error = AknsUtils::GetCachedColor(skininstance, - textcolor, - id, - textcoloridx); - - if (error == KErrNone) - { - iInputContextField->SetTextColor( textcolor ); - } - else - { - iInputContextField->SetTextColor( TRgb( KDefaultTextColor ) ); - } - } - -// --------------------------------------------------------------------------- -// CPeninputLayoutWindow::Draw -// (other items were commented in a header) -// --------------------------------------------------------------------------- -// -EXPORT_C void CPeninputLayoutWindow::Draw() - { - // Draw shadow - CAknFepCtrlBaseWindow::Draw(); - - //DrawShadow(); - - UpdateArea(UiLayout()->Rect(), EFalse); - } - -// --------------------------------------------------------------------------- -// CPeninputLayoutWindow::GetKeyMappingStringL -// (other items were commented in a header) -// --------------------------------------------------------------------------- -// -HBufC* CPeninputLayoutWindow::GetKeyMappingStringL(TInt aKeyMapping) - { - HBufC* rs = NULL; - if ( aKeyMapping == EKeymapFromResource ) - { - HBufC* customRes = (HBufC*) iLayoutContext->RequestData(EAknFepDataTypeUseDefinedResource); - _LIT(KTenNumbers,"0123456789"); - rs = HBufC::NewL(KTenNumbers().Length() + customRes->Length()); - rs->Des().Copy(*customRes); - rs->Des().Append(KTenNumbers); - } - else - { - rs = iKeyMappingMgr->KeyMappingStringL( aKeyMapping ); - } - - return rs; - } - -// --------------------------------------------------------------------------- -// CPeninputLayoutWindow::SetEnableSwitchToHwr -// (other items were commented in a header) -// --------------------------------------------------------------------------- -// -EXPORT_C void CPeninputLayoutWindow::SetEnableSwitchToHwr(TBool aEnable) - { - CAknFepCtrlEventButton* switchToHwrBtn = static_cast - ( iCtrlPool->Control( EPeninutWindowCtrlIdSwitchToHwrBtn ) ); - - if( switchToHwrBtn != NULL ) - { - if ( aEnable ) - { - switchToHwrBtn->SetDimmed(EFalse); - } - else - { - switchToHwrBtn->SetDimmed(ETrue); - switchToHwrBtn->SetActive(EFalse); - } - } - } - -// --------------------------------------------------------------------------- -// CPeninputLayoutWindow::SetEnableSettingBtn -// (other items were commented in a header) -// --------------------------------------------------------------------------- -// -EXPORT_C void CPeninputLayoutWindow::SetEnableSettingBtn(TBool aEnable) - { - CAknFepCtrlEventButton* langSetBtn = static_cast - ( iCtrlPool->Control( EPeninutWindowCtrlIdInputLangSwitcherBtn ) ); - - - if( langSetBtn != NULL ) - { - if ( aEnable ) - { - langSetBtn->SetDimmed(EFalse); - iTouchInputOptionButton->SetDimmed(EFalse); - } - else - { - langSetBtn->SetDimmed(ETrue); - langSetBtn->SetActive(EFalse); - iTouchInputOptionButton->SetDimmed(ETrue); - iTouchInputOptionButton->SetActive(EFalse); - } - } - } - -// --------------------------------------------------------------------------- -// CPeninputLayoutWindow::ReconfigUnitSize -// (other items were commented in a header) -// --------------------------------------------------------------------------- -// -EXPORT_C TBool CPeninputLayoutWindow::ReconfigUnitSize(TInt /*aClientLayoutId*/) - { - return EFalse; - } - -void CPeninputLayoutWindow::AddMultiContextFieldL() - { - const CFont* icfFont = NULL; - TAknTextLineLayout textPaneTextLayout; - - textPaneTextLayout = - AknLayoutScalable_Avkon::fep_vkb_top_text_pane_t1().LayoutLine(); - - icfFont = AknLayoutUtils::FontFromId( textPaneTextLayout.iFont, NULL ); - if ( icfFont ) - { - iMultiLineIcf = CFepLayoutMultiLineIcf::NewL( TRect(), - UiLayout(), EPeninputWindowCtrlIdMultiLineICF, - icfFont->HeightInPixels(), - icfFont->FontMaxHeight(),icfFont ); - - HeaderPane()->AddControlL( iMultiLineIcf ); - - // Add layout as event observer - iMultiLineIcf->AddEventObserver( UiLayout() ); - iMultiLineIcf->SetFocus(ETrue); - } - } - -EXPORT_C TBool CPeninputLayoutWindow::IsMultiLineIcf() - { - return EFalse; - } - - -void CPeninputLayoutWindow::ReadMultiLineIcfInforL(TInt aResID) - { - if (!aResID) - { - return; - } - - TResourceReader resReader; - CCoeEnv::Static()->CreateResourceReaderLC( resReader, aResID ); - - TPtrC bmpFileName = resReader.ReadTPtrC(); - TInt32 imgMajorSkinId = resReader.ReadInt32(); - - TAknsItemID id; - TInt skinitemid; - - MAknsSkinInstance* skininstance = AknsUtils::SkinInstance(); - - const TInt16 icfbgId = resReader.ReadInt16(); - const TInt16 icfbgmaskId = resReader.ReadInt16(); - skinitemid = resReader.ReadInt16(); - - id.Set( TInt( imgMajorSkinId ), skinitemid ); - - if ( icfbgId != KInvalidImg ) - { - CFbsBitmap* icfImg = NULL; - - if (icfbgmaskId != KInvalidImg) - { - CFbsBitmap* icfmaskImg = NULL; - - TRAP_IGNORE( AknsUtils::CreateIconL(skininstance, - id, - icfImg, - icfmaskImg, - bmpFileName, - icfbgId, - icfbgmaskId ) ); - - AknIconUtils::SetSize(icfmaskImg, TSize(1,1), EAspectRatioNotPreserved); - TRAP_IGNORE( iMultiLineIcf->SetBackgroundMaskBitmapL(icfmaskImg) ); - } - else - { - TRAP_IGNORE( AknsUtils::CreateIconL(skininstance, - id, - icfImg, - bmpFileName, - icfbgId) ); - } - - AknIconUtils::SetSize(icfImg, TSize(1,1), EAspectRatioNotPreserved); - TRAP_IGNORE( iMultiLineIcf->SetBackgroundBitmapL(icfImg) ); - } - - // read text color - TRgb textcolor; - TInt32 colorMajorSkinId = resReader.ReadInt32(); - skinitemid = resReader.ReadInt16(); - - id.Set(TInt(colorMajorSkinId), skinitemid); - - const TInt16 textcoloridx = resReader.ReadInt16(); - - TInt error = AknsUtils::GetCachedColor(skininstance, - textcolor, - id, - textcoloridx); - - if (error == KErrNone) - { - iMultiLineIcf->SetTextColorL( textcolor ); - } - else - { - iMultiLineIcf->SetTextColorL( TRgb( KDefaultTextColor ) ); - } - CleanupStack::PopAndDestroy( 1 ); // resReader*/ - } - -EXPORT_C TBool CPeninputLayoutWindow::IsCanChangeRange(TInt /*aRange*/) - { - return ETrue; - } - -EXPORT_C void CPeninputLayoutWindow::ChangeToPreviousRange(TInt /*aRange*/) - { - - } - -EXPORT_C void CPeninputLayoutWindow::SetTextAlignmentL( TInt aAlignment ) - { - if ( iMultiLineIcf && ConfigInfo()->Language() != ELangNone ) - { - iMultiLineIcf->SetTextAlignmentL( aAlignment, ConfigInfo()->Language() ); - } - } -//End Of File