--- a/cbs/cbsui/UiSrc/CCbsUiTopicView.cpp Thu Aug 19 10:28:14 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1009 +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 CCbsUiTopicView.
-*
-*
-*/
-
-
-// INCLUDES
-#include <AknUtils.h> // AknTextUtils
-#include <bldvariant.hrh> // for feature flags
-#include <featmgr.h> // for feature manager
-#include <aknViewAppUi.h>
-#include <aknnavide.h>
-#include <calslbs.h>
-#include <eikclb.h>
-#include <akntitle.h>
-#include <eikmenub.h>
-#include <eikmenup.h>
-#include <hlplch.h>
-#include <AknQueryDialog.h>
-#include <barsread.h> // TResourceReader
-#include <cbsuiApp.rsg>
-#include <e32std.h>
-#include "CCbsUiTopicView.h"
-#include "CCbsUiTopicViewContainer.h"
-#include "Cbsuiapp.hrh"
-#include "CbsUiPanic.h"
-#include "CbsUiUtility.h"
-#include "CbsUiConstants.h"
-#include "CbsUiDebug.h"
-#include "MCbs.h"
-#include <StringLoader.h>
-#include <AknNaviDecoratorObserver.h>
-#include <aknnavi.h>
-
-
-
-// CONSTANTS
-const TUint KZeroFill = '0';
-const TUint KCbsMSKControlID = 3;
-
-
-// MODULE DATA STRUCTURES
-
-// buffer to be used to unpack action information
-typedef TPckgBuf<TCbsUiTopicActivationPckg> TTopicNumberBuf;
-
-// index for setting the focus
-enum TTopicViewFocusIndexes
- {
- EFirstMessage = 0
- };
-
-
-
-//=============================================================================
-// MEMBER FUNCTIONS
-// C++ default constructor can NOT contain any code, that
-// might leave.
-//
-CCbsUiTopicView::CCbsUiTopicView( MCbs& aServer )
-: iServer( aServer )
- {
- }
-
-// ---------------------------------------------------------
-// CCbsUiTopicView::ConstructL
-//
-//
-// ---------------------------------------------------------
-//
-void CCbsUiTopicView::ConstructL()
- {
- BaseConstructL( R_CBSUI_TOPICVIEW );
-
- // Create array for handles.
- iHandles = new (ELeave) TCbsUiMessageHandleList(
- KNumberOfTemporaryMessages);
-
- CEikStatusPane* sp = StatusPane();
-
- iNaviContainer =
- STATIC_CAST( CAknNavigationControlContainer*, sp->
- ControlL( TUid::Uid( EEikStatusPaneUidNavi ) ) );
- }
-
-
-// Two-phased constructor.
-CCbsUiTopicView* CCbsUiTopicView::NewL( MCbs& aServer )
- {
- __ASSERT_DEBUG( &aServer, CbsUiPanic(EErrNullPointer) );
-
- // Normal two phase construction.
- CCbsUiTopicView* self =
- new (ELeave) CCbsUiTopicView(aServer);
-
- CleanupStack::PushL( self );
- self->ConstructL();
- CleanupStack::Pop();
-
- return self;
- }
-
-// Destructor
-CCbsUiTopicView::~CCbsUiTopicView()
- {
- if ( iContainer )
- {
- AppUi()->RemoveFromViewStack( *this, iContainer );
- }
-
- delete iContainer;
- delete iHandles;
-
- if ( iNaviContainer && iDecoratedLabel )
- {
- iNaviContainer->Pop ( iDecoratedLabel );
- delete iDecoratedLabel;
- }
- iDecoratedLabel = NULL;
-
- if ( iNaviContainer && iPreviousDecoratedLabel )
- {
- iNaviContainer->Pop ( iPreviousDecoratedLabel );
- delete iPreviousDecoratedLabel;
- }
- iPreviousDecoratedLabel = NULL;
- }
-
-// ---------------------------------------------------------
-// CCbsUiTopicView::ReloadMessagesL
-//
-//
-// ---------------------------------------------------------
-//
-void CCbsUiTopicView::ReloadMessagesL()
- {
- TCbsTopic topic;
- TInt err( iServer.FindTopicByNumber(iCurrentTopicNumber, topic) );
-
- if ( err != KErrNone )
- {
- ActivateTopicListViewL(iCurrentTopicNumber);
- return;
- }
-
- UpdateTitlePaneL(topic);
- UpdateNaviPaneL(topic);
-
- PrepareReloading();
- LoadAllMessageTitlesL(iCurrentTopicNumber);
- ActivateListBoxL();
-
- // Set the MSK according to message count
- if ( !iHandles->Count() )
- {
- RemoveCommandFromMSK();
- SetMiddleSoftKeyLabelL( R_TEXT_SOFTKEY_EMPTY, ECbsUiappNullCmd );
- }
- else
- {
- RemoveCommandFromMSK();
- SetMiddleSoftKeyLabelL( R_QTN_MSK_OPEN, ECbsUiappCmdTopicMSKRead );
- }
- }
-
-// ---------------------------------------------------------
-// CCbsUiTopicView::TotalMessages
-//
-//
-// ---------------------------------------------------------
-//
-TInt CCbsUiTopicView::TotalMessages() const
- {
- return iHandles->Count();
- }
-
-// ---------------------------------------------------------
-// CCbsUiTopicView::UpdateTitlePaneL
-//
-//
-// ---------------------------------------------------------
-//
-void CCbsUiTopicView::UpdateTitlePaneL( const TCbsTopic& aTopic ) const
- {
- CEikStatusPane* sp = StatusPane();
- CAknTitlePane* title =
- STATIC_CAST(
- CAknTitlePane*, sp->ControlL( TUid::Uid(EEikStatusPaneUidTitle) ) );
-
- __ASSERT_DEBUG( sp && title, CbsUiPanic(EStatusOrTitlePaneError) );
-
- title->SetTextL(aTopic.iName);
-
- }
-
-// ---------------------------------------------------------
-// CCbsUiTopicView::UpdateNaviPaneL
-//
-//
-// ---------------------------------------------------------
-//
-void CCbsUiTopicView::UpdateNaviPaneL( const TCbsTopic& aTopic )
- {
- TBool next( EFalse );
- TBool previous( EFalse );
- TInt err( CheckIfCanMove( previous, next ) );
-
- if ( err != KErrNone )
- {
- iDecoratedLabel = CbsUiUtility::CreateEmptyNavigationPaneL();
- return;
- }
-
- TBuf<EMaxTopicNumberLength> number;
- TBuf<EMaxTopicNumberLength> buffer;
-
- buffer.AppendNum( TInt( aTopic.iNumber ) );
- number.Justify( buffer, EMaxTopicNumberLength, ERight, KZeroFill );
- AknTextUtils::DisplayTextLanguageSpecificNumberConversion( number );
-
- // Create a new decorator
- CAknNavigationDecorator* newDecoratedLabel =
- iNaviContainer->CreateNavigationLabelL ( number );
- CleanupStack::PushL( newDecoratedLabel );
-
- // Set new decorator on top of navi pane's decorator stack
- // (topmost decorator is the one to show)
- iNaviContainer->PushL( *newDecoratedLabel );
-
- // remove previous decorator from decorator stack and delete it
- if ( iPreviousDecoratedLabel )
- {
- iNaviContainer->Pop( iPreviousDecoratedLabel );
- delete iPreviousDecoratedLabel;
- iPreviousDecoratedLabel = NULL;
- }
-
- // update decorator pointers to new ones
- iPreviousDecoratedLabel = iDecoratedLabel;
- iDecoratedLabel = newDecoratedLabel;
-
- // set observer for navi pane
- iDecoratedLabel->SetNaviDecoratorObserver( this );
-
- CleanupStack::Pop( newDecoratedLabel );
-
- iDecoratedLabel->MakeScrollButtonVisible( ETrue );
-
- if( AknLayoutUtils::LayoutMirrored() )
- {
- // Should be arrows.
- iDecoratedLabel->SetScrollButtonDimmed( CAknNavigationDecorator::ELeftButton, !next );
- // And these should also be arrows.
- iDecoratedLabel->SetScrollButtonDimmed( CAknNavigationDecorator::ERightButton, !previous );
- }
- else
- {
- // Should be arrows.
- iDecoratedLabel->SetScrollButtonDimmed( CAknNavigationDecorator::ELeftButton, !previous );
- // And these should also be arrows.
- iDecoratedLabel->SetScrollButtonDimmed( CAknNavigationDecorator::ERightButton, !next );
- }
-
- }
-
-// ---------------------------------------------------------
-// CCbsUiTopicView::MarkCurrentlyFocusedHandle
-//
-//
-// ---------------------------------------------------------
-//
-void CCbsUiTopicView::MarkCurrentlyFocusedHandle()
- {
- if ( iContainer->CurrentPosition() >= 0 &&
- TotalMessages() > iContainer->CurrentPosition() )
- {
- iCurrentHandle = iHandles->At( iContainer->CurrentPosition() );
- }
- }
-
-
-// ---------------------------------------------------------
-// CCbsUiTopicView::HandleRectChangeInContainer
-//
-//
-// ---------------------------------------------------------
-//
-void CCbsUiTopicView::HandleRectChangeInContainer()
- {
- if ( iContainer )
- {
- iContainer->SetRect( ClientRect() );
- }
- }
-
-
-// ---------------------------------------------------------
-// CCbsUiTopicView::SetFocusToMessage
-//
-//
-// ---------------------------------------------------------
-//
-void CCbsUiTopicView::SetFocusToMessage( TInt aIndex )
- {
- if ( iContainer && TotalMessages() > 0 )
- {
- __ASSERT_DEBUG( aIndex >= 0 && aIndex < TotalMessages(),
- CbsUiPanic(EErrIndexOutOfBounds) );
- // first one in the list is the newest
- iContainer->SetCurrentItemIndex(aIndex);
- }
- }
-
-// ---------------------------------------------------------
-// CCbsUiTopicView::TopicListChangedL
-//
-//
-// ---------------------------------------------------------
-//
-void CCbsUiTopicView::TopicListChangedL( TCbsTopicListEvent aEvent, TCbsTopicNumber aTopicNumber )
-
- {
- if ( iContainer && iCurrentTopicNumber == aTopicNumber )
- {
- if ( aEvent == ECbsTopicReceivedNewMessage )
- {
- ReloadMessagesL();
- }
- }
- }
-
-// ---------------------------------------------------------
-// CCbsUiTopicView::SaveMessage
-//
-//
-// ---------------------------------------------------------
-//
-TInt CCbsUiTopicView::SaveMessage( const TCbsMessageHandle& aHandle )
- {
- return iServer.SaveMessage( aHandle );
- }
-
-// ---------------------------------------------------------
-// CCbsUiTopicView::LockMessage
-//
-//
-// ---------------------------------------------------------
-//
-TInt CCbsUiTopicView::LockMessage( TCbsMessageHandle aHandle )
- {
- return iServer.LockMessage(aHandle);
- }
-
-// ---------------------------------------------------------
-// CCbsUiTopicView::UnLockMessage
-//
-//
-// ---------------------------------------------------------
-//
-void CCbsUiTopicView::UnLockMessage()
- {
- if ( iServer.Connected() )
- {
- iServer.LockMessage(NULL);
- }
- }
-
-// ---------------------------------------------------------
-// CCbsUiTopicView::ShowMessageL
-//
-//
-// ---------------------------------------------------------
-//
-void CCbsUiTopicView::ShowMessageL()
- {
- if ( TotalMessages() == 0 )
- {
- return;
- }
-
- User::LeaveIfError( LockMessage(iCurrentHandle) );
-
- ActivateMsgViewL(iCurrentHandle);
- }
-
-// ---------------------------------------------------------
-// CCbsUiTopicView::DynInitMenuPaneL
-//
-//
-// ---------------------------------------------------------
-//
-void CCbsUiTopicView::DynInitMenuPaneL( TInt aResourceId,
- CEikMenuPane* aMenuPane )
- {
- __ASSERT_DEBUG( aMenuPane, CbsUiPanic(EMenuPaneNullError) );
- __ASSERT_DEBUG( aResourceId >= 0, CbsUiPanic( EErrInvalidValue) );
- if ( aResourceId == R_CBSUI_TOPICVIEW_MENU )
- {
- if ( TotalMessages() > 0 )
- {
- // for using a right message
- MarkCurrentlyFocusedHandle();
-
- // Lock message that it is not deleted automatically.
- // If error, close the menu pane
- User::LeaveIfError( LockMessage(iCurrentHandle) );
-
- if( CbsUiUtility::IsSavedL(iCurrentHandle, iServer) )
- {
- aMenuPane->DeleteMenuItem(ECbsUiappCmdTopicMenuKeep);
- }
- }
- else
- {
- // If no messages, then not possible to do anything..
- aMenuPane->DeleteMenuItem(ECbsUiappCmdTopicMenuRead);
- aMenuPane->DeleteMenuItem(ECbsUiappCmdTopicMenuKeep);
- aMenuPane->DeleteMenuItem(ECbsUiappCmdMessageDelete);
- }
- if( !FeatureManager::FeatureSupported( KFeatureIdHelp ) )
- {
- aMenuPane->DeleteMenuItem( EAknCmdHelp );
- }
- }
- }
-
-// ---------------------------------------------------------
-// CCbsUiTopicView::SetEmphasis
-//
-//
-// ---------------------------------------------------------
-//
-void CCbsUiTopicView::SetEmphasis( CCoeControl* aMenuControl,TBool aEmphasis )
- {
- __ASSERT_DEBUG( aMenuControl, CbsUiPanic(EErrNullPointer) );
- CAknView::SetEmphasis(aMenuControl, aEmphasis);
-
- // Checks if the menu pane is showing.
- if ( !aEmphasis && iCanUnlock )
- {
- // Has to be unlocked, because otherwise message could stay as locked
- // and could not be deleted automatically by the server.
- UnLockMessage();
- }
- }
-
-
-// ---------------------------------------------------------
-// CCbsUiTopicView::ProcessCommandL
-//
-//
-// ---------------------------------------------------------
-//
-void CCbsUiTopicView::ProcessCommandL( TInt aCommand )
- {
- switch ( aCommand )
- {
- case ECbsUiappCmdTopicMenuRead: // same operation
- case ECbsUiappCmdTopicMSKRead:
- case ECbsUiappCmdTopicMenuKeep: // cannot unlock current message
- case ECbsUiappCmdMessageDelete:
- iCanUnlock = EFalse; // prevents SetEmphasis to unlock message
- break;
- default:
- break;
- };
-
- CAknView::ProcessCommandL(aCommand);
-
- switch ( aCommand )
- {
- case ECbsUiappCmdTopicMenuKeep: // same operation
- case ECbsUiappCmdMessageDelete:
- // Have to unlock message, because in error situation
- // message would be locked after these two operations.
- UnLockMessage();
- break;
- default:
- break;
- };
- }
-
-// ---------------------------------------------------------
-// CCbsUiTopicView::HandleCommandL
-//
-//
-// ---------------------------------------------------------
-//
-void CCbsUiTopicView::HandleCommandL( TInt aCommandId )
- {
- TTopicViewFocusState focusState = ENoFocusUpdate;
-
- switch (aCommandId)
- {
- case EAknSoftkeyBack:
- {
- ActivateTopicListViewL(iCurrentTopicNumber);
- break;
- }
- // MSK
- case ECbsUiappCmdTopicMSKRead:
- case ECbsUiappCmdTopicMenuRead:
- {
- // to open a right message
- MarkCurrentlyFocusedHandle();
- if ( TotalMessages() > 0 )
- {
- ShowMessageL();
- }
- break;
- }
- case ECbsUiappCmdTopicMenuKeep:
- {
- CbsUiUtility::SaveCurrentMessageL(iCurrentHandle, *this);
- focusState = ESetFocusToCurrentHandle;
- break;
- }
- case ECbsUiappCmdMessageDelete:
- {
- if ( TotalMessages() > 0 )
- {
- CAknQueryDialog* dlg = CAknQueryDialog::NewL();
-
- if ( dlg->ExecuteLD(R_DELETE_MSG_CONFIRMATION_QUERY) )
- {
- // Unlock the message, so that it could be deleted
- UnLockMessage();
-
- if ( iServer.DeleteMessage(iCurrentHandle) == KErrNone )
- {
- SetNewCurrentHandle(iCurrentHandle);
- }
- }
- focusState = ESetFocusToCurrentHandle;
- }
- break;
- }
- case ECbsUiappTopicViewCmdGoToPrevTopic:
- {
- TBool toPrevious(ETrue);
- SetCurrentTopicNumber(toPrevious);
- focusState = ESetFocusToFirstItem;
- break;
- }
- case ECbsUiappTopicViewCmdGoToNextTopic:
- {
- TBool toPrevious(EFalse);
- SetCurrentTopicNumber(toPrevious);
- focusState = ESetFocusToFirstItem;
- break;
- }
- case EAknCmdHelp:
- AppUi()->HandleCommandL(aCommandId);
- break;
- case EAknCmdExit:
- {
- ( (MEikCommandObserver*)AppUi() )->
- ProcessCommandL(EAknCmdExit);
- break;
- }
- default:
- {
- break;
- }
- }
-
- if ( focusState != ENoFocusUpdate )
- {
- ReloadMessagesL();
- SetFocusAfterReloading(focusState);
- }
-
- }
-
-// ---------------------------------------------------------
-// CCbsUiTopicView::DoActivateL
-//
-//
-// ---------------------------------------------------------
-//
-void CCbsUiTopicView::DoActivateL( const TVwsViewId& /*aPrevViewId*/,
- TUid aCustomMessageId,
- const TDesC8& aCustomMessage )
- {
- iCanUnlock = ETrue;
- if ( !iContainer )
- {
- iContainer = CCbsUiTopicViewContainer::NewL(*this, ClientRect());
- AppUi()->AddToViewStackL( *this, iContainer );
- }
-
- SetCurrentTopicNumberAndMessageHandle(aCustomMessage);
-
- ReloadMessagesL();
-
- TTopicViewFocusState focus(ESetFocusToFirstItem);
- if ( aCustomMessageId == KSetFocusToId )
- {
- focus = ESetFocusToCurrentHandle;
- }
-
- SetFocusAfterReloading(focus);
-
- // if the list box focus is changed, then container should be activetd
- // after ReloadMessagesL
- iContainer->ActivateL();
- }
-
-// ---------------------------------------------------------
-// CCbsUiTopicView::DoDeactivate
-//
-//
-// ---------------------------------------------------------
-//
-void CCbsUiTopicView::DoDeactivate()
- {
- if (iContainer)
- {
- AppUi()->RemoveFromViewStack(*this, iContainer);
- delete iContainer;
- iContainer = NULL;
- }
- }
-
-// ---------------------------------------------------------
-// CCbsUiTopicView::Id
-//
-//
-// ---------------------------------------------------------
-//
-TUid CCbsUiTopicView::Id() const
- {
- return TUid::Uid( ECbsUiTopicViewId );
- }
-
-// ---------------------------------------------------------
-// CCbsUiTopicView::FindMessageIndexByHandle
-//
-//
-// ---------------------------------------------------------
-//
-TInt CCbsUiTopicView::FindMessageIndexByHandle( TInt& aIndex,
- const TCbsMessageHandle& aMsgHandle )
- {
- __ASSERT_DEBUG( &aIndex, CbsUiPanic(EErrNullPointer) );
-
- TInt ret(KErrGeneral);
-
- for ( TInt i(0); i < TotalMessages() && ret != KErrNone; i++ )
- {
- if ( iHandles->At(i) == aMsgHandle )
- {
- ret = KErrNone;
- aIndex = i;
- }
- }
-
- return ret;
- }
-
-// ---------------------------------------------------------
-// CCbsUiTopicView::LoadAllMessageTitlesL
-//
-//
-// ---------------------------------------------------------
-//
-void CCbsUiTopicView::LoadAllMessageTitlesL( TCbsTopicNumber aTopicNumber )
- {
- TBuf<KMaxMessageTitleLength> buffer;
- TCbsMessage message;
- iHandles->Reset();
-
- // Then take the total amount of messages in the topic.
- TInt count(0);
- User::LeaveIfError( iServer.GetMessageCount(aTopicNumber, count) );
-
- for ( TInt index(0); index < count; index++ )
- {
- if ( iServer.GetMessage(aTopicNumber, index, message) == KErrNone )
- {
- if ( iContainer )
- {
- // Add contents.
- TInt err =
- iServer.GetMessageContents(message.iHandle, buffer);
-
- __CBSUI_ASSERT(
- err == KErrNone, CbsUiPanic(EMessageContentsError) );
- User::LeaveIfError(err);
-
- iContainer->ReloadOfferL(message, buffer);
- }
-
- iHandles->AppendL(message.iHandle);
- }
-
- buffer.Zero();
- }
- }
-
-// ---------------------------------------------------------
-// CCbsUiTopicView::PrepareReloading
-//
-//
-// ---------------------------------------------------------
-//
-void CCbsUiTopicView::PrepareReloading()
- {
- if ( iContainer )
- {
- iContainer->ReloadStarts();
- }
- }
-
-// ---------------------------------------------------------
-// CCbsUiTopicView::SetFocusAfterReloading
-//
-//
-// ---------------------------------------------------------
-//
-void CCbsUiTopicView::SetFocusAfterReloading( TTopicViewFocusState aFocusState )
- {
- TInt focusedItem(KCbsErrValue);
-
- // has to find index from the ui side, because in the
- // server side the index could be an other.
- TBool setFocusToFirstItem(
- (aFocusState == ESetFocusToFirstItem) ||
- (aFocusState == ESetFocusToNewestMessage) ||
- (FindMessageIndexByHandle(focusedItem, iCurrentHandle) != KErrNone)
- );
-
- if ( setFocusToFirstItem )
- {
- focusedItem = EFirstMessage;
- }
-
- __ASSERT_DEBUG(
- focusedItem != KCbsErrValue, CbsUiPanic(EErrInvalidValue) );
-
- SetFocusToMessage(focusedItem);
- }
-
-// ---------------------------------------------------------
-// CCbsUiTopicView::SetNewCurrentHandle
-//
-//
-// ---------------------------------------------------------
-//
-void CCbsUiTopicView::SetNewCurrentHandle( TCbsMessageHandle aDeletedHandle )
- {
-
- TInt messagePosition(KCbsErrValue);
- TInt err( FindMessageIndexByHandle(messagePosition, aDeletedHandle) );
-
- TBool isLastMessage =
- ( (messagePosition + 1) == TotalMessages() ) &&
- (messagePosition >= 0);
-
- if ( isLastMessage )
- {
- // then previous handle should be focused after deletion
- messagePosition--;
- }
- else
- {
- // then the next handle will be focused after deletion
- messagePosition++;
- }
-
- if ( messagePosition >= TotalMessages() ||
- messagePosition < 0 ||
- err != KErrNone )
- {
- messagePosition = 0;
- }
-
- __ASSERT_DEBUG( err == KErrNone, CbsUiPanic(EErrMsgNotFound) );
-
- iCurrentHandle = iHandles->At(messagePosition);
- }
-
-// ---------------------------------------------------------
-// CCbsUiTopicView::SetCurrentTopicNumber
-//
-//
-// ---------------------------------------------------------
-//
-void CCbsUiTopicView::SetCurrentTopicNumber( TBool aToPrev )
- {
- TCbsTopicNumber prev;
- TCbsTopicNumber next;
- TInt position;
-
- TInt err( iServer.GetNextAndPrevTopicNumber(
- iCurrentTopicNumber, prev, next, position) );
-
- if ( err == KErrNone ) // handle exists
- {
- if ( aToPrev )
- {
- if ( position != ECbsHead )
- {
- iCurrentTopicNumber = prev;
- }
- }
- else
- {
- if ( position != ECbsTail )
- {
- iCurrentTopicNumber = next;
- }
- }
- }
- else
- {
- __CBSUI_ASSERT( 0, CbsUiPanic(EErrTopicNumberNotFound) );
- }
- }
-
-// ---------------------------------------------------------
-// CCbsUiTopicView::SetCurrentTopicNumberAndMessageHandle
-//
-//
-// ---------------------------------------------------------
-//
-void CCbsUiTopicView::SetCurrentTopicNumberAndMessageHandle( const TDesC8& aTopicNumberDes )
- {
- TTopicNumberBuf aTopicNumberBuf;
- aTopicNumberBuf.Copy(aTopicNumberDes);
- iCurrentTopicNumber = aTopicNumberBuf().iTopicNumber;
- iCurrentHandle = aTopicNumberBuf().iMessageHandle;
- }
-
-// ---------------------------------------------------------
-// CCbsUiTopicView::ActivateMsgViewL
-//
-//
-// ---------------------------------------------------------
-//
-void CCbsUiTopicView::ActivateMsgViewL( TCbsMessageHandle aMsgHandle ) const
- {
- TPckgBuf<TCbsMessageHandle> pckgMessageHandle(aMsgHandle);
-
- AppUi()->ActivateLocalViewL(
- TUid::Uid(ECbsUiMsgViewId), KCbsUiCustomMessageId, pckgMessageHandle);
- }
-
-// ---------------------------------------------------------
-// CCbsUiTopicView::ActivateTopicListViewL
-//
-//
-// ---------------------------------------------------------
-//
-void CCbsUiTopicView::ActivateTopicListViewL( TCbsTopicNumber aTopicNumber ) const
- {
- TPckgBuf<TCbsTopicNumber> pckgTopicNumber(aTopicNumber);
-
- AppUi()->ActivateLocalViewL(
- TUid::Uid(ECbsUiTopicListViewId), KSetFocusToId, pckgTopicNumber);
- }
-
-// ---------------------------------------------------------
-// CCbsUiTopicView::CheckIfCanMove
-//
-//
-// ---------------------------------------------------------
-//
-TInt CCbsUiTopicView::CheckIfCanMove( TBool& aToPrevious, TBool& aToNext )
- {
- TCbsTopicNumber prevDummy; // not used
- TCbsTopicNumber nextDummy;
- TInt position;
-
- TInt err( iServer.GetNextAndPrevTopicNumber(
- iCurrentTopicNumber, prevDummy, nextDummy, position) );
-
- __CBSUI_ASSERT( err == KErrNone, CbsUiPanic(EErrTopicNumberNotFound) );
- __CBSUI_ASSERT(
- position >= 0 && position <= (ECbsTail | ECbsHead),
- CbsUiPanic(EErrInvalidValue) );
-
- aToPrevious = EFalse;
- aToNext = EFalse;
-
- if ( err == KErrNone )
- {
- if ( !position ) // topic in both sides
- {
- aToPrevious = ETrue;
- aToNext = ETrue;
- }
- else if ( position == ECbsTail )
- {
- aToPrevious = ETrue;
- }
- else if ( position == ECbsHead )
- {
- aToNext = ETrue;
- }
- else
- {
- //Does nothing
- }
- }
-
- return err;
- }
-
-// ---------------------------------------------------------
-// CCbsUiTopicView::ActivateListBoxL
-//
-//
-// ---------------------------------------------------------
-//
-void CCbsUiTopicView::ActivateListBoxL()
- {
- iContainer->ReloadEndsL();
- }
-
-// ---------------------------------------------------------
-// CCbsUiTopicView::SetMiddleSoftKeyLabelL
-//
-//
-// ---------------------------------------------------------
-//
-void CCbsUiTopicView::SetMiddleSoftKeyLabelL(
- const TInt aResourceId, const TInt aCommandId )
- {
- CEikButtonGroupContainer* cbaGroup = Cba();
- if ( cbaGroup )
- {
- HBufC* mskText = StringLoader::LoadLC( aResourceId );
- TPtr mskPtr = mskText->Des();
- cbaGroup->AddCommandToStackL(
- KCbsMSKControlID,
- aCommandId,
- mskPtr );
- CleanupStack::PopAndDestroy( mskText );
- }
- }
-
-// ---------------------------------------------------------
-// CCbsUiTopicView::RemoveCommandFromMSK
-//
-//
-// ---------------------------------------------------------
-//
-void CCbsUiTopicView::RemoveCommandFromMSK()
- {
- if ( Cba() )
- {
- Cba()->RemoveCommandFromStack( KCbsMSKControlID, ECbsUiappCmdTopicMSKRead );
- Cba()->RemoveCommandFromStack( KCbsMSKControlID, ECbsUiappNullCmd );
- }
- }
-
-// ---------------------------------------------------------
-// CCbsUiTopicView::HandleNaviDecoratorEventL
-//
-//
-// ---------------------------------------------------------
-//
-void CCbsUiTopicView::HandleNaviDecoratorEventL( TInt aEventID )
- {
- TTopicViewFocusState focusState = ENoFocusUpdate;
-
- switch ( aEventID )
- {
- case MAknNaviDecoratorObserver::EAknNaviDecoratorEventLeftTabArrow:
- {
- SetCurrentTopicNumber( ETrue );
- focusState = ESetFocusToFirstItem;
- break;
- }
- case MAknNaviDecoratorObserver::EAknNaviDecoratorEventRightTabArrow:
- {
- SetCurrentTopicNumber( EFalse );
- focusState = ESetFocusToFirstItem;
- break;
- }
- default:
- {
- break;
- }
- }
-
- if ( focusState != ENoFocusUpdate )
- {
- ReloadMessagesL();
- SetFocusAfterReloading( focusState );
- }
- }
-
-// End of File