messagingappbase/smartmessaging/msgeditorutils/src/MsgBioBodyControl.cpp
changeset 0 72b543305e3a
--- /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