diff -r 000000000000 -r 2f259fa3e83a commonuisupport/uikon/test/tlibs/contentmgr/contentmgr.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/commonuisupport/uikon/test/tlibs/contentmgr/contentmgr.cpp Tue Feb 02 01:00:49 2010 +0200 @@ -0,0 +1,296 @@ +// Copyright (c) 2005-2009 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: +// + +/** + @file + @internalComponent - Internal Symbian test code +*/ + +#include "contentmgr.h" +#include +#include +#include +#include + +GLDEF_C TInt E32Dll( + ) + { + return(KErrNone); + } + +// +// class CTestPictureAudio +// + +class CTestPictureAudio : public CPicture, public MMdaAudioPlayerCallback + { +public: + static CTestPictureAudio* NewL(RFs& aFs,const TDesC& aFileName); + static CTestPictureAudio* NewL(RFs& aFs,const CStreamStore& aStore,TStreamId aStreamId); + ~CTestPictureAudio(); + // + void PlayL(); +private: // from CPicture + void Draw(CGraphicsContext& aGc,const TPoint& aTopLeft,const TRect& aClipRect,MGraphicsDeviceMap* aMap) const; + void ExternalizeL(RWriteStream& aStream) const; + void GetOriginalSizeInTwips(TSize& aSize) const; +private: // from MMdaAudioPlayerCallback + void MapcInitComplete(TInt aError, const TTimeIntervalMicroSeconds& aDuration); + void MapcPlayComplete(TInt aError); +private: + CTestPictureAudio(RFs& aFs); + void ConstructL(const TDesC& aFileName); + void ConstructL(const CStreamStore& aStore,TStreamId aStreamId); + void CommonConstructL(); + void RestoreL(const CStreamStore& aStore,TStreamId aStreamId); + void StopPlay(); +private: + RFs& iFs; + CFbsBitmap* iBitmap; + CMdaAudioPlayerUtility* iSoundPlayer; + HBufC8* iPlayBuf; + TPtr8 iPtr; + }; + +_LIT(KBitmapName,"\\system\\data\\contentmgr.mbm"); + +CTestPictureAudio* CTestPictureAudio::NewL(RFs& aFs,const TDesC& aFileName) + { // static + CTestPictureAudio* self=new(ELeave) CTestPictureAudio(aFs); + CleanupStack::PushL(self); + self->ConstructL(aFileName); + CleanupStack::Pop(); // self + return self; + } + +CTestPictureAudio* CTestPictureAudio::NewL(RFs& aFs,const CStreamStore& aStore,TStreamId aStreamId) + { // static + CTestPictureAudio* self=new(ELeave) CTestPictureAudio(aFs); + CleanupStack::PushL(self); + self->ConstructL(aStore,aStreamId); + CleanupStack::Pop(); // self + return self; + } + +CTestPictureAudio::~CTestPictureAudio() + { + StopPlay(); + delete iBitmap; + delete iPlayBuf; + } + +void CTestPictureAudio::PlayL() + { + StopPlay(); + iSoundPlayer=CMdaAudioPlayerUtility::NewDesPlayerL(iPtr,*this); + } + +void CTestPictureAudio::Draw(CGraphicsContext& aGc,const TPoint& aTopLeft,const TRect& aClipRect, + MGraphicsDeviceMap* /*aMap*/) const + { + TSize sizeInPixels=iBitmap->SizeInPixels(); + TRect originalRectInPixels(aTopLeft,sizeInPixels); + aGc.SetClippingRect(aClipRect); + aGc.DrawBitmap(originalRectInPixels,iBitmap); + aGc.CancelClippingRect(); + } + +void CTestPictureAudio::ExternalizeL(RWriteStream& aStream) const + { + aStream.WriteInt32L(iPtr.Length()); + aStream.WriteL(iPtr); + } + +void CTestPictureAudio::GetOriginalSizeInTwips(TSize& aSize) const + { + TSize sizeInPixels=iBitmap->SizeInPixels(); + TInt vert=iBitmap->VerticalPixelsToTwips(sizeInPixels.iHeight); + TInt horiz=iBitmap->HorizontalPixelsToTwips(sizeInPixels.iWidth); + aSize=TSize(horiz,vert); + } + +void CTestPictureAudio::MapcInitComplete(TInt aError, const TTimeIntervalMicroSeconds& /*aDuration*/) + { + if (aError) + { + StopPlay(); + return;; + } + iSoundPlayer->Play(); + } + +void CTestPictureAudio::MapcPlayComplete(TInt /*aError*/) + { + StopPlay(); + } + +CTestPictureAudio::CTestPictureAudio(RFs& aFs) + : iFs(aFs), iPtr(NULL,0) + {} + +LOCAL_C void GetFullPath(TDes& aPath) + { + TFileName dllName; + Dll::FileName(dllName); + TBuf<2> drive=dllName.Left(2); + aPath.Insert(0,drive); + } + +void CTestPictureAudio::CommonConstructL() + { + TFileName bitmapFile=KBitmapName(); + GetFullPath(bitmapFile); + iBitmap=new(ELeave) CFbsBitmap; + User::LeaveIfError(iBitmap->Load(bitmapFile)); + } + +void CTestPictureAudio::ConstructL(const TDesC& aFileName) + { + CommonConstructL(); // creates bitmap + RFile file; + User::LeaveIfError(file.Open(iFs,aFileName,EFileRead)); + CleanupClosePushL(file); + TInt size; + User::LeaveIfError(file.Size(size)); + iPlayBuf=HBufC8::NewL(size); + TPtr8 ptr=iPlayBuf->Des(); + iPtr.Set(ptr); + User::LeaveIfError(file.Read(iPtr)); + CleanupStack::PopAndDestroy(); // file.Close() + } + +void CTestPictureAudio::ConstructL(const CStreamStore& aStore,TStreamId aStreamId) + { + CommonConstructL(); // creates bitmap + // following is a poor example. There's no reason for us to waste time restoring the embedded + // stream yet. We could wait till its really needed but that requires more faffing with Store + // than can be justified for some quick example code. + RestoreL(aStore,aStreamId); + } + +void CTestPictureAudio::RestoreL(const CStreamStore& aStore,TStreamId aStreamId) + { + RStoreReadStream stream; + stream.OpenLC(aStore,aStreamId); + const TInt len=stream.ReadInt32L(); + iPlayBuf=HBufC8::NewL(len); + TPtr8 ptr=iPlayBuf->Des(); + stream.ReadL(ptr,len); + CleanupStack::PopAndDestroy(); // stream + iPtr.Set(ptr); + } + +void CTestPictureAudio::StopPlay() + { + delete iSoundPlayer; + iSoundPlayer=NULL; + } + +// +// class CTestAudioContent +// + +class CTestAudioContent : public CBase + { +public: + CStreamStore* iHost; + TFileName iSourceFile; + }; + +// +// class CEikTestContentManager +// + +_LIT8(KContentDataTypeAudio,"audio/*"); +const TUid KTestContentType={5711}; + +EXPORT_C CEikTestContentManager* CEikTestContentManager::NewL(RFs& aFs) + { // static + CEikTestContentManager* self=new(ELeave) CEikTestContentManager(aFs); + return self; + } + +EXPORT_C CEikTestContentManager::~CEikTestContentManager() + { + } + +EXPORT_C void CEikTestContentManager::GetPictureTypeFromDataL(TUid& aPictureType,CBase*& aData, + const TDesC& aFileName,const TDesC8& aSrcData) const + { + RApaLsSession ls; + User::LeaveIfError(ls.Connect()); + CleanupClosePushL(ls); + TDataRecognitionResult res; + User::LeaveIfError(ls.RecognizeData(aFileName,aSrcData,res)); + CleanupStack::PopAndDestroy(); // ls + // + TUid type=KNullUid; + if (res.iDataType.Des8().MatchF(KContentDataTypeAudio)==0) + { + CTestAudioContent* data=new(ELeave) CTestAudioContent; + data->iSourceFile=aFileName; + aData=data; + type=KTestContentType; + } + aPictureType=type; + } + +TBool CEikTestContentManager::SupportsPictureType(TUid aPictureType) const + { + return (aPictureType==KTestContentType); + } + +const MPictureFactory* CEikTestContentManager::PictureFactory(TUid aPictureType) const + { + if (aPictureType==KTestContentType) + { + return this; + } + return NULL; + } + +TPictureHeader CEikTestContentManager::InsertL(TUid aPictureType,CBase* aData) + { + TPictureHeader header; + if (aPictureType==KTestContentType) + { + CPicture* picture=CTestPictureAudio::NewL(iFs,static_cast(aData)->iSourceFile); + header.iPicture=picture; + header.iPictureType=aPictureType; + picture->GetOriginalSizeInTwips(header.iSize); + } + return header; + } + +void CEikTestContentManager::EditL(const TPictureHeader& aPictureHeader,TBool /*aReadOnly*/) + { + CTestPictureAudio* picture=static_cast(aPictureHeader.iPicture.AsPtr()); + picture->PlayL(); + } + +void CEikTestContentManager::NewPictureL(TPictureHeader& aHeader,const CStreamStore& aDeferredPictureStore) const + { + if (aHeader.iPictureType!=KTestContentType) + { + User::Leave(KErrNotSupported); + } + TStreamId id=aHeader.iPicture.AsId(); + CTestPictureAudio* picture=CTestPictureAudio::NewL(iFs,aDeferredPictureStore,id); + aHeader.iPicture=picture; + } + +CEikTestContentManager::CEikTestContentManager(RFs& aFs) + : iFs(aFs) + {}