diff -r 594d59766373 -r 7d48bed6ce0c cbs/cbsui/UiSrc/CCbsUiTopicListView.cpp --- 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 // AknTextUtils -#include // for feature flags -#include // for feature manager -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#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 // ECellBroadcastNotification -#include // 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 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 name; - TBuf 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 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 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