cbs/cbsui/UiSrc/CCbsUiTopicListView.cpp
branchRCL_3
changeset 19 7d48bed6ce0c
parent 18 594d59766373
child 20 987c9837762f
--- a/cbs/cbsui/UiSrc/CCbsUiTopicListView.cpp	Thu Aug 19 10:28:14 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1071 +0,0 @@
-/*
-* Copyright (c) 2002 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: 
-*  Implementation of CCbsUiTopicLIstView class.
-*
-*
-*/
-
-
-// INCLUDES
-#include <AknUtils.h>           // AknTextUtils
-#include <bldvariant.hrh>       // for feature flags
-#include <featmgr.h>            // for feature manager
-#include <e32def.h>
-#include <akntitle.h>
-#include <aknViewAppUi.h>
-#include <aknnavide.h>
-#include <akntitle.h>
-#include <avkon.hrh>
-#include <barsread.h>
-#include <StringLoader.h>
-#include <eikmenup.h>
-#include <aknnotewrappers.h>
-#include <hlplch.h>
-#include <cbsuiApp.rsg>
-#include "MCbs.h"
-#include "CCbsUiTopicListView.h"
-#include "CCbsUiTopicListViewContainer.h"
-#include "CCbsUiEditTopicDlg.h"
-#include "Cbsuiapp.hrh"
-#include "CbsUiPanic.h"
-#include "CbsUiConstants.h"
-#include "CCbsUiAddFromIndexDialog.h"
-#include "CbsUiDebug.h"
-#include <AknNotifyStd.h>       // ECellBroadcastNotification
-#include <AknSoftNotifier.h>    // Soft Notification API
-
-
-// CONSTANTS
-const TInt KTopicNameLenght = 20;
-const TInt KCountOfAllTopics = 1000;
-const TInt KIndexTopic = 0;
-const TInt KTwoTopics = 2;
-
-// MODULE DATA STRUCTURES
-enum TMessageCounts { EManyNewMessages = -1, ENoNewMessages = 0, EOneNewMessage = 1 };
-
-
-// ================= MEMBER FUNCTIONS =======================
-
-// C++ default constructor can NOT contain any code, that
-// might leave.
-//
-CCbsUiTopicListView::CCbsUiTopicListView( MCbs& aServer ) : iServer( aServer ), iFocusState( ENoFocusUpdate )
-    {
-    }
-
-// Symbian OS default constructor can leave.
-void CCbsUiTopicListView::ConstructL()
-    {	
-    BaseConstructL(R_CBSUI_TOPICLISTVIEW);
-    iTopicNumberList = new (ELeave) TCbsUiTopicNumberList(KNumberOfStandardTopics);
-    CEikStatusPane* statusPane = StatusPane();
-    iNaviPane = STATIC_CAST( CAknNavigationControlContainer*, statusPane->
-        ControlL( TUid::Uid(EEikStatusPaneUidNavi) ) );
-    __ASSERT_DEBUG( iNaviPane, CbsUiPanic(ENaviPaneError) );    
-    }
-
-// Two-phased constructor.
-CCbsUiTopicListView* CCbsUiTopicListView::NewL( MCbs& aServer )
-    {
-    CCbsUiTopicListView* self = new (ELeave) CCbsUiTopicListView(aServer);
-    CleanupStack::PushL(self);
-    self->ConstructL();
-    CleanupStack::Pop();
-    return self;
-    }
-
-// Destructor
-CCbsUiTopicListView::~CCbsUiTopicListView()
-    {
-    if ( iContainer )
-        {
-        AppUi()->RemoveFromViewStack(*this, iContainer);
-        }
-    delete iContainer;
-    delete iDecoratedLabel;
-    delete iTopicNumberList;
-    delete iBackgroundNote;
-    }
-
-// ---------------------------------------------------------
-// CCbsUiTopicListView::ReloadTopicsL
-// 
-// 
-// ---------------------------------------------------------
-//
-void CCbsUiTopicListView::ReloadTopicsL()
-    {
-    __ASSERT_DEBUG( iTopicNumberList, CbsUiPanic(ETopicHandleError) );
-    PrepareReloading();
-    ReloadL();
-    EndReloadingL();
-    }
-
-// ---------------------------------------------------------
-// CCbsUiTopicListView::PrepareReloading
-// 
-// ---------------------------------------------------------
-//
-void CCbsUiTopicListView::PrepareReloading()
-    {
-    if ( iContainer )
-        {
-        iContainer->ReloadStarts();
-        }
-    }
-
-// ---------------------------------------------------------
-// CCbsUiTopicListView::ReloadL
-// 
-// ---------------------------------------------------------
-//
-void CCbsUiTopicListView::ReloadL()
-    {
-    iTopicNumberList->Reset();
-    
-    TInt count(0);
-    iServer.GetTopicCount(count);
-    __ASSERT_DEBUG( count >= 0, CbsUiPanic(ETopicCountError) );
-    
-    TCbsTopic topic;
-    
-    for ( TInt index(0); index < count; index++ )
-        {
-        // First, get the topic.
-        TInt rr( iServer.GetTopic(index, topic) );
-        __CBSUI_ASSERT( rr == KErrNone, CbsUiPanic(EErrTopicNotFound) );
-        
-        if ( rr == KErrNone )
-            {
-            // Offer the topic to the view.
-            if ( iContainer )
-                {
-                iContainer->ReloadOfferTopicL(topic);
-                }
-            
-            // And append to the handles list.
-            iTopicNumberList->AppendL(topic.iNumber);
-            }
-        }
-    }
-
-void CCbsUiTopicListView::EndReloadingL()
-    {
-    iContainer->ReloadEndsL();
-    }
-
-// ---------------------------------------------------------
-// CCbsUiTopicListView::SetFocusAfterReload
-// 
-// ---------------------------------------------------------
-//
-void CCbsUiTopicListView::SetFocusAfterReload( TTopicListViewFocusState aFocusState )
-    {
-    if ( aFocusState == ENoFocusUpdate )
-        {
-        return;
-        }
-    
-    // if the focus need to be changed
-    TInt focusedItem(KCbsErrValue);
-    
-    TBool setFocusToFirstItem(
-        (aFocusState == ESetFocusToFirstItem) ||
-        (FindTopicIndexByNumber(focusedItem, iCurrentTopicNumber) != KErrNone)
-        );
-    
-    if ( setFocusToFirstItem )
-        {
-        // If there is some error let's try to put focus to first item
-        focusedItem = 0;
-        }
-    
-    __ASSERT_DEBUG( focusedItem != KCbsErrValue, CbsUiPanic(EErrInvalidValue) );    
-    
-    SetFocusToTopic(focusedItem);
-    }
-
-// ---------------------------------------------------------
-// CCbsUiTopicListView::SetFocusToTopic
-// 
-// ---------------------------------------------------------
-//
-void CCbsUiTopicListView::SetFocusToTopic( TInt aIndex )
-    {
-    if ( iTopicNumberList->Count() <= 0)
-        {
-        return;
-        }
-    
-    __ASSERT_DEBUG( aIndex >= 0 && aIndex < iTopicNumberList->Count(), 
-        CbsUiPanic(EErrIndexOutOfBounds) );
-    
-    if (iContainer)
-        {
-        // first one in the list is the newest
-        iContainer->SetCurrentItemIndex(aIndex);
-        }
-    }
-
-// ---------------------------------------------------------
-// CCbsUiTopicListView::UpdateCurrentTopicAfterDeletion
-// 
-// ---------------------------------------------------------
-//
-void CCbsUiTopicListView::UpdateCurrentTopicAfterDeletion( TCbsTopicNumber aDeletedTopic )
-    {
-    
-    TInt topicPosition(-1);
-    TInt err( FindTopicIndexByNumber(topicPosition, aDeletedTopic) );
-    
-    TBool isLastTopic(  
-        ( (topicPosition + 1) == TotalTopics() ) &&
-        (topicPosition >= 0)
-        );
-    
-    if ( isLastTopic )
-        {
-        // then previous topic should be focused after deletion
-        topicPosition--;
-        }
-    else
-        {
-        // then the next topic will be focused after deletion
-        topicPosition++;
-        }
-    
-    // if there is some error lets put the focus to the first item
-    if ( topicPosition >= TotalTopics() ||
-        topicPosition < 0 || 
-        err != KErrNone )
-        {
-        topicPosition = 0;
-        }
-    
-    __ASSERT_DEBUG( err == KErrNone, CbsUiPanic(EErrMsgNotFound) );
-    
-    iCurrentTopicNumber = iTopicNumberList->At(topicPosition);
-    }
-
-// ---------------------------------------------------------
-// CCbsUiTopicListView::TotalTopics
-// 
-// ---------------------------------------------------------
-//
-TInt CCbsUiTopicListView::TotalTopics() const
-    {
-    __ASSERT_DEBUG( iTopicNumberList->Count() >= 0, CbsUiPanic(EErrTopicsCountError) );
-    return iTopicNumberList->Count();
-    }
-
-// ---------------------------------------------------------
-// CCbsUiTopicListView::UpdateTitlePaneL
-// 
-// ---------------------------------------------------------
-//
-void CCbsUiTopicListView::UpdateTitlePaneL() const
-    {
-    CEikStatusPane *sp = StatusPane();
-    CAknTitlePane *title = STATIC_CAST(CAknTitlePane*, sp->
-        ControlL( TUid::Uid(EEikStatusPaneUidTitle) ) );
-    
-    __ASSERT_DEBUG( sp && title, CbsUiPanic(EStatusOrTitlePaneError) );
-    
-    TResourceReader titleReader;
-    iCoeEnv->CreateResourceReaderLC(titleReader, R_QTN_CB_TITLE_CBS);
-    title->SetFromResourceL(titleReader);
-    CleanupStack::PopAndDestroy(); // titleReader
-    }
-
-// ---------------------------------------------------------
-// CCbsUiTopicListView::UpdateNaviPaneL
-// 
-// 
-// ---------------------------------------------------------
-//
-void CCbsUiTopicListView::UpdateNaviPaneL()
-    {	
-    
-    if ( iAddFromIndexDialogIsActive )
-        {
-        // No need to update navi pane
-        return;
-        }
-    
-    // let's keep a address of the previous 
-    // label so it is possible to delete 
-    // it, after the new label has been created.
-    CAknNavigationDecorator* oldLabel = iDecoratedLabel;    
-    
-    TInt unreadMessages(0);
-    iServer.GetUnreadMessageCount(unreadMessages);
-    
-    CreateNewLabelL( GetInfoResourceId(unreadMessages), unreadMessages );
-    
-    // Old label has to be deleted and 
-    // the final label is destroyed in the destructor.
-    if ( oldLabel )
-        {
-        delete oldLabel;
-        }	
-    }
-
-// ---------------------------------------------------------
-// CCbsUiTopicListView::GetInfoResourceId
-// 
-// 
-// ---------------------------------------------------------
-//
-TInt CCbsUiTopicListView::GetInfoResourceId( TInt aUnreadMessages ) const
-    {
-    __ASSERT_DEBUG( aUnreadMessages >= 0, CbsUiPanic(EErrInvalidValue) );
-    
-    TInt result(EManyNewMessages);
-    
-    switch ( aUnreadMessages )
-        {
-        case ENoNewMessages:
-            result = R_CB_TL_NO_NEW_MESSAGES;
-            break;
-        case EOneNewMessage:
-            result = R_CB_TL_ONE_NEW_MESSAGE;
-            break;
-        default:
-            break;
-        }  
-    
-    return result;
-    }
-
-// ---------------------------------------------------------
-// CCbsUiTopicListView::CreateNewLabelL
-// 
-// 
-// ---------------------------------------------------------
-//
-void CCbsUiTopicListView::CreateNewLabelL( TInt aResourceId, TInt aUnreadMessages )
-    {
-    __ASSERT_DEBUG( 
-        aResourceId == EManyNewMessages || 
-        aResourceId == R_CB_TL_NO_NEW_MESSAGES ||
-        aResourceId == R_CB_TL_ONE_NEW_MESSAGE, 
-        CbsUiPanic(EErrInvalidValue) );
-    
-    HBufC* stringHolder = NULL;
-    
-    if ( aResourceId == EManyNewMessages )
-        {
-        stringHolder = StringLoader::LoadLC( 
-            R_CB_TL_NEW_MESSAGES, aUnreadMessages);
-        }
-    else 
-        {
-        stringHolder = iCoeEnv->AllocReadResourceLC(aResourceId);
-        }
-    
-    __ASSERT_DEBUG( stringHolder, CbsUiPanic(EErrNullPointer) );
-    if ( stringHolder )
-        {
-        iDecoratedLabel = iNaviPane->CreateNavigationLabelL(*stringHolder);
-        CleanupStack::PopAndDestroy(); // stringholder
-        }
-    
-    __ASSERT_DEBUG( iDecoratedLabel, CbsUiPanic(EErrNullPointer) );
-    iNaviPane->PushL(*iDecoratedLabel);
-    }
-
-// ---------------------------------------------------------
-// CCbsUiTopicListView::ShowTopicQueryL
-// 
-// 
-// ---------------------------------------------------------
-//
-void CCbsUiTopicListView::ShowTopicQueryL( TBool aType, 
-                                          TDes& aTopicName, 
-                                          TDes& aTopicNumber )
-    {
-    CCbsUiEditTopicDlg* dlg = CCbsUiEditTopicDlg::NewL(
-        aTopicName, aTopicNumber, *this, aType );
-    dlg->ExecuteLD( R_EDIT_TOPIC_QUERY );
-    }
-
-// ---------------------------------------------------------
-// CCbsUiTopicListView::ShowEditTopicQueryL
-// 
-// 
-// ---------------------------------------------------------
-//
-void CCbsUiTopicListView::ShowEditTopicQueryL()
-    {
-    TCbsTopic topic;
-    TInt err( iServer.FindTopicByNumber( iCurrentTopicNumber, topic ) );
-    
-    if ( err != KErrNone )
-        {
-        User::Leave( KErrNone );
-        }
-    
-    TBuf<KTopicNumberWidth> number;
-    number.AppendNum( TInt( topic.iNumber ) );
-    AknTextUtils::DisplayTextLanguageSpecificNumberConversion( number );  
-    ShowTopicQueryL( EFalse, topic.iName, number );
-    }
-
-// ---------------------------------------------------------
-// CCbsUiTopicListView::EditTopic
-// 
-// 
-// ---------------------------------------------------------
-//
-TInt CCbsUiTopicListView::EditTopic( TBool aType, 
-                                    TCbsTopicNumber aNumber, 
-                                    const TCbsTopicName aName )
-    {
-    TInt ret( KErrGeneral );
-    
-    if ( aType ) // add query
-        {
-        ret = AddTopic(aNumber, aName);
-        }
-    else // edit query
-        {
-        ret = UpdateTopic( iCurrentTopicNumber, aNumber, aName );
-        if( ret == KErrNone )
-            {
-            iCurrentTopicNumber = aNumber;
-            }
-        }
-    
-    return ret;
-    }
-
-// ---------------------------------------------------------
-// CCbsUiTopicListView::CheckNewTopicCountL
-// 
-// 
-// ---------------------------------------------------------
-//
-void CCbsUiTopicListView::CheckNewTopicCountL()
-    {
-    iNewTopicsCount = GetNewTopicsCount();
-    
-    __CBSUI_ASSERT( iNewTopicsCount >= 0, CbsUiPanic(EErrInvalidValue) );
-    
-    if ( iNewTopicsCount > ENoNewMessages )
-        {
-        if ( !iBackgroundNote )
-            {
-            iBackgroundNote = CIdle::NewL(CActive::EPriorityIdle);
-            }
-        
-        TCallBack cb(ActivateBackgroundNoteL, this);
-        iBackgroundNote->Start(cb);
-        }
-    
-    }
-
-// ---------------------------------------------------------
-// CCbsUiTopicListView::GetNewTopicsCount
-// 
-// 
-// ---------------------------------------------------------
-//
-TInt CCbsUiTopicListView::GetNewTopicsCount()
-    {
-    TInt newTopics(KCbsErrValue);
-    if ( iServer.Connected() )
-        {
-#ifdef _DEBUG
-        TInt ret = 
-#endif
-            iServer.GetNewTopicsCount(newTopics);
-        
-        __CBSUI_ASSERT( ret == KErrNone, CbsUiPanic(EErrTopicsCountError) );
-        }
-    
-    return newTopics;
-    }
-
-// ---------------------------------------------------------
-// CCbsUiTopicListView::MarkCurrentHandle
-// 
-// 
-// ---------------------------------------------------------
-//
-void CCbsUiTopicListView::MarkCurrentHandle()
-    {
-    TInt index( iContainer->CurrentPosition() );
-    
-    if ( index >= 0 && iTopicNumberList->Count() > index )
-        {
-        iCurrentTopicNumber = iTopicNumberList->At( index );
-        }
-    }
-
-// ---------------------------------------------------------
-// CCbsUiTopicListView::TopicListChangedL
-// 
-// 
-// ---------------------------------------------------------
-//
-void CCbsUiTopicListView::TopicListChangedL( TCbsTopicListEvent /*aEvent*/, TCbsTopicNumber /*aTopicNumber*/ )
-    {
-    if ( iContainer )
-        {
-        ReloadTopicsL();
-        UpdateNaviPaneL();
-        SetFocusAfterReload(iFocusState);
-        iFocusState = ENoFocusUpdate;
-        }
-    }
-
-// ---------------------------------------------------------
-// CCbsUiTopicListView::HandleCommandL
-// 
-// 
-// ---------------------------------------------------------
-//
-void CCbsUiTopicListView::HandleCommandL( TInt aCommandId )
-    {
-    
-    switch ( aCommandId )
-        {
-        case ECbsUiappCmdSwitchOpen:			
-            {
-            // To open a right topic
-            MarkCurrentHandle();
-            ActivateTopicViewL();
-            break;
-            }
-        case ECbsUiappCmdSwitchSubscribe:
-            {
-            // Change subscription status
-            User::LeaveIfError(
-                iServer.ChangeTopicSubscriptionStatus( 
-                iCurrentTopicNumber, ETrue ) );
-            
-            iFocusState = ESetFocusToCurrentHandle;
-            break;
-            }     
-        case ECbsUiappCmdSwitchUnsubscribe:
-            {
-            // Change subscription status
-            User::LeaveIfError( 
-                iServer.ChangeTopicSubscriptionStatus( 
-                iCurrentTopicNumber, EFalse ));
-            iFocusState = ESetFocusToCurrentHandle;
-            break;
-            }            
-        case ECbsUiappCmdSwitchHotmark: // Implementation is almost the same with
-            // ECbsUiappCmdSwitchHotmark and 
-            // ECbsUiappCmdSwitchUnhotmark.
-        case ECbsUiappCmdSwitchUnhotmark:
-            {
-            // Requires refresh
-            TBool hot(EFalse);
-            
-            if ( aCommandId == ECbsUiappCmdSwitchHotmark )
-                {
-                hot = ETrue;
-                TInt focusedItemIndex;
-                if(FindTopicIndexByNumber(focusedItemIndex, iCurrentTopicNumber) == KErrNone)
-                    {
-                    TCbsTopic topic;
-                    // First, get the topic.
-                    TInt rr( iServer.GetTopic(focusedItemIndex, topic) );
-                    if ( rr == KErrNone )
-                        {
-                        if ( !topic.iSubscribed )
-                            {
-                            // Change subscription status to subscribed
-                            User::LeaveIfError(iServer.ChangeTopicSubscriptionStatus( 
-                                iCurrentTopicNumber, ETrue )) ;
-                            }
-                        }
-                    }
-                }
-            
-            User::LeaveIfError(iServer.ChangeTopicHotmarkStatus(iCurrentTopicNumber, hot));
-            iFocusState = ESetFocusToCurrentHandle;
-            break;
-            }            
-        case ECbsUiappCmdSwitchSettings:
-            {                            
-            ActivateSettingsViewL();
-            break;			
-            }
-            // Topic sub menu pop up window commands.
-        case ECbsUiappCmdSwitchAddManually:
-            {
-            TBuf<KTopicNameLenght> name;	
-            TBuf<KTopicNumberWidth> number;
-            
-            ShowTopicQueryL( ETrue, name, number );
-            AknTextUtils::ConvertDigitsTo( number, EDigitTypeWestern );             
-            
-            TInt topicNumber(KCbsErrValue);
-            if ( number.Length() > 0 )
-                {
-                TLex lex(number);                
-                TInt err( lex.Val(topicNumber) );
-                
-                if ( err == KErrNone )
-                    {
-                    SetCurrentTopicNumber( (TCbsTopicNumber) topicNumber );
-                    }
-                __CBSUI_ASSERT( err == KErrNone, CbsUiPanic(EErrNotANumber) );
-                }
-            
-            iFocusState = ESetFocusToCurrentHandle;
-            break;
-            }
-        case ECbsUiappCmdSwitchAddFromIndex:
-            {		
-#ifdef _DEBUG
-            GetNewTopicsCount(); // just to reset
-#endif
-            // topic detection need to shut down when 
-            // add from index dialog is shown.
-            TBool topicDetection;
-            iServer.GetTopicDetectionStatus(topicDetection);
-            
-            if ( topicDetection )
-                {
-                User::LeaveIfError( iServer.SetTopicDetectionStatus(EFalse) );
-                }
-            
-            iAddFromIndexDialogIsActive = ETrue;
-            ActivateAddFromIndexViewL();
-            
-            __ASSERT_DEBUG(GetNewTopicsCount() == 0, CbsUiPanic(ETopicCountError) );
-            
-            iAddFromIndexDialogIsActive = EFalse;
-            UpdateTitlePaneL();
-            UpdateNaviPaneL();
-            
-            if ( topicDetection )
-                {
-                User::LeaveIfError( iServer.SetTopicDetectionStatus(topicDetection) );
-                }
-            
-            iFocusState = ESetFocusToCurrentHandle;
-            break;
-            }
-        case ECbsUiappCmdSwitchEdit:
-            {
-            ShowEditTopicQueryL();
-            iFocusState = ESetFocusToCurrentHandle;
-            break;
-            }
-        case ECbsUiappCmdSwitchDelete:
-            {            
-            if ( iCurrentTopicNumber != KIndexTopic )
-                {                
-                CAknQueryDialog* dlg = CAknQueryDialog::NewL();
-                
-                if ( dlg->ExecuteLD(R_DELETE_TOPIC_CONFIRMATION_QUERY) )
-                    {
-                    TInt unreadHotmarkedMessages;		         
-                    User::LeaveIfError(
-                        iServer.DeleteTopic(iCurrentTopicNumber) );
-                    UpdateCurrentTopicAfterDeletion(iCurrentTopicNumber);
-                    unreadHotmarkedMessages = iServer.NumberOfUnreadHotmarkedMessages();
-                    if( unreadHotmarkedMessages <= 0 )
-                        {
-                        CAknSoftNotifier* notifier = CAknSoftNotifier::NewLC();
-                        notifier->CancelSoftNotificationL( ECellBroadcastNotification);
-                        CleanupStack::PopAndDestroy( notifier );
-                        }
-                    }
-                iFocusState = ESetFocusToCurrentHandle;
-                }
-            break;
-            }
-        case ECbsUiappCmdSwitchDeleteAll:
-            {
-            TInt queryOk;
-            CAknQueryDialog* dlg = CAknQueryDialog::NewL();
-            queryOk= dlg->ExecuteLD(R_DELETE_ALL_TOPICS_CONFIRMATION_QUERY );
-            
-            if( queryOk )
-                {             
-                User::LeaveIfError( iServer.DeleteAllTopics() );
-                CAknSoftNotifier* notifier = CAknSoftNotifier::NewLC(); // on CS
-                notifier->CancelSoftNotificationL( ECellBroadcastNotification);
-                CleanupStack::PopAndDestroy( notifier );
-                }
-            iFocusState = ESetFocusToCurrentHandle;
-            break;            
-            }
-        case EAknCmdHelp:
-            AppUi()->HandleCommandL(aCommandId);
-            break;
-        case EAknSoftkeyExit: // same functionality
-        case EAknCmdExit:	
-            {
-            ( (MEikCommandObserver*)AppUi() )->ProcessCommandL(EAknCmdExit);
-            break;
-            }
-        default:
-            break;
-        }
-    }
-
-
-
-// ---------------------------------------------------------
-// CCbsUiTopicListView::HandleRectChangeInContainer
-//
-//
-// ---------------------------------------------------------
-//
-void CCbsUiTopicListView::HandleRectChangeInContainer()
-    {
-    if ( iContainer )
-        {
-        iContainer->SetRect( ClientRect() );
-        }
-    }
-
-
-
-
-// ---------------------------------------------------------
-// CCbsUiTopicListView::DoActivateL
-// 
-// 
-// ---------------------------------------------------------
-//
-void CCbsUiTopicListView::DoActivateL( const TVwsViewId& /*aPrevViewId*/,
-                                       TUid aCustomMessageId,
-                                       const TDesC8& aCustomMessage )
-    {
-    if ( !iContainer )
-        {
-        iContainer = CCbsUiTopicListViewContainer::NewL( *this, ClientRect() );
-        AppUi()->AddToViewStackL( *this, iContainer );
-        }        
-
-    TTopicListViewFocusState focus = ESetFocusToFirstItem;
-
-    if ( aCustomMessageId == KSetFocusToId )
-        {
-        focus = ESetFocusToCurrentHandle;
-        SetCurrentTopicNumber(aCustomMessage);
-        }
-    else if ( aCustomMessageId == KSetFocusToCurrentId )
-        {
-        focus = ESetFocusToCurrentHandle;
-        }
-    else 
-        {
-        focus = ESetFocusToFirstItem;
-        }
-    
-    ReloadTopicsL();
-    SetFocusAfterReload(focus);
-    UpdateTitlePaneL();
-    UpdateNaviPaneL();
-    iContainer->ActivateL();
-    }
-
-
-// ---------------------------------------------------------
-// CCbsUiTopicListView::AddTopic
-// 
-// 
-// ---------------------------------------------------------
-//
-TInt CCbsUiTopicListView::AddTopic( const TCbsTopicNumber& aNumber, const TCbsTopicName& aName )
-    {
-    __ASSERT_DEBUG( &aName, CbsUiPanic(EErrNullPointer) );
-
-    TCbsTopic topic;
-    topic.iHotmarked = EFalse;
-    topic.iName = aName;
-    topic.iNumber = aNumber;
-    topic.iProtected = EFalse;
-    topic.iSavedMessages = 0;
-    topic.iUnreadMessages = 0;
-    topic.iSubscribed = 0;
-    return iServer.AddTopic( topic );
-    }
-
-// ---------------------------------------------------------
-// CCbsUiTopicListView::UpdateTopic
-// 
-// 
-// ---------------------------------------------------------
-//
-TInt CCbsUiTopicListView::UpdateTopic( const TCbsTopicNumber& aOldNumber, 
-                                       const TCbsTopicNumber& aNumber,
-                                       const TCbsTopicName& aName )
-    {
-    __ASSERT_DEBUG( &aName, CbsUiPanic(EErrNullPointer) );
-    return iServer.ChangeTopicNameAndNumber( aOldNumber, aNumber, aName );
-    }
-
-// ---------------------------------------------------------
-// CCbsUiTopicListView::DoDeactivate
-// 
-// 
-// ---------------------------------------------------------
-//
-void CCbsUiTopicListView::DoDeactivate()
-    {
-    if ( iContainer )
-        {
-	AppUi()->RemoveFromViewStack( *this, iContainer );
-        }
-    delete iContainer;
-    iContainer = NULL;
-    }
-
-void CCbsUiTopicListView::ViewActivatedL(
-            const TVwsViewId& aPrevViewId,
-            TUid aCustomMessageId,const 
-            TDesC8& aCustomMessage)
-    {
-    CheckNewTopicCountL();
-    CAknView::ViewActivatedL(aPrevViewId, aCustomMessageId, aCustomMessage);
-    }
-
-void CCbsUiTopicListView::ViewDeactivated()
-    {
-    // just to update
-    GetNewTopicsCount();
-    }
-
-// ---------------------------------------------------------
-// CCbsUiTopicListView::DynInitMenuPaneL
-// 
-// 
-// ---------------------------------------------------------
-//
-void CCbsUiTopicListView::DynInitMenuPaneL( TInt aResourceId,
-                                            CEikMenuPane* aMenuPane )
-    {  
-    __ASSERT_DEBUG( aMenuPane, CbsUiPanic( EMenuPaneNullError ) );
-
-    TCbsTopic topic;
-    TInt ret( iServer.GetTopic(iContainer->CurrentPosition() , topic) );
-
-    // If topic doesn't exists it is better to leave and close the 
-    // menu.
-    User::LeaveIfError(ret); 
-
-    if ( aResourceId == R_CBSUI_TOPICLISTVIEW_MENU )
-        {        
-        MarkCurrentHandle(); // to freeze a selected item
-        
-        // If topic is subscribed,..
-        if ( topic.iSubscribed )
-            {
-            // then remove subscribed item.
-            aMenuPane->DeleteMenuItem( ECbsUiappCmdSwitchSubscribe );
-            }
-        else
-            {
-            // otherwise remove unsubscribed item.
-            aMenuPane->DeleteMenuItem( ECbsUiappCmdSwitchUnsubscribe );
-            }
-        
-        // And the same for hotmark/unhotmark.
-        if ( topic.iHotmarked )
-            {
-            aMenuPane->DeleteMenuItem( ECbsUiappCmdSwitchHotmark );
-            }
-        else
-            {
-            aMenuPane->DeleteMenuItem( ECbsUiappCmdSwitchUnhotmark );
-            }
-        
-        if( !FeatureManager::FeatureSupported( KFeatureIdHelp ) )
-            {
-            aMenuPane->DeleteMenuItem( EAknCmdHelp );
-            }
-        }
-    else if ( aResourceId == R_CBSUI_TOPIC_MENU )
-        {
-        TInt topics;
-        topics = iTopicNumberList->Count();
-
-        // If there is no room for topics, then remove add manually.
-        if ( topics >= KCountOfAllTopics )
-            {
-            aMenuPane->DeleteMenuItem( ECbsUiappCmdSwitchAddManually );
-            }
-
-        // If only index topic in topic list then "Delete all" menuitem is not shown
-        if ( topics < KTwoTopics )
-            {
-            aMenuPane->DeleteMenuItem( ECbsUiappCmdSwitchDeleteAll );
-            }
-
-        // Protected topic can not be edited or deleted.
-        if ( topic.iProtected )
-            {
-            aMenuPane->DeleteMenuItem( ECbsUiappCmdSwitchEdit );
-            aMenuPane->DeleteMenuItem( ECbsUiappCmdSwitchDelete );
-            }
-
-        // Check if there are Index message received.
-        iServer.StartCollectionBrowsing();
-
-        if( !iServer.HasNextCollectionTopic() )
-            {
-            aMenuPane->DeleteMenuItem( ECbsUiappCmdSwitchAddFromIndex );
-            }
-        }
-    else
-	{
-	//Does nothing
-	}
-    }
-
-// ---------------------------------------------------------
-// CCbsUiTopicListView::SetCurrentTopicNumber
-// 
-// 
-// ---------------------------------------------------------
-//
-void CCbsUiTopicListView::SetCurrentTopicNumber( const TDesC8& aTopicNumber )
-    {
-    TPckgBuf<TCbsTopicNumber> pckgTopicNumber;
-    pckgTopicNumber.Copy(aTopicNumber);
-    iCurrentTopicNumber = pckgTopicNumber();
-    }
-
-// ---------------------------------------------------------
-// CCbsUiTopicListView::SetCurrentTopicNumber
-// 
-// 
-// ---------------------------------------------------------
-//
-void CCbsUiTopicListView::SetCurrentTopicNumber( const TCbsTopicNumber aTopicNumber)
-    {
-    iCurrentTopicNumber = aTopicNumber;
-    }
-
-// ---------------------------------------------------------
-// CCbsUiTopicListView::Id
-// 
-// 
-// ---------------------------------------------------------
-//
-TUid CCbsUiTopicListView::Id() const
-    {
-    return TUid::Uid( ECbsUiTopicListViewId );	
-    }
-
-// ---------------------------------------------------------
-// CCbsUiTopicListView::FindTopicIndexByNumber
-// 
-// 
-// ---------------------------------------------------------
-//
-TInt CCbsUiTopicListView::FindTopicIndexByNumber( TInt& aIndex,
-                                                  const TCbsTopicNumber& aTopicNumber )
-    {
-    TInt ret(KErrGeneral);
-
-    for ( TInt i(0); i < iTopicNumberList->Count() && ret != KErrNone; i++ )
-        {
-        if ( iTopicNumberList->At(i) == aTopicNumber )
-            {
-            ret = KErrNone;
-            aIndex = i;
-            }
-        }
-    return ret;
-    }
-
-// ---------------------------------------------------------
-// CCbsUiTopicListView::ActivateTopicViewL
-// 
-// 
-// ---------------------------------------------------------
-//
-void CCbsUiTopicListView::ActivateTopicViewL() const
-    {   
-    TPckgBuf<TCbsTopicNumber> message( iCurrentTopicNumber );
-    
-    AppUi()->ActivateLocalViewL( 
-        TUid::Uid(ECbsUiTopicViewId), KCbsUiCustomMessageId, message );
-    }
-
-// ---------------------------------------------------------
-// CCbsUiTopicListView::ActivateSettingsViewL
-// 
-// 
-// ---------------------------------------------------------
-//
-void CCbsUiTopicListView::ActivateSettingsViewL() const
-    {  
-    AppUi()->ActivateLocalViewL( TUid::Uid(ECbsUiSettingsViewId) );
-    }
-
-// ---------------------------------------------------------
-// CCbsUiTopicListView::ActivateAddFromIndexViewL
-// 
-// 
-// ---------------------------------------------------------
-//
-void CCbsUiTopicListView::ActivateAddFromIndexViewL()
-    {
-    CCbsUiAddFromIndexDialog* dialog = 
-        new ( ELeave ) CCbsUiAddFromIndexDialog( iServer );
-    
-    dialog->ExecuteLD(R_CBS_ADD_FROM_INDEX_DIALOG);
-    }
-
-// ---------------------------------------------------------
-// CCbsUiTopicListView::ActivateBackgroundNote
-// 
-// 
-// ---------------------------------------------------------
-//
-TInt CCbsUiTopicListView::ActivateBackgroundNoteL( TAny* aTopicList )
-    {
-    __ASSERT_DEBUG( aTopicList, CbsUiPanic(EErrNullPointer) );
-    TInt newTopics( STATIC_CAST(CCbsUiTopicListView*, aTopicList)->iNewTopicsCount );
-        
-    if ( newTopics > ENoNewMessages )
-        {
-        HBufC* stringHolder = NULL;
-        if ( newTopics > EOneNewMessage )
-            {
-            stringHolder = StringLoader::LoadLC(
-                R_PLURAL_TOPIC_ADDED, newTopics );
-            }
-        else 
-            {
-            stringHolder = STATIC_CAST(CCbsUiTopicListView*, aTopicList)->
-                iCoeEnv->AllocReadResourceLC(
-                R_TEXT_NOTE_NEW_TOPIC_ADDED );
-            }
-        
-        CAknConfirmationNote* note = new (ELeave) CAknConfirmationNote;
-        note->ExecuteLD(*stringHolder);
-        
-        CleanupStack::PopAndDestroy(); // stringholder
-        }
-
-    return KErrNone;
-    }
-
-
-//  End of File