diff -r f742655b05bf -r d38647835c2e voipplugins/accountcreationplugin/src/acpproviderspecificcontainer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/voipplugins/accountcreationplugin/src/acpproviderspecificcontainer.cpp Wed Sep 01 12:29:57 2010 +0100 @@ -0,0 +1,447 @@ +/* +* Copyright (c) 2007-2008 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: Implements CAcpProviderSpecificContainer methods +* +*/ + + +#include +#include +#include +// SKIN: includes +#include +#include +#include + +#include "acpproviderspecificcontainer.h" +#include "accountcreationpluginlogger.h" +#include "accountcreationpluginconstants.h" +#include "acpcontroller.h" + +const TInt KComponentControlCount = 6; +const TInt KScrollMin = -200; +const TInt KScrollMax = 10; +const TInt KEight = 8; +const TInt KPositionX = 10; +const TInt KScrollSpeed = 10; + +// --------------------------------------------------------------------------- +// CAcpProviderSpecificContainer::CAcpProviderSpecificContainer +// --------------------------------------------------------------------------- +// +CAcpProviderSpecificContainer::CAcpProviderSpecificContainer( + CAcpController& aController ) + : iController( aController ), iScrollY( KScrollMax ) + { + } + +// --------------------------------------------------------------------------- +// CAcpProviderSpecificContainer::ConstructL +// --------------------------------------------------------------------------- +// +void CAcpProviderSpecificContainer::ConstructL( const TRect& aRect ) + { + ACPLOG( "CAcpProviderSpecificContainer::ConstructL begin" ); + + CreateWindowL(); + + // Skin background. + //SKIN: create the skin context for our control + iBgContext = CAknsBasicBackgroundControlContext::NewL( + KAknsIIDQsnBgAreaMain, aRect, ETrue ); + + // Provider. + TInt index = iController.ActiveIndex(); + TPtrC providerName = iController.ProviderNameFromIndexL( index ); + TPtrC providerType = iController.ProviderTypeFromIndexL( index ); + TPtrC providerDescription = + iController.ProviderDescriptionFromIndexL( index ); + + // Name label. + iLabel = new (ELeave) CEikLabel; + iLabel->SetContainerWindowL( *this ); + HBufC* typeText; + typeText = StringLoader::LoadLC( R_SERVTAB_CD_DETAIL_NAME ); + iLabel->SetTextL( *typeText ); + CleanupStack::PopAndDestroy( typeText ); + + // Type label. + iLabel2 = new (ELeave) CEikLabel; + iLabel2->SetContainerWindowL( *this ); + HBufC* typeText2; + typeText2 = StringLoader::LoadLC( R_SERVTAB_CD_DETAIL_TYPE ); + iLabel2->SetTextL( *typeText2 ); + CleanupStack::PopAndDestroy( typeText2 ); + + // Description label + iLabel3 = new (ELeave) CEikLabel; + iLabel3->SetContainerWindowL( *this ); + HBufC* typeText3; + typeText3 = StringLoader::LoadLC( R_SERVTAB_CD_DETAIL_DESCRIPTION ); + iLabel3->SetTextL( *typeText3 ); + CleanupStack::PopAndDestroy( typeText3 ); + + // Edwin for name. + TResourceReader reader; + iCoeEnv->CreateResourceReaderLC( reader, R_ACP_TYPE ); + iEdwin = new (ELeave) CEikEdwin; + iEdwin->SetContainerWindowL( *this ); + iEdwin->ConstructFromResourceL( reader ); + CleanupStack::PopAndDestroy(); + if ( !providerName.Length() ) + { + HBufC* typeText6; + typeText6 = StringLoader::LoadLC( R_SERVTAB_CD_VALUE_UNDEFINED ); + iEdwin->SetTextL( typeText6 ); + CleanupStack::PopAndDestroy( typeText6 ); + } + else + { + iEdwin->SetTextL( &providerName ); + } + + // Edwin for type. + TResourceReader reader2; + iCoeEnv->CreateResourceReaderLC( reader2, R_ACP_TYPE ); + iEdwin2 = new (ELeave) CEikEdwin; + iEdwin2->SetContainerWindowL( *this ); + iEdwin2->ConstructFromResourceL( reader2 ); + CleanupStack::PopAndDestroy(); + if ( !providerType.Length() ) + { + HBufC* typeText7; + typeText7 = StringLoader::LoadLC( R_SERVTAB_CD_VALUE_UNDEFINED ); + iEdwin2->SetTextL( typeText7 ); + CleanupStack::PopAndDestroy( typeText7 ); + } + else + { + iEdwin2->SetTextL( &providerType ); + } + + // Edwin for description. + TResourceReader reader3; + iCoeEnv->CreateResourceReaderLC( reader3, R_ACP_TYPE ); + iEdwin3 = new (ELeave) CEikEdwin; + iEdwin3->SetContainerWindowL( *this ); + iEdwin3->ConstructFromResourceL( reader3 ); + CleanupStack::PopAndDestroy(); + if ( !providerDescription.Length() ) + { + HBufC* typeText8; + typeText8 = StringLoader::LoadLC( R_SERVTAB_CD_VALUE_UNDEFINED ); + iEdwin3->SetTextL( typeText8 ); + CleanupStack::PopAndDestroy( typeText8 ); + } + else + { + iEdwin3->SetTextL( &providerDescription ); + } + + // Get label colours from skin. + MAknsSkinInstance* skin = AknsUtils::SkinInstance(); + TRgb color( 0, 0, 0 ); + + AknsUtils::GetCachedColor( skin, color, KAknsIIDQsnTextColors, + EAknsCIQsnTextColorsCG6 ); + iLabel->OverrideColorL( EColorLabelText, color ); + iLabel->SetEmphasis( CEikLabel::ENoEmphasis ); + iLabel2->OverrideColorL(EColorLabelText, color ); + iLabel2->SetEmphasis( CEikLabel::ENoEmphasis ); + iLabel3->OverrideColorL(EColorLabelText, color ); + iLabel3->SetEmphasis( CEikLabel::ENoEmphasis ); + + CCharFormatLayer* formatLayer = CEikonEnv::NewDefaultCharFormatLayerL(); + CleanupStack::PushL( formatLayer ); + + TCharFormat format; + TCharFormatMask formatMask; + formatLayer->Sense( format, formatMask ); + format.iFontPresentation.iTextColor = color; + formatMask.SetAttrib( EAttColor ); + formatLayer->SetL( format, formatMask ); + + iEdwin->SetCharFormatLayer( formatLayer->CloneL() ); + iEdwin2->SetCharFormatLayer( formatLayer->CloneL() ); + + CleanupStack::Pop( formatLayer ); + iEdwin3->SetCharFormatLayer( formatLayer ); + + SetRect( aRect ); + ActivateL(); + + ACPLOG( "CAcpProviderSpecificContainer::ConstructL end" ); + } + +// --------------------------------------------------------------------------- +// CAcpProviderSpecificContainer::NewL +// --------------------------------------------------------------------------- +// +CAcpProviderSpecificContainer* CAcpProviderSpecificContainer::NewL( + CAcpController& aController, + const TRect& aRect ) + { + CAcpProviderSpecificContainer* self = + CAcpProviderSpecificContainer::NewLC( aController, aRect ); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// CAcpProviderSpecificContainer::NewLC +// --------------------------------------------------------------------------- +// +CAcpProviderSpecificContainer* CAcpProviderSpecificContainer::NewLC( + CAcpController& aController, + const TRect& aRect ) + { + CAcpProviderSpecificContainer* self = + new ( ELeave ) CAcpProviderSpecificContainer( aController ); + CleanupStack::PushL( self ); + self->ConstructL( aRect ); + return self; + } + +// --------------------------------------------------------------------------- +// CAcpProviderSpecificContainer::~CAcpProviderSpecificContainer +// --------------------------------------------------------------------------- +// +CAcpProviderSpecificContainer::~CAcpProviderSpecificContainer() + { + ACPLOG( + "CAcpProviderSpecificContainer::~CAcpProviderSpecificContainer begin" ); + + delete iLabel; + delete iLabel2; + delete iLabel3; + delete iEdwin; + delete iEdwin2; + delete iEdwin3; + delete iBgContext; + + ACPLOG( + "CAcpProviderSpecificContainer::~CAcpProviderSpecificContainer end" ); + } + +// --------------------------------------------------------------------------- +// CAcpProviderSpecificContainer::ComponentControl +// From class CoeControl. +// --------------------------------------------------------------------------- +// +CCoeControl* CAcpProviderSpecificContainer::ComponentControl( + TInt aIndex ) const + { + const TInt KZeroCase = 0; + const TInt KOneCase = 1; + const TInt KTwoCase = 2; + const TInt KThreeCase = 3; + const TInt KFourCase = 4; + const TInt KFiveCase = 5; + + switch ( aIndex ) + { + case KZeroCase: + return iLabel; + case KOneCase: + return iLabel2; + case KTwoCase: + return iLabel3; + case KThreeCase: + return iEdwin; + case KFourCase: + return iEdwin2; + case KFiveCase: + return iEdwin3; + default: + return NULL; + } + } + +// --------------------------------------------------------------------------- +// CAcpProviderSpecificContainer::MopSupplyObject +// From class CCoeControl. +// SKIN: pass context to child controls. +// --------------------------------------------------------------------------- +// +TTypeUid::Ptr CAcpProviderSpecificContainer::MopSupplyObject( TTypeUid aId ) + { + if ( iBgContext ) + { + return MAknsControlContext::SupplyMopObject( aId, iBgContext ); + } + return CCoeControl::MopSupplyObject( aId ); + } + +// --------------------------------------------------------------------------- +// CAcpProviderSpecificContainer::Draw +// From class CoeControl. +// --------------------------------------------------------------------------- +// +void CAcpProviderSpecificContainer::Draw( const TRect& aRect ) const + { + // Get the standard graphics context. + CWindowGc& gc = SystemGc(); + + // Draw skin backgound. + MAknsSkinInstance* skin = AknsUtils::SkinInstance(); + MAknsControlContext* cc = AknsDrawUtils::ControlContext( this ); + AknsDrawUtils::Background( skin, cc, this, gc, aRect ); + } + +// --------------------------------------------------------------------------- +// CAcpProviderSpecificContainer::CountComponentControls +// From class CoeControl. +// --------------------------------------------------------------------------- +// +TInt CAcpProviderSpecificContainer::CountComponentControls() const + { + return KComponentControlCount; + } + +// --------------------------------------------------------------------------- +// CAcpProviderSpecificContainer::SizeChanged +// From class CoeControl. +// --------------------------------------------------------------------------- +// +void CAcpProviderSpecificContainer::SizeChanged() + { + RepositionLabels(); + + // Redraw the control. + DrawDeferred(); + } + +// --------------------------------------------------------------------------- +// CAcpProviderSpecificContainer::HandleResourceChange +// From class CCoeControl. +// Called by framework when layout is changed. +// --------------------------------------------------------------------------- +// +void CAcpProviderSpecificContainer::HandleResourceChange( TInt aType ) + { + CCoeControl::HandleResourceChange( aType ); + + // ***************************** + // ADDED FOR SCALABLE UI SUPPORT + // ***************************** + if ( KEikDynamicLayoutVariantSwitch == aType ) + { + TRect rect; + AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane, rect ); + SetRect( rect ); + iBgContext->SetRect( rect ); + } + } + +// --------------------------------------------------------------------------- +// CAcpProviderSpecificContainer::ScrollText +// Scrolls text labels up or down. +// --------------------------------------------------------------------------- +// +void CAcpProviderSpecificContainer::ScrollText( TInt aDelta ) + { + ACPLOG( "CAcpProviderSpecificContainer::ScrollText begin" ); + + iScrollY += aDelta; + if ( iScrollY > KScrollMax ) + { + iScrollY = KScrollMax; + } + else if ( iScrollY < KScrollMin ) + { + iScrollY = KScrollMin; + } + + RepositionLabels(); + + // Redraw the control. + DrawDeferred(); + + ACPLOG( "CAcpProviderSpecificContainer::ScrollText end" ); + } + +// --------------------------------------------------------------------------- +// CAcpProviderSpecificContainer::RepositionLabels +// --------------------------------------------------------------------------- +// +void CAcpProviderSpecificContainer::RepositionLabels() + { + const TInt KWidthX = Rect().Width() - KPositionX; + const TInt KDeltaY = Rect().Height() / KEight; + + TInt yPos = iScrollY; + iLabel->SetExtent( TPoint( KPositionX, yPos ), + TSize( KWidthX, KDeltaY ) ); + yPos += KDeltaY; + + iEdwin->SetExtent( TPoint( KPositionX, yPos ), + TSize( KWidthX, KDeltaY ) ); + yPos += KDeltaY; + + iLabel2->SetExtent( TPoint( KPositionX, yPos ), + TSize( KWidthX, KDeltaY ) ); + yPos += KDeltaY; + + iEdwin2->SetExtent( TPoint( KPositionX, yPos ), + TSize( KWidthX, KDeltaY ) ); + yPos += KDeltaY; + + iLabel3->SetExtent( TPoint( KPositionX, yPos ), + TSize( KWidthX, KDeltaY ) ); + yPos += KDeltaY; + + iEdwin3->SetExtent( TPoint( KPositionX, yPos ), + TSize( KWidthX, Rect().Height() ) ); + } + +// --------------------------------------------------------------------------- +// CAcpProviderSpecificContainer::OfferKeyEventL +// Handles key events. +// --------------------------------------------------------------------------- +// +TKeyResponse CAcpProviderSpecificContainer::OfferKeyEventL( + const TKeyEvent& aKeyEvent, TEventCode aType ) + { + ACPLOG( "CAcpProviderSpecificContainer::OfferKeyEventL begin" ); + + TKeyResponse ret = EKeyWasNotConsumed; + + switch ( aKeyEvent.iScanCode ) + { + case EStdKeyUpArrow: + if ( aType != EEventKeyUp ) + { + ScrollText( KScrollSpeed ); + ret = EKeyWasConsumed; + } + break; + + case EStdKeyDownArrow: + if ( aType != EEventKeyUp ) + { + ScrollText( -KScrollSpeed ); + ret = EKeyWasConsumed; + } + break; + + default: + break; + } + + ACPLOG( "CAcpProviderSpecificContainer::OfferKeyEventL end" ); + return ret; + } + + +// End of file.