diff -r 000000000000 -r 72b543305e3a messagingappbase/smartmessaging/wmlbc/src/WmlState.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/messagingappbase/smartmessaging/wmlbc/src/WmlState.cpp Thu Dec 17 08:44:11 2009 +0200 @@ -0,0 +1,415 @@ +/* +* 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: +* This contains all the state specific logic of the bio-control. +* +*/ + + + +// INCLUDE FILES +#include "WmlState.h" // Own header +#include "WmlItemEngine.h" +#include "WmlBioControl.h" // CWmlBioControl +#include "WmlBioControl.pan" // Panic +#include "WmlSubItemBase.h" // CWmlSubItemBase + +#include // StringLoader +#include // CMsgNameValue +#include +#include // CRichBio +#include // resouce identifiers +#include +#include + +// ================= MEMBER FUNCTIONS ======================= + +// --------------------------------------------------------- +// CWmlStateFactory::NewL() +// --------------------------------------------------------- +CWmlStateFactory* CWmlStateFactory::NewL( CWmlBioControl& aBioControl ) + { + CWmlStateFactory* self = new ( ELeave ) CWmlStateFactory; + CleanupStack::PushL( self ); + self->ConstructL( aBioControl ); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------- +// CWmlStateFactory::ConstructL() +// --------------------------------------------------------- +void CWmlStateFactory::ConstructL( CWmlBioControl& aBioControl ) + { + iBioControl = &aBioControl; + iStateSingle = new (ELeave) CWmlStateSingle( this, aBioControl ); + } + +// --------------------------------------------------------- +// CWmlStateFactory::~CWmlStateFactory() +// --------------------------------------------------------- +CWmlStateFactory::~CWmlStateFactory() + { + delete iStateSingle; + } + +// --------------------------------------------------------- +// CWmlStateFactory::SetInitialStateL() +// --------------------------------------------------------- +void CWmlStateFactory::SetInitialStateL( + const TInt aBMCount ) + { + // Pre-condition is that state object is NULL + __ASSERT_DEBUG(iState == NULL, + Panic(EWmlBCStateObjectAlreadyCreated)); + + if ( aBMCount == 0 ) + { + // nothing to show... invalid message. + User::Leave( KErrCorrupt ); + } + + TWmlState state( EWmlBCInitial ); + + if ( aBMCount == 1 ) + { + state = EWmlBCViewerBookmarkOne; + } + else + { + // invalid message + User::Leave( KErrNotSupported ); + } + + ChangeStateL( state ); + // Post condition is that we have state object. + __ASSERT_DEBUG(iState, + Panic(EWmlBCStateObjectNotCreated)); + } + +// --------------------------------------------------------- +// CWmlStateFactory::ChangeStateL() +// --------------------------------------------------------- +void CWmlStateFactory::ChangeStateL( TWmlState aState ) + { + iStateEnum = aState; + // Set the correct state object. + switch ( aState ) + { + // Single mode + case EWmlBCViewerBookmarkOne: + { + iState = iStateSingle; + break; + } + // Illegal transitions + default: + { + Panic( EIllegalStateTransition ); + break; + } + } + iState->EnterL( aState ); + } + +// --------------------------------------------------------- +// CWmlStateFactory::State() +// --------------------------------------------------------- +MWmlState& CWmlStateFactory::State() const + { + return *iState; + } + +// --------------------------------------------------------- +// CWmlState::CWmlState() +// --------------------------------------------------------- +CWmlState::CWmlState( CWmlStateFactory* aStateFactory, + CWmlBioControl& aBioControl) : + iStateFactory( aStateFactory ), + iBioControl( &aBioControl ) + { + // Nothing more here... + } + +// --------------------------------------------------------- +// CWmlStateSingle::CWmlStateSingle() +// --------------------------------------------------------- +CWmlStateSingle::CWmlStateSingle( CWmlStateFactory* aStateFactory, + CWmlBioControl& aBioControl) : + CWmlState( aStateFactory, aBioControl ) + { + // Nothing more here... + } + +// --------------------------------------------------------- +// CWmlStateSingle::~CWmlStateSingle() +// --------------------------------------------------------- +CWmlStateSingle::~CWmlStateSingle() + { + // This owns nothing... + } + +// --------------------------------------------------------- +// CWmlStateSingle::SetAndGetSizeL() +// --------------------------------------------------------- +void CWmlStateSingle::SetAndGetSizeL( TSize& aSize ) + { + iBioControl->iRichBio->SetAndGetSizeL( aSize ); + } + +// --------------------------------------------------------- +// CWmlStateSingle::HandleBioCommandL() +// --------------------------------------------------------- +TBool CWmlStateSingle::HandleBioCommandL( TInt aCommand ) + { + TBool retValue(EFalse); + aCommand -= iBioControl->iBioControlObserver.FirstFreeCommand(); + switch ( aCommand ) + { + case EAddBookmark: + { + iBioControl->iItemEngine->SaveCurrentItemL(); + retValue = ETrue; + break; + } + default: + { + break; + } + } + return retValue; + } + +// --------------------------------------------------------- +// CWmlStateSingle::CurrentLineRect() +// --------------------------------------------------------- +TRect CWmlStateSingle::CurrentLineRect() const + { + return iBioControl->iRichBio->CurrentLineRect(); + } + +// --------------------------------------------------------- +// CWmlStateSingle::IsFocusChangePossible() +// --------------------------------------------------------- +TBool CWmlStateSingle::IsFocusChangePossible( + TMsgFocusDirection aDirection ) const + { + if (aDirection == EMsgFocusUp) + { + return CursorInFirstLine(); + } + else + { + // Focus down will never release the focus out of this. + return EFalse; + } + } + +// --------------------------------------------------------- +// CWmlStateSingle::HeaderTextLC() +// --------------------------------------------------------- +HBufC* CWmlStateSingle::HeaderTextLC() const + { + TInt resourceID(0); + switch ( iState ) + { + case EWmlBCViewerBookmarkOne: + { + resourceID = R_QTN_SM_TITLE_ONE_BOOKMARK; + break; + } + default: + { + // In detail state iState should not be anything else than above. + Panic( EIllegalInternalState ); + break; + } + } + return StringLoader::LoadLC( resourceID ); + } + +// --------------------------------------------------------- +// CWmlStateSingle::OptionMenuPermissionsL() +// --------------------------------------------------------- +void CWmlStateSingle::OptionMenuPermissionsL( TUint32& aPermissions ) const + { + switch ( iState ) + { + case EWmlBCViewerBookmarkOne: + { + aPermissions |= EMsgBioCallBack + | EMsgBioDelete + | EMsgBioMessInfo + | EMsgBioMove + | EMsgBioHelp + | EMsgBioCreateCC; + break; + } + default: + { + Panic(EIllegalCommandInCurrentState); + break; + } + } + } + +// --------------------------------------------------------- +// CWmlStateSingle::SetMenuCommandSetL() +// --------------------------------------------------------- +void CWmlStateSingle::SetMenuCommandSetL( CEikMenuPane& aMenuPane ) + { + switch ( iState ) + { + case EWmlBCViewerBookmarkOne: + { + iBioControl->AddMenuItemL( aMenuPane, R_QTN_SM_ADD_BOOKMARKS, + EAddBookmark, 1 ); + break; + } + default: + { + break; + } + } + } + +// --------------------------------------------------------- +// CWmlStateSingle::VirtualHeight() +// --------------------------------------------------------- +TInt CWmlStateSingle::VirtualHeight() + { + TInt height = iBioControl->iRichBio->VirtualHeight(); + return height; + } + +// --------------------------------------------------------- +// CWmlStateSingle::VirtualVisibleTop() +// --------------------------------------------------------- +TInt CWmlStateSingle::VirtualVisibleTop() + { + TInt top = iBioControl->iRichBio->VirtualVisibleTop(); + return top; + } + +// --------------------------------------------------------- +// CWmlStateSingle::IsCursorLocation() +// --------------------------------------------------------- +TBool CWmlStateSingle::IsCursorLocation( TMsgCursorLocation aLocation ) const + { + TBool location( iBioControl->iRichBio->IsCursorLocation( aLocation ) ); + return location; + } + +// --------------------------------------------------------- +// CWmlStateSingle::OfferKeyEventL() +// --------------------------------------------------------- +TKeyResponse CWmlStateSingle::OfferKeyEventL( const TKeyEvent& aKeyEvent, + TEventCode aType ) + { + return iBioControl->iRichBio->OfferKeyEventL( aKeyEvent, aType ); + } + +// --------------------------------------------------------- +// CWmlStateSingle::SizeChanged() +// --------------------------------------------------------- +void CWmlStateSingle::SizeChanged() + { + iBioControl->iRichBio->SetExtent(iBioControl->Position(), + iBioControl->iRichBio->Size()); + } + +// --------------------------------------------------------- +// CWmlStateSingle::FocusChanged() +// --------------------------------------------------------- +void CWmlStateSingle::FocusChanged( TDrawNow aDrawNow ) + { + iBioControl->iRichBio->SetFocus( iBioControl->IsFocused(), aDrawNow ); + } + +// --------------------------------------------------------- +// CWmlStateSingle::CreateViewerL() +// --------------------------------------------------------- +void CWmlStateSingle::CreateViewerL( const CCoeControl& aContainer ) + { + CRichBio* richBio = CRichBio::NewL( &aContainer, ERichBioModeStandard ); + CleanupStack::PushL( richBio ); + + CWmlSubItemBase& currentItem = iBioControl->iItemEngine->CurrentItem(); + CArrayPtrFlat* labelsAndValues = + currentItem.LabelsAndValuesLC(); + TInt count = labelsAndValues->Count(); + for ( TInt i = 0; i < count; i++ ) + { + CMsgNameValue* nameValue = labelsAndValues->At( i ); + richBio->AddItemL( nameValue->Name(), nameValue->Value() ); + } + // We can't check the item because the object actually is + // TCleanupItem + CleanupStack::PopAndDestroy();// labelsAndValues ); + + CleanupStack::Pop( richBio ); + iBioControl->iRichBio = richBio; + } + +// --------------------------------------------------------- +// CWmlStateSingle::CursorInFirstLine() +// --------------------------------------------------------- +TBool CWmlStateSingle::CursorInFirstLine() const + { + return iBioControl->iRichBio->IsCursorLocation(EMsgTop); + } + +// --------------------------------------------------------- +// CWmlStateSingle::GetHelpContext() +// --------------------------------------------------------- +void CWmlStateSingle::GetHelpContext(TCoeHelpContext& aHelpContext) const + { + switch ( iState ) + { + case EWmlBCViewerBookmarkOne: + { + aHelpContext.iContext = KSMART_HLP_ONEBOOKVIEWER; + break; + } + default: + { + Panic( EIllegalStateTransition ); + break; + } + } + } + +// --------------------------------------------------------- +// CWmlStateSingle::EnterL() +// --------------------------------------------------------- +void CWmlStateSingle::EnterL( TWmlState aState ) + { + // This is a check for valid state transitions. + switch ( aState ) + { + case EWmlBCViewerBookmarkOne: + { + break; + } + default: + { + Panic( EIllegalStateTransition ); + break; + } + } + iState = aState; + iBioControl->UpdateHeaderTextL(); + } + +// End of file