diff -r 000000000000 -r 094583676ce7 wvuing/wvuiave/AppSrc/CCASettingsViewContainer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/wvuing/wvuiave/AppSrc/CCASettingsViewContainer.cpp Thu Dec 17 08:41:52 2009 +0200 @@ -0,0 +1,475 @@ +/* +* Copyright (c) 2006 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: Container class for settings view +* +*/ + +// INCLUDE FILES +#include "CCASettingsViewContainer.h" +#include "CCAAppUi.h" +#include "CCAStatusPaneHandler.h" +#include "CCAAppSettingsDialog.h" +#include "MCAViewSwitcher.h" +#include "CAExternalInterface.h" +#include "ChatDefinitions.h" +#include "CCAApp.h" +#include "CCAVariantFactory.h" +#include "MCAOpBrandVariant.h" +#include "ChatDebugPrint.h" +#include "CCAUISessionManager.h" +#include "chatngclient.hrh" +#include "CCAUISessionManager.h" +#include "CCAAppSettingsSAPExt.h" +#include "impsbuilddefinitions.h" + +#include +#include +#include +#include +#include +#include +#include +#include + +// The Settings have been moved to Cenrep (also retained in the Resource file), +// so the enums for keys and central repository header is added here +#include "VariantKeys.h" +// CONSTANTS +_LIT( KWVSettingsResFileName, "CWVSETTINGSUING.RSC" ); +// The variation resource file (the settings) is added now. +_LIT( KIMPSCUVariationResFileName, "IMConnectionUIVariationNG.RSC" ); + + +// ================= MEMBER FUNCTIONS ======================= +//Default constructor +CCASettingsViewContainer::CCASettingsViewContainer( MCAViewSwitcher& aViewSwitcher, + MCASettingsPC& aSettings ) + : iViewSwitcher( aViewSwitcher ), + iSettingsPC( aSettings ) + { + } +// Symbian OS default constructor can leave. +void CCASettingsViewContainer::ConstructL( const TRect& aRect ) + { + iSAPSettingsStore = CIMPSSAPSettingsStore::NewL(); + + CCAApp* application = + static_cast( iEikonEnv->EikAppUi()->Application() ); + CCAVariantFactory* var = application->VariantFactory(); + iOpBrand = var->OpBrandVariantL(); + CreateWindowL(); + + iAppUi = static_cast( iEikonEnv->AppUi() ); + iAppUi->AddLayoutChangeObserver( this ); + + iListBox = new ( ELeave ) CAknSettingStyleListBox; + iListBox->SetContainerWindowL( *this ); + TResourceReader rr; + iEikonEnv->CreateResourceReaderLC( rr, R_SETTINGS_LISTBOX ); + iListBox->ConstructFromResourceL( rr ); + CleanupStack::PopAndDestroy(); //RR + + iListBox->SetListBoxObserver( this ); + iListBox->CreateScrollBarFrameL( ETrue ); + iListBox->ScrollBarFrame()->SetScrollBarVisibilityL( + CEikScrollBarFrame::EOn, CEikScrollBarFrame::EAuto ); + + //List items from resource + CDesCArray* itemList = + static_cast( iListBox->Model()->ItemTextArray() ); + //There is always items, because loading from resource + TInt itemCount( itemList->MdcaCount() ); + //We need new array that contains formatted items + CDesCArray* newItemList = new ( ELeave ) CDesCArrayFlat( itemCount ); + CleanupStack::PushL( newItemList ); + + HBufC* itemTxt = NULL; + TPtr itemTxtPtr( 0, NULL ); + + for ( TInt i( 0 ); i < itemCount; i++ ) + { + itemTxt = HBufC::NewLC( itemList->MdcaPoint( i ).Length() + + KTab().Length() ); + itemTxtPtr.Set( itemTxt->Des() ); + + itemTxtPtr.Copy( KTab ); + itemTxtPtr.Append( itemList->MdcaPoint( i ) ); + newItemList->AppendL( itemTxtPtr ); + + CleanupStack::PopAndDestroy( itemTxt ); + } + + //Lets set new array for the list box + CleanupStack::Pop( newItemList ); + iListBox->Model()->SetItemTextArray( newItemList ); + iListBox->Model()->SetOwnershipType( ELbmOwnsItemArray ); + + SetRect( aRect ); + ActivateL(); + } + +// Destructor +CCASettingsViewContainer::~CCASettingsViewContainer() + { + if ( iAppUi && !iAppUi->IsUnderDestruction() ) + { + iAppUi->RemoveLayoutChangeObserver( this ); + } + + delete iListBox; + delete iSAPSettingsStore; + } + +// ----------------------------------------------------------------------------- +// CCASettingsViewContainer::Listbox +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +CAknSettingStyleListBox* CCASettingsViewContainer::Listbox() const + { + return iListBox; + } + +// ----------------------------------------------------------------------------- +// CCASettingsViewContainer::LaunchAppSettingsDialogL +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CCASettingsViewContainer::LaunchAppSettingsDialogL() + { + + CCAAppSettingsDialog* dlg = new ( ELeave ) CCAAppSettingsDialog( + *( static_cast( iEikonEnv->AppUi() )->CAStatusPane() ), + iSettingsPC, + static_cast( iEikonEnv->AppUi() )->UISessionManager(), NULL ); + + CleanupStack::PushL( dlg ); + dlg->ConstructL( R_CHATCLIENT_APPSETTINGS_MENUBAR ); + CleanupStack::Pop( dlg ); + + dlg->ExecuteLD( R_CHATCLIENT_APPSETTINGS_DLG ); + + } + +// ----------------------------------------------------------------------------- +// CCASettingsViewContainer::LaunchServSettingsDialogL +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CCASettingsViewContainer::LaunchServSettingsDialogL( + TBool aForcedLaunch /*= EFalse */ ) + { + TFileName resPath; + // The IM Variation Resource file which contains the settings should also be loaded during the launch of dialog + TFileName resIMCUVariationPath; + + // if there are no SAPs then don't try the get default + if ( iSAPSettingsStore->SAPCountL( EIMPSIMAccessGroup ) > 0 ) + { + CIMPSSAPSettings* sap = static_cast( iEikonEnv->AppUi() ) + ->UISessionManager().CurrentSAPLC(); + TPtrC sapName( sap->SAPName() ); + TPtrC wvSettRes( KWVSettingsResFileName ); + // The IM UI Variation Resource file is loaded + TPtrC wvIMUIVariationRes( KIMPSCUVariationResFileName ); + + + iOpBrand->CurrentResourceFileL( sapName, wvSettRes, resPath ); + // The IM UI Variation Resource file is used to read the settings (if settings are not present in Cenrep) + iOpBrand->CurrentResourceFileL( sapName, wvIMUIVariationRes, resIMCUVariationPath ); + + if ( resPath.Length() != 0 ) + { + BaflUtils::NearestLanguageFile( iEikonEnv->FsSession(), resPath ); + } + + if ( resIMCUVariationPath.Length() != 0 ) + { + BaflUtils::NearestLanguageFile( iEikonEnv->FsSession(), resIMCUVariationPath ); + } + + CleanupStack::PopAndDestroy( sap ); + } + + TInt exitReason( 0 ); + iServSettingsDialog = CWVSettingsUIDialog::NewL(); + +#ifdef RD_SERVICE_ENHANCEMENTS + iServSettingsDialogActive = ETrue; +#endif // RD_SERVICE_ENHANCEMENTS + + // CodeScanner warning ignored because iServSettingsDialog + // is not owned by us + TInt retVal( iServSettingsDialog->RunDialogLD( *iSAPSettingsStore, // CSI: 50 # See comment above + this, + resPath, + resIMCUVariationPath, + exitReason, + NULL, + &iServSettingsDialog, + aForcedLaunch ) ); +#ifdef RD_SERVICE_ENHANCEMENTS + if ( exitReason != EForcedExit ) + { + // Set dialog not active + iServSettingsDialogActive = EFalse; + } +#endif // RD_SERVICE_ENHANCEMENTS + + iServSettingsDialog = NULL; + + // clear the navipane from unvanted tabs + static_cast( iEikonEnv->AppUi() )->CAStatusPane()->ClearNaviPaneL(); + + // this is for updating settings view + if ( iNeedRefresh ) + { + iViewSwitcher.SwitchViewL( KUidRefreshView ); + } + + if ( retVal == EWVSettingsViewExitCalled ) + { + static_cast( iEikonEnv->AppUi() )->HandleCommandL( EChatClientCmdExit ); + } + + // update the title + static_cast( iEikonEnv->AppUi() )->CAStatusPane() + ->SetTitleL( iEikonEnv, R_CHATCLIEN_SETTINGS_VIEW_TITLE ); + } + +#ifdef RD_SERVICE_ENHANCEMENTS +// ----------------------------------------------------------------------------- +// CCASettingsViewContainer::IsServSettingsDialogActive +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TBool CCASettingsViewContainer::IsServSettingsDialogActive() const + { + return iServSettingsDialogActive; + } +#endif // RD_SERVICE_ENHANCEMENTS + +// ----------------------------------------------------------------------------- +// CCASettingsViewContainer::HandleListBoxEventL +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CCASettingsViewContainer::HandleListBoxEventL( CEikListBox* aListBox, + TListBoxEvent aEventType ) + { + if ( aEventType == EEventEnterKeyPressed || + aEventType == EEventItemDoubleClicked ) + { + switch ( aListBox->CurrentItemIndex() ) + { + case EApplicationSettings: + { + LaunchAppSettingsDialogL(); + break; + } + case EServiceSettings: + { + LaunchServSettingsDialogL(); + // this is for updating settings view + if ( iNeedRefresh ) + { + iViewSwitcher.SwitchViewL( KUidRefreshView ); + } + break; + } + default: + { + + break; + } + } + } + } + +// ----------------------------------------------------------------------------- +// CCASettingsViewContainer::CountComponentControls +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TInt CCASettingsViewContainer::CountComponentControls() const + { + if ( iListBox ) + { + return 1; + } + + return 0; + } + +// ----------------------------------------------------------------------------- +// CCASettingsViewContainer::ComponentControl +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +CCoeControl* CCASettingsViewContainer::ComponentControl( TInt aIndex ) const + { + switch ( aIndex ) + { + case 0: + { + return iListBox; + } + default: + { + return NULL; + } + } + } + +// ----------------------------------------------------------------------------- +// CCASettingsViewContainer::SizeChanged +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CCASettingsViewContainer::SizeChanged() + { + iListBox->SetRect( Rect() ); + } + +// ----------------------------------------------------------------------------- +// CCASettingsViewContainer::OfferKeyEventL +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TKeyResponse CCASettingsViewContainer::OfferKeyEventL( const TKeyEvent& aEvent, + TEventCode aType ) + { + return iListBox->OfferKeyEventL( aEvent, aType ); + } + +// --------------------------------------------------------- +// CCASettingsViewContainer::GetHelpContext +// (other items were commented in a header). +// --------------------------------------------------------- +// +void CCASettingsViewContainer::GetHelpContext( TCoeHelpContext& aContext ) const + { + aContext.iMajor = KUidChatClient; + aContext.iContext = KIMNG_HLP_SETTINGS; + } + +// --------------------------------------------------------- +// CCASettingsViewContainer::FocusChanged +// (other items were commented in a header). +// --------------------------------------------------------- +// +void CCASettingsViewContainer::FocusChanged( TDrawNow /* aDrawNow */ ) + { + if ( iListBox ) + { + // give focus to list box so that highlight animations + // are done properly + iListBox->SetFocus( IsFocused() ); + } + } + +// ----------------------------------------------------------------------------- +// CCASettingsViewContainer::ServerChangedL +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CCASettingsViewContainer::ServerChangedL ( const TDesC& aNewServerName, TBool /* aDefaultServerchanged = EFalse */ ) + { + CHAT_DP( D_CHAT_LIT( "CCASettingsViewContainer::ServerChangedL(%S)" ), &aNewServerName ); + if ( aNewServerName.Length() == 0 || + iSAPSettingsStore->SAPCountL( EIMPSIMAccessGroup ) == 0 ) + { + // no servers + return; + } + + CCAAppUi* appUi = static_cast( iEikonEnv->EikAppUi() ); + iNeedRefresh = appUi->UISessionManager().BrandUIL( EFalse, aNewServerName ); + + // Stop here if brand did not actually change + + if ( ! iNeedRefresh && ! iServSettingsDialog ) + { + return; + } + + // Update status-pane + appUi->UISessionManager().SetStatusPaneIconsL(); + + // Get resource file for settings dialog + TFileName resPath; + TFileName resIMCUVariationPath; + + TPtrC resId( KWVSettingsResFileName() ); + TPtrC resIMCUVariationId ( KIMPSCUVariationResFileName() ); + + iOpBrand->CurrentResourceFileL( aNewServerName, resId, resPath ); + iOpBrand->CurrentResourceFileL( aNewServerName, resIMCUVariationId, resIMCUVariationPath ); + + if ( resPath.Length() != 0 ) + { + BaflUtils::NearestLanguageFile( iEikonEnv->FsSession(), resPath ); + } + + if ( resIMCUVariationPath.Length() != 0 ) + { + BaflUtils::NearestLanguageFile( iEikonEnv->FsSession(), resIMCUVariationPath ); + } + + CHAT_DP( D_CHAT_LIT( "CCASettingsViewContainer::ServerChangedL, signalling service settings about resPath: %S" ), &resPath ); + iServSettingsDialog->ChangeResourceFileL( resPath, resIMCUVariationPath ); + } + +// --------------------------------------------------------- +// CCASettingsViewContainer::LayoutChangedL +// (other items were commented in a header). +// --------------------------------------------------------- +// +void CCASettingsViewContainer::LayoutChangedL( TInt aType ) + { + // updates tabgroup + iViewSwitcher.CAStatusPane()->ShowTabGroupL( KUidSettingsView ); + + TRect mainPaneRect; + AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane, mainPaneRect ); + SetRect( mainPaneRect ); + CCoeControl::HandleResourceChange( aType ); + } + +// --------------------------------------------------------- +// CCASettingsViewContainer::CurrentServerNameLC +// (other items were commented in a header). +// --------------------------------------------------------- +// +HBufC* CCASettingsViewContainer::CurrentServerNameLC() + { + HBufC* sapName = NULL; + TRAPD( err, + CIMPSSAPSettings* sap = static_cast( iEikonEnv->AppUi() )->UISessionManager().CurrentSAPLC(); + // CodeScanner warning ignored because sapName is pushed to + // cleanupstack later and there is no leaving code before it + sapName = sap->SAPName().AllocL(); // CSI: 35 # See comment above + CleanupStack::PopAndDestroy( sap ); + ); + + if ( err != KErrNone || !sapName ) + { + sapName = KNullDesC().AllocL(); + } + + CleanupStack::PushL( sapName ); + return sapName; + } + +// End of File