--- /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