--- /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 <MsgBaseControlObserver.h> // for MMsgBaseControlObserver
+#include <s32file.h> // for CFileStore
+#include <msvapi.h> // MTM server API
+#include <eikmenup.h>
+#include "msgbiocontrol.h" // for CMsgBioControl
+#include <msvapi.h> // 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