wvuing/wvuiave/AppSrc/CCASettingsViewContainer.cpp
changeset 0 094583676ce7
--- /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	<barsread.h>
+#include	<chatNG.rsg>
+#include	<bldvariant.hrh>
+#include	<csxhelp/imng.hlp.hrh>
+#include	<CWVSettingsUINGDialog.h>
+#include	<CIMPSSAPSettingsStore.h>
+#include	<CIMPSSAPSettings.h>
+#include	<bautils.h>
+
+// 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<CCAApp*>( iEikonEnv->EikAppUi()->Application() );
+    CCAVariantFactory* var = application->VariantFactory();
+    iOpBrand = var->OpBrandVariantL();
+    CreateWindowL();
+
+    iAppUi = static_cast<CCAAppUi*>( 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<CDesCArrayFlat*>( 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<CCAAppUi*>( iEikonEnv->AppUi() )->CAStatusPane() ),
+        iSettingsPC,
+        static_cast<CCAAppUi*>( 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<CCAAppUi*>( 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<CCAAppUi*>( iEikonEnv->AppUi() )->CAStatusPane()->ClearNaviPaneL();
+
+    // this is for updating settings view
+    if ( iNeedRefresh )
+        {
+        iViewSwitcher.SwitchViewL( KUidRefreshView );
+        }
+
+    if ( retVal == EWVSettingsViewExitCalled )
+        {
+        static_cast<CCAAppUi*>( iEikonEnv->AppUi() )->HandleCommandL( EChatClientCmdExit );
+        }
+
+    // update the title
+    static_cast<CCAAppUi*>( 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<CCAAppUi*>( 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<CCAAppUi*>( 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