diff -r ebe688cedc25 -r 7fdbb852d323 messagingappbase/smartmessaging/icalbc/src/CICalBC.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/messagingappbase/smartmessaging/icalbc/src/CICalBC.cpp Wed Sep 01 12:31:54 2010 +0100 @@ -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 +#include +#include +#include +#include // RFileReadStream +#include // StringLoader +#include // MMsgBioControlObserver +#include // CRichBio +#include +#include "CICalBC.h" // CICalendarBioControl +#include // __SERIES60_HELP +#include +#include +#include +#include +#include +#include + + +// 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(&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