# HG changeset patch # User Dremov Kirill (Nokia-D-MSW/Tampere) # Date 1268649630 -7200 # Node ID ce1c7ad1f18b45bfacb65f48d68e632c0da3d6f5 # Parent 71da52165949b904a8e9c3d018cd2e085b9f4a8e Revision: 201009 Kit: 201010 diff -r 71da52165949 -r ce1c7ad1f18b photos_plat/gallery_utilities_api/inc/glxcollectionpluginpriority.hrh --- a/photos_plat/gallery_utilities_api/inc/glxcollectionpluginpriority.hrh Fri Mar 12 15:42:44 2010 +0200 +++ b/photos_plat/gallery_utilities_api/inc/glxcollectionpluginpriority.hrh Mon Mar 15 12:40:30 2010 +0200 @@ -15,7 +15,9 @@ * */ - +//IMPORTANT NOTE: If anyone wants to changed priority or order of priority then please +//done appropriate changes in glxlistviewimp.h and glxlistviewimp.cpp. SetDefaultThumbnail() +//function has dependancy with priority order of colleciton plugins. #ifndef __GLXCOLLECTIONPLUGINPRIORITY_HRH diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/collectionframework/datasource/manager/src/glxrequest.cpp --- a/photosgallery/collectionframework/datasource/manager/src/glxrequest.cpp Fri Mar 12 15:42:44 2010 +0200 +++ b/photosgallery/collectionframework/datasource/manager/src/glxrequest.cpp Mon Mar 15 12:40:30 2010 +0200 @@ -58,7 +58,7 @@ } else { - // No filter supplied, so create a default filter; + // No filter supplied, so create a default filter iFilter = TGlxFilterFactory::CreateAlphabeticSortFilterL(); } } diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/collectionframework/datasource/plugins/glxdatasourcemde2.5/inc/glxdatasourcemds.h --- a/photosgallery/collectionframework/datasource/plugins/glxdatasourcemde2.5/inc/glxdatasourcemds.h Fri Mar 12 15:42:44 2010 +0200 +++ b/photosgallery/collectionframework/datasource/plugins/glxdatasourcemde2.5/inc/glxdatasourcemds.h Mon Mar 15 12:40:30 2010 +0200 @@ -63,9 +63,7 @@ #endif class CGlxDataSourceMde ; -// Use this till MDS bug is fixed. Then KMdSPSShutdown is to be used. const TUid KHarvesterPSShutdown = { 0x200009F5 } ; -//const TUid KMdSPSShutdown = { 0x20022E94 }; const TInt KMdSShutdown = 0x00000002; // values 1 = shutdown, 0 = restart, normal state static _LIT_SECURITY_POLICY_PASS(KAllowAllPolicy); diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/collectionframework/datasource/plugins/glxdatasourcemde2.5/src/glxdatasourcemds.cpp --- a/photosgallery/collectionframework/datasource/plugins/glxdatasourcemde2.5/src/glxdatasourcemds.cpp Fri Mar 12 15:42:44 2010 +0200 +++ b/photosgallery/collectionframework/datasource/plugins/glxdatasourcemde2.5/src/glxdatasourcemds.cpp Mon Mar 15 12:40:30 2010 +0200 @@ -724,7 +724,6 @@ void CGlxDataSourceMde::ProcessItemUpdateL() { TRACER("CGlxDataSourceMde::ProcessItemUpdateL()"); - //__ASSERT_DEBUG(iUpdateData.Count(), Panic(EGlxPanicIllegalState)); if ( !iUpdateData.Count() || iPauseUpdate ) { return; diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/collectionframework/datasource/plugins/glxdatasourcemde2.5/src/glxdatasourcetaskmds.cpp --- a/photosgallery/collectionframework/datasource/plugins/glxdatasourcemde2.5/src/glxdatasourcetaskmds.cpp Fri Mar 12 15:42:44 2010 +0200 +++ b/photosgallery/collectionframework/datasource/plugins/glxdatasourcemde2.5/src/glxdatasourcetaskmds.cpp Mon Mar 15 12:40:30 2010 +0200 @@ -70,8 +70,6 @@ _LIT(KPropertyDefNameCreationDate, "CreationDate"); _LIT(KPropertyDefNameLastModifiedDate, "LastModifiedDate"); _LIT(KPropertyDefNameTitle, "Title"); -//Code commented cout below, so commenting the below line to remove BAD warning -//_LIT(KPropertyDefNameDRM, "DRM"); _LIT(KPropertyDefNameFrameCount, "FrameCount"); _LIT(KPropertyDefNameOrigin, "Origin"); @@ -363,7 +361,6 @@ if( aFilterProperties.iExcludeAnimation ) { - //__ASSERT_DEBUG((EGlxFilterImage == aFilterProperties.iItemType), Panic(EGlxPanicIllegalArgument)); // Exclude any image with a frame count > 1 const TInt excludeAllImagesAboveOrEqualToThisFrameCount = 2; CMdEPropertyDef& frameCountProperty = DataSource()->ImageDef().GetPropertyDefL( @@ -376,9 +373,6 @@ { __ASSERT_DEBUG((EGlxFilterImage == aFilterProperties.iItemType), Panic( EGlxPanicIllegalArgument)); - // Exclude any image which is DRM protected - //CMdEPropertyDef& drmProperty = DataSource()->ImageDef().GetPropertyDefL(KPropertyDefNameDRM); - //aLogicCondition.AddPropertyConditionL(drmProperty, EFalse); } if( aFilterProperties.iPath ) // If this is set. Then we need to filter on the Ids it supplies diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/collectionframework/datasource/plugins/glxdatasourcemde2.5/src/glxdatasourcetaskmdsattribute.cpp --- a/photosgallery/collectionframework/datasource/plugins/glxdatasourcemde2.5/src/glxdatasourcetaskmdsattribute.cpp Fri Mar 12 15:42:44 2010 +0200 +++ b/photosgallery/collectionframework/datasource/plugins/glxdatasourcemde2.5/src/glxdatasourcetaskmdsattribute.cpp Mon Mar 15 12:40:30 2010 +0200 @@ -127,26 +127,8 @@ } else { - - /* __ASSERT_DEBUG(dynamic_cast(iRequest), Panic(EGlxPanicLogicError)); - CGlxGetRequest* request = static_cast(iRequest); - - QueueImageVideoObjectQueriesL(request->MediaIds(), iFilterProperties); - QueueAlbumObjectQueryL(request->MediaIds()); - QueueTagObjectQueryL(request->MediaIds()); - QueueMonthObjectQueryL(request->MediaIds()); - - if (LocationAttributeRequested()) - { - QueueLocaitonQueryL(); - } - - */ - __ASSERT_DEBUG(dynamic_cast(iRequest), Panic(EGlxPanicLogicError)); CGlxGetRequest* request = static_cast(iRequest); -// Not used anywhere, commenting out this line to avoid BAD warning -// const RArray& mediaIds = reinterpret_cast&>(request->MediaIds()); switch(iFilterProperties.iItemType) { @@ -400,11 +382,6 @@ filterProperties.iOrigin = EGlxFilterOriginAll; break; } - /* case KGlxCollectionPluginDownloadsImplementationUid: - { - filterProperties.iOrigin = EGlxFilterOriginDownload; - break; - }*/ default: { // default gallery query returns all objects as per filter diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/collectionframework/datasource/plugins/glxdatasourcemde2.5/src/glxdatasourcetaskmdscommand.cpp --- a/photosgallery/collectionframework/datasource/plugins/glxdatasourcemde2.5/src/glxdatasourcetaskmdscommand.cpp Fri Mar 12 15:42:44 2010 +0200 +++ b/photosgallery/collectionframework/datasource/plugins/glxdatasourcemde2.5/src/glxdatasourcetaskmdscommand.cpp Mon Mar 15 12:40:30 2010 +0200 @@ -639,7 +639,6 @@ // Append the file name destinationFileName.Append(fileNameWithoutRoot); -/// @todo minor: Rowland Cook 12/06/2007 majic number. if (destinationFileName.CompareF(sourceFileName) != 0) { // If source and destination are not identical, perform the copy. @@ -770,8 +769,6 @@ TInt CGlxDataSourceTaskMdeCommand::ContainerObjectDef(CMdEObjectDef*& aContainerObjectDef) { TRACER("CGlxDataSourceTaskMdeCommand::ContainerObjectDef()"); - //__ASSERT_DEBUG( (iCollectionUid == TUid::Uid(KGlxTagCollectionPluginImplementationUid) - //|| iCollectionUid == TUid::Uid(KGlxCollectionPluginAlbumsImplementationUid)), Panic(EGlxPanicInvalidCollectionUid)); TInt err = KErrNone; if (iCollectionUid == TUid::Uid(KGlxTagCollectionPluginImplementationUid)) { diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/collectionframework/datasource/plugins/glxdatasourcemde2.5/src/glxdatasourcetaskmdsthumbnail.cpp --- a/photosgallery/collectionframework/datasource/plugins/glxdatasourcemde2.5/src/glxdatasourcetaskmdsthumbnail.cpp Fri Mar 12 15:42:44 2010 +0200 +++ b/photosgallery/collectionframework/datasource/plugins/glxdatasourcemde2.5/src/glxdatasourcetaskmdsthumbnail.cpp Mon Mar 15 12:40:30 2010 +0200 @@ -66,7 +66,6 @@ _LIT(KPropertyDefNameLastModifiedDate, "LastModifiedDate"); _LIT(KPropertyDefNameDRM, "DRM"); _LIT(KPropertyDefNameItemType, "ItemType"); -//_LIT(KPropertyDefNameLastModifiedDate, "LastModifiedDate"); _LIT(KPropertyDefNameSize, "Size"); _LIT(KUnsupportedItemType, "video/x-pn-realvideo"); _LIT(KUnsupportedItemType1, "video/x-pn-multirate-realvideo"); diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/commonui/src/glxnavigationalstate.cpp --- a/photosgallery/commonui/src/glxnavigationalstate.cpp Fri Mar 12 15:42:44 2010 +0200 +++ b/photosgallery/commonui/src/glxnavigationalstate.cpp Mon Mar 15 12:40:30 2010 +0200 @@ -141,14 +141,16 @@ */ inline void NavigateToParentL() { + TRACER("CGlxNavigationalStateImp::NavigateToParentL()"); if ( ViewingMode()== NGlxNavigationalState::EView ) { + GLX_LOG_INFO("CGlxNavigationalStateImp::NavigateToParentL() -1"); iViewingMode = NGlxNavigationalState::EBrowse; - //Collection().BackL(); // added by gopakumar NotifyObserversOfStateChange(); } else { + GLX_LOG_INFO("CGlxNavigationalStateImp::NavigateToParentL() -2"); Collection().BackL(); } } @@ -295,8 +297,6 @@ MMPXCollectionUtility* iCollectionUtility; MMPXViewUtility* iViewUtility; NGlxNavigationalState::TViewingMode iViewingMode; - // commented off by gopakumar as this is not used anymore - // TVwsViewId iViewId; /// List of observers RPointerArray< MGlxNavigationalStateObserver > iObservers; diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/controllers/imageviewer/bwins/glximageviewermanageru.def --- a/photosgallery/controllers/imageviewer/bwins/glximageviewermanageru.def Fri Mar 12 15:42:44 2010 +0200 +++ b/photosgallery/controllers/imageviewer/bwins/glximageviewermanageru.def Mon Mar 15 12:40:30 2010 +0200 @@ -7,4 +7,5 @@ ?ImageUri@CGlxImageViewerManager@@QAEPAVHBufC16@@XZ @ 6 NONAME ; class HBufC16 * CGlxImageViewerManager::ImageUri(void) ?ImageFileHandle@CGlxImageViewerManager@@QAEAAVRFile64@@XZ @ 7 NONAME ; class RFile64 & CGlxImageViewerManager::ImageFileHandle(void) ?InstanceL@CGlxImageViewerManager@@SAPAV1@XZ @ 8 NONAME ; class CGlxImageViewerManager * CGlxImageViewerManager::InstanceL(void) + ?IsPrivateGif@CGlxImageViewerManager@@QAEHXZ @ 9 NONAME ; int CGlxImageViewerManager::IsPrivateGif(void) diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/controllers/imageviewer/eabi/glximageviewermanageru.def --- a/photosgallery/controllers/imageviewer/eabi/glximageviewermanageru.def Fri Mar 12 15:42:44 2010 +0200 +++ b/photosgallery/controllers/imageviewer/eabi/glximageviewermanageru.def Mon Mar 15 12:40:30 2010 +0200 @@ -9,4 +9,5 @@ _ZN22CGlxImageViewerManager9IsPrivateEv @ 8 NONAME _ZTI22CGlxImageViewerManager @ 9 NONAME _ZTV22CGlxImageViewerManager @ 10 NONAME + _ZN22CGlxImageViewerManager12IsPrivateGifEv @ 11 NONAME diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/controllers/imageviewer/group/glximageviewermanager.mmp --- a/photosgallery/controllers/imageviewer/group/glximageviewermanager.mmp Fri Mar 12 15:42:44 2010 +0200 +++ b/photosgallery/controllers/imageviewer/group/glximageviewermanager.mmp Mon Mar 15 12:40:30 2010 +0200 @@ -40,7 +40,10 @@ LIBRARY efsrv.lib LIBRARY euser.lib +LIBRARY caf.lib // ContentAccess::CManager LIBRARY flogger.lib // For Logging Tracer LIBRARY glxcommon.lib // CGlxSingetonStore +LIBRARY cone.lib // ConeUtils +LIBRARY platformenv.lib // DriveInfo //EXPORTUNFROZEN \ No newline at end of file diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/controllers/imageviewer/inc/glximageviewermanager.h --- a/photosgallery/controllers/imageviewer/inc/glximageviewermanager.h Fri Mar 12 15:42:44 2010 +0200 +++ b/photosgallery/controllers/imageviewer/inc/glximageviewermanager.h Mon Mar 15 12:40:30 2010 +0200 @@ -22,6 +22,7 @@ // INCLUDES #include #include +#include // CLASS DECLARATION class RFile; @@ -49,6 +50,7 @@ IMPORT_C HBufC* ImageUri(); IMPORT_C RFile64& ImageFileHandle(); IMPORT_C TBool IsPrivate(); + IMPORT_C TBool IsPrivateGif(); IMPORT_C void DeleteInstance( void ); IMPORT_C void SetImageUriL(const TDesC& aFileName); IMPORT_C void SetImageFileHandleL(const RFile& aFileHandle); @@ -86,6 +88,13 @@ /// Flag that stores if the image file is in a private folder. /// ETrue means the image is private, else EFalse TBool iIsPrivate; + + /// Content Access Manager + ContentAccess::CManager* iManager; + + /// Flag that stores if the gif file is in a private folder. + /// ETrue means the gif is from private path, else EFalse + TBool iIsPrivateGif; }; #endif // GLXIMAGEVIEWERMANAGER_H diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/controllers/imageviewer/src/glximageviewermanager.cpp --- a/photosgallery/controllers/imageviewer/src/glximageviewermanager.cpp Fri Mar 12 15:42:44 2010 +0200 +++ b/photosgallery/controllers/imageviewer/src/glximageviewermanager.cpp Mon Mar 15 12:40:30 2010 +0200 @@ -19,9 +19,17 @@ #include "glximageviewermanager.h" #include #include +#include #include +#include +#include +#include +_LIT( KPrivateFolder, "\\Private\\" ); +_LIT( KGifFileExt, ".gif" ); +_LIT( KTempFilePath, "?:\\data\\images\\200104E7.gif" ); + EXPORT_C CGlxImageViewerManager* CGlxImageViewerManager::InstanceL() { TRACER("CGlxImageViewerManager::InstanceL()"); @@ -52,6 +60,12 @@ return iIsPrivate; } +EXPORT_C TBool CGlxImageViewerManager::IsPrivateGif() + { + TRACER("CGlxImageViewerManager::IsPrivateGif()"); + return iIsPrivateGif; + } + CGlxImageViewerManager::CGlxImageViewerManager() : iImageUri(NULL), iFile(NULL), iIsPrivate(EFalse) { @@ -121,6 +135,18 @@ delete iFile; iFile = NULL; + if (iIsPrivateGif) + { + iManager->DeleteFile(iImageUri->Des()); + iIsPrivateGif = EFalse; + } + + if ( iManager ) + { + delete iManager; + iManager = NULL; + } + if ( iImageUri ) { delete iImageUri; @@ -136,18 +162,34 @@ EXPORT_C void CGlxImageViewerManager::SetImageFileHandleL(const RFile& aFileHandle) { TRACER("void CGlxImageViewerManager::SetImageFileHandleL()"); - _LIT( KPrivateFolder, "\\Private\\" ); // Platsec private folder TFileName filePath; - User::LeaveIfError( aFileHandle.FullName( filePath ) ); - SetImageUriL( filePath ); - TParsePtrC parse( filePath ); - if( parse.PathPresent() && - parse.Path().Length() > KPrivateFolder().Length() && - parse.Path().Left( KPrivateFolder().Length() ).CompareF( KPrivateFolder ) == 0 ) + User::LeaveIfError(aFileHandle.FullName(filePath)); + TParsePtrC parse(filePath); + if (parse.PathPresent() && parse.Path().Length() + > KPrivateFolder().Length() && parse.Path().Left( + KPrivateFolder().Length()).CompareF(KPrivateFolder) == 0) { // File is in private folder; duplicate file handle iFile = new (ELeave) RFile64; - User::LeaveIfError( iFile->Duplicate( aFileHandle ) ); + User::LeaveIfError(iFile->Duplicate(aFileHandle)); iIsPrivate = ETrue; + if (parse.Ext().Compare(KGifFileExt) == 0) + { + // Gif file from private path, hence make a local copy. + TFileName ramFilePath(KTempFilePath); + TChar drive; + User::LeaveIfError(DriveInfo::GetDefaultDrive( + DriveInfo::EDefaultRam, drive)); + ramFilePath[0] = drive; + ConeUtils::EnsurePathExistsL(ramFilePath); + if (!iManager) + { + iManager = ContentAccess::CManager::NewL(); + } + iManager->CopyFile(*iFile, ramFilePath); + filePath.Copy(ramFilePath); + iIsPrivateGif = ETrue; + } } + SetImageUriL( filePath ); } diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/icons/iconlist.txt --- a/photosgallery/icons/iconlist.txt Fri Mar 12 15:42:44 2010 +0200 +++ b/photosgallery/icons/iconlist.txt Mon Mar 15 12:40:30 2010 +0200 @@ -41,5 +41,19 @@ -c8,8 qgn_lgal_fav1.svg -c8,8 qgn_lgal_fav2.svg -c8,8 qgn_lgal_bg.svg +-c8,8 qgn_prop_photo_album_large.svg +-c8,8 qgn_prop_photo_tag_large +-c8,8 qgn_prop_photo_all_large +-c8,8 qgn_prop_photo_calendar_large -c8,8 save.svg -c8,8 use_as.svg +-c8,8 qgn_graf_ring_wait_01.svg +-c8,8 qgn_graf_ring_wait_02.svg +-c8,8 qgn_graf_ring_wait_03.svg +-c8,8 qgn_graf_ring_wait_04.svg +-c8,8 qgn_graf_ring_wait_05.svg +-c8,8 qgn_graf_ring_wait_06.svg +-c8,8 qgn_graf_ring_wait_07.svg +-c8,8 qgn_graf_ring_wait_08.svg +-c8,8 qgn_graf_ring_wait_09.svg +-c8,8 qgn_graf_ring_wait_10.svg diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/slideshow/engine/controlsrc/shweffectcontrol.cpp --- a/photosgallery/slideshow/engine/controlsrc/shweffectcontrol.cpp Fri Mar 12 15:42:44 2010 +0200 +++ b/photosgallery/slideshow/engine/controlsrc/shweffectcontrol.cpp Mon Mar 15 12:40:30 2010 +0200 @@ -472,13 +472,6 @@ } else { - // Set paused effect on current visual - //if(iPausedVisuals.Count()) - // { - // iSplitter.SetLayoutL( &iPausedLayout, iCurrentVisual ); - // } - //else - // { // enter the view mode for visual // ask the layout chain and set that to the current visual // set also effect fade-in @@ -488,7 +481,6 @@ iViewDuration, KFirstEffectFadeInDuration ), iCurrentVisual ); - // } } // bring the focus visual to the front iCurrentVisual->MoveToFront(); @@ -677,8 +669,7 @@ { while (count > 0) { - // unpause and remove the visuals - //iPausedVisuals[count]->Resume(); + //remove the visuals iPausedVisuals.Remove(--count); } } diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/slideshow/engine/effectsrc/shwcrossfadeeffect.cpp --- a/photosgallery/slideshow/engine/effectsrc/shwcrossfadeeffect.cpp Fri Mar 12 15:42:44 2010 +0200 +++ b/photosgallery/slideshow/engine/effectsrc/shwcrossfadeeffect.cpp Mon Mar 15 12:40:30 2010 +0200 @@ -188,8 +188,6 @@ GLX_LOG_INFO( "CShwCrossFadeEffect::InitializeL" ); // set the screen size iImpl->iScreenSize = aScreenSize; - // set the layout full screen (slideshow is always run on landscape) -// iImpl->iSizeLayout.SetValue( aScreenSize.iWidth, aScreenSize.iHeight, 0 ); } // ----------------------------------------------------------------------------- @@ -219,9 +217,6 @@ TAlfTimedValue tranition(1.0,aFadeInDuration); tranition.SetStyle(EAlfTimedValueStyleLinear); aVisual->SetOpacity(tranition); - // set value, 0% -> 100% - //iImpl->iOpacityLayout.Set( KMinOpacity ); - //iImpl->iOpacityLayout.Set( KMaxOpacity, aFadeInDuration ); return &iImpl->iOpacityLayout; } @@ -243,9 +238,6 @@ TRACER("CShwCrossFadeEffect::EnterTransitionL"); GLX_LOG_INFO1( "CShwCrossFadeEffect::EnterTransitionL( %d )", aDuration ); - // set value, drop from 100% to 0% - //iImpl->iOpacityLayout.Set( KMaxOpacity ); - //iImpl->iOpacityLayout.Set( KMinOpacity, aDuration ); TAlfTimedValue tranition(0.0,aDuration); tranition.SetStyle(EAlfTimedValueStyleLinear); aVisual->SetOpacity(tranition); diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/slideshow/engine/effectsrc/shwcrossfadelayout.cpp --- a/photosgallery/slideshow/engine/effectsrc/shwcrossfadelayout.cpp Fri Mar 12 15:42:44 2010 +0200 +++ b/photosgallery/slideshow/engine/effectsrc/shwcrossfadelayout.cpp Mon Mar 15 12:40:30 2010 +0200 @@ -94,9 +94,6 @@ // ensure value is inside maximum and minimum opacity opacity = Min( opacity, KMaxOpacity ); opacity = Max( opacity, KMinOpacity ); - - // set value to the info - //aInfo.iOpacity = opacity; } // ----------------------------------------------------------------------------- diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/slideshow/engine/effectsrc/shwcurvefactory.cpp --- a/photosgallery/slideshow/engine/effectsrc/shwcurvefactory.cpp Fri Mar 12 15:42:44 2010 +0200 +++ b/photosgallery/slideshow/engine/effectsrc/shwcurvefactory.cpp Mon Mar 15 12:40:30 2010 +0200 @@ -28,10 +28,6 @@ // ----------------------------------------------------------------------------- namespace NShwCurveFactory { - // constant for arc angle - //const TInt KStartAngle = 0; // start at 0 degrees - //const TInt KStopAngle = 360; // end in in 360 degrees - //const TInt KOrigo = 0; // centre is in origo // ------------------------------------------------------------------------- // CreateEllipsisL. // ------------------------------------------------------------------------- @@ -41,20 +37,6 @@ //function no longer used //needs to be refactored/removed CAlfCurvePath* curve =NULL; - /* CAlfCurvePath* curve = CAlfCurvePath::NewL(); - CleanupStack::PushL( curve ); - // HUI creates a double sized ellipsis so need to halve the sides - TSize realSize( aSize.iWidth / 2, aSize.iHeight / 2 ); - // create the arch for given length - curve->AppendArcL( - TPoint( KOrigo, KOrigo ), // centre point - realSize, // sides of the rect defining the ellipse - KStartAngle, // start angle - KStopAngle, // end angle - aLength ); // the whole circle - // enable loop - CleanupStack::Pop( curve ); - curve->EnableLoop( ETrue );*/ return curve; } } diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/slideshow/engine/effectsrc/shwzoomandpaneffect.cpp --- a/photosgallery/slideshow/engine/effectsrc/shwzoomandpaneffect.cpp Fri Mar 12 15:42:44 2010 +0200 +++ b/photosgallery/slideshow/engine/effectsrc/shwzoomandpaneffect.cpp Mon Mar 15 12:40:30 2010 +0200 @@ -299,8 +299,6 @@ iImpl->iCurve = curve; } ); } - // set the curve for the layout, its ok to set NULL -// iImpl->iZoomAndPanLayout.SetPanningCurve( iImpl->iCurve ); // return the calculated thumbnail size return thumbnailSize; diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/slideshow/engine/effectsrc/shwzoomandpanlayout.cpp --- a/photosgallery/slideshow/engine/effectsrc/shwzoomandpanlayout.cpp Fri Mar 12 15:42:44 2010 +0200 +++ b/photosgallery/slideshow/engine/effectsrc/shwzoomandpanlayout.cpp Mon Mar 15 12:40:30 2010 +0200 @@ -98,8 +98,6 @@ void TShwZoomAndPanLayout::ResetSizeToMinimum() { GLX_LOG_INFO( "TShwZoomAndPanLayout::ResetSizeToMinimum" ); - // set initial size to minimum size -// iZoomedSize.Set( iMinimumSize ); } // ----------------------------------------------------------------------------- @@ -137,10 +135,7 @@ GLX_LOG_INFO2( "TShwZoomAndPanLayout:: Zooming out target(%.1f,%.1f)", iMinimumSize.iWidth, iMinimumSize.iHeight ); - // zooming out so we start from maximum size - //iZoomedSize.Set( iMaximumSize ); - // target is the minimum size - // iZoomedSize.Set( iMinimumSize, aDuration ); + // run the latter half of the curve curveStart = curveLength / 2; curveEnd = curveLength; @@ -153,10 +148,6 @@ GLX_LOG_INFO2( "TShwZoomAndPanLayout:: Zooming in target(%.1f,%.1f)", iMaximumSize.iWidth, iMaximumSize.iHeight ); - // zooming in so we start from minimum size -// iZoomedSize.Set( iMinimumSize ); - // target is maximum size -// iZoomedSize.Set( iMaximumSize, aDuration ); } // set position, if we have curve its either from start to half @@ -220,14 +211,10 @@ // ensure x is inside maximum size and minimum size x_size = Min( x_size, iMaximumSize.iWidth ); x_size = Max( x_size, iMinimumSize.iWidth ); - // set x size, it is now inside the minimum and maximum - //aInfo.iSize.iX = x_size; // ensure y is inside maximum size and minimum size y_size = Min( y_size, iMaximumSize.iHeight ); y_size = Max( y_size, iMinimumSize.iHeight ); - // set y size, it is now inside the minimum and maximum -// aInfo.iSize.iY = y_size; // set position only if we have a panning curve, this enables the use of this // layout as only a zooming layout and then some other layout can define @@ -252,26 +239,6 @@ // maximum.y - minimum.y // and need to ensure maximum.y > minimum.y, otherwise scale becomes // infinite - if( iMaximumSize.iHeight > iMinimumSize.iHeight ) - { -/* TReal32 scale = ( aInfo.iSize.iY - iMinimumSize.iHeight ) / - ( iMaximumSize.iHeight - iMinimumSize.iHeight ); - // multiply the curve with scale - // set x position - aInfo.iPosition.iX = - scale * iPanningCurve->MapValue( iCurvePosition.Now(), 0 ); - // set y position - aInfo.iPosition.iY = - scale * iPanningCurve->MapValue( iCurvePosition.Now(), 1 );*/ - } - else - { - // Panning curve defined but we either zoomed to screen size or - // the image was smaller than or equal to screen size so - // just set position to origo to see image centered on the screen - // aInfo.iPosition.iX = 0; - // aInfo.iPosition.iY = 0; - } } } @@ -281,10 +248,6 @@ TBool TShwZoomAndPanLayout::DoChanged() const { TBool ret = EFalse; - if( iPanningCurve ) - { -// ret = iPanningCurve->MappingFunctionChanged(); - } return iZoomedSize.Changed() || ret; } @@ -294,10 +257,6 @@ void TShwZoomAndPanLayout::DoClearChanged() { iZoomedSize.ClearChanged(); - if( iPanningCurve ) - { -// iPanningCurve->MappingFunctionClearChanged(); - } } // ----------------------------------------------------------------------------- diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/slideshow/view/group/shwslideshowviewplugin.mmp --- a/photosgallery/slideshow/view/group/shwslideshowviewplugin.mmp Fri Mar 12 15:42:44 2010 +0200 +++ b/photosgallery/slideshow/view/group/shwslideshowviewplugin.mmp Mon Mar 15 12:40:30 2010 +0200 @@ -130,4 +130,5 @@ LIBRARY remconinterfacebase.lib //LIBRARY hgcontextutility.lib // For Teleport LIBRARY glxtvout.lib +LIBRARY harvesterclient.lib // End of File diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/slideshow/view/inc/shwslideshowview.h --- a/photosgallery/slideshow/view/inc/shwslideshowview.h Fri Mar 12 15:42:44 2010 +0200 +++ b/photosgallery/slideshow/view/inc/shwslideshowview.h Mon Mar 15 12:40:30 2010 +0200 @@ -16,9 +16,6 @@ */ - - - #ifndef C_SHWSLIDESHOWVIEW_H #define C_SHWSLIDESHOWVIEW_H @@ -28,6 +25,7 @@ #include #include #include +#include #include "shwengineobserver.h" #include "shwmusicobserver.h" #include "shwconstants.h" @@ -53,12 +51,10 @@ class CShwTelephoneHandler; class CMPXCollectionPath; class CEikButtonGroupContainer; -// CLASS DECLARATION class CShwGestureControl; class CShwTicker; class CShwMediaKeyUtility; class CGestureControl; -//class CHgContextUtility; class CGlxHdmiController; /** * Slideshow view. @@ -71,7 +67,8 @@ public MShwMusicObserver, public MProgressDialogCallback, public MShwTickObserver, - public MShwGestureObserver + public MShwGestureObserver, + public MHarvesterEventObserver { public: @@ -148,7 +145,13 @@ * @ref CGlxViewBase::DoViewDeactivate */ void DoViewDeactivate(); - + public: + // from MHarvesterEventObserver + void HarvestingUpdated( + HarvesterEventObserverType aHEObserverType, + HarvesterEventState aHarvesterEventState, + TInt aItemsLeft ); + private: // from MGlxMediaListObserver /// @ref MGlxMediaListObserver::HandleItemAddedL @@ -264,9 +267,9 @@ /** * @ref MShwTickObserver::HandleTickL */ - void HandleTickL(); - /** + + /** * @ref MShwTickObserver::HandleTickCancelled */ void HandleTickCancelled(); @@ -280,33 +283,44 @@ * Initializes the screen furniture for the slide show view */ void InitializeShwFurnitureL(); - /** + + /** * Initializes the soft keys */ void InitializeCbaL(); - /** + + /** * Hides the screen furniture */ void HideShwFurniture(); - /** + + /** * Makes the screen furniture visible */ void ShowShwFurnitureL(); - /** + + /** * Replaces an existing command set with a new one *@ */ void ReplaceCommandSetL(TInt aNewComandId, TInt aOldCommandSet ); + /** * returns the index of item for which texture can be removed for cleanup * The index will be out the iterator offsets w.r.t focssed index. */ - void SetImageL(); TInt GetIndexToBeRemoved(); + /** * Remove the fullscreen texture. */ void RemoveTexture(); + + /** + * Set the current Item to HDMI. + */ + void SetItemToHDMIL(); + public: //to keep in track which of the command set is active/on top enum TShwState @@ -332,8 +346,6 @@ CAlfControlGroup* iVolumeControlGroup; // owned - // CGlxUiUtility* iUiUtility; // owned - CAknWaitDialog* iWaitDialog; // owned /// Own: Pause handler @@ -396,9 +408,9 @@ CAlfControlGroup* iGestureControlGroup; CShwTicker* iTicker; CShwMediaKeyUtility* iMediaKeyHandler; -// CHgContextUtility* iContextUtility; CGlxHdmiController* iHdmiController; TBool iHdmiActive; + RHarvesterClient iHarvesterClient; }; #endif // C_SHWSLIDESHOWVIEW_H diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/slideshow/view/src/shwgesturecontrol.cpp --- a/photosgallery/slideshow/view/src/shwgesturecontrol.cpp Fri Mar 12 15:42:44 2010 +0200 +++ b/photosgallery/slideshow/view/src/shwgesturecontrol.cpp Mon Mar 15 12:40:30 2010 +0200 @@ -54,7 +54,6 @@ { TRACER("CShwGestureControl::ConstructL"); GLX_LOG_INFO( "CShwGestureControl::ConstructL" ); - //CGestureControl::ConstructL(*this,aEnv,aDisplay,KShwgestureEventControlGroup); CAlfControl::ConstructL(aEnv); BindDisplay(aDisplay); } diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/slideshow/view/src/shwslideshowkeyhandler.cpp --- a/photosgallery/slideshow/view/src/shwslideshowkeyhandler.cpp Fri Mar 12 15:42:44 2010 +0200 +++ b/photosgallery/slideshow/view/src/shwslideshowkeyhandler.cpp Mon Mar 15 12:40:30 2010 +0200 @@ -171,8 +171,6 @@ // set the state else if (aType == EEventKey && aKeyEvent.iScanCode == EStdKeyNo) { - - // iState = CShwSlideshowView::EShwExiting; iUiUtility->SetExitingState(ETrue); } // end if else diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/slideshow/view/src/shwslideshowview.cpp --- a/photosgallery/slideshow/view/src/shwslideshowview.cpp Fri Mar 12 15:42:44 2010 +0200 +++ b/photosgallery/slideshow/view/src/shwslideshowview.cpp Mon Mar 15 12:40:30 2010 +0200 @@ -124,7 +124,7 @@ { TRACER("CShwSlideshowView::~CShwSlideshowView"); GLX_LOG_INFO( "CShwSlideshowView::~CShwSlideshowView()" ); - + iHarvesterClient.Close(); // delete media list population call back delete iPopulateListCallBack; @@ -314,6 +314,12 @@ // Glx view base construction ViewBaseConstructL(); + TInt err = iHarvesterClient.Connect(); + GLX_LOG_INFO1("iHarvesterClient.Connect() err = %d",err); + if(err == KErrNone) + { + iHarvesterClient.AddHarvesterEventObserver(*this, EHEObserverTypeMMC, 1000); + } // Create async engine starter with standard priority iAsyncCallBack = new( ELeave ) CAsyncCallBack( CActive::EPriorityStandard ); @@ -355,10 +361,6 @@ TShwCallBack< CShwSlideshowView, PopulateListL >( this ) ); iMSKPressed = EFalse; iLSKPressed = EFalse; - - //Get the HgContextUtility instance -// iContextUtility = iUiUtility->ContextUtility(); - } // --------------------------------------------------------------------------- @@ -424,7 +426,10 @@ // reset failure flag iEngineStartFailed = EFalse; - iHdmiController = CGlxHdmiController::NewL(); + if(!iHdmiController) + { + iHdmiController = CGlxHdmiController::NewL(); + } // Engine related construction // Instantiate the slideshow engine, with this class as its observer __ASSERT_DEBUG( !iEngine, Panic( EGlxPanicAlreadyInitialised ) ); @@ -649,7 +654,7 @@ { RemoveTexture(); } - SetImageL(); + SetItemToHDMIL(); } } } @@ -727,7 +732,7 @@ iWaitDialog->ProcessFinishedL(); } iShwState = EShwPlay; - SetImageL(); + SetItemToHDMIL(); iHdmiActive = ETrue; ReplaceCommandSetL(R_SHW_SOFTKEYS_END_PAUSE,R_SHW_SOFTKEYS_END_PAUSE); ShowShwFurnitureL(); @@ -940,13 +945,9 @@ // Create the soft keys // Left (bottom in landscape orientation) HBufC* softKeyTextLeft = StringLoader::LoadLC( R_SHW_SOFTKEY_LEFT ); - // SetSoftKeyL takes ownership of softKeyText - //SetSoftkeyL( EGlxLeftSoftkey, EShwSlideshowCmdContinue, softKeyTextLeft ); CleanupStack::Pop( softKeyTextLeft ); // Right (top in landscape orientation) HBufC* softKeyTextRight = StringLoader::LoadLC( R_SHW_SOFTKEY_RIGHT ); - // SetSoftKeyL takes ownership of softKeyText - //SetSoftkeyL( EGlxRightSoftkey, EAknSoftkeyBack, softKeyTextRight ); CleanupStack::Pop( softKeyTextRight ); } @@ -1029,7 +1030,6 @@ } } iFilteredList->SetFocusL( NGlxListDefs::EAbsolute, focusIndex ); -// iContextUtility->PublishPhotoContextL(item.Uri()); } @@ -1258,27 +1258,49 @@ // Set the image to external display - HDMI // ----------------------------------------------------------------------------- // -void CShwSlideshowView::SetImageL() +void CShwSlideshowView::SetItemToHDMIL() { - TRACER("CShwSlideshowView::SetImageL() - CGlxHDMI"); - TGlxMedia item = iFilteredList->Item(iFilteredList->FocusIndex()); - TInt frameCount(0); - TSize orignalSize; - TBool aFramesPresent = item.GetFrameCount(frameCount); - TBool adimension = item.GetDimensions(orignalSize); + TRACER("CShwSlideshowView::SetImageToHDMIL() "); + + TInt focusIndex = iFilteredList->FocusIndex(); + + // If we dont know what item we are focussing on + // or if our filtered list is empty + // or if HDMI is not connected + // or if there is no HDMI Controller at all + // then dont SetImageToHDMI :) + if( ( KErrNotFound == focusIndex) + || (0 == iFilteredList->Count()) + || (NULL == iHdmiController) + || (!iHdmiController->IsHDMIConnected())) + { + GLX_LOG_INFO("CShwSlideshowView::SetImageToHDMIL - Cant Set Image To HDMI"); + return; + } + + TGlxMedia item = iFilteredList->Item(focusIndex); TInt error = GlxErrorManager::HasAttributeErrorL(item.Properties(), - KGlxMediaIdThumbnail); - if (error == KErrNone) + KGlxMediaIdThumbnail); + + // Item will be supported by HDMI ONLY if + // it is not a video + // and it has no attribute error + if ( (item.Category() != EMPXVideo) + && (error == KErrNone) ) { - GLX_LOG_INFO("CShwSlideshowView::SetImageL() - CGlxHDMI call SetImageL"); + GLX_LOG_INFO("CShwSlideshowView::SetImageToHDMIL - CGlxHdmi - Setting the Image"); + TInt frameCount(0); + TSize orignalSize; + item.GetFrameCount(frameCount); + item.GetDimensions(orignalSize); iHdmiController->SetImageL(item.Uri(), orignalSize, frameCount); } else { - GLX_LOG_INFO1("CShwSlideshowView::SetImageL() - CGlxHDMI IsVideo , err=%d",error); - //Set the external display to cloning mode. - //If the current item is a video, corruted thumbnail - iHdmiController->IsVideo(); + GLX_LOG_INFO("CShwSlideshowView::SetImageToHDMIL - Unsupported Item"); + //Set the external display to cloning mode if + //the current item is something we wont support (e.g. video, corrupted item); + iHdmiController->ItemNotSupported(); } } // --------------------------------------------------------------------------- @@ -1322,3 +1344,20 @@ const TGlxMedia& item = iFilteredList->Item(GetIndexToBeRemoved()); iUiUtility->GlxTextureManager().RemoveTexture(item.Id(),EFalse); } + +// --------------------------------------------------------------------------- +// HarvestingUpdated +// +// --------------------------------------------------------------------------- +// +void CShwSlideshowView::HarvestingUpdated( + HarvesterEventObserverType HarvestingUpdated, + HarvesterEventState aHarvesterEventState, + TInt aItemsLeft ) + { + TRACER("CShwSlideshowView::HarvestingUpdated()"); + if(HarvestingUpdated == EHEObserverTypeMMC) + { + ProcessCommandL(EAknSoftkeyClose); + } + } diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/viewframework/commandhandlers/commandhandlerbase/src/glxmedialistcommandhandler.cpp --- a/photosgallery/viewframework/commandhandlers/commandhandlerbase/src/glxmedialistcommandhandler.cpp Fri Mar 12 15:42:44 2010 +0200 +++ b/photosgallery/viewframework/commandhandlers/commandhandlerbase/src/glxmedialistcommandhandler.cpp Mon Mar 15 12:40:30 2010 +0200 @@ -167,9 +167,6 @@ { TInt num_items = aMenuPane->NumberOfItemsInPane(); TBool atLeastOneEnabledSupportedItem = EFalse; - - //CGlxUiUtility* uiUtility = CGlxUiUtility::UtilityL(); - //CleanupClosePushL(*uiUtility); // Iterate through menu pane for ( TInt i = 0; i < num_items; i++) @@ -193,8 +190,6 @@ } } - // CleanupStack::PopAndDestroy(uiUtility); - if ( atLeastOneEnabledSupportedItem ) { DoDynInitMenuPaneL(aResourceId, aMenuPane); @@ -385,7 +380,6 @@ EXPORT_C const MGlxMediaList& CGlxMediaListCommandHandler::MediaList() const { return const_cast(this)->MediaList(); - //return iMediaListProvider->MediaList(); } // ----------------------------------------------------------------------------- diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/viewframework/commandhandlers/commandhandlerbase/src/glxmpxcommandcommandhandler.cpp --- a/photosgallery/viewframework/commandhandlers/commandhandlerbase/src/glxmpxcommandcommandhandler.cpp Fri Mar 12 15:42:44 2010 +0200 +++ b/photosgallery/viewframework/commandhandlers/commandhandlerbase/src/glxmpxcommandcommandhandler.cpp Mon Mar 15 12:40:30 2010 +0200 @@ -470,7 +470,6 @@ void CGlxMpxCommandCommandHandler::ProgressNoteL(TInt aCommandId) { TRACER("CGlxMpxCommandCommandHandler::ProgressNoteL(TInt aCommandId)"); - //MGlxMediaList& mediaList = MediaList(); // get progress note HBufC* progressText = ProgressTextL(aCommandId); diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/viewframework/commandhandlers/commoncommandhandlers/group/glxcommoncommandhandlers.mmp --- a/photosgallery/viewframework/commandhandlers/commoncommandhandlers/group/glxcommoncommandhandlers.mmp Fri Mar 12 15:42:44 2010 +0200 +++ b/photosgallery/viewframework/commandhandlers/commoncommandhandlers/group/glxcommoncommandhandlers.mmp Mon Mar 15 12:40:30 2010 +0200 @@ -116,6 +116,7 @@ LIBRARY estor.lib // for RBufWriteStream LIBRARY euser.lib LIBRARY fbscli.lib +LIBRARY featdiscovery.lib LIBRARY glxcommandhandlerbase.lib LIBRARY glxupnpcommandhandler.lib // for CGlxUpnpRenderer LIBRARY glxcommon.lib // for CResourceUtilities diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/viewframework/commandhandlers/commoncommandhandlers/inc/glxcommandhandleraiwassign.h --- a/photosgallery/viewframework/commandhandlers/commoncommandhandlers/inc/glxcommandhandleraiwassign.h Fri Mar 12 15:42:44 2010 +0200 +++ b/photosgallery/viewframework/commandhandlers/commoncommandhandlers/inc/glxcommandhandleraiwassign.h Mon Mar 15 12:40:30 2010 +0200 @@ -27,7 +27,7 @@ class CAiwGenericParamList; class CGlxMedia; class MGlxMediaListProvider; - +class CFeatureDiscovery; /** * CGlxCommandHandlerAiwAssign @@ -53,6 +53,8 @@ IMPORT_C static CGlxCommandHandlerAiwAssign* NewL( MGlxMediaListProvider* aMediaListProvider, TInt aMenuResource); + ~CGlxCommandHandlerAiwAssign(); + protected: // From CGlxMediaListCommandHandler /** * See @ref CGlxMediaListCommandHandler::DoGetRequiredAttributesL @@ -75,6 +77,12 @@ */ CGlxCommandHandlerAiwAssign(MGlxMediaListProvider* aMediaListProvider, TInt aMenuResource); + + void ConstructL(); + +private: // Data Members + + CFeatureDiscovery* iFeatManager; }; #endif // C_GLXCOMMANDHANDLERAIWASSIGN_H diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/viewframework/commandhandlers/commoncommandhandlers/inc/glxcommandhandleraiwedit.h --- a/photosgallery/viewframework/commandhandlers/commoncommandhandlers/inc/glxcommandhandleraiwedit.h Fri Mar 12 15:42:44 2010 +0200 +++ b/photosgallery/viewframework/commandhandlers/commoncommandhandlers/inc/glxcommandhandleraiwedit.h Mon Mar 15 12:40:30 2010 +0200 @@ -29,7 +29,7 @@ class MGlxMediaListProvider; class CAiwServiceHandler; class CGlxImageViewerManager; - +class CFeatureDiscovery; /** * CGlxCommandHandlerAiwEdit * @@ -94,6 +94,8 @@ // Not own CGlxImageViewerManager* iImageViewerInstance; + + CFeatureDiscovery* iFeatManager; }; #endif // C_GLXCOMMANDHANDLERAIWEDIT_H diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/viewframework/commandhandlers/commoncommandhandlers/src/glxcommandhandleraiwassign.cpp --- a/photosgallery/viewframework/commandhandlers/commoncommandhandlers/src/glxcommandhandleraiwassign.cpp Fri Mar 12 15:42:44 2010 +0200 +++ b/photosgallery/viewframework/commandhandlers/commoncommandhandlers/src/glxcommandhandleraiwassign.cpp Mon Mar 15 12:40:30 2010 +0200 @@ -32,6 +32,7 @@ #include #include #include "glxaiwservicehandler.h" +#include const TInt KGlxAiwAssignCommandSpace = 0x00000100; @@ -62,6 +63,19 @@ TRACER("CGlxCommandHandlerAiwAssign::CGlxCommandHandlerAiwAssign"); } +CGlxCommandHandlerAiwAssign::~CGlxCommandHandlerAiwAssign() + { + delete iFeatManager; + } + +void CGlxCommandHandlerAiwAssign::ConstructL() + { + //Calling base class implementation + CGlxCommandHandlerAiwBase::ConstructL(); + + iFeatManager = CFeatureDiscovery::NewL(); + } + // ----------------------------------------------------------------------------- // CGlxCommandHandlerAiwAssign::DoGetRequiredAttributesL // ----------------------------------------------------------------------------- @@ -105,7 +119,13 @@ // TInt CGlxCommandHandlerAiwAssign::AiwInterestResource() const { - return R_GLX_AIW_ASSIGN_TO_CONTACT_INTEREST; + int resource = R_GLX_AIW_ASSIGN_TO_CONTACT_INTEREST; + if(iFeatManager->IsFeatureSupportedL(KFeatureIdFfImageEditor) || iFeatManager->IsFeatureSupportedL(KFeatureIdFfVideoEditor)) + { + resource = R_GLX_AIW_ASSIGN_TO_CONTACT_INTEREST_MEDIAEDITOR; + } + + return resource; } // ----------------------------------------------------------------------------- diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/viewframework/commandhandlers/commoncommandhandlers/src/glxcommandhandleraiwbase.cpp --- a/photosgallery/viewframework/commandhandlers/commoncommandhandlers/src/glxcommandhandleraiwbase.cpp Fri Mar 12 15:42:44 2010 +0200 +++ b/photosgallery/viewframework/commandhandlers/commoncommandhandlers/src/glxcommandhandleraiwbase.cpp Mon Mar 15 12:40:30 2010 +0200 @@ -381,14 +381,16 @@ if ( mediaList.SelectionCount() == 0 ) { // No items in selection list. Check if focus item is static + // When image opened from image viewer, metadata will not + // available immediately and Uri for that item will be null, + // so need to disable aiw commands at that time. Once metadata + // been filled, aiw commands should available. TInt focusIndex = mediaList.FocusIndex(); - if(focusIndex != KErrNotFound) - { - if (!mediaList.Item(focusIndex).IsStatic()) + if((mediaList.FocusIndex()!=KErrNotFound)&& + (mediaList.Item(focusIndex).Uri()!=KNullDesC)&& + (!mediaList.Item(focusIndex).IsStatic())) { - // Not static - so enable enabled = ETrue; - } } } else if ( mediaList.SelectionCount() <= MaxSelectedItems() ) diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/viewframework/commandhandlers/commoncommandhandlers/src/glxcommandhandleraiwedit.cpp --- a/photosgallery/viewframework/commandhandlers/commoncommandhandlers/src/glxcommandhandleraiwedit.cpp Fri Mar 12 15:42:44 2010 +0200 +++ b/photosgallery/viewframework/commandhandlers/commoncommandhandlers/src/glxcommandhandleraiwedit.cpp Mon Mar 15 12:40:30 2010 +0200 @@ -38,8 +38,7 @@ #include // for passing data between applications #include "AiwServiceHandler.h" // AIW service handler #include "glxmedia.h" - - +#include // ----------------------------------------------------------------------------- // NewL // ----------------------------------------------------------------------------- @@ -61,6 +60,7 @@ // EXPORT_C CGlxCommandHandlerAiwEdit::~CGlxCommandHandlerAiwEdit() { + delete iFeatManager; delete iServiceHandler; if (NULL != iImageViewerInstance) @@ -94,6 +94,7 @@ } iImageViewerInstance = CGlxImageViewerManager::InstanceL(); + iFeatManager = CFeatureDiscovery::NewL(); } // ----------------------------------------------------------------------------- @@ -132,7 +133,12 @@ //If stylus menu is present, hide it for multiple selection if (iCommandSingleClick && aMenuPane->MenuItemExists( EGlxCmdAiwSingleClickEdit, pos) - && (mediaList.SelectionCount() > 1)) + + && ((mediaList.SelectionCount() > 1) + || (!iFeatManager->IsFeatureSupportedL( + KFeatureIdFfImageEditor) + && !iFeatManager->IsFeatureSupportedL( + KFeatureIdFfVideoEditor)))) { aMenuPane->SetItemDimmed(EGlxCmdAiwSingleClickEdit, ETrue); } @@ -141,9 +147,13 @@ { // If the image path is private or view is in grid & // selection is not equal to 1, we should hide Edit menu item - if (iImageViewerInstance->IsPrivate() || - (mediaList.SelectionCount() != 1 + if ((iImageViewerInstance->IsPrivate() + || (mediaList.SelectionCount() != 1 && !IsInFullScreenViewingModeL())) + || (!iFeatManager->IsFeatureSupportedL( + KFeatureIdFfImageEditor) + && !iFeatManager->IsFeatureSupportedL( + KFeatureIdFfVideoEditor))) { aMenuPane->SetItemDimmed(EGlxCmdAiwEdit, ETrue); } diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/viewframework/commandhandlers/commoncommandhandlers/src/glxcommandhandleraiwshowmap.cpp --- a/photosgallery/viewframework/commandhandlers/commoncommandhandlers/src/glxcommandhandleraiwshowmap.cpp Fri Mar 12 15:42:44 2010 +0200 +++ b/photosgallery/viewframework/commandhandlers/commoncommandhandlers/src/glxcommandhandleraiwshowmap.cpp Mon Mar 15 12:40:30 2010 +0200 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies). +* Copyright (c) 2008-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" @@ -45,12 +45,12 @@ // ----------------------------------------------------------------------------- // NewL // ----------------------------------------------------------------------------- -// +// EXPORT_C CGlxCommandHandlerAiwShowMap* CGlxCommandHandlerAiwShowMap::NewL( MGlxMediaListProvider* aMediaListProvider, TInt aMenuResource ) { TRACER("CGlxCommandHandlerAiwShowMap::NewL"); - CGlxCommandHandlerAiwShowMap* self = new ( ELeave ) + CGlxCommandHandlerAiwShowMap* self = new ( ELeave ) CGlxCommandHandlerAiwShowMap( aMediaListProvider, aMenuResource ); CleanupStack::PushL( self ); self->ConstructL(); @@ -66,11 +66,11 @@ { iBufferArray.ResetAndDestroy(); } - + // ----------------------------------------------------------------------------- // Constructor // ----------------------------------------------------------------------------- -// +// CGlxCommandHandlerAiwShowMap::CGlxCommandHandlerAiwShowMap( MGlxMediaListProvider* aMediaListProvider, TInt aMenuResource ) : CGlxCommandHandlerAiwBase( aMediaListProvider, aMenuResource ) @@ -80,7 +80,7 @@ // ----------------------------------------------------------------------------- // CGlxCommandHandlerAiwShowMap::DoGetRequiredAttributesL // ----------------------------------------------------------------------------- -// +// void CGlxCommandHandlerAiwShowMap::DoGetRequiredAttributesL (RArray& aAttributes, TBool aFilterUsingSelection) const { @@ -93,31 +93,32 @@ // ----------------------------------------------------------------------------- // AiwDoDynInitMenuPaneL // ----------------------------------------------------------------------------- -// -void CGlxCommandHandlerAiwShowMap::AiwDoDynInitMenuPaneL(TInt /*aResourceId*/, +// +void CGlxCommandHandlerAiwShowMap::AiwDoDynInitMenuPaneL(TInt /*aResourceId*/, CEikMenuPane* aMenuPane) { TInt num_items = aMenuPane->NumberOfItemsInPane(); - + // Iterate through menu pane TInt i = 0; while (i < num_items) { CEikMenuPaneItem::SData& item = aMenuPane->ItemDataByIndexL(i); - + // "Show on map" cannot be dimmed as AIW resets the flags to not dimmed // Have to delete the menu item in this case. if (EGlxCmdAiwShowMap == item.iCommandId) { - // Check visibility of the menu item - TBool isDisabled = IsItemWithLocationInfoSelected(MediaList()); - + //Check visibility of the menu item + //Fix for ESLM-7XFF9L:Must always be disabled in all cases. + TBool isDisabled = ETrue; + // Should it be disabled - if ( (isDisabled) || - (MediaList().SelectionCount() != 1 && + if ( (isDisabled) || + (MediaList().SelectionCount() != 1 && !IsInFullScreenViewingModeL()) ) { - // if so delete it. + // if so delete it. aMenuPane->DeleteMenuItem(EGlxCmdAiwShowMap); } break; @@ -125,50 +126,50 @@ ++i; } } - + // ----------------------------------------------------------------------------- // CommandId // ----------------------------------------------------------------------------- -// +// TInt CGlxCommandHandlerAiwShowMap::CommandId() const { TRACER("CGlxCommandHandlerAiwShowMap::CommandId"); return EGlxCmdAiwShowMap; } - + // ----------------------------------------------------------------------------- // AiwCommandId // ----------------------------------------------------------------------------- -// +// TInt CGlxCommandHandlerAiwShowMap::AiwCommandId() const { TRACER("CGlxCommandHandlerAiwShowMap::AiwCommandId"); return KAiwCmdMnShowMap; } - + // ----------------------------------------------------------------------------- // AiwInterestResource // ----------------------------------------------------------------------------- -// +// TInt CGlxCommandHandlerAiwShowMap::AiwInterestResource() const { TRACER("CGlxCommandHandlerAiwShowMap::AiwInterestResource"); return R_GLX_AIW_SHOWMAP_INTEREST; } - + // ----------------------------------------------------------------------------- // AppendAiwParameterL // ----------------------------------------------------------------------------- -// -TBool CGlxCommandHandlerAiwShowMap::AppendAiwParameterL(const TGlxMedia& aItem, +// +TBool CGlxCommandHandlerAiwShowMap::AppendAiwParameterL(const TGlxMedia& aItem, CGlxAiwServiceHandler& aAiwServiceHandler) { TRACER("CGlxCommandHandlerAiwShowMap::AppendAiwParameterL"); TBool success = EFalse; - + // Cleanup before execution iBufferArray.ResetAndDestroy(); - + TCoordinate coordinate; if (aItem.GetCoordinate(coordinate)) { @@ -181,30 +182,30 @@ // locality must have valid (ie not NaN) values landmark->SetPositionL( locality ); - + // Serialize buffer to landmark and append it to AIW parameter - const HBufC8* landmarkBuf = + const HBufC8* landmarkBuf = PosLandmarkSerialization::PackL( *landmark ); // we have ownership of landmarkBuf so add to array // for cleanup on our destruction iBufferArray.AppendL( landmarkBuf ); - + // Append location parameter to the AIW param list - TAiwVariant landmarkVariant( *landmarkBuf ); + TAiwVariant landmarkVariant( *landmarkBuf ); TAiwGenericParam landmarkParam( EGenericParamLandmark, landmarkVariant ); aAiwServiceHandler.AddParamL(aItem.Id(), landmarkParam ); success = ETrue; CleanupStack::PopAndDestroy( landmark ); } - + return success; } - + // ----------------------------------------------------------------------------- // CommandSpace // ----------------------------------------------------------------------------- -// +// TInt CGlxCommandHandlerAiwShowMap::CommandSpace() const { TRACER("CGlxCommandHandlerAiwShowMap::CommandSpace"); @@ -215,19 +216,19 @@ // DoIsDisabled // ----------------------------------------------------------------------------- // -// +// TBool CGlxCommandHandlerAiwShowMap::IsItemWithLocationInfoSelected(MGlxMediaList& aList ) { TRACER("CGlxCommandHandlerAiwShowMap::DoIsDisabled"); // Disable the "Show on map" menu item if the selection (marked list, - // or focused item if none marked) does not contain any items + // or focused item if none marked) does not contain any items // that have location data TBool isSupported = EFalse; - + // Check through all, if any, selected items, otherwise the focused item TGlxSelectionIterator iterator; iterator.SetToFirst( &aList ); - + // Loop until a supported item is found or until there are no // more indexes to process TInt index = KErrNotFound; @@ -235,12 +236,12 @@ { // get the media item const TGlxMedia& media = aList.Item( index ); - + // Test to see if the coordinate is present TCoordinate coordinate; isSupported = media.GetCoordinate(coordinate); } - + // Don't disable the menu item if the property's supported return !isSupported; } @@ -263,10 +264,10 @@ TBool fullscreenViewingMode = EFalse; CGlxNavigationalState* aNavigationalState = CGlxNavigationalState::InstanceL(); CMPXCollectionPath* naviState = aNavigationalState->StateLC(); - + if ( naviState->Levels() >= 1) { - if (aNavigationalState->ViewingMode() == NGlxNavigationalState::EBrowse) + if (aNavigationalState->ViewingMode() == NGlxNavigationalState::EBrowse) { // For image viewer collection, goto view mode if (naviState->Id() == TMPXItemId(KGlxCollectionPluginImageViewerImplementationUid)) @@ -274,12 +275,12 @@ //it means we are in img viewer fullscreenViewingMode = ETrue; } - } - else + } + else { //it means we are in Fullscreen fullscreenViewingMode = ETrue; - } + } } CleanupStack::PopAndDestroy( naviState ); aNavigationalState->Close(); diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/viewframework/commandhandlers/commoncommandhandlers/src/glxcommandhandleraiwshowonmaphardkey.cpp --- a/photosgallery/viewframework/commandhandlers/commoncommandhandlers/src/glxcommandhandleraiwshowonmaphardkey.cpp Fri Mar 12 15:42:44 2010 +0200 +++ b/photosgallery/viewframework/commandhandlers/commoncommandhandlers/src/glxcommandhandleraiwshowonmaphardkey.cpp Mon Mar 15 12:40:30 2010 +0200 @@ -175,99 +175,5 @@ } -// The below code is commented out as this implementation is for Future commandhandler -// To check map service providers -// To navigate to the location - -/* -// ----------------------------------------------------------------------------- -// CGlxCommandHandlerAiwShowMapHardKey::NavigateToPlaceL -// It will navigate to location -// ----------------------------------------------------------------------------- -void CGlxCommandHandlerAiwShowMapHardKey::NavigateToPlaceL( const TCoordinate& aCoordinate ) - { - CPosLandmark* lmk = CPosLandmark::NewLC(); - TLocality locality; - HBufC8* lmBuf; - - //set location - locality.SetCoordinate( aCoordinate.Latitude(), aCoordinate.Longitude(), aCoordinate.Altitude() ); - lmk->SetPositionL(locality); - - //set in parameters - iInList->Reset(); - lmBuf =PosLandmarkSerialization::PackL( *lmk ); - CleanupStack::PushL( lmBuf ); - TAiwGenericParam param( EGenericParamLandmark, TAiwVariant( *lmBuf ) ); - iInList->AppendL( param ); - TMnAiwCommonOptionsParam options; - options.iRunChained = EFalse; - TPckg optionsPack( options ); - TAiwGenericParam optParam( EGenericParamMnCommonOptions, TAiwVariant( optionsPack ) ); - iInList->AppendL( optParam ); - - //navigate to location - // iAiwServiceHandler->AttachL( R_EVTMGMTUI_AIW_INTEREST_NAVIGATETO ); - iAiwServiceHandler->ExecuteServiceCmdL( KAiwCmdMnNavigateTo, *iInList, *iOutList, 0, this ); - - CleanupStack::PopAndDestroy( 2 ); //lmbuf, lmk - } - - -// ----------------------------------------------------------------------------- -// CGlxCommandHandlerAiwShowMapHardKey::MapServiceProvidersL -// It will return total map service providers. -// @ret total number of map service providers -// ----------------------------------------------------------------------------- -// -TInt CGlxCommandHandlerAiwShowMapHardKey::MapServiceProvidersL() - { -#if 0 - RPointerArray providers; - // get all providers - MnProviderFinder::FindProvidersL( providers ); - TInt total = providers.Count(); - providers.ResetAndDestroy(); - providers.Close(); - // Debug(_L("Total map service providers = %d"), total); - return total; -#endif - return 0; - } -*/ -// ----------------------------------------------------------------------------- -// CGlxCommandHandlerAiwShowMapHardKey::HandleNotifyL -// Derived from MAiwNotifyCallback -// ----------------------------------------------------------------------------- -//TInt CGlxCommandHandlerAiwShowMapHardKey::HandleNotifyL( TInt aCmdId, -// TInt aEventId, -// CAiwGenericParamList& aEventParamList, -// const CAiwGenericParamList& aInParamList ) -// { -// if ( iOutList->Count() ) //if location is selected on map -// { -// const TAiwGenericParam& param = ( *iOutList )[0]; -// if ( EGenericParamLandmark == param.SemanticId() ) -// { -// TPtrC8 landmarkData( param.Value().AsData() ); -// CPosLandmark* lm = PosLandmarkSerialization::UnpackL( landmarkData ); -// CleanupStack::PushL( lm ); -// -// SetPlaceFromLandmarkL( *lm ); -// CleanupStack::PopAndDestroy( lm ); -// iOutList->Reset(); -// iObserver->HandleMapAndNavigationResponseL( KErrNone, *iPlace, iTriggerLocation ); -// } -// else -// { -// iOutList->Reset(); -// iObserver->HandleMapAndNavigationResponseL( KErrCancel, *iPlace, iTriggerLocation ); -// } -// } -// else //if map application is cancelled -// iObserver->HandleMapAndNavigationResponseL( KErrCancel, *iPlace, iTriggerLocation ); -// return KErrNone; -// } - // End of file diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/viewframework/commandhandlers/commoncommandhandlers/src/glxcommandhandlerback.cpp --- a/photosgallery/viewframework/commandhandlers/commoncommandhandlers/src/glxcommandhandlerback.cpp Fri Mar 12 15:42:44 2010 +0200 +++ b/photosgallery/viewframework/commandhandlers/commoncommandhandlers/src/glxcommandhandlerback.cpp Mon Mar 15 12:40:30 2010 +0200 @@ -149,8 +149,14 @@ GLX_LOG_INFO1( "CGlxCommandHandlerBack::ExecuteL::Command Id (%d)", aCommandId ); - - if ( aCommandId == EAknSoftkeyBack ) + if(EAknSoftkeyClose == aCommandId) + { + GLX_LOG_INFO("CGlxCommandHandlerBack::ExecuteL::goto \ + root in UI hierarchy"); + iNavigationalState->NavigateToParentL(); + consume = ETrue; + } + else if ( aCommandId == EAknSoftkeyBack ) { switch( iCurrentCommandId ) { diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/viewframework/commandhandlers/commoncommandhandlers/src/glxcommandhandlerdetails.cpp --- a/photosgallery/viewframework/commandhandlers/commoncommandhandlers/src/glxcommandhandlerdetails.cpp Fri Mar 12 15:42:44 2010 +0200 +++ b/photosgallery/viewframework/commandhandlers/commoncommandhandlers/src/glxcommandhandlerdetails.cpp Mon Mar 15 12:40:30 2010 +0200 @@ -115,7 +115,6 @@ TCommandInfo infoSubMenu(EGlxCmdDetailsOption); infoSubMenu.iViewingState = TCommandInfo::EViewingStateBrowse; - //AddCommandL(infoSubMenu); // register for the reset view command so that we can // dismiss the dialog if it is being shown when we are activated diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/viewframework/commandhandlers/commoncommandhandlers/src/glxcommandhandlerrotate.cpp --- a/photosgallery/viewframework/commandhandlers/commoncommandhandlers/src/glxcommandhandlerrotate.cpp Fri Mar 12 15:42:44 2010 +0200 +++ b/photosgallery/viewframework/commandhandlers/commoncommandhandlers/src/glxcommandhandlerrotate.cpp Mon Mar 15 12:40:30 2010 +0200 @@ -209,7 +209,6 @@ TInt /*aOldIndex*/, MGlxMediaList* /*aList*/) { TRACER("CGlxCommandHandlerRotate::HandleFocusChangedL"); - //Not required as we are doing this after each rotation DoPreserveOrientationL(); DoCleanupRotationParametersL(); iMediaList = NULL; @@ -462,9 +461,6 @@ delete iExifWriter; iExifWriter = NULL; } - //This will be called when there would be a change in Media list focus. - //So removing the call from here - //DoCleanupRotationParameters(); } // --------------------------------------------------------------------------- // DoInitializeRotationParameters @@ -532,14 +528,10 @@ command->SetTObjectValueL(KMPXCommandGeneralSessionId, static_cast(this)); //Nitz To Do Initialize cleanup command Just for the respective Media Items - //TGlxMediaId itemId= iGlxItem->Id(); - // command->SetTObjectValueL(KMPXMediaGeneralId,itemId.Value()); iMediaList->CommandL(*command); CleanupStack::PopAndDestroy(command); iMediaList->RemoveMediaListObserver(this); iAddedObserver=EFalse; - //CGlxTextureManager& tm = iUiUtility->GlxTextureManager(); - //tm.UpdateThumbnailTexture(*iGlxItem); iMediaList = NULL; iGlxItem = NULL; diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/viewframework/commandhandlers/commoncommandhandlers/src/glxcommandhandlersend.cpp --- a/photosgallery/viewframework/commandhandlers/commoncommandhandlers/src/glxcommandhandlersend.cpp Fri Mar 12 15:42:44 2010 +0200 +++ b/photosgallery/viewframework/commandhandlers/commoncommandhandlers/src/glxcommandhandlersend.cpp Mon Mar 15 12:40:30 2010 +0200 @@ -156,9 +156,6 @@ iViewId = aViewId; MGlxMediaList& mediaList = MediaList(); - - // TAP2GenericPluginParams::EGenericStdIconSend, - // TAP2GenericPluginParams::EGenericStdIconSendMask); // need to check the category attribute for image or video iAttributeContext = CGlxDefaultAttributeContext::NewL(); @@ -217,11 +214,6 @@ if ( aList && aNewIndex >= 0 ) { const CGlxMedia* media = aList->Item(aNewIndex).Properties(); - if (media) - {// show the active palette send item - // iUiUtility->ScreenFurniture().ShowActivePaletteItemL(iViewId, - // EGlxCmdSend, IsValidTypeL(*media)); - } } } diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/viewframework/commandhandlers/commoncommandhandlers/src/glxcommandhandlerslideshow.cpp --- a/photosgallery/viewframework/commandhandlers/commoncommandhandlers/src/glxcommandhandlerslideshow.cpp Fri Mar 12 15:42:44 2010 +0200 +++ b/photosgallery/viewframework/commandhandlers/commoncommandhandlers/src/glxcommandhandlerslideshow.cpp Mon Mar 15 12:40:30 2010 +0200 @@ -98,9 +98,7 @@ CGlxResourceUtilities::GetResourceFilenameL(resourceFile); iResourceOffset = CCoeEnv::Static()->AddResourceFileL( resourceFile ); - // CGlxSettingsModel* model = CGlxSettingsModel::InstanceL(); - iShowInToolbar = ETrue; //model->ShowSlideshowInToolbar(); - // model->Close(); + iShowInToolbar = ETrue; // Add supported commands with filter fields // Play slideshow forwards @@ -124,10 +122,6 @@ info.iCategoryRule = categoryRule; AddCommandL( info ); - // Play slideshow backwards: only the id changes - //info.iCommandId = EGlxCmdSlideshowPlayBackwards; - //AddCommandL( info ); - // new info to get the default filters TCommandInfo info_show_always( EGlxCmdSlideshowSettings ); // Disable for empty views and views with only static items diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/viewframework/dataprovider/src/glxmulmodelproviderbase.cpp --- a/photosgallery/viewframework/dataprovider/src/glxmulmodelproviderbase.cpp Fri Mar 12 15:42:44 2010 +0200 +++ b/photosgallery/viewframework/dataprovider/src/glxmulmodelproviderbase.cpp Mon Mar 15 12:40:30 2010 +0200 @@ -195,10 +195,7 @@ { if ( !iWithinFocusChangeCall ) { - // iWithinFocusChangeCall = ETrue; HandleFocusChanged( FocusIndex(), iPreviousFocusIndex ); - //iPreviousFocusIndex = FocusIndex(); - //iWithinFocusChangeCall = EFalse; } response = EEventHandled; } @@ -452,7 +449,14 @@ // Check if Model count is zero in FS view, activate back grid view. if (iModel->Count() ==0) { - TRAP_IGNORE( iNavigationalState->ActivatePreviousViewL() ); + // if Count is Zero, set the navigation state to + // EGlxNavigationBackwards before going back to grid view + CGlxUiUtility* uiUtility = CGlxUiUtility::UtilityL(); + CleanupClosePushL( *uiUtility ); + uiUtility->SetViewNavigationDirection(EGlxNavigationBackwards); + CleanupStack::PopAndDestroy( uiUtility ); + + TRAP_IGNORE( iNavigationalState->ActivatePreviousViewL() ); } } else diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/viewframework/dataprovider/src/glxthumbnailvarianttype.cpp --- a/photosgallery/viewframework/dataprovider/src/glxthumbnailvarianttype.cpp Fri Mar 12 15:42:44 2010 +0200 +++ b/photosgallery/viewframework/dataprovider/src/glxthumbnailvarianttype.cpp Mon Mar 15 12:40:30 2010 +0200 @@ -122,7 +122,8 @@ { GLX_DEBUG1("GlxThumbnailVariantType::CreateAnimatedGifTextureL"); TRAP( err, mTextureId = iUiUtility->GlxTextureManager(). - CreateAnimatedGifTextureL( uri, aSize ).Id() ); + CreateAnimatedGifTextureL( uri, aSize, aMedia, + aMedia.IdSpaceId() ).Id() ); } //URI length could be zero for Media Id based Thumbnail fetch else if ( fsTnmAvailable ) @@ -131,21 +132,34 @@ TMPXGeneralCategory cat = aMedia.Category(); if(drm) { - expired = iDrmUtility->CheckOpenRightsL(uri, (cat == EMPXImage)); + + //Fix for ESLM-82WJ59: call 'CheckDisplayRightsL' only for focused item + if(aIsFocused) + { + expired = !iDrmUtility->CheckDisplayRightsL(uri, (cat == EMPXImage)); + } + else + { + //Fix for ESLM-82WJ59: for validity check of non-focused item + expired = !iDrmUtility->CheckOpenRightsL(uri, (cat == EMPXImage)); + } + + //Fix for ESLM-82WJ59: mush easier to understand. if( expired ) { - if ( isValid ) - { - // Fix for EABI-7RL9DD - // Replaced defaultSize with aSize - TRAP( err, mTextureId = iUiUtility->GlxTextureManager().CreateThumbnailTextureL( - aMedia, aMedia.IdSpaceId(), aSize, this ).Id() ); - } + TRAP( err, mTextureId = iUiUtility->GlxTextureManager().CreateIconTextureL( + EMbmGlxiconsQgn_prop_image_notcreated, resFile, defaultSize ).Id() ); } else { - TRAP( err, mTextureId = iUiUtility->GlxTextureManager().CreateIconTextureL( - EMbmGlxiconsQgn_prop_image_notcreated, resFile, defaultSize ).Id() ); + if ( isValid == EGlxDrmRightsValid) + { + // Fix for EABI-7RL9DD + // Replaced defaultSize with aSize + TRAP( err, mTextureId = iUiUtility->GlxTextureManager().CreateThumbnailTextureL( + aMedia, aMedia.IdSpaceId(), aSize, this ).Id() ); + } + } } else @@ -175,7 +189,7 @@ //Have to relook at this. if(origSize.iWidth > defaultSize.iWidth && origSize.iHeight > defaultSize.iHeight) { - GLX_DEBUG1("GlxThumbnailVariantType::CreateIconTextureL::ScaledTnm"); + GLX_DEBUG1("GlxThumbnailVariantType::CreateThumbnailTextureL::ScaledTnm"); TRAP( err, mTextureId = iUiUtility->GlxTextureManager().CreateThumbnailTextureL( aMedia, aMedia.IdSpaceId(), aSize, this, ETrue ).Id() ); if(err == KErrNone) @@ -218,7 +232,6 @@ TBool drmRightsChecked = EFalse; // minimum size (111 x 83) TInt minSize = KGlxThumbnailDrmWidth * KGlxThumbnailDrmHeight; - //TInt minSize = 111*83 ; // size of actual image TInt imgSize = aImageSize.iWidth * aImageSize.iHeight; @@ -326,7 +339,6 @@ if ( iUiUtility) { -// iUiUtility->GlxTextureManager().RemoveTexture( mTextureId ); iUiUtility->Close (); } } @@ -453,7 +465,6 @@ TRACER("GlxIconVariantType::~GlxIconVariantType"); if ( iUiUtility) { -// iUiUtility->GlxTextureManager().RemoveTexture( mTextureId ); iUiUtility->Close (); } } diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/viewframework/drmutility/bwins/glxdrmutilityu.def --- a/photosgallery/viewframework/drmutility/bwins/glxdrmutilityu.def Fri Mar 12 15:42:44 2010 +0200 +++ b/photosgallery/viewframework/drmutility/bwins/glxdrmutilityu.def Mon Mar 15 12:40:30 2010 +0200 @@ -1,15 +1,16 @@ EXPORTS - ?CanSetAsAutomatedL@CGlxDRMUtility@@QAEHABVTDesC16@@W4TGlxDrmAutomatedType@@@Z @ 1 NONAME ; int CGlxDRMUtility::CanSetAsAutomatedL(class TDesC16 const &, enum TGlxDrmAutomatedType) - ?CanShowInfoOnlineL@CGlxDRMUtility@@QAEHAAVTDesC16@@@Z @ 2 NONAME ; int CGlxDRMUtility::CanShowInfoOnlineL(class TDesC16 &) - ?CheckDisplayRightsL@CGlxDRMUtility@@QAEHABVTDesC16@@H@Z @ 3 NONAME ; int CGlxDRMUtility::CheckDisplayRightsL(class TDesC16 const &, int) + ?SetAsAutomatedL@CGlxDRMUtility@@QAEXABVTDesC16@@W4TGlxDrmAutomatedType@@@Z @ 1 NONAME ; void CGlxDRMUtility::SetAsAutomatedL(class TDesC16 const &, enum TGlxDrmAutomatedType) + ?CanSetAsAutomatedL@CGlxDRMUtility@@QAEHABVTDesC16@@W4TGlxDrmAutomatedType@@@Z @ 2 NONAME ; int CGlxDRMUtility::CanSetAsAutomatedL(class TDesC16 const &, enum TGlxDrmAutomatedType) + ?IsForwardLockedL@CGlxDRMUtility@@QAEHABVTDesC16@@@Z @ 3 NONAME ; int CGlxDRMUtility::IsForwardLockedL(class TDesC16 const &) ?CheckOpenRightsL@CGlxDRMUtility@@QAEHABVTDesC16@@H@Z @ 4 NONAME ; int CGlxDRMUtility::CheckOpenRightsL(class TDesC16 const &, int) - ?Close@CGlxDRMUtility@@QAEXXZ @ 5 NONAME ; void CGlxDRMUtility::Close(void) - ?ConsumeRightsL@CGlxDRMUtility@@QAEHABVTDesC16@@@Z @ 6 NONAME ; int CGlxDRMUtility::ConsumeRightsL(class TDesC16 const &) - ?DRMThumbnailSize@CGlxDRMUtility@@QAE?AVTSize@@AAV2@@Z @ 7 NONAME ; class TSize CGlxDRMUtility::DRMThumbnailSize(class TSize &) + ?ConsumeRightsL@CGlxDRMUtility@@QAEHABVTDesC16@@@Z @ 5 NONAME ; int CGlxDRMUtility::ConsumeRightsL(class TDesC16 const &) + ?CheckDisplayRightsL@CGlxDRMUtility@@QAEHABVTDesC16@@H@Z @ 6 NONAME ; int CGlxDRMUtility::CheckDisplayRightsL(class TDesC16 const &, int) + ?ShowRightsInfoL@CGlxDRMUtility@@QAEXABVTDesC16@@@Z @ 7 NONAME ; void CGlxDRMUtility::ShowRightsInfoL(class TDesC16 const &) ?InstanceL@CGlxDRMUtility@@SAPAV1@XZ @ 8 NONAME ; class CGlxDRMUtility * CGlxDRMUtility::InstanceL(void) - ?IsForwardLockedL@CGlxDRMUtility@@QAEHABVTDesC16@@@Z @ 9 NONAME ; int CGlxDRMUtility::IsForwardLockedL(class TDesC16 const &) - ?SetAsAutomatedL@CGlxDRMUtility@@QAEXABVTDesC16@@W4TGlxDrmAutomatedType@@@Z @ 10 NONAME ; void CGlxDRMUtility::SetAsAutomatedL(class TDesC16 const &, enum TGlxDrmAutomatedType) - ?ShowDRMDetailsPaneL@CGlxDRMUtility@@QAEXABVTDesC16@@@Z @ 11 NONAME ; void CGlxDRMUtility::ShowDRMDetailsPaneL(class TDesC16 const &) - ?ShowInfoOnlineL@CGlxDRMUtility@@QAEXAAVTDesC16@@@Z @ 12 NONAME ; void CGlxDRMUtility::ShowInfoOnlineL(class TDesC16 &) - ?ShowRightsInfoL@CGlxDRMUtility@@QAEXABVTDesC16@@@Z @ 13 NONAME ; void CGlxDRMUtility::ShowRightsInfoL(class TDesC16 const &) + ?ClearLastConsumedItemUri@CGlxDRMUtility@@QAEXXZ @ 9 NONAME ; void CGlxDRMUtility::ClearLastConsumedItemUri(void) + ?ShowDRMDetailsPaneL@CGlxDRMUtility@@QAEXABVTDesC16@@@Z @ 10 NONAME ; void CGlxDRMUtility::ShowDRMDetailsPaneL(class TDesC16 const &) + ?ShowInfoOnlineL@CGlxDRMUtility@@QAEXAAVTDesC16@@@Z @ 11 NONAME ; void CGlxDRMUtility::ShowInfoOnlineL(class TDesC16 &) + ?DRMThumbnailSize@CGlxDRMUtility@@QAE?AVTSize@@AAV2@@Z @ 12 NONAME ; class TSize CGlxDRMUtility::DRMThumbnailSize(class TSize &) + ?CanShowInfoOnlineL@CGlxDRMUtility@@QAEHAAVTDesC16@@@Z @ 13 NONAME ; int CGlxDRMUtility::CanShowInfoOnlineL(class TDesC16 &) + ?Close@CGlxDRMUtility@@QAEXXZ @ 14 NONAME ; void CGlxDRMUtility::Close(void) diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/viewframework/drmutility/eabi/glxdrmutilityu.def --- a/photosgallery/viewframework/drmutility/eabi/glxdrmutilityu.def Fri Mar 12 15:42:44 2010 +0200 +++ b/photosgallery/viewframework/drmutility/eabi/glxdrmutilityu.def Mon Mar 15 12:40:30 2010 +0200 @@ -10,6 +10,7 @@ _ZN14CGlxDRMUtility18CanShowInfoOnlineLER7TDesC16 @ 9 NONAME _ZN14CGlxDRMUtility19CheckDisplayRightsLERK7TDesC16i @ 10 NONAME _ZN14CGlxDRMUtility19ShowDRMDetailsPaneLERK7TDesC16 @ 11 NONAME - _ZN14CGlxDRMUtility5CloseEv @ 12 NONAME - _ZN14CGlxDRMUtility9InstanceLEv @ 13 NONAME + _ZN14CGlxDRMUtility24ClearLastConsumedItemUriEv @ 12 NONAME + _ZN14CGlxDRMUtility5CloseEv @ 13 NONAME + _ZN14CGlxDRMUtility9InstanceLEv @ 14 NONAME diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/viewframework/drmutility/inc/glxdrmutility.h --- a/photosgallery/viewframework/drmutility/inc/glxdrmutility.h Fri Mar 12 15:42:44 2010 +0200 +++ b/photosgallery/viewframework/drmutility/inc/glxdrmutility.h Mon Mar 15 12:40:30 2010 +0200 @@ -109,8 +109,12 @@ * @return ETrue to no error in rights consumption */ IMPORT_C TBool ConsumeRightsL(const TDesC& aUri); - - + + /** + * Fix for ESLM-82WJ59: + * Clears Last Consumed Uri + */ + IMPORT_C void ClearLastConsumedItemUri(); /** * Test whether a media item is OMA DRM 2.0 protected and has an associated diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/viewframework/drmutility/src/glxdrmutility.cpp --- a/photosgallery/viewframework/drmutility/src/glxdrmutility.cpp Fri Mar 12 15:42:44 2010 +0200 +++ b/photosgallery/viewframework/drmutility/src/glxdrmutility.cpp Mon Mar 15 12:40:30 2010 +0200 @@ -122,16 +122,25 @@ //============================================================================ // CheckOpenRightsL -//============================================================================ -EXPORT_C TBool CGlxDRMUtility::CheckOpenRightsL( const TDesC& aUri, +// Fix for ESLM-82WJ59:always call 'CheckOpenRightsL' only for checking DRM +// rights validity for item. +//============================================================================ +EXPORT_C TBool CGlxDRMUtility::CheckOpenRightsL( const TDesC& aUri, TBool aCheckViewRights ) { TRACER("CGlxDRMUtility::CheckOpenRightsL()"); - // When checking current rights for a URI, clear stored URI - TPtr ptr = iLastConsumedItemUri->Des(); - ptr.Zero(); - iLastConsumedItemUri = iLastConsumedItemUri->ReAllocL( 0 ); + // When checking current rights for a URI + // Fix for ESLM-82WJ59: Allow to Open if rights for a URI was just consumed (i.e. same as stored URI) + if ( iLastConsumedItemUri->Length() > 0 ) + { + if ( aUri.CompareF( *iLastConsumedItemUri ) == 0 ) + { + return ETrue; + } + } + + // Fix for ESLM-82WJ59: Else for uri of non-focused uri, just check validity rights TBool rightsValid = EFalse; TVirtualPathPtr path( aUri, KDefaultContentObject() ); @@ -146,11 +155,13 @@ //============================================================================ // CheckDisplayRightsL -//============================================================================ -EXPORT_C TBool CGlxDRMUtility::CheckDisplayRightsL( const TDesC& aUri, +// Fix for ESLM-82WJ59:always call 'CheckDisplayRightsL' only for focused item. +//============================================================================ +EXPORT_C TBool CGlxDRMUtility::CheckDisplayRightsL( const TDesC& aUri, TBool aCheckViewRights ) { TRACER("CGlxDRMUtility::CheckDisplayRightsL()"); + // Allow to display if rights for a URI was just consumed (i.e. same as stored URI) if ( iLastConsumedItemUri->Length() > 0 ) { @@ -160,7 +171,10 @@ } } - // Otherwise, check current rights for the URI + //Fix for ESLM-82WJ59: Clear the stored uri since focus has changed + ClearLastConsumedItemUri(); + + // Otherwise, check current rights for the URI of newly focused item return CheckOpenRightsL( aUri, aCheckViewRights ); } @@ -176,17 +190,16 @@ // Tell the agent we are planning to display the content CData* data = CData::NewLC(path, ContentAccess::EView, EContentShareReadOnly); - // When consuming rights for a URI, clear stored URI - TPtr oldPtr = iLastConsumedItemUri->Des(); - oldPtr.Zero(); - iLastConsumedItemUri = iLastConsumedItemUri->ReAllocL( aUri.Length() ); + //Fix for ESLM-82WJ59: When consuming rights for a URI, clear stored URI + ClearLastConsumedItemUri(); // Execute the intent, tell the agent that we plan to display the content // It is at this point that any stateful rights will be decremented TInt err = data->ExecuteIntent(ContentAccess::EView); if ( err == KErrNone ) { - // Update stored URI + //Fix for ESLM-82WJ59: Update stored URI + iLastConsumedItemUri = iLastConsumedItemUri->ReAllocL( aUri.Length() ); TPtr newPtr = iLastConsumedItemUri->Des(); newPtr.Copy( aUri ); } @@ -197,6 +210,18 @@ } //============================================================================ +//Fix for ESLM-82WJ59: +//Clears Last Consumed Uri +//============================================================================ +EXPORT_C void CGlxDRMUtility::ClearLastConsumedItemUri() + { + //clears the stored uri + TPtr aPtr = iLastConsumedItemUri->Des(); + aPtr.Zero(); + iLastConsumedItemUri = iLastConsumedItemUri->ReAllocL( 0 ); + } + +//============================================================================ // Test whether a media item is OMA DRM 2.0 protected and has an associated // info URL. //============================================================================ diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/viewframework/medialists/inc/glxcachemanager.h --- a/photosgallery/viewframework/medialists/inc/glxcachemanager.h Fri Mar 12 15:42:44 2010 +0200 +++ b/photosgallery/viewframework/medialists/inc/glxcachemanager.h Mon Mar 15 12:40:30 2010 +0200 @@ -74,7 +74,7 @@ * @param aMedia The media object * @param aError Error */ - void HandleCollectionMediaL(const TGlxIdSpaceId& aIdSpaceId, const CMPXMedia& aMedia, TInt aError); + void HandleCollectionMediaL(const TGlxIdSpaceId& aIdSpaceId, const CMPXMedia& aMedia, TInt aError, TBool aRequestNextAttr = ETrue); /** * Informs that focus in the window of the list has changed. The lists diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/viewframework/medialists/inc/glximagereader.h --- a/photosgallery/viewframework/medialists/inc/glximagereader.h Fri Mar 12 15:42:44 2010 +0200 +++ b/photosgallery/viewframework/medialists/inc/glximagereader.h Mon Mar 15 12:40:30 2010 +0200 @@ -63,6 +63,7 @@ static CGlxImageReader* NewL(MImageReadyCallBack& aNotify); ~CGlxImageReader(); TInt GetDRMRightsL(TInt aAttribute); + TInt GetFrameCount(); private: MImageReadyCallBack& iNotify; diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/viewframework/medialists/src/glxcachemanager.cpp --- a/photosgallery/viewframework/medialists/src/glxcachemanager.cpp Fri Mar 12 15:42:44 2010 +0200 +++ b/photosgallery/viewframework/medialists/src/glxcachemanager.cpp Mon Mar 15 12:40:30 2010 +0200 @@ -320,7 +320,7 @@ // HandleCollectionMediaL // ----------------------------------------------------------------------------- // -void CGlxCacheManager::HandleCollectionMediaL(const TGlxIdSpaceId& aIdSpaceId, const CMPXMedia& aMedia, TInt aError) +void CGlxCacheManager::HandleCollectionMediaL(const TGlxIdSpaceId& aIdSpaceId, const CMPXMedia& aMedia, TInt aError, TBool aRequestNextAttr) { TRACER("CGlxCacheManager::HandleCollectionMediaL"); @@ -362,8 +362,10 @@ CleanupStack::PopAndDestroy( &users ); } - - MaintainCacheL(); + if ( aRequestNextAttr ) + { + MaintainCacheL(); + } } // ----------------------------------------------------------------------------- @@ -647,6 +649,8 @@ } else { + GLX_DEBUG1("GENERAL NON IV CASE - Fetch TN"); + GLX_DEBUG2("itemId = [%d] ", itemId.Value()); CThumbnailObjectSource* source = CThumbnailObjectSource::NewLC(item.Uri(), 0); iThumbnailRequestIds.AppendL(TLoadingTN( iTnEngine->GetThumbnailL(*source), @@ -722,7 +726,17 @@ RFile64& imageHandle = iImageViewerInstance->ImageFileHandle(); if ( &imageHandle ) { - fileName.Append(imageHandle.FullName(fileName)); + if (iImageViewerInstance->IsPrivateGif()) + { + __ASSERT_DEBUG(iImageViewerInstance->ImageUri(), Panic(EGlxPanicNullPointer)); + fileName.Append( + iImageViewerInstance->ImageUri()->Des()); + } + else + { + fileName.Append(imageHandle.FullName( + fileName)); + } } else { @@ -932,6 +946,11 @@ else if ( iRequestedAttrs[i] == KGlxMediaGeneralFramecount ) { TInt fcount = 1; + if(errInImage == KErrNone) + { + fcount = iReader->GetFrameCount(); + } + GLX_DEBUG2("Imageviewer Collection framecount(%d)", fcount); iMPXMedia->SetTObjectValueL(KGlxMediaGeneralFramecount, fcount); } else if ( iRequestedAttrs[i] == KMPXMediaGeneralComment ) @@ -1499,17 +1518,12 @@ iMPXMedia->SetNoNewLCObjectL( TMPXAttribute(KGlxMediaIdThumbnail, attributeId), tnAttribute); CleanupStack::PopAndDestroy(tnAttribute); - - HandleCollectionMediaL(iThumbnailRequestIds[reqIndex].iSpaceId, - *iMPXMedia, aError); - } - else - { - HandleCollectionMediaL(iThumbnailRequestIds[reqIndex].iSpaceId, - *iMPXMedia, aError); + } - if (aQuality) + HandleCollectionMediaL(iThumbnailRequestIds[reqIndex].iSpaceId, + *iMPXMedia, aError, aQuality); + if (aQuality) { FindLoadingById(aId, ETrue); } diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/viewframework/medialists/src/glximagereader.cpp --- a/photosgallery/viewframework/medialists/src/glximagereader.cpp Fri Mar 12 15:42:44 2010 +0200 +++ b/photosgallery/viewframework/medialists/src/glximagereader.cpp Mon Mar 15 12:40:30 2010 +0200 @@ -28,6 +28,7 @@ #include "glximagereader.h" +const TInt KDefaultFrameCount = 1; // --------------------------------------------------------- // CGlxImageReader::NewL @@ -136,7 +137,6 @@ } } - // --------------------------------------------------------- // CGlxImageReader::DoCancel // --------------------------------------------------------- @@ -164,6 +164,7 @@ GLX_DEBUG2("CGlxImageReader::RunL() reqStatus=%d", reqStatus); iNotify.ImageSizeReady(reqStatus, size); } + // --------------------------------------------------------- // CGlxImageReader::GetDRMRightsL // --------------------------------------------------------- @@ -209,3 +210,18 @@ } return value; } + +// --------------------------------------------------------- +// CGlxImageReader::GetFrameCount +// --------------------------------------------------------- +// +TInt CGlxImageReader::GetFrameCount() + { + TRACER("CGlxImageReader::GetFrameCount"); + TInt frameCount = KDefaultFrameCount; + if (iImageDecoder) + { + frameCount = iImageDecoder->FrameCount(); + } + return frameCount; + } diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/viewframework/medialists/src/glxmedialist.cpp --- a/photosgallery/viewframework/medialists/src/glxmedialist.cpp Fri Mar 12 15:42:44 2010 +0200 +++ b/photosgallery/viewframework/medialists/src/glxmedialist.cpp Mon Mar 15 12:40:30 2010 +0200 @@ -1091,6 +1091,9 @@ HandleItemModifiedL(itemId, attributes); CleanupStack::PopAndDestroy(&attributes); iManager->HandleWindowChangedL(this); + //Fix for Bug 'ESLM-827JU8 Vasco w03':Dont 'ReOpenL()' in any case + //Side Effect: Does not reorder album list in case of renaming album (To be handled later). + break; // Drop through to perform sync, in case the order has changed } diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/viewframework/texturemanager/bwins/glxtexturemanageru.def --- a/photosgallery/viewframework/texturemanager/bwins/glxtexturemanageru.def Fri Mar 12 15:42:44 2010 +0200 +++ b/photosgallery/viewframework/texturemanager/bwins/glxtexturemanageru.def Mon Mar 15 12:40:30 2010 +0200 @@ -11,9 +11,10 @@ ?TextureNeedsUpdating@CGlxTextureManager@@QAEHVTGlxMedia@@V?$TGlxId@VTGlxIdSpaceIdBase@@@@ABVTSize@@@Z @ 10 NONAME ; int CGlxTextureManager::TextureNeedsUpdating(class TGlxMedia, class TGlxId, class TSize const &) ?RemoveTexture@CGlxTextureManager@@QAEXABVCAlfTexture@@@Z @ 11 NONAME ; void CGlxTextureManager::RemoveTexture(class CAlfTexture const &) ?RemoveZoomList@CGlxTextureManager@@QAEXXZ @ 12 NONAME ; void CGlxTextureManager::RemoveZoomList(void) - ?CreateAnimatedGifTextureL@CGlxTextureManager@@QAEAAVCAlfTexture@@ABVTDesC16@@ABVTSize@@@Z @ 13 NONAME ; class CAlfTexture & CGlxTextureManager::CreateAnimatedGifTextureL(class TDesC16 const &, class TSize const &) + ?CreateAnimatedGifTextureL@CGlxTextureManager@@QAEAAVCAlfTexture@@ABVTDesC16@@ABVTSize@@@Z @ 13 NONAME ABSENT ; class CAlfTexture & CGlxTextureManager::CreateAnimatedGifTextureL(class TDesC16 const &, class TSize const &) ?CreateAvkonIconTextureL@CGlxTextureManager@@QAEAAVCAlfTexture@@ABVTAknsItemID@@VTSize@@@Z @ 14 NONAME ; class CAlfTexture & CGlxTextureManager::CreateAvkonIconTextureL(class TAknsItemID const &, class TSize) ?CreateColorIconTextureL@CGlxTextureManager@@QAEAAVCAlfTexture@@HAAVTDesC16@@VTRgb@@ABVTAknsItemID@@HVTSize@@@Z @ 15 NONAME ; class CAlfTexture & CGlxTextureManager::CreateColorIconTextureL(int, class TDesC16 &, class TRgb, class TAknsItemID const &, int, class TSize) ?CreateThumbnailTextureL@CGlxTextureManager@@QAEAAVCAlfTexture@@ABVTGlxMedia@@ABV?$TGlxId@VTGlxIdSpaceIdBase@@@@ABVTSize@@PAVMGlxTextureObserver@@H@Z @ 16 NONAME ; class CAlfTexture & CGlxTextureManager::CreateThumbnailTextureL(class TGlxMedia const &, class TGlxId const &, class TSize const &, class MGlxTextureObserver *, int) ?CreateNewTextureForMediaL@CGlxTextureManager@@QAEAAVCAlfTexture@@VTSize@@ABVTGlxMedia@@ABV?$TGlxId@VTGlxIdSpaceIdBase@@@@PAVMGlxTextureObserver@@@Z @ 17 NONAME ; class CAlfTexture & CGlxTextureManager::CreateNewTextureForMediaL(class TSize, class TGlxMedia const &, class TGlxId const &, class MGlxTextureObserver *) + ?CreateAnimatedGifTextureL@CGlxTextureManager@@QAEAAVCAlfTexture@@ABVTDesC16@@ABVTSize@@ABVTGlxMedia@@V?$TGlxId@VTGlxIdSpaceIdBase@@@@@Z @ 18 NONAME ; class CAlfTexture & CGlxTextureManager::CreateAnimatedGifTextureL(class TDesC16 const &, class TSize const &, class TGlxMedia const &, class TGlxId) diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/viewframework/texturemanager/eabi/glxtexturemanageru.def --- a/photosgallery/viewframework/texturemanager/eabi/glxtexturemanageru.def Fri Mar 12 15:42:44 2010 +0200 +++ b/photosgallery/viewframework/texturemanager/eabi/glxtexturemanageru.def Mon Mar 15 12:40:30 2010 +0200 @@ -12,7 +12,7 @@ _ZN18CGlxTextureManager23CreateColorIconTextureLEiR7TDesC164TRgbRK11TAknsItemIDi5TSize @ 11 NONAME _ZN18CGlxTextureManager23CreateThumbnailTextureLERK9TGlxMediaRK6TGlxIdI17TGlxIdSpaceIdBaseERK5TSizeP19MGlxTextureObserveri @ 12 NONAME _ZN18CGlxTextureManager24CreateFlatColourTextureLE4TRgb @ 13 NONAME - _ZN18CGlxTextureManager25CreateAnimatedGifTextureLERK7TDesC16RK5TSize @ 14 NONAME + _ZN18CGlxTextureManager25CreateAnimatedGifTextureLERK7TDesC16RK5TSizeRK9TGlxMedia6TGlxIdI17TGlxIdSpaceIdBaseE @ 14 NONAME _ZN18CGlxTextureManager25CreateNewTextureForMediaLE5TSizeRK9TGlxMediaRK6TGlxIdI17TGlxIdSpaceIdBaseEP19MGlxTextureObserver @ 15 NONAME _ZN18CGlxTextureManager28CreateColorAvkonIconTextureLERK11TAknsItemIDi4TRgbS2_i5TSize @ 16 NONAME _ZN18CGlxTextureManager4NewLER18CAlfTextureManager @ 17 NONAME diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/viewframework/texturemanager/inc/glxtexturemanager.h --- a/photosgallery/viewframework/texturemanager/inc/glxtexturemanager.h Fri Mar 12 15:42:44 2010 +0200 +++ b/photosgallery/viewframework/texturemanager/inc/glxtexturemanager.h Mon Mar 15 12:40:30 2010 +0200 @@ -180,7 +180,7 @@ * @param aMedia The media item * @param aAttribute Which attribute * @param aIdSpaceId The Id of the Id space in which the media Id is defined - * @param aTextureId The created texture's id, required when the texture is removed. + * @param aObserver Observer for the texture. * @return Created texture */ IMPORT_C CAlfTexture& CreateZoomedTextureL(const TGlxMedia& aMedia, @@ -198,10 +198,12 @@ * Create an animated texture from a GIF file * @param aFilename The filename of the GIF file * @param aSize The size of the GIF file + * @param aMedia The media item + * @param aIdSpaceId The Id of the Id space in which the media Id is defined * @return Created texture: ownership transfered */ IMPORT_C CAlfTexture& CreateAnimatedGifTextureL( const TDesC& aFilename, - const TSize& aSize ); + const TSize& aSize, const TGlxMedia& aMedia, TGlxIdSpaceId aIdSpaceId ); /** * Creates a flat color texture and returns the reference to it diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/viewframework/texturemanager/inc/glxtexturemanagerimpl.h --- a/photosgallery/viewframework/texturemanager/inc/glxtexturemanagerimpl.h Fri Mar 12 15:42:44 2010 +0200 +++ b/photosgallery/viewframework/texturemanager/inc/glxtexturemanagerimpl.h Mon Mar 15 12:40:30 2010 +0200 @@ -136,7 +136,7 @@ * @param aMedia The media item * @param aAttribute Which attribute * @param aIdSpaceId The Id of the Id space in which the media Id is defined - * @param aTextureId The created texture's id, required when the texture is removed. + * @param aObserver Observer for the texture. * @return Created texture */ CAlfTexture& CreateZoomedTextureL(const TGlxMedia& aMedia, @@ -154,10 +154,12 @@ * Create an animated texture from a GIF file * @param aFilename The filename of the GIF file * @param aSize The size of the GIF file + * @param aMedia The media item + * @param aIdSpaceId The Id of the Id space in which the media Id is defined * @return Created texture: ownership transfered */ - CAlfTexture& CreateAnimatedGifTextureL(const TDesC& aFilename, - const TSize& aSize); + CAlfTexture& CreateAnimatedGifTextureL(const TDesC& aFilename, const TSize& aSize, + const TGlxMedia& aMedia, TGlxIdSpaceId aIdSpaceId); /** * Removes the texture if it was created by CreateThumbnailTextureL or @@ -370,6 +372,19 @@ void ScaleGridTnmToFsL(TSize aSrcSize, TSize aDestSize, CFbsBitmap *aScaledBitmap, const CGlxThumbnailAttribute* thumb); + + /** + * GetAnimatedGifThumbnailIndex + * @param aSize The size of the requested texture + * @param aMedia The TGlxMedia item. + * @param aIdSpaceId The Id of the Id space in which the media Id is defined + * @param aThumbnailIndex on return will contain the Index of the thumbnail in the iAnimatedTnmList + * or KErrNotFound + * @return ETrue if Thumbnail is available, EFalse if it needs to be created + */ + TBool CGlxTextureManagerImpl::GetAnimatedGifThumbnailIndex( TSize aSize, + const TGlxMedia& aMedia, const TGlxIdSpaceId& aIdSpaceId, + TInt& aThumbnailIndex); private: // Alf Texture manager (not owned) CAlfTextureManager& iAlfTextureManager; @@ -386,6 +401,9 @@ // List containing data for textures generated from zoomed thumbnail. RArray iZoomedList; + // List containing data for textures generated from Animated thumbnail. + RArray iAnimatedTnmList; + // List of .mif filenames of files containing icons. CDesCArrayFlat* iMifFilenames; diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/viewframework/texturemanager/src/glxtexturemanager.cpp --- a/photosgallery/viewframework/texturemanager/src/glxtexturemanager.cpp Fri Mar 12 15:42:44 2010 +0200 +++ b/photosgallery/viewframework/texturemanager/src/glxtexturemanager.cpp Mon Mar 15 12:40:30 2010 +0200 @@ -230,11 +230,12 @@ // ----------------------------------------------------------------------------- // EXPORT_C CAlfTexture& CGlxTextureManager::CreateAnimatedGifTextureL( - const TDesC& aFilename,const TSize& aSize ) + const TDesC& aFilename,const TSize& aSize, + const TGlxMedia& aMedia, TGlxIdSpaceId aIdSpaceId) { TRACER("CGlxTextureManager::CreateAnimatedGifTextureL"); GLX_LOG_INFO( "CGlxTextureManager::CreateAnimatedGifTextureL" ); - return iImpl->CreateAnimatedGifTextureL( aFilename, aSize ); + return iImpl->CreateAnimatedGifTextureL( aFilename, aSize, aMedia, aIdSpaceId); } // ----------------------------------------------------------------------------- diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/viewframework/texturemanager/src/glxtexturemanagerimpl.cpp --- a/photosgallery/viewframework/texturemanager/src/glxtexturemanagerimpl.cpp Fri Mar 12 15:42:44 2010 +0200 +++ b/photosgallery/viewframework/texturemanager/src/glxtexturemanagerimpl.cpp Mon Mar 15 12:40:30 2010 +0200 @@ -81,7 +81,9 @@ iIconList.Close(); iThumbnailList.Close(); - + + iAnimatedTnmList.Close(); + // delete zoom textures count = iZoomedList.Count(); GLX_LOG_INFO1("CGlxTextureManagerImpl iZoomedList.Count=%d",count); @@ -476,6 +478,19 @@ // iIconLIst should deleted only once in destructor as // they are using in full applicaiton } + + index = iAnimatedTnmList.Find( aTexture, &TGlxThumbnailIcon::MatchTexture ); + GLX_LOG_INFO1("CGlxTextureManagerImpl RemoveTexture iAnimatedTnmList index=%d",index); + if ( index != KErrNotFound ) + { + if(iAnimatedTnmList[index].iTexture) + { + GLX_LOG_INFO("RemoveTexture iAnimatedTnmList Stop animation"); + (iAnimatedTnmList[index].iTexture)->StopAnimation(); + } + iAnimatedTnmList.Remove( index ); + iAlfTextureManager.UnloadTexture( aTexture.Id() ); + } } // ----------------------------------------------------------------------------- @@ -513,7 +528,7 @@ void CGlxTextureManagerImpl::RemoveTexture(const TGlxMediaId& aMediaId,TBool aAllTexture ) { TRACER("CGlxTextureManagerImpl::RemoveTexture 2"); - //Bug fix for PKAA-7NRBYZ - added bAllTexture param + //Bug fix for PKAA-7NRBYZ - added aAllTexture param // Find the texture in the iThumbnailList TInt i = iThumbnailList.Count(); while(i > 0) @@ -529,6 +544,25 @@ break; } } + + i = iAnimatedTnmList.Count(); + + while(i > 0) + { + --i; + if (iAnimatedTnmList[i].iMediaId == aMediaId) + { + GLX_LOG_INFO("RemoveTexture 2 iAnimatedTnmList MediaID found"); + TInt aTexture = iAnimatedTnmList[i].iTextureId; + if(iAnimatedTnmList[i].iTexture) + { + GLX_LOG_INFO("RemoveTexture2 iAnimatedTnmList Stop animation"); + (iAnimatedTnmList[i].iTexture)->StopAnimation(); + } + iAnimatedTnmList.Remove(i); + iAlfTextureManager.UnloadTexture(aTexture ); + } + } } // ----------------------------------------------------------------------------- @@ -540,8 +574,8 @@ TRACER("CGlxTextureManagerImpl::FlushTextures"); TInt textureID ; - TInt i = iThumbnailList.Count(); + TInt i = iThumbnailList.Count(); while(i > 0) { --i; @@ -567,6 +601,20 @@ iAlfTextureManager.UnloadTexture(textureID ); iZoomedList[i].iTexture = NULL; } + + i = iAnimatedTnmList.Count(); + while(i > 0) + { + --i; + textureID = iAnimatedTnmList[i].iTextureId; + if(iAnimatedTnmList[i].iTexture) + { + GLX_LOG_INFO("FlushTextures iAnimatedTnmList Stop animation"); + (iAnimatedTnmList[i].iTexture)->StopAnimation(); + } + iAlfTextureManager.UnloadTexture(textureID); + iAnimatedTnmList[i].iTexture = NULL; + } } // ----------------------------------------------------------------------------- @@ -776,11 +824,45 @@ // ----------------------------------------------------------------------------- // CAlfTexture& CGlxTextureManagerImpl::CreateAnimatedGifTextureL( - const TDesC& aFilename, const TSize& aSize) + const TDesC& aFilename, const TSize& aSize,const TGlxMedia& aMedia, + TGlxIdSpaceId aIdSpaceId) { TRACER("CGlxTextureManagerImpl::CreateAnimatedGifTextureL"); - return iAlfTextureManager.LoadTextureL(aFilename,aSize, - EAlfTextureFlagDefault,NextTextureId() ); + TInt thumbnailIndex = KErrNotFound; + + // If the current thumbnail matches what is required then return the current texture otherwise + // create a new one. + if (!GetAnimatedGifThumbnailIndex( aSize, aMedia, aIdSpaceId,thumbnailIndex)) + { + GLX_LOG_INFO("CreateAnimatedGifTextureL Texture already present"); + // only texture is missing. + if ((NULL == iAnimatedTnmList[thumbnailIndex].iTexture)) + { + CAlfTexture& newTexture = iAlfTextureManager.LoadTextureL(aFilename,aSize, + EAlfTextureFlagDefault,iAnimatedTnmList[thumbnailIndex].iTextureId ); + iAnimatedTnmList[thumbnailIndex].iTexture = &newTexture ; + } + return *iAnimatedTnmList[thumbnailIndex].iTexture; + } + + TGlxThumbnailIcon thumbData; + thumbData.iTextureId = NextTextureId(); + thumbData.iTexture = NULL; + thumbData.iMediaId = aMedia.Id(); + thumbData.iIdSpaceId = aIdSpaceId; + + iAnimatedTnmList.ReserveL( iAnimatedTnmList.Count() + 1 ); + + iAnimatedTnmList.Append(thumbData); + + CAlfTexture& newTexture = iAlfTextureManager.LoadTextureL(aFilename,aSize, + EAlfTextureFlagDefault,thumbData.iTextureId ); + + TInt index = iAnimatedTnmList.Count()-1; + iAnimatedTnmList[index].iTexture = &newTexture; + iAnimatedTnmList[index].iRequiredSize = aSize; + + return newTexture; } @@ -1026,7 +1108,10 @@ // check if rights have expired TBool checkViewRights = (cat==EMPXImage); - drmInvalid = !iDrmUtility->CheckDisplayRightsL(uri, checkViewRights); + //Fix for ESLM-82WJ59: Since uri can be either focused or unfocused item + //better call CheckOpenRightsL which doesn't modify lastconsumedUri. + drmInvalid = !iDrmUtility->CheckOpenRightsL(uri, checkViewRights); + CGlxMedia* properties = const_cast(aMedia.Properties()); if( !drmInvalid ) { @@ -1093,7 +1178,11 @@ return ++iNextTextureId; } - + +// ----------------------------------------------------------------------------- +// HandleBitmapDecodedL +// ----------------------------------------------------------------------------- +// void CGlxTextureManagerImpl::HandleBitmapDecodedL(TInt aThumbnailIndex,CFbsBitmap* aBitmap) { TRACER("CGlxTextureManagerImpl::HandleBitmapDecodedL"); @@ -1222,3 +1311,34 @@ GLX_LOG_INFO2("===== Actual Image Size %d x %d",aSrcSize.iWidth,aSrcSize.iHeight); GLX_LOG_INFO2("===== Scaled Image Size %d x %d",destinationSize.iWidth,destinationSize.iHeight); } + + +// ----------------------------------------------------------------------------- +// GetAnimatedGifThumbnailIndex +// ----------------------------------------------------------------------------- +// +TBool CGlxTextureManagerImpl::GetAnimatedGifThumbnailIndex( TSize aSize, + const TGlxMedia& aMedia, const TGlxIdSpaceId& aIdSpaceId, + TInt& aThumbnailIndex) + { + TRACER("CGlxTextureManagerImpl::GetAnimatedGifThumbnailIndex"); + aThumbnailIndex = KErrNotFound; + + TInt i = iAnimatedTnmList.Count(); + + while(i > 0 && aThumbnailIndex == KErrNotFound) + { + --i; + if ((iAnimatedTnmList[i].iMediaId == aMedia.Id()) && + (iAnimatedTnmList[i].iIdSpaceId == aIdSpaceId) && + (iAnimatedTnmList[i].iRequiredSize == aSize)) + { + aThumbnailIndex = i; + GLX_LOG_INFO( "GetAnimatedGifThumbnailIndex textureid present" ); + // We have found that the best match already exists + // No need to do anything + return EFalse; + } + } + return ETrue; + } diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/viewframework/tvout/bwins/glxtvoutu.def --- a/photosgallery/viewframework/tvout/bwins/glxtvoutu.def Fri Mar 12 15:42:44 2010 +0200 +++ b/photosgallery/viewframework/tvout/bwins/glxtvoutu.def Mon Mar 15 12:40:30 2010 +0200 @@ -1,16 +1,17 @@ EXPORTS - ?ScreenSizeL@CGlxTv@@QBE?AVTSize@@XZ @ 1 NONAME ; class TSize CGlxTv::ScreenSizeL(void) const - ??1CGlxTv@@UAE@XZ @ 2 NONAME ; CGlxTv::~CGlxTv(void) - ??1CGlxHdmiController@@UAE@XZ @ 3 NONAME ; CGlxHdmiController::~CGlxHdmiController(void) - ?SetImageL@CGlxHdmiController@@QAEXABVTDesC16@@VTSize@@HH@Z @ 4 NONAME ; void CGlxHdmiController::SetImageL(class TDesC16 const &, class TSize, int, int) - ?IsWidescreen@CGlxTv@@QBEHXZ @ 5 NONAME ; int CGlxTv::IsWidescreen(void) const - ?NewL@CGlxTv@@SAPAV1@AAVMGlxTvObserver@@@Z @ 6 NONAME ; class CGlxTv * CGlxTv::NewL(class MGlxTvObserver &) - ?IsConnected@CGlxTv@@QBEHXZ @ 7 NONAME ; int CGlxTv::IsConnected(void) const - ?IsVideo@CGlxHdmiController@@QAEXXZ @ 8 NONAME ; void CGlxHdmiController::IsVideo(void) - ?NewL@CGlxHdmiController@@SAPAV1@ABVTDesC16@@@Z @ 9 NONAME ; class CGlxHdmiController * CGlxHdmiController::NewL(class TDesC16 const &) - ?IsHDMIConnected@CGlxTv@@QBEHXZ @ 10 NONAME ; int CGlxTv::IsHDMIConnected(void) const - ?ActivateZoom@CGlxHdmiController@@QAEXXZ @ 11 NONAME ; void CGlxHdmiController::ActivateZoom(void) - ?DeactivateZoom@CGlxHdmiController@@QAEXXZ @ 12 NONAME ; void CGlxHdmiController::DeactivateZoom(void) - ?ShiftToPostingMode@CGlxHdmiController@@QAEXXZ @ 13 NONAME ; void CGlxHdmiController::ShiftToPostingMode(void) - ?ShiftToCloningMode@CGlxHdmiController@@QAEXXZ @ 14 NONAME ; void CGlxHdmiController::ShiftToCloningMode(void) + ?ActivateZoom@CGlxHdmiController@@QAEXH@Z @ 1 NONAME ; void CGlxHdmiController::ActivateZoom(int) + ?ScreenSizeL@CGlxTv@@QBE?AVTSize@@XZ @ 2 NONAME ; class TSize CGlxTv::ScreenSizeL(void) const + ??1CGlxTv@@UAE@XZ @ 3 NONAME ; CGlxTv::~CGlxTv(void) + ??1CGlxHdmiController@@UAE@XZ @ 4 NONAME ; CGlxHdmiController::~CGlxHdmiController(void) + ?SetImageL@CGlxHdmiController@@QAEXABVTDesC16@@VTSize@@HH@Z @ 5 NONAME ; void CGlxHdmiController::SetImageL(class TDesC16 const &, class TSize, int, int) + ?IsWidescreen@CGlxTv@@QBEHXZ @ 6 NONAME ; int CGlxTv::IsWidescreen(void) const + ?IsHDMIConnected@CGlxHdmiController@@QAEHXZ @ 7 NONAME ; int CGlxHdmiController::IsHDMIConnected(void) + ?ShiftToPostingMode@CGlxHdmiController@@QAEXXZ @ 8 NONAME ; void CGlxHdmiController::ShiftToPostingMode(void) + ?ShiftToCloningMode@CGlxHdmiController@@QAEXXZ @ 9 NONAME ; void CGlxHdmiController::ShiftToCloningMode(void) + ?IsConnected@CGlxTv@@QBEHXZ @ 10 NONAME ; int CGlxTv::IsConnected(void) const + ?ItemNotSupported@CGlxHdmiController@@QAEXXZ @ 11 NONAME ; void CGlxHdmiController::ItemNotSupported(void) + ?NewL@CGlxTv@@SAPAV1@AAVMGlxTvObserver@@@Z @ 12 NONAME ; class CGlxTv * CGlxTv::NewL(class MGlxTvObserver &) + ?NewL@CGlxHdmiController@@SAPAV1@ABVTDesC16@@@Z @ 13 NONAME ; class CGlxHdmiController * CGlxHdmiController::NewL(class TDesC16 const &) + ?IsHDMIConnected@CGlxTv@@QBEHXZ @ 14 NONAME ; int CGlxTv::IsHDMIConnected(void) const + ?DeactivateZoom@CGlxHdmiController@@QAEXXZ @ 15 NONAME ; void CGlxHdmiController::DeactivateZoom(void) diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/viewframework/tvout/eabi/glxtvoutu.def --- a/photosgallery/viewframework/tvout/eabi/glxtvoutu.def Fri Mar 12 15:42:44 2010 +0200 +++ b/photosgallery/viewframework/tvout/eabi/glxtvoutu.def Mon Mar 15 12:40:30 2010 +0200 @@ -1,28 +1,29 @@ EXPORTS - _ZN18CGlxHdmiController12ActivateZoomEv @ 1 NONAME + _ZN18CGlxHdmiController12ActivateZoomEi @ 1 NONAME _ZN18CGlxHdmiController14DeactivateZoomEv @ 2 NONAME - _ZN18CGlxHdmiController4NewLERK7TDesC16 @ 3 NONAME - _ZN18CGlxHdmiController7IsVideoEv @ 4 NONAME - _ZN18CGlxHdmiController9SetImageLERK7TDesC165TSizeii @ 5 NONAME - _ZN18CGlxHdmiControllerD0Ev @ 6 NONAME - _ZN18CGlxHdmiControllerD1Ev @ 7 NONAME - _ZN18CGlxHdmiControllerD2Ev @ 8 NONAME - _ZN6CGlxTv4NewLER14MGlxTvObserver @ 9 NONAME - _ZN6CGlxTvD0Ev @ 10 NONAME - _ZN6CGlxTvD1Ev @ 11 NONAME - _ZN6CGlxTvD2Ev @ 12 NONAME - _ZNK6CGlxTv11IsConnectedEv @ 13 NONAME - _ZNK6CGlxTv11ScreenSizeLEv @ 14 NONAME - _ZNK6CGlxTv12IsWidescreenEv @ 15 NONAME - _ZNK6CGlxTv15IsHDMIConnectedEv @ 16 NONAME - _ZTI17CGlxHdmiContainer @ 17 NONAME - _ZTI17CGlxHdmiDecoderAO @ 18 NONAME - _ZTI18CGlxHdmiController @ 19 NONAME - _ZTI22CGlxHdmiSurfaceUpdater @ 20 NONAME - _ZTV17CGlxHdmiContainer @ 21 NONAME - _ZTV17CGlxHdmiDecoderAO @ 22 NONAME - _ZTV18CGlxHdmiController @ 23 NONAME - _ZTV22CGlxHdmiSurfaceUpdater @ 24 NONAME - _ZN18CGlxHdmiController18ShiftToCloningModeEv @ 25 NONAME - _ZN18CGlxHdmiController18ShiftToPostingModeEv @ 26 NONAME + _ZN18CGlxHdmiController15IsHDMIConnectedEv @ 3 NONAME + _ZN18CGlxHdmiController16ItemNotSupportedEv @ 4 NONAME + _ZN18CGlxHdmiController18ShiftToCloningModeEv @ 5 NONAME + _ZN18CGlxHdmiController18ShiftToPostingModeEv @ 6 NONAME + _ZN18CGlxHdmiController4NewLERK7TDesC16 @ 7 NONAME + _ZN18CGlxHdmiController9SetImageLERK7TDesC165TSizeii @ 8 NONAME + _ZN18CGlxHdmiControllerD0Ev @ 9 NONAME + _ZN18CGlxHdmiControllerD1Ev @ 10 NONAME + _ZN18CGlxHdmiControllerD2Ev @ 11 NONAME + _ZN6CGlxTv4NewLER14MGlxTvObserver @ 12 NONAME + _ZN6CGlxTvD0Ev @ 13 NONAME + _ZN6CGlxTvD1Ev @ 14 NONAME + _ZN6CGlxTvD2Ev @ 15 NONAME + _ZNK6CGlxTv11IsConnectedEv @ 16 NONAME + _ZNK6CGlxTv11ScreenSizeLEv @ 17 NONAME + _ZNK6CGlxTv12IsWidescreenEv @ 18 NONAME + _ZNK6CGlxTv15IsHDMIConnectedEv @ 19 NONAME + _ZTI17CGlxHdmiContainer @ 20 NONAME + _ZTI17CGlxHdmiDecoderAO @ 21 NONAME + _ZTI18CGlxHdmiController @ 22 NONAME + _ZTI22CGlxHdmiSurfaceUpdater @ 23 NONAME + _ZTV17CGlxHdmiContainer @ 24 NONAME + _ZTV17CGlxHdmiDecoderAO @ 25 NONAME + _ZTV18CGlxHdmiController @ 26 NONAME + _ZTV22CGlxHdmiSurfaceUpdater @ 27 NONAME diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/viewframework/tvout/inc/glxhdmicontroller.h --- a/photosgallery/viewframework/tvout/inc/glxhdmicontroller.h Fri Mar 12 15:42:44 2010 +0200 +++ b/photosgallery/viewframework/tvout/inc/glxhdmicontroller.h Mon Mar 15 12:40:30 2010 +0200 @@ -53,14 +53,14 @@ TInt aFrameCount = 1, TBool aStore = ETrue); /* - * To Determine it is a video and not image + * To intimate that the item is not supported. */ - IMPORT_C void IsVideo(); + IMPORT_C void ItemNotSupported(); /* * Activating zoom in posting mode */ - IMPORT_C void ActivateZoom(); + IMPORT_C void ActivateZoom(TBool aAutoZoomOut); /* * Deactivating zoom in posting mode */ @@ -76,6 +76,11 @@ */ IMPORT_C void ShiftToPostingMode(); + /* + * Tells if HDMi is Connected. + */ + IMPORT_C TBool IsHDMIConnected(); + private:// From MGlxTvObserver virtual void HandleTvStatusChangedL ( TTvChangeType aChangeType ); diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/viewframework/tvout/inc/glxhdmisurfaceupdater.h --- a/photosgallery/viewframework/tvout/inc/glxhdmisurfaceupdater.h Fri Mar 12 15:42:44 2010 +0200 +++ b/photosgallery/viewframework/tvout/inc/glxhdmisurfaceupdater.h Mon Mar 15 12:40:30 2010 +0200 @@ -63,7 +63,7 @@ /* * Activate Zoom */ - void ActivateZoom(); + void ActivateZoom(TBool aAutoZoomOut); /* * Deactivate Zoom */ @@ -175,6 +175,8 @@ CPeriodic* iTimer; TBool iZoom; TBool iBitmapReady; + TBool iAutoZoomOut; + TBool iSurfSessionConnected; #ifdef _DEBUG TTime iStartTime; TTime iStopTime; diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/viewframework/tvout/src/glxhdmicontroller.cpp --- a/photosgallery/viewframework/tvout/src/glxhdmicontroller.cpp Fri Mar 12 15:42:44 2010 +0200 +++ b/photosgallery/viewframework/tvout/src/glxhdmicontroller.cpp Mon Mar 15 12:40:30 2010 +0200 @@ -94,7 +94,7 @@ // ----------------------------------------------------------------------------- // IsVideo // ----------------------------------------------------------------------------- -EXPORT_C void CGlxHdmiController::IsVideo() +EXPORT_C void CGlxHdmiController::ItemNotSupported() { TRACER("CGlxHdmiController::IsVideo()"); iImageSupported = EFalse; @@ -108,12 +108,12 @@ // ----------------------------------------------------------------------------- // ActivateZoom // ----------------------------------------------------------------------------- -EXPORT_C void CGlxHdmiController::ActivateZoom() +EXPORT_C void CGlxHdmiController::ActivateZoom(TBool aAutoZoomOut) { TRACER("CGlxHdmiController::ActivateZoom()"); if (iGlxTvOut->IsHDMIConnected()) { - iSurfaceUpdater->ActivateZoom(); + iSurfaceUpdater->ActivateZoom(aAutoZoomOut); } } @@ -263,3 +263,12 @@ } } +// ----------------------------------------------------------------------------- +// HandleTvStatusChangedL +// ----------------------------------------------------------------------------- +EXPORT_C TBool CGlxHdmiController::IsHDMIConnected() + { + TRACER("CGlxHdmiController::IsHDMIConnected()"); + return iGlxTvOut->IsHDMIConnected(); + } + diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/viewframework/tvout/src/glxhdmisurfaceupdater.cpp --- a/photosgallery/viewframework/tvout/src/glxhdmisurfaceupdater.cpp Fri Mar 12 15:42:44 2010 +0200 +++ b/photosgallery/viewframework/tvout/src/glxhdmisurfaceupdater.cpp Mon Mar 15 12:40:30 2010 +0200 @@ -78,7 +78,10 @@ if (iSurfManager) { GLX_LOG_INFO("CGlxHdmiSurfaceUpdater::~CGlxHdmiSurfaceUpdater() - Close"); - iSurfUpdateSession.Close(); + if(iSurfSessionConnected) + { + iSurfUpdateSession.Close(); + } if (iSurfChunk) { iSurfChunk->Close(); @@ -104,21 +107,28 @@ { iGlxDecoderAO->Cancel(); } + if ( iDecodedBitmap ) { delete iDecodedBitmap; iDecodedBitmap= NULL; - } - if ( iSurfBufferAO->IsActive() ) + } + + if(iSurfBufferAO && iSurfBufferAO->IsActive()) { - iSurfBufferAO->Cancel(); + iSurfBufferAO->Cancel(); } + if ( iImageDecoder ) { delete iImageDecoder; iImageDecoder = NULL; } - iSurfUpdateSession.CancelAllUpdateNotifications(); + + if (iSurfSessionConnected && iSurfManager) + { + iSurfUpdateSession.CancelAllUpdateNotifications(); + } } // ----------------------------------------------------------------------------- @@ -140,10 +150,9 @@ { TRACER("CGlxHdmiSurfaceUpdater::ConstructL()"); TInt error = iFsSession.Connect (); - if ( KErrNone!= iFsSession.Connect () ) - { - User::LeaveIfError(error); - } + GLX_LOG_INFO1("CGlxHdmiSurfaceUpdater::ConstructL() FsSession Connect error = %d", error); + User::LeaveIfError(error); + iBitmapReady = EFalse; // Create the active object iGlxDecoderAO = CGlxHdmiDecoderAO::NewL(this, iFrameCount); @@ -151,17 +160,16 @@ CreateBitmapL(); CreateHdmiL(); error = iSurfUpdateSession.Connect(); + GLX_LOG_INFO1("CGlxHdmiSurfaceUpdater::ConstructL() Surface update Session Connect error = %d", error); + User::LeaveIfError(error); + iSurfSessionConnected = ETrue; + #ifdef _DEBUG iStartTime.HomeTime(); #endif //start decoding the image - iGlxDecoderAO->ConvertImageL(*iDecodedBitmap,0,iImageDecoder); - - if (KErrNone !=error) - { - GLX_LOG_INFO1("CGlxHdmiSurfaceUpdater::ConstructL() Surface update Session Connect Failed with error = %d", error); - User::LeaveIfError(error); - } + iGlxDecoderAO->ConvertImageL(*iDecodedBitmap,0,iImageDecoder); + iLeftCornerForZoom.iX = 0; iLeftCornerForZoom.iY = 0; iTimer = CPeriodic::NewL( CActive::EPriorityStandard ); @@ -175,8 +183,16 @@ TInt /*aFrameCount*/,TSize aImageDimensions) { TRACER("CGlxHdmiSurfaceUpdater::UpdateNewImageL()"); + //Cancel the zoom timers if any + if(iTimer->IsActive()) + { + GLX_LOG_INFO("CGlxHdmiSurfaceUpdater::UpdateNewImageL() - Cancel Timer"); + iTimer->Cancel(); + } iOrigImageDimensions = aImageDimensions; iBitmapReady = EFalse; + iLeftCornerForZoom.iX = 0; + iLeftCornerForZoom.iY = 0; ReleaseContent(); CreateImageDecoderL(aImageFile); CreateBitmapL(); @@ -219,11 +235,9 @@ TSize surfaceSize = iWindow->Size(); // create surface of the screen size, i.e 1280x720 iSurfManager = new(ELeave) RSurfaceManager(); TInt error = iSurfManager->Open(); - if (error != KErrNone) - { - GLX_LOG_INFO1("CGlxHdmiSurfaceUpdater::CreateSurfaceL Open Surface manager failed with error = %d", error); - User::LeaveIfError(error); - } + GLX_LOG_INFO1("CGlxHdmiSurfaceUpdater::CreateSurfaceL Open Surface manager error = %d", error); + User::LeaveIfError(error); + RSurfaceManager::TSurfaceCreationAttributesBuf attributes; attributes().iPixelFormat = EUidPixelFormatARGB_8888;// EUidPixelFormatYUV_420Planar; attributes().iSize = surfaceSize; @@ -235,11 +249,9 @@ attributes().iMappable = ETrue; error = iSurfManager->CreateSurface(attributes, iSurfId); - if(error) - { - GLX_LOG_INFO1("CGlxHdmiSurfaceUpdater::CreateSurfaceL, Creating surface failed with error : %d",error); - User::LeaveIfError(error); - } + GLX_LOG_INFO1("CGlxHdmiSurfaceUpdater::CreateSurfaceL, Creating surface error : %d",error); + User::LeaveIfError(error); + //Map the surface and stride the surface info MapSurfaceL(); // Set the Configuration to the surface ID when creating a surface @@ -257,17 +269,17 @@ iSurfChunk = new(ELeave) RChunk(); User::LeaveIfNull(iSurfChunk); TInt error = iSurfManager->MapSurface(iSurfId, *iSurfChunk); - if(error!=KErrNone) - { - GLX_LOG_INFO1("CGlxHdmiSurfaceUpdater::CreateSurfaceL(), MapSurface Failed wint error : %d",error); - } + GLX_LOG_INFO1("CGlxHdmiSurfaceUpdater::MapSurfaceL(), MapSurface error : %d",error); + User::LeaveIfError(error); // Get the info from the surfaceManager // and store pointers to the pixel data RSurfaceManager::TInfoBuf info; - error = iSurfManager->SurfaceInfo(iSurfId, info); - iSurfaceStride = info().iStride; + error = iSurfManager->SurfaceInfo(iSurfId, info); + GLX_LOG_INFO1("CGlxHdmiSurfaceUpdater::MapSurfaceL(), SurfaceInfo error : %d",error); User::LeaveIfError(error); + + iSurfaceStride = info().iStride; TInt offset = 0; iSurfManager->GetBufferOffset( iSurfId, 0,offset); iSurfBuffer = iSurfChunk->Base()+offset; @@ -386,8 +398,7 @@ ShiftToCloningMode(); } else - { - iBitmapReady = ETrue; + { iZoomRectSz = iDecodedBitmap->SizeInPixels(); if (iSurfBufferAO->iStatus != KRequestPending && !iSurfBufferAO->IsActive()) @@ -398,6 +409,7 @@ iSurfUpdateSession.NotifyWhenAvailable(iSurfBufferAO->iStatus); TInt err = iSurfUpdateSession.SubmitUpdate(1, iSurfId, 0, NULL); } + iBitmapReady = ETrue; } //release imagedecoder after the conversion is over if(iImageDecoder) @@ -416,21 +428,28 @@ // Create a decoder for the image in the named file TRAPD(error,iImageDecoder = CImageDecoder::FileNewL(iFsSession, aImageFile, CImageDecoder::EOptionNone, KNullUid)); - if (error!=KErrNone) - { - User::Leave(error); - } + GLX_LOG_INFO1("CreateImageDecoderL CImageDecoder:FileNewL error %d",error); + User::LeaveIfError(error); + } // ----------------------------------------------------------------------------- // ActivateZoom // ----------------------------------------------------------------------------- -void CGlxHdmiSurfaceUpdater::ActivateZoom() +void CGlxHdmiSurfaceUpdater::ActivateZoom(TBool aAutoZoomOut) { TRACER("CGlxHdmiSurfaceUpdater::ActivateZoom()"); iZoom = ETrue; + iAutoZoomOut = aAutoZoomOut; + if(iTimer->IsActive()) + { + GLX_LOG_INFO("CGlxHdmiSurfaceUpdater::ActivateZoom() - Cancel Timer"); + iTimer->Cancel(); + } + if(!iTimer->IsActive() && iBitmapReady) { + GLX_LOG_INFO("CGlxHdmiSurfaceUpdater::ActivateZoom() - Start Timer"); iTimer->Start(KZoomDelay,KZoomDelay,TCallBack( TimeOut,this )); } } @@ -441,13 +460,18 @@ void CGlxHdmiSurfaceUpdater::DeactivateZoom() { TRACER("CGlxHdmiSurfaceUpdater::DeactivateZoom()"); - if(iDecodedBitmap) + + if(iTimer->IsActive()) { - TSize bitmapsize = iDecodedBitmap->SizeInPixels(); - iConfig.SetViewport(TRect(0,0,bitmapsize.iWidth,bitmapsize.iHeight)); - iConfig.SetExtent(TRect(0,0,bitmapsize.iWidth,bitmapsize.iHeight)); - iWindow->SetBackgroundSurface(iConfig, ETrue); + GLX_LOG_INFO("CGlxHdmiSurfaceUpdater::DeactivateZoom() - Cancel Timer"); + iTimer->Cancel(); } + if(!iTimer->IsActive() && iBitmapReady && iLeftCornerForZoom.iX) + { + GLX_LOG_INFO("CGlxHdmiSurfaceUpdater::DeactivateZoom() - Start Timer"); + iZoom = EFalse; + iTimer->Start(KZoomDelay,KZoomDelay,TCallBack( TimeOut,this )); + } } // --------------------------------------------------------------------------- @@ -474,9 +498,21 @@ void CGlxHdmiSurfaceUpdater::Zoom(TBool aZoom) { TRACER("CGlxHdmiSurfaceUpdater::Zoom()"); + + if(!iBitmapReady) + { + return; + } + if(iLeftCornerForZoom.iX == KMaxZoomLimit) { iZoom = EFalse; + //If autozoomout is not set then cancel the timer and do + //the zoom out on DeactivateZoom. + if(!iAutoZoomOut) + { + iTimer->Cancel(); + } } if(aZoom && iZoom) { diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/viewframework/uiutilities/bwins/glxuiutilitiesu.def --- a/photosgallery/viewframework/uiutilities/bwins/glxuiutilitiesu.def Fri Mar 12 15:42:44 2010 +0200 +++ b/photosgallery/viewframework/uiutilities/bwins/glxuiutilitiesu.def Mon Mar 15 12:40:30 2010 +0200 @@ -56,4 +56,8 @@ ?SetFocusL@CGlxScreenFurniture@@QAEXH@Z @ 55 NONAME ; void CGlxScreenFurniture::SetFocusL(int) ?GetGridIconSize@CGlxUiUtility@@QAE?AVTSize@@XZ @ 56 NONAME ; class TSize CGlxUiUtility::GetGridIconSize(void) ?InstanceL@MGlxActiveMediaListResolver@@SAPAV1@PAVMGlxActiveMediaListChangeObserver@@@Z @ 57 NONAME ; class MGlxActiveMediaListResolver * MGlxActiveMediaListResolver::InstanceL(class MGlxActiveMediaListChangeObserver *) + ?GetItemsLeftCountL@CGlxUiUtility@@QAEHXZ @ 58 NONAME ; int CGlxUiUtility::GetItemsLeftCountL(void) + ?StartTNMDaemonL@CGlxUiUtility@@QAEXXZ @ 59 NONAME ; void CGlxUiUtility::StartTNMDaemonL(void) + ?NewL@CGlxProgressIndicator@@SAPAV1@AAVMDialogDismisedObserver@@@Z @ 60 NONAME ; class CGlxProgressIndicator * CGlxProgressIndicator::NewL(class MDialogDismisedObserver &) + ?StopTNMDaemonL@CGlxUiUtility@@QAEXXZ @ 61 NONAME ; void CGlxUiUtility::StopTNMDaemonL(void) diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/viewframework/uiutilities/data/glxuiutilities.rss --- a/photosgallery/viewframework/uiutilities/data/glxuiutilities.rss Fri Mar 12 15:42:44 2010 +0200 +++ b/photosgallery/viewframework/uiutilities/data/glxuiutilities.rss Mon Mar 15 12:40:30 2010 +0200 @@ -32,10 +32,6 @@ #include "glxutilities.hrh" #include -#if defined(FF_IMAGE_EDITOR) || defined(FF_VIDEO_EDITOR) -#include //for Editor feature flags -#endif - NAME GLXR // 4 letter ID // RESOURCE DEFINITIONS @@ -455,8 +451,8 @@ // AIW interest structure for assign // // ----------------------------------------------------------------------------- -#if defined(FF_IMAGE_EDITOR) || defined(FF_VIDEO_EDITOR) -RESOURCE AIW_INTEREST r_glx_aiw_assign_to_contact_interest + +RESOURCE AIW_INTEREST r_glx_aiw_assign_to_contact_interest_mediaeditor { items= { @@ -469,7 +465,7 @@ } }; } -#else + RESOURCE AIW_INTEREST r_glx_aiw_assign_to_contact_interest { items= @@ -484,7 +480,7 @@ } }; } -#endif + // ----------------------------------------------------------------------------- // @@ -836,3 +832,27 @@ //buf = qtn_lgal_note_remove_from_favourites; buf = "#Removed from Favourites"; } + +//resource for waiting dialog +RESOURCE TBUF r_glx_main_list_view_processing_dialog + { + buf = qtn_lgal_note_wait_processing; + } +RESOURCE DIALOG r_progress_note + { + flags = EAknProgressNoteFlags; + buttons = R_AVKON_SOFTKEYS_CANCEL; + items = + { + DLG_LINE + { + type = EAknCtNote; + id = EAknCtNote; + control = AVKON_NOTE + { + layout = EProgressLayout; + singular_label =qtn_lgal_note_wait_processing; + }; + } + }; + } diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/viewframework/uiutilities/eabi/glxuiutilitiesu.def --- a/photosgallery/viewframework/uiutilities/eabi/glxuiutilitiesu.def Fri Mar 12 15:42:44 2010 +0200 +++ b/photosgallery/viewframework/uiutilities/eabi/glxuiutilitiesu.def Mon Mar 15 12:40:30 2010 +0200 @@ -73,4 +73,10 @@ _ZTV32CGlxWaitDialogAttributeRetriever @ 72 NONAME _ZTV33CGlxSynchronousAttributeRetriever @ 73 NONAME _ZThn4_N13CGlxUiUtility22HandleTvStatusChangedLE13TTvChangeType @ 74 NONAME + _ZN13CGlxUiUtility15StartTNMDaemonLEv @ 75 NONAME + _ZN13CGlxUiUtility18GetItemsLeftCountLEv @ 76 NONAME + _ZN21CGlxProgressIndicator4NewLER23MDialogDismisedObserver @ 77 NONAME + _ZTI21CGlxProgressIndicator @ 78 NONAME + _ZTV21CGlxProgressIndicator @ 79 NONAME + _ZN13CGlxUiUtility14StopTNMDaemonLEv @ 80 NONAME diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/viewframework/uiutilities/group/glxuiutilities.mmp --- a/photosgallery/viewframework/uiutilities/group/glxuiutilities.mmp Fri Mar 12 15:42:44 2010 +0200 +++ b/photosgallery/viewframework/uiutilities/group/glxuiutilities.mmp Mon Mar 15 12:40:30 2010 +0200 @@ -48,7 +48,7 @@ SOURCE glxtextentrypopup.cpp SOURCE mglxactivemedialistresolver.cpp SOURCE glxskinchangemonitor.cpp - +SOURCE glxprogressindicator.cpp // System includes from epoc32/include APP_LAYER_SYSTEMINCLUDE diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/viewframework/uiutilities/inc/glxprogressindicator.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/photosgallery/viewframework/uiutilities/inc/glxprogressindicator.h Mon Mar 15 12:40:30 2010 +0200 @@ -0,0 +1,85 @@ +/* +* Copyright (c) 2008-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: Progressdialog +* +*/ + +#ifndef GLXPROGRESSINDICATOR_H_ +#define GLXPROGRESSINDICATOR_H_ + +#include +#include + +class CAknProgressDialog; +class CEikProgressInfo; + +class MDialogDismisedObserver + { +public: + virtual void HandleDialogDismissedL()=0; + }; + +class CGlxProgressIndicator : public CBase, + public MProgressDialogCallback + { +public: + IMPORT_C static CGlxProgressIndicator* NewL(MDialogDismisedObserver& aGlxGridViewNotifyObserver); + ~CGlxProgressIndicator(); + static CGlxProgressIndicator* NewLC(MDialogDismisedObserver& aGlxGridViewNotifyObserver); + +private: + CGlxProgressIndicator(MDialogDismisedObserver& aGlxGridViewNotifyObserver); + void ConstructL(); + + /** + * show the progress bar + * @param aFinalValue Sets the final value of the bar + * @param aShow hide/display the progress bar + */ + void StartProgressNoteL(TInt aFinalValue ,TBool aShow); + /** + * displays the increment of progress bar + */ + void UpdateProgressBar(); + + /** + * calculates how much increment to be done in progress bar + * @return increment value + */ + TInt CalculateDisplayBarIncrementL(); +public: + // Callback for periodic timer, static, + static TInt PeriodicCallbackL( TAny* aPtr ); + + //nonstatic func called from periodic timer + void DisplayProgressBarL(); +protected://MProgressDialogCallback + void DialogDismissedL (TInt aButtonId); + +private: + //Progress bar updation ticker + CPeriodic* iProgressbarTicker; + + //Progress bar + CAknProgressDialog* iProgressDialog; + + //Progress info + CEikProgressInfo* iProgressInfo; + + //final count to set in progress bar + TInt iFinalCount; + MDialogDismisedObserver& iGlxGridViewNotifyObserver; + + }; +#endif /* GLXPROGRESSINDICATOR_H_ */ diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/viewframework/uiutilities/inc/glxuiutility.h --- a/photosgallery/viewframework/uiutilities/inc/glxuiutility.h Fri Mar 12 15:42:44 2010 +0200 +++ b/photosgallery/viewframework/uiutilities/inc/glxuiutility.h Mon Mar 15 12:40:30 2010 +0200 @@ -203,7 +203,25 @@ IMPORT_C TBool IsExitingState(); IMPORT_C void SetExitingState(TBool aIsExiting); - + /** + * Forcibly start the Thumbnail Manager daemon process + * @param none + * @return none + */ + IMPORT_C void StartTNMDaemonL(); + + /** + * To stop the Thumbnail Manager daemon process so as to stop force generation of thumbnails + * @param none + * @return none + */ + IMPORT_C void StopTNMDaemonL(); + + /** + * Get the number of items left for Thumbnail generation + * @return TInt number of items left for TN generation + */ + IMPORT_C TInt GetItemsLeftCountL(); /** * Returns Visible items granularity based on feature * layout (i.e., qHD, VGA) diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/viewframework/uiutilities/src/glxprogressindicator.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/photosgallery/viewframework/uiutilities/src/glxprogressindicator.cpp Mon Mar 15 12:40:30 2010 +0200 @@ -0,0 +1,282 @@ +/* +* Copyright (c) 2008-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: Progressdialog +* +*/ +#include "glxprogressindicator.h" +#include +#include +#include +#include +#include +#include +#include +#include "glxuiutility.h" +const TInt KPeriodicStartDelay = 500000; + + +// --------------------------------------------------------- +// CGlxProgressIndicator::NewL +// --------------------------------------------------------- +// +EXPORT_C CGlxProgressIndicator* CGlxProgressIndicator::NewL + (MDialogDismisedObserver& aGlxGridViewNotifyObserver) + { + CGlxProgressIndicator* self = CGlxProgressIndicator::NewLC + (aGlxGridViewNotifyObserver); + CleanupStack::Pop(self); + return self; + } + +// --------------------------------------------------------- +// CGlxProgressIndicator::NewLC +// --------------------------------------------------------- +// +CGlxProgressIndicator* CGlxProgressIndicator::NewLC + (MDialogDismisedObserver& aGlxGridViewNotifyObserver) + { + + CGlxProgressIndicator* self = new(ELeave) + CGlxProgressIndicator(aGlxGridViewNotifyObserver); + CleanupStack::PushL(self); + self->ConstructL(); + return self; + } + +// --------------------------------------------------------- +// CGlxProgressIndicator::CGlxProgressIndicator +// --------------------------------------------------------- +// +CGlxProgressIndicator::CGlxProgressIndicator + (MDialogDismisedObserver& aGlxGridViewNotifyObserver) + :iGlxGridViewNotifyObserver(aGlxGridViewNotifyObserver) + { + } + +// --------------------------------------------------------- +// CGlxProgressIndicator::~CGlxProgressIndicator +// --------------------------------------------------------- +// +CGlxProgressIndicator::~CGlxProgressIndicator() + { + if (iProgressbarTicker && iProgressbarTicker->IsActive()) + { + iProgressbarTicker->Cancel(); + delete iProgressbarTicker; + } + if(iProgressDialog) + { + iProgressDialog->ProcessFinishedL(); + } + + // Stop force generation of thumbnails when progress dialog is dismissed + CGlxUiUtility* uiUtility = CGlxUiUtility::UtilityL(); + CleanupClosePushL(*uiUtility); + if ( uiUtility ) + { + uiUtility->StopTNMDaemonL(); + } + CleanupStack::PopAndDestroy(uiUtility); + } + +// --------------------------------------------------------- +// CGlxProgressIndicator::ConstructL +// --------------------------------------------------------- +// +void CGlxProgressIndicator::ConstructL() + { + CGlxUiUtility* uiUtility = CGlxUiUtility::UtilityL(); + CleanupClosePushL(*uiUtility); + TRAPD(err,uiUtility->StartTNMDaemonL()); + + if(err != KErrNone) + { + GLX_LOG_INFO1("CGlxProgressIndicator RProperty::Set errorcode %d",err); + //need to check what to do in fail cases + } + if(!iProgressbarTicker) + { + iProgressbarTicker = CPeriodic::NewL(CActive::EPriorityStandard); + } + + iFinalCount = uiUtility->GetItemsLeftCountL(); + GLX_LOG_INFO1("final count in viewactivate = %d",iFinalCount); + + + if(iFinalCount) + { + StartProgressNoteL(iFinalCount,ETrue); + if ( !iProgressbarTicker->IsActive()) + { + iProgressbarTicker->Start( KPeriodicStartDelay, KPeriodicStartDelay, TCallBack( + &PeriodicCallbackL, static_cast( this ) ) ); + } + } + else + { + GLX_LOG_INFO("Reset the RProperty flag to EFalse"); + uiUtility->StopTNMDaemonL(); + } + CleanupStack::PopAndDestroy(uiUtility); + } + + +// ----------------------------------------------------------------------------- +// Callback from periodic timer +// ----------------------------------------------------------------------------- +// +TInt CGlxProgressIndicator::PeriodicCallbackL(TAny* aPtr ) + { + TRACER("CGlxProgressIndicator::PeriodicCallbackL"); + static_cast< CGlxProgressIndicator* >( aPtr )->DisplayProgressBarL(); + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// Callback from periodic timer-- non static +// ----------------------------------------------------------------------------- +// +inline void CGlxProgressIndicator::DisplayProgressBarL() + { + TRACER("CGlxProgressIndicator::DisplayProgressBarL"); + CGlxUiUtility* uiUtility = CGlxUiUtility::UtilityL(); + CleanupClosePushL(*uiUtility); + TInt itemsLeft = uiUtility->GetItemsLeftCountL(); + CleanupStack::PopAndDestroy(uiUtility); + GLX_LOG_INFO1("itemsLeft in DisplayProgressBarL = %d",iFinalCount); + if(itemsLeft) + { + UpdateProgressBar(); + } + else + { + if(iProgressbarTicker->IsActive()) + { + iProgressbarTicker->Cancel(); + } + StartProgressNoteL(iFinalCount,EFalse); + } + } + +// ----------------------------------------------------------------------------- +// StartProgressNoteL +// ----------------------------------------------------------------------------- +// +void CGlxProgressIndicator::StartProgressNoteL(TInt aFinalValue,TBool aShow) + { + TRACER("CGlxProgressIndicator::StartProgressNoteL()"); + + if(aShow) + { + if(!iProgressDialog) + { + iProgressDialog = new (ELeave)CAknProgressDialog((reinterpret_cast (&iProgressDialog)),ETrue); + } + iProgressDialog->PrepareLC(R_PROGRESS_NOTE); + + iProgressInfo = iProgressDialog->GetProgressInfoL(); + + iProgressDialog->SetCallback(this); + + HBufC* processingInfo = + StringLoader::LoadLC(R_GLX_MAIN_LIST_VIEW_PROCESSING_DIALOG); + iProgressDialog->SetTextL(*processingInfo); + CleanupStack::PopAndDestroy(processingInfo ); + iProgressInfo->SetFinalValue(aFinalValue); + + iProgressDialog->RunLD(); + } + else + { + iProgressDialog->ProcessFinishedL(); + if(iProgressDialog) + { + iProgressDialog = NULL; + iProgressInfo = NULL; + } + } + + } + +// ----------------------------------------------------------------------------- +// UpdateProgressBar +// ----------------------------------------------------------------------------- +// +void CGlxProgressIndicator::UpdateProgressBar() + { + TRACER("CGlxProgressIndicator::UpdateProgressBar()"); + if(iProgressInfo) + { + /* + * to show a number string in the progress bar use the below code + * in rss it should have %d or %N format + * TBuf<256> text; + * GlxGeneralUiUtilities::FormatString(text,*processingInfo,-1,count,ETrue); + * CleanupStack::PopAndDestroy(processingInfo); + */ + iProgressInfo->SetAndDraw(CalculateDisplayBarIncrementL()); + } + } + +// ----------------------------------------------------------------------------- +// DialogDismissedL +// ----------------------------------------------------------------------------- +// +void CGlxProgressIndicator::DialogDismissedL(TInt aButtonId) + { + TRACER("CGlxProgressIndicator::DialogDismissedL()"); + CGlxUiUtility* uiUtility = CGlxUiUtility::UtilityL(); + CleanupClosePushL(*uiUtility); + uiUtility->StopTNMDaemonL(); + CleanupStack::PopAndDestroy(uiUtility); + if(iProgressbarTicker) + { + iProgressbarTicker->Cancel(); + delete iProgressbarTicker; + iProgressbarTicker = NULL; + } + + if (aButtonId == EAknSoftkeyCancel) + { + // cancel any process in here + iGlxGridViewNotifyObserver.HandleDialogDismissedL(); + } + if(iProgressDialog) + { + iProgressDialog = NULL; + iProgressInfo = NULL; + } + } + +// ----------------------------------------------------------------------------- +// CalculateDisplayBarIncrementL +// ----------------------------------------------------------------------------- +// +TInt CGlxProgressIndicator::CalculateDisplayBarIncrementL() + { + TRACER("CGlxProgressIndicator::CalculateDisplayBarIncrement()"); + CGlxUiUtility* uiUtility = CGlxUiUtility::UtilityL(); + CleanupClosePushL(*uiUtility); + TInt itemsLeft = uiUtility->GetItemsLeftCountL(); + CleanupStack::PopAndDestroy(uiUtility); + GLX_LOG_INFO1("CalculateDisplayBarIncrement = %d ",(iFinalCount - itemsLeft)); + + if(iFinalCount < itemsLeft) + { + iProgressInfo->SetFinalValue( itemsLeft ); + iFinalCount = itemsLeft; + } + + return (iFinalCount - itemsLeft); + } diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/viewframework/uiutilities/src/glxuiutility.cpp --- a/photosgallery/viewframework/uiutilities/src/glxuiutility.cpp Fri Mar 12 15:42:44 2010 +0200 +++ b/photosgallery/viewframework/uiutilities/src/glxuiutility.cpp Mon Mar 15 12:40:30 2010 +0200 @@ -52,6 +52,15 @@ #include #include #include + +#include + +//Publish-Subscribe from Thumbnail manager +const TUid KTAGDPSNotification = { 0x2001FD51 }; //PS category +const TInt KForceBackgroundGeneration = 0x00000010; //PS Key +const TInt KItemsleft = 0x00000008; //PS key value + + //Hg //#include @@ -715,5 +724,54 @@ return ret; } +// ----------------------------------------------------------------------------- +// StartTNMDaemonL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CGlxUiUtility::StartTNMDaemonL() + { + TRACER("CGlxUiUtility::StartTNMDaemonL"); + TInt err = RProperty::Set(KTAGDPSNotification, KForceBackgroundGeneration, ETrue); + if(err != KErrNone) + { + GLX_LOG_INFO1("GetItemsLeftCountL: RProperty::Set errorcode %d",err); + //need to check what to do in fail cases + User::Leave(err); + } + } + +// ----------------------------------------------------------------------------- +// StopTNMDaemonL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CGlxUiUtility::StopTNMDaemonL() + { + TRACER("CGlxUiUtility:: StopTNMDaemonL "); + TInt err = RProperty::Set(KTAGDPSNotification, KForceBackgroundGeneration, EFalse); + GLX_LOG_INFO1("CGlxUiUtility::StopTNMDaemonL err = %d",err); + if(err != KErrNone) + { + GLX_LOG_INFO1("StopTNMDaemonL: RProperty::Set errorcode %d",err); + //need to check what to do in fail cases + User::Leave(err); + } + } +// ----------------------------------------------------------------------------- +// GetItemsLeftCountL +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CGlxUiUtility::GetItemsLeftCountL() + { + TRACER("CGlxUiUtility::GetItemsLeftCountL"); + TInt leftVariable = 0; + TInt err = RProperty::Get(KTAGDPSNotification, KItemsleft, leftVariable); + GLX_LOG_INFO1("GetItemsLeftCountL: GetItemsLeftCountL %d",leftVariable); + if(err != KErrNone) + { + GLX_LOG_INFO1("GetItemsLeftCountL: RProperty::Get errorcode %d",err); + User::Leave(err); + } + return leftVariable; + } // End of file diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/viewframework/views/cloudview/group/glxcloudview.mmp --- a/photosgallery/viewframework/views/cloudview/group/glxcloudview.mmp Fri Mar 12 15:42:44 2010 +0200 +++ b/photosgallery/viewframework/views/cloudview/group/glxcloudview.mmp Mon Mar 15 12:40:30 2010 +0200 @@ -80,8 +80,8 @@ LIBRARY aknlayout2scalable.lib LIBRARY aknphysics.lib LIBRARY fbscli.lib -LIBRARY gdi.lib -LIBRARY charconv.lib // For UtfConverter +LIBRARY gdi.lib +LIBRARY charconv.lib // For UtfConverter LIBRARY commonengine.lib - +LIBRARY harvesterclient.lib // End of File \ No newline at end of file diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/viewframework/views/cloudview/inc/glxcloudviewcontrol.h --- a/photosgallery/viewframework/views/cloudview/inc/glxcloudviewcontrol.h Fri Mar 12 15:42:44 2010 +0200 +++ b/photosgallery/viewframework/views/cloudview/inc/glxcloudviewcontrol.h Mon Mar 15 12:40:30 2010 +0200 @@ -566,9 +566,6 @@ //keeps track of the end row TInt iLayoutIndex; - // initiates bubble container - CGlxContainerInfoBubble *iBubbleContainer; - // Fetch context for list item attributes CGlxDefaultAttributeContext* iAttributeContext; @@ -653,6 +650,9 @@ /**flag for Timer completion */ TBool iTimerComplete; + + /**flag to identify the next down event */ + TBool iDownEventReceived; }; #endif // C_GLXCLOUDVIEWCONTROL_H diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/viewframework/views/cloudview/inc/glxcloudviewimp.h --- a/photosgallery/viewframework/views/cloudview/inc/glxcloudviewimp.h Fri Mar 12 15:42:44 2010 +0200 +++ b/photosgallery/viewframework/views/cloudview/inc/glxcloudviewimp.h Mon Mar 15 12:40:30 2010 +0200 @@ -24,7 +24,7 @@ // INCLUDES #include #include - +#include #include "mglxcloudviewmskobserver.h" #include "mglxenterkeyeventobserver.h" @@ -53,7 +53,8 @@ public MGlxCloudViewMskObserver, public MGlxEnterKeyEventObserver, public MGlxCloudViewLayoutObserver, - public MGlxItemMenuObserver + public MGlxItemMenuObserver, + public MHarvesterEventObserver { public: @@ -127,6 +128,17 @@ * @param aMenuPane The menu pane to edit */ void ViewDynInitMenuPaneL(TInt aResourceId, CEikMenuPane *aMenuPane); +public: + /** + * HarvestingUpdated + * @param aHEObserverType + * @param aHarvesterEventState + * @param aItemsLeft + */ + void HarvestingUpdated( + HarvesterEventObserverType aHEObserverType, + HarvesterEventState aHarvesterEventState, + TInt aItemsLeft ); protected: // From CGlxViewBase @@ -241,10 +253,8 @@ //anchor layout from the view widget CAlfAnchorLayout* iAnchorlayout; - - // save title text - HBufC* iTitletext; - + + RHarvesterClient iHarvesterClient; }; } #endif // C_GLXTESTTILEVIEWIMP_H diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/viewframework/views/cloudview/inc/glxtagscontextmenucontrol.h --- a/photosgallery/viewframework/views/cloudview/inc/glxtagscontextmenucontrol.h Fri Mar 12 15:42:44 2010 +0200 +++ b/photosgallery/viewframework/views/cloudview/inc/glxtagscontextmenucontrol.h Mon Mar 15 12:40:30 2010 +0200 @@ -78,6 +78,11 @@ * @param aOpacity - Opacity value */ void ShowItemMenu(TBool aOpacity); + /** + * Hides/shows the grid layout + * @return value of menu's visibility + */ + TBool ItemMenuVisibility(); /** * Sets the drawable screen rect @@ -122,9 +127,6 @@ //Ui Utility, not owning, only close CGlxUiUtility* iUiUtility; - // Background Image Visual - CAlfImageVisual* iBackgroundBorderImageVisual; - //Observer to handle the menu items in grid layout MGlxItemMenuObserver& iItemMenuObserver; diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/viewframework/views/cloudview/src/glxcloudviewcontrol.cpp --- a/photosgallery/viewframework/views/cloudview/src/glxcloudviewcontrol.cpp Fri Mar 12 15:42:44 2010 +0200 +++ b/photosgallery/viewframework/views/cloudview/src/glxcloudviewcontrol.cpp Mon Mar 15 12:40:30 2010 +0200 @@ -222,6 +222,12 @@ void CGlxCloudViewControl::VisualLayoutUpdated(CAlfVisual &/* aVisual*/) { TRACER("GLX_CLOUD::CGlxCloudViewControl::VisualLayoutUpdated"); + + //If the grid is already shown , disable it + if(iTagsContextMenuControl->ItemMenuVisibility()) + { + iTagsContextMenuControl->ShowItemMenu(EFalse); + } TRect rect; AknLayoutUtils::LayoutMetricsRect (AknLayoutUtils::EMainPane, rect); if ((rect.Width() != (iTagScreenWidth + iScrollPaneHandle.iW + KRightmargin)) || (rect.Height() != iScreenHeight)) @@ -244,11 +250,6 @@ iMediaList.RemoveContext (iAttributeContext); iMediaList.RemoveMediaListObserver (this); delete iAttributeContext; - /*if ( iBubbleContainer ) - { - iBubbleContainer->SetHost (NULL); - delete iBubbleContainer; - }*/ if ( iUiUtility ) { @@ -687,7 +688,6 @@ { //to highlight focused element SetFocusColor(); - //CalculateBubleMidPoint (); } } @@ -751,8 +751,6 @@ { TRACER("GLX_CLOUD::CGlxCloudViewControl::FetchAttributeFromCacheL"); GLX_LOG_INFO("GLX_CLOUD ::CGlxCloudViewControl::FetchAttributeFromCache MediaList already filled" ); - //enable msk as the medialist is populated - //iObserver.HandleMskChangedL (ETrue); iLayoutObserver.HandleLayoutChanged(); if ( iLabels.Count ()==0) { @@ -1197,7 +1195,6 @@ //disable msk iLayoutObserver.HandleLayoutChanged(); - //iObserver.HandleMskChangedL (EFalse); iScrollEventData.mSpan = 0; iScrollEventData.mViewLength = 0; DisplayScrollBar(); @@ -1289,20 +1286,6 @@ // void CGlxCloudViewControl::CreateBubleContainer() { - /* if ( !iBubbleContainer) - { - TRAPD(err1, - { - iBubbleContainer = CGlxContainerInfoBubble::NewL (&iMediaList, - CGlxCloudViewControl::Env (), *this); - }); - ; - if ( err1!= KErrNone) - { - GLX_LOG_INFO1("GLX_CLOUD::CGlxCloudViewControl::LayoutVisibleArea - Error (%d)", err1); - } - iBubbleContainer->SetHost (this); - }*/ } // --------------------------------------------------------------------------- @@ -1338,7 +1321,6 @@ iViewPortLayout->SetViewportPos(iViewPortPosition, KSlowCloudMovement); iScrollEventData.mViewStartPos = iViewPortPosition.iY; Scroll(); - //CalculateBubleMidPoint (); } @@ -1376,7 +1358,6 @@ { Scroll(); } - //CalculateBubleMidPoint(); } // --------------------------------------------------------------------------- @@ -1419,9 +1400,6 @@ //Substract from the viewport position the viewport position SetBubleMidPoint(midpoint); - - //Set the buble focus - // iBubbleContainer->SetFocus (midpoint); } // --------------------------------------------------------------------------- @@ -1434,8 +1412,10 @@ CAlfVisual* tappedvisual = aEvent.Visual(); TBool consumed = EFalse; + if(aEvent.PointerEvent().iType == TPointerEvent::EButton1Down) { + iDownEventReceived = EFalse; //reset variables & Physics simulator iPhysics->StopPhysics(); iPhysics->ResetFriction(); @@ -1449,8 +1429,12 @@ Display()->Roster().DisableLongTapEventsWhenDragging(*this); //If the grid is already shown , disable it - iTagsContextMenuControl->ShowItemMenu(EFalse); - + if(iTagsContextMenuControl->ItemMenuVisibility()) + { + iDownEventReceived = ETrue; + iTagsContextMenuControl->ShowItemMenu(EFalse); + return ETrue; + } if(tappedvisual) { for(TInt index=0;indexCount();index++) @@ -1473,6 +1457,10 @@ } } } + else if(iDownEventReceived) + { + consumed = ETrue; + } else if (aEvent.PointerEvent().iType == TPointerEvent::EDrag) { GLX_LOG_INFO("GLX_CLOUD :: CGlxCloudViewControl::HandlePointerEventL(EDrag) event"); @@ -1495,12 +1483,12 @@ //Check if dragging actually happened using iViewDragged if (iDragging && iViewDragged) { + iTimer->Cancel ();//cancels any outstanding requests + iDragging = EFalse; TPoint drag = iStart - aEvent.PointerEvent().iPosition; iPhysics->StartPhysics(drag, iStartTime); iPhysicsStarted = ETrue; - - iTimer->Cancel ();//cancels any outstanding requests } //If dragging not happened consider it as Tapped event //When it recognises the long press event , and if up event is received..Ignore it @@ -1608,6 +1596,7 @@ //emulation if (iPhysicsStarted && iDragging) { + iTimer->Cancel(); TPoint drag = iStart - aPointerEvent.iPosition; iPhysics->StartPhysics(drag, iStartTime); iDragging = EFalse; @@ -1725,7 +1714,6 @@ { case KAlfActionIdDeviceLayoutChanged: { - // iObserver.HandleMskChangedL(ETrue); iLayoutObserver.HandleLayoutChanged(); TRAP_IGNORE(UpdateLayoutL()); } diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/viewframework/views/cloudview/src/glxcloudviewimp.cpp --- a/photosgallery/viewframework/views/cloudview/src/glxcloudviewimp.cpp Fri Mar 12 15:42:44 2010 +0200 +++ b/photosgallery/viewframework/views/cloudview/src/glxcloudviewimp.cpp Mon Mar 15 12:40:30 2010 +0200 @@ -103,6 +103,12 @@ { TRACER("GLX_CLOUD::CGlxCloudViewImp::ConstructL"); + TInt err = iHarvesterClient.Connect(); + GLX_LOG_INFO1("iHarvesterClient.Connect() err = %d",err); + if(err == KErrNone) + { + iHarvesterClient.AddHarvesterEventObserver(*this, EHEObserverTypeMMC, 1000); + } TFileName resourceFile(KDC_APP_RESOURCE_DIR); resourceFile.Append (aFileName); CGlxResourceUtilities::GetResourceFilenameL (resourceFile); @@ -132,13 +138,13 @@ CGlxCloudViewImp::~CGlxCloudViewImp() { TRACER("GLX_CLOUD::CGlxCloudViewImp::~CGlxCloudViewImp"); + iHarvesterClient.Close(); CleanupVisuals (); delete iEmptyListText; if ( iResourceOffset ) { CCoeEnv::Static()->DeleteResourceFile (iResourceOffset); - } - delete iTitletext; + } } // --------------------------------------------------------------------------- @@ -192,7 +198,11 @@ void CGlxCloudViewImp::DoMLViewActivateL(const TVwsViewId & /* aPrevViewId */, TUid /* aCustomMessageId */, const TDesC8 & /* aCustomMessage */) { - TRACER("GLX_CLOUD::CGlxCloudViewImp::DoMLViewActivateL"); + TRACER("GLX_CLOUD::CGlxCloudViewImp::DoMLViewActivateL"); + if(StatusPane()) + { + StatusPane()->MakeVisible(ETrue); + } ConstructCloudControlL(); GLX_LOG_INFO("CGlxCloudViewImp::DoMLViewActivateL Cloud View Control Created" ); // set app state to tag-browser view @@ -207,18 +217,6 @@ void CGlxCloudViewImp::DoMLViewDeactivate() { TRACER("GLX_CLOUD::CGlxCloudViewImp::DoMLViewDeactivate"); - if(StatusPane()) - { - if(iTitletext) - { - delete iTitletext; - iTitletext = NULL; - } - CEikStatusPane* statusPane = iEikonEnv->AppUiFactory()->StatusPane(); - TRAP_IGNORE(CAknTitlePane* titlePane = ( CAknTitlePane* )statusPane->ControlL( - TUid::Uid( EEikStatusPaneUidTitle )); - iTitletext = titlePane->Text()->AllocL()); - } //Hide softkeys and toolbar upon view de-activation. iViewWidget->enableControlPane(EFalse); if ( EGlxNavigationForwards == iUiUtility->ViewNavigationDirection() ) @@ -432,3 +430,19 @@ iCloudControl->ShowContextItemMenu(EFalse); } } +// --------------------------------------------------------------------------- +// HarvestingUpdated +// +// --------------------------------------------------------------------------- +// +void CGlxCloudViewImp::HarvestingUpdated( + HarvesterEventObserverType HarvestingUpdated, + HarvesterEventState /*aHarvesterEventState*/, + TInt /*aItemsLeft*/ ) + { + TRACER("CGlxCloudViewImp::HarvestingUpdated()"); + if(HarvestingUpdated == EHEObserverTypeMMC) + { + ProcessCommandL(EAknSoftkeyClose); + } + } diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/viewframework/views/cloudview/src/glxtagscontextmenucontrol.cpp --- a/photosgallery/viewframework/views/cloudview/src/glxtagscontextmenucontrol.cpp Fri Mar 12 15:42:44 2010 +0200 +++ b/photosgallery/viewframework/views/cloudview/src/glxtagscontextmenucontrol.cpp Mon Mar 15 12:40:30 2010 +0200 @@ -29,14 +29,10 @@ #include #include #include -#include -#include #include +#include -#include -#include #include -#include "utf.h" // UtfConverter // Photos Headers #include "glxtagscontextmenucontrol.h" @@ -72,6 +68,10 @@ const TInt KGridHeight = KReqHeightPerMenuItem * KNumofMenuItems; //Text size for menu items const TInt KTextSizeInPixels = 20; +//X shrink factor for stylus menu border to be drawn/visible +const TInt KShrinkXCoord = 5; +//Y shrink factor for stylus menu border to be drawn/visible +const TInt KShrinkYCoord = 5; //For Tagging the visuals _LIT8(KTagSlideshow, "SS"); @@ -130,20 +130,19 @@ iMainVisual->SetSize(TSize(KReqWidth, KGridHeight)); iMainVisual->SetPos(TAlfRealPoint(KDummyPoint)); - CFbsBitmap* bitmap = AknsUtils::GetCachedBitmap( - AknsUtils::SkinInstance(), KAknsIIDQsnFrPopupCenter); - CleanupStack::PushL(bitmap); + iMainVisual->EnableBrushesL(ETrue); - CAlfTexture& backgroundAvkonTexture = - iUiUtility->GlxTextureManager().CreateColorAvkonIconTextureL( - KAknsIIDQsnFrPopupCenter, bitmap->Handle(), KRgbTransparent) ; + TRect outerRect(TRect(TPoint(KDummyPoint),TSize(KReqWidth, KGridHeight))); + TRect innerRect(outerRect); + innerRect.Shrink(KShrinkXCoord,KShrinkYCoord); + + CAlfFrameBrush* frameBrush = CAlfFrameBrush::NewLC(*(iUiUtility->Env()), + KAknsIIDQsnFrPopupSub ); + frameBrush->SetFrameRectsL(innerRect, outerRect); + + iMainVisual->Brushes()->AppendL(frameBrush,EAlfHasOwnership); + CleanupStack::Pop(frameBrush); - CleanupStack::Pop(bitmap); - - // BackGround Border Image Visual - iBackgroundBorderImageVisual = CAlfImageVisual::AddNewL(*this,iMainVisual); - iBackgroundBorderImageVisual->SetImage(TAlfImage(backgroundAvkonTexture)); - // Create a new 3x1 grid layout visual. iGrid = CAlfGridLayout::AddNewL(*this, KNoOfColumns, KNumofMenuItems , iMainVisual);//columns, rows @@ -212,7 +211,7 @@ TRgb color; //Gets the color of the text specific to skin AknsUtils::GetCachedColor(AknsUtils::SkinInstance(), - color, KAknsIIDQsnTextColors, EAknsCIQsnTextColorsCG6 ); + color, KAknsIIDQsnTextColors, EAknsCIQsnTextColorsCG20 ); //Loading the strings from rss HBufC* renameTitle = StringLoader::LoadLC( R_GLX_TAGS_RENAME_TITLE ); @@ -303,6 +302,16 @@ iItemMenuVisibility = EFalse; } } + +// --------------------------------------------------------------------------- +// ItemMenuVisibility() +// --------------------------------------------------------------------------- +// +TBool CGlxTagsContextMenuControl::ItemMenuVisibility() + { + return iItemMenuVisibility; + } + // --------------------------------------------------------------------------- // OfferEventL() // --------------------------------------------------------------------------- diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/viewframework/views/fullscreenview/eabi/glxfullscreenviewu.def --- a/photosgallery/viewframework/views/fullscreenview/eabi/glxfullscreenviewu.def Fri Mar 12 15:42:44 2010 +0200 +++ b/photosgallery/viewframework/views/fullscreenview/eabi/glxfullscreenviewu.def Mon Mar 15 12:40:30 2010 +0200 @@ -41,4 +41,6 @@ _ZN36TGlxMulFSMPLocationBindingSetFactoryD0Ev @ 40 NONAME _ZN36TGlxMulFSMPLocationBindingSetFactoryD1Ev @ 41 NONAME _ZN36TGlxMulFSMPLocationBindingSetFactoryD2Ev @ 42 NONAME + _ZTI22CGlxFullScreenBusyIcon @ 43 NONAME + _ZTV22CGlxFullScreenBusyIcon @ 44 NONAME diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/viewframework/views/fullscreenview/group/glxfullscreenview.mmp --- a/photosgallery/viewframework/views/fullscreenview/group/glxfullscreenview.mmp Fri Mar 12 15:42:44 2010 +0200 +++ b/photosgallery/viewframework/views/fullscreenview/group/glxfullscreenview.mmp Mon Mar 15 12:40:30 2010 +0200 @@ -37,6 +37,7 @@ SOURCE glxfullscreenview.cpp SOURCE glxfullscreenviewimp.cpp SOURCE glxfullscreenbindingsetfactory.cpp +SOURCE glxfullscreenbusyicon.cpp //SOURCE glxsinglelinemetapanecontrol.cpp //SOURCE glxslmpfavmlobserver.cpp @@ -97,6 +98,6 @@ LIBRARY glxcommon.lib // for filter facotory LIBRARY glxcommonui.lib LIBRARY glxtvout.lib - +LIBRARY harvesterclient.lib // EOF diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/viewframework/views/fullscreenview/inc/glxfullscreenbusyicon.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/photosgallery/viewframework/views/fullscreenview/inc/glxfullscreenbusyicon.h Mon Mar 15 12:40:30 2010 +0200 @@ -0,0 +1,114 @@ +/* +* Copyright (c) 2008-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: Header for implementation of background processing indicator +* +*/ + +#ifndef GLXFULLSCREENBUSYICON_H_ +#define GLXFULLSCREENBUSYICON_H_ + +#include +#include +// Forward decleartion +class CAlfEnv; +class CAlfAnchorLayout; +class CAlfImageVisual; +class CGlxUiUtility; +class MGlxMediaList; + +enum TGlxBusyIconControlGroupId + { + EBGPSOriPortrait = 10, + EBGPsOriLandscape = 20 + }; + +class CGlxFullScreenBusyIcon: public CAlfControl,public MGlxMediaListObserver + { +public: + /* + * NewL() + */ + static CGlxFullScreenBusyIcon* NewL(MGlxMediaList& aMediaList,CGlxUiUtility& aUiUtility); + /* + * destructor + */ + ~CGlxFullScreenBusyIcon(); + /* + * Shows the Busy Icon to indicate TN generation is going on. + * @param aShow ETrue the icon will be shown and EFlase the icon will be hidden + */ + void ShowBusyIconL(TBool aShow); + +public://frm CAlControl + void VisualLayoutUpdated(CAlfVisual& aVisual); +public: // from MGlxMediaListObserver + void HandleItemAddedL( TInt /*aStartIndex*/, TInt /*aEndIndex*/, MGlxMediaList* /*aList*/ ){} + void HandleItemRemovedL( TInt /*aStartIndex*/, TInt /*aEndIndex*/, MGlxMediaList* /*aList*/){} + void HandleAttributesAvailableL( TInt aItemIndex, + const RArray& /*aAttributes*/, MGlxMediaList* aList ); + void HandleFocusChangedL( NGlxListDefs::TFocusChangeType /*aType*/, + TInt aNewIndex, TInt aOldIndex, MGlxMediaList* aList ); + void HandleItemSelectedL(TInt /*aIndex*/, TBool /*aSelected*/, MGlxMediaList* /*aList*/ ){} + void HandleMessageL( const CMPXMessage& /*aMessage*/, MGlxMediaList* /*aList*/ ){} + void HandleError( TInt /*aError*/ ); + void HandleCommandCompleteL( CMPXCommand* /*aCommandResult*/, TInt /*aError*/, + MGlxMediaList* /*aList*/ ){} + void HandleMediaL( TInt /*aListIndex*/, MGlxMediaList* /*aList*/ ){} + void HandleItemModifiedL( const RArray& /*aItemIndexes*/, MGlxMediaList* /*aList*/ ){} +private: + /* + * Constructor + */ + CGlxFullScreenBusyIcon(MGlxMediaList& aMediaList,CGlxUiUtility& aUiUtility); + /* + * ConstructL() + */ + void ConstructL(); + /* + * Updates the position of the icon based on the screen size landscape/portrait + */ + void UpdatePosition(); + /* + * Gets the current screen size + */ + TRect GetScreenSize(); + /* + * Callback for periodic timer + */ + static TInt PeriodicCallbackL( TAny* aPtr ); + /* + * nonstatic func called from periodic timer + */ + void CallPeriodicCallbackL(); + /* + * Check the thumbnail generation for focus item is done + * @return ETrue if the generation is complete,EFalse if generation is going on. + * + */ + TBool IsReadyL(); + +private: + MGlxMediaList& iMediaList; + CGlxUiUtility& iUiUtility; // CGlxUiUtility passed from FS view + CAlfEnv* iEnv; // Alf Env + CAlfAnchorLayout* iMainVisual; // Anchor Layout + CAlfImageVisual* iBackgroundBorderImageVisual; // Background Image Visual + TRect iScreenSize; // Screen size + CPeriodic* iPeriodic; + TInt iBusyIconIndex; + + }; + + +#endif /* GLXFULLSCREENBUSYICON_H_ */ diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/viewframework/views/fullscreenview/inc/glxfullscreenviewimp.h --- a/photosgallery/viewframework/views/fullscreenview/inc/glxfullscreenviewimp.h Fri Mar 12 15:42:44 2010 +0200 +++ b/photosgallery/viewframework/views/fullscreenview/inc/glxfullscreenviewimp.h Mon Mar 15 12:40:30 2010 +0200 @@ -26,7 +26,7 @@ #include "glxfullscreenview.h" #include "glxfullscreenbindingsetfactory.h" #include "glxfullscreenview.hrh" - +#include //Gesture Helper namespace namespace GestureHelper { @@ -46,6 +46,7 @@ class CGlxHdmiController; class CGestureHelper; class TGlxMedia; +class CGlxFullScreenBusyIcon; //class CHgContextUtility; namespace Alf @@ -75,7 +76,8 @@ NONSHARABLE_CLASS (CGlxFullScreenViewImp): public CGlxFullScreenView, public IAlfWidgetEventHandler, - public MGlxUiCommandHandler + public MGlxUiCommandHandler, + public MHarvesterEventObserver { public: /** @@ -142,6 +144,13 @@ AlfEventHandlerExecutionPhase eventExecutionPhase() ; +public: + // from MHarvesterEventObserver + void HarvestingUpdated( + HarvesterEventObserverType aHEObserverType, + HarvesterEventState aHarvesterEventState, + TInt aItemsLeft ); + private: /* * Constructor @@ -265,7 +274,7 @@ /** * Set the image to external display - HDMI */ - void SetImageL(); + void SetItemToHDMIL(); private: /** Softkey resource id's */ TFullScreenViewResourceIds iResourceIds; @@ -309,6 +318,7 @@ CGlxDRMUtility* iDrmUtility; CPeriodic* iPeriodic; + CGlxFullScreenBusyIcon* iBusyIcon; GestureHelper::CGestureHelper* iGestureHelper; TBool iMultiTouchGestureOngoing ; @@ -318,6 +328,7 @@ //Previous focused index TInt iOldFocusIndex; TBool iImgViewerMode; + RHarvesterClient iHarvesterClient; }; #endif diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/viewframework/views/fullscreenview/src/glxfullscreenbusyicon.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/photosgallery/viewframework/views/fullscreenview/src/glxfullscreenbusyicon.cpp Mon Mar 15 12:40:30 2010 +0200 @@ -0,0 +1,333 @@ +/* + * Copyright (c) 2008-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: Implementation of background processing indicator + * + */ + +#include +#include // KDC_APP_RESOURCE_DIR +#include +#include // Glx logs +#include +#include // UiUtility Singleton +#include +#include // Texturemanager +#include +#include +#include +// Alf Headers +#include +#include +#include +#include +#include "glxfullscreenbusyicon.h" + +const TInt KGlxFullScreenControlGrpId = 0x113; // This is the same control grp id used in FS view +//define the opacity values +const TReal KOpacityOpaque = 1.0; +const TReal KOpacityTransparent = 0.0; +const TInt KBusyIconFrameCount = 10; +const TInt KMainVisSz = 60; +const TInt KIconOffset = 10; +const TTimeIntervalMicroSeconds32 KanInterval = 100000; + +// --------------------------------------------------------------------------- +// NewL +// --------------------------------------------------------------------------- +// +CGlxFullScreenBusyIcon* CGlxFullScreenBusyIcon::NewL(MGlxMediaList& aMediaList, + CGlxUiUtility& aUiUtility) + { + TRACER("CGlxFullScreenBusyIcon::NewL()"); + CGlxFullScreenBusyIcon* self = new (ELeave) CGlxFullScreenBusyIcon( + aMediaList, aUiUtility); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; + } + +// --------------------------------------------------------------------------- +// CGlxFullScreenBusyIcon constructor +// --------------------------------------------------------------------------- +// +CGlxFullScreenBusyIcon::CGlxFullScreenBusyIcon(MGlxMediaList& aMediaList, + CGlxUiUtility& aUiUtility) : + iMediaList(aMediaList), iUiUtility(aUiUtility), iBusyIconIndex(0) + + { + //iBusyIconIndex(0), + TRACER("CGlxFullScreenBusyIcon::CGlxFullScreenBusyIcon()"); + // No Implementation + } +// --------------------------------------------------------------------------- +// ~CGlxFullScreenBusyIcon Destructor +// --------------------------------------------------------------------------- +// +CGlxFullScreenBusyIcon::~CGlxFullScreenBusyIcon() + { + TRACER("CGlxFullScreenBusyIcon::~CGlxFullScreenBusyIcon()"); + + iMediaList.RemoveMediaListObserver(this); + + if (iPeriodic->IsActive()) + { + iPeriodic->Cancel(); + } + + delete iPeriodic; + + if (iMainVisual) + { + iMainVisual->RemoveAndDestroyAllD(); + iMainVisual = NULL; + } + } +// --------------------------------------------------------------------------- +// ConstructL +// --------------------------------------------------------------------------- +// +void CGlxFullScreenBusyIcon::ConstructL() + { + TRACER("CGlxFullScreenBusyIcon::ConstructL"); + TFileName resFile(KDC_APP_BITMAP_DIR); + resFile.Append(KGlxIconsFilename); + iPeriodic = CPeriodic::NewL(CActive::EPriorityStandard); + iMediaList.AddMediaListObserverL(this); + /* create the the alf visual,anchorlayout and add layout to visual*/ + iEnv = iUiUtility.Env(); + CAlfControl::ConstructL(*iEnv); + iMainVisual = CAlfAnchorLayout::AddNewL(*this); + + //BackGround Border Image Visual + iBackgroundBorderImageVisual = CAlfImageVisual::AddNewL(*this, iMainVisual); + CAlfControlGroup* group = &iEnv->ControlGroup(KGlxFullScreenControlGrpId); + group->AppendL(this); + + iMainVisual->SetFlag(EAlfVisualFlagManualLayout); + + // Update the pos and size of the visual + UpdatePosition(); + + // Setting the Flag to get layout change notifications + iMainVisual->SetFlag(EAlfVisualFlagLayoutUpdateNotification); + iMainVisual->SetSize(TAlfTimedPoint(KMainVisSz, KMainVisSz)); + // Store the Current Screensize + iScreenSize = GetScreenSize(); + if (IsReadyL()) + { + ShowBusyIconL(EFalse); + } + else + { + ShowBusyIconL(ETrue); + } + } +// --------------------------------------------------------------------------- +// PeriodicCallbackL +// --------------------------------------------------------------------------- +// +TInt CGlxFullScreenBusyIcon::PeriodicCallbackL(TAny* aPtr) + { + TRACER("CGlxFullScreenBusyIcon::PeriodicCallbackL"); + static_cast (aPtr)->CallPeriodicCallbackL(); + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// Callback from periodic timer-- non static +// ----------------------------------------------------------------------------- +// +inline void CGlxFullScreenBusyIcon::CallPeriodicCallbackL() + { + TRACER("CGlxFullScreenBusyIcon::CallPeriodicCallbackL"); + // Get the icon file + TFileName resFile(KDC_APP_BITMAP_DIR); + resFile.Append(KGlxIconsFilename); + CAlfTexture& backgroundTexture = + iUiUtility.GlxTextureManager().CreateIconTextureL( + EMbmGlxiconsQgn_graf_ring_wait_01 + iBusyIconIndex * 2, + resFile); + iBusyIconIndex++; + //reset the svg frames + if (iBusyIconIndex >= KBusyIconFrameCount) + { + iBusyIconIndex = 0; + } + iBackgroundBorderImageVisual->SetImage(TAlfImage(backgroundTexture)); + ShowBusyIconL(ETrue); + } +// --------------------------------------------------------------------------- +// ShowBusyIconL +// --------------------------------------------------------------------------- +// +void CGlxFullScreenBusyIcon::ShowBusyIconL(TBool aShow) + { + TRACER("CGlxFullScreenBusyIcon::ShowBusyIconL()"); + GLX_LOG_INFO1("CGlxFullScreenBusyIcon::ShowBusyIconL() value %d",aShow); + if (aShow) + { + iMainVisual->SetOpacity(KOpacityOpaque); + } + else + { + iMainVisual->SetOpacity(KOpacityTransparent); + } + if (!aShow) + { + if (iPeriodic->IsActive()) + { + iPeriodic->Cancel(); + } + } + if (!iPeriodic->IsActive() && aShow) + { + iPeriodic->Start(0, KanInterval, TCallBack(&PeriodicCallbackL, + static_cast (this))); + } + } +// --------------------------------------------------------------------------- +// GetScreenSize +// --------------------------------------------------------------------------- +// +TRect CGlxFullScreenBusyIcon::GetScreenSize() + { + TRACER("CGlxFullScreenBusyIcon::GetScreenSize()"); + return AlfUtil::ScreenSize(); + } +// --------------------------------------------------------------------------- +// UpdatePosition +// --------------------------------------------------------------------------- +// +void CGlxFullScreenBusyIcon::UpdatePosition() + { + TRACER("CGlxFullScreenBusyIcon::UpdatePosition()"); + TRect rect = GetScreenSize(); + TInt screenWidth = rect.Width(); + // Switch off the Flag for layout update notification, else a change in size/pos + // will call VisualLayoutUpdated multiple times. + iMainVisual->ClearFlag(EAlfVisualFlagLayoutUpdateNotification); + //set the control size + iMainVisual->SetSize(TSize(KMainVisSz, KMainVisSz)); + iMainVisual->SetPos(TAlfRealPoint(screenWidth / 2 - KMainVisSz / 2, + KIconOffset)); + iMainVisual->SetFlag(EAlfVisualFlagLayoutUpdateNotification); + } + +// --------------------------------------------------------------------------- +// VisualLayoutUpdated +// --------------------------------------------------------------------------- +// +void CGlxFullScreenBusyIcon::VisualLayoutUpdated(CAlfVisual&/* aVisual*/) + { + TRACER("CGlxFullScreenBusyIcon::VisualLayoutUpdated()"); + // Update the Screen positions only if the layout has changed. + // For performace improvement + TRect presentScreenSize = GetScreenSize(); + if (iScreenSize.Width() != presentScreenSize.Width()) + { + UpdatePosition(); + iScreenSize = presentScreenSize; + } + } +// --------------------------------------------------------------------------- +// IsReadyL +// --------------------------------------------------------------------------- +// +TBool CGlxFullScreenBusyIcon::IsReadyL() + { + TRACER("CGlxFullScreenBusyIcon::IsReadyL()"); + if (iMediaList.Count() > 0) + { + TInt fsMediaIndex = iMediaList.FocusIndex(); + TGlxMedia focusItem = iMediaList.Item(fsMediaIndex); + TInt thumbnailError = GlxErrorManager::HasAttributeErrorL( + focusItem.Properties(), KGlxMediaIdThumbnail); + if (thumbnailError) + { + return ETrue; + } + + TMPXAttribute tnAttribQuality(KGlxMediaIdThumbnail, + GlxFullThumbnailAttributeId(ETrue, iScreenSize.Width(), + iScreenSize.Height())); + // This is because there is only one context maintained for FullScreen TN + TMPXAttribute tnAttribQualityOtherOrientation(KGlxMediaIdThumbnail, + GlxFullThumbnailAttributeId(ETrue, iScreenSize.Height(), + iScreenSize.Width())); + + const CGlxThumbnailAttribute* qualityTn = focusItem.ThumbnailAttribute( + tnAttribQuality); + if (!qualityTn) + { + qualityTn = focusItem.ThumbnailAttribute( + tnAttribQualityOtherOrientation); + } + if (qualityTn) + { + return ETrue; + } + + return EFalse; + } + else + { + return ETrue; + } + } + +// --------------------------------------------------------------------------- +// HandleAttributesAvailableL +// --------------------------------------------------------------------------- +// +void CGlxFullScreenBusyIcon::HandleAttributesAvailableL(TInt aItemIndex, + const RArray& /*aAttributes*/, MGlxMediaList* /*aList*/) + { + TRACER("CGlxFullScreenBusyIcon::HandleAttributesAvailableL()"); + if (aItemIndex == iMediaList.FocusIndex()) + { + if (IsReadyL()) + { + ShowBusyIconL(EFalse); + } + } + } + +// ---------------------------------------------------------------------------- +// HandleFocusChangedL +// ---------------------------------------------------------------------------- +// +void CGlxFullScreenBusyIcon::HandleFocusChangedL( + NGlxListDefs::TFocusChangeType /*aType*/, TInt /*aNewIndex*/, + TInt /*aOldIndex*/, MGlxMediaList* /*aList*/) + { + TRACER("CGlxFullScreenBusyIcon::HandleFocusChangedL()"); + ShowBusyIconL(EFalse); + iBusyIconIndex = 0;//reset the icon index to start from the beginning + if (!IsReadyL()) + { + ShowBusyIconL(ETrue); + } + } +// ---------------------------------------------------------------------------- +// HandleError +// ---------------------------------------------------------------------------- +// +void CGlxFullScreenBusyIcon::HandleError(TInt /*aError*/) + { + if (IsReadyL()) + { + ShowBusyIconL(EFalse); + } + } diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/viewframework/views/fullscreenview/src/glxfullscreenviewimp.cpp --- a/photosgallery/viewframework/views/fullscreenview/src/glxfullscreenviewimp.cpp Fri Mar 12 15:42:44 2010 +0200 +++ b/photosgallery/viewframework/views/fullscreenview/src/glxfullscreenviewimp.cpp Mon Mar 15 12:40:30 2010 +0200 @@ -42,8 +42,6 @@ using namespace GestureHelper; -//Hg -//#include #include // Photos Headers @@ -53,7 +51,6 @@ #include // For EGlxCmdFullScreenBack #include // FS View Resource #include // KGlxMediaIdThumbnail -//#include "glxmediakeyutility.h" #include // For medialist registry #include #include @@ -64,14 +61,13 @@ #include #include #include -//#include #include "glxfullscreenviewimp.h" #include #include #include #include #include - +#include "glxfullscreenbusyicon.h" using namespace Alf; const TInt KGlxScreenTimeout =10000000; @@ -198,7 +194,14 @@ iDrmUtility = CGlxDRMUtility::InstanceL(); // Get object that stores the active media list registry iActiveMediaListRegistry = CGlxActiveMediaListRegistry::InstanceL(); - if(!iPeriodic) + + TInt err = iHarvesterClient.Connect(); + GLX_LOG_INFO1("iHarvesterClient.Connect() err = %d",err); + if(err == KErrNone) + { + iHarvesterClient.AddHarvesterEventObserver(*this, EHEObserverTypeMMC, 1000); + } + if(!iPeriodic) { iPeriodic = CPeriodic::NewL(CActive::EPriorityStandard); } @@ -211,7 +214,8 @@ CGlxFullScreenViewImp::~CGlxFullScreenViewImp() { TRACER("CGlxFullScreenViewImp::~CGlxFullScreenViewImp"); - delete iMediaListMulModelProvider; + iHarvesterClient.Close(); + delete iMediaListMulModelProvider; if(iTimer->IsActive()) { iTimer->Cancel(); @@ -322,7 +326,6 @@ } } - if(naviState->Id() == TMPXItemId(KGlxCollectionPluginImageViewerImplementationUid)) { iImgViewerMode = ETrue; @@ -333,11 +336,10 @@ //Create hdmicontroller when it is only launched from fullscreen. //From filemanager show only clone mode. - if(!iImgViewerMode && iMediaList->Count()) + if( !iImgViewerMode ) { iHdmiController = CGlxHdmiController::NewL(); - iOldFocusIndex = iMediaList->FocusIndex(); - SetImageL(); + SetItemToHDMIL(); } iScreenFurniture->SetActiveView(iViewUid); @@ -352,34 +354,23 @@ // create the coverflow CreateCoverflowWidgetL(); - CreateSliderWidgetL(); -// iMediaKeyUtility = CGlxMediaKeyUtility::NewL(); - + iBusyIcon = CGlxFullScreenBusyIcon::NewL(*iMediaList,*iUiUtility); // create a zoom control iZoomControl = CGlxZoomControl::NewL(*this, *iMediaList, *iZoomButtonGroup, *iSliderWidget, iGestureHelper); - // Create the Metapane - //iSingleLineMetaPane = CGlxSingleLineMetaPane::NewL(*this,*iMediaList,*iUiUtility); - // hide the screen furniture HideUi(ETrue); // Set active media list pointer, so that UPnP renderer knows about this list iActiveMediaListRegistry->RegisterActiveMediaList(iMediaList); - //Get the HgContextUtility instance -// iContextUtility = iUiUtility->ContextUtility(); - - // if the Medialist has any item, set the First index context to Hg Context Utility -// TGlxMedia item = iMediaList->Item( iMediaList->FocusIndex() ); -// iContextUtility->PublishPhotoContextL(item.Uri()); - if ( !iPeriodic->IsActive() ) - { - iPeriodic->Start(KPeriodicStartDelay, KPeriodicIntervalDelay, - TCallBack(&PeriodicCallback, static_cast (this))); - } + if ( !iPeriodic->IsActive() ) + { + iPeriodic->Start(KPeriodicStartDelay, KPeriodicIntervalDelay, + TCallBack(&PeriodicCallback, static_cast (this))); + } } @@ -468,9 +459,6 @@ { iSliderModel->SetTick(KGlxSliderTickValue); } - - //SetSliderLevel(); - } catch(...) { @@ -493,8 +481,8 @@ TBool isDrmRightsValid = ETrue; if(item.IsDrmProtected()) { - isDrmRightsValid = iDrmUtility->CheckOpenRightsL(item.Uri(), - (item.Category() == EMPXImage)); + //Fix for ESLM-82WJ59: Since it is always for the focused item - use DisplayRightsL instead of openrightsL + isDrmRightsValid = iDrmUtility->CheckDisplayRightsL(item.Uri(), (item.Category() == EMPXImage)); } // Display slider only for non corrupted images and items with valid DRM license @@ -525,9 +513,6 @@ Cba()->MakeVisible( ETrue ); Cba()->DrawNow(); - // Show the Metapane - //iSingleLineMetaPane->ShowMetaPane(ETrue); - //set the ui state to On SetUiSate(NGlxNFullScreenUIState::EUiOn); @@ -699,8 +684,8 @@ TBool isDrmRightsValid = ETrue; if(item.IsDrmProtected()) { - isDrmRightsValid = iDrmUtility->CheckOpenRightsL(item.Uri(), - (item.Category() == EMPXImage)); + //Fix for ESLM-82WJ59: DRM Rights validity check for displayed item + isDrmRightsValid = iDrmUtility->CheckDisplayRightsL(item.Uri(), (item.Category() == EMPXImage)); } // Activate Zoom if the item is an image and its DRM rights is not expired if(KErrNone == error && (EMPXImage == item.Category()) && isDrmRightsValid) @@ -709,7 +694,15 @@ { if(iHdmiController) { - iHdmiController->ActivateZoom(); + TBool autoZoomOut = ETrue; + //Set autozoomout to false in pinch zoom, since we would be + //zooming out on deactivate once we get the release event. + if(aStartMode == EZoomStartPinch) + { + autoZoomOut = EFalse; + } + + iHdmiController->ActivateZoom(autoZoomOut); } iZoomControl->ActivateL(GetInitialZoomLevel(),aStartMode, focus, item, apZoomFocus,iImgViewerMode); @@ -741,9 +734,14 @@ void CGlxFullScreenViewImp::DeactivateZoomControlL() { TRACER("CGlxFullScreenViewImp::DeactivateZoomControlL"); - ActivateFullScreenL(); + ActivateFullScreenL(); + //Deactivate HDMI controller for zoom out while pinch zooming. + if(iHdmiController) + { + iHdmiController->DeactivateZoom(); + } if(iZoomControl->Activated()) - { + { iZoomControl->Deactivate(); } //Once into fullscreen view,show the screen furniture @@ -758,12 +756,10 @@ void CGlxFullScreenViewImp::DoMLViewDeactivate() { TRACER("CGlxFullScreenViewImp::DoMLViewDeactivate"); - // if Medialist Count is Zero, set the navigation state to - // EGlxNavigationBackwards before going back to grid view - if(iMediaList->Count() == 0) - { - iUiUtility->SetViewNavigationDirection(EGlxNavigationBackwards); - } + //Fix for ESLM-82WJ59: Clear the last uri for which DRM Rights were consumed before going back to grid view + //since the GridView::Activate() and FullScreen::DeActivate() can be called in any order, + //this call is being made to be on safer side + iDrmUtility->ClearLastConsumedItemUri(); iScreenFurniture->ViewDeactivated(iViewUid); iImgViewerMode = EFalse; if (iHdmiController) @@ -993,17 +989,25 @@ MulDoubleTapData* DoubleTapData = (MulDoubleTapData*)(aEvent.CustomEventData()); TPoint doubleTapPoint = DoubleTapData->mDoubleTapPoint; - SetSliderLevel(); - TRAP_IGNORE( ActivateZoomControlL(EZoomStartDoubleTap, &doubleTapPoint) ); + TInt focus = iMediaList->FocusIndex(); + TGlxMedia item = iMediaList->Item( focus ); + TSize size; + item.GetDimensions( size ); + TRect rect = AlfUtil::ScreenSize(); + TInt zoomLevel = GetInitialZoomLevel(); + TInt tlX = (rect.Width() - (size.iWidth*zoomLevel)/100)/2; + TInt tlY = (rect.Height() - (size.iHeight*zoomLevel)/100)/2; + TRect imageRect(TPoint(tlX, tlY), TSize((size.iWidth*zoomLevel)/100, (size.iHeight*zoomLevel)/100)); + if (imageRect.Contains(doubleTapPoint)) + { + SetSliderLevel(); + TRAP_IGNORE( ActivateZoomControlL(EZoomStartDoubleTap, &doubleTapPoint) ); + } return EEventConsumed; } case ETypeItemRemoved: { - if(iHdmiController) - { - SetImageL(); - } - iOldFocusIndex = iMediaList->FocusIndex(); + SetItemToHDMIL(); return EEventConsumed; } case ETypeHighlight: @@ -1017,11 +1021,7 @@ { RemoveTexture(); } - if(iHdmiController) - { - SetImageL(); - } - iOldFocusIndex = iMediaList->FocusIndex(); + SetItemToHDMIL(); if ( NGlxNFullScreenUIState::EUiOn == GetUiSate() ) { HideUi(ETrue); @@ -1062,11 +1062,13 @@ //slider event handling case ETypePrimaryValueChange: { - // Zoomview is only launched if the currentslider value is above the level - // of fullscreenlevel. iTimer->Cancel(); iSliderWidget->ShowWidget( ETrue, 0 ); - TRAP_IGNORE( ActivateZoomControlL(EZoomStartSlider)); + TRAPD( err, ActivateZoomControlL(EZoomStartSlider)); + if (err != KErrNone) + { + iSliderModel->SetPrimaryValue(GetInitialZoomLevel()); + } } return EEventConsumed; default: @@ -1100,21 +1102,10 @@ break; case EGlxCmdRenameCompleted: { - if (iHdmiController) - { - SetImageL(); - } + SetItemToHDMIL(); consumed = ETrue; break; } -// case EGlxCmdRotateLeft: -// iCoverFlowWidget->RotateImage(IMulWidget::ERotateLeft,size,KGlxRotationDelay); -// consumed = ETrue; -// break; -// case EGlxCmdRotateRight: -// iCoverFlowWidget->RotateImage(IMulWidget::ERotateRight,size,KGlxRotationDelay); -// consumed = ETrue; -// break; } return consumed; } @@ -1352,6 +1343,7 @@ TBool expired = !iDrmUtility->CheckOpenRightsL(uri,ETrue); if(expired) { + iBusyIcon->ShowBusyIconL(EFalse); iDrmUtility->ShowRightsInfoL(uri); return; } @@ -1384,7 +1376,10 @@ { swipedirection = (focusindex-iOldFocusIndex < 0 ? EBackward : EForward) ; } - return swipedirection; + GLX_LOG_INFO1("CGlxFullScreenViewImp::GetSwipeDirection()" + " Direction = [%d] ", swipedirection); + + return swipedirection; } // --------------------------------------------------------------------------- // @@ -1430,32 +1425,79 @@ const TGlxMedia& item = iMediaList->Item(GetIndexToBeRemoved()); iUiUtility->GlxTextureManager().RemoveTexture(item.Id(),EFalse); } + // --------------------------------------------------------------------------- // // Set the image to external display - HDMI // --------------------------------------------------------------------------- // -void CGlxFullScreenViewImp::SetImageL() +void CGlxFullScreenViewImp::SetItemToHDMIL() { - TRACER("CGlxFullScreenViewImp::SetImageL - CGlxHdmi"); - TGlxMedia item = iMediaList->Item(iMediaList->FocusIndex()); + TRACER("CGlxFullScreenViewImp::SetImageToHDMIL - CGlxHdmi"); + + TInt focusIndex = iMediaList->FocusIndex(); + + // If we dont know what item we are focussing on + // or if out medialist is empty + // or if HDMI is not connected + // or if there is no HDMI Controller at all + // then dont SetImageToHDMI :) + if( ( KErrNotFound == focusIndex) + || (0 == iMediaList->Count()) + || (NULL == iHdmiController) + || (!iHdmiController->IsHDMIConnected())) + { + GLX_LOG_INFO("CGlxFullScreenViewImp::SetImageToHDMIL - Cant Set Image To HDMI"); + return; + } + + TGlxMedia item = iMediaList->Item(focusIndex); TInt error = GlxErrorManager::HasAttributeErrorL(item.Properties(), - KGlxMediaIdThumbnail); - if (item.Category() != EMPXVideo && iDrmUtility->CheckOpenRightsL( - item.Uri(), ETrue) && (error == KErrNone)) + KGlxMediaIdThumbnail); + + // Item will be supported by HDMI ONLY if + // it is not a video + // and it has valid DRM Viewing rights + // and it has no attribute error + if ( (item.Category() != EMPXVideo) + && iDrmUtility->CheckOpenRightsL(item.Uri(), ETrue) + && (error == KErrNone) ) { + GLX_LOG_INFO("CGlxFullScreenViewImp::SetImageToHDMIL - CGlxHdmi - Setting the Image"); TInt frameCount(0); TSize orignalSize; - TBool aFramesPresent = item.GetFrameCount(frameCount); - TBool adimension = item.GetDimensions(orignalSize); + item.GetFrameCount(frameCount); + item.GetDimensions(orignalSize); iHdmiController->SetImageL(item.Uri(), orignalSize, frameCount); - GLX_LOG_INFO("CGlxFullScreenViewImp::SetImageL - CGlxHdmi - calling SetImage"); } else { - GLX_LOG_INFO("CGlxFullScreenViewImp::SetImageL - CGlxHdmi - calling IsVideo"); - //Set the external display to cloning mode. - //If the current item is a video, corruted thumbnail - iHdmiController->IsVideo(); + GLX_LOG_INFO("CGlxFullScreenViewImp::SetImageToHDMIL - Unsupported Item"); + //Set the external display to cloning mode if + //the current item is something we dont support + //(e.g. video, corrupted item, item with invalid DRM); + iHdmiController->ItemNotSupported(); + } + iOldFocusIndex = iMediaList->FocusIndex(); + } +// --------------------------------------------------------------------------- +// HarvestingUpdated +// +// --------------------------------------------------------------------------- +// +void CGlxFullScreenViewImp::HarvestingUpdated( + HarvesterEventObserverType HarvestingUpdated, + HarvesterEventState aHarvesterEventState, + TInt aItemsLeft ) + { + TRACER("CGlxFullScreenViewImp::HarvestingUpdated()"); + if(HarvestingUpdated == EHEObserverTypeMMC) + { + if(iZoomControl && iZoomControl->Activated()) + { + SetSliderLevel(); + DeactivateZoomControlL(); + } + ProcessCommandL(EAknSoftkeyClose); } } diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/viewframework/views/gridview/group/glxgridview.mmp --- a/photosgallery/viewframework/views/gridview/group/glxgridview.mmp Fri Mar 12 15:42:44 2010 +0200 +++ b/photosgallery/viewframework/views/gridview/group/glxgridview.mmp Mon Mar 15 12:40:30 2010 +0200 @@ -76,6 +76,6 @@ LIBRARY egul.lib alfclient.lib LIBRARY aknskins.lib LIBRARY featmgr.lib // FeatureManager - +LIBRARY harvesterclient.lib // End of File diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/viewframework/views/gridview/inc/glxgridviewcontainer.h --- a/photosgallery/viewframework/views/gridview/inc/glxgridviewcontainer.h Fri Mar 12 15:42:44 2010 +0200 +++ b/photosgallery/viewframework/views/gridview/inc/glxgridviewcontainer.h Mon Mar 15 12:40:30 2010 +0200 @@ -34,6 +34,9 @@ #include #include +#include +#include + #include "glxgridvieweventobserver.h" class CHgGrid; @@ -50,7 +53,8 @@ class CGlxGridViewContainer : public CCoeControl, public MHgScrollBufferObserver, public MHgSelectionObserver, - public MHgMarkingObserver + public MHgMarkingObserver, + public MHarvesterEventObserver { public: /** @@ -93,6 +97,13 @@ //handle orientaion realted changes void HandleResourceChange(TInt aType); +public: + // from MHarvesterEventObserver + void HarvestingUpdated( + HarvesterEventObserverType aHEObserverType, + HarvesterEventState aHarvesterEventState, + TInt aItemsLeft ); + private: /** * C++ default constructor. @@ -207,6 +218,8 @@ MGlxGridEventObserver& iGlxGridViewObserver; //toolbar - created dynamically. CAknToolbar* iToolbar; + CGlxProgressIndicator* iProgressIndicator; + RHarvesterClient iHarvesterClient; }; #endif // CGLXGRIDVIEWCONTROL_H diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/viewframework/views/gridview/src/glxgridviewcontainer.cpp --- a/photosgallery/viewframework/views/gridview/src/glxgridviewcontainer.cpp Fri Mar 12 15:42:44 2010 +0200 +++ b/photosgallery/viewframework/views/gridview/src/glxgridviewcontainer.cpp Mon Mar 15 12:40:30 2010 +0200 @@ -85,6 +85,7 @@ CGlxGridViewContainer::~CGlxGridViewContainer() { TRACER("CGlxGridViewContainer::~CGlxGridViewContainer"); + iHarvesterClient.Close(); if(iBgContext) { delete iBgContext; @@ -160,6 +161,11 @@ // For DRM Utility iDRMUtility = CGlxDRMUtility::InstanceL(); + //Fix for ESLM-82WJ59: Clear the last uri for which DRM Rights were consumed + //since the GridView::Activate() and FullScreen::DeActivate() can be called in any order, + //this call is being made to be on safer side + iDRMUtility->ClearLastConsumedItemUri(); + // background Skin Context for the skin support TRect apRect = iEikonEnv->EikAppUi()->ApplicationRect(); iBgContext = CAknsBasicBackgroundControlContext::NewL( @@ -173,6 +179,13 @@ GlxFullThumbnailAttributeId( EFalse, iGridIconSize.iWidth, iGridIconSize.iHeight ) ); CreateGridL(); + + TInt err = iHarvesterClient.Connect(); + GLX_LOG_INFO1("iHarvesterClient.Connect() err = %d",err); + if(err == KErrNone) + { + iHarvesterClient.AddHarvesterEventObserver(*this, EHEObserverTypeMMC, 1000); + } } // --------------------------------------------------------------------------- @@ -916,4 +929,24 @@ break; } } + +// --------------------------------------------------------------------------- +// HarvestingUpdated +// +// --------------------------------------------------------------------------- +// +void CGlxGridViewContainer::HarvestingUpdated( + HarvesterEventObserverType HarvestingUpdated, + HarvesterEventState aHarvesterEventState, + TInt aItemsLeft ) + { + TRACER("CGlxGridViewContainer::HarvestingUpdated()"); + GLX_LOG_INFO1("HarvestingUpdated = %d",HarvestingUpdated); + GLX_LOG_INFO1("aHarvesterEventState = %d",aHarvesterEventState); + GLX_LOG_INFO1("aItemsLeft = %d",aItemsLeft); + if(HarvestingUpdated == EHEObserverTypeMMC) + { + iGlxGridViewObserver.HandleGridEventsL(EAknSoftkeyClose); + } + } //end of file diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/viewframework/views/listview/group/glxlistview.mmp --- a/photosgallery/viewframework/views/listview/group/glxlistview.mmp Fri Mar 12 15:42:44 2010 +0200 +++ b/photosgallery/viewframework/views/listview/group/glxlistview.mmp Mon Mar 15 12:40:30 2010 +0200 @@ -53,6 +53,7 @@ SYSTEMINCLUDE ../../../commandhandlers/inc SYSTEMINCLUDE ../../../dataprovider/inc SYSTEMINCLUDE ../../../medialists/inc //glxmedialistiterator +SYSTEMINCLUDE ../../../uiutilities/inc LIBRARY euser.lib LIBRARY cone.lib diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/viewframework/views/listview/inc/glxlistviewimp.h --- a/photosgallery/viewframework/views/listview/inc/glxlistviewimp.h Fri Mar 12 15:42:44 2010 +0200 +++ b/photosgallery/viewframework/views/listview/inc/glxlistviewimp.h Mon Mar 15 12:40:30 2010 +0200 @@ -32,6 +32,9 @@ #include #include +#include +#include + // FORWARD DECLARATIONS class MMPXCollectionUtility; class CGlxPreviewThumbnailBinding; @@ -39,6 +42,18 @@ class CHgDoubleGraphicListFlat; class CAknsBasicBackgroundControlContext; + +//NOT: This enum is based on TGlxCollectionPluginPriority. If any +//change happen regarding priority order in that, need to change +//in this enum also. +enum + { + EGlxListItemAll = 0, + EGlxListItemMonth, + EGlxListItemAlbum, + EGlxLIstItemTag + }; + // CLASS DECLARATION /** @@ -57,7 +72,8 @@ public MGlxMediaListObserver, public MHgScrollBufferObserver, public MHgSelectionObserver, - public MPreviewTNObserver + public MPreviewTNObserver, + public MDialogDismisedObserver { public: /** @@ -157,6 +173,7 @@ private: void CreateListL(); + void SetDefaultThumbnailL(TInt aIndex); public: // from MGlxMediaListObserver void HandleItemAddedL( TInt aStartIndex, TInt aEndIndex, MGlxMediaList* aList ); @@ -173,6 +190,7 @@ void HandleMediaL( TInt aListIndex, MGlxMediaList* aList ); void HandleItemModifiedL( const RArray& aItemIndexes, MGlxMediaList* aList ); void HandlePopulatedL( MGlxMediaList* aList ); + void HandleDialogDismissedL(); // from MDialogDismisedObserver private: // Data @@ -217,6 +235,10 @@ // save title text HBufC* iTitletext; + CGlxProgressIndicator* iProgressIndicator; + + //Check for TN generation + TBool isTnGenerationComplete; }; #endif // C_GLXLISTVIEWIMP_H diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/viewframework/views/listview/src/glxlistviewimp.cpp --- a/photosgallery/viewframework/views/listview/src/glxlistviewimp.cpp Fri Mar 12 15:42:44 2010 +0200 +++ b/photosgallery/viewframework/views/listview/src/glxlistviewimp.cpp Mon Mar 15 12:40:30 2010 +0200 @@ -42,6 +42,8 @@ #include #include #include +#include +#include const TInt KListDataWindowSize(25); const TInt KNoOfPages(2); @@ -117,6 +119,7 @@ SetToolbarObserver(this); iBackwardNavigation = EFalse; iIsRefreshNeeded = EFalse; + isTnGenerationComplete = ETrue; } // --------------------------------------------------------------------------- @@ -255,6 +258,13 @@ delete iPreviewTNBinding; iPreviewTNBinding = NULL; DestroyListViewWidget(); +#ifndef __WINSCW__ + if(iProgressIndicator) + { + delete iProgressIndicator; + iProgressIndicator = NULL; + } +#endif } // --------------------------------------------------------------------------- @@ -416,8 +426,29 @@ void CGlxListViewImp::HandleOpenL( TInt aIndex ) { TRACER("CGlxListViewImp::HandleOpenL"); + +#ifndef __WINSCW__ + TInt leftVariable = 0; + TRAPD(err,leftVariable = iUiUtility->GetItemsLeftCountL()); + GLX_LOG_INFO1("CGlxListViewImp RProperty::Get leftVariable %d",leftVariable); + isTnGenerationComplete = (leftVariable)?EFalse:ETrue; + GLX_LOG_INFO1("CGlxListViewImp isTnGenerationComplete %d",isTnGenerationComplete); + if(err != KErrNone) + { + GLX_LOG_INFO1("CGlxListViewImp RProperty::Get errorcode %d",err); + } + if(!isTnGenerationComplete) + { + if(iProgressIndicator) + { + delete iProgressIndicator; + iProgressIndicator = NULL; + } + iProgressIndicator = CGlxProgressIndicator::NewL(*this); + } +#endif if( iNextViewActivationEnabled && ( aIndex >= 0 && aIndex < - iMediaList->Count())) + iMediaList->Count()) && isTnGenerationComplete) { //Delete the PreviewTNMBinding as in forward navigation //we do not get the medialist callback. @@ -455,15 +486,7 @@ else { //Displays default thumbnail if aBitmap is NULL - - TFileName resFile(KDC_APP_BITMAP_DIR); - resFile.Append(KGlxIconsFilename); - CFbsBitmap* defaultBitmap = AknIconUtils::CreateIconL(resFile, - EMbmGlxiconsQgn_prop_image_notcreated); - AknIconUtils::SetSize(defaultBitmap, - CHgDoubleGraphicListFlat::PreferredImageSize()); - - iList->ItemL(focusIndex).SetIcon(CGulIcon::NewL(defaultBitmap)); + SetDefaultThumbnailL(focusIndex); } TInt firstIndex = iList->FirstIndexOnScreen(); @@ -550,11 +573,31 @@ { TFileName resFile(KDC_APP_BITMAP_DIR); resFile.Append(KGlxIconsFilename); - CFbsBitmap* bitmap = AknIconUtils::CreateIconL(resFile, + + CFbsBitmap* bitmap; + CMPXCollectionPath* path = iMediaList->PathLC( NGlxListDefs::EPathParent ); + if (path->Id() == KGlxCollectionPluginAlbumsImplementationUid) + { + bitmap = AknIconUtils::CreateIconL(resFile, + EMbmGlxiconsQgn_prop_photo_album_large); + AknIconUtils::SetSize(bitmap, + CHgDoubleGraphicListFlat::PreferredImageSize()); + } + else if (path->Id() == KGlxCollectionPluginMonthsImplementationUid) + { + bitmap = AknIconUtils::CreateIconL(resFile, + EMbmGlxiconsQgn_prop_photo_calendar_large); + AknIconUtils::SetSize(bitmap, + CHgDoubleGraphicListFlat::PreferredImageSize()); + } + else + { + bitmap = AknIconUtils::CreateIconL(resFile, EMbmGlxiconsQgn_prop_image_notcreated); AknIconUtils::SetSize(bitmap, CHgDoubleGraphicListFlat::PreferredImageSize()); - + } + iList = CHgDoubleGraphicListFlat::NewL( ClientRect(), mediaCount, @@ -580,8 +623,16 @@ //Fix for ESLM-7SAHPT::Clear Flag to Disable QWERTY search input in list view iList->ClearFlags(CHgScroller::EHgScrollerSearchWithQWERTY ); + //While coming back to main listview + TGlxIdSpaceId id = iMediaList->IdSpaceId(0); + if((id == KGlxIdSpaceIdRoot) && (mediaCount > 0)) + { + for (TInt i = 0; i < mediaCount; i++) + { + SetDefaultThumbnailL(i); + } + } // Set the scrollbar type for albums list - CMPXCollectionPath* path = iMediaList->PathLC( NGlxListDefs::EPathParent ); if (path->Id() == KGlxCollectionPluginAlbumsImplementationUid) { iList->SetScrollBarTypeL(CHgScroller::EHgScrollerLetterStripLite ); @@ -628,6 +679,7 @@ const TGlxMedia& item = iMediaList->Item(i); iList->ItemL(i).SetTitleL(item.Title()); iList->ItemL(i).SetTextL(item.SubTitle()); + SetDefaultThumbnailL(i); } if(aStartIndex == aEndIndex ) @@ -817,5 +869,97 @@ { } - + +// ---------------------------------------------------------------------------- +// SetDefaultThumbnailL +// ---------------------------------------------------------------------------- +// +void CGlxListViewImp::SetDefaultThumbnailL(TInt aIndex) + { + TRACER("CGlxListViewImp::SetDefaultThumbnail"); + CFbsBitmap* defaultBitmap = NULL; + + TFileName resFile(KDC_APP_BITMAP_DIR); + resFile.Append(KGlxIconsFilename); + + TGlxIdSpaceId id = iMediaList->IdSpaceId(0); + // In main list view, default thumbnails will be set according + // to the list items. + if(id == KGlxIdSpaceIdRoot) + { + GLX_LOG_INFO1("CGlxListViewImp::SetDefaultThumbnail - For main list view " + "aIndex %d",aIndex); + // Mapping between switch, index and order of colleciton done on + // the base of TGlxCollectionPluginPriority + switch(aIndex) + { + case EGlxListItemAll: + defaultBitmap = AknIconUtils::CreateIconL(resFile, + EMbmGlxiconsQgn_prop_photo_all_large); + AknIconUtils::SetSize(defaultBitmap, + CHgDoubleGraphicListFlat::PreferredImageSize()); + break; + case EGlxListItemMonth: + defaultBitmap = AknIconUtils::CreateIconL(resFile, + EMbmGlxiconsQgn_prop_photo_calendar_large); + AknIconUtils::SetSize(defaultBitmap, + CHgDoubleGraphicListFlat::PreferredImageSize()); + break; + case EGlxListItemAlbum: + defaultBitmap = AknIconUtils::CreateIconL(resFile, + EMbmGlxiconsQgn_prop_photo_album_large); + AknIconUtils::SetSize(defaultBitmap, + CHgDoubleGraphicListFlat::PreferredImageSize()); + break; + case EGlxLIstItemTag: + defaultBitmap = AknIconUtils::CreateIconL(resFile, + EMbmGlxiconsQgn_prop_photo_tag_large); + AknIconUtils::SetSize(defaultBitmap, + CHgDoubleGraphicListFlat::PreferredImageSize()); + break; + default: + break; + } + } + else + { + GLX_LOG_INFO1("CGlxListViewImp::SetDefaultThumbnail - For other list view " + "aIndex %d",aIndex); + CMPXCollectionPath* path = iMediaList->PathLC( NGlxListDefs::EPathParent ); + if(path->Id(0) == KGlxCollectionPluginAlbumsImplementationUid) + { + defaultBitmap = AknIconUtils::CreateIconL(resFile, + EMbmGlxiconsQgn_prop_photo_album_large); + AknIconUtils::SetSize(defaultBitmap, + CHgDoubleGraphicListFlat::PreferredImageSize()); + } + else if(path->Id(0) == KGlxCollectionPluginMonthsImplementationUid) + { + defaultBitmap = AknIconUtils::CreateIconL(resFile, + EMbmGlxiconsQgn_prop_photo_calendar_large); + AknIconUtils::SetSize(defaultBitmap, + CHgDoubleGraphicListFlat::PreferredImageSize()); + } + else + { + defaultBitmap = AknIconUtils::CreateIconL(resFile, + EMbmGlxiconsQgn_prop_image_notcreated); + AknIconUtils::SetSize(defaultBitmap, + CHgDoubleGraphicListFlat::PreferredImageSize()); + } + CleanupStack::PopAndDestroy(path); + } + iList->ItemL(aIndex).SetIcon(CGulIcon::NewL(defaultBitmap)); + } + + +// ---------------------------------------------------------------------------- +// HandleDialogDismissedL +// ---------------------------------------------------------------------------- +// +void CGlxListViewImp::HandleDialogDismissedL() + { + TRACER("CGlxListViewImp::HandleDialogDismissedL()"); + isTnGenerationComplete = ETrue; + } // End of File diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/viewframework/views/metadatadialog/group/glxmetadatadialog.mmp --- a/photosgallery/viewframework/views/metadatadialog/group/glxmetadatadialog.mmp Fri Mar 12 15:42:44 2010 +0200 +++ b/photosgallery/viewframework/views/metadatadialog/group/glxmetadatadialog.mmp Mon Mar 15 12:40:30 2010 +0200 @@ -71,6 +71,7 @@ SYSTEMINCLUDE ../../../../common/inc // for CGlxResourceUtilities SYSTEMINCLUDE ../../../../commonui/inc +LIBRARY aknphysics.lib LIBRARY euser.lib LIBRARY avkon.lib //for Avkon conrols LIBRARY eikcoctl.lib //for eik controls diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/viewframework/views/metadatadialog/inc/glxmetadatadialog.h --- a/photosgallery/viewframework/views/metadatadialog/inc/glxmetadatadialog.h Fri Mar 12 15:42:44 2010 +0200 +++ b/photosgallery/viewframework/views/metadatadialog/inc/glxmetadatadialog.h Mon Mar 15 12:40:30 2010 +0200 @@ -29,7 +29,7 @@ #include "mglxmedialistobserver.h" #include #include "glxmedia.h" - +#include //Physics - Kinetic scrolling listener // FORWARD DECLARATIONS class CGlxMetadataCommandHandler;class CGlxCommandHandlerAddToContainer; @@ -44,7 +44,8 @@ class CGlxMetadataDialog : public CAknDialog, public MGlxMediaListProvider, public MGlxMetadataDialogObserver, - public MToolbarResetObserver + public MToolbarResetObserver, + public MAknPhysicsObserver { public: // Constructors and destructor @@ -92,6 +93,14 @@ */ void HandleToolbarResetting(TBool aVisible); +protected: // from MAknPhysicsObserver + + void ViewPositionChanged( const TPoint& /*aNewPosition*/, TBool /*aDrawNow*/, TUint /*aFlags*/ ); + + void PhysicEmulationEnded(); + + TPoint ViewPosition() const; + protected: // Functions from base classes /** @@ -206,7 +215,22 @@ HBufC* iPreviousTitle; const TDesC& iUri; CGlxCommandHandlerAddToContainer* iAddToTag; - CGlxCommandHandlerAddToContainer* iAddToAlbum; + CGlxCommandHandlerAddToContainer* iAddToAlbum; + /* + * Store previous pointer event point + */ + TPoint iPrev; + + /* + * Check if the dragging got beyond kinetic drag threshold & screen + * movement will start, if set to true + */ + TBool iViewDragged; + + /* + * Store the value of kinetic drag threshold + */ + TInt iKineticDragThreshold; }; #endif // GLXMETADATADIALOG_H diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/viewframework/views/metadatadialog/src/glximgvwrmetadatacontainer.cpp --- a/photosgallery/viewframework/views/metadatadialog/src/glximgvwrmetadatacontainer.cpp Fri Mar 12 15:42:44 2010 +0200 +++ b/photosgallery/viewframework/views/metadatadialog/src/glximgvwrmetadatacontainer.cpp Mon Mar 15 12:40:30 2010 +0200 @@ -108,6 +108,7 @@ // void CGlxImgVwrMetadataContainer::ConstructL( const TRect& /*aRect*/ ) { + TRACER("CGlxMetadataContainer::ConstructLL()"); //Creating the RBuf texts for all the items except tags & albums //which would be updated as whne the item is edited iTextSetter.CreateL(KMaxFileName); @@ -145,6 +146,7 @@ //----------------------------------------------------------------------------- MGlxMediaList& CGlxImgVwrMetadataContainer::MediaList() { + TRACER("CGlxMetadataContainer::HandleAttributesAvailableL()"); //returns the active medialist. return *iItemMediaList; } @@ -159,7 +161,6 @@ iTextSetter.Copy(KGlxTextSetter); //Creating a empty Settings list box which will be populated with metadata in handleattributeavailable - switch(aResourceId) { case EImgVwrNameItem: @@ -204,6 +205,7 @@ //----------------------------------------------------------------------------- TBool CGlxImgVwrMetadataContainer::IsItemModifiable() { + TRACER("CGlxMetadataContainer::IsItemModifiable()"); //Only items like name , description, tag and albums are modifiable //The check is for the items from ENameItem(0) tille ETagsItem(4) if(ListBox()->CurrentItemIndex()<=ETagsItem) @@ -221,50 +223,26 @@ void CGlxImgVwrMetadataContainer::HandleListBoxEventL(CEikListBox* /*aListBox*/, TListBoxEvent aEventType) { + TRACER("CGlxMetadataContainer::HandleListBoxEventL()"); GLX_LOG_INFO("CGlxImgVwrMetadataContainer::HandleListBoxEventL"); - if ((aEventType == EEventEnterKeyPressed) || - (aEventType == EEventEditingStarted) || - (aEventType == EEventItemSingleClicked)) + if (aEventType == EEventItemSingleClicked) { - //handle edit functionality if items when useer selects via touch - HandleListboxChangesL(); + if(iItemMediaList->Count() == 0) + { + GLX_LOG_INFO("CGlxImgVwrMetadataContainer:: NO Items"); + return; + } + TInt index = ListBox()->CurrentItemIndex() ; + if(EImgVwrlicenseItem == index) + { + GLX_LOG_INFO("CGlxImgVwrMetadataContainer::Licence item"); + CGlxDRMUtility* drmUtility = CGlxDRMUtility::InstanceL(); + CleanupClosePushL(*drmUtility); + drmUtility->ShowDRMDetailsPaneL(iItemMediaList->Item(0).Uri()); + CleanupStack::PopAndDestroy(drmUtility); + } } } -//----------------------------------------------------------------------------- -// CGlxImgVwrMetadataContainer::HandleListboxChangesL -//----------------------------------------------------------------------------- -void CGlxImgVwrMetadataContainer::HandleListboxChangesL() - { - - TInt index = ListBox()->CurrentItemIndex(); - - switch(index) - { - case EImgVwrNameItem: - case EImgVwrDescriptionItem: - { - SetNameDescriptionL(index); - break; - } - - case EImgVwrlicenseItem: - { - - //Create DRM utility - CGlxDRMUtility* drmUtility = CGlxDRMUtility::InstanceL(); - CleanupClosePushL(*drmUtility); - drmUtility->ShowDRMDetailsPaneL(iItemMediaList->Item(0).Uri()/*iUri*/); - CleanupStack::PopAndDestroy(drmUtility); - } - break; - default: - { - break; - } - } - - } - // ---------------------------------------------------------------------------- // CGlxImgVwrMetadataContainer::ViewDynInitMenuPaneL @@ -272,6 +250,7 @@ // void CGlxImgVwrMetadataContainer::ViewDynInitMenuPaneL(TInt aMenuId, CEikMenuPane* aMenuPane) { + TRACER("CGlxMetadataContainer::ViewDynInitMenuPaneL()"); if( aMenuId == R_METADATA_MENU ) { //Set dim the options based on the utem selected @@ -288,7 +267,6 @@ void CGlxImgVwrMetadataContainer::HandleAttributesAvailableL( TInt /*aItemIndex*/, const RArray& aAttributes, MGlxMediaList* aList ) { - TRACER("CGlxMetadataContainer::HandleAttributesAvailableL()"); //generic medialist for the item for all the attributes required other than tags and albums. TInt x = aAttributes.Count(); @@ -311,6 +289,7 @@ void CGlxImgVwrMetadataContainer::HandleItemAddedL( TInt /*aStartIndex*/, TInt /*aEndIndex*/, MGlxMediaList* aList ) { + TRACER("CGlxMetadataContainer::HandleItemAddedL()"); if(!iMarquee) { EnableMarqueingL(); @@ -497,7 +476,6 @@ { case EImgVwrNameItem: case EImgVwrDescriptionItem: - { uiUtility->ScreenFurniture()->ModifySoftkeyIdL(CEikButtonGroupContainer::EMiddleSoftkeyPosition, EAknSoftkeyEdit,R_GLX_METADATA_MSK_EDIT); @@ -529,7 +507,7 @@ //----------------------------------------------------------------------------- void CGlxImgVwrMetadataContainer::CreateMediaListForSelectedItemL() { - TRACER("CGlxMetadataContainer::CreateMediaListL"); + TRACER("CGlxMetadataContainer::CreateMediaListForSelectedItemL"); //create the collection path for the medialist to be created CMPXCollectionPath* path = CMPXCollectionPath::NewL(); @@ -722,6 +700,7 @@ // void CGlxImgVwrMetadataContainer::SetDurationLIicenseItemVisibilityL() { + TRACER("CGlxMetadataContainer::SetDurationLIicenseItemVisibilityL()"); //get the media item. const TGlxMedia& item = iItemMediaList->Item(0); const CGlxMedia* media = item.Properties(); @@ -747,6 +726,7 @@ //----------------------------------------------------------------------------- TBool CGlxImgVwrMetadataContainer::IsLicenseItem() { + TRACER("CGlxMetadataContainer::IsLicenseItem()"); //Checks the item for DRMProtection. if((ListBox()->CurrentItemIndex()== EImgVwrlicenseItem)) { diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/viewframework/views/metadatadialog/src/glxmetadatacontainer.cpp --- a/photosgallery/viewframework/views/metadatadialog/src/glxmetadatacontainer.cpp Fri Mar 12 15:42:44 2010 +0200 +++ b/photosgallery/viewframework/views/metadatadialog/src/glxmetadatacontainer.cpp Mon Mar 15 12:40:30 2010 +0200 @@ -959,27 +959,19 @@ iAvkonAppUi->ProcessCommandL(EGlxCmdRenameCompleted); } } - //updation of tags and albums list based on the medialist callback. - if(aList == iTagMediaList || aList == iAlbumMediaList) + + TMPXAttribute titleAttrib(KMPXMediaGeneralTitle); + TIdentityRelation< TMPXAttribute > match ( &TMPXAttribute::Match ); + + if (KErrNotFound != aAttributes.Find(titleAttrib, match)) { - for (TInt i = aAttributes.Count() - 1; i >= 0 ; i--) + if (aList == iTagMediaList) { - TMPXAttribute titleAtrribute (KMPXMediaGeneralTitle); - for (TInt i = aAttributes.Count() - 1; i >= 0 ; i--) - { - if( titleAtrribute == aAttributes[i] ) - { - if(aList == iTagMediaList) - { - UpdateTagsL(); - } - else if(aList == iAlbumMediaList) - { - UpdateAlbumsL(); - } - } - } - + UpdateTagsL(); + } + else if (aList == iAlbumMediaList) + { + UpdateAlbumsL(); } } @@ -1097,6 +1089,18 @@ ListBox()->ItemDrawer()->ColumnData()->SetMarqueeParams (KMarqueeLoopCount, KMarqueeScrollAmount, KMarqueeScrollDelay, KMarqueeScrollInterval); ListBox()->ItemDrawer()->ColumnData()->EnableMarqueeL(ETrue); + + //Fetch the current item index + TInt index = ListBox()->CurrentItemIndex(); + + //Reset the disable marquee flag, so that marquee effect can continue (this is normally reset by + //base class of glxmetaDatadialog::HandlePointerEventL() + ListBox()->ItemDrawer()->ClearFlags(CListItemDrawer::EDisableMarquee); + + //This is the function which actually starts marquee effect. It is anyway being called from base + //implementation of OfferKeyEventL(), but for pointer event, we have to call + //this function + ListBox()->DrawItem(index); } // ---------------------------------------------------------------------------- // HandleCommandCompleteL diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/viewframework/views/metadatadialog/src/glxmetadatadialog.cpp --- a/photosgallery/viewframework/views/metadatadialog/src/glxmetadatadialog.cpp Fri Mar 12 15:42:44 2010 +0200 +++ b/photosgallery/viewframework/views/metadatadialog/src/glxmetadatadialog.cpp Mon Mar 15 12:40:30 2010 +0200 @@ -27,6 +27,7 @@ #include #include #include // For CGlxCommandHandlerAddToContainer +#include // For Kinetic Scrolling //User includes #include @@ -117,6 +118,12 @@ // Instantiate the command handler iMetadataCmdHandler = CGlxMetadataCommandHandler::NewL(this); + //steps to find kinetic scroll threshold value + CAknPhysics* physics = CAknPhysics::NewL(*this, NULL); + CleanupStack::PushL(physics); + iKineticDragThreshold = physics->DragThreshold(); + CleanupStack::PopAndDestroy(physics); + physics = NULL; } // ----------------------------------------------------------------------------- @@ -469,8 +476,49 @@ void CGlxMetadataDialog::HandlePointerEventL( const TPointerEvent& aPointerEvent) { - TRACER("CGlxMetadataDialog::HandlePointerEventL"); - CCoeControl::HandlePointerEventL( aPointerEvent ); + + TRACER("CGlxMetadataDialog::HandlePointerEventL"); + + //This has to be called first, as base class implementation sets the flag + // of settings dialog with EDisableMarquee + CCoeControl::HandlePointerEventL( aPointerEvent ); + + //After the above call we can call our implementation to reset the marque + // flag and start marqueeing if needed + if(aPointerEvent.iType == TPointerEvent::EButton1Down + || aPointerEvent.iType == TPointerEvent::EButton2Down + || aPointerEvent.iType == TPointerEvent::EButton3Down + || aPointerEvent.iType == TPointerEvent::EDrag) + { + if(aPointerEvent.iType != TPointerEvent::EDrag) + { + iViewDragged = EFalse; + } + + if(aPointerEvent.iType == TPointerEvent::EDrag) + { + TInt delta = iPrev.iY - aPointerEvent.iPosition.iY; + //Check for physics threshold, if not more than threshold, we can + //still continue marqueeing + TInt deltaAbs = delta < 0 ? -delta : delta; + if(!iViewDragged && deltaAbs >= iKineticDragThreshold) + iViewDragged = ETrue; + } + + //This has to done at every above mentioned event, since the + //disable marquee flag is set by base implementation, forcing + //us the need to reset it everytime. + if(!iViewDragged) + { + iContainer->EnableMarqueingL(); + } + } + + //record positions unless it is drag event + if(aPointerEvent.iType != TPointerEvent::EDrag) + { + iPrev = aPointerEvent.iPosition; + } } // --------------------------------------------------------------------------- @@ -580,4 +628,20 @@ toolbar->MakeVisible( aVisible ); } } + +void CGlxMetadataDialog::ViewPositionChanged( const TPoint& /*aNewPosition*/, TBool /*aDrawNow*/, TUint /*aFlags*/ ) + { + //Dummy implementation + } + +void CGlxMetadataDialog::PhysicEmulationEnded() + { + //Dummy implementation + } + +TPoint CGlxMetadataDialog::ViewPosition() const + { + //Dummy implementation + return TPoint(0,0); + } // End of File diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/viewframework/views/zoomview/inc/glxzoomcontrol.h --- a/photosgallery/viewframework/views/zoomview/inc/glxzoomcontrol.h Fri Mar 12 15:42:44 2010 +0200 +++ b/photosgallery/viewframework/views/zoomview/inc/glxzoomcontrol.h Mon Mar 15 12:40:30 2010 +0200 @@ -165,14 +165,15 @@ void HandleShowUi(TBool aShow= EFalse) ; - void HandleZoomOutL(TInt aCommandId); + void HandleZoomOutL(TInt aCommandId); + private: /* * Call back function for the CPeriodic */ static TInt TimeOut(TAny* aSelf); void ActivateFullscreen(); - void StartZoomAnimation(); + void StartZoomAnimation(TZoomStartMode aStartMode); private: /** @@ -223,7 +224,12 @@ TBool HandlePointerEventsL(const TAlfEvent &aEvent); TInt GetInitialZoomLevel(TSize& aSize ); - + + /* + * Does the zoom out on pinch released event + */ + void HandleHDMIGestureReleased(); + private: // Data CAlfEnv* iEnv; // AlfEnv MGlxMediaList& iMediaList; // Medialist (not owned) diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/viewframework/views/zoomview/src/glxzoomcontrol.cpp --- a/photosgallery/viewframework/views/zoomview/src/glxzoomcontrol.cpp Fri Mar 12 15:42:44 2010 +0200 +++ b/photosgallery/viewframework/views/zoomview/src/glxzoomcontrol.cpp Mon Mar 15 12:40:30 2010 +0200 @@ -58,7 +58,7 @@ const TReal KGlxOpacityTransparent = 0.0; //zoom delay for animation while hdmi cable, //is connected and zoom is initiated -const TInt KZoomDelay = 150000; +const TInt KHDMIZoomDelay = 250000; //Zoom level for the animation , assuming the innitial level is 1. const TReal KGlxZoomLevel = 1.5; const TInt KGlxMinSmallImageZoomLevel =100; @@ -277,11 +277,8 @@ { TRACER("CGlxZoomControl::ActivateL()"); - //To know if HDMi cable is connected. if ( !iZoomActive ) { - //This Varaiable updates that we are in zoom state now. - iZoomActive = ETrue; //To Retrive the image details TMPXAttribute thumbNailAttribute(0,0); @@ -291,10 +288,9 @@ ScreenSize(),aItem, idspace, this )); iImageVisual->SetImage(*iImageTexture); - if(iGlxTvOut->IsHDMIConnected()&& !aViewingMode ) { - StartZoomAnimation(); + StartZoomAnimation(aStartMode); } else { @@ -347,25 +343,38 @@ } } } + // Now the zoom activation process is complete. + // Now is when truly zoom is active. + iZoomActive = ETrue; } } // --------------------------------------------------------------------------- // StartZoomAnimation // --------------------------------------------------------------------------- // -void CGlxZoomControl::StartZoomAnimation() +void CGlxZoomControl::StartZoomAnimation(TZoomStartMode aStartMode) { TRACER("CGlxZoomControl::StartZoomAnimation()"); iZoomIn = ETrue; //Set zoom visible but not enable the gesturehelper events - iViewPort->SetOpacity(KGlxOpacityOpaque); + iViewPort->SetOpacity(KGlxOpacityOpaque); TAlfTimedValue timedvalue; //using KGlxOpacityOpaque for the value 1 , assuming the initial zoom level as 1. timedvalue.SetValueNow(KGlxOpacityOpaque); - timedvalue.SetTarget(KGlxZoomLevel,KZoomDelay/1000); + timedvalue.SetTarget(KGlxZoomLevel,KHDMIZoomDelay/1000); iImageVisual->SetScale(timedvalue); - iTimer->Cancel(); - iTimer->Start(KZoomDelay,KZoomDelay,TCallBack( TimeOut,this )); + + //If zoom is not done using pinch, zoom out with the rubber effect + //Else wait for the gesture helper event for zooming out. + if(aStartMode != EZoomStartPinch) + { + iTimer->Cancel(); + iTimer->Start(KHDMIZoomDelay,KHDMIZoomDelay,TCallBack( TimeOut,this )); + } + else + { + iGestureHelper->AddObserver(this); + } } // --------------------------------------------------------------------------- // TimeOut @@ -393,7 +402,7 @@ iZoomIn = EFalse; TAlfTimedValue timedvalue; timedvalue.SetValueNow(KGlxZoomLevel); - timedvalue.SetTarget(KGlxOpacityOpaque,KZoomDelay/1000); + timedvalue.SetTarget(KGlxOpacityOpaque,KHDMIZoomDelay/1000); iImageVisual->SetScale(timedvalue); } else @@ -590,6 +599,12 @@ { TRACER("CGlxZoomControl::VisualLayoutUpdated "); // Callback comes to this function when there is a resolution change + + if(iGlxTvOut->IsHDMIConnected()) + { + return; + } + TRect rect; rect = AlfUtil::ScreenSize(); if ( (rect.Width() != iScreenSize.iWidth) && ( rect.Height() != iScreenSize.iHeight) && (Activated()) ) @@ -809,6 +824,22 @@ // ----------------------------------------------------------------------------- +// HandleHDMIGestureReleased +// ----------------------------------------------------------------------------- +// +void CGlxZoomControl::HandleHDMIGestureReleased() + { + TRACER("void CGlxZoomControl::HandlePinchReleased"); + if ( iGlxTvOut->IsHDMIConnected() && iZoomActive) + { + //On HDMI pinch release, zoom out to fullscreen + GLX_LOG_INFO("_PHOTOS_LOG_: void CGlxZoomControl::HandlePinchReleased Start ZoomOut"); + iTimer->Cancel(); + iTimer->Start(KHDMIZoomDelay,KHDMIZoomDelay,TCallBack( TimeOut,this )); + } + } + +// ----------------------------------------------------------------------------- // HandlePointerEventsL // ----------------------------------------------------------------------------- // @@ -830,21 +861,41 @@ TGestureCode code = aEvent.Code(MGestureEvent::EAxisBoth); GLX_LOG_INFO1("_PHOTOS_LOG_: void CGlxZoomControl::HandleGestureL Code : %d", code); - - // Todo: This switch should go into the event handler. + + //In HDMI pinch mode we will handle only released gesture + //to zoom out the image to fullscreeen. + if( iGlxTvOut->IsHDMIConnected() ) + { + if(code == EGestureReleased) + { + HandleHDMIGestureReleased(); + } + } + else + { + // Todo: This switch should go into the event handler. switch (code) { case EGestureDrag: + if (aEvent.Visual() == iImageVisual) + { iEventHandler->HandleDragEvent(aEvent); + } break; case EGestureTap: + if (aEvent.Visual() == iImageVisual) + { iEventHandler->HandleSingleTap(aEvent); + } break; case EGesturePinch: iEventHandler->HandlePinchEventL(aEvent); break; case EGestureDoubleTap: + if (aEvent.Visual() == iImageVisual) + { iEventHandler->HandleDoubleTap(aEvent); + } break; case EGestureReleased: iEventHandler->HandleGestureReleased(aEvent); @@ -852,6 +903,7 @@ default : break; } + } iEventHandler->SetPreviousEventCode(code); } diff -r 71da52165949 -r ce1c7ad1f18b photosgallery/viewframework/visuallistmanager/src/glxitemvisual.cpp --- a/photosgallery/viewframework/visuallistmanager/src/glxitemvisual.cpp Fri Mar 12 15:42:44 2010 +0200 +++ b/photosgallery/viewframework/visuallistmanager/src/glxitemvisual.cpp Mon Mar 15 12:40:30 2010 +0200 @@ -390,7 +390,8 @@ { // create the animated texture from the URI CAlfTexture& animTexture = - iUiUtility->GlxTextureManager().CreateAnimatedGifTextureL( uri, mediaItemSize ); + iUiUtility->GlxTextureManager().CreateAnimatedGifTextureL( uri, mediaItemSize, + aItem, aItem.IdSpaceId()); StartAnimation( animTexture ); } SetAnimateWhenAttributesAvailable(EFalse);