wvuing/wvuiave/AppSrc/CCAGroupPropertiesDialog.cpp
branchRCL_3
changeset 13 a941bc465d9f
parent 0 094583676ce7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/wvuing/wvuiave/AppSrc/CCAGroupPropertiesDialog.cpp	Wed Sep 01 12:31:13 2010 +0100
@@ -0,0 +1,1335 @@
+/*
+* 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:  Dialog for setting and editing group properties
+*
+*/
+
+
+//INCLUDES
+#include	"CCAGroupPropertiesDialog.h"
+#include	"chatngclient.hrh"
+#include	"CCAAccessListDialog.h"
+#include	"CAExternalInterface.h"
+#include    "IMUtils.h"
+#include    "CAUtils.h"
+
+#include    "CCAAppUi.h"
+#include	"MCASettingsPC.h"
+#include	"MCAProcessManager.h"
+#include    "ChatDefinitions.h"
+#include	"CCAStatusPaneHandler.h"
+#include    "ChatDebugPrint.h"
+
+#include	<aknlists.h>
+#include	<aknradiobuttonsettingpage.h>
+#include	<aknsettingpage.h>
+#include	<akntextsettingpage.h>
+#include	<aknsettingitemlist.h>
+#include	<barsread.h>
+#include	<chatNG.rsg>
+#include	<stringloader.h>
+#include    <bldvariant.hrh>
+#include    <hlplch.h>
+#include    <csxhelp/imng.hlp.hrh>
+#include    <FeatMgr.h>
+
+#include    "CCAPCUtils.h"
+#include    "MCAGroupPropertiesPC.h"
+#include    "ChatDefinitions.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"
+#include 	<CAVariationNG.rsg>
+
+const TInt KGranularity = 2;
+// ---------------------------------------------------------
+// CCAGroupPropertiesDialog::CCAGroupPropertiesDialog()
+// C++ default constructor can NOT contain any code, that might leave.
+// ---------------------------------------------------------
+//
+CCAGroupPropertiesDialog::CCAGroupPropertiesDialog(
+    CCAStatusPaneHandler& aTitleBar,
+    TBool aEditMode,
+    CDesCArray& aUserList,
+    CDesCArray& aAdmins,
+    CDesCArray& aBannedUsers,
+    const TDesC& aGroupId,
+    TBool& aAreItemsEdited
+)
+
+        : iTitlePane( aTitleBar ),
+        iEditMode( aEditMode ),
+        iUserList( aUserList ),
+        iAdmins( aAdmins ),
+        iBannedUsers( aBannedUsers ),
+        iGroupId( aGroupId ),
+        iAreItemsEdited( aAreItemsEdited ),
+        iGroupName( NULL, 0 ),
+        iTopic( NULL, 0 ),
+        iWelcomeNote( NULL, 0 )
+    {
+    iAppUi = static_cast<CCAAppUi*>( CCoeEnv::Static()->AppUi() );
+    iGroupPropertiesPC =
+        iAppUi->GetProcessManager().GetGroupPropertiesPC();
+    }
+
+
+// ---------------------------------------------------------
+// CCAGroupPropertiesDialog::~CCAGroupPropertiesDialog()
+// Desctructor
+// ---------------------------------------------------------
+//
+CCAGroupPropertiesDialog::~CCAGroupPropertiesDialog()
+    {
+    // dialog will be gone, so remove the topmost decorator
+    iTitlePane.PopNaviPane();
+
+    if ( iSettingItemArray )
+        {
+        iSettingItemArray->ResetAndDestroy();
+        delete iSettingItemArray;
+        }
+
+    if ( iGroupNameBuf )
+        {
+        delete iGroupNameBuf;
+        }
+
+    if ( iTopicBuf )
+        {
+        delete iTopicBuf;
+        }
+
+    if ( iWelcomeNoteBuf )
+        {
+        delete iWelcomeNoteBuf;
+        }
+
+    if ( iOldGroupName )
+        {
+        delete iOldGroupName;
+        }
+    if ( iOldTopic )
+        {
+        delete iOldTopic;
+        }
+    if ( iOldWelcomeNote )
+        {
+        delete iOldWelcomeNote;
+        }
+
+    if ( iDialogLaunchCallback->IsActive() )
+        {
+        iDialogLaunchCallback->Cancel();
+        }
+    delete iDialogLaunchCallback;
+    }
+
+// ---------------------------------------------------------
+// CCAGroupPropertiesDialog::ConstructL()
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CCAGroupPropertiesDialog::ConstructL( TInt aMenuResource )
+    {
+    CAknDialog::ConstructL( aMenuResource );
+    iDialogLaunchCallback = CIdle::NewL( CActive::EPriorityStandard );
+    }
+
+// ---------------------------------------------------------
+// CCAGroupPropertiesDialog::LaunchAccessListDialogL()
+// Launches accesslist dialog
+// (other items were commented in a header).
+// Note: CodeScanner is likely to return false positives for
+// this situation, because some returned TInt values will not be error codes
+// ---------------------------------------------------------
+//
+TInt CCAGroupPropertiesDialog::LaunchAccessListDialogL()
+    {
+    iIsMemberAccessModified = EFalse;
+    CCAAccessListDialog* dlg = new( ELeave )CCAAccessListDialog(
+        iTitlePane, iUserList, iIsMemberAccessModified, ETrue, ETrue,
+        R_CHATCLIENT_ACLIST_TITLE, CCAAccessListDialog::EAccessList, &iBannedUsers );
+
+    CleanupStack::PushL( dlg );
+    dlg->ConstructL( R_CHATCLIENT_MENUBAR_ACCESSLIST_DLG );
+    CleanupStack::Pop( dlg );
+    TInt retVal( dlg->ExecuteLD( R_CHATCLIENT_ACCESS_LIST_DLG ) );
+
+    // Don't do anything if we exited
+    if ( retVal != EAknSoftkeyCancel )
+        {
+        if ( iUserList.Count() > 0 )
+            {
+            CHAT_DP_TXT( "access to group: selected" );
+            iIsOpen = TEnumsPC::EImpsPropYes;
+            if ( iBannedUsers.Count() == 0 )
+                {
+                iIsBannedUsers = EFalse;
+                }
+            else
+                {
+                iIsBannedUsers = ETrue;
+                }
+            }
+        else
+            {
+            CHAT_DP_TXT( "access to group: all" );
+            iIsOpen = TEnumsPC::EImpsPropNo;
+            }
+        }
+    return retVal;
+    }
+
+// ---------------------------------------------------------
+// CCAGroupPropertiesDialog::LaunchEditingRightsListDialogL()
+// Launches editing rights list dialog
+// Note: CodeScanner is likely to return false positives for
+// this situation, because some returned TInt values will not
+// be error codes
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TInt CCAGroupPropertiesDialog::LaunchEditingRightsListDialogL()
+    {
+    iIsAdminStatusModified = EFalse;
+    // first item is our own wvid and it can't be removed
+    CCAAccessListDialog* dlg = new( ELeave )CCAAccessListDialog(
+        iTitlePane, iAdmins, iIsAdminStatusModified, EFalse, ETrue,
+        R_CHATCLIENT_EDITRIGHT_TITLE, CCAAccessListDialog::EAdminList, &iBannedUsers );
+
+    CleanupStack::PushL( dlg );
+    dlg->ConstructL( R_CHATCLIENT_MENUBAR_EDITINGRIGHTS_DLG );
+    CleanupStack::Pop( dlg );
+    TInt retVal( dlg->ExecuteLD( R_CHATCLIENT_ACCESS_LIST_DLG ) );
+
+    if ( retVal != EAknSoftkeyCancel )
+        {
+        TInt adminCount( iAdmins.Count() );
+
+        // if there are other ids than ours
+        if ( adminCount > 1 )
+            {
+            iAdminSelected = ETrue;
+
+            if ( iBannedUsers.Count() == 0 )
+                {
+                iIsBannedUsers = EFalse;
+                }
+            else
+                {
+                iIsBannedUsers = ETrue;
+                }
+            }
+        else
+            {
+            iAdminSelected = EFalse;
+            }
+        }
+    return retVal;
+    }
+
+// ---------------------------------------------------------
+// CCAGroupPropertiesDialog::LaunchBannedUsersListDialogL()
+// Launches banned users list dialog
+// Note: CodeScanner is likely to return false positives for
+// this situation, because some returned TInt values will not
+// be error codes.
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TInt CCAGroupPropertiesDialog::LaunchBannedUsersListDialogL()
+    {
+    iIsBannedListModified = EFalse;
+    CCAAccessListDialog* dlg = new( ELeave )CCAAccessListDialog(
+        iTitlePane, iBannedUsers, iIsBannedListModified, ETrue, ETrue,
+        R_CHATCLIENT_BANLIST_TITLE, CCAAccessListDialog::EBannedList,
+        &iUserList, &iAdmins );
+
+    CleanupStack::PushL( dlg );
+    dlg->ConstructL( R_CHATCLIENT_MENUBAR_BANNEDLIST_DLG );
+    CleanupStack::Pop( dlg );
+    TInt retVal( dlg->ExecuteLD( R_CHATCLIENT_ACCESS_LIST_DLG ) );
+
+    if ( retVal != EAknSoftkeyCancel )
+        {
+        TInt bannedCount( iBannedUsers.Count() );
+
+        if ( bannedCount > 0 )
+            {
+            iIsBannedUsers = ETrue;
+
+            if ( iUserList.Count() == 0 )
+                {
+                iIsOpen = TEnumsPC::EImpsPropNo;
+                }
+            else
+                {
+                iIsOpen = TEnumsPC::EImpsPropYes;
+                }
+            }
+        else
+            {
+            iIsBannedUsers = EFalse;
+            }
+        }
+    return retVal;
+    }
+
+// ---------------------------------------------------------
+// CCAGroupPropertiesDialog::LaunchDialogHelperL
+// Show popup and handle Cancel correctly when launching list dialogs
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TInt CCAGroupPropertiesDialog::LaunchDialogHelperL(
+    TInt aPopupResourceId,
+    TInt aSettingResourceId,
+    TInt& aSelectionIndex,
+    TInt ( CCAGroupPropertiesDialog::* aCallBack )(),
+    TBool aInvokeOnFalse )
+    {
+    TResourceReader rr;
+    iEikonEnv->CreateResourceReaderLC( rr, aPopupResourceId );
+    CDesCArray* itemArray = rr.ReadDesCArrayL();
+
+    //code scanner warning ignored
+    CleanupStack::PopAndDestroy(); //rr
+
+    CleanupStack::PushL( itemArray );
+
+    CAknSettingPage* settPage = new ( ELeave )
+    CAknRadioButtonSettingPage( aSettingResourceId, aSelectionIndex,
+                                itemArray );
+    TBool oked( settPage->ExecuteLD( CAknSettingPage::EUpdateWhenChanged ) );
+
+    TInt retVal = KErrNone;
+    //Note: CodeScanner is likely to return false positives for this situation,
+    //because some returned TInt values will not be error codes
+    if ( oked )
+        {
+        // weird logic is needed because some calls want to invoke
+        // on EFalse, and some on ETrue
+        TBool invoke = aInvokeOnFalse ? !( aSelectionIndex ) : aSelectionIndex;
+        if ( invoke )
+            {
+            retVal = ( this->*aCallBack )();
+            }
+        }
+
+    CleanupStack::PopAndDestroy( itemArray );
+
+    return retVal;
+    }
+
+// ---------------------------------------------------------
+// CCAGroupPropertiesDialog::LaunchDialogHelperL
+// Show popup and handle Cancel correctly when launching list dialogs
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TInt CCAGroupPropertiesDialog::LaunchDialogHelperL(
+    TInt aPopupResourceId,
+    TInt aSettingResourceId,
+    TInt& aSelectionIndex,
+    TInt ( CCAGroupPropertiesDialog::* aCallBack )(),
+    TEnumsPC::TImpsPropertyBoolPC aInvokeOnTrue )
+    {
+    TResourceReader rr;
+    iEikonEnv->CreateResourceReaderLC( rr, aPopupResourceId );
+    CDesCArray* itemArray = rr.ReadDesCArrayL();
+
+    //code scanner warning ignored
+    CleanupStack::PopAndDestroy(); //rr
+
+    CleanupStack::PushL( itemArray );
+
+    CAknSettingPage* settPage = new ( ELeave )
+    CAknRadioButtonSettingPage( aSettingResourceId, aSelectionIndex,
+                                itemArray );
+    TBool oked( settPage->ExecuteLD( CAknSettingPage::EUpdateWhenChanged ) );
+
+    TInt retVal = KErrNone;
+    //Note: CodeScanner is likely to return false positives for this situation,
+    //because some returned TInt values will not be error codes
+    if ( oked )
+        {
+        TBool invoke = ( TInt )aInvokeOnTrue ? aSelectionIndex : !( aSelectionIndex );
+        if ( invoke )
+            {
+            retVal = ( this->*aCallBack )();
+            }
+        }
+
+    CleanupStack::PopAndDestroy( itemArray );
+
+    return retVal;
+    }
+
+// ---------------------------------------------------------
+// CCAGroupPropertiesDialog::HandleCBAChangeL()
+// Handles CBA changes
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CCAGroupPropertiesDialog::HandleCBAChangeL()
+    {
+    iTitlePane.ClearNaviPaneL();
+    iTitlePane.SetTitleL( *iGroupNameBuf );
+
+    TInt index = iListbox->CurrentItemIndex();
+
+    TInt indexShift = 0;
+    if ( !iEditMode && index >= ESetGroupId )
+        {
+        ++indexShift; // if creating new group, one setting item is missing
+        }
+
+    TInt shiftedIndex = index + indexShift;
+
+    TInt cbaRes = R_CHAT_SOFTKEYS_OPTIONS_BACK__EMPTY;
+
+    if ( shiftedIndex == ESetGroupId && iIsEdited )
+        {
+        cbaRes = R_CHAT_SOFTKEYS_OPTIONS_DONE__EMPTY;
+        }
+    else if ( shiftedIndex != ESetGroupId && iIsEdited )
+        {
+        // Options/Done/Change
+        cbaRes = R_CHAT_SOFTKEYS_OPTIONS_DONE__CHANGE;
+        }
+    else if ( shiftedIndex == ESetGroupId && !iIsEdited )
+        {
+        cbaRes = R_CHAT_SOFTKEYS_OPTIONS_BACK__EMPTY;
+        }
+    else if ( shiftedIndex != ESetGroupId && !iIsEdited )
+        {
+        // Options/Back/Change
+        cbaRes = R_CHAT_SOFTKEYS_OPTIONS_BACK__CHANGE;
+        }
+
+    CEikButtonGroupContainer* cba = CEikButtonGroupContainer::Current();
+    cba->SetCommandSetL( cbaRes );
+    cba->DrawNow();
+    }
+
+// ---------------------------------------------------------
+// CCAGroupPropertiesDialog::AreItemsEditedL()
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TBool CCAGroupPropertiesDialog::AreItemsEdited()
+    {
+    if ( iOldGroupName->CompareC( *iGroupNameBuf ) != 0 )
+        {
+        return ETrue;
+        }
+
+    if ( iOldTopic->CompareC( *iTopicBuf ) != 0 )
+        {
+        return ETrue;
+        }
+
+    if ( iOldWelcomeNote->CompareC( *iWelcomeNoteBuf ) != 0 )
+        {
+        return ETrue;
+        }
+
+    if ( iOldSize != iSize )
+        {
+        return ETrue;
+        }
+
+    if ( iOldAllowWhisper != iAllowWhisper )
+        {
+        return ETrue;
+        }
+
+    if ( iOldAllowSearch != iAllowSearch )
+        {
+        return ETrue;
+        }
+
+    if ( iOldIsBannedUsers != iIsBannedUsers )
+        {
+        return ETrue;
+        }
+
+    if ( iIsBannedListModified )
+        {
+        return ETrue;
+        }
+
+    if ( iOldIsOpen != iIsOpen )
+        {
+        return ETrue;
+        }
+
+    if ( iIsMemberAccessModified )
+        {
+        return ETrue;
+        }
+
+    if ( iOldAdminSelected != iAdminSelected )
+        {
+        return ETrue;
+        }
+
+    if ( iIsAdminStatusModified )
+        {
+        return ETrue;
+        }
+
+    return EFalse;
+    }
+
+// ---------------------------------------------------------
+// CCAGroupPropertiesDialog::AddTextSettingItemL
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CCAGroupPropertiesDialog::AddTextSettingItemL(
+    TInt aSettingPageResourceId,
+    TInt aTitleResourceId,
+    TInt aOrdinal,
+    TDesC& aEmptyText,
+    TDes& aModifiedBuffer )
+    {
+    CAknSettingItem* settingItem = new ( ELeave )
+    CAknTextSettingItem( 0, aModifiedBuffer );
+    CleanupStack::PushL( settingItem );
+    HBufC* itemTitle = iEikonEnv->AllocReadResourceLC( aTitleResourceId );
+    settingItem->SetEmptyItemTextL( aEmptyText );
+    settingItem->ConstructL( EFalse, aOrdinal, *itemTitle, NULL,
+                             aSettingPageResourceId, EEikCtEdwin );
+    iSettingItemArray->AppendL( settingItem );
+    CleanupStack::PopAndDestroy( itemTitle );
+    CleanupStack::Pop( settingItem );
+    }
+
+// ---------------------------------------------------------
+// CCAGroupPropertiesDialog::AddIntegerSettingItemL
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CCAGroupPropertiesDialog::AddIntegerSettingItemL(
+    TInt aSettingPageResourceId,
+    TInt aTitleResourceId,
+    TInt aOrdinal,
+    TInt& aModifiedValue )
+    {
+    CAknSettingItem* settingItem = new ( ELeave )
+    CAknIntegerEdwinSettingItem( 0, aModifiedValue );
+    CleanupStack::PushL( settingItem );
+    HBufC* itemTitle = iEikonEnv->AllocReadResourceLC( aTitleResourceId );
+    settingItem->ConstructL( EFalse, aOrdinal, *itemTitle, NULL,
+                             aSettingPageResourceId, EAknCtIntegerEdwin );
+    iSettingItemArray->AppendL( settingItem );
+    CleanupStack::PopAndDestroy( itemTitle );
+    CleanupStack::Pop( settingItem );
+    }
+
+// ---------------------------------------------------------
+// CCAGroupPropertiesDialog::AddBinarySettingItemL
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CCAGroupPropertiesDialog::AddBinarySettingItemL(
+    TInt aSettingPageResourceId,
+    TInt aTitleResourceId,
+    TInt aAssociatedResourceId,
+    TInt aOrdinal,
+    TEnumsPC::TImpsPropertyBoolPC& aModifiedValue )
+    {
+
+    CAknSettingItem* settingItem = new ( ELeave )
+    CAknBinaryPopupSettingItem( 0, ( TInt& )aModifiedValue );
+
+    CleanupStack::PushL( settingItem );
+    HBufC* itemTitle = iEikonEnv->AllocReadResourceLC( aTitleResourceId );
+    settingItem->ConstructL( EFalse, aOrdinal, *itemTitle, NULL,
+                             aSettingPageResourceId, EAknCtPopupSettingList, NULL,
+                             aAssociatedResourceId );
+    iSettingItemArray->AppendL( settingItem );
+    CleanupStack::PopAndDestroy( itemTitle );
+    CleanupStack::Pop( settingItem );
+    }
+
+// ---------------------------------------------------------
+// CCAGroupPropertiesDialog::ProcessCommandL()
+// Processess commands
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CCAGroupPropertiesDialog::ProcessCommandL( TInt aCommand )
+    {
+    HideMenu();
+    switch ( aCommand )
+        {
+        case EChatClientChatPropertiesCmdChange:
+            {
+            CEikListBox* listBox = static_cast< CEikListBox* >
+                                   ( Control( EChatClientControlIdGroupSettings ) );
+            HandleListBoxEventL( listBox, EEventEditingStarted );
+            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;
+            }
+        }
+
+    }
+
+
+// ---------------------------------------------------------
+// CCAGroupPropertiesDialog::HandleListBoxEventL()
+// Handles listbox events
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CCAGroupPropertiesDialog::HandleListBoxEventL( CEikListBox* aListBox,
+                                                    TListBoxEvent aEventType )
+    {
+    TBool isPopUp( EFalse );
+    TInt index ( aListBox->CurrentItemIndex() );
+    if ( index < 0 || index >= aListBox->Model()->NumberOfItems() )
+        {
+        //if index is not valid then we don't need make any actions to items
+        return;
+        }
+
+    if ( aEventType == EEventEditingStarted ||
+         aEventType == EEventEnterKeyPressed ||
+         aEventType == EEventItemDoubleClicked )
+        {
+
+        TInt indexShift( 0 );
+        if ( !iEditMode && index >= ESetGroupId )
+            {
+            ++indexShift; // if creating new group, one setting item is missing
+            }
+
+        isPopUp = ( aEventType == EEventEditingStarted );
+        TInt shiftedIndex( index + indexShift );
+
+        //Store the setting item pointer
+        CAknSettingItem* settingItem = NULL;
+        if ( index >= 0 && index < iSettingItemArray->Count() )
+            {
+            settingItem = iSettingItemArray->At( index );
+            }
+
+        switch ( shiftedIndex )
+            {
+                // group name
+            case ESetGroupName :
+                {
+                // launch a T9-enabled text setting page
+                CAknSettingPage* dlg = new( ELeave ) CAknTextSettingPage(
+                    R_EDIT_CHAT_GROUP_NAME, iGroupName,
+                    CAknTextSettingPage::EPredictiveTextEntryPermitted );
+
+                dlg->ExecuteLD( CAknSettingPage::EUpdateWhenChanged );
+                break;
+                }
+
+            case ESetGroupTopic :
+                {
+                // launch a T9-enabled text setting page
+                CAknSettingPage* dlg = new( ELeave ) CAknTextSettingPage(
+                    R_EDIT_CHAT_GROUP_TOPIC, iTopic,
+                    CAknTextSettingPage::EZeroLengthAllowed |
+                    CAknTextSettingPage::EPredictiveTextEntryPermitted );
+
+                dlg->ExecuteLD( CAknSettingPage::EUpdateWhenChanged );
+                break;
+                }
+
+            case ESetGroupWelcomeNote :
+                {
+                // launch a T9-enabled text setting page
+                CAknSettingPage* dlg = new( ELeave ) CAknTextSettingPage(
+                    R_EDIT_CHAT_GROUP_WELCOMENOTE, iWelcomeNote,
+                    CAknTextSettingPage::EZeroLengthAllowed |
+                    CAknTextSettingPage::EPredictiveTextEntryPermitted );
+
+                dlg->ExecuteLD( CAknSettingPage::EUpdateWhenChanged );
+                break;
+                }
+
+            case ESetGroupId:
+                {
+                // editing group id is prohibited, we can just return
+                return;
+                }
+
+            // these are handled with LaunchCorrectDialogL
+            case ESetGroupAdminSelected:
+            case ESetGroupIsOpen:
+            case ESetGroupBannedUsers:  // flowtrough
+                {
+                LaunchCorrectDialog();
+                return; // screen update is handled in LaunchCorrectDialogL
+                }
+
+            default:
+                {
+                if ( settingItem )
+                    {
+                    settingItem->EditItemL( isPopUp );
+                    settingItem->StoreL();
+                    }
+                aListBox->DrawItem( index );
+                break;
+                }
+            }
+        if ( settingItem )
+            {
+            settingItem->LoadL();
+            settingItem->UpdateListBoxTextL();
+            }
+        aListBox->DrawItem( index );
+
+        // restore the title pane text correctly even when Back was pressed
+        iTitlePane.ClearNaviPaneL();
+        iTitlePane.SetTitleL( *iGroupNameBuf );
+        }
+
+    if ( AreItemsEdited() )
+        {
+        iIsEdited = ETrue;
+        HandleCBAChangeL();
+        }
+
+    }
+
+
+// ---------------------------------------------------------
+// CCAGroupPropertiesDialog::DynInitMenuPaneL(
+// Dynamically initialises menubar
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CCAGroupPropertiesDialog::DynInitMenuPaneL( TInt aResourceId,
+                                                 CEikMenuPane* aMenuPane )
+    {
+    // if we're displaying general menu and help feature is not supported..
+    if ( aResourceId == R_CHATCLIENT_GENERAL_MENU &&
+         !FeatureManager::FeatureSupported( KFeatureIdHelp ) )
+        {
+        // dim the help menu item
+        aMenuPane->SetItemDimmed( EChatClientCmdHelp, ETrue );
+        }
+    TInt currentIndex = iListbox->CurrentItemIndex();
+
+    if ( currentIndex == ESetGroupId &&
+         aResourceId == R_CHATCLIENT_CHAT_PROPERTIES_OPTIONS_MENU )
+        {
+        aMenuPane->SetItemDimmed( EChatClientChatPropertiesCmdChange, ETrue );
+        }
+    }
+
+// ---------------------------------------------------------
+// CCAGroupPropertiesDialog::PreLayoutDynInitL()
+// Sets the layout of the dialog
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CCAGroupPropertiesDialog::PreLayoutDynInitL()
+    {
+    CHAT_DP( D_PLAIN_LIT( "CCAGroupPropertiesDialog::PreLayoutDynInitL()" ) );
+
+    // remember to pop this stacking decorator on destructor.
+    iTitlePane.ClearNaviPaneL( ETrue );
+
+    if ( iEditMode )
+        {
+        TInt err( KErrNone );
+        TRAPD( leave, err = iGroupPropertiesPC->InitializeForEdittingL( iGroupId ) );
+        if ( leave != KErrNone )
+            {
+            CActiveScheduler::Current()->Error( leave );
+            return;
+            }
+        if ( err != KErrNone )
+            {
+            return;
+            }
+        iGroupNameBuf = HBufC::NewL( KMaxGroupNameLength );
+        iGroupName.Set( iGroupNameBuf->Des() );
+        iGroupName.Copy( iGroupPropertiesPC->
+                         GetGroupName( iGroupId ).Left( iGroupName.MaxLength() ) );
+        iOldGroupName = iGroupName.AllocL();
+        CHAT_DP( D_PLAIN_LIT( "iOldGroupName = %S" ), iOldGroupName );
+
+        iTopicBuf = HBufC::NewL( KMaxGroupTopicLength );
+        iTopic.Set( iTopicBuf->Des() );
+        iTopic.Copy( iGroupPropertiesPC->GetTopic().Left( iTopic.MaxLength() ) );
+        iOldTopic = iTopic.AllocL();
+
+        iWelcomeNoteBuf = HBufC::NewL( KMaxWelcomeNoteLength );
+        iWelcomeNote.Set( iWelcomeNoteBuf->Des() );
+        iWelcomeNote.Copy( iGroupPropertiesPC->
+                           GetWelcomeNote().Left( iWelcomeNote.MaxLength() ) );
+        iOldWelcomeNote = iWelcomeNote.AllocL();
+
+        if ( iBannedUsers.MdcaCount() > 0 )
+            {
+            iIsBannedUsers = ETrue;
+            }
+        iOldIsBannedUsers = iIsBannedUsers;
+
+        iSize = iGroupPropertiesPC->GetMaxNbrOfUsers();
+        iOldSize = iSize;
+
+        iAllowSearch = iGroupPropertiesPC->IsSearchable();
+        iOldAllowSearch = iAllowSearch;
+
+        iAllowWhisper = iGroupPropertiesPC->IsPrivateAllowed();
+        iOldAllowWhisper = iAllowWhisper;
+
+        iIsOpen = iGroupPropertiesPC->IsOpen();
+
+        iOldIsOpen = iIsOpen;
+
+        if ( iAdmins.MdcaCount() > 1 )
+            {
+            iAdminSelected = ETrue;
+            }
+        iOldAdminSelected = iAdminSelected;
+
+        }
+    else
+        {
+
+        MCASettingsPC* settingsInterfacePC =
+            iAppUi->GetProcessManager().GetSettingsInterface();
+
+        CHAT_DP( D_PLAIN_LIT(
+                     "CCAGroupPropertiesDialog: groupInterfacePC->NumberOfCreatedGroupsDuringSession()" ) );
+        TInt nbrOfChats( iGroupPropertiesPC->NumberOfCreatedGroupsDuringSession() );
+
+        HBufC* baseName = NULL;
+
+
+
+        if ( settingsInterfacePC->GetBoolValuePC( TEnumsPC::EDefaultScreenNameInUse,
+                                                  NULL ) )
+            {
+            CHAT_DP( D_PLAIN_LIT( "CCAGroupPropertiesDialog: settings value" ) );
+            baseName = settingsInterfacePC->GetSapSettingValuePCL(
+                           TEnumsPC::EDefaultScreenName, NULL );
+            }
+        else
+            {
+            CHAT_DP( D_PLAIN_LIT( "CCAGroupPropertiesDialog: no default nickname" ) );
+            TInt atIndex( 0 );
+
+            HBufC* ownUserId = settingsInterfacePC->GetSapSettingValuePCL(
+                                   TEnumsPC::EOwnWVUserID, NULL );
+            CleanupStack::PushL( ownUserId );
+            TPtrC userId( ownUserId->Des() );
+
+            atIndex = userId.Find( KAt );
+            if ( atIndex == KErrNotFound )
+                {
+                atIndex = userId.Length();
+                }
+
+            // check if there is "wv:" in the beginning of user id
+            if ( KWV().CompareC( userId.Left( KWV().Length() ) ) == 0 )
+                {
+                // yup, "wv:" found, take the userid without it
+                baseName = userId.Mid( KWV().Length(),
+                                       atIndex - KWV().Length() ).AllocL();
+                }
+            else
+                {
+                // no "wv:" found, take the user id starting from the beginning
+                baseName = userId.Mid( 0, atIndex ).AllocL();
+                }
+
+            CleanupStack::PopAndDestroy( ownUserId );
+            CHAT_DP( D_CHAT_LIT( "NICKNAME IS HERE ************* : %S" ),
+                     baseName );
+            }
+
+        CleanupStack::PushL( baseName );
+        // adding one because group names cannot start count from 0
+        // minimum allowed value is 1, so for first group group name
+        // count is 1 (0+1)
+        iGroupNameBuf = StringLoader::LoadL(
+                            RSC_CHAT_GROUP_DEFAULT, *baseName, nbrOfChats + 1 );
+
+        CleanupStack::PopAndDestroy( baseName );
+
+        iGroupNameBuf = iGroupNameBuf->ReAlloc( KMaxGroupNameLength );
+        iGroupName.Set( iGroupNameBuf->Des() );
+        iOldGroupName = iGroupName.AllocL();
+
+
+        iTopicBuf = iEikonEnv->AllocReadResourceL(
+                        RSC_CRRSS_CHAT_VARIATION_START_ID +
+                        RSC_CHAT_VARIATION_GROUP_TOPIC );
+        iTopicBuf = iTopicBuf->ReAlloc( KMaxGroupTopicLength );
+        iTopic.Set( iTopicBuf->Des() );
+        iOldTopic = iTopic.AllocL();
+
+
+        iWelcomeNoteBuf = iEikonEnv->AllocReadResourceL(
+                              RSC_CRRSS_CHAT_VARIATION_START_ID +
+                              RSC_CHAT_VARIATION_GROUP_WELCOME_NOTE );
+        iWelcomeNoteBuf = iWelcomeNoteBuf->ReAlloc( KMaxWelcomeNoteLength );
+        iWelcomeNote.Set( iWelcomeNoteBuf->Des() );
+        iOldWelcomeNote = iWelcomeNote.AllocL();
+
+        iSize = IMUtils::IntResourceValueL( RSC_CHAT_VARIATION_GROUP_SIZE );
+        iOldSize = iSize;
+
+
+        iIsBannedUsers = EFalse;
+        iOldIsBannedUsers = iIsBannedUsers;
+
+        iIsOpen = IMUtils::IntResourceValueL(
+                      RSC_CHAT_VARIATION_GROUP_OPEN ) == 1 ?
+                  TEnumsPC::EImpsPropYes : TEnumsPC::EImpsPropNo;
+        iOldIsOpen = iIsOpen;
+
+        iAdminSelected = EFalse;
+        iOldAdminSelected = iAdminSelected;
+
+        iAllowSearch = IMUtils::IntResourceValueL(
+                           RSC_CHAT_VARIATION_GROUP_SEARCH ) == 1 ?
+                       TEnumsPC::EImpsPropYes : TEnumsPC::EImpsPropNo;
+        iOldAllowSearch = iAllowSearch;
+
+        iAllowWhisper = IMUtils::IntResourceValueL(
+                            RSC_CHAT_VARIATION_GROUP_WHISPER ) == 1 ?
+                        TEnumsPC::EImpsPropYes : TEnumsPC::EImpsPropNo;
+        iOldAllowWhisper = iAllowWhisper;
+        }
+
+    CHAT_DP( D_PLAIN_LIT(
+                 "CCAGroupPropertiesDialog: Setting item array populating" ) );
+    iIsEdited = EFalse;
+
+    CAknSettingStyleListBox* listbox =
+        static_cast< CAknSettingStyleListBox* >
+        ( Control( EChatClientControlIdGroupSettings ) );
+
+    // 2 is array granularity, 1 is initial ordinal.
+    iSettingItemArray = new ( ELeave ) CAknSettingItemArray( 2, EFalse, 1 );
+    //2 is array granularity
+    // CodeScanner warning is ignored because array is not used here
+    // and ownership is transferred to list box immediately
+    CArrayPtr< CGulIcon >* icons = new( ELeave ) CArrayPtrFlat< CGulIcon >( KGranularity );    // CSI: 6 # See comment above
+    listbox->ItemDrawer()->ColumnData()->SetIconArray( icons );
+
+    //Setting item for groupname
+    AddTextSettingItemL( R_EDIT_CHAT_GROUP_NAME, RSC_CHAT_GROUP_TITLE,
+                         ESetGroupName, *iGroupNameBuf, iGroupName );
+
+    if ( iEditMode )
+        {
+        HBufC* groupBuf = CCAPCUtils::DisplayId( iGroupId ).AllocLC();
+        TPtr groupId( groupBuf->Des() );
+        AddTextSettingItemL( NULL, RSC_CHAT_GROUP_ID_TITLE,
+                             ESetGroupId, *groupBuf, groupId );
+        CleanupStack::PopAndDestroy( groupBuf );
+        }
+
+    //Setting item for topic
+    AddTextSettingItemL( R_EDIT_CHAT_GROUP_TOPIC,
+                         RSC_CHAT_TOPIC_TITLE,
+                         ESetGroupTopic,
+                         *iTopicBuf,
+                         iTopic );
+
+    //Setting item for welcome note
+    AddTextSettingItemL( R_EDIT_CHAT_GROUP_WELCOMENOTE,
+                         RSC_CHAT_WELCOME_TITLE,
+                         ESetGroupWelcomeNote,
+                         *iWelcomeNoteBuf,
+                         iWelcomeNote );
+
+    //Setting item for group size
+    AddIntegerSettingItemL( R_EDIT_CHAT_GROUP_SIZE,
+                            RSC_CHAT_SIZE_TITLE,
+                            ESetGroupSize,
+                            iSize );
+    //Searchable setting item
+    AddBinarySettingItemL( R_EDIT_CHAT_SEARCH_SETTING,
+                           RSC_CHAT_ALLOW_SEARCH_TITLE,
+                           R_EDIT_CHAT_SEARCH_TEXTS,
+                           ESetGroupAllowSearch,
+                           iAllowSearch );
+
+    //Admin selection setting item
+    AddBinarySettingItemL( R_EDIT_CHAT_ADMIN_SETTING,
+                           RSC_CHAT_ADMIN_TITLE,
+                           R_EDIT_CHAT_ADMIN_TEXTS,
+                           ESetGroupAdminSelected,
+                           ( TEnumsPC::TImpsPropertyBoolPC& )iAdminSelected );
+
+    //Group openess setting item
+    AddBinarySettingItemL( R_EDIT_CHAT_ACCESS_SETTING,
+                           RSC_CHAT_ACCESS_TITLE,
+                           R_EDIT_CHAT_ACCESS_TEXTS,
+                           ESetGroupIsOpen,
+                           /*(TEnumsPC::TImpsPropertyBoolPC&)*/ iIsOpen );
+
+    //Banned users setting item
+
+    AddBinarySettingItemL( R_EDIT_CHAT_BAN_SETTING,
+                           RSC_CHAT_BANNED_TITLE,
+                           R_EDIT_CHAT_BAN_TEXTS,
+                           ESetGroupBannedUsers,
+                           ( TEnumsPC::TImpsPropertyBoolPC& )iIsBannedUsers );
+
+    //Whisper setting item
+    AddBinarySettingItemL( R_EDIT_CHAT_WHISPER_SETTING,
+                           RSC_CHAT_WHISPERING_YES_TITLE,
+                           R_EDIT_CHAT_WHISPER_TEXTS,
+                           ESetGroupAllowWhisper,
+                           iAllowWhisper );
+
+    CTextListBoxModel* model = listbox->Model();
+    model->SetItemTextArray( iSettingItemArray );
+    model->SetOwnershipType( ELbmDoesNotOwnItemArray ); // Ownership retained by us
+
+    iSettingItemArray->RecalculateVisibleIndicesL();
+    listbox->CreateScrollBarFrameL( ETrue );
+    listbox->ScrollBarFrame()->SetScrollBarVisibilityL(
+        CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto );
+    listbox->HandleItemAdditionL();
+    listbox->SetListBoxObserver( this );
+    listbox->UpdateScrollBarsL();
+
+    iTitlePane.SetTitleL( *iGroupNameBuf );
+    CHAT_DP( D_PLAIN_LIT(
+                 "CCAGroupPropertiesDialog::PreLayoutDynInitL() End" ) );
+
+    iListbox =
+        static_cast< CAknSettingStyleListBox* >( Control( EChatClientControlIdGroupSettings ) );
+
+    HandleCBAChangeL();
+    }
+
+
+// ---------------------------------------------------------
+// CCAGroupPropertiesDialog::OkToExitL()
+// Called ok button is pressed
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TBool CCAGroupPropertiesDialog::OkToExitL( TInt aButtonId )
+    {
+    if ( aButtonId == EAknSoftkeyOptions )
+        {
+        DisplayMenuL();
+        return EFalse;
+        }
+
+    if ( aButtonId == EAknSoftkeyEmpty )
+        {
+        // MSK command id when focus on group id
+        return EFalse;
+        }
+
+    if ( aButtonId == EAknSoftkeyEdit )
+        {
+        // MSK command
+        TInt index = iListbox->CurrentItemIndex();
+
+        TInt indexShift = 0;
+        if ( !iEditMode && index >= ESetGroupId )
+            {
+            ++indexShift; // if creating new group, one setting item is missing
+            }
+        TInt shiftedIndex = index + indexShift;
+
+        switch ( shiftedIndex )
+            {
+            case ESetGroupAdminSelected:
+            case ESetGroupIsOpen:
+            case ESetGroupBannedUsers:  // Flowtrough
+                {
+                LaunchCorrectDialog();
+                break;
+                }
+            default:
+                {
+                HandleListBoxEventL( iListbox,
+                                     MEikListBoxObserver::EEventEnterKeyPressed );
+                break;
+                }
+            }
+        return EFalse;
+        }
+
+    if ( iIsEdited )
+        {
+        StoreValuesL();
+
+        // remove admins if creator only selected
+        if ( !iAdminSelected )
+            {
+            TInt count( iAdmins.Count() );
+            if ( count > 1 )
+                {
+                iAdmins.Delete( 1, count - 1 );
+                }
+            }
+
+        // remove bans if user selected no bans
+        if ( !iIsBannedUsers )
+            {
+            iBannedUsers.Reset();
+            }
+
+        // remove access if the group is open to everyone
+        if ( !iIsOpen )
+            {
+            iUserList.Reset();
+            }
+        }
+
+    return ETrue;
+    }
+
+
+// ---------------------------------------------------------
+// CCAGroupPropertiesDialog::StoreValuesL()
+// Stores the values that are changed
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CCAGroupPropertiesDialog::StoreValuesL()
+    {
+    TInt count( iSettingItemArray->Count() );
+    for ( TInt ii( 0 ); ii < count; ++ii )
+        {
+        if ( ii != 1 || !iEditMode )
+            {
+            // in edit mode the second item cannot be edited,
+            // so don't save it
+            iSettingItemArray->At( ii )->StoreL();
+            }
+        }
+
+    // store the values to new properties so that we don't change anything
+    // locally.
+    iGroupPropertiesPC->SetGroupNameL( *iGroupNameBuf );
+    iGroupPropertiesPC->SetTopicL( *iTopicBuf );
+    iGroupPropertiesPC->SetWelcomeL( *iWelcomeNoteBuf );
+
+    iGroupPropertiesPC->SetMaxNbrOfUsers( iSize );
+    iGroupPropertiesPC->SetPrivateAllowed( iAllowWhisper );
+    iGroupPropertiesPC->SetSearchable( iAllowSearch );
+    iGroupPropertiesPC->SetOpen( iIsOpen );
+
+    CHAT_DP( D_CHAT_LIT( "--isOpen: %d--" ), iIsOpen );
+    CHAT_DP( D_CHAT_LIT( "--AllowWhisper: %d--" ), iAllowWhisper );
+    iAreItemsEdited = AreItemsEdited();
+    }
+
+// ---------------------------------------------------------
+// CCAGroupPropertiesDialog::OfferKeyEventL()
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TKeyResponse CCAGroupPropertiesDialog::OfferKeyEventL( const TKeyEvent& aKeyEvent,
+                                                       TEventCode aType )
+    {
+    if ( aKeyEvent.iCode == EKeyEscape )
+        {
+        TryExitL( EAknSoftkeyCancel );
+        return EKeyWasConsumed;
+        }
+
+    else if ( aKeyEvent.iCode == EKeyPhoneSend )
+        {
+        return EKeyWasConsumed;
+        }
+
+    TKeyResponse res = iListbox->OfferKeyEventL( aKeyEvent, aType );
+
+    if ( aKeyEvent.iCode == EKeyUpArrow || aKeyEvent.iCode == EKeyDownArrow )
+        {
+        HandleCBAChangeL();
+        }
+
+    return res;
+    }
+
+// ---------------------------------------------------------
+// CCAGroupPropertiesDialog::DoLaunchCorrectDialogL()
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TBool CCAGroupPropertiesDialog::DoLaunchCorrectDialogL()
+    {
+    TInt index ( iListbox->CurrentItemIndex() );
+    if ( index < 0 || index >= iListbox->Model()->NumberOfItems() )
+        {
+        //if index is not valid then we don't need make any actions to items
+        return EFalse;
+        }
+
+    // return value of launched dialogs
+    TInt returnVal( 0 );
+
+    TInt indexShift( 0 );
+    if ( !iEditMode && index >= ESetGroupId )
+        {
+        ++indexShift; // if creating new group, one setting item is missing
+        }
+
+    TInt shiftedIndex( index + indexShift );
+
+
+    switch ( shiftedIndex )
+        {
+        case ESetGroupAdminSelected:
+            {
+            returnVal = LaunchDialogHelperL( R_EDIT_CHAT_ADMIN_POPUP,
+                                             R_EDIT_CHAT_ADMIN_SETTING,
+                                             iAdminSelected,
+                                             &CCAGroupPropertiesDialog::LaunchEditingRightsListDialogL );
+            CHAT_DP( D_CHAT_LIT( "IsAdminStatusModified? : %d" ),
+                     iIsAdminStatusModified );
+            break;
+            }
+
+        case ESetGroupIsOpen:
+            {
+            returnVal = LaunchDialogHelperL( R_EDIT_CHAT_ACCESS_POPUP,
+                                             R_EDIT_CHAT_ACCESS_SETTING,
+                                             ( TInt& ) iIsOpen,
+                                             &CCAGroupPropertiesDialog::LaunchAccessListDialogL,
+                                             TEnumsPC::EImpsPropYes );
+            CHAT_DP( D_CHAT_LIT( "IsOpen? : %d" ), iIsOpen );
+            break;
+            }
+
+        case ESetGroupBannedUsers:
+            {
+            returnVal = LaunchDialogHelperL( R_EDIT_CHAT_BAN_POPUP,
+                                             R_EDIT_CHAT_BAN_SETTING,
+                                             iIsBannedUsers,
+                                             &CCAGroupPropertiesDialog::LaunchBannedUsersListDialogL );
+            CHAT_DP( D_CHAT_LIT( "IsBannedUsers? : %d" ), iIsBannedUsers );
+            break;
+            }
+        default:
+            {
+            // no dialog to launch
+            return EFalse;
+            }
+        }
+    // don't update the view if dialog was exited abnormally
+    if ( returnVal != EAknSoftkeyCancel )
+        {
+        // update all settings items
+        TInt count( iSettingItemArray->Count() );
+
+        for ( TInt ii( 0 ); ii < count; ++ii )
+            {
+            if ( ii != 1 || !iEditMode )
+                {
+                // in edit mode the second item cannot be edited,
+                // so don't save it
+                iSettingItemArray->At( ii )->LoadL();
+                iSettingItemArray->At( ii )->UpdateListBoxTextL();
+                }
+            }
+
+        iListbox->DrawItem( index );
+
+        // restore the title pane text correctly even when Back was pressed
+        iTitlePane.ClearNaviPaneL();
+        iTitlePane.SetTitleL( *iGroupNameBuf );
+
+        if ( AreItemsEdited() )
+            {
+            iIsEdited = ETrue;
+            HandleCBAChangeL();
+            }
+        }
+
+    return ETrue;
+    }
+
+// ---------------------------------------------------------
+// CCAGroupPropertiesDialog::LaunchCorrectDialogL()
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CCAGroupPropertiesDialog::LaunchCorrectDialog()
+    {
+    if ( !iDialogLaunchCallback->IsActive() )
+        {
+        iDialogLaunchCallback->Start( TCallBack( LaunchDlgCallBack, this ) );
+        }
+    }
+
+// ---------------------------------------------------------
+// CCAGroupPropertiesDialog::LaunchDlgCallBack()
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TInt CCAGroupPropertiesDialog::LaunchDlgCallBack( TAny* aDlg )
+    {
+    CCAGroupPropertiesDialog* dlg =
+        static_cast<CCAGroupPropertiesDialog*>( aDlg );
+    //Not using iAppUi, coz it gives compilation error in using a non-static
+    //variable in a static method
+    CCAAppUi *appUi = static_cast<CCAAppUi*>( CCoeEnv::Static()->AppUi() );
+    appUi->ReportPendingDialog();
+    TRAP_IGNORE( dlg->DoLaunchCorrectDialogL() )
+    appUi->ReportPendingDialogClosed();
+    return EFalse;
+    }
+
+
+/**
+ * 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 CCAGroupPropertiesDialog::GetHelpContext(
+    TCoeHelpContext& aContext ) const
+    {
+    aContext.iMajor = KUidChatClient;
+    aContext.iContext = KIMNG_HLP_CREATECHAT;
+    }
+
+
+// End of file