messagingappbase/smartmessaging/icalbc/src/CICalBC.cpp
changeset 0 72b543305e3a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingappbase/smartmessaging/icalbc/src/CICalBC.cpp	Thu Dec 17 08:44:11 2009 +0200
@@ -0,0 +1,360 @@
+/*
+* Copyright (c) 2005 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:  
+*     Bio control for iCalendar messages.
+*
+*/
+
+
+
+
+// INCLUDE FILES
+
+#include <eikon.hrh>
+#include <e32base.h>
+#include <eikmenup.h>
+#include <msvapi.h>
+#include <s32file.h>                // RFileReadStream
+#include <stringloader.h>           // StringLoader
+#include <msgbiocontrolobserver.h>  // MMsgBioControlObserver
+#include <crichbio.h>               // CRichBio
+#include <msgbioutils.h>
+#include "CICalBC.h"    			// CICalendarBioControl
+#include <bldvariant.hrh>			// __SERIES60_HELP
+#include <csxhelp/smart.hlp.hrh>
+#include <FeatMgr.h>
+#include <MMsvAttachmentManager.h>
+#include <f32file.h>
+#include <MeetingRequestUids.hrh>
+#include <avkon.hrh>
+
+
+// LOCAL CONSTANTS AND MACROS
+const TInt KLengthBeginICalendar = 15; // "BEGIN:VCALENDAR" -string length
+const TInt KICalBcHeightReductionBva = 9;
+
+_LIT(KAvkonResourceFile, "avkon.rsc");
+
+// MEMBER FUNCTIONS
+
+CICalendarBioControl::~CICalendarBioControl()
+    {
+    FeatureManager::UnInitializeLib();
+    iVCalStream.Close();
+    delete iICalContainer;
+    }
+
+EXPORT_C CMsgBioControl* CICalendarBioControl::NewL(
+    MMsgBioControlObserver& aObserver,
+    CMsvSession* aSession,
+    TMsvId aId,
+    TMsgBioMode aEditorOrViewerMode,
+    const RFile* aFile )
+    {
+    CICalendarBioControl* self = new(ELeave) CICalendarBioControl(
+        aObserver,
+        aSession,
+        aId,
+        aEditorOrViewerMode,
+        aFile );
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop(); //self
+    return self;
+    }
+
+void CICalendarBioControl::SetAndGetSizeL(TSize& aSize)
+    {
+    if ( iIsFileBased )
+        {
+        SetPosition(TPoint(0, KICalBcHeightReductionBva));
+        aSize.iHeight -= KICalBcHeightReductionBva;
+        iViewer->SetSize(aSize);
+        }
+    else
+        {
+        iViewer->SetSize(aSize);
+        }
+    SetSizeWithoutNotification(aSize);
+    }
+
+void CICalendarBioControl::SetMenuCommandSetL(CEikMenuPane& aMenuPane)
+    {
+    if (!IsEditor())
+        {
+        if ( iIsFileBased )
+            {
+            iICalContainer->DynInitMenuPaneL(0,&aMenuPane);
+            }
+		}
+    }
+
+TBool CICalendarBioControl::HandleBioCommandL(TInt aCommand)
+    {
+    return iICalContainer->HandleCommandL(aCommand);
+    }
+
+TRect CICalendarBioControl::CurrentLineRect() const
+    {
+    //return iViewer->CurrentLineRect();
+    return TRect();
+    }
+
+TBool CICalendarBioControl::IsFocusChangePossible(
+    TMsgFocusDirection /*aDirection*/) const
+    {
+    return EFalse;
+    }
+
+HBufC* CICalendarBioControl::HeaderTextL() const
+    {
+    return KNullDesC().AllocL();
+    }
+
+TInt CICalendarBioControl::VirtualHeight()
+    {
+    return 0;
+    }
+
+TInt CICalendarBioControl::VirtualVisibleTop()
+    {
+    return 0;
+    }
+
+TBool CICalendarBioControl::IsCursorLocation(TMsgCursorLocation /*aLocation*/) const
+    {
+  	return EFalse;
+    }
+
+TInt CICalendarBioControl::CountComponentControls() const
+    {
+    return 1; // the viewer component
+    }
+
+CCoeControl* CICalendarBioControl::ComponentControl(TInt aIndex) const
+    {
+    if (aIndex == 0)
+        {
+        return iViewer;
+        }
+    return NULL;
+    }
+
+void CICalendarBioControl::SizeChanged()
+    {
+    iViewer->SetExtent(Position(), iViewer->Size());
+    }
+
+void CICalendarBioControl::FocusChanged(TDrawNow /*aDrawNow*/)
+    {
+    iViewer->SetFocus(IsFocused());
+    }
+
+void CICalendarBioControl::SetContainerWindowL(const CCoeControl& aContainer)
+    {
+    CCoeControl::SetContainerWindowL(aContainer);
+    iParentControl = const_cast<CCoeControl*>(&aContainer);
+	
+    iICalContainer->ViewMessageL(iVCalStream,*this);
+    }
+
+TKeyResponse CICalendarBioControl::OfferKeyEventL(
+    const TKeyEvent& aKeyEvent,
+    TEventCode aType)
+    {
+    return iViewer->OfferKeyEventL(aKeyEvent, aType);
+    }
+
+void CICalendarBioControl::FileBasedAddMenuItemL(CEikMenuPane& aMenuPane,
+    TInt aStringRes, TInt aCommandOffset)
+    {
+    CEikMenuPaneItem::SData menuItem;
+    menuItem.iCascadeId = NULL;
+    menuItem.iFlags = NULL;
+    HBufC* menuItemText(StringLoader::LoadLC(aStringRes, iCoeEnv));
+    TPtr textPtr = menuItemText->Des();
+    if(textPtr.Length() > CEikMenuPaneItem::SData::ENominalTextLength)
+    	{
+    	menuItem.iText.Format(textPtr.MidTPtr(0,CEikMenuPaneItem::SData::ENominalTextLength) );
+    	}
+    else
+    	{
+    	menuItem.iText.Format(textPtr);
+    	}
+    CleanupStack::PopAndDestroy(menuItemText); // (string)
+    menuItem.iCommandId = iBioControlObserver.FirstFreeCommand()
+        + aCommandOffset;
+    aMenuPane.InsertMenuItemL(menuItem, 0);
+    iICalContainer->DynInitMenuPaneL(0,&aMenuPane);
+    }
+
+void CICalendarBioControl::OpenStreamLC(RFileReadStream& aStream,
+    TFileName& aFileName)
+    {
+    User::LeaveIfError( aStream.Open(
+        CCoeEnv::Static()->FsSession(),
+        aFileName,
+        EFileStream ));
+    aStream.PushL();
+    }
+
+CICalendarBioControl::CICalendarBioControl(
+    MMsgBioControlObserver& aObserver,
+    CMsvSession* aSession,
+    TMsvId aId,
+    TMsgBioMode aEditorOrViewerMode,
+    const RFile* aFile ):
+        CMsgBioControl(aObserver,
+            aSession,
+            aId,
+            aEditorOrViewerMode,
+            aFile )
+    {
+    }
+
+void CICalendarBioControl::ConstructL()
+    {
+    LoadResourceL(KAvkonResourceFile);
+    LoadStandardBioResourceL();
+    
+    // Due to current bio control base problem filehandle & IsFileBased() mustn't
+    // be accessed after construction phase!
+    RFile fileHandle;
+    iIsFileBased = IsFileBased(); 
+    if ( iIsFileBased )
+        {
+		fileHandle = FileHandle();
+		iVCalStream.Attach( fileHandle );
+        }
+    else
+        {
+        CMsvEntry* entry = MsvSession().GetEntryL( iId );
+        CleanupStack::PushL( entry );
+		CMsvStore* store = entry->ReadStoreL();
+		CleanupStack::PushL(store);
+		MMsvAttachmentManager& attachMan = store->AttachmentManagerL();
+		fileHandle = attachMan.GetAttachmentFileL( 0 ); //entry is the first attachment
+		iVCalStream.Attach( fileHandle );
+		CleanupStack::PopAndDestroy( 2 ); // store, entry
+        }        
+
+	MStreamBuf* buf = iVCalStream.Source();
+    User::LeaveIfNull(buf);
+    TInt bufferSize = buf->SizeL();
+    if (bufferSize == 0 || (bufferSize < KLengthBeginICalendar))
+        {
+        User::Leave(KErrMsgBioMessageNotValid);
+        }
+
+    FeatureManager::InitializeLibL();
+
+	TUid viewerID = TUid::Uid(KUidMsgMailECOMIcalViewImpl);
+    iICalContainer = CMailMessageView::NewL(viewerID);
+	
+    LoadResourceL(iICalContainer->ResourceFile());
+    
+    fileHandle.Close();
+    }
+
+void CICalendarBioControl::AddAttachmentL(
+    CMsvAttachment& /*aAttachmentInfo*/,
+    TBool /*aCanBeRemoved*/ )
+	{
+	
+	}
+
+void CICalendarBioControl::AddControlL(CCoeControl& aControl)
+    {
+    iViewer = &aControl;
+    }
+
+void CICalendarBioControl::AddControlL( TInt /*aControlType*/ )
+	{
+	}
+	
+void CICalendarBioControl::AddControlL( MMailMsgBaseControl& /*aControl*/ )
+	{
+	}
+
+CCoeControl& CICalendarBioControl::ParentControl()
+    {
+    return *iParentControl;
+    }
+    
+CEikStatusPane* CICalendarBioControl::StatusPane()   
+	{
+	return NULL;
+	}
+
+void CICalendarBioControl::SetTitleTextL(TInt aResourceId)
+    {
+    iTitleResourceID = aResourceId;
+    }
+
+void CICalendarBioControl::StartWaitNoteL(/*const TDesC& aText*/)
+	{
+	}
+
+void CICalendarBioControl::StopWaitNote()
+	{
+	}
+	
+void CICalendarBioControl::SetAddressFieldTextL(TInt /*aControlType*/, CDesCArray& /*aText*/)
+	{
+	}
+void CICalendarBioControl::SetAddressFieldTextL(TInt /*aControlType*/, TDesC& /*aText*/)
+	{
+	}
+	
+void CICalendarBioControl::SetBodyTextL(CRichText& /*aText*/)
+	{
+	}
+	
+void CICalendarBioControl::SetSubjectL(const TDesC& /*aText*/)
+	{
+	}
+	
+TRect CICalendarBioControl::MsgViewRect(TInt /*aPane*/)
+	{
+	return TRect(0,0,0,0);
+	}
+	
+void CICalendarBioControl::AppUiHandleCommandL(TInt aCommand)
+	{
+	switch( aCommand )
+		{
+		case EAknSoftkeyBack:
+			{
+			iBioControlObserver.RequestHandleCommandL(MMsgBioControlObserver::EMsgClose);
+			break;
+			}
+		default:
+			{
+			break;
+			}
+		}
+	}
+	
+TBool CICalendarBioControl::IsNextMessageAvailableL( TBool /*aForward*/)
+	{
+	return EFalse;
+	}
+        
+void CICalendarBioControl::NextMessageL( TBool /*aForward*/ )
+	{
+	//empty implementation
+	}
+	
+
+//  End of File