diff -r f742655b05bf -r d38647835c2e voipplugins/accountcreationplugin/src/acpquerycontainer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/voipplugins/accountcreationplugin/src/acpquerycontainer.cpp Wed Sep 01 12:29:57 2010 +0100 @@ -0,0 +1,424 @@ +/* +* 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 +#include +#include + +#include "acpqueryview.h" +#include "acpquerycontainer.h" +#include "accountcreationpluginlogger.h" +#include "accountcreationpluginconstants.h" + +const TInt KComponentControlCount = 1; +_LIT( KAsterisks, "****" ); + +// --------------------------------------------------------------------------- +// CAcpQueryContainer::CAcpQueryContainer +// --------------------------------------------------------------------------- +// +CAcpQueryContainer::CAcpQueryContainer() + { + } + +// --------------------------------------------------------------------------- +// CAcpQueryContainer::ConstructL +// --------------------------------------------------------------------------- +// +void CAcpQueryContainer::ConstructL( const TRect& aRect ) + { + ACPLOG( "CAcpQueryContainer::ConstructL begin" ); + + // Load "none" from resources to further use. + iNone = StringLoader::LoadL( R_ACP_SETTING_PAGE_EMPTY_TEXT ); + + // Default values for setting item texts. + iUsername.Copy( *iNone ); + iPassword.Copy( *iNone ); + + CreateWindowL(); + ConstructListBoxL(); + SetRect( aRect ); + ActivateL(); + + ACPLOG( "CAcpQueryContainer::ConstructL end" ); + } + +// --------------------------------------------------------------------------- +// CAcpQueryContainer::NewL +// --------------------------------------------------------------------------- +// +CAcpQueryContainer* CAcpQueryContainer::NewL( const TRect& aRect ) + { + CAcpQueryContainer* self = CAcpQueryContainer::NewLC( aRect ); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// CAcpQueryContainer::NewLC +// --------------------------------------------------------------------------- +// +CAcpQueryContainer* CAcpQueryContainer::NewLC( const TRect& aRect ) + { + CAcpQueryContainer* self = new ( ELeave ) CAcpQueryContainer(); + CleanupStack::PushL( self ); + self->ConstructL( aRect ); + return self; + } + +// --------------------------------------------------------------------------- +// CAcpQueryContainer::~CAcpQueryContainer +// --------------------------------------------------------------------------- +// +CAcpQueryContainer::~CAcpQueryContainer() + { + ACPLOG( "CAcpQueryContainer::~CAcpQueryContainer begin" ); + delete iNone; + delete iListBox; + ACPLOG( "CAcpQueryContainer::~CAcpQueryContainer end" ); + } + +// --------------------------------------------------------------------------- +// CAcpQueryContainer::ListBox +// Returns handle to the listbox. +// --------------------------------------------------------------------------- +// +CAknSettingStyleListBox* CAcpQueryContainer::ListBox() + { + return iListBox; + } + +// --------------------------------------------------------------------------- +// CAcpQueryContainer::CurrentItemIndex +// Returns index of selected listbox item. +// --------------------------------------------------------------------------- +// +TInt CAcpQueryContainer::CurrentItemIndex() const + { + return iListBox->CurrentItemIndex(); + } + +// --------------------------------------------------------------------------- +// CAcpQueryContainer::ShowUsernameSettingPageL +// --------------------------------------------------------------------------- +// +void CAcpQueryContainer::ShowUsernameSettingPageL() + { + ACPLOG( "CAcpQueryContainer::ShowUsernameSettingPageL" ); + + // Show text setting page. + TBuf temporaryText ( iUsername ); + CAknTextSettingPage* dlg = new(ELeave) CAknTextSettingPage( + R_ACP_USERNAME_SETTING_PAGE, temporaryText ); + if ( dlg->ExecuteLD(CAknSettingPage::EUpdateWhenAccepted ) ) + { + iUsername.Copy( temporaryText ); + } + // Update currently selected list item. + UpdateListboxItemL( CurrentItemIndex() ); + } + +// --------------------------------------------------------------------------- +// CAcpQueryContainer::ShowPwordSettingPageL +// --------------------------------------------------------------------------- +// +void CAcpQueryContainer::ShowPwordSettingPageL() + { + ACPLOG( "CAcpQueryContainer::ShowPwordSettingPageL" ); + + // Show password setting page. + TBuf temporaryPassword ( KNullDesC ); + temporaryPassword.Copy( iPassword ); + TBuf oldPassword ( KNullDesC ); + temporaryPassword.Copy( iPassword ); + + CAknSettingPage* dlg = new (ELeave) CAknAlphaPasswordSettingPage( + R_ACP_PASSWORD_SETTING_PAGE, temporaryPassword, oldPassword ); + if ( dlg->ExecuteLD( CAknSettingPage::EUpdateWhenAccepted ) ) + { + iPassword.Copy( temporaryPassword ); + } + // Update currently selected list item. + UpdateListboxItemL( CurrentItemIndex() ); + } + +// --------------------------------------------------------------------------- +// CAcpQueryContainer::GetContainerDataL +// --------------------------------------------------------------------------- +// +void CAcpQueryContainer::GetContainerDataL( TDes& aUsername, TDes& aPassword ) + { + // Setting item: Server username. + if ( aUsername.Length() > iUsername.Length() ) + { + User::Leave( KErrArgument ); + } + aUsername.Copy( iUsername ); + + // Setting item: Server password. + if ( aPassword.Length() > iPassword.Length() ) + { + User::Leave( KErrArgument ); + } + if ( iPassword.Compare( *iNone ) ) + { + aPassword.Copy( iPassword ); + } + + ACPLOG( "GetContainerDataL, Items appended" ); + } + +// --------------------------------------------------------------------------- +// CAcpQueryContainer::ConstructListBoxL +// Creates listbox item for provider list items. +// --------------------------------------------------------------------------- +// +void CAcpQueryContainer::ConstructListBoxL() + { + ACPLOG( "CAcpQueryContainer::ConstructListBoxL begin" ); + + // Create listbox and array for listbox items. + iListBox = new( ELeave ) CAknSettingStyleListBox; + iListBox->ConstructL( this, EAknListBoxSelectionList ); + iListBox->CreateScrollBarFrameL( ETrue ); + iListBox->ScrollBarFrame()->SetScrollBarVisibilityL( + CEikScrollBarFrame::EOff, + CEikScrollBarFrame::EAuto ); + iListBox->Model()->SetOwnershipType( ELbmOwnsItemArray ); + + CDesCArrayFlat* array = new ( ELeave ) CDesCArrayFlat( KArrayGranuality ); + iListBox->Model()->SetItemTextArray( array ); + + // Fill container listbox with setting items. + FillListboxWithItemsL(); + + // Set listbox index to first item and draw. + iListBox->HandleItemAdditionL(); + iListBox->SetCurrentItemIndexAndDraw( 0 ); + + ACPLOG( "CAcpQueryContainer::ConstructListBoxL end" ); + } + +// --------------------------------------------------------------------------- +// CAcpQueryContainer::FillListboxWithItemsL +// Fills listbox with items. +// --------------------------------------------------------------------------- +// +void CAcpQueryContainer::FillListboxWithItemsL() + { + ACPLOG("CAcpQueryContainer::FillListboxWithItemsL"); + + // Get listbox items from model. + CTextListBoxModel* model = iListBox->Model(); + MDesCArray* textArray = model->ItemTextArray(); + CDesCArray* listBoxItems = static_cast( textArray ); + TBuf listBoxItemText ( KNullDesC ); + + // Setting item: Server username. + HBufC* caption = StringLoader::LoadLC( R_ACP_USERNAME_SETTING_PAGE_TEXT ); + listBoxItemText.Format( + KAcpSettingItemTextFormat, + caption, + &iUsername ); + listBoxItems->AppendL( listBoxItemText ); + CleanupStack::PopAndDestroy( caption ); + ACPLOG( "FillListboxWithItemsL: Server username appended." ); + + // Setting item: Server password. + caption = StringLoader::LoadLC( R_ACP_PASSWORD_SETTING_PAGE_TEXT ); + listBoxItemText.Format( + KAcpSettingItemTextFormat, + caption, + &iPassword ); + listBoxItems->AppendL( listBoxItemText ); + CleanupStack::PopAndDestroy( caption ); + ACPLOG( + "CAcpQueryContainer::FillListboxWithItemsL: Server password appended." + ); + } + +// --------------------------------------------------------------------------- +// CAcpQueryContainer::UpdateListboxItemL +// Updates setting page items. +// --------------------------------------------------------------------------- +// +void CAcpQueryContainer::UpdateListboxItemL( const TInt aIndex ) + { + ACPLOG("CAcpQueryContainer::UpdateListboxItemL begin"); + + // Get listbox items from model. + CTextListBoxModel* model = iListBox->Model(); + MDesCArray* textArray = model->ItemTextArray(); + CDesCArray* listBoxItems = static_cast( textArray ); + + // Remove edited item from the list. + listBoxItems->Delete( aIndex ); + + // Fill line variables with correct data. + TBuf firstLine( KNullDesC ); + TBuf secondLine( KNullDesC ); + TBuf listBoxItemText( KNullDesC ); + FillListboxItemDataL( aIndex, firstLine, secondLine ); + + // Create new lisbox item data and insert it to correct place. + listBoxItemText.Format( + KAcpSettingItemTextFormat, + &firstLine, + &secondLine ); + listBoxItems->InsertL( aIndex, listBoxItemText ); + + // Update listbox. + iListBox->HandleItemAdditionL(); + + ACPLOG( "CAcpQueryContainer::UpdateListboxItemL end" ); + } + +// --------------------------------------------------------------------------- +// CAcpQueryContainer::FillListboxItemDataL +// Sets selected listbox item with member data. +// --------------------------------------------------------------------------- +// +void CAcpQueryContainer::FillListboxItemDataL( const TInt aIndex, + TDes& aFirstLine, TDes& aSecondLine ) + { + HBufC* caption = NULL; + switch ( aIndex ) + { + // Setting item: Server username. + case CAcpQueryView::EAcpGenericUsername: + caption = StringLoader::LoadL( R_ACP_USERNAME_SETTING_PAGE_TEXT ); + aFirstLine.Copy( caption->Des() ); + delete caption; + aSecondLine.Copy( iUsername ); + break; + // Setting item: Server password. + case CAcpQueryView::EAcpGenericPassword: + caption = StringLoader::LoadL( R_ACP_PASSWORD_SETTING_PAGE_TEXT ); + aFirstLine.Copy( caption->Des() ); + delete caption; + // Show asterisks instead of the password. + if ( iPassword.Length() ) + { + aSecondLine.Copy( KAsterisks ); + } + else + { + aSecondLine.Copy( *iNone ); + } + break; + default: + User::Leave( KErrNotSupported ); + break; + } + + ACPLOG( "CAcpQueryContainer::FillListboxItemDataL" ); + ACPLOG2( "FillListboxItemDataL: List item filled: %d", aIndex ); + } + +// --------------------------------------------------------------------------- +// CAcpQueryContainer::OfferKeyEventL +// From class CoeControl. +// --------------------------------------------------------------------------- +// +TKeyResponse CAcpQueryContainer::OfferKeyEventL( const TKeyEvent& aKeyEvent, + TEventCode aType ) + { + TKeyResponse response = EKeyWasNotConsumed; + if ( aType == EEventKey ) + { + response = iListBox->OfferKeyEventL( aKeyEvent, aType ); + } + return response; + } + +// --------------------------------------------------------------------------- +// CAcpQueryContainer::ComponentControl +// From class CoeControl. +// --------------------------------------------------------------------------- +// +CCoeControl* CAcpQueryContainer::ComponentControl( TInt aIndex ) const + { + switch ( aIndex ) + { + case 0 : + return iListBox; + default: + return 0; + } + } + +// --------------------------------------------------------------------------- +// CAcpQueryContainer::CountComponentControls +// From class CoeControl. +// --------------------------------------------------------------------------- +// +TInt CAcpQueryContainer::CountComponentControls() const + { + return KComponentControlCount; + } + +// --------------------------------------------------------------------------- +// CAcpQueryContainer::SizeChanged +// From class CoeControl. +// --------------------------------------------------------------------------- +// +void CAcpQueryContainer::SizeChanged() + { + iListBox->SetRect( Rect() ); + } + +// --------------------------------------------------------------------------- +// CAcpQueryContainer::FocusChanged +// From class CoeControl. +// --------------------------------------------------------------------------- +// +void CAcpQueryContainer::FocusChanged( TDrawNow aDrawNow ) + { + CCoeControl::FocusChanged( aDrawNow ); + + if ( iListBox ) + { + iListBox->SetFocus( IsFocused() ); + } + } + +// --------------------------------------------------------------------------- +// CAcpQueryContainer::HandleResourceChange +// From class CoeControl. +// Called by framework when layout is changed. +// --------------------------------------------------------------------------- +// +void CAcpQueryContainer::HandleResourceChange( TInt aType ) + { + CCoeControl::HandleResourceChange( aType ); + + // ***************************** + // ADDED FOR SCALABLE UI SUPPORT + // ***************************** + if ( KEikDynamicLayoutVariantSwitch == aType ) + { + TRect rect; + AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane, rect ); + SetRect( rect ); + } + } + +// End of file.