wvuing/wvuiave/AppSrc/CCAUINGUtils.cpp
changeset 0 094583676ce7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/wvuing/wvuiave/AppSrc/CCAUINGUtils.cpp	Thu Dec 17 08:41:52 2009 +0200
@@ -0,0 +1,258 @@
+/*
+* 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:  General utility class
+*
+*/
+
+
+
+// INCLUDE FILES
+#include    "CCAUINGUtils.h"
+#include	"CCAAppUi.h"
+#include 	"MCAProcessManager.h"
+#include 	"MCAMainViewArrayPC.h"
+#include    "CCAWaitNote.h"
+#include    "IMDialogUtils.h"
+#include    "IMNoteMapper.h"
+#include    "PublicEngineDefinitions.h"
+#include    "CCAPCUtils.h"
+#include    "aknnotewrappers.h"
+#include	"CCAAppUi.h"
+#include    "CCAStatusPaneHandler.h"
+
+#include    <ChatNG.rsg>
+#include    <hlplch.h>
+#include    <csxhelp/imng.hlp.hrh>
+#include    <eikmenup.h>
+
+#include	<StringLoader.h>
+#include    "ImpsCSPAllErrors.h"
+#include    <PEngWVPresenceErrors2.h>   // wv error codes
+// 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"
+
+#include    "IMUtils.h"
+#include    "CAUtils.h"
+
+// -----------------------------------------------------------------------------
+// CCAUINGUtils::NewContactlistL
+// Creates a new contact list and shows the appropriate dialogs
+// -----------------------------------------------------------------------------
+//
+TInt CCAUINGUtils::NewContactListL( TInt& aIndex )
+    {
+    CCAAppUi* appUi = static_cast<CCAAppUi*>( CCoeEnv::Static()->AppUi() );
+    MCAMainViewArrayPC* mainViewArrayPC = appUi->GetProcessManager().GetArrayInterface();
+    TInt capitalizeListname( IMUtils::IntResourceValueL( RSC_CHAT_VARIATION_CONTACT_LISTS_CAPITALIZED ) );
+    // ask name for new list
+    HBufC* name = HBufC::NewLC( KMaxWVIDLength );
+    TPtr namePtr( name->Des() );
+    TInt err( KErrCancel );
+
+    // We loop until we get a valid name or user cancels
+    do
+        {
+
+        TInt result( IMDialogUtils::DisplayTextQueryDialogL( namePtr,
+                                                             R_QTN_CHAT_CONTACT_LIST_NAME_QUERY,
+                                                             R_CHATCLIENT_CONVLIST_RECIP_QUERY,
+                                                             ETrue // T9
+                                                           ) );
+
+        if ( result == EAknSoftkeyOk || result == EAknSoftkeyDone )
+            {
+            // show wait note and create list
+
+            TInt contactListsExists = mainViewArrayPC->ContactListsExistL();
+            if ( contactListsExists == KErrGeneral )
+                {
+                //can not proceed
+                HBufC* text = StringLoader::LoadLC( R_QTN_CHAT_CONTACT_LIST_FAILED );
+                IMDialogUtils::DisplayErrorConfirmationNoteL( *text );
+                CleanupStack::PopAndDestroy( text );
+                return KErrGeneral;
+                }
+
+            err = mainViewArrayPC->ListAlreadyExistsL( namePtr );
+
+
+            if ( err == KErrNone )
+                {
+                CCAWaitNote* waitNote =
+                    CCAWaitNote::ShowWaitNoteLC( R_QTN_GEN_NOTE_SAVING );
+
+                // UI CR  ID: 101-39727 : capitalizing contact listname
+
+                if ( capitalizeListname )
+                    {
+                    HBufC* capitalizedList = CAUtils::CapitalizeListNameL( *name );
+                    CleanupStack::PushL( capitalizedList );
+                    err = err  = mainViewArrayPC->CreateContactListL( *capitalizedList , aIndex );
+                    CleanupStack::PopAndDestroy();
+                    }
+                else
+                    {
+                    err  = mainViewArrayPC->CreateContactListL( *name , aIndex );
+                    }
+                CleanupStack::PopAndDestroy(); // waitnote
+                }
+
+            if ( err != KErrNone )
+                {
+                HBufC* text = NULL;
+
+                // Max number of contact lists exeeded
+                if ( err == KPEngNwErrMaxNumberOfContactListsReached )
+                    {
+                    text = StringLoader::LoadLC( R_QTN_CHAT_CONTACT_LISTS_FULL );
+                    IMDialogUtils::DisplayErrorConfirmationNoteL( *text );
+                    CleanupStack::PopAndDestroy( text );
+                    }
+
+                // contact list already exists
+                else if ( err == KErrAlreadyExists ||
+                          err == KPEngNwErrContactListAlreadyExists )
+                    {
+                    text = StringLoader::LoadLC(
+                               R_QTN_FLDR_NAME_ALREADY_USED, namePtr );
+                    IMDialogUtils::DisplayInformationNoteL( *text );
+                    CleanupStack::PopAndDestroy( text );
+                    }
+
+                // default error message
+                else
+                    {
+                    text = StringLoader::LoadLC( R_QTN_CHAT_CONTACT_LIST_FAILED );
+                    IMDialogUtils::DisplayErrorConfirmationNoteL( *text );
+                    CleanupStack::PopAndDestroy( text );
+                    }
+                }
+            }
+        else
+            {
+            // User canceled the dialog
+            err = KErrCancel;
+            }
+
+
+        } while ( err != KErrNone && err != KErrCancel
+              && err != KPEngNwErrMaxNumberOfContactListsReached );
+
+    CleanupStack::PopAndDestroy( name );
+    return err;
+    }
+
+
+// ---------------------------------------------------------
+// CCAUINGUtils::VerifyContactlistL()
+// Verifies the we have at least one contact list
+// else tries to create one.
+// ---------------------------------------------------------
+//
+CCAUINGUtils::TChatContactListCreationType CCAUINGUtils::VerifyContactlistL()
+    {
+    // Check that we have even one contact list where to add the contact
+    CCAAppUi* appUi = static_cast<CCAAppUi*>( CCoeEnv::Static()->AppUi() );
+    MCAMainViewArrayPC* mainViewArrayPC = appUi->GetProcessManager().GetArrayInterface();
+
+    if ( mainViewArrayPC->ListCountL() == 0 )
+        {
+        IMDialogUtils::DisplayQueryDialogL( R_CHAT_NO_CONTACT_LISTS_QUERY );
+        TInt initValue = KErrNotFound;
+        if ( NewContactListL( initValue ) != KErrNone )
+            {
+            // contact list was not created
+            return EChatNoContactList;
+            }
+        else
+            {
+            // new contact list was created
+            return EChatContactListWasCreated;
+            }
+        }
+
+    return EChatContactListExists;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CCAUINGUtils::HandleErrorL
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CCAUINGUtils::HandleErrorL( TInt aError )
+    {
+    if ( aError == ECSPPartiallySuccessful )
+        {
+        HandlePartialSuccessL();
+        }
+    else if ( aError != KErrNone )
+        {
+        User::Leave( aError );
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CCAUINGUtils::HandlePartialSuccessL
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CCAUINGUtils::HandlePartialSuccessL()
+    {
+    TInt errorCode( 0 );
+    for ( TInt i( 0 ); i < CCAPCUtils::PartialSucessCountL(); i++ )
+        {
+        errorCode = CCAPCUtils::GetErrorCodeL( i );
+        if ( errorCode == ECSPInvalidParameter || errorCode == ECSPUnknownUserId )
+            {
+            errorCode = ECSPUnknownUserId;
+            IMNoteMapper::ShowNoteL( errorCode );
+            }
+        }
+    if ( CCAPCUtils::PartialSucessCountL() == 0 )
+        {
+        IMNoteMapper::ShowNoteL( EGeneralServerError );
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CCAUINGUtils::SetTitleL
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CCAUINGUtils::SetTitleL( TInt aResourceId, const TUid aViewId )
+    {
+    HBufC* chatListViewTitle =
+        CCoeEnv::Static()->AllocReadResourceLC( aResourceId );
+    CCAAppUi* appUi = static_cast<CCAAppUi*>( CCoeEnv::Static()->AppUi() );
+    CCAStatusPaneHandler* statusPane = appUi->CAStatusPane();
+
+    statusPane->SetTitleL( *chatListViewTitle );
+    CleanupStack::PopAndDestroy( chatListViewTitle );
+    statusPane->ShowTabGroupL( aViewId );
+    }
+
+// -----------------------------------------------------------------------------
+// CCAUINGUtils::DisplayErrorNoteL
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CCAUINGUtils::DisplayErrorNoteL( TInt aResourceId )
+    {
+    HBufC* noteBuf = CCoeEnv::Static()->AllocReadResourceLC( aResourceId );
+    CAknErrorNote* errorNote = new( ELeave ) CAknErrorNote();
+    errorNote->ExecuteLD( *noteBuf );
+    CleanupStack::PopAndDestroy( noteBuf );
+    }