diff -r 000000000000 -r 72b543305e3a messagingappbase/smartmessaging/msgeditorutils/src/MsgBioBodyControl.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/messagingappbase/smartmessaging/msgeditorutils/src/MsgBioBodyControl.cpp Thu Dec 17 08:44:11 2009 +0200 @@ -0,0 +1,306 @@ +/* +* 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: +* Container class for bio controls +* +*/ + + + +// INCLUDE FILES + +#include "MsgBioBodyControl.h" // for CMsgBioBodyControl +#include "MsgBioControlFactory.h" // for MMsgBioControlFactory +#include "MsgEditorUtils.pan" // for MsgEditorUtils panics +#include // for MMsgBaseControlObserver +#include // for CFileStore +#include // MTM server API +#include +#include "msgbiocontrol.h" // for CMsgBioControl +#include // CMsvSession +#include "MsgEditorUtilsLog.h" + +// EXTERNAL DATA STRUCTURES +// EXTERNAL FUNCTION PROTOTYPES +// CONSTANTS +// MACROS + +// LOCAL CONSTANTS AND MACROS + +const TInt KControlIdBioControl = 0; +const TInt KNumberOfControls = 1; + +// MODULE DATA STRUCTURES +// LOCAL FUNCTION PROTOTYPES +// ==================== LOCAL FUNCTIONS ==================== + + +// ================= MEMBER FUNCTIONS ======================= + +EXPORT_C CMsgBioBodyControl::~CMsgBioBodyControl() + { + delete iBioControl; + delete iBioControlFactory; + } + +EXPORT_C CMsgBioBodyControl* CMsgBioBodyControl::NewL( + MMsgBioControlObserver& aBioControlObserver, + const TUid& aBioMsgType, // Bio message type id + TMsvId aId, + TMsgBioMode aEditorOrViewerMode, + CMsvSession& aSession) + { + LOG("CMsgBioBodyControl::NewL begin"); + CMsgBioBodyControl* self = new(ELeave) CMsgBioBodyControl(aSession); + CleanupStack::PushL(self); + self->ConstructL(aBioControlObserver, aBioMsgType, aId, + aEditorOrViewerMode); + CleanupStack::Pop(self); + LOG("CMsgBioBodyControl::NewL end"); + return self; + } + +void CMsgBioBodyControl::ConstructL( + MMsgBioControlObserver& aBioControlObserver, + const TUid& aBioMsgType, + TMsvId aId, + TMsgBioMode aEditorOrViewerMode) + { + LOG("CMsgBioBodyControl::ConstructL begin"); + iControlType = EMsgBodyControl; + + iBioControlFactory = CMsgBioControlFactory::NewL(); + iBioControl = iBioControlFactory->CreateControlL( + aBioControlObserver, + aBioMsgType, + aEditorOrViewerMode, + aId, + &iSession); + iBioControl->SetBioBodyControl( this ); + LOG("CMsgBioBodyControl::ConstructL end"); + } + +CMsgBioBodyControl::CMsgBioBodyControl(CMsvSession& aSession) : iSession(aSession) + { + } + +EXPORT_C TBool CMsgBioBodyControl::HandleBioCommandL(TInt aCommand) + { + __ASSERT_DEBUG(iBioControl, Panic(EMEUBioControlNotExist)); + + return iBioControl->HandleBioCommandL(aCommand); + } + +EXPORT_C HBufC* CMsgBioBodyControl::HeaderTextL(void) const + { + __ASSERT_DEBUG(iBioControl, Panic(EMEUBioControlNotExist)); + return iBioControl->HeaderTextL(); + } + +EXPORT_C TRect CMsgBioBodyControl::CurrentLineRect() //virtual + { + __ASSERT_DEBUG(iBioControl, Panic(EMEUBioControlNotExist)); + TRect lineRect = iBioControl->CurrentLineRect(); + lineRect.iTl.iX = Rect().iTl.iX; + lineRect.iBr.iX = Rect().iBr.iX; + + //This is a translation to screen origin coordinates. + lineRect.Move(TPoint(0, Position().iY)); + + return lineRect; + } + +EXPORT_C void CMsgBioBodyControl::SetAndGetSizeL(TSize& aSize) + { + __ASSERT_DEBUG(iBioControl, Panic(EMEUBioControlNotExist)); + if (iBioControl->IsFileBased()) + { + iBioControl->SetSize(aSize); //from CCoeControl + } + else + { + iBioControl->SetAndGetSizeL(aSize); + } + SetSizeWithoutNotification(aSize); + } + +//This is from CMsgBaseControl. +EXPORT_C void CMsgBioBodyControl::ClipboardL(TMsgClipboardFunc /*aFunc*/) + { + } + +//This is from CMsgBaseControl. +EXPORT_C void CMsgBioBodyControl::EditL(TMsgEditFunc /*aFunc*/) + { + } + +EXPORT_C TUint32 CMsgBioBodyControl::EditPermission() const + { + __ASSERT_DEBUG(iBioControl, Panic(EMEUBioControlNotExist)); + TUint32 editPerm(EMsgEditNone); + TUint32 bioPerm(0); + // Implementations should not leave but if it happens ignore. + TRAP_IGNORE(bioPerm = iBioControl->OptionMenuPermissionsL()); + if ( bioPerm & EMsgBioEditText) + { + editPerm |= EMsgEditCut; + editPerm |= EMsgEditCopy; + editPerm |= EMsgEditPaste; + editPerm |= EMsgEditUndo; + } + return editPerm; + } + +EXPORT_C TBool CMsgBioBodyControl::IsFocusChangePossible(TMsgFocusDirection aDirection) const + { + __ASSERT_DEBUG(iBioControl, Panic(EMEUBioControlNotExist)); + return iBioControl->IsFocusChangePossible(aDirection); + } + +EXPORT_C TBool CMsgBioBodyControl::IsCursorLocation(TMsgCursorLocation aLocation) const + { + __ASSERT_DEBUG(iBioControl, Panic(EMEUBioControlNotExist)); + return iBioControl->IsCursorLocation(aLocation); + } + +EXPORT_C TInt CMsgBioBodyControl::VirtualHeight() +{ + return iBioControl->VirtualHeight(); +} + +EXPORT_C TInt CMsgBioBodyControl::VirtualVisibleTop() +{ + return iBioControl->VirtualVisibleTop(); +} + +TKeyResponse CMsgBioBodyControl::OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType) //virtual + { + __ASSERT_DEBUG(iBioControl, Panic(EMEUBioControlNotExist)); + + return iBioControl->OfferKeyEventL(aKeyEvent, aType); + } + +EXPORT_C TBool CMsgBioBodyControl::HandleBaseControlEventRequestL( + TMsgBioControlEventRequest aRequest, + TInt aDelta) + { + TMsgControlEventRequest controlEvent; + + switch ( aRequest ) + { + case EMsgBioUpdateScrollBars: + { + controlEvent = EMsgEnsureCorrectFormPosition; + break; + } + default: + { + controlEvent = EMsgEnsureCorrectFormPosition; + break; + } + } + + return iBaseControlObserver->HandleBaseControlEventRequestL( + this, controlEvent, aDelta); + + } + +// from CMsgBaseControl +void CMsgBioBodyControl::PrepareForReadOnly(TBool /*aReadOnly*/) + { + __ASSERT_DEBUG(iBioControl, Panic(EMEUBioControlNotExist)); + } + +TInt CMsgBioBodyControl::CountComponentControls() const + { + return KNumberOfControls; + } + +CCoeControl* CMsgBioBodyControl::ComponentControl(TInt aIndex) const + { + __ASSERT_DEBUG(aIndex == KControlIdBioControl, Panic(EMEUIncorrectComponentIndex)); + if (aIndex == KControlIdBioControl) + { + return iBioControl; + } + return NULL; + } + +void CMsgBioBodyControl::SizeChanged() + { + __ASSERT_DEBUG(iBioControl, Panic(EMEUBioControlNotExist)); + + iBioControl->SetExtent(Position(), iBioControl->Size()); + } + +// --------------------------------------------------------- +// The menu doesn't need to be restored when the focus +// goes outside the body. Double check! +// --------------------------------------------------------- +// +void CMsgBioBodyControl::FocusChanged(TDrawNow /*aDrawNow*/) + { + __ASSERT_DEBUG(iBioControl, Panic(EMEUBioControlNotExist)); + + if (!iBioControl->IsNonFocusing()) + { + iBioControl->SetFocus(IsFocused()); + } + } + +void CMsgBioBodyControl::SetContainerWindowL(const CCoeControl& aContainer) //virtual + { + __ASSERT_DEBUG(iBioControl, Panic(EMEUBioControlNotExist)); + + CCoeControl::SetContainerWindowL(aContainer); + iBioControl->SetContainerWindowL(aContainer); + } + +EXPORT_C void CMsgBioBodyControl::SetMenuCommandSetL(CEikMenuPane& aMenuPane) + { + iBioControl->SetMenuCommandSetL(aMenuPane); + } + +EXPORT_C CMsgBioControl& CMsgBioBodyControl::BioControl(void) + { + __ASSERT_DEBUG(iBioControl, Panic(EMEUBioControlNotExist)); + return *iBioControl; + } + +#ifdef RD_SCALABLE_UI_V2 +EXPORT_C TInt CMsgBioBodyControl::ScrollL( TInt aPixelsToScroll, + TMsgScrollDirection aDirection ) + { + return iBioControl->ScrollL( aPixelsToScroll, aDirection ); + } + +EXPORT_C void CMsgBioBodyControl::NotifyViewEvent( TMsgViewEvent aEvent, + TInt aParam ) + { + iBioControl->NotifyViewEvent( aEvent, aParam ); + } +#else +EXPORT_C TInt CMsgBioBodyControl::ScrollL( TInt /*aPixelsToScroll*/, + TMsgScrollDirection /*aDirection*/ ) + { + return 0; + } + +EXPORT_C void CMsgBioBodyControl::NotifyViewEvent( TMsgViewEvent /*aEvent*/, TInt /*aParam*/ ) + { + //no op + } +#endif //RD_SCALABLE_UI_V2 + +// End of File