wvuing/wvuiave/AppSrc/CCAAccessListDialog.cpp
branchRCL_3
changeset 13 a941bc465d9f
parent 0 094583676ce7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/wvuing/wvuiave/AppSrc/CCAAccessListDialog.cpp	Wed Sep 01 12:31:13 2010 +0100
@@ -0,0 +1,697 @@
+/*
+* 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:  Access list dialog. This dialog displays accessed persons.
+ *
+*/
+
+
+// INCLUDE FILES
+#include	"CCAAccessListDialog.h"
+#include	"chatngclient.hrh"
+#include	"CCAAppUi.h"
+#include	"CCAAccessArray.h"
+#include	"CCAStatusPaneHandler.h"
+#include    "ChatDefinitions.h"
+#include    "CAExternalInterface.h"
+#include    "ChatDebugPrint.h"
+#include    "IMUtils.h"
+#include    "IMDialogUtils.h"
+#include    "CAUtils.h"
+#include    "CCAApp.h"
+#include    "CCAVariantFactory.h"
+#include    "CCAContactSelectionDialog.h"
+#include    "MCASkinVariant.h"
+#include    "MCAMainViewArrayPC.h"
+#include    "MCASettingsPC.h"
+#include    "MCAProcessManager.h"
+#include    "MCAGroupPropertiesPC.h"
+
+
+#include	<aknlists.h>
+#include	<Chatng.rsg>
+#include	<aknpopup.h>
+#include	<AknMessageQueryDialog.h>
+#include	<stringloader.h>
+#include	<eikmenub.h>
+#include    <hlplch.h>
+#include    <csxhelp/imng.hlp.hrh>
+#include    <featmgr.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"
+// local variation
+#include    "IMPrivateCRKeys.h"
+#include    "IMVariant.hrh"
+
+// ================= MEMBER FUNCTIONS =======================
+// ---------------------------------------------------------
+// CCAAccessListDialog::CCAAccessListDialog
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// ---------------------------------------------------------
+//
+//
+CCAAccessListDialog::CCAAccessListDialog( CCAStatusPaneHandler& aTitlePane,
+                                          CDesCArray& aUserList,
+                                          TBool& aIsMemberAccessModified,
+                                          TBool aFirstItemCanBeEdited,
+                                          TBool aRemoveAllShouldExitDialog,
+                                          TInt aTitleResource,
+                                          TListType aListType,
+                                          CDesCArray* aFilterList,
+                                          CDesCArray* aFilterList2 )
+        :   iTitlePane( &aTitlePane ),
+        iUserList( aUserList ),
+        iIsMemberAccessModified( aIsMemberAccessModified ),
+        iFirstItemCanBeEdited( aFirstItemCanBeEdited ),
+        iRemoveAllShouldExitDialog( aRemoveAllShouldExitDialog ),
+        iTitleResource( aTitleResource ),
+        iFilterList( aFilterList ),
+        iFilterList2( aFilterList2 ),
+        iListType( aListType ),
+        iAppUi( static_cast<CCAAppUi*>( CCoeEnv::Static()->AppUi() ) ),
+        iGroupPropertiesPC( iAppUi->GetProcessManager().GetGroupPropertiesPC() )
+    {
+
+    }
+// ---------------------------------------------------------
+// CCAAccessListDialog::ConstructL()
+// destructor
+// ---------------------------------------------------------
+//
+void CCAAccessListDialog::ConstructL( TInt aMenuBarResourceId )
+    {
+    // other resources depends of aTitleResource
+    switch ( iTitleResource )
+        {
+        case R_CHATCLIENT_EDITRIGHT_TITLE:
+            {
+            iMenuBarResourceId = R_CHATCLIENT_EDITINGRIGHTS_MENUBAR_POPUP_MENU;
+            iDeletePromptResourceId = R_DELETE_EDITINGRIGHTS_PROMPT;
+            iDeleteAllPromptResourceId = R_DELETE_ALL_EDITINGRIGHTS_PROMPT;
+            iHelpTopic = &KIMNG_HLP_GROUP_EDIT;
+            // not used, as the user's WVID is always displayed
+            iEmptyText = NULL;
+            break;
+            }
+        case R_CHATCLIENT_BANLIST_TITLE:
+            {
+            iMenuBarResourceId = R_CHATCLIENT_BANNEDLIST_MENUBAR_POPUP_MENU;
+            iDeletePromptResourceId = R_DELETE_BANNED_PROMPT;
+            iDeleteAllPromptResourceId = R_DELETE_ALL_BANNED_PROMPT;
+            iHelpTopic = &KIMNG_HLP_GROUP_BAN;
+            iEmptyText = IMUtils::CombineStringFromResourceLC( R_QTN_CHAT_EMPTY_BANNED_LIST_PRIMARY, R_QTN_CHAT_EMPTY_BANNED_LIST );
+            CleanupStack::Pop( iEmptyText );
+            break;
+            }
+        default: // currently same as R_CHATCLIENT_ACLIST_TITLE
+            {
+            iMenuBarResourceId = R_CHATCLIENT_ACCESSLIST_MENUBAR_POPUP_MENU;
+            iDeletePromptResourceId = R_DELETE_ACCESS_PROMPT;
+            iDeleteAllPromptResourceId = R_DELETE_ALL_ACCESS_PROMPT;
+            iHelpTopic = &KIMNG_HLP_ACCLIST ;
+            iEmptyText = IMUtils::CombineStringFromResourceLC( R_QTN_CHAT_EMPTY_ACCESS_LIST_PRIMARY, R_QTN_CHAT_EMPTY_ACCESS_LIST );
+            CleanupStack::Pop( iEmptyText );
+            break;
+            }
+        }
+
+    // read it here and store it, faster than re-reading every time in
+    // DisplayManualDataQueryL
+
+    iTextualInputMode = IMUtils::IntResourceValueL( RSC_CHAT_VARIATION_USERID_TEXTUAL_INPUTMODE );
+
+    CAknDialog::ConstructL( aMenuBarResourceId );
+    }
+
+// ---------------------------------------------------------
+// CCAAccessListDialog::~CCAAccessListDialog()
+// destructor
+// ---------------------------------------------------------
+//
+CCAAccessListDialog::~CCAAccessListDialog()
+    {
+    // no need to mess with the tab group, since this dialog is always invoked
+    // via group properties dialog.  otherwise the tab group flashes once if we
+    // prohibit it in constructor and restore in destructor.
+
+    delete iWVUserId;
+    if ( iPopupMenu )
+        {
+        iEikonEnv->EikAppUi()->RemoveFromStack( iPopupMenu );
+        delete iPopupMenu;
+        }
+    delete iItemArray;
+
+    delete iEmptyText;
+    }
+
+// ---------------------------------------------------------
+// CCAAccessListDialog::DisplayManualDataQueryL()
+// This method launches dataquery
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CCAAccessListDialog::DisplayManualDataQueryL()
+    {
+    CAknSingleStyleListBox* listBox = static_cast< CAknSingleStyleListBox* >
+                                      ( Control( EChatClientControlIdAccessList ) );
+
+    HBufC* prompt = iEikonEnv->AllocReadResourceLC(
+                        RSC_CHAT_ACCESSLIST_PROMPT );
+    TPtr wvuserid( iWVUserId->Des() );
+
+    CAknTextQueryDialog* dlg = CAknTextQueryDialog::NewL( wvuserid,
+                                                          CAknQueryDialog::ENoTone );
+
+    dlg->SetPredictiveTextInputPermitted( ETrue ); // T9
+    TInt result( dlg->ExecuteLD(
+                     iTextualInputMode ?
+                     R_CHATCLIENT_ACCESSLIST_MANUAL_QUERY :
+                     R_CHATCLIENT_ACCESSLIST_MANUAL_QUERY2,
+                     *prompt ) );
+
+    //Codescanner warning ignored
+    CleanupStack::PopAndDestroy(); //prompt
+
+    if ( ( result == EAknSoftkeyOk ) || ( result == EAknSoftkeyYes )  )
+        {
+        if ( CanUserBeAddedToListL( iUserList, *iWVUserId ) )
+            {
+            iItemArray->AppendL( *iWVUserId );
+            iIsMemberAccessModified = ETrue;
+            }
+        listBox->HandleItemAdditionL();
+        }
+    }
+
+// ---------------------------------------------------------
+// CCAAccessListDialog::DisplayPopupFriendsListL()
+// This method launches popup list full of friends
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CCAAccessListDialog::DisplayPopupFriendsListL()
+    {
+    MCAMainViewArrayPC& mainViewArrayPC = *( iAppUi->GetProcessManager().GetArrayInterface() );
+    MCASettingsPC& settingsPC = *iAppUi->GetProcessManager().GetSettingsInterface();
+
+
+    CDesCArray* selectedContacts = new ( ELeave ) CDesCArrayFlat( KArrayGranularity );
+    CleanupStack::PushL( selectedContacts );
+
+    MCASkinVariant* skinVar = static_cast<CCAApp*>( iAppUi->Application() )
+                              ->VariantFactory()->SkinVariantL();
+
+
+    // show selection dialog
+    TBool contacts( CCAContactSelectionDialog::ShowDialogL(
+                        *selectedContacts,
+                        mainViewArrayPC,
+                        *skinVar,
+                        settingsPC,
+                        iAppUi->MbmFullPath(),
+                        TEnumsPC::EMultiSelect,
+                        R_CONTACT_SELECTION_DIALOG,
+                        *iAppUi->CAStatusPane(),
+                        NULL,
+                        TEnumsPC::EFilterNotDefined,
+                        TEnumsPC::EFilterNotDefined,
+                        ETrue ) );
+    if ( !contacts )
+        {
+        // no contacts. Note: code scanner warning is ignored
+        CleanupStack::PopAndDestroy(); // selectedContacts.Close()
+        return;
+        }
+
+    // handle selected contacts (if any)
+    TInt count( selectedContacts->MdcaCount() );
+    CHAT_DP( D_CHAT_LIT( "selection count %d" ), count );
+    for ( TInt i( 0 ); i < count; ++i )
+        {
+        TPtrC wvid( selectedContacts->MdcaPoint( i ) );
+        CHAT_DP( D_CHAT_LIT( "..adding %S to access list" ), &wvid );
+
+        if ( CanUserBeAddedToListL( iUserList, wvid ) )
+            {
+            iItemArray->AppendL( wvid );
+            iIsMemberAccessModified = ETrue;
+            }
+        }
+
+    if ( iIsMemberAccessModified )
+        {
+        CAknSingleStyleListBox* listBox = static_cast< CAknSingleStyleListBox* >
+                                          ( Control( EChatClientControlIdAccessList ) );
+        listBox->HandleItemAdditionL();
+        }
+    //Codescanner warning ignored
+    CleanupStack::PopAndDestroy(); // selectedContacts.Close()
+    }
+
+// ---------------------------------------------------------
+// CCAAccessListDialog::ProcessCommandL( TInt aCommand )
+// This method catches commands
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CCAAccessListDialog::ProcessCommandL( TInt aCommand )
+    {
+    HideMenu();
+    if ( iPopupMenu->IsDisplayed() )
+        {
+        iPopupMenu->StopDisplayingMenuBar();
+        }
+
+    switch ( aCommand )
+        {
+        case EChatClientAccessListManual:
+            {
+            DisplayManualDataQueryL();
+            break;
+            }
+        case EChatClientAccessListFriend:
+            {
+            DisplayPopupFriendsListL();
+            break;
+            }
+        case EChatClientAccessListRemove:
+            {
+            DisplayRmvConfirmationL();
+            break;
+            }
+        case EChatClientAccessListRemoveAll:
+            {
+            DisplayRmvAllConfirmationL();
+            break;
+            }
+        case EChatClientCmdExit:
+            {
+            iEikonEnv->EikAppUi()->HandleCommandL( EAknSoftkeyExit );
+            break;
+            }
+        case EChatClientCmdHelp:
+            {
+            HlpLauncher::LaunchHelpApplicationL( CEikonEnv::Static()->WsSession(),
+                                                 ( CCoeEnv::Static()->AppUi() )->AppHelpContextL () );
+            break;
+            }
+        default:
+            {
+            iEikonEnv->EikAppUi()->HandleCommandL( aCommand );
+            break;
+            }
+        }
+    }
+
+// ---------------------------------------------------------
+// CCAAccessListDialog::DynInitMenuPaneL
+// Dynamically initialises menu pane
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CCAAccessListDialog::DynInitMenuPaneL( TInt aResourceId,
+                                            CEikMenuPane* aMenuPane )
+    {
+    CHAT_DP_TXT( "CCAAccessListDialog::DynInitMenuPaneL" );
+
+    // if we're displaying general menu and help feature is not supported..
+    if ( aResourceId == R_CHATCLIENT_GENERAL_MENU &&
+         !FeatureManager::FeatureSupported( KFeatureIdHelp ) )
+        {
+        // dimm the help menu item
+        aMenuPane->SetItemDimmed( EChatClientCmdHelp, ETrue );
+        }
+
+    if ( aResourceId == R_CHATCLIENT_ACCESSLIST_OPTIONS_MENU ||
+         aResourceId == R_CHATCLIENT_EDITINGRIGHTS_OPTIONS_MENU ||
+         aResourceId == R_CHATCLIENT_BANNEDLIST_OPTIONS_MENU ||
+         aResourceId == R_CHATCLIENT_ACCESSLIST_POPUP_MENU ||
+         aResourceId == R_CHATCLIENT_EDITINGRIGHTS_POPUP_MENU ||
+         aResourceId == R_CHATCLIENT_BANNEDLIST_POPUP_MENU )
+        {
+        CAknSingleStyleListBox* listBox =
+            static_cast< CAknSingleStyleListBox* >(
+                Control( EChatClientControlIdAccessList ) );
+        TInt index( listBox->CurrentItemIndex() );
+        TInt emptyCount( iFirstItemCanBeEdited ? 0 : 1 );
+        if ( iItemArray->MdcaCount() == emptyCount )
+            {
+            aMenuPane->SetItemDimmed( EChatClientAccessListRemove, ETrue );
+
+            if ( ( aResourceId != R_CHATCLIENT_ACCESSLIST_POPUP_MENU ) &&
+                 ( aResourceId != R_CHATCLIENT_EDITINGRIGHTS_POPUP_MENU ) &&
+                 ( aResourceId != R_CHATCLIENT_BANNEDLIST_POPUP_MENU ) )
+                {
+                // popup menu doesn't contain "remove all"-option
+                aMenuPane->SetItemDimmed( EChatClientAccessListRemoveAll,
+                                          ETrue );
+                }
+            }
+        else if ( index == 0 && !iFirstItemCanBeEdited )
+            {
+            aMenuPane->SetItemDimmed( EChatClientAccessListRemove, ETrue );
+            }
+        }
+    CHAT_DP_TXT( "CCAAccessListDialog::DynInitMenuPaneL ENDS" );
+    }
+
+
+// ---------------------------------------------------------
+// CCAAccessListDialog::HandleListBoxEventL()
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CCAAccessListDialog::HandleListBoxEventL( CEikListBox* /*aListBox*/,
+                                               TListBoxEvent aEventType )
+    {
+    if ( aEventType == EEventItemDoubleClicked )
+        {
+        DisplayPopupMenuL();
+        }
+    }
+
+// ---------------------------------------------------------
+// CCAAccessListDialog::PreLayoutDynInitL()
+// Sets the layout for dialog
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CCAAccessListDialog::PreLayoutDynInitL()
+    {
+    iPopupMenu = new( ELeave ) CEikMenuBar;
+    iPopupMenu->ConstructL( this, 0, iMenuBarResourceId );
+    iEikonEnv->EikAppUi()->AddToStackL( iPopupMenu );
+
+    // Context sensitive menu
+#ifndef RD_30_DISABLE_TOUCH
+    iMenuBar->SetContextMenuTitleResourceId( iMenuBarResourceId );
+#endif
+
+    iWVUserId = HBufC::NewL( KMaxWVIDLength );
+    CAknSingleStyleListBox* listBox = static_cast< CAknSingleStyleListBox* >
+                                      ( Control( EChatClientControlIdAccessList ) );
+
+    listBox->CreateScrollBarFrameL( ETrue );
+    listBox->ScrollBarFrame()->SetScrollBarVisibilityL(
+        CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto );
+
+    listBox->HandleItemAdditionL();
+    listBox->UpdateScrollBarsL();
+    listBox->SetListBoxObserver( this );
+
+    // If simplified flag is set -> then show descriptive empty list text
+    if ( IMUtils::CRKeyL( KCRUidIMVariation, KIMVariationKey ) & EIMFeatSimplifiedUI &&
+         iEmptyText )
+        {
+        // we should set the empty text
+        listBox->View()->SetListEmptyTextL( *iEmptyText  );
+
+        }
+
+    iItemArray = CCAAccessArray::NewL(
+                     iGroupPropertiesPC,
+                     iUserList );
+
+    listBox->Model()->SetItemTextArray( iItemArray );
+    listBox->Model()->SetOwnershipType( ELbmDoesNotOwnItemArray );
+
+    iTitlePane->ClearNaviPaneL();
+
+    iTitlePane->SetTitleL( iEikonEnv, iTitleResource );
+    }
+
+// ---------------------------------------------------------
+// CCAAccessListDialog::OkToExitL( TInt aButtonId )
+// Handles buttonids
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TBool CCAAccessListDialog::OkToExitL( TInt aButtonId )
+    {
+    if ( aButtonId == EAknSoftkeyOptions )
+        {
+        DisplayMenuL();
+        return EFalse;
+        }
+    if ( aButtonId == EAknSoftkeyContextOptions )
+        {
+        DisplayPopupMenuL();    // MSK command, show context sensitive
+        // options menu
+        return EFalse;
+        }
+
+    return ETrue;
+    }
+
+// ---------------------------------------------------------
+// CCAAccessListDialog::OfferKeyEventL
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TKeyResponse CCAAccessListDialog::OfferKeyEventL( const TKeyEvent& aKeyEvent,
+                                                  TEventCode aType )
+    {
+    CAknSingleStyleListBox* listBox = static_cast< CAknSingleStyleListBox* >
+                                      ( Control( EChatClientControlIdAccessList ) );
+
+    if ( aKeyEvent.iCode == EKeyEnter || aKeyEvent.iCode == EKeyOK )
+        {
+        DisplayPopupMenuL();
+        return EKeyWasConsumed;
+        }
+    if ( aKeyEvent.iCode == EKeyBackspace )
+        {
+        CAknSingleStyleListBox* listBox =
+            static_cast< CAknSingleStyleListBox* >(
+                Control( EChatClientControlIdAccessList ) );
+        TInt index( listBox->CurrentItemIndex() );
+
+        if ( ( index == 0 && iFirstItemCanBeEdited ) || index > 0 )
+            {
+            DisplayRmvConfirmationL();
+            return EKeyWasConsumed;
+            }
+        }
+    if ( aKeyEvent.iCode == EKeyEscape ) // handle dialog shutdown.
+        {
+        TryExitL( EAknSoftkeyCancel );
+        return EKeyWasConsumed;
+        }
+    return listBox->OfferKeyEventL( aKeyEvent, aType );
+    }
+
+// ---------------------------------------------------------
+// CCAAccessListDialog::MappedCommandId()
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TInt CCAAccessListDialog::MappedCommandId( TInt aButtonId )
+    {
+    if ( aButtonId == EEikBidCancel )
+        {
+        // return something else than cancel.
+        // the returned value is irrelevant
+        return EEikBidCancel + 1;
+        }
+
+    return aButtonId;
+    }
+
+// ---------------------------------------------------------
+// CCAAccessListDialog::DisplayRmvConfirmationL()
+// Displays confirmation note
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CCAAccessListDialog::DisplayRmvConfirmationL()
+    {
+    CAknSingleStyleListBox* listBox =
+        static_cast< CAknSingleStyleListBox* >(
+            Control( EChatClientControlIdAccessList ) );
+
+    TInt index( listBox->CurrentItemIndex() );
+    TPtrC wvid( iItemArray->RawData( index ) );
+
+
+    HBufC* prompt = StringLoader::LoadLC( iDeletePromptResourceId,
+                                          iGroupPropertiesPC->GetIdentificationL( wvid ) );
+    // Show confirmation
+    TInt ret( IMDialogUtils::DisplayQueryDialogL( R_DELETE_ACCESS_QUERY,
+                                                  *prompt ) );
+    CleanupStack::PopAndDestroy( prompt );
+
+    if ( ( ret == EAknSoftkeyOk ) || ( ret == EAknSoftkeyYes ) )
+        {
+        iIsMemberAccessModified = ETrue;
+        iItemArray->Delete( index, 1 );
+        listBox->HandleItemRemovalL();
+
+        TInt currentItemIndex( index );
+        if ( currentItemIndex < 0 )
+            {
+            currentItemIndex = 0;
+            }
+        if ( currentItemIndex >= iItemArray->MdcaCount() )
+            {
+            currentItemIndex = iItemArray->MdcaCount() - 1;
+            }
+        if ( iItemArray->MdcaCount() > 0 )
+            {
+            listBox->SetCurrentItemIndexAndDraw( currentItemIndex );
+            }
+        }
+    DrawNow();
+    }
+
+// ---------------------------------------------------------
+// CCAAccessListDialog::DisplayRmvAllConfirmationL()
+// Displays confirmation if all are removed
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CCAAccessListDialog::DisplayRmvAllConfirmationL()
+    {
+    CAknSingleStyleListBox* listBox =
+        static_cast< CAknSingleStyleListBox* >(
+            Control( EChatClientControlIdAccessList ) );
+
+    HBufC* prompt = iEikonEnv->AllocReadResourceLC(
+                        iDeleteAllPromptResourceId );
+    TInt ret( IMDialogUtils::DisplayQueryDialogL( R_DELETE_ALL_ACCESS_QUERY,
+                                                  *prompt ) );
+    CleanupStack::PopAndDestroy( prompt );
+
+    if ( ( ret == EAknSoftkeyOk ) || ( ret == EAknSoftkeyYes ) )
+        {
+        iIsMemberAccessModified = ETrue;
+        if ( iFirstItemCanBeEdited )
+            {
+            iItemArray->Reset();
+            }
+        else
+            {
+
+            if ( iItemArray->MdcaCount() > 0 ) //added array bound check
+                {
+                // don't delete first item
+                iItemArray->Delete( 1, iItemArray->MdcaCount() - 1 );
+                }
+            listBox->SetCurrentItemIndex( 0 );
+            }
+
+        listBox->HandleItemRemovalL();
+
+        if ( iRemoveAllShouldExitDialog )
+            {
+            // exit the dialog
+            TryExitL( EAknSoftkeyOk );
+            }
+        }
+    }
+
+// ---------------------------------------------------------
+// CCAAccessListDialog::DisplayPopupMenuL
+// Displays pop-up menu
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CCAAccessListDialog::DisplayPopupMenuL()
+    {
+#ifndef RD_30_DISABLE_TOUCH
+    iMenuBar->TryDisplayContextMenuBarL();
+#else
+    iPopupMenu->TryDisplayMenuBarL();
+#endif //RD_30_DISABLE_TOUCH
+    }
+
+// ---------------------------------------------------------
+// CCAAccessListDialog::CanUserBeAddedToListL
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TBool CCAAccessListDialog::CanUserBeAddedToListL( const CDesCArray& aUserList,
+                                                  const TDesC& aUserId )
+    {
+    // Check first that id does not exists in filter lists.
+    TInt index( IMUtils::NeutralFind( *iFilterList, aUserId ) );
+    TInt index2 = KErrNotFound;
+    if ( iFilterList2 )
+        {
+        index2 = IMUtils::NeutralFind( *iFilterList2, aUserId );
+        }
+
+    if ( index != KErrNotFound || index2 != KErrNotFound )
+        {
+        TInt resource;
+        switch ( iListType )
+            {
+            case EAccessList:
+                {
+                resource = R_QTN_CHAT_ACLIST_MOVE_TO_ACCESS;
+                break;
+                }
+            case EBannedList:
+                {
+                resource = R_QTN_CHAT_ACLIST_MOVE_TO_BANNED;
+                break;
+                }
+            default:
+                {
+                resource = R_QTN_CHAT_ACLIST_MOVE_TO_ADMIN;
+                break;
+                }
+            }
+        // ask from user should be moved from other list.
+        HBufC* text = StringLoader::LoadLC( resource,
+                                            iGroupPropertiesPC->GetIdentificationL( aUserId ) );
+        TInt okToMove( IMDialogUtils::DisplayYesNoConfirmationDialogL( *text ) );
+        CleanupStack::PopAndDestroy( text );
+        if ( okToMove )
+            {
+            // Delete from correct filter list
+            if ( index != KErrNotFound )
+                {
+                iFilterList->Delete( index );
+                }
+            if ( index2 != KErrNotFound )
+                {
+                iFilterList2->Delete( index2 );
+                }
+            }
+        else
+            {
+            return EFalse;
+            }
+        }
+    return ( IMUtils::NeutralFind( aUserList, aUserId ) == KErrNotFound );
+    }
+
+
+/**
+ * Help Key Support
+ * This function is called by the Framework to get the context to launch
+ * Help
+ *
+ * @param aContext	The context that contains the appid and the help id.
+ */
+void CCAAccessListDialog::GetHelpContext(
+    TCoeHelpContext& aContext ) const
+    {
+    aContext.iMajor = KUidChatClient;
+    aContext.iContext = *iHelpTopic;
+    }
+//  End of File