Catchup to latest Symbian^4 GCC_SURGE
authorWilliam Roberts <williamr@symbian.org>
Thu, 22 Jul 2010 16:33:32 +0100
branchGCC_SURGE
changeset 51 525c140ec8db
parent 38 c9962d0368d9 (current diff)
parent 49 f291796e213d (diff)
Catchup to latest Symbian^4
conf/slideshowsettings.confml
conf/slideshowsettings_20007194.crml
data/fullscreen.docml
data/qgn_menu_ovi_photos.svg
data/slideshow.docml
data/transitionrotate0.fxml
data/transitionrotate180.fxml
data/transitionrotate270.fxml
data/transitionrotate90.fxml
gallery/sis/createsis_udeb.bat
gallery/sis/glxgallery.pkg
gallery/sis/glxgallery.sis
gallery/sis/glxgallery.sisx
gallery/sis/glxgallery_stub.mk
gallery/sis/glxgallery_stub.pkg
gallery/sis/glxgallery_stub.sis
gallery/sis/glxgallery_udeb.pkg
gallery/sis/photosqt_stub.pkg
gallery/sis/photosqt_stub.sis
tvout/tvoutengine/rom/glxtvout.iby
ui/views/detailsview/inc/glxdetailscustomwidgets.h
ui/views/effectengine/effectplugin/inc/glxbackwardtransitionplugin.h
ui/views/effectengine/effectplugin/inc/glxeffectpluginbase.h
ui/views/effectengine/effectplugin/inc/glxfadeplugin.h
ui/views/effectengine/effectplugin/inc/glxforwardtransitionplugin.h
ui/views/effectengine/effectplugin/src/glxbackwardtransitionplugin.cpp
ui/views/effectengine/effectplugin/src/glxfadeplugin.cpp
ui/views/effectengine/effectplugin/src/glxforwardtransitionplugin.cpp
ui/views/effectengine/inc/glxeffectengine.h
ui/views/effectengine/src/glxeffectengine.cpp
ui/views/fullscreenview/inc/glxzoomcontrol.h
ui/views/fullscreenview/inc/glxzoomslider.h
ui/views/fullscreenview/src/glxzoomcontrol.cpp
ui/views/fullscreenview/src/glxzoomslider.cpp
--- a/commonui/group/glxcommonui.mmp	Wed Jun 16 13:08:54 2010 +0100
+++ b/commonui/group/glxcommonui.mmp	Thu Jul 22 16:33:32 2010 +0100
@@ -64,6 +64,7 @@
 LIBRARY			cfservices.lib // for CCFContextObject
 #endif
 
+SMPSAFE
 //EXPORTUNFROZEN
 
 // End of file
--- a/commonui/test/group/t_glxresolutionutilitiy.mmp	Wed Jun 16 13:08:54 2010 +0100
+++ b/commonui/test/group/t_glxresolutionutilitiy.mmp	Thu Jul 22 16:33:32 2010 +0100
@@ -65,5 +65,5 @@
 #ifndef WINSCW
 EPOCALLOWDLLDATA
 #endif
-
+SMPSAFE
 // End of file
--- a/commonui/test/group/t_glxzoomstatepublisher.mmp	Wed Jun 16 13:08:54 2010 +0100
+++ b/commonui/test/group/t_glxzoomstatepublisher.mmp	Thu Jul 22 16:33:32 2010 +0100
@@ -61,4 +61,5 @@
 LIBRARY                 cfservices.lib // for CCFContextObject
 
 EXPORTUNFROZEN
+SMPSAFE
 // End of file
--- a/commonutilities/bwins/glximagedecoderwrapperu.def	Wed Jun 16 13:08:54 2010 +0100
+++ b/commonutilities/bwins/glximagedecoderwrapperu.def	Thu Jul 22 16:33:32 2010 +0100
@@ -6,9 +6,9 @@
 	??_EGlxImageDecoderWrapper@@UAE@I@Z @ 5 NONAME ; GlxImageDecoderWrapper::~GlxImageDecoderWrapper(unsigned int)
 	?tr@GlxImageDecoderWrapper@@SA?AVQString@@PBD0@Z @ 6 NONAME ; class QString GlxImageDecoderWrapper::tr(char const *, char const *)
 	?qt_metacast@GlxImageDecoderWrapper@@UAEPAXPBD@Z @ 7 NONAME ; void * GlxImageDecoderWrapper::qt_metacast(char const *)
-	?decodeImage@GlxImageDecoderWrapper@@QAEXVQString@@@Z @ 8 NONAME ; void GlxImageDecoderWrapper::decodeImage(class QString)
-	?getStaticMetaObject@GlxImageDecoderWrapper@@SAABUQMetaObject@@XZ @ 9 NONAME ; struct QMetaObject const & GlxImageDecoderWrapper::getStaticMetaObject(void)
-	??1GlxImageDecoderWrapper@@UAE@XZ @ 10 NONAME ; GlxImageDecoderWrapper::~GlxImageDecoderWrapper(void)
+	?getStaticMetaObject@GlxImageDecoderWrapper@@SAABUQMetaObject@@XZ @ 8 NONAME ; struct QMetaObject const & GlxImageDecoderWrapper::getStaticMetaObject(void)
+	??1GlxImageDecoderWrapper@@UAE@XZ @ 9 NONAME ; GlxImageDecoderWrapper::~GlxImageDecoderWrapper(void)
+	?decodeImage@GlxImageDecoderWrapper@@QAE?AVQSizeF@@VQString@@@Z @ 10 NONAME ; class QSizeF GlxImageDecoderWrapper::decodeImage(class QString)
 	?pixmapDecoded@GlxImageDecoderWrapper@@IAEXXZ @ 11 NONAME ; void GlxImageDecoderWrapper::pixmapDecoded(void)
 	?staticMetaObject@GlxImageDecoderWrapper@@2UQMetaObject@@B @ 12 NONAME ; struct QMetaObject const GlxImageDecoderWrapper::staticMetaObject
 	?getPixmap@GlxImageDecoderWrapper@@QAE?AVQPixmap@@XZ @ 13 NONAME ; class QPixmap GlxImageDecoderWrapper::getPixmap(void)
--- a/commonutilities/common/bwins/glxcommonu.def	Wed Jun 16 13:08:54 2010 +0100
+++ b/commonutilities/common/bwins/glxcommonu.def	Thu Jul 22 16:33:32 2010 +0100
@@ -44,4 +44,6 @@
 	?ThumbnailCleanupCommandLC@TGlxCommandFactory@@SAPAVCMPXMedia@@XZ @ 43 NONAME ; class CMPXMedia * TGlxCommandFactory::ThumbnailCleanupCommandLC(void)
 	?CreatePreviewFilterL@TGlxFilterFactory@@SAPAVCMPXMedia@@XZ @ 44 NONAME ; class CMPXMedia * TGlxFilterFactory::CreatePreviewFilterL(void)
 	?CreateCameraAlbumExclusionFilterL@TGlxFilterFactory@@SAPAVCMPXMedia@@XZ @ 45 NONAME ; class CMPXMedia * TGlxFilterFactory::CreateCameraAlbumExclusionFilterL(void)
+	?NewL@CGlxTNMonitor@@SAPAV1@PAVMGlxTNObserver@@@Z @ 46 NONAME ; class CGlxTNMonitor * CGlxTNMonitor::NewL(class MGlxTNObserver *)
+	?CreateExcludeDrmImageTypeFilterL@TGlxFilterFactory@@SAPAVCMPXMedia@@W4TGlxFilterItemType@@@Z @ 47 NONAME ; class CMPXMedia * TGlxFilterFactory::CreateExcludeDrmImageTypeFilterL(enum TGlxFilterItemType)
 
Binary file commonutilities/common/cenrep/20007193.txt has changed
Binary file commonutilities/common/cenrep/20007194.txt has changed
--- a/commonutilities/common/eabi/glxcommonu.def	Wed Jun 16 13:08:54 2010 +0100
+++ b/commonutilities/common/eabi/glxcommonu.def	Thu Jul 22 16:33:32 2010 +0100
@@ -45,4 +45,8 @@
 	_ZN18TGlxCommandFactory28RemoveFromContainerCommandLCERK18CMPXCollectionPath @ 44 NONAME
 	_ZN21CGlxResourceUtilities20GetResourceFilenameLER4TBufILi256EE @ 45 NONAME
 	_ZN21CGlxResourceUtilities20GetResourceFilenameLER4TBufILi256EER3RFs @ 46 NONAME
+	_ZN13CGlxTNMonitor4NewLEP14MGlxTNObserver @ 47 NONAME
+	_ZTI13CGlxTNMonitor @ 48 NONAME
+	_ZTV13CGlxTNMonitor @ 49 NONAME
+	_ZN17TGlxFilterFactory32CreateExcludeDrmImageTypeFilterLE18TGlxFilterItemType @ 50 NONAME
 
--- a/commonutilities/common/group/bld.inf	Wed Jun 16 13:08:54 2010 +0100
+++ b/commonutilities/common/group/bld.inf	Thu Jul 22 16:33:32 2010 +0100
@@ -45,10 +45,10 @@
 	../cenrep/200009EE_orientation_portrait_landscape.txt   /epoc32/data/z/private/10202be9/200009EE.txt
 	// for emulator
 	../cenrep/200009EE_orientation_portrait_landscape.txt   /epoc32/release/winscw/udeb/z/private/10202be9/200009EE.txt
-	//slideshow settings cenrep initialisation file
-	../cenrep/20007194.txt   /epoc32/data/z/private/10202be9/20007194.txt
-	../cenrep/20007194.txt   /epoc32/release/winscw/udeb/z/private/10202be9/20007194.txt
-	../cenrep/20007194.txt   /epoc32/release/winscw/urel/z/private/10202be9/20007194.txt	
+	//photos & ci_photos cenrep initialisation file
+	../cenrep/20007194.txt   z:/private/10202be9/20007194.txt
+	../cenrep/20007193.txt   z:/private/10202be9/20007193.txt
+	
 	
 #endif
 
@@ -56,8 +56,14 @@
 ../../../conf/gallery.confml                        CONFML_EXPORT_PATH(gallery.confml,customsw)
 ../../../conf/gallery_200009EE.crml	        CRML_EXPORT_PATH(gallery_200009EE.crml,customsw)
 
-../../../conf/slideshowsettings.confml                        CONFML_EXPORT_PATH(slideshowsettings.confml,customsw)
-../../../conf/slideshowsettings_20007194.crml	        CRML_EXPORT_PATH(slideshowsettings_20007194.crml,customsw)
+../../../conf/photos.confml                        CONFML_EXPORT_PATH(photos.confml,customsw)
+../../../conf/photos_20007194.crml	        CRML_EXPORT_PATH(photos_20007194.crml,customsw)
+
+../../../conf/ci_photos.confml                        CONFML_EXPORT_PATH(ci_photos.confml,customsw)
+../../../conf/ci_photos_20007193.crml	        CRML_EXPORT_PATH(ci_photos_20007193.crml,customsw)
+
+../../../data/photos.docml		z:/resource/hb/splashml/photos.docml
+../../../data/photos.splashml	z:/resource/hb/splashml/photos.splashml
 PRJ_MMPFILES
 glxcommon.mmp
 
--- a/commonutilities/common/group/glxcommon.mmp	Wed Jun 16 13:08:54 2010 +0100
+++ b/commonutilities/common/group/glxcommon.mmp	Thu Jul 22 16:33:32 2010 +0100
@@ -48,6 +48,7 @@
 SOURCE          glxresourceutilities.cpp
 SOURCE          glxsettingsmodel.cpp
 SOURCE          glxsingletonstore.cpp
+SOURCE          glxtnmonitor.cpp
 
 LIBRARY         bafl.lib
 LIBRARY         centralrepository.lib
@@ -59,4 +60,5 @@
 LIBRARY         mpxcommon.lib
 LIBRARY         flogger.lib
 
+SMPSAFE
 // End of file
--- a/commonutilities/common/inc/glxfilterfactory.h	Wed Jun 16 13:08:54 2010 +0100
+++ b/commonutilities/common/inc/glxfilterfactory.h	Thu Jul 22 16:33:32 2010 +0100
@@ -54,7 +54,14 @@
     * @return a filter object with array elements set specifying the filter type (Images or Video)
     */
     IMPORT_C static CMPXFilter* CreateItemTypeFilterL(TGlxFilterItemType aItemType);
-
+    /**
+    * Creates a URI filter, Used to specify 1 particular item (no wild cards allowed).
+    *
+    * @param TGlxMediaGeneralCategory ( EMPXImage )
+    * @return a filter object with array non drm images
+    */
+	IMPORT_C static CMPXFilter* TGlxFilterFactory::CreateExcludeDrmImageTypeFilterL(TGlxFilterItemType aFilterType);
+	
     /**
     * Creates a URI filter, Used to specify 1 particular item (no wild cards allowed).
     *
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/commonutilities/common/inc/glxtnmonitor.h	Thu Jul 22 16:33:32 2010 +0100
@@ -0,0 +1,99 @@
+/*
+* ============================================================================
+*  Name        : glxscreensavermonitor.h
+*  Part of     : GLX / Collection Data Source Framework
+*  Description : 
+*  Version     :%version:  1 %
+*  Copyright © 2006-2007 Nokia.  All rights reserved.
+*  This material, including documentation and any related computer
+*  programs, is protected by copyright controlled by Nokia.  All
+*  rights are reserved.  Copying, including reproducing, storing,
+*  adapting or translating, any or all of this material requires the
+*  prior written consent of Nokia.  This material also contains
+*  confidential information which may not be disclosed to others
+*  without the prior written consent of Nokia.
+* ============================================================================
+*/
+
+#ifndef PLUGINSCREENSAVERMONITORAO_H_
+#define PLUGINSCREENSAVERMONITORAO_H_
+
+#include <e32base.h>
+#include <e32property.h>
+
+class MGlxTNObserver
+{
+public :
+    /*
+     * Constructor
+     */
+    MGlxTNObserver() {}
+    /*
+     * Call back to get the number is left to create.
+     */
+    virtual void updateTNCount(int & count) = 0;
+    /*
+     * Destructor
+     */
+    virtual ~MGlxTNObserver() {}    
+};
+
+
+/**
+* Class for monitoring harvester pause.
+*/
+class CGlxTNMonitor: public CActive
+{
+    public:
+        /** Construction */
+    	IMPORT_C static CGlxTNMonitor* NewL( MGlxTNObserver *observer );
+
+        /**
+         * Destructor - virtual and class not intended
+         * for derivation, so not exported.
+         */
+    	virtual ~CGlxTNMonitor();
+
+    protected:
+
+    	/**
+    	 * RunL
+    	 * From CActive.
+    	 */
+        virtual void RunL();
+
+    	/**
+    	 * DoCancel
+    	 * From CActive.
+    	 */
+        virtual void DoCancel();
+
+    	/**
+    	 * RunError. Error handler in case RunL() leaves.
+    	 * From CActive.
+    	 * @param aError  Leave code from RunL.
+    	 * @return  Error code. KErrNone if error was handled.
+    	 */
+        virtual TInt RunError( TInt aError );
+        
+    private:
+        /**
+         * constructor
+         */
+        CGlxTNMonitor( MGlxTNObserver *observer );
+
+        /**
+         * 2nd phase construction.
+         */    
+        void ConstructL();
+
+    private:
+        RProperty iScreenSaverProperty;
+//		TTime iStartTime;
+//		TTime iStopTime;
+		MGlxTNObserver *iObserver;
+};
+
+	
+#endif
+
--- a/commonutilities/common/src/glxfilterfactory.cpp	Wed Jun 16 13:08:54 2010 +0100
+++ b/commonutilities/common/src/glxfilterfactory.cpp	Thu Jul 22 16:33:32 2010 +0100
@@ -29,7 +29,19 @@
     filterProperties.iItemType = aItemType;
     return CreateCombinedFilterL(filterProperties);
     }
-    
+
+// ---------------------------------------------------------------------------
+// Creates a eclude drm image filter object
+// ---------------------------------------------------------------------------
+//   
+EXPORT_C CMPXFilter* TGlxFilterFactory::CreateExcludeDrmImageTypeFilterL(TGlxFilterItemType aFilterType)
+    {
+    TGlxFilterProperties filterProperties;
+	filterProperties.iItemType = EGlxFilterImage;
+	filterProperties.iNoDRM = ETrue;
+    return CreateCombinedFilterL(filterProperties);
+    }
+
 // ---------------------------------------------------------------------------
 // Creates a URI filter object
 // ---------------------------------------------------------------------------
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/commonutilities/common/src/glxtnmonitor.cpp	Thu Jul 22 16:33:32 2010 +0100
@@ -0,0 +1,105 @@
+/*
+* ============================================================================
+*  Name        : glxscreensavermonitor.cpp
+*  Part of     : GLX / Collection Data Source Framework
+*  Description : 
+*  Version     : %version:  1 % 
+*
+*  Copyright © 2006-2007 Nokia.  All rights reserved.
+*  This material, including documentation and any related computer
+*  programs, is protected by copyright controlled by Nokia.  All
+*  rights are reserved.  Copying, including reproducing, storing,
+*  adapting or translating, any or all of this material requires the
+*  prior written consent of Nokia.  This material also contains
+*  confidential information which may not be disclosed to others
+*  without the prior written consent of Nokia.
+* ============================================================================
+*/
+
+#include "glxtnmonitor.h"
+#include <glxlog.h>
+
+//#include <ScreenSaverInternalPSKeys.h>
+#include <e32debug.h>
+
+const TUid KTAGDPSNotification = { 0x2001FD51 };
+//const TInt KForceBackgroundGeneration = 0x00000010;
+const TInt KItemsleft = 0x00000008;
+
+CGlxTNMonitor::CGlxTNMonitor( MGlxTNObserver *observer )
+: CActive( CActive::EPriorityHigh ),
+  iObserver( observer )
+{    
+}
+
+// ---------------------------------------------------------------------------
+// ~CGlxPauseMonitor.
+// Destructor.
+// ---------------------------------------------------------------------------
+//
+CGlxTNMonitor::~CGlxTNMonitor()
+{
+	Cancel();
+	iScreenSaverProperty.Close();
+}
+
+// ---------------------------------------------------------------------------
+// NewL
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CGlxTNMonitor* CGlxTNMonitor::NewL( MGlxTNObserver *observer  )
+{
+    //GLX_LOG_ENTRY_EXIT("CGlxTNMonitor::NewL");    
+    CGlxTNMonitor* self = new (ELeave) CGlxTNMonitor( observer );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+}
+
+// ---------------------------------------------------------------------------
+// ConstructL.
+// Second-phase constructor.
+// ---------------------------------------------------------------------------
+//
+void CGlxTNMonitor::ConstructL()
+{
+    iScreenSaverProperty.Attach( KTAGDPSNotification, KItemsleft );
+	CActiveScheduler::Add( this );
+    RunL();
+}
+
+void CGlxTNMonitor::RunL()
+{	
+	GLX_LOG_ENTRY_EXIT("CGlxTNMonitor::RunL");    
+    // resubscribe before processing new value to prevent missing updates
+	iScreenSaverProperty.Subscribe( iStatus );
+    SetActive();
+	//User::WaitForRequest(iStatus);
+    TInt intValue;
+	TInt err = iScreenSaverProperty.Get( intValue ) ;
+	if ( err != KErrNotFound ){
+	    iObserver->updateTNCount( intValue );
+	}
+}
+    
+// ---------------------------------------------------------------------------
+// DoCancel
+// ---------------------------------------------------------------------------
+//
+void CGlxTNMonitor::DoCancel()
+{
+	iScreenSaverProperty.Cancel();
+}
+
+// ---------------------------------------------------------------------------
+// RunError
+// ---------------------------------------------------------------------------
+//
+TInt CGlxTNMonitor::RunError( TInt )
+{
+    GLX_LOG_ENTRY_EXIT("CGlxTNMonitor::RunError");       
+    return KErrNone;
+}
+
+
--- a/commonutilities/common/test/group/T_CGlxSettingsModel.mmp	Wed Jun 16 13:08:54 2010 +0100
+++ b/commonutilities/common/test/group/T_CGlxSettingsModel.mmp	Thu Jul 22 16:33:32 2010 +0100
@@ -43,5 +43,5 @@
 LIBRARY                 centralrepository.lib       // For central repository
 LIBRARY                 eunit.lib
 LIBRARY                 euser.lib
-
+SMPSAFE
 // End of file
--- a/commonutilities/common/test/group/t_tcommandfactory.mmp	Wed Jun 16 13:08:54 2010 +0100
+++ b/commonutilities/common/test/group/t_tcommandfactory.mmp	Thu Jul 22 16:33:32 2010 +0100
@@ -58,5 +58,5 @@
 LIBRARY                 ecom.lib
 LIBRARY                 lbs.lib
 LIBRARY                 mpxcommon.lib
-
+SMPSAFE
 // End of file
--- a/commonutilities/common/test/group/t_tcommandparser.mmp	Wed Jun 16 13:08:54 2010 +0100
+++ b/commonutilities/common/test/group/t_tcommandparser.mmp	Thu Jul 22 16:33:32 2010 +0100
@@ -57,5 +57,5 @@
 LIBRARY                 ecom.lib
 LIBRARY                 lbs.lib
 LIBRARY                 mpxcommon.lib
-
+SMPSAFE
 // End of file
--- a/commonutilities/common/test/group/ut_cglxsingletonstore.mmp	Wed Jun 16 13:08:54 2010 +0100
+++ b/commonutilities/common/test/group/ut_cglxsingletonstore.mmp	Thu Jul 22 16:33:32 2010 +0100
@@ -48,5 +48,5 @@
 LIBRARY                 euser.lib
 LIBRARY                 lbs.lib
 LIBRARY                 mpxcommon.lib
-
+SMPSAFE
 // End of file
--- a/commonutilities/externalutility/externalutility.pro	Wed Jun 16 13:08:54 2010 +0100
+++ b/commonutilities/externalutility/externalutility.pro	Thu Jul 22 16:33:32 2010 +0100
@@ -26,7 +26,8 @@
 INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
 TARGET.UID3 = 0x20007192
 TARGET.EPOCALLOWDLLDATA = 1
-TARGET.CAPABILITY = ALL -TCB 
+TARGET.CAPABILITY = ALL -TCB
+MMP_RULES += SMPSAFE  
 }
 exportfile = "inc/glxexternalutility.h APP_LAYER_PLATFORM_EXPORT_PATH(glxexternalutility.h)"
 BLD_INF_RULES.prj_exports += exportfile
@@ -35,4 +36,12 @@
 HEADERS += inc/glxexternalutility.h 
 SOURCES += src/glxexternalutility.cpp
 
-DEFINES += QT_NO_DEBUG_OUTPUT QT_NO_WARNING_OUTPUT
\ No newline at end of file
+DEFINES += QT_NO_DEBUG_OUTPUT QT_NO_WARNING_OUTPUT
+defBlock = \      
+"$${LITERAL_HASH}if defined(EABI)" \
+"DEFFILE  ../eabi/glxexternalutility.def" \
+	 "$${LITERAL_HASH}else" \
+	 "DEFFILE  ../bwins/glxexternalutility.def" \
+             "$${LITERAL_HASH}endif"
+	
+MMP_RULES += defBlock
--- a/commonutilities/imagedecoderwrapper/imagedecoderwrapper.pro	Wed Jun 16 13:08:54 2010 +0100
+++ b/commonutilities/imagedecoderwrapper/imagedecoderwrapper.pro	Thu Jul 22 16:33:32 2010 +0100
@@ -25,7 +25,8 @@
 LIBS += -limageconversion.dll \
 	-lbitmaptransforms.dll \
 	-liclextjpegapi.dll \
-	-lfbscli.dll
+	-lfbscli.dll \
+	-lefsrv.dll
 
 DEFINES += BUILD_IMAGEWRAPPER
 symbian: { 
@@ -33,6 +34,7 @@
 TARGET.UID3 = 0x2000718D 
 TARGET.CAPABILITY = ALL -TCB
 TARGET.EPOCALLOWDLLDATA = 1
+MMP_RULES += SMPSAFE 
 }
 
 
@@ -40,4 +42,13 @@
 HEADERS += inc/glximagedecoder.h inc/glximagedecoderwrapper.h
 SOURCES += src/glximagedecoder.cpp src/glximagedecoderwrapper.cpp
 
-DEFINES += QT_NO_DEBUG_OUTPUT QT_NO_WARNING_OUTPUT
\ No newline at end of file
+DEFINES += QT_NO_DEBUG_OUTPUT QT_NO_WARNING_OUTPUT
+
+defBlock = \      
+"$${LITERAL_HASH}if defined(EABI)" \
+"DEFFILE  ../eabi/glximagedecoderwrapper.def" \
+	 "$${LITERAL_HASH}else" \
+	 "DEFFILE  ../bwins/glximagedecoderwrapper.def" \
+             "$${LITERAL_HASH}endif"
+	
+MMP_RULES += defBlock
--- a/commonutilities/imagedecoderwrapper/inc/glximagedecoder.h	Wed Jun 16 13:08:54 2010 +0100
+++ b/commonutilities/imagedecoderwrapper/inc/glximagedecoder.h	Thu Jul 22 16:33:32 2010 +0100
@@ -25,13 +25,13 @@
 class GlxImageDecoderWrapper;
 class CImageDecoder;
 class CFbsBitmap;
-
+const TReal KTargetSize = 1000000;
 class CGlxImageDecoder : public CActive
 {
 public:
 	static CGlxImageDecoder* NewL(GlxImageDecoderWrapper* decoderWrapper);
 	~CGlxImageDecoder();
-    void DecodeImageL(QString aSourceFileName);
+    QSizeF DecodeImageL(QString aSourceFileName);
 	QPixmap GetPixmap();
 	void ResetDecoder();
 public:    
--- a/commonutilities/imagedecoderwrapper/inc/glximagedecoderwrapper.h	Wed Jun 16 13:08:54 2010 +0100
+++ b/commonutilities/imagedecoderwrapper/inc/glximagedecoderwrapper.h	Thu Jul 22 16:33:32 2010 +0100
@@ -35,7 +35,7 @@
 	*/
 	GlxImageDecoderWrapper();
 	~GlxImageDecoderWrapper();
-	void decodeImage(QString sourcePath);
+	QSizeF decodeImage(QString sourcePath);
 	QPixmap getPixmap();
 	void resetDecoder();
 	void decodedImageAvailable();
--- a/commonutilities/imagedecoderwrapper/src/glximagedecoder.cpp	Wed Jun 16 13:08:54 2010 +0100
+++ b/commonutilities/imagedecoderwrapper/src/glximagedecoder.cpp	Thu Jul 22 16:33:32 2010 +0100
@@ -21,6 +21,7 @@
 #include <bitmaptransforms.h>
 #include <imageconversion.h>
 #include <IclExtJpegApi.h>  // For CExtJpegDecoder
+#include <e32math.h>
 
 
 // ---------------------------------------------------------------------------
@@ -78,7 +79,7 @@
 // ---------------------------------------------------------------------------
 // DoDecodeImageL
 // ---------------------------------------------------------------------------	
-void CGlxImageDecoder::DecodeImageL(QString aSourceFileName)
+QSizeF CGlxImageDecoder::DecodeImageL(QString aSourceFileName)
 {
 	//convert the argument to Symbian Format
 	TPtrC16 sourceFileName(reinterpret_cast<const TUint16*>(aSourceFileName.utf16()));
@@ -88,20 +89,33 @@
         delete iImageDecoder;
         iImageDecoder = NULL;
         }
-	/*TRAPD( err, iImageDecoder = CExtJpegDecoder::FileNewL(
-            CExtJpegDecoder::EHwImplementation, iFs, sourceFileName, CImageDecoder::EOptionNone ) );
+	TRAPD( err, iImageDecoder = CExtJpegDecoder::FileNewL(
+            CExtJpegDecoder::EHwImplementation, iFs, sourceFileName, CImageDecoder::EOptionAutoRotate ) );
     if ( KErrNone != err )
         {
         TRAP(err,iImageDecoder = CExtJpegDecoder::FileNewL(
-                CExtJpegDecoder::ESwImplementation, iFs, sourceFileName, CImageDecoder::EOptionNone ) );
+                CExtJpegDecoder::ESwImplementation, iFs, sourceFileName, CImageDecoder::EOptionAutoRotate ) );
         if ( KErrNone != err )
             {
             // Not a JPEG - use standard decoder
-            iImageDecoder = CImageDecoder::FileNewL( iFs, sourceFileName, CImageDecoder::EOptionNone );
+            iImageDecoder = CImageDecoder::FileNewL( iFs, sourceFileName, CImageDecoder::EOptionAutoRotate );
             }
-        }*/
-	iImageDecoder = CImageDecoder::FileNewL( iFs, sourceFileName, CImageDecoder::EOptionNone );
+        }
 	TSize imageSize = iImageDecoder->FrameInfo().iOverallSizeInPixels;
+	//limit size to 1MP
+	TSize decodeSize = imageSize;
+	TReal pixelsInImage = imageSize.iWidth*imageSize.iHeight;
+	if(pixelsInImage > KTargetSize)
+	{
+		TReal compressionFactor = 1;
+		TInt err = Math::Sqrt(compressionFactor, (KTargetSize/pixelsInImage) );
+		if(err != KErrNone) 
+		{
+			compressionFactor = .1;
+		}
+
+		decodeSize = TSize(imageSize.iWidth * compressionFactor, imageSize.iHeight * compressionFactor);
+	}
 	//clear the existing Bitmap
 	if(iBitmap)
 	{
@@ -112,10 +126,11 @@
     if(!iBitmap)
         {
         iBitmap = new (ELeave) CFbsBitmap();
-        iBitmap->Create( imageSize,EColor64K);
+        iBitmap->Create( decodeSize,EColor64K);
         iImageDecoder->Convert( &iStatus, *iBitmap );
 		SetActive();
 		}
+	return QSizeF(decodeSize.iWidth,decodeSize.iHeight) ;
 }
 // ---------------------------------------------------------------------------
 // RunL
@@ -126,10 +141,10 @@
     if( iStatus == KErrNone )
         {   
         iDecoderWrapper->decodedImageAvailable();
-        delete iImageDecoder;
-        iImageDecoder = NULL;
-		iFs.Close();
         }	
+     delete iImageDecoder;
+     iImageDecoder = NULL;
+     iFs.Close();
     }
 
 // ---------------------------------------------------------------------------
--- a/commonutilities/imagedecoderwrapper/src/glximagedecoderwrapper.cpp	Wed Jun 16 13:08:54 2010 +0100
+++ b/commonutilities/imagedecoderwrapper/src/glximagedecoderwrapper.cpp	Thu Jul 22 16:33:32 2010 +0100
@@ -43,9 +43,9 @@
 // decodeImage.
 // ---------------------------------------------------------------------------
 //
-void GlxImageDecoderWrapper::decodeImage(QString sourcePath)
+QSizeF GlxImageDecoderWrapper::decodeImage(QString sourcePath)
 {
-	imageDecoder->DecodeImageL(sourcePath);
+	return imageDecoder->DecodeImageL(sourcePath);
 }
 
 QPixmap GlxImageDecoderWrapper::getPixmap()
--- a/commonutilities/imageviewer/group/glximageviewermanager.mmp	Wed Jun 16 13:08:54 2010 +0100
+++ b/commonutilities/imageviewer/group/glximageviewermanager.mmp	Thu Jul 22 16:33:32 2010 +0100
@@ -43,4 +43,6 @@
 LIBRARY                 flogger.lib         // For Logging Tracer
 LIBRARY                 glxcommon.lib       // CGlxSingetonStore
 
+SMPSAFE
+
 //EXPORTUNFROZEN
\ No newline at end of file
Binary file conf/ci_photos.confml has changed
Binary file conf/ci_photos_20007193.crml has changed
Binary file conf/photos.confml has changed
Binary file conf/photos_20007194.crml has changed
Binary file conf/slideshowsettings.confml has changed
Binary file conf/slideshowsettings_20007194.crml has changed
Binary file data/Image1.jpg has changed
Binary file data/Image10.jpg has changed
Binary file data/Image2.jpg has changed
Binary file data/Image3.jpg has changed
Binary file data/Image4.jpg has changed
Binary file data/Image5.jpg has changed
Binary file data/Image6.jpg has changed
Binary file data/Image7.jpg has changed
Binary file data/Image8.jpg has changed
Binary file data/Image9.jpg has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/data/detailsview.docml	Thu Jul 22 16:33:32 2010 +0100
@@ -0,0 +1,326 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<hbdocument version="1.1">
+    <widget name="view" type="HbView">
+        <widget name="content" role="HbView:widget" type="HbWidget">
+            <widget name="MainWidget" type="HbWidget">
+                <widget name="ImageIcon" type="HbLabel">
+                    <enums name="alignment" value="AlignVCenter|AlignHCenter"/>
+                    <icon iconName="qtg_small_smiley_very_cool" name="icon"/>
+                    <sizepolicy horizontalPolicy="Preferred" horizontalStretch="0" verticalPolicy="Fixed" verticalStretch="0"/>
+                    <sizehint height="31.95un" type="PREFERRED" width="31.95un"/>
+                    <sizehint height="31.95un" type="MINIMUM" width="31.95un"/>
+                    <sizehint height="31.95un" type="MAXIMUM" width="31.95un"/>
+                </widget>
+                <widget name="FavIcon" type="HbPushButton">
+                    <real name="z" value="1"/>
+                    <sizepolicy horizontalPolicy="Fixed" horizontalStretch="0" verticalPolicy="Fixed" verticalStretch="0"/>
+                    <real name="opacity" value="0.6"/>
+                    <sizehint type="MINIMUM" width="5un"/>
+                    <sizehint height="5un" type="MAXIMUM" width="5un"/>
+                    <string name="text"/>
+                </widget>
+                <widget name="ImageName" plugin="detailsnamelabelplugin" type="GlxDetailsNameLabel"/>
+                <widget name="container" type="HbWidget">
+                    <widget name="DateContainer" type="HbWidget">
+                        <widget name="DateText" type="HbLabel">
+                            <string name="plainText"/>
+                        </widget>
+                        <real name="z" value="0"/>
+                        <sizehint height="11.9403un" type="PREFERRED" width="23.8806un"/>
+                        <layout orientation="Horizontal" type="linear">
+                            <linearitem itemname="DateText"/>
+                        </layout>
+                    </widget>
+                    <widget name="TimeContainer" type="HbWidget">
+                        <widget name="TimeText" type="HbLabel">
+                            <string name="plainText"/>
+                        </widget>
+                        <real name="z" value="0"/>
+                        <sizehint height="11.9403un" type="PREFERRED" width="23.8806un"/>
+                        <layout orientation="Horizontal" type="linear">
+                            <linearitem itemname="TimeText"/>
+                        </layout>
+                    </widget>
+                    <widget name="SizeContainer" type="HbWidget">
+                        <widget name="SizeText" type="HbLabel">
+                            <string name="plainText"/>
+                        </widget>
+                        <real name="z" value="0"/>
+                        <sizehint height="11.9403un" type="PREFERRED" width="23.8806un"/>
+                        <layout orientation="Horizontal" type="linear">
+                            <linearitem itemname="SizeText"/>
+                        </layout>
+                    </widget>
+                    <widget name="DescLabelContainer" type="HbWidget">
+                        <widget name="Descriptions" type="HbLabel">
+                            <string name="plainText"/>
+                        </widget>
+                        <real name="z" value="0"/>
+                        <sizehint height="11.9403un" type="PREFERRED" width="23.8806un"/>
+                        <layout orientation="Horizontal" type="linear">
+                            <linearitem itemname="Descriptions"/>
+                        </layout>
+                    </widget>
+                    <widget name="DescTextContainer" type="HbWidget">
+                        <widget name="DescriptionsText" plugin="detailsdescriptioneditplugin" type="GlxDetailsDescriptionEdit">
+                            <sizepolicy horizontalPolicy="Fixed" horizontalStretch="0" verticalPolicy="Fixed" verticalStretch="0"/>
+                        </widget>
+                        <real name="z" value="0"/>
+                        <sizehint height="11.9403un" type="PREFERRED" width="23.8806un"/>
+                        <layout orientation="Horizontal" type="linear">
+                            <linearitem itemname="DescriptionsText"/>
+                        </layout>
+                    </widget>
+                    <real name="z" value="0"/>
+                    <sizehint height="23.8806un" type="PREFERRED" width="11.9403un"/>
+                    <layout orientation="Vertical" type="linear">
+                        <linearitem itemname="DateContainer"/>
+                        <linearitem itemname="TimeContainer"/>
+                        <linearitem itemname="SizeContainer"/>
+                        <linearitem itemname="DescLabelContainer"/>
+                        <linearitem itemname="DescTextContainer"/>
+                    </layout>
+                </widget>
+                <real name="z" value="0"/>
+                <sizepolicy horizontalPolicy="Fixed" horizontalStretch="0" verticalPolicy="Fixed" verticalStretch="0"/>
+                <sizehint height="expr(var(hb-param-screen-height) - (2*var(hb-param-margin-gene-screen) )-var(hb-param-widget-chrome-height))" type="FIXED" width="expr(var(hb-param-screen-width) -(2*var(hb-param-margin-gene-screen) ))"/>
+                <sizehint height="expr(var(hb-param-screen-height) - (2*var(hb-param-margin-gene-screen) )-var(hb-param-widget-chrome-height))" type="MINIMUM" width="expr(var(hb-param-screen-width) -(2*var(hb-param-margin-gene-screen) ))"/>
+                <sizehint height="expr(var(hb-param-screen-height) - (2*var(hb-param-margin-gene-screen) )-var(hb-param-widget-chrome-height))" type="MAXIMUM" width="expr(var(hb-param-screen-width) -(2*var(hb-param-margin-gene-screen) ))"/>
+                <layout type="anchor">
+                    <anchoritem dst="ImageIcon" dstEdge="LEFT" spacing="0un" src="" srcEdge="LEFT"/>
+                    <anchoritem dst="ImageIcon" dstEdge="TOP" spacing="0un" src="" srcEdge="TOP"/>
+                    <anchoritem dst="FavIcon" dstEdge="TOP" spacing="29.85075un" src="" srcEdge="TOP"/>
+                    <anchoritem dst="FavIcon" dstEdge="RIGHT" spacing="-10.85075un" src="" srcEdge="RIGHT"/>
+                    <anchoritem dst="ImageName" dstEdge="LEFT" spacing="0un" src="" srcEdge="LEFT"/>
+                    <anchoritem dst="ImageName" dstEdge="TOP" spacing="0un" src="" srcEdge="TOP"/>
+                    <anchoritem dst="container" dstEdge="LEFT" spacing="0un" src="" srcEdge="LEFT"/>
+                    <anchoritem dst="container" dstEdge="TOP" spacing="0un" src="" srcEdge="TOP"/>
+                </layout>
+            </widget>
+            <layout type="anchor">
+                <anchoritem dst="MainWidget" dstEdge="LEFT" spacing="expr(var(hb-param-margin-gene-screen) )" src="" srcEdge="LEFT"/>
+                <anchoritem dst="MainWidget" dstEdge="TOP" spacing="expr(var(hb-param-margin-gene-screen) )" src="" srcEdge="TOP"/>
+            </layout>
+        </widget>
+        <string name="title" value="View"/>
+    </widget>
+    <section name="portrait">
+        <widget name="DescriptionsText" plugin="detailsdescriptioneditplugin" type="GlxDetailsDescriptionEdit">
+            <sizehint height="10.5un" type="PREFERRED" width="48un"/>
+            <sizehint height="10.5un" type="MAXIMUM" width="48un"/>
+            <sizehint height="10.5un" type="MINIMUM" width="48un"/>
+        </widget>
+        <widget name="DateContainer" type="HbWidget">
+            <sizepolicy horizontalPolicy="Fixed" horizontalStretch="0" verticalPolicy="Fixed" verticalStretch="0"/>
+            <sizehint height="7.5un" type="MAXIMUM" width="48.38806un"/>
+            <sizehint height="5un" type="FIXED" width="48.38806un"/>
+            <sizehint height="5un" type="MINIMUM" width="48.38806un"/>
+            <layout orientation="Horizontal" spacing="3px" type="linear">
+                <contentsmargins bottom="3px" left="3px" right="3px" top="3px"/>
+                <linearitem itemname="DateText"/>
+            </layout>
+        </widget>
+        <widget name="content" role="HbView:widget" type="HbWidget">
+            <layout type="anchor">
+                <anchoritem dst="MainWidget" dstEdge="LEFT" spacing="expr(var(hb-param-margin-gene-screen) )" src="" srcEdge="LEFT"/>
+                <anchoritem dst="MainWidget" dstEdge="TOP" spacing="expr(var(hb-param-margin-gene-screen) + var(hb-param-widget-chrome-height)  + var(hb-param-widget-chrome-height) /3)" src="" srcEdge="TOP"/>
+            </layout>
+        </widget>
+        <widget name="DescLabelContainer" type="HbWidget">
+            <sizehint height="4.5un" type="MAXIMUM" width="48.38806un"/>
+            <sizehint height="4.5un" type="MINIMUM" width="48.38806un"/>
+            <sizepolicy horizontalPolicy="Fixed" horizontalStretch="0" verticalPolicy="Fixed" verticalStretch="0"/>
+            <sizehint height="4.5un" type="FIXED" width="48.38806un"/>
+            <layout orientation="Horizontal" spacing="3px" type="linear">
+                <contentsmargins bottom="3px" left="3px" right="3px" top="3px"/>
+                <linearitem itemname="Descriptions"/>
+            </layout>
+        </widget>
+        <widget name="DateText" type="HbLabel">
+            <string name="plainText"/>
+        </widget>
+        <widget name="TimeContainer" type="HbWidget">
+            <sizepolicy horizontalPolicy="Fixed" horizontalStretch="0" verticalPolicy="Fixed" verticalStretch="0"/>
+            <sizehint height="5un" type="MAXIMUM" width="48.38806un"/>
+            <sizehint height="5un" type="FIXED" width="48.38806un"/>
+            <sizehint height="5un" type="MINIMUM" width="48.38806un"/>
+            <layout orientation="Horizontal" spacing="3px" type="linear">
+                <contentsmargins bottom="3px" left="3px" right="3px" top="3px"/>
+                <linearitem itemname="TimeText"/>
+            </layout>
+        </widget>
+        <widget name="container" type="HbWidget">
+            <sizepolicy horizontalPolicy="Fixed" horizontalStretch="0" verticalPolicy="Fixed" verticalStretch="0"/>
+            <sizehint height="37.82239un" type="MAXIMUM" width="49.73134un"/>
+            <sizehint height="37.82239un" type="FIXED" width="49.73134un"/>
+            <sizehint height="37.82239un" type="MINIMUM" width="49.73134un"/>
+            <layout orientation="Vertical" spacing="0un" type="linear">
+                <contentsmargins bottom="0un" left="0un" right="0un" top="0un"/>
+                <linearitem itemname="DateContainer"/>
+                <linearitem itemname="TimeContainer"/>
+                <linearitem itemname="SizeContainer"/>
+                <linearitem itemname="DescLabelContainer"/>
+                <linearitem itemname="DescTextContainer"/>
+            </layout>
+        </widget>
+        <widget name="SizeContainer" type="HbWidget">
+            <sizehint height="7.5un" type="MINIMUM" width="48.38806un"/>
+            <sizehint height="5un" type="MAXIMUM" width="48.38806un"/>
+            <sizehint height="7.5un" type="FIXED" width="48.38806un"/>
+            <sizepolicy horizontalPolicy="Fixed" horizontalStretch="0" verticalPolicy="Fixed" verticalStretch="0"/>
+            <layout orientation="Horizontal" spacing="3px" type="linear">
+                <contentsmargins bottom="3px" left="3px" right="3px" top="3px"/>
+                <linearitem itemname="SizeText"/>
+            </layout>
+        </widget>
+        <widget name="MainWidget" type="HbWidget">
+            <layout type="anchor">
+                <anchoritem dst="ImageIcon" dstEdge="TOP" spacing="0un" src="" srcEdge="TOP"/>
+                <anchoritem dst="ImageIcon" dstEdge="CENTERH" spacing="0un" src="" srcEdge="CENTERH"/>
+                <anchoritem dst="FavIcon" dstEdge="RIGHT" spacing="0un" src="ImageIcon" srcEdge="RIGHT"/>
+                <anchoritem dst="FavIcon" dstEdge="BOTTOM" spacing="0un" src="ImageIcon" srcEdge="BOTTOM"/>
+                <anchoritem dst="ImageName" dstEdge="LEFT" spacing="0.44776un" src="" srcEdge="LEFT"/>
+                <anchoritem dst="ImageName" dstEdge="TOP" spacing="expr(31.95un +var(hb-param-margin-gene-middle-vertical))" src="" srcEdge="TOP"/>
+                <anchoritem dst="container" dstEdge="LEFT" spacing="0un" src="" srcEdge="LEFT"/>
+                <anchoritem dst="container" dstEdge="TOP" spacing="expr(31.95un +var(hb-param-margin-gene-middle-vertical) + var(hb-param-margin-gene-bottom) + 5un)" src="" srcEdge="TOP"/>
+            </layout>
+        </widget>
+        <widget name="DescTextContainer" type="HbWidget">
+            <sizepolicy horizontalPolicy="Fixed" horizontalStretch="0" verticalPolicy="Fixed" verticalStretch="0"/>
+            <sizehint height="14un" type="MAXIMUM" width="48.38806un"/>
+            <sizehint height="14un" type="FIXED" width="48.38806un"/>
+            <sizehint height="7.5un" type="MINIMUM" width="48.38806un"/>
+            <layout orientation="Horizontal" spacing="3px" type="linear">
+                <contentsmargins bottom="3px" left="3px" right="3px" top="3px"/>
+                <linearitem itemname="DescriptionsText"/>
+            </layout>
+        </widget>
+        <widget name="ImageName" plugin="detailsnamelabelplugin" type="GlxDetailsNameLabel">
+            <enums name="textWrapping" value="TextWordWrap"/>
+            <enums name="alignment" value="AlignVCenter|AlignHCenter"/>
+            <real name="z" value="2"/>
+            <sizehint height="6un" type="FIXED" width="48.50746un"/>
+            <sizehint height="6un" type="MINIMUM" width="48.50746un"/>
+            <sizehint height="7un" type="MAXIMUM" width="48.50746un"/>
+            <string name="plainText"/>
+            <sizepolicy horizontalPolicy="Fixed" horizontalStretch="0" verticalPolicy="Fixed" verticalStretch="0"/>
+        </widget>
+        <widget name="FavIcon" type="HbPushButton">
+            <sizehint type="PREFERRED" width="expr(var(hb-param-graphic-size-primary-small) + 2un)"/>
+            <sizehint type="MINIMUM" width="expr(var(hb-param-graphic-size-primary-small) + 2un)"/>
+            <sizehint height="5un" type="MAXIMUM" width="expr(var(hb-param-graphic-size-primary-small) + 2un)"/>
+            <real name="opacity" value="0.6"/>
+        </widget>
+        <widget name="Descriptions" type="HbLabel">
+            <string name="plainText" value="Description:"/>
+        </widget>
+    </section>
+    <section name="landscape">
+        <widget name="DescriptionsText" plugin="detailsdescriptioneditplugin" type="GlxDetailsDescriptionEdit">
+            <sizehint height="12un" type="MINIMUM" width="56un"/>
+            <sizehint height="12un" type="PREFERRED" width="56un"/>
+            <sizehint height="12un" type="MAXIMUM" width="56un"/>
+        </widget>
+        <widget name="DateContainer" type="HbWidget">
+            <sizepolicy horizontalPolicy="Fixed" horizontalStretch="0" verticalPolicy="Fixed" verticalStretch="0"/>
+            <sizehint height="5un" type="FIXED" width="expr(var(hb-param-screen-width) -  (2*var(hb-param-margin-gene-screen)) -31.95un -var(hb-param-margin-gene-left) )"/>
+            <sizehint height="5un" type="MAXIMUM" width="expr(var(hb-param-screen-width) -  (2*var(hb-param-margin-gene-screen)) -31.95un -var(hb-param-margin-gene-left) )"/>
+            <sizehint height="5un" type="MINIMUM" width="expr(var(hb-param-screen-width) -  (2*var(hb-param-margin-gene-screen)) -31.95un -var(hb-param-margin-gene-left) )"/>
+        </widget>
+        <widget name="content" role="HbView:widget" type="HbWidget">
+            <layout type="anchor">
+                <anchoritem dst="MainWidget" dstEdge="LEFT" spacing="expr(var(hb-param-margin-gene-screen) )" src="" srcEdge="LEFT"/>
+                <anchoritem dst="MainWidget" dstEdge="TOP" spacing="expr(var(hb-param-margin-gene-screen) + var(hb-param-widget-chrome-height))" src="" srcEdge="TOP"/>
+            </layout>
+        </widget>
+        <widget name="DescLabelContainer" type="HbWidget">
+            <sizepolicy horizontalPolicy="Fixed" horizontalStretch="0" verticalPolicy="Fixed" verticalStretch="0"/>
+            <sizehint height="4.5un" type="MINIMUM" width="57.57239un"/>
+            <sizehint height="4.5un" type="FIXED" width="57.57239un"/>
+            <sizehint height="4.5un" type="MAXIMUM" width="57.57239un"/>
+        </widget>
+        <widget name="DateText" type="HbLabel">
+            <sizepolicy horizontalPolicy="Fixed" horizontalStretch="0" verticalPolicy="Fixed" verticalStretch="0"/>
+            <sizehint type="MINIMUM" width="55un"/>
+            <sizehint type="MAXIMUM" width="55un"/>
+        </widget>
+        <widget name="TimeContainer" type="HbWidget">
+            <sizehint height="5un" type="MINIMUM" width="57.57239un"/>
+            <sizehint height="5un" type="FIXED" width="57.57239un"/>
+            <sizehint height="5un" type="MAXIMUM" width="57.57239un"/>
+            <sizepolicy horizontalPolicy="Fixed" horizontalStretch="0" verticalPolicy="Fixed" verticalStretch="0"/>
+        </widget>
+        <widget name="SizeText" type="HbLabel">
+            <sizepolicy horizontalPolicy="Fixed" horizontalStretch="0" verticalPolicy="Fixed" verticalStretch="0"/>
+            <sizehint height="3.28358un" type="MINIMUM" width="55un"/>
+            <sizehint height="3.28358un" type="MAXIMUM" width="55un"/>
+        </widget>
+        <widget name="container" type="HbWidget">
+            <sizepolicy horizontalPolicy="Fixed" horizontalStretch="0" verticalPolicy="Fixed" verticalStretch="0"/>
+            <sizehint height="49.73134un" type="MINIMUM" width="57.57239un"/>
+            <sizehint height="49.73134un" type="FIXED" width="57.57239un"/>
+            <sizehint type="MAXIMUM" width="57.57239un"/>
+            <layout orientation="Vertical" type="linear">
+                <contentsmargins bottom="1un" left="0un" right="0un" top="0un"/>
+                <linearitem itemname="DateContainer"/>
+                <linearitem itemname="TimeContainer"/>
+                <linearitem itemname="SizeContainer"/>
+                <linearitem itemname="DescLabelContainer"/>
+                <linearitem itemname="DescTextContainer"/>
+            </layout>
+        </widget>
+        <widget name="SizeContainer" type="HbWidget">
+            <sizepolicy horizontalPolicy="Fixed" horizontalStretch="0" verticalPolicy="Fixed" verticalStretch="0"/>
+            <sizehint height="5un" type="MINIMUM" width="57.57239un"/>
+            <sizehint height="5un" type="FIXED" width="57.57239un"/>
+            <sizehint height="5un" type="MAXIMUM" width="57.57239un"/>
+        </widget>
+        <widget name="MainWidget" type="HbWidget">
+            <layout type="anchor">
+                <anchoritem dst="ImageIcon" dstEdge="LEFT" spacing="0un" src="" srcEdge="LEFT"/>
+                <anchoritem dst="ImageIcon" dstEdge="TOP" spacing="0un" src="" srcEdge="TOP"/>
+                <anchoritem dst="FavIcon" dstEdge="RIGHT" spacing="0un" src="ImageIcon" srcEdge="RIGHT"/>
+                <anchoritem dst="FavIcon" dstEdge="BOTTOM" spacing="0un" src="ImageIcon" srcEdge="BOTTOM"/>
+                <anchoritem dst="ImageName" dstEdge="LEFT" spacing="0un" src="" srcEdge="LEFT"/>
+                <anchoritem dst="ImageName" dstEdge="TOP" spacing="expr(31.95un +var(hb-param-margin-gene-middle-vertical))" src="" srcEdge="TOP"/>
+                <anchoritem dst="container" dstEdge="LEFT" spacing="expr(31.95un +var(hb-param-margin-gene-left))" src="" srcEdge="LEFT"/>
+                <anchoritem dst="container" dstEdge="TOP" spacing="0un" src="" srcEdge="TOP"/>
+            </layout>
+        </widget>
+        <widget name="TimeText" type="HbLabel">
+            <sizehint type="FIXED" width="55un"/>
+            <sizehint type="MINIMUM" width="55un"/>
+            <sizehint height="3.28358un" type="MAXIMUM" width="55un"/>
+            <sizepolicy horizontalPolicy="Fixed" horizontalStretch="0" verticalPolicy="Fixed" verticalStretch="0"/>
+        </widget>
+        <widget name="ImageName" plugin="detailsnamelabelplugin" type="GlxDetailsNameLabel">
+            <real name="z" value="2"/>
+            <sizehint height="7.5un" type="PREFERRED" width="31.95un"/>
+            <sizehint height="7.5un" type="MINIMUM" width="31.95un"/>
+            <sizehint height="7.5un" type="MAXIMUM" width="31.95un"/>
+        </widget>
+        <widget name="DescTextContainer" type="HbWidget">
+            <sizepolicy horizontalPolicy="Fixed" horizontalStretch="0" verticalPolicy="Fixed" verticalStretch="0"/>
+            <sizehint type="MAXIMUM" width="57.57239un"/>
+            <sizehint height="12un" type="FIXED" width="57.57239un"/>
+            <sizehint height="12un" type="MINIMUM" width="57.57239un"/>
+            <layout orientation="Horizontal" spacing="0un" type="linear">
+                <contentsmargins bottom="1.34328un" left="0un" right="1.34328un" top="0un"/>
+                <linearitem itemname="DescriptionsText"/>
+            </layout>
+        </widget>
+        <widget name="FavIcon" type="HbPushButton">
+            <sizehint type="PREFERRED" width="expr(var(hb-param-graphic-size-primary-small) + 2un)"/>
+            <sizehint type="MINIMUM" width="expr(var(hb-param-graphic-size-primary-small) + 2un)"/>
+            <sizehint height="5un" type="MAXIMUM" width="expr(var(hb-param-graphic-size-primary-small) + 2un)"/>
+        </widget>
+        <widget name="Descriptions" type="HbLabel">
+            <string name="plainText" value="Descriptions:"/>
+        </widget>
+    </section>
+    <metadata activeUIState="Common ui state" display="NHD-3.2-inch_portrait" unit="un">
+        <uistate name="Common ui state" sections="#common"/>
+        <uistate name="portrait" sections="#common portrait"/>
+        <uistate name="landscape" sections="#common landscape"/>
+    </metadata>
+</hbdocument>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/data/downshow.fxml	Thu Jul 22 16:33:32 2010 +0100
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<layers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:noNamespaceSchemaLocation="http://www.nokia.com/FXML/10.1">
+	<comment>Created using carbide.fx 1.5.0;  FxML revision 0.84; Platform 10.1 </comment>
+	<visual src="Item">
+		<param name="rotation_angle" type="anim">
+			<style>linear</style>
+			<duration>0.8</duration>
+			<keyframe at="0.0">45.0</keyframe>
+			<keyframe at="1.0">0.0</keyframe>
+		</param>
+		<param name="rotation_origin_x" ref="visual.width">1.0</param>
+		<param name="rotation_origin_y" ref="visual.height">1.0</param>
+		<param name="opacity" type="anim">
+			<style>linear</style>
+			<duration>0.8</duration>
+			<keyframe at="0.0">0.0</keyframe>
+			<keyframe at="1.0">1.0</keyframe>
+		</param>
+		<param name="rotation_axis_z">1</param>
+	</visual>
+</layers>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/data/fadein.fxml	Thu Jul 22 16:33:32 2010 +0100
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<layers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:noNamespaceSchemaLocation="http://www.nokia.com/FXML/10.1">
+	<comment>Created using carbide.fx 1.5.0;  FxML revision 0.84; Platform 10.1 </comment>
+	<visual src="Item">
+		<param name="opacity" type="anim">
+			<style>linear</style>
+			<duration>0.8</duration>
+			<keyframe at="0.0">0.0</keyframe>
+			<keyframe at="1.0">1.0</keyframe>
+		</param>
+	</visual>
+</layers>
\ No newline at end of file
--- a/data/fullscreen.docml	Wed Jun 16 13:08:54 2010 +0100
+++ b/data/fullscreen.docml	Thu Jul 22 16:33:32 2010 +0100
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<hbdocument version="1.0">
+<hbdocument version="1.1">
     <widget name="mGlxFullscreenView" type="HbView">
         <widget name="mcontent" role="HbView:widget" type="HbWidget">
             <widget name="mCoverFlow" type="HbWidget">
-                <enums name="alignment" value="AlignLeft|AlignTop|AlignLeading"/>
-                <enums name="scrollDirections" value="Horizontal"/>
                 <real name="z" value="5"/>
+                <string name="alignment" value="AlignLeft|AlignTop|AlignLeading"/>
+                <string name="scrollDirections" value="Horizontal"/>
                 <bool name="frictionEnabled" value="TRUE"/>
             </widget>
             <widget name="mImageStrip" type="HbGridView">
@@ -20,12 +20,18 @@
                 <integer name="rowCount" value="1"/>
             </widget>
             <widget name="toolBar" type="HbToolBar">
-                <enums name="layoutDirection" value="LeftToRight"/>
+                <enums name="layoutDirection" value="RightToLeft"/>
                 <real name="z" value="7"/>
+                <real name="opacity" value="0.5"/>
                 <sizehint height="60.44776un" type="PREFERRED" width="9.40299un"/>
                 <enums name="orientation" value="Vertical"/>
             </widget>
-            <string name="toolTipText" value=""/>
+            <widget name="glxZoomWidget" type="HbWidget">
+                <string name="alignment" value="AlignVCenter|AlignHCenter"/>
+                <string name="scrollDirections" value="Horizontal|Vertical"/>
+                <bool name="frictionEnabled" value="TRUE"/>
+            </widget>
+            <string name="toolTipText"/>
             <bool name="visible" value="TRUE"/>
             <layout type="anchor">
                 <anchoritem dst="mCoverFlow" dstEdge="LEFT" spacing="var(hb-param-margin-view-left)" src="" srcEdge="LEFT"/>
@@ -38,16 +44,24 @@
                 <anchoritem dst="mImageStrip" dstEdge="BOTTOM" spacing="var(hb-param-margin-view-bottom)" src="" srcEdge="BOTTOM"/>
                 <anchoritem dst="toolBar" dstEdge="LEFT" spacing="0un" src="" srcEdge="LEFT"/>
                 <anchoritem dst="toolBar" dstEdge="TOP" spacing="17.46269un" src="" srcEdge="TOP"/>
+                <anchoritem dst="glxZoomWidget" dstEdge="LEFT" spacing="var(hb-param-margin-view-left)" src="" srcEdge="LEFT"/>
+                <anchoritem dst="glxZoomWidget" dstEdge="TOP" spacing="var(hb-param-margin-view-top)" src="" srcEdge="TOP"/>
+                <anchoritem dst="glxZoomWidget" dstEdge="RIGHT" spacing="var(hb-param-margin-view-right)" src="" srcEdge="RIGHT"/>
+                <anchoritem dst="glxZoomWidget" dstEdge="BOTTOM" spacing="var(hb-param-margin-view-bottom)" src="" srcEdge="BOTTOM"/>
             </layout>
         </widget>
-        <string name="title" value="Photos"/>
+        <string locid="txt_photos_title_photos" name="title" value="Photos"/>
         <bool name="contentFullScreen" value="TRUE"/>
+        <string name="titleBarFlags" value="TitleBarHidden|TitleBarTransparent"/>
     </widget>
     <section name="portrait">
         <widget name="mImageStrip" type="HbGridView">
             <integer name="columnCount" value="4"/>
             <integer name="rowCount" value="1"/>
         </widget>
+        <widget name="toolBar" type="HbToolBar">
+            <sizehint height="58.50746un" type="PREFERRED" width="9.40299un"/>
+        </widget>
         <widget name="mcontent" role="HbView:widget" type="HbWidget">
             <layout type="anchor">
                 <anchoritem dst="mCoverFlow" dstEdge="LEFT" spacing="var(hb-param-margin-view-left)" src="" srcEdge="LEFT"/>
@@ -60,21 +74,25 @@
                 <anchoritem dst="mImageStrip" dstEdge="BOTTOM" spacing="var(hb-param-margin-view-bottom)" src="" srcEdge="BOTTOM"/>
                 <anchoritem dst="toolBar" dstEdge="LEFT" spacing="0un" src="" srcEdge="LEFT"/>
                 <anchoritem dst="toolBar" dstEdge="TOP" spacing="18.13433un" src="" srcEdge="TOP"/>
+                <anchoritem dst="glxZoomWidget" dstEdge="LEFT" spacing="var(hb-param-margin-view-left)" src="" srcEdge="LEFT"/>
+                <anchoritem dst="glxZoomWidget" dstEdge="TOP" spacing="var(hb-param-margin-view-top)" src="" srcEdge="TOP"/>
+                <anchoritem dst="glxZoomWidget" dstEdge="RIGHT" spacing="var(hb-param-margin-view-right)" src="" srcEdge="RIGHT"/>
+                <anchoritem dst="glxZoomWidget" dstEdge="BOTTOM" spacing="var(hb-param-margin-view-bottom)" src="" srcEdge="BOTTOM"/>
             </layout>
         </widget>
-        <widget name="toolBar" type="HbToolBar">
-            <sizehint height="58.50746un" type="PREFERRED" width="9.40299un"/>
-        </widget>
     </section>
     <section name="landscape">
         <widget name="mGlxFullscreenView" type="HbView">
             <real name="z" value="0"/>
-            <string name="HbVkbHost" value=""/>
+            <string name="HbVkbHost"/>
         </widget>
         <widget name="mImageStrip" type="HbGridView">
             <integer name="columnCount" value="6"/>
             <integer name="rowCount" value="1"/>
         </widget>
+        <widget name="toolBar" type="HbToolBar">
+            <sizehint height="46.71642un" type="PREFERRED" width="9.4427un"/>
+        </widget>
         <widget name="mcontent" role="HbView:widget" type="HbWidget">
             <layout type="anchor">
                 <anchoritem dst="mCoverFlow" dstEdge="LEFT" spacing="var(hb-param-margin-view-left)" src="" srcEdge="LEFT"/>
@@ -89,13 +107,14 @@
                 <anchoritem dst="toolBar" dstEdge="BOTTOM" spacing="0un" src="" srcEdge="BOTTOM"/>
                 <anchoritem dst="toolBar" dstEdge="LEFT" spacing="0un" src="" srcEdge="LEFT"/>
                 <anchoritem dst="toolBar" dstEdge="RIGHT" spacing="0un" src="mImageStrip" srcEdge="LEFT"/>
+                <anchoritem dst="glxZoomWidget" dstEdge="LEFT" spacing="var(hb-param-margin-view-left)" src="" srcEdge="LEFT"/>
+                <anchoritem dst="glxZoomWidget" dstEdge="TOP" spacing="var(hb-param-margin-view-top)" src="" srcEdge="TOP"/>
+                <anchoritem dst="glxZoomWidget" dstEdge="RIGHT" spacing="var(hb-param-margin-view-right)" src="" srcEdge="RIGHT"/>
+                <anchoritem dst="glxZoomWidget" dstEdge="BOTTOM" spacing="var(hb-param-margin-view-bottom)" src="" srcEdge="BOTTOM"/>
             </layout>
         </widget>
-        <widget name="toolBar" type="HbToolBar">
-            <sizehint height="46.71642un" type="PREFERRED" width="9.4427un"/>
-        </widget>
     </section>
-    <metadata activeUIState="portrait" display="NHD portrait" unit="un">
+    <metadata activeUIState="Common ui state" display="NHD-3.2-inch_portrait" unit="un">
         <uistate name="Common ui state" sections="#common"/>
         <uistate name="portrait" sections="#common portrait"/>
         <uistate name="landscape" sections="#common landscape"/>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/data/helix.fxml	Thu Jul 22 16:33:32 2010 +0100
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<layers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:noNamespaceSchemaLocation="http://www.nokia.com/FXML/10.1">
+	<comment>Created using carbide.fx 1.5.0;  FxML revision 0.84; Platform 10.1 </comment>
+	<visual src="Item">
+		<param name="rotation_angle" type="anim">
+			<style>linear</style>
+			<duration>0.8</duration>
+			<keyframe at="0.0">0.0</keyframe>
+			<keyframe at="0.25">90.0</keyframe>
+			<keyframe at="0.50">180.0</keyframe>
+			<keyframe at="1.0">270.0</keyframe>
+		</param>
+		<param name="rotation_origin_x" ref="visual.width">0.5</param>
+		<param name="rotation_origin_y" ref="visual.height">0.5</param>
+		<param name="rotation_axis_z">1</param>
+		<param name="scale_x" type="anim">
+			<style>linear</style>
+			<duration>0.8</duration>
+			<keyframe at="0.0">1.0</keyframe>
+			<keyframe at="1.0">0.0</keyframe>
+		</param>
+		<param name="scale_origin_x" ref="visual.width">0.5</param>
+		<param name="scale_origin_y" ref="visual.height">0.5</param>
+		<param name="scale_y" type="anim">
+			<style>linear</style>
+			<duration>0.8</duration>
+			<keyframe at="0.0">1.0</keyframe>
+			<keyframe at="1.0">0.0</keyframe>
+		</param>
+	</visual>
+</layers>
\ No newline at end of file
--- a/data/listview.docml	Wed Jun 16 13:08:54 2010 +0100
+++ b/data/listview.docml	Thu Jul 22 16:33:32 2010 +0100
@@ -17,13 +17,13 @@
             </widget>
             <layout type="anchor">
                 <anchoritem dst="listview" dstEdge="LEFT" spacing="0un" src="" srcEdge="LEFT"/>
-                <anchoritem dst="listview" dstEdge="TOP" spacing="9un" src="" srcEdge="TOP"/>
+                <anchoritem dst="listview" dstEdge="TOP" spacing="0un" src="" srcEdge="TOP"/>
                 <anchoritem dst="listview" dstEdge="RIGHT" spacing="0un" src="" srcEdge="RIGHT"/>
-                <anchoritem dst="listview" dstEdge="BOTTOM" spacing="-9un" src="" srcEdge="BOTTOM"/>
+                <anchoritem dst="listview" dstEdge="BOTTOM" spacing="0un" src="" srcEdge="BOTTOM"/>
             </layout>
         </widget>
         <string name="title" value="Photos"/>
-        <bool name="contentFullScreen" value="TRUE"/>
+        <bool name="contentFullScreen" value="FALSE"/>
     </widget>
     <metadata activeUIState="Common ui state" display="NHD portrait" unit="un">
         <uistate name="Common ui state" sections="#common"/>
--- a/data/opacity_activate.fxml	Wed Jun 16 13:08:54 2010 +0100
+++ b/data/opacity_activate.fxml	Thu Jul 22 16:33:32 2010 +0100
@@ -1,14 +1,12 @@
-<layers>
-<visual>
-
-<param name="opacity" type="anim">
-<duration>2.0</duration>
-<style>linear</style>
-<keyframe at="0.0">0</keyframe>
-<keyframe at="0.5">0.75</keyframe>
-<keyframe at="1.0">1.0</keyframe>
-</param>
-
-</visual>
+<?xml version="1.0" encoding="UTF-8"?>
+<layers >
+	<visual>
+		<param name="opacity" type="anim">
+			<style>linear</style>
+			<duration>1.0</duration>
+			<keyframe at="0.0">0.0</keyframe>
+			<keyframe at="1.0">1.0</keyframe>
+		</param>
+	</visual>
 </layers>
 
--- a/data/opacity_deactivate.fxml	Wed Jun 16 13:08:54 2010 +0100
+++ b/data/opacity_deactivate.fxml	Thu Jul 22 16:33:32 2010 +0100
@@ -1,13 +1,12 @@
-<layers>
-<visual>
-<param name="opacity" type="anim">
-<duration>2.0</duration>
-<style>linear</style>
-<keyframe at="0.0">1.0</keyframe>
-<keyframe at="0.5">0.25</keyframe>
-<keyframe at="1.0">0</keyframe>
-</param>
-
-</visual>
+<?xml version="1.0" encoding="UTF-8"?>
+<layers >
+	<visual>
+		<param name="opacity" type="anim">
+			<style>linear</style>
+			<duration>1.0</duration>
+			<keyframe at="0.0">1.0</keyframe>
+			<keyframe at="1.0">0.0</keyframe>
+		</param>
+	</visual>
 </layers>
 
--- a/data/photos.css	Wed Jun 16 13:08:54 2010 +0100
+++ b/data/photos.css	Thu Jul 22 16:33:32 2010 +0100
@@ -55,7 +55,7 @@
 }
 
 HbListViewItem::multiselection-toucharea{
-	fixed-width: 90.0un;
+	fixed-width: 0.0un;
 }
 
 HbListViewItem::icon-1{
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/data/photos.docml	Thu Jul 22 16:33:32 2010 +0100
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<hbdocument version="1.1">
+    <object name="action" type="HbAction">
+        <bool name="checkable" value="FALSE"/>
+        <bool name="enabled" value="TRUE"/>
+        <icon iconName="qtg_mono_photos" name="icon"/>
+        <string name="text"/>
+        <bool name="visible" value="TRUE"/>
+    </object>
+    <object name="action_1" type="HbAction">
+        <bool name="checkable" value="FALSE"/>
+        <bool name="enabled" value="TRUE"/>
+        <icon iconName="qtg_mono_photo_albums" name="icon"/>
+        <string name="text"/>
+    </object>
+    <object name="action_2" type="HbAction">
+        <icon iconName="qtg_mono_camera" name="icon"/>
+        <string name="text"/>
+    </object>
+    <object name="action_3" type="HbAction">
+        <icon iconName="qtg_small_ovi" name="icon"/>
+        <string name="text"/>
+    </object>
+    <widget name="mainView" type="HbView">
+        <widget name="content" role="HbView:widget" type="HbWidget">
+            <layout type="anchor"/>
+        </widget>
+        <string locid="txt_photos_title_photos" name="title" value="Photos"/>
+    </widget>
+    <section name="portrait">
+        <widget name="mainView" type="HbView">
+            <widget name="viewToolbar" role="HbView:toolBar" type="HbToolBar">
+                <ref object="action" role="HbWidget:addAction"/>
+                <ref object="action_1" role="HbWidget:addAction"/>
+                <ref object="action_2" role="HbWidget:addAction"/>
+                <ref object="action_3" role="HbWidget:addAction"/>
+            </widget>
+            <string name="titleBarFlags"/>
+            <bool name="enabled" value="TRUE"/>
+            <bool name="visible" value="TRUE"/>
+        </widget>
+    </section>
+    <section name="landscape">
+        <widget name="content" role="HbView:widget" type="HbWidget">
+            <widget name="pushButton" type="HbPushButton">
+                <icon iconName="qtg_mono_back" name="icon"/>
+                <real name="z" value="1"/>
+                <sizehint type="PREFERRED" width="10.59702un"/>
+                <sizehint height="5.5un" type="MINIMUM" width="5un"/>
+                <string name="text"/>
+            </widget>
+            <layout type="anchor">
+                <anchoritem dst="pushButton" dstEdge="TOP" spacing="0.14925un" src="" srcEdge="TOP"/>
+                <anchoritem dst="pushButton" dstEdge="RIGHT" spacing="-0.14925un" src="" srcEdge="RIGHT"/>
+            </layout>
+        </widget>
+        <widget name="mainView" type="HbView">
+            <string name="titleBarFlags" value="TitleBarHidden"/>
+            <bool name="contentFullScreen" value="FALSE"/>
+        </widget>
+    </section>
+    <metadata activeUIState="landscape" display="NHD-3.2-inch_landscape" unit="un">
+        <uistate name="Common ui state" sections="#common"/>
+        <uistate name="portrait" sections="#common portrait"/>
+        <uistate name="landscape" sections="#common landscape"/>
+    </metadata>
+</hbdocument>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/data/photos.splashml	Thu Jul 22 16:33:32 2010 +0100
@@ -0,0 +1,8 @@
+<hbsplash version="1">
+          <docml>photos.docml</docml>
+          <widget>mainView</widget>
+          <appuid>0x20000A14</appuid>
+          <tsappname>photos</tsappname>
+          <use-section when="portrait">portrait</use-section>
+     	  <use-section when="landscape">landscape</use-section>
+      </hbsplash>
--- a/data/qgn_menu_ovi_photos.svg	Wed Jun 16 13:08:54 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,70 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" baseProfile="tiny" height="44px" version="1.1" viewBox="0 0 44 44" width="44px" x="0px" y="0px">
-<g>
-<path d="M40.999,20.516c0-1.516-1.317-2.365-2.217-2.45l-0.01-11.99c0-0.552-0.448-1-1-1L6.007,5.089   c-0.476,0-0.999,0.396-0.999,0.999v26.843c0,0.555,0.523,1.005,1.009,1.005c0,0,6.411-0.005,7.088-0.005   c0,1.258-0.042,1.813,0.771,2.41c0,1.004,0.577,2.659,2.683,2.659c0.025,0,21.679-0.003,21.679-0.003   c1.669,0,2.761-1.152,2.761-2.481C40.999,36.494,40.999,20.534,40.999,20.516z" fill-opacity="0.2" stroke-opacity="0.2"/>
-<path d="M6.016,30.777l0.001,2.152l8.098-0.003v1.964c0,0.414,0.337,0.75,0.752,0.75h0.018v0.798   c0,0-0.064,1.555,1.754,1.555h21.6c1.819,0,1.754-1.555,1.754-1.555v-3.159L6.016,30.777z" fill-opacity="0.5" stroke-opacity="0.5"/>
-<linearGradient gradientUnits="userSpaceOnUse" id="SVGID_1_" x1="21.8945" x2="21.8945" y1="5.3208" y2="64.1475">
-<stop offset="0" style="stop-color:#FFFFFF"/>
-<stop offset="1" style="stop-color:#B2B2B2"/>
-</linearGradient>
-<polygon fill="url(#SVGID_1_)" points="37.782,31.912 6.017,31.924 6.007,6.012 37.772,6  "/>
-<linearGradient gradientUnits="userSpaceOnUse" id="SVGID_2_" x1="21.8926" x2="21.8926" y1="19.2339" y2="4.6529">
-<stop offset="0" style="stop-color:#DEEEF9"/>
-<stop offset="0.1953" style="stop-color:#C2E7F8"/>
-<stop offset="0.6144" style="stop-color:#7AD6F5"/>
-<stop offset="1" style="stop-color:#33C5F3"/>
-</linearGradient>
-<polygon fill="url(#SVGID_2_)" points="35.66,29.276 8.135,29.286 8.125,8.648 35.654,8.64  "/>
-<linearGradient gradientUnits="userSpaceOnUse" id="SVGID_3_" x1="23.3984" x2="23.3984" y1="8.5083" y2="35.9947">
-<stop offset="0" style="stop-color:#79CD19"/>
-<stop offset="1" style="stop-color:#1B6332"/>
-</linearGradient>
-<polygon fill="url(#SVGID_3_)" points="29.477,11.339 11.137,29.282 35.66,29.276 35.658,17.496  "/>
-<linearGradient gradientUnits="userSpaceOnUse" id="SVGID_4_" x1="18.7227" x2="18.7227" y1="16.8872" y2="38.1738">
-<stop offset="0" style="stop-color:#79CD19"/>
-<stop offset="1" style="stop-color:#1B6332"/>
-</linearGradient>
-<polygon fill="url(#SVGID_4_)" points="13.434,13.741 29.311,29.292 8.135,29.286 8.137,19.021  "/>
-<linearGradient gradientUnits="userSpaceOnUse" id="SVGID_5_" x1="27.438" x2="27.438" y1="15.6304" y2="42.5308">
-<stop offset="0" style="stop-color:#E6E6F5"/>
-<stop offset="1" style="stop-color:#333342"/>
-</linearGradient>
-<path d="M38.238,18.032h-21.6c-1.818,0-1.754,1.553-1.754,1.553v15.848c0,0-0.064,1.555,1.754,1.555h21.6   c1.819,0,1.754-1.555,1.754-1.555V19.585C39.992,19.585,40.057,18.032,38.238,18.032z" fill="url(#SVGID_5_)"/>
-<path d="M39.298,19.565c0.004-0.019-0.016-0.288-0.136-0.469c-0.128-0.17-0.259-0.355-0.925-0.373   h-21.6c-0.667,0.018-0.798,0.203-0.926,0.373c-0.098,0.143-0.129,0.346-0.135,0.43v13.848l23.721-11.025v-2.765   C39.296,19.584,39.296,19.577,39.298,19.565z" fill="#FFFFFF" fill-opacity="0.15" stroke-opacity="0.15"/>
-<linearGradient gradientUnits="userSpaceOnUse" id="SVGID_6_" x1="27.3267" x2="27.3267" y1="37.043" y2="24.6615">
-<stop offset="0" style="stop-color:#5A5A6A"/>
-<stop offset="0.5477" style="stop-color:#A4A4AD"/>
-<stop offset="1" style="stop-color:#DDDDE1"/>
-</linearGradient>
-<path d="M39.771,18.763c-0.221-0.371-0.658-0.73-1.533-0.73h-21.6c-1.818,0-1.754,1.553-1.754,1.553v15.848   c0,0-0.018,0.452,0.249,0.868l0.554-0.422c-0.076-0.139-0.104-0.312-0.109-0.388V19.526c0.006-0.084,0.037-0.287,0.135-0.43   c0.128-0.17,0.259-0.355,0.926-0.373h21.6c0.605,0.016,0.768,0.17,0.889,0.325L39.771,18.763z" fill="url(#SVGID_6_)"/>
-<path d="M22.302,28.112c0-3.822,3.104-6.919,6.937-6.919l0,0c3.834,0,6.939,3.097,6.939,6.919l0,0   c0,3.821-3.105,6.917-6.939,6.917l0,0C25.407,35.029,22.302,31.934,22.302,28.112L22.302,28.112z M22.769,28.112   c0.008,3.563,2.898,6.443,6.47,6.449l0,0c3.573-0.006,6.464-2.887,6.47-6.449l0,0c-0.006-3.563-2.896-6.444-6.47-6.451l0,0   C25.667,21.668,22.777,24.549,22.769,28.112L22.769,28.112z" fill="#FFFFFF" fill-opacity="0.25" stroke-opacity="0.25"/>
-<path d="M34.365,28.112c0,2.822-2.293,5.109-5.124,5.109c-2.835,0-5.126-2.287-5.126-5.109   c0-2.823,2.291-5.109,5.126-5.109C32.072,23.003,34.365,25.289,34.365,28.112z" fill="#FFFFFF" fill-opacity="0.25" stroke-opacity="0.25"/>
-<linearGradient gradientUnits="userSpaceOnUse" id="SVGID_7_" x1="29.2407" x2="29.2407" y1="33.0615" y2="25.352">
-<stop offset="0" style="stop-color:#404040"/>
-<stop offset="1" style="stop-color:#000000"/>
-</linearGradient>
-<ellipse cx="29.241" cy="28.112" fill="url(#SVGID_7_)" rx="4.296" ry="4.282"/>
-<linearGradient gradientUnits="userSpaceOnUse" id="SVGID_8_" x1="29.2407" x2="29.2407" y1="35.3877" y2="20.1111">
-<stop offset="0" style="stop-color:#676767"/>
-<stop offset="1" style="stop-color:#000000"/>
-</linearGradient>
-<path d="M29.241,23.828c-2.371,0-4.296,1.919-4.296,4.284c0,2.364,1.925,4.282,4.296,4.282   c2.373,0,4.297-1.918,4.297-4.282C33.538,25.747,31.614,23.828,29.241,23.828z M29.241,31.924c-2.105,0-3.82-1.708-3.82-3.812   c0-2.1,1.715-3.809,3.82-3.809c2.106,0,3.82,1.709,3.82,3.809C33.061,30.216,31.347,31.924,29.241,31.924z" fill="url(#SVGID_8_)"/>
-<path d="M31.326,28.109c0,1.149-0.936,2.078-2.085,2.078c-1.15,0-2.084-0.929-2.084-2.078c0-1.145,0.934-2.075,2.084-2.075   C30.39,26.034,31.326,26.965,31.326,28.109z"/>
-<circle cx="25.197" cy="21.106" fill-opacity="0.2" r="1.608" stroke-opacity="0.2"/>
-<linearGradient gradientUnits="userSpaceOnUse" id="SVGID_9_" x1="25.1968" x2="25.1968" y1="23.4219" y2="20.0526">
-<stop offset="0" style="stop-color:#676767"/>
-<stop offset="1" style="stop-color:#000000"/>
-</linearGradient>
-<circle cx="25.197" cy="21.106" fill="url(#SVGID_9_)" r="1.313"/>
-<rect fill="#F2F2F2" height="2.451" width="4.916" x="33.474" y="19.462"/>
-<path d="M32.746,26.63c-0.583-1.363-1.917-2.331-3.499-2.331   c-2.118,0-3.834,1.711-3.834,3.821c0,0.624,0.164,1.202,0.432,1.719L32.746,26.63z" fill="#FFFFFF" fill-opacity="0.25" stroke-opacity="0.25"/>
-<linearGradient gradientUnits="userSpaceOnUse" id="SVGID_10_" x1="12.2798" x2="21.6919" y1="27.5088" y2="27.5088">
-<stop offset="0" style="stop-color:#404040"/>
-<stop offset="1" style="stop-color:#000000"/>
-</linearGradient>
-<path d="M19.807,33.885c0,0.414-0.337,0.749-0.752,0.749h-4.188c-0.415,0-0.752-0.335-0.752-0.749V21.134   c0-0.414,0.337-0.75,0.752-0.75h4.188c0.415,0,0.752,0.336,0.752,0.75V33.885z" fill="url(#SVGID_10_)"/>
-<path d="M14.806,34.623V20.396c-0.384,0.031-0.691,0.344-0.691,0.738v12.751   C14.115,34.277,14.422,34.592,14.806,34.623z" fill="#FFFFFF" fill-opacity="0.25" stroke-opacity="0.25"/>
-<rect fill="none" height="44" width="44" x="0"/>
-</g>
-</svg>
--- a/data/slideshow.docml	Wed Jun 16 13:08:54 2010 +0100
+++ b/data/slideshow.docml	Thu Jul 22 16:33:32 2010 +0100
@@ -1,18 +1,18 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<hbdocument version="0.9">
+<hbdocument version="1.1">
     <widget name="mglxslideshow" type="HbView">
         <widget name="content" role="HbView:widget" type="HbWidget">
             <widget name="mslideshowwidget" type="HbWidget">
-                <enums name="alignment" value="AlignVCenter|AlignHCenter"/>
-                <enums name="scrollDirections" value="Horizontal"/>
                 <real name="z" value="14"/>
                 <sizehint height="95.52239un" type="PREFERRED" width="53.73134un"/>
+                <string name="alignment" value="AlignVCenter|AlignHCenter"/>
+                <string name="scrollDirections" value="Horizontal"/>
             </widget>
             <widget name="mContinueButton" type="HbPushButton">
                 <real name="z" value="10"/>
-                <real name="opacity" value="0.5"/>
+                <real name="opacity" value="0.7"/>
                 <sizehint height="expr(var(hb-param-margin-gene-top)+var(hb-param-margin-gene-bottom)+var(hb-param-graphic-size-function))" type="PREFERRED" width="expr(var(hb-param-margin-gene-top)+var(hb-param-margin-gene-bottom)+var(hb-param-graphic-size-function))"/>
-                <string name="text" value=""/>
+                <string name="text"/>
                 <bool name="visible" value="FALSE"/>
                 <string name="state" value="normal"/>
             </widget>
@@ -26,11 +26,12 @@
                 <anchoritem dst="mContinueButton" dstEdge="CENTERH" spacing="0un" src="" srcEdge="CENTERH"/>
             </layout>
         </widget>
-        <string name="title" value="Photos"/>
+        <string locid="txt_photos_title_photos" name="title" value="Photos"/>
         <bool name="contentFullScreen" value="TRUE"/>
         <real name="z" value="10"/>
+        <string name="titleBarFlags" value="TitleBarHidden|TitleBarTransparent"/>
     </widget>
-    <metadata activeUIState="Common ui state" display="NHD portrait" unit="un">
+    <metadata activeUIState="Common ui state" display="NHD-3.2-inch_portrait" unit="un">
         <uistate name="Common ui state" sections="#common"/>
     </metadata>
 </hbdocument>
--- a/data/transitionrotate0.fxml	Wed Jun 16 13:08:54 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,14 +0,0 @@
-<layers>
-	<visual>
-	    <param name="rotation_angle" type="anim">
-	        <duration>0.5</duration>
-		    <keyframe at="0.0">0</keyframe>	
-	            <keyframe at="1.0">90</keyframe>
-	     </param>
-   	    
-	    <param name="rotation_origin_x" ref="visual.width">0.5</param>
-	    <param name="rotation_origin_y" ref="visual.height">0.5</param>
-	    <param name="rotation_axis_z">1</param>
-    	    
-	</visual>
-</layers>
--- a/data/transitionrotate180.fxml	Wed Jun 16 13:08:54 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,14 +0,0 @@
-<layers>
-	<visual>
-	    <param name="rotation_angle" type="anim">
-	        <duration>0.5</duration>
-		    <keyframe at="0.0">180</keyframe>	
-	            <keyframe at="1.0">270</keyframe>
-	     </param>
-   	    
-	    <param name="rotation_origin_x" ref="visual.width">0.5</param>
-	    <param name="rotation_origin_y" ref="visual.height">0.5</param>
-	    <param name="rotation_axis_z">1</param>
-    	    
-	</visual>
-</layers>
--- a/data/transitionrotate270.fxml	Wed Jun 16 13:08:54 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,14 +0,0 @@
-<layers>
-	<visual>
-	    <param name="rotation_angle" type="anim">
-	        <duration>0.5</duration>
-		    <keyframe at="0.0">-90</keyframe>	
-	            <keyframe at="1.0">0</keyframe>
-	     </param>
-   	    
-	    <param name="rotation_origin_x" ref="visual.width">0.5</param>
-	    <param name="rotation_origin_y" ref="visual.height">0.5</param>
-	    <param name="rotation_axis_z">1</param>
-    	    
-	</visual>
-</layers>
--- a/data/transitionrotate90.fxml	Wed Jun 16 13:08:54 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,14 +0,0 @@
-<layers>
-	<visual>
-	    <param name="rotation_angle" type="anim">
-	        <duration>0.5</duration>
-		    <keyframe at="0.0">90</keyframe>	
-	            <keyframe at="1.0">180</keyframe>
-	     </param>
-   	    
-	    <param name="rotation_origin_x" ref="visual.width">0.5</param>
-	    <param name="rotation_origin_y" ref="visual.height">0.5</param>
-	    <param name="rotation_axis_z">1</param>
-    	    
-	</visual>
-</layers>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/data/uphide.fxml	Thu Jul 22 16:33:32 2010 +0100
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<layers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:noNamespaceSchemaLocation="http://www.nokia.com/FXML/10.1">
+	<comment>Created using carbide.fx 1.5.0;  FxML revision 0.84; Platform 10.1 </comment>
+	<visual src="Item">
+		<param name="opacity" type="anim">
+			<style>linear</style>
+			<duration>0.8</duration>
+			<keyframe at="0.0">1.0</keyframe>
+			<keyframe at="1.0">0.0</keyframe>
+		</param>
+		<param name="rotation_angle" type="anim">
+			<style>linear</style>
+			<duration>0.8</duration>
+			<keyframe at="0.0">0.0</keyframe>
+			<keyframe at="1.0">-45.0</keyframe>
+		</param>
+		<param name="rotation_origin_x" ref="visual.width">0.0</param>
+		<param name="rotation_origin_y" ref="visual.height">1.0</param>
+	</visual>
+</layers>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/data/zoomin.fxml	Thu Jul 22 16:33:32 2010 +0100
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<layers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:noNamespaceSchemaLocation="http://www.nokia.com/FXML/10.1">
+	<comment>Created using carbide.fx 1.5.0;  FxML revision 0.84; Platform 10.1 </comment>
+	<visual src="Item">
+		<param name="scale_y" type="anim">
+			<style>linear</style>
+			<duration>0.8</duration>
+			<keyframe at="0.0">1.0</keyframe>
+			<keyframe at="1.0">0.1</keyframe>
+		</param>
+		<param name="scale_origin_x" ref="visual.width">0.5</param>
+		<param name="scale_origin_y" ref="visual.height">0.5</param>
+		<param name="scale_x" type="anim">
+			<style>linear</style>
+			<duration>0.8</duration>
+			<keyframe at="0.0">1.0</keyframe>
+			<keyframe at="1.0">0.1</keyframe>
+		</param>
+		<param name="opacity" type="anim">
+			<style>linear</style>
+			<duration>0.8</duration>
+			<keyframe at="0.0">1.0</keyframe>
+			<keyframe at="1.0">0.0</keyframe>
+		</param>
+	</visual>
+</layers>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/data/zoomout.fxml	Thu Jul 22 16:33:32 2010 +0100
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<layers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:noNamespaceSchemaLocation="http://www.nokia.com/FXML/10.1">
+	<comment>Created using carbide.fx 1.5.0;  FxML revision 0.84; Platform 10.1 </comment>
+	<visual src="Item">
+		<param name="scale_x" type="anim">
+			<style>linear</style>
+			<duration>0.8</duration>
+			<keyframe at="0.0">0.1</keyframe>
+			<keyframe at="1.0">1.0</keyframe>
+		</param>
+		<param name="scale_origin_x" ref="visual.width">0.5</param>
+		<param name="scale_origin_y" ref="visual.height">0.5</param>
+		<param name="scale_y" type="anim">
+			<style>linear</style>
+			<duration>0.8</duration>
+			<keyframe at="0.0">0.1</keyframe>
+			<keyframe at="1.0">1.0</keyframe>
+		</param>
+		<param name="opacity" type="anim">
+			<style>linear</style>
+			<duration>0.8</duration>
+			<keyframe at="0.0">0.0</keyframe>
+			<keyframe at="1.0">1.0</keyframe>
+		</param>
+	</visual>
+</layers>
\ No newline at end of file
--- a/engine/collectionframework/datasource/manager/group/glxdatasourcemanager.mmp	Wed Jun 16 13:08:54 2010 +0100
+++ b/engine/collectionframework/datasource/manager/group/glxdatasourcemanager.mmp	Thu Jul 22 16:33:32 2010 +0100
@@ -66,5 +66,6 @@
 LIBRARY         flogger.lib
 LIBRARY		    HbCore.lib
 
+SMPSAFE
 // End of File
 
--- a/engine/collectionframework/datasource/manager/src/glxcollectionpluginbase.cpp	Wed Jun 16 13:08:54 2010 +0100
+++ b/engine/collectionframework/datasource/manager/src/glxcollectionpluginbase.cpp	Thu Jul 22 16:33:32 2010 +0100
@@ -102,26 +102,40 @@
 // ----------------------------------------------------------------------------
 //
 EXPORT_C void CGlxCollectionPluginBase::OpenL(const CMPXCollectionPath& aPath,
-                   const TArray<TMPXAttribute>& /*aAttrs*/,
+                   const TArray<TMPXAttribute>& aAttrs,
                    CMPXFilter* aFilter)
     {
     TRACER("void CGlxCollectionPluginBase::OpenL()");
     iPath = CMPXCollectionPath::NewL(aPath);
-    if(aFilter)
+    // When a collection is opened for browsing, 
+    // there are two queries executed with similar filter. 
+    // First query to open the collection from list / cloud view.
+    // Second one from grid view construction. To improve the grid opening
+    // performance, the first query will be completed with empty Id list.
+    TBool openRequest = EFalse;
+    for (TInt index = 0; index < aAttrs.Count(); index++)
         {
-        if(aFilter->IsSupported(KGlxFilterGeneralNavigationalStateOnly))
+        const TMPXAttribute attr = aAttrs[index];
+
+        if (attr == KGlxFilterGeneralNavigationalStateOnly)
             {
-            RArray<TMPXItemId> mpxIds;
-         	CleanupClosePushL(mpxIds);
-            iPath->AppendL(mpxIds.Array());
-            iObs->HandleOpen(iPath, KErrNone);
-            CleanupStack::PopAndDestroy(&mpxIds);
-            delete iPath;
-            iPath = NULL;
-            return;
+            openRequest = ETrue;
             }
         }
 
+    if ((aFilter && aFilter->IsSupported(
+            KGlxFilterGeneralNavigationalStateOnly)) || openRequest)
+        {
+        RArray<TMPXItemId> mpxIds;
+        CleanupClosePushL(mpxIds);
+        iPath->AppendL(mpxIds.Array());
+        iObs->HandleOpen(iPath, KErrNone);
+        CleanupStack::PopAndDestroy(&mpxIds);
+        delete iPath;
+        iPath = NULL;
+        return;
+        }
+
     TGlxMediaId targetId(aPath.Id());
     if (aPath.Levels() == KGlxCollectionRootLevel)
         {
@@ -218,7 +232,7 @@
 	    
 	    if(aSpecs->IsSupported(KMPXMediaGeneralSize))
 	    	{
-	    	tnFileInfo->iFileSize = aSpecs->ValueTObjectL<TInt>(KMPXMediaGeneralSize);
+	    	tnFileInfo->iFileSize = aSpecs->ValueTObjectL<TUint>(KMPXMediaGeneralSize);
 	    	countInfo++;
 	    	}
 	    if(aSpecs->IsSupported(KGlxMediaGeneralLastModifiedDate))
@@ -359,7 +373,7 @@
 EXPORT_C void CGlxCollectionPluginBase::HandleResponse(CMPXMedia* aResponse, CGlxRequest* aRequest, const TInt& aError)
 	{
     TRACER("void CGlxCollectionPluginBase::HandleResponse()");
-	
+    GLX_DEBUG2("CGlxCollectionPluginBase::HandleResponse()() aError=%d", aError);
     if (dynamic_cast<CGlxIdListRequest*>(aRequest))
 	// iRequest is a CGlxIdListRequest
 	    {
@@ -370,8 +384,20 @@
 	else if (dynamic_cast<CGlxThumbnailRequest*>(aRequest))
 	// iRequest is a CGlxThumbnailRequest
         {
- 		iObs->HandleMedia(aResponse, aError); 
-	    }
+        //when IAD update / sisx installation of S60 TNM is done and
+        //photos asks for the thumbnail, the thumbnail manager returns an 
+        //error KErrServerTerminated(-15)/KErrDied(-13) for which the MPX recreates
+        //the collection plugins and reconnects to the MPX server and goes into
+        //a invalid state. After this, the error is not propogated to the Medialist
+        //and no further requests are processed and it keeps returning KErrNotReady(-18)
+        //So, as a HACK we are changing the error code to KErrCompletion(-17), 
+        //for which the MPX collection does not take any action and propogates the error
+        //to the medialist. This error(KErrCompletion) is treated as a temporary error
+        //and the thumbnail request is made again from the medialist for which the
+        //S60 TNM returns the thumbnail properly.
+        iObs->HandleMedia(aResponse, ((aError == KErrServerTerminated
+                || aError == KErrDied) ? KErrCompletion : aError));
+        }
 	else if (dynamic_cast<CGlxGetRequest*>(aRequest))
 	// iRequest is a CGlxGetRequest
         {
--- a/engine/collectionframework/datasource/manager/src/glxdatasource.cpp	Wed Jun 16 13:08:54 2010 +0100
+++ b/engine/collectionframework/datasource/manager/src/glxdatasource.cpp	Thu Jul 22 16:33:32 2010 +0100
@@ -11,7 +11,7 @@
 *
 * Contributors:
 *
-* Description:   
+* Description: Implementation of the Data Source Class.
 *
 */
 
--- a/engine/collectionframework/datasource/manager/src/glxdatasourcetask.cpp	Wed Jun 16 13:08:54 2010 +0100
+++ b/engine/collectionframework/datasource/manager/src/glxdatasourcetask.cpp	Thu Jul 22 16:33:32 2010 +0100
@@ -11,7 +11,7 @@
 *
 * Contributors:
 *
-* Description:   
+* Description: Data Source Task Class.
 *
 */
 
--- a/engine/collectionframework/datasource/manager/test/group/t_cglxcommandrequest.mmp	Wed Jun 16 13:08:54 2010 +0100
+++ b/engine/collectionframework/datasource/manager/test/group/t_cglxcommandrequest.mmp	Thu Jul 22 16:33:32 2010 +0100
@@ -56,6 +56,6 @@
 // Libraries required by the tested code
 LIBRARY                 ecom.lib
 LIBRARY                 mpxcommon.lib
-
+SMPSAFE
 //deffile ../bwins/t_cglxcommandrequest.def
 // End of file
--- a/engine/collectionframework/datasource/manager/test/group/t_cglxgetrequest.mmp	Wed Jun 16 13:08:54 2010 +0100
+++ b/engine/collectionframework/datasource/manager/test/group/t_cglxgetrequest.mmp	Thu Jul 22 16:33:32 2010 +0100
@@ -56,6 +56,6 @@
 // Libraries required by the tested code
 LIBRARY                 ecom.lib
 LIBRARY                 mpxcommon.lib
-
+SMPSAFE
 //deffile ../bwins/t_cglxgetrequest.def
 // End of file
--- a/engine/collectionframework/datasource/manager/test/group/t_cglxidlistrequest.mmp	Wed Jun 16 13:08:54 2010 +0100
+++ b/engine/collectionframework/datasource/manager/test/group/t_cglxidlistrequest.mmp	Thu Jul 22 16:33:32 2010 +0100
@@ -58,6 +58,6 @@
 LIBRARY                 ecom.lib
 LIBRARY                 mpxcommon.lib
 
-
+SMPSAFE
 //deffile ../bwins/t_cglxidlistrequest.def
 // End of file
--- a/engine/collectionframework/datasource/manager/test/group/t_cglxthumbnailrequest.mmp	Wed Jun 16 13:08:54 2010 +0100
+++ b/engine/collectionframework/datasource/manager/test/group/t_cglxthumbnailrequest.mmp	Thu Jul 22 16:33:32 2010 +0100
@@ -58,6 +58,6 @@
 // Libraries required by the tested code
 LIBRARY                 ecom.lib
 LIBRARY                 mpxcommon.lib
-
+SMPSAFE
 deffile ../bwins/t_cglxthumbnailrequest.def
 // End of file
--- a/engine/collectionframework/datasource/plugins/glxdatasourcemde/group/glxdatasourcemde.mmp	Wed Jun 16 13:08:54 2010 +0100
+++ b/engine/collectionframework/datasource/plugins/glxdatasourcemde/group/glxdatasourcemde.mmp	Thu Jul 22 16:33:32 2010 +0100
@@ -82,4 +82,5 @@
 LIBRARY         iclextjpegapi.lib
 LIBRARY         imageconversion.lib
 
+SMPSAFE
 // End of File
--- a/engine/collectionframework/datasource/plugins/glxdatasourcemde2.5/group/glxdatasourcemde.mmp	Wed Jun 16 13:08:54 2010 +0100
+++ b/engine/collectionframework/datasource/plugins/glxdatasourcemde2.5/group/glxdatasourcemde.mmp	Thu Jul 22 16:33:32 2010 +0100
@@ -94,4 +94,7 @@
 LIBRARY         platformenv.lib
 LIBRARY         flogger.lib
 LIBRARY         imageconversion.lib
+LIBRARY	   	harvesterclient.lib
+
+SMPSAFE
 // End of File
--- a/engine/collectionframework/datasource/plugins/glxdatasourcemde2.5/inc/glxdatasourcemds.h	Wed Jun 16 13:08:54 2010 +0100
+++ b/engine/collectionframework/datasource/plugins/glxdatasourcemde2.5/inc/glxdatasourcemds.h	Thu Jul 22 16:33:32 2010 +0100
@@ -11,7 +11,7 @@
 *
 * Contributors:
 *
-* Description:   
+* Description: The data source mds class   
 *
 */
 
@@ -29,10 +29,18 @@
 #define _C_GLXDATASOURCEMDS_H_
 
 // INCLUDES
+#include <e32base.h>
+#include <w32std.h>
+#include <e32property.h> 
+
 #include <e32cmn.h>
 #include <f32file.h>
 
 #include <mdesession.h>
+
+#include <harvesterclient.h>
+#include <harvestereventenum.h>
+
 #include <mglxtnstorage.h>
 #include <mpxcollectionmessagedefs.h>
 
@@ -44,16 +52,104 @@
 
 #include "mthumbnailfetchrequestobserver.h"
 #endif
-
 #include "glxdatasource.h"
 
 // FORWARD DECLARATIONS
 class CGlxRequest;
-
 #ifndef USE_S60_TNM
 class CGlxtnThumbnailCreator;
 class CGlxtnThumbnailDatabase;
 #endif
+class CGlxDataSourceMde ;
+
+const TUid KHarvesterPSShutdown = { 0x200009F5 } ;
+const TInt KMdSShutdown     = 0x00000002; // values 1 = shutdown, 0 = restart, normal state
+
+static _LIT_SECURITY_POLICY_PASS(KAllowAllPolicy);
+static _LIT_SECURITY_POLICY_C1(KPowerMgmtPolicy,ECapabilityPowerMgmt);
+
+/**
+ * PSCW Listener Observer interface for signaling that MDS has Shutdown/restarted
+ */
+class MGlxMDSShutdownObserver
+    {
+public:
+
+    virtual void ShutdownNotification(TInt aShutdownState) = 0;
+    };
+
+/**
+ *  Active object for observing P&S keys
+ *
+ *  @since S60 v5.0
+ */
+class CGlxMDSShutdownObserver: public CActive
+    {
+public:
+
+    /**
+     * Two-phased constructor.
+     *
+     * @since S60 v5.0
+     * @return Instance of CGlxMDSShutdownObserver.
+     */
+    static CGlxMDSShutdownObserver* NewL( MGlxMDSShutdownObserver& aObserver, const TUid& aKeyCategory,
+                                      const TInt aPropertyKey, TBool aDefineKey);
+
+    /**
+     * Destructor
+     *
+     * @since S60 v5.0
+     */
+    virtual ~CGlxMDSShutdownObserver();
+    
+protected:
+
+    /**
+     * Handles an active object's request completion event.
+     *
+     * @since S60 v5.0
+     */
+    void RunL();
+
+    /**
+     * Implements cancellation of an outstanding request.
+     *
+     * @since S60 v5.0
+     */
+    void DoCancel();
+
+private:
+
+    /**
+     * C++ default constructor
+     *
+     * @since S60 v5.0
+     * @return Instance of CGlxMDSShutdownObserver.
+     */
+    CGlxMDSShutdownObserver( MGlxMDSShutdownObserver& aObserver, const TUid& aKeyCategory,
+                         const TInt iPropertyKey, TBool aDefineKey);
+
+    /**
+     * Symbian 2nd phase constructor can leave.
+     *
+     * @since S60 v5.0
+     */
+    void ConstructL();
+
+private:
+    
+    // not own
+    MGlxMDSShutdownObserver& iObserver;
+    
+    const TUid& iKeyCategory;
+    RProperty iProperty;
+    TInt iPropertyKey;
+    
+    TBool iDefineKey;
+};
+
+
 
 // CONSTANTS
 
@@ -68,10 +164,12 @@
  */
 class CGlxDataSourceMde : public CGlxDataSource,
                           public MMdESessionObserver,
+                          public MGlxMDSShutdownObserver,
                           public MMdEObjectObserver,
                           public MMdEObjectPresentObserver,
                           public MMdERelationObserver,
-                          public MMdERelationPresentObserver
+                          public MMdERelationPresentObserver,
+                          public MHarvesterEventObserver
 #ifdef USE_S60_TNM
 						, public MThumbnailManagerObserver
 #else
@@ -90,11 +188,19 @@
 
 public:
     // from CGlxDataSource
-    CGlxDataSourceTask* CreateTaskL(CGlxRequest* aRequest, MGlxDataSourceRequestObserver& aObserver);
+    CGlxDataSourceTask* CreateTaskL(CGlxRequest* aRequest,
+            MGlxDataSourceRequestObserver& aObserver);
+public:
+    // from MHarvesterEventObserver
+    void HarvestingUpdated( 
+                HarvesterEventObserverType aHEObserverType, 
+                HarvesterEventState aHarvesterEventState,
+                TInt aItemsLeft );
 
 #ifdef USE_S60_TNM
 public:
-	void FetchThumbnailL(CGlxRequest* aRequest, MThumbnailFetchRequestObserver& aObserver);
+	void FetchThumbnailL(CGlxRequest* aRequest, 
+	        MThumbnailFetchRequestObserver& aObserver);
 	TInt CancelFetchThumbnail();
 #else
 private: 
@@ -161,13 +267,15 @@
 #endif
 		
 private:
-    void BackgroundThumbnailMessageL(const TGlxMediaId& aId, const TSize& aSize, TInt aError);
+    void BackgroundThumbnailMessageL(const TGlxMediaId& aId, const TSize& aSize, 
+            TInt aError);
 
     void DoSessionInitL();
 
     void AddMdEObserversL();
 
-    void ProcessUpdateArray(const RArray<TItemId>& aArray, TMPXChangeEventType aType, TBool aIsObject);
+    void ProcessUpdateArray(const RArray<TItemId>& aArray, TMPXChangeEventType aType,
+            TBool aIsObject);
 
     void ProcessItemUpdateL();
 
@@ -180,8 +288,19 @@
     void TaskCompletedL();
 
     void TaskStartedL();
+    
+#ifdef USE_S60_TNM
+    /*
+     * This function doesnt add up any value, added to reduce compiler warnings
+     */
+    void ThumbnailReadyL( TInt aError, MThumbnailData& aThumbnail,
+        TThumbnailRequestId aId, TBool aQuality );
+#endif
+    
+public:
 
-public:
+    void CreateSession();
+    
     inline CMdESession& Session() const;
     
 #ifndef USE_S60_TNM
@@ -236,6 +355,9 @@
     TBool SameMonth(const TTime& aOldDate, const TTime& aNewDate);
      
 	TBool ContainerIsLeft(CMdEObjectDef& aObjectDef);    
+	
+	// from MGlxMDSShutdownObserver
+    void ShutdownNotification(TInt aShutdownState);
 
 private:
 #ifdef USE_S60_TNM
@@ -247,10 +369,7 @@
     TBool iTnRequestInProgress;
     TInt iTnHandle;
     TGlxMediaId iMediaId;
-#ifdef _DEBUG   
-	TTime iStartTime;
-	TTime iStopTime;
-#endif
+    
 #else
     CGlxtnThumbnailCreator*   iThumbnailCreator;
     CGlxtnThumbnailDatabase*  iThumbnailDatabase;
@@ -279,6 +398,8 @@
     
     RArray<TTime> iMonthArray;
     RArray<TGlxMediaId> iMonthList;
+    RArray<TItemId> iAddedItems;
+    
     TTime iFirstMonth;
     TTime iLastMonth;
     
@@ -296,6 +417,16 @@
     RArray<TUpdateData> iUpdateData;
 	TBool iPauseUpdate;
     TInt iDeletedCount;
+    
+    RHarvesterClient iHC;
+    TBool iHarvestingOngoing;
+
+    CGlxMDSShutdownObserver* iMDSShutdownObserver;
+
+#ifdef _DEBUG
+    TTime iStartTime;
+    TTime iStopTime;
+#endif    
     };
 
 #include "glxdatasourcemds.inl"
--- a/engine/collectionframework/datasource/plugins/glxdatasourcemde2.5/inc/glxdatasourcemds.inl	Wed Jun 16 13:08:54 2010 +0100
+++ b/engine/collectionframework/datasource/plugins/glxdatasourcemde2.5/inc/glxdatasourcemds.inl	Thu Jul 22 16:33:32 2010 +0100
@@ -11,7 +11,7 @@
 *
 * Contributors:
 *
-* Description:   
+* Description:  Inline methods for the data source MDS class
 *
 */
 
--- a/engine/collectionframework/datasource/plugins/glxdatasourcemde2.5/inc/glxdatasourcetaskmds.h	Wed Jun 16 13:08:54 2010 +0100
+++ b/engine/collectionframework/datasource/plugins/glxdatasourcemde2.5/inc/glxdatasourcetaskmds.h	Thu Jul 22 16:33:32 2010 +0100
@@ -67,7 +67,8 @@
  *  CGlxDataSourceTaskMde class 
  *  Base class for mde tasks: provides task generic functionality.
  */
-NONSHARABLE_CLASS(CGlxDataSourceTaskMde) : 	public CGlxDataSourceTask, public MMdEQueryObserver
+NONSHARABLE_CLASS(CGlxDataSourceTaskMde) : 	public CGlxDataSourceTask, 
+                                            public MMdEQueryObserver
 	{
 public:
     /**
@@ -76,8 +77,8 @@
      * @param aObserver observer to be informed when task has completed.
      * @param aDataSource data source to be used by this object.
      */
-    CGlxDataSourceTaskMde(CGlxRequest* aRequest, MGlxDataSourceRequestObserver& aObserver, 
-            CGlxDataSource* aDataSource);
+    CGlxDataSourceTaskMde(CGlxRequest* aRequest, MGlxDataSourceRequestObserver& 
+            aObserver, CGlxDataSource* aDataSource);
     
     /**
      * Destructor.
@@ -142,7 +143,8 @@
      */
     CGlxDataSourceMde* DataSource();
 
-    void AddMonthFilterL(const TGlxMediaId& aContainerId, TGlxFilterProperties& aFilterProperties);
+    void AddMonthFilterL(const TGlxMediaId& aContainerId, 
+            TGlxFilterProperties& aFilterProperties);
     
     void AddMonthFilterL(CMdEObject* aMonth, TGlxFilterProperties& aFilterProperties);
         
@@ -154,11 +156,14 @@
      * EFalse if the container is on the right side of the relation
      * 
      */	
-    void SetQueryConditionsL(CMdEQuery& aQuery, const TGlxFilterProperties& aFilterProperties, const TGlxMediaId aContainerId, CMdEObjectDef& aObjectDef);
+    void SetQueryConditionsL(CMdEQuery& aQuery, const TGlxFilterProperties& aFilterProperties, 
+            const TGlxMediaId aContainerId, CMdEObjectDef& aObjectDef);
 
-    void SetQueryFilterConditionsL(CMdELogicCondition& aLogicCondition, CMdEObjectDef& aObjectDef, const TGlxFilterProperties& aFilterProperties);
+    void SetQueryFilterConditionsL(CMdELogicCondition& aLogicCondition, CMdEObjectDef& aObjectDef,
+            const TGlxFilterProperties& aFilterProperties);
 
-    void SetSortOrderL(CMdEQuery& aQuery, CMdEObjectDef& aObjectDef, const TGlxFilterProperties& aFilterProperties);
+    void SetSortOrderL(CMdEQuery& aQuery, CMdEObjectDef& aObjectDef, 
+            const TGlxFilterProperties& aFilterProperties);
 
     /**
      * Returns the maximum number of items that a query should find.
@@ -171,7 +176,8 @@
      */
     void RemoveQuery();
 
-    void DoQueryL(CMdEObjectDef& aObjectDef, TBool aIsContent, TGlxQueryType aQueryType, TQueryResultMode aResultMode, const TGlxMediaId& aContainerId);
+    void DoQueryL(CMdEObjectDef& aObjectDef, TBool aIsContent, TGlxQueryType aQueryType,
+            TQueryResultMode aResultMode, const TGlxMediaId& aContainerId);
 
     /**
      * Adds queries for images and or videos to the query queue. The queries will return objects
@@ -181,7 +187,8 @@
      * image or video queries are required if iItemType is not set to EGlxFilterImage or 
      * EGlxFitlerVideo a query for images will be queued first followed by a query for videos.
      */
-    void QueueImageVideoObjectQueriesL(const RArray<TGlxMediaId>& aObjectIds, const TGlxFilterProperties& aFilterProperties);
+    void QueueImageVideoObjectQueriesL(const RArray<TGlxMediaId>& aObjectIds, 
+            const TGlxFilterProperties& aFilterProperties);
     
     /**
      * Adds a query for tag objects that have ids specified by aObjectIds
--- a/engine/collectionframework/datasource/plugins/glxdatasourcemde2.5/inc/glxdatasourcetaskmdsattribute.h	Wed Jun 16 13:08:54 2010 +0100
+++ b/engine/collectionframework/datasource/plugins/glxdatasourcemde2.5/inc/glxdatasourcetaskmdsattribute.h	Thu Jul 22 16:33:32 2010 +0100
@@ -64,7 +64,8 @@
      * @param aObserver observer to be informed when task has completed.
      * @param aDataSource data source to be used by this object.
      */
-	CGlxDataSourceTaskMdeAttributeMde(CGlxGetRequest* aRequest, MGlxDataSourceRequestObserver& aObserver, CGlxDataSource* aDataSource);
+	CGlxDataSourceTaskMdeAttributeMde(CGlxGetRequest* aRequest, 
+	        MGlxDataSourceRequestObserver& aObserver, CGlxDataSource* aDataSource);
 	
     /**
      * Destructor.
@@ -94,9 +95,11 @@
 
 	void AddCollectionAttributesL(CMPXMedia* aEntry);
 	
-	void AddContainerAttributesL(CMPXMedia* aEntry, CMdEObject* aContainer, CGlxDataSource::TContainerType aType);
+	void AddContainerAttributesL(CMPXMedia* aEntry, CMdEObject* aContainer, 
+	        CGlxDataSource::TContainerType aType);
 	
-	void AddItemAttributesL(CMPXMedia* aEntry, CMdEObject* aItem, CGlxDataSource::TItemType aType);
+	void AddItemAttributesL(CMPXMedia* aEntry, CMdEObject* aItem, 
+	        CGlxDataSource::TItemType aType);
 	
     /**
      * Add location information to a media object from MDS.
@@ -127,8 +130,10 @@
      * of the object being queried is provided by the aObjectDef parameter
      *  
      */
-    void QueueObjectQueryL(CMdEObjectDef& aObjectDef, TBool aIsContent, TGlxQueryType aQueryType, TQueryResultMode aResultMode, 
-                          const TGlxMediaId& aContainerId, TMPXAttribute aAttribute, CMPXMedia* aEntry, 
+    void QueueObjectQueryL(CMdEObjectDef& aObjectDef, TBool aIsContent, 
+            TGlxQueryType aQueryType, TQueryResultMode aResultMode, 
+                          const TGlxMediaId& aContainerId, 
+                          TMPXAttribute aAttribute, CMPXMedia* aEntry, 
                           const TGlxFilterProperties& aFilterProperties);
     
 
@@ -156,10 +161,11 @@
      * Attributes associated with outstanding queries
      */
     RArray< TGlxQueryAttribute > iQueryAttributes;
+    
 #ifdef _DEBUG
-	TTime iStartTime;
-	TTime iStopTime;
-#endif
+    TTime iStartTime;
+    TTime iStopTime;
+#endif    
 	};
 
 
--- a/engine/collectionframework/datasource/plugins/glxdatasourcemde2.5/inc/glxdatasourcetaskmdscommand.h	Wed Jun 16 13:08:54 2010 +0100
+++ b/engine/collectionframework/datasource/plugins/glxdatasourcemde2.5/inc/glxdatasourcetaskmdscommand.h	Thu Jul 22 16:33:32 2010 +0100
@@ -64,7 +64,8 @@
      * @param aObserver observer to be informed when task has completed.
      * @param aDataSource data source to be used by this object.
      */
-     CGlxDataSourceTaskMdeCommand(CGlxCommandRequest* aRequest, MGlxDataSourceRequestObserver& aObserver,
+     CGlxDataSourceTaskMdeCommand(CGlxCommandRequest* aRequest, 
+             MGlxDataSourceRequestObserver& aObserver,
              CGlxDataSource* aDataSource);
 
      /**
@@ -88,12 +89,14 @@
      /**
      * See @ref MGlxCommandParserCallback::AddToContainerL
      */ 
-     void AddToContainerL(const RArray<TGlxMediaId>& aSourceIds, const RArray<TGlxMediaId>& aTargetContainers);
+     void AddToContainerL(const RArray<TGlxMediaId>& aSourceIds, 
+             const RArray<TGlxMediaId>& aTargetContainers);
      
      /**
       * See @ref MGlxCommandParserCallback::AddToContainerL
       */ 
-     void AddToContainerL(const TDesC& aSourceUri, const RArray<TGlxMediaId>& aTargetContainers);    
+     void AddToContainerL(const TDesC& aSourceUri, 
+             const RArray<TGlxMediaId>& aTargetContainers);    
      
      /**
       * See @ref MGlxCommandParserCallback::CopyL
@@ -108,7 +111,8 @@
      /**
       * See @ref MGlxCommandParserCallback::RemoveFromContainerL
       */ 
-     void RemoveFromContainerL(const RArray<TGlxMediaId>& aItemIds, const TGlxMediaId& aContainerId);
+     void RemoveFromContainerL(const RArray<TGlxMediaId>& aItemIds,
+             const TGlxMediaId& aContainerId);
      
      /**
       * See @ref MGlxCommandParserCallback::DeleteL
@@ -123,12 +127,14 @@
      /**
       * See @ref MGlxCommandParserCallback::SetDescriptionL
       */ 
-     void SetDescriptionL(const RArray<TGlxMediaId>& aItemIds, const TDesC& aDescription);
+     void SetDescriptionL(const RArray<TGlxMediaId>& aItemIds, 
+             const TDesC& aDescription);
      
      /**
       * See @ref MGlxCommandParserCallback::SetCaptureLocationL
       */ 
-     void SetCaptureLocationL(const RArray<TGlxMediaId>& aItemIds, const TCoordinate& aCoordinate);
+     void SetCaptureLocationL(const RArray<TGlxMediaId>& aItemIds, 
+             const TCoordinate& aCoordinate);
      
      /**
       * See @ref MGlxCommandParserCallback::ThumbnailCleanupL
@@ -165,7 +171,8 @@
 	 * @param aDrive destination drive.
 	 * @param aFileOperation file operation to perform (either a copy or a move) 
 	 */
-	void FileOperationL(const TArray<TGlxMediaId>& aSourceIds, const TDesC& aDrive, TFileOperation aFileOperation);
+	void FileOperationL(const TArray<TGlxMediaId>& aSourceIds, 
+	        const TDesC& aDrive, TFileOperation aFileOperation);
 	
     /**
 	 * Gets the container id for a given media id.
@@ -282,6 +289,18 @@
      */	
 	
 	TInt SearchStringL(TInt aResourceId);
+	
+	/**
+	 * Timer callback to stop scheduler wait
+	 * @param aPtr Pointer to object that started the timer
+	 * @return 0 to signal that further callbacks are unnecessary, 1 otherwise
+	 */
+	static TInt SchedulerStopCallback(TAny* aPtr);
+	    
+	/**
+	 * Starts the scheduler wait timer. When complete, Scheduler is stopped
+	 */	
+	void SchedulerStopComplete();
 
 private:	
 	/**
@@ -325,6 +344,16 @@
     *
     */
     CGlxStringCache* iStringCache;
+    
+    /**
+	 *  Timer that checks if scheduler wait needs to be cancelled  
+	 */
+    CPeriodic* iTimer; 
+    
+    /**
+	*  Active scheduler wait object. (Owned)
+	*/
+    CActiveSchedulerWait* iSchedulerWait;
 	};
 
 #endif //_C_GLXDATASOURCETASKMDSCOMMAND_H_
--- a/engine/collectionframework/datasource/plugins/glxdatasourcemde2.5/inc/glxdatasourcetaskmdsidlist.h	Wed Jun 16 13:08:54 2010 +0100
+++ b/engine/collectionframework/datasource/plugins/glxdatasourcemde2.5/inc/glxdatasourcetaskmdsidlist.h	Thu Jul 22 16:33:32 2010 +0100
@@ -47,7 +47,8 @@
  *  CGlxDataSourceTaskMdeIdList class 
  *  Task to handle id list requests.
  */
-NONSHARABLE_CLASS(CGlxDataSourceTaskMdeIdList) : public CGlxDataSourceTaskMde, public MGlxtnThumbnailCreatorClient
+NONSHARABLE_CLASS(CGlxDataSourceTaskMdeIdList) : public CGlxDataSourceTaskMde,
+                                                 public MGlxtnThumbnailCreatorClient
 
 	{
 public:
@@ -57,7 +58,8 @@
      * @param aObserver observer to be informed when task has completed.
      * @param aDataSource data source to be used by this object.
      */
-     CGlxDataSourceTaskMdeIdList(CGlxIdListRequest* aRequest, MGlxDataSourceRequestObserver& aObserver, CGlxDataSource* aDataSource);
+     CGlxDataSourceTaskMdeIdList(CGlxIdListRequest* aRequest, 
+             MGlxDataSourceRequestObserver& aObserver, CGlxDataSource* aDataSource);
         
      /**
       * Destructor.
@@ -118,11 +120,17 @@
 private:
 	void DoHandleListQueryCompletedL();
 		
-    void DoMonthListCreationL(CMdEQuery& aQuery, const TGlxFilterProperties& aFilterProperties);
+    void DoMonthListCreationL(CMdEQuery& aQuery, const TGlxFilterProperties& 
+            aFilterProperties);
         
     void DoPostFilterComplete(const RArray<TGlxMediaId>& aIdArray, TInt aErrorCode);	
     
-    void PostFilterL(const RArray<TGlxMediaId>& aFilteredList, const TGlxFilterProperties& aFilterProperties);                                                                            
+    void PostFilterL(const RArray<TGlxMediaId>& aFilteredList,
+            const TGlxFilterProperties& aFilterProperties);                                                                            
+#ifdef _DEBUG
+    TTime iStartTime;
+    TTime iStopTime;
+#endif
 	};
 
 #endif // GLXDATASOURCETASKMDSIDLIST_H_
--- a/engine/collectionframework/datasource/plugins/glxdatasourcemde2.5/inc/glxdatasourcetaskmdsthumbnail.h	Wed Jun 16 13:08:54 2010 +0100
+++ b/engine/collectionframework/datasource/plugins/glxdatasourcemde2.5/inc/glxdatasourcetaskmdsthumbnail.h	Thu Jul 22 16:33:32 2010 +0100
@@ -77,7 +77,7 @@
 
 #ifdef USE_S60_TNM
 private: //MThumbnailFetchRequestObserver
-    void ThumbnailFetchComplete(TInt aError);
+    void ThumbnailFetchComplete(TInt aError, TBool aQuality);
     void FetchFileInfoL();
 #endif
 
--- a/engine/collectionframework/datasource/plugins/glxdatasourcemde2.5/inc/mthumbnailfetchrequestobserver.h	Wed Jun 16 13:08:54 2010 +0100
+++ b/engine/collectionframework/datasource/plugins/glxdatasourcemde2.5/inc/mthumbnailfetchrequestobserver.h	Thu Jul 22 16:33:32 2010 +0100
@@ -28,7 +28,7 @@
 class MThumbnailFetchRequestObserver
     {
 public:
-    virtual void ThumbnailFetchComplete(TInt aError) = 0;
+    virtual void ThumbnailFetchComplete(TInt aError, TBool aQuality) = 0;
     virtual void FetchFileInfoL() = 0;
     };
 
--- a/engine/collectionframework/datasource/plugins/glxdatasourcemde2.5/src/glxdatasourcemds.cpp	Wed Jun 16 13:08:54 2010 +0100
+++ b/engine/collectionframework/datasource/plugins/glxdatasourcemde2.5/src/glxdatasourcemds.cpp	Thu Jul 22 16:33:32 2010 +0100
@@ -20,6 +20,7 @@
 // INCLUDE FILES
 #include "glxdatasourcemds.h"
 
+#include <e32base.h>
 #include <fbs.h>
 #include <glxbackgroundtnmessagedefs.h>
 #include <glxcollectionmessagedefs.h>
@@ -48,14 +49,14 @@
 #include "glxdatasourcetaskmdsidlist.h"
 #include "glxdatasourcetaskmdsthumbnail.h"
 
-#ifndef USE_S60_TNM
+#ifdef USE_S60_TNM
+const TInt KMaxGridThumbnailWidth = 200;
+#else
 const TInt KGlxThumbnailCleanupAfterDeletions = 200;
 
 _LIT(KGlxMdeDataSourceThumbnailDatabase, "glxmdstn");
 #endif
 
-const TInt KMaxGridThumbnailWidth = 200;
-
 _LIT(KObjectDefLocation, "Location");
 _LIT(KObjectDefNameAlbum, "Album");
 _LIT(KObjectDefNameImage, "Image");
@@ -77,6 +78,8 @@
 
 #undef __USING_INTELLIGENT_UPDATE_FILTERING
 
+const TInt KHarvestUpdateChunkSize = 1000;
+
 // ---------------------------------------------------------------------------
 // MPXChangeEventType
 // Helper method
@@ -101,6 +104,110 @@
 	return type;
 	}
 
+
+// ---------------------------------------------------------------------------
+// CGlxMDSShutdownObserver::NewL()
+// ---------------------------------------------------------------------------
+//
+CGlxMDSShutdownObserver* CGlxMDSShutdownObserver::NewL( MGlxMDSShutdownObserver& aObserver,
+                                                const TUid& aKeyCategory,
+                                                const TInt aPropertyKey,
+                                                TBool aDefineKey)
+    {
+    TRACER("CGlxMDSShutdownObserver* CGlxMDSShutdownObserver::NewL");
+    CGlxMDSShutdownObserver* self = new( ELeave )CGlxMDSShutdownObserver( aObserver, 
+                                                                  aKeyCategory,
+                                                                  aPropertyKey,
+                                                                  aDefineKey);
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CGlxMDSShutdownObserver::CGlxMDSShutdownObserver()
+// ---------------------------------------------------------------------------
+//
+CGlxMDSShutdownObserver::CGlxMDSShutdownObserver( MGlxMDSShutdownObserver& aObserver,
+                                          const TUid& aKeyCategory,
+                                          const TInt aPropertyKey,
+                                          TBool aDefineKey)
+    : CActive( CActive::EPriorityStandard ), iObserver( aObserver ),
+      iKeyCategory( aKeyCategory ), iPropertyKey(aPropertyKey), iDefineKey( aDefineKey )
+    {   
+    TRACER("CGlxMDSShutdownObserver::CGlxMDSShutdownObserver()");
+    CActiveScheduler::Add( this );
+    }
+
+// ---------------------------------------------------------------------------
+// CGlxMDSShutdownObserver::ConstructL()
+// ---------------------------------------------------------------------------
+//
+void CGlxMDSShutdownObserver::ConstructL()
+    { 
+    TRACER("void CGlxMDSShutdownObserver::ConstructL()");
+    // define P&S property types
+    if (iDefineKey)
+        {
+        RProperty::Define(iKeyCategory,iPropertyKey,
+                          RProperty::EInt,KAllowAllPolicy,KPowerMgmtPolicy);
+        }
+    
+    // attach to the property
+    TInt err = iProperty.Attach(iKeyCategory,iPropertyKey,EOwnerThread);
+    User::LeaveIfError(err);
+    
+    // wait for the previously attached property to be updated
+    iProperty.Subscribe(iStatus);
+    SetActive();
+    }
+
+// ---------------------------------------------------------------------------
+// CGlxMDSShutdownObserver::~CGlxMDSShutdownObserver()
+// ---------------------------------------------------------------------------
+//
+CGlxMDSShutdownObserver::~CGlxMDSShutdownObserver()
+    {
+    TRACER("CGlxMDSShutdownObserver::~CGlxMDSShutdownObserver()");
+    Cancel();
+    iProperty.Close();
+    }
+
+// ---------------------------------------------------------------------------
+// CGlxMDSShutdownObserver::RunL()
+// ---------------------------------------------------------------------------
+//
+void CGlxMDSShutdownObserver::RunL()
+    {
+    TRACER("void CGlxMDSShutdownObserver::RunL()");
+
+    // resubscribe before processing new value to prevent missing updates
+    iProperty.Subscribe(iStatus);
+    SetActive();
+    
+    // retrieve the value
+    TInt value = 0;
+    TInt err = iProperty.Get(value);
+    GLX_DEBUG2("CGlxMDSShutdownObserver::RunL(): iProperty.Get(value); returns %d", err);
+    
+    User::LeaveIfError(err);
+
+    iObserver.ShutdownNotification(value);
+    }
+
+// ---------------------------------------------------------------------------
+// CGlxMDSShutdownObserver::DoCancel()
+// ---------------------------------------------------------------------------
+//
+void CGlxMDSShutdownObserver::DoCancel()
+    {
+    TRACER("void CGlxMDSShutdownObserver::DoCancel()");
+    iProperty.Cancel();
+    }
+
+
+
 // ============================ MEMBER FUNCTIONS ==============================
 
 // ---------------------------------------------------------------------------
@@ -143,14 +250,17 @@
     	}
     delete iThumbnailDatabase;
 #endif
-
     iFs.Close();
+    iHC.Close();
     RFbsSession::Disconnect();
     iMonthArray.Close();
     iMonthList.Close();
     iUpdateData.Close();
+    iAddedItems.Reset();
+    iAddedItems.Close();
     delete iUpdateCallback;
     delete iCreateSessionCallback;
+    delete iMDSShutdownObserver ;
 	}
 
 // ---------------------------------------------------------------------------
@@ -159,7 +269,7 @@
 //
 CGlxDataSourceMde::CGlxDataSourceMde()
 	{
-    TRACER("CGlxDataSourceMde::CGlxDataSourceMde()")
+    TRACER("CGlxDataSourceMde::CGlxDataSourceMde()");
     //No Implementation
 	}
 
@@ -169,7 +279,7 @@
 //
 void CGlxDataSourceMde::ConstructL()
 	{
-    TRACER("CGlxDataSourceMde::ConstructL()")
+    TRACER("CGlxDataSourceMde::ConstructL()");
     
 	iDataSourceReady = EFalse;			
     User::LeaveIfError(iFs.Connect());
@@ -179,20 +289,27 @@
 
 #ifdef USE_S60_TNM
     iTnEngine = CThumbnailManager::NewL( *this);
-    iTnEngine->SetFlagsL(CThumbnailManager::EAllowAnySize);
-    iTnEngine->SetDisplayModeL( EColor64K );
+    iTnEngine->SetDisplayModeL( EColor16M );
     iTnRequestInProgress = EFalse;
 #else
 	iThumbnailCreator = CGlxtnThumbnailCreator::InstanceL();
 	iThumbnailDatabase = CGlxtnThumbnailDatabase::NewL(
             	                        KGlxMdeDataSourceThumbnailDatabase, this);
 #endif
-         	                        
+            	                        
     iCreateSessionCallback = new ( ELeave )
 	    CAsyncCallBack( TCallBack( CreateSession, this ), CActive::EPriorityHigh );
+    
+    iMDSShutdownObserver = CGlxMDSShutdownObserver::NewL( *this, KHarvesterPSShutdown, KMdSShutdown, EFalse );
+    
     iUpdateCallback = new ( ELeave )
 	    CAsyncCallBack( TCallBack( ProcessItemUpdate, this ), CActive::EPriorityLow );
     iUpdateData.Reserve(100); // ignore if it fails
+    
+    User::LeaveIfError(iHC.Connect());
+    iHC.AddHarvesterEventObserver(*this, EHEObserverTypePlaceholder, KHarvestUpdateChunkSize);
+
+    iHarvestingOngoing = EFalse;
 	}
 	
 // ----------------------------------------------------------------------------
@@ -202,20 +319,22 @@
 //    
 void CGlxDataSourceMde::HandleSessionOpened( CMdESession& aSession, TInt aError )    
     {
-    TRACER("CGlxDataSourceMde::HandleSessionOpened(CMdESession& aSession, TInt aError)")
+    TRACER("CGlxDataSourceMde::HandleSessionOpened(CMdESession& aSession, TInt aError)");
     if( KErrNone != aError )
         {
         HandleSessionError(aSession, aError);
         }
     TRAPD(err, DoSessionInitL());
-    if( KErrNone != err )
+    if (KErrNone == err)
+        {
+        iSessionOpen = ETrue;
+        iDataSourceReady = ETrue;
+        TryStartTask(ETrue);
+        }
+    else
         {
         HandleSessionError(aSession, err);
         }
-    
-    iSessionOpen = ETrue;
-    iDataSourceReady = ETrue;
-	TryStartTask(ETrue);
     }
     
 // ----------------------------------------------------------------------------
@@ -223,28 +342,37 @@
 // CMPXCollectionMdEPlugin::HandleSessionError
 // ----------------------------------------------------------------------------
 //     
-void CGlxDataSourceMde::HandleSessionError(CMdESession& /*aSession*/, TInt /*aError*/ )    
+void CGlxDataSourceMde::HandleSessionError(CMdESession& /*aSession*/, TInt aError )    
     {
-    TRACER("CGlxDataSourceMde::HandleSessionError(CMdESession& /*aSession*/, TInt /*aError*/)")
-    delete iSession;
-    iSession = NULL;
+    TRACER("CGlxDataSourceMde::HandleSessionError(CMdESession& /*aSession*/, TInt aError)")
+    GLX_DEBUG2("void CGlxDataSourceMde::HandleSessionError() aError(%d)", aError);
+
     iDataSourceReady = EFalse;
     iSessionOpen = EFalse;
-    iCreateSessionCallback->CallBack();
+
+    // We wait till MDS restarts before starting the session if the current session is locked.
+    // that is handled separately by the MDS Shutdown PUB SUB Framework.   
+    // for everything else we use the generic method and continue.
+    if ( (KErrLocked != aError) && ( KErrServerTerminated != aError) )
+        {
+        iCreateSessionCallback->CallBack();
+        }
     }
 
-
 // ---------------------------------------------------------------------------
 // CreateTaskL
 // ---------------------------------------------------------------------------
 //
-CGlxDataSourceTask* CGlxDataSourceMde::CreateTaskL(CGlxRequest* aRequest, MGlxDataSourceRequestObserver& aObserver)
+CGlxDataSourceTask* CGlxDataSourceMde::CreateTaskL(CGlxRequest* aRequest, 
+        MGlxDataSourceRequestObserver& aObserver)
 	{
-    TRACER("CGlxDataSourceTask* CGlxDataSourceMde::CreateTaskL(CGlxRequest* aRequest, MGlxDataSourceRequestObserver& aObserver)")	
+    TRACER("CGlxDataSourceTask* CGlxDataSourceMde::CreateTaskL(CGlxRequest* aRequest,MGlxDataSourceRequestObserver& aObserver)")	;
 	if(dynamic_cast<CGlxCommandRequest*>(aRequest))
 		{
         CleanupStack::PushL(aRequest);
-        CGlxDataSourceTaskMdeCommand* task = new (ELeave) CGlxDataSourceTaskMdeCommand(static_cast<CGlxCommandRequest*>(aRequest), aObserver, this);
+        CGlxDataSourceTaskMdeCommand* task = new (ELeave) 
+        CGlxDataSourceTaskMdeCommand(static_cast<CGlxCommandRequest*>(aRequest),
+                aObserver, this);
 		CleanupStack::Pop(aRequest); // now owned by task
         CleanupStack::PushL(task);
         task->ConstructL();
@@ -253,17 +381,10 @@
 		}
 	else if (dynamic_cast< CGlxGetRequest *>(aRequest))
 		{
-	    GLX_LOG_INFO("==> CGlxDataSourceMde::CreateTaskL - CGlxDataSourceTaskMdeAttributeMde+");
-#ifdef _DEBUG
-        _LIT( KFormatTimeStamp, "[%H:%T:%S.%*C5]");
-	    TTime time;
-	    time.HomeTime(); // Get home time
-	    TBuf<32> timeStampBuf;
-	    time.FormatL(timeStampBuf, KFormatTimeStamp);
-	    RDebug::Print(_L("%S"), &timeStampBuf);    
-#endif
         CleanupStack::PushL(aRequest);
-        CGlxDataSourceTaskMdeAttributeMde* task = new (ELeave) CGlxDataSourceTaskMdeAttributeMde(static_cast<CGlxGetRequest*>(aRequest), aObserver, this);
+        CGlxDataSourceTaskMdeAttributeMde* task = new (ELeave) 
+        CGlxDataSourceTaskMdeAttributeMde(static_cast<CGlxGetRequest*>(aRequest),
+                aObserver, this);
 		CleanupStack::Pop(aRequest); // now owned by task
         CleanupStack::PushL(task);
         task->ConstructL();
@@ -273,7 +394,9 @@
 	else if (dynamic_cast< CGlxIdListRequest *>(aRequest))
 		{	
         CleanupStack::PushL(aRequest);
-        CGlxDataSourceTaskMdeIdList* task = new (ELeave) CGlxDataSourceTaskMdeIdList(static_cast<CGlxIdListRequest*>(aRequest), aObserver, this);
+        CGlxDataSourceTaskMdeIdList* task = new (ELeave) 
+        CGlxDataSourceTaskMdeIdList(static_cast<CGlxIdListRequest*>(aRequest), 
+                aObserver, this);
         CleanupStack::Pop(aRequest); // now owned by task
         CleanupStack::PushL(task); 
         task->ConstructL();
@@ -282,17 +405,10 @@
 		}
 	else if (dynamic_cast< CGlxThumbnailRequest *>(aRequest))
 		{	
-	    GLX_LOG_INFO("==> CGlxDataSourceMde::CreateTaskL - CGlxDataSourceTaskMdeThumbnail+");
-#ifdef _DEBUG
-        _LIT( KFormatTimeStamp, "[%H:%T:%S.%*C5]");
-	    TTime time;
-	    time.HomeTime(); // Get home time
-	    TBuf<32> timeStampBuf;
-	    time.FormatL(timeStampBuf, KFormatTimeStamp);
-	    RDebug::Print(_L("%S"), &timeStampBuf);    
-#endif
         CleanupStack::PushL(aRequest);
-        CGlxDataSourceTaskMdeThumbnail* task = new (ELeave) CGlxDataSourceTaskMdeThumbnail(static_cast<CGlxThumbnailRequest*>(aRequest), aObserver, this);
+        CGlxDataSourceTaskMdeThumbnail* task = new (ELeave) 
+        CGlxDataSourceTaskMdeThumbnail(static_cast<CGlxThumbnailRequest*>(aRequest), 
+                aObserver, this);
         CleanupStack::Pop(aRequest); // now owned by task
         CleanupStack::PushL(task); 
         task->ConstructL();
@@ -311,9 +427,10 @@
 // ThumbnailAvailable
 // ---------------------------------------------------------------------------
 //
-void CGlxDataSourceMde::ThumbnailAvailable(const TGlxMediaId& /*aId*/, const TSize& /*aSize*/)
+void CGlxDataSourceMde::ThumbnailAvailable(const TGlxMediaId& 
+        /*aId*/, const TSize& /*aSize*/)
 	{
-    TRACER("CGlxDataSourceMde::ThumbnailAvailable(const TGlxMediaId& /*aId*/, const TSize& /*aSize*/)")
+    TRACER("CGlxDataSourceMde::ThumbnailAvailable(const TGlxMediaId& /*aId*/, const TSize& /*aSize*/)");
 	//No implementation
 	}
 
@@ -323,7 +440,7 @@
 //
 void CGlxDataSourceMde::BackgroundThumbnailError(const TGlxMediaId& aId, TInt aError)
 	{
-    TRACER("CGlxDataSourceMde::BackgroundThumbnailError(const TGlxMediaId& aId, TInt aError)")
+    TRACER("CGlxDataSourceMde::BackgroundThumbnailError(const TGlxMediaId& aId, TInt aError)");
 	TSize size(0, 0);
 	TRAP_IGNORE(BackgroundThumbnailMessageL(aId, size, aError));
 	}
@@ -333,9 +450,10 @@
 // BackgroundThumbnailMessageL
 // ---------------------------------------------------------------------------
 //
-void CGlxDataSourceMde::BackgroundThumbnailMessageL(const TGlxMediaId& aId, const TSize& aSize, TInt aError)
+void CGlxDataSourceMde::BackgroundThumbnailMessageL(const TGlxMediaId& aId, 
+        const TSize& aSize, TInt aError)
 	{
-    TRACER("CGlxDataSourceMde::BackgroundThumbnailMessageL(const TGlxMediaId& aId, const TSize& aSize, TInt aError)")
+    TRACER("CGlxDataSourceMde::BackgroundThumbnailMessageL(const TGlxMediaId& aId, const TSize& aSize, TInt aError)");
 	CMPXMessage* message = CMPXMessage::NewL();
 	CleanupStack::PushL(message);
 	message->SetTObjectValueL(KMPXMessageGeneralId, KGlxMessageIdBackgroundThumbnail);
@@ -352,7 +470,7 @@
 //
 void CGlxDataSourceMde::DoSessionInitL()
 	{
-    TRACER("CGlxDataSourceMde::DoSessionInitL()")
+    TRACER("CGlxDataSourceMde::DoSessionInitL()");
 	/// @todo check schema version number
     iNameSpaceDef = &iSession->GetDefaultNamespaceDefL();
     
@@ -396,12 +514,23 @@
 //
 void CGlxDataSourceMde::AddMdEObserversL()
     {
-    TRACER("CGlxDataSourceMde::AddMdEObserversL()")
+    TRACER("CGlxDataSourceMde::AddMdEObserversL()");
 	iSession->AddRelationObserverL(*this);
 	iSession->AddRelationPresentObserverL(*this);
 	
-	iSession->AddObjectObserverL(*this);
-	iSession->AddObjectPresentObserverL(*this);
+	//when setting observing conditions,
+	//add filters for all images, videos, Albums & Tags
+	CMdELogicCondition* addCondition = CMdELogicCondition::NewLC( ELogicConditionOperatorOr );
+	addCondition->AddObjectConditionL( *iImageDef );
+	addCondition->AddObjectConditionL( *iAlbumDef );
+	addCondition->AddObjectConditionL( *iTagDef );
+	
+	iSession->AddObjectObserverL(*this, addCondition );
+	iSession->AddObjectPresentObserverL(*this );
+		
+	// This addCondition should only be popped. 
+	// As the ownership is transferred, the same will be destroyed by MdS.
+	CleanupStack::Pop( addCondition ); 
     }
 
 // ---------------------------------------------------------------------------
@@ -413,13 +542,51 @@
 					TObserverNotificationType aType,
 					const RArray<TItemId>& aObjectIdArray)
 	{
-    TRACER("CGlxDataSourceMde::HandleObjectNotification()")
+    TRACER("CGlxDataSourceMde::HandleObjectNotification()");
+    GLX_LOG_INFO3("CGlxDataSourceMde::HandleObjectNotification() aType=%d, aObjectIdArray.Count()=%d, iHarvestingOngoing=%d", 
+															  aType, aObjectIdArray.Count(),
+															  iHarvestingOngoing);
+   	if (ENotifyAdd == aType)
+		{
+	    for ( TInt i = 0; i < aObjectIdArray.Count(); i++ )
+	        {
+            TInt ret = iAddedItems.Append(aObjectIdArray[i]);
+            if (ret != KErrNone)
+                {
+                GLX_DEBUG2("ENotifyAdd-iAddedItems.Append() failed i(%d)", i);
+                }
+	        }
+	    GLX_DEBUG2("ENotifyAdd - iAddedItems.Count()=%d", iAddedItems.Count());
+		}
+    
+   	if (ENotifyModify == aType)
+		{
+	    for ( TInt i = 0; i < aObjectIdArray.Count(); i++ )
+	        {
+	        if (iAddedItems.Find(aObjectIdArray[i]) != KErrNotFound)
+	        	{
+		        if (!iHarvestingOngoing)
+		        	{
+		        	GLX_DEBUG1("ENotifyModify - Harvesting Completed - "
+		        	        "Reset iAddedItems array");
+					iAddedItems.Reset();
+					break;
+		        	}
+                GLX_DEBUG1("ENotifyModify - Id found in iAddedItems array, DO NOT PROCESS");
+	        	return;
+	        	}
+	        }
+        }
+
+   	GLX_DEBUG1("HandleObjectNotification - ProcessUpdateArray");
 	ProcessUpdateArray(aObjectIdArray,  MPXChangeEventType(aType), ETrue);
 #ifndef USE_S60_TNM
 	if(MPXChangeEventType(aType) == EMPXItemDeleted )
 		{			
 		TInt count = aObjectIdArray.Count();
 		iDeletedCount += count;
+		GLX_DEBUG3("EMPXItemDeleted - aObjectIdArray.Count()=%d, iDeletedCount=%d", 
+		        count, iDeletedCount);
 		if(iDeletedCount > KGlxThumbnailCleanupAfterDeletions)
 		    {
 	    	TRAPD(err, ThumbnailCreator().CleanupThumbnailsL(iThumbnailDatabase));
@@ -429,10 +596,15 @@
 	    	    }
 		    }
 		}
+
+	if(MPXChangeEventType(aType) == EMPXItemModified )
+	    {
+	    GLX_DEBUG1("HandleObjectNotification - EMPXItemModified");
+	    TRAP_IGNORE(ThumbnailCreator().CleanupThumbnailsL(iThumbnailDatabase));
+		}
 #endif		
 	}
 
-
 // ---------------------------------------------------------------------------
 // CGlxDataSourceMde::HandleObjectPresentNotification
 // ---------------------------------------------------------------------------
@@ -441,7 +613,7 @@
 void CGlxDataSourceMde::HandleObjectPresentNotification(CMdESession& /*aSession*/, 
 		TBool aPresent, const RArray<TItemId>& aObjectIdArray)
 	{
-    TRACER("CGlxDataSourceMde::HandleObjectPresentNotification()")
+    TRACER("CGlxDataSourceMde::HandleObjectPresentNotification()");
 	if (aPresent)
 		{
 		ProcessUpdateArray(aObjectIdArray, EMPXItemInserted, ETrue);
@@ -461,7 +633,7 @@
 			TObserverNotificationType aType,
 			const RArray<TItemId>& aRelationIdArray)
 	{
-    TRACER("CGlxDataSourceMde::HandleRelationNotification()")
+    TRACER("CGlxDataSourceMde::HandleRelationNotification()");
 	ProcessUpdateArray(aRelationIdArray, MPXChangeEventType(aType), EFalse);
 	}
 
@@ -473,7 +645,7 @@
 void CGlxDataSourceMde::HandleRelationPresentNotification(CMdESession& /*aSession*/,
 			TBool aPresent, const RArray<TItemId>& aRelationIdArray)
 	{
-    TRACER("CGlxDataSourceMde::HandleRelationPresentNotification()")
+    TRACER("CGlxDataSourceMde::HandleRelationPresentNotification()");
 	if (aPresent)
 		{
 		ProcessUpdateArray(aRelationIdArray, EMPXItemInserted, EFalse);
@@ -488,9 +660,10 @@
 // ProcessUpdateArray
 // ---------------------------------------------------------------------------
 //
-void CGlxDataSourceMde::ProcessUpdateArray(const RArray<TItemId>& aArray, TMPXChangeEventType aType, TBool aIsObject)
+void CGlxDataSourceMde::ProcessUpdateArray(const RArray<TItemId>& aArray, 
+        TMPXChangeEventType aType, TBool aIsObject)
 	{
-    TRACER("CGlxDataSourceMde::ProcessUpdateArray(const RArray<TItemId>& aArray, TMPXChangeEventType aType, TBool aIsObject)")
+    TRACER("CGlxDataSourceMde::ProcessUpdateArray(const RArray<TItemId>& aArray,TMPXChangeEventType aType, TBool aIsObject)");
     // only need one message so process first item
     TUpdateData update;
     update.iId = aArray[0];
@@ -510,12 +683,22 @@
 	}
 	
 // ---------------------------------------------------------------------------
-// MPXChangeEventType
+// CreateSession
+// ---------------------------------------------------------------------------
+//
+void CGlxDataSourceMde::CreateSession()
+    {
+    TRACER("CGlxDataSourceMde::CreateSession()")
+    TRAP_IGNORE(CreateSessionL());
+    }
+    
+// ---------------------------------------------------------------------------
+// CreateSession
 // ---------------------------------------------------------------------------
 //
 TInt CGlxDataSourceMde::CreateSession(TAny* aPtr)
     {
-    TRACER("CGlxDataSourceMde::CreateSession(TAny* aPtr)")
+    TRACER("CGlxDataSourceMde::CreateSession(TAny* aPtr)");
     CGlxDataSourceMde* self
                     = reinterpret_cast<CGlxDataSourceMde*>( aPtr );
     TRAP_IGNORE(self->CreateSessionL());
@@ -528,7 +711,9 @@
 //
 void CGlxDataSourceMde::CreateSessionL()
     {
-    TRACER("CGlxDataSourceMde::CreateSessionL()")
+    TRACER("CGlxDataSourceMde::CreateSessionL()");
+    delete iSession;
+    iSession = NULL;
 	iSession = CMdESession::NewL( *this );
     }
             
@@ -539,7 +724,7 @@
 //
 TInt CGlxDataSourceMde::ProcessItemUpdate(TAny* aPtr)
     {
-    TRACER("CGlxDataSourceMde::ProcessItemUpdate(TAny* aPtr)")
+    TRACER("CGlxDataSourceMde::ProcessItemUpdate(TAny* aPtr)");
     CGlxDataSourceMde* self
                     = reinterpret_cast<CGlxDataSourceMde*>( aPtr );
     TRAP_IGNORE(self->ProcessItemUpdateL());
@@ -552,8 +737,7 @@
 //
 void CGlxDataSourceMde::ProcessItemUpdateL()
     {
-    TRACER("CGlxDataSourceMde::ProcessItemUpdateL()")
-    //__ASSERT_DEBUG(iUpdateData.Count(), Panic(EGlxPanicIllegalState));
+    TRACER("CGlxDataSourceMde::ProcessItemUpdateL()");
 	if ( !iUpdateData.Count() || iPauseUpdate )
         {
         return;
@@ -561,7 +745,8 @@
     CMPXMessage* message = CMPXMessage::NewL();
     CleanupStack::PushL(message);
     message->SetTObjectValueL<TInt>(KMPXMessageGeneralId, KMPXMessageIdItemChanged);
-    message->SetTObjectValueL<TMPXChangeEventType>(KMPXMessageChangeEventType, iUpdateData[0].iType);
+    message->SetTObjectValueL<TMPXChangeEventType>(KMPXMessageChangeEventType,
+            iUpdateData[0].iType);
     TMPXGeneralCategory category = EMPXNoCategory;
 	TMPXItemId id = iUpdateData[0].iId;
 	
@@ -589,7 +774,8 @@
     		    __ASSERT_DEBUG(rightObject, Panic(EGlxPanicIllegalState));
     			TContainerType rightContainer = ContainerType(rightObject);
     			delete rightObject;
-   		    	__ASSERT_DEBUG(( EContainerTypeAlbum != rightContainer), Panic(EGlxPanicIllegalState));
+   		    	__ASSERT_DEBUG(( EContainerTypeAlbum != rightContainer), 
+   		    	        Panic(EGlxPanicIllegalState));
     			if( EContainerTypeTag == rightContainer )
     				{
         			id = leftId;
@@ -607,8 +793,10 @@
     			containerId = leftId;
     	    	containerCategory = EMPXAlbum;
     	    	}
-    		message->SetTObjectValueL<TMPXGeneralCategory>(KGlxCollectionMessageContainerCategory, containerCategory);
-    		message->SetTObjectValueL<TMPXItemId>(KGlxCollectionMessageContainerId, containerId);
+    		message->SetTObjectValueL<TMPXGeneralCategory>(KGlxCollectionMessageContainerCategory,
+    		        containerCategory);
+    		message->SetTObjectValueL<TMPXItemId>(KGlxCollectionMessageContainerId, 
+    		        containerId);
 			}
 	    else
 	        {
@@ -647,7 +835,8 @@
     		}
 	    }
 #endif // __USING_INTELLIGENT_UPDATE_FILTERING
-	message->SetTObjectValueL<TMPXGeneralCategory>(KMPXMessageMediaGeneralCategory, category);
+	message->SetTObjectValueL<TMPXGeneralCategory>(KMPXMessageMediaGeneralCategory,
+	        category);
    	message->SetTObjectValueL<TMPXItemId>(KMPXMessageMediaGeneralId, id);
     BroadcastMessage(*message); 
     CleanupStack::PopAndDestroy(message);
@@ -660,7 +849,7 @@
 //
 CGlxDataSource::TContainerType CGlxDataSourceMde::ContainerType(CMdEObject* aObject)
 	{
-    TRACER("CGlxDataSourceMde::ContainerType(CMdEObject* aObject)")
+    TRACER("CGlxDataSourceMde::ContainerType(CMdEObject* aObject)");
 	TContainerType containerType = EContainerTypeNotAContainer;
  	
 	if( 0 == aObject->Def().Compare(*iAlbumDef) )
@@ -684,9 +873,10 @@
 // ContainerType
 // ---------------------------------------------------------------------------
 //	
-CGlxDataSource::TContainerType CGlxDataSourceMde::ContainerType(CMdEObjectDef* aObjectDef)
+CGlxDataSource::TContainerType CGlxDataSourceMde::ContainerType(CMdEObjectDef* 
+        aObjectDef)
 	{
-    TRACER("CGlxDataSourceMde::ContainerType(CMdEObjectDef* aObjectDef)")
+    TRACER("CGlxDataSourceMde::ContainerType()");
 	TContainerType containerType = EContainerTypeNotAContainer;
  	
 	if( 0 == aObjectDef->Compare(*iAlbumDef) )
@@ -711,7 +901,7 @@
 //
 CGlxDataSource::TItemType CGlxDataSourceMde::ItemType(CMdEObject* aObject)
 	{
-    TRACER("CGlxDataSourceMde::ItemType(CMdEObject* aObject)")
+    TRACER("CGlxDataSourceMde::ItemType(CMdEObject* aObject)");
 	TItemType itemType = EItemTypeNotAnItem;
 	
 	if( 0 == aObject->Def().Compare(*iImageDef) )
@@ -732,7 +922,7 @@
 //
 void CGlxDataSourceMde::PrepareMonthsL()
     {
-    TRACER("CGlxDataSourceMde::PrepareMonthsL()")
+    TRACER("CGlxDataSourceMde::PrepareMonthsL()");
     TTime month(0);
     iFirstMonth = month;
     }
@@ -743,7 +933,7 @@
 //
 const TGlxMediaId CGlxDataSourceMde::GetMonthIdL(const TTime& aMonth)
     {
-    TRACER("CGlxDataSourceMde::GetMonthIdL(const TTime& aMonth)")
+    TRACER("CGlxDataSourceMde::GetMonthIdL()");
     TTime monthStart = iFirstMonth + aMonth.MonthsFrom(iFirstMonth);
     const TTimeIntervalMonths KGlxOneMonth = 1;
     const TTimeIntervalMicroSeconds KGlxOneMicrosecond = 1;
@@ -775,7 +965,8 @@
             month = iSession->NewObjectLC(*iMonthDef, title); 
             
             // A title property def of type text is required.
-            CMdEPropertyDef& titlePropertyDef = iObjectDef->GetPropertyDefL(KPropertyDefNameTitle);
+            CMdEPropertyDef& titlePropertyDef = iObjectDef->GetPropertyDefL(
+                    KPropertyDefNameTitle);
             if (titlePropertyDef.PropertyType() != EPropertyText)
             	{
             	User::Leave(KErrCorrupt);
@@ -784,7 +975,8 @@
             month->AddTextPropertyL (titlePropertyDef, title);
 
             // A size property is required.
-            CMdEPropertyDef& sizePropertyDef = iObjectDef->GetPropertyDefL(KPropertyDefNameSize);
+            CMdEPropertyDef& sizePropertyDef = iObjectDef->GetPropertyDefL(
+                    KPropertyDefNameSize);
             if (sizePropertyDef.PropertyType() != EPropertyUint32)
             	{
             	User::Leave(KErrCorrupt);
@@ -793,7 +985,8 @@
 
             
             // A creation date property is required.
-        	CMdEPropertyDef& creationDateDef = iObjectDef->GetPropertyDefL(KPropertyDefNameCreationDate);
+        	CMdEPropertyDef& creationDateDef = iObjectDef->GetPropertyDefL(
+        	        KPropertyDefNameCreationDate);
             if (creationDateDef.PropertyType() != EPropertyTime)
             	{
             	User::Leave(KErrCorrupt);
@@ -801,7 +994,8 @@
         	month->AddTimePropertyL(creationDateDef, monthStart);
 
             // A last modified date property is required.
-        	CMdEPropertyDef& lmDateDef = iObjectDef->GetPropertyDefL(KPropertyDefNameLastModifiedDate);
+        	CMdEPropertyDef& lmDateDef = iObjectDef->GetPropertyDefL(
+        	        KPropertyDefNameLastModifiedDate);
             if (lmDateDef.PropertyType() != EPropertyTime)
             	{
             	User::Leave(KErrCorrupt);
@@ -865,8 +1059,14 @@
     }	
     
 #ifdef USE_S60_TNM
-void CGlxDataSourceMde::FetchThumbnailL(CGlxRequest* aRequest, MThumbnailFetchRequestObserver& aObserver)
+void CGlxDataSourceMde::FetchThumbnailL(CGlxRequest* aRequest, 
+        MThumbnailFetchRequestObserver& aObserver)
 	{
+    TRACER("CGlxDataSourceMde::FetchThumbnailL()");
+#ifdef _DEBUG
+    iStartTime.HomeTime(); // Get home time
+#endif
+    
 	iTnFetchObserver = &aObserver;
 	
     CGlxThumbnailRequest* request = static_cast<CGlxThumbnailRequest*>(aRequest);
@@ -877,64 +1077,114 @@
 
 	iTnHandle = tnReq.iBitmapHandle;
 	iMediaId = tnReq.iId;
-	if (tnReq.iSizeClass.iWidth < KMaxGridThumbnailWidth)
-	{
-	    iTnEngine->SetFlagsL(CThumbnailManager::ECropToAspectRatio);
+    if (tnReq.iSizeClass.iWidth < KMaxGridThumbnailWidth)
+    	{
+   		iTnEngine->SetFlagsL(CThumbnailManager::ECropToAspectRatio);
 	    iTnEngine->SetThumbnailSizeL(EGridThumbnailSize);
-	    GLX_LOG_INFO("CGlxDataSourceMde::FetchThumbnailL() - Fetch TN attrib - EGridThumbnailSize");
-	}
+	    GLX_LOG_INFO("CGlxDataSourceMde::FetchThumbnailL() - Fetch TN attrib -"
+	            " EGridThumbnailSize");
+    	}
     else
-	{
-	     iTnEngine->SetFlagsL(CThumbnailManager::EDefaultFlags);
-	     iTnEngine->SetThumbnailSizeL(EFullScreenThumbnailSize);
-	     GLX_LOG_INFO("CGlxDataSourceMde::FetchThumbnailL() - Fetch TN attrib - EFullScreenThumbnailSize");
-	}
-    CThumbnailObjectSource* source = CThumbnailObjectSource::NewLC(request->ThumbnailInfo()->FilePath(), 0);
-#ifdef _DEBUG
-    iStartTime.UniversalTime();
-#endif
+    	{
+   		iTnEngine->SetFlagsL(CThumbnailManager::EDefaultFlags);
+    	iTnEngine->SetThumbnailSizeL(EFullScreenThumbnailSize);
+    	GLX_LOG_INFO("CGlxDataSourceMde::FetchThumbnailL() - Fetch TN attrib - "
+    	        "EFullScreenThumbnailSize");
+    	}
+
+    if (tnReq.iPriorityMode == TGlxThumbnailRequest::EPrioritizeQuality)
+        {
+        iTnEngine->SetQualityPreferenceL(CThumbnailManager::EOptimizeForQuality);
+        GLX_LOG_INFO("CGlxDataSourceMde::FetchThumbnailL() - Fetch TN attrib -"
+                " EOptimizeForQuality");
+        }
+    else
+        {
+        iTnEngine->SetQualityPreferenceL(CThumbnailManager::EOptimizeForQualityWithPreview);
+        GLX_LOG_INFO("CGlxDataSourceMde::FetchThumbnailL() - Fetch TN attrib -"
+                " EOptimizeForQualityWithPreview");
+        }
+    
+    CThumbnailObjectSource* source = CThumbnailObjectSource::NewLC(
+                                     request->ThumbnailInfo()->FilePath(), 0);
     iTnThumbnailCbId = iTnEngine->GetThumbnailL(*source);
+    CleanupStack::PopAndDestroy(source);
+
     iTnRequestInProgress = ETrue;
-    CleanupStack::PopAndDestroy();
 	}
 
 TInt CGlxDataSourceMde::CancelFetchThumbnail()
 	{
+    TRACER("CGlxDataSourceMde::CancelFetchThumbnail");
 	TInt ret = KErrNone;
 	if (iTnRequestInProgress)
 		{
 		ret = iTnEngine->CancelRequest(iTnThumbnailCbId);
+		iTnRequestInProgress = EFalse;
+        iTnFetchObserver->ThumbnailFetchComplete(KErrCancel,EFalse);
 		}
 	return ret;
 	}
 
-void CGlxDataSourceMde::ThumbnailPreviewReady(MThumbnailData& /*aThumbnail*/, 
-                                                    TThumbnailRequestId /*aId*/)
+// Called when preview thumbnail is created
+void CGlxDataSourceMde::ThumbnailPreviewReady(MThumbnailData& aThumbnail, 
+                                              TThumbnailRequestId aId)
     {
+    TRACER("CGlxDataSourceMde::ThumbnailPreviewReady()");
+    
+    TInt error = KErrNotSupported;
+    if ( aThumbnail.Bitmap() )
+         {
+         GLX_DEBUG1("CGlxDataSourceMde::ThumbnailPreviewReady preview aval");
+         error = KErrNone;
+         }
+    //This function is called number of times as a callback ,
+    //hence not trapping the leaving function which costs time and memory.
+    //Ignoring this for code scanner warnings - Leaving functions called in non-leaving functions.
+    ThumbnailReadyL(error, aThumbnail, aId, EFalse);
     }
 
 // Called when real thumbnail is created
 void CGlxDataSourceMde::ThumbnailReady(TInt aError,
         MThumbnailData& aThumbnail, TThumbnailRequestId aId)
 	{
-	if (iTnThumbnailCbId == aId)
-		{
-		iTnRequestInProgress = EFalse;
+	TRACER("CGlxDataSourceMde::ThumbnailReady");
+	GLX_DEBUG2("GlxDataSourceMde::ThumbnailReady aError=%d", aError);
+	//This function is called number of times as a callback ,
+    //hence not trapping the leaving function which costs time and memory.
+    //Ignoring this for code scanner warnings - Leaving functions called in non-leaving functions.
+	ThumbnailReadyL(aError,aThumbnail, aId, ETrue);
+	}
+
+// ---------------------------------------------------------------------------
+// ThumbnailReadyL
+// ---------------------------------------------------------------------------
+//  
+void CGlxDataSourceMde::ThumbnailReadyL(TInt aError,
+        MThumbnailData& aThumbnail, TThumbnailRequestId aId, TBool aQuality)
+    {
+    TRACER("CGlxDataSourceMde::ThumbnailReadyL()");
+    GLX_DEBUG3("CGlxDataSourceMde::ThumbnailReadyL aError=%d, aQuality=%d",
+                                aError, aQuality);
 #ifdef _DEBUG
-		iStopTime.UniversalTime();
-		GLX_LOG_INFO1("==> S60 TNMan fetch took <%d> us", (TInt)iStopTime.MicroSecondsFrom(iStartTime).Int64());
+    iStopTime.HomeTime(); // Get home time
+    GLX_DEBUG2("=>CGlxDataSourceMde::ThumbnailReadyL - TN Fetch took <%d> us",
+                        (TInt)iStopTime.MicroSecondsFrom(iStartTime).Int64());
 #endif
-	    if (aError == KErrNone && iTnHandle)
-	    	{
-	    	if (iTnHandle == KGlxMessageIdBackgroundThumbnail)
-	    		{
-	    		BackgroundThumbnailMessageL(iMediaId, TSize(), aError);
-	    		}
-	    	else
-	    		{
+    
+    if (iTnThumbnailCbId == aId)
+        {
+        if (aError == KErrNone && iTnHandle)
+            {
+            if (iTnHandle == KGlxMessageIdBackgroundThumbnail)
+                {
+                BackgroundThumbnailMessageL(iMediaId, TSize(), aError);
+                }
+            else
+                {
                 delete iTnThumbnail;
                 iTnThumbnail = NULL;
-			    iTnThumbnail = aThumbnail.DetachBitmap();
+                iTnThumbnail = aThumbnail.DetachBitmap();
 
 				delete iThumbnail;
                 iThumbnail = NULL;
@@ -948,15 +1198,75 @@
 			    CleanupStack::PushL(context);
 			    context->BitBlt( TPoint(), iTnThumbnail);
 			    CleanupStack::PopAndDestroy(context); 
-			    CleanupStack::PopAndDestroy(device);
-	    		}
-	    	}
+                CleanupStack::PopAndDestroy(device);
+                }
+            }
+        }
+    
+    if (iTnFetchObserver && iTnRequestInProgress)
+        {
+        iTnFetchObserver->ThumbnailFetchComplete(aError, aQuality);
+        iTnHandle = KErrNone;
+        iTnRequestInProgress = EFalse;
+        }
+    }
+#endif
 
-		if (iTnFetchObserver)
-			{
-			iTnFetchObserver->ThumbnailFetchComplete(aError);
-			iTnHandle = KErrNone;
-			}
-		}
-	}
-#endif
+// ---------------------------------------------------------------------------
+// CGlxDataSourceMde
+// HarvestingUpdated
+// ---------------------------------------------------------------------------
+//
+void CGlxDataSourceMde::HarvestingUpdated( 
+            HarvesterEventObserverType /*aHEObserverType*/, 
+            HarvesterEventState aHarvesterEventState,
+            TInt /*aItemsLeft*/)
+    {
+    TRACER("void CGlxDataSourceMde::HarvestingUpdated()");
+    GLX_LOG_INFO1("CGlxDataSourceMde::HarvestingUpdated() aHarvesterEventState=%d",
+            aHarvesterEventState);
+    
+    switch(aHarvesterEventState)
+        {
+        case EHEStateStarted:
+            GLX_LOG_INFO("CGlxDataSourceMde::HarvestingUpdated() - EHEStateStarted");
+        case EHEStateResumed:
+        case EHEStateHarvesting:
+        	 {
+             iHarvestingOngoing = ETrue;
+	         }
+             break;
+        case EHEStatePaused:
+        case EHEStateFinished:
+        	 {
+	         iHarvestingOngoing = EFalse;
+	         GLX_LOG_INFO("CGlxDataSourceMde::HarvestingUpdated() - EHEStateFinished");
+        	 }
+             break;
+        default:
+            break;
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// ShutdownNotification
+// ---------------------------------------------------------------------------
+//  
+void CGlxDataSourceMde::ShutdownNotification(TInt aShutdownState)
+    {
+    TRACER("void CGlxDataSourceMde::ShutdownNotification(TInt aShutdownState)")
+    GLX_DEBUG2("CGlxDataSourceMde::ShutdownNotification(aShutdownState=%d)", 
+            aShutdownState);
+
+    if (!iDataSourceReady && 0 == aShutdownState)
+        {
+        GLX_DEBUG1("Photos MdS ShutdownNotification - MdS Server restarted!");
+        CreateSession();
+        }
+
+    if (iDataSourceReady && 1 == aShutdownState)
+        {
+        GLX_DEBUG1("Photos MdS ShutdownNotification - MdS Server Shutdown!");
+        HandleSessionError(*iSession, KErrServerTerminated);
+        }
+    }
--- a/engine/collectionframework/datasource/plugins/glxdatasourcemde2.5/src/glxdatasourcemdsproxy.cpp	Wed Jun 16 13:08:54 2010 +0100
+++ b/engine/collectionframework/datasource/plugins/glxdatasourcemde2.5/src/glxdatasourcemdsproxy.cpp	Thu Jul 22 16:33:32 2010 +0100
@@ -22,7 +22,7 @@
  * @internal reviewed 11/07/2007 by M Byrne
  */
 
-#include <implementationproxy.h>
+#include <ecom/implementationproxy.h>
 #include "glxdatasourcemds.h"
 #include "glxdatasourcemds.hrh"
 
--- a/engine/collectionframework/datasource/plugins/glxdatasourcemde2.5/src/glxdatasourcetaskmds.cpp	Wed Jun 16 13:08:54 2010 +0100
+++ b/engine/collectionframework/datasource/plugins/glxdatasourcemde2.5/src/glxdatasourcetaskmds.cpp	Thu Jul 22 16:33:32 2010 +0100
@@ -69,8 +69,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");
 
@@ -82,7 +80,7 @@
         MGlxDataSourceRequestObserver& aObserver, CGlxDataSource* aDataSource)
     : CGlxDataSourceTask(aRequest, aObserver, aDataSource)
     {
-    TRACER("CGlxDataSourceTaskMde::CGlxDataSourceTaskMde()")
+    TRACER("CGlxDataSourceTaskMde::CGlxDataSourceTaskMde()");
     // No implementation required
     }
 
@@ -92,7 +90,7 @@
 //  
 CGlxDataSourceTaskMde::~CGlxDataSourceTaskMde()
     {
-    TRACER("CGlxDataSourceTaskMde::~CGlxDataSourceTaskMde()")
+    TRACER("CGlxDataSourceTaskMde::~CGlxDataSourceTaskMde()");
     DestroyQueries();
     }
 
@@ -102,7 +100,7 @@
 //  	
 void CGlxDataSourceTaskMde::ConstructL()
     {
-    TRACER("CGlxDataSourceTaskMde::ConstructL()")
+    TRACER("CGlxDataSourceTaskMde::ConstructL()");
     CreateResponseL();
 #ifdef USE_S60_TNM
     DataSource()->CancelFetchThumbnail();
@@ -117,9 +115,9 @@
 //  
 void CGlxDataSourceTaskMde::CancelRequest()
     {
-    TRACER("CGlxDataSourceTaskMde::CancelRequest()")
-    DestroyQueries();
+    TRACER("CGlxDataSourceTaskMde::CancelRequest()");
     iCancelled = ETrue;
+    DestroyQueries();    
     }
 
 // ----------------------------------------------------------------------------
@@ -130,7 +128,7 @@
                                                      TInt /*aFirstNewItemIndex*/,
                                                      TInt /*aNewItemCount*/ )
     {
-    TRACER("CGlxDataSourceTaskMde::HandleQueryNewResults()")
+    TRACER("CGlxDataSourceTaskMde::HandleQueryNewResults()");
     // Not used.
     }
 
@@ -144,7 +142,7 @@
                                 TInt /*aNewRelationItemCount*/,
                                 TInt /*aNewEventItemCount*/)
     {
-    TRACER("CGlxDataSourceTaskMde::HandleQueryNewResults()")
+    TRACER("CGlxDataSourceTaskMde::HandleQueryNewResults()");
     // Not used.
     }
 
@@ -155,7 +153,7 @@
 //
 void CGlxDataSourceTaskMde::HandleQueryCompleted(CMdEQuery& aQuery, TInt aError)
     {
-    TRACER("CGlxDataSourceTaskMde::HandleQueryCompleted()")
+    TRACER("CGlxDataSourceTaskMde::HandleQueryCompleted()");
     __ASSERT_ALWAYS(&aQuery == iQueries[0], Panic(EGlxPanicQueryLogicError));
 
     TInt err = aError;
@@ -164,7 +162,7 @@
         TRAP(err, HandleQueryCompletedL(aQuery));
         }
 
-    if (err != KErrNone)
+    if (err != KErrNone && !iCancelled)
         {
         HandleRequestComplete(err);
         }
@@ -176,7 +174,7 @@
 //   
 CGlxDataSourceMde* CGlxDataSourceTaskMde::DataSource()
     {
-    TRACER("CGlxDataSourceTaskMde::DataSource()")
+    TRACER("CGlxDataSourceTaskMde::DataSource()");
     return static_cast<CGlxDataSourceMde*>(iDataSource);
     }
 
@@ -184,9 +182,10 @@
 //  CGlxDataSourceTaskMde::AddMonthFilterL
 // ----------------------------------------------------------------------------
 //     
-void CGlxDataSourceTaskMde::AddMonthFilterL(const TGlxMediaId& aContainerId, TGlxFilterProperties& aFilterProperties)
+void CGlxDataSourceTaskMde::AddMonthFilterL(const TGlxMediaId& aContainerId,
+        TGlxFilterProperties& aFilterProperties)
     {
-    TRACER("CGlxDataSourceTaskMde::AddMonthFilterL(const TGlxMediaId& aContainerId, TGlxFilterProperties& aFilterProperties)")
+    TRACER("CGlxDataSourceTaskMde::AddMonthFilterL(const TGlxMediaId& aContainerId, TGlxFilterProperties& aFilterProperties)");
     CMdEObject* month = DataSource()->Session().GetObjectL(aContainerId.Value());
     if( !month )
         {
@@ -204,16 +203,19 @@
 //  CGlxDataSourceTaskMde::AddMonthFilterL
 // ----------------------------------------------------------------------------
 //   
-void CGlxDataSourceTaskMde::AddMonthFilterL(CMdEObject* aMonth, TGlxFilterProperties& aFilterProperties)
+void CGlxDataSourceTaskMde::AddMonthFilterL(CMdEObject* aMonth, TGlxFilterProperties& 
+        aFilterProperties)
     {
-    TRACER("CGlxDataSourceTaskMde::AddMonthFilterL(CMdEObject* aMonth, TGlxFilterProperties& aFilterProperties)")
-    CMdEPropertyDef& creationDateDef = DataSource()->ObjectDef().GetPropertyDefL(KPropertyDefNameCreationDate);
+    TRACER("CGlxDataSourceTaskMde::AddMonthFilterL(CMdEObject* aMonth, TGlxFilterProperties& aFilterProperties)");
+    CMdEPropertyDef& creationDateDef = DataSource()->ObjectDef().GetPropertyDefL(
+            KPropertyDefNameCreationDate);
     if (creationDateDef.PropertyType() != EPropertyTime)
         {
         User::Leave(KErrCorrupt);
         }
 
-    CMdEPropertyDef& lmDateDef = DataSource()->ObjectDef().GetPropertyDefL(KPropertyDefNameLastModifiedDate);
+    CMdEPropertyDef& lmDateDef = DataSource()->ObjectDef().GetPropertyDefL(
+            KPropertyDefNameLastModifiedDate);
     if (lmDateDef.PropertyType() != EPropertyTime)
         {
         User::Leave(KErrCorrupt);
@@ -240,15 +242,21 @@
 //  CGlxDataSourceTaskMde::SetQueryConditionsL
 // ----------------------------------------------------------------------------
 //    
-void CGlxDataSourceTaskMde::SetQueryConditionsL(CMdEQuery& aQuery, const TGlxFilterProperties& aFilterProperties, const TGlxMediaId aContainerId, CMdEObjectDef& aObjectDef)
+void CGlxDataSourceTaskMde::SetQueryConditionsL(CMdEQuery& aQuery,
+        const TGlxFilterProperties& aFilterProperties, const TGlxMediaId aContainerId,
+            CMdEObjectDef& aObjectDef)
     {
-    TRACER("CGlxDataSourceTaskMde::SetQueryConditionsL()")
+    TRACER("CGlxDataSourceTaskMde::SetQueryConditionsL()");
     
     CMdELogicCondition& rootCondition = aQuery.Conditions();
     CMdEObjectDef* objectDef = &aObjectDef;
 
     SetQueryFilterConditionsL(rootCondition, *objectDef, aFilterProperties);
-    SetSortOrderL(aQuery, aObjectDef, aFilterProperties);
+
+    if (aQuery.ResultMode() != EQueryResultModeCount)
+        {
+        SetSortOrderL(aQuery, aObjectDef, aFilterProperties);
+        }
     
     if( KGlxCollectionRootId != aContainerId.Value() )
         {
@@ -257,12 +265,14 @@
         objectDef = &DataSource()->ObjectDef();
         if( DataSource()->ContainerIsLeft(aObjectDef) )
             {
-            relationCondition = &rootCondition.AddRelationConditionL(DataSource()->ContainsDef(), ERelationConditionSideRight);
+            relationCondition = &rootCondition.AddRelationConditionL(
+                    DataSource()->ContainsDef(), ERelationConditionSideRight);
             containerCondition = &relationCondition->LeftL();
             }
         else
             {
-            relationCondition = &rootCondition.AddRelationConditionL(DataSource()->ContainsDef(), ERelationConditionSideLeft);
+            relationCondition = &rootCondition.AddRelationConditionL(
+                    DataSource()->ContainsDef(), ERelationConditionSideLeft);
             containerCondition = &relationCondition->RightL();
             }
         containerCondition->AddObjectConditionL(aContainerId.Value());
@@ -278,7 +288,7 @@
                                    aLogicCondition, CMdEObjectDef& aObjectDef,
                                  const TGlxFilterProperties& aFilterProperties)
     {
-    TRACER("CGlxDataSourceTaskMde::SetQueryFilterConditionsL()")
+    TRACER("CGlxDataSourceTaskMde::SetQueryFilterConditionsL()");
     
     if( aFilterProperties.iUri )
         {
@@ -298,9 +308,12 @@
             }
         }
     
-    if( ( aFilterProperties.iMinCount > 0 ) && ( CGlxDataSource::EContainerTypeNotAContainer != DataSource()->ContainerType(&aObjectDef) ) )
+    if( ( aFilterProperties.iMinCount > 0 ) && ( 
+            CGlxDataSource::EContainerTypeNotAContainer != DataSource()->ContainerType(
+                    &aObjectDef) ) )
         {        
-		TMdEUintRange range(aFilterProperties.iMinCount,aFilterProperties.iMinCount,EMdERangeTypeGreaterOrEqual);
+		TMdEUintRange range(aFilterProperties.iMinCount,
+		        aFilterProperties.iMinCount,EMdERangeTypeGreaterOrEqual);
 		aLogicCondition.AddObjectConditionL(range);
         }
 
@@ -310,12 +323,15 @@
         if( DataSource()->ContainerIsLeft(aObjectDef) )
             {
             CMdERelationCondition& relationCondition = 
-                    aLogicCondition.AddRelationConditionL(DataSource()->ContainsDef(), ERelationConditionSideLeft);
-            relationCondition.RightL().AddObjectConditionL(aFilterProperties.iContainsItem.Value());
+                    aLogicCondition.AddRelationConditionL(
+                            DataSource()->ContainsDef(), ERelationConditionSideLeft);
+            relationCondition.RightL().AddObjectConditionL(
+                    aFilterProperties.iContainsItem.Value());
             }
         else
             {
-            CMdERelationCondition& relationCondition = aLogicCondition.AddRelationConditionL(DataSource()->ContainsDef(), ERelationConditionSideRight);
+            CMdERelationCondition& relationCondition = aLogicCondition.AddRelationConditionL(
+                    DataSource()->ContainsDef(), ERelationConditionSideRight);
             relationCondition.LeftL().AddObjectConditionL(aFilterProperties.iContainsItem.Value());
             }
         }
@@ -326,30 +342,43 @@
         if( EGlxFilterOriginDownload == aFilterProperties.iOrigin )
             {
             // The download collection shows all but captured items
-            aLogicCondition.AddPropertyConditionL(originProperty, TMdEUintNotEqual(MdeConstants::Object::ECamera));
+            aLogicCondition.AddPropertyConditionL(originProperty, TMdEUintNotEqual(
+                    MdeConstants::Object::ECamera));
             }
 		else if(EGlxFilterOriginCamera == aFilterProperties.iOrigin )            
 			{
 			// The camera collection Shows the captured Items
-			aLogicCondition.AddPropertyConditionL(originProperty, TMdEUintEqual(MdeConstants::Object::ECamera));            
+			aLogicCondition.AddPropertyConditionL(originProperty, TMdEUintEqual(
+			        MdeConstants::Object::ECamera));            
 			}
+		else if(EGlxFilterOriginAll == aFilterProperties.iOrigin )            
+			{
+			// The Months Collection Populates All the Items, filter 
+		    // it for Images and Videos only
+            CMdELogicCondition& logicCondition = 
+                aLogicCondition.AddLogicConditionL(ELogicConditionOperatorOr);
+            logicCondition.AddObjectConditionL( DataSource()->ImageDef() ); 
+			}        
         }
         
     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(KPropertyDefNameFrameCount);
-        aLogicCondition.AddPropertyConditionL(frameCountProperty, TMdEIntLess(excludeAllImagesAboveOrEqualToThisFrameCount));
+        CMdEPropertyDef& frameCountProperty = DataSource()->ImageDef().GetPropertyDefL(
+                KPropertyDefNameFrameCount);
+        aLogicCondition.AddPropertyConditionL(frameCountProperty, TMdEIntLess(
+                excludeAllImagesAboveOrEqualToThisFrameCount));
         }
         
     if( aFilterProperties.iNoDRM )
         {
-        __ASSERT_DEBUG((EGlxFilterImage == aFilterProperties.iItemType), Panic(EGlxPanicIllegalArgument));
-        // Exclude any image which is DRM protected
-        //CMdEPropertyDef& drmProperty = DataSource()->ImageDef().GetPropertyDefL(KPropertyDefNameDRM);
-        //aLogicCondition.AddPropertyConditionL(drmProperty, EFalse);
+        __ASSERT_DEBUG((EGlxFilterImage == aFilterProperties.iItemType), Panic(
+                EGlxPanicIllegalArgument));
+
+        CMdEPropertyDef& drmProperty = DataSource()->ImageDef().GetPropertyDefL(MdeConstants::MediaObject::KDRMProperty);
+        CMdEPropertyCondition& drmPropertyCondition = aLogicCondition.AddPropertyConditionL(drmProperty);
+        drmPropertyCondition.SetNegate(ETrue);
         }
         
     if( aFilterProperties.iPath )          // If this is set. Then we need to filter on the Ids it supplies
@@ -373,19 +402,22 @@
         
     if( !aFilterProperties.iIncludeCameraAlbum )
         {
-        CMdEObjectCondition& objectCondition = aLogicCondition.AddObjectConditionL(DataSource()->CameraAlbumId().Value());
+        CMdEObjectCondition& objectCondition = aLogicCondition.AddObjectConditionL(
+        		DataSource()->CameraAlbumId().Value());
         objectCondition.SetNegate(ETrue);
         }
     
     if( TTime(0) != aFilterProperties.iStartDate )
         {
-        CMdEPropertyDef& creationDateDef = aObjectDef.GetPropertyDefL(KPropertyDefNameCreationDate);
+        CMdEPropertyDef& creationDateDef = aObjectDef.GetPropertyDefL(
+                KPropertyDefNameCreationDate);
         if (creationDateDef.PropertyType() != EPropertyTime)
             {
             User::Leave(KErrCorrupt);
             }
 
-        aLogicCondition.AddPropertyConditionL(creationDateDef, TMdETimeBetween(aFilterProperties.iStartDate, aFilterProperties.iEndDate));
+        aLogicCondition.AddPropertyConditionL(creationDateDef, TMdETimeBetween(
+                aFilterProperties.iStartDate, aFilterProperties.iEndDate));
         }
     }
 
@@ -396,13 +428,14 @@
 void CGlxDataSourceTaskMde::SetSortOrderL(CMdEQuery& aQuery, CMdEObjectDef& aObjectDef, 
                                          const TGlxFilterProperties& aFilterProperties)
     {
-    TRACER("CGlxDataSourceTaskMde::SetSortOrderL()")
+    TRACER("CGlxDataSourceTaskMde::SetSortOrderL()");
     switch(aFilterProperties.iSortOrder)
         {
         case EGlxFilterSortOrderAlphabetical:
             {
             CMdEPropertyDef& titleProperty = aObjectDef.GetPropertyDefL(KPropertyDefNameTitle);
-            TMdEOrderRule orderRule(titleProperty, aFilterProperties.iSortDirection == EGlxFilterSortDirectionAscending);
+            TMdEOrderRule orderRule(titleProperty, aFilterProperties.iSortDirection ==
+            EGlxFilterSortDirectionAscending);
             orderRule.SetType(EOrderRuleTypeProperty);
             orderRule.SetCaseSensitive(EFalse);
             aQuery.AppendOrderRuleL(orderRule);
@@ -410,27 +443,35 @@
             }
          case EGlxFilterSortOrderItemCount:
             {            
-            TMdEOrderRule orderRule(EOrderRuleTypeUsageCount, aFilterProperties.iSortDirection == EGlxFilterSortDirectionAscending);
+            //Order rule is needed for tags popularity            
+            TMdEOrderRule orderRule(EOrderRuleTypeUsageCount, aFilterProperties.iSortDirection ==
+            EGlxFilterSortDirectionAscending);
             aQuery.AppendOrderRuleL(orderRule);            
             break;
             }
         case EGlxFilterSortOrderCaptureDate:
             {
-            CMdEPropertyDef& creationDateProperty = aObjectDef.GetPropertyDefL(KPropertyDefNameCreationDate);
-            TMdEOrderRule orderRule(creationDateProperty, aFilterProperties.iSortDirection == EGlxFilterSortDirectionAscending);
+            CMdEPropertyDef& creationDateProperty = aObjectDef.GetPropertyDefL(
+                    KPropertyDefNameCreationDate);
+            TMdEOrderRule orderRule(creationDateProperty, aFilterProperties.iSortDirection ==
+            EGlxFilterSortDirectionAscending);
             orderRule.SetType(EOrderRuleTypeProperty);
             aQuery.AppendOrderRuleL(orderRule);
-            TMdEOrderRule orderRule2(EOrderRuleTypeItemID, aFilterProperties.iSortDirection == EGlxFilterSortDirectionAscending);
+            TMdEOrderRule orderRule2(EOrderRuleTypeItemID, aFilterProperties.iSortDirection ==
+            EGlxFilterSortDirectionAscending);
             aQuery.AppendOrderRuleL(orderRule2);
             break;
             }
          case EGlxFilterSortOrderModifiedDate:
             {
-            CMdEPropertyDef& modifiedDateProperty = aObjectDef.GetPropertyDefL(KPropertyDefNameLastModifiedDate);
-            TMdEOrderRule orderRule(modifiedDateProperty, aFilterProperties.iSortDirection == EGlxFilterSortDirectionAscending);
+            CMdEPropertyDef& modifiedDateProperty = aObjectDef.GetPropertyDefL(
+                    KPropertyDefNameLastModifiedDate);
+            TMdEOrderRule orderRule(modifiedDateProperty, aFilterProperties.iSortDirection == 
+            EGlxFilterSortDirectionAscending);
             orderRule.SetType(EOrderRuleTypeProperty);
             aQuery.AppendOrderRuleL(orderRule);
-            TMdEOrderRule orderRule2(EOrderRuleTypeItemID, aFilterProperties.iSortDirection == EGlxFilterSortDirectionAscending);
+            TMdEOrderRule orderRule2(EOrderRuleTypeItemID, aFilterProperties.iSortDirection == 
+            EGlxFilterSortDirectionAscending);
             aQuery.AppendOrderRuleL(orderRule2);
             break;
             }
@@ -445,14 +486,16 @@
 //  CGlxDataSourceTaskMde::MaxQueryResultsCount
 // ----------------------------------------------------------------------------
 // 
-TInt CGlxDataSourceTaskMde::MaxQueryResultsCount(const TGlxFilterProperties& aFilterProperties) const
+TInt CGlxDataSourceTaskMde::MaxQueryResultsCount(const TGlxFilterProperties& 
+        aFilterProperties) const
     {
-    TRACER("CGlxDataSourceTaskMde::MaxQueryResultsCount()")
+    TRACER("CGlxDataSourceTaskMde::MaxQueryResultsCount()");
     TInt ret = KMdEQueryDefaultMaxCount;
-    if (aFilterProperties.iLastCaptureDate)
+    if (aFilterProperties.iLastCaptureDate || aFilterProperties.iMaxCount == 1)
         {
         ret = 1;
         }
+    GLX_DEBUG2("CGlxDataSourceTaskMde::MaxQueryResultsCount ret=%d", ret);   
     return ret;
     }
 
@@ -462,7 +505,7 @@
 // 
 void CGlxDataSourceTaskMde::RemoveQuery()
     {
-    TRACER("CGlxDataSourceTaskMde::RemoveQuery()")
+    TRACER("CGlxDataSourceTaskMde::RemoveQuery()");
     CMdEQuery* query = iQueries[0];
     iQueryTypes.Remove(0);
     iQueries.Remove(0);
@@ -478,7 +521,7 @@
         TBool aIsContent, TGlxQueryType aQueryType, TQueryResultMode aResultMode, 
                                                 const TGlxMediaId& aContainerId)
     {
-    TRACER("CGlxDataSourceTaskMde::DoQueryL()")
+    TRACER("CGlxDataSourceTaskMde::DoQueryL()");
     
     CMdEObjectDef* queryBaseObject = &aObjectDef;
     if( aIsContent )
@@ -503,11 +546,12 @@
             }
         }
 
-    CMdEQuery* query = DataSource()->Session().NewObjectQueryL(*DataSource()->NamespaceDef(), *queryBaseObject, this);
+    CMdEQuery* query = DataSource()->Session().NewObjectQueryL(*DataSource()->NamespaceDef(),
+            *queryBaseObject, this);
     CleanupStack::PushL(query);
     
+    query->SetResultMode(aResultMode);
     SetQueryConditionsL(*query, iFilterProperties, aContainerId, aObjectDef);   
-    query->SetResultMode(aResultMode);
     
     CleanupStack::Pop(query);
     
@@ -523,7 +567,7 @@
 void CGlxDataSourceTaskMde::QueueImageVideoObjectQueriesL(const RArray<TGlxMediaId>& aObjectIds,
                                           const TGlxFilterProperties& aFilterProperties)
     {
-    TRACER("CGlxDataSourceTaskMde::QueueImageVideoObjectQueriesL()")
+    TRACER("CGlxDataSourceTaskMde::QueueImageVideoObjectQueriesL()");
     if (aFilterProperties.iItemType == EGlxFilterImage)
         {
         // Only perform the image query
@@ -548,7 +592,7 @@
 //
 void CGlxDataSourceTaskMde::QueueTagObjectQueryL(const RArray<TGlxMediaId>& aObjectIds)
     {
-    TRACER("CGlxDataSourceTaskMde::QueueTagObjectQueryL()")
+    TRACER("CGlxDataSourceTaskMde::QueueTagObjectQueryL()");
     QueueObjectQueryL(DataSource()->TagDef(), aObjectIds, EImageVideoQuery);
     }
 
@@ -558,14 +602,14 @@
 //
 void CGlxDataSourceTaskMde::QueueAlbumObjectQueryL(const RArray<TGlxMediaId>& aObjectIds)
     {
-    TRACER("CGlxDataSourceTaskMde::QueueAlbumObjectQueryL()")
+    TRACER("CGlxDataSourceTaskMde::QueueAlbumObjectQueryL()");
     QueueObjectQueryL(DataSource()->AlbumDef(), aObjectIds, EImageVideoQuery);
     }
 
 
 void CGlxDataSourceTaskMde::QueueMonthObjectQueryL(const RArray<TGlxMediaId>& aObjectIds)
     {
-    TRACER("CGlxDataSourceTaskMde::QueueMonthObjectQueryL()")
+    TRACER("CGlxDataSourceTaskMde::QueueMonthObjectQueryL()");
     QueueObjectQueryL(DataSource()->MonthDef(), aObjectIds, EImageVideoQuery);
     }
 
@@ -576,14 +620,15 @@
 void CGlxDataSourceTaskMde::QueueObjectQueryL(CMdEObjectDef& aObjectDef, 
         const RArray<TGlxMediaId>& aObjectIds, const TGlxQueryType& aQueryType)
     {
-    TRACER("CGlxDataSourceTaskMde::QueueObjectQueryL()")
-    CMdEQuery* query = DataSource()->Session().NewObjectQueryL(*DataSource()->NamespaceDef(), aObjectDef,  this);
+    TRACER("CGlxDataSourceTaskMde::QueueObjectQueryL()");
+    CMdEQuery* query = DataSource()->Session().NewObjectQueryL(*DataSource()->NamespaceDef(), 
+            aObjectDef,  this);
     CleanupStack::PushL(query);
  
     CMdELogicCondition& lc = query->Conditions();
     NGlxDataSourceMdsUtility::AddObjectConditionL(lc,aObjectIds);
     
-    query->SetResultMode(EQueryResultModeObjectWithFreetexts);
+    query->SetResultMode(EQueryResultModeItem);
     
     CleanupStack::Pop(query);
     AppendQueryL(query, aQueryType);
@@ -596,7 +641,7 @@
 // 
 void CGlxDataSourceTaskMde::AppendQueryL(CMdEQuery* aQuery, const TGlxQueryType& aQueryType)
     {
-    TRACER("CGlxDataSourceTaskMde::AppendQueryL()")
+    TRACER("CGlxDataSourceTaskMde::AppendQueryL()");
     CleanupStack::PushL(aQuery);
     
     TInt err = iQueryTypes.Append(aQueryType);
@@ -618,7 +663,7 @@
 // 
 void CGlxDataSourceTaskMde::ExecuteQueryL()
     {
-    TRACER("CGlxDataSourceTaskMde::ExecuteQueryL()")
+    TRACER("CGlxDataSourceTaskMde::ExecuteQueryL()");
     __ASSERT_DEBUG(iQueries.Count(), Panic(EGlxPanicQueryLogicError));
     iQueries[0]->FindL();
     }
@@ -629,9 +674,22 @@
 // 
 void CGlxDataSourceTaskMde::HandleQueryCompletedL(CMdEQuery& aQuery)
     {
-    TRACER("CGlxDataSourceTaskMde::HandleQueryCompletedL()")
+    TRACER("CGlxDataSourceTaskMde::HandleQueryCompletedL()");
     DoHandleQueryCompletedL(aQuery);
-    RemoveQuery();
+    
+    // Both the function calls should be executed if any
+    // request is not cancelled before completion.
+    // All the pending Queries are already destroyed in CancelRequest.
+    // Hence we do not have to call RemoveQuery here. That will lead to
+    // User 130 crash. 
+    // DoNextQuery tries to get iQueries.Count(). Since iQueries is destroyed
+    // in CancelRequest 
+    if (iCancelled)
+    	{ 
+    	GLX_LOG_INFO("***Query already Removed. Hence Return***");
+    	return;  	
+    	}  
+    RemoveQuery();  
     DoNextQueryL();
     }
 
@@ -641,7 +699,7 @@
 // 
 void CGlxDataSourceTaskMde::DestroyQueries()
     {
-    TRACER("CGlxDataSourceTaskMde::DestroyQueries()")
+    TRACER("CGlxDataSourceTaskMde::DestroyQueries()");
     for (TInt i = 0; i < iQueries.Count(); i++)
         {
         // Ensure that there are not any running queries
--- a/engine/collectionframework/datasource/plugins/glxdatasourcemde2.5/src/glxdatasourcetaskmdsattribute.cpp	Wed Jun 16 13:08:54 2010 +0100
+++ b/engine/collectionframework/datasource/plugins/glxdatasourcemde2.5/src/glxdatasourcetaskmdsattribute.cpp	Thu Jul 22 16:33:32 2010 +0100
@@ -57,7 +57,7 @@
 #include <mpxmediadrmdefs.h>
 #include <mpxmediageneraldefs.h>
 #include <imageconversion.h>
-
+#include <caf/content.h>
 #include "glxdatasourcemds.h"
 #include "glxdatasourcemds.hrh"
 #include "glxdatasourcemdsutility.h"
@@ -83,7 +83,9 @@
 //  Constructor
 // ----------------------------------------------------------------------------
 //  
-CGlxDataSourceTaskMdeAttributeMde::CGlxDataSourceTaskMdeAttributeMde(CGlxGetRequest* aRequest, MGlxDataSourceRequestObserver& aObserver, CGlxDataSource* aDataSource)
+CGlxDataSourceTaskMdeAttributeMde::CGlxDataSourceTaskMdeAttributeMde(
+        CGlxGetRequest* aRequest,MGlxDataSourceRequestObserver& aObserver,
+            CGlxDataSource* aDataSource)
     : CGlxDataSourceTaskMde(aRequest, aObserver, aDataSource)
     {
     TRACER("CGlxDataSourceTaskMdeAttribute::CGlxDataSourceTaskMdeAttribute()")
@@ -108,16 +110,14 @@
 void CGlxDataSourceTaskMdeAttributeMde::ExecuteRequestL()
     {
     TRACER("CGlxDataSourceTaskMdeAttribute::ExecuteRequestL()")    
-    GLX_LOG_ENTRY_EXIT("CGlxDataSourceTaskMdeAttribute::ExecuteRequestL");
+#ifdef _DEBUG
+    iStartTime.HomeTime(); 
+#endif
  
     CGlxGetRequest* request = static_cast<CGlxGetRequest*>(iRequest);
         
     __ASSERT_DEBUG(request->MediaIds().Count() > 0, User::Invariant());
-
- 	GLX_LOG_INFO("==> CGlxDataSourceTaskMdeAttributeMde::ExecuteRequestL");
-#ifdef _DEBUG
- 	iStartTime.HomeTime(); // Get home time
-#endif
+    
     if (request->MediaIds().Count() > 1)
         {
         iMediaArray = CMPXMediaArray::NewL();
@@ -130,26 +130,8 @@
     	}
     else
     	{
-        
-     /*  __ASSERT_DEBUG(dynamic_cast<CGlxGetRequest*>(iRequest), Panic(EGlxPanicLogicError));
-        CGlxGetRequest* request = static_cast<CGlxGetRequest*>(iRequest);   
-        
-    	QueueImageVideoObjectQueriesL(request->MediaIds(), iFilterProperties);
-    	QueueAlbumObjectQueryL(request->MediaIds());
-        QueueTagObjectQueryL(request->MediaIds());
-        QueueMonthObjectQueryL(request->MediaIds());
-        
-	    if (LocationAttributeRequested())
-	        {
-	        QueueLocaitonQueryL();
-	        }
-	    
-    	*/
-    	
         __ASSERT_DEBUG(dynamic_cast<CGlxGetRequest*>(iRequest), Panic(EGlxPanicLogicError));
         CGlxGetRequest* request = static_cast<CGlxGetRequest*>(iRequest);   
-// Not used anywhere, commenting out this line to avoid BAD warning
-//        const RArray<TItemId>& mediaIds = reinterpret_cast<const RArray<TItemId>&>(request->MediaIds());
         
         switch(iFilterProperties.iItemType)
             {
@@ -211,6 +193,11 @@
             Panic(EGlxPanicLogicError);
         break;
         }  
+#ifdef _DEBUG
+    iStopTime.HomeTime(); 
+    GLX_DEBUG2("CGlxDataSourceTaskMdeAttributeMde:DoHandleQueryCompletedL() took %d us",
+                     (TInt)iStopTime.MicroSecondsFrom(iStartTime).Int64());
+#endif  
     }
 
 // ----------------------------------------------------------------------------
@@ -292,7 +279,8 @@
         {
         if ( request->Attributes()[i] == KMPXMediaGeneralId )
             {
-            aEntry->SetTObjectValueL<TMPXItemId>(KMPXMediaGeneralId, (TMPXItemId)request->CollectionPluginUid().iUid);
+            aEntry->SetTObjectValueL<TMPXItemId>(KMPXMediaGeneralId, (
+                    TMPXItemId)request->CollectionPluginUid().iUid);
             }
         else if ( request->Attributes()[i] == KMPXMediaGeneralType )
             {
@@ -323,12 +311,14 @@
 				{
 				case KGlxCollectionPluginCameraImplementationUid:
 					{   
-#if 0 	/// @todo AB camera album				     		
+#if 0 	/// AB camera album				     		
 					container = DataSource()->CameraAlbumId();
 					objectDef = &DataSource()->AlbumDef();
 #endif					
 					filterProperties.iItemType = EGlxFilterImage;
-					QueueObjectQueryL(*objectDef, isContent, EAttributeQuery, EQueryResultModeCount, container, request->Attributes()[i], aEntry,  filterProperties);
+					QueueObjectQueryL(*objectDef, isContent, EAttributeQuery,
+					        EQueryResultModeCount, container, 
+					        request->Attributes()[i], aEntry,  filterProperties);
 					break;                    	
 					}
 				default:
@@ -350,12 +340,14 @@
 				{
 				case KGlxCollectionPluginCameraImplementationUid:
 					{   
-#if 0 	/// @todo AB camera album					     		
+#if 0 	/// AB camera album					     		
 					container = DataSource()->CameraAlbumId();
 					objectDef = &DataSource()->AlbumDef();
 #endif					
 					filterProperties.iItemType = EGlxFilterVideo;
-					QueueObjectQueryL(*objectDef, isContent, EAttributeQuery, EQueryResultModeCount, container, request->Attributes()[i], aEntry,  filterProperties);
+					QueueObjectQueryL(*objectDef, isContent, EAttributeQuery, 
+					        EQueryResultModeCount, container,
+					        request->Attributes()[i],aEntry,  filterProperties);
 					break;                    	
 					}
 				default:
@@ -366,7 +358,8 @@
 			}
             
             
-        else if ( ( request->Attributes()[i] == KMPXMediaGeneralCount ) || ( request->Attributes()[i] == KGlxMediaCollectionInternalUsageCount ) )
+        else if ( ( request->Attributes()[i] == KMPXMediaGeneralCount ) || 
+                ( request->Attributes()[i] == KGlxMediaCollectionInternalUsageCount ) )
             {
             TGlxMediaId container = TGlxMediaId(KGlxCollectionRootId);
             CMdEObjectDef* objectDef = &DataSource()->ObjectDef();
@@ -395,39 +388,51 @@
                     }
                 case KGlxCollectionPluginMonthsImplementationUid:
                     {
-					filterProperties.iOrigin = EGlxFilterOriginCamera;                    	
+					filterProperties.iOrigin = EGlxFilterOriginAll;
                     break;
                     }
-              /*  case KGlxCollectionPluginDownloadsImplementationUid:
-                    {
-                    filterProperties.iOrigin = EGlxFilterOriginDownload;
-                    break;
-                    }*/
                 default:
                     {
                     // default gallery query returns all objects as per filter
                     break;
                     }
                 }
-            QueueObjectQueryL(*objectDef, isContent, EAttributeQuery, EQueryResultModeCount, container, request->Attributes()[i], aEntry,  filterProperties);
+            QueueObjectQueryL(*objectDef, isContent, EAttributeQuery, 
+                    EQueryResultModeCount, container, request->Attributes()[i], 
+                    aEntry,  filterProperties);
             }
         else if ( request->Attributes()[i] == KMPXMediaColDetailSpaceId )
             {
-            aEntry->SetTObjectValueL(KMPXMediaColDetailSpaceId, KGlxDataSourceMdeImplementationUid);
+            aEntry->SetTObjectValueL(KMPXMediaColDetailSpaceId, 
+                    KGlxDataSourceMdeImplementationUid);
             }
         else if ( request->Attributes()[i] == KGlxMediaCollectionInternalStartDate )
             {
+            GLX_DEBUG1("CGlxDataSourceTaskMdeAttributeMde::AddCollectionAttributesL - KGlxMediaCollectionInternalStartDate");
             TGlxMediaId container = TGlxMediaId(KGlxCollectionRootId);
             TGlxFilterProperties filterProperties = iFilterProperties;
             filterProperties.iSortOrder = EGlxFilterSortOrderCaptureDate;
             filterProperties.iSortDirection = EGlxFilterSortDirectionAscending;
-            filterProperties.iOrigin = EGlxFilterOriginCamera;
+            filterProperties.iOrigin = EGlxFilterOriginAll;
+            filterProperties.iMaxCount = 1 ;             
 
-            QueueObjectQueryL(DataSource()->AlbumDef(), ETrue, EAttributeQuery, EQueryResultModeObjectWithFreetexts,container, KGlxMediaCollectionInternalStartDate, aEntry, filterProperties);
+            QueueObjectQueryL(DataSource()->AlbumDef(), ETrue, EAttributeQuery, 
+                    EQueryResultModeItem, container, 
+                    KGlxMediaCollectionInternalStartDate, aEntry, filterProperties);
             }
         else if ( request->Attributes()[i] == KGlxMediaCollectionInternalEndDate )
             {
-            // not necessary to be requested, returned when StartDate requested
+            GLX_DEBUG1("CGlxDataSourceTaskMdeAttributeMde::AddCollectionAttributesL - KGlxMediaCollectionInternalEndDate");
+            TGlxMediaId container = TGlxMediaId(KGlxCollectionRootId);
+            TGlxFilterProperties filterProperties = iFilterProperties;
+            filterProperties.iSortOrder = EGlxFilterSortOrderCaptureDate;
+            filterProperties.iSortDirection = EGlxFilterSortDirectionDescending;
+            filterProperties.iOrigin = EGlxFilterOriginAll;
+            filterProperties.iMaxCount = 1 ;             
+
+            QueueObjectQueryL(DataSource()->AlbumDef(), ETrue, EAttributeQuery, 
+                    EQueryResultModeItem, container, 
+                    KGlxMediaCollectionInternalEndDate, aEntry, filterProperties);
             }
         else if ( request->Attributes()[i] == KGlxMediaGeneralSlideshowableContent )
             {
@@ -456,7 +461,8 @@
 // CGlxDataSourceTaskMdeAttribute::AddContainerAttributesL
 // ----------------------------------------------------------------------------
 //
-void CGlxDataSourceTaskMdeAttributeMde::AddContainerAttributesL(CMPXMedia* aEntry, CMdEObject* aContainer, CGlxDataSource::TContainerType aType)
+void CGlxDataSourceTaskMdeAttributeMde::AddContainerAttributesL(CMPXMedia* aEntry, 
+        CMdEObject* aContainer, CGlxDataSource::TContainerType aType)
     {
     TRACER("CGlxDataSourceTaskMdeAttribute::AddContainerAttributesL()")
     __ASSERT_DEBUG(aEntry, Panic(EGlxPanicLogicError));
@@ -464,12 +470,13 @@
     __ASSERT_DEBUG(dynamic_cast<CGlxGetRequest*>(iRequest), Panic(EGlxPanicLogicError));
     CGlxGetRequest* request = static_cast<CGlxGetRequest*>(iRequest);
 
-    /// @todo check property defs are valid and type is correct
+    /// check property defs are valid and type is correct
     for ( TInt i = 0; i < request->Attributes().Count(); i++ )
         {
         if ( request->Attributes()[i] == KMPXMediaGeneralId )
             {
-            aEntry->SetTObjectValueL<TMPXItemId>(KMPXMediaGeneralId, (TMPXItemId)aContainer->Id());
+            aEntry->SetTObjectValueL<TMPXItemId>(KMPXMediaGeneralId, 
+                    (TMPXItemId)aContainer->Id());
             }
         else if ( request->Attributes()[i] == KMPXMediaGeneralType )
             {
@@ -501,7 +508,8 @@
         else if ( request->Attributes()[i] == KMPXMediaGeneralTitle )
             {
             CMdEProperty* title;
-            CMdEPropertyDef& titleProperty = aContainer->Def().GetPropertyDefL(KPropertyDefNameTitle);
+            CMdEPropertyDef& titleProperty = aContainer->Def().GetPropertyDefL(
+                    KPropertyDefNameTitle);
             TInt titleIndex = aContainer->Property(titleProperty, title);
             if(titleIndex == KErrNotFound)
                 {
@@ -510,22 +518,26 @@
                 }
             else
                 {
-                aEntry->SetTextValueL(KMPXMediaGeneralTitle, static_cast<CMdETextProperty*>(title)->Value());
+                aEntry->SetTextValueL(KMPXMediaGeneralTitle, static_cast<CMdETextProperty*>
+                (title)->Value());
                 }
             switch (aType)
                 {
                 case CGlxDataSource::EContainerTypeAlbum:
                     {
                     CMdEProperty* albumType;
-                    CMdEPropertyDef& albumTypeProperty = aContainer->Def().GetPropertyDefL(KPropertyDefNameAlbumType);
+                    CMdEPropertyDef& albumTypeProperty = 
+                    aContainer->Def().GetPropertyDefL( KPropertyDefNameAlbumType);
                     TInt albumTypeIndex = aContainer->Property(albumTypeProperty, albumType);
                     if( KErrNotFound != albumTypeIndex )
                         {
-                        TUint16 albumTypeValue = static_cast<CMdEUint16Property*>(albumType)->Value();
+                        TUint16 albumTypeValue = 
+                        static_cast<CMdEUint16Property*>(albumType)->Value();
                         if ( albumTypeValue != MdeConstants::Album::EAlbumUser ) 
                             {
                             request->AppendCpiAttributeL(KMPXMediaGeneralTitle);
-                            aEntry->SetTObjectValueL(KGlxMediaCollectionInternalSystemItemType, albumTypeValue);
+                            aEntry->SetTObjectValueL(KGlxMediaCollectionInternalSystemItemType, 
+                                    albumTypeValue);
                             }
                         }
                     break;
@@ -538,14 +550,16 @@
                     {
                     request->AppendCpiAttributeL(KMPXMediaGeneralTitle);
                     CMdEProperty* time;
-                    CMdEPropertyDef& timeProperty = aContainer->Def().GetPropertyDefL(KPropertyDefNameCreationDate);
+                    CMdEPropertyDef& timeProperty = aContainer->Def().GetPropertyDefL(
+                            KPropertyDefNameCreationDate);
                     TInt timeIndex = aContainer->Property(timeProperty, time);
                     if( KErrNotFound == timeIndex )
                         {
                         User::Leave(KErrCorrupt);
                         }
 
-                    aEntry->SetTObjectValueL(KGlxMediaCollectionInternalStartDate, static_cast<CMdETimeProperty*>(time)->Value());
+                    aEntry->SetTObjectValueL(KGlxMediaCollectionInternalStartDate, 
+                            static_cast<CMdETimeProperty*>(time)->Value());
                     break;
                     }
                 }
@@ -553,21 +567,24 @@
         else if ( request->Attributes()[i] == KMPXMediaGeneralDate )
             {
             CMdEProperty* time;
-            CMdEPropertyDef& timeProperty = aContainer->Def().GetPropertyDefL(KPropertyDefNameCreationDate);
+            CMdEPropertyDef& timeProperty = aContainer->Def().GetPropertyDefL(
+                    KPropertyDefNameCreationDate);
             TInt timeIndex = aContainer->Property(timeProperty, time);
             if( KErrNotFound == timeIndex )
                 {
                 User::Leave(KErrCorrupt);
                 }
 
-            aEntry->SetTObjectValueL(KMPXMediaGeneralDate, static_cast<CMdETimeProperty*>(time)->Value());
+            aEntry->SetTObjectValueL(KMPXMediaGeneralDate, 
+                    static_cast<CMdETimeProperty*>(time)->Value());
             }
         else if ( request->Attributes()[i] == KMPXMediaGeneralSize )
             {
             CMdEProperty* size;
-            CMdEPropertyDef& sizeProperty = aContainer->Def().GetPropertyDefL(KPropertyDefNameSize);
+            CMdEPropertyDef& sizeProperty = aContainer->Def().GetPropertyDefL(
+                    KPropertyDefNameSize);
             TInt sizeIndex = aContainer->Property(sizeProperty, size);
-            TInt sizeValue;
+            TUint sizeValue;
             if(sizeIndex == KErrNotFound)
                 {
                 sizeValue = 0;
@@ -586,7 +603,8 @@
         else if ( request->Attributes()[i] == KMPXMediaGeneralMimeType )
             {
             CMdEProperty* mimeType;
-            CMdEPropertyDef& mimeTypeProperty = aContainer->Def().GetPropertyDefL(KPropertyDefNameItemType);
+            CMdEPropertyDef& mimeTypeProperty = aContainer->Def().GetPropertyDefL(
+                    KPropertyDefNameItemType);
             TInt mimeTypeIndex = aContainer->Property(mimeTypeProperty, mimeType);
             if( KErrNotFound == mimeTypeIndex)
                 {
@@ -594,10 +612,12 @@
                 }
             else
                 {
-                aEntry->SetTextValueL(KMPXMediaGeneralMimeType, static_cast<CMdETextProperty*>(mimeType)->Value());
+                aEntry->SetTextValueL(KMPXMediaGeneralMimeType,
+                        static_cast<CMdETextProperty*>(mimeType)->Value());
                 }
             }
-        else if ( ( request->Attributes()[i] == KMPXMediaGeneralCount ) || ( request->Attributes()[i] == KGlxMediaCollectionInternalUsageCount ) )
+        else if ( ( request->Attributes()[i] == KMPXMediaGeneralCount ) || 
+                ( request->Attributes()[i] == KGlxMediaCollectionInternalUsageCount ) )
             {
             switch (aType)
                 {
@@ -610,10 +630,12 @@
                     }
                 case CGlxDataSource::EContainerTypeMonth:
                     {
-                    iFilterProperties.iOrigin = EGlxFilterOriginCamera;
+                    iFilterProperties.iOrigin = EGlxFilterOriginAll;                    
                     TGlxFilterProperties filterProperties = iFilterProperties;
                     AddMonthFilterL(aContainer, filterProperties);
-                    QueueObjectQueryL(DataSource()->AlbumDef(), ETrue, EAttributeQuery, EQueryResultModeCount, TGlxMediaId(KGlxCollectionRootId), request->Attributes()[i], aEntry, filterProperties);
+                    QueueObjectQueryL(DataSource()->AlbumDef(), ETrue, EAttributeQuery,
+                            EQueryResultModeCount, TGlxMediaId(KGlxCollectionRootId),
+                            request->Attributes()[i], aEntry, filterProperties);
                     break;
                     }
                 }
@@ -626,13 +648,16 @@
                 case CGlxDataSource::EContainerTypeAlbum:
                     {
                     CMdEProperty* albumType;
-                    CMdEPropertyDef& albumTypeProperty = aContainer->Def().GetPropertyDefL(KPropertyDefNameAlbumType);
-                    TInt albumTypeIndex = aContainer->Property(albumTypeProperty, albumType);
+                    CMdEPropertyDef& albumTypeProperty = 
+                    aContainer->Def().GetPropertyDefL(   KPropertyDefNameAlbumType);
+                    TInt albumTypeIndex = aContainer->Property(albumTypeProperty,
+                            albumType);
                     if( KErrNotFound != albumTypeIndex )
                         {
-                        TInt albumTypeValue = static_cast<CMdEUint16Property*>(albumType)->Value();
-                        
-                        if( (albumTypeValue == MdeConstants::Album::EAlbumSystemCamera) || (albumTypeValue == MdeConstants::Album::EAlbumSystemFavourite ) )
+                        TInt albumTypeValue = 
+                        static_cast<CMdEUint16Property*>(albumType)->Value();
+                        if( (albumTypeValue == MdeConstants::Album::EAlbumSystemCamera) || 
+                        		(albumTypeValue == MdeConstants::Album::EAlbumSystemFavourite ) )
                             {
                             systemItem = ETrue;
                             }
@@ -663,8 +688,10 @@
 					TGlxFilterProperties filterProperties = iFilterProperties;
 					AddMonthFilterL(aContainer, filterProperties);
 					filterProperties.iItemType = EGlxFilterImage;
-#if 0 	/// @todo AB camera album					
-					QueueObjectQueryL(DataSource()->AlbumDef(), ETrue, EAttributeQuery, EQueryResultModeCount, DataSource()->CameraAlbumId(), request->Attributes()[i], aEntry, filterProperties);
+#if 0 	/// AB camera album					
+					QueueObjectQueryL(DataSource()->AlbumDef(), ETrue, EAttributeQuery,
+					        EQueryResultModeCount, DataSource()->CameraAlbumId(), 
+					        request->Attributes()[i], aEntry, filterProperties);
 #endif					
 					break;
 					}			             					
@@ -685,8 +712,10 @@
 					TGlxFilterProperties filterProperties = iFilterProperties;
 					AddMonthFilterL(aContainer, filterProperties);
 					filterProperties.iItemType = EGlxFilterVideo;
-#if 0 	/// @todo AB camera album					
-					QueueObjectQueryL(DataSource()->AlbumDef(), ETrue, EAttributeQuery, EQueryResultModeCount, DataSource()->CameraAlbumId(), request->Attributes()[i], aEntry, filterProperties);
+#if 0 	/// AB camera album					
+					QueueObjectQueryL(DataSource()->AlbumDef(), ETrue, EAttributeQuery,
+					        EQueryResultModeCount, DataSource()->CameraAlbumId(),
+					        request->Attributes()[i], aEntry, filterProperties);
 #endif					
 					break;
 					}
@@ -699,7 +728,8 @@
 			
         else if ( request->Attributes()[i] == KMPXMediaColDetailSpaceId )
             {
-            aEntry->SetTObjectValueL(KMPXMediaColDetailSpaceId, KGlxDataSourceMdeImplementationUid);
+            aEntry->SetTObjectValueL(KMPXMediaColDetailSpaceId, 
+                    KGlxDataSourceMdeImplementationUid);
             }
         else if ( request->Attributes()[i] == KGlxMediaCollectionInternalStartDate )
             {
@@ -734,14 +764,18 @@
                 case CGlxDataSource::EContainerTypeAlbum:
                 case CGlxDataSource::EContainerTypeTag:
                     {
-                    QueueObjectQueryL(aContainer->Def(), ETrue, EAttributeQuery, EQueryResultModeCount, TGlxMediaId(aContainer->Id()), request->Attributes()[i], aEntry, filterProperties);
+                    QueueObjectQueryL(aContainer->Def(), ETrue, EAttributeQuery,
+                            EQueryResultModeCount, TGlxMediaId(aContainer->Id()),
+                            request->Attributes()[i], aEntry, filterProperties);
                     break;
                     }
                 case CGlxDataSource::EContainerTypeMonth:
                     {
-                    filterProperties.iOrigin = EGlxFilterOriginCamera;
+                    filterProperties.iOrigin = EGlxFilterOriginAll;               
                     AddMonthFilterL(aContainer, filterProperties);
-                    QueueObjectQueryL(DataSource()->AlbumDef(), ETrue, EAttributeQuery, EQueryResultModeCount, TGlxMediaId(KGlxCollectionRootId), request->Attributes()[i], aEntry, filterProperties);
+                    QueueObjectQueryL(DataSource()->AlbumDef(), ETrue, EAttributeQuery,
+                            EQueryResultModeCount, TGlxMediaId(KGlxCollectionRootId),
+                            request->Attributes()[i], aEntry, filterProperties);
                     break;
                     }
                 }
@@ -749,13 +783,15 @@
         else if ( request->Attributes()[i] == KGlxMediaGeneralLastModifiedDate )
             {
             CMdEProperty* time;
-            CMdEPropertyDef& timeProperty = aContainer->Def().GetPropertyDefL(KPropertyDefNameLastModifiedDate);
+            CMdEPropertyDef& timeProperty = aContainer->Def().GetPropertyDefL(
+                    KPropertyDefNameLastModifiedDate);
             TInt timeIndex = aContainer->Property(timeProperty, time);
             if( KErrNotFound == timeIndex) 
                 {
                 User::Leave(KErrCorrupt);
                 }
-            aEntry->SetTObjectValueL(KGlxMediaGeneralLastModifiedDate, static_cast<CMdETimeProperty*>(time)->Value());
+            aEntry->SetTObjectValueL(KGlxMediaGeneralLastModifiedDate, 
+                    static_cast<CMdETimeProperty*>(time)->Value());
             }
         else if ( request->Attributes()[i] == KGlxMediaGeneralDimensions )
             {
@@ -778,7 +814,8 @@
 // CGlxDataSourceTaskMdeAttribute::AddItemAttributesL
 // ----------------------------------------------------------------------------
 //
-void CGlxDataSourceTaskMdeAttributeMde::AddItemAttributesL(CMPXMedia* aEntry, CMdEObject* aItem, CGlxDataSource::TItemType aType)
+void CGlxDataSourceTaskMdeAttributeMde::AddItemAttributesL(CMPXMedia* aEntry, 
+        CMdEObject* aItem, CGlxDataSource::TItemType aType)
     {
     TRACER("CGlxDataSourceTaskMdeAttribute::AddItemAttributesL()")
     __ASSERT_DEBUG(aEntry, Panic(EGlxPanicLogicError));
@@ -786,12 +823,13 @@
     __ASSERT_DEBUG(dynamic_cast<CGlxGetRequest*>(iRequest), Panic(EGlxPanicLogicError));
     CGlxGetRequest* request = static_cast<CGlxGetRequest*>(iRequest);
 
-    /// @todo check property defs are valid and type is correct
+    /// check property defs are valid and type is correct
     for ( TInt i = 0; i < request->Attributes().Count(); i++ )
         {   
         if ( request->Attributes()[i] == KMPXMediaGeneralId )
             {
-            aEntry->SetTObjectValueL<TMPXItemId>(KMPXMediaGeneralId, (TMPXItemId)aItem->Id());
+            aEntry->SetTObjectValueL<TMPXItemId>(KMPXMediaGeneralId, 
+                    (TMPXItemId)aItem->Id());
             }
         else if ( request->Attributes()[i] == KMPXMediaGeneralType )
             {
@@ -819,7 +857,8 @@
         else if ( request->Attributes()[i] == KMPXMediaGeneralTitle )
             {
             CMdEProperty* title;
-            CMdEPropertyDef& titleProperty = aItem->Def().GetPropertyDefL(KPropertyDefNameTitle);
+            CMdEPropertyDef& titleProperty = aItem->Def().GetPropertyDefL(
+                    KPropertyDefNameTitle);
             TInt titleIndex = aItem->Property(titleProperty, title);
             if( KErrNotFound == titleIndex )
                 {
@@ -828,35 +867,41 @@
                 }
             else
                 {
-                aEntry->SetTextValueL(KMPXMediaGeneralTitle, static_cast<CMdETextProperty*>(title)->Value());
+                aEntry->SetTextValueL(KMPXMediaGeneralTitle, 
+                        static_cast<CMdETextProperty*>(title)->Value());
                 }
             }
         else if ( request->Attributes()[i] == KMPXMediaGeneralDate )
             {
             CMdEProperty* time;
-            CMdEPropertyDef& timeProperty = aItem->Def().GetPropertyDefL(KPropertyDefNameCreationDate);
+            CMdEPropertyDef& timeProperty = aItem->Def().GetPropertyDefL(
+                    KPropertyDefNameCreationDate);
             TInt timeIndex = aItem->Property(timeProperty, time);
             if( KErrNotFound == timeIndex) 
                 {
                 User::Leave(KErrCorrupt);
                 }
-            aEntry->SetTObjectValueL(KMPXMediaGeneralDate, static_cast<CMdETimeProperty*>(time)->Value());
+            aEntry->SetTObjectValueL(KMPXMediaGeneralDate,
+                    static_cast<CMdETimeProperty*>(time)->Value());
             }
         else if ( request->Attributes()[i] == KGlxMediaGeneralLastModifiedDate )
             {
             CMdEProperty* time;
-            CMdEPropertyDef& timeProperty = aItem->Def().GetPropertyDefL(KPropertyDefNameLastModifiedDate);
+            CMdEPropertyDef& timeProperty = aItem->Def().GetPropertyDefL(
+                    KPropertyDefNameLastModifiedDate);
             TInt timeIndex = aItem->Property(timeProperty, time);
             if( KErrNotFound == timeIndex) 
                 {
                 User::Leave(KErrCorrupt);
                 }
-            aEntry->SetTObjectValueL(KGlxMediaGeneralLastModifiedDate, static_cast<CMdETimeProperty*>(time)->Value());
+            aEntry->SetTObjectValueL(KGlxMediaGeneralLastModifiedDate, 
+                    static_cast<CMdETimeProperty*>(time)->Value());
             }
         else if ( request->Attributes()[i] == KMPXMediaGeneralSize )
             {
             CMdEProperty* size;
-            CMdEPropertyDef& sizeProperty = aItem->Def().GetPropertyDefL(KPropertyDefNameSize);
+            CMdEPropertyDef& sizeProperty = aItem->Def().GetPropertyDefL(
+                    KPropertyDefNameSize);
             TInt sizeIndex = aItem->Property(sizeProperty, size);
             User::LeaveIfError(sizeIndex);
             
@@ -870,11 +915,34 @@
         else if ( request->Attributes()[i] == KMPXMediaGeneralMimeType )
             {
             CMdEProperty* mimeType;
-            CMdEPropertyDef& mimeTypeProperty = aItem->Def().GetPropertyDefL(KPropertyDefNameItemType);
+            CMdEPropertyDef& mimeTypeProperty = aItem->Def().GetPropertyDefL(
+                    KPropertyDefNameItemType);
             TInt mimeTypeIndex = aItem->Property(mimeTypeProperty, mimeType);
-
-            User::LeaveIfError(mimeTypeIndex); 
-            aEntry->SetTextValueL(KMPXMediaGeneralMimeType, static_cast<CMdETextProperty*>(mimeType)->Value());
+			if(mimeTypeIndex == KErrNotFound)
+				{
+				//MDS retrieves the Mimetype of the file the moment it is notified about 
+				//the new file.But in case of new downloaded video file ,MDS is notified about 
+				//it the moment download starts. As mimetype is available only after the download completes, 
+				//so MDS fails to give the mimetype of the file. But mimetype can also be retrieved 
+				//from CContent class once the download completes.
+				RBuf mimeTypeData;
+				CleanupClosePushL(mimeTypeData);
+				mimeTypeData.CreateL(KMaxFileName);
+				ContentAccess::CContent* content = ContentAccess::CContent::NewLC(aItem->Uri());				  
+				TInt err = content->GetStringAttribute(ContentAccess::EMimeType, mimeTypeData);
+				CleanupStack::PopAndDestroy(content);
+				if(err != KErrNone)
+					{
+					mimeTypeData.Copy(KNullDesC);					
+					}	
+				aEntry->SetTextValueL(KMPXMediaGeneralMimeType,mimeTypeData);
+				CleanupStack::PopAndDestroy(&mimeTypeData);									
+				}
+			else
+				{
+				aEntry->SetTextValueL(KMPXMediaGeneralMimeType, 
+                    static_cast<CMdETextProperty*>(mimeType)->Value());		
+				}				
             }
         else if ( request->Attributes()[i] == KMPXMediaGeneralDuration )
             {
@@ -885,11 +953,18 @@
             else
                 {
                 CMdEProperty* duration;
-                CMdEPropertyDef& durationProperty = aItem->Def().GetPropertyDefL(KPropertyDefNameDuration);
+                CMdEPropertyDef& durationProperty = aItem->Def().GetPropertyDefL(
+                        KPropertyDefNameDuration);
                 TInt durationIndex = aItem->Property(durationProperty, duration);
-                User::LeaveIfError(durationIndex); 
-                
-                aEntry->SetTObjectValueL(KMPXMediaGeneralDuration, static_cast<CMdEReal32Property*>(duration)->Value());
+                if(durationIndex == KErrNotFound)
+	                {	                
+	                aEntry->SetTObjectValueL(KMPXMediaGeneralDuration,0);	                        
+	                }
+                else
+	                {
+	                aEntry->SetTObjectValueL(KMPXMediaGeneralDuration,
+                        static_cast<CMdEReal32Property*>(duration)->Value());	
+	                }                
                 }
             }
         else if ( request->Attributes()[i] == KGlxMediaGeneralSystemItem)
@@ -901,11 +976,12 @@
             TSize dimensions(0,0);
             
             CMdEProperty* xDim;
-            CMdEPropertyDef& xDimProperty = aItem->Def().GetPropertyDefL(KPropertyDefNameWidth);
+            CMdEPropertyDef& xDimProperty = aItem->Def().GetPropertyDefL(
+                    KPropertyDefNameWidth);
             TInt xDimIndex = aItem->Property(xDimProperty, xDim);
             if( KErrNotFound == xDimIndex )
                 {
-                //User::Leave(KErrCorrupt);
+                //Do nothing
                 }
             else
                 {
@@ -913,11 +989,12 @@
                 }
             
             CMdEProperty* yDim;
-            CMdEPropertyDef& yDimProperty = aItem->Def().GetPropertyDefL(KPropertyDefNameHeight);
+            CMdEPropertyDef& yDimProperty = aItem->Def().GetPropertyDefL(
+                    KPropertyDefNameHeight);
             TInt yDimIndex = aItem->Property(yDimProperty, yDim);
             if( KErrNotFound == yDimIndex )
                 {
-                //User::Leave(KErrCorrupt);
+                //Do nothing
                 }
             else
                 {
@@ -930,7 +1007,9 @@
                     // EXIF header is corrupt, must read size from file.
                     CImageDecoder* decoder = NULL;
 
-                    TRAPD(err, decoder = CImageDecoder::FileNewL( DataSource()->FileServerSession(), aItem->Uri(), CImageDecoder::EOptionNone ));
+                    TRAPD(err, decoder = CImageDecoder::FileNewL( 
+                            DataSource()->FileServerSession(), aItem->Uri(),
+                            CImageDecoder::EOptionNone ));
                     if (err == KErrNone)
                     	{
                     	dimensions = decoder->FrameInfo().iOverallSizeInPixels;
@@ -945,9 +1024,10 @@
             {
             CMdEProperty* framecount;
             TInt fcount = 1;
-            //@todo AB test this
+            // AB test this
             CMdEPropertyDef* framecountProperty = NULL;
-            TRAP_IGNORE(framecountProperty = &aItem->Def().GetPropertyDefL(KPropertyDefNameFrameCount));
+            TRAP_IGNORE(framecountProperty = &aItem->Def().GetPropertyDefL(
+                    KPropertyDefNameFrameCount));
             if( framecountProperty )
                 {
                 TInt framecountIndex = aItem->Property(*framecountProperty, framecount);
@@ -961,7 +1041,8 @@
         else if ( request->Attributes()[i] == KMPXMediaGeneralComment )
             {
             CMdEProperty* comment;
-            CMdEPropertyDef& commentProperty = aItem->Def().GetPropertyDefL(KPropertyDefNameComment); /// @todo using Exif Comment field for comment as spec is not clear
+            CMdEPropertyDef& commentProperty = aItem->Def().GetPropertyDefL(
+                    KPropertyDefNameComment); /// using Exif Comment field for comment as spec is not clear
             TInt commentIndex = aItem->Property(commentProperty, comment);
             if( KErrNotFound == commentIndex)
                 {
@@ -969,13 +1050,15 @@
                 }
             else
                 {
-                aEntry->SetTextValueL(KMPXMediaGeneralComment, static_cast<CMdETextProperty*>(comment)->Value());
+                aEntry->SetTextValueL(KMPXMediaGeneralComment, 
+                        static_cast<CMdETextProperty*>(comment)->Value());
                 }
             }
         else if ( request->Attributes()[i] == KMPXMediaDrmProtected )
             {
             CMdEProperty* drmProtected;
-            CMdEPropertyDef& drmProtectedProperty = aItem->Def().GetPropertyDefL(KPropertyDefNameDRM); 
+            CMdEPropertyDef& drmProtectedProperty = aItem->Def().GetPropertyDefL(
+                    KPropertyDefNameDRM); 
             TInt drmProtectedIndex = aItem->Property(drmProtectedProperty, drmProtected);
             if( KErrNotFound == drmProtectedIndex)
                 {
@@ -983,27 +1066,32 @@
                 }
             else
                 {
-                aEntry->SetTObjectValueL(KMPXMediaDrmProtected, static_cast<CMdEBoolProperty*>(drmProtected)->Value());
+                aEntry->SetTObjectValueL(KMPXMediaDrmProtected,
+                        static_cast<CMdEBoolProperty*>(drmProtected)->Value());
                 }
             }
 		else if ( request->Attributes()[i] == KGlxMediaGeneralDRMRightsValid )            
 			{
             CMdEProperty* drmProtected;
-            CMdEPropertyDef& drmProtectedProperty = aItem->Def().GetPropertyDefL(KPropertyDefNameDRM); 
+            CMdEPropertyDef& drmProtectedProperty = aItem->Def().GetPropertyDefL(
+                    KPropertyDefNameDRM); 
             TInt drmProtectedIndex = aItem->Property(drmProtectedProperty, drmProtected);
             if( KErrNotFound == drmProtectedIndex)
                 {
-                aEntry->SetTObjectValueL(KGlxMediaGeneralDRMRightsValid, EGlxDrmRightsValidityUnknown); 
+                aEntry->SetTObjectValueL(KGlxMediaGeneralDRMRightsValid,
+                        EGlxDrmRightsValidityUnknown); 
                 }
             else
                 {
                 if( static_cast<CMdEBoolProperty*>(drmProtected)->Value() )
                     {
-                    aEntry->SetTObjectValueL(KGlxMediaGeneralDRMRightsValid, EGlxDrmRightsValidityUnknown); 
+                    aEntry->SetTObjectValueL(KGlxMediaGeneralDRMRightsValid, 
+                            EGlxDrmRightsValidityUnknown); 
                     }
                 else
                     {
-                    aEntry->SetTObjectValueL(KGlxMediaGeneralDRMRightsValid, EGlxDrmRightsValid); 
+                    aEntry->SetTObjectValueL(KGlxMediaGeneralDRMRightsValid,
+                            EGlxDrmRightsValid); 
                     }
                 }
             }
@@ -1013,7 +1101,8 @@
             }
         else if ( request->Attributes()[i] == KMPXMediaColDetailSpaceId )
             {
-            aEntry->SetTObjectValueL(KMPXMediaColDetailSpaceId, KGlxDataSourceMdeImplementationUid);
+            aEntry->SetTObjectValueL(KMPXMediaColDetailSpaceId, 
+                    KGlxDataSourceMdeImplementationUid);
             }
         else if ( request->Attributes()[i] == KGlxMediaGeneralSlideshowableContent )
             {
@@ -1035,25 +1124,30 @@
 // CGlxDataSourceTaskMde::AddLocationAttributeToMediaL
 // ----------------------------------------------------------------------------
 //
-void CGlxDataSourceTaskMdeAttributeMde::AddLocationAttributeToMediaL(CMPXMedia& aMedia, const TItemId& aLocationId)
+void CGlxDataSourceTaskMdeAttributeMde::AddLocationAttributeToMediaL(
+        CMPXMedia& aMedia, const TItemId& aLocationId)
     {
     TRACER("CGlxDataSourceTaskMdeAttribute::AddLocationAttributeToMediaL()")
-    CMdEObject* location = DataSource()->Session().GetObjectL(aLocationId, DataSource()->LocationDef()); 
+    CMdEObject* location = DataSource()->Session().GetObjectL(aLocationId, 
+            DataSource()->LocationDef()); 
     if(!location)
         {
         User::Leave(KErrNotFound);
         }
     CleanupStack::PushL(location);
     CMdEProperty* longitude = NULL;
-    CMdEPropertyDef& longitudePropertyDef = location->Def().GetPropertyDefL(KPropertyDefNameLongitude);
+    CMdEPropertyDef& longitudePropertyDef = location->Def().GetPropertyDefL(
+            KPropertyDefNameLongitude);
     TInt longitudeIndex = location->Property(longitudePropertyDef, longitude);
     CMdEProperty* latitude = NULL;
-    CMdEPropertyDef& latitudePropertyDef = location->Def().GetPropertyDefL(KPropertyDefNameLatitude);
+    CMdEPropertyDef& latitudePropertyDef = location->Def().GetPropertyDefL(
+            KPropertyDefNameLatitude);
     TInt latitudeIndex = location->Property(latitudePropertyDef, latitude);
 
     if (longitudeIndex > KErrNotFound && latitudeIndex > KErrNotFound)
         {
-        TCoordinate coordinate(static_cast< CMdEReal64Property *>(latitude)->Value(),static_cast< CMdEReal64Property *>(longitude)->Value());
+        TCoordinate coordinate(static_cast< CMdEReal64Property *>(latitude)->Value(),
+                static_cast< CMdEReal64Property *>(longitude)->Value());
         aMedia.SetTObjectValueL(KGlxMediaGeneralLocation, coordinate); 
         }
     
@@ -1070,41 +1164,63 @@
     __ASSERT_DEBUG(iQueryAttributes.Count(), Panic(EGlxPanicIllegalState));
     CMdEQuery* query =  iQueries[0];
     
-    if( query->ResultMode() == EQueryResultModeObjectWithFreetexts )
+    if( query->ResultMode() == EQueryResultModeItem )
         {
-        __ASSERT_DEBUG(( iQueryAttributes[0].iAttribute == KGlxMediaCollectionInternalStartDate ), Panic(EGlxPanicIllegalState));
-    	CMdEPropertyDef& creationDateDef = DataSource()->ObjectDef().GetPropertyDefL(KPropertyDefNameCreationDate);
+        __ASSERT_DEBUG(( iQueryAttributes[0].iAttribute == 
+        KGlxMediaCollectionInternalStartDate || iQueryAttributes[0].iAttribute == 
+        KGlxMediaCollectionInternalEndDate), Panic(EGlxPanicIllegalState));
+    	CMdEPropertyDef& creationDateDef = DataSource()->ObjectDef().GetPropertyDefL(
+    	        KPropertyDefNameCreationDate);
         if (creationDateDef.PropertyType() != EPropertyTime)
         	{
         	User::Leave(KErrCorrupt);
         	}
         TTime startMonth(0);	
         TTime endMonth(0);	
+        GLX_DEBUG2("CGlxDataSourceTaskMdeAttributeMde::DoHandleAttributeQueryCompletedL iQueries[0]->Count()=%d", iQueries[0]->Count());    
+        TInt timeIndex(0) ;
         if(iQueries[0]->Count() )
             {
-            CMdEProperty* startTime;
-            CMdEObject& startObject = (CMdEObject&)query->ResultItem(0);
-            TInt timeIndex = startObject.Property(creationDateDef, startTime);
-            if( KErrNotFound == timeIndex )
-                {
-                User::Leave(KErrCorrupt);
-                }
-            startMonth = static_cast<CMdETimeProperty*>(startTime)->Value();
-            CMdEProperty* endTime;
-            CMdEObject& endObject = (CMdEObject&)query->ResultItem(query->Count()-1);
-            timeIndex = endObject.Property(creationDateDef, endTime);
-            if( KErrNotFound == timeIndex )
-                {
-                User::Leave(KErrCorrupt);
-                }
-            endMonth = static_cast<CMdETimeProperty*>(endTime)->Value();
+            GLX_DEBUG2("CGlxDataSourceTaskMdeAttributeMde::DoHandleAttributeQueryCompletedL query->Count()=%d", query->Count());    
+            if(iQueryAttributes[0].iAttribute == KGlxMediaCollectionInternalStartDate)
+            	{
+                CMdEProperty* startTime;
+                CMdEObject& startObject = (CMdEObject&)query->ResultItem(0);
+                TInt timeIndex = startObject.Property(creationDateDef, startTime);
+                if( KErrNotFound == timeIndex )
+                    {
+                    User::Leave(KErrCorrupt);
+                    }
+                startMonth = static_cast<CMdETimeProperty*>(startTime)->Value();
+                iQueryAttributes[0].iMedia->SetTObjectValueL(
+                        KGlxMediaCollectionInternalStartDate, startMonth);
+            	}
+            else if(iQueryAttributes[0].iAttribute == KGlxMediaCollectionInternalEndDate)
+            	{
+                CMdEProperty* endTime;
+                CMdEObject& endObject = (CMdEObject&)query->ResultItem(0);
+                timeIndex = endObject.Property(creationDateDef, endTime);
+                if( KErrNotFound == timeIndex )
+                    {
+                    User::Leave(KErrCorrupt);
+                    }
+                endMonth = static_cast<CMdETimeProperty*>(endTime)->Value();
+                iQueryAttributes[0].iMedia->SetTObjectValueL(
+                        KGlxMediaCollectionInternalEndDate, endMonth);
+            	}
             }
-        iQueryAttributes[0].iMedia->SetTObjectValueL(KGlxMediaCollectionInternalStartDate, startMonth);
-        iQueryAttributes[0].iMedia->SetTObjectValueL(KGlxMediaCollectionInternalEndDate, endMonth);
+        else
+            {
+            iQueryAttributes[0].iMedia->SetTObjectValueL(
+                    KGlxMediaCollectionInternalStartDate, startMonth);
+            iQueryAttributes[0].iMedia->SetTObjectValueL(
+                    KGlxMediaCollectionInternalEndDate, endMonth);
+            }
         }
     else if( EQueryResultModeCount == query->ResultMode() )
         {
-        iQueryAttributes[0].iMedia->SetTObjectValueL(iQueryAttributes[0].iAttribute, query->Count());
+        iQueryAttributes[0].iMedia->SetTObjectValueL(
+                iQueryAttributes[0].iAttribute, query->Count());
         }
     else
         {
@@ -1124,7 +1240,8 @@
     
     for (TInt queryResultsPos = 0; queryResultsPos < queryResultsCount; queryResultsPos++)
         {
-        CMdERelation& relation = static_cast<CMdERelation&>(iQueries[0]->ResultItem(queryResultsPos));
+        CMdERelation& relation = static_cast<CMdERelation&>(
+                iQueries[0]->ResultItem(queryResultsPos));
         CMPXMedia* targetMedia = NULL;
         if (iMediaArray)
             {
@@ -1165,14 +1282,9 @@
 	CMdEQuery* query = iQueries[0];
 	
     TInt queryResultsCount = query->Count();
-   	GLX_LOG_INFO1("==> CGlxDataSourceTaskMdeAttributeMde::DoHandleImageVideoQueryCompletedL - queryResultsCount=%d", queryResultsCount);
-#ifdef _DEBUG
-    iStopTime.HomeTime(); // Get home time
-   	if (queryResultsCount)
-   		{
-   		GLX_LOG_INFO1("==> CGlxDataSourceTaskMdeAttributeMde::DoHandleImageVideoQueryCompletedL took <%d> us", (TInt)iStopTime.MicroSecondsFrom(iStartTime).Int64());
-   		}
-#endif
+    GLX_DEBUG2("CGlxDataSourceTaskMdeAttributeMde::DoHandleImageVideoQueryCompletedL()"
+            " queryResultsCount=%d", queryResultsCount);
+    
     if( ( queryResultsCount == 1 ) && ( !iMediaArray ) )
         {
         CMdEObject& object = static_cast<CMdEObject&>(query->ResultItem(0));
@@ -1188,10 +1300,11 @@
         for (TInt i = 0; i < queryResultsCount; i++)
             {
             CMdEObject& object = static_cast<CMdEObject&>(query->ResultItem(i));
+            
             CMPXMedia* entry = CMPXMedia::NewL();
             CleanupStack::PushL(entry);
-            iMediaArray->AppendL(*entry);
-            CleanupStack::PopAndDestroy(entry);
+            iMediaArray->AppendL(entry);
+            CleanupStack::Pop(entry);
             AddAttributesL(object, (*iMediaArray)[iMediaArray->Count() - 1]);
             }
         }    
@@ -1207,11 +1320,14 @@
     __ASSERT_DEBUG(dynamic_cast<CGlxGetRequest*>(iRequest), Panic(EGlxPanicLogicError));
     CGlxGetRequest* request = static_cast<CGlxGetRequest*>(iRequest);
         
-    CMdEQuery* query = DataSource()->Session().NewRelationQueryL(*DataSource()->NamespaceDef(), this); 
+    CMdEQuery* query = DataSource()->Session().NewRelationQueryL(
+            *DataSource()->NamespaceDef(), this); 
     CleanupStack::PushL(query);
     
     CMdELogicCondition& rootCondition = query->Conditions();
-    CMdERelationCondition& containerRelationCondition = rootCondition.AddRelationConditionL(DataSource()->ContainsLocationDef(), ERelationConditionSideRight);
+    CMdERelationCondition& containerRelationCondition = 
+    rootCondition.AddRelationConditionL(DataSource()->ContainsLocationDef(),
+            ERelationConditionSideRight);
     CMdELogicCondition& itemLogicCondition  = containerRelationCondition.LeftL();
     CMdELogicCondition&  locationLogicCondition = containerRelationCondition.RightL();
     locationLogicCondition.AddObjectConditionL(DataSource()->LocationDef());
@@ -1290,8 +1406,10 @@
 // CGlxDataSourceTask::QueueObjectQueryL
 // ----------------------------------------------------------------------------
 //  
-void CGlxDataSourceTaskMdeAttributeMde::QueueObjectQueryL(CMdEObjectDef& aObjectDef, TBool aIsContent, TGlxQueryType aQueryType, 
-        TQueryResultMode aResultMode, const TGlxMediaId& aContainerId, TMPXAttribute aAttribute, CMPXMedia* aEntry, 
+void CGlxDataSourceTaskMdeAttributeMde::QueueObjectQueryL(CMdEObjectDef& aObjectDef,
+        TBool aIsContent, TGlxQueryType aQueryType, 
+        TQueryResultMode aResultMode, const TGlxMediaId& aContainerId, 
+        TMPXAttribute aAttribute, CMPXMedia* aEntry, 
         const TGlxFilterProperties& aFilterProperties)
     {
     TRACER("CGlxDataSourceTaskMdeAttribute::QueueObjectQueryL()")   
@@ -1318,10 +1436,11 @@
             }
         }
 
-    CMdEQuery* query = DataSource()->Session().NewObjectQueryL(*DataSource()->NamespaceDef(), *queryBaseObject, this);
+    CMdEQuery* query = DataSource()->Session().NewObjectQueryL(*DataSource()->NamespaceDef(), 
+            *queryBaseObject, this);
     CleanupStack::PushL(query);
+    query->SetResultMode(aResultMode);
     SetQueryConditionsL(*query, aFilterProperties, aContainerId, aObjectDef);
-    query->SetResultMode(aResultMode);
   
     iQueryAttributes.AppendL(TGlxQueryAttribute(aAttribute, aEntry, aFilterProperties));
 
--- a/engine/collectionframework/datasource/plugins/glxdatasourcemde2.5/src/glxdatasourcetaskmdscommand.cpp	Wed Jun 16 13:08:54 2010 +0100
+++ b/engine/collectionframework/datasource/plugins/glxdatasourcemde2.5/src/glxdatasourcetaskmdscommand.cpp	Thu Jul 22 16:33:32 2010 +0100
@@ -90,18 +90,28 @@
 _LIT(KColonBackslash, ":\\");
 _LIT(KFileNameFormatString, "(%+02u)");
 
+// Items to be deleted from File server at a time before calling scheduler wait
+const TInt KDeletedItemCount = 10;
+const TInt KDeleteOperationInterval = 1000;
+
 // ----------------------------------------------------------------------------
 // Destructor
 // ----------------------------------------------------------------------------
 //
 CGlxDataSourceTaskMdeCommand::~CGlxDataSourceTaskMdeCommand()
 	{
-    TRACER("CGlxDataSourceTaskMdeCommand::~CGlxDataSourceTaskMdeCommand()")
+    TRACER("CGlxDataSourceTaskMdeCommand::~CGlxDataSourceTaskMdeCommand()");
 	iLeftIds.Close();
     iRightIds.Close();
     delete iTitle;
     delete iObjectToRename;
     delete iStringCache;
+    if(iTimer && iTimer->IsActive())
+		{
+		iTimer->Cancel();
+		}
+	delete iTimer;
+    delete iSchedulerWait;    
     }
 
 
@@ -114,7 +124,7 @@
        CGlxDataSource* aDataSource)
     : CGlxDataSourceTaskMde(aRequest, aObserver, aDataSource) 
 	{
-    TRACER("CGlxDataSourceTaskMdeCommand::CGlxDataSourceTaskMdeCommand()")
+    TRACER("CGlxDataSourceTaskMdeCommand::CGlxDataSourceTaskMdeCommand()");
 	// No implementation required
 	}
 
@@ -124,13 +134,16 @@
 //
 void CGlxDataSourceTaskMdeCommand::ConstructL()
 	{
-    TRACER("CGlxDataSourceTaskMdeCommand::ConstructL()")
+    TRACER("CGlxDataSourceTaskMdeCommand::ConstructL()");
 	iResponse = CMPXCommand::NewL(static_cast<CGlxCommandRequest*>(iRequest)->Command());
 #ifdef USE_S60_TNM
     DataSource()->CancelFetchThumbnail();
 #else    
     DataSource()->ThumbnailCreator().CancelRequest( TGlxMediaId(0) );
-#endif
+#endif    
+    
+    iTimer = CPeriodic::NewL(CActive::EPriorityStandard);
+    iSchedulerWait = new (ELeave) CActiveSchedulerWait();
 	}
 
 /// @todo minor: Rowland Cook 12/06/2007 Add method decription.
@@ -140,7 +153,7 @@
 //
 void CGlxDataSourceTaskMdeCommand::ExecuteRequestL()
 	{
-    TRACER("CGlxDataSourceTaskMdeCommand::ExecuteRequestL()")
+    TRACER("CGlxDataSourceTaskMdeCommand::ExecuteRequestL()");
     __ASSERT_DEBUG(DataSource()->NamespaceDef(), Panic(EGlxPanicIllegalState));
     
 	const CMPXCommand& command = static_cast<CGlxCommandRequest*>(iRequest)->Command();
@@ -164,7 +177,7 @@
 //
 void CGlxDataSourceTaskMdeCommand::AddContainerL(const TDesC& aContainerName)
 	{
-    TRACER("CGlxDataSourceTaskMdeCommand::AddContainerL()")
+    TRACER("CGlxDataSourceTaskMdeCommand::AddContainerL()");
 	iTitle = aContainerName.AllocL();
 	AppendContainerTitleCountQueryL(ECommandAddContainer, aContainerName);
     ExecuteQueryL();
@@ -174,19 +187,24 @@
 // Add items to container by id
 // ----------------------------------------------------------------------------
 //
-void CGlxDataSourceTaskMdeCommand::AddToContainerL(const RArray<TGlxMediaId>& aSourceIds, const RArray<TGlxMediaId>& aTargetContainers)
+void CGlxDataSourceTaskMdeCommand::AddToContainerL(const RArray<TGlxMediaId>& aSourceIds,
+        const RArray<TGlxMediaId>& aTargetContainers)
 	{
-    TRACER("CGlxDataSourceTaskMdeCommand::AddToContainerL(const RArray<TGlxMediaId>& aSourceIds, const RArray<TGlxMediaId>& aTargetContainers)")	
-	__ASSERT_DEBUG(aSourceIds.Count() && aTargetContainers.Count(), Panic(EGlxPanicEmptyArray));
+    TRACER("CGlxDataSourceTaskMdeCommand::AddToContainerL(const RArray<TGlxMediaId>& aSourceIds,const RArray<TGlxMediaId>& aTargetContainers)");	
+	__ASSERT_DEBUG(aSourceIds.Count() && aTargetContainers.Count(), 
+	        Panic(EGlxPanicEmptyArray));
 	
     iLeftIds.Reset();
     iRightIds.Reset();
 
-	CMdEQuery* query = DataSource()->Session().NewRelationQueryL(*DataSource()->NamespaceDef(), this); 
+	CMdEQuery* query = DataSource()->Session().NewRelationQueryL(
+	        *DataSource()->NamespaceDef(), this); 
 	AppendQueryL(query, ECommandAddToContainer);
     
     CMdELogicCondition& rootCondition = query->Conditions();
-    CMdERelationCondition& containerRelationCondition = rootCondition.AddRelationConditionL(DataSource()->ContainsDef(), ERelationConditionSideLeft);
+    CMdERelationCondition& containerRelationCondition = 
+    rootCondition.AddRelationConditionL(DataSource()->ContainsDef(),
+            ERelationConditionSideLeft);
     CMdELogicCondition& leftLogicCondition = containerRelationCondition.LeftL();
     CMdELogicCondition& rightLogicCondition = containerRelationCondition.RightL();
     leftLogicCondition.SetOperator(ELogicConditionOperatorOr);
@@ -236,7 +254,7 @@
 void CGlxDataSourceTaskMdeCommand::AddToContainerL(const TDesC& aSourceUri, 
 		                        const RArray< TGlxMediaId >& aTargetContainers)
     {
-    TRACER("CGlxDataSourceTaskMdeCommand::AddToContainerL()")
+    TRACER("CGlxDataSourceTaskMdeCommand::AddToContainerL()");
     CMdEObject* sourceObject = DataSource()->Session().GetObjectL(aSourceUri);
     if (!sourceObject)
         {
@@ -254,10 +272,10 @@
 // Copy files to another drive.
 // ----------------------------------------------------------------------------
 //
-/// @todo minor: Rowland Cook 12/06/2007 Has this method been tested? If so remove comments
-void CGlxDataSourceTaskMdeCommand::CopyL(const RArray<TGlxMediaId>& aSourceIds, const TDesC& aDrive)
+void CGlxDataSourceTaskMdeCommand::CopyL(const RArray<TGlxMediaId>& aSourceIds, 
+        const TDesC& aDrive)
     {
-    TRACER("CGlxDataSourceTaskMdeCommand::CopyL()")
+    TRACER("CGlxDataSourceTaskMdeCommand::CopyL()");
     FileOperationL(aSourceIds.Array(), aDrive, ECopy);
     }
 
@@ -265,10 +283,10 @@
 // Move files to another drive.
 // ----------------------------------------------------------------------------
 //
-/// @todo minor: Rowland Cook 12/06/2007 Has this method been tested? If so remove comments
-void CGlxDataSourceTaskMdeCommand::MoveL(const RArray<TGlxMediaId>& aSourceIds, const TDesC& aDrive)
+void CGlxDataSourceTaskMdeCommand::MoveL(const RArray<TGlxMediaId>& aSourceIds, 
+        const TDesC& aDrive)
     {
-    TRACER("CGlxDataSourceTaskMdeCommand::MoveL()")
+    TRACER("CGlxDataSourceTaskMdeCommand::MoveL()");
     FileOperationL(aSourceIds.Array(), aDrive, EMove);
     }
 
@@ -276,9 +294,10 @@
 // Remove items from a container.
 // ----------------------------------------------------------------------------
 //
-void CGlxDataSourceTaskMdeCommand::RemoveFromContainerL(const RArray<TGlxMediaId>& aItemIds, const TGlxMediaId& aContainerId)
+void CGlxDataSourceTaskMdeCommand::RemoveFromContainerL(
+        const RArray<TGlxMediaId>& aItemIds, const TGlxMediaId& aContainerId)
     {
-    TRACER("CGlxDataSourceTaskMdeCommand::RemoveFromContainerL()")
+    TRACER("CGlxDataSourceTaskMdeCommand::RemoveFromContainerL()");
     // Answer to question in @bug above: No
     
 	CMdEObject* object = NULL;
@@ -289,12 +308,15 @@
     	User::Leave(KErrNotFound);
     	}
 	
-	CMdEQuery* query = DataSource()->Session().NewRelationQueryL(*DataSource()->NamespaceDef(), this); 
+	CMdEQuery* query = DataSource()->Session().NewRelationQueryL(
+	        *DataSource()->NamespaceDef(), this); 
 	AppendQueryL(query, ECommandRemoveFromContainer); // query is now owned by the query array.
     
     CMdELogicCondition& rootCondition = query->Conditions();
 
-    CMdERelationCondition& containerRelationCondition = rootCondition.AddRelationConditionL(DataSource()->ContainsDef(), ERelationConditionSideLeft);
+    CMdERelationCondition& containerRelationCondition = 
+    rootCondition.AddRelationConditionL(
+            DataSource()->ContainsDef(), ERelationConditionSideLeft);
     CMdELogicCondition* containerLogicCondition = NULL;
     CMdELogicCondition* itemLogicCondition = NULL;
     // Containers are on the left for albums, right for tags
@@ -326,7 +348,7 @@
 //
 void CGlxDataSourceTaskMdeCommand::DeleteL(const RArray<TGlxMediaId>& aItemIds)
     {
-    TRACER("CGlxDataSourceTaskMdeCommand::DeleteL()")
+    TRACER("CGlxDataSourceTaskMdeCommand::DeleteL()");
     CMdEObjectDef* containerObjectDef = NULL;
     TInt err = ContainerObjectDef(containerObjectDef);
     if (err == KErrNone)
@@ -348,10 +370,10 @@
 //
 // ----------------------------------------------------------------------------
 //
-/// @todo minor: Rowland Cook 12/06/2007 Has this method been tested? If so remove comments
-void CGlxDataSourceTaskMdeCommand::RenameL(const TGlxMediaId& aSourceItemId, const TDesC& aTitle)
+void CGlxDataSourceTaskMdeCommand::RenameL(const TGlxMediaId& aSourceItemId, 
+        const TDesC& aTitle)
     {
-    TRACER("CGlxDataSourceTaskMdeCommand::RenameL()")
+    TRACER("CGlxDataSourceTaskMdeCommand::RenameL()");
     delete iTitle;
     iTitle = NULL;
 	iTitle = aTitle.AllocL();
@@ -370,10 +392,12 @@
 // Set description.
 // ----------------------------------------------------------------------------
 //
-void CGlxDataSourceTaskMdeCommand::SetDescriptionL(const RArray<TGlxMediaId>& aItemIds, const TDesC& aDescription)
+void CGlxDataSourceTaskMdeCommand::SetDescriptionL(const RArray<TGlxMediaId>& aItemIds, 
+        const TDesC& aDescription)
     {
-    TRACER("CGlxDataSourceTaskMdeCommand::SetDescriptionL()")
-    CMdEPropertyDef& descriptionPropertyDef = DataSource()->MediaDef().GetPropertyDefL(KPropertyDefNameDescription);
+    TRACER("CGlxDataSourceTaskMdeCommand::SetDescriptionL()");
+    CMdEPropertyDef& descriptionPropertyDef = DataSource()->MediaDef().GetPropertyDefL(
+            KPropertyDefNameDescription);
     if (descriptionPropertyDef.PropertyType() != EPropertyText)
     	{
     	User::Leave(KErrCorrupt);
@@ -430,9 +454,10 @@
 // Set capture location.
 // ----------------------------------------------------------------------------
 //
-void CGlxDataSourceTaskMdeCommand::SetCaptureLocationL(const RArray<TGlxMediaId>& aItemIds, const TCoordinate& aCoordinate)
+void CGlxDataSourceTaskMdeCommand::SetCaptureLocationL(const RArray<TGlxMediaId>& aItemIds, 
+        const TCoordinate& aCoordinate)
     {
-    TRACER("CGlxDataSourceTaskMdeCommand::SetCaptureLocationL()")    
+    TRACER("CGlxDataSourceTaskMdeCommand::SetCaptureLocationL()") ;   
     if (!Math::IsNaN(aCoordinate.Latitude()) || !Math::IsNaN(aCoordinate.Longitude()))
     	{
     	User::Leave(KErrArgument);
@@ -443,7 +468,8 @@
     
     CMdELogicCondition& rootCondition = query->Conditions();
 
-    CMdERelationCondition& containerRelationCondition = rootCondition.AddRelationConditionL(ERelationConditionSideLeft);
+    CMdERelationCondition& containerRelationCondition = rootCondition.AddRelationConditionL(
+            ERelationConditionSideLeft);
     CMdELogicCondition& locationLogicCondition = containerRelationCondition.RightL();
     CMdELogicCondition& itemLogicCondition = containerRelationCondition.LeftL();
     locationLogicCondition.AddObjectConditionL(DataSource()->LocationDef());
@@ -463,7 +489,7 @@
 //
 void CGlxDataSourceTaskMdeCommand::ThumbnailCleanupL()
 	{
-    TRACER("CGlxDataSourceTaskMdeCommand::ThumbnailCleanupL()")
+    TRACER("CGlxDataSourceTaskMdeCommand::ThumbnailCleanupL()");
 #ifndef USE_S60_TNM
     CGlxDataSourceMde* ds = DataSource();
     ds->ThumbnailCreator().CleanupThumbnailsL(&ds->ThumbnailDatabase());
@@ -477,7 +503,7 @@
 //
 void CGlxDataSourceTaskMdeCommand::DoHandleQueryCompletedL(CMdEQuery& aQuery)
 	{
-    TRACER("CGlxDataSourceTaskMdeCommand::DoHandleQueryCompletedL()")
+    TRACER("CGlxDataSourceTaskMdeCommand::DoHandleQueryCompletedL()");
     TGlxQueryType queryType = iQueryTypes[0];
 	
     switch (queryType)
@@ -502,7 +528,8 @@
 			
 			if (queryCount)
 				{
-				User::LeaveIfError(DataSource()->Session().RemoveRelationsL(relationsToRemove, successfullyRemovedReleations));
+				User::LeaveIfError(DataSource()->Session().RemoveRelationsL(
+				        relationsToRemove, successfullyRemovedReleations));
 				}
 			
 			CleanupStack::PopAndDestroy(&successfullyRemovedReleations);
@@ -547,7 +574,7 @@
 //
 void CGlxDataSourceTaskMdeCommand::DoNextQueryL()
     {
-    TRACER("CGlxDataSourceTaskMdeCommand::DoNextQueryL()")
+    TRACER("CGlxDataSourceTaskMdeCommand::DoNextQueryL()");
     if (iQueries.Count())
         {
         ExecuteQueryL();
@@ -562,9 +589,10 @@
 // CGlxDataSourceTaskMdeCommand::FileOperationL
 // ----------------------------------------------------------------------------
 //
-void CGlxDataSourceTaskMdeCommand::FileOperationL(const TArray<TGlxMediaId>& aSourceIds, const TDesC& aDrive, TFileOperation aFileOperation)
+void CGlxDataSourceTaskMdeCommand::FileOperationL(const TArray<TGlxMediaId>& aSourceIds, 
+        const TDesC& aDrive, TFileOperation aFileOperation)
 	{
-    TRACER("CGlxDataSourceTaskMdeCommand::FileOperationL()")
+    TRACER("CGlxDataSourceTaskMdeCommand::FileOperationL()");
 	ContentAccess::CManager *manager = ContentAccess::CManager::NewL();
 	CleanupStack::PushL(manager);
 	// The following line causes a code scanner warning advising use of EikonEnv RFs instance.
@@ -593,7 +621,8 @@
     		// the drive that it is located on. (For the C:, the root is C:\data, 
     		// for the D: the root is D:\)
     		{
-    		fileNameWithoutRoot.Set(sourceFileName.Right(sourceFileName.Length() - sourceRootPath.Length()));
+    		fileNameWithoutRoot.Set(sourceFileName.Right(sourceFileName.Length() - 
+    		        sourceRootPath.Length()));
     		}
     	else
     		{
@@ -606,7 +635,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.	
@@ -615,7 +643,8 @@
 				// If the destination file name already exists find an available file name.
 				TParse destinationFileNameParse;
 				destinationFileNameParse.Set(destinationFileName,NULL,NULL); // this is a copy of the data
-				TInt destinationFileNameWithoutExtensionLength = destinationFileName.Length() - destinationFileNameParse.Ext().Length();
+				TInt destinationFileNameWithoutExtensionLength = destinationFileName.Length()
+				- destinationFileNameParse.Ext().Length();
 				TInt i = 1;
 				do
 					{
@@ -658,16 +687,7 @@
 TItemId CGlxDataSourceTaskMdeCommand::ContainerItemId(const TGlxMediaId& aMediaId)
     {
     TRACER("TMdEItemId CGlxDataSourceTaskMdeCommand::ContainerItemId()");    
-    TItemId containerId = aMediaId.Value();
-    if (aMediaId == KGlxCollectionRootId)
-        {
-        // Check the collection plugin uid
-        if (iCollectionUid == TUid::Uid(KGlxCollectionPluginCameraImplementationUid))
-            {
-          //  containerId = DataSource()->CameraAlbumId().Value();
-            }  
-        }
-    return containerId;
+    return aMediaId.Value();
     }
 
 // ----------------------------------------------------------------------------
@@ -676,16 +696,19 @@
 //
 void CGlxDataSourceTaskMdeCommand::RootPath(const TDesC& aDrive, TDes& aRootPath)
 	{
-    TRACER("CGlxDataSourceTaskMdeCommand::RootPath()")
-	if (aDrive.Left(KDriveLetterLength).CompareF(PathInfo::PhoneMemoryRootPath().Left(KDriveLetterLength)) == 0)
+    TRACER("CGlxDataSourceTaskMdeCommand::RootPath()");
+	if (aDrive.Left(KDriveLetterLength).CompareF(PathInfo::PhoneMemoryRootPath().Left(
+	        KDriveLetterLength)) == 0)
 		{
 		aRootPath = PathInfo::PhoneMemoryRootPath();
 		}
-	else if (aDrive.Left(KDriveLetterLength).CompareF(PathInfo::MemoryCardRootPath().Left(KDriveLetterLength)) == 0)
+	else if (aDrive.Left(KDriveLetterLength).CompareF(PathInfo::MemoryCardRootPath().Left(
+	        KDriveLetterLength)) == 0)
 		{
 		aRootPath = PathInfo::MemoryCardRootPath();
 		}
-	else if (aDrive.Left(KDriveLetterLength).CompareF(PathInfo::RomRootPath().Left(KDriveLetterLength)) == 0)
+	else if (aDrive.Left(KDriveLetterLength).CompareF(PathInfo::RomRootPath().Left(
+	        KDriveLetterLength)) == 0)
 		{
 		aRootPath = PathInfo::RomRootPath();
 		}
@@ -702,19 +725,23 @@
 //
 void CGlxDataSourceTaskMdeCommand::SendProgressMessageL(TInt aCurrentStep, TInt aStepCount)
 	{
-    TRACER("CGlxDataSourceTaskMdeCommand::SendProgressMessageL()")
-	MGlxDataSourceUpdateObserver& observer = static_cast<CGlxCommandRequest*>(iRequest)->DataSourceUpdateObserver();
+    TRACER("CGlxDataSourceTaskMdeCommand::SendProgressMessageL()");
+	MGlxDataSourceUpdateObserver& observer = 
+	static_cast<CGlxCommandRequest*>(iRequest)->DataSourceUpdateObserver();
 	
 	const CMPXCommand& command = static_cast<CGlxCommandRequest*>(iRequest)->Command();
-	__ASSERT_DEBUG(command.IsSupported(KMPXCommandGeneralSessionId), Panic(EGlxPanicCommandHasNoGeneralSessionId));
+	__ASSERT_DEBUG(command.IsSupported(KMPXCommandGeneralSessionId), Panic(
+	        EGlxPanicCommandHasNoGeneralSessionId));
 	
 	TAny* sessionId = command.ValueTObjectL<TAny*>(KMPXCommandGeneralSessionId);
 	
 	CMPXMessage* progressMessage = CMPXMessage::NewL();
 	CleanupStack::PushL(progressMessage);
 	progressMessage->SetTObjectValueL<TInt>(KMPXMessageGeneralId, KMPXMessageContentIdProgress);	
-	progressMessage->SetTObjectValueL<TInt>(TMPXAttribute(KMPXMessageContentIdProgress, EMPXMessageProgressCurrentCount), aCurrentStep);
-	progressMessage->SetTObjectValueL<TInt>(TMPXAttribute(KMPXMessageContentIdProgress, EMPXMessageProgressTotalCount), aStepCount);
+	progressMessage->SetTObjectValueL<TInt>(TMPXAttribute(KMPXMessageContentIdProgress, 
+	        EMPXMessageProgressCurrentCount), aCurrentStep);
+	progressMessage->SetTObjectValueL<TInt>(TMPXAttribute(KMPXMessageContentIdProgress,
+	        EMPXMessageProgressTotalCount), aStepCount);
 	progressMessage->SetTObjectValueL<TAny*>(KMPXCommandGeneralSessionId, sessionId);
 	
 	observer.HandleMessage(*progressMessage);
@@ -728,8 +755,7 @@
 //
 TInt CGlxDataSourceTaskMdeCommand::ContainerObjectDef(CMdEObjectDef*& aContainerObjectDef)
 {
-    TRACER("CGlxDataSourceTaskMdeCommand::ContainerObjectDef()")
-    //__ASSERT_DEBUG( (iCollectionUid == TUid::Uid(KGlxTagCollectionPluginImplementationUid) || iCollectionUid == TUid::Uid(KGlxCollectionPluginAlbumsImplementationUid)), Panic(EGlxPanicInvalidCollectionUid));
+    TRACER("CGlxDataSourceTaskMdeCommand::ContainerObjectDef()");
     TInt err = KErrNone;
 	if (iCollectionUid == TUid::Uid(KGlxTagCollectionPluginImplementationUid))
         {
@@ -757,7 +783,7 @@
 void CGlxDataSourceTaskMdeCommand::DoHandleAddToContainerQueryCompletedL
 															(CMdEQuery& aQuery)
 	{
-    TRACER("CGlxDataSourceTaskMdeCommand::DoHandleAddToContainerQueryCompletedL()")
+    TRACER("CGlxDataSourceTaskMdeCommand::DoHandleAddToContainerQueryCompletedL()");
 	RPointerArray<CMdEInstanceItem> relations;
 	CleanupClosePushL(relations);
 	 
@@ -783,7 +809,8 @@
             
             if (!alreadyExists)
                 {
-                CMdERelation* relation = DataSource()->Session().NewRelationL(DataSource()->ContainsDef(), iLeftIds[leftPos], iRightIds[rightPos]);
+                CMdERelation* relation = DataSource()->Session().NewRelationL(
+                        DataSource()->ContainsDef(), iLeftIds[leftPos], iRightIds[rightPos]);
                 CleanupStack::PushL(relation);
                 relations.AppendL(relation);
                 CleanupStack::Pop(relation);
@@ -811,13 +838,14 @@
 															(CMdEQuery& aQuery)
 
 	{
-    TRACER("CGlxDataSourceTaskMdeCommand::DoHandleAddContainerQueryCompletedL()")
+    TRACER("CGlxDataSourceTaskMdeCommand::DoHandleAddContainerQueryCompletedL()");
    	
    	//Duplicate albums check for the default albums i.e. Favourites 
    	//as title property is left blank in MDS 2.5
    	if(iCollectionUid == TUid::Uid(KGlxCollectionPluginAlbumsImplementationUid))
    		{
-   		if(SearchStringL(R_ALBUM_FAVORITES_TITLE) == 0)
+   		if(SearchStringL(R_ALBUM_FAVORITES_TITLE) == 0 || 
+   				SearchStringL(R_ALBUM_CAMERA_TITLE) == 0 )
     		{
     		User::Leave(KErrAlreadyExists);	
     		}        	
@@ -837,7 +865,8 @@
     object = DataSource()->Session().NewObjectLC(*containerObjectDef, KNullDesC);
     
     // A title property def of type text is required.
-    CMdEPropertyDef& titlePropertyDef = containerObjectDef->GetPropertyDefL(KPropertyDefNameTitle);
+    CMdEPropertyDef& titlePropertyDef = containerObjectDef->GetPropertyDefL(
+            KPropertyDefNameTitle);
     if (titlePropertyDef.PropertyType() != EPropertyText)
         {
         User::Leave(KErrCorrupt);
@@ -846,7 +875,8 @@
     object->AddTextPropertyL(titlePropertyDef, *iTitle);
     
       //ItemType property def of type text is required.
-    CMdEPropertyDef& itemTypePropertyDef = containerObjectDef->GetPropertyDefL(KPropertyDefItemType);
+    CMdEPropertyDef& itemTypePropertyDef = containerObjectDef->GetPropertyDefL(
+            KPropertyDefItemType);
     if (itemTypePropertyDef.PropertyType() != EPropertyText)
     	{
     	User::Leave(KErrCorrupt);
@@ -865,7 +895,8 @@
    
     // A size property is required.
   
-    CMdEPropertyDef& sizePropertyDef = containerObjectDef->GetPropertyDefL(KPropertyDefNameSize);
+    CMdEPropertyDef& sizePropertyDef = containerObjectDef->GetPropertyDefL(
+            KPropertyDefNameSize);
     if (sizePropertyDef.PropertyType() != EPropertyUint32)
         {
         User::Leave(KErrCorrupt);
@@ -874,14 +905,16 @@
 
     
     // A creation date property is required.
-    CMdEPropertyDef& creationDateDef = containerObjectDef->GetPropertyDefL(KPropertyDefNameCreationDate);
+    CMdEPropertyDef& creationDateDef = containerObjectDef->GetPropertyDefL(
+            KPropertyDefNameCreationDate);
     if (creationDateDef.PropertyType() != EPropertyTime)
         {
         User::Leave(KErrCorrupt);
         }
 
     // A last modified date property is required.
-    CMdEPropertyDef& lmDateDef = containerObjectDef->GetPropertyDefL(KPropertyDefNameLastModifiedDate);
+    CMdEPropertyDef& lmDateDef = containerObjectDef->GetPropertyDefL(
+            KPropertyDefNameLastModifiedDate);
     if (lmDateDef.PropertyType() != EPropertyTime)
         {
         User::Leave(KErrCorrupt);
@@ -897,7 +930,8 @@
     
     iResponse->SetTObjectValueL<TMPXItemId>(KMPXMediaGeneralId, id);
     iResponse->SetTObjectValueL<TMPXItemId>(KMPXMessageMediaGeneralId, id);  
-    iResponse->SetTObjectValueL<TMPXChangeEventType>(KMPXMessageChangeEventType, EMPXItemInserted); 
+    iResponse->SetTObjectValueL<TMPXChangeEventType>(KMPXMessageChangeEventType,
+            EMPXItemInserted); 
 	}
 // ----------------------------------------------------------------------------
 // CGlxDataSourceTaskMdeCommand::DoHandleDeleteContainersQueryCompletedL
@@ -906,8 +940,9 @@
 void CGlxDataSourceTaskMdeCommand::DoHandleDeleteContainersQueryCompletedL
 															(CMdEQuery& aQuery)
 	{
-    TRACER("CGlxDataSourceTaskMdeCommand::DoHandleDeleteContainersQueryCompletedL()")
-    CMdEPropertyDef& albumTypeProperty = DataSource()->AlbumDef().GetPropertyDefL(KPropertyDefNameAlbumType);
+    TRACER("CGlxDataSourceTaskMdeCommand::DoHandleDeleteContainersQueryCompletedL()");
+    CMdEPropertyDef& albumTypeProperty = DataSource()->AlbumDef().GetPropertyDefL(
+            KPropertyDefNameAlbumType);
     TInt queryCount = aQuery.Count();
     
     RArray<TItemId> objectsForRemoval;
@@ -928,8 +963,8 @@
         if (KErrNotFound != albumTypeIndex)
             {
             TInt albumTypeValue = static_cast<CMdEUint16Property*>(albumType)->Value();
-            
-            if ((albumTypeValue == MdeConstants::Album::EAlbumSystemFavourite) || (albumTypeValue == MdeConstants::Album::EAlbumSystemCamera))
+            if ((albumTypeValue == MdeConstants::Album::EAlbumSystemFavourite) || 
+            		(albumTypeValue == MdeConstants::Album::EAlbumSystemCamera))
                {
                User::Leave(KErrAccessDenied); 
                }
@@ -939,7 +974,8 @@
     
     if (queryCount)
     	{
-    	User::LeaveIfError(DataSource()->Session().RemoveObjectsL(objectsForRemoval, sucessfullyRemovedObjects));
+    	User::LeaveIfError(DataSource()->Session().RemoveObjectsL(objectsForRemoval, 
+    	        sucessfullyRemovedObjects));
     	}
     
     CleanupStack::PopAndDestroy(&sucessfullyRemovedObjects);
@@ -952,7 +988,8 @@
 void CGlxDataSourceTaskMdeCommand::DoHandleDeleteItemsQueryCompletedL
 															(CMdEQuery& aQuery)
 	{
-    TRACER("CGlxDataSourceTaskMdeCommand::DoHandleDeleteItemsQueryCompletedL()")
+    TRACER("CGlxDataSourceTaskMdeCommand::DoHandleDeleteItemsQueryCompletedL()");
+    TInt deleteItemCounter = 0;
     ContentAccess::CManager *manager = ContentAccess::CManager::NewL();
     CleanupStack::PushL(manager);
     TInt queryCount = aQuery.Count();
@@ -971,7 +1008,10 @@
     User::LeaveIfError( fs.Connect() );
     
     TInt lastErr = KErrNone;
-    for(TInt queryPos = queryCount - 1; queryPos >= 0; queryPos--)
+    
+    // If Delete operation is cancelled before completion, 
+    // iCancelled because ETrue, break out of for loop.
+    for(TInt queryPos = queryCount - 1; (queryPos >= 0 && !iCancelled); queryPos--)
         {
         CMdEObject& object = static_cast<CMdEObject&>(aQuery.ResultItem(queryPos));
         //Removes the Read Only attributes of the file 
@@ -981,7 +1021,22 @@
         	{
         	lastErr = err;
         	}    
-        objectsForRemoval.AppendL(object.Id());
+        else
+            {    
+            // On successful deletion, delete the same from database
+            objectsForRemoval.AppendL(object.Id());
+            }
+			 
+        // After every 50 items are deleted, break from the for loop 
+        // and process other pending requests if any
+        if(deleteItemCounter == KDeletedItemCount)
+			{	
+			iTimer->Start( KDeleteOperationInterval, KDeleteOperationInterval,
+							TCallBack( &SchedulerStopCallback, (TAny *)this ) );	
+			iSchedulerWait->Start();  
+			deleteItemCounter = 0;
+			}     
+        deleteItemCounter++;     
         }
     // Calling Close() on file server session 
     CleanupStack::PopAndDestroy( &fs );
@@ -1007,7 +1062,7 @@
 void CGlxDataSourceTaskMdeCommand::DoHandleRenameConainerQueryCompletedL
                                                             (CMdEQuery& aQuery)
 	{
-    TRACER("CGlxDataSourceTaskMdeCommand::DoHandleRenameConainerQueryCompletedL()")
+    TRACER("CGlxDataSourceTaskMdeCommand::DoHandleRenameConainerQueryCompletedL()");
 	__ASSERT_DEBUG(iObjectToRename, Panic(EGlxPanicLogicError));
 	if (aQuery.Count())
 		{
@@ -1035,8 +1090,8 @@
             // the type to be a non-localised user defined album
             static_cast<CMdEUint16Property*>(albumType)->SetValueL(MdeConstants::Album::EAlbumUser);
             }
-        
-		else if ((albumTypeValue == MdeConstants::Album::EAlbumSystemFavourite) || (albumTypeValue == MdeConstants::Album::EAlbumSystemCamera))
+		else if ((albumTypeValue == MdeConstants::Album::EAlbumSystemFavourite) || 
+				(albumTypeValue == MdeConstants::Album::EAlbumSystemCamera))
 		    {
             // Cannot rename system albums
 		    User::Leave(KErrAccessDenied); 
@@ -1107,7 +1162,7 @@
 void CGlxDataSourceTaskMdeCommand::DoHandleRenameQueryCompletedL
                                                            (CMdEQuery& aQuery)
 	{
-    TRACER("CGlxDataSourceTaskMdeCommand::DoHandleRenameQueryCompletedL()")
+    TRACER("CGlxDataSourceTaskMdeCommand::DoHandleRenameQueryCompletedL()");
 	__ASSERT_DEBUG(aQuery.Count() == 1, Panic(EGlxPanicUnexpectedQueryResultCount ));
 	delete iObjectToRename;
 	iObjectToRename = static_cast<CMdEObject*>(aQuery.TakeOwnershipOfResult(0));
@@ -1127,20 +1182,23 @@
 void  CGlxDataSourceTaskMdeCommand::AppendContainerTitleCountQueryL
                         (const TGlxQueryType& aQueryType, const TDesC& aTitle)
 	{
-    TRACER("CGlxDataSourceTaskMdeCommand::AppendContainerTitleCountQueryL()")
+    TRACER("CGlxDataSourceTaskMdeCommand::AppendContainerTitleCountQueryL()");
 	// Test to see if a container alerady exists in the database with aContainerName
     CMdEObjectDef* containerObjectDef = NULL;
     TInt err = ContainerObjectDef(containerObjectDef);
     __ASSERT_ALWAYS(err == KErrNone, Panic(EGlxPanicInvalidCollectionUid));
     
-    CMdEQuery* query = DataSource()->Session().NewObjectQueryL(*DataSource()->NamespaceDef(), *containerObjectDef, this);
+    CMdEQuery* query = DataSource()->Session().NewObjectQueryL(*DataSource()->NamespaceDef(),
+            *containerObjectDef, this);
     CleanupStack::PushL(query);
     
-    CMdEPropertyDef& titlePropertyDef = DataSource()->ObjectDef().GetPropertyDefL(KPropertyDefNameTitle);
+    CMdEPropertyDef& titlePropertyDef = DataSource()->ObjectDef().GetPropertyDefL(
+            KPropertyDefNameTitle);
     
     query->SetResultMode(EQueryResultModeCount);
     
-    query->Conditions().AddPropertyConditionL(titlePropertyDef, ETextPropertyConditionCompareEquals, aTitle);
+    query->Conditions().AddPropertyConditionL(titlePropertyDef, 
+            ETextPropertyConditionCompareEquals, aTitle);
     
     CleanupStack::Pop(query);
     
@@ -1153,7 +1211,7 @@
 //	
 TInt CGlxDataSourceTaskMdeCommand::SearchStringL(TInt aResourceId)
 	{
-	
+	TRACER("CGlxDataSourceTaskMdeCommand::SearchStringL()");
 	_LIT(KResourceFile, "z:glxpluginalbums.rsc");	
    	
    	if (!iStringCache)
@@ -1170,3 +1228,39 @@
     return result;    
         	
 	}
+
+// ----------------------------------------------------------------------------
+//  CGlxDataSourceTaskMdeCommand::SchedulerStopCallback
+// ----------------------------------------------------------------------------
+//
+TInt CGlxDataSourceTaskMdeCommand::SchedulerStopCallback(TAny* aPtr)
+    {
+    TRACER("CGlxDataSourceTaskMdeCommand::SchedulerStopCallback");
+    
+    CGlxDataSourceTaskMdeCommand* self = (CGlxDataSourceTaskMdeCommand*) aPtr;
+    if ( self )
+        {
+        self->SchedulerStopComplete();
+        }
+
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// SchedulerStopComplete
+// -----------------------------------------------------------------------------
+//
+void CGlxDataSourceTaskMdeCommand::SchedulerStopComplete()
+    {
+    TRACER("CGlxDataSourceTaskMdeCommand::SchedulerStopComplete");  
+    
+    if(iTimer && iTimer->IsActive())
+    	{
+    	iTimer->Cancel();
+    	}
+    
+    if(iSchedulerWait)
+		{		
+		iSchedulerWait->AsyncStop();    
+		}  
+    }
--- a/engine/collectionframework/datasource/plugins/glxdatasourcemde2.5/src/glxdatasourcetaskmdsidlist.cpp	Wed Jun 16 13:08:54 2010 +0100
+++ b/engine/collectionframework/datasource/plugins/glxdatasourcemde2.5/src/glxdatasourcetaskmdsidlist.cpp	Thu Jul 22 16:33:32 2010 +0100
@@ -74,7 +74,8 @@
 //  Constructor
 // ----------------------------------------------------------------------------
 //	
-CGlxDataSourceTaskMdeIdList::CGlxDataSourceTaskMdeIdList(CGlxIdListRequest* aRequest, MGlxDataSourceRequestObserver& aObserver, CGlxDataSource* aDataSource)
+CGlxDataSourceTaskMdeIdList::CGlxDataSourceTaskMdeIdList(CGlxIdListRequest* aRequest,
+        MGlxDataSourceRequestObserver& aObserver, CGlxDataSource* aDataSource)
     : CGlxDataSourceTaskMde(aRequest, aObserver, aDataSource)
     {
     TRACER("CGlxDataSourceTaskMdeIdList::CGlxDataSourceTaskMdeIdList()")
@@ -109,6 +110,9 @@
 void CGlxDataSourceTaskMdeIdList::ExecuteRequestL()
     {
     TRACER("CGlxDataSourceTaskMdeIdList::ExecuteRequestL()") 
+#ifdef _DEBUG
+    iStartTime.HomeTime(); 
+#endif    
     CGlxIdListRequest* request = static_cast<CGlxIdListRequest*>(iRequest);
     TGlxMediaId container = request->ContainerId();
     TGlxQueryType queryType = EIdListQuery;
@@ -140,9 +144,9 @@
                 }
             case KGlxCollectionPluginMonthsImplementationUid:
                 {
-                iFilterProperties.iOrigin = EGlxFilterOriginCamera;
+                iFilterProperties.iOrigin = EGlxFilterOriginAll;          
                 container = TGlxMediaId(KGlxCollectionRootId);
-                resultMode = EQueryResultModeObjectWithFreetexts;
+                resultMode = EQueryResultModeItem;
                 break;
                 }
             case KGlxCollectionPluginImageViewerImplementationUid:
@@ -177,7 +181,7 @@
                 }
             case KGlxCollectionPluginMonthsImplementationUid: 
                 {
-				iFilterProperties.iOrigin = EGlxFilterOriginCamera;
+				iFilterProperties.iOrigin = EGlxFilterOriginAll;
                 AddMonthFilterL(container, iFilterProperties);
                 container = TGlxMediaId(KGlxCollectionRootId);
                 break;
@@ -202,6 +206,11 @@
     TRACER("CGlxDataSourceTaskMdeIdList::DoHandleQueryCompletedL()")
     __ASSERT_DEBUG(iQueryTypes[0] == EIdListQuery, Panic(EGlxPanicLogicError));
     DoHandleListQueryCompletedL();
+#ifdef _DEBUG
+    iStopTime.HomeTime(); 
+    GLX_DEBUG2("GlxDataSrcTaskMdeIdList:DoHandleQueryCompletedL() took %d us",
+                     (TInt)iStopTime.MicroSecondsFrom(iStartTime).Int64());
+#endif    
     }
 
 // ----------------------------------------------------------------------------
@@ -211,7 +220,7 @@
 void CGlxDataSourceTaskMdeIdList::DoHandleListQueryCompletedL()
     {
     TRACER("CGlxDataSourceTaskMdeIdList::DoHandleListQueryCompletedL()")
-    if(iQueries[0]->ResultMode() == EQueryResultModeObjectWithFreetexts)
+    if(iQueries[0]->ResultMode() == EQueryResultModeItem)
         {
         DoMonthListCreationL(*iQueries[0], iFilterProperties);
         }
@@ -245,6 +254,7 @@
     TTime lastMonth;
     TTime currentMonth;
     TInt count = aQuery.Count();
+    GLX_DEBUG2("CGlxDataSourceTaskMdeIdList::DoMonthListCreationL count=%d", count);    
     for( TInt i = 0 ; i < count ; i++ )
         {
         CMdEObject& object = (CMdEObject&)aQuery.ResultItem(i);
@@ -254,13 +264,17 @@
             User::Leave(KErrCorrupt);
             }
         currentMonth = static_cast<CMdETimeProperty*>(time)->Value();
-        if( !DataSource()->SameMonth(lastMonth, currentMonth) )
+
+        // Also Checking for a Valid Month Entry Based on a Year Greater than 0000.
+        if( !DataSource()->SameMonth(lastMonth, currentMonth) && (currentMonth.DateTime().Year() > 0) )
             {
             const TGlxMediaId monthId = DataSource()->GetMonthIdL(currentMonth);
             monthList.AppendL(monthId);
+            GLX_DEBUG2("CGlxDataSourceTaskMdeIdList::DoMonthListCreationL monthId=%d", monthId.Value());    
             lastMonth = currentMonth;
             }
         }
+    GLX_DEBUG2("CGlxDataSourceTaskMdeIdList::DoMonthListCreationL monthList.Count=%d", monthList.Count());    
     PostFilterL(monthList, aFilterProperties);
     CleanupStack::PopAndDestroy(&monthList);
     }
--- a/engine/collectionframework/datasource/plugins/glxdatasourcemde2.5/src/glxdatasourcetaskmdsthumbnail.cpp	Wed Jun 16 13:08:54 2010 +0100
+++ b/engine/collectionframework/datasource/plugins/glxdatasourcemde2.5/src/glxdatasourcetaskmdsthumbnail.cpp	Thu Jul 22 16:33:32 2010 +0100
@@ -156,14 +156,17 @@
 void CGlxDataSourceTaskMdeThumbnail::ExecuteRequestL()
     {
     TRACER("CGlxDataSourceTaskMdeThumbnail::ExecuteRequestL()") 
+#ifdef _DEBUG
+    iStartTime.HomeTime(); 
+#endif
     CGlxThumbnailRequest* request = static_cast<CGlxThumbnailRequest*>(iRequest);
     
     TGlxThumbnailRequest tnReq;
     request->ThumbnailRequest(tnReq);
-#ifdef _DEBUG
-	RDebug::Print(_L("==> CGlxDataSourceTaskMdeThumbnail::ExecuteRequestL - FetchThumbnailL(Id=%d), W(%d), H(%d)"), request->ItemId().Value(), tnReq.iSizeClass.iWidth, tnReq.iSizeClass.iHeight);
-	iStartTime.HomeTime(); // Get home time
-#endif
+    GLX_DEBUG4("*** CGlxDataSourceTaskMdeThumbnail::ExecuteRequestL() Id=%d, TN Size w(%d) h(%d) ***", tnReq.iId.Value(),
+    						tnReq.iSizeClass.iWidth, tnReq.iSizeClass.iHeight);
+    GLX_DEBUG2("CGlxDataSourceTaskMdeThumbnail::ExecuteRequestL() iPriorityMode=%d", tnReq.iPriorityMode);
+	
 #ifdef USE_S60_TNM
 	if(request->ThumbnailInfo())
 		{
@@ -173,7 +176,7 @@
 			}
 		else
 			{
-			ThumbnailFetchComplete(KErrNone);
+			ThumbnailFetchComplete(KErrNone, ETrue);
 			}
 		}
 	else
@@ -241,11 +244,13 @@
     {
     TRACER("CGlxDataSourceTaskMdeThumbnail::HandleThumbnailFetchCompleteL()")
     __ASSERT_DEBUG(dynamic_cast<CGlxThumbnailRequest*>(iRequest), Panic(EGlxPanicLogicError));
+    CGlxThumbnailRequest* req = static_cast<CGlxThumbnailRequest*>(iRequest);
+    GLX_DEBUG2("*** CGlxDataSourceTaskMdeThumbnail::HandleThumbnailFetchCompleteL() Id=%d ***", req->ItemId().Value());
 #ifdef _DEBUG
-    iStopTime.HomeTime(); // Get home time
-	RDebug::Print(_L("==> ThumbnailFetchComplete <%d> us"), (TInt)iStopTime.MicroSecondsFrom(iStartTime).Int64());
-#endif
-    CGlxThumbnailRequest* req = static_cast<CGlxThumbnailRequest*>(iRequest);
+    iStopTime.HomeTime(); 
+    GLX_DEBUG2("CGlxDataSourceTaskMdeThumbnail:HandleThumbnailFetchCompleteL() took %d us",
+                     (TInt)iStopTime.MicroSecondsFrom(iStartTime).Int64());
+#endif    
     delete iResponse;
     iResponse = NULL;
     iResponse = CMPXMedia::NewL();
@@ -257,6 +262,7 @@
     tnAttribute->iDimensions = size;
     tnAttribute->iCroppingRect = tnRequest.iCroppingRect;
     tnAttribute->iThumbnailQuality = aQuality;
+    GLX_DEBUG2("CGlxDataSourceTaskMdeThumbnail::HandleThumbnailFetchCompleteL() aQuality=%d", aQuality);
 
     TUint attributeId = req->AttributeId();
     if ( GlxIsFullThumbnailAttribute(attributeId) )
@@ -273,7 +279,8 @@
     }
 
 #ifdef USE_S60_TNM
-void CGlxDataSourceTaskMdeThumbnail::ThumbnailFetchComplete(TInt aError)
+void CGlxDataSourceTaskMdeThumbnail::ThumbnailFetchComplete(TInt aError, 
+                                                            TBool aQuality)
 	{
     TRACER("CGlxDataSourceTaskMdeThumbnail::ThumbnailFetchComplete(TNM)")
     CGlxThumbnailRequest* request = static_cast<CGlxThumbnailRequest*>(iRequest);
@@ -282,7 +289,12 @@
     TInt err = aError;
     if(!err)
         {
-        TRAP(err, HandleThumbnailFetchCompleteL(tnRequest.iId, EGlxThumbnailQualityHigh));
+        TGlxThumbnailQuality tnQuality = EGlxThumbnailQualityHigh;
+        if (!aQuality)
+            {
+            tnQuality = EGlxThumbnailQualityLow;
+            }
+        TRAP(err, HandleThumbnailFetchCompleteL(tnRequest.iId, tnQuality));
         }
     HandleRequestComplete(err);
 	}
@@ -297,6 +309,7 @@
     const TGlxMediaId& aItemId, TGlxThumbnailQuality aQuality, TInt aErrorCode)
     {
     TRACER("CGlxDataSourceTaskMdeThumbnail::ThumbnailFetchComplete()")
+    GLX_DEBUG2("CGlxDataSourceTaskMdeThumbnail::ThumbnailFetchComplete() aErrorCode=%d", aErrorCode);
     iTnRequestInProgress = EFalse;
     TInt err = aErrorCode;
     if(!err)
@@ -368,18 +381,19 @@
         
         /// @todo: use default filter so we can ensure we always get correct first item if filters change
         iFilterProperties.iSortOrder = EGlxFilterSortOrderCaptureDate;
-        iFilterProperties.iSortDirection = EGlxFilterSortDirectionAscending;
+        iFilterProperties.iSortDirection = EGlxFilterSortDirectionOverrideToDescendingIfDate;
         iFilterProperties.iLastCaptureDate = ETrue;
 
         if( CGlxDataSource::EContainerTypeMonth == containerType )
             {
-            iFilterProperties.iOrigin = EGlxFilterOriginCamera;
+            iFilterProperties.iOrigin = EGlxFilterOriginAll;
             AddMonthFilterL(item, iFilterProperties);
             container = TGlxMediaId(KGlxCollectionRootId);
             objectDef = &DataSource()->ObjectDef();
             }
             
-        DoQueryL(*objectDef, ETrue, EContainerFirstItemQuery,  EQueryResultModeObjectWithFreetexts, container);        
+        DoQueryL(*objectDef, ETrue, EContainerFirstItemQuery,  
+                EQueryResultModeItem, container);        
         }
     else
         {
@@ -433,7 +447,8 @@
         }
 
     CMdEProperty* lastModifiedDateProperty;
-    CMdEPropertyDef& lastModifiedDatePropertyDef = aItem->Def().GetPropertyDefL(KPropertyDefNameLastModifiedDate);
+    CMdEPropertyDef& lastModifiedDatePropertyDef = aItem->Def().GetPropertyDefL(
+            KPropertyDefNameLastModifiedDate);
 
 #ifdef _DEBUG
     TInt index = // This variable is only required for the assert debug below. If it is not wrapped in an  
@@ -467,7 +482,8 @@
         // i.e. background thumbnail generation
         // so we get status from CAF to avoid forcing second stage harvest
         TRAP(err, 
-            ContentAccess::CContent* content = ContentAccess::CContent::NewLC(iTnFileInfo->FilePath());
+            ContentAccess::CContent* content = ContentAccess::CContent::NewLC(
+                    iTnFileInfo->FilePath());
             content->GetAttribute(ContentAccess::EIsProtected, iTnFileInfo->iIsProtected);
             CleanupStack::PopAndDestroy(content);
             );
@@ -512,10 +528,11 @@
 void CGlxDataSourceTaskMdeThumbnail::CompleteThumbnailRequest(TInt aError)
 	{
     TRACER("CGlxDataSourceTaskMdeThumbnail::CompleteThumbnailRequest(TInt aError)")
+    GLX_DEBUG2("CGlxDataSourceTaskMdeThumbnail::CompleteThumbnailRequest  aError=%d", aError);
 #ifdef USE_S60_TNM
 	if (aError != KErrNone)
 		{
-		ThumbnailFetchComplete(aError);
+		ThumbnailFetchComplete(aError, EFalse);
 		}
 	else
 		{
@@ -526,11 +543,15 @@
 		if (tnReq.iSizeClass.iWidth > 0 && tnReq.iSizeClass.iHeight > 0 )
 			{
 		    request->SetThumbnailInfo(iTnFileInfo);
+		    //This function is called number of times as a callback ,
+            //hence not trapping the leaving function which costs time and memory.
+            //Ignoring this for code scanner warnings - Leaving functions called in non-leaving functions.
 			DataSource()->FetchThumbnailL(iRequest, *this);
 			}
 		else
 			{
-			ThumbnailFetchComplete(KErrArgument);
+		    GLX_LOG_INFO("CGlxDataSourceTaskMdeThumbnail::CompleteThumbnailRequest KErrArgument");
+			ThumbnailFetchComplete(KErrArgument, EFalse);
 			}
 			}
 #else
@@ -571,18 +592,19 @@
         
         /// @todo: use default filter so we can ensure we always get correct first item if filters change
         iFilterProperties.iSortOrder = EGlxFilterSortOrderCaptureDate;
-        iFilterProperties.iSortDirection = EGlxFilterSortDirectionAscending;
+        iFilterProperties.iSortDirection = EGlxFilterSortDirectionOverrideToDescendingIfDate;
         iFilterProperties.iLastCaptureDate = ETrue;
 
         if( CGlxDataSource::EContainerTypeMonth == containerType )
             {
-            iFilterProperties.iOrigin = EGlxFilterOriginCamera;
+            iFilterProperties.iOrigin = EGlxFilterOriginAll;
             AddMonthFilterL(item, iFilterProperties);
             container = TGlxMediaId(KGlxCollectionRootId);
             objectDef = &DataSource()->ObjectDef();
             }
             
-        DoQueryL(*objectDef, ETrue, EContainerFirstItemQuery,  EQueryResultModeObjectWithFreetexts, container);        
+        DoQueryL(*objectDef, ETrue, EContainerFirstItemQuery, 
+                EQueryResultModeItem, container);        
         }
     else
         {
--- a/engine/collectionframework/group/bld.inf	Wed Jun 16 13:08:54 2010 +0100
+++ b/engine/collectionframework/group/bld.inf	Thu Jul 22 16:33:32 2010 +0100
@@ -80,7 +80,7 @@
 ../datasource/manager/group/glxdatasourcemanager.mmp
 ../plugins/glxcollectionpluginall/group/glxcollectionpluginall.mmp
 ../plugins/glxcollectionpluginalbums/group/glxcollectionpluginalbums.mmp
-//../plugins/glxcollectionplugincamera/group/glxcollectionplugincamera.mmp
+../plugins/glxcollectionplugincamera/group/glxcollectionplugincamera.mmp
 ../plugins/glxcollectionplugindownloads/group/glxcollectionplugindownloads.mmp
 ../plugins/glxcollectionpluginmonths/group/glxcollectionpluginmonths.mmp
 ../plugins/glxcollectionpluginimageviewer/group/glxcollectionpluginimageviewer.mmp
@@ -88,12 +88,3 @@
 #include "../plugins/group/bld.inf"
 #include "../datasource/plugins/group/bld.inf"
 
-PRJ_TESTMMPFILES
-
-// Alex Birkett 16/01/2008 The following plugins will prevent gallery starting up because they don't return the 
-// KMPXMediaColDetailSpaceId attribute (the ID space ID). Build them at your own risk!
-// ../plugins/Test/albumcollectionplugin/group/glxalbumcollectionplugin.mmp
-// ../plugins/Test/glxtestcollectionplugin/group/glxtestcollectionplugin.mmp
-// ../plugins/Test/glxmedialiststestcollectionplugin/group/glxmedialiststestcollectionplugin.mmp
-
-
--- a/engine/collectionframework/plugins/Test/albumcollectionplugin/group/glxalbumcollectionplugin.mmp	Wed Jun 16 13:08:54 2010 +0100
+++ b/engine/collectionframework/plugins/Test/albumcollectionplugin/group/glxalbumcollectionplugin.mmp	Thu Jul 22 16:33:32 2010 +0100
@@ -59,5 +59,5 @@
 LIBRARY         mpxcommon.lib
 
 LIBRARY         glxthumbnailcreator.lib
-
+SMPSAFE
 // End of File
--- a/engine/collectionframework/plugins/Test/glxmedialiststestcollectionplugin/group/glxmedialiststestcollectionplugin.mmp	Wed Jun 16 13:08:54 2010 +0100
+++ b/engine/collectionframework/plugins/Test/glxmedialiststestcollectionplugin/group/glxmedialiststestcollectionplugin.mmp	Thu Jul 22 16:33:32 2010 +0100
@@ -59,4 +59,5 @@
 
 LIBRARY         glxthumbnailcreator.lib
 
+SMPSAFE
 // End of File
--- a/engine/collectionframework/plugins/Test/glxtestcollectionplugin/group/glxtestcollectionplugin.mmp	Wed Jun 16 13:08:54 2010 +0100
+++ b/engine/collectionframework/plugins/Test/glxtestcollectionplugin/group/glxtestcollectionplugin.mmp	Thu Jul 22 16:33:32 2010 +0100
@@ -63,5 +63,5 @@
 
 LIBRARY         glxthumbnailcreator.lib
 
-
+SMPSAFE
 // End of File
--- a/engine/collectionframework/plugins/Test/testtagcollectionplugin/group/glxtagcollectionplugin.mmp	Wed Jun 16 13:08:54 2010 +0100
+++ b/engine/collectionframework/plugins/Test/testtagcollectionplugin/group/glxtagcollectionplugin.mmp	Thu Jul 22 16:33:32 2010 +0100
@@ -66,5 +66,5 @@
 
 LIBRARY         glxthumbnailcreator.lib
 
-
+SMPSAFE
 // End of File
--- a/engine/collectionframework/plugins/glxcollectionpluginalbums/group/glxcollectionpluginalbums.mmp	Wed Jun 16 13:08:54 2010 +0100
+++ b/engine/collectionframework/plugins/glxcollectionpluginalbums/group/glxcollectionpluginalbums.mmp	Thu Jul 22 16:33:32 2010 +0100
@@ -69,5 +69,5 @@
 LIBRARY         glxdatasourcemanager.lib
 LIBRARY         mpxcommon.lib
 LIBRARY         flogger.lib
-
+SMPSAFE
 // End of File
--- a/engine/collectionframework/plugins/glxcollectionpluginalbums/src/glxcollectionpluginalbums.cpp	Wed Jun 16 13:08:54 2010 +0100
+++ b/engine/collectionframework/plugins/glxcollectionpluginalbums/src/glxcollectionpluginalbums.cpp	Thu Jul 22 16:33:32 2010 +0100
@@ -45,6 +45,8 @@
 #include <glxfilterfactory.h>
 #include <glxlog.h>
 
+#include "glxsymbianlocalisationstrings.h"
+
 // CONSTANTS
 const TInt KFavoriteAlbumId = 1 ;
 const TInt KCapturedAlbumId = 2 ;
@@ -214,7 +216,8 @@
             	{
             	if(0 == usageCount)
             		{
-                	tempTitle = LoadLocalizedStringLC(KResourceFile, R_ALBUM_ITEM_SUB_TITLE_EMPTY);
+                	tempTitle = LoadLocalizedStringLC(KNoImages); 
+         
                 	
                 	// Set the title in the response.
             		aResponse->SetTextValueL(attr, *tempTitle);  
@@ -276,14 +279,12 @@
 					{
 					if( TGlxMediaId(KCapturedAlbumId) == aMediaId )
 						{
-					     _LIT(KCameraText,"txt_photos_dblist_my_camera");
 						 HBufC* title = LoadLocalizedStringLC(KCameraText);
 						 aResponse->SetTextValueL(attr, *title);  
 						 CleanupStack::PopAndDestroy(title);						
 						}
 					else if (TGlxMediaId(KFavoriteAlbumId) == aMediaId  )
 						{
-					    _LIT(KMyFavText,"txt_photos_dblist_my_favorites");				                                    					                  
 						HBufC* title = LoadLocalizedStringLC(KMyFavText);
 						aResponse->SetTextValueL(attr, *title);  
 						CleanupStack::PopAndDestroy(title);						
--- a/engine/collectionframework/plugins/glxcollectionpluginall/group/glxcollectionpluginall.mmp	Wed Jun 16 13:08:54 2010 +0100
+++ b/engine/collectionframework/plugins/glxcollectionpluginall/group/glxcollectionpluginall.mmp	Thu Jul 22 16:33:32 2010 +0100
@@ -72,5 +72,5 @@
 LIBRARY         mpxcommon.lib
 LIBRARY         glxcommon.lib
 LIBRARY         flogger.lib
-
+SMPSAFE
 // End of File
--- a/engine/collectionframework/plugins/glxcollectionplugincamera/group/glxcollectionplugincamera.mmp	Wed Jun 16 13:08:54 2010 +0100
+++ b/engine/collectionframework/plugins/glxcollectionplugincamera/group/glxcollectionplugincamera.mmp	Thu Jul 22 16:33:32 2010 +0100
@@ -74,5 +74,5 @@
 LIBRARY         mpxcommon.lib
 LIBRARY         glxcommon.lib
 LIBRARY         flogger.lib
-
+SMPSAFE
 // End of File
--- a/engine/collectionframework/plugins/glxcollectionplugindownloads/group/glxcollectionplugindownloads.mmp	Wed Jun 16 13:08:54 2010 +0100
+++ b/engine/collectionframework/plugins/glxcollectionplugindownloads/group/glxcollectionplugindownloads.mmp	Thu Jul 22 16:33:32 2010 +0100
@@ -75,5 +75,5 @@
 LIBRARY         mpxcommon.lib
 LIBRARY         glxcommon.lib
 LIBRARY         flogger.lib
-
+SMPSAFE
 // End of File
--- a/engine/collectionframework/plugins/glxcollectionpluginimageviewer/group/glxcollectionpluginimageviewer.mmp	Wed Jun 16 13:08:54 2010 +0100
+++ b/engine/collectionframework/plugins/glxcollectionpluginimageviewer/group/glxcollectionpluginimageviewer.mmp	Thu Jul 22 16:33:32 2010 +0100
@@ -68,5 +68,5 @@
 LIBRARY         glxdatasourcemanager.lib
 LIBRARY         mpxcommon.lib
 LIBRARY         flogger.lib
-
+SMPSAFE
 // End of File
--- a/engine/collectionframework/plugins/glxcollectionpluginimageviewer/src/glxcollectionpluginimageviewer.cpp	Wed Jun 16 13:08:54 2010 +0100
+++ b/engine/collectionframework/plugins/glxcollectionpluginimageviewer/src/glxcollectionpluginimageviewer.cpp	Thu Jul 22 16:33:32 2010 +0100
@@ -92,8 +92,8 @@
     }
 
 void CGlxCollectionPluginImageViewer::CpiAttributeAdditionalAttributes(
-        const TMPXAttribute& aCpiAttribute, 
-        RArray<TMPXAttribute>& aAttributeArray)
+        const TMPXAttribute& /*aCpiAttribute*/, 
+        RArray<TMPXAttribute>& /*aAttributeArray*/)
     {
     // Nothing to be shared apart from the ones that are commonly loaded.
     }
@@ -146,8 +146,8 @@
     }
 
 void CGlxCollectionPluginImageViewer::HandleCpiAttributeResponseL(
-        CMPXMedia* aResponse, TArray<TMPXAttribute> aCpiAttributes,
-        TGlxMediaId aMediaId)
+        CMPXMedia* /*aResponse*/, TArray<TMPXAttribute> aCpiAttributes,
+        TGlxMediaId /*aMediaId*/)
     {
     const TInt attribCount = aCpiAttributes.Count();
 
--- a/engine/collectionframework/plugins/glxcollectionpluginmonths/group/glxcollectionpluginmonths.mmp	Wed Jun 16 13:08:54 2010 +0100
+++ b/engine/collectionframework/plugins/glxcollectionpluginmonths/group/glxcollectionpluginmonths.mmp	Thu Jul 22 16:33:32 2010 +0100
@@ -73,5 +73,5 @@
 LIBRARY         glxcommon.lib
 LIBRARY         flogger.lib
 
-
+SMPSAFE
 // End of File
--- a/engine/collectionframework/plugins/glxcollectionpluginmonths/inc/glxcollectionpluginmonths.h	Wed Jun 16 13:08:54 2010 +0100
+++ b/engine/collectionframework/plugins/glxcollectionpluginmonths/inc/glxcollectionpluginmonths.h	Thu Jul 22 16:33:32 2010 +0100
@@ -78,7 +78,8 @@
 	 * @param aCpiAttribute CPI specific attribute to be constructed later
 	 * @param aAttributeArray modifiable list of attributes to be retrieved from data source
 	 */	 
-	void CpiAttributeAdditionalAttributes(const TMPXAttribute& aCpiAttribute, RArray<TMPXAttribute>& aAttributeArray);     	
+	void CpiAttributeAdditionalAttributes(const TMPXAttribute& aCpiAttribute,
+			RArray<TMPXAttribute>& aAttributeArray);
 
 	/**
 	 * Modifies the response to include all requested CPI specific attributes or Leaves.
@@ -86,7 +87,8 @@
 	 * @param aResponse Data Source constructed response to which CPI specific attributes should be added (also contains any required data)
 	 * @param aCpiAttributes list of CPI specific attributes to be constructed
 	 */	 
-	void HandleCpiAttributeResponseL(CMPXMedia* aResponse, TArray<TMPXAttribute> aCpiAttributes, TArray<TGlxMediaId> aMediaIds);
+	void HandleCpiAttributeResponseL(CMPXMedia* aResponse,
+			TArray<TMPXAttribute> aCpiAttributes, TArray<TGlxMediaId> aMediaIds);
 
 	/**
 	 * Modifies the response to include all requested CPI specific attributes or Leaves.
@@ -95,7 +97,8 @@
 	 * @param aCpiAttributes list of CPI specific attributes to be constructed
 	 * @param aMediaId CPI specific media Id
 	 */	 
-    void HandleCpiAttributeResponseL(CMPXMedia* aResponse, TArray<TMPXAttribute> aCpiAttributes, TGlxMediaId aMediaId);
+    void HandleCpiAttributeResponseL(CMPXMedia* aResponse,
+    		TArray<TMPXAttribute> aCpiAttributes, TGlxMediaId aMediaId);
 
 	TBool IsUpdateMessageIgnored(CMPXMessage& aMessage);
 
--- a/engine/collectionframework/plugins/glxcollectionpluginmonths/src/glxcollectionpluginmonths.cpp	Wed Jun 16 13:08:54 2010 +0100
+++ b/engine/collectionframework/plugins/glxcollectionpluginmonths/src/glxcollectionpluginmonths.cpp	Thu Jul 22 16:33:32 2010 +0100
@@ -46,6 +46,13 @@
  * @internal reviewed 14/06/2007 by Alex Birkett
  */
 // CONSTANTS
+const TInt KYearBufferSize = 8;
+const TInt KDateBufferPaddingMin = 10;
+const TInt KDateBufferPaddingMax = 20;
+const TInt KDateFormat1 = 1;
+
+const TInt KDateFormat2 = 2;
+const TInt KDateFormat3 = 3;
 
 // ============================ LOCAL FUNCTIONS ==============================
     
@@ -96,7 +103,8 @@
 // CpiAttributeAdditionalAttributes
 // ----------------------------------------------------------------------------
 //
-void CGlxCollectionPluginMonths::CpiAttributeAdditionalAttributes(const TMPXAttribute& aCpiAttribute, RArray<TMPXAttribute>& aAttributeArray)
+void CGlxCollectionPluginMonths::CpiAttributeAdditionalAttributes(
+	const TMPXAttribute& aCpiAttribute, RArray<TMPXAttribute>& aAttributeArray)
 	{
     TRACER("CGlxCollectionPluginMonths::CpiAttributeAdditionalAttributes");
     // Only need to process KGlxMediaCollectionPluginSpecificSubTitle here as all the others are reading straight from resource files
@@ -185,7 +193,8 @@
 // HandleCpiAttributeResponseL
 // ----------------------------------------------------------------------------
 // 
-void CGlxCollectionPluginMonths::HandleCpiAttributeResponseL(CMPXMedia* aResponse, TArray<TMPXAttribute> aCpiAttributes, TArray<TGlxMediaId> aMediaIds)
+void CGlxCollectionPluginMonths::HandleCpiAttributeResponseL(CMPXMedia* aResponse,
+		TArray<TMPXAttribute> aCpiAttributes, TArray<TGlxMediaId> aMediaIds)
     {
     TRACER("CGlxCollectionPluginMonths::HandleCpiAttributeResponseL");
     
@@ -211,7 +220,8 @@
                 User::Leave(KErrNotSupported);
                 }
                 
-            CMPXMediaArray* mediaArray = aResponse->ValueCObjectL<CMPXMediaArray>(KMPXMediaArrayContents);
+            CMPXMediaArray* mediaArray =
+            	aResponse->ValueCObjectL<CMPXMediaArray>(KMPXMediaArrayContents);
             CleanupStack::PushL(mediaArray);
 
             const TInt arrayCount = mediaArray->Count();
@@ -224,7 +234,8 @@
             
             for (TInt index = 0; index < arrayCount; index++)
                 {
-                HandleCpiAttributeResponseL((*mediaArray)[index], aCpiAttributes, aMediaIds[index]);
+                HandleCpiAttributeResponseL((*mediaArray)[index],
+                		aCpiAttributes, aMediaIds[index]);
                 }
 
             aResponse->SetCObjectValueL(KMPXMediaArrayContents, mediaArray);
@@ -239,7 +250,8 @@
 // HandleCpiAttributeResponseL
 // ----------------------------------------------------------------------------
 // 
-void CGlxCollectionPluginMonths::HandleCpiAttributeResponseL(CMPXMedia* aResponse, TArray<TMPXAttribute> aCpiAttributes, TGlxMediaId aMediaId)
+void CGlxCollectionPluginMonths::HandleCpiAttributeResponseL(CMPXMedia* aResponse,
+		TArray<TMPXAttribute> aCpiAttributes, TGlxMediaId aMediaId)
     {
     TRACER("CGlxCollectionPluginMonths::HandleCpiAttributeResponseL");
     
@@ -297,7 +309,7 @@
 						TPtr formatString = tempTitle->Des();
 
 						// Now create a buffer that will contain the result. needs to be length of format string plus a few extra for the number
-						HBufC* title = HBufC::NewLC(formatString.Length() + 10);
+						HBufC* title = HBufC::NewLC(formatString.Length() + KDateBufferPaddingMin);
 						TPtr ptr = title->Des();
 						StringLoader::Format(ptr, formatString, -1, usageCount);
 
@@ -393,7 +405,7 @@
                         break;
                         }
                     }
-                TBuf<8> yearTitle2;
+                TBuf<KYearBufferSize> yearTitle2;
                 end.FormatL(yearTitle2, KGlxTempMonthYearTitleFormat);
                 HBufC* monthTitle2 = NULL;
                 switch(end.DateTime().Month())
@@ -460,20 +472,20 @@
                         }
                     }
 
-                HBufC* title1 = HBufC::NewLC(formatString.Length() + 20);
+                HBufC* title1 = HBufC::NewLC(formatString.Length() + KDateBufferPaddingMax);
                 TPtr ptr1 = title1->Des();
-                HBufC* title2 = HBufC::NewLC(formatString.Length() + 20);
+                HBufC* title2 = HBufC::NewLC(formatString.Length() + KDateBufferPaddingMax);
                 TPtr ptr2 = title2->Des();
-                HBufC* title3 = HBufC::NewLC(formatString.Length() + 20);
+                HBufC* title3 = HBufC::NewLC(formatString.Length() + KDateBufferPaddingMax);
                 TPtr ptr3 = title3->Des();
-                HBufC* title4 = HBufC::NewLC(formatString.Length() + 20);
+                HBufC* title4 = HBufC::NewLC(formatString.Length() + KDateBufferPaddingMax);
                 TPtr ptr4 = title4->Des();
                 TPtr monthPtr = monthTitle->Des();
                 TPtr monthPtr2 = monthTitle2->Des();
                 StringLoader::Format(ptr1, formatString, 0, monthPtr);
-                StringLoader::Format(ptr2, ptr1, 1, yearTitle);
-                StringLoader::Format(ptr3, ptr2, 2, monthPtr2);
-                StringLoader::Format(ptr4, ptr3, 3, yearTitle2);
+                StringLoader::Format(ptr2, ptr1, KDateFormat1, yearTitle);
+                StringLoader::Format(ptr3, ptr2, KDateFormat2, monthPtr2);
+                StringLoader::Format(ptr4, ptr3, KDateFormat3, yearTitle2);
                 
 
                 aResponse->SetTextValueL(attr, *title4);  
@@ -502,7 +514,8 @@
 					{  
 					GLX_LOG_INFO("VideoCount:0,ImageCount:0");
 					              	
-					tempTitle = LoadLocalizedStringLC(KResourceFile, R_MONTHS_SUB_TITLE_NO_IMAGE_NO_VIDEO);
+					tempTitle = LoadLocalizedStringLC(KResourceFile,
+										R_MONTHS_SUB_TITLE_NO_IMAGE_NO_VIDEO);
 					aResponse->SetTextValueL(attr, *tempTitle);	
 					}
 				else
@@ -512,12 +525,13 @@
 						{
 						GLX_LOG_INFO1("ImageCount:1,VideoCount:%d",videoCount);
 						
-						tempTitle = LoadLocalizedStringLC(KResourceFile, R_MONTHS_SUB_TITLE_ONE_IMAGE_MULTI_VIDEO);
+						tempTitle = LoadLocalizedStringLC(KResourceFile,
+										R_MONTHS_SUB_TITLE_ONE_IMAGE_MULTI_VIDEO);
 
 						TPtr formatString = tempTitle->Des();
 
 						// Now create a buffer that will contain the result. needs to be length of format string plus a few extra for the number
-						HBufC* title = HBufC::NewLC(formatString.Length() + 10);
+						HBufC* title = HBufC::NewLC(formatString.Length() + KDateBufferPaddingMin);
 						TPtr ptr = title->Des();
 
 						StringLoader::Format(ptr, formatString, -1, videoCount);
@@ -533,12 +547,13 @@
 						{
 						GLX_LOG_INFO1("ImageCount: %d,VideoCount:1",imageCount);
 						
-						tempTitle = LoadLocalizedStringLC(KResourceFile, R_MONTHS_SUB_TITLE_MULTI_IMAGE_ONE_VIDEO);                	
+						tempTitle = LoadLocalizedStringLC(KResourceFile,
+									R_MONTHS_SUB_TITLE_MULTI_IMAGE_ONE_VIDEO);
 
 						TPtr formatString = tempTitle->Des();
 
 						// Now create a buffer that will contain the result. needs to be length of format string plus a few extra for the number
-						HBufC* title = HBufC::NewLC(formatString.Length() + 10);
+						HBufC* title = HBufC::NewLC(formatString.Length() + KDateBufferPaddingMin);
 						TPtr ptr = title->Des();
 
 						StringLoader::Format(ptr, formatString, -1, imageCount);
@@ -554,17 +569,19 @@
 						{						
 						GLX_LOG_INFO2("ImageCount %d,VideoCount %d",imageCount,videoCount);
 						
-						tempTitle = LoadLocalizedStringLC(KResourceFile, R_MONTHS_SUB_TITLE_MULTI_IMAGE_MULTI_VIDEO);                	
+						tempTitle = LoadLocalizedStringLC(KResourceFile,
+									R_MONTHS_SUB_TITLE_MULTI_IMAGE_MULTI_VIDEO);
+
 						TPtr formatString = tempTitle->Des();	
 
-						HBufC* title = HBufC::NewLC(formatString.Length() + 10);
+						HBufC* title = HBufC::NewLC(formatString.Length() + KDateBufferPaddingMin);
 						TPtr ptr = title->Des();
 
-						HBufC* title1 = HBufC::NewLC(formatString.Length() + 10);
+						HBufC* title1 = HBufC::NewLC(formatString.Length() + KDateBufferPaddingMin);
 						TPtr ptr1 = title1->Des();
 
 						StringLoader::Format(ptr, formatString, 0, imageCount);
-						StringLoader::Format(ptr1, ptr, 1, videoCount);	
+						StringLoader::Format(ptr1, ptr, KDateFormat1, videoCount);
 
 						// Set the title in the response.	
 						aResponse->SetTextValueL(attr, *title1);
@@ -584,36 +601,41 @@
                     }
                 else if ( aResponse->IsSupported(KGlxMediaCollectionInternalUsageCount) )
                     {
-                    usageCount = aResponse->ValueTObjectL<TInt>(KGlxMediaCollectionInternalUsageCount);
+                    usageCount =
+                    aResponse->ValueTObjectL<TInt>(KGlxMediaCollectionInternalUsageCount);
                     }
                 else
                     {
                     User::Leave(KErrNotSupported);
                     }
                 HBufC* tempTitle = NULL;
-                
+
             	if(0 == usageCount)
             		{
-                	tempTitle = LoadLocalizedStringLC(KResourceFile, R_MONTHS_SUB_TITLE_NO_IMAGE_NO_VIDEO);                	
+                	tempTitle = LoadLocalizedStringLC(KResourceFile,
+                				R_MONTHS_SUB_TITLE_NO_IMAGE_NO_VIDEO);
+
                 	// Set the title in the response.
             		aResponse->SetTextValueL(attr, *tempTitle);  
             		CleanupStack::PopAndDestroy(tempTitle);
-            		continue;                	
-            		}  
-                
+            		continue;
+            		}
+
             	else if (1 == usageCount)
                     {
-                    tempTitle = LoadLocalizedStringLC(KResourceFile, R_MONTHS_SUB_TITLE_SINGLE);
+                    tempTitle = LoadLocalizedStringLC(KResourceFile,
+                    			R_MONTHS_SUB_TITLE_SINGLE);
                     }
                 else
                     {
-                    tempTitle = LoadLocalizedStringLC(KResourceFile, R_MONTHS_SUB_TITLE_MULTI);
+                    tempTitle = LoadLocalizedStringLC(KResourceFile,
+                    			R_MONTHS_SUB_TITLE_MULTI);
                     }
                 
                 TPtr formatString = tempTitle->Des();
                 
                 // Now create a buffer that will contain the result. needs to be length of format string plus a few extra for the number
-                HBufC* title = HBufC::NewLC(formatString.Length() + 10);
+                HBufC* title = HBufC::NewLC(formatString.Length() + KDateBufferPaddingMin);
                 TPtr ptr = title->Des();
                 StringLoader::Format(ptr, formatString, -1, usageCount);
                 
@@ -651,7 +673,8 @@
                 {
                 GLX_LOG_INFO("Attribute : GeneralTitle:RootId");
                 
-                HBufC* title = LoadLocalizedStringLC(KResourceFile, R_MONTHS_GENERAL_TITLE);
+                HBufC* title = LoadLocalizedStringLC(KResourceFile,
+                			R_MONTHS_GENERAL_TITLE);
                 aResponse->SetTextValueL(attr, *title);  
                 CleanupStack::PopAndDestroy(title); 
                 }
@@ -659,11 +682,13 @@
                 {
                 if( aResponse->IsSupported(KGlxMediaCollectionInternalStartDate) )
                     {
-                    HBufC* tempTitle = LoadLocalizedStringLC(KResourceFile, R_MONTHS_ITEM_TITLE);
+                    HBufC* tempTitle = LoadLocalizedStringLC(KResourceFile,
+                    			R_MONTHS_ITEM_TITLE);
                     TPtr formatString = tempTitle->Des();
-                    TTime month = aResponse->ValueTObjectL<TInt64>(KGlxMediaCollectionInternalStartDate);
+                    TTime month =
+                    aResponse->ValueTObjectL<TInt64>(KGlxMediaCollectionInternalStartDate);
                     _LIT(KGlxTempMonthYearTitleFormat, "%F%Y");
-                    TBuf<8> yearTitle;
+                    TBuf<KYearBufferSize> yearTitle;
                     month.FormatL(yearTitle, KGlxTempMonthYearTitleFormat);
                     HBufC* monthTitle = NULL;
                     switch(month.DateTime().Month())
@@ -730,13 +755,13 @@
                             }
                         }
 
-                    HBufC* title1 = HBufC::NewLC(formatString.Length() + 20);
+                    HBufC* title1 = HBufC::NewLC(formatString.Length() + KDateBufferPaddingMax);
                     TPtr ptr = title1->Des();
-                    HBufC* title = HBufC::NewLC(formatString.Length() + 20);
+                    HBufC* title = HBufC::NewLC(formatString.Length() + KDateBufferPaddingMax);
                     TPtr ptr2 = title->Des();
                     TPtr monthPtr = monthTitle->Des();
                     StringLoader::Format(ptr, formatString, 0, monthPtr);
-                    StringLoader::Format(ptr2, ptr, 1, yearTitle);
+                    StringLoader::Format(ptr2, ptr, KDateFormat1, yearTitle);
                     
 
                     aResponse->SetTextValueL(attr, *title);  
--- a/engine/collectionframework/plugins/tagcollectionplugin/group/glxcollectionplugintags.mmp	Wed Jun 16 13:08:54 2010 +0100
+++ b/engine/collectionframework/plugins/tagcollectionplugin/group/glxcollectionplugintags.mmp	Thu Jul 22 16:33:32 2010 +0100
@@ -74,5 +74,5 @@
 LIBRARY         glxdatasourcemanager.lib				//DataSource Request
 LIBRARY         glxcommon.lib							//Filters
 LIBRARY         flogger.lib
-
+SMPSAFE
 // End of File
--- a/engine/collectionframework/plugins/tagcollectionplugin/src/glxcollectionplugintags.cpp	Wed Jun 16 13:08:54 2010 +0100
+++ b/engine/collectionframework/plugins/tagcollectionplugin/src/glxcollectionplugintags.cpp	Thu Jul 22 16:33:32 2010 +0100
@@ -102,7 +102,7 @@
 	    TInt attrCount = aAttributeArray.Count();
 	    TBool found = EFalse;
 	    
-	    //GLX_DEBUG1("CGlxCollectionPluginTags::CpiAttributeAdditionalAttributes-AttributesCount");  
+	    GLX_DEBUG1("CGlxCollectionPluginTags::CpiAttributeAdditionalAttributes-AttributesCount");  
 	    
 	    for ( TInt index = 0 ; index < attrCount ; index++)
 	        {
@@ -169,8 +169,6 @@
                 HandleCpiAttributeResponseL((*mediaArray)[index], aCpiAttributes, 
                 						aMediaIds[index]);
                 }
-
-			 /// @todo - Can we reset a value. Does it overwrite the original or does it leak? Must test
             aResponse->SetCObjectValueL(KMPXMediaArrayContents, mediaArray);        
             CleanupStack::PopAndDestroy(mediaArray);
             }
@@ -225,6 +223,9 @@
                     	{
                     	tempTitle = LoadLocalizedStringLC(KResourceFile,
                    			 R_TAG_SUB_TITLE_SINGLE);
+                        aResponse->SetTextValueL(attr, *tempTitle);  
+                        CleanupStack::PopAndDestroy(tempTitle);
+                        continue;
                     	}
                     else 
                     	{
@@ -247,6 +248,9 @@
                 		{
                 		tempTitle = LoadLocalizedStringLC(KResourceFile,
                    			 R_TAG_ITEM_SUB_TITLE_SINGLE);
+                        aResponse->SetTextValueL(attr, *tempTitle);  
+                        CleanupStack::PopAndDestroy(tempTitle);
+                        continue;
                 		}
                     else
                         {
--- a/engine/collectionframework/plugins/tagcollectionplugin/test/ut_cglxcollectionplugintags.mmp	Wed Jun 16 13:08:54 2010 +0100
+++ b/engine/collectionframework/plugins/tagcollectionplugin/test/ut_cglxcollectionplugintags.mmp	Thu Jul 22 16:33:32 2010 +0100
@@ -62,5 +62,5 @@
 
 LIBRARY                 glxdatasourcemanager.lib				//DataSource Request
 LIBRARY                 glxcommon.lib							//Filters
-
+SMPSAFE
 // End of file
--- a/engine/collectionframework/thumbnailcreator/group/glxthumbnailcreator.mmp	Wed Jun 16 13:08:54 2010 +0100
+++ b/engine/collectionframework/thumbnailcreator/group/glxthumbnailcreator.mmp	Thu Jul 22 16:33:32 2010 +0100
@@ -89,4 +89,5 @@
 LIBRARY         tneengine.lib
 #endif
 
+SMPSAFE
 // End of File
--- a/engine/collectionframework/thumbnailcreator/test/group/ut_cglxtndeletethumbnailstask.mmp	Wed Jun 16 13:08:54 2010 +0100
+++ b/engine/collectionframework/thumbnailcreator/test/group/ut_cglxtndeletethumbnailstask.mmp	Thu Jul 22 16:33:32 2010 +0100
@@ -48,5 +48,5 @@
 LIBRARY                 EUnit.lib
 LIBRARY                 EUnitUtil.lib
 LIBRARY                 euser.lib
-
+SMPSAFE
 // End of file
--- a/engine/collectionframework/thumbnailcreator/test/group/ut_cglxtnfilteravailabletask.mmp	Wed Jun 16 13:08:54 2010 +0100
+++ b/engine/collectionframework/thumbnailcreator/test/group/ut_cglxtnfilteravailabletask.mmp	Thu Jul 22 16:33:32 2010 +0100
@@ -49,5 +49,5 @@
 LIBRARY                 EUnitUtil.lib
 LIBRARY                 euser.lib
 
-
+SMPSAFE
 // End of file
--- a/engine/collectionframework/thumbnailcreator/test/group/ut_cglxtngeneratethumbnailtask.mmp	Wed Jun 16 13:08:54 2010 +0100
+++ b/engine/collectionframework/thumbnailcreator/test/group/ut_cglxtngeneratethumbnailtask.mmp	Thu Jul 22 16:33:32 2010 +0100
@@ -72,5 +72,5 @@
 #else
 LIBRARY                 tneengine.lib
 #endif
-
+SMPSAFE
 // End of file
--- a/engine/collectionframework/thumbnailcreator/test/group/ut_cglxtnquickthumbnailtask.mmp	Wed Jun 16 13:08:54 2010 +0100
+++ b/engine/collectionframework/thumbnailcreator/test/group/ut_cglxtnquickthumbnailtask.mmp	Thu Jul 22 16:33:32 2010 +0100
@@ -73,5 +73,5 @@
 #else
 LIBRARY                 tneengine.lib
 #endif
-
+SMPSAFE
 // End of file
--- a/engine/collectionframework/thumbnailcreator/test/group/ut_cglxtnzoomedimagetask.mmp	Wed Jun 16 13:08:54 2010 +0100
+++ b/engine/collectionframework/thumbnailcreator/test/group/ut_cglxtnzoomedimagetask.mmp	Thu Jul 22 16:33:32 2010 +0100
@@ -63,5 +63,5 @@
 LIBRARY                 ecom.lib
 
 LIBRARY		flogger.lib	// for logging to file
-
+SMPSAFE
 // End of file
--- a/engine/collectionframework/thumbnailcreator/thumbnailcomposerplugin/glxthumbnailcomposerplugin.mmp	Wed Jun 16 13:08:54 2010 +0100
+++ b/engine/collectionframework/thumbnailcreator/thumbnailcomposerplugin/glxthumbnailcomposerplugin.mmp	Thu Jul 22 16:33:32 2010 +0100
@@ -59,3 +59,4 @@
 LIBRARY       MdEClient.lib
 LIBRARY         flogger.lib						// For Logging Tracer
 
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gallery/gallery.pro	Thu Jul 22 16:33:32 2010 +0100
@@ -0,0 +1,19 @@
+#/* 
+#* Copyright (c) 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:
+#*
+#*/ 
+TEMPLATE    = subdirs
+myextension = "$${LITERAL_HASH}include <gallery/sis/bld_stub.inf>"
+BLD_INF_RULES.prj_platforms += myextension
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gallery/sis/bld_stub.inf	Thu Jul 22 16:33:32 2010 +0100
@@ -0,0 +1,26 @@
+/*
+* 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:   Build information for project mgallery.
+*
+*/
+
+PRJ_EXTENSIONS
+#ifdef MARM
+START EXTENSION app-services/buildstubsis
+OPTION SRCDIR ../sis
+OPTION SISNAME photos_stub
+END
+
+#endif
+
--- a/gallery/sis/createsis.bat	Wed Jun 16 13:08:54 2010 +0100
+++ b/gallery/sis/createsis.bat	Thu Jul 22 16:33:32 2010 +0100
@@ -15,6 +15,7 @@
 rem
 
 
+call makesis -v -s photos_stub.pkg
 
-call makesis glxgallery.pkg
-call signsis -s glxgallery.sis glxgallery.sisx RDTest_02.der RDTest_02.key
\ No newline at end of file
+call makesis photos.pkg
+call signsis -s photos.sis photos.sisx RDTest_02.der RDTest_02.key
\ No newline at end of file
--- a/gallery/sis/createsis_udeb.bat	Wed Jun 16 13:08:54 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,20 +0,0 @@
-rem
-rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-rem All rights reserved.
-rem This component and the accompanying materials are made available
-rem under the terms of "Eclipse Public License v1.0"
-rem which accompanies this distribution, and is available
-rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
-rem
-rem Initial Contributors:
-rem Nokia Corporation - initial contribution.
-rem
-rem Contributors:
-rem
-rem Description: 
-rem
-
-
-
-call makesis glxgallery_udeb.pkg
-call signsis -s glxgallery_udeb.sis glxgallery_udeb.sisx RDTest_02.der RDTest_02.key
\ No newline at end of file
--- a/gallery/sis/glxgallery.pkg	Wed Jun 16 13:08:54 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,103 +0,0 @@
-;
-; 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:   Package file for project Gallery
-;
-
-; -------- general --------
-
-; Languages
-&EN
-
-; Package header
-#{"photos"},(0x200009EE),1,0,0,TYPE=SA
-
-;Localised Vendor name
-%{"Nokia"}
-
-;Unique Vendor name
-:"Nokia"
-
-; Dependency for S60 3.0
-[0x101F7961],0,0,0,{"Series60v3.0"}
-
-; -------- files --------
-
-; NOTE: This installation package does not include huitoolkit.dll,
-; so you have to install it separately!
-
-
-"\epoc32\release\armv5\urel\glxcollectionplugintags.dll"                      -"!:\sys\bin\glxcollectionplugintags.dll"
-"\epoc32\data\Z\resource\plugins\glxcollectionplugintags.rsc"               -"!:\resource\plugins\glxcollectionplugintags.rsc"
-"\epoc32\data\Z\resource\plugins\glxplugintags.rsc"  					 -"!:\resource\plugins\glxplugintags.rsc"
-"\epoc32\release\armv5\urel\glxcommon.dll"                     -"!:\sys\bin\glxcommon.dll"
-"\epoc32\release\armv5\urel\glxcommonui.dll"                     -"!:\sys\bin\glxcommonui.dll"
-"\epoc32\release\armv5\urel\glxdatasourcemanager.dll"           -"!:\sys\bin\glxdatasourcemanager.dll"
-"\epoc32\release\armv5\urel\glxdatasourcemde.dll"               -"!:\sys\bin\glxdatasourcemde.dll"
-"\epoc32\data\Z\resource\plugins\glxdatasourcemde.rsc"               -"!:\resource\plugins\glxdatasourcemde.rsc"
-"\epoc32\release\armv5\urel\glxcollectionpluginalbums.dll"       -"!:\sys\bin\glxcollectionpluginalbums.dll"
-"\epoc32\data\Z\resource\plugins\glxcollectionpluginalbums.rsc"  -"!:\resource\plugins\glxcollectionpluginalbums.rsc"
-"\epoc32\data\Z\resource\plugins\glxpluginalbums.rsc"  					 -"!:\resource\plugins\glxpluginalbums.rsc"
-"\epoc32\release\armv5\urel\glxcollectionpluginall.dll"         -"!:\sys\bin\glxcollectionpluginall.dll"
-"\epoc32\data\Z\resource\plugins\glxcollectionpluginall.rsc"    -"!:\resource\plugins\glxcollectionpluginall.rsc"
-"\epoc32\data\Z\resource\plugins\glxpluginall.rsc"  					 -"!:\resource\plugins\glxpluginall.rsc"
-"\epoc32\release\armv5\urel\glxcollectionplugincamera.dll"         -"!:\sys\bin\glxcollectionplugincamera.dll"
-"\epoc32\data\Z\resource\plugins\glxcollectionplugincamera.rsc"    -"!:\resource\plugins\glxcollectionplugincamera.rsc"
-"\epoc32\data\Z\resource\plugins\glxplugincamera.rsc"  					 -"!:\resource\plugins\glxplugincamera.rsc"
-"\epoc32\release\armv5\urel\glxcollectionplugindownloads.dll"         -"!:\sys\bin\glxcollectionplugindownloads.dll"
-"\epoc32\data\Z\resource\plugins\glxcollectionplugindownloads.rsc"    -"!:\resource\plugins\glxcollectionplugindownloads.rsc"
-"\epoc32\data\Z\resource\plugins\glxplugindownloads.rsc"  					 -"!:\resource\plugins\glxplugindownloads.rsc"
-"\epoc32\release\armv5\urel\glxcollectionpluginmonths.dll"         -"!:\sys\bin\glxcollectionpluginmonths.dll"
-"\epoc32\data\Z\resource\plugins\glxcollectionpluginmonths.rsc"    -"!:\resource\plugins\glxcollectionpluginmonths.rsc"
-"\epoc32\data\Z\resource\plugins\glxpluginmonths.rsc"  					 -"!:\resource\plugins\glxpluginmonths.rsc"
-
-;delete these
-;"\epoc32\release\armv5\urel\glxthumbnailcomposerplugin.dll"     -"!:\sys\bin\glxthumbnailcomposerplugin.dll"
-;"\epoc32\data\Z\resource\plugins\glxthumbnailcomposerplugin.rsc" -"!:\resource\plugins\glxthumbnailcomposerplugin.rsc"
-
-"\epoc32\release\armv5\urel\glxmedialists.dll"            -"!:\sys\bin\glxmedialists.dll"
-
-"\epoc32\release\armv5\urel\glxdrmutility.dll"                 -"!:\sys\bin\glxdrmutility.dll"
-
-; Glx logging client
-"\epoc32\release\armv5\urel\glxlogging.dll"-"!:\sys\bin\glxlogging.dll"
-
-; Glx logging app
-;"\epoc32\release\armv5\urel\glxloggingapp.exe"-"!:\sys\bin\glxloggingapp.exe"
-;"\epoc32\data\z\private\10003a3f\import\apps\glxloggingapp_reg.rsc"-"!:\private\10003a3f\import\apps\glxloggingapp_reg.rsc"		
-;"\epoc32\data\z\resource\apps\glxloggingapp_loc.rsc"-"!:\resource\apps\glxloggingapp_loc.rsc"
-;"\epoc32\data\z\resource\apps\glxloggingapp.rsc"-"!:\resource\apps\glxloggingapp.rsc"
-
-
-"\epoc32\release\armv5\urel\photos.exe"            -"!:\sys\bin\photos.exe"
-"\epoc32\data\z\private\10003a3f\import\apps\photos_reg.rsc"-"!:\private\10003a3f\import\apps\photos_reg.rsc"		
-"\epoc32\data\z\resource\apps\photos.rsc"-"!:\resource\apps\photos.rsc"
-"\epoc32\data\z\resource\apps\0xE2C223D9.mif"             - "!:\resource\apps\0xE2C223D9.mif"
-
-;qt dlls
-"\epoc32\release\armv5\urel\glxtvoutwrapper.dll"            -"!:\sys\bin\glxtvoutwrapper.dll"
-"\epoc32\release\armv5\urel\glxmedialistwrapper.dll"            -"!:\sys\bin\glxmedialistwrapper.dll"
-"\epoc32\release\armv5\urel\glxmodelwrapper.dll"            -"!:\sys\bin\glxmodelwrapper.dll"
-"\epoc32\release\armv5\urel\glxexternalutility.dll"        -"!:\sys\bin\glxexternalutility.dll"
-"\epoc32\release\armv5\urel\glxmediamodel.dll"        -"!:\sys\bin\glxmediamodel.dll"
-"\epoc32\release\armv5\urel\glxlistmodel.dll"        -"!:\sys\bin\glxlistmodel.dll"
-"\epoc32\release\armv5\urel\glxstatehandler.dll"        -"!:\sys\bin\glxstatehandler.dll"
-"\epoc32\release\armv5\urel\glxviewmanager.dll"        -"!:\sys\bin\glxviewmanager.dll"
-;"\epoc32\release\armv5\urel\GlxExternalViewPlugin.dll"        -"!:\sys\bin\GlxExternalViewPlugin.dll"
-;"\epoc32\data\Z\resource\plugins\GlxExternalViewPlugin.rsc"         -"!:\resource\plugins\GlxExternalViewPlugin.rsc"
-"\epoc32\release\armv5\urel\glxviews.dll"        -"!:\sys\bin\glxviews.dll"
-"\epoc32\release\armv5\urel\glxloggerqt.dll"        -"!:\sys\bin\glxloggerqt.dll"
-"\epoc32\release\armv5\urel\glximagedecoderwrapper.dll"        -"!:\sys\bin\glximagedecoderwrapper.dll"
-
-"\epoc32\release\armv5\urel\glxcommandhandlerbase.dll"        -"!:\sys\bin\glxcommandhandlerbase.dll"
-"\epoc32\release\armv5\urel\glxcommoncommandhandlers.dll"        -"!:\sys\bin\glxcommoncommandhandlers.dll"
Binary file gallery/sis/glxgallery.sis has changed
Binary file gallery/sis/glxgallery.sisx has changed
--- a/gallery/sis/glxgallery_stub.mk	Wed Jun 16 13:08:54 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,44 +0,0 @@
-#
-# Copyright (c) 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:  
-#
-
-ifeq (WINS,$(findstring WINS, $(PLATFORM)))
-    ZDIR = $(EPOCROOT)epoc32\release\$(PLATFORM)\$(CFG)\Z
-else
-    ZDIR = $(EPOCROOT)epoc32\data\z
-endif
-
-
-
-do_nothing :
-	@rem do_nothing
-MAKMAKE : do_nothing
-BLD : do_nothing
-CLEAN : do_nothing
-LIB : do_nothing
-CLEANLIB : do_nothing
-
-RESOURCE : do_nothing
-FREEZE : do_nothing
-SAVESPACE : do_nothing
-RELEASABLES : do_nothing
-FINAL : 
-	echo =============================================================
-	echo Starting to create stub file..
-	makesis -v -s photos_stub.pkg photos_stub.sis
-	echo Copying stub sis..
-	copy photos_stub.sis $(EPOCROOT)epoc32\data\Z\System\Install\photos_stub.sis
-	echo Stub created and copied.
-	echo =============================================================
--- a/gallery/sis/glxgallery_stub.pkg	Wed Jun 16 13:08:54 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,166 +0,0 @@
-;
-; 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:   Stub package file for project Gallery
-;
-
-; -------- general --------
-
-; Languages
-&EN
-
-; Package header
-#{"mgallery"},(0x200009EE),1,0,0, TYPE=SA
-
-;Localised Vendor name
-%{"Nokia"}
-
-;Unique Vendor name
-:"Nokia"
-
-; -------- files --------
-
-""-"z:\private\10003a3f\import\apps\glx_reg.rsc"
-
-""-"z:\sys\bin\glx.exe"		
-""-"z:\resource\apps\glx_loc.Rsc"
-""-"z:\resource\apps\glx.Rsc"
-
-""-"z:\resource\apps\glxicons.mbm"
-""-"z:\resource\apps\glxicons.mif"
-""-"z:\resource\apps\glx_aif.mif"
-
-
-;; language-dependent resource files
-
-;; engines
-
-""-"z:\sys\bin\glxsimplelistview.dll"
-""-"z:\sys\bin\glxtagsmanagerviewplugin.dll"
-""-"z:\resource\plugins\glxtagsmanagerviewplugin.rsc"
-""-"z:\resource\apps\glxtagsmanagerview.RSC"
-""-"z:\resource\plugins\glxlistviewplugin.rsc"
-""-"z:\sys\bin\glxmetadatadialog.dll"
-""-"z:\resource\apps\glxmetadatadialog.rsc"
-""-"z:\sys\bin\glxcloudview.dll"
-""-"z:\sys\bin\glxtagsbrowserviewplugin.dll"
-""-"z:\resource\plugins\glxtagsbrowserviewplugin.rsc"
-""-"z:\resource\apps\glxtagsbrowserview.RSC"
-""-"z:\sys\bin\glxupnpcommandhandler.dll"
-""-"z:\sys\bin\glxcollectionplugintags.dll"
-""-"z:\resource\plugins\glxcollectionplugintags.rsc"
-""-"z:\resource\plugins\glxplugintags.rsc"
-""-"z:\sys\bin\glxtexturemanager.dll"
-""-"z:\sys\bin\glxfetcher.dll"
-""-"z:\resource\plugins\glxfetcher.rsc"
-""-"z:\resource\apps\glxfetcherdialog.rsc"
-""-"z:\sys\bin\glxcollectionmanager.dll"
-;""-"z:\sys\bin\glxactivedataplugin.dll"
-;""-"z:\resource\plugins\glxactivedataplugin.rsc"
-""-"z:\sys\bin\glxviewbase.dll"
-""-"z:\resource\apps\glxviewbase.rsc"
-""-"z:\sys\bin\glxcommandhandlerbase.dll"
-""-"z:\sys\bin\glxcommoncommandhandlers.dll"
-""-"z:\resource\apps\glxcommoncommandhandlers.rsc"
-""-"z:\sys\bin\glxcommandhandlermarking.dll"
-""-"z:\sys\bin\glxcommandhandlerdrm.dll"
-""-"z:\sys\bin\glxcommandhandlermoreinfo.dll"
-""-"z:\resource\apps\glxcommandhandlermarking.rsc"
-""-"z:\sys\bin\glxcommon.dll"
-""-"z:\sys\bin\glxcommonui.dll"
-""-"z:\sys\bin\shwslideshowengine.dll"
-""-"z:\resource\apps\shwslideshowengine.rsc"
-""-"z:\sys\bin\shwslideshowviewplugin.dll"
-""-"z:\resource\plugins\shwslideshowviewplugin.rsc"
-""-"z:\resource\apps\shwslideshowview.rsc"
-""-"z:\sys\bin\shwsettingsplugin.dll"
-""-"z:\resource\plugins\shwsettingsplugin.rsc"
-""-"z:\resource\apps\shwsettingsdialog.rsc"
-""-"z:\sys\bin\glxthumbnailcreator.dll"
-""-"z:\sys\bin\glxdatasourcemanager.dll"
-""-"z:\sys\bin\glxdatasourcemde.dll"
-""-"z:\resource\plugins\glxdatasourcemde.rsc"
-""-"z:\sys\bin\glxcollectionpluginalbums.dll"
-""-"z:\resource\plugins\glxcollectionpluginalbums.rsc"
-""-"z:\resource\plugins\glxpluginalbums.rsc"
-""-"z:\sys\bin\glxcollectionpluginall.dll"
-""-"z:\resource\plugins\glxcollectionpluginall.rsc"
-""-"z:\resource\plugins\glxpluginall.rsc"
-""-"z:\sys\bin\glxcollectionplugincamera.dll"
-""-"z:\resource\plugins\glxcollectionplugincamera.rsc"
-""-"z:\resource\plugins\glxplugincamera.rsc"
-""-"z:\sys\bin\glxcollectionplugindownloads.dll"
-""-"z:\resource\plugins\glxcollectionplugindownloads.rsc"
-""-"z:\resource\plugins\glxplugindownloads.rsc"
-""-"z:\sys\bin\glxcollectionpluginmonths.dll"
-""-"z:\resource\plugins\glxcollectionpluginmonths.rsc"
-""-"z:\resource\plugins\glxpluginmonths.rsc"
-""-"z:\sys\bin\glxzoomview.dll"
-
-""-"z:\sys\bin\glxthumbnailcomposerplugin.dll"
-""-"z:\resource\plugins\glxthumbnailcomposerplugin.rsc"
-
-;""-"z:\sys\bin\glxtvout.dll"
-
-""-"z:\sys\bin\glxlayouts.dll"
-""-"z:\sys\bin\glxmedialists.dll"
-""-"z:\sys\bin\glxvisuallistmanager.dll"
-""-"z:\sys\bin\glxuiutilities.dll"
-""-"z:\resource\apps\glxuiutilities.rsc"
-""-"z:\sys\bin\glxdrmutility.dll"
-
-""-"z:\sys\bin\glxgridview.dll"
-""-"z:\resource\apps\glxgridviewdata.rsc"
-""-"z:\sys\bin\glxgridviewpluginbase.dll"
-""-"z:\sys\bin\glxgridviewplugin.dll"
-""-"z:\resource\plugins\glxgridviewplugin.rsc"
-""-"z:\resource\apps\glxdownloadtext.rsc" 
-
-
-""-"z:\sys\bin\glxfullscreenview.dll"
-
-""-"z:\sys\bin\glxlistview.dll"
-""-"z:\resource\apps\glxlistviewplugin.rsc"
-""-"z:\sys\bin\glxlistviewpluginbase.dll"
-""-"z:\sys\bin\glxlistviewplugin.dll"
-""-"z:\resource\plugins\glxlistviewplugin.rsc"
-
-""-"z:\system\data\10202BE9\200071d3.txt"
-""-"z:\system\data\10202BE9\200009EE.txt"
-
-;Files for the VIA Player component
-;""-"z:\sys\bin\glxvideoplaybackviewplugin.dll"
-;""-"z:\resource\plugins\glxvideoplaybackviewplugin.rsc"
-
-; Glx logging client
-""-"z:\sys\bin\glxlogging.dll"
-
-; Glx logging app
-""-"z:\sys\bin\glxloggingapp.exe"
-""-"z:\private\10003a3f\import\apps\glxloggingapp_reg.rsc"		
-""-"z:\resource\apps\glxloggingapp_loc.rsc"
-""-"z:\resource\apps\glxloggingapp.rsc"
-
-
-""-"z:\sys\bin\glxtileview.dll"
-""-"z:\sys\bin\glxtileviewpluginbase.dll"
-""-"z:\sys\bin\glxtileviewplugin.dll"
-""-"z:\sys\bin\glxtagcollectionplugin.dll"
-""-"z:\sys\bin\glxalbumcollectionplugin.dll"
-""-"z:\sys\bin\glxfullscreenviewpluginbase.dll"
-""-"z:\sys\bin\glxfullscreenviewplugin.dll"
-""-"z:\sys\bin\glxdataprovider.dll"
-""-"z:\sys\bin\glxunifiedmetadataviewplugin.dll"
-""-"z:\sys\bin\glxuitilities.dll"
-""-"z:\sys\bin\glxunifiedmetadataview.dll"
-""-"z:\sys\bin\glxaddtoalbumhandler.dll"
Binary file gallery/sis/glxgallery_stub.sis has changed
--- a/gallery/sis/glxgallery_udeb.pkg	Wed Jun 16 13:08:54 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,237 +0,0 @@
-;
-; 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:   Package file for project Gallery
-;
-
-; -------- general --------
-
-; Languages
-&EN
-
-; Package header
-#{"mgallery"},(0x200009EE),1,0,0,TYPE=SA
-
-;Localised Vendor name
-%{"Nokia"}
-
-;Unique Vendor name
-:"Nokia"
-
-; Dependency for S60 3.0
-[0x101F7961],0,0,0,{"Series60v3.0"}
-
-; -------- files --------
-
-; NOTE: This installation package does not include huitoolkit.dll,
-; so you have to install it separately!
-
-;; ui files
-
-"..\data\abstract5.jpg"-"c:\abstract5.jpg"
-"..\data\Battle.jpg"-"c:\Battle.jpg"
-"..\data\text_element_left_cap.png"-"c:\text_element_left_cap.png"
-"..\data\text_element_mid.png"-"c:\text_element_mid.png"
-"..\data\text_element_right_cap.png"-"c:\text_element_right_cap.png"
-"..\data\qgn_prop_image_notcreated.png"-"c:\qgn_prop_image_notcreated.png"
-"..\data\Image1.jpg"-"c:\Image1.jpg"
-"..\data\Image2.jpg"-"c:\Image2.jpg"
-"..\data\Image3.jpg"-"c:\Image3.jpg"
-"..\data\Image4.jpg"-"c:\Image4.jpg"
-"..\data\Image5.jpg"-"c:\Image5.jpg"
-"..\data\Image6.jpg"-"c:\Image6.jpg"
-"..\data\Image7.jpg"-"c:\Image7.jpg"
-"..\data\Image8.jpg"-"c:\Image8.jpg"
-"..\data\Image9.jpg"-"c:\Image9.jpg"
-"..\data\Image10.jpg"-"c:\Image10.jpg"
-"..\data\Image11.jpg"-"c:\Image11.jpg"
-"..\data\Image12.jpg"-"c:\Image12.jpg"
-"..\data\Image13.jpg"-"c:\Image13.jpg"
-"..\data\Image14.jpg"-"c:\Image14.jpg"
-"..\data\Image15.jpg"-"c:\Image15.jpg"
-"..\data\Image16.jpg"-"c:\Image16.jpg"
-"..\data\Image17.jpg"-"c:\Image17.jpg"
-"..\data\Image18.jpg"-"c:\Image18.jpg"
-"..\data\Image19.jpg"-"c:\Image19.jpg"
-"..\data\Image20.jpg"-"c:\Image20.jpg"
-"..\data\Image21.jpg"-"c:\Image21.jpg"
-"..\data\Image22.jpg"-"c:\Image22.jpg"
-"..\data\newitem1.jpg"-"c:\newitem1.jpg"
-"..\data\newitem2.jpg"-"c:\newitem2.jpg"
-"..\data\newitem3.jpg"-"c:\newitem3.jpg"
-"..\data\newitem4.jpg"-"c:\newitem4.jpg"
-"..\data\newitem5.jpg"-"c:\newitem5.jpg"
-"..\data\newitem6.jpg"-"c:\newitem6.jpg"
-"..\data\newitem7.jpg"-"c:\newitem7.jpg"
-"..\data\newitem8.jpg"-"c:\newitem8.jpg"
-"..\data\newitem9.jpg"-"c:\newitem9.jpg"
-"..\data\newitem10.jpg"-"c:\newitem10.jpg"
-"..\data\newitem11.jpg"-"c:\newitem11.jpg"
-"..\data\newitem12.jpg"-"c:\newitem12.jpg"
-"..\data\newitem13.jpg"-"c:\newitem13.jpg"
-"..\data\newitem14.jpg"-"c:\newitem14.jpg"
-
-"\epoc32\release\armv5\udeb\glx.exe"-"!:\sys\bin\glx.exe"
-"\epoc32\data\z\private\10003a3f\import\apps\glx_reg.rsc"-"!:\private\10003a3f\import\apps\glx_reg.rsc"		
-"\epoc32\data\z\resource\apps\glx_loc.Rsc"-"!:\resource\apps\glx_loc.Rsc"
-"\epoc32\data\z\resource\apps\glx.Rsc"-"!:\resource\apps\glx.Rsc"
-
-;"\epoc32\release\armv5\udeb\proto.exe"-"!:\sys\bin\proto.exe"
-;"\epoc32\data\z\private\10003a3f\import\apps\proto_reg.rsc"-"!:\private\10003a3f\import\apps\proto_reg.rsc"
-;"\epoc32\data\z\resource\apps\proto.Rsc"-"!:\resource\apps\proto.Rsc"
-
-;"\epoc32\release\armv5\udeb\albumpopuptest.exe"-"!:\sys\bin\albumpopuptest.exe"
-;"\epoc32\data\z\private\10003a3f\import\apps\albumpopuptest_reg.rsc"-"!:\private\10003a3f\import\apps\albumpopuptest_reg.rsc"
-;"\epoc32\data\z\resource\apps\albumpopuptest.Rsc"-"!:\resource\apps\albumpopuptest.Rsc"
-
-;"..\..\viewframework\uiutilities\data\icon4.png"                -"!:\private\200009EE\icon4.png"
-;"..\..\viewframework\uiutilities\data\listbox_bar.png"          -"!:\private\200009EE\listbox_bar.png"
-;"..\..\viewframework\uiutilities\data\listbox_thumb.png"        -"!:\private\200009EE\listbox_thumb.png"
-;"..\..\viewframework\uiutilities\data\selector.png"             -"!:\private\200009EE\selector.png"
-;"..\..\viewframework\uiutilities\data\capped_element.png"       -"!:\private\200009EE\capped_element.png"
-
-"\epoc32\data\z\resource\apps\glxicons.mbm"                      -"!:\resource\apps\glxicons.mbm"
-"\epoc32\data\z\resource\apps\glxicons.mif"                      -"!:\resource\apps\glxicons.mif"
-"\epoc32\data\z\resource\apps\glx_aif.mif"                      -"!:\resource\apps\glx_aif.mif"
-
-
-;; language-dependent resource files
-
-;; engines
-
-
-"\epoc32\data\Z\resource\plugins\glxlistviewplugin.rsc"               -"!:\resource\plugins\glxlistviewplugin.rsc"
-;"\epoc32\release\armv5\udeb\glxunifiedmetadataview.dll"                      -"!:\sys\bin\glxunifiedmetadataview.dll"
-"\epoc32\data\Z\resource\apps\glxmetadatadialog.rsc"           -"!:\resource\apps\glxmetadatadialog.rsc"
-"\epoc32\release\armv5\udeb\glxmetadatadialog.dll"                      -"!:\sys\bin\glxmetadatadialog.dll"
-"\epoc32\data\Z\resource\apps\glxmetadatadialog.rsc"           -"!:\resource\apps\glxmetadatadialog.rsc"
-"\epoc32\release\armv5\udeb\glxcloudview.dll"                      -"!:\sys\bin\glxcloudview.dll"
-"\epoc32\release\armv5\udeb\glxtagsbrowserviewplugin.dll"                      -"!:\sys\bin\glxtagsbrowserviewplugin.dll"
-"\epoc32\data\Z\resource\plugins\glxtagsbrowserviewplugin.rsc"               -"!:\resource\plugins\glxtagsbrowserviewplugin.rsc"
-"\epoc32\data\Z\resource\apps\glxtagsbrowserview.RSC"													 -"!:\resource\apps\glxtagsbrowserview.RSC"
-"\epoc32\release\armv5\udeb\glxupnpcommandhandler.dll"                      -"!:\sys\bin\glxupnpcommandhandler.dll"
-"\epoc32\release\armv5\udeb\glxcollectionplugintags.dll"                      -"!:\sys\bin\glxcollectionplugintags.dll"
-"\epoc32\data\Z\resource\plugins\glxcollectionplugintags.rsc"               -"!:\resource\plugins\glxcollectionplugintags.rsc"
-"\epoc32\data\Z\resource\plugins\glxplugintags.rsc"  					 -"!:\resource\plugins\glxplugintags.rsc"
-"\epoc32\release\armv5\udeb\glxtexturemanager.dll"                      -"!:\sys\bin\glxtexturemanager.dll"
-"\epoc32\release\armv5\udeb\glxfetcher.dll"                      -"!:\sys\bin\glxfetcher.dll"
-"\epoc32\data\Z\resource\plugins\glxfetcher.rsc"               -"!:\resource\plugins\glxfetcher.rsc"
-"\epoc32\data\Z\resource\apps\glxfetcherview.rsc"               -"!:\resource\apps\glxfetcherview.rsc"
-"\epoc32\release\armv5\udeb\glxcollectionmanager.dll"            -"!:\sys\bin\glxcollectionmanager.dll"
-"\epoc32\release\armv5\udeb\glxactivedataplugin.dll"              -"!:\sys\bin\glxactivedataplugin.dll"
-"\epoc32\data\Z\resource\plugins\glxactivedataplugin.rsc"               -"!:\resource\plugins\glxactivedataplugin.rsc"
-"\epoc32\release\armv5\udeb\glxviewbase.dll"            -"!:\sys\bin\glxviewbase.dll"
-"\epoc32\data\z\resource\apps\glxviewbase.rsc"            -"!:\resource\apps\glxviewbase.rsc"
-;"\epoc32\release\armv5\udeb\glxtesttileview.dll"            -"!:\sys\bin\glxtesttileview.dll"
-;"\epoc32\data\z\resource\apps\glxtesttileview.rsc"                  -"!:\resource\apps\glxtesttileview.rsc"
-;"\epoc32\release\armv5\udeb\glxtesttileviewplugin.dll"            -"!:\sys\bin\glxtesttileviewplugin.dll"
-;"\epoc32\data\Z\resource\plugins\glxtesttileviewplugin.rsc"  -"!:\resource\plugins\glxtesttileviewplugin.rsc"
-;"\epoc32\release\armv5\udeb\glxtestremovehandler.dll"            -"!:\sys\bin\glxtestremovehandler.dll"
-;"\epoc32\release\armv5\udeb\glxaddtoalbumhandler.dll"            -"!:\sys\bin\glxaddtoalbumhandler.dll"
-"\epoc32\release\armv5\udeb\glxcommandhandlerbase.dll"            -"!:\sys\bin\glxcommandhandlerbase.dll"
-"\epoc32\release\armv5\udeb\glxcommoncommandhandlers.dll"            -"!:\sys\bin\glxcommoncommandhandlers.dll"
-"\epoc32\data\Z\resource\apps\glxcommoncommandhandlers.rsc"													 -"!:\resource\apps\glxcommoncommandhandlers.rsc"
-"\epoc32\release\armv5\udeb\glxcommandhandlermarking.dll"            -"!:\sys\bin\glxcommandhandlermarking.dll"
-"\epoc32\release\armv5\udeb\glxcommandhandlerdrm.dll"                -"!:\sys\bin\glxcommandhandlerdrm.dll"
-"\epoc32\release\armv5\udeb\glxcommandhandlermoreinfo.dll"            -"!:\sys\bin\glxcommandhandlermoreinfo.dll"
-"\epoc32\data\z\resource\apps\glxcommandhandlermarking.rsc"            -"!:\resource\apps\glxcommandhandlermarking.rsc"
-"\epoc32\release\armv5\udeb\glxcommon.dll"                     -"!:\sys\bin\glxcommon.dll"
-"\epoc32\release\armv5\udeb\glxcommonui.dll"                     -"!:\sys\bin\glxcommonui.dll"
-;"\epoc32\data\z\resource\apps\glxaddtoalbumhandler.rsc"                  -"!:\resource\apps\glxaddtoalbumhandler.rsc"
-"\epoc32\release\armv5\udeb\shwslideshowengine.dll"            -"!:\sys\bin\shwslideshowengine.dll"
-"\epoc32\data\Z\resource\apps\shwslideshowengine.rsc"           -"!:\resource\apps\shwslideshowengine.rsc"
-"\epoc32\release\armv5\udeb\shwslideshowviewplugin.dll"         -"!:\sys\bin\shwslideshowviewplugin.dll"
-"\epoc32\data\Z\resource\plugins\shwslideshowviewplugin.rsc"    -"!:\resource\plugins\shwslideshowviewplugin.rsc"
-"\epoc32\data\Z\resource\apps\shwslideshowview.rsc"           -"!:\resource\apps\shwslideshowview.rsc"
-"\epoc32\release\armv5\udeb\shwsettingsplugin.dll"            -"!:\sys\bin\shwsettingsplugin.dll"
-"\epoc32\data\Z\resource\plugins\shwsettingsplugin.rsc"		-"!:\resource\plugins\shwsettingsplugin.rsc"
-"\epoc32\data\Z\resource\apps\shwsettingsdialog.rsc"		-"!:\resource\apps\shwsettingsdialog.rsc"
-"\epoc32\release\armv5\udeb\glxthumbnailcreator.dll"            -"!:\sys\bin\glxthumbnailcreator.dll"
-"\epoc32\release\armv5\udeb\glxdatasourcemanager.dll"           -"!:\sys\bin\glxdatasourcemanager.dll"
-"\epoc32\release\armv5\udeb\glxdatasourcemde.dll"               -"!:\sys\bin\glxdatasourcemde.dll"
-"\epoc32\data\Z\resource\plugins\glxdatasourcemde.rsc"               -"!:\resource\plugins\glxdatasourcemde.rsc"
-;"\epoc32\release\armv5\udeb\glxdatasourcetest.dll"              -"!:\sys\bin\glxdatasourcetest.dll"
-;"\epoc32\data\Z\resource\plugins\glxdatasourcetest.rsc"               -"!:\resource\plugins\glxdatasourcetest.rsc"
-"\epoc32\release\armv5\udeb\glxcollectionpluginalbums.dll"       -"!:\sys\bin\glxcollectionpluginalbums.dll"
-"\epoc32\data\Z\resource\plugins\glxcollectionpluginalbums.rsc"  -"!:\resource\plugins\glxcollectionpluginalbums.rsc"
-"\epoc32\data\Z\resource\plugins\glxpluginalbums.rsc"  					 -"!:\resource\plugins\glxpluginalbums.rsc"
-;"\epoc32\release\armv5\udeb\glxalbumcollectionplugin.dll"       -"!:\sys\bin\glxalbumcollectionplugin.dll"
-;"\epoc32\release\armv5\udeb\glxtestcollectionplugin.dll"       -"!:\sys\bin\glxtestcollectionplugin.dll"
-;"\epoc32\data\Z\resource\plugins\glxtestcollectionplugin.rsc"  -"!:\resource\plugins\glxtestcollectionplugin.rsc"
-;"\epoc32\data\Z\resource\plugins\glxalbumcollectionplugin.rsc"  -"!:\resource\plugins\glxalbumcollectionplugin.rsc"
-"\epoc32\release\armv5\udeb\glxcollectionpluginall.dll"         -"!:\sys\bin\glxcollectionpluginall.dll"
-"\epoc32\data\Z\resource\plugins\glxcollectionpluginall.rsc"    -"!:\resource\plugins\glxcollectionpluginall.rsc"
-"\epoc32\data\Z\resource\plugins\glxpluginall.rsc"  					 -"!:\resource\plugins\glxpluginall.rsc"
-"\epoc32\release\armv5\udeb\glxcollectionplugincamera.dll"         -"!:\sys\bin\glxcollectionplugincamera.dll"
-"\epoc32\data\Z\resource\plugins\glxcollectionplugincamera.rsc"    -"!:\resource\plugins\glxcollectionplugincamera.rsc"
-"\epoc32\data\Z\resource\plugins\glxplugincamera.rsc"  					 -"!:\resource\plugins\glxplugincamera.rsc"
-"\epoc32\release\armv5\udeb\glxcollectionplugindownloads.dll"         -"!:\sys\bin\glxcollectionplugindownloads.dll"
-"\epoc32\data\Z\resource\plugins\glxcollectionplugindownloads.rsc"    -"!:\resource\plugins\glxcollectionplugindownloads.rsc"
-"\epoc32\data\Z\resource\plugins\glxplugindownloads.rsc"  					 -"!:\resource\plugins\glxplugindownloads.rsc"
-"\epoc32\release\armv5\udeb\glxcollectionpluginmonths.dll"         -"!:\sys\bin\glxcollectionpluginmonths.dll"
-"\epoc32\data\Z\resource\plugins\glxcollectionpluginmonths.rsc"    -"!:\resource\plugins\glxcollectionpluginmonths.rsc"
-"\epoc32\data\Z\resource\plugins\glxpluginmonths.rsc"  					 -"!:\resource\plugins\glxpluginmonths.rsc"
-"\epoc32\release\armv5\udeb\glxzoomview.dll"         -"!:\sys\bin\glxzoomview.dll"
-
-"\epoc32\release\armv5\udeb\glxthumbnailcomposerplugin.dll"     -"!:\sys\bin\glxthumbnailcomposerplugin.dll"
-"\epoc32\data\Z\resource\plugins\glxthumbnailcomposerplugin.rsc" -"!:\resource\plugins\glxthumbnailcomposerplugin.rsc"
-
-"\epoc32\release\armv5\udeb\glxlayouts.dll"                     -"!:\sys\bin\glxlayouts.dll"
-"\epoc32\release\armv5\udeb\glxmedialists.dll"            -"!:\sys\bin\glxmedialists.dll"
-"\epoc32\release\armv5\udeb\glxvisuallistmanager.dll"           -"!:\sys\bin\glxvisuallistmanager.dll"
-"\epoc32\release\armv5\udeb\glxuiutilities.dll"                 -"!:\sys\bin\glxuiutilities.dll"
-"\epoc32\data\z\resource\apps\glxuiutilities.rsc"               -"!:\resource\apps\glxuiutilities.rsc"
-"\epoc32\release\armv5\udeb\glxdrmutility.dll"                 -"!:\sys\bin\glxdrmutility.dll"
-
-"\epoc32\release\armv5\udeb\glxtileview.dll"                    -"!:\sys\bin\glxtileview.dll"
-"\epoc32\data\z\resource\apps\glxtileviewdata.rsc"              -"!:\resource\apps\glxtileviewdata.rsc"
-"\epoc32\data\z\resource\apps\glxdownloadtext.rsc"              -"!:\resource\apps\glxdownloadtext.rsc"
-"\epoc32\release\armv5\udeb\glxtileviewpluginbase.dll"          -"!:\sys\bin\glxtileviewpluginbase.dll"
-"\epoc32\release\armv5\udeb\glxtileviewplugin.dll"              -"!:\sys\bin\glxtileviewplugin.dll"
-"\epoc32\data\Z\resource\plugins\glxtileviewplugin.rsc"         -"!:\resource\plugins\glxtileviewplugin.rsc"
-
-"\epoc32\release\armv5\udeb\glxfullscreenview.dll"              -"!:\sys\bin\glxfullscreenview.dll"
-"\epoc32\release\armv5\udeb\glxfullscreenviewpluginbase.dll"    -"!:\sys\bin\glxfullscreenviewpluginbase.dll"
-"\epoc32\release\armv5\udeb\glxfullscreenviewplugin.dll"        -"!:\sys\bin\glxfullscreenviewplugin.dll"
-"\epoc32\data\z\resource\apps\glxfullscreenviewdata.rsc"        -"!:\resource\apps\glxfullscreenviewdata.rsc"
-"\epoc32\data\Z\resource\plugins\glxfullscreenviewplugin.rsc"   -"!:\resource\plugins\glxfullscreenviewplugin.rsc"
-
-"\epoc32\release\armv5\udeb\glxlistview.dll"                    -"!:\sys\bin\glxlistview.dll"
-"\epoc32\data\z\resource\apps\glxlistviewplugin.rsc"            -"!:\resource\apps\glxlistviewplugin.rsc"
-"\epoc32\release\armv5\udeb\glxlistviewpluginbase.dll"          -"!:\sys\bin\glxlistviewpluginbase.dll"
-"\epoc32\release\armv5\udeb\glxlistviewplugin.dll"              -"!:\sys\bin\glxlistviewplugin.dll"
-"\epoc32\data\Z\resource\plugins\glxlistviewplugin.rsc"         -"!:\resource\plugins\glxlistviewplugin.rsc"
-
-"\epoc32\data\z\private\10202be9\200071d3.txt"           -"!:\system\data\10202BE9\200071d3.txt"
-
-;Files for the VIA Player component
-"\epoc32\release\armv5\udeb\glxvideoplaybackviewplugin.dll"     -"!:\sys\bin\glxvideoplaybackviewplugin.dll"
-"\epoc32\data\Z\resource\plugins\glxvideoplaybackviewplugin.rsc"-"!:\resource\plugins\glxvideoplaybackviewplugin.rsc"
-;"\epoc32\release\armv5\udeb\ViaPlayerCore.dll"                  -"!:\sys\bin\ViaPlayerCore.dll"
-;"\epoc32\release\armv5\udeb\ViaPlayerDefaultView.dll"           -"!:\sys\bin\ViaPlayerDefaultView.dll"
-;"\epoc32\data\z\resource\apps\ViaPlayerDefaultView.Rsc"         -"!:\resource\apps\ViaPlayerDefaultView.Rsc"
-;"\epoc32\release\armv5\udeb\ViaPlayerUtilities.dll"             -"!:\sys\bin\ViaPlayerUtilities.dll"
-;"\epoc32\data\z\resource\apps\ViaPlayerUtilities.Rsc"           -"!:\resource\apps\ViaPlayerUtilities.Rsc"
-;"\epoc32\data\z\resource\apps\ViaPlayerUtilities.mif"		        -"!:\resource\apps\ViaPlayerUtilities.mif"
-;"\epoc32\release\armv5\udeb\ViaPlayerControllerBase.dll"        -"!:\sys\bin\ViaPlayerControllerBase.dll"
-;"\epoc32\data\z\resource\apps\ViaPlayer.mif"                    -"!:\resource\apps\ViaPlayer.mif"
-;"\epoc32\release\armv5\udeb\ViaDlProgressController.dll"        -"!:\sys\bin\ViaDlProgressController.dll"
-;"\epoc32\data\z\resource\plugins\ViaDlProgressController.Rsc"   -"!:\resource\plugins\ViaDlProgressController.Rsc"
-
-; Glx logging client
-"\epoc32\release\armv5\udeb\glxlogging.dll"-"!:\sys\bin\glxlogging.dll"
-; Glx logging app
-"\epoc32\release\armv5\udeb\glxloggingapp.exe"-"!:\sys\bin\glxloggingapp.exe"
-"\epoc32\data\z\private\10003a3f\apps\glxloggingapp_reg.rsc"-"!:\private\10003a3f\import\apps\glxloggingapp_reg.rsc"		
-"\epoc32\data\z\resource\apps\glxloggingapp_loc.rsc"-"!:\resource\apps\glxloggingapp_loc.rsc"
-"\epoc32\data\z\resource\apps\glxloggingapp.rsc"-"!:\resource\apps\glxloggingapp.rsc"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gallery/sis/photos.pkg	Thu Jul 22 16:33:32 2010 +0100
@@ -0,0 +1,130 @@
+;
+; 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:   Package file for project Gallery
+;
+
+; -------- general --------
+
+; Languages
+&EN
+
+; Package header
+#{"photos"},(0x20000A14),2, 1, 0, TYPE=SA ,RU
+
+; Localised Vendor name
+%{"Nokia, Qt"}
+
+; Unique Vendor name
+:"Nokia, Qt"
+
+; Manual PKG pre-rules from PRO files
+; Default dependency to Qt libraries
+(0x2001E61C), 4, 5, 0, {"Qt"}
+
+; Default HW/platform dependencies
+[0x101F7961],0,0,0,{"S60ProductID"}
+[0x102032BE],0,0,0,{"S60ProductID"}
+[0x102752AE],0,0,0,{"S60ProductID"}
+[0x1028315F],0,0,0,{"S60ProductID"}
+ 
+
+; Executable and default resource files
+"\epoc32\release\armv5\urel\photos.exe"    						- "!:\sys\bin\photos.exe"
+"\epoc32\data\z\resource\apps\photos.rsc"    					- "!:\resource\apps\photos.rsc"
+"\epoc32\data\z\private\10003a3f\import\apps\photos_reg.rsc"    - "!:\private\10003a3f\import\apps\photos_reg.rsc"
+"\epoc32\data\z\resource\apps\photos.mif"    					- "!:\resource\apps\photos.mif"
+
+; -------- files --------
+"\epoc32\release\armv5\urel\glxcommonui.dll"                   		-"!:\sys\bin\glxcommonui.dll"
+"\epoc32\release\armv5\urel\glxcommon.dll"                     		-"!:\sys\bin\glxcommon.dll"
+
+; datasource
+"\epoc32\release\armv5\urel\glxdatasourcemanager.dll"          		-"!:\sys\bin\glxdatasourcemanager.dll"
+"\epoc32\release\armv5\urel\glxdatasourcemde.dll"              		-"!:\sys\bin\glxdatasourcemde.dll"
+"\epoc32\data\Z\resource\plugins\glxdatasourcemde.rsc"              -"!:\resource\plugins\glxdatasourcemde.rsc"
+
+; Collection plugins
+"\epoc32\release\armv5\urel\glxcollectionpluginalbums.dll"      	-"!:\sys\bin\glxcollectionpluginalbums.dll"
+"\epoc32\data\Z\resource\plugins\glxcollectionpluginalbums.rsc" 	-"!:\resource\plugins\glxcollectionpluginalbums.rsc"
+"\epoc32\data\Z\resource\plugins\glxpluginalbums.rsc"  				-"!:\resource\plugins\glxpluginalbums.rsc"
+
+"\epoc32\release\armv5\urel\glxcollectionpluginall.dll"         	-"!:\sys\bin\glxcollectionpluginall.dll"
+"\epoc32\data\Z\resource\plugins\glxcollectionpluginall.rsc"    	-"!:\resource\plugins\glxcollectionpluginall.rsc"
+"\epoc32\data\Z\resource\plugins\glxpluginall.rsc"  				-"!:\resource\plugins\glxpluginall.rsc"
+
+"\epoc32\release\armv5\urel\glxcollectionplugincamera.dll"      	-"!:\sys\bin\glxcollectionplugincamera.dll"
+"\epoc32\data\Z\resource\plugins\glxcollectionplugincamera.rsc" 	-"!:\resource\plugins\glxcollectionplugincamera.rsc"
+"\epoc32\data\Z\resource\plugins\glxplugincamera.rsc"  				-"!:\resource\plugins\glxplugincamera.rsc"
+
+"\epoc32\release\armv5\urel\glxcollectionplugindownloads.dll"   	-"!:\sys\bin\glxcollectionplugindownloads.dll"
+"\epoc32\data\Z\resource\plugins\glxcollectionplugindownloads.rsc"  -"!:\resource\plugins\glxcollectionplugindownloads.rsc"
+"\epoc32\data\Z\resource\plugins\glxplugindownloads.rsc"  			-"!:\resource\plugins\glxplugindownloads.rsc"
+
+"\epoc32\release\armv5\urel\glxcollectionpluginmonths.dll"         -"!:\sys\bin\glxcollectionpluginmonths.dll"
+"\epoc32\data\Z\resource\plugins\glxcollectionpluginmonths.rsc"    -"!:\resource\plugins\glxcollectionpluginmonths.rsc"
+"\epoc32\data\Z\resource\plugins\glxpluginmonths.rsc"  			   -"!:\resource\plugins\glxpluginmonths.rsc"
+
+"\epoc32\release\armv5\urel\glxcollectionplugintags.dll"          	-"!:\sys\bin\glxcollectionplugintags.dll"
+"\epoc32\data\Z\resource\plugins\glxcollectionplugintags.rsc"      	-"!:\resource\plugins\glxcollectionplugintags.rsc"
+"\epoc32\data\Z\resource\plugins\glxplugintags.rsc"  			    -"!:\resource\plugins\glxplugintags.rsc"
+
+"\epoc32\release\armv5\urel\glxcollectionpluginimageviewer.dll"              -"!:\sys\bin\glxcollectionpluginimageviewer.dll"
+"\epoc32\data\Z\resource\plugins\glxcollectionpluginimageviewer.rsc"         -"!:\resource\plugins\glxcollectionpluginimageviewer.rsc"
+
+; Glx logging client
+"\epoc32\release\armv5\urel\glxlogging.dll"					-"!:\sys\bin\glxlogging.dll"
+
+; commandhandler
+"\epoc32\release\armv5\urel\glxcommandhandlerbase.dll"      -"!:\sys\bin\glxcommandhandlerbase.dll"
+"\epoc32\release\armv5\urel\glxcommoncommandhandlers.dll"   -"!:\sys\bin\glxcommoncommandhandlers.dll"
+
+; engines
+"\epoc32\release\armv5\urel\glxtvout.dll"            		-"!:\sys\bin\glxtvout.dll"
+"\epoc32\release\armv5\urel\glxmedialists.dll"            	-"!:\sys\bin\glxmedialists.dll"
+"\epoc32\release\armv5\urel\glxdrmutility.dll"              -"!:\sys\bin\glxdrmutility.dll"
+
+; viewmanagement
+"\epoc32\release\armv5\urel\glxstatehandler.dll"        	-"!:\sys\bin\glxstatehandler.dll"
+"\epoc32\release\armv5\urel\glxviewmanager.dll"        		-"!:\sys\bin\glxviewmanager.dll"
+
+;qt dlls
+"\epoc32\release\armv5\urel\glxdrmutilitywrapper.dll"	   -"!:\sys\bin\glxdrmutilitywrapper.dll"
+"\epoc32\release\armv5\urel\glxexternalutility.dll"        -"!:\sys\bin\glxexternalutility.dll"
+"\epoc32\release\armv5\urel\glximagedecoderwrapper.dll"    -"!:\sys\bin\glximagedecoderwrapper.dll"
+"\epoc32\release\armv5\urel\glxtvoutwrapper.dll"           -"!:\sys\bin\glxtvoutwrapper.dll"
+"\epoc32\release\armv5\urel\glxmedialistwrapper.dll"       -"!:\sys\bin\glxmedialistwrapper.dll"
+"\epoc32\release\armv5\urel\glxfavmediamodel.dll"          -"!:\sys\bin\glxfavmediamodel.dll"
+"\epoc32\release\armv5\urel\glxmediamodel.dll"        	   -"!:\sys\bin\glxmediamodel.dll"
+"\epoc32\release\armv5\urel\glxlistmodel.dll"              -"!:\sys\bin\glxlistmodel.dll"
+"\epoc32\release\armv5\urel\glxmodelwrapper.dll"           -"!:\sys\bin\glxmodelwrapper.dll"
+"\epoc32\release\armv5\urel\glxloggerqt.dll"               -"!:\sys\bin\glxloggerqt.dll"
+"\epoc32\release\armv5\urel\glxviews.dll"                  -"!:\sys\bin\glxviews.dll"
+"\epoc32\release\armv5\urel\glxviewutilities.dll"          -"!:\sys\bin\glxviewutilities.dll"
+"\epoc32\release\armv5\urel\glxzoomwidget.dll"             -"!:\sys\bin\glxzoomwidget.dll"
+"\epoc32\release\armv5\urel\detailsnamelabel.dll"          -"!:\sys\bin\detailsnamelabel.dll"
+"\epoc32\release\armv5\urel\detailsnamelabelplugin.dll"    -"!:\sys\bin\detailsnamelabelplugin.dll"
+"\epoc32\release\armv5\urel\detailsdescriptionedit.dll"    -"!:\sys\bin\detailsdescriptionedit.dll"
+"\epoc32\release\armv5\urel\detailsdescriptioneditplugin.dll" -"!:\sys\bin\detailsdescriptioneditplugin.dll"
+
+;translations
+"\epoc32\data\z\resource\qt\translations\photos_en.qm"     -"!:\resource\qt\translations\photos.qm"
+
+;cenrep
+"\epoc32\data\Z\private\10202BE9\20007194.txt"			   -"!:\private\10202BE9\20007194.txt"		
+"\epoc32\data\Z\private\10202BE9\20007193.txt"			   -"!:\private\10202BE9\20007193.txt"		
+
+;splash screen
+"\epoc32\data\z\resource\hb\splashml\photos.splashml"  				-"!:\resource\hb\splashml\photos.splashml"
+"\epoc32\data\z\resource\hb\splashml\photos.docml"  					-"!:\resource\hb\splashml\photos.docml"
+
Binary file gallery/sis/photos.sis has changed
Binary file gallery/sis/photos.sisx has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gallery/sis/photos_stub.pkg	Thu Jul 22 16:33:32 2010 +0100
@@ -0,0 +1,117 @@
+;
+; 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:   Stub package file for project Gallery
+;
+
+; -------- general --------
+
+; Languages
+&EN
+
+; Package header
+#{"photos"},(0x20000A14),1,0,0,TYPE=SA
+
+; Localised Vendor name
+%{"Nokia, Qt"}
+
+; Unique Vendor name
+:"Nokia, Qt"
+
+"" - "z:\sys\bin\photos.exe"		
+"" - "z:\private\10003a3f\import\apps\photos_reg.rsc"
+"" - "z:\resource\apps\photos.rsc"
+"" - "z:\resource\apps\photos.mif"
+
+; -------- files --------
+; engines
+"" - "z:\sys\bin\glxcommonui.dll"
+"" - "z:\sys\bin\glxcommon.dll"
+
+; datasource
+"" - "z:\sys\bin\glxdatasourcemanager.dll"
+"" - "z:\sys\bin\glxdatasourcemde.dll"
+"" - "z:\resource\plugins\glxdatasourcemde.rsc"
+
+; collection plugins
+"" - "z:\sys\bin\glxcollectionpluginalbums.dll"
+"" - "z:\resource\plugins\glxcollectionpluginalbums.rsc"
+"" - "z:\resource\plugins\glxpluginalbums.rsc"
+
+"" - "z:\sys\bin\glxcollectionpluginall.dll"
+"" - "z:\resource\plugins\glxcollectionpluginall.rsc"
+"" - "z:\resource\plugins\glxpluginall.rsc"
+
+"" - "z:\sys\bin\glxcollectionplugincamera.dll"
+"" - "z:\resource\plugins\glxcollectionplugincamera.rsc"
+"" - "z:\resource\plugins\glxplugincamera.rsc"
+
+"" - "z:\sys\bin\glxcollectionplugindownloads.dll"
+"" - "z:\resource\plugins\glxcollectionplugindownloads.rsc"
+"" - "z:\resource\plugins\glxplugindownloads.rsc"
+
+"" - "z:\sys\bin\glxcollectionpluginmonths.dll"
+"" - "z:\resource\plugins\glxcollectionpluginmonths.rsc"
+"" - "z:\resource\plugins\glxpluginmonths.rsc"
+
+"" - "z:\sys\bin\glxcollectionplugintags.dll"
+"" - "z:\resource\plugins\glxcollectionplugintags.rsc"
+"" - "z:\resource\plugins\glxplugintags.rsc"
+
+"" - "z:\sys\bin\glxcollectionpluginimageviewer.dll"
+"" - "z:\resource\plugins\glxcollectionpluginimageviewer.rsc"
+
+; Glx logging client
+"" - "z:\sys\bin\glxlogging.dll"
+
+; commandhandlers
+"" - "z:\sys\bin\glxcommandhandlerbase.dll"
+"" - "z:\sys\bin\glxcommoncommandhandlers.dll"
+
+;engines
+"" - "z:\sys\bin\glxdrmutility.dll"
+"" - "z:\sys\bin\glxmedialists.dll"
+"" - "z:\sys\bin\glxtvout.dll"
+
+; viewmanagement
+"" - "z:\sys\bin\glxstatehandler.dll"
+"" - "z:\sys\bin\glxviewmanager.dll"
+
+; qt dlls
+"" - "z:\sys\bin\glxdrmutilitywrapper.dll"
+"" - "z:\sys\bin\glxexternalutility.dll"
+"" - "z:\sys\bin\glximagedecoderwrapper.dll"
+"" - "z:\sys\bin\glxloggerqt.dll"
+"" - "z:\sys\bin\glxtvoutwrapper.dll"
+"" - "z:\sys\bin\glxmedialistwrapper.dll"
+"" - "z:\sys\bin\glxlistmodel.dll"
+"" - "z:\sys\bin\glxfavmediamodel.dll"
+"" - "z:\sys\bin\glxlistmodel.dll"
+"" - "z:\sys\bin\glxmodelwrapper.dll"
+"" - "z:\sys\bin\glxviews.dll"
+"" - "z:\sys\bin\glxviewutilities.dll"
+"" - "z:\sys\bin\glxzoomwidget.dll"
+"" - "z:\sys\bin\detailsnamelabel.dll"
+"" - "z:\sys\bin\detailsnamelabelplugin.dll"
+"" - "z:\sys\bin\detailsdescriptionedit.dll"
+"" - "z:\sys\bin\detailsdescriptioneditplugin.dll"
+
+"" - "z:\private\10202BE9\20007194.txt"
+"" - "z:\private\10202BE9\20007193.txt"
+
+"" - "z:\resource\qt\translations\photos.qm"
+
+
+;splashscreen
+"" - "z:\resource\hb\splashml\photos.splashml"
+"" - "z:\resource\hb\splashml\photos.docml"
Binary file gallery/sis/photos_stub.sis has changed
--- a/gallery/sis/photosqt_stub.pkg	Wed Jun 16 13:08:54 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,92 +0,0 @@
-;
-; 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:   Package file for project Gallery
-;
-
-; -------- general --------
-
-; Languages
-&EN
-
-; Package header
-#{"photos"},(0x200009EE),1,0,0,TYPE=SA
-
-;Localised Vendor name
-%{"Nokia"}
-
-;Unique Vendor name
-:"Nokia"
-
-; Dependency for S60 3.0
-[0x101F7961],0,0,0,{"Series60v3.0"}
-
-; -------- files --------
-
-; NOTE: This installation package does not include huitoolkit.dll,
-; so you have to install it separately!
-
-
-""-"z:\sys\bin\glxcollectionplugintags.dll"
-""-"z:\resource\plugins\glxcollectionplugintags.rsc"
-""-"z:\resource\plugins\glxplugintags.rsc"
-""-"z:\sys\bin\glxcommon.dll"
-""-"z:\sys\bin\glxcommonui.dll"
-""-"z:\sys\bin\glxdatasourcemanager.dll"
-""-"z:\sys\bin\glxdatasourcemde.dll"
-""-"z:\resource\plugins\glxdatasourcemde.rsc"
-""-"z:\sys\bin\glxcollectionpluginalbums.dll"
-""-"z:\resource\plugins\glxcollectionpluginalbums.rsc"
-""-"z:\resource\plugins\glxpluginalbums.rsc"
-""-"z:\sys\bin\glxcollectionpluginall.dll"
-""-"z:\resource\plugins\glxcollectionpluginall.rsc"
-""-"z:\resource\plugins\glxpluginall.rsc"
-""-"z:\sys\bin\glxcollectionplugincamera.dll"
-""-"z:\resource\plugins\glxcollectionplugincamera.rsc"
-""-"z:\resource\plugins\glxplugincamera.rsc"
-""-"z:\sys\bin\glxcollectionplugindownloads.dll"
-""-"z:\resource\plugins\glxcollectionplugindownloads.rsc"
-""-"z:\resource\plugins\glxplugindownloads.rsc"
-""-"z:\sys\bin\glxcollectionpluginmonths.dll"
-""-"z:\resource\plugins\glxcollectionpluginmonths.rsc"
-""-"z:\resource\plugins\glxpluginmonths.rsc"
-
-
-""-"z:\sys\bin\glxmedialists.dll"
-
-""-"z:\sys\bin\glxdrmutility.dll"
-
-; Glx logging client
-""-"z:\sys\bin\glxlogging.dll"
-
-
-""-"z:\sys\bin\photos.exe"
-""-"z:\private\10003a3f\import\apps\photos_reg.rsc"		
-""-"z:\resource\apps\photos.rsc"
-""- "z:\resource\apps\0xE2C223D9.mif"
-
-;qt dlls
-""-"z:\sys\bin\glxtvoutwrapper.dll"
-""-"z:\sys\bin\glxmedialistwrapper.dll"
-""-"z:\sys\bin\glxmodelwrapper.dll"
-""-"z:\sys\bin\glxexternalutility.dll"
-""-"z:\sys\bin\glxmediamodel.dll"
-""-"z:\sys\bin\glxlistmodel.dll"
-""-"z:\sys\bin\glxstatehandler.dll"
-""-"z:\sys\bin\glxviewmanager.dll"
-""-"z:\sys\bin\glxviews.dll"
-""-"z:\sys\bin\glxloggerqt.dll"
-""-"z:\sys\bin\glximagedecoderwrapper.dll"
-
-""-"z:\sys\bin\glxcommandhandlerbase.dll"
-""-"z:\sys\bin\glxcommoncommandhandlers.dll"
Binary file gallery/sis/photosqt_stub.sis has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gallery/sis/readme.txt	Thu Jul 22 16:33:32 2010 +0100
@@ -0,0 +1,38 @@
+/*
+* 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: Indrajit Tapadar
+*
+* Description:   Readme file is a help file to know more about the folder, its files and usage
+*
+*/
+
+This file contains the sis package installations for Photos on Qt.
+
+About the files :
+
+Photos.pkg : This contains all the information regarding the photos as a package. all new dll's should 
+	     be added to this file without fail.
+
+Photos_stub.pkg : This conatins the dll names which needs to be updated later with a sis package.
+		Any New addition of Dll's also should be added here.
+		Remember , This package is used to create a photos_stub.sis file which is then exported to
+		the install directory in epoc, which is again read from the iby file to be passed in rom image.
+
+RDTest_02.key : Key for making a sisx file
+RDTest_02.cert : certificate for creating a sisx file.
+
+Createsis.bat : this file conatins the procedure of creating the Photos_stub.sis file and Photos.sisx file.
+		The former is passed to the install directory wheras the later is installed on phone.
+	
+
+After any new addition of dll's please do not forget to update the photos_stub.sis file and also checkin the latest 
+	file.
\ No newline at end of file
--- a/inc/glxfiltergeneraldefs.h	Wed Jun 16 13:08:54 2010 +0100
+++ b/inc/glxfiltergeneraldefs.h	Thu Jul 22 16:33:32 2010 +0100
@@ -86,6 +86,7 @@
 const TMPXAttributeData KGlxFilterGeneralOrigin = { KGlxFilterIdGeneral, EGlxFilterOrigin }; /// TGlxFilterOrigin
 const TMPXAttributeData KGlxFilterGeneralNoDRM = { KGlxFilterIdGeneral, EGlxFilterNoDRM }; /// TBool
 const TMPXAttributeData KGlxFilterGeneralNavigationalStateOnly = { KGlxFilterIdGeneral, 0x4000 }; /// TBool
+const TMPXAttributeData KGlxFilterGeneralMaxCount = { KGlxFilterIdGeneral, 0x8000 }; // TInt
 
 enum TGlxFilterSortOrder
     {
@@ -122,7 +123,8 @@
 	{
 	EGlxFilterOriginNotUsed=0,
 	EGlxFilterOriginCamera,
-	EGlxFilterOriginDownload
+	EGlxFilterOriginDownload,
+	EGlxFilterOriginAll
 	};
 
 #endif // __T_GLXFILTERGENERALDEFS_H__
--- a/inc/glxfilterproperties.h	Wed Jun 16 13:08:54 2010 +0100
+++ b/inc/glxfilterproperties.h	Thu Jul 22 16:33:32 2010 +0100
@@ -43,6 +43,7 @@
 				iContainsItem(0),
 				iExcludeAnimation(EFalse),
 				iLastCaptureDate(EFalse),
+				iMaxCount(KMaxTUint),
 				iThumbnailLoadability(0,0),
 				iPath(NULL),
 				iItemType(EGlxFilterVideoAndImages),
@@ -62,6 +63,7 @@
 	TGlxMediaId iContainsItem;
 	TBool iExcludeAnimation;
 	TBool iLastCaptureDate;
+	TInt iMaxCount;
 	TSize iThumbnailLoadability;
 	CMPXCollectionPath* iPath; 
 	TGlxFilterItemType iItemType;
--- a/inc/glxlocalisationstrings.h	Wed Jun 16 13:08:54 2010 +0100
+++ b/inc/glxlocalisationstrings.h	Thu Jul 22 16:33:32 2010 +0100
@@ -18,6 +18,7 @@
 #ifndef GLXLOCALISATIONSTRINGS_H_
 #define GLXLOCALISATIONSTRINGS_H_
 
+#include "hbglobal.h"
 
 //OPTIONS MENU
 //Options list item
@@ -74,21 +75,23 @@
 //
 #define GLX_MENU_RENAME                hbTrId("txt_common_menu_rename_item")
 
+#define GLX_DIALOG_NAME_PROMPT                hbTrId("txt_photos_title_enter_name")
 
+#define GLX_DIALOG_ALBUM_NAME_DEFAULT         hbTrId("txt_photos_dialog_enter_name_entry_album")
+#define GLX_DIALOG_DELETE_ONE_ITEM            hbTrId("txt_photos_info_deleting_1")
 //TITLE RELATED and DEFAULT STRINGS
 
 #define GLX_CAPTION                    hbTrId("txt_short_caption_photos")
 #define GLX_TITLE                      hbTrId("txt_photos_title_photos")
-#define GLX_CAMERA                     "txt_photos_dblist_my_camera"
-#define GLX_MYFAV                      "txt_photos_dblist_my_favorites"
 #define GLX_PLACES                     "txt_photos_dblist_places_ln"
 #define GLX_ITEMS_CAMERA               "txt_photos_dblist_val_ln_items"
 #define GLX_ITEMS_MYFAV                "txt_photos_subtitle_ln_items"
 #define GLX_SUBTITLE_CAM_GRIDVIEW      hbTrId("txt_photos_subtitle_my_camera")
 #define GLX_SUBTITLE_MYFAV_GRIDVIEW    hbTrId("txt_photos_subtitle_my_favorites")
 #define GLX_SUBTITLE_NOITEMS           hbTrId("txt_photos_subtitle_no_image_or_videos_to_display")
-
-
+#define GLX_FETCHER_TITLE              QString("Select Image")
+#define GLX_GRID_NO_IMAGE              QString("(No Images)\n")
+#define GLX_GRID_OPEN_CAMERA           QString("To capture images Open")
 //VIEW RELATED STRINGS AND COMMON DIALOGS
 
 //comments lable for photos flip view
@@ -106,5 +109,14 @@
 
 #define GLX_MENU_OPEN                hbTrId("txt_common_menu_open")
 
+#define GLX_BUTTON_HIDE              hbTrId("txt_common_button_hide")
+
+#define GLX_LABEL_TRANSITION_EFFECT  hbTrId("txt_photos_setlabel_transistion_effect")
+#define GLX_VAL_SMOOTH_FADE          hbTrId("txt_photos_setlabel_transistion_effect_val_smooth")
+
+#define GLX_LABEL_TRANSITION_DELAY   hbTrId("txt_photos_setlabel_transistion_delay")
+#define GLX_VAL_SLOW                 hbTrId("txt_photos_setlabel_transistion_delay_val_slow")
+#define GLX_VAL_MEDIUM               hbTrId("txt_photos_setlabel_transistion_delay_val_medium")
+#define GLX_VAL_FAST                 hbTrId("txt_photos_setlabel_transistion_delay_val_fast")
 
 #endif /* GLXLOCALISATIONSTRINGS_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/inc/glxsymbianlocalisationstrings.h	Thu Jul 22 16:33:32 2010 +0100
@@ -0,0 +1,26 @@
+/*
+* 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:  Localisation strings
+*
+*/
+
+#ifndef GLXSYMBIANLOCALISATIONSTRINGS_H_
+#define GLXSYMBIANLOCALISATIONSTRINGS_H_
+
+//SYMBIAN RELATED LOCALISATION STRINGS
+_LIT(KNoImages,"txt_photos_grid_no_images"); 
+_LIT(KCameraText,"txt_photos_dblist_my_camera");
+_LIT(KMyFavText,"txt_photos_dblist_my_favorites");	
+
+#endif /* GLXSYMBIANLOCALISATIONSTRINGS_H_*/
\ No newline at end of file
--- a/inc/glxtvconstants.h	Wed Jun 16 13:08:54 2010 +0100
+++ b/inc/glxtvconstants.h	Thu Jul 22 16:33:32 2010 +0100
@@ -30,7 +30,8 @@
     {
     ETvConnectionChanged = 0,
     ETvDisplayIsVisible,
-    ETvDisplayNotVisible
+    ETvDisplayNotVisible,
+    EDisconnected
     };
 
 /** TV size constants */
--- a/loggers/loggerqt/loggerqt.pro	Wed Jun 16 13:08:54 2010 +0100
+++ b/loggers/loggerqt/loggerqt.pro	Thu Jul 22 16:33:32 2010 +0100
@@ -30,7 +30,8 @@
 INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
 TARGET.UID3 = 0x20000A15
 TARGET.EPOCALLOWDLLDATA = 1
-TARGET.CAPABILITY = ALL -TCB \
+TARGET.CAPABILITY = ALL -TCB
+MMP_RULES += SMPSAFE 
 }
 
 
@@ -40,4 +41,13 @@
            
 SOURCES += src/glxperformancelog.cpp
 
+defBlock = \      
+"$${LITERAL_HASH}if defined(EABI)" \
+"DEFFILE  ../eabi/glxloggerqt.def" \
+	 "$${LITERAL_HASH}else" \
+	 "DEFFILE  ../bwins/glxloggerqt.def" \
+             "$${LITERAL_HASH}endif"
+	
+MMP_RULES += defBlock
+
 # Directories
--- a/loggers/logging/app/group/glxloggingapp.mmp	Wed Jun 16 13:08:54 2010 +0100
+++ b/loggers/logging/app/group/glxloggingapp.mmp	Thu Jul 22 16:33:32 2010 +0100
@@ -70,3 +70,5 @@
 TARGETPATH /resource/apps
 LANGUAGE_IDS
 END
+
+SMPSAFE
\ No newline at end of file
--- a/loggers/logging/client/group/glxlogging.mmp	Wed Jun 16 13:08:54 2010 +0100
+++ b/loggers/logging/client/group/glxlogging.mmp	Thu Jul 22 16:33:32 2010 +0100
@@ -44,3 +44,5 @@
 #ifndef WINSCW
 EPOCALLOWDLLDATA
 #endif
+
+SMPSAFE
\ No newline at end of file
--- a/loggers/logging/client/test/group/t_glxlogging.mmp	Wed Jun 16 13:08:54 2010 +0100
+++ b/loggers/logging/client/test/group/t_glxlogging.mmp	Thu Jul 22 16:33:32 2010 +0100
@@ -55,5 +55,5 @@
 #ifndef WINSCW
 EPOCALLOWDLLDATA
 #endif
-
+SMPSAFE
 // End of file
--- a/main/glxaiwservicehandler.cpp	Wed Jun 16 13:08:54 2010 +0100
+++ b/main/glxaiwservicehandler.cpp	Thu Jul 22 16:33:32 2010 +0100
@@ -21,6 +21,7 @@
 #include <hbaction.h>
 #include <hbtoolbar.h>
 #include <hbstyleloader.h>
+#include <hbnotificationdialog.h>
 
 #include <QtDebug>
 #include <Qt>
@@ -42,6 +43,7 @@
 #include <glxexternalutility.h>
 #include "glxlocalisationstrings.h"
 #include <xqaiwdeclplat.h>
+#include <xqappmgr.h>
 
 #define IMAGE_FETCHER_SERVICE_NAME QLatin1String("photos.com.nokia.symbian.IImageFetch")
 #define IMAGE_FETCHER_SERVICE_DEPINTERFACE_NAME QLatin1String("photos.Image")
@@ -65,11 +67,22 @@
     mDSDIService(NULL),
     mImageViewerService(NULL)
     {
-    mFetcherService = new GlxGetImageService(this);
-    mNSDIService = new GlxGetImageServiceNSDI(this);
-    mDSDIService = new GlxGetImageServiceDSDI(this);
-    
-    mImageViewerService = new GlxImageViewerService(this);
+    QString currentInterfaceName = XQServiceUtil::interfaceName();
+    if( 0 == currentInterfaceName.compare(QLatin1String("com.nokia.symbian.IImageFetch")))
+        {
+        mFetcherService = new GlxGetImageService(this);
+        }
+    else if( 0 == currentInterfaceName.compare(QLatin1String("Image")))
+        {
+        mNSDIService = new GlxGetImageServiceNSDI(this);
+        mDSDIService = new GlxGetImageServiceDSDI(this);
+        }
+    else if( 0 == currentInterfaceName.compare(QLatin1String("com.nokia.symbian.IFileView")))
+        {
+		viewport()->setAttribute(Qt::WA_AcceptTouchEvents);
+		viewport()->grabGesture(Qt::PinchGesture);
+        mImageViewerService = new GlxImageViewerService(this);
+        }
 
 #ifdef _DEBUG
 	QString t;
@@ -117,7 +130,7 @@
     {
     qDebug() << "GlxFetcher::itemSelected";
     
-    if (mFetcherService->isActive())
+    if (mFetcherService && mFetcherService->isActive())
         {
         qDebug() << "GlxFetcher::itemSelected mFetcherService->isActive()";
         QVariant variant = mModel->data(index, GlxUriRole);
@@ -129,7 +142,7 @@
             }
         }
     
-    if (mNSDIService->isActive())
+    else if (mNSDIService && mNSDIService->isActive())
         {
     qDebug() << "GlxFetcher::itemSelected mNSDIService->isActive()";
         QVariant variant = mModel->data(index, GlxUriRole);
@@ -141,7 +154,7 @@
             }
         }
     
-    if (mDSDIService->isActive())
+    else if (mDSDIService && mDSDIService->isActive())
         {
     qDebug() << "GlxFetcher::itemSelected mDSDIService->isActive()";
         QVariant variant = mModel->data(index, GlxUriRole);
@@ -156,18 +169,19 @@
 
 
 
-void GlxAiwServiceHandler::launchFetcher()
+void GlxAiwServiceHandler::launchFetcher(QString viewTitle)
     {
     qDebug() << "GlxAiwServiceHandler::launchFetcher START";
+    qApp->setApplicationName(viewTitle);
     HbStyleLoader::registerFilePath(":/data/photos.css");
     GlxModelParm modelParm(KGlxCollectionPluginAllImplementationUid, 0);
     mModel = new GlxMediaModel(modelParm);
 
     if ( this->orientation() == Qt::Horizontal ) {
-        mModel->setData(QModelIndex(), (int)GlxContextLsFs, GlxContextRole );
+        mModel->setData(QModelIndex(), (int)GlxContextLsGrid, GlxContextRole );
     }
     else {
-        mModel->setData(QModelIndex(), (int)GlxContextPtFs, GlxContextRole );
+        mModel->setData(QModelIndex(), (int)GlxContextPtGrid, GlxContextRole );
     }    
 
     mView = GlxViewsFactory::createView(GLX_GRIDVIEW_ID, this);
@@ -184,15 +198,16 @@
     }
 
 void GlxAiwServiceHandler::itemSpecificMenuTriggered(qint32 viewId,QPointF pos)
-	{
+{
     mFetcherContextMenu = new HbMenu();
 	HbAction *action = mFetcherContextMenu->addAction(GLX_MENU_OPEN);
+	action->setObjectName( "Menu Open" );
 	connect(action, SIGNAL(triggered()), this, SLOT(openFSView()));
 	connect(this, SIGNAL(aboutToChangeOrientation ()), mFetcherContextMenu, SLOT(close()));
 	connect( mFetcherContextMenu, SIGNAL( aboutToClose () ), this, SLOT( closeContextMenu() ) );
 	mFetcherContextMenu->setPreferredPos( pos );
 	mFetcherContextMenu->show();
- 	}
+}
 
 void GlxAiwServiceHandler::closeContextMenu()
     {
@@ -204,7 +219,15 @@
 	
 void GlxAiwServiceHandler::openFSView()
 	{
+    if ( this->orientation() == Qt::Horizontal ) {
+        mModel->setData(QModelIndex(), (int)GlxContextLsFs, GlxContextRole );
+    }
+    else {
+        mModel->setData(QModelIndex(), (int)GlxContextPtFs, GlxContextRole );
+    }    
     HbAction* selectAction = new HbAction(GLX_BUTTON_SELECT);
+    selectAction->setObjectName( "FS Select" );
+    
 	connect(selectAction, SIGNAL(triggered()), this, SLOT(handleFSSelect()));
     HbToolBar* toolBar = new HbToolBar();
     toolBar->setOrientation( Qt::Horizontal );
@@ -317,7 +340,11 @@
 void GlxGetImageService::fetch()
     {
     mImageRequestIndex = setCurrentRequestAsync();
-    mServiceApp->launchFetcher();
+    QString title = requestInfo().info("WindowTitle").toString();
+    if(title.isNull()){
+        title = QString("Image Fetcher");
+    }
+    mServiceApp->launchFetcher(title);
     }
 
 // ----------------------------------------------------------------------------
@@ -406,7 +433,11 @@
     {
     qDebug() << "GlxGetImageServiceNSDI::fetch START";
     mImageRequestIndex = setCurrentRequestAsync();
-    mServiceApp->launchFetcher();
+    QString title = requestInfo().info("WindowTitle").toString();
+    if(title.isNull()){
+        title = QString("Image Fetcher");
+    }
+    mServiceApp->launchFetcher(title);
     qDebug() << "GlxGetImageServiceNSDI::fetch END";
     }
 
@@ -485,7 +516,11 @@
     Q_UNUSED(filter)
     Q_UNUSED(flag)
     mImageRequestIndex = setCurrentRequestAsync();
-    mServiceApp->launchFetcher();
+    QString title = requestInfo().info("WindowTitle").toString();
+    if(title.isNull()){
+        title = QString("Image Fetcher");
+    }
+    mServiceApp->launchFetcher(title);
     }
 
 // ----------GlxImageViewerService---------------
@@ -518,13 +553,27 @@
 
 bool GlxImageViewerService::view(QString file)
     {
+    XQApplicationManager appmgr;
+    QFile tempfile(file);
+    QVariantList attrValues;
+	QList<int> attrNames;
+	attrNames.append(XQApplicationManager::IsProtected);
+    bool ok = appmgr.getDrmAttributes(tempfile, attrNames, attrValues);
+    if(attrValues.at(0).toBool()){
+		HbNotificationDialog::launchDialog("NOT SUPPORTED");
+        connect(this, SIGNAL(returnValueDelivered()), mServiceApp,
+                SLOT(handleAnswerDelivered()));
+		complete(true);
+		return false;
+    }
+	
     XQRequestInfo info = requestInfo();
     mAsyncRequest = !info.isSynchronous();
     if (!mImageViewerInstance)
         {
         mImageViewerInstance = CGlxImageViewerManager::InstanceL();
         }
-    QString filepath(QDir::toNativeSeparators(file.at(0)));
+    QString filepath(QDir::toNativeSeparators(file));
     TPtrC16 str(reinterpret_cast<const TUint16*> (filepath.utf16()));
     HBufC* uri = str.Alloc();
 
--- a/main/glxaiwservicehandler.h	Wed Jun 16 13:08:54 2010 +0100
+++ b/main/glxaiwservicehandler.h	Thu Jul 22 16:33:32 2010 +0100
@@ -54,7 +54,7 @@
      * Destructor.
      */
     ~GlxAiwServiceHandler();
-	void launchFetcher();
+	void launchFetcher(QString viewTitle);
 	void launchImageViewer();
 public slots:  
     void itemSelected(const QModelIndex &  index);    
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main/glxapplication.cpp	Thu Jul 22 16:33:32 2010 +0100
@@ -0,0 +1,55 @@
+/*
+* Copyright (c) 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:   ?Description
+*
+*/
+
+//include
+#include <qsymbianevent.h>
+#include <oommonitorplugin.h>
+#include <w32std.h>
+
+//userinclude
+#include "glxapplication.h"
+#include "mglxcache.h"
+
+GlxApplication::GlxApplication( int &argc, char *argv[ ], Hb::ApplicationFlags flags )
+    : HbApplication( argc, argv, flags )
+{
+}
+
+GlxApplication::GlxApplication( QApplication::QS60MainApplicationFactory factory, int &argc, char *argv[], Hb::ApplicationFlags flags  )
+    : HbApplication( factory, argc, argv, flags )
+{
+}
+
+bool GlxApplication::symbianEventFilter(const QSymbianEvent *aQSEvent)
+{
+    if ( aQSEvent->type( ) == QSymbianEvent::WindowServerEvent ) {
+        const TWsEvent *aEvent = aQSEvent->windowServerEvent();
+        if ( aEvent && aEvent->Type() == KAppOomMonitor_FreeRam ) {
+            cleanUpCache();
+        }
+    }
+    return HbApplication::symbianEventFilter( aQSEvent );
+}
+
+void GlxApplication::cleanUpCache()
+{
+    qDebug("GlxApplication::cleanUpCache()");
+    MGlxCache* cacheManager = MGlxCache::InstanceL();
+    cacheManager->ReleaseRAML(true);
+    cacheManager->Close();
+}
+ 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main/glxapplication.h	Thu Jul 22 16:33:32 2010 +0100
@@ -0,0 +1,45 @@
+/*
+* Copyright (c) 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:   ?Description
+*
+*/
+
+#ifndef GLXAPPLICATION_H_
+#define GLXAPPLICATION_H_
+
+#include <hbApplication.h>
+
+class QSymbianEvent;
+
+class GlxApplication: public HbApplication
+{
+
+public:
+
+    GlxApplication( int &argc, char *argv[],
+                        Hb::ApplicationFlags flags = Hb::DefaultApplicationFlags );
+    
+    GlxApplication( QApplication::QS60MainApplicationFactory factory,
+                        int &argc, 
+                        char *argv[],
+                        Hb::ApplicationFlags flags = Hb::DefaultApplicationFlags );
+    
+    bool symbianEventFilter( const QSymbianEvent *aQSEvent );
+    
+private :
+    void cleanUpCache();
+
+};
+    
+#endif // GLXAPPLICATION_H_
--- a/main/main.cpp	Wed Jun 16 13:08:54 2010 +0100
+++ b/main/main.cpp	Thu Jul 22 16:33:32 2010 +0100
@@ -16,9 +16,6 @@
 */
 
 
-
-#include <hbapplication.h>
-#include <glxstatemanager.h>
 #include <hbmainwindow.h>
 #include <glxloggerenabler.h>
 
@@ -26,8 +23,12 @@
 #include <QDebug>
 #include <QTranslator>
 #include <xqserviceutil.h>
-#include <glxaiwservicehandler.h>
 
+#include "glxstatemanager.h"
+#include "glxaiwservicehandler.h"
+#include "glxapplication.h"
+#include "glxlocalisationstrings.h"
+#include "hbsplashscreen.h"
 #include "OstTraceDefinitions.h"
 #ifdef OST_TRACE_COMPILER_IN_USE
 #include "mainTraces.h"
@@ -42,18 +43,15 @@
     OstTraceExt3( TRACE_NORMAL, DUP1__MAIN, "::main Time at Launch HHMMSS =%d::%d::%d",
             localTime.hour(), localTime.minute(), localTime.second() );
 
-    HbApplication app(argc, argv);	
-    
-	bool loaded(false);	
-    
+    GlxApplication app(argc, argv, Hb::NoSplash);	
+    bool loaded(false);	
     QTranslator translator;
     QString path = "Z:/resource/qt/translations/";
+    
     loaded = translator.load("photos_" + QLocale::system().name(), path);
-    if(loaded)
-        {
+    if(loaded) {
          qApp->installTranslator(&translator);
-        }
-    
+    }
     
     GlxStateManager* stateMgr = NULL;
     GlxAiwServiceHandler* mainWindow = NULL;
@@ -61,13 +59,13 @@
     OstTraceEventStart0( EVENT_DUP1__MAIN_START, "launch" );
 
     if(!XQServiceUtil::isService()){
-	      stateMgr = new GlxStateManager();
-        app.setApplicationName("Photos");          
+        HbSplashScreen::start();
+        stateMgr = new GlxStateManager();
+        app.setApplicationName(GLX_TITLE);          
         stateMgr->launchApplication();  
     }
-    else
-    {
-	      mainWindow = new GlxAiwServiceHandler();
+    else {
+        mainWindow = new GlxAiwServiceHandler();
         mainWindow->show();
     }
     OstTraceEventStop( EVENT_DUP1__MAIN_STOP, "launch", EVENT_DUP1__MAIN_START );
--- a/main/main.pro	Wed Jun 16 13:08:54 2010 +0100
+++ b/main/main.pro	Thu Jul 22 16:33:32 2010 +0100
@@ -24,26 +24,29 @@
                ../ui/inc \
                ../ui/uiengine/model/mediamodel/inc \
                ../ui/uiengine/medialistwrapper/inc \
+               ../ui/uiengine/medialists/inc \
                ../loggers/loggerqt/inc \
                ../ui/views/viewsfactory/inc \
                ../ui/views/viewbase/inc \
                ../ui/views/gridview/inc \
-	       ../engine/collectionframework/plugins/glxcollectionpluginall/inc \
+               ../engine/collectionframework/plugins/glxcollectionpluginall/inc \
                ../traces
 
+INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
+
 CONFIG += HB
 
 DEFINES += QT_NO_DEBUG_OUTPUT QT_NO_WARNING_OUTPUT
 
-
 symbian: { 
     TARGET.UID3 = 0x20000A14
-    ICON = ../data/qgn_menu_ovi_photos.svg
+    SKINICON = qtg_large_photos
     isEmpty(TARGET.EPOCSTACKSIZE):TARGET.EPOCSTACKSIZE = 0x14000
     isEmpty(TARGET.EPOCHEAPSIZE):TARGET.EPOCHEAPSIZE = 20480 \
         41943040
     TARGET.CAPABILITY = ALL \
         -TCB
+    MMP_RULES += SMPSAFE     
 }
 
 LIBS += -lglxstatehandler.dll \
@@ -51,13 +54,17 @@
         -lglxviews.dll \
         -lglxmediamodel.dll \
         -lglxexternalutility.dll \
-	-lglximageviewermanager.dll
+        -lglximageviewermanager.dll \
+        -lglxmedialists.dll
 		
 
 # Input
 SOURCES += main.cpp \
-	   glxaiwservicehandler.cpp 
-HEADERS +=glxaiwservicehandler.h
+           glxaiwservicehandler.cpp \
+           glxapplication.cpp
+	         
+HEADERS += glxaiwservicehandler.h \
+           glxapplication.h
 
 RESOURCES += ../photos.qrc
 TRANSLATIONS= photos.ts
--- a/photos.pro	Wed Jun 16 13:08:54 2010 +0100
+++ b/photos.pro	Thu Jul 22 16:33:32 2010 +0100
@@ -24,11 +24,13 @@
 CONFIG += ordered
 SUBDIRS	    = group \
               loggers \
-	      commonutilities \
-	      tvout\tvoutwrapper \
-	      ui \
-              main
+			  commonutilities \
+			  tvout\tvoutwrapper \
+			  ui \
+              main \
+			  gallery
               
 BLD_INF_RULES.prj_exports += "$${LITERAL_HASH}include <platform_paths.hrh>" \
         "rom/photos.iby   CORE_APP_LAYER_IBY_EXPORT_PATH(photos.iby)" \
         "rom/photos_resources.iby   LANGUAGE_APP_LAYER_IBY_EXPORT_PATH(photos_resources.iby)" \
+		"gallery/sis/photos_stub.sis /epoc32/data/z/system/install/photos_stub.sis" \
--- a/photos.qrc	Wed Jun 16 13:08:54 2010 +0100
+++ b/photos.qrc	Thu Jul 22 16:33:32 2010 +0100
@@ -7,8 +7,14 @@
         <file>data/transitiondown.fxml</file>
         <file>data/opacity_activate.fxml</file>
         <file>data/opacity_deactivate.fxml</file>
+        <file>data/zoomin.fxml</file>
+        <file>data/zoomout.fxml</file>
         <file>data/view_flip_hide.fxml</file>
-        <file>data/view_flip_show.fxml</file>
+        <file>data/view_flip_show.fxml</file>        
+        <file>data/helix.fxml</file>
+        <file>data/fadein.fxml</file>  
+        <file>data/uphide.fxml</file>
+        <file>data/downshow.fxml</file> 
         <file>data/fullscreentogrid.fxml</file>
         <file>data/gridtofullscreenhide.fxml</file>
         <file>data/gridtofullscreenshow.fxml</file>
@@ -17,13 +23,20 @@
         <file>data/albumlisttogrid.fxml</file>
         <file>data/albumlisttogridshow.fxml</file>
         <file>data/photos.css</file>
-        <file>data/transitionrotate0.fxml</file>
-        <file>data/transitionrotate90.fxml</file>
-        <file>data/transitionrotate180.fxml</file>
-        <file>data/transitionrotate270.fxml</file>
         <file>data/grid.docml</file>
         <file>data/listview.docml</file>
         <file>data/fullscreen.docml</file>
         <file>data/slideshow.docml</file>
-	    </qresource>
+	<file>data/detailsview.docml</file>
+        <file>data/Image1.jpg</file>
+        <file>data/Image2.jpg</file>
+        <file>data/Image3.jpg</file>
+        <file>data/Image4.jpg</file>
+        <file>data/Image5.jpg</file>
+        <file>data/Image6.jpg</file>
+        <file>data/Image7.jpg</file>
+        <file>data/Image8.jpg</file>
+        <file>data/Image9.jpg</file>
+        <file>data/Image10.jpg</file>
+    </qresource>
 </RCC>
--- a/rom/photos.iby	Wed Jun 16 13:08:54 2010 +0100
+++ b/rom/photos.iby	Thu Jul 22 16:33:32 2010 +0100
@@ -20,17 +20,15 @@
 #include <bldvariant.hrh>
 #include <data_caging_paths_for_iby.hrh>
 
-file=ABI_DIR/BUILD_DIR/glxcommonui.dll                          SHARED_LIB_DIR/glxcommonui.dll  
-
+file=ABI_DIR/BUILD_DIR/glxcommonui.dll                        SHARED_LIB_DIR/glxcommonui.dll  
 file=ABI_DIR/BUILD_DIR/glxcommon.dll                          SHARED_LIB_DIR/glxcommon.dll  
-file=ABI_DIR/BUILD_DIR/glxexternalutility.dll              SHARED_LIB_DIR/glxexternalutility.dll
-file=ABI_DIR/BUILD_DIR/glximagedecoderwrapper.dll              SHARED_LIB_DIR/glximagedecoderwrapper.dll
 file=ABI_DIR/BUILD_DIR/glximageviewermanager.dll              SHARED_LIB_DIR/glximageviewermanager.dll
 
+// datasource
 file=ABI_DIR/BUILD_DIR/glxdatasourcemanager.dll               SHARED_LIB_DIR/glxdatasourcemanager.dll  
-
 ECOM_PLUGIN( glxdatasourcemde.dll, glxdatasourcemde.rsc )
 
+// Collection plugins
 ECOM_PLUGIN( glxcollectionpluginalbums.dll, glxcollectionpluginalbums.rsc )
 data=DATAZ_/ECOM_RESOURCE_DIR/glxpluginalbums.rsc              ECOM_RESOURCE_DIR/glxpluginalbums.rsc
 
@@ -51,31 +49,49 @@
 
 ECOM_PLUGIN( glxcollectionpluginimageviewer.dll, glxcollectionpluginimageviewer.rsc )
 
-file=ABI_DIR/BUILD_DIR/glxlogging.dll              SHARED_LIB_DIR/glxlogging.dll
-file=ABI_DIR/BUILD_DIR/glxloggerqt.dll              SHARED_LIB_DIR/glxloggerqt.dll
+// logger
+file=ABI_DIR/BUILD_DIR/glxlogging.dll              			SHARED_LIB_DIR/glxlogging.dll
+
+// commandhandlers
+file=ABI_DIR/BUILD_DIR/glxcommandhandlerbase.dll            SHARED_LIB_DIR/glxcommandhandlerbase.dll
+file=ABI_DIR/BUILD_DIR/glxcommoncommandhandlers.dll         SHARED_LIB_DIR/glxcommoncommandhandlers.dll
 
-file=ABI_DIR/BUILD_DIR/glxcommandhandlerbase.dll              SHARED_LIB_DIR/glxcommandhandlerbase.dll
-file=ABI_DIR/BUILD_DIR/glxcommoncommandhandlers.dll              SHARED_LIB_DIR/glxcommoncommandhandlers.dll
-file=ABI_DIR/BUILD_DIR/glxtvoutwrapper.dll              SHARED_LIB_DIR/glxtvoutwrapper.dll
+// engine
+file=ABI_DIR/BUILD_DIR/glxdrmutility.dll					SHARED_LIB_DIR/glxdrmutility.dll
+file=ABI_DIR/BUILD_DIR/glxmedialists.dll                    SHARED_LIB_DIR/glxmedialists.dll
+file=ABI_DIR\BUILD_DIR/glxtvout.dll      					SHARED_LIB_DIR/glxtvout.dll
+
+// viewmanagement
+file=ABI_DIR/BUILD_DIR/glxstatehandler.dll              	SHARED_LIB_DIR/glxstatehandler.dll
+file=ABI_DIR/BUILD_DIR/glxviewmanager.dll              		SHARED_LIB_DIR/glxviewmanager.dll
 
-file=ABI_DIR/BUILD_DIR/glxdrmutility.dll											SHARED_LIB_DIR/glxdrmutility.dll
-file=ABI_DIR/BUILD_DIR/glxmedialists.dll                        SHARED_LIB_DIR/glxmedialists.dll
-file=ABI_DIR/BUILD_DIR/glxmedialistwrapper.dll              SHARED_LIB_DIR/glxmedialistwrapper.dll
-file=ABI_DIR/BUILD_DIR/glxmediamodel.dll              SHARED_LIB_DIR/glxmediamodel.dll
-file=ABI_DIR/BUILD_DIR/glxlistmodel.dll              SHARED_LIB_DIR/glxlistmodel.dll
-file=ABI_DIR/BUILD_DIR/glxmodelwrapper.dll              SHARED_LIB_DIR/glxmodelwrapper.dll
-file=ABI_DIR/BUILD_DIR/glxfavmediamodel.dll          SHARED_LIB_DIR/glxfavmediamodel.dll
-
-file=ABI_DIR/BUILD_DIR/glxstatehandler.dll              SHARED_LIB_DIR/glxstatehandler.dll
-file=ABI_DIR/BUILD_DIR/glxviewmanager.dll              SHARED_LIB_DIR/glxviewmanager.dll
-
-file=ABI_DIR/BUILD_DIR/glxviews.dll              SHARED_LIB_DIR/glxviews.dll
+//qt 
+file=ABI_DIR/BUILD_DIR/glxdrmutilitywrapper.dll             SHARED_LIB_DIR/glxdrmutilitywrapper.dll
+file=ABI_DIR/BUILD_DIR/glxexternalutility.dll              	SHARED_LIB_DIR/glxexternalutility.dll
+file=ABI_DIR/BUILD_DIR/glximagedecoderwrapper.dll          	SHARED_LIB_DIR/glximagedecoderwrapper.dll
+file=ABI_DIR/BUILD_DIR/glxloggerqt.dll              	   	SHARED_LIB_DIR/glxloggerqt.dll
+file=ABI_DIR/BUILD_DIR/glxmedialistwrapper.dll             	SHARED_LIB_DIR/glxmedialistwrapper.dll
+file=ABI_DIR/BUILD_DIR/glxtvoutwrapper.dll                 	SHARED_LIB_DIR/glxtvoutwrapper.dll
+file=ABI_DIR/BUILD_DIR/glxfavmediamodel.dll          		SHARED_LIB_DIR/glxfavmediamodel.dll
+file=ABI_DIR/BUILD_DIR/glxmediamodel.dll                   	SHARED_LIB_DIR/glxmediamodel.dll
+file=ABI_DIR/BUILD_DIR/glxmodelwrapper.dll              	SHARED_LIB_DIR/glxmodelwrapper.dll
+file=ABI_DIR/BUILD_DIR/glxlistmodel.dll                    	SHARED_LIB_DIR/glxlistmodel.dll
+file=ABI_DIR/BUILD_DIR/glxviews.dll                        	SHARED_LIB_DIR/glxviews.dll
+file=ABI_DIR/BUILD_DIR/glxviewutilities.dll                	SHARED_LIB_DIR/glxviewutilities.dll
+file=ABI_DIR/BUILD_DIR/glxzoomwidget.dll                	SHARED_LIB_DIR/glxzoomwidget.dll
+file=ABI_DIR/BUILD_DIR/detailsnamelabel.dll                	SHARED_LIB_DIR/detailsnamelabel.dll
+file=ABI_DIR/BUILD_DIR/detailsnamelabelplugin.dll          	SHARED_LIB_DIR/detailsnamelabelplugin.dll
+file=ABI_DIR/BUILD_DIR/detailsdescriptionedit.dll          SHARED_LIB_DIR/detailsdescriptionedit.dll
+file=ABI_DIR/BUILD_DIR/detailsdescriptioneditplugin.dll    SHARED_LIB_DIR/detailsdescriptioneditplugin.dll
 
 
 S60_APP_EXE(photos)
 data=/epoc32/data/z/private/10003a3f/import/apps/photos_reg.rsc         private/10003a3f/import/apps/photos_reg.rsc
-data=DATAZ_/APP_RESOURCE_DIR/0xE2C223D9.mif                     APP_RESOURCE_DIR/0xE2C223D9.mif  
-data=/epoc32/data/Z/private/10202BE9/20007194.txt		private/10202BE9/20007194.txt
-//data=/epoc32/data/z/system/install/photos_stub.sis        /system/install/photos_stub.sis
+data=DATAZ_/APP_RESOURCE_DIR/photos.mif                     			APP_RESOURCE_DIR/photos.mif  
+data=/epoc32/data/Z/private/10202BE9/20007194.txt						private/10202BE9/20007194.txt
+data=/epoc32/data/Z/private/10202BE9/20007193.txt						private/10202BE9/20007193.txt
+data=/epoc32/data/z/system/install/photos_stub.sis        				/system/install/photos_stub.sis
 
+data=ZRESOURCE/hb/splashml/photos.splashml  RESOURCE_FILES_DIR/hb/splashml/photos.splashml
+data=ZRESOURCE/hb/splashml/photos.docml  RESOURCE_FILES_DIR/hb/splashml/photos.docml
 #endif //__PHOTOS_IBY__
\ No newline at end of file
--- a/traces/OstTraceDefinitions.h	Wed Jun 16 13:08:54 2010 +0100
+++ b/traces/OstTraceDefinitions.h	Thu Jul 22 16:33:32 2010 +0100
@@ -1,19 +1,3 @@
-/*
-* Copyright (c) 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: 
-*
-*/
 #ifndef __OSTTRACEDEFINITIONS_H__
 #define __OSTTRACEDEFINITIONS_H__
 // OST_TRACE_COMPILER_IN_USE flag has been added by Trace Compiler
--- a/tsrc/unittest/unittest_imagedecoderwrapper/unittest_imagedecoderwrapper.pro	Wed Jun 16 13:08:54 2010 +0100
+++ b/tsrc/unittest/unittest_imagedecoderwrapper/unittest_imagedecoderwrapper.pro	Thu Jul 22 16:33:32 2010 +0100
@@ -21,6 +21,7 @@
 INCLUDEPATH += . 
 INCLUDEPATH += ../../../commonutilities/imagedecoderwrapper/inc
 INCLUDEPATH += /epoc32/include/mw/QtTest
+INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
 
 CONFIG += qtestlib \
           Hb
@@ -37,6 +38,7 @@
     TARGET.CAPABILITY = ALL -TCB
     TARGET.EPOCHEAPSIZE = 0x20000 0x1600000
     TARGET.UID3 = 0x20000A05
+    MMP_RULES += SMPSAFE 
 }
 #BLD_INF_RULES.prj_exports += "../../../gallery/data/Battle.jpg  c:/data/images/Battle.jpg"
 
--- a/tsrc/unittest/unittest_medialistwrapper/unittest_medialistwrapper.pro	Wed Jun 16 13:08:54 2010 +0100
+++ b/tsrc/unittest/unittest_medialistwrapper/unittest_medialistwrapper.pro	Thu Jul 22 16:33:32 2010 +0100
@@ -43,4 +43,5 @@
     TARGET.CAPABILITY = ALL -TCB
     TARGET.EPOCHEAPSIZE = 0x20000 0x1600000
     TARGET.UID3 = 0x20000A0E
+    MMP_RULES += SMPSAFE 
 }
\ No newline at end of file
--- a/tsrc/unittest/unittest_statehandler/unittest_statehandler.pro	Wed Jun 16 13:08:54 2010 +0100
+++ b/tsrc/unittest/unittest_statehandler/unittest_statehandler.pro	Thu Jul 22 16:33:32 2010 +0100
@@ -35,6 +35,7 @@
     TARGET.CAPABILITY = ALL -TCB
     TARGET.EPOCHEAPSIZE = 0x20000 0x1600000
     TARGET.UID3 = 0x2000A773
+    MMP_RULES += SMPSAFE 
 }
 
 LIBS += -lflogger.dll 
--- a/tvout/bwins/glxtvoutwrapperu.def	Wed Jun 16 13:08:54 2010 +0100
+++ b/tvout/bwins/glxtvoutwrapperu.def	Thu Jul 22 16:33:32 2010 +0100
@@ -2,10 +2,11 @@
 	?itemNotSupported@GlxTvOutWrapper@@QAEXXZ @ 1 NONAME ; void GlxTvOutWrapper::itemNotSupported(void)
 	??1GlxTvOutWrapper@@QAE@XZ @ 2 NONAME ; GlxTvOutWrapper::~GlxTvOutWrapper(void)
 	?activateZoom@GlxTvOutWrapper@@QAEX_N@Z @ 3 NONAME ; void GlxTvOutWrapper::activateZoom(bool)
-	?setModel@GlxTvOutWrapper@@QAEXPAVQAbstractItemModel@@@Z @ 4 NONAME ; void GlxTvOutWrapper::setModel(class QAbstractItemModel *)
-	??0GlxTvOutWrapper@@QAE@XZ @ 5 NONAME ; GlxTvOutWrapper::GlxTvOutWrapper(void)
-	?deactivateZoom@GlxTvOutWrapper@@QAEXXZ @ 6 NONAME ; void GlxTvOutWrapper::deactivateZoom(void)
-	?setImagetoHDMI@GlxTvOutWrapper@@QAEXXZ @ 7 NONAME ; void GlxTvOutWrapper::setImagetoHDMI(void)
+	??0GlxTvOutWrapper@@QAE@XZ @ 4 NONAME ; GlxTvOutWrapper::GlxTvOutWrapper(void)
+	?deactivateZoom@GlxTvOutWrapper@@QAEXXZ @ 5 NONAME ; void GlxTvOutWrapper::deactivateZoom(void)
+	?fadeSurface@GlxTvOutWrapper@@QAEX_N@Z @ 6 NONAME ; void GlxTvOutWrapper::fadeSurface(bool)
+	?setModel@GlxTvOutWrapper@@QAEXPAVQAbstractItemModel@@_N@Z @ 7 NONAME ; void GlxTvOutWrapper::setModel(class QAbstractItemModel *, bool)
 	?setToCloningMode@GlxTvOutWrapper@@QAEXXZ @ 8 NONAME ; void GlxTvOutWrapper::setToCloningMode(void)
-	?setToNativeMode@GlxTvOutWrapper@@QAEXXZ @ 9 NONAME ; void GlxTvOutWrapper::setToNativeMode(void)
+	?setImagetoHDMI@GlxTvOutWrapper@@QAEXXZ @ 9 NONAME ; void GlxTvOutWrapper::setImagetoHDMI(void)
+	?setToNativeMode@GlxTvOutWrapper@@QAEXXZ @ 10 NONAME ; void GlxTvOutWrapper::setToNativeMode(void)
 
--- a/tvout/eabi/glxtvoutwrapperu.def	Wed Jun 16 13:08:54 2010 +0100
+++ b/tvout/eabi/glxtvoutwrapperu.def	Thu Jul 22 16:33:32 2010 +0100
@@ -1,13 +1,14 @@
 EXPORTS
-	_ZN15GlxTvOutWrapper12activateZoomEb @ 1 NONAME
-	_ZN15GlxTvOutWrapper14deactivateZoomEv @ 2 NONAME
-	_ZN15GlxTvOutWrapper14setImagetoHDMIEv @ 3 NONAME
-	_ZN15GlxTvOutWrapper15setToNativeModeEv @ 4 NONAME
-	_ZN15GlxTvOutWrapper16itemNotSupportedEv @ 5 NONAME
-	_ZN15GlxTvOutWrapper16setToCloningModeEv @ 6 NONAME
-	_ZN15GlxTvOutWrapper8setModelEP18QAbstractItemModel @ 7 NONAME
-	_ZN15GlxTvOutWrapperC1Ev @ 8 NONAME
-	_ZN15GlxTvOutWrapperC2Ev @ 9 NONAME
-	_ZN15GlxTvOutWrapperD1Ev @ 10 NONAME
-	_ZN15GlxTvOutWrapperD2Ev @ 11 NONAME
+	_ZN15GlxTvOutWrapper11fadeSurfaceEb @ 1 NONAME
+	_ZN15GlxTvOutWrapper12activateZoomEb @ 2 NONAME
+	_ZN15GlxTvOutWrapper14deactivateZoomEv @ 3 NONAME
+	_ZN15GlxTvOutWrapper14setImagetoHDMIEv @ 4 NONAME
+	_ZN15GlxTvOutWrapper15setToNativeModeEv @ 5 NONAME
+	_ZN15GlxTvOutWrapper16itemNotSupportedEv @ 6 NONAME
+	_ZN15GlxTvOutWrapper16setToCloningModeEv @ 7 NONAME
+	_ZN15GlxTvOutWrapper8setModelEP18QAbstractItemModelb @ 8 NONAME
+	_ZN15GlxTvOutWrapperC1Ev @ 9 NONAME
+	_ZN15GlxTvOutWrapperC2Ev @ 10 NONAME
+	_ZN15GlxTvOutWrapperD1Ev @ 11 NONAME
+	_ZN15GlxTvOutWrapperD2Ev @ 12 NONAME
 
--- a/tvout/tvoutengine/bwins/glxtvoutu.def	Wed Jun 16 13:08:54 2010 +0100
+++ b/tvout/tvoutengine/bwins/glxtvoutu.def	Thu Jul 22 16:33:32 2010 +0100
@@ -1,17 +1,17 @@
 EXPORTS
 	?ActivateZoom@CGlxHdmiController@@QAEXH@Z @ 1 NONAME ; void CGlxHdmiController::ActivateZoom(int)
 	?ScreenSizeL@CGlxTv@@QBE?AVTSize@@XZ @ 2 NONAME ; class TSize CGlxTv::ScreenSizeL(void) const
-	?SetImageL@CGlxHdmiController@@QAEXABVTDesC16@@PAVCFbsBitmap@@H@Z @ 3 NONAME ; void CGlxHdmiController::SetImageL(class TDesC16 const &, class CFbsBitmap *, int)
-	??1CGlxTv@@UAE@XZ @ 4 NONAME ; CGlxTv::~CGlxTv(void)
-	??1CGlxHdmiController@@UAE@XZ @ 5 NONAME ; CGlxHdmiController::~CGlxHdmiController(void)
-	?NewL@CGlxHdmiController@@SAPAV1@XZ @ 6 NONAME ; class CGlxHdmiController * CGlxHdmiController::NewL(void)
+	?NewL@CGlxHdmiController@@SAPAV1@H@Z @ 3 NONAME ; class CGlxHdmiController * CGlxHdmiController::NewL(int)
+	?SetImageL@CGlxHdmiController@@QAEXABVTDesC16@@PAVCFbsBitmap@@H@Z @ 4 NONAME ; void CGlxHdmiController::SetImageL(class TDesC16 const &, class CFbsBitmap *, int)
+	??1CGlxTv@@UAE@XZ @ 5 NONAME ; CGlxTv::~CGlxTv(void)
+	??1CGlxHdmiController@@UAE@XZ @ 6 NONAME ; CGlxHdmiController::~CGlxHdmiController(void)
 	?IsWidescreen@CGlxTv@@QBEHXZ @ 7 NONAME ; int CGlxTv::IsWidescreen(void) const
-	?IsHDMIConnected@CGlxHdmiController@@QAEHXZ @ 8 NONAME ; int CGlxHdmiController::IsHDMIConnected(void)
-	?ShiftToPostingMode@CGlxHdmiController@@QAEXXZ @ 9 NONAME ; void CGlxHdmiController::ShiftToPostingMode(void)
-	?ShiftToCloningMode@CGlxHdmiController@@QAEXXZ @ 10 NONAME ; void CGlxHdmiController::ShiftToCloningMode(void)
-	?NewL@CGlxTv@@SAPAV1@AAVMGlxTvObserver@@@Z @ 11 NONAME ; class CGlxTv * CGlxTv::NewL(class MGlxTvObserver &)
-	?IsConnected@CGlxTv@@QBEHXZ @ 12 NONAME ; int CGlxTv::IsConnected(void) const
-	?ItemNotSupported@CGlxHdmiController@@QAEXXZ @ 13 NONAME ; void CGlxHdmiController::ItemNotSupported(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 &)
+	?FadeSurface@CGlxHdmiController@@QAEXH@Z @ 13 NONAME ; void CGlxHdmiController::FadeSurface(int)
 	?IsHDMIConnected@CGlxTv@@QBEHXZ @ 14 NONAME ; int CGlxTv::IsHDMIConnected(void) const
 	?DeactivateZoom@CGlxHdmiController@@QAEXXZ @ 15 NONAME ; void CGlxHdmiController::DeactivateZoom(void)
 
--- a/tvout/tvoutengine/eabi/glxtvoutu.def	Wed Jun 16 13:08:54 2010 +0100
+++ b/tvout/tvoutengine/eabi/glxtvoutu.def	Thu Jul 22 16:33:32 2010 +0100
@@ -1,11 +1,11 @@
 EXPORTS
-	_ZN18CGlxHdmiController12ActivateZoomEi @ 1 NONAME
-	_ZN18CGlxHdmiController14DeactivateZoomEv @ 2 NONAME
-	_ZN18CGlxHdmiController15IsHDMIConnectedEv @ 3 NONAME
+	_ZN18CGlxHdmiController11FadeSurfaceEi @ 1 NONAME
+	_ZN18CGlxHdmiController12ActivateZoomEi @ 2 NONAME
+	_ZN18CGlxHdmiController14DeactivateZoomEv @ 3 NONAME
 	_ZN18CGlxHdmiController16ItemNotSupportedEv @ 4 NONAME
 	_ZN18CGlxHdmiController18ShiftToCloningModeEv @ 5 NONAME
 	_ZN18CGlxHdmiController18ShiftToPostingModeEv @ 6 NONAME
-	_ZN18CGlxHdmiController4NewLEv @ 7 NONAME
+	_ZN18CGlxHdmiController4NewLEi @ 7 NONAME
 	_ZN18CGlxHdmiController9SetImageLERK7TDesC16P10CFbsBitmapi @ 8 NONAME
 	_ZN18CGlxHdmiControllerD0Ev @ 9 NONAME
 	_ZN18CGlxHdmiControllerD1Ev @ 10 NONAME
--- a/tvout/tvoutengine/group/bld.inf	Wed Jun 16 13:08:54 2010 +0100
+++ b/tvout/tvoutengine/group/bld.inf	Thu Jul 22 16:33:32 2010 +0100
@@ -23,11 +23,5 @@
  
  #include <platform_paths.hrh>
 
-PRJ_EXPORTS
-../rom/glxtvout.iby     CORE_APP_LAYER_IBY_EXPORT_PATH(glxtvout.iby)
-
 PRJ_MMPFILES
 glxtvout.mmp
-
-PRJ_TESTMMPFILES
-//../tsrc/group/t_glxtvout.mmp
--- a/tvout/tvoutengine/group/glxtvout.mmp	Wed Jun 16 13:08:54 2010 +0100
+++ b/tvout/tvoutengine/group/glxtvout.mmp	Thu Jul 22 16:33:32 2010 +0100
@@ -64,9 +64,12 @@
 LIBRARY                 apgrfx.lib // 
 LIBRARY			apmime.lib // For ImageViewer mime type extraction
 LIBRARY 		glxlogging.lib
+LIBRARY		      alfdecoderserverclient.lib
 LIBRARY		AccPolicy.lib //For RAccessoryConnection status ID's	
 // Other Dependency Libraries
 #ifdef __MARM
 LIBRARY 		GSServerEngine.lib  // FOr AspectRatio
 #endif
+
+SMPSAFE
 // End of File
--- a/tvout/tvoutengine/inc/glxhdmicontainer.h	Wed Jun 16 13:08:54 2010 +0100
+++ b/tvout/tvoutengine/inc/glxhdmicontainer.h	Thu Jul 22 16:33:32 2010 +0100
@@ -63,10 +63,10 @@
     void CreateHdmiWindowL();
     
 private:
-    TRect iRect;
-    RWsSession iSession;
+    TRect               iRect;
+    RWsSession          iSession;
     RWindow             iWsWindow;
-    CWsScreenDevice* iScreenDevice;    
+    CWsScreenDevice*    iScreenDevice;    
     RWindowGroup        iWsWindowGroup;
     CWindowGc*          iWindowGc;
     TInt                iWsWindowGroupID;
--- a/tvout/tvoutengine/inc/glxhdmicontroller.h	Wed Jun 16 13:08:54 2010 +0100
+++ b/tvout/tvoutengine/inc/glxhdmicontroller.h	Thu Jul 22 16:33:32 2010 +0100
@@ -19,24 +19,21 @@
 #define GLXHDMICONTROLLER_H_
 
 // Internal includes
-#include <mglxtvobserver.h>     // for inteface MGlxTvObserver
 
 class CGlxHdmiContainer;
 class CGlxHdmiSurfaceUpdater;
-class CGlxTv;
 
 /*
  * This class will be called from FS and Slideshow for its requirements 
  */
-class CGlxHdmiController : public CBase,
-                            public MGlxTvObserver              // for TV Out
+class CGlxHdmiController : public CBase
     {
 public:
     /*
      * NewLC 
      * @param1 - Image file path default to NULL
      */
-    IMPORT_C static CGlxHdmiController* NewL();
+    IMPORT_C static CGlxHdmiController* NewL(TBool aEfectsOn = EFalse);
 
     /*
      * Destructor
@@ -75,18 +72,17 @@
     IMPORT_C void ShiftToPostingMode();
 
     /*
-     * Tells if HDMi is Connected.
+     * Fadeing of the Surface
+     * @param1 ETrue - FadeIn ( as in gaining brightness )
+     *         EFalse - FadeOut ( as in loosing brightness ) 
      */
-    IMPORT_C TBool IsHDMIConnected();
-
-private:// From MGlxTvObserver
-    void HandleTvStatusChangedL ( TTvChangeType aChangeType );
-
+    IMPORT_C void FadeSurface(TBool aFadeInOut);
+    
 private:
     /*
      * Constructor
      */
-    CGlxHdmiController();
+    CGlxHdmiController(TBool aEfectsOn);
     
     /*
      * ConstructL 
@@ -126,9 +122,8 @@
     
     CGlxHdmiContainer*      iHdmiContainer;
     CGlxHdmiSurfaceUpdater* iSurfaceUpdater;
-    CGlxTv*  iGlxTvOut;
     TBool   iIsImageSupported;          // Flag to see if Image is supported
-    TBool   iIsPostingMode;             // Flag for determining if the image needs to be in posting mode
+    TBool   iEffectsOn;
     };
 
 #endif /* GLXHDMICONTROLLER_H_ */
--- a/tvout/tvoutengine/inc/glxhdmisurfaceupdater.h	Wed Jun 16 13:08:54 2010 +0100
+++ b/tvout/tvoutengine/inc/glxhdmisurfaceupdater.h	Thu Jul 22 16:33:32 2010 +0100
@@ -30,7 +30,9 @@
 class CGlxActiveCallBack;
 class CGlxHdmiDecoderAO;
 class CImageDecoder;
+class CAlfCompositionSource;
 class TSurfaceConfiguration;
+
 class MGlxGenCallback
     {
 public:
@@ -44,7 +46,7 @@
      * NewL
      */
     static CGlxHdmiSurfaceUpdater* NewL(RWindow* aWindow, const TDesC& aImageFile, 
-            CFbsBitmap* aFsBitmap, MGlxGenCallback* aCallBack);
+            CFbsBitmap* aFsBitmap, MGlxGenCallback* aCallBack,TBool aEffectsOn);
 
     /*
      * Destructor
@@ -70,10 +72,6 @@
      * Deactivate Zoom 
      */
     void DeactivateZoom();
-    /*
-     * Zoom in our out depending on parameter 
-     */
-    void Zoom(TBool aZoom);
 
     /*
 	ShiftToCloningMOde
@@ -85,11 +83,18 @@
      */
     void ShiftToPostingMode();
 
+    /*
+     * Fadeing of the Surface
+     * @param1 ETrue - FadeIn ( as in gaining brightness )
+     *         EFalse - FadeOut ( as in loosing brightness ) 
+     */
+    void FadeTheSurface(TBool aFadeInOut);
+
 private:
     /*
      * Constructor 
      */
-    CGlxHdmiSurfaceUpdater(RWindow* aWindow, MGlxGenCallback* aCallBack);
+    CGlxHdmiSurfaceUpdater(RWindow* aWindow, MGlxGenCallback* aCallBack,TBool aEffectsOn);
 
     /*
      * ConstructL()
@@ -145,10 +150,20 @@
     void CreateHdmiL(TBool aCreateSurface = ETrue);
 
     /*
+     * Zoom in our out depending on parameter 
+     */
+    void Zoom(TBool aZoom);
+
+    /*
      * This if for zoom timer timeout
      */
     static TInt TimeOut(TAny* aSelf);
-
+    
+    /*
+     * Animation time out timer
+     */
+    static TInt AnimationTimeOut(TAny* aSelf);
+    
     /*
      * ModifySurface positions of the surface to be displayed on screen
      */
@@ -189,12 +204,22 @@
      */
     void InitiateHdmiL(CFbsBitmap* aFsBitmap,const TDesC& aImageFile);
 
+    /*
+     * Animate untill loop is complete 
+     */
+    void Animate();
+
 private:
-    RWindow*        iWindow;                        // window object
-    CFbsBitmap*     iFsBitmap;                      // FS bitmap
-    MGlxGenCallback* iCallBack;                     // callback to the HdmiContainer window
-    HBufC*          iImagePath;                     // To store the image uri path
+    RWindow*            iWindow;                    // window object
+    CFbsBitmap*         iFsBitmap;                  // FS bitmap
+    MGlxGenCallback*    iCallBack;                  // callback to the HdmiContainer window
+    HBufC*              iImagePath;                 // To store the image uri path
+    TBool               iEffectsOn;
 
+    TBool       iShwFsThumbnail;                    // If the Fs thumbnail is to be shown before decoding HD images
+    TBool       iIsNonJpeg;                         // If the item is non jpeg
+    TBool       iFadeIn;                            // If FadeIn or Out for only SLideshow animation
+    
     // GCE Surface
     RSurfaceUpdateSession iSurfUpdateSession;
     TSurfaceId              iSurfId;                // TSurfaceId                             
@@ -210,14 +235,18 @@
     void*               iSurfBuffer;               // Surface buffer
     CGlxActiveCallBack* iSurfBufferAO;             // Surface buffer AO 
 
+    CAlfCompositionSource* ialfCompositionSurface;
+
     //ICL
     CGlxHdmiDecoderAO*  iGlxDecoderAO;              // Internal Image decoder AO              
     CImageDecoder*      iImageDecoder;              // Image Decoder
     RFs                 iFsSession;                 // RFs
 
     TPoint      iLeftCornerForZoom;                 //  
-    CPeriodic*  iTimer;                             // Timer for Zoom   
-    
+    CPeriodic*  iTimer;                             // Timer for Zoom 
+    CPeriodic*  iAnimTimer;                         // Timer for Animation
+    TInt        iAnimCounter;
+
     // Various objects to store sizes and count
     TSize       iTvScreenSize;                      // to store the Tv screen size
     TSize       iTargetBitmapSize;                  // To Store the target bitmap size to display(as per Aspect Ratio)
@@ -227,10 +256,7 @@
     TBool       iBitmapReady;                       // If the bitmap is decoded and ready
     TBool       iAutoZoomOut;                       // If the UI has asked for auto zoomout
     TBool       iSurfSessionConnected;              // If surface session is connected
-	TBool iShiftToCloning;
-    TBool       iShwFsThumbnail;                    // If the Fs thumbnail is to be shown before decoding HD images
-    TBool       iIsNonJpeg;                         // If the item is non jpeg
-
+	TBool       iShiftToCloning;
 #ifdef _DEBUG
     TTime iStartTime;
     TTime iStopTime;
--- a/tvout/tvoutengine/inc/glxtv.h	Wed Jun 16 13:08:54 2010 +0100
+++ b/tvout/tvoutengine/inc/glxtv.h	Thu Jul 22 16:33:32 2010 +0100
@@ -56,9 +56,10 @@
     {
 public:
     /**
-     * Handle TV connection state changes
+     * Handle TV/HDMI/Headset connection state changes
+     * @param aChangeType The connection change type
      */
-    virtual void HandleTvConnectionStatusChangedL( ) = 0;
+    virtual void HandleTvConnectionStatusChangedL(TTvChangeType aChangeType) = 0;
     };
         
         
@@ -135,7 +136,7 @@
     /**
      * @ref MGlxTvConnectionObserver::HandleTvConnectionStatusChangedL
      */
-    void HandleTvConnectionStatusChangedL( );
+    void HandleTvConnectionStatusChangedL(TTvChangeType aChangeType);
     
 private: // new private methods
     /**
--- a/tvout/tvoutengine/inc/glxtvconnectionmonitor.h	Wed Jun 16 13:08:54 2010 +0100
+++ b/tvout/tvoutengine/inc/glxtvconnectionmonitor.h	Thu Jul 22 16:33:32 2010 +0100
@@ -84,53 +84,58 @@
      */
     TBool IsHDMIConnected() const;
 
-
 private: // From CActive
     /**
      * @ref CActive::RunL
-     */	
+     */
 	void RunL();
-	
+
     /**
      * @ref CActive::DoCancel
-     */	
+     */
 	void DoCancel();
-    
+
     /**
      * @ref CActive::RunError
-     */    
-    TInt RunError( TInt aError );    
-    
-    
+     */
+    TInt RunError( TInt aError );
+
+
 private:
 
     /**
-     * Requests TV on/off events 
-     */        
+     * Requests TV on/off events
+     */
     void IssueRequest();
 
     /**
      * Sends notification to observers when TV Out cable is connected
-     */      
+     */
     void IssueNotificationL();
-    
-    void UpdateConnectionStatusL();
+
+    /**
+	 * Updates the ConnectionState of Tv Out and HDMI
+	 */
+	void UpdateConnectionStatusL();
 
 private: // class member data
-    
+
     // Not owned: TV connection observer
     MGlxTvConnectionObserver& iConnectionObserver;
 
-    // TVout The Connection state 
-    TBool iTvOutConnectionState;
-    
-    // TVout The Connection state 
-    TBool iHDMIConnectionState;
+    // TVout The Connection state
+    TBool iIsTvOutConnected;
+
+    // TVout The Connection state
+    TBool iIsHDMIConnected;
+
+    // Headset The Connection state
+    TBool iIsHeadSetConnected;
 
     // The (external device) Accessory Server
     RAccessoryServer iTvAccServer;
-    
-    // Accessory mode 
+
+    // Accessory mode
     RAccessoryMode iTvAccMode;
 
     // Accessory Connection - details the type of accessory
--- a/tvout/tvoutengine/rom/glxtvout.iby	Wed Jun 16 13:08:54 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,29 +0,0 @@
-/*
-* 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:    Photos TV Out iby file.
-*
-*/
-
-
-
-
-#ifndef __GLX_TVOUT_IBY__
-#define __GLX_TVOUT_IBY__
-
-file=ABI_DIR\BUILD_DIR\glxtvout.dll      SHARED_LIB_DIR\glxtvout.dll
-
-#endif // __GLX_TVOUT_IBY__
-
-// End of file
------------------------------------------------------------
\ No newline at end of file
--- a/tvout/tvoutengine/src/glxhdmicontainer.cpp	Wed Jun 16 13:08:54 2010 +0100
+++ b/tvout/tvoutengine/src/glxhdmicontainer.cpp	Thu Jul 22 16:33:32 2010 +0100
@@ -75,7 +75,7 @@
 RWindow* CGlxHdmiContainer::GetWindow()
     {
     TRACER("CGlxHdmiContainer::GetWindow()");
-    return &Window();   
+    return &iWsWindow;   
     }
 
 // -----------------------------------------------------------------------------
--- a/tvout/tvoutengine/src/glxhdmicontroller.cpp	Wed Jun 16 13:08:54 2010 +0100
+++ b/tvout/tvoutengine/src/glxhdmicontroller.cpp	Thu Jul 22 16:33:32 2010 +0100
@@ -19,7 +19,7 @@
 #include <alf/alfutil.h>
 #include <glxtracer.h>
 #include <glxlog.h>
-#include "glxtv.h"                      // for CGlxTv
+
 #include "glxhdmicontainer.h"
 #include "glxhdmisurfaceupdater.h"
 
@@ -28,10 +28,10 @@
 // -----------------------------------------------------------------------------
 // NewLC
 // -----------------------------------------------------------------------------
-EXPORT_C CGlxHdmiController* CGlxHdmiController::NewL()
+EXPORT_C CGlxHdmiController* CGlxHdmiController::NewL(TBool aEfectsOn)
     {
     TRACER("CGlxHdmiController* CGlxHdmiController::NewL()");
-    CGlxHdmiController* self = new (ELeave) CGlxHdmiController();
+    CGlxHdmiController* self = new (ELeave) CGlxHdmiController(aEfectsOn);
     CleanupStack::PushL(self);
     self->ConstructL();
     CleanupStack::Pop(self);
@@ -53,10 +53,6 @@
         delete iFsBitmap;
         iFsBitmap = NULL;
         }
-    if(iGlxTvOut)
-		{
-        delete iGlxTvOut;
-		}
     }
 
 // -----------------------------------------------------------------------------
@@ -66,47 +62,45 @@
                                              TBool aStore)
     {
     TRACER("CGlxHdmiController::SetImageL()");
+    if (aFsBitmap == NULL || !aImageFile.Length())
+        {
+        GLX_LOG_INFO("CGlxHdmiController::SetImageL() - NULL Uri");
+        return;
+        }
     if (aStore)
         {
         iIsImageSupported = ETrue;
         StoreImageInfoL( aImageFile, aFsBitmap );
         }
-    if (iGlxTvOut->IsHDMIConnected())
+    GLX_LOG_INFO("CGlxHdmiController::SetImageL() - 2");
+    // do not close the surface , use the same surface instead.
+    // Call a function to pass imagefile
+    if (!iHdmiContainer)
+        {            
+        CreateHdmiContainerL(); 
+        }            
+    if (!iSurfaceUpdater)
         {
-        iIsPostingMode = ETrue;         // the image should be in posting mode
-        GLX_LOG_INFO("CGlxHdmiController::SetImageL() - 2");
-        // do not close the surface , use the same surface instead.
-        // Call a function to pass imagefile
-        if (!iHdmiContainer)
-            {            
-            CreateHdmiContainerL(); 
-            }            
-        if (!iSurfaceUpdater)
-            {
-            // This case would come when surface updater is not created at the first instance and also
-            // it satisfies the 720p condition                
-            CreateSurfaceUpdaterL(aImageFile);
-            }
-        else
-            {
-            GLX_LOG_INFO("CGlxHdmiController::SetImageL() - 3");
-            iSurfaceUpdater->UpdateNewImageL(aImageFile, aFsBitmap);
-            }
-        iHdmiContainer->DrawNow();
+        // This case would come when surface updater is not created at the first instance and also
+        // it satisfies the 720p condition                
+        CreateSurfaceUpdaterL(aImageFile);
         }
+    else
+        {
+        GLX_LOG_INFO("CGlxHdmiController::SetImageL() - 3");
+        iSurfaceUpdater->UpdateNewImageL(aImageFile, aFsBitmap);
+        }
+    iHdmiContainer->DrawNow();
     }
 
 // -----------------------------------------------------------------------------
-// IsVideo 
+// ItemNotSupported 
 // -----------------------------------------------------------------------------
 EXPORT_C void CGlxHdmiController::ItemNotSupported()
     {
     TRACER("CGlxHdmiController::IsVideo()");
     iIsImageSupported = EFalse;
-    if (iGlxTvOut->IsHDMIConnected())
-        {
-        DestroySurfaceUpdater();
-        }
+    DestroySurfaceUpdater();
     }
 
 
@@ -116,7 +110,7 @@
 EXPORT_C void CGlxHdmiController::ActivateZoom(TBool aAutoZoomOut)
     {
     TRACER("CGlxHdmiController::ActivateZoom()");
-    if (iGlxTvOut->IsHDMIConnected())
+    if (iSurfaceUpdater)
         {
         iSurfaceUpdater->ActivateZoom(aAutoZoomOut);
         }
@@ -128,7 +122,7 @@
 EXPORT_C void CGlxHdmiController::DeactivateZoom()
     {
     TRACER("CGlxHdmiController::DeactivateZoom()");
-    if (iGlxTvOut->IsHDMIConnected())
+    if (iSurfaceUpdater)
         {
         iSurfaceUpdater->DeactivateZoom();
         }
@@ -141,9 +135,8 @@
     {
     TRACER("CGlxHdmiController::ShiftToCloningMode()");
     // Shift to cloning only if HDMI is connected and surfaceupdater available.
-    if (iGlxTvOut->IsHDMIConnected() && iSurfaceUpdater)
+    if (iSurfaceUpdater)
         {
-        iIsPostingMode = EFalse;
         iSurfaceUpdater->ShiftToCloningMode();
         }
     }
@@ -154,41 +147,46 @@
 EXPORT_C void CGlxHdmiController::ShiftToPostingMode()
     {
     TRACER("CGlxHdmiController::ShiftToPostingMode()");
-    if (iGlxTvOut->IsHDMIConnected())
+    if (!iSurfaceUpdater)
         {
-        if (!iSurfaceUpdater)
+        GLX_LOG_INFO("CGlxHdmiController::ShiftToPostingMode() - 1");
+        // This case would come when HDMI connected, TvOut /headphones being connected
+        // and then it shows a popup of "microphone connected" 
+        // thus Background - Foreground when headphones connected during HDMI connected
+        if (iFsBitmap == NULL || !iStoredImagePath->Length())
             {
-            GLX_LOG_INFO("CGlxHdmiController::ShiftToPostingMode() - 1");
-            // This case would come when HDMI connected, TvOut /headphones being connected
-            // and then it shows a popup of "microphone connected" 
-            // thus Background - Foreground when headphones connected during HDMI connected
-            SetImageL(iStoredImagePath->Des(), iFsBitmap, EFalse);
+            GLX_LOG_INFO("CGlxHdmiController::ShiftToPostingMode() - NULL Uri");
+            return;
             }
-        else
-            {
-            GLX_LOG_INFO("CGlxHdmiController::ShiftToPostingMode() - 2");
-            iSurfaceUpdater->ShiftToPostingMode();
-            }
-        iIsPostingMode = ETrue;
+        SetImageL(iStoredImagePath->Des(), iFsBitmap, EFalse);
+        }
+    else
+        {
+        GLX_LOG_INFO("CGlxHdmiController::ShiftToPostingMode() - 2");
+        iSurfaceUpdater->ShiftToPostingMode();
+        }
+    }
+
+
+// -----------------------------------------------------------------------------
+// FadeSurface 
+// -----------------------------------------------------------------------------
+EXPORT_C void CGlxHdmiController::FadeSurface(TBool aFadeInOut)
+    {
+    TRACER("CGlxHdmiController::FadeSurface()");
+    if (iSurfaceUpdater)
+        {
+        iSurfaceUpdater->FadeTheSurface(aFadeInOut);
         }
     }
 
 // -----------------------------------------------------------------------------
-// IsHDMIConnected 
-// -----------------------------------------------------------------------------
-EXPORT_C TBool CGlxHdmiController::IsHDMIConnected()
-    {
-    TRACER("CGlxHdmiController::IsHDMIConnected()");
-    return iGlxTvOut->IsHDMIConnected(); 
-    }
-
-
-// -----------------------------------------------------------------------------
 // Constructor
 // -----------------------------------------------------------------------------
-CGlxHdmiController::CGlxHdmiController():
+CGlxHdmiController::CGlxHdmiController(TBool aEffectsOn):
             iFsBitmap(NULL),
-            iIsPostingMode(EFalse)
+            iStoredImagePath(NULL),
+            iEffectsOn(aEffectsOn)
     {
     TRACER("CGlxHdmiController::CGlxHdmiController()");
     // Implement nothing here
@@ -200,7 +198,6 @@
 void CGlxHdmiController::ConstructL()
     {
     TRACER("CGlxHdmiController::ConstructL()");
-    iGlxTvOut = CGlxTv::NewL(*this);
     }
 
 // -----------------------------------------------------------------------------
@@ -228,7 +225,6 @@
         delete iSurfaceUpdater;
         iSurfaceUpdater = NULL;
         }    
-    iIsPostingMode = EFalse;
     }
 
 // -----------------------------------------------------------------------------
@@ -247,9 +243,9 @@
 void CGlxHdmiController::CreateSurfaceUpdaterL(const TDesC& aImageFile)
     {
     TRACER("CGlxHdmiController::CreateSurfaceUpdater()");
-    RWindow* window = iHdmiContainer->GetWindow();
-    iSurfaceUpdater = CGlxHdmiSurfaceUpdater::NewL(window, aImageFile, iFsBitmap,
-                                                    iHdmiContainer);
+    iSurfaceUpdater = CGlxHdmiSurfaceUpdater::NewL(iHdmiContainer->GetWindow(), 
+                                                aImageFile, iFsBitmap,iHdmiContainer,
+                                                iEffectsOn);
     iHdmiContainer->DrawNow();
     }
 
@@ -274,35 +270,3 @@
     iFsBitmap->Duplicate(aFsBitmap->Handle());
     }
 
-// -----------------------------------------------------------------------------
-// HandleTvStatusChangedL 
-// -----------------------------------------------------------------------------
-void CGlxHdmiController::HandleTvStatusChangedL( TTvChangeType aChangeType )
-    {
-    TRACER("CGlxHdmiController::HandleTvStatusChangedL()");
-    if ( aChangeType == ETvConnectionChanged )          
-        {
-        if ( iGlxTvOut->IsHDMIConnected() && iGlxTvOut->IsConnected() && iSurfaceUpdater)
-            {
-            GLX_LOG_INFO("CGlxHdmiController::HandleTvStatusChangedL() - HDMI and TV Connected");
-            // Do nothing , as this means HDMI is already connected and headset/tv cable connected
-            // meaning we shouldnt destroy HDMI and neither have to create surface updater.
-            return;
-            }
-        else if ( iGlxTvOut->IsHDMIConnected() && iIsImageSupported && iIsPostingMode)
-            {
-            GLX_LOG_INFO("CGlxHdmiController::HandleTvStatusChangedL() - HDMI Connected");
-            // Calling SetImageL() with appropriate parameters
-            SetImageL(iStoredImagePath->Des(), iFsBitmap, EFalse);
-            }
-        else
-            {
-            GLX_LOG_INFO3("CGlxHdmiController::HandleTvStatusChangedL() iIsImageSupported=%d, iGlxTvOut->IsHDMIConnected()=%d, iIsPostingMode=%d", 
-                    iIsImageSupported,iGlxTvOut->IsHDMIConnected(),iIsPostingMode);
-            // if it gets disconnected, destroy the surface 
-            GLX_LOG_INFO("CGlxHdmiController::HandleTvStatusChangedL() - HDMI Not Connected");
-            DestroySurfaceUpdater();
-            }
-        }
-    }
-
--- a/tvout/tvoutengine/src/glxhdmisurfaceupdater.cpp	Wed Jun 16 13:08:54 2010 +0100
+++ b/tvout/tvoutengine/src/glxhdmisurfaceupdater.cpp	Thu Jul 22 16:33:32 2010 +0100
@@ -18,8 +18,10 @@
 #include <graphics/surface.h>
 #include <graphics/surfacemanager.h>
 #include <graphics/surfaceupdateclient.h>
+#include <graphics/surface_hints.h>
 #include <e32math.h>
 #include <apgcli.h>
+#include "alf/alfcompositionclient.h" 
 
 #include <imageconversion.h> 
 #include <fbs.h>
@@ -33,11 +35,19 @@
 
 const TInt KMulFactorToCreateBitmap = 4;
 const TInt KZoomDelay = 10000;
+const TInt KAnimationTicker = 26000;
+const TInt KAnimationTickerFadeIn = 45000; 
 //100 , is decide for 20 steps of zooming , with each step being 5 pixels.
 const TInt KMaxZoomLimit = 100;
 //evey time we zoom , there is a increase in the ht amd width by 10 pixels.
 const TInt KSingleStepForZoom = 10;
 
+// constants for fade effect
+const TInt KFadeSteps = 19;
+const TReal32 KFadeEachStep = 0.05f;
+const TReal32 KFullTransparent = 0.0f;
+const TReal32 KFullOpaque = 1.0f;
+
 _LIT(KMimeJpeg,"image/jpeg");
 _LIT(KMimeJpg,"image/jpg");
 
@@ -46,10 +56,11 @@
 // -----------------------------------------------------------------------------
 CGlxHdmiSurfaceUpdater* CGlxHdmiSurfaceUpdater::NewL(RWindow* aWindow, const TDesC& aImageFile, 
                                                       CFbsBitmap* aFsBitmap, 
-                                                      MGlxGenCallback* aCallBack)
+                                                      MGlxGenCallback* aCallBack,
+                                                      TBool aEffectsOn)
     {
     TRACER("CGlxHdmiSurfaceUpdater* CGlxHdmiSurfaceUpdater::NewL()");
-    CGlxHdmiSurfaceUpdater* self = new (ELeave) CGlxHdmiSurfaceUpdater(aWindow, aCallBack);
+    CGlxHdmiSurfaceUpdater* self = new (ELeave) CGlxHdmiSurfaceUpdater(aWindow, aCallBack, aEffectsOn);
     CleanupStack::PushL(self);
     self->ConstructL(aFsBitmap,aImageFile);
     CleanupStack::Pop(self);
@@ -63,6 +74,13 @@
     {
     TRACER("CGlxHdmiSurfaceUpdater::~CGlxHdmiSurfaceUpdater()");
     ReleaseContent();
+    if(iAnimTimer && iAnimTimer->IsActive())             // Check for a CPeriodic Instance
+        {
+        GLX_LOG_INFO("CGlxHdmiSurfaceUpdater::~CGlxHdmiSurfaceUpdater() - cancel iAnimTimer");
+        iAnimTimer->Cancel();
+        }
+    GLX_LOG_INFO("CGlxHdmiSurfaceUpdater::~CGlxHdmiSurfaceUpdater() - deleteing ialfCompositionSurface");
+    delete ialfCompositionSurface;
     if(iWindow)
         {
         iWindow->RemoveBackgroundSurface(ETrue);
@@ -72,11 +90,7 @@
         iTimer->Cancel();
         }
     delete iTimer;   
-    if (iGlxDecoderAO)
-        {
-        delete iGlxDecoderAO;
-        }        
-    iGlxDecoderAO = NULL;
+    delete iGlxDecoderAO;
     iFsSession.Close();
     if (iSurfManager)
         {
@@ -151,9 +165,11 @@
 // CTor 
 // -----------------------------------------------------------------------------
 CGlxHdmiSurfaceUpdater::CGlxHdmiSurfaceUpdater(RWindow* aWindow,
-                          MGlxGenCallback* aCallBack): 
+                          MGlxGenCallback* aCallBack,TBool aEffectsOn): 
                           iWindow(aWindow), iCallBack(aCallBack), 
-                          iShwFsThumbnail(ETrue), iIsNonJpeg(EFalse)
+                          iEffectsOn(aEffectsOn),
+                          iShwFsThumbnail(ETrue), iIsNonJpeg(EFalse),
+                          iAnimCounter(0)
     {
     TRACER("CGlxHdmiSurfaceUpdater::CGlxHdmiSurfaceUpdater()");
     // Implement nothing here
@@ -167,7 +183,12 @@
     TRACER("CGlxHdmiSurfaceUpdater::ConstructL()");
     // Initiate the HDMI by assigning the necessary values
     InitiateHdmiL(aFsBitmap,aImageFile);
-    
+    if (iEffectsOn)
+        {
+        GLX_LOG_INFO("CGlxHdmiSurfaceUpdater::ConstructL() Creating iAnimTimer");
+        iAnimTimer = CPeriodic::NewL( CActive::EPriorityStandard-1 );
+        }
+
     TInt error = iFsSession.Connect ();
     GLX_LOG_INFO1("CGlxHdmiSurfaceUpdater::ConstructL() FsSession Connect error = %d", error);
     User::LeaveIfError(error);
@@ -213,7 +234,7 @@
     //Cancel the zoom timers if any
     if(iTimer->IsActive())
         {
-        GLX_LOG_INFO("CGlxHdmiSurfaceUpdater::UpdateNewImageL() - Cancel Timer");
+        GLX_LOG_INFO("CGlxHdmiSurfaceUpdater::UpdateNewImageL() - Cancel Zoom Timer");
         iTimer->Cancel();
         }
 
@@ -296,6 +317,15 @@
     GLX_LOG_INFO1("CGlxHdmiSurfaceUpdater::CreateSurfaceL Open Surface manager error = %d", error);
     User::LeaveIfError(error);
     
+    //Need to set the surface Hint for the surface to indicate
+    //that photos do not need overscan compensation and the image will
+    //be displayed in 720p resolution. 
+    //Refer error: HJVA-85DD25 for more info.
+    RSurfaceManager::THintPair surfHint;
+    TUid uid(KNullUid);
+    uid.iUid = surfaceHints::KSurfaceContent;
+    surfHint.Set(uid, surfaceHints::EStillImage, EFalse);
+    
     RSurfaceManager::TSurfaceCreationAttributesBuf attributes;
     attributes().iPixelFormat           = EUidPixelFormatARGB_8888;// EUidPixelFormatYUV_420Planar;
     attributes().iSize                  = iTvScreenSize;
@@ -305,7 +335,9 @@
     attributes().iAlignment             = KMulFactorToCreateBitmap;
     attributes().iContiguous            = EFalse;
     attributes().iMappable              = ETrue;
-        
+    attributes().iSurfaceHints          = &surfHint;
+    attributes().iHintCount             = 1;
+            
     error = iSurfManager->CreateSurface(attributes, iSurfId);
     GLX_LOG_INFO1("CGlxHdmiSurfaceUpdater::CreateSurfaceL, Creating surface error : %d",error);
     if(error == KErrNoMemory)
@@ -720,7 +752,24 @@
 void CGlxHdmiSurfaceUpdater::ShiftToCloningMode()
 	{
 	TRACER("CGlxHdmiSurfaceUpdater::ShiftToCloningMode()");
-	iWindow->RemoveBackgroundSurface(ETrue);
+	if (iAnimTimer)
+	    {
+	    GLX_LOG_INFO("CGlxHdmiSurfaceUpdater::ShiftToCloningMode() - cancel iAnimTimer");
+	    iAnimTimer->Cancel();
+	    delete iAnimTimer;
+	    iAnimTimer = NULL;
+	    }
+	if (ialfCompositionSurface)
+	    {
+	    GLX_LOG_INFO("CGlxHdmiSurfaceUpdater::ShiftToCloningMode() - deleteing ialfCompositionSurface");
+	    delete ialfCompositionSurface;
+	    ialfCompositionSurface= NULL;
+	    }
+    if (iWindow)
+        {
+        GLX_LOG_INFO("CGlxHdmiSurfaceUpdater::ShiftToCloningMode() - window present");
+        iWindow->RemoveBackgroundSurface(ETrue);
+        }
 	}
 	
 // -----------------------------------------------------------------------------
@@ -729,6 +778,11 @@
 void CGlxHdmiSurfaceUpdater::ShiftToPostingMode()
 	{
 	TRACER("CGlxHdmiSurfaceUpdater::ShiftToPostingMode()");
+    if (iEffectsOn && !iAnimTimer)
+        {
+        GLX_LOG_INFO("CGlxHdmiSurfaceUpdater::ShiftToPostingMode() Creating iAnimTimer");
+        iAnimTimer = CPeriodic::NewL( CActive::EPriorityStandard-1 );
+        }
 	if(iSurfManager)
 		{
 #ifdef _DEBUG
@@ -762,6 +816,18 @@
     ProcessTvImage();
     // set the surface onto background
     iWindow->SetBackgroundSurface(iConfig, ETrue); 
+    if (iEffectsOn)
+        {
+        //Cancel the Animation timer if any
+        if(!iAnimTimer->IsActive())
+            {
+            iAnimCounter = 0;
+            GLX_LOG_INFO("CGlxHdmiSurfaceUpdater::ShowFsThumbnailL() - Cancel iAnimTimer Timer");
+            iAnimTimer->Cancel();
+            }
+
+        FadeTheSurface(ETrue);
+        }
     }
 
 // -----------------------------------------------------------------------------
@@ -820,10 +886,96 @@
         iSurfBufferAO->iStatus = KRequestPending;
         iSurfBufferAO->SetActive();
         iSurfUpdateSession.NotifyWhenAvailable(iSurfBufferAO->iStatus);
-        TInt err = iSurfUpdateSession.SubmitUpdate(1, iSurfId, 0, NULL);
+        TInt err = iSurfUpdateSession.SubmitUpdate(KAllScreens, iSurfId, 0, NULL);
         GLX_LOG_INFO1("CGlxHdmiSurfaceUpdater::ProcessTvImage() Surfaceupdatesession error %d",err);
         }
     }
 
+// -----------------------------------------------------------------------------
+// FadeTheSurface 
+// -----------------------------------------------------------------------------
+void CGlxHdmiSurfaceUpdater::FadeTheSurface(TBool aFadeInOut)
+    {
+    TRACER("CGlxHdmiSurfaceUpdater::FadeTheSurface()");
+    iFadeIn = aFadeInOut;
+    if (iEffectsOn && !iAnimTimer)
+        {
+        GLX_LOG_INFO("CGlxHdmiSurfaceUpdater::FadeTheSurface() Creating iAnimTimer");
+        iAnimTimer = CPeriodic::NewL( CActive::EPriorityStandard-1 );
+        }
+    if (!ialfCompositionSurface)
+        {
+        GLX_LOG_INFO("CGlxHdmiSurfaceUpdater::ShowFsThumbnailL() - Creating alfcompositionsurface");
+        ialfCompositionSurface = CAlfCompositionSource::NewL(*iWindow);
+        }
+    if(!iAnimTimer->IsActive())
+        {
+        GLX_LOG_INFO("CGlxHdmiSurfaceUpdater::FadeTheSurface() - Start Timer");
+        if (iFadeIn)
+            iAnimTimer->Start(0,KAnimationTickerFadeIn,TCallBack( AnimationTimeOut,this ));
+        else
+            {
+            for (TInt i=0;i<=KFadeSteps;i++)
+                {
+                GLX_LOG_INFO1("CGlxHdmiSurfaceUpdater::Animate - Fading Out %d",i);
+                ialfCompositionSurface->SetOpacity(KFullOpaque -(i*KFadeEachStep));
+                User::After(KAnimationTicker);
+                }
+            }
+        }
+    else
+        {
+        iAnimCounter = 0;
+        // this case can be when fast swipe in Slideshow
+        ialfCompositionSurface->SetOpacity(KFullOpaque);       // set the opacity to maximum when fast swipe
+        GLX_LOG_INFO("CGlxHdmiSurfaceUpdater::FadeTheSurface() - cancel iAnimTimer");
+        iAnimTimer->Cancel();
+        }
+    }
 
+// ---------------------------------------------------------------------------
+// AnimationTimeOut
+// ---------------------------------------------------------------------------
+//  
+TInt CGlxHdmiSurfaceUpdater::AnimationTimeOut(TAny* aSelf)
+    {
+    TRACER("CGlxHdmiSurfaceUpdater::AnimationTimeOut");
+    if(aSelf)
+        {
+        CGlxHdmiSurfaceUpdater* self = static_cast <CGlxHdmiSurfaceUpdater*> (aSelf);
+        if (self)
+            {            
+            self->Animate();
+            }
+        }
+    return KErrNone;
+    }
 
+// -----------------------------------------------------------------------------
+// Animate 
+// -----------------------------------------------------------------------------
+void CGlxHdmiSurfaceUpdater::Animate()
+    {
+    TRACER("CGlxHdmiSurfaceUpdater::Animate");
+    iAnimCounter++;
+    if (!ialfCompositionSurface)
+        {
+        // createing alfcompositiosource
+        ialfCompositionSurface = CAlfCompositionSource::NewL(*iWindow);
+        }
+    if (iAnimCounter <=KFadeSteps && iFadeIn)
+        {
+        GLX_LOG_INFO1("CGlxHdmiSurfaceUpdater::Animate - iAnimCounter=%d",iAnimCounter);
+        // gaining brightness
+        GLX_LOG_INFO("CGlxHdmiSurfaceUpdater::Animate - Fading In");
+        ialfCompositionSurface->SetOpacity( KFullTransparent +(iAnimCounter*KFadeEachStep));
+        }
+    else
+        {
+        GLX_LOG_INFO("CGlxHdmiSurfaceUpdater::Animate() - cancel iAnimTimer");
+        iAnimCounter = 0;
+        // end the timer , as animation of fade in/out is complete
+        iAnimTimer->Cancel();
+        }
+    }
+
--- a/tvout/tvoutengine/src/glxtv.cpp	Wed Jun 16 13:08:54 2010 +0100
+++ b/tvout/tvoutengine/src/glxtv.cpp	Thu Jul 22 16:33:32 2010 +0100
@@ -356,25 +356,24 @@
 // Called when TV connection state changes
 //-----------------------------------------------------------------------------
 //
-void CGlxTv::HandleTvConnectionStatusChangedL( )
+void CGlxTv::HandleTvConnectionStatusChangedL(TTvChangeType aChangeType)
     {
-    TRACER("CGlxTv::HandleTvConnectionStatusChangedL()");
+	TRACER("CGlxTv::HandleTvConnectionStatusChangedL()");
 
-    if ( iTvConnectionMonitor->IsConnected() )
-        {
-        // Start monitoring the environment for changes
-        MonitorEnvironmentL();
-        // Calculate the TV Out screen buffer
-        CalcTvScreenSzL();
-        }
-    else
-        {
-        StopMonitoringEnvironment();
-        }
-    iTvObserver.HandleTvStatusChangedL( ETvConnectionChanged );
-    }
-    
-        
+	if (iTvConnectionMonitor->IsConnected())
+		{
+		// Start monitoring the environment for changes
+		MonitorEnvironmentL();
+		// Calculate the TV Out screen buffer
+		CalcTvScreenSzL();
+		}
+	else
+		{
+		StopMonitoringEnvironment();
+		}
+	
+	iTvObserver.HandleTvStatusChangedL(aChangeType);
+	}
    
 //-----------------------------------------------------------------------------
 // Retrieve the TV display aspect ratio
--- a/tvout/tvoutengine/src/glxtvconnectionmonitor.cpp	Wed Jun 16 13:08:54 2010 +0100
+++ b/tvout/tvoutengine/src/glxtvconnectionmonitor.cpp	Thu Jul 22 16:33:32 2010 +0100
@@ -17,10 +17,6 @@
 
 
 
-/**
- * @internal reviewed 24/08/2007 by D Holland
- */
-
 //  CLASS HEADER
 #include "glxtvconnectionmonitor.h"
 
@@ -69,17 +65,16 @@
 // Default C++ constructor
 //-----------------------------------------------------------------------------
 //
-CGlxTvConnectionMonitor::CGlxTvConnectionMonitor
-                           ( MGlxTvConnectionObserver& aConnectionObserver ) 
-                            :CActive(EPriorityStandard), 
-                             iConnectionObserver ( aConnectionObserver ),
-                             iTvOutConnectionState(EFalse),
-                             iHDMIConnectionState(EFalse)
+CGlxTvConnectionMonitor::CGlxTvConnectionMonitor(
+		MGlxTvConnectionObserver& aConnectionObserver) :
+	CActive(EPriorityStandard), iConnectionObserver(aConnectionObserver),
+			iIsTvOutConnected(EFalse), iIsHDMIConnected(EFalse),
+			iIsHeadSetConnected(EFalse)
 
-    {
-    TRACER("CGlxTvConnectionMonitor");
-    CActiveScheduler::Add( this );
-    }
+	{
+	TRACER("CGlxTvConnectionMonitor");
+	CActiveScheduler::Add(this);
+	}
 
 
 //-----------------------------------------------------------------------------
@@ -146,8 +141,8 @@
 TBool CGlxTvConnectionMonitor::IsConnected() const
     {
     TRACER("CGlxTvConnectionMonitor::IsConnected");
-    GLX_LOG_INFO1("CGlxTvConnectionMonitor::IsConnected iTvOutConnectionState=%d",iTvOutConnectionState);
-    return iTvOutConnectionState;
+    GLX_LOG_INFO1("CGlxTvConnectionMonitor::IsConnected iIsTvOutConnected=%d",iIsTvOutConnected);
+    return iIsTvOutConnected;
     }
 
 //-----------------------------------------------------------------------------
@@ -158,8 +153,8 @@
 TBool CGlxTvConnectionMonitor::IsHDMIConnected() const
     {
     TRACER("CGlxTvConnectionMonitor::IsHDMIConnected");
-    GLX_LOG_INFO1("CGlxTvConnectionMonitor::IsHDMIConnected iHDMIConnectionState=%d",iHDMIConnectionState);
-    return iHDMIConnectionState;
+    GLX_LOG_INFO1("CGlxTvConnectionMonitor::IsHDMIConnected iIsHDMIConnected=%d",iIsHDMIConnected);
+    return iIsHDMIConnected;
     }
 
 //-----------------------------------------------------------------------------
@@ -181,21 +176,36 @@
 //-----------------------------------------------------------------------------
 //
 void CGlxTvConnectionMonitor::IssueNotificationL()
-    {
-    TRACER("CGlxTvConnectionMonitor::IssueNotificationL");
-	TBool previousTvState = iTvOutConnectionState;
-	TBool previousHDMIState = iHDMIConnectionState;
+	{
+	TRACER("CGlxTvConnectionMonitor::IssueNotificationL");
+	TBool previousTvState = iIsTvOutConnected;
+	TBool previousHDMIState = iIsHDMIConnected;
+	TBool previousHeadSetState = iIsHeadSetConnected;
+	TTvChangeType changeType = EDisconnected;
 	
 	// Update the connection status
 	UpdateConnectionStatusL();
-    
+
 	// trigger tvstatus change only when there is actually a change the in the connection and not 
 	// for spurious events
-	if (previousTvState !=iTvOutConnectionState || previousHDMIState != iHDMIConnectionState)
-	    {
-	    GLX_LOG_INFO("CGlxTvConnectionMonitor::IssueNotificationL - Connection Altered");
-	    iConnectionObserver.HandleTvConnectionStatusChangedL();
-	    }
+	if (previousTvState != iIsTvOutConnected)
+		{
+		changeType = iIsTvOutConnected == EFalse ? EDisconnected : ETvConnectionChanged;
+		GLX_LOG_INFO1("CGlxTvConnectionMonitor::IssueNotificationL - TVOut Connection Changed %d", changeType);
+		iConnectionObserver.HandleTvConnectionStatusChangedL(changeType);	
+		}
+	else if (previousHDMIState != iIsHDMIConnected)
+		{
+		changeType = iIsHDMIConnected == EFalse ? EDisconnected : ETvConnectionChanged;
+		GLX_LOG_INFO1("CGlxTvConnectionMonitor::IssueNotificationL - HDMI Connection Changed %d", changeType);
+		iConnectionObserver.HandleTvConnectionStatusChangedL(changeType);	
+		}
+	else if (previousHeadSetState != iIsHeadSetConnected)
+		{
+		changeType = iIsHeadSetConnected == EFalse ? EDisconnected : ETvConnectionChanged;
+		GLX_LOG_INFO1("CGlxTvConnectionMonitor::IssueNotificationL - Headset Connection Changed %d", changeType);
+		iConnectionObserver.HandleTvConnectionStatusChangedL(changeType);	
+		}
 	}
 
 //-----------------------------------------------------------------------------
@@ -206,48 +216,72 @@
     {
     TRACER("CGlxTvConnectionMonitor::UpdateConnectionStatusL()");
 
-    GLX_LOG_INFO2("CGlxTvConnectionMonitor::UpdateConnectionStatusL previousTvState = %d , previousHDMIState = %d",
-            iTvOutConnectionState,iHDMIConnectionState);
+    GLX_LOG_INFO3("CGlxTvConnectionMonitor::UpdateConnectionStatusL previousTvState = %d , previousHDMIState = %d iIsHeadSetConnected=%d",
+            iIsTvOutConnected,iIsHDMIConnected,iIsHeadSetConnected);
+
+    // reset the states
+    iIsHDMIConnected = EFalse;
+    iIsTvOutConnected = EFalse;
+    iIsHeadSetConnected = EFalse;
 
     //gets the TV status in to the iCurrentAccArray and haves the Latest Accesory in 0-index
     User::LeaveIfError(iTvAccCon.GetAccessoryConnectionStatus(iCurrentAccArray));
 
     CAccPolSubblockNameArray* nameArray = CAccPolSubblockNameArray::NewL();
     CleanupStack::PushL(nameArray);
+
     //  Get the number of currently connected accessories
     //  Loop through each connected accessory looking for
     //  the desired capabilities
     //
     const TInt count = iCurrentAccArray.Count();
     GLX_LOG_INFO1("CGlxTvConnectionMonitor::UpdateConnectionStatusL current count value is %d",count);
-    for (TInt index = 0; index <count; index++)
+    for (TInt index = 0; index < count; index++)
         {
-        TAccPolGenericID genId = iCurrentAccArray.GetGenericIDL(index);
-        //  Get all supported capabilities for this connected accessory.
-        iTvAccCon.GetSubblockNameArrayL(genId, *nameArray);
+        const TAccPolGenericID genId = iCurrentAccArray.GetGenericIDL(index);
         //  Check if this connected accessory supports TV-Out capabality.
         GLX_LOG_INFO1("CGlxTvConnectionMonitor::UpdateConnectionStatusL current index value is %d",index);
-        if (nameArray->HasName(KAccVideoOut))
+        GLX_LOG_INFO("CGlxTvConnectionMonitor::UpdateConnectionStatusL Video Accessory Supported");
+        TAccPolNameRecord nameRecord;
+        nameRecord.SetNameL(KAccVideoOut);
+
+        if (genId.DeviceTypeCaps( KDTAVDevice ) &&
+                genId.PhysicalConnectionCaps( KPCHDMI ))
             {
-            GLX_LOG_INFO("CGlxTvConnectionMonitor::UpdateConnectionStatusL Video Accessory Supported");
-            TAccPolNameRecord nameRecord;
-            nameRecord.SetNameL(KAccVideoOut);
             TAccValueTypeTInt value;
-            iTvAccCon.GetValueL(genId, nameRecord, value);
-            if (value.iValue == EAccVideoOutEHDMI)
+            TInt err = iTvAccCon.GetValueL(genId, nameRecord, value);
+            if (err ==KErrNone)
                 {
-                GLX_LOG_INFO("CGlxTvConnectionMonitor::UpdateConnectionStatusL HDMI is connected");
-                iHDMIConnectionState = ETrue;
-                }
-            else if (value.iValue == EAccVideoOutCVideo)
-                {
-                GLX_LOG_INFO("CGlxTvConnectionMonitor::UpdateConnectionStatusL TV is connected");
-                iTvOutConnectionState = ETrue;
+                if (value.iValue == EAccVideoOutEHDMI)
+                    {
+                    GLX_LOG_INFO("CGlxTvConnectionMonitor::UpdateConnectionStatusL HDMI is connected");
+                    iIsHDMIConnected = ETrue;
+                    }
                 }
             }
-        }
+        else if (genId.DeviceTypeCaps( KDTAVDevice ) &&
+                genId.PhysicalConnectionCaps( KPCWired ))
+            {
+            TAccValueTypeTInt value;
+            TInt err = iTvAccCon.GetValueL(genId, nameRecord, value);
+            if (err ==KErrNone)
+                {
+                if (value.iValue == EAccVideoOutCVideo)
+                    {
+                    GLX_LOG_INFO("CGlxTvConnectionMonitor::UpdateConnectionStatusL Tv is connected");
+                    iIsTvOutConnected = ETrue;
+                    }
+                }
+            }
+		else if (genId.DeviceTypeCaps(KDTHeadset)
+				&& genId.PhysicalConnectionCaps(KPCWired))
+			{
+			GLX_LOG_INFO("CGlxTvConnectionMonitor::UpdateConnectionStatusL HeadSet connect");
+			iIsHeadSetConnected = ETrue;
+			}
+		}
     CleanupStack::PopAndDestroy(nameArray);
 
-    GLX_LOG_INFO2("CGlxTvConnectionMonitor::UpdateConnectionStatusL CurrentTvState = %d , CurrentHDMIState = %d",
-            iTvOutConnectionState,iHDMIConnectionState);
+    GLX_LOG_INFO3("CGlxTvConnectionMonitor::UpdateConnectionStatusL CurrentTvState = %d , CurrentHDMIState = %d, iIsHeadSetConnected=%d",
+            iIsTvOutConnected,iIsHDMIConnected,iIsHeadSetConnected);
     }
--- a/tvout/tvoutwrapper/inc/glxtvconnectionobserver.h	Wed Jun 16 13:08:54 2010 +0100
+++ b/tvout/tvoutwrapper/inc/glxtvconnectionobserver.h	Thu Jul 22 16:33:32 2010 +0100
@@ -38,6 +38,12 @@
      * destructor
      */
     ~CGlxConnectionObserver();
+    
+    /*
+     * IsHdmiConnected()
+     */
+    TBool IsHdmiConnected();
+    
 private:
     /*
      * ConstructL
--- a/tvout/tvoutwrapper/inc/glxtvoutwrapper.h	Wed Jun 16 13:08:54 2010 +0100
+++ b/tvout/tvoutwrapper/inc/glxtvoutwrapper.h	Thu Jul 22 16:33:32 2010 +0100
@@ -47,7 +47,7 @@
      * This also creates the private instance of the wrapper
      * to pass the model 
      */
-    void setModel(QAbstractItemModel* aModel);
+    void setModel(QAbstractItemModel* aModel,bool aEfectsOn = false);
     
     /*
      * Set the image on to HDMI
@@ -84,6 +84,14 @@
      * Note : This function is not required if bounce back effect finishes automatically
      */
     void deactivateZoom();
+    
+    /*
+     * Fadeing of the Surface
+     * @param1 ETrue - FadeIn ( as in gaining brightness )
+     *         EFalse - FadeOut ( as in loosing brightness ) 
+     */
+    void fadeSurface(bool aFadeInOut);
+    
 private:
     GlxTvOutWrapperPrivate* mTvOutWrapperPrivate;
 };
--- a/tvout/tvoutwrapper/inc/glxtvoutwrapper_p.h	Wed Jun 16 13:08:54 2010 +0100
+++ b/tvout/tvoutwrapper/inc/glxtvoutwrapper_p.h	Thu Jul 22 16:33:32 2010 +0100
@@ -27,16 +27,17 @@
 class CGlxHdmiController;
 
 // Converting the QVariant to CFbsBitmap*
-Q_DECLARE_METATYPE(CFbsBitmap*);
+Q_DECLARE_METATYPE(CFbsBitmap*)
 
 class GlxTvOutWrapperPrivate
     {
 public:
     /*
      * Static method to create an instance
+     * @param3 - to On the Effects of Slideshow - currently only fade in fade out
      */
     static GlxTvOutWrapperPrivate* Instance(GlxTvOutWrapper* aTvOutWrapper,
-            QAbstractItemModel* aModel);
+            QAbstractItemModel* aModel,bool aEfectsOn);
 
     /*
      * destructor
@@ -81,6 +82,14 @@
      * Deactivate zoom in posting mode.
      */
     void DeactivateZoom();
+    
+    /*
+     * Fadeing of the Surface
+     * @param1 ETrue - FadeIn ( as in gaining brightness )
+     *         EFalse - FadeOut ( as in loosing brightness ) 
+     */
+    void FadeSurface(bool aFadeInOut);
+
 private:
     /*
      * constructor
@@ -90,8 +99,9 @@
     
     /*
      * constructL()
+     * @param1 - to On the Effects of Slideshow - currently only fade in fade out
      */
-    void ConstructL();
+    void ConstructL(bool aEfectsOn);
     
     /*
      * SetNewImage
@@ -112,6 +122,7 @@
     
     bool       iHdmiConnected;                          // To check if the HDMI is connected
     bool       isImageSetToHdmi;                        // to check if the image is set to HDMI
+    bool       iIsPhotosInForeground;                   // to check if the Photos is on foreground
     };
 
 #endif //GLXTVOUTWRAPPERPRIVATE_P_H 
--- a/tvout/tvoutwrapper/src/glxtvconnectionobserver.cpp	Wed Jun 16 13:08:54 2010 +0100
+++ b/tvout/tvoutwrapper/src/glxtvconnectionobserver.cpp	Thu Jul 22 16:33:32 2010 +0100
@@ -19,12 +19,15 @@
 #include "glxtvconnectionobserver.h"
 #include "glxtvoutwrapper_p.h"
 
+#include <glxtracer.h>
+#include <glxlog.h>
 
 // -----------------------------------------------------------------------------
 // NewL
 // -----------------------------------------------------------------------------
 CGlxConnectionObserver* CGlxConnectionObserver::NewL(GlxTvOutWrapperPrivate* aTvWrapperPrivate)
     {
+    TRACER("CGlxConnectionObserver::NewL()");
     CGlxConnectionObserver* self = new (ELeave)CGlxConnectionObserver(aTvWrapperPrivate);
     self->ConstructL();
     return self;
@@ -35,6 +38,7 @@
 // -----------------------------------------------------------------------------
 void CGlxConnectionObserver::ConstructL()
     {
+    TRACER("CGlxConnectionObserver::ConstructL()");
     iGlxTvOut = CGlxTv::NewL(*this);    
     }
 
@@ -44,6 +48,7 @@
 CGlxConnectionObserver::CGlxConnectionObserver(GlxTvOutWrapperPrivate* aTvWrapperPrivate):
             iTvWrapperPrivate(aTvWrapperPrivate)
     {
+    TRACER("CGlxConnectionObserver::CGlxConnectionObserver()");
     // ctor
     }
 
@@ -52,6 +57,7 @@
 // -----------------------------------------------------------------------------
 CGlxConnectionObserver::~CGlxConnectionObserver()
     {
+    TRACER("CGlxConnectionObserver::~CGlxConnectionObserver()");
     if (iGlxTvOut){
         delete iGlxTvOut;
         iGlxTvOut = NULL;
@@ -63,14 +69,25 @@
 // -----------------------------------------------------------------------------
 void CGlxConnectionObserver::HandleTvStatusChangedL(TTvChangeType aChangeType)
     {
+    TRACER("CGlxConnectionObserver::HandleTvStatusChangedL()");
     if ( aChangeType == ETvConnectionChanged ){
-        if ( iGlxTvOut->IsHDMIConnected() ){
+        if ( iGlxTvOut->IsHDMIConnected() )
+            {
+            GLX_LOG_INFO("CGlxHdmiController::HandleTvStatusChangedL() - HDMI and TV Connected");
             iTvWrapperPrivate->HandleConnectionChange(ETrue);
-            // emit HDMI connected signal
             }
         else{
+            GLX_LOG_INFO("CGlxConnectionObserver::HandleTvStatusChangedL() - DisConnected");
             iTvWrapperPrivate->HandleConnectionChange(EFalse);
-            // emit HDMI disconnected
             }
         }
     }
+
+// -----------------------------------------------------------------------------
+// IsHdmiConnected
+// -----------------------------------------------------------------------------
+TBool CGlxConnectionObserver::IsHdmiConnected()
+    {
+    TRACER("CGlxConnectionObserver::IsHdmiConnected()");
+    return iGlxTvOut->IsHDMIConnected();
+    }
--- a/tvout/tvoutwrapper/src/glxtvoutwrapper.cpp	Wed Jun 16 13:08:54 2010 +0100
+++ b/tvout/tvoutwrapper/src/glxtvoutwrapper.cpp	Thu Jul 22 16:33:32 2010 +0100
@@ -43,11 +43,11 @@
 // setModel 
 // and Create the private instance to pass the model
 // -----------------------------------------------------------------------------
-void GlxTvOutWrapper::setModel(QAbstractItemModel* aModel)
+void GlxTvOutWrapper::setModel(QAbstractItemModel* aModel,bool aEfectsOn)
     {
     if (!mTvOutWrapperPrivate)
         {
-        mTvOutWrapperPrivate = GlxTvOutWrapperPrivate::Instance(this,aModel);
+        mTvOutWrapperPrivate = GlxTvOutWrapperPrivate::Instance(this,aModel,aEfectsOn);
         }
     else
         {
@@ -115,4 +115,14 @@
         }
     }
 
+// -----------------------------------------------------------------------------
+// deactivateZoom 
+// -----------------------------------------------------------------------------
+void GlxTvOutWrapper::fadeSurface(bool aFadeInOut)
+    {
+    if(mTvOutWrapperPrivate){
+        mTvOutWrapperPrivate->FadeSurface(aFadeInOut);
+        }
+    }
+
 // End of file
--- a/tvout/tvoutwrapper/src/glxtvoutwrapper_p.cpp	Wed Jun 16 13:08:54 2010 +0100
+++ b/tvout/tvoutwrapper/src/glxtvoutwrapper_p.cpp	Thu Jul 22 16:33:32 2010 +0100
@@ -22,15 +22,19 @@
 #include "glxmodelparm.h"
 #include "glxviewids.h"
 
+#include "glxtracer.h"
+#include "glxlog.h"
+
 // -----------------------------------------------------------------------------
 // Static method to create the private wrapper instance 
 // -----------------------------------------------------------------------------
 GlxTvOutWrapperPrivate* GlxTvOutWrapperPrivate::Instance(GlxTvOutWrapper* aTvOutWrapper,
-        QAbstractItemModel* aModel)
+        QAbstractItemModel* aModel,bool aEfectsOn)
     {
+    TRACER("GlxTvOutWrapperPrivate::Instance()");
     GlxTvOutWrapperPrivate* self = new GlxTvOutWrapperPrivate(aTvOutWrapper,aModel);
     if (self){
-        TRAPD(err,self->ConstructL());
+        TRAPD(err,self->ConstructL(aEfectsOn));
         if(err != KErrNone){
             delete self;
             self = NULL;
@@ -43,12 +47,13 @@
 // ConstructL
 // This creates the Connection observer and the Hdmi Controller
 // -----------------------------------------------------------------------------
-void GlxTvOutWrapperPrivate::ConstructL()
+void GlxTvOutWrapperPrivate::ConstructL(bool aEfectsOn)
     {
+    TRACER("GlxTvOutWrapperPrivate::ConstructL()");
     iConnectionObserver = CGlxConnectionObserver::NewL(this);
     if (!iHdmiController) {
-        iHdmiController = CGlxHdmiController::NewL();
-        iHdmiConnected = iHdmiController->IsHDMIConnected();
+        iHdmiController = CGlxHdmiController::NewL(aEfectsOn);
+        iHdmiConnected = iConnectionObserver->IsHdmiConnected();
         }
     }
     
@@ -61,8 +66,10 @@
                 iConnectionObserver(NULL),
                 iHdmiController(NULL),
                 iHdmiConnected(false),
-                isImageSetToHdmi(false)
+                isImageSetToHdmi(false),
+                iIsPhotosInForeground(false)
     {
+    TRACER("GlxTvOutWrapperPrivate::GlxTvOutWrapperPrivate()");
     // Do Nothing
     }
 
@@ -71,6 +78,7 @@
 // -----------------------------------------------------------------------------
 GlxTvOutWrapperPrivate::~GlxTvOutWrapperPrivate()
     {
+    TRACER("GlxTvOutWrapperPrivate::~GlxTvOutWrapperPrivate()");
     if (iConnectionObserver){
     delete iConnectionObserver;
     iConnectionObserver = NULL;
@@ -87,10 +95,13 @@
 // -----------------------------------------------------------------------------
 void GlxTvOutWrapperPrivate::HandleConnectionChange(bool aConnected)
     {
+    TRACER("GlxTvOutWrapperPrivate::HandleConnectionChange()");
     iHdmiConnected = aConnected;
     // if Connection state positive and uri/bmp are not passed to HDMI already
     // then it is a new image - Set it.
-    if (!isImageSetToHdmi && iHdmiConnected && getSubState() !=IMAGEVIEWER_S)
+    GLX_LOG_INFO2("GlxTvOutWrapperPrivate::HandleConnectionChange() - isImageSetToHdmi-%d, iHdmiConnected-%d",
+            isImageSetToHdmi,iHdmiConnected);
+    if (!isImageSetToHdmi && iHdmiConnected && getSubState() !=IMAGEVIEWER_S && iIsPhotosInForeground)
         {
         SetNewImage();
         }
@@ -102,6 +113,8 @@
 // -----------------------------------------------------------------------------
 void GlxTvOutWrapperPrivate::SetImagetoHDMI()
     {
+    TRACER("GlxTvOutWrapperPrivate::SetImagetoHDMI()");
+    iIsPhotosInForeground = true;
     if (iHdmiConnected)
         {
         // Set the Image
@@ -124,10 +137,12 @@
 // -----------------------------------------------------------------------------
 void GlxTvOutWrapperPrivate::SetNewImage()
     {
+    TRACER("GlxTvOutWrapperPrivate::SetNewImage()");
     QVariant focusVariant =(iModel->data(iModel->index(0,0),GlxFocusIndexRole)); 
     int focusIndex;
     if (focusVariant.isValid() && focusVariant.canConvert<int>()) {
         focusIndex = (focusVariant.value<int>());
+        GLX_LOG_INFO1("GlxTvOutWrapperPrivate::SetNewImage() focusindex = %d",focusIndex);
 	}
 	else{
 		return ;
@@ -144,6 +159,7 @@
     QVariant var = (iModel->data(iModel->index(focusIndex,0),GlxHdmiBitmap));
     CFbsBitmap* bmp = var.value<CFbsBitmap*>();
     iHdmiController->SetImageL(aPtr,bmp);
+    iIsPhotosInForeground = true;
     }
 
 // -----------------------------------------------------------------------------
@@ -151,7 +167,9 @@
 // -----------------------------------------------------------------------------
 void GlxTvOutWrapperPrivate::SetToCloningMode()
     {
-    if(iHdmiController){
+    TRACER("GlxTvOutWrapperPrivate::SetToCloningMode()");
+    iIsPhotosInForeground = false;
+    if(iHdmiController && iHdmiConnected){
     iHdmiController->ShiftToCloningMode();
     }
     }
@@ -161,7 +179,16 @@
 // -----------------------------------------------------------------------------
 void GlxTvOutWrapperPrivate::SetToNativeMode()
     {
-    if(iHdmiController){
+    TRACER("GlxTvOutWrapperPrivate::SetToNativeMode()");
+    iIsPhotosInForeground = true;
+    
+    if(iHdmiController && iHdmiConnected) {
+    if (!isImageSetToHdmi){
+    }
+    SetNewImage(); // this case can occur when FS image is opened and set to background
+                   // HDMI cable connected and then FS is brought to foreground
+    }
+    else{
     iHdmiController->ShiftToPostingMode();
     }
     }
@@ -171,7 +198,8 @@
 // -----------------------------------------------------------------------------
 void GlxTvOutWrapperPrivate::ItemNotSupported()
     {
-    if(iHdmiController){
+    TRACER("GlxTvOutWrapperPrivate::ItemNotSupported()");
+    if(iHdmiController && iHdmiConnected){
     iHdmiController->ItemNotSupported();
     }
     }
@@ -181,7 +209,7 @@
 // -----------------------------------------------------------------------------
 void GlxTvOutWrapperPrivate::ActivateZoom(bool autoZoomOut)
     {
-    if(iHdmiController){
+    if(iHdmiController && iHdmiConnected){
     iHdmiController->ActivateZoom(autoZoomOut);
     }
     }
@@ -191,12 +219,22 @@
 // -----------------------------------------------------------------------------
 void GlxTvOutWrapperPrivate::DeactivateZoom()
     {
-    if(iHdmiController){
+    if(iHdmiController && iHdmiConnected){
     iHdmiController->DeactivateZoom();
     }
     }
 
 // -----------------------------------------------------------------------------
+// FadeSurface 
+// -----------------------------------------------------------------------------
+void GlxTvOutWrapperPrivate::FadeSurface(bool aFadeInOut)
+    {
+    if(iHdmiController && iHdmiConnected){
+    iHdmiController->FadeSurface(aFadeInOut);
+    }
+    }
+
+// -----------------------------------------------------------------------------
 // getSubState 
 // -----------------------------------------------------------------------------
 int GlxTvOutWrapperPrivate::getSubState()
--- a/tvout/tvoutwrapper/tvoutwrapper.pro	Wed Jun 16 13:08:54 2010 +0100
+++ b/tvout/tvoutwrapper/tvoutwrapper.pro	Thu Jul 22 16:33:32 2010 +0100
@@ -24,6 +24,7 @@
 			
 CONFIG += hb
 LIBS +=  -lglxtvout.dll \
+		-lglxlogging.dll \
 
 DEFINES += BUILD_TVOUTWRAPPER
 
@@ -32,6 +33,7 @@
 TARGET.UID3 = 0x2000A772
 TARGET.CAPABILITY = ALL -TCB 
 TARGET.EPOCALLOWDLLDATA = 1
+MMP_RULES += SMPSAFE 
 }	
 # Input
 HEADERS += inc/glxtvoutwrapper.h \
@@ -42,4 +44,13 @@
 			src/glxtvoutwrapper_p.cpp \
 			src/glxtvconnectionobserver.cpp
 
-DEFINES += QT_NO_DEBUG_OUTPUT QT_NO_WARNING_OUTPUT
\ No newline at end of file
+DEFINES += QT_NO_DEBUG_OUTPUT QT_NO_WARNING_OUTPUT
+
+defBlock = \      
+"$${LITERAL_HASH}if defined(EABI)" \
+"DEFFILE  ../eabi/glxtvoutwrapper.def" \
+	 "$${LITERAL_HASH}else" \
+	 "DEFFILE  ../bwins/glxtvoutwrapper.def" \
+             "$${LITERAL_HASH}endif"
+	
+MMP_RULES += defBlock
--- a/ui/bwins/glxviewsu.def	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/bwins/glxviewsu.def	Thu Jul 22 16:33:32 2010 +0100
@@ -1,37 +1,3 @@
 EXPORTS
-	?qt_metacast@GlxSlideShowEffectEngine@@UAEPAXPBD@Z @ 1 NONAME ; void * GlxSlideShowEffectEngine::qt_metacast(char const *)
-	?deRegisterEffect@GlxSlideShowEffectEngine@@QAEXABVQString@@@Z @ 2 NONAME ; void GlxSlideShowEffectEngine::deRegisterEffect(class QString const &)
-	?transitionEffectFinished@GlxSlideShowEffectEngine@@QAEXABUEffectStatus@HbEffect@@@Z @ 3 NONAME ; void GlxSlideShowEffectEngine::transitionEffectFinished(struct HbEffect::EffectStatus const &)
-	?cancelEffect@GlxSlideShowEffectEngine@@QAEXAAV?$QList@PAVQGraphicsItem@@@@W4GlxEffect@@@Z @ 4 NONAME ; void GlxSlideShowEffectEngine::cancelEffect(class QList<class QGraphicsItem *> &, enum GlxEffect)
-	?initTransitionEffect@GlxSlideShowEffectEngine@@AAEXXZ @ 5 NONAME ; void GlxSlideShowEffectEngine::initTransitionEffect(void)
-	?slideShowEffectFinished@GlxSlideShowEffectEngine@@QAEXABUEffectStatus@HbEffect@@@Z @ 6 NONAME ; void GlxSlideShowEffectEngine::slideShowEffectFinished(struct HbEffect::EffectStatus const &)
-	?tr@GlxSlideShowEffectEngine@@SA?AVQString@@PBD0H@Z @ 7 NONAME ; class QString GlxSlideShowEffectEngine::tr(char const *, char const *, int)
-	?slideDelayTime@GlxSlideShowEffectEngine@@QAEHXZ @ 8 NONAME ; int GlxSlideShowEffectEngine::slideDelayTime(void)
-	?registerTransitionEffect@GlxSlideShowEffectEngine@@QAEXXZ @ 9 NONAME ; void GlxSlideShowEffectEngine::registerTransitionEffect(void)
-	?staticMetaObject@GlxSlideShowEffectEngine@@2UQMetaObject@@B @ 10 NONAME ; struct QMetaObject const GlxSlideShowEffectEngine::staticMetaObject
-	??_EGlxSlideShowEffectEngine@@UAE@I@Z @ 11 NONAME ; GlxSlideShowEffectEngine::~GlxSlideShowEffectEngine(unsigned int)
-	?trUtf8@GlxSlideShowEffectEngine@@SA?AVQString@@PBD0H@Z @ 12 NONAME ; class QString GlxSlideShowEffectEngine::trUtf8(char const *, char const *, int)
-	?createView@GlxViewsFactory@@SAPAVGlxView@@HPAVHbMainWindow@@@Z @ 13 NONAME ; class GlxView * GlxViewsFactory::createView(int, class HbMainWindow *)
-	?trUtf8@GlxSlideShowEffectEngine@@SA?AVQString@@PBD0@Z @ 14 NONAME ; class QString GlxSlideShowEffectEngine::trUtf8(char const *, char const *)
-	??1GlxSlideShowEffectEngine@@UAE@XZ @ 15 NONAME ; GlxSlideShowEffectEngine::~GlxSlideShowEffectEngine(void)
-	?cleanTransitionEfffect@GlxSlideShowEffectEngine@@AAEXXZ @ 16 NONAME ; void GlxSlideShowEffectEngine::cleanTransitionEfffect(void)
-	?runEffect@GlxSlideShowEffectEngine@@QAEXPAVQGraphicsItem@@ABVQString@@@Z @ 17 NONAME ; void GlxSlideShowEffectEngine::runEffect(class QGraphicsItem *, class QString const &)
-	?tr@GlxSlideShowEffectEngine@@SA?AVQString@@PBD0@Z @ 18 NONAME ; class QString GlxSlideShowEffectEngine::tr(char const *, char const *)
-	?getStaticMetaObject@GlxSlideShowEffectEngine@@SAABUQMetaObject@@XZ @ 19 NONAME ; struct QMetaObject const & GlxSlideShowEffectEngine::getStaticMetaObject(void)
-	?qt_metacall@GlxSlideShowEffectEngine@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 20 NONAME ; int GlxSlideShowEffectEngine::qt_metacall(enum QMetaObject::Call, int, void * *)
-	?isEffectRuning@GlxSlideShowEffectEngine@@QAE_NPAVQGraphicsItem@@@Z @ 21 NONAME ; bool GlxSlideShowEffectEngine::isEffectRuning(class QGraphicsItem *)
-	??0GlxSlideShowEffectEngine@@QAE@XZ @ 22 NONAME ; GlxSlideShowEffectEngine::GlxSlideShowEffectEngine(void)
-	?runEffect@GlxSlideShowEffectEngine@@QAEXAAV?$QList@PAVQGraphicsItem@@@@ABVQString@@@Z @ 23 NONAME ; void GlxSlideShowEffectEngine::runEffect(class QList<class QGraphicsItem *> &, class QString const &)
-	?readSetting@GlxSlideShowEffectEngine@@QAEXXZ @ 24 NONAME ; void GlxSlideShowEffectEngine::readSetting(void)
-	?effectPluginResolver@GlxSlideShowEffectEngine@@AAEXXZ @ 25 NONAME ; void GlxSlideShowEffectEngine::effectPluginResolver(void)
-	?slideShowMoveDir@GlxSlideShowEffectEngine@@QAE?AW4GlxSlideShowMoveDir@@XZ @ 26 NONAME ; enum GlxSlideShowMoveDir GlxSlideShowEffectEngine::slideShowMoveDir(void)
-	?metaObject@GlxSlideShowEffectEngine@@UBEPBUQMetaObject@@XZ @ 27 NONAME ; struct QMetaObject const * GlxSlideShowEffectEngine::metaObject(void) const
-	?runEffect@GlxSlideShowEffectEngine@@QAEXAAV?$QList@PAVQGraphicsItem@@@@W4GlxEffect@@@Z @ 28 NONAME ; void GlxSlideShowEffectEngine::runEffect(class QList<class QGraphicsItem *> &, enum GlxEffect)
-	?cancelEffect@GlxSlideShowEffectEngine@@QAEXPAVQGraphicsItem@@@Z @ 29 NONAME ; void GlxSlideShowEffectEngine::cancelEffect(class QGraphicsItem *)
-	?setEffect@GlxSlideShowEffectEngine@@QAEXW4GlxEffect@@@Z @ 30 NONAME ; void GlxSlideShowEffectEngine::setEffect(enum GlxEffect)
-	?effectFinished@GlxSlideShowEffectEngine@@IAEXXZ @ 31 NONAME ; void GlxSlideShowEffectEngine::effectFinished(void)
-	?isEffectRuning@GlxSlideShowEffectEngine@@QAE_NABV?$QList@PAVQGraphicsItem@@@@@Z @ 32 NONAME ; bool GlxSlideShowEffectEngine::isEffectRuning(class QList<class QGraphicsItem *> const &)
-	?registerEffect@GlxSlideShowEffectEngine@@QAEXABVQString@@@Z @ 33 NONAME ; void GlxSlideShowEffectEngine::registerEffect(class QString const &)
-	?cancelEffect@GlxSlideShowEffectEngine@@QAEXABV?$QList@PAVQGraphicsItem@@@@@Z @ 34 NONAME ; void GlxSlideShowEffectEngine::cancelEffect(class QList<class QGraphicsItem *> const &)
-	?deregistertransitionEffect@GlxSlideShowEffectEngine@@QAEXXZ @ 35 NONAME ; void GlxSlideShowEffectEngine::deregistertransitionEffect(void)
+	?createView@GlxViewsFactory@@SAPAVGlxView@@HPAVHbMainWindow@@@Z @ 1 NONAME ; class GlxView * GlxViewsFactory::createView(int, class HbMainWindow *)
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ui/bwins/glxviewutilitiesu.def	Thu Jul 22 16:33:32 2010 +0100
@@ -0,0 +1,36 @@
+EXPORTS
+	??0GlxSettingInterface@@IAE@XZ @ 1 NONAME ; GlxSettingInterface::GlxSettingInterface(void)
+	?initTransitionEffect@GlxEffectEngine@@AAEXXZ @ 2 NONAME ; void GlxEffectEngine::initTransitionEffect(void)
+	?transitionEffectFinished@GlxEffectEngine@@QAEXABUEffectStatus@HbEffect@@@Z @ 3 NONAME ; void GlxEffectEngine::transitionEffectFinished(struct HbEffect::EffectStatus const &)
+	?metaObject@GlxEffectEngine@@UBEPBUQMetaObject@@XZ @ 4 NONAME ; struct QMetaObject const * GlxEffectEngine::metaObject(void) const
+	??1GlxEffectEngine@@UAE@XZ @ 5 NONAME ; GlxEffectEngine::~GlxEffectEngine(void)
+	??_EGlxEffectEngine@@UAE@I@Z @ 6 NONAME ; GlxEffectEngine::~GlxEffectEngine(unsigned int)
+	?qt_metacast@GlxEffectEngine@@UAEPAXPBD@Z @ 7 NONAME ; void * GlxEffectEngine::qt_metacast(char const *)
+	?isEffectRuning@GlxEffectEngine@@QAE_NABV?$QList@PAVQGraphicsItem@@@@@Z @ 8 NONAME ; bool GlxEffectEngine::isEffectRuning(class QList<class QGraphicsItem *> const &)
+	?getStaticMetaObject@GlxEffectEngine@@SAABUQMetaObject@@XZ @ 9 NONAME ; struct QMetaObject const & GlxEffectEngine::getStaticMetaObject(void)
+	?staticMetaObject@GlxEffectEngine@@2UQMetaObject@@B @ 10 NONAME ; struct QMetaObject const GlxEffectEngine::staticMetaObject
+	?registerTransitionEffect@GlxEffectEngine@@QAEXXZ @ 11 NONAME ; void GlxEffectEngine::registerTransitionEffect(void)
+	?cleanTransitionEfffect@GlxEffectEngine@@AAEXXZ @ 12 NONAME ; void GlxEffectEngine::cleanTransitionEfffect(void)
+	?deregistertransitionEffect@GlxEffectEngine@@QAEXXZ @ 13 NONAME ; void GlxEffectEngine::deregistertransitionEffect(void)
+	?instance@GlxSettingInterface@@SAPAV1@XZ @ 14 NONAME ; class GlxSettingInterface * GlxSettingInterface::instance(void)
+	?trUtf8@GlxEffectEngine@@SA?AVQString@@PBD0H@Z @ 15 NONAME ; class QString GlxEffectEngine::trUtf8(char const *, char const *, int)
+	?effectFinished@GlxEffectEngine@@IAEXXZ @ 16 NONAME ; void GlxEffectEngine::effectFinished(void)
+	??0GlxEffectEngine@@QAE@XZ @ 17 NONAME ; GlxEffectEngine::GlxEffectEngine(void)
+	?runEffect@GlxEffectEngine@@QAEXAAV?$QList@PAVQGraphicsItem@@@@W4GlxEffect@@@Z @ 18 NONAME ; void GlxEffectEngine::runEffect(class QList<class QGraphicsItem *> &, enum GlxEffect)
+	??_EGlxSettingInterface@@UAE@I@Z @ 19 NONAME ; GlxSettingInterface::~GlxSettingInterface(unsigned int)
+	?deRegisterEffect@GlxEffectEngine@@QAEXABVQString@@@Z @ 20 NONAME ; void GlxEffectEngine::deRegisterEffect(class QString const &)
+	?runEffect@GlxEffectEngine@@QAEXAAV?$QList@PAVQGraphicsItem@@@@ABVQString@@@Z @ 21 NONAME ; void GlxEffectEngine::runEffect(class QList<class QGraphicsItem *> &, class QString const &)
+	?trUtf8@GlxEffectEngine@@SA?AVQString@@PBD0@Z @ 22 NONAME ; class QString GlxEffectEngine::trUtf8(char const *, char const *)
+	??0GlxSettingInterface@@IAE@AAV0@@Z @ 23 NONAME ; GlxSettingInterface::GlxSettingInterface(class GlxSettingInterface &)
+	?cancelEffect@GlxEffectEngine@@QAEXAAV?$QList@PAVQGraphicsItem@@@@W4GlxEffect@@@Z @ 24 NONAME ; void GlxEffectEngine::cancelEffect(class QList<class QGraphicsItem *> &, enum GlxEffect)
+	?tr@GlxEffectEngine@@SA?AVQString@@PBD0@Z @ 25 NONAME ; class QString GlxEffectEngine::tr(char const *, char const *)
+	?isEffectRuning@GlxEffectEngine@@QAE_NPAVQGraphicsItem@@@Z @ 26 NONAME ; bool GlxEffectEngine::isEffectRuning(class QGraphicsItem *)
+	?qt_metacall@GlxEffectEngine@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 27 NONAME ; int GlxEffectEngine::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?runEffect@GlxEffectEngine@@QAEXPAVQGraphicsItem@@ABVQString@@@Z @ 28 NONAME ; void GlxEffectEngine::runEffect(class QGraphicsItem *, class QString const &)
+	?slideShowEffectFinished@GlxEffectEngine@@QAEXABUEffectStatus@HbEffect@@@Z @ 29 NONAME ; void GlxEffectEngine::slideShowEffectFinished(struct HbEffect::EffectStatus const &)
+	?registerEffect@GlxEffectEngine@@QAEXABVQString@@@Z @ 30 NONAME ; void GlxEffectEngine::registerEffect(class QString const &)
+	?cancelEffect@GlxEffectEngine@@QAEXABV?$QList@PAVQGraphicsItem@@@@@Z @ 31 NONAME ; void GlxEffectEngine::cancelEffect(class QList<class QGraphicsItem *> const &)
+	?tr@GlxEffectEngine@@SA?AVQString@@PBD0H@Z @ 32 NONAME ; class QString GlxEffectEngine::tr(char const *, char const *, int)
+	??1GlxSettingInterface@@MAE@XZ @ 33 NONAME ; GlxSettingInterface::~GlxSettingInterface(void)
+	?cancelEffect@GlxEffectEngine@@QAEXPAVQGraphicsItem@@@Z @ 34 NONAME ; void GlxEffectEngine::cancelEffect(class QGraphicsItem *)
+
--- a/ui/commandhandlers/bwins/glxcommoncommandhandlersu.def	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/commandhandlers/bwins/glxcommoncommandhandlersu.def	Thu Jul 22 16:33:32 2010 +0100
@@ -1,66 +1,81 @@
 EXPORTS
-	??_EGlxCommandHandlerRemoveFrom@@UAE@I@Z @ 1 NONAME ; GlxCommandHandlerRemoveFrom::~GlxCommandHandlerRemoveFrom(unsigned int)
-	?iSelectionCount@GlxCommandHandlerAddToContainer@@0HA @ 2 NONAME ; int GlxCommandHandlerAddToContainer::iSelectionCount
-	?RotateImageL@GlxCommandHandlerRotate@@AAEXV?$TBuf@$0BAA@@@@Z @ 3 NONAME ; void GlxCommandHandlerRotate::RotateImageL(class TBuf<256>)
-	?qt_metacall@GlxCommandHandlerNewMedia@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 4 NONAME ; int GlxCommandHandlerNewMedia::qt_metacall(enum QMetaObject::Call, int, void * *)
-	?ProgressTextL@GlxCommandHandlerRemoveFrom@@EBE?AVQString@@XZ @ 5 NONAME ; class QString GlxCommandHandlerRemoveFrom::ProgressTextL(void) const
-	??0GlxCommandHandlerRename@@QAE@XZ @ 6 NONAME ; GlxCommandHandlerRename::GlxCommandHandlerRename(void)
-	??1GlxCommandHandlerAddToContainer@@UAE@XZ @ 7 NONAME ; GlxCommandHandlerAddToContainer::~GlxCommandHandlerAddToContainer(void)
-	?getStaticMetaObject@GlxCommandHandlerNewMedia@@SAABUQMetaObject@@XZ @ 8 NONAME ; struct QMetaObject const & GlxCommandHandlerNewMedia::getStaticMetaObject(void)
-	?SetImageOrientationL@GlxCommandHandlerRotate@@AAEXG@Z @ 9 NONAME ; void GlxCommandHandlerRotate::SetImageOrientationL(unsigned short)
-	?ConfirmationTextL@GlxCommandHandlerDelete@@EBE?AVQString@@_N@Z @ 10 NONAME ; class QString GlxCommandHandlerDelete::ConfirmationTextL(bool) const
-	??_EGlxCommandHandlerSend@@UAE@I@Z @ 11 NONAME ; GlxCommandHandlerSend::~GlxCommandHandlerSend(unsigned int)
-	?trUtf8@GlxCommandHandlerNewMedia@@SA?AVQString@@PBD0@Z @ 12 NONAME ; class QString GlxCommandHandlerNewMedia::trUtf8(char const *, char const *)
-	?HandleErrorL@GlxCommandHandlerNewMedia@@MAEXH@Z @ 13 NONAME ; void GlxCommandHandlerNewMedia::HandleErrorL(int)
-	?GetName@GlxCommandHandlerRename@@ABE?AVQString@@AAVMGlxMediaList@@@Z @ 14 NONAME ; class QString GlxCommandHandlerRename::GetName(class MGlxMediaList &) const
-	?tr@GlxCommandHandlerNewMedia@@SA?AVQString@@PBD0H@Z @ 15 NONAME ; class QString GlxCommandHandlerNewMedia::tr(char const *, char const *, int)
-	?DoExecuteCommandL@GlxCommandHandlerRotate@@UAEXHAAVMGlxMediaList@@AAH@Z @ 16 NONAME ; void GlxCommandHandlerRotate::DoExecuteCommandL(int, class MGlxMediaList &, int &)
-	?metaObject@GlxCommandHandlerNewMedia@@UBEPBUQMetaObject@@XZ @ 17 NONAME ; struct QMetaObject const * GlxCommandHandlerNewMedia::metaObject(void) const
-	?CreateCommandL@GlxCommandHandlerDelete@@UBEPAVCMPXMedia@@HAAVMGlxMediaList@@AAH@Z @ 18 NONAME ; class CMPXMedia * GlxCommandHandlerDelete::CreateCommandL(int, class MGlxMediaList &, int &) const
-	?CreateCommandL@GlxCommandHandlerAddToContainer@@UBEPAVCMPXMedia@@HAAVMGlxMediaList@@AAH@Z @ 19 NONAME ; class CMPXMedia * GlxCommandHandlerAddToContainer::CreateCommandL(int, class MGlxMediaList &, int &) const
-	?CompletionTextL@GlxCommandHandlerDelete@@EBE?AVQString@@XZ @ 20 NONAME ; class QString GlxCommandHandlerDelete::CompletionTextL(void) const
-	?DoHandleCommandCompleteL@GlxCommandHandlerNewMedia@@MAEXPAXPAVCMPXMedia@@HPAVMGlxMediaList@@@Z @ 21 NONAME ; void GlxCommandHandlerNewMedia::DoHandleCommandCompleteL(void *, class CMPXMedia *, int, class MGlxMediaList *)
-	?GenerateNewMediaItemTitleL@GlxCommandHandlerNewMedia@@ABE?AVQString@@V2@AAVMGlxMediaList@@@Z @ 22 NONAME ; class QString GlxCommandHandlerNewMedia::GenerateNewMediaItemTitleL(class QString, class MGlxMediaList &) const
-	??1GlxCommandHandlerRemoveFrom@@UAE@XZ @ 23 NONAME ; GlxCommandHandlerRemoveFrom::~GlxCommandHandlerRemoveFrom(void)
-	?qt_metacast@GlxCommandHandlerNewMedia@@UAEPAXPBD@Z @ 24 NONAME ; void * GlxCommandHandlerNewMedia::qt_metacast(char const *)
-	??0GlxCommandHandlerRemoveFrom@@QAE@XZ @ 25 NONAME ; GlxCommandHandlerRemoveFrom::GlxCommandHandlerRemoveFrom(void)
-	?HandleItemAddedL@GlxCommandHandlerNewMedia@@MAEXHHPAVMGlxMediaList@@@Z @ 26 NONAME ; void GlxCommandHandlerNewMedia::HandleItemAddedL(int, int, class MGlxMediaList *)
-	?tr@GlxCommandHandlerNewMedia@@SA?AVQString@@PBD0@Z @ 27 NONAME ; class QString GlxCommandHandlerNewMedia::tr(char const *, char const *)
-	?createNewMedia@GlxCommandHandlerAddToContainer@@ABEXXZ @ 28 NONAME ; void GlxCommandHandlerAddToContainer::createNewMedia(void) const
-	?ReadImageOrientationL@GlxCommandHandlerRotate@@AAEGXZ @ 29 NONAME ; unsigned short GlxCommandHandlerRotate::ReadImageOrientationL(void)
-	??1GlxCommandHandlerRotate@@UAE@XZ @ 30 NONAME ; GlxCommandHandlerRotate::~GlxCommandHandlerRotate(void)
-	?CreateCommandL@GlxCommandHandlerRename@@UBEPAVCMPXMedia@@HAAVMGlxMediaList@@AAH@Z @ 31 NONAME ; class CMPXMedia * GlxCommandHandlerRename::CreateCommandL(int, class MGlxMediaList &, int &) const
-	??1GlxCommandHandlerNewMedia@@UAE@XZ @ 32 NONAME ; GlxCommandHandlerNewMedia::~GlxCommandHandlerNewMedia(void)
-	??_EGlxCommandHandlerNewMedia@@UAE@I@Z @ 33 NONAME ; GlxCommandHandlerNewMedia::~GlxCommandHandlerNewMedia(unsigned int)
-	?CompletionTextL@GlxCommandHandlerRemoveFrom@@EBE?AVQString@@XZ @ 34 NONAME ; class QString GlxCommandHandlerRemoveFrom::CompletionTextL(void) const
-	??_EGlxCommandHandlerDelete@@UAE@I@Z @ 35 NONAME ; GlxCommandHandlerDelete::~GlxCommandHandlerDelete(unsigned int)
-	?ProgressTextL@GlxCommandHandlerDelete@@EBE?AVQString@@XZ @ 36 NONAME ; class QString GlxCommandHandlerDelete::ProgressTextL(void) const
-	?CompletionTextL@GlxCommandHandlerRename@@EBE?AVQString@@XZ @ 37 NONAME ; class QString GlxCommandHandlerRename::CompletionTextL(void) const
-	?staticMetaObject@GlxCommandHandlerNewMedia@@2UQMetaObject@@B @ 38 NONAME ; struct QMetaObject const GlxCommandHandlerNewMedia::staticMetaObject
-	?DestroyExifWriter@GlxCommandHandlerRotate@@AAEXXZ @ 39 NONAME ; void GlxCommandHandlerRotate::DestroyExifWriter(void)
-	??0GlxCommandHandlerDelete@@QAE@XZ @ 40 NONAME ; GlxCommandHandlerDelete::GlxCommandHandlerDelete(void)
-	??1GlxCommandHandlerRename@@UAE@XZ @ 41 NONAME ; GlxCommandHandlerRename::~GlxCommandHandlerRename(void)
-	??0GlxCommandHandlerSend@@QAE@XZ @ 42 NONAME ; GlxCommandHandlerSend::GlxCommandHandlerSend(void)
-	?HandleError@GlxCommandHandlerNewMedia@@MAEXH@Z @ 43 NONAME ; void GlxCommandHandlerNewMedia::HandleError(int)
-	??0GlxCommandHandlerAddToContainer@@QAE@XZ @ 44 NONAME ; GlxCommandHandlerAddToContainer::GlxCommandHandlerAddToContainer(void)
-	??_EGlxCommandHandlerRename@@UAE@I@Z @ 45 NONAME ; GlxCommandHandlerRename::~GlxCommandHandlerRename(unsigned int)
-	?HandleErrorL@GlxCommandHandlerRename@@EAEXH@Z @ 46 NONAME ; void GlxCommandHandlerRename::HandleErrorL(int)
-	??_EGlxCommandHandlerRotate@@UAE@I@Z @ 47 NONAME ; GlxCommandHandlerRotate::~GlxCommandHandlerRotate(unsigned int)
-	?ProgressTextL@GlxCommandHandlerAddToContainer@@EBE?AVQString@@XZ @ 48 NONAME ; class QString GlxCommandHandlerAddToContainer::ProgressTextL(void) const
-	??1GlxCommandHandlerSend@@UAE@XZ @ 49 NONAME ; GlxCommandHandlerSend::~GlxCommandHandlerSend(void)
-	?CompletionTextL@GlxCommandHandlerAddToContainer@@EBE?AVQString@@XZ @ 50 NONAME ; class QString GlxCommandHandlerAddToContainer::CompletionTextL(void) const
-	??0GlxCommandHandlerNewMedia@@QAE@XZ @ 51 NONAME ; GlxCommandHandlerNewMedia::GlxCommandHandlerNewMedia(void)
-	?trUtf8@GlxCommandHandlerNewMedia@@SA?AVQString@@PBD0H@Z @ 52 NONAME ; class QString GlxCommandHandlerNewMedia::trUtf8(char const *, char const *, int)
-	?doHandleUserAction@GlxCommandHandlerSend@@UBEXPAVGlxMediaModel@@V?$QList@VQModelIndex@@@@@Z @ 53 NONAME ; void GlxCommandHandlerSend::doHandleUserAction(class GlxMediaModel *, class QList<class QModelIndex>) const
-	??_EGlxCommandHandlerAddToContainer@@UAE@I@Z @ 54 NONAME ; GlxCommandHandlerAddToContainer::~GlxCommandHandlerAddToContainer(unsigned int)
-	?ProgressTextL@GlxCommandHandlerNewMedia@@EBE?AVQString@@XZ @ 55 NONAME ; class QString GlxCommandHandlerNewMedia::ProgressTextL(void) const
-	?ExecuteLD@GlxCommandHandlerNewMedia@@QAEHAAVTGlxMediaId@@@Z @ 56 NONAME ; int GlxCommandHandlerNewMedia::ExecuteLD(class TGlxMediaId &)
-	?CreateCommandL@GlxCommandHandlerRotate@@UBEPAVCMPXMedia@@HAAVMGlxMediaList@@AAH@Z @ 57 NONAME ; class CMPXMedia * GlxCommandHandlerRotate::CreateCommandL(int, class MGlxMediaList &, int &) const
-	?CompletionTextL@GlxCommandHandlerNewMedia@@EBE?AVQString@@XZ @ 58 NONAME ; class QString GlxCommandHandlerNewMedia::CompletionTextL(void) const
-	?CreateCommandL@GlxCommandHandlerRemoveFrom@@UBEPAVCMPXMedia@@HAAVMGlxMediaList@@AAH@Z @ 59 NONAME ; class CMPXMedia * GlxCommandHandlerRemoveFrom::CreateCommandL(int, class MGlxMediaList &, int &) const
-	?CalculateFinalOrientationL@GlxCommandHandlerRotate@@AAEGG@Z @ 60 NONAME ; unsigned short GlxCommandHandlerRotate::CalculateFinalOrientationL(unsigned short)
-	?InitializeExifWriterL@GlxCommandHandlerRotate@@AAEXV?$TBuf@$0BAA@@@@Z @ 61 NONAME ; void GlxCommandHandlerRotate::InitializeExifWriterL(class TBuf<256>)
-	?CreateCommandL@GlxCommandHandlerNewMedia@@MBEPAVCMPXMedia@@HAAVMGlxMediaList@@AAH@Z @ 62 NONAME ; class CMPXMedia * GlxCommandHandlerNewMedia::CreateCommandL(int, class MGlxMediaList &, int &) const
-	??1GlxCommandHandlerDelete@@UAE@XZ @ 63 NONAME ; GlxCommandHandlerDelete::~GlxCommandHandlerDelete(void)
-	??0GlxCommandHandlerRotate@@QAE@XZ @ 64 NONAME ; GlxCommandHandlerRotate::GlxCommandHandlerRotate(void)
+	?doHandleUserAction@GlxCommandHandlerRotateImage@@UBEXPAVGlxMediaModel@@V?$QList@VQModelIndex@@@@@Z @ 1 NONAME ; void GlxCommandHandlerRotateImage::doHandleUserAction(class GlxMediaModel *, class QList<class QModelIndex>) const
+	??_EGlxCommandHandlerRemoveFrom@@UAE@I@Z @ 2 NONAME ; GlxCommandHandlerRemoveFrom::~GlxCommandHandlerRemoveFrom(unsigned int)
+	?iSelectionCount@GlxCommandHandlerAddToContainer@@0HA @ 3 NONAME ; int GlxCommandHandlerAddToContainer::iSelectionCount
+	?RotateImageL@GlxCommandHandlerRotate@@AAEXV?$TBuf@$0BAA@@@@Z @ 4 NONAME ; void GlxCommandHandlerRotate::RotateImageL(class TBuf<256>)
+	?qt_metacall@GlxCommandHandlerNewMedia@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 5 NONAME ; int GlxCommandHandlerNewMedia::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?doHandleUserAction@GlxCommandHandlerCropImage@@UBEXPAVGlxMediaModel@@V?$QList@VQModelIndex@@@@@Z @ 6 NONAME ; void GlxCommandHandlerCropImage::doHandleUserAction(class GlxMediaModel *, class QList<class QModelIndex>) const
+	?ProgressTextL@GlxCommandHandlerRemoveFrom@@EBE?AVQString@@XZ @ 7 NONAME ; class QString GlxCommandHandlerRemoveFrom::ProgressTextL(void) const
+	??0GlxCommandHandlerRename@@QAE@XZ @ 8 NONAME ; GlxCommandHandlerRename::GlxCommandHandlerRename(void)
+	??1GlxCommandHandlerAddToContainer@@UAE@XZ @ 9 NONAME ; GlxCommandHandlerAddToContainer::~GlxCommandHandlerAddToContainer(void)
+	?getStaticMetaObject@GlxCommandHandlerNewMedia@@SAABUQMetaObject@@XZ @ 10 NONAME ; struct QMetaObject const & GlxCommandHandlerNewMedia::getStaticMetaObject(void)
+	?SetImageOrientationL@GlxCommandHandlerRotate@@AAEXG@Z @ 11 NONAME ; void GlxCommandHandlerRotate::SetImageOrientationL(unsigned short)
+	?ConfirmationTextL@GlxCommandHandlerDelete@@EBE?AVQString@@_N@Z @ 12 NONAME ; class QString GlxCommandHandlerDelete::ConfirmationTextL(bool) const
+	??_EGlxCommandHandlerSend@@UAE@I@Z @ 13 NONAME ; GlxCommandHandlerSend::~GlxCommandHandlerSend(unsigned int)
+	?trUtf8@GlxCommandHandlerNewMedia@@SA?AVQString@@PBD0@Z @ 14 NONAME ; class QString GlxCommandHandlerNewMedia::trUtf8(char const *, char const *)
+	?HandleErrorL@GlxCommandHandlerNewMedia@@MAEXH@Z @ 15 NONAME ; void GlxCommandHandlerNewMedia::HandleErrorL(int)
+	??1GlxCommandHandlerCropImage@@UAE@XZ @ 16 NONAME ; GlxCommandHandlerCropImage::~GlxCommandHandlerCropImage(void)
+	?GetName@GlxCommandHandlerRename@@ABE?AVQString@@AAVMGlxMediaList@@@Z @ 17 NONAME ; class QString GlxCommandHandlerRename::GetName(class MGlxMediaList &) const
+	?tr@GlxCommandHandlerNewMedia@@SA?AVQString@@PBD0H@Z @ 18 NONAME ; class QString GlxCommandHandlerNewMedia::tr(char const *, char const *, int)
+	?DoExecuteCommandL@GlxCommandHandlerRotate@@UAEXHAAVMGlxMediaList@@AAH@Z @ 19 NONAME ; void GlxCommandHandlerRotate::DoExecuteCommandL(int, class MGlxMediaList &, int &)
+	?CompletionTextL@GlxCommandHandlerComment@@EBE?AVQString@@XZ @ 20 NONAME ; class QString GlxCommandHandlerComment::CompletionTextL(void) const
+	?metaObject@GlxCommandHandlerNewMedia@@UBEPBUQMetaObject@@XZ @ 21 NONAME ; struct QMetaObject const * GlxCommandHandlerNewMedia::metaObject(void) const
+	?CreateCommandL@GlxCommandHandlerDelete@@UBEPAVCMPXMedia@@HAAVMGlxMediaList@@AAH@Z @ 22 NONAME ; class CMPXMedia * GlxCommandHandlerDelete::CreateCommandL(int, class MGlxMediaList &, int &) const
+	?CreateCommandL@GlxCommandHandlerAddToContainer@@UBEPAVCMPXMedia@@HAAVMGlxMediaList@@AAH@Z @ 23 NONAME ; class CMPXMedia * GlxCommandHandlerAddToContainer::CreateCommandL(int, class MGlxMediaList &, int &) const
+	?CompletionTextL@GlxCommandHandlerDelete@@EBE?AVQString@@XZ @ 24 NONAME ; class QString GlxCommandHandlerDelete::CompletionTextL(void) const
+	?DoHandleCommandCompleteL@GlxCommandHandlerNewMedia@@MAEXPAXPAVCMPXMedia@@HPAVMGlxMediaList@@@Z @ 25 NONAME ; void GlxCommandHandlerNewMedia::DoHandleCommandCompleteL(void *, class CMPXMedia *, int, class MGlxMediaList *)
+	??0GlxCommandHandlerComment@@QAE@XZ @ 26 NONAME ; GlxCommandHandlerComment::GlxCommandHandlerComment(void)
+	?GenerateNewMediaItemTitleL@GlxCommandHandlerNewMedia@@ABE?AVQString@@V2@AAVMGlxMediaList@@@Z @ 27 NONAME ; class QString GlxCommandHandlerNewMedia::GenerateNewMediaItemTitleL(class QString, class MGlxMediaList &) const
+	??1GlxCommandHandlerRemoveFrom@@UAE@XZ @ 28 NONAME ; GlxCommandHandlerRemoveFrom::~GlxCommandHandlerRemoveFrom(void)
+	?qt_metacast@GlxCommandHandlerNewMedia@@UAEPAXPBD@Z @ 29 NONAME ; void * GlxCommandHandlerNewMedia::qt_metacast(char const *)
+	??0GlxCommandHandlerRemoveFrom@@QAE@XZ @ 30 NONAME ; GlxCommandHandlerRemoveFrom::GlxCommandHandlerRemoveFrom(void)
+	?HandleItemAddedL@GlxCommandHandlerNewMedia@@MAEXHHPAVMGlxMediaList@@@Z @ 31 NONAME ; void GlxCommandHandlerNewMedia::HandleItemAddedL(int, int, class MGlxMediaList *)
+	?tr@GlxCommandHandlerNewMedia@@SA?AVQString@@PBD0@Z @ 32 NONAME ; class QString GlxCommandHandlerNewMedia::tr(char const *, char const *)
+	?createNewMedia@GlxCommandHandlerAddToContainer@@ABEXXZ @ 33 NONAME ; void GlxCommandHandlerAddToContainer::createNewMedia(void) const
+	?ReadImageOrientationL@GlxCommandHandlerRotate@@AAEGXZ @ 34 NONAME ; unsigned short GlxCommandHandlerRotate::ReadImageOrientationL(void)
+	??_EGlxCommandHandlerComment@@UAE@I@Z @ 35 NONAME ; GlxCommandHandlerComment::~GlxCommandHandlerComment(unsigned int)
+	??1GlxCommandHandlerRotate@@UAE@XZ @ 36 NONAME ; GlxCommandHandlerRotate::~GlxCommandHandlerRotate(void)
+	?CreateCommandL@GlxCommandHandlerRename@@UBEPAVCMPXMedia@@HAAVMGlxMediaList@@AAH@Z @ 37 NONAME ; class CMPXMedia * GlxCommandHandlerRename::CreateCommandL(int, class MGlxMediaList &, int &) const
+	??1GlxCommandHandlerNewMedia@@UAE@XZ @ 38 NONAME ; GlxCommandHandlerNewMedia::~GlxCommandHandlerNewMedia(void)
+	??_EGlxCommandHandlerNewMedia@@UAE@I@Z @ 39 NONAME ; GlxCommandHandlerNewMedia::~GlxCommandHandlerNewMedia(unsigned int)
+	?CompletionTextL@GlxCommandHandlerRemoveFrom@@EBE?AVQString@@XZ @ 40 NONAME ; class QString GlxCommandHandlerRemoveFrom::CompletionTextL(void) const
+	??_EGlxCommandHandlerDelete@@UAE@I@Z @ 41 NONAME ; GlxCommandHandlerDelete::~GlxCommandHandlerDelete(unsigned int)
+	?ProgressTextL@GlxCommandHandlerDelete@@EBE?AVQString@@XZ @ 42 NONAME ; class QString GlxCommandHandlerDelete::ProgressTextL(void) const
+	?CompletionTextL@GlxCommandHandlerRename@@EBE?AVQString@@XZ @ 43 NONAME ; class QString GlxCommandHandlerRename::CompletionTextL(void) const
+	?staticMetaObject@GlxCommandHandlerNewMedia@@2UQMetaObject@@B @ 44 NONAME ; struct QMetaObject const GlxCommandHandlerNewMedia::staticMetaObject
+	?DestroyExifWriter@GlxCommandHandlerRotate@@AAEXXZ @ 45 NONAME ; void GlxCommandHandlerRotate::DestroyExifWriter(void)
+	??0GlxCommandHandlerDelete@@QAE@XZ @ 46 NONAME ; GlxCommandHandlerDelete::GlxCommandHandlerDelete(void)
+	??1GlxCommandHandlerRename@@UAE@XZ @ 47 NONAME ; GlxCommandHandlerRename::~GlxCommandHandlerRename(void)
+	??0GlxCommandHandlerSend@@QAE@XZ @ 48 NONAME ; GlxCommandHandlerSend::GlxCommandHandlerSend(void)
+	?HandleError@GlxCommandHandlerNewMedia@@MAEXH@Z @ 49 NONAME ; void GlxCommandHandlerNewMedia::HandleError(int)
+	??0GlxCommandHandlerAddToContainer@@QAE@XZ @ 50 NONAME ; GlxCommandHandlerAddToContainer::GlxCommandHandlerAddToContainer(void)
+	??_EGlxCommandHandlerRename@@UAE@I@Z @ 51 NONAME ; GlxCommandHandlerRename::~GlxCommandHandlerRename(unsigned int)
+	?GetName@GlxCommandHandlerComment@@ABE?AVQString@@AAVMGlxMediaList@@@Z @ 52 NONAME ; class QString GlxCommandHandlerComment::GetName(class MGlxMediaList &) const
+	?HandleErrorL@GlxCommandHandlerRename@@EAEXH@Z @ 53 NONAME ; void GlxCommandHandlerRename::HandleErrorL(int)
+	??1GlxCommandHandlerRotateImage@@UAE@XZ @ 54 NONAME ; GlxCommandHandlerRotateImage::~GlxCommandHandlerRotateImage(void)
+	??0GlxCommandHandlerRotateImage@@QAE@XZ @ 55 NONAME ; GlxCommandHandlerRotateImage::GlxCommandHandlerRotateImage(void)
+	??_EGlxCommandHandlerRotate@@UAE@I@Z @ 56 NONAME ; GlxCommandHandlerRotate::~GlxCommandHandlerRotate(unsigned int)
+	??_EGlxCommandHandlerCropImage@@UAE@I@Z @ 57 NONAME ; GlxCommandHandlerCropImage::~GlxCommandHandlerCropImage(unsigned int)
+	?ProgressTextL@GlxCommandHandlerAddToContainer@@EBE?AVQString@@XZ @ 58 NONAME ; class QString GlxCommandHandlerAddToContainer::ProgressTextL(void) const
+	??1GlxCommandHandlerComment@@UAE@XZ @ 59 NONAME ; GlxCommandHandlerComment::~GlxCommandHandlerComment(void)
+	??1GlxCommandHandlerSend@@UAE@XZ @ 60 NONAME ; GlxCommandHandlerSend::~GlxCommandHandlerSend(void)
+	?CompletionTextL@GlxCommandHandlerAddToContainer@@EBE?AVQString@@XZ @ 61 NONAME ; class QString GlxCommandHandlerAddToContainer::CompletionTextL(void) const
+	??0GlxCommandHandlerNewMedia@@QAE@XZ @ 62 NONAME ; GlxCommandHandlerNewMedia::GlxCommandHandlerNewMedia(void)
+	?trUtf8@GlxCommandHandlerNewMedia@@SA?AVQString@@PBD0H@Z @ 63 NONAME ; class QString GlxCommandHandlerNewMedia::trUtf8(char const *, char const *, int)
+	?doHandleUserAction@GlxCommandHandlerSend@@UBEXPAVGlxMediaModel@@V?$QList@VQModelIndex@@@@@Z @ 64 NONAME ; void GlxCommandHandlerSend::doHandleUserAction(class GlxMediaModel *, class QList<class QModelIndex>) const
+	??_EGlxCommandHandlerAddToContainer@@UAE@I@Z @ 65 NONAME ; GlxCommandHandlerAddToContainer::~GlxCommandHandlerAddToContainer(unsigned int)
+	?ProgressTextL@GlxCommandHandlerNewMedia@@EBE?AVQString@@XZ @ 66 NONAME ; class QString GlxCommandHandlerNewMedia::ProgressTextL(void) const
+	?ExecuteLD@GlxCommandHandlerNewMedia@@QAEHAAVTGlxMediaId@@@Z @ 67 NONAME ; int GlxCommandHandlerNewMedia::ExecuteLD(class TGlxMediaId &)
+	?CreateCommandL@GlxCommandHandlerRotate@@UBEPAVCMPXMedia@@HAAVMGlxMediaList@@AAH@Z @ 68 NONAME ; class CMPXMedia * GlxCommandHandlerRotate::CreateCommandL(int, class MGlxMediaList &, int &) const
+	?CreateCommandL@GlxCommandHandlerComment@@UBEPAVCMPXMedia@@HAAVMGlxMediaList@@AAH@Z @ 69 NONAME ; class CMPXMedia * GlxCommandHandlerComment::CreateCommandL(int, class MGlxMediaList &, int &) const
+	?CompletionTextL@GlxCommandHandlerNewMedia@@EBE?AVQString@@XZ @ 70 NONAME ; class QString GlxCommandHandlerNewMedia::CompletionTextL(void) const
+	?executeCommand@GlxCommandHandlerRotateImage@@UAEXHHV?$QList@VQModelIndex@@@@@Z @ 71 NONAME ; void GlxCommandHandlerRotateImage::executeCommand(int, int, class QList<class QModelIndex>)
+	??_EGlxCommandHandlerRotateImage@@UAE@I@Z @ 72 NONAME ; GlxCommandHandlerRotateImage::~GlxCommandHandlerRotateImage(unsigned int)
+	?CreateCommandL@GlxCommandHandlerRemoveFrom@@UBEPAVCMPXMedia@@HAAVMGlxMediaList@@AAH@Z @ 73 NONAME ; class CMPXMedia * GlxCommandHandlerRemoveFrom::CreateCommandL(int, class MGlxMediaList &, int &) const
+	?CalculateFinalOrientationL@GlxCommandHandlerRotate@@AAEGG@Z @ 74 NONAME ; unsigned short GlxCommandHandlerRotate::CalculateFinalOrientationL(unsigned short)
+	?InitializeExifWriterL@GlxCommandHandlerRotate@@AAEXV?$TBuf@$0BAA@@@@Z @ 75 NONAME ; void GlxCommandHandlerRotate::InitializeExifWriterL(class TBuf<256>)
+	??1GlxCommandHandlerDelete@@UAE@XZ @ 76 NONAME ; GlxCommandHandlerDelete::~GlxCommandHandlerDelete(void)
+	?CreateCommandL@GlxCommandHandlerNewMedia@@MBEPAVCMPXMedia@@HAAVMGlxMediaList@@AAH@Z @ 77 NONAME ; class CMPXMedia * GlxCommandHandlerNewMedia::CreateCommandL(int, class MGlxMediaList &, int &) const
+	??0GlxCommandHandlerCropImage@@QAE@XZ @ 78 NONAME ; GlxCommandHandlerCropImage::GlxCommandHandlerCropImage(void)
+	??0GlxCommandHandlerRotate@@QAE@XZ @ 79 NONAME ; GlxCommandHandlerRotate::GlxCommandHandlerRotate(void)
 
--- a/ui/commandhandlers/commandhandlerbase/commandhandlerbase.pro	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/commandhandlers/commandhandlerbase/commandhandlerbase.pro	Thu Jul 22 16:33:32 2010 +0100
@@ -45,8 +45,10 @@
 TARGET.UID3 = 0x20000A11
 TARGET.CAPABILITY = ALL -TCB
 TARGET.EPOCALLOWDLLDATA = 1
+MMP_RULES += SMPSAFE 
 }
 
+
 # Input
 HEADERS += inc/glxcommandhandler.h
 HEADERS += inc/glxmpxcommandhandler.h
@@ -57,3 +59,12 @@
 SOURCES += src/glxmodelcommandhandler.cpp
 
 DEFINES += QT_NO_DEBUG_OUTPUT QT_NO_WARNING_OUTPUT
+
+defBlock = \      
+"$${LITERAL_HASH}if defined(EABI)" \
+"DEFFILE  ../eabi/glxcommandhandlerbase.def" \
+	 "$${LITERAL_HASH}else" \
+	 "DEFFILE  ../bwins/glxcommandhandlerbase.def" \
+             "$${LITERAL_HASH}endif"
+	
+MMP_RULES += defBlock
--- a/ui/commandhandlers/commandhandlerbase/src/glxmodelcommandhandler.cpp	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/commandhandlers/commandhandlerbase/src/glxmodelcommandhandler.cpp	Thu Jul 22 16:33:32 2010 +0100
@@ -1,20 +1,3 @@
-/*
-* Copyright (c) 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: 
-*
-*/
-
 #include <glxmediamodel.h>
 #include <glxmodelcommandhandler.h>
 #include <glxmodelparm.h>
--- a/ui/commandhandlers/commandhandlerbase/src/glxmpxcommandhandler.cpp	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/commandhandlers/commandhandlerbase/src/glxmpxcommandhandler.cpp	Thu Jul 22 16:33:32 2010 +0100
@@ -64,6 +64,7 @@
 void GlxMpxCommandHandler::executeCommand(int commandId, int collectionId,QList<QModelIndex>  indexList)
     {
     OstTraceFunctionEntry0( GLXMPXCOMMANDHANDLER_EXECUTECOMMAND_ENTRY );
+    Q_UNUSED(indexList);
     int aHierarchyId = 0;
     TGlxFilterItemType aFilterType = EGlxFilterImage;
 
@@ -349,7 +350,8 @@
         // @todo error received. Close progress note 
         DismissProgressNoteL();
         iMediaList->RemoveMediaListObserver(this);
-
+        iMediaList->Close();
+        iMediaList = NULL;
         // handle error
         HandleErrorL(aErrorCode);
         }
@@ -357,6 +359,8 @@
         {
         DismissProgressNoteL();
         iMediaList->RemoveMediaListObserver(this);
+        iMediaList->Close();
+        iMediaList = NULL;
         CompletionNoteL();
         iProgressComplete = EFalse;
         }
@@ -478,7 +482,8 @@
             // noteText has a place for a title string in it
             const TDesC& itemName = media->ValueText(KMPXMediaGeneralTitle);
             QString qtItemName = QString::fromUtf16(itemName.Ptr(),itemName.Length());
-            qtText.append(QString("%1").arg(qtItemName));
+            QString localisedString  = qtText.arg(qtItemName);
+            qtText = localisedString;          
             }
             // (else) If error, assume confirmed anyway
         CleanupStack::PopAndDestroy(attributeContext);
--- a/ui/commandhandlers/commoncommandhandlers/commoncommandhandlers.pro	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/commandhandlers/commoncommandhandlers/commoncommandhandlers.pro	Thu Jul 22 16:33:32 2010 +0100
@@ -40,6 +40,7 @@
 TARGET.UID3 = 0x20000A0D
 TARGET.CAPABILITY = ALL -TCB 
 TARGET.EPOCALLOWDLLDATA = 1
+MMP_RULES += SMPSAFE 
 }
 
 LIBS += -lglxcommandhandlerbase.dll \
@@ -52,7 +53,13 @@
         -lshareui.dll \
 	-lexiflib.dll \
 	-lfbscli.dll \
-	-lbafl.dll
+	-lbafl.dll \
+	-lefsrv.dll \
+	-lcaf.dll \
+        -lxqservice.dll \
+	-lxqserviceutil.dll \
+	-lglxmediamodel.dll
+
 
 # Input
 HEADERS += inc/glxcommandhandlerdelete.h
@@ -63,6 +70,9 @@
 HEADERS += inc/glxcommandhandlerremovefrom.h
 HEADERS += inc/glxcommandhandlerrename.h
 HEADERS += inc/glxcommondialogs.h
+HEADERS += inc/glxcommandhandlercomment.h
+HEADERS += inc/glxcommandhandlercropimage.h
+HEADERS += inc/glxcommandhandlerrotateimage.h
 
 SOURCES += src/glxcommandhandlerdelete.cpp
 SOURCES += src/glxcommandhandleraddtocontainer.cpp
@@ -72,6 +82,18 @@
 SOURCES += src/glxcommandhandlerremovefrom.cpp
 SOURCES += src/glxcommandhandlerrename.cpp
 SOURCES += src/glxcommondialogs.cpp
+SOURCES += src/glxcommandhandlercomment.cpp
+SOURCES += src/glxcommandhandlercropimage.cpp
+SOURCES += src/glxcommandhandlerrotateimage.cpp
 
 DEFINES += QT_NO_DEBUG_OUTPUT QT_NO_WARNING_OUTPUT
 
+defBlock = \      
+"$${LITERAL_HASH}if defined(EABI)" \
+"DEFFILE  ../eabi/glxcommoncommandhandlers.def" \
+	 "$${LITERAL_HASH}else" \
+	 "DEFFILE  ../bwins/glxcommoncommandhandlers.def" \
+             "$${LITERAL_HASH}endif"
+	
+MMP_RULES += defBlock
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ui/commandhandlers/commoncommandhandlers/inc/glxcommandhandlercomment.h	Thu Jul 22 16:33:32 2010 +0100
@@ -0,0 +1,42 @@
+/*
+* Copyright (c) 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: 
+*
+*/
+
+#ifndef GLXCOMMANDHANDLERCOMMENT_H
+#define GLXCOMMANDHANDLERCOMMENT_H
+
+#include <glxmpxcommandhandler.h>
+
+#ifdef BUILD_COMMONCOMMANDHANDLERS
+#define GLX_COMMONCOMMANDHANDLERS_EXPORT Q_DECL_EXPORT
+#else
+#define GLX_COMMONCOMMANDHANDLERS_EXPORT Q_DECL_IMPORT
+#endif
+
+
+class GLX_COMMONCOMMANDHANDLERS_EXPORT GlxCommandHandlerComment : public GlxMpxCommandHandler
+	{
+public:
+    GlxCommandHandlerComment();
+    ~GlxCommandHandlerComment();
+    CMPXCommand* CreateCommandL(TInt aCommandId, MGlxMediaList& aMediaList, TBool& aConsume) const ;
+private:
+    QString CompletionTextL() const;
+    QString GetName(MGlxMediaList& aMediaList) const;
+
+	};
+
+#endif // GLXCOMMANDHANDLERCOMMENT_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ui/commandhandlers/commoncommandhandlers/inc/glxcommandhandlercropimage.h	Thu Jul 22 16:33:32 2010 +0100
@@ -0,0 +1,48 @@
+/*
+* Copyright (c) 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: 
+*
+*/
+
+#ifndef GLXCOMMANDHANDLERCROPIMAGE_H_
+#define GLXCOMMANDHANDLERCROPIMAGE_H_
+
+
+#include "glxmodelcommandhandler.h"
+#include <xqappmgr.h>               // for XQApplicationManager
+
+#ifdef BUILD_COMMONCOMMANDHANDLERS
+#define GLX_COMMONCOMMANDHANDLERS_EXPORT Q_DECL_EXPORT
+#else
+#define GLX_COMMONCOMMANDHANDLERS_EXPORT Q_DECL_IMPORT
+#endif
+
+//Forward Declaration
+class XQAiwRequest;
+
+class GLX_COMMONCOMMANDHANDLERS_EXPORT GlxCommandHandlerCropImage : public GlxModelCommandHandler
+{
+  
+public:
+    GlxCommandHandlerCropImage();
+    ~GlxCommandHandlerCropImage();
+    void doHandleUserAction(GlxMediaModel* model,QList<QModelIndex> indexList) const ;
+
+private:
+    mutable XQAiwRequest* mReq;
+    mutable XQApplicationManager mAppmgr;
+};
+
+
+#endif /* GLXCOMMANDHANDLERCROPIMAGE_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ui/commandhandlers/commoncommandhandlers/inc/glxcommandhandlerrotateimage.h	Thu Jul 22 16:33:32 2010 +0100
@@ -0,0 +1,49 @@
+/*
+* Copyright (c) 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: 
+*
+*/
+
+#ifndef GLXCOMMANDHANDLERROTATEIMAGE_H_
+#define GLXCOMMANDHANDLERROTATEIMAGE_H_
+
+
+#include <glxmodelcommandhandler.h>
+#include <xqappmgr.h>               // for XQApplicationManager
+
+#ifdef BUILD_COMMONCOMMANDHANDLERS
+#define GLX_COMMONCOMMANDHANDLERS_EXPORT Q_DECL_EXPORT
+#else
+#define GLX_COMMONCOMMANDHANDLERS_EXPORT Q_DECL_IMPORT
+#endif
+
+//Forward Declaration
+class XQAiwRequest;
+
+class GLX_COMMONCOMMANDHANDLERS_EXPORT GlxCommandHandlerRotateImage : public GlxModelCommandHandler
+{
+  
+public:
+    GlxCommandHandlerRotateImage();
+    ~GlxCommandHandlerRotateImage();
+    void executeCommand(int commandId,int collectionId, QList<QModelIndex> indexList = QList<QModelIndex>() );
+    void doHandleUserAction(GlxMediaModel* model,QList<QModelIndex> indexList) const ;
+
+private:
+    XQAiwRequest* mReq;
+    XQApplicationManager mAppmgr;
+};
+
+
+#endif /* GLXCOMMANDHANDLERROTATEIMAGE_H_ */
--- a/ui/commandhandlers/commoncommandhandlers/inc/glxcommandhandlersend.h	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/commandhandlers/commoncommandhandlers/inc/glxcommandhandlersend.h	Thu Jul 22 16:33:32 2010 +0100
@@ -21,6 +21,7 @@
 #include "glxmodelcommandhandler.h"
 #include <QList>
 #include <QString>
+class ShareUi;
 
 
 #ifdef BUILD_COMMONCOMMANDHANDLERS
@@ -36,5 +37,7 @@
     GlxCommandHandlerSend();
     ~GlxCommandHandlerSend();    
     void doHandleUserAction(GlxMediaModel* model,QList<QModelIndex> indexList)const ;  
+private:
+    ShareUi *mSendUiDialog;
 	};
 #endif // GLXCOMMANDHANDLERSEND_H
--- a/ui/commandhandlers/commoncommandhandlers/src/glxcommandhandleraddtocontainer.cpp	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/commandhandlers/commoncommandhandlers/src/glxcommandhandleraddtocontainer.cpp	Thu Jul 22 16:33:32 2010 +0100
@@ -88,9 +88,11 @@
     connect( mSelectionModel, SIGNAL( selectionChanged( const QItemSelection &, const QItemSelection& ) ), this, SLOT( changeButtonText() ) );
     
     HbAction *primary = new HbAction( "New" );
+    primary->setObjectName( "Cmd New" );
     popup.addAction( primary ) ;
 
     HbAction *secondary = new HbAction( GLX_BUTTON_CANCEL );
+    secondary->setObjectName( "Cmd Cancel" );
     popup.addAction( secondary );
     
     popup.setContentWidget( listview ); //ownership transfer
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ui/commandhandlers/commoncommandhandlers/src/glxcommandhandlercomment.cpp	Thu Jul 22 16:33:32 2010 +0100
@@ -0,0 +1,150 @@
+/*
+* Copyright (c) 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: 
+*
+*/
+
+#include <hbmessagebox.h>
+#include <hblabel.h>
+
+#include <mpxcollectionpath.h>
+#include <mglxmedialist.h>
+#include <glxcommandfactory.h>
+#include <glxcommandhandlercomment.h>
+#include <glxattributecontext.h>
+#include <glxattributeretriever.h>
+#include <glxfetchcontextremover.h>
+#include <glxcommondialogs.h>
+#include "glxlocalisationstrings.h"
+
+GlxCommandHandlerComment::GlxCommandHandlerComment()
+    {
+    }
+
+GlxCommandHandlerComment::~GlxCommandHandlerComment()
+    {
+    }
+
+CMPXCommand* GlxCommandHandlerComment::CreateCommandL(TInt aCommandId,
+        MGlxMediaList& aMediaList, TBool& aConsume) const
+    {
+    Q_UNUSED(aCommandId);
+    Q_UNUSED(aConsume);
+    
+    CMPXCommand* command = NULL;
+    QString mainPane = GetName(aMediaList);
+    QString title(GLX_DETAILS_DESCRIPTION);
+    QString mediaTitle = NULL;
+    bool ok = false;    
+    GlxTextInputDialog* dlg = new GlxTextInputDialog();
+    mediaTitle = dlg->getText(title, mainPane, &ok);
+    delete dlg;
+
+    if(ok == true)
+        {
+        TPtrC16 newMediaItemTitleDes
+            = (reinterpret_cast<const TUint16*> (mediaTitle.utf16()));
+
+        HBufC* newMediaItemTitle = newMediaItemTitleDes.Alloc();
+        CleanupStack::PushL(newMediaItemTitle);
+
+        CMPXCollectionPath* path = aMediaList.PathLC(
+                NGlxListDefs::EPathFocusOrSelection);
+        command = 
+            TGlxCommandFactory::SetDescriptionCommandLC(*newMediaItemTitle,*path);
+        CleanupStack::Pop(command);
+        CleanupStack::PopAndDestroy(path);
+        CleanupStack::PopAndDestroy(newMediaItemTitle);
+        }
+    return command;
+    }
+
+QString GlxCommandHandlerComment::CompletionTextL() const
+    {
+	//return command completion text
+	return QString();
+    }
+
+QString GlxCommandHandlerComment::GetName(MGlxMediaList& aMediaList) const
+    {
+        // Create an iterator to retrieve the relevant attribute
+    TGlxSelectionIterator iterator;
+    // only want the title of one item
+	iterator.SetRange( 1 );
+    CGlxAttributeContext* context = new( ELeave )
+        CGlxAttributeContext( &iterator );
+	CleanupStack::PushL( context );
+        
+	// Want to read the title attribute    
+    // Configure the context
+	context->AddAttributeL( KMPXMediaGeneralComment );
+	
+	// Add the context to the media list
+	aMediaList.AddContextL( context, KGlxFetchContextPriorityBlocking );
+
+    // TGlxContextRemover will remove the context when it goes out of scope
+    // Used here to avoid a trap and still have safe cleanup    
+    TGlxFetchContextRemover contextRemover( context, aMediaList );
+    // put to cleanupstack as cleanupstack is emptied before stack objects
+    // are deleted
+    CleanupClosePushL( contextRemover );
+	// Yuck - a leave and a return code!
+	// EFalse => don't show a progress dialog
+    TInt err = GlxAttributeRetriever::RetrieveL( *context, aMediaList, EFalse );
+    // Using a distinct error value as "LeaveIfError( FuncL() );" looks bad
+    User::LeaveIfError( err );
+    // context off the list
+    CleanupStack::PopAndDestroy( &contextRemover );
+
+    // Now get the title of the relevant item: if *an* item is selected use its
+    // title, otherwise use the item with focus
+	// Get the index of the item to rename
+    TInt index = KErrNotFound;
+    QString title = NULL;
+	// first see if there's a selected item...
+    if ( aMediaList.SelectionCount() == 1 )
+    	{
+        // Find the index of the selected item
+    	index = aMediaList.Count();
+    	do
+            {
+            --index;
+            }
+        while ( !aMediaList.IsSelected( index ) && index > 0 );
+    	}
+    else
+    	{
+    	// Use the index of the item with focus
+       	index = aMediaList.FocusIndex();
+    	}
+
+	if ( index != KErrNotFound )
+		{
+        // use iterator to get the right item
+        iterator.SetToFirst( &aMediaList );
+        const CGlxMedia* media = aMediaList.Item( iterator++ ).Properties();
+		if( media )
+			{
+			// found the item's media properties, extract the title
+            const TDesC& titleDesc = media->ValueText(KMPXMediaGeneralComment);
+            title = QString::fromUtf16(titleDesc.Ptr(),
+                    titleDesc.Length());
+			}
+		}
+    CleanupStack::PopAndDestroy( context );
+
+    return title;
+    }
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ui/commandhandlers/commoncommandhandlers/src/glxcommandhandlercropimage.cpp	Thu Jul 22 16:33:32 2010 +0100
@@ -0,0 +1,77 @@
+/*
+* Copyright (c) 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: 
+*
+*/
+
+#include "glxcommandhandlercropimage.h"
+
+#include <glxcommandfactory.h>
+#include <photoeditor_highway.hrh>
+#include <glxcommandhandlers.hrh>
+#include <XQServiceRequest.h>
+#include <XQAiwRequest.h>
+#include <glxmodelparm.h>
+#include <glxmediamodel.h>
+
+
+GlxCommandHandlerCropImage::GlxCommandHandlerCropImage() : mReq(NULL)
+    {
+    //Nothing to do here for now
+    }
+
+GlxCommandHandlerCropImage::~GlxCommandHandlerCropImage()
+    {
+    delete mReq;
+    mReq = NULL;
+    }
+
+void GlxCommandHandlerCropImage::doHandleUserAction(GlxMediaModel* model,
+        QList<QModelIndex> /*indexList*/) const
+    {
+    const QString interface = QLatin1String("com.nokia.symbian.imageeditor");
+    const QString operation = QLatin1String("view(QString,int)");
+    const QString service = QLatin1String("PhotoEditor");
+    
+    if(mReq == NULL)
+        {
+        //Connect to service provider    
+        mReq = mAppmgr.create(service, interface, operation, true);
+        mReq->setEmbedded(true);
+        mReq->setSynchronous(true);
+        }
+    
+    if(mReq == NULL)
+        {
+        qDebug("QtSamplePhotos::launchPhotoEditor request not Created");
+        return;
+        }
+    
+    //Get the file path for the item selected
+    QString imagePath = (model->data(model->index(model->data(model->index(0,0),GlxFocusIndexRole).value<int>(),0),GlxUriRole)).value<QString>();
+       
+    QList<QVariant> args;
+    args << imagePath;
+    args << EEditorHighwayFreeCrop;
+    mReq->setArguments(args);
+    
+    // Send the request
+    bool res = mReq->send();
+    if  (!res) 
+        {
+       // Request failed. 
+        qDebug("QtSamplePhotos::launchPhotoEditor request cannot be send");
+        }
+    
+    }
--- a/ui/commandhandlers/commoncommandhandlers/src/glxcommandhandlerdelete.cpp	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/commandhandlers/commoncommandhandlers/src/glxcommandhandlerdelete.cpp	Thu Jul 22 16:33:32 2010 +0100
@@ -15,10 +15,13 @@
 *
 */
 
+#include "glxlocalisationstrings.h"
+
 #include <mpxcollectionpath.h>
 #include <mglxmedialist.h>
 #include <glxcommandfactory.h>
 #include <glxcommandhandlerdelete.h>
+
 #include "OstTraceDefinitions.h"
 #ifdef OST_TRACE_COMPILER_IN_USE
 #include "glxcommandhandlerdeleteTraces.h"
@@ -71,7 +74,8 @@
         }
     else
         {
-        retString = QString("Delete ");
+         
+        retString = GLX_DIALOG_DELETE_ONE_ITEM ;
         }
     return  retString;   
     }    
--- a/ui/commandhandlers/commoncommandhandlers/src/glxcommandhandlernewmedia.cpp	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/commandhandlers/commoncommandhandlers/src/glxcommandhandlernewmedia.cpp	Thu Jul 22 16:33:32 2010 +0100
@@ -28,6 +28,8 @@
 #include <hbinputdialog.h>
 #include <hblabel.h>
 #include <hbmessagebox.h>
+
+#include "glxlocalisationstrings.h"
 #include "OstTraceDefinitions.h"
 #ifdef OST_TRACE_COMPILER_IN_USE
 #include "glxcommandhandlernewmediaTraces.h"
@@ -61,12 +63,11 @@
     CMPXCollectionPath* path = aMediaList.PathLC(NGlxListDefs::EPathParent);
     CMPXCommand* command = NULL;
    
-    QString title("NEW MEDIA");
-    QString mainPane = GenerateNewMediaItemTitleL("Album",aMediaList);
+    QString mainPane = GenerateNewMediaItemTitleL(GLX_DIALOG_ALBUM_NAME_DEFAULT,aMediaList);
     bool ok = false;
 	QString mediaTitle = NULL;
     GlxTextInputDialog* dlg = new GlxTextInputDialog();
-    mediaTitle = dlg->getText(title, mainPane, &ok);
+    mediaTitle = dlg->getText(GLX_DIALOG_NAME_PROMPT, mainPane, &ok);
     delete dlg;
     iNewMediaCreationError = KErrNone;
     if (ok == true)
--- a/ui/commandhandlers/commoncommandhandlers/src/glxcommandhandlerrename.cpp	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/commandhandlers/commoncommandhandlers/src/glxcommandhandlerrename.cpp	Thu Jul 22 16:33:32 2010 +0100
@@ -26,6 +26,7 @@
 #include <glxattributeretriever.h>
 #include <glxfetchcontextremover.h>
 #include <glxcommondialogs.h>
+#include "glxlocalisationstrings.h"
 
 GlxCommandHandlerRename::GlxCommandHandlerRename()
     {
@@ -43,11 +44,10 @@
     
     CMPXCommand* command = NULL;
     QString mainPane = GetName(aMediaList);
-    QString title("Rename");
     QString mediaTitle = NULL;
     bool ok = false;    
     GlxTextInputDialog* dlg = new GlxTextInputDialog();
-    mediaTitle = dlg->getText(title, mainPane, &ok);
+    mediaTitle = dlg->getText(GLX_DIALOG_NAME_PROMPT, mainPane, &ok);
     delete dlg;
 
     if(ok == true)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ui/commandhandlers/commoncommandhandlers/src/glxcommandhandlerrotateimage.cpp	Thu Jul 22 16:33:32 2010 +0100
@@ -0,0 +1,91 @@
+/*
+* Copyright (c) 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: 
+*
+*/
+
+
+
+#include <glxcommandfactory.h>
+#include <photoeditor_highway.hrh>
+#include "glxcommandhandlerrotateimage.h"
+#include <glxcommandhandlers.hrh>
+#include <glxmodelparm.h>
+#include <glxmediamodel.h>
+#include <XQServiceRequest.h>
+#include <XQAiwRequest.h>
+
+GlxCommandHandlerRotateImage::GlxCommandHandlerRotateImage() : mReq(NULL)
+    {
+    //Nothing to do here
+    }
+
+GlxCommandHandlerRotateImage::~GlxCommandHandlerRotateImage()
+    {
+    delete mReq;
+    mReq = NULL;
+    }
+
+void GlxCommandHandlerRotateImage::executeCommand(int commandId,int collectionId, QList<QModelIndex> /*indexList*/)
+//void GlxCommandHandlerRotateImage::doHandleUserAction(GlxMediaModel* model,QList<QModelIndex> indexList) const
+    {
+    const QString service = QLatin1String("PhotoEditor");
+    const QString interface = QLatin1String("com.nokia.symbian.imageeditor");
+    const QString operation = QLatin1String("view(QString,int)");
+    
+    //Connect to service provider
+    if(mReq == NULL)
+        {
+        mReq = mAppmgr.create(service, interface, operation, true);
+        mReq->setEmbedded(true);
+        mReq->setSynchronous(true);
+        }
+    
+    if(mReq == NULL)
+        {
+        return;
+        }
+
+    GlxModelParm modelParm (collectionId, 0);
+    GlxMediaModel* mediaModel = new GlxMediaModel (modelParm);
+    
+    //Get the file path for the item selected
+    QString imagePath = (mediaModel->data(mediaModel->index(mediaModel->data(mediaModel->index(0,0),GlxFocusIndexRole).value<int>(),0),GlxUriRole)).value<QString>();
+    delete mediaModel;
+    
+    QList<QVariant> args;
+    args << imagePath;
+    if(EGlxCmdRotateImgCW == commandId)
+        {
+        args << EEditorHighwayRotateCW;
+        }
+    else // if(EGlxCmdRotateImgCCW == aCommandId)
+        {
+        args << EEditorHighwayRotateCCW;
+        }
+    mReq->setArguments(args);
+    
+    // Send the request
+    bool res = mReq->send();
+    if  (!res) 
+        {
+       // Request failed. 
+        qDebug("QtSamplePhotos::launchPhotoEditor request cannot be send");
+        }
+    }
+
+void GlxCommandHandlerRotateImage::doHandleUserAction(GlxMediaModel* /*model*/,QList<QModelIndex> /*indexList*/) const 
+    {
+    //Dummy, to keepup with compiler errore
+    }
--- a/ui/commandhandlers/commoncommandhandlers/src/glxcommandhandlersend.cpp	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/commandhandlers/commoncommandhandlers/src/glxcommandhandlersend.cpp	Thu Jul 22 16:33:32 2010 +0100
@@ -24,35 +24,35 @@
 
 GlxCommandHandlerSend::GlxCommandHandlerSend()
     {
-
+     mSendUiDialog = new ShareUi();      
     }
 
 
 GlxCommandHandlerSend::~GlxCommandHandlerSend()
     {
-   
+     delete mSendUiDialog;
+     mSendUiDialog =NULL;
     }
 
 void GlxCommandHandlerSend::doHandleUserAction(GlxMediaModel* model,QList<QModelIndex> indexList) const
 {
-   QList <QVariant> fileList;
-   QString imagePath ;
+  QStringList fileList;   
+  QString imagePath ;
    //The Index list is NULL, when the item is selected to be sent from contect menu 
    // and fullscreen view,so that inturn is sending the focused item
     if(indexList.count() == 0)
         {
         imagePath = (model->data(model->index(model->data(model->index(0,0),GlxFocusIndexRole).value<int>(),0),GlxUriRole)).value<QString>();
-        fileList.append(QVariant(imagePath));
+        fileList.append(imagePath);
         }
     else
     {
     for ( int i = 0; i < indexList.count(); i++)
         {        
         imagePath = (model->data(indexList[i],GlxUriRole)).value<QString>();
-        fileList.append(QVariant(imagePath));        
+        fileList.append(imagePath);
         } 
-    }
-    ShareUi dialog;                               
-    dialog.init(fileList,true);
+    }                              
+    mSendUiDialog->send(fileList,true);    
 }
 
--- a/ui/commandhandlers/eabi/glxcommoncommandhandlersu.def	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/commandhandlers/eabi/glxcommoncommandhandlersu.def	Thu Jul 22 16:33:32 2010 +0100
@@ -27,66 +27,93 @@
 	_ZN23GlxCommandHandlerRotateD0Ev @ 26 NONAME
 	_ZN23GlxCommandHandlerRotateD1Ev @ 27 NONAME
 	_ZN23GlxCommandHandlerRotateD2Ev @ 28 NONAME
-	_ZN25GlxCommandHandlerNewMedia11HandleErrorEi @ 29 NONAME
-	_ZN25GlxCommandHandlerNewMedia11qt_metacallEN11QMetaObject4CallEiPPv @ 30 NONAME
-	_ZN25GlxCommandHandlerNewMedia11qt_metacastEPKc @ 31 NONAME
-	_ZN25GlxCommandHandlerNewMedia12HandleErrorLEi @ 32 NONAME
-	_ZN25GlxCommandHandlerNewMedia16HandleItemAddedLEiiP13MGlxMediaList @ 33 NONAME
-	_ZN25GlxCommandHandlerNewMedia16staticMetaObjectE @ 34 NONAME DATA 16
-	_ZN25GlxCommandHandlerNewMedia19getStaticMetaObjectEv @ 35 NONAME
-	_ZN25GlxCommandHandlerNewMedia24DoHandleCommandCompleteLEPvP9CMPXMediaiP13MGlxMediaList @ 36 NONAME
-	_ZN25GlxCommandHandlerNewMedia9ExecuteLDER11TGlxMediaId @ 37 NONAME
-	_ZN25GlxCommandHandlerNewMediaC1Ev @ 38 NONAME
-	_ZN25GlxCommandHandlerNewMediaC2Ev @ 39 NONAME
-	_ZN25GlxCommandHandlerNewMediaD0Ev @ 40 NONAME
-	_ZN25GlxCommandHandlerNewMediaD1Ev @ 41 NONAME
-	_ZN25GlxCommandHandlerNewMediaD2Ev @ 42 NONAME
-	_ZN27GlxCommandHandlerRemoveFromC1Ev @ 43 NONAME
-	_ZN27GlxCommandHandlerRemoveFromC2Ev @ 44 NONAME
-	_ZN27GlxCommandHandlerRemoveFromD0Ev @ 45 NONAME
-	_ZN27GlxCommandHandlerRemoveFromD1Ev @ 46 NONAME
-	_ZN27GlxCommandHandlerRemoveFromD2Ev @ 47 NONAME
-	_ZN31GlxCommandHandlerAddToContainer15iSelectionCountE @ 48 NONAME DATA 4
-	_ZN31GlxCommandHandlerAddToContainerC1Ev @ 49 NONAME
-	_ZN31GlxCommandHandlerAddToContainerC2Ev @ 50 NONAME
-	_ZN31GlxCommandHandlerAddToContainerD0Ev @ 51 NONAME
-	_ZN31GlxCommandHandlerAddToContainerD1Ev @ 52 NONAME
-	_ZN31GlxCommandHandlerAddToContainerD2Ev @ 53 NONAME
-	_ZNK21GlxCommandHandlerSend18doHandleUserActionEP13GlxMediaModel5QListI11QModelIndexE @ 54 NONAME
-	_ZNK23GlxCommandHandlerDelete13ProgressTextLEv @ 55 NONAME
-	_ZNK23GlxCommandHandlerDelete14CreateCommandLEiR13MGlxMediaListRi @ 56 NONAME
-	_ZNK23GlxCommandHandlerDelete15CompletionTextLEv @ 57 NONAME
-	_ZNK23GlxCommandHandlerDelete17ConfirmationTextLEb @ 58 NONAME
-	_ZNK23GlxCommandHandlerRename14CreateCommandLEiR13MGlxMediaListRi @ 59 NONAME
-	_ZNK23GlxCommandHandlerRename15CompletionTextLEv @ 60 NONAME
-	_ZNK23GlxCommandHandlerRename7GetNameER13MGlxMediaList @ 61 NONAME
-	_ZNK23GlxCommandHandlerRotate14CreateCommandLEiR13MGlxMediaListRi @ 62 NONAME
-	_ZNK25GlxCommandHandlerNewMedia10metaObjectEv @ 63 NONAME
-	_ZNK25GlxCommandHandlerNewMedia13ProgressTextLEv @ 64 NONAME
-	_ZNK25GlxCommandHandlerNewMedia14CreateCommandLEiR13MGlxMediaListRi @ 65 NONAME
-	_ZNK25GlxCommandHandlerNewMedia15CompletionTextLEv @ 66 NONAME
-	_ZNK25GlxCommandHandlerNewMedia26GenerateNewMediaItemTitleLE7QStringR13MGlxMediaList @ 67 NONAME
-	_ZNK27GlxCommandHandlerRemoveFrom13ProgressTextLEv @ 68 NONAME
-	_ZNK27GlxCommandHandlerRemoveFrom14CreateCommandLEiR13MGlxMediaListRi @ 69 NONAME
-	_ZNK27GlxCommandHandlerRemoveFrom15CompletionTextLEv @ 70 NONAME
-	_ZNK31GlxCommandHandlerAddToContainer13ProgressTextLEv @ 71 NONAME
-	_ZNK31GlxCommandHandlerAddToContainer14CreateCommandLEiR13MGlxMediaListRi @ 72 NONAME
-	_ZNK31GlxCommandHandlerAddToContainer14createNewMediaEv @ 73 NONAME
-	_ZNK31GlxCommandHandlerAddToContainer15CompletionTextLEv @ 74 NONAME
-	_ZTI21GlxCommandHandlerSend @ 75 NONAME
-	_ZTI23GlxCommandHandlerDelete @ 76 NONAME
-	_ZTI23GlxCommandHandlerRename @ 77 NONAME
-	_ZTI23GlxCommandHandlerRotate @ 78 NONAME
-	_ZTI25GlxCommandHandlerNewMedia @ 79 NONAME
-	_ZTI27GlxCommandHandlerRemoveFrom @ 80 NONAME
-	_ZTI31GlxCommandHandlerAddToContainer @ 81 NONAME
-	_ZTV21GlxCommandHandlerSend @ 82 NONAME
-	_ZTV23GlxCommandHandlerDelete @ 83 NONAME
-	_ZTV23GlxCommandHandlerRename @ 84 NONAME
-	_ZTV23GlxCommandHandlerRotate @ 85 NONAME
-	_ZTV25GlxCommandHandlerNewMedia @ 86 NONAME
-	_ZTV27GlxCommandHandlerRemoveFrom @ 87 NONAME
-	_ZTV31GlxCommandHandlerAddToContainer @ 88 NONAME
-	_ZThn8_N25GlxCommandHandlerNewMedia11HandleErrorEi @ 89 NONAME
-	_ZThn8_N25GlxCommandHandlerNewMedia16HandleItemAddedLEiiP13MGlxMediaList @ 90 NONAME
+	_ZN24GlxCommandHandlerCommentC1Ev @ 29 NONAME
+	_ZN24GlxCommandHandlerCommentC2Ev @ 30 NONAME
+	_ZN24GlxCommandHandlerCommentD0Ev @ 31 NONAME
+	_ZN24GlxCommandHandlerCommentD1Ev @ 32 NONAME
+	_ZN24GlxCommandHandlerCommentD2Ev @ 33 NONAME
+	_ZN25GlxCommandHandlerNewMedia11HandleErrorEi @ 34 NONAME
+	_ZN25GlxCommandHandlerNewMedia11qt_metacallEN11QMetaObject4CallEiPPv @ 35 NONAME
+	_ZN25GlxCommandHandlerNewMedia11qt_metacastEPKc @ 36 NONAME
+	_ZN25GlxCommandHandlerNewMedia12HandleErrorLEi @ 37 NONAME
+	_ZN25GlxCommandHandlerNewMedia16HandleItemAddedLEiiP13MGlxMediaList @ 38 NONAME
+	_ZN25GlxCommandHandlerNewMedia16staticMetaObjectE @ 39 NONAME DATA 16
+	_ZN25GlxCommandHandlerNewMedia19getStaticMetaObjectEv @ 40 NONAME
+	_ZN25GlxCommandHandlerNewMedia24DoHandleCommandCompleteLEPvP9CMPXMediaiP13MGlxMediaList @ 41 NONAME
+	_ZN25GlxCommandHandlerNewMedia9ExecuteLDER11TGlxMediaId @ 42 NONAME
+	_ZN25GlxCommandHandlerNewMediaC1Ev @ 43 NONAME
+	_ZN25GlxCommandHandlerNewMediaC2Ev @ 44 NONAME
+	_ZN25GlxCommandHandlerNewMediaD0Ev @ 45 NONAME
+	_ZN25GlxCommandHandlerNewMediaD1Ev @ 46 NONAME
+	_ZN25GlxCommandHandlerNewMediaD2Ev @ 47 NONAME
+	_ZN26GlxCommandHandlerCropImageC1Ev @ 48 NONAME
+	_ZN26GlxCommandHandlerCropImageC2Ev @ 49 NONAME
+	_ZN26GlxCommandHandlerCropImageD0Ev @ 50 NONAME
+	_ZN26GlxCommandHandlerCropImageD1Ev @ 51 NONAME
+	_ZN26GlxCommandHandlerCropImageD2Ev @ 52 NONAME
+	_ZN27GlxCommandHandlerRemoveFromC1Ev @ 53 NONAME
+	_ZN27GlxCommandHandlerRemoveFromC2Ev @ 54 NONAME
+	_ZN27GlxCommandHandlerRemoveFromD0Ev @ 55 NONAME
+	_ZN27GlxCommandHandlerRemoveFromD1Ev @ 56 NONAME
+	_ZN27GlxCommandHandlerRemoveFromD2Ev @ 57 NONAME
+	_ZN28GlxCommandHandlerRotateImage14executeCommandEii5QListI11QModelIndexE @ 58 NONAME
+	_ZN28GlxCommandHandlerRotateImageC1Ev @ 59 NONAME
+	_ZN28GlxCommandHandlerRotateImageC2Ev @ 60 NONAME
+	_ZN28GlxCommandHandlerRotateImageD0Ev @ 61 NONAME
+	_ZN28GlxCommandHandlerRotateImageD1Ev @ 62 NONAME
+	_ZN28GlxCommandHandlerRotateImageD2Ev @ 63 NONAME
+	_ZN31GlxCommandHandlerAddToContainer15iSelectionCountE @ 64 NONAME DATA 4
+	_ZN31GlxCommandHandlerAddToContainerC1Ev @ 65 NONAME
+	_ZN31GlxCommandHandlerAddToContainerC2Ev @ 66 NONAME
+	_ZN31GlxCommandHandlerAddToContainerD0Ev @ 67 NONAME
+	_ZN31GlxCommandHandlerAddToContainerD1Ev @ 68 NONAME
+	_ZN31GlxCommandHandlerAddToContainerD2Ev @ 69 NONAME
+	_ZNK21GlxCommandHandlerSend18doHandleUserActionEP13GlxMediaModel5QListI11QModelIndexE @ 70 NONAME
+	_ZNK23GlxCommandHandlerDelete13ProgressTextLEv @ 71 NONAME
+	_ZNK23GlxCommandHandlerDelete14CreateCommandLEiR13MGlxMediaListRi @ 72 NONAME
+	_ZNK23GlxCommandHandlerDelete15CompletionTextLEv @ 73 NONAME
+	_ZNK23GlxCommandHandlerDelete17ConfirmationTextLEb @ 74 NONAME
+	_ZNK23GlxCommandHandlerRename14CreateCommandLEiR13MGlxMediaListRi @ 75 NONAME
+	_ZNK23GlxCommandHandlerRename15CompletionTextLEv @ 76 NONAME
+	_ZNK23GlxCommandHandlerRename7GetNameER13MGlxMediaList @ 77 NONAME
+	_ZNK23GlxCommandHandlerRotate14CreateCommandLEiR13MGlxMediaListRi @ 78 NONAME
+	_ZNK24GlxCommandHandlerComment14CreateCommandLEiR13MGlxMediaListRi @ 79 NONAME
+	_ZNK24GlxCommandHandlerComment15CompletionTextLEv @ 80 NONAME
+	_ZNK24GlxCommandHandlerComment7GetNameER13MGlxMediaList @ 81 NONAME
+	_ZNK25GlxCommandHandlerNewMedia10metaObjectEv @ 82 NONAME
+	_ZNK25GlxCommandHandlerNewMedia13ProgressTextLEv @ 83 NONAME
+	_ZNK25GlxCommandHandlerNewMedia14CreateCommandLEiR13MGlxMediaListRi @ 84 NONAME
+	_ZNK25GlxCommandHandlerNewMedia15CompletionTextLEv @ 85 NONAME
+	_ZNK25GlxCommandHandlerNewMedia26GenerateNewMediaItemTitleLE7QStringR13MGlxMediaList @ 86 NONAME
+	_ZNK26GlxCommandHandlerCropImage18doHandleUserActionEP13GlxMediaModel5QListI11QModelIndexE @ 87 NONAME
+	_ZNK27GlxCommandHandlerRemoveFrom13ProgressTextLEv @ 88 NONAME
+	_ZNK27GlxCommandHandlerRemoveFrom14CreateCommandLEiR13MGlxMediaListRi @ 89 NONAME
+	_ZNK27GlxCommandHandlerRemoveFrom15CompletionTextLEv @ 90 NONAME
+	_ZNK28GlxCommandHandlerRotateImage18doHandleUserActionEP13GlxMediaModel5QListI11QModelIndexE @ 91 NONAME
+	_ZNK31GlxCommandHandlerAddToContainer13ProgressTextLEv @ 92 NONAME
+	_ZNK31GlxCommandHandlerAddToContainer14CreateCommandLEiR13MGlxMediaListRi @ 93 NONAME
+	_ZNK31GlxCommandHandlerAddToContainer14createNewMediaEv @ 94 NONAME
+	_ZNK31GlxCommandHandlerAddToContainer15CompletionTextLEv @ 95 NONAME
+	_ZTI21GlxCommandHandlerSend @ 96 NONAME
+	_ZTI23GlxCommandHandlerDelete @ 97 NONAME
+	_ZTI23GlxCommandHandlerRename @ 98 NONAME
+	_ZTI23GlxCommandHandlerRotate @ 99 NONAME
+	_ZTI24GlxCommandHandlerComment @ 100 NONAME
+	_ZTI25GlxCommandHandlerNewMedia @ 101 NONAME
+	_ZTI26GlxCommandHandlerCropImage @ 102 NONAME
+	_ZTI27GlxCommandHandlerRemoveFrom @ 103 NONAME
+	_ZTI28GlxCommandHandlerRotateImage @ 104 NONAME
+	_ZTI31GlxCommandHandlerAddToContainer @ 105 NONAME
+	_ZTV21GlxCommandHandlerSend @ 106 NONAME
+	_ZTV23GlxCommandHandlerDelete @ 107 NONAME
+	_ZTV23GlxCommandHandlerRename @ 108 NONAME
+	_ZTV23GlxCommandHandlerRotate @ 109 NONAME
+	_ZTV24GlxCommandHandlerComment @ 110 NONAME
+	_ZTV25GlxCommandHandlerNewMedia @ 111 NONAME
+	_ZTV26GlxCommandHandlerCropImage @ 112 NONAME
+	_ZTV27GlxCommandHandlerRemoveFrom @ 113 NONAME
+	_ZTV28GlxCommandHandlerRotateImage @ 114 NONAME
+	_ZTV31GlxCommandHandlerAddToContainer @ 115 NONAME
+	_ZThn8_N25GlxCommandHandlerNewMedia11HandleErrorEi @ 116 NONAME
+	_ZThn8_N25GlxCommandHandlerNewMedia16HandleItemAddedLEiiP13MGlxMediaList @ 117 NONAME
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ui/detailscustomwidget/bwins/detailsdescriptioneditu.def	Thu Jul 22 16:33:32 2010 +0100
@@ -0,0 +1,18 @@
+EXPORTS
+	?qt_metacall@GlxDetailsDescriptionEdit@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 1 NONAME ; int GlxDetailsDescriptionEdit::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?qt_metacast@GlxDetailsDescriptionEdit@@UAEPAXPBD@Z @ 2 NONAME ; void * GlxDetailsDescriptionEdit::qt_metacast(char const *)
+	??1GlxDetailsDescriptionEdit@@UAE@XZ @ 3 NONAME ; GlxDetailsDescriptionEdit::~GlxDetailsDescriptionEdit(void)
+	?staticMetaObject@GlxDetailsDescriptionEdit@@2UQMetaObject@@B @ 4 NONAME ; struct QMetaObject const GlxDetailsDescriptionEdit::staticMetaObject
+	??0GlxDetailsDescriptionEdit@@QAE@PAVQGraphicsItem@@@Z @ 5 NONAME ; GlxDetailsDescriptionEdit::GlxDetailsDescriptionEdit(class QGraphicsItem *)
+	?tr@GlxDetailsDescriptionEdit@@SA?AVQString@@PBD0H@Z @ 6 NONAME ; class QString GlxDetailsDescriptionEdit::tr(char const *, char const *, int)
+	??_EGlxDetailsDescriptionEdit@@UAE@I@Z @ 7 NONAME ; GlxDetailsDescriptionEdit::~GlxDetailsDescriptionEdit(unsigned int)
+	?labelPressed@GlxDetailsDescriptionEdit@@IAEXXZ @ 8 NONAME ; void GlxDetailsDescriptionEdit::labelPressed(void)
+	?metaObject@GlxDetailsDescriptionEdit@@UBEPBUQMetaObject@@XZ @ 9 NONAME ; struct QMetaObject const * GlxDetailsDescriptionEdit::metaObject(void) const
+	?focusInEvent@GlxDetailsDescriptionEdit@@MAEXPAVQFocusEvent@@@Z @ 10 NONAME ; void GlxDetailsDescriptionEdit::focusInEvent(class QFocusEvent *)
+	?trUtf8@GlxDetailsDescriptionEdit@@SA?AVQString@@PBD0H@Z @ 11 NONAME ; class QString GlxDetailsDescriptionEdit::trUtf8(char const *, char const *, int)
+	?focusOutEvent@GlxDetailsDescriptionEdit@@MAEXPAVQFocusEvent@@@Z @ 12 NONAME ; void GlxDetailsDescriptionEdit::focusOutEvent(class QFocusEvent *)
+	?tr@GlxDetailsDescriptionEdit@@SA?AVQString@@PBD0@Z @ 13 NONAME ; class QString GlxDetailsDescriptionEdit::tr(char const *, char const *)
+	?getStaticMetaObject@GlxDetailsDescriptionEdit@@SAABUQMetaObject@@XZ @ 14 NONAME ; struct QMetaObject const & GlxDetailsDescriptionEdit::getStaticMetaObject(void)
+	?setItemText@GlxDetailsDescriptionEdit@@QAEXABVQString@@@Z @ 15 NONAME ; void GlxDetailsDescriptionEdit::setItemText(class QString const &)
+	?trUtf8@GlxDetailsDescriptionEdit@@SA?AVQString@@PBD0@Z @ 16 NONAME ; class QString GlxDetailsDescriptionEdit::trUtf8(char const *, char const *)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ui/detailscustomwidget/bwins/detailsnamelabelu.def	Thu Jul 22 16:33:32 2010 +0100
@@ -0,0 +1,18 @@
+EXPORTS
+	??_EGlxDetailsNameLabel@@UAE@I@Z @ 1 NONAME ; GlxDetailsNameLabel::~GlxDetailsNameLabel(unsigned int)
+	??1GlxDetailsNameLabel@@UAE@XZ @ 2 NONAME ; GlxDetailsNameLabel::~GlxDetailsNameLabel(void)
+	?tr@GlxDetailsNameLabel@@SA?AVQString@@PBD0@Z @ 3 NONAME ; class QString GlxDetailsNameLabel::tr(char const *, char const *)
+	?mousePressEvent@GlxDetailsNameLabel@@MAEXPAVQGraphicsSceneMouseEvent@@@Z @ 4 NONAME ; void GlxDetailsNameLabel::mousePressEvent(class QGraphicsSceneMouseEvent *)
+	?metaObject@GlxDetailsNameLabel@@UBEPBUQMetaObject@@XZ @ 5 NONAME ; struct QMetaObject const * GlxDetailsNameLabel::metaObject(void) const
+	?getStaticMetaObject@GlxDetailsNameLabel@@SAABUQMetaObject@@XZ @ 6 NONAME ; struct QMetaObject const & GlxDetailsNameLabel::getStaticMetaObject(void)
+	?staticMetaObject@GlxDetailsNameLabel@@2UQMetaObject@@B @ 7 NONAME ; struct QMetaObject const GlxDetailsNameLabel::staticMetaObject
+	?qt_metacall@GlxDetailsNameLabel@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 8 NONAME ; int GlxDetailsNameLabel::qt_metacall(enum QMetaObject::Call, int, void * *)
+	??0GlxDetailsNameLabel@@QAE@PAVQGraphicsItem@@@Z @ 9 NONAME ; GlxDetailsNameLabel::GlxDetailsNameLabel(class QGraphicsItem *)
+	?labelPressed@GlxDetailsNameLabel@@IAEXXZ @ 10 NONAME ; void GlxDetailsNameLabel::labelPressed(void)
+	?setItemText@GlxDetailsNameLabel@@QAEXABVQString@@@Z @ 11 NONAME ; void GlxDetailsNameLabel::setItemText(class QString const &)
+	?mouseReleaseEvent@GlxDetailsNameLabel@@MAEXPAVQGraphicsSceneMouseEvent@@@Z @ 12 NONAME ; void GlxDetailsNameLabel::mouseReleaseEvent(class QGraphicsSceneMouseEvent *)
+	?trUtf8@GlxDetailsNameLabel@@SA?AVQString@@PBD0H@Z @ 13 NONAME ; class QString GlxDetailsNameLabel::trUtf8(char const *, char const *, int)
+	?trUtf8@GlxDetailsNameLabel@@SA?AVQString@@PBD0@Z @ 14 NONAME ; class QString GlxDetailsNameLabel::trUtf8(char const *, char const *)
+	?tr@GlxDetailsNameLabel@@SA?AVQString@@PBD0H@Z @ 15 NONAME ; class QString GlxDetailsNameLabel::tr(char const *, char const *, int)
+	?qt_metacast@GlxDetailsNameLabel@@UAEPAXPBD@Z @ 16 NONAME ; void * GlxDetailsNameLabel::qt_metacast(char const *)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ui/detailscustomwidget/detailscustomwidget.pro	Thu Jul 22 16:33:32 2010 +0100
@@ -0,0 +1,24 @@
+#/* 
+#* Copyright (c) 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:
+#*
+#*/ 
+ 
+           
+TEMPLATE = subdirs
+SUBDIRS += detailsnamelabel
+SUBDIRS += detailsnamelabelplugin
+SUBDIRS += detailsdescriptionedit
+SUBDIRS += detailsdescriptioneditplugin
+CONFIG += ordered
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ui/detailscustomwidget/detailsdescriptionedit/detailsdescriptionedit.pro	Thu Jul 22 16:33:32 2010 +0100
@@ -0,0 +1,61 @@
+#/* 
+#* Copyright (c) 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:
+#*
+#*/ 
+ 
+
+TEMPLATE = lib
+TARGET = detailsdescriptionedit
+CONFIG += hb
+DEFINES += BUILD_DESCEDIT
+
+win32{
+CONFIG(release, debug|release){
+  TARGET = detailsdescriptionedit
+  DESTDIR = ../release # for easy plugin loading
+}else{
+  TARGET = detailsdescriptioneditd
+  DESTDIR = ../debug # for easy plugin loading
+  }
+}
+
+DEPENDPATH += ./inc \
+              ./src
+
+INCLUDEPATH += ./inc
+
+SOURCES += \
+		glxdetailsdescriptionedit.cpp
+
+HEADERS += \
+        glxdetailsdescriptionedit.h 
+            
+symbian {
+    TARGET.UID3 = 0x200071B9
+    TARGET.EPOCALLOWDLLDATA = 1
+    TARGET.CAPABILITY = CAP_GENERAL_DLL
+    MMP_RULES += SMPSAFE 
+    LIBS += -lbafl
+}
+
+defBlock = \      
+"$${LITERAL_HASH}if defined(EABI)" \
+"DEFFILE  ../eabi/detailsdescriptionedit.def" \
+	 "$${LITERAL_HASH}else" \
+	 "DEFFILE  ../bwins/detailsdescriptionedit.def" \
+             "$${LITERAL_HASH}endif"
+	
+MMP_RULES += defBlock
+# End of file	--Don't remove this
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ui/detailscustomwidget/detailsdescriptionedit/inc/glxdetailsdescriptionedit.h	Thu Jul 22 16:33:32 2010 +0100
@@ -0,0 +1,50 @@
+/*
+* Copyright (c) 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:   This is custom widget for details view in photos for displaying the description of image .
+*
+*/
+ 
+#ifndef GlXDETAILSDESCEDIT_H
+#define GlXDETAILSDESCEDIT_H
+
+#include <hbtextedit.h>
+
+#ifdef BUILD_DESCEDIT
+#define MY_EXPORT Q_DECL_EXPORT
+#else
+#define MY_EXPORT Q_DECL_IMPORT
+#endif
+
+class HbEditorInterface;
+class MY_EXPORT GlxDetailsDescriptionEdit : public HbTextEdit 
+{	
+    Q_OBJECT
+    
+public:
+    GlxDetailsDescriptionEdit(QGraphicsItem *parent = NULL);
+    ~GlxDetailsDescriptionEdit();    	
+    void setItemText( const QString &text );
+		
+protected:
+    void  focusInEvent (QFocusEvent *event) ;
+    void  focusOutEvent (QFocusEvent *event) ;
+
+    
+signals :
+     void labelPressed();
+private:
+     HbEditorInterface *mDesc;     
+};
+
+#endif // GlXDETAILSDESCEDIT_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ui/detailscustomwidget/detailsdescriptionedit/src/glxdetailsdescriptionedit.cpp	Thu Jul 22 16:33:32 2010 +0100
@@ -0,0 +1,66 @@
+/*
+* Copyright (c) 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:   This is custom widget for details view in photos for displaying the description of image .
+*
+*/
+ 
+
+
+#include "glxdetailsdescriptionedit.h"
+#include <hbeditorinterface>
+#include <QEvent>
+
+
+
+void  GlxDetailsDescriptionEdit::focusInEvent (QFocusEvent *event)
+    {
+    if(event->reason() == Qt::MouseFocusReason )
+        {
+          event->setAccepted(TRUE);
+          emit labelPressed();
+        }
+    
+    }
+void  GlxDetailsDescriptionEdit::focusOutEvent (QFocusEvent *event) 
+    {
+     event->setAccepted(TRUE);    
+    }
+
+
+//--------------------------------------------------------------------------------------------------------------------------------------------
+//GlxDetailsDescLabel
+//--------------------------------------------------------------------------------------------------------------------------------------------
+GlxDetailsDescriptionEdit::GlxDetailsDescriptionEdit(QGraphicsItem *parent) : HbTextEdit( parent )
+{
+   setAlignment(Qt::AlignLeft);
+   mDesc = new HbEditorInterface(this);
+   mDesc->setInputConstraints (HbEditorConstraintIgnoreFocus);
+}
+
+//--------------------------------------------------------------------------------------------------------------------------------------------
+//~GlxDetailsDescLabel
+//--------------------------------------------------------------------------------------------------------------------------------------------
+GlxDetailsDescriptionEdit::~GlxDetailsDescriptionEdit()
+{
+  delete mDesc;
+   mDesc = NULL;
+}
+
+//--------------------------------------------------------------------------------------------------------------------------------------------
+//setItemText
+//--------------------------------------------------------------------------------------------------------------------------------------------
+void GlxDetailsDescriptionEdit::setItemText( const QString &text )
+{
+    setPlainText( text );
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ui/detailscustomwidget/detailsdescriptioneditplugin/detailsdescriptioneditplugin.pro	Thu Jul 22 16:33:32 2010 +0100
@@ -0,0 +1,69 @@
+#/* 
+#* Copyright (c) 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:
+#*
+#*/ 
+
+TEMPLATE = lib
+TARGET = detailsdescriptioneditplugin
+
+win32{
+CONFIG(release, debug|release){
+	TARGET = detailsdescriptioneditplugin
+	} else {
+	TARGET = detailsdescriptioneditplugind
+	}
+}
+
+CONFIG += hb plugin
+
+win32{
+CONFIG(release, debug|release){
+		DESTDIR = ../release # for easy plugin loading
+		LIBS += -L../release -ldetailsdescriptionedit
+	} else {
+		DESTDIR = ../debug # for easy plugin loading
+		LIBS += -L../debug -ldetailsdescriptioneditd
+	}
+}
+
+SOURCES += \
+        main.cpp
+
+INCLUDEPATH += \
+            ../detailsdescriptionedit \ 
+            ../detailsdescriptionedit/inc
+
+symbian: { 
+    TARGET.UID3 = 0x2000A774
+	TARGET.EPOCALLOWDLLDATA=1
+	TARGET.CAPABILITY = CAP_GENERAL_DLL
+	MMP_RULES += SMPSAFE 
+	
+	  
+	LIBS += \
+	    -ldetailsdescriptionedit.dll
+
+	pluginstub.sources = detailsdescriptioneditplugin.dll
+	pluginstub.path = /resource/plugins
+	DEPLOYMENT += pluginstub
+	DESTDIR = $$HB_PLUGINS_DIR
+}
+
+!local {
+    target.path = $$HB_PLUGINS_DIR
+    INSTALLS += target
+}
+
+# End of file	--Don't remove this.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ui/detailscustomwidget/detailsdescriptioneditplugin/main.cpp	Thu Jul 22 16:33:32 2010 +0100
@@ -0,0 +1,49 @@
+/*
+* Copyright (c) 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:  ??
+*
+*/
+ 
+
+#include "glxdetailsdescriptionedit.h"
+#include <QtPlugin>
+#include <hbdocumentloaderplugin.h>
+
+class GlxDetailsDescriptionEditPlugin : public HbDocumentLoaderPlugin
+{
+public:
+    QObject *createObject(const QString& type, const QString &name);
+    QList<const QMetaObject *> supportedObjects();  
+};
+Q_EXPORT_PLUGIN(GlxDetailsDescriptionEditPlugin)
+
+QObject *GlxDetailsDescriptionEditPlugin::createObject(const QString& type, const QString &name )
+{
+    if( type == GlxDetailsDescriptionEdit::staticMetaObject.className() ) {
+        QObject *object = new GlxDetailsDescriptionEdit();
+        object->setObjectName(name);
+        return object;    
+    }
+    return 0;
+}
+
+QList<const QMetaObject *> GlxDetailsDescriptionEditPlugin::supportedObjects()
+{
+    QList<const QMetaObject *> result;
+    result.append( &GlxDetailsDescriptionEdit::staticMetaObject );
+    return result;
+}
+
+// end of file 
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ui/detailscustomwidget/detailsnamelabel/detailsnamelabel.pro	Thu Jul 22 16:33:32 2010 +0100
@@ -0,0 +1,62 @@
+#/* 
+#* Copyright (c) 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:
+#*
+#*/ 
+
+TEMPLATE = lib
+TARGET = detailsnamelabel
+CONFIG += hb
+DEFINES += BUILD_NAMELABEL
+
+win32{
+CONFIG(release, debug|release){
+  TARGET = detailsnamelabel
+  DESTDIR = ../release # for easy plugin loading
+}else{
+  TARGET = detailsnamelabeld
+  DESTDIR = ../debug # for easy plugin loading
+  }
+}
+
+DEPENDPATH += ./inc \
+              ./src
+
+INCLUDEPATH += ./inc
+
+SOURCES += \
+		glxdetailsnamelabel.cpp
+
+HEADERS += \
+        glxdetailsnamelabel.h 
+            
+symbian {
+    TARGET.UID3 = 0x2000A7BC
+    TARGET.EPOCALLOWDLLDATA = 1
+    TARGET.CAPABILITY = CAP_GENERAL_DLL
+    MMP_RULES += SMPSAFE 
+    
+    LIBS += -lbafl
+}
+
+defBlock = \      
+"$${LITERAL_HASH}if defined(EABI)" \
+"DEFFILE  ../eabi/detailsnamelabel.def" \
+	 "$${LITERAL_HASH}else" \
+	 "DEFFILE  ../bwins/detailsnamelabel.def" \
+             "$${LITERAL_HASH}endif"
+	
+MMP_RULES += defBlock
+
+# End of file	--Don't remove this
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ui/detailscustomwidget/detailsnamelabel/inc/glxdetailsnamelabel.h	Thu Jul 22 16:33:32 2010 +0100
@@ -0,0 +1,48 @@
+/*
+* Copyright (c) 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:   ?Description
+*
+*/
+
+#ifndef GlXDETAILSNAMELABEL_H
+#define GlXDETAILSNAMELABEL_H
+
+#include <hblabel.h>
+
+#ifdef BUILD_NAMELABEL
+#define MY_EXPORT Q_DECL_EXPORT
+#else
+#define MY_EXPORT Q_DECL_IMPORT
+#endif
+
+
+class MY_EXPORT GlxDetailsNameLabel : public HbLabel 
+{	
+    Q_OBJECT
+    
+public:
+    GlxDetailsNameLabel(QGraphicsItem *parent = NULL);
+    ~GlxDetailsNameLabel();    	
+    void setItemText( const QString &text );
+		
+protected:
+    void mousePressEvent(QGraphicsSceneMouseEvent *event);	
+    void mouseReleaseEvent (QGraphicsSceneMouseEvent *event);
+    
+signals :
+     void labelPressed();
+     
+};
+
+#endif // GlXDETAILSNAMELABEL_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ui/detailscustomwidget/detailsnamelabel/src/glxdetailsnamelabel.cpp	Thu Jul 22 16:33:32 2010 +0100
@@ -0,0 +1,67 @@
+/*
+* Copyright (c) 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:   ?Description
+*
+*/
+
+
+#include <hblabel.h>
+#include "glxdetailsnamelabel.h"
+#include <QEvent>
+#include <QDebug>
+
+//--------------------------------------------------------------------------------------------------------------------------------------------
+//mousePressEvent
+//--------------------------------------------------------------------------------------------------------------------------------------------
+void GlxDetailsNameLabel::mousePressEvent(QGraphicsSceneMouseEvent *event)
+{
+    Q_UNUSED(event)
+}
+
+//--------------------------------------------------------------------------------------------------------------------------------------------
+//mouseReleaseEvent
+//--------------------------------------------------------------------------------------------------------------------------------------------
+void GlxDetailsNameLabel::mouseReleaseEvent (QGraphicsSceneMouseEvent *event) 
+{
+    qDebug("GlxDetailsNameLabel::mouseReleaseEvent");
+    Q_UNUSED(event)  
+    emit labelPressed();
+}
+
+//--------------------------------------------------------------------------------------------------------------------------------------------
+//GlxDetailsNameLabel
+//--------------------------------------------------------------------------------------------------------------------------------------------
+GlxDetailsNameLabel::GlxDetailsNameLabel(QGraphicsItem *parent) : HbLabel( parent )
+{
+    qDebug("GlxDetailsNameLabel::GlxDetailsNameLabel");
+     setTextWrapping(Hb::TextWordWrap);
+     setAlignment(Qt::AlignHCenter);
+}
+
+//--------------------------------------------------------------------------------------------------------------------------------------------
+//~GlxDetailsCustomLabel
+//--------------------------------------------------------------------------------------------------------------------------------------------
+GlxDetailsNameLabel::~GlxDetailsNameLabel()
+{
+
+}
+
+//--------------------------------------------------------------------------------------------------------------------------------------------
+//setItemText
+//--------------------------------------------------------------------------------------------------------------------------------------------
+void GlxDetailsNameLabel::setItemText( const QString &text )
+{
+    qDebug("GlxDetailsNameLabel::setItemText");
+    setHtml(text);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ui/detailscustomwidget/detailsnamelabelplugin/detailsnamelabelplugin.pro	Thu Jul 22 16:33:32 2010 +0100
@@ -0,0 +1,69 @@
+#/* 
+#* Copyright (c) 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:
+#*
+#*/ 
+
+TEMPLATE = lib
+TARGET = detailsnamelabelplugin
+
+win32{
+CONFIG(release, debug|release){
+	TARGET = detailsnamelabelplugin
+	} else {
+	TARGET = detailsnamelabelplugind
+	}
+}
+
+CONFIG += hb plugin
+
+win32{
+CONFIG(release, debug|release){
+		DESTDIR = ../release # for easy plugin loading
+		LIBS += -L../release -ldetailsnamelabel
+	} else {
+		DESTDIR = ../debug # for easy plugin loading
+		LIBS += -L../debug -ldetailsnamelabeld
+	}
+}
+
+SOURCES += \
+        main.cpp
+
+INCLUDEPATH += \
+            ../detailsnamelabel \ 
+            ../detailsnamelabel/inc
+
+symbian: { 
+    TARGET.UID3 = 0x200071B7
+	TARGET.EPOCALLOWDLLDATA=1
+	TARGET.CAPABILITY = CAP_GENERAL_DLL
+	MMP_RULES += SMPSAFE 
+	
+	  
+	LIBS += \
+	    -ldetailsnamelabel.dll
+
+	pluginstub.sources = detailsnamelabelplugin.dll
+	pluginstub.path = /resource/plugins
+	DEPLOYMENT += pluginstub
+	DESTDIR = $$HB_PLUGINS_DIR
+}
+
+!local {
+    target.path = $$HB_PLUGINS_DIR
+    INSTALLS += target
+}
+
+# End of file	--Don't remove this.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ui/detailscustomwidget/detailsnamelabelplugin/main.cpp	Thu Jul 22 16:33:32 2010 +0100
@@ -0,0 +1,54 @@
+/*
+* Copyright (c) 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:   ?Description
+*
+*/
+
+
+#include "glxdetailsnamelabel.h"
+#include <QtPlugin>
+#include <hbdocumentloaderplugin.h>
+#include <QDebug>
+
+class GlxDetailsNameLabelPlugin : public HbDocumentLoaderPlugin
+{
+public:
+    QObject *createObject(const QString& type, const QString &name);
+    QList<const QMetaObject *> supportedObjects();  
+};
+Q_EXPORT_PLUGIN(GlxDetailsNameLabelPlugin)
+
+QObject *GlxDetailsNameLabelPlugin::createObject(const QString& type, const QString &name )
+{
+    qDebug("GlxDetailsNameLabelPlugin::createObject");
+    if( type == GlxDetailsNameLabel::staticMetaObject.className() ) {
+    
+        qDebug("GlxDetailsNameLabelPlugin::createObject created");
+        QObject *object = new GlxDetailsNameLabel();
+        object->setObjectName(name);
+        return object;    
+    }
+    return 0;
+}
+
+QList<const QMetaObject *> GlxDetailsNameLabelPlugin::supportedObjects()
+{
+    qDebug("GlxDetailsNameLabelPlugin::supportedObjects");
+    QList<const QMetaObject *> result;
+    result.append( &GlxDetailsNameLabel::staticMetaObject );
+    return result;
+}
+
+// end of file 
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ui/detailscustomwidget/eabi/detailsdescriptioneditu.def	Thu Jul 22 16:33:32 2010 +0100
@@ -0,0 +1,24 @@
+EXPORTS
+	_ZN25GlxDetailsDescriptionEdit11qt_metacallEN11QMetaObject4CallEiPPv @ 1 NONAME
+	_ZN25GlxDetailsDescriptionEdit11qt_metacastEPKc @ 2 NONAME
+	_ZN25GlxDetailsDescriptionEdit11setItemTextERK7QString @ 3 NONAME
+	_ZN25GlxDetailsDescriptionEdit12focusInEventEP11QFocusEvent @ 4 NONAME
+	_ZN25GlxDetailsDescriptionEdit12labelPressedEv @ 5 NONAME
+	_ZN25GlxDetailsDescriptionEdit13focusOutEventEP11QFocusEvent @ 6 NONAME
+	_ZN25GlxDetailsDescriptionEdit16staticMetaObjectE @ 7 NONAME DATA 16
+	_ZN25GlxDetailsDescriptionEdit19getStaticMetaObjectEv @ 8 NONAME
+	_ZN25GlxDetailsDescriptionEditC1EP13QGraphicsItem @ 9 NONAME
+	_ZN25GlxDetailsDescriptionEditC2EP13QGraphicsItem @ 10 NONAME
+	_ZN25GlxDetailsDescriptionEditD0Ev @ 11 NONAME
+	_ZN25GlxDetailsDescriptionEditD1Ev @ 12 NONAME
+	_ZN25GlxDetailsDescriptionEditD2Ev @ 13 NONAME
+	_ZNK25GlxDetailsDescriptionEdit10metaObjectEv @ 14 NONAME
+	_ZTI25GlxDetailsDescriptionEdit @ 15 NONAME
+	_ZTV25GlxDetailsDescriptionEdit @ 16 NONAME
+	_ZThn16_N25GlxDetailsDescriptionEditD0Ev @ 17 NONAME
+	_ZThn16_N25GlxDetailsDescriptionEditD1Ev @ 18 NONAME
+	_ZThn8_N25GlxDetailsDescriptionEdit12focusInEventEP11QFocusEvent @ 19 NONAME
+	_ZThn8_N25GlxDetailsDescriptionEdit13focusOutEventEP11QFocusEvent @ 20 NONAME
+	_ZThn8_N25GlxDetailsDescriptionEditD0Ev @ 21 NONAME
+	_ZThn8_N25GlxDetailsDescriptionEditD1Ev @ 22 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ui/detailscustomwidget/eabi/detailsnamelabelu.def	Thu Jul 22 16:33:32 2010 +0100
@@ -0,0 +1,24 @@
+EXPORTS
+	_ZN19GlxDetailsNameLabel11qt_metacallEN11QMetaObject4CallEiPPv @ 1 NONAME
+	_ZN19GlxDetailsNameLabel11qt_metacastEPKc @ 2 NONAME
+	_ZN19GlxDetailsNameLabel11setItemTextERK7QString @ 3 NONAME
+	_ZN19GlxDetailsNameLabel12labelPressedEv @ 4 NONAME
+	_ZN19GlxDetailsNameLabel15mousePressEventEP24QGraphicsSceneMouseEvent @ 5 NONAME
+	_ZN19GlxDetailsNameLabel16staticMetaObjectE @ 6 NONAME DATA 16
+	_ZN19GlxDetailsNameLabel17mouseReleaseEventEP24QGraphicsSceneMouseEvent @ 7 NONAME
+	_ZN19GlxDetailsNameLabel19getStaticMetaObjectEv @ 8 NONAME
+	_ZN19GlxDetailsNameLabelC1EP13QGraphicsItem @ 9 NONAME
+	_ZN19GlxDetailsNameLabelC2EP13QGraphicsItem @ 10 NONAME
+	_ZN19GlxDetailsNameLabelD0Ev @ 11 NONAME
+	_ZN19GlxDetailsNameLabelD1Ev @ 12 NONAME
+	_ZN19GlxDetailsNameLabelD2Ev @ 13 NONAME
+	_ZNK19GlxDetailsNameLabel10metaObjectEv @ 14 NONAME
+	_ZTI19GlxDetailsNameLabel @ 15 NONAME
+	_ZTV19GlxDetailsNameLabel @ 16 NONAME
+	_ZThn16_N19GlxDetailsNameLabelD0Ev @ 17 NONAME
+	_ZThn16_N19GlxDetailsNameLabelD1Ev @ 18 NONAME
+	_ZThn8_N19GlxDetailsNameLabel15mousePressEventEP24QGraphicsSceneMouseEvent @ 19 NONAME
+	_ZThn8_N19GlxDetailsNameLabel17mouseReleaseEventEP24QGraphicsSceneMouseEvent @ 20 NONAME
+	_ZThn8_N19GlxDetailsNameLabelD0Ev @ 21 NONAME
+	_ZThn8_N19GlxDetailsNameLabelD1Ev @ 22 NONAME
+
--- a/ui/eabi/glxviewsu.def	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/eabi/glxviewsu.def	Thu Jul 22 16:33:32 2010 +0100
@@ -1,33 +1,3 @@
 EXPORTS
 	_ZN15GlxViewsFactory10createViewEiP12HbMainWindow @ 1 NONAME
-	_ZN24GlxSlideShowEffectEngine11qt_metacallEN11QMetaObject4CallEiPPv @ 2 NONAME
-	_ZN24GlxSlideShowEffectEngine11qt_metacastEPKc @ 3 NONAME
-	_ZN24GlxSlideShowEffectEngine12cancelEffectEP13QGraphicsItem @ 4 NONAME
-	_ZN24GlxSlideShowEffectEngine12cancelEffectER5QListIP13QGraphicsItemE9GlxEffect @ 5 NONAME
-	_ZN24GlxSlideShowEffectEngine12cancelEffectERK5QListIP13QGraphicsItemE @ 6 NONAME
-	_ZN24GlxSlideShowEffectEngine14effectFinishedEv @ 7 NONAME
-	_ZN24GlxSlideShowEffectEngine14isEffectRuningEP13QGraphicsItem @ 8 NONAME
-	_ZN24GlxSlideShowEffectEngine14isEffectRuningERK5QListIP13QGraphicsItemE @ 9 NONAME
-	_ZN24GlxSlideShowEffectEngine14registerEffectERK7QString @ 10 NONAME
-	_ZN24GlxSlideShowEffectEngine16deRegisterEffectERK7QString @ 11 NONAME
-	_ZN24GlxSlideShowEffectEngine16staticMetaObjectE @ 12 NONAME DATA 16
-	_ZN24GlxSlideShowEffectEngine19getStaticMetaObjectEv @ 13 NONAME
-	_ZN24GlxSlideShowEffectEngine20effectPluginResolverEv @ 14 NONAME
-	_ZN24GlxSlideShowEffectEngine20initTransitionEffectEv @ 15 NONAME
-	_ZN24GlxSlideShowEffectEngine22cleanTransitionEfffectEv @ 16 NONAME
-	_ZN24GlxSlideShowEffectEngine23slideShowEffectFinishedERKN8HbEffect12EffectStatusE @ 17 NONAME
-	_ZN24GlxSlideShowEffectEngine24registerTransitionEffectEv @ 18 NONAME
-	_ZN24GlxSlideShowEffectEngine24transitionEffectFinishedERKN8HbEffect12EffectStatusE @ 19 NONAME
-	_ZN24GlxSlideShowEffectEngine26deregistertransitionEffectEv @ 20 NONAME
-	_ZN24GlxSlideShowEffectEngine9runEffectEP13QGraphicsItemRK7QString @ 21 NONAME
-	_ZN24GlxSlideShowEffectEngine9runEffectER5QListIP13QGraphicsItemE9GlxEffect @ 22 NONAME
-	_ZN24GlxSlideShowEffectEngine9runEffectER5QListIP13QGraphicsItemERK7QString @ 23 NONAME
-	_ZN24GlxSlideShowEffectEngineC1Ev @ 24 NONAME
-	_ZN24GlxSlideShowEffectEngineC2Ev @ 25 NONAME
-	_ZN24GlxSlideShowEffectEngineD0Ev @ 26 NONAME
-	_ZN24GlxSlideShowEffectEngineD1Ev @ 27 NONAME
-	_ZN24GlxSlideShowEffectEngineD2Ev @ 28 NONAME
-	_ZNK24GlxSlideShowEffectEngine10metaObjectEv @ 29 NONAME
-	_ZTI24GlxSlideShowEffectEngine @ 30 NONAME
-	_ZTV24GlxSlideShowEffectEngine @ 31 NONAME
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ui/eabi/glxviewutilitiesu.def	Thu Jul 22 16:33:32 2010 +0100
@@ -0,0 +1,39 @@
+EXPORTS
+	_ZN15GlxEffectEngine11qt_metacallEN11QMetaObject4CallEiPPv @ 1 NONAME
+	_ZN15GlxEffectEngine11qt_metacastEPKc @ 2 NONAME
+	_ZN15GlxEffectEngine12cancelEffectEP13QGraphicsItem @ 3 NONAME
+	_ZN15GlxEffectEngine12cancelEffectER5QListIP13QGraphicsItemE9GlxEffect @ 4 NONAME
+	_ZN15GlxEffectEngine12cancelEffectERK5QListIP13QGraphicsItemE @ 5 NONAME
+	_ZN15GlxEffectEngine14effectFinishedEv @ 6 NONAME
+	_ZN15GlxEffectEngine14isEffectRuningEP13QGraphicsItem @ 7 NONAME
+	_ZN15GlxEffectEngine14isEffectRuningERK5QListIP13QGraphicsItemE @ 8 NONAME
+	_ZN15GlxEffectEngine14registerEffectERK7QString @ 9 NONAME
+	_ZN15GlxEffectEngine16deRegisterEffectERK7QString @ 10 NONAME
+	_ZN15GlxEffectEngine16staticMetaObjectE @ 11 NONAME DATA 16
+	_ZN15GlxEffectEngine19getStaticMetaObjectEv @ 12 NONAME
+	_ZN15GlxEffectEngine20initTransitionEffectEv @ 13 NONAME
+	_ZN15GlxEffectEngine22cleanTransitionEfffectEv @ 14 NONAME
+	_ZN15GlxEffectEngine23slideShowEffectFinishedERKN8HbEffect12EffectStatusE @ 15 NONAME
+	_ZN15GlxEffectEngine24registerTransitionEffectEv @ 16 NONAME
+	_ZN15GlxEffectEngine24transitionEffectFinishedERKN8HbEffect12EffectStatusE @ 17 NONAME
+	_ZN15GlxEffectEngine26deregistertransitionEffectEv @ 18 NONAME
+	_ZN15GlxEffectEngine9runEffectEP13QGraphicsItemRK7QString @ 19 NONAME
+	_ZN15GlxEffectEngine9runEffectER5QListIP13QGraphicsItemE9GlxEffect @ 20 NONAME
+	_ZN15GlxEffectEngine9runEffectER5QListIP13QGraphicsItemERK7QString @ 21 NONAME
+	_ZN15GlxEffectEngineC1Ev @ 22 NONAME
+	_ZN15GlxEffectEngineC2Ev @ 23 NONAME
+	_ZN15GlxEffectEngineD0Ev @ 24 NONAME
+	_ZN15GlxEffectEngineD1Ev @ 25 NONAME
+	_ZN15GlxEffectEngineD2Ev @ 26 NONAME
+	_ZN19GlxSettingInterface8instanceEv @ 27 NONAME
+	_ZN19GlxSettingInterfaceC2ERS_ @ 28 NONAME
+	_ZN19GlxSettingInterfaceC2Ev @ 29 NONAME
+	_ZN19GlxSettingInterfaceD0Ev @ 30 NONAME
+	_ZN19GlxSettingInterfaceD1Ev @ 31 NONAME
+	_ZN19GlxSettingInterfaceD2Ev @ 32 NONAME
+	_ZNK15GlxEffectEngine10metaObjectEv @ 33 NONAME
+	_ZTI15GlxEffectEngine @ 34 NONAME
+	_ZTI19GlxSettingInterface @ 35 NONAME
+	_ZTV15GlxEffectEngine @ 36 NONAME
+	_ZTV19GlxSettingInterface @ 37 NONAME
+
--- a/ui/inc/glxcommandhandlers.hrh	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/inc/glxcommandhandlers.hrh	Thu Jul 22 16:33:32 2010 +0100
@@ -115,6 +115,10 @@
     EGlxCmdContextSend,
     EGlxCmdContextRename,
     EGlxCmdSetupItem,
+    EGlxCmdComment,
+    EGlxCmdRotateImgCW,
+    EGlxCmdRotateImgCCW,
+    EGlxCmdRotateImgCrop,
     EGlxCmdAiwBase = 0x6000
     };
 
--- a/ui/inc/glxdocloaderdefs.h	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/inc/glxdocloaderdefs.h	Thu Jul 22 16:33:32 2010 +0100
@@ -27,8 +27,10 @@
 #define GLXFULLSCREEN_TOOLBAR     "toolBar"
 #define GLXFULLSCREENLSSECTION    "landscape"
 #define GLXFULLSCREENPTSECTION    "portrait"
+#define GLXFULLSCREENZOOMWIDGET   "glxZoomWidget"
 #define GLXFULLSCREENDOCMLPATH    ":/data/fullscreen.docml"
 
+
 //SLIDE SHOW
 #define GLXSLIDESHOW_VIEW         "mglxslideshow"
 #define GLXSLIDESHOW_WIDGET       "mslideshowwidget"
@@ -47,4 +49,19 @@
 #define  GLX_LISTVIEW_LIST       "listview"
 #define  GLX_LISTVIEW_DOCMLPATH  ":/data/listview.docml"
 
+//DETAILS VIEW
+#define GLX_DETAILSVIEW_DOCMLPATH  ":/data/detailsview.docml"
+#define GLX_DETAILSVIEW_VIEW       "view"
+#define GLX_DETAILSVIEW_IMAGE      "ImageIcon"
+#define GLX_DETAILSVIEW_FAVICON    "FavIcon"    
+#define GLX_DETAILSVIEW_IMGNAME    "ImageName"
+#define GLX_DETAILSVIEW_DATETEXT   "DateText"
+#define GLX_DETAILSVIEW_SIZETEXT   "SizeText"
+#define GLX_DETAILSVIEW_TIMETEXT   "TimeText"
+#define GLX_DETAILSVIEW_DESCRPTION "Descriptions"
+#define GLX_DETAILSVIEW_DESCRPTIONTEXT "DescriptionsText"
+#define  GLX_DETAILSVIEW_LSSECTION   "landscape"
+#define  GLX_DETAILSVIEW_PTSECTION   "portrait"
+
+
 #endif /* GLXDOCLOADERDEFS_H */
--- a/ui/inc/glxicondefs.h	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/inc/glxicondefs.h	Thu Jul 22 16:33:32 2010 +0100
@@ -28,8 +28,8 @@
 #define GLXICON_USEIMAGE    "qtg_small_ovi"
 
 //GRID TOOLBAR
-#define GLXICON_ALL     "qtg_mono_photos_all"
-#define GLXICON_ALBUMS  "qtg_mono_albums"
+#define GLXICON_ALL     "qtg_mono_photos"
+#define GLXICON_ALBUMS  "qtg_mono_photo_albums"
 #define GLXICON_CAMERA  "qtg_mono_camera"
 #define GLXICON_OVI     "qtg_small_ovi"
 
@@ -45,4 +45,6 @@
 #define GLXICON_ADD_TO_FAV  "qtg_graf_ratingslider_rated"
 #define GLXICON_REMOVE_FAV  "qtg_graf_ratingslider_unrated"
 
+#define GLXICON_WALL_UI_ON   "qtg_mono_back"
+
 #endif /* GLXICONDEFS_H */
--- a/ui/inc/glxmodelparm.h	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/inc/glxmodelparm.h	Thu Jul 22 16:33:32 2010 +0100
@@ -22,29 +22,7 @@
 
 #include<glxfiltergeneraldefs.h>
 #include<glxuistd.h>
-
-enum
-{
-    GlxHgVisibilityRole = Qt::UserRole + 1, // VisibilityRole For MediaWall ,  Dont Change This Value - Depedency To HgWidget
-    GlxFsImageRole,                         //to get the fullscreen image
-    GlxContextRole,                     //to get and set the context   
-    GlxFocusIndexRole,                  //to get and set the selected item index
-    GlxVisualWindowIndex,               //to set the visual window index in media list
-    GlxUriRole,                         //to get the URI of the image
-    GlxDimensionsRole,                  
-    GlxSelectedIndexRole,               //to get and set the seleceted item list
-    GlxDateRole,                        //to get the image created or modified date 
-    GlxFrameCount,                      //to get the number of frame in an image
-    GlxSubStateRole,                    //to publish the sub state of a SM states
-    GlxHdmiBitmap,                      //to get the pre decoded thumbnail for HDMI
-	GlxListItemCount,                   //to get the number of item in the album list
-	GlxSystemItemRole,                   //to get the item is system item or not
-    GlxFavorites,                       //to get the image is in favorites folder or not
-    GlxQImageSmall,                     //To Get Grid Thumbnail as QImage
-    GlxQImageLarge,                     //To Get FullScreen Thumbnail as QImage
-    GlxDefaultImage                     //To Get Default Thumbnail 
-};
-
+#include<glxmodelroles.h>
 
 class GlxModelParm
 {
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ui/inc/glxmodelroles.h	Thu Jul 22 16:33:32 2010 +0100
@@ -0,0 +1,52 @@
+/*
+* Copyright (c) 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:   ?Description
+*
+*/
+
+
+
+#ifndef GLXMODELROLES_H
+#define GLXMODELROLES_H
+enum
+{
+    GlxHgVisibilityRole = Qt::UserRole + 1, // VisibilityRole For MediaWall ,  Dont Change This Value - Depedency To HgWidget
+    GlxFsImageRole,                         //to get the fullscreen image
+    GlxContextRole,                     //to get and set the context   
+    GlxFocusIndexRole,                  //to get and set the selected item index
+    GlxVisualWindowIndex,               //to set the visual window index in media list
+    GlxUriRole,                         //to get the URI of the image
+    GlxDimensionsRole,                  
+    GlxSelectedIndexRole,               //to get and set the seleceted item list
+    GlxDateRole,                        //to get the image created or modified date 
+    GlxFrameCount,                      //to get the number of frame in an image
+    GlxSubStateRole,                    //to publish the sub state of a SM states
+    GlxHdmiBitmap,                      //to get the pre decoded thumbnail for HDMI
+	GlxListItemCount,                   //to get the number of item in the album list
+	GlxSystemItemRole,                   //to get the item is system item or not
+    GlxFavorites,                       //to get the image is in favorites folder or not
+    GlxQImageSmall,                     //To Get Grid Thumbnail as QImage
+    GlxQImageLarge,                     //To Get FullScreen Thumbnail as QImage
+    GlxDefaultImage,					//To Get Default Thumbnail 
+    GlxViewTitle,
+    GlxPopulated,
+	GlxTimeRole,                        //to get the time image was modified
+	GlxSizeRole,                         //to get the size of the image
+	GlxDescRole,                         //to get the description of the images
+	GlxRemoveContextRole,                 //to remove the context
+	GlxTempVisualWindowIndex              //to store the visual index obtained from AM temporarily
+};
+
+
+#endif 
--- a/ui/inc/glxuistd.h	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/inc/glxuistd.h	Thu Jul 22 16:33:32 2010 +0100
@@ -41,7 +41,8 @@
 	GlxContextLsList,
 	GlxContextPtList,
     GlxContextSelectionList,
-    GlxContextFavorite
+    GlxContextFavorite,
+    GlxContextComment   //to fetch the description
 };
 
 enum GlxTBContextType
@@ -56,9 +57,10 @@
 typedef enum
 {
     NO_EFFECT,
-    WAVE_EFFECT,
+    FLIP_EFFECT,
     SMOOTH_FADE,
     ZOOM_TO_FACE,
+    HELIX_EFFECT,
     TRANSITION_EFFECT,
     FADE_EFFECT,
     GRID_TO_FULLSCREEN,
@@ -127,5 +129,9 @@
 // video playback view UID
 const TInt KGlxVideoPlaybackviewPlugin = 0x2000A7B3;
 
+//Constants for ci_photos.confml
+const TUint32 KGlxCi_UidGallery = 0x20007193;
+const TInt KGlxOperatorLink  = 0x1;
+const TInt KGlxOvi  = 0x2;
 
 #endif  // GLXUISTD_H
--- a/ui/inc/glxviewids.h	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/inc/glxviewids.h	Thu Jul 22 16:33:32 2010 +0100
@@ -28,26 +28,42 @@
 #define GLX_SLIDESHOWSETTINGSVIEW_ID 0x12121217
 
 
+/* 
+ * For the non ui component, only sub state is expose in the model 
+ * so it is required to have unique substrate of states 
+ * Add the new sub state in between NO and Max 
+ * and take care uniqueness of all these substrate
+ */
 typedef enum 
 {
-    NO_GRID_S,
+    NO_GRID_S = 0,
     ALL_ITEM_S,
-    ALBUM_ITEM_S,
+    ALBUM_ITEM_S,    
+    MAX_GRID_S
 } GridState;
 
 typedef enum 
 {
-    NO_FULLSCREEN_S,
+    NO_FULLSCREEN_S = MAX_GRID_S + 1,
     EXTERNAL_S,
     IMAGEVIEWER_S,
-	FETCHER_S
+	FETCHER_S,  
+	MAX_FULLSCREEN_S
 } FullScreenState;
 
 typedef enum 
 {
-    NO_SLIDESHOW_S,
+    NO_SLIDESHOW_S = MAX_FULLSCREEN_S + 1,
     SLIDESHOW_GRID_ITEM_S,
     SLIDESHOW_ALBUM_ITEM_S,
+    MAX_SLIDESHOW_S 
 } SlideShowState;
 
+typedef enum
+{
+    NO_DETAIL_S = MAX_SLIDESHOW_S + 1,
+    IMAGEVIEWER_DETAIL_S,
+    MAX_DETAIL_S
+} DetailState;
+
 #endif /* GLXVIEWIDS_H */
--- a/ui/ui.pro	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/ui.pro	Thu Jul 22 16:33:32 2010 +0100
@@ -16,8 +16,15 @@
 #*/ 
 TEMPLATE    = subdirs
 CONFIG += ordered
-SUBDIRS	    = uiengine \
+
+exportfile += "inc/glxmodelroles.h APP_LAYER_PLATFORM_EXPORT_PATH(glxmodelroles.h)"
+BLD_INF_RULES.prj_exports += exportfile
+
+SUBDIRS	    = detailscustomwidget \
+               uiengine \
               commandhandlers \
+              viewutilities \
+              widgets \
               views \
               viewmanagement \
 #	      viewplugins
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ui/uiengine/bwins/glxdrmutilitywrapperu.def	Thu Jul 22 16:33:32 2010 +0100
@@ -0,0 +1,7 @@
+EXPORTS
+	??1GlxDRMUtilityWrapper@@QAE@XZ @ 1 NONAME ; GlxDRMUtilityWrapper::~GlxDRMUtilityWrapper(void)
+	?ItemRightsValidityCheck@GlxDRMUtilityWrapper@@QAE_NVQString@@_N@Z @ 2 NONAME ; bool GlxDRMUtilityWrapper::ItemRightsValidityCheck(class QString, bool)
+	??0GlxDRMUtilityWrapper@@QAE@XZ @ 3 NONAME ; GlxDRMUtilityWrapper::GlxDRMUtilityWrapper(void)
+	?ConsumeRights@GlxDRMUtilityWrapper@@QAE_NVQString@@@Z @ 4 NONAME ; bool GlxDRMUtilityWrapper::ConsumeRights(class QString)
+	?ShowRightsInfo@GlxDRMUtilityWrapper@@QAEXVQString@@@Z @ 5 NONAME ; void GlxDRMUtilityWrapper::ShowRightsInfo(class QString)
+
--- a/ui/uiengine/bwins/glxmedialistwrapperu.def	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/uiengine/bwins/glxmedialistwrapperu.def	Thu Jul 22 16:33:32 2010 +0100
@@ -1,43 +1,60 @@
 EXPORTS
 	?retrieveItemUri@GlxMLWrapper@@QAE?AVQString@@H@Z @ 1 NONAME ; class QString GlxMLWrapper::retrieveItemUri(int)
-	?itemCorrupted@GlxMLWrapper@@IAEXH@Z @ 2 NONAME ; void GlxMLWrapper::itemCorrupted(int)
-	?trUtf8@GlxMLWrapper@@SA?AVQString@@PBD0H@Z @ 3 NONAME ; class QString GlxMLWrapper::trUtf8(char const *, char const *, int)
-	?handleGeneralError@GlxMLWrapper@@QAEXH@Z @ 4 NONAME ; void GlxMLWrapper::handleGeneralError(int)
-	?updateItem@GlxMLWrapper@@IAEXHW4GlxTBContextType@@@Z @ 5 NONAME ; void GlxMLWrapper::updateItem(int, enum GlxTBContextType)
-	?removeItems@GlxMLWrapper@@IAEXHH@Z @ 6 NONAME ; void GlxMLWrapper::removeItems(int, int)
-	?getItemCount@GlxMLWrapper@@QAEHXZ @ 7 NONAME ; int GlxMLWrapper::getItemCount(void)
-	?getVisibleWindowIndex@GlxMLWrapper@@QAEHXZ @ 8 NONAME ; int GlxMLWrapper::getVisibleWindowIndex(void)
-	?setFocusIndex@GlxMLWrapper@@QAEXH@Z @ 9 NONAME ; void GlxMLWrapper::setFocusIndex(int)
-	?retrieveItemDate@GlxMLWrapper@@QAE?AVQDate@@H@Z @ 10 NONAME ; class QDate GlxMLWrapper::retrieveItemDate(int)
-	?qt_metacall@GlxMLWrapper@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 11 NONAME ; int GlxMLWrapper::qt_metacall(enum QMetaObject::Call, int, void * *)
-	?retrieveItemFrameCount@GlxMLWrapper@@QAEHH@Z @ 12 NONAME ; int GlxMLWrapper::retrieveItemFrameCount(int)
-	?retrieveListTitle@GlxMLWrapper@@QAE?AVQString@@H@Z @ 13 NONAME ; class QString GlxMLWrapper::retrieveListTitle(int)
-	?retrieveListItemCount@GlxMLWrapper@@QAEHH@Z @ 14 NONAME ; int GlxMLWrapper::retrieveListItemCount(int)
-	?tr@GlxMLWrapper@@SA?AVQString@@PBD0@Z @ 15 NONAME ; class QString GlxMLWrapper::tr(char const *, char const *)
-	?setVisibleWindowIndex@GlxMLWrapper@@QAEXH@Z @ 16 NONAME ; void GlxMLWrapper::setVisibleWindowIndex(int)
-	?getStaticMetaObject@GlxMLWrapper@@SAABUQMetaObject@@XZ @ 17 NONAME ; struct QMetaObject const & GlxMLWrapper::getStaticMetaObject(void)
-	?retrieveListSubTitle@GlxMLWrapper@@QAE?AVQString@@H@Z @ 18 NONAME ; class QString GlxMLWrapper::retrieveListSubTitle(int)
-	?staticMetaObject@GlxMLWrapper@@2UQMetaObject@@B @ 19 NONAME ; struct QMetaObject const GlxMLWrapper::staticMetaObject
-	?handleListItemAvailable@GlxMLWrapper@@QAEXH@Z @ 20 NONAME ; void GlxMLWrapper::handleListItemAvailable(int)
-	?trUtf8@GlxMLWrapper@@SA?AVQString@@PBD0@Z @ 21 NONAME ; class QString GlxMLWrapper::trUtf8(char const *, char const *)
-	?itemsRemoved@GlxMLWrapper@@QAEXHH@Z @ 22 NONAME ; void GlxMLWrapper::itemsRemoved(int, int)
-	?metaObject@GlxMLWrapper@@UBEPBUQMetaObject@@XZ @ 23 NONAME ; struct QMetaObject const * GlxMLWrapper::metaObject(void) const
-	?insertItems@GlxMLWrapper@@IAEXHH@Z @ 24 NONAME ; void GlxMLWrapper::insertItems(int, int)
-	?isSystemItem@GlxMLWrapper@@QAE_NH@Z @ 25 NONAME ; bool GlxMLWrapper::isSystemItem(int)
-	?getFocusIndex@GlxMLWrapper@@QBEHXZ @ 26 NONAME ; int GlxMLWrapper::getFocusIndex(void) const
-	?handleIconCorrupt@GlxMLWrapper@@QAEXH@Z @ 27 NONAME ; void GlxMLWrapper::handleIconCorrupt(int)
-	?retrieveItemDimension@GlxMLWrapper@@QAE?AVQSize@@H@Z @ 28 NONAME ; class QSize GlxMLWrapper::retrieveItemDimension(int)
-	?RetrieveL@GlxAttributeRetriever@@SAHABVMGlxFetchContext@@AAVMGlxMediaList@@H@Z @ 29 NONAME ; int GlxAttributeRetriever::RetrieveL(class MGlxFetchContext const &, class MGlxMediaList &, int)
-	?handleReceivedIcon@GlxMLWrapper@@QAEXHW4GlxTBContextType@@@Z @ 30 NONAME ; void GlxMLWrapper::handleReceivedIcon(int, enum GlxTBContextType)
-	?tr@GlxMLWrapper@@SA?AVQString@@PBD0H@Z @ 31 NONAME ; class QString GlxMLWrapper::tr(char const *, char const *, int)
-	??_EGlxMLWrapper@@UAE@I@Z @ 32 NONAME ; GlxMLWrapper::~GlxMLWrapper(unsigned int)
-	?setContextMode@GlxMLWrapper@@QAEXW4GlxContextMode@@@Z @ 33 NONAME ; void GlxMLWrapper::setContextMode(enum GlxContextMode)
-	??1GlxMLWrapper@@UAE@XZ @ 34 NONAME ; GlxMLWrapper::~GlxMLWrapper(void)
-	?RetrieveBitmap@GlxMLWrapper@@QAE?AVQVariant@@H@Z @ 35 NONAME ; class QVariant GlxMLWrapper::RetrieveBitmap(int)
-	?qt_metacast@GlxMLWrapper@@UAEPAXPBD@Z @ 36 NONAME ; void * GlxMLWrapper::qt_metacast(char const *)
-	?retrieveItemImage@GlxMLWrapper@@QAE?AVQImage@@HW4GlxTBContextType@@@Z @ 37 NONAME ; class QImage GlxMLWrapper::retrieveItemImage(int, enum GlxTBContextType)
-	??0GlxMLWrapper@@QAE@HHW4TGlxFilterItemType@@VQString@@@Z @ 38 NONAME ; GlxMLWrapper::GlxMLWrapper(int, int, enum TGlxFilterItemType, class QString)
-	?setSelectedIndex@GlxMLWrapper@@QAEXH@Z @ 39 NONAME ; void GlxMLWrapper::setSelectedIndex(int)
-	?itemsAdded@GlxMLWrapper@@QAEXHH@Z @ 40 NONAME ; void GlxMLWrapper::itemsAdded(int, int)
-	?retrieveItemIcon@GlxMLWrapper@@QAEPAVHbIcon@@HW4GlxTBContextType@@@Z @ 41 NONAME ; class HbIcon * GlxMLWrapper::retrieveItemIcon(int, enum GlxTBContextType)
+	?handlepopulated@GlxMLWrapper@@QAEXXZ @ 2 NONAME ; void GlxMLWrapper::handlepopulated(void)
+	?itemCorrupted@GlxMLWrapper@@IAEXH@Z @ 3 NONAME ; void GlxMLWrapper::itemCorrupted(int)
+	?populated@GlxMLWrapper@@IAEXXZ @ 4 NONAME ; void GlxMLWrapper::populated(void)
+	?trUtf8@GlxMLWrapper@@SA?AVQString@@PBD0H@Z @ 5 NONAME ; class QString GlxMLWrapper::trUtf8(char const *, char const *, int)
+	?handleGeneralError@GlxMLWrapper@@QAEXH@Z @ 6 NONAME ; void GlxMLWrapper::handleGeneralError(int)
+	?updateItem@GlxMLWrapper@@IAEXHW4GlxTBContextType@@@Z @ 7 NONAME ; void GlxMLWrapper::updateItem(int, enum GlxTBContextType)
+	?removeItems@GlxMLWrapper@@IAEXHH@Z @ 8 NONAME ; void GlxMLWrapper::removeItems(int, int)
+	?IsPopulated@GlxMLWrapper@@QAE_NXZ @ 9 NONAME ; bool GlxMLWrapper::IsPopulated(void)
+	?getItemCount@GlxMLWrapper@@QAEHXZ @ 10 NONAME ; int GlxMLWrapper::getItemCount(void)
+	?getVisibleWindowIndex@GlxMLWrapper@@QAEHXZ @ 11 NONAME ; int GlxMLWrapper::getVisibleWindowIndex(void)
+	?setFocusIndex@GlxMLWrapper@@QAEXH@Z @ 12 NONAME ; void GlxMLWrapper::setFocusIndex(int)
+	?retrieveItemDate@GlxMLWrapper@@QAE?AVQDate@@H@Z @ 13 NONAME ; class QDate GlxMLWrapper::retrieveItemDate(int)
+	?qt_metacall@GlxMLWrapper@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 14 NONAME ; int GlxMLWrapper::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?retrieveItemFrameCount@GlxMLWrapper@@QAEHH@Z @ 15 NONAME ; int GlxMLWrapper::retrieveItemFrameCount(int)
+	?retrieveListTitle@GlxMLWrapper@@QAE?AVQString@@H@Z @ 16 NONAME ; class QString GlxMLWrapper::retrieveListTitle(int)
+	?retrieveListItemCount@GlxMLWrapper@@QAEHH@Z @ 17 NONAME ; int GlxMLWrapper::retrieveListItemCount(int)
+	?tr@GlxMLWrapper@@SA?AVQString@@PBD0@Z @ 18 NONAME ; class QString GlxMLWrapper::tr(char const *, char const *)
+	?setVisibleWindowIndex@GlxMLWrapper@@QAEXH@Z @ 19 NONAME ; void GlxMLWrapper::setVisibleWindowIndex(int)
+	?getStaticMetaObject@GlxMLWrapper@@SAABUQMetaObject@@XZ @ 20 NONAME ; struct QMetaObject const & GlxMLWrapper::getStaticMetaObject(void)
+	?retrieveListSubTitle@GlxMLWrapper@@QAE?AVQString@@H@Z @ 21 NONAME ; class QString GlxMLWrapper::retrieveListSubTitle(int)
+	?updateAlbumTitle@GlxMLWrapper@@IAEXVQString@@@Z @ 22 NONAME ; void GlxMLWrapper::updateAlbumTitle(class QString)
+	?staticMetaObject@GlxMLWrapper@@2UQMetaObject@@B @ 23 NONAME ; struct QMetaObject const GlxMLWrapper::staticMetaObject
+	?handleListItemAvailable@GlxMLWrapper@@QAEXH@Z @ 24 NONAME ; void GlxMLWrapper::handleListItemAvailable(int)
+	?trUtf8@GlxMLWrapper@@SA?AVQString@@PBD0@Z @ 25 NONAME ; class QString GlxMLWrapper::trUtf8(char const *, char const *)
+	?itemsRemoved@GlxMLWrapper@@QAEXHH@Z @ 26 NONAME ; void GlxMLWrapper::itemsRemoved(int, int)
+	?handleTitleAvailable@GlxMLWrapper@@QAEXVQString@@@Z @ 27 NONAME ; void GlxMLWrapper::handleTitleAvailable(class QString)
+	?metaObject@GlxMLWrapper@@UBEPBUQMetaObject@@XZ @ 28 NONAME ; struct QMetaObject const * GlxMLWrapper::metaObject(void) const
+	?insertItems@GlxMLWrapper@@IAEXHH@Z @ 29 NONAME ; void GlxMLWrapper::insertItems(int, int)
+	?isSystemItem@GlxMLWrapper@@QAE_NH@Z @ 30 NONAME ; bool GlxMLWrapper::isSystemItem(int)
+	?getFocusIndex@GlxMLWrapper@@QBEHXZ @ 31 NONAME ; int GlxMLWrapper::getFocusIndex(void) const
+	?handleIconCorrupt@GlxMLWrapper@@QAEXH@Z @ 32 NONAME ; void GlxMLWrapper::handleIconCorrupt(int)
+	?retrieveItemDimension@GlxMLWrapper@@QAE?AVQSize@@H@Z @ 33 NONAME ; class QSize GlxMLWrapper::retrieveItemDimension(int)
+	?RetrieveL@GlxAttributeRetriever@@SAHABVMGlxFetchContext@@AAVMGlxMediaList@@H@Z @ 34 NONAME ; int GlxAttributeRetriever::RetrieveL(class MGlxFetchContext const &, class MGlxMediaList &, int)
+	?handleReceivedIcon@GlxMLWrapper@@QAEXHW4GlxTBContextType@@@Z @ 35 NONAME ; void GlxMLWrapper::handleReceivedIcon(int, enum GlxTBContextType)
+	?retrieveViewTitle@GlxMLWrapper@@QAE?AVQString@@XZ @ 36 NONAME ; class QString GlxMLWrapper::retrieveViewTitle(void)
+	?tr@GlxMLWrapper@@SA?AVQString@@PBD0H@Z @ 37 NONAME ; class QString GlxMLWrapper::tr(char const *, char const *, int)
+	?setContextMode@GlxMLWrapper@@QAEXW4GlxContextMode@@@Z @ 38 NONAME ; void GlxMLWrapper::setContextMode(enum GlxContextMode)
+	??_EGlxMLWrapper@@UAE@I@Z @ 39 NONAME ; GlxMLWrapper::~GlxMLWrapper(unsigned int)
+	??1GlxMLWrapper@@UAE@XZ @ 40 NONAME ; GlxMLWrapper::~GlxMLWrapper(void)
+	?RetrieveBitmap@GlxMLWrapper@@QAE?AVQVariant@@H@Z @ 41 NONAME ; class QVariant GlxMLWrapper::RetrieveBitmap(int)
+	??1CGlxTitleFetcher@@UAE@XZ @ 42 NONAME ; CGlxTitleFetcher::~CGlxTitleFetcher(void)
+	?HandleTitleAvailableL@GlxMLWrapperPrivate@@UAEXABVTDesC16@@@Z @ 43 NONAME ; void GlxMLWrapperPrivate::HandleTitleAvailableL(class TDesC16 const &)
+	?qt_metacast@GlxMLWrapper@@UAEPAXPBD@Z @ 44 NONAME ; void * GlxMLWrapper::qt_metacast(char const *)
+	?retrieveItemImage@GlxMLWrapper@@QAE?AVQImage@@HW4GlxTBContextType@@@Z @ 45 NONAME ; class QImage GlxMLWrapper::retrieveItemImage(int, enum GlxTBContextType)
+	?setSelectedIndex@GlxMLWrapper@@QAEXH@Z @ 46 NONAME ; void GlxMLWrapper::setSelectedIndex(int)
+	??0GlxMLWrapper@@QAE@HHW4TGlxFilterItemType@@VQString@@@Z @ 47 NONAME ; GlxMLWrapper::GlxMLWrapper(int, int, enum TGlxFilterItemType, class QString)
+	?itemsAdded@GlxMLWrapper@@QAEXHH@Z @ 48 NONAME ; void GlxMLWrapper::itemsAdded(int, int)
+	?retrieveItemIcon@GlxMLWrapper@@QAEPAVHbIcon@@HW4GlxTBContextType@@@Z @ 49 NONAME ; class HbIcon * GlxMLWrapper::retrieveItemIcon(int, enum GlxTBContextType)
+	?retrieveItemSize@GlxMLWrapper@@QAEHH@Z @ 50 NONAME ; int GlxMLWrapper::retrieveItemSize(int)
+	?retrieveItemTime@GlxMLWrapper@@QAE?AVQTime@@H@Z @ 51 NONAME ; class QTime GlxMLWrapper::retrieveItemTime(int)
+	?retrieveListDesc@GlxMLWrapper@@QAE?AVQString@@H@Z @ 52 NONAME ; class QString GlxMLWrapper::retrieveListDesc(int)
+	?removeContextMode@GlxMLWrapper@@QAEXW4GlxContextMode@@@Z @ 53 NONAME ; void GlxMLWrapper::removeContextMode(enum GlxContextMode)
+	?updateDetails@GlxMLWrapper@@IAEXXZ @ 54 NONAME ; void GlxMLWrapper::updateDetails(void)
+	?handleDetailsItemAvailable@GlxMLWrapper@@QAEXH@Z @ 55 NONAME ; void GlxMLWrapper::handleDetailsItemAvailable(int)
+	?setDrmValid@GlxMLWrapper@@QAEXH_N@Z @ 56 NONAME ; void GlxMLWrapper::setDrmValid(int, bool)
+	?IsDrmProtected@GlxMLWrapper@@QAE_NH@Z @ 57 NONAME ; bool GlxMLWrapper::IsDrmProtected(int)
+	?IsDrmValid@GlxMLWrapper@@QAE_NH@Z @ 58 NONAME ; bool GlxMLWrapper::IsDrmValid(int)
 
--- a/ui/uiengine/drmutility/bwins/glxdrmutilityu.def	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/uiengine/drmutility/bwins/glxdrmutilityu.def	Thu Jul 22 16:33:32 2010 +0100
@@ -1,15 +1,21 @@
 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)
-	?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 &)
-	?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 &)
+	?InstanceL@CGlxDRMUtility@@SAPAV1@XZ @ 1 NONAME ; class CGlxDRMUtility * CGlxDRMUtility::InstanceL(void)
+	?ShowDRMDetailsPaneL@CGlxDRMUtility@@QAEXAAVRFile@@@Z @ 2 NONAME ; void CGlxDRMUtility::ShowDRMDetailsPaneL(class RFile &)
+	?ShowRightsInfoL@CGlxDRMUtility@@QAEXABVTDesC16@@@Z @ 3 NONAME ; void CGlxDRMUtility::ShowRightsInfoL(class TDesC16 const &)
+	?DRMThumbnailSize@CGlxDRMUtility@@QAE?AVTSize@@AAV2@@Z @ 4 NONAME ; class TSize CGlxDRMUtility::DRMThumbnailSize(class TSize &)
+	?ItemRightsValidityCheckL@CGlxDRMUtility@@QAEHABVTDesC16@@H@Z @ 5 NONAME ; int CGlxDRMUtility::ItemRightsValidityCheckL(class TDesC16 const &, int)
+	?ClearLastConsumedItemUriL@CGlxDRMUtility@@QAEXXZ @ 6 NONAME ; void CGlxDRMUtility::ClearLastConsumedItemUriL(void)
+	?DisplayItemRightsCheckL@CGlxDRMUtility@@QAEHAAVRFile@@H@Z @ 7 NONAME ; int CGlxDRMUtility::DisplayItemRightsCheckL(class RFile &, int)
+	?ShowRightsInfoL@CGlxDRMUtility@@QAEXAAVRFile@@@Z @ 8 NONAME ; void CGlxDRMUtility::ShowRightsInfoL(class RFile &)
+	?CanShowInfoOnlineL@CGlxDRMUtility@@QAEHABVTDesC16@@@Z @ 9 NONAME ; int CGlxDRMUtility::CanShowInfoOnlineL(class TDesC16 const &)
+	?Close@CGlxDRMUtility@@QAEXXZ @ 10 NONAME ; void CGlxDRMUtility::Close(void)
+	?SetAsAutomatedL@CGlxDRMUtility@@QAEXABVTDesC16@@W4TGlxDrmAutomatedType@@@Z @ 11 NONAME ; void CGlxDRMUtility::SetAsAutomatedL(class TDesC16 const &, enum TGlxDrmAutomatedType)
+	?CanSetAsAutomatedL@CGlxDRMUtility@@QAEHABVTDesC16@@W4TGlxDrmAutomatedType@@@Z @ 12 NONAME ; int CGlxDRMUtility::CanSetAsAutomatedL(class TDesC16 const &, enum TGlxDrmAutomatedType)
+	?ConsumeRightsL@CGlxDRMUtility@@QAEHABVTDesC16@@@Z @ 13 NONAME ; int CGlxDRMUtility::ConsumeRightsL(class TDesC16 const &)
+	?IsForwardLockedL@CGlxDRMUtility@@QAEHABVTDesC16@@@Z @ 14 NONAME ; int CGlxDRMUtility::IsForwardLockedL(class TDesC16 const &)
+	?DisplayItemRightsCheckL@CGlxDRMUtility@@QAEHABVTDesC16@@H@Z @ 15 NONAME ; int CGlxDRMUtility::DisplayItemRightsCheckL(class TDesC16 const &, int)
+	?ItemRightsValidityCheckL@CGlxDRMUtility@@QAEHAAVRFile@@H@Z @ 16 NONAME ; int CGlxDRMUtility::ItemRightsValidityCheckL(class RFile &, int)
+	?ShowDRMDetailsPaneL@CGlxDRMUtility@@QAEXABVTDesC16@@@Z @ 17 NONAME ; void CGlxDRMUtility::ShowDRMDetailsPaneL(class TDesC16 const &)
+	?ShowInfoOnlineL@CGlxDRMUtility@@QAEXABVTDesC16@@@Z @ 18 NONAME ; void CGlxDRMUtility::ShowInfoOnlineL(class TDesC16 const &)
+	?ConsumeRightsL@CGlxDRMUtility@@QAEHAAVRFile@@@Z @ 19 NONAME ; int CGlxDRMUtility::ConsumeRightsL(class RFile &)
 
--- a/ui/uiengine/drmutility/eabi/glxdrmutilityu.def	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/uiengine/drmutility/eabi/glxdrmutilityu.def	Thu Jul 22 16:33:32 2010 +0100
@@ -1,15 +1,21 @@
 EXPORTS
-	_ZN14CGlxDRMUtility14ConsumeRightsLERK7TDesC16 @ 1 NONAME
-	_ZN14CGlxDRMUtility15SetAsAutomatedLERK7TDesC1620TGlxDrmAutomatedType @ 2 NONAME
-	_ZN14CGlxDRMUtility15ShowInfoOnlineLER7TDesC16 @ 3 NONAME
-	_ZN14CGlxDRMUtility15ShowRightsInfoLERK7TDesC16 @ 4 NONAME
-	_ZN14CGlxDRMUtility16CheckOpenRightsLERK7TDesC16i @ 5 NONAME
-	_ZN14CGlxDRMUtility16DRMThumbnailSizeER5TSize @ 6 NONAME
-	_ZN14CGlxDRMUtility16IsForwardLockedLERK7TDesC16 @ 7 NONAME
-	_ZN14CGlxDRMUtility18CanSetAsAutomatedLERK7TDesC1620TGlxDrmAutomatedType @ 8 NONAME
-	_ZN14CGlxDRMUtility18CanShowInfoOnlineLER7TDesC16 @ 9 NONAME
-	_ZN14CGlxDRMUtility19CheckDisplayRightsLERK7TDesC16i @ 10 NONAME
-	_ZN14CGlxDRMUtility19ShowDRMDetailsPaneLERK7TDesC16 @ 11 NONAME
-	_ZN14CGlxDRMUtility5CloseEv @ 12 NONAME
-	_ZN14CGlxDRMUtility9InstanceLEv @ 13 NONAME
+	_ZN14CGlxDRMUtility14ConsumeRightsLER5RFile @ 1 NONAME
+	_ZN14CGlxDRMUtility14ConsumeRightsLERK7TDesC16 @ 2 NONAME
+	_ZN14CGlxDRMUtility15SetAsAutomatedLERK7TDesC1620TGlxDrmAutomatedType @ 3 NONAME
+	_ZN14CGlxDRMUtility15ShowInfoOnlineLERK7TDesC16 @ 4 NONAME
+	_ZN14CGlxDRMUtility15ShowRightsInfoLER5RFile @ 5 NONAME
+	_ZN14CGlxDRMUtility15ShowRightsInfoLERK7TDesC16 @ 6 NONAME
+	_ZN14CGlxDRMUtility16DRMThumbnailSizeER5TSize @ 7 NONAME
+	_ZN14CGlxDRMUtility16IsForwardLockedLERK7TDesC16 @ 8 NONAME
+	_ZN14CGlxDRMUtility18CanSetAsAutomatedLERK7TDesC1620TGlxDrmAutomatedType @ 9 NONAME
+	_ZN14CGlxDRMUtility18CanShowInfoOnlineLERK7TDesC16 @ 10 NONAME
+	_ZN14CGlxDRMUtility19ShowDRMDetailsPaneLER5RFile @ 11 NONAME
+	_ZN14CGlxDRMUtility19ShowDRMDetailsPaneLERK7TDesC16 @ 12 NONAME
+	_ZN14CGlxDRMUtility23DisplayItemRightsCheckLER5RFilei @ 13 NONAME
+	_ZN14CGlxDRMUtility23DisplayItemRightsCheckLERK7TDesC16i @ 14 NONAME
+	_ZN14CGlxDRMUtility24ItemRightsValidityCheckLER5RFilei @ 15 NONAME
+	_ZN14CGlxDRMUtility24ItemRightsValidityCheckLERK7TDesC16i @ 16 NONAME
+	_ZN14CGlxDRMUtility25ClearLastConsumedItemUriLEv @ 17 NONAME
+	_ZN14CGlxDRMUtility5CloseEv @ 18 NONAME
+	_ZN14CGlxDRMUtility9InstanceLEv @ 19 NONAME
 
--- a/ui/uiengine/drmutility/group/glxdrmutility.mmp	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/uiengine/drmutility/group/glxdrmutility.mmp	Thu Jul 22 16:33:32 2010 +0100
@@ -44,4 +44,5 @@
 LIBRARY         caf.lib
 LIBRARY         cafutils.lib
 
+SMPSAFE
 // End of File
--- a/ui/uiengine/drmutility/inc/glxdrmutility.h	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/uiengine/drmutility/inc/glxdrmutility.h	Thu Jul 22 16:33:32 2010 +0100
@@ -11,7 +11,7 @@
 *
 * Contributors:
 *
-* Description:   DRM utility implementation
+* Description:    DRM utility implementation
 *
 */
 
@@ -28,7 +28,7 @@
 // INCLUDES
 
 #include <e32base.h>
-
+#include <f32file.h>
 // FORWARD DECLARATIONS
 
 class CDRMHelper;
@@ -82,23 +82,47 @@
 
     /**
      * Check whether DRM rights are valid for specified item
-     *
+     * is called before right is consumed and for all items (focused or unfocused).
+     * 
      * @param aUri URI of the media item.
      * @param aCheckViewRights, check view rights if true, play if false
      * @return ETrue if valid rights exist for the media item.
      */
-    IMPORT_C TBool CheckOpenRightsL(const TDesC& aUri, TBool aCheckViewRights);
+    IMPORT_C TBool ItemRightsValidityCheckL(const TDesC& aUri, TBool aCheckViewRights);
+    
+    /**
+     * Check whether DRM rights are valid for specified item
+     * is called before right is consumed and for all items (focused or unfocused).
+     * 
+     * @param filehandle of the media item.
+     * @param aCheckViewRights, check view rights if true, play if false
+     * @return ETrue if valid rights exist for the media item.
+     */
+    IMPORT_C TBool ItemRightsValidityCheckL(RFile& aFileHandle, TBool aCheckViewRights);
 
     /**
      * Check whether DRM rights are valid for specified item
      * If the rights were just consumed, then allow to display
      * Otherwise, obtain current rights
-     *
+     * is called after right is consumed and for only focused/displayed item.
+     * 
      * @param aUri URI of the media item.
      * @param aCheckViewRights, check view rights if true, play if false
      * @return ETrue if valid rights exist for the media item.
      */
-    IMPORT_C TBool CheckDisplayRightsL(const TDesC& aUri, TBool aCheckViewRights);
+    IMPORT_C TBool DisplayItemRightsCheckL(const TDesC& aUri, TBool aCheckViewRights);
+    
+    /**
+     * Check whether DRM rights are valid for specified item
+     * If the rights were just consumed, then allow to display
+     * Otherwise, obtain current rights
+     * is called after right is consumed and for only focused/displayed item.
+     * 
+     * @param filehandle of the media item.
+     * @param aCheckViewRights, check view rights if true, play if false
+     * @return ETrue if valid rights exist for the media item.
+     */
+    IMPORT_C TBool DisplayItemRightsCheckL(RFile& aFileHandle, TBool aCheckViewRights);
     
     /**
       * Consume rights for specified item
@@ -109,7 +133,19 @@
       */
     IMPORT_C TBool ConsumeRightsL(const TDesC& aUri);
     
-    
+    /**
+      * Consume rights for specified item
+      * Caches item so that a client has right to display the item
+      *
+      * @param  Filehandle for item
+      * @return ETrue to no error in rights consumption
+      */
+    IMPORT_C TBool ConsumeRightsL(RFile& aFileHandle);
+
+    /**
+     * Clears Last Consumed Uri
+     */
+    IMPORT_C void ClearLastConsumedItemUriL();
 
     /**
      * Test whether a media item is OMA DRM 2.0 protected and has an associated
@@ -117,13 +153,13 @@
      * @param aUri URI of the media item.
      * @return ETrue if it does.
      */
-    IMPORT_C TBool CanShowInfoOnlineL(TDesC& aUri);
+    IMPORT_C TBool CanShowInfoOnlineL(const TDesC& aUri);
 
     /**
      * Open the associated info URL for a media item in the browser.
      * @param aUri URI of the media item.
      */
-    IMPORT_C void ShowInfoOnlineL(TDesC& aUri);
+    IMPORT_C void ShowInfoOnlineL(const TDesC& aUri);
 
     /**
      * Test whether a media item can be set as automated content.     *
@@ -147,6 +183,12 @@
     IMPORT_C void ShowDRMDetailsPaneL(const TDesC& aUri);
     
     /**
+     * Show DRM details for specified item.
+     * @param Filehandle of the media item.
+     */
+    IMPORT_C void ShowDRMDetailsPaneL(RFile& aFileHandle);
+    
+    /**
       * Ask DRM manager if file is forward locked
       */
     IMPORT_C TBool IsForwardLockedL(const TDesC& aUri);
@@ -158,6 +200,12 @@
     IMPORT_C void ShowRightsInfoL(const TDesC& aUri);
     
     /**
+      * Show rights info
+      * @param filehandle of the media item.
+      */
+    IMPORT_C void ShowRightsInfoL(RFile& aFileHandle);
+    
+    /**
       * Get size of thumbnail to be requested for DRM invalid item
       * @param aSize size of image
       * @return suggested thumbnail size (1/4 of original size)
--- a/ui/uiengine/drmutility/src/glxdrmutility.cpp	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/uiengine/drmutility/src/glxdrmutility.cpp	Thu Jul 22 16:33:32 2010 +0100
@@ -34,6 +34,7 @@
 #include <caf/content.h>
 #include <caf/data.h>
 #include <caf/manager.h>
+#include "glxtracer.h"
 
 const TInt KGlxDRMThumbnailHeight = 120;
 const TInt KGlxDRMThumbnailWidth = 90;
@@ -63,9 +64,10 @@
 //============================================================================
 EXPORT_C CGlxDRMUtility* CGlxDRMUtility::InstanceL()
     {
+    TRACER("CGlxDRMUtility::InstanceL()");
     CGlxDrmTls* tls = reinterpret_cast<CGlxDrmTls*>(Dll::Tls());
     
-    if(tls==NULL)
+    if ( !tls )
         {
         CGlxDRMUtility* drmutil = new(ELeave)CGlxDRMUtility();
         CleanupStack::PushL(drmutil);
@@ -88,9 +90,10 @@
 //============================================================================ 
 EXPORT_C void CGlxDRMUtility::Close()
     {
+    TRACER("CGlxDRMUtility::Close()");
     CGlxDrmTls* tls = reinterpret_cast<CGlxDrmTls*>(Dll::Tls());
    
-    if (tls != NULL) 
+    if ( tls ) 
         {
         tls->iRefCount--;
         
@@ -110,23 +113,34 @@
 //============================================================================ 
 CGlxDRMUtility::~CGlxDRMUtility()
     {
+    TRACER("CGlxDRMUtility::~CGlxDRMUtility()");
     delete iCManager;
     delete iDrmHelper;
     delete iLastConsumedItemUri;
     }
     
 //============================================================================
-// CheckOpenRightsL
-//============================================================================ 
-EXPORT_C TBool CGlxDRMUtility::CheckOpenRightsL( const TDesC& aUri, 
+// ItemRightsValidityCheckL
+// for checking DRM rights validity for item.
+// is called before right is consumed and for all items (focused or unfocused).
+//============================================================================
+EXPORT_C TBool CGlxDRMUtility::ItemRightsValidityCheckL( const TDesC& aUri,
                                                 TBool aCheckViewRights )
     {
-    // When checking current rights for a URI, clear stored URI
-    TPtr ptr = iLastConsumedItemUri->Des();
-    ptr.Zero();
-    iLastConsumedItemUri = iLastConsumedItemUri->ReAllocL( 0 );
+    TRACER("CGlxDRMUtility::ItemRightsValidityCheckL()");
+    // When checking current rights for a URI
 
-    TBool rightsValid = EFalse;
+    //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;
+			}
+		}
+
+	//Else for uri of non-focused uri, just check validity rights
+    TInt rightsValid = 0;
     TVirtualPathPtr path( aUri, KDefaultContentObject() );
 
     ContentAccess::TAttribute attr = 
@@ -139,11 +153,31 @@
     }
 
 //============================================================================
-// CheckDisplayRightsL
-//============================================================================ 
-EXPORT_C TBool CGlxDRMUtility::CheckDisplayRightsL( const TDesC& aUri, 
+// ItemRightsValidityCheckL
+// for checking DRM rights validity for item.
+// is called before right is consumed and for all items (focused or unfocused).
+//============================================================================
+EXPORT_C TBool CGlxDRMUtility::ItemRightsValidityCheckL( RFile& aFileHandle,
+                                                TBool /*aCheckViewRights*/ )
+    {
+    TRACER("CGlxDRMUtility::ItemRightsValidityCheckL()");
+    TBool rightsValid = EFalse;
+
+    ContentAccess::CContent* content = ContentAccess::CContent::NewLC( aFileHandle );
+    content->GetAttribute( ContentAccess::ECanView, rightsValid );
+    CleanupStack::PopAndDestroy( content );
+    return rightsValid;
+    }
+
+//============================================================================
+// DisplayItemRightsCheckL
+// is called after right is consumed and for only focused/displayed item.
+//============================================================================
+EXPORT_C TBool CGlxDRMUtility::DisplayItemRightsCheckL( const TDesC& aUri,
                                                     TBool aCheckViewRights )
     {
+    TRACER("CGlxDRMUtility::DisplayItemRightsCheckL()");
+
     // Allow to display if rights for a URI was just consumed (i.e. same as stored URI)
     if ( iLastConsumedItemUri->Length() > 0 )
         {
@@ -153,32 +187,48 @@
             }
         }
 
-    // Otherwise, check current rights for the URI
-    return CheckOpenRightsL( aUri, aCheckViewRights );
+    //Clear the stored uri since focus has changed
+    ClearLastConsumedItemUriL();
+
+    // Otherwise, check current rights for the URI of newly focused item
+    return ItemRightsValidityCheckL( aUri, aCheckViewRights );
     }
 
 //============================================================================
+// DisplayItemRightsCheckL
+// is called after right is consumed and for only focused/displayed item.
+//============================================================================
+EXPORT_C TBool CGlxDRMUtility::DisplayItemRightsCheckL( RFile& aFileHandle,
+                                                    TBool aCheckViewRights )
+    {
+    TRACER("CGlxDRMUtility::DisplayItemRightsCheckL()");
+    // Otherwise, check current rights for the URI of newly focused item
+    return ItemRightsValidityCheckL( aFileHandle, aCheckViewRights );
+    }
+
+
+//============================================================================
 // ConsumeRightsL
 //============================================================================    
 EXPORT_C TBool CGlxDRMUtility::ConsumeRightsL(const TDesC& aUri)
     {
+    TRACER("CGlxDRMUtility::ConsumeRightsL()");
     TVirtualPathPtr path( aUri, KDefaultContentObject() );
 
     // Create a CData object to read the content
     // 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() );
+    //When consuming rights for a URI, clear stored URI
+    ClearLastConsumedItemUriL();
 
     // 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
+        //Update stored URI
+        iLastConsumedItemUri = iLastConsumedItemUri->ReAllocL( aUri.Length() );
         TPtr newPtr = iLastConsumedItemUri->Des();
         newPtr.Copy( aUri );
         }
@@ -188,16 +238,41 @@
     return (err == KErrNone);
     }
 
+
+//============================================================================
+// ConsumeRightsL
+//============================================================================    
+EXPORT_C TBool CGlxDRMUtility::ConsumeRightsL(RFile& aFileHandle)
+    {
+    TRACER("CGlxDRMUtility::ConsumeRightsL(RFile& aFileHandle)");
+    CData* data = CData::NewLC( aFileHandle, KDefaultContentObject(), EPeek );
+    TInt err = data->ExecuteIntent(ContentAccess::EView);
+    CleanupStack::PopAndDestroy( data );
+    return (err == KErrNone);
+    }
+
+//============================================================================
+//Clears Last Consumed Uri
+//============================================================================
+EXPORT_C void CGlxDRMUtility::ClearLastConsumedItemUriL()
+	{
+	//clears the stored uri
+	TPtr ptr = iLastConsumedItemUri->Des();
+	ptr.Zero();
+	iLastConsumedItemUri = iLastConsumedItemUri->ReAllocL( 0 );
+	}
+
 //============================================================================
 // Test whether a media item is OMA DRM 2.0 protected and has an associated
 // info URL.
 //============================================================================
-EXPORT_C TBool CGlxDRMUtility::CanShowInfoOnlineL(TDesC& aUri)
+EXPORT_C TBool CGlxDRMUtility::CanShowInfoOnlineL(const TDesC& aUri)
     {
+    TRACER("CGlxDRMUtility::CanShowInfoOnlineL()");
     TBool canShowInfoOnline = EFalse;
 
     HBufC8* urlBuf = NULL;
-    canShowInfoOnline = iDrmHelper->HasInfoUrlL(aUri, urlBuf);
+    canShowInfoOnline = iDrmHelper->HasInfoUrlL( const_cast<TDesC&>(aUri) , urlBuf);
 
     // discard buf we don't need it
     delete urlBuf;
@@ -208,9 +283,10 @@
 //============================================================================
 // Open the associated info URL for a media item in the browser.
 //============================================================================
-EXPORT_C void CGlxDRMUtility::ShowInfoOnlineL(TDesC& aUri)
+EXPORT_C void CGlxDRMUtility::ShowInfoOnlineL(const TDesC& aUri)
     {
-    iDrmHelper->OpenInfoUrlL(aUri);
+    TRACER("CGlxDRMUtility::ShowInfoOnlineL()");
+    iDrmHelper->OpenInfoUrlL( const_cast<TDesC&>(aUri) );
     }
 
 //============================================================================
@@ -219,6 +295,7 @@
 EXPORT_C TBool CGlxDRMUtility::CanSetAsAutomatedL(const TDesC& aUri, 
                                     TGlxDrmAutomatedType aType)
     {
+    TRACER("CGlxDRMUtility::CanSetAsAutomatedL()");
     TBool canSetAutomated = EFalse;
     switch(aType)
         {
@@ -240,6 +317,7 @@
 EXPORT_C void CGlxDRMUtility::SetAsAutomatedL(const TDesC& aUri, 
                                     TGlxDrmAutomatedType aType)
     {
+    TRACER("CGlxDRMUtility::SetAsAutomatedL()");
      switch(aType)
         {
     case EGlxDrmAutomatedTypeWallpaper:
@@ -266,8 +344,9 @@
 //============================================================================  
 EXPORT_C void CGlxDRMUtility::ShowDRMDetailsPaneL( const TDesC& aUri )
     {
+    TRACER("CGlxDRMUtility::ShowDRMDetailsPaneL()");
     TRAPD( err, iDrmHelper->LaunchDetailsViewEmbeddedL( aUri ) );
-    // if no rights ask user to re-activate?
+    // if no rights ask user to re-activate
     if( err == KErrCANoRights )
         {
         HBufC* buf = aUri.AllocLC();
@@ -278,10 +357,26 @@
     }
 
 //============================================================================
+// ShowDRMDetailsPane
+//============================================================================  
+EXPORT_C void CGlxDRMUtility::ShowDRMDetailsPaneL(RFile& aFileHandle)
+    {
+    TRACER("CGlxDRMUtility::ShowDRMDetailsPaneL()");
+    TRAPD( err, iDrmHelper->LaunchDetailsViewEmbeddedL( aFileHandle ) );
+    // if no rights ask user to re-activate
+    if( err == KErrCANoRights )
+        {
+        //need to check if we need to handle.
+        }
+
+    }
+
+//============================================================================
 // IsForwardLockedL
 //============================================================================  
 EXPORT_C TBool CGlxDRMUtility::IsForwardLockedL(const TDesC& aUri)
     {
+    TRACER("CGlxDRMUtility::IsForwardLockedL()");
     TBool forwardLocked = EFalse;
     TVirtualPathPtr path( aUri, KDefaultContentObject() );
 
@@ -296,14 +391,25 @@
 //============================================================================    
 EXPORT_C void CGlxDRMUtility::ShowRightsInfoL(const TDesC& aUri)    
     {
+    TRACER("CGlxDRMUtility::ShowRightsInfoL()");
     iDrmHelper->CheckRightsAmountL( aUri );
     }
 
 //============================================================================
+// ShowRightsInfoL
+//============================================================================    
+EXPORT_C void CGlxDRMUtility::ShowRightsInfoL(RFile& aFileHandle)    
+    {
+    TRACER("CGlxDRMUtility::ShowRightsInfoL(aFileHandle)");
+    iDrmHelper->CheckRightsAmountL( aFileHandle );
+    }
+
+//============================================================================
 // Return size for DRM thumbnail request.
 //============================================================================
 EXPORT_C TSize CGlxDRMUtility::DRMThumbnailSize(TSize& aSize)
     {
+    TRACER("CGlxDRMUtility::DRMThumbnailSize()");
     TSize thumbnailSize(KGlxDRMThumbnailWidth, KGlxDRMThumbnailHeight);
     
     if((aSize.iWidth*aSize.iHeight)/4 < 
@@ -321,7 +427,7 @@
  */
 CGlxDRMUtility::CGlxDRMUtility()
     {
-    
+    TRACER("CGlxDRMUtility::CGlxDRMUtility()");
     }
 
 /**
@@ -329,6 +435,7 @@
  */
 void CGlxDRMUtility::ConstructL()
     {
+    TRACER("CGlxDRMUtility::ConstructL()");
     iCManager = ContentAccess::CManager::NewL();
     iDrmHelper = CDRMHelper::NewL();
     iLastConsumedItemUri = HBufC::NewL(0);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ui/uiengine/drmutilitywrapper/drmutilitywrapper.pro	Thu Jul 22 16:33:32 2010 +0100
@@ -0,0 +1,55 @@
+#/* 
+#* Copyright (c) 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: Qt wrapper for DRM utility
+#*
+#*/ 
+TEMPLATE = lib
+TARGET = glxdrmutilitywrapper
+DEPENDPATH += . inc src
+INCLUDEPATH += . ../../inc \
+			../../../inc \
+			../drmutility/inc \
+			./inc
+			
+CONFIG += hb
+LIBS +=  -lglxdrmutility.dll \
+		-lglxlogging.dll \
+
+DEFINES += BUILD_DRMUTILITYWRAPPER
+
+symbian: { 
+INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
+TARGET.UID3 = 0x2000A7BC
+TARGET.CAPABILITY = ALL -TCB 
+TARGET.EPOCALLOWDLLDATA = 1
+MMP_RULES += SMPSAFE 
+
+}	
+# Input
+HEADERS += inc/glxdrmutilitywrapper.h \
+			inc/glxdrmutilitywrapper_p.h
+			
+SOURCES += src/glxdrmutilitywrapper.cpp \
+			src/glxdrmutilitywrapper_p.cpp
+
+DEFINES += QT_NO_DEBUG_OUTPUT QT_NO_WARNING_OUTPUT
+
+defBlock = \      
+"$${LITERAL_HASH}if defined(EABI)" \
+"DEFFILE  ../eabi/glxdrmutilitywrapper.def" \
+	 "$${LITERAL_HASH}else" \
+	 "DEFFILE  ../bwins/glxdrmutilitywrapper.def" \
+             "$${LITERAL_HASH}endif"
+	
+MMP_RULES += defBlock
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ui/uiengine/drmutilitywrapper/inc/glxdrmutilitywrapper.h	Thu Jul 22 16:33:32 2010 +0100
@@ -0,0 +1,53 @@
+/*
+* 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:   
+*
+*/
+
+#ifndef GLXDRMUTILITYWRAPPER_H
+#define GLXDRMUTILITYWRAPPER_H
+
+#include<QObject>
+// forward decleration
+class GlxDRMUtilityWrapperPrivate;
+
+#ifdef BUILD_DRMUTILITYWRAPPER
+#define GLX_DRMUTILITYWRAPPER_EXPORT Q_DECL_EXPORT
+#else
+#define GLX_DRMUTILITYWRAPPER_EXPORT Q_DECL_IMPORT
+#endif
+
+class GLX_DRMUTILITYWRAPPER_EXPORT GlxDRMUtilityWrapper
+{
+public:
+    /*
+     * Constructor
+     */
+    GlxDRMUtilityWrapper();
+    
+    /*
+     * Destructor
+     */
+    ~GlxDRMUtilityWrapper();
+    
+    bool ItemRightsValidityCheck(QString aUri, bool aCheckViewRights);
+    bool ConsumeRights(QString aUri);
+    void ShowRightsInfo(QString aUri);
+
+private:
+    GlxDRMUtilityWrapperPrivate* mDRMUtilityWrapperPrivate;
+};
+    
+#endif //GLXDRMUTILITYWRAPPER_H 
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ui/uiengine/drmutilitywrapper/inc/glxdrmutilitywrapper_p.h	Thu Jul 22 16:33:32 2010 +0100
@@ -0,0 +1,178 @@
+/*
+* 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:    
+*
+*/
+
+#ifndef GLXDRMUTILITYWRAPPERPRIVATE_H
+#define GLXDRMUTILITYWRAPPERPRIVATE_H
+
+
+// forward decleration
+class GlxDRMUtilityWrapper;
+class CGlxDRMUtility;
+class QString;
+
+class GlxDRMUtilityWrapperPrivate
+{
+public:
+    /*
+     * Constructor
+     */
+    GlxDRMUtilityWrapperPrivate(GlxDRMUtilityWrapper* DRMUtilityWrapper);
+
+    /*
+     * Destructor
+     */
+    ~GlxDRMUtilityWrapperPrivate();
+
+    /**
+     * Check whether DRM rights are valid for specified item
+     * is called before right is consumed and for all items (focused or unfocused).
+     * 
+     * @param aUri URI of the media item.
+     * @param aCheckViewRights, check view rights if true, play if false
+     * @return ETrue if valid rights exist for the media item.
+     */
+    bool ItemRightsValidityCheck(QString aUri, bool aCheckViewRights);
+    
+//    /**
+//     * Check whether DRM rights are valid for specified item
+//     * is called before right is consumed and for all items (focused or unfocused).
+//     * 
+//     * @param filehandle of the media item.
+//     * @param aCheckViewRights, check view rights if true, play if false
+//     * @return ETrue if valid rights exist for the media item.
+//     */
+//    bool ItemRightsValidityCheckL(RFile& aFileHandle, TBool aCheckViewRights);
+//
+//    /**
+//     * Check whether DRM rights are valid for specified item
+//     * If the rights were just consumed, then allow to display
+//     * Otherwise, obtain current rights
+//     * is called after right is consumed and for only focused/displayed item.
+//     * 
+//     * @param aUri URI of the media item.
+//     * @param aCheckViewRights, check view rights if true, play if false
+//     * @return ETrue if valid rights exist for the media item.
+//     */
+//    bool DisplayItemRightsCheckL(const TDesC& aUri, TBool aCheckViewRights);
+//    
+//    /**
+//     * Check whether DRM rights are valid for specified item
+//     * If the rights were just consumed, then allow to display
+//     * Otherwise, obtain current rights
+//     * is called after right is consumed and for only focused/displayed item.
+//     * 
+//     * @param filehandle of the media item.
+//     * @param aCheckViewRights, check view rights if true, play if false
+//     * @return ETrue if valid rights exist for the media item.
+//     */
+//    bool DisplayItemRightsCheckL(RFile& aFileHandle, TBool aCheckViewRights);
+//    
+    /**
+      * Consume rights for specified item
+      * Caches item so that a client has right to display the item
+      *
+      * @param aUri URI for item
+      * @return ETrue to no error in rights consumption
+      */
+    bool ConsumeRights(QString aUri);
+//    
+//    /**
+//      * Consume rights for specified item
+//      * Caches item so that a client has right to display the item
+//      *
+//      * @param  Filehandle for item
+//      * @return ETrue to no error in rights consumption
+//      */
+//    bool ConsumeRightsL(RFile& aFileHandle);
+//
+//    /**
+//     * Clears Last Consumed Uri
+//     */
+//    void ClearLastConsumedItemUriL();
+//
+//    /**
+//     * Test whether a media item is OMA DRM 2.0 protected and has an associated
+//     * info URL.
+//     * @param aUri URI of the media item.
+//     * @return ETrue if it does.
+//     */
+//    bool CanShowInfoOnlineL(const TDesC& aUri);
+//
+//    /**
+//     * Open the associated info URL for a media item in the browser.
+//     * @param aUri URI of the media item.
+//     */
+//    void ShowInfoOnlineL(const TDesC& aUri);
+//
+//    /**
+//     * Test whether a media item can be set as automated content.     *
+//     * @param aUri URI of the media item.
+//     * @param aType Automated content type, eg. wallpaper.
+//     * @return ETrue if it can.
+//     */
+//    bool CanSetAsAutomatedL(const TDesC& aUri, TGlxDrmAutomatedType aType);
+//
+//    /**
+//     * Set a media item as automated content.
+//     * @param aUri URI of the media item.
+//     * @param aType Automated content type, eg. wallpaper.
+//     */
+//    void SetAsAutomatedL(const TDesC& aUri, TGlxDrmAutomatedType aType);
+//    
+//    /**
+//     * Show DRM details for specified item.
+//     * @param aUri URI of the media item.
+//     */
+//    void ShowDRMDetailsPaneL(const TDesC& aUri);
+//    
+//    /**
+//     * Show DRM details for specified item.
+//     * @param Filehandle of the media item.
+//     */
+//    void ShowDRMDetailsPaneL(RFile& aFileHandle);
+//    
+//    /**
+//      * Ask DRM manager if file is forward locked
+//      */
+//    bool IsForwardLockedL(const TDesC& aUri);
+//    
+    /**
+      * Show rights info
+      * @param aUri URI of the media item.
+      */
+    void ShowRightsInfo(QString aUri);
+    
+//    /**
+//      * Show rights info
+//      * @param filehandle of the media item.
+//      */
+//    void ShowRightsInfoL(RFile& aFileHandle);
+//    
+//    /**
+//      * Get size of thumbnail to be requested for DRM invalid item
+//      * @param aSize size of image
+//      * @return suggested thumbnail size (1/4 of original size)
+//      */
+//    TSize DRMThumbnailSize(TSize& aSize);
+    
+private:
+    GlxDRMUtilityWrapper* iDRMUtilityWrapper;
+    CGlxDRMUtility* iDRMUtility;
+};
+    
+#endif //GLXDRMUTILITYWRAPPERPRIVATE_H 
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ui/uiengine/drmutilitywrapper/src/glxdrmutilitywrapper.cpp	Thu Jul 22 16:33:32 2010 +0100
@@ -0,0 +1,44 @@
+/*
+* Copyright (c) 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: 
+*
+*/
+
+#include"glxdrmutilitywrapper_p.h"
+#include"glxdrmutilitywrapper.h"
+
+GlxDRMUtilityWrapper::GlxDRMUtilityWrapper()
+    {
+    mDRMUtilityWrapperPrivate = new GlxDRMUtilityWrapperPrivate(this);
+    }
+GlxDRMUtilityWrapper::~GlxDRMUtilityWrapper()
+    {
+    delete mDRMUtilityWrapperPrivate;
+    }
+bool GlxDRMUtilityWrapper::ItemRightsValidityCheck(QString aUri, bool aCheckViewRights)
+    {
+    bool ret = mDRMUtilityWrapperPrivate->ItemRightsValidityCheck(aUri,aCheckViewRights);
+    return ret;
+    }
+
+bool GlxDRMUtilityWrapper::ConsumeRights(QString aUri)
+    {
+    bool ret = mDRMUtilityWrapperPrivate->ConsumeRights(aUri);
+    return ret;
+    }
+
+void GlxDRMUtilityWrapper::ShowRightsInfo(QString aUri)
+    {
+    mDRMUtilityWrapperPrivate->ShowRightsInfo(aUri);
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ui/uiengine/drmutilitywrapper/src/glxdrmutilitywrapper_p.cpp	Thu Jul 22 16:33:32 2010 +0100
@@ -0,0 +1,197 @@
+/*
+* Copyright (c) 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: 
+*
+*/
+
+#include"glxdrmutilitywrapper_p.h"
+#include"glxdrmutility.h"
+
+#include <QString>
+#include <QDir>
+
+GlxDRMUtilityWrapperPrivate::GlxDRMUtilityWrapperPrivate(GlxDRMUtilityWrapper* DRMUtilityWrapper)
+    {
+    iDRMUtilityWrapper = DRMUtilityWrapper;
+    iDRMUtility = CGlxDRMUtility::InstanceL();
+    }
+/*
+ * Destructor
+ */
+GlxDRMUtilityWrapperPrivate::~GlxDRMUtilityWrapperPrivate()
+    {
+    if(iDRMUtility)
+        {
+        iDRMUtility->Close();
+        }
+    }
+
+/**
+ * Check whether DRM rights are valid for specified item
+ * is called before right is consumed and for all items (focused or unfocused).
+ */
+bool GlxDRMUtilityWrapperPrivate::ItemRightsValidityCheck(QString aUri, bool aCheckViewRights)
+    {
+    QString filepath(QDir::toNativeSeparators(aUri));
+    TPtrC16 str(reinterpret_cast<const TUint16*> (filepath.utf16()));
+    HBufC* uri = str.Alloc();
+    TBool checkViewRight = aCheckViewRights?ETrue:EFalse;
+    bool ret = iDRMUtility->ItemRightsValidityCheckL(*uri,checkViewRight);
+    return ret;
+    }
+
+///**
+// * Check whether DRM rights are valid for specified item
+// * is called before right is consumed and for all items (focused or unfocused).
+// */
+//bool GlxDRMUtilityWrapperPrivate::ItemRightsValidityCheckL(RFile& aFileHandle, TBool aCheckViewRights)
+//    {
+//    
+//    }
+//
+///**
+// * Check whether DRM rights are valid for specified item
+// * If the rights were just consumed, then allow to display
+// * Otherwise, obtain current rights
+// * is called after right is consumed and for only focused/displayed item.
+// */
+//bool GlxDRMUtilityWrapperPrivate::DisplayItemRightsCheckL(const TDesC& aUri, TBool aCheckViewRights)
+//    {
+//    
+//    }
+//
+///**
+// * Check whether DRM rights are valid for specified item
+// * If the rights were just consumed, then allow to display
+// * Otherwise, obtain current rights
+// * is called after right is consumed and for only focused/displayed item.
+// */
+//bool GlxDRMUtilityWrapperPrivate::DisplayItemRightsCheckL(RFile& aFileHandle, TBool aCheckViewRights)
+//    {
+//    
+//    }
+//
+/**
+  * Consume rights for specified item
+  * Caches item so that a client has right to display the item
+  */
+bool GlxDRMUtilityWrapperPrivate::ConsumeRights(QString aUri)
+    {
+    QString filepath(QDir::toNativeSeparators(aUri));
+    TPtrC16 str(reinterpret_cast<const TUint16*> (filepath.utf16()));
+    HBufC* uri = str.Alloc();
+    bool ret = iDRMUtility->ConsumeRightsL(*uri);
+    return ret;
+    }
+//
+///**
+//  * Consume rights for specified item
+//  * Caches item so that a client has right to display the item
+//  */
+//bool GlxDRMUtilityWrapperPrivate::ConsumeRightsL(RFile& aFileHandle)
+//    {
+//    
+//    }
+//
+///**
+// * Clears Last Consumed Uri
+// */
+//void GlxDRMUtilityWrapperPrivate::ClearLastConsumedItemUriL()
+//    {
+//    
+//    }
+//
+///**
+// * Test whether a media item is OMA DRM 2.0 protected and has an associated
+// * info URL.
+// */
+//bool GlxDRMUtilityWrapperPrivate::CanShowInfoOnlineL(const TDesC& aUri)
+//    {
+//    
+//    }
+//
+///**
+// * Open the associated info URL for a media item in the browser.
+// */
+//void GlxDRMUtilityWrapperPrivate::ShowInfoOnlineL(const TDesC& aUri)
+//    {
+//    
+//    }
+//
+///**
+// * Test whether a media item can be set as automated content.     *
+// */
+//bool GlxDRMUtilityWrapperPrivate::CanSetAsAutomatedL(const TDesC& aUri, TGlxDrmAutomatedType aType)
+//    {
+//    
+//    }
+//
+///**
+// * Set a media item as automated content.
+// */
+//void GlxDRMUtilityWrapperPrivate::SetAsAutomatedL(const TDesC& aUri, TGlxDrmAutomatedType aType)
+//    {
+//    
+//    }
+//
+///**
+// * Show DRM details for specified item.
+// */
+//void GlxDRMUtilityWrapperPrivate::ShowDRMDetailsPaneL(const TDesC& aUri)
+//    {
+//    
+//    }
+//
+///**
+// * Show DRM details for specified item.
+// */
+//void GlxDRMUtilityWrapperPrivate::ShowDRMDetailsPaneL(RFile& aFileHandle)
+//    {
+//    
+//    }
+//
+///**
+//  * Ask DRM manager if file is forward locked
+//  */
+//bool GlxDRMUtilityWrapperPrivate::IsForwardLockedL(const TDesC& aUri)
+//    {
+//    
+//    }
+//
+/**
+  * Show rights info
+  */
+void GlxDRMUtilityWrapperPrivate::ShowRightsInfo(QString aUri)
+    {
+    QString filepath(QDir::toNativeSeparators(aUri));
+    TPtrC16 str(reinterpret_cast<const TUint16*> (filepath.utf16()));
+    HBufC* uri = str.Alloc();
+    iDRMUtility->ShowRightsInfoL(*uri);
+    }
+
+///**
+//  * Show rights info
+//  */
+//void GlxDRMUtilityWrapperPrivate::ShowRightsInfoL(RFile& aFileHandle)
+//    {
+//    
+//    }
+//
+///**
+//  * Get size of thumbnail to be requested for DRM invalid item
+//  */
+//TSize GlxDRMUtilityWrapperPrivate::DRMThumbnailSize(TSize& aSize)
+//    {
+//    
+//    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ui/uiengine/eabi/glxdrmutilitywrapperu.def	Thu Jul 22 16:33:32 2010 +0100
@@ -0,0 +1,9 @@
+EXPORTS
+	_ZN20GlxDRMUtilityWrapper23ItemRightsValidityCheckE7QStringb @ 1 NONAME
+	_ZN20GlxDRMUtilityWrapperC1Ev @ 2 NONAME
+	_ZN20GlxDRMUtilityWrapperC2Ev @ 3 NONAME
+	_ZN20GlxDRMUtilityWrapperD1Ev @ 4 NONAME
+	_ZN20GlxDRMUtilityWrapperD2Ev @ 5 NONAME
+	_ZN20GlxDRMUtilityWrapper13ConsumeRightsE7QString @ 6 NONAME
+	_ZN20GlxDRMUtilityWrapper14ShowRightsInfoE7QString @ 7 NONAME
+
--- a/ui/uiengine/eabi/glxmedialistwrapperu.def	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/uiengine/eabi/glxmedialistwrapperu.def	Thu Jul 22 16:33:32 2010 +0100
@@ -1,42 +1,57 @@
 EXPORTS
 	_ZN12GlxMLWrapper10itemsAddedEii @ 1 NONAME
 	_ZN12GlxMLWrapper10updateItemEi16GlxTBContextType @ 2 NONAME
-	_ZN12GlxMLWrapper11insertItemsEii @ 3 NONAME
-	_ZN12GlxMLWrapper11qt_metacallEN11QMetaObject4CallEiPPv @ 4 NONAME
-	_ZN12GlxMLWrapper11qt_metacastEPKc @ 5 NONAME
-	_ZN12GlxMLWrapper11removeItemsEii @ 6 NONAME
-	_ZN12GlxMLWrapper12getItemCountEv @ 7 NONAME
-	_ZN12GlxMLWrapper12isSystemItemEi @ 8 NONAME
-	_ZN12GlxMLWrapper12itemsRemovedEii @ 9 NONAME
-	_ZN12GlxMLWrapper13itemCorruptedEi @ 10 NONAME
-	_ZN12GlxMLWrapper13setFocusIndexEi @ 11 NONAME
-	_ZN12GlxMLWrapper14RetrieveBitmapEi @ 12 NONAME
-	_ZN12GlxMLWrapper14setContextModeE14GlxContextMode @ 13 NONAME
-	_ZN12GlxMLWrapper15retrieveItemUriEi @ 14 NONAME
-	_ZN12GlxMLWrapper16retrieveItemDateEi @ 15 NONAME
-	_ZN12GlxMLWrapper16retrieveItemIconEi16GlxTBContextType @ 16 NONAME
-	_ZN12GlxMLWrapper16setSelectedIndexEi @ 17 NONAME
-	_ZN12GlxMLWrapper16staticMetaObjectE @ 18 NONAME DATA 16
-	_ZN12GlxMLWrapper17handleIconCorruptEi @ 19 NONAME
-	_ZN12GlxMLWrapper17retrieveItemImageEi16GlxTBContextType @ 20 NONAME
-	_ZN12GlxMLWrapper17retrieveListTitleEi @ 21 NONAME
-	_ZN12GlxMLWrapper18handleGeneralErrorEi @ 22 NONAME
-	_ZN12GlxMLWrapper18handleReceivedIconEi16GlxTBContextType @ 23 NONAME
-	_ZN12GlxMLWrapper19getStaticMetaObjectEv @ 24 NONAME
-	_ZN12GlxMLWrapper20retrieveListSubTitleEi @ 25 NONAME
-	_ZN12GlxMLWrapper21getVisibleWindowIndexEv @ 26 NONAME
-	_ZN12GlxMLWrapper21retrieveItemDimensionEi @ 27 NONAME
-	_ZN12GlxMLWrapper21retrieveListItemCountEi @ 28 NONAME
-	_ZN12GlxMLWrapper21setVisibleWindowIndexEi @ 29 NONAME
-	_ZN12GlxMLWrapper22retrieveItemFrameCountEi @ 30 NONAME
-	_ZN12GlxMLWrapper23handleListItemAvailableEi @ 31 NONAME
-	_ZN12GlxMLWrapperC1Eii18TGlxFilterItemType7QString @ 32 NONAME
-	_ZN12GlxMLWrapperC2Eii18TGlxFilterItemType7QString @ 33 NONAME
-	_ZN12GlxMLWrapperD0Ev @ 34 NONAME
-	_ZN12GlxMLWrapperD1Ev @ 35 NONAME
-	_ZN12GlxMLWrapperD2Ev @ 36 NONAME
-	_ZNK12GlxMLWrapper10metaObjectEv @ 37 NONAME
-	_ZNK12GlxMLWrapper13getFocusIndexEv @ 38 NONAME
-	_ZTI12GlxMLWrapper @ 39 NONAME
-	_ZTV12GlxMLWrapper @ 40 NONAME
+	_ZN12GlxMLWrapper11IsPopulatedEv @ 3 NONAME
+	_ZN12GlxMLWrapper11insertItemsEii @ 4 NONAME
+	_ZN12GlxMLWrapper11qt_metacallEN11QMetaObject4CallEiPPv @ 5 NONAME
+	_ZN12GlxMLWrapper11qt_metacastEPKc @ 6 NONAME
+	_ZN12GlxMLWrapper11removeItemsEii @ 7 NONAME
+	_ZN12GlxMLWrapper12getItemCountEv @ 8 NONAME
+	_ZN12GlxMLWrapper12isSystemItemEi @ 9 NONAME
+	_ZN12GlxMLWrapper12itemsRemovedEii @ 10 NONAME
+	_ZN12GlxMLWrapper13itemCorruptedEi @ 11 NONAME
+	_ZN12GlxMLWrapper13setFocusIndexEi @ 12 NONAME
+	_ZN12GlxMLWrapper14RetrieveBitmapEi @ 13 NONAME
+	_ZN12GlxMLWrapper14setContextModeE14GlxContextMode @ 14 NONAME
+	_ZN12GlxMLWrapper15handlepopulatedEv @ 15 NONAME
+	_ZN12GlxMLWrapper15retrieveItemUriEi @ 16 NONAME
+	_ZN12GlxMLWrapper16retrieveItemDateEi @ 17 NONAME
+	_ZN12GlxMLWrapper16retrieveItemIconEi16GlxTBContextType @ 18 NONAME
+	_ZN12GlxMLWrapper16setSelectedIndexEi @ 19 NONAME
+	_ZN12GlxMLWrapper16staticMetaObjectE @ 20 NONAME DATA 16
+	_ZN12GlxMLWrapper16updateAlbumTitleE7QString @ 21 NONAME
+	_ZN12GlxMLWrapper17handleIconCorruptEi @ 22 NONAME
+	_ZN12GlxMLWrapper17retrieveItemImageEi16GlxTBContextType @ 23 NONAME
+	_ZN12GlxMLWrapper17retrieveListTitleEi @ 24 NONAME
+	_ZN12GlxMLWrapper17retrieveViewTitleEv @ 25 NONAME
+	_ZN12GlxMLWrapper18handleGeneralErrorEi @ 26 NONAME
+	_ZN12GlxMLWrapper18handleReceivedIconEi16GlxTBContextType @ 27 NONAME
+	_ZN12GlxMLWrapper19getStaticMetaObjectEv @ 28 NONAME
+	_ZN12GlxMLWrapper20handleTitleAvailableE7QString @ 29 NONAME
+	_ZN12GlxMLWrapper20retrieveListSubTitleEi @ 30 NONAME
+	_ZN12GlxMLWrapper21getVisibleWindowIndexEv @ 31 NONAME
+	_ZN12GlxMLWrapper21retrieveItemDimensionEi @ 32 NONAME
+	_ZN12GlxMLWrapper21retrieveListItemCountEi @ 33 NONAME
+	_ZN12GlxMLWrapper21setVisibleWindowIndexEi @ 34 NONAME
+	_ZN12GlxMLWrapper22retrieveItemFrameCountEi @ 35 NONAME
+	_ZN12GlxMLWrapper23handleListItemAvailableEi @ 36 NONAME
+	_ZN12GlxMLWrapper9populatedEv @ 37 NONAME
+	_ZN12GlxMLWrapperC1Eii18TGlxFilterItemType7QString @ 38 NONAME
+	_ZN12GlxMLWrapperC2Eii18TGlxFilterItemType7QString @ 39 NONAME
+	_ZN12GlxMLWrapperD0Ev @ 40 NONAME
+	_ZN12GlxMLWrapperD1Ev @ 41 NONAME
+	_ZN12GlxMLWrapperD2Ev @ 42 NONAME
+	_ZNK12GlxMLWrapper10metaObjectEv @ 43 NONAME
+	_ZNK12GlxMLWrapper13getFocusIndexEv @ 44 NONAME
+	_ZTI12GlxMLWrapper @ 45 NONAME
+	_ZTV12GlxMLWrapper @ 46 NONAME
+	_ZN12GlxMLWrapper16retrieveItemSizeEi @ 47 NONAME
+	_ZN12GlxMLWrapper16retrieveItemTimeEi @ 48 NONAME
+	_ZN12GlxMLWrapper16retrieveListDescEi @ 49 NONAME
+	_ZN12GlxMLWrapper17removeContextModeE14GlxContextMode @ 50 NONAME
+	_ZN12GlxMLWrapper13updateDetailsEv @ 51 NONAME
+	_ZN12GlxMLWrapper26handleDetailsItemAvailableEi @ 52 NONAME
+	_ZN12GlxMLWrapper10IsDrmValidEi @ 53 NONAME
+	_ZN12GlxMLWrapper11setDrmValidEib @ 54 NONAME
+	_ZN12GlxMLWrapper14IsDrmProtectedEi @ 55 NONAME
 
--- a/ui/uiengine/medialists/group/glxmedialists.mmp	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/uiengine/medialists/group/glxmedialists.mmp	Thu Jul 22 16:33:32 2010 +0100
@@ -103,5 +103,6 @@
 LIBRARY                 bitgdi.lib
 #endif
 
+SMPSAFE
 // End of File
 
--- a/ui/uiengine/medialists/src/glxmedia.cpp	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/uiengine/medialists/src/glxmedia.cpp	Thu Jul 22 16:33:32 2010 +0100
@@ -273,7 +273,7 @@
     {
     TRACER("TGlxMedia::IsDrmProtected");
     
-    TBool isDrmProtected = ETrue;
+    TBool isDrmProtected = EFalse;
     if ( iItem )
         {
         // ignore return value. Failure leaves isDrmProtected unchanged as ETrue
--- a/ui/uiengine/medialists/src/glxmedialist.cpp	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/uiengine/medialists/src/glxmedialist.cpp	Thu Jul 22 16:33:32 2010 +0100
@@ -1494,8 +1494,8 @@
     if (!iIsPopulated)
         {
         TListPopulatedNotificationStrategy strategy( *this );
+        iIsPopulated = ETrue; // Do this only once.
         NotifyObservers( strategy );
-        iIsPopulated = ETrue; // Do this only once.
         }
     }
 
--- a/ui/uiengine/medialists/src/glxthumbnailcontext.cpp	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/uiengine/medialists/src/glxthumbnailcontext.cpp	Thu Jul 22 16:33:32 2010 +0100
@@ -590,7 +590,7 @@
         const TDesC& uri = item.Uri();
         if ( uri.Length() && cat != EMPXNoCategory )
             {
-            valid = iDrmUtility->CheckOpenRightsL( uri, ( cat == EMPXImage ) );
+            valid = iDrmUtility->ItemRightsValidityCheckL( uri, ( cat == EMPXImage ) );
             CGlxMedia* properties = const_cast<CGlxMedia*>(item.Properties());
             if( valid )
                 {
--- a/ui/uiengine/medialists/test/group/t_cglxcache.mmp	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/uiengine/medialists/test/group/t_cglxcache.mmp	Thu Jul 22 16:33:32 2010 +0100
@@ -78,5 +78,5 @@
 LIBRARY                 glxlogging.lib
 
 EXPORTUNFROZEN
-
+SMPSAFE
 // End of file
--- a/ui/uiengine/medialists/test/group/t_cglxfetcherrorarray.mmp	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/uiengine/medialists/test/group/t_cglxfetcherrorarray.mmp	Thu Jul 22 16:33:32 2010 +0100
@@ -51,5 +51,5 @@
 LIBRARY                 mpxcommon.lib
 
 EXPORTUNFROZEN
-
+SMPSAFE
 // End of file
--- a/ui/uiengine/medialists/test/group/t_cglxgarbagecollector.mmp	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/uiengine/medialists/test/group/t_cglxgarbagecollector.mmp	Thu Jul 22 16:33:32 2010 +0100
@@ -78,5 +78,5 @@
 LIBRARY                 glxlogging.lib
 
 EXPORTUNFROZEN
-
+SMPSAFE
 // End of file
--- a/ui/uiengine/medialists/test/group/t_cglxmedia.mmp	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/uiengine/medialists/test/group/t_cglxmedia.mmp	Thu Jul 22 16:33:32 2010 +0100
@@ -54,5 +54,5 @@
 LIBRARY                 glxlogging.lib
 
 EXPORTUNFROZEN
-
+SMPSAFE
 // End of file
--- a/ui/uiengine/medialists/test/group/t_glxfromfocusoutwarditerator.mmp	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/uiengine/medialists/test/group/t_glxfromfocusoutwarditerator.mmp	Thu Jul 22 16:33:32 2010 +0100
@@ -44,5 +44,5 @@
 LIBRARY                 lbs.lib // TCoordinate
 
 EXPORTUNFROZEN
-
+SMPSAFE
 // End of file
--- a/ui/uiengine/medialists/test/group/t_glxlistwindow.mmp	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/uiengine/medialists/test/group/t_glxlistwindow.mmp	Thu Jul 22 16:33:32 2010 +0100
@@ -55,4 +55,5 @@
 // Libraries required by the tested code
 
 EXPORTUNFROZEN
+SMPSAFE
 // End of file
--- a/ui/uiengine/medialists/test/group/t_tglxexclusioniterator.mmp	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/uiengine/medialists/test/group/t_tglxexclusioniterator.mmp	Thu Jul 22 16:33:32 2010 +0100
@@ -49,5 +49,5 @@
 //LIBRARY                 glxmedialists.lib
 
 EXPORTUNFROZEN 
-
+SMPSAFE
 // End of file
--- a/ui/uiengine/medialists/test/group/ut_cglxattributecontext.mmp	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/uiengine/medialists/test/group/ut_cglxattributecontext.mmp	Thu Jul 22 16:33:32 2010 +0100
@@ -87,5 +87,5 @@
 LIBRARY                 lbs.lib // TCoordinate
 
 EXPORTUNFROZEN
-
+SMPSAFE
 // End of file
--- a/ui/uiengine/medialists/test/group/ut_cglxitemlist.mmp	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/uiengine/medialists/test/group/ut_cglxitemlist.mmp	Thu Jul 22 16:33:32 2010 +0100
@@ -67,5 +67,5 @@
 LIBRARY                 Lbs.lib
 
 EXPORTUNFROZEN
-
+SMPSAFE
 // End of file
--- a/ui/uiengine/medialists/test/group/ut_cglxmedialist.mmp	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/uiengine/medialists/test/group/ut_cglxmedialist.mmp	Thu Jul 22 16:33:32 2010 +0100
@@ -79,4 +79,5 @@
 LIBRARY                 lbs.lib // TCoordinate
 
 EXPORTUNFROZEN 
+SMPSAFE
 // End of file
--- a/ui/uiengine/medialists/test/group/ut_cglxnavigablelist.mmp	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/uiengine/medialists/test/group/ut_cglxnavigablelist.mmp	Thu Jul 22 16:33:32 2010 +0100
@@ -70,4 +70,5 @@
 LIBRARY                 Lbs.lib
 
 EXPORTUNFROZEN
+SMPSAFE
 // End of file
--- a/ui/uiengine/medialists/test/group/ut_cglxstaticitemlist.mmp	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/uiengine/medialists/test/group/ut_cglxstaticitemlist.mmp	Thu Jul 22 16:33:32 2010 +0100
@@ -68,5 +68,5 @@
 LIBRARY                 mpxcommon.lib
 
 EXPORTUNFROZEN
-
+SMPSAFE
 // End of file
--- a/ui/uiengine/medialists/test/group/ut_glxerrormanager.mmp	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/uiengine/medialists/test/group/ut_glxerrormanager.mmp	Thu Jul 22 16:33:32 2010 +0100
@@ -86,4 +86,5 @@
 LIBRARY                 lbs.lib // TCoordinate
 
 EXPORTUNFROZEN
+SMPSAFE
 // End of file
--- a/ui/uiengine/medialists/test/group/ut_tglxselectioniterator.mmp	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/uiengine/medialists/test/group/ut_tglxselectioniterator.mmp	Thu Jul 22 16:33:32 2010 +0100
@@ -44,5 +44,6 @@
 LIBRARY        					mpxcommon.lib
 
 EXPORTUNFROZEN
+SMPSAFE
 
 // End of file
--- a/ui/uiengine/medialists/test/ut_cglxattributecontext/ut_cglxattributecontext.cpp	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/uiengine/medialists/test/ut_cglxattributecontext/ut_cglxattributecontext.cpp	Thu Jul 22 16:33:32 2010 +0100
@@ -45,7 +45,7 @@
     delete this;
     }
     
-TBool CGlxDRMUtility::CheckOpenRightsL(const TDesC&, TBool)
+TBool CGlxDRMUtility::ItemRightsValidityCheckL(const TDesC&, TBool)
     {
     return ETrue;
     }
--- a/ui/uiengine/medialists/test/ut_cglxmedialist/ut_cglxmedialist.cpp	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/uiengine/medialists/test/ut_cglxmedialist/ut_cglxmedialist.cpp	Thu Jul 22 16:33:32 2010 +0100
@@ -51,7 +51,7 @@
     delete this;
     }
     
-TBool CGlxDRMUtility::CheckOpenRightsL(const TDesC&, TBool)
+TBool CGlxDRMUtility::ItemRightsValidityCheckL(const TDesC&, TBool)
     {
     return ETrue;
     }
--- a/ui/uiengine/medialists/test/ut_glxerrormanager/ut_glxerrormanager.cpp	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/uiengine/medialists/test/ut_glxerrormanager/ut_glxerrormanager.cpp	Thu Jul 22 16:33:32 2010 +0100
@@ -47,7 +47,7 @@
     delete this;
     }
     
-TBool CGlxDRMUtility::CheckOpenRightsL(const TDesC&, TBool)
+TBool CGlxDRMUtility::ItemRightsValidityCheckL(const TDesC&, TBool)
     {
     return ETrue;
     }
--- a/ui/uiengine/medialistwrapper/inc/glxmlgenericobserver.h	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/uiengine/medialistwrapper/inc/glxmlgenericobserver.h	Thu Jul 22 16:33:32 2010 +0100
@@ -61,6 +61,7 @@
         MGlxMediaList* aList );
     void HandleMediaL( TInt aListIndex, MGlxMediaList* aList );
     void HandleItemModifiedL( const RArray<TInt>& aItemIndexes, MGlxMediaList* aList );
+    void HandlePopulatedL(MGlxMediaList* aList);
 
 private:
 
--- a/ui/uiengine/medialistwrapper/inc/glxmlwrapper.h	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/uiengine/medialistwrapper/inc/glxmlwrapper.h	Thu Jul 22 16:33:32 2010 +0100
@@ -61,6 +61,11 @@
      * for setting the attribute context mode will be used mainly for retreiving thumbnail of different sizes.
      */
     void setContextMode(GlxContextMode contextMode);
+    /**
+      * for removing the contect once it is not rquired anymore
+      */
+    void removeContextMode(GlxContextMode contextMode);
+    
      /**
      * for retreiving the data Count.
      */
@@ -76,6 +81,7 @@
     void handleIconCorrupt(int itemIndex);
     void handleGeneralError(int error);
 	void handleListItemAvailable(int itemIndex);
+	void handleDetailsItemAvailable(int itemIndex);
     int getFocusIndex() const;
     void setFocusIndex(int itemIndex);
     
@@ -83,12 +89,33 @@
 
 	QString retrieveListTitle(int index);
 	QString retrieveListSubTitle(int index);
+	/*
+	 * fetches the comments entered for the image
+	 */
+	QString retrieveListDesc(int index);
     int getVisibleWindowIndex();
     void setVisibleWindowIndex(int itemIndex);
 	QString retrieveItemUri(int index);
 	QSize retrieveItemDimension(int index);
+	/*
+	 * fetches the size for the image
+	 */
+	int   retrieveItemSize(int index);
+    /*
+	 * fetches the date for the image
+	 */	
 	QDate retrieveItemDate(int index);
+	/*
+	 * fetches the time for the image
+	 */	
+	QTime retrieveItemTime(int index);
 	int retrieveItemFrameCount(int index);
+	QString retrieveViewTitle();
+	void handlepopulated();	
+	bool IsPopulated();
+	bool IsDrmProtected(int index = -1);	
+	bool IsDrmValid(int index);
+	void setDrmValid(int index,bool valid);			
 	
 	/*
 	 * retriveBitmap helps to retrive the bitmap
@@ -105,12 +132,19 @@
      * @param1 index 
      */
 	bool isSystemItem( int aItemIndex );
+	void handleTitleAvailable(QString aTitle);
 	
 signals:
      void updateItem(int index, GlxTBContextType tbContextType);
 	 void insertItems(int startIndex,int endIndex);
 	 void removeItems(int startIndex,int endIndex);
 	 void itemCorrupted(int itemIndex);
+	 void updateAlbumTitle(QString aTitle);
+	 void populated();
+ 	/*
+	 * emits the signal to update details view
+	 */	
+	 void updateDetails();
 
 private:
 	GlxMLWrapperPrivate* mMLWrapperPrivate;
--- a/ui/uiengine/medialistwrapper/inc/glxmlwrapper_p.h	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/uiengine/medialistwrapper/inc/glxmlwrapper_p.h	Thu Jul 22 16:33:32 2010 +0100
@@ -26,6 +26,9 @@
 #include <qdatetime.h>
 #include "glxmedialistiterator.h"
 #include "glxmlwrapper.h"
+#include <QImage>
+#include "mglxtitlefetcherobserver.h"
+
 //Forward Declarations
 class MGlxMediaList;
 class CGlxMLGenericObserver;
@@ -35,10 +38,11 @@
 class CGlxDefaultAttributeContext;
 class CGlxDefaultThumbnailContext;
 class CGlxDefaultListAttributeContext;
-
+class CGlxTitleFetcher;
+class CGlxDRMUtility;
 //to use first call GlxMLWrapperPrivate::Instance then set the mode by calling GlxMLWrapperPrivate::SetContextMode()
 //CLASS Declaration
-class GlxMLWrapperPrivate : public QObject
+class GlxMLWrapperPrivate : public QObject,public MGlxTitleFetcherObserver
 {
     
 public:
@@ -56,6 +60,12 @@
      * for setting the attribute context mode will be used mainly for retreiving thumbnail of different sizes.
      */
 	 void SetContextMode(GlxContextMode aContextMode);
+	 
+	 /*
+	  * For removing the contect used
+	  */
+	 void RemoveContextMode(GlxContextMode aContextMode);
+	 
 	 /**
      * for retreiving the Media List Count.
      */
@@ -83,6 +93,10 @@
 	 */
 	 void SetVisibleWindowIndex(int aItemIndex);
 
+public:
+	 // From MGlxTitleFetcherObserver
+    IMPORT_C void HandleTitleAvailableL(const TDesC& aTitle);
+
 public: 
     void HandleItemAddedL( TInt aStartIndex, TInt aEndIndex, MGlxMediaList* aList );
     void HandleItemRemovedL( TInt aStartIndex, TInt aEndIndex, MGlxMediaList*/* aList */);
@@ -95,6 +109,7 @@
   //todo remove comment  void HandleCommandCompleteL( CMPXCommand* aCommandResult, TInt aError,MGlxMediaList* aList );
     void HandleMediaL( TInt aListIndex, MGlxMediaList* aList );
     void HandleItemModifiedL( const RArray<TInt>& aItemIndexes, MGlxMediaList* aList );
+    void HandlePopulatedL(MGlxMediaList* aList);
 
 public:
 	/**
@@ -103,15 +118,26 @@
 	HbIcon* RetrieveItemIcon(int index, GlxTBContextType aTBContextType);
 	QImage  RetrieveItemImage(int index, GlxTBContextType aTBContextType);
 	QString RetrieveListTitle(int index);
+	QString RetrieveListDesc(int index);
 	QString RetrieveListSubTitle(int index);
 	QString RetrieveItemUri(int index);
 	QSize   RetrieveItemDimension(int index);
+	int     RetrieveItemSize(int index);
 	QDate   RetrieveItemDate(int index);
+	QTime   RetrieveItemTime(int index);
 	int     RetrieveItemFrameCount(int aItemIndex);
 	CFbsBitmap* RetrieveBitmap(int aItemIndex);
 	int     RetrieveListItemCount( int aItemIndex );
 	bool    isSystemItem( int aItemIndex );
-		
+	/*
+	 *Sets the context for fetcing comments
+	 */
+	void SetDescontextL();
+	QString RetrieveViewTitle();
+	bool IsPopulated();
+	bool IsDrmProtected(int index );
+	bool IsDrmValid(int index);
+	void setDrmValid(int index,bool valid);			
 private:
 
     /**
@@ -142,6 +168,7 @@
 	void RemovePtFsContext();
 	void RemoveListContext();
 	void RemoveFavouriteContext();
+	void RemoveDescContext();
 	//for the attribute filtering
 	TInt CheckTBAttributesPresenceandSanity(TInt aItemIndex,
 		const RArray<TMPXAttribute>& aAttributes, TMPXAttribute aThumbnailAttribute );
@@ -150,6 +177,10 @@
 	void CheckLsFsTBAttribute(TInt aItemIndex, const RArray<TMPXAttribute>& aAttributes);
 	void CheckListAttributes(TInt aItemIndex, const RArray<TMPXAttribute>& aAttributes);
 	/*
+	 * to check the attributes returned for details view is present
+	 */
+	void CheckDetailsAttributes(TInt aItemIndex, const RArray<TMPXAttribute>& aAttributes);
+	/*
 	 * convert the CFbsbitmap to HbIcon
 	 */
 	HbIcon *convertFBSBitmapToHbIcon(CFbsBitmap* aBitmap);
@@ -175,7 +206,6 @@
 	CGlxDefaultThumbnailContext* iLsFsThumbnailContext; 
 	CGlxDefaultThumbnailContext* iFocusFsThumbnailContext;
 	CGlxDefaultThumbnailContext* iFocusGridThumbnailContext;
-	CGlxThumbnailContext* iFilmStripThumbnailContext;
 
 	//List related contexts
 	// Fetch context for retrieving title attribute
@@ -187,6 +217,9 @@
     //to find if the image is in favorites or not
    	CGlxDefaultAttributeContext *iFavouriteContext;	
 	
+	//To fetch the details
+    CGlxDefaultAttributeContext *iDescContext;
+	
     CGlxThumbnailContext* iListThumbnailContext;
     // for thumbnail context
     TGlxFromVisibleIndexOutwardListIterator iThumbnailIterator;
@@ -202,7 +235,11 @@
 	TBool iPtFsContextActivated;
 	TBool iLsListContextActivated; //currently not used as we have not implemented the logic for 3 thumbnails
 	TBool iPtListContextActivated; 
+	TBool iDetailsContextActivated; //this is to fetch the comments attributes
 	TBool iSelectionListContextActivated;
-
+	CGlxTitleFetcher* iTitleFetcher;
+	QImage iCorruptImage;
+	QString iViewTitle;
+	CGlxDRMUtility * iDrmUtility;
 };
 #endif //GLXMLWRAPPER_P_H 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ui/uiengine/medialistwrapper/inc/glxtitlefetcher.h	Thu Jul 22 16:33:32 2010 +0100
@@ -0,0 +1,137 @@
+/*
+* 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:    Title fetcher 
+*
+*/
+
+
+
+
+#ifndef GLXTITLEFETCHER_H
+#define GLXTITLEFETCHER_H
+
+#include <e32base.h>
+#include <coedef.h>
+#include <w32std.h>
+#include <mglxmedialistobserver.h>
+#include "mglxtitlefetcherobserver.h"
+
+
+class CMPXCollectionPath;
+class MGlxMediaList;                   
+class CGlxDefaultAttributeContext;
+
+
+class CGlxTitleFetcher : public CBase, public MGlxMediaListObserver
+    {
+public:
+    /**
+     * Constructs an instance of CGlxTitleFetcher and initiates obtaining
+     * a title 
+     *
+     * @param aObserver Observer of this list 
+     * @param aPath The current path by which to obtain the title 
+     */
+    static CGlxTitleFetcher*  NewL(MGlxTitleFetcherObserver& aObserver,
+                                    CMPXCollectionPath* aPath);
+
+	IMPORT_C virtual ~CGlxTitleFetcher();
+                        
+    // From MGlxMediaListObserver                    
+	virtual void HandleItemAddedL(TInt aStartIndex, TInt aEndIndex,
+		MGlxMediaList* aList);
+
+    /**
+     * Notification that media object is now available for an item 
+     *
+     * @param Index of the item 
+     */
+	virtual void HandleMediaL(TInt /*aListIndex*/, MGlxMediaList* /*aList*/) {};
+
+    /**
+     * Notification that media item was removed from the list
+     *
+     * @param aStartIndex First item that was removed 
+     * @param aEndIndex Last item that was removed
+     */
+	virtual void HandleItemRemovedL(TInt /*aStartIndex*/, TInt /*aEndIndex*/,
+		MGlxMediaList* /*aList*/) {};
+
+    /**
+     * Notification that media item was changed
+     *
+     * @param aItemIndexes Indexes of items that were changed
+     */
+	virtual void HandleItemModifiedL(const RArray<TInt>& /*aItemIndexes*/, 
+		MGlxMediaList* /*aList*/) {};
+
+
+    /**
+     * Notification that an attribute is available
+     *
+     * @param aItemIndex Index of the for which the thumbnail is available
+     * @param aAttributes Array of attributes that have become available
+     * @param aList List that this callback relates to 
+     */
+	virtual void HandleAttributesAvailableL(TInt aItemIndex, 	
+		const RArray<TMPXAttribute>& aAttributes, MGlxMediaList* aList);	
+			
+    /**
+     * Notification that focus has moved
+     *
+     * @param aType the direction of the focus change
+     * @param aNewIndex the new index after the focus change
+     * @param aOldIndex the old index before the focus change
+     * @param aList List that this callback relates to
+     */
+	virtual void HandleFocusChangedL(NGlxListDefs::TFocusChangeType /*aType*/, 
+	    TInt /*aNewIndex*/, TInt /*aOldIndex*/, MGlxMediaList* /*aList*/) {};
+
+	/**
+	 * Notification that an item has been selected/deselected
+	 *
+	 * @param aIndex Index of the item that has been selected/deselected
+	 * @param aSelected Boolean to indicate selection/deselection
+	 * @param aList List that the selection relates to
+	 */
+	virtual void HandleItemSelectedL(TInt /*aIndex*/, TBool /*aSelected*/, 
+	              MGlxMediaList* /*aList*/) {};
+
+	/**
+	 * Notification from the collection.  E.g. Items added/modified/deleted and progress notifications
+	 *
+	 * @param aMessage Message notification from the collection
+	 * @param aList List that the notification relates to
+	 */
+	virtual void HandleMessageL(const CMPXMessage& /*aMessage*/, 
+	                            MGlxMediaList* /*aList*/) {};
+	
+private:
+                        
+    CGlxTitleFetcher(MGlxTitleFetcherObserver& aObserver,
+                     CMPXCollectionPath* aPath);
+    
+    void ConstructL();
+    
+private:
+
+    MGlxTitleFetcherObserver& iObserver;
+    CMPXCollectionPath* iPath;
+    TMPXItemId iPathId;
+    MGlxMediaList*  iBackMediaList; 
+    CGlxDefaultAttributeContext* iContext;                  
+    };
+
+
+#endif // GLXTITLEFETCHER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ui/uiengine/medialistwrapper/inc/mglxtitlefetcherobserver.h	Thu Jul 22 16:33:32 2010 +0100
@@ -0,0 +1,47 @@
+/*
+* 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:    Title fetcher observer 
+*
+*/
+
+
+
+
+#ifndef MGLXTITLEFETCHEROBSERVER_H
+#define MGLXTITLEFETCHEROBSERVER_H
+
+#include <e32base.h>
+//#include <coedef.h>
+//#include <w32std.h>
+
+/**
+ * MGlxTitleFetcherObserver
+ * 
+ * Title fetcher interface
+ */
+class MGlxTitleFetcherObserver
+	{
+public:
+	/**
+	 * Handle the title
+	 * @param aTitle The title
+	 */
+	virtual void HandleTitleAvailableL(const TDesC& aTitle) = 0;
+	
+	};
+	
+
+
+
+#endif // MGLXTITLEFETCHEROBSERVER_H
--- a/ui/uiengine/medialistwrapper/medialistwrapper.pro	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/uiengine/medialistwrapper/medialistwrapper.pro	Thu Jul 22 16:33:32 2010 +0100
@@ -42,12 +42,24 @@
 TARGET.UID3 = 0x20000A0B
 TARGET.CAPABILITY = ALL -TCB 
 TARGET.EPOCALLOWDLLDATA = 1
+MMP_RULES += SMPSAFE 
+
 }	
 # Input
-HEADERS += inc/glxmlgenericobserver.h inc/glxmlwrapper.h inc/glxmlwrapper_p.h inc/glxattributeretriever.h
+HEADERS += inc/glxmlgenericobserver.h inc/glxmlwrapper.h inc/glxmlwrapper_p.h inc/glxattributeretriever.h inc/glxtitlefetcher.h
 SOURCES += src/glxmlgenericobserver.cpp \
            src/glxmlwrapper.cpp \
            src/glxmlwrapper_p.cpp \
-	   src/glxattributeretriever.cpp
+	       src/glxattributeretriever.cpp \
+		   src/glxtitlefetcher.cpp
+
+DEFINES += QT_NO_DEBUG_OUTPUT QT_NO_WARNING_OUTPUT
 
-DEFINES += QT_NO_DEBUG_OUTPUT QT_NO_WARNING_OUTPUT
\ No newline at end of file
+defBlock = \      
+"$${LITERAL_HASH}if defined(EABI)" \
+"DEFFILE  ../eabi/glxmedialistwrapper.def" \
+	 "$${LITERAL_HASH}else" \
+	 "DEFFILE  ../bwins/glxmedialistwrapper.def" \
+             "$${LITERAL_HASH}endif"
+	
+MMP_RULES += defBlock
--- a/ui/uiengine/medialistwrapper/src/glxmlgenericobserver.cpp	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/uiengine/medialistwrapper/src/glxmlgenericobserver.cpp	Thu Jul 22 16:33:32 2010 +0100
@@ -206,3 +206,10 @@
     iMLWrapperPrivate->HandleItemModifiedL(aItemIndexes, aList);
     }
                   
+void CGlxMLGenericObserver::HandlePopulatedL(MGlxMediaList* aList)
+    {
+    TRACER("CGlxMLGenericObserver::HandlePopulatedL()");
+    iMLWrapperPrivate->HandlePopulatedL(aList);
+    }
+     
+
--- a/ui/uiengine/medialistwrapper/src/glxmlwrapper.cpp	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/uiengine/medialistwrapper/src/glxmlwrapper.cpp	Thu Jul 22 16:33:32 2010 +0100
@@ -52,6 +52,17 @@
 }
 
 // ---------------------------------------------------------------------------
+// removeContextMode.
+// ---------------------------------------------------------------------------
+//
+void GlxMLWrapper::removeContextMode(GlxContextMode contextMode)
+{
+    mMLWrapperPrivate->RemoveContextMode(contextMode);
+}
+
+
+
+// ---------------------------------------------------------------------------
 // getItemCount.
 // ---------------------------------------------------------------------------
 //
@@ -92,6 +103,16 @@
 {
 	return (mMLWrapperPrivate->RetrieveListSubTitle(index));
 }
+
+// ---------------------------------------------------------------------------
+// retrieveListDesc.
+// ---------------------------------------------------------------------------
+//
+QString GlxMLWrapper::retrieveListDesc(int index)
+{
+    return (mMLWrapperPrivate->RetrieveListDesc(index));
+}
+
 // ---------------------------------------------------------------------------
 // retrieveItemUri.
 // ---------------------------------------------------------------------------
@@ -109,16 +130,68 @@
 	return (mMLWrapperPrivate->RetrieveItemDimension(index));
 }
 
+// ---------------------------------------------------------------------------
+// retrieveItemSize.
+// ---------------------------------------------------------------------------
+//
+int GlxMLWrapper::retrieveItemSize(int index)
+{
+    return (mMLWrapperPrivate->RetrieveItemSize(index));
+}
+
+// ---------------------------------------------------------------------------
+// retrieveItemDate.
+// ---------------------------------------------------------------------------
+//
 QDate GlxMLWrapper::retrieveItemDate(int index)
 {
 	return (mMLWrapperPrivate->RetrieveItemDate(index));
 }
 
+// ---------------------------------------------------------------------------
+// retrieveItemTime.
+// ---------------------------------------------------------------------------
+//
+QTime GlxMLWrapper::retrieveItemTime(int index)
+{
+    return (mMLWrapperPrivate->RetrieveItemTime(index));
+}
+
+
 int GlxMLWrapper::retrieveItemFrameCount(int index)
 {
     return (mMLWrapperPrivate->RetrieveItemFrameCount(index));
 }
 
+QString GlxMLWrapper::retrieveViewTitle()
+{
+    return (mMLWrapperPrivate->RetrieveViewTitle());
+}
+
+void GlxMLWrapper::handlepopulated()
+{
+    emit populated();
+}
+
+bool GlxMLWrapper::IsPopulated()
+{
+    return mMLWrapperPrivate->IsPopulated();
+}
+
+bool GlxMLWrapper::IsDrmProtected(int index)
+    {
+    return mMLWrapperPrivate->IsDrmProtected(index);
+    }
+bool GlxMLWrapper::IsDrmValid(int index)
+	{
+	return mMLWrapperPrivate->IsDrmValid(index);
+	}
+
+void GlxMLWrapper::setDrmValid(int index,bool valid)
+	{
+	mMLWrapperPrivate->setDrmValid(index,valid);
+	}
+
 QVariant GlxMLWrapper::RetrieveBitmap(int index)
 {
     QVariant var;
@@ -230,6 +303,16 @@
 
 
 // ---------------------------------------------------------------------------
+// handleDetailsItemAvailable.
+// ---------------------------------------------------------------------------
+//
+void GlxMLWrapper::handleDetailsItemAvailable(int itemIndex)
+{
+
+    emit updateDetails();
+}
+
+// ---------------------------------------------------------------------------
 // handleGeneralError.
 // ---------------------------------------------------------------------------
 //
@@ -238,4 +321,12 @@
 	Q_UNUSED(aError);
 }
 
+// ---------------------------------------------------------------------------
+// handleTitleAvailable.
+// ---------------------------------------------------------------------------
+//
+void GlxMLWrapper::handleTitleAvailable(QString aTitle)
+{
+    emit updateAlbumTitle(aTitle);
+}
 
--- a/ui/uiengine/medialistwrapper/src/glxmlwrapper_p.cpp	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/uiengine/medialistwrapper/src/glxmlwrapper_p.cpp	Thu Jul 22 16:33:32 2010 +0100
@@ -34,8 +34,6 @@
 #include <glxattributecontext.h>
 #include <glxuistd.h>
 #include <glxlistdefs.h>
-#include <hal.h>
-#include <hal_data.h>
 #include <glxmediaid.h>
 #include <caf/caferr.h>
 //internal includes 
@@ -46,6 +44,8 @@
 
 //#define GLXPERFORMANCE_LOG  
 #include <glxperformancemacro.h>
+#include "glxtitlefetcher.h"
+#include"glxdrmutility.h"
 
 //constant declaration
 const TInt KTBAttributeAvailable(1);
@@ -88,11 +88,15 @@
 // might leave.
 // ---------------------------------------------------------------------------
 //
-GlxMLWrapperPrivate::GlxMLWrapperPrivate(GlxMLWrapper* aMLWrapper): iMLWrapper(aMLWrapper),
-								iGridContextActivated(EFalse), iLsFsContextActivated(EFalse),
-								iPtFsContextActivated(EFalse), iPtListContextActivated(EFalse),
-								iSelectionListContextActivated(EFalse)
-    {
+GlxMLWrapperPrivate::GlxMLWrapperPrivate(GlxMLWrapper* aMLWrapper)
+    : iMLWrapper(aMLWrapper),
+      iGridContextActivated(EFalse), 
+      iLsFsContextActivated(EFalse),
+      iPtFsContextActivated(EFalse), 
+      iPtListContextActivated(EFalse),
+      iSelectionListContextActivated(EFalse),
+	  iDetailsContextActivated(EFalse)
+{
     TRACER("GlxMLWrapperPrivate::GlxMLWrapperPrivate");
 	iGridThumbnailContext = NULL;
 	iPtFsThumbnailContext = NULL;
@@ -102,8 +106,9 @@
     iListThumbnailContext = NULL;
     iFocusGridThumbnailContext = NULL;
     iFocusFsThumbnailContext = NULL;
-    iFilmStripThumbnailContext = NULL;
-    iFavouriteContext = NULL;    
+    iFavouriteContext = NULL;
+    iTitleFetcher = NULL;
+    iViewTitle = QString();
     }
 
 // ---------------------------------------------------------------------------
@@ -128,6 +133,7 @@
 		}
 	iMLGenericObserver = CGlxMLGenericObserver::NewL(*iMediaList,this);
 	iBlockyIteratorForFilmStrip.SetRangeOffsets(0,0);
+	iDrmUtility = CGlxDRMUtility::InstanceL();
     }
 
 // ---------------------------------------------------------------------------
@@ -137,6 +143,10 @@
 GlxMLWrapperPrivate::~GlxMLWrapperPrivate()
     {
     TRACER("GlxMLWrapperPrivate::~GlxMLWrapperPrivate");
+	if ( iDrmUtility )
+		{
+		iDrmUtility->Close();
+		}
 	RemoveGridContext();
 	RemovePtFsContext();
 	RemoveLsFsContext();
@@ -161,9 +171,13 @@
 		{  
 		TRAP(err, SetThumbnailContextL(aContextMode) ); //todo add a trap here
 		}
-	else if(aContextMode == GlxContextFavorite)
+    else if(aContextMode == GlxContextFavorite)
+        {
+        TRAP(err,SetFavouriteContextL());
+        }
+	else if(aContextMode == GlxContextComment)
 	    {
-	    TRAP(err,SetFavouriteContextL());
+	    TRAP(err,SetDescontextL());
 	    }
 	else
 		{
@@ -175,6 +189,17 @@
 	}
 
 // ---------------------------------------------------------------------------
+// RemoveContextMode
+// ---------------------------------------------------------------------------
+//
+void GlxMLWrapperPrivate::RemoveContextMode(GlxContextMode aContextMode)
+{
+  if(aContextMode == GlxContextComment) 
+      {
+       RemoveDescContext();
+      }
+}
+// ---------------------------------------------------------------------------
 // SetFavouriteContextL
 // ---------------------------------------------------------------------------
 //
@@ -277,9 +302,9 @@
     }
 	
 	if(aContextMode == GlxContextLsFs && !iLsFsContextActivated) {
-		if(iGridContextActivated) {
-            RemoveGridContext();
-		}
+	    if(!iGridContextActivated) {
+	        CreateGridContextL();
+	    }
 		if(iPtFsContextActivated) {
 			RemovePtFsContext();
 		}
@@ -287,9 +312,9 @@
 	}
 	
 	if(aContextMode == GlxContextPtFs && !iPtFsContextActivated) {
-		if(iGridContextActivated) {
-            RemoveGridContext();
-		}
+        if(!iGridContextActivated) {
+            CreateGridContextL();
+        }
 		if(iLsFsContextActivated) {
 			RemoveLsFsContext();
 		}
@@ -318,7 +343,11 @@
 	    iMediaList->AddContextL(iGridThumbnailContext, KGlxFetchContextPriorityNormal );
 		iGridContextActivated = ETrue;
 		}
-    
+
+	CMPXCollectionPath* path = iMediaList->PathLC( NGlxListDefs::EPathParent );
+	iTitleFetcher = CGlxTitleFetcher::NewL(*this, path);
+	CleanupStack::PopAndDestroy(path);
+
 	}
 
 // ---------------------------------------------------------------------------
@@ -352,18 +381,11 @@
             iFocusGridThumbnailContext->SetDefaultSpec( KGridTNWIdth, KGridTNHeight );  //todo get these image sizes from  the layout.
             }
 
-        if(!iFilmStripThumbnailContext)
-            {
-            iFilmStripThumbnailContext = CGlxThumbnailContext::NewL( &iBlockyIteratorForFilmStrip ); // set the thumbnail context for Focus Grid
-            iFilmStripThumbnailContext->SetDefaultSpec( KGridTNWIdth, KGridTNHeight );  //todo get these image sizes from  the layout.
-            }
-
         // show static items if required
         iMediaList->SetStaticItemsEnabled(EFalse);
-        iMediaList->AddContextL(iFocusFsThumbnailContext, 8 );      // Temp will change this number  
-        iMediaList->AddContextL(iFocusGridThumbnailContext, 9 );    // Temp will change this number
-        iMediaList->AddContextL(iFilmStripThumbnailContext, 7 );    // Temp will change this number 
-        iMediaList->AddContextL(iLsFsThumbnailContext, KGlxFetchContextPriorityGridViewFullscreenVisibleThumbnail );
+        iMediaList->AddContextL(iFocusFsThumbnailContext, KGlxFetchContextPriorityNormal );      // Temp will change this number  
+        iMediaList->AddContextL(iFocusGridThumbnailContext, KGlxFetchContextPriorityNormal );    // Temp will change this number
+        iMediaList->AddContextL(iLsFsThumbnailContext, KGlxFetchContextPriorityNormal );
         iLsFsContextActivated = ETrue;
         }
     }
@@ -399,18 +421,11 @@
             iFocusGridThumbnailContext->SetDefaultSpec( KGridTNWIdth, KGridTNHeight );  //todo get these image sizes from  the layout.
             }
 
-        if(!iFilmStripThumbnailContext)
-            {
-            iFilmStripThumbnailContext = CGlxThumbnailContext::NewL( &iBlockyIteratorForFilmStrip ); // set the thumbnail context for Focus Grid
-            iFilmStripThumbnailContext->SetDefaultSpec( KGridTNPTWIdth, KGridTNPTHeight );  //todo get these image sizes from  the layout.
-            }
-
         // show static items if required
         iMediaList->SetStaticItemsEnabled(EFalse);
-        iMediaList->AddContextL(iFocusFsThumbnailContext, 8 );      // Temp will change this number  
-        iMediaList->AddContextL(iFocusGridThumbnailContext, 9 );    // Temp will change this number  
-        iMediaList->AddContextL(iFilmStripThumbnailContext, 7 );    // Temp will change this number 
-        iMediaList->AddContextL(iPtFsThumbnailContext, KGlxFetchContextPriorityGridViewFullscreenVisibleThumbnail );
+        iMediaList->AddContextL(iFocusFsThumbnailContext, KGlxFetchContextPriorityNormal );      // Temp will change this number  
+        iMediaList->AddContextL(iFocusGridThumbnailContext, KGlxFetchContextPriorityNormal );    // Temp will change this number  
+        iMediaList->AddContextL(iPtFsThumbnailContext, KGlxFetchContextPriorityNormal );
         iPtFsContextActivated = ETrue;
         }
     }
@@ -428,6 +443,8 @@
 		iGridThumbnailContext = NULL;
 		iGridContextActivated = EFalse;
 		}
+	delete iTitleFetcher;
+	iTitleFetcher = NULL;
 	}
 
 // ---------------------------------------------------------------------------
@@ -455,12 +472,6 @@
             delete iFocusGridThumbnailContext;
             iFocusGridThumbnailContext = NULL;
 		    }
-		if(iFilmStripThumbnailContext)
-		    {
-		    iMediaList->RemoveContext(iFilmStripThumbnailContext);
-		    delete iFilmStripThumbnailContext;
-		    iFilmStripThumbnailContext = NULL;
-		    }		    
 	    
 		iLsFsContextActivated = EFalse;
 		}
@@ -491,12 +502,6 @@
             delete iFocusGridThumbnailContext;
             iFocusGridThumbnailContext = NULL;
             }
-        if(iFilmStripThumbnailContext)
-            {
-            iMediaList->RemoveContext(iFilmStripThumbnailContext);
-            delete iFilmStripThumbnailContext;
-            iFilmStripThumbnailContext = NULL;
-            }
 	        
 		iPtFsContextActivated = EFalse;
 		}
@@ -592,7 +597,12 @@
 		filter = TGlxFilterFactory::CreateCameraAlbumExclusionFilterL();
 		CleanupStack::PushL(filter);
 		}
-	else
+	else if(EGlxFilterImage == aFilterType)
+		{
+		filter = TGlxFilterFactory::CreateExcludeDrmImageTypeFilterL(aFilterType);   
+		CleanupStack::PushL(filter);
+		}
+	else 
 		{
 		filter = TGlxFilterFactory::CreateItemTypeFilterL(aFilterType);   //todo take actual filter type
 		CleanupStack::PushL(filter);
@@ -617,6 +627,8 @@
     {
     TRACER("GlxMLWrapperPrivate::CreateMediaListFavoritesItemL");
     Q_UNUSED(aHierarchyId); 
+    Q_UNUSED(aCollectionId); 
+    Q_UNUSED(aFilterType); 
     // Create path to the list of images and videos
     CMPXCollectionPath* path = CMPXCollectionPath::NewL();
     CleanupStack::PushL( path );
@@ -749,7 +761,18 @@
         }
     else if( tnError ) 
         {
-        return QImage(GLXICON_CORRUPT);
+        if(iCorruptImage.isNull())
+            {
+            HbIcon *icon = new HbIcon(GLXICON_CORRUPT);
+            if(!icon->isNull())
+                {
+                // this image Creation is Slow. 
+                // But what to do, Q class's Does not undersatnd our Localised File names
+                iCorruptImage = icon->pixmap().toImage();
+                }
+            delete icon;
+            }
+        return iCorruptImage;
         }
 
      return QImage();
@@ -779,6 +802,18 @@
 }
 
 // ---------------------------------------------------------------------------
+//  RetrieveListDesc
+// ---------------------------------------------------------------------------
+//
+QString GlxMLWrapperPrivate::RetrieveListDesc(int aItemIndex)
+{
+    const TGlxMedia& item = iMediaList->Item( aItemIndex );
+    const TDesC &commentstring = item.Comment();
+    QString descstring =  QString::fromUtf16(commentstring.Ptr(), commentstring.Length());
+	return  descstring;
+}
+
+// ---------------------------------------------------------------------------
 //  Retrieve number of image contained by album list
 // ---------------------------------------------------------------------------
 //
@@ -843,6 +878,18 @@
  }
 
 // ---------------------------------------------------------------------------
+//  RetrieveItemSize
+// ---------------------------------------------------------------------------
+//
+int GlxMLWrapperPrivate::RetrieveItemSize(int aItemIndex)
+{
+    const TGlxMedia& item = iMediaList->Item( aItemIndex );
+    int itemSize ;
+    item.GetSize(itemSize);
+    return itemSize;
+ }
+
+// ---------------------------------------------------------------------------
 //  RetrieveItemDate
 // ---------------------------------------------------------------------------
 //
@@ -861,6 +908,29 @@
         }
      return date;
     }
+	
+// ---------------------------------------------------------------------------
+//  RetrieveItemTime
+// ---------------------------------------------------------------------------
+//
+QTime GlxMLWrapperPrivate::RetrieveItemTime(int index)
+    {
+    GLX_LOG_INFO1("GlxMLWrapperPrivate::RetrieveItemTime %d",index);
+    const TGlxMedia& item = iMediaList->Item( index );
+    TTime TimeValue;
+    QTime time = QTime();
+    TBool returnValue =item.GetDate(TimeValue);
+    
+    if(returnValue)
+        {
+        GLX_LOG_INFO1("GlxMLWrapperPrivate::RetrieveItemDate %d",returnValue);
+        TDateTime dateTime = TimeValue.DateTime();
+        time = QTime(dateTime.Hour(),dateTime.Minute());
+        }
+     return time;
+    }
+
+
 
 // ---------------------------------------------------------------------------
 //  RetrieveFsBitmap
@@ -870,9 +940,22 @@
     {
     GLX_LOG_INFO1("GlxMLWrapperPrivate::RetrieveBitmap %d",aItemIndex);
     const TGlxMedia& item = iMediaList->Item( aItemIndex );
+    TInt height =KFullScreenTNPTWidth; // default as portrait
+    TInt width =KFullScreenTNPTHeight;
+    if (iPtFsContextActivated )
+        {
+        GLX_LOG_INFO("GlxMLWrapperPrivate::RetrieveBitmap - CGlxHdmi :PT");
+        width = KFullScreenTNPTWidth;
+        height = KFullScreenTNPTHeight;
+        }
+    else if (iLsFsContextActivated)
+        {
+        GLX_LOG_INFO("GlxMLWrapperPrivate::RetrieveBitmap - CGlxHdmi :LS");
+        width = KFullScreenTNLSWidth;
+        height = KFullScreenTNLSHeight;
+        }
     TMPXAttribute fsTnAttrib= TMPXAttribute(KGlxMediaIdThumbnail,
-                GlxFullThumbnailAttributeId(ETrue, KFullScreenTNPTWidth,
-                        KFullScreenTNPTHeight));
+                GlxFullThumbnailAttributeId(ETrue, width, height));
     const CGlxThumbnailAttribute* fsTnValue = item.ThumbnailAttribute(
             fsTnAttrib);
     if (fsTnValue)
@@ -928,6 +1011,18 @@
     {
 	Q_UNUSED(aList);
 	iMLWrapper->itemsRemoved(aStartIndex,aEndIndex);
+	TInt mediaCount = aList->Count();
+    if (mediaCount <=0)
+        {
+        if(iMediaList->VisibleWindowIndex() > iMediaList->Count())
+            {
+            iMediaList->SetVisibleWindowIndexL(0);
+            }               
+        }
+    else if (iMediaList->VisibleWindowIndex() > iMediaList->Count())
+        {
+        iMediaList->SetVisibleWindowIndexL(iMediaList->Count()-1);
+        }
 	}
 // ---------------------------------------------------------------------------
 // HandleAttributesAvailableL
@@ -951,7 +1046,9 @@
 	    CheckLsFsTBAttribute(aItemIndex, aAttributes);
 	if (iPtListContextActivated || iSelectionListContextActivated)
 	    CheckListAttributes(aItemIndex, aAttributes);
-	// }
+ 	if( iDetailsContextActivated && aItemIndex == iMediaList->FocusIndex() )
+ 	   CheckDetailsAttributes(aItemIndex, aAttributes);
+	
 	}
 // ---------------------------------------------------------------------------
 // CheckGridTBAttribute
@@ -1082,6 +1179,29 @@
 		return searchStatus;	
 
 	 }    
+
+// ---------------------------------------------------------------------------
+// CheckDetailsAttributes
+// ---------------------------------------------------------------------------
+//
+void GlxMLWrapperPrivate::CheckDetailsAttributes(TInt aItemIndex, const RArray<TMPXAttribute>& aAttributes)
+{
+    qDebug("GlxMLWrapperPrivate::CheckDetailsAttributes");
+    TBool attribPresent = EFalse;
+    TMPXAttribute titleAttrib(KMPXMediaGeneralComment);
+    TIdentityRelation< TMPXAttribute > match ( &TMPXAttribute::Match );
+
+    const TGlxMedia& item = iMediaList->Item(aItemIndex);
+
+    if (KErrNotFound != aAttributes.Find(titleAttrib, match))
+        {
+        qDebug("GlxMLWrapperPrivate::CheckDetailsAttributes TRUE");
+        attribPresent = ETrue;
+        iMLWrapper->handleDetailsItemAvailable(aItemIndex);
+        GLX_LOG_INFO1("### GlxMLWrapperPrivate::CheckDetailsAttributes title present %d",aItemIndex);
+        }     
+}
+
 // ---------------------------------------------------------------------------
 // GetItemCount
 // ---------------------------------------------------------------------------
@@ -1119,6 +1239,7 @@
 //
 void GlxMLWrapperPrivate::HandleError( TInt aError )
 	{
+	Q_UNUSED(aError);
     GLX_LOG_INFO1("GlxMLWrapperPrivate::HandleError Error %d", aError);	
 	
     for ( TInt i = 0; i < iMediaList->Count(); i++ )
@@ -1162,6 +1283,12 @@
 	Q_UNUSED(aList);
 }
 
+void GlxMLWrapperPrivate::HandlePopulatedL(MGlxMediaList* aList)
+{
+    Q_UNUSED(aList);
+    iMLWrapper->handlepopulated();
+}
+
 // ---------------------------------------------------------------------------
 // GetItemCount
 // ---------------------------------------------------------------------------
@@ -1243,3 +1370,113 @@
      {
      iMediaList->SetVisibleWindowIndexL(aItemIndex);
      }
+
+// -----------------------------------------------------------------------------
+// HandleTitleAvailableL
+// -----------------------------------------------------------------------------
+//	
+void GlxMLWrapperPrivate::HandleTitleAvailableL(
+        const TDesC& aTitle)
+    {
+    iViewTitle = QString::fromUtf16(aTitle.Ptr(), aTitle.Length());	
+	iMLWrapper->handleTitleAvailable(iViewTitle);
+	}
+
+QString GlxMLWrapperPrivate::RetrieveViewTitle()
+    {
+    return iViewTitle;
+    }
+	 
+bool GlxMLWrapperPrivate::IsPopulated()
+    {
+    return iMediaList->IsPopulated();
+    }
+
+// ---------------------------------------------------------------------------
+// SetDescontextL
+// ---------------------------------------------------------------------------
+//
+void GlxMLWrapperPrivate::SetDescontextL()
+     {
+     iDescContext = CGlxDefaultAttributeContext::NewL();
+     iDescContext->AddAttributeL( KMPXMediaGeneralComment );
+     iMediaList->AddContextL( iDescContext, KGlxFetchContextPriorityLow );
+     iDetailsContextActivated = ETrue;     
+     }
+	
+// ---------------------------------------------------------------------------
+// RemoveDescContext
+// ---------------------------------------------------------------------------
+//
+void GlxMLWrapperPrivate::RemoveDescContext()
+    {
+    if(iDescContext )
+        {
+        iMediaList->RemoveContext(iDescContext);
+        delete iDescContext;
+        iDescContext = NULL;  
+        iDetailsContextActivated = EFalse;   
+        }
+    }
+
+bool GlxMLWrapperPrivate::IsDrmProtected(int index)
+    {
+    TInt itemIndex = index;
+    if(-1 == itemIndex)
+        {
+        itemIndex = iMediaList->FocusIndex();
+        }
+    const TGlxMedia& media = iMediaList->Item(itemIndex);
+    return media.IsDrmProtected();
+    }
+
+bool GlxMLWrapperPrivate::IsDrmValid(int index)
+    {
+    TInt itemIndex = index;
+    if(-1 == itemIndex)
+        {
+        itemIndex = iMediaList->FocusIndex();
+        }
+		
+    const TGlxMedia& media = iMediaList->Item(itemIndex);
+    TGlxMediaGeneralRightsValidity isValid = EGlxDrmRightsValidityUnknown;
+    TBool ret = media.GetDrmValidity(isValid);
+	if(ret && EGlxDrmRightsValidityUnknown == isValid )
+		{
+		// check rights           
+		TMPXGeneralCategory cat = media.Category();
+		const TDesC& uri = media.Uri();
+		if ( uri.Length() && cat != EMPXNoCategory )
+			{
+			TBool valid = iDrmUtility->ItemRightsValidityCheckL( uri, ( cat == EMPXImage ) );
+			CGlxMedia* properties = const_cast<CGlxMedia*>(media.Properties());
+			if( valid )
+				{
+				
+				isValid = EGlxDrmRightsValid;
+				}
+			else
+				{
+				
+				isValid = EGlxDrmRightsInvalid;
+				}
+			properties->SetTObjectValueL(KGlxMediaGeneralDRMRightsValid, isValid);
+			}
+		}
+    return ( EGlxDrmRightsValid == isValid );
+    }
+	
+void GlxMLWrapperPrivate::setDrmValid(int index,bool valid)	
+	{
+	const TGlxMedia& media = iMediaList->Item(index);
+	CGlxMedia* properties = const_cast<CGlxMedia*>(media.Properties());
+	if(valid)
+		{
+		properties->SetTObjectValueL(KGlxMediaGeneralDRMRightsValid, EGlxDrmRightsValid);
+		}
+	else
+		{
+		properties->SetTObjectValueL(KGlxMediaGeneralDRMRightsValid, EGlxDrmRightsInvalid);
+		}
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ui/uiengine/medialistwrapper/src/glxtitlefetcher.cpp	Thu Jul 22 16:33:32 2010 +0100
@@ -0,0 +1,207 @@
+/*
+* 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:    Title fetcher
+*
+*/
+
+
+
+
+
+// INCLUDE FILES
+#include "glxtitlefetcher.h"
+
+#include <mpxcollectionpath.h>
+#include <mpxmediageneraldefs.h>
+#include <mglxmedialist.h>
+#include <glxattributecontext.h>
+#include <glxuistd.h>
+#include "glxlog.h"
+#include "glxtracer.h"
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// ---------------------------------------------------------------------------
+//
+CGlxTitleFetcher::CGlxTitleFetcher(MGlxTitleFetcherObserver& aObserver,
+                        CMPXCollectionPath* aPath) :
+   iObserver(aObserver), iPath(aPath)
+    {
+    TRACER("CGlxTitleFetcher::CGlxTitleFetcher");
+    }
+
+// ---------------------------------------------------------------------------
+// Symbian 2nd phase constructor can leave.
+// ---------------------------------------------------------------------------
+// 
+    
+void CGlxTitleFetcher::ConstructL()
+    {
+    TRACER("CGlxTitleFetcher::ConstructL");
+    // Go back one level to obtain the ID
+    iPathId = iPath->Id();
+    // Go back another level from which to create a media list containing 
+    // this path
+    iPath->Back();
+    
+    if( iPath->Levels() <= 0 )
+        {
+        //For This Level, Opening a collection is nothing but open EGlxCollectionPluginShowInMainListView
+        //We dont need this in 10.1
+        return;
+        }
+    
+    iBackMediaList = MGlxMediaList::InstanceL(*iPath);
+    
+    /// @todo: This idSpaceId must be calculated properly
+    TGlxIdSpaceId idSpaceId = iBackMediaList->IdSpaceId(0);
+    
+    TGlxMediaId id(iPathId);
+    TBool requestAttributes = ETrue;
+    TInt index = iBackMediaList->Index(idSpaceId, id);
+    
+    if ( index != KErrNotFound )
+        {
+        const TGlxMedia& item = iBackMediaList->Item(index);
+    	const CGlxMedia* media = item.Properties();
+
+    	// get the Title from the attribute if it is already present
+    	if (media && media->IsSupported(KMPXMediaGeneralTitle)
+    	    && index != KErrNotFound)
+    		{
+            const TDesC&  title = media->ValueText(KMPXMediaGeneralTitle);
+            // notify the observer		
+            iObserver.HandleTitleAvailableL(title); 
+            requestAttributes = EFalse;
+    		}
+    	}
+    
+    if ( requestAttributes )
+	    {
+        // Otherwise add a context setting range to cover all items
+        iContext = CGlxDefaultAttributeContext::NewL();
+        iContext->SetRangeOffsets(10000,10000);
+        iContext->AddAttributeL(KMPXMediaGeneralTitle);
+        // Add the context at a high priority
+        iBackMediaList->AddContextL( iContext,
+                                     KGlxFetchContextPriorityTitleFetcher );
+        // Set self as observer
+        iBackMediaList->AddMediaListObserverL(this);
+	    }
+	}
+
+
+// ---------------------------------------------------------------------------
+// Two-phased constructor.
+// ---------------------------------------------------------------------------
+//
+CGlxTitleFetcher* CGlxTitleFetcher::NewL(MGlxTitleFetcherObserver& aObserver,
+                        CMPXCollectionPath* aPath)
+    {
+    CGlxTitleFetcher* self = new (ELeave) CGlxTitleFetcher(aObserver, aPath);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CGlxTitleFetcher::~CGlxTitleFetcher()
+    {
+    TRACER("CGlxTitleFetcher::~CGlxTitleFetcher ()");
+
+    if(iBackMediaList)
+        {
+        if(iContext)
+            {
+            iBackMediaList->RemoveContext(iContext);
+            delete iContext;
+            }
+        iBackMediaList->RemoveMediaListObserver(this);           
+		iBackMediaList->Close();
+        }
+    
+    }
+// ---------------------------------------------------------------------------
+// CGlxTitleFetcher::HandleItemAddedL
+// ---------------------------------------------------------------------------
+//
+void CGlxTitleFetcher::HandleItemAddedL(TInt aStartIndex, TInt aEndIndex,
+        MGlxMediaList* aList)  
+    {    
+    TRACER("CGlxTitleFetcher::HandleItemAddedL ()");
+    if(aList == iBackMediaList)
+           {
+           for(TInt index = aStartIndex;index <= aEndIndex;index++)
+           // Is it the item (path) that we want
+               {
+               if(aList->Item(index).Id().Value() == (TUint32)iPathId)
+                       {
+                       const TGlxMedia& item = aList->Item(index);
+                       const CGlxMedia* media = item.Properties();
+                       // get the Title from the attribute
+                       if (media && media->IsSupported(KMPXMediaGeneralTitle))
+                           {
+                           const TDesC&  title = media->ValueText(KMPXMediaGeneralTitle);
+                           // notify the observer      
+                           iObserver.HandleTitleAvailableL(title); 
+                           iBackMediaList->RemoveContext(iContext);
+                           delete iContext;
+                           iContext = NULL;                
+                           }
+                       }
+                }
+           }
+    }
+// ---------------------------------------------------------------------------
+// CGlxTitleFetcher::HandleAttributesAvailableL
+// ---------------------------------------------------------------------------
+//
+void CGlxTitleFetcher::HandleAttributesAvailableL(TInt aItemIndex, 	
+		const RArray<TMPXAttribute>& /*aAttributes*/, MGlxMediaList* aList)
+    {
+    TRACER("CGlxTitleFetcher::HandleAttributesAvailableL ()");
+    // Is it the list that we want    
+    if(aList == iBackMediaList)
+        {
+        // Is it the item (path) that we want
+        if(aList->Item(aItemIndex).Id().Value() == (TUint32)iPathId)
+            {
+            const TGlxMedia& item = aList->Item(aItemIndex);
+			const CGlxMedia* media = item.Properties();
+			// get the Title from the attribute
+			if (media && media->IsSupported(KMPXMediaGeneralTitle))
+				{
+                const TDesC&  title = media->ValueText(KMPXMediaGeneralTitle);
+	            // notify the observer		
+                iObserver.HandleTitleAvailableL(title); 
+                iBackMediaList->RemoveContext(iContext);
+                delete iContext;
+                iContext = NULL;
+		        
+				}
+            }
+        }
+    }
+
+
+
+//  End of File
--- a/ui/uiengine/model/bwins/glxlistmodelu.def	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/uiengine/model/bwins/glxlistmodelu.def	Thu Jul 22 16:33:32 2010 +0100
@@ -27,4 +27,6 @@
 	?data@GlxAlbumModel@@UBE?AVQVariant@@ABVQModelIndex@@H@Z @ 26 NONAME ; class QVariant GlxAlbumModel::data(class QModelIndex const &, int) const
 	?metaObject@GlxAlbumModel@@UBEPBUQMetaObject@@XZ @ 27 NONAME ; struct QMetaObject const * GlxAlbumModel::metaObject(void) const
 	?setData@GlxAlbumModel@@UAE_NABVQModelIndex@@ABVQVariant@@H@Z @ 28 NONAME ; bool GlxAlbumModel::setData(class QModelIndex const &, class QVariant const &, int)
+	?listPopulated@GlxAlbumModel@@IAEXXZ @ 29 NONAME ; void GlxAlbumModel::listPopulated(void)
+	?modelPopulated@GlxAlbumModel@@QAEXXZ @ 30 NONAME ; void GlxAlbumModel::modelPopulated(void)
 
--- a/ui/uiengine/model/bwins/glxmediamodelu.def	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/uiengine/model/bwins/glxmediamodelu.def	Thu Jul 22 16:33:32 2010 +0100
@@ -1,35 +1,42 @@
 EXPORTS
-	?addExternalItems@GlxMediaModel@@QAEXPAV?$QList@UGlxInterfaceParams@@@@@Z @ 1 NONAME ; void GlxMediaModel::addExternalItems(class QList<struct GlxInterfaceParams> *)
-	?metaObject@GlxMediaModel@@UBEPBUQMetaObject@@XZ @ 2 NONAME ; struct QMetaObject const * GlxMediaModel::metaObject(void) const
-	?parent@GlxMediaModel@@UBE?AVQModelIndex@@ABV2@@Z @ 3 NONAME ; class QModelIndex GlxMediaModel::parent(class QModelIndex const &) const
-	?itemsAdded@GlxMediaModel@@QAEXHH@Z @ 4 NONAME ; void GlxMediaModel::itemsAdded(int, int)
-	?tr@GlxMediaModel@@SA?AVQString@@PBD0@Z @ 5 NONAME ; class QString GlxMediaModel::tr(char const *, char const *)
-	?getStaticMetaObject@GlxMediaModel@@SAABUQMetaObject@@XZ @ 6 NONAME ; struct QMetaObject const & GlxMediaModel::getStaticMetaObject(void)
-	?updateItemIcon@GlxMediaModel@@AAEXHPAVHbIcon@@W4GlxTBContextType@@@Z @ 7 NONAME ; void GlxMediaModel::updateItemIcon(int, class HbIcon *, enum GlxTBContextType)
-	?qt_metacast@GlxMediaModel@@UAEPAXPBD@Z @ 8 NONAME ; void * GlxMediaModel::qt_metacast(char const *)
-	?itemsRemoved@GlxMediaModel@@QAEXHH@Z @ 9 NONAME ; void GlxMediaModel::itemsRemoved(int, int)
-	?rowCount@GlxMediaModel@@UBEHABVQModelIndex@@@Z @ 10 NONAME ; int GlxMediaModel::rowCount(class QModelIndex const &) const
-	??1GlxMediaModel@@UAE@XZ @ 11 NONAME ; GlxMediaModel::~GlxMediaModel(void)
-	?GetFsIconItem@GlxMediaModel@@ABEPAVHbIcon@@HW4GlxTBContextType@@@Z @ 12 NONAME ; class HbIcon * GlxMediaModel::GetFsIconItem(int, enum GlxTBContextType) const
-	?columnCount@GlxMediaModel@@UBEHABVQModelIndex@@@Z @ 13 NONAME ; int GlxMediaModel::columnCount(class QModelIndex const &) const
-	?setSelectedIndex@GlxMediaModel@@AAEXABVQModelIndex@@@Z @ 14 NONAME ; void GlxMediaModel::setSelectedIndex(class QModelIndex const &)
-	?qt_metacall@GlxMediaModel@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 15 NONAME ; int GlxMediaModel::qt_metacall(enum QMetaObject::Call, int, void * *)
-	?setFocusIndex@GlxMediaModel@@AAEXABVQModelIndex@@@Z @ 16 NONAME ; void GlxMediaModel::setFocusIndex(class QModelIndex const &)
-	?setContextMode@GlxMediaModel@@AAEXW4GlxContextMode@@@Z @ 17 NONAME ; void GlxMediaModel::setContextMode(enum GlxContextMode)
-	?trUtf8@GlxMediaModel@@SA?AVQString@@PBD0H@Z @ 18 NONAME ; class QString GlxMediaModel::trUtf8(char const *, char const *, int)
-	?staticMetaObject@GlxMediaModel@@2UQMetaObject@@B @ 19 NONAME ; struct QMetaObject const GlxMediaModel::staticMetaObject
-	?itemUpdated1@GlxMediaModel@@QAEXHW4GlxTBContextType@@@Z @ 20 NONAME ; void GlxMediaModel::itemUpdated1(int, enum GlxTBContextType)
-	?setData@GlxMediaModel@@UAE_NABVQModelIndex@@ABVQVariant@@H@Z @ 21 NONAME ; bool GlxMediaModel::setData(class QModelIndex const &, class QVariant const &, int)
-	?GetGridIconItem@GlxMediaModel@@ABEPAVHbIcon@@HW4GlxTBContextType@@@Z @ 22 NONAME ; class HbIcon * GlxMediaModel::GetGridIconItem(int, enum GlxTBContextType) const
-	?data@GlxMediaModel@@UBE?AVQVariant@@ABVQModelIndex@@H@Z @ 23 NONAME ; class QVariant GlxMediaModel::data(class QModelIndex const &, int) const
-	??_EGlxMediaModel@@UAE@I@Z @ 24 NONAME ; GlxMediaModel::~GlxMediaModel(unsigned int)
-	?clearExternalItems@GlxMediaModel@@QAEXXZ @ 25 NONAME ; void GlxMediaModel::clearExternalItems(void)
-	?getFocusIndex@GlxMediaModel@@ABE?AVQModelIndex@@XZ @ 26 NONAME ; class QModelIndex GlxMediaModel::getFocusIndex(void) const
-	?trUtf8@GlxMediaModel@@SA?AVQString@@PBD0@Z @ 27 NONAME ; class QString GlxMediaModel::trUtf8(char const *, char const *)
-	?iconAvailable@GlxMediaModel@@IBEXHPAVHbIcon@@W4GlxTBContextType@@@Z @ 28 NONAME ; void GlxMediaModel::iconAvailable(int, class HbIcon *, enum GlxTBContextType) const
-	??0GlxMediaModel@@QAE@AAVGlxModelParm@@@Z @ 29 NONAME ; GlxMediaModel::GlxMediaModel(class GlxModelParm &)
-	?tr@GlxMediaModel@@SA?AVQString@@PBD0H@Z @ 30 NONAME ; class QString GlxMediaModel::tr(char const *, char const *, int)
-	?index@GlxMediaModel@@UBE?AVQModelIndex@@HHABV2@@Z @ 31 NONAME ; class QModelIndex GlxMediaModel::index(int, int, class QModelIndex const &) const
-	?GetExternalIconItem@GlxMediaModel@@ABEPAVHbIcon@@HW4GlxTBContextType@@@Z @ 32 NONAME ; class HbIcon * GlxMediaModel::GetExternalIconItem(int, enum GlxTBContextType) const
-	?itemCorrupted@GlxMediaModel@@QAEXH@Z @ 33 NONAME ; void GlxMediaModel::itemCorrupted(int)
+	?metaObject@GlxMediaModel@@UBEPBUQMetaObject@@XZ @ 1 NONAME ; struct QMetaObject const * GlxMediaModel::metaObject(void) const
+	?itemsAdded@GlxMediaModel@@QAEXHH@Z @ 2 NONAME ; void GlxMediaModel::itemsAdded(int, int)
+	?getStaticMetaObject@GlxMediaModel@@SAABUQMetaObject@@XZ @ 3 NONAME ; struct QMetaObject const & GlxMediaModel::getStaticMetaObject(void)
+	?updateItemIcon@GlxMediaModel@@AAEXHPAVHbIcon@@W4GlxTBContextType@@@Z @ 4 NONAME ; void GlxMediaModel::updateItemIcon(int, class HbIcon *, enum GlxTBContextType)
+	?qt_metacast@GlxMediaModel@@UAEPAXPBD@Z @ 5 NONAME ; void * GlxMediaModel::qt_metacast(char const *)
+	?rowCount@GlxMediaModel@@UBEHABVQModelIndex@@@Z @ 6 NONAME ; int GlxMediaModel::rowCount(class QModelIndex const &) const
+	?setSelectedIndex@GlxMediaModel@@AAEXABVQModelIndex@@@Z @ 7 NONAME ; void GlxMediaModel::setSelectedIndex(class QModelIndex const &)
+	?setFocusIndex@GlxMediaModel@@AAEXABVQModelIndex@@@Z @ 8 NONAME ; void GlxMediaModel::setFocusIndex(class QModelIndex const &)
+	?setContextMode@GlxMediaModel@@AAEXW4GlxContextMode@@@Z @ 9 NONAME ; void GlxMediaModel::setContextMode(enum GlxContextMode)
+	?trUtf8@GlxMediaModel@@SA?AVQString@@PBD0H@Z @ 10 NONAME ; class QString GlxMediaModel::trUtf8(char const *, char const *, int)
+	?staticMetaObject@GlxMediaModel@@2UQMetaObject@@B @ 11 NONAME ; struct QMetaObject const GlxMediaModel::staticMetaObject
+	?GetGridIconItem@GlxMediaModel@@ABEPAVHbIcon@@HW4GlxTBContextType@@@Z @ 12 NONAME ; class HbIcon * GlxMediaModel::GetGridIconItem(int, enum GlxTBContextType) const
+	??_EGlxMediaModel@@UAE@I@Z @ 13 NONAME ; GlxMediaModel::~GlxMediaModel(unsigned int)
+	?getFocusIndex@GlxMediaModel@@ABE?AVQModelIndex@@XZ @ 14 NONAME ; class QModelIndex GlxMediaModel::getFocusIndex(void) const
+	?tr@GlxMediaModel@@SA?AVQString@@PBD0H@Z @ 15 NONAME ; class QString GlxMediaModel::tr(char const *, char const *, int)
+	?itemCorrupted@GlxMediaModel@@QAEXH@Z @ 16 NONAME ; void GlxMediaModel::itemCorrupted(int)
+	?addExternalItems@GlxMediaModel@@QAEXPAV?$QList@UGlxInterfaceParams@@@@@Z @ 17 NONAME ; void GlxMediaModel::addExternalItems(class QList<struct GlxInterfaceParams> *)
+	?modelpopulated@GlxMediaModel@@QAEXXZ @ 18 NONAME ; void GlxMediaModel::modelpopulated(void)
+	?parent@GlxMediaModel@@UBE?AVQModelIndex@@ABV2@@Z @ 19 NONAME ; class QModelIndex GlxMediaModel::parent(class QModelIndex const &) const
+	?tr@GlxMediaModel@@SA?AVQString@@PBD0@Z @ 20 NONAME ; class QString GlxMediaModel::tr(char const *, char const *)
+	?itemsRemoved@GlxMediaModel@@QAEXHH@Z @ 21 NONAME ; void GlxMediaModel::itemsRemoved(int, int)
+	?columnCount@GlxMediaModel@@UBEHABVQModelIndex@@@Z @ 22 NONAME ; int GlxMediaModel::columnCount(class QModelIndex const &) const
+	?GetFsIconItem@GlxMediaModel@@ABEPAVHbIcon@@HW4GlxTBContextType@@@Z @ 23 NONAME ; class HbIcon * GlxMediaModel::GetFsIconItem(int, enum GlxTBContextType) const
+	??1GlxMediaModel@@UAE@XZ @ 24 NONAME ; GlxMediaModel::~GlxMediaModel(void)
+	?qt_metacall@GlxMediaModel@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 25 NONAME ; int GlxMediaModel::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?albumTitleUpdated@GlxMediaModel@@QAEXVQString@@@Z @ 26 NONAME ; void GlxMediaModel::albumTitleUpdated(class QString)
+	?itemUpdated1@GlxMediaModel@@QAEXHW4GlxTBContextType@@@Z @ 27 NONAME ; void GlxMediaModel::itemUpdated1(int, enum GlxTBContextType)
+	?setData@GlxMediaModel@@UAE_NABVQModelIndex@@ABVQVariant@@H@Z @ 28 NONAME ; bool GlxMediaModel::setData(class QModelIndex const &, class QVariant const &, int)
+	?data@GlxMediaModel@@UBE?AVQVariant@@ABVQModelIndex@@H@Z @ 29 NONAME ; class QVariant GlxMediaModel::data(class QModelIndex const &, int) const
+	?clearExternalItems@GlxMediaModel@@QAEXXZ @ 30 NONAME ; void GlxMediaModel::clearExternalItems(void)
+	?trUtf8@GlxMediaModel@@SA?AVQString@@PBD0@Z @ 31 NONAME ; class QString GlxMediaModel::trUtf8(char const *, char const *)
+	?iconAvailable@GlxMediaModel@@IBEXHPAVHbIcon@@W4GlxTBContextType@@@Z @ 32 NONAME ; void GlxMediaModel::iconAvailable(int, class HbIcon *, enum GlxTBContextType) const
+	?populated@GlxMediaModel@@IAEXXZ @ 33 NONAME ; void GlxMediaModel::populated(void)
+	??0GlxMediaModel@@QAE@AAVGlxModelParm@@@Z @ 34 NONAME ; GlxMediaModel::GlxMediaModel(class GlxModelParm &)
+	?index@GlxMediaModel@@UBE?AVQModelIndex@@HHABV2@@Z @ 35 NONAME ; class QModelIndex GlxMediaModel::index(int, int, class QModelIndex const &) const
+	?GetExternalIconItem@GlxMediaModel@@ABEPAVHbIcon@@HW4GlxTBContextType@@@Z @ 36 NONAME ; class HbIcon * GlxMediaModel::GetExternalIconItem(int, enum GlxTBContextType) const
+	?albumTitleAvailable@GlxMediaModel@@IAEXVQString@@@Z @ 37 NONAME ; void GlxMediaModel::albumTitleAvailable(class QString)
+	?updateDetailsView@GlxMediaModel@@IAEXXZ @ 38 NONAME ; void GlxMediaModel::updateDetailsView(void)
+	?removeContextMode@GlxMediaModel@@AAEXW4GlxContextMode@@@Z @ 39 NONAME ; void GlxMediaModel::removeContextMode(enum GlxContextMode)
+	?updateDetailItems@GlxMediaModel@@QAEXXZ @ 40 NONAME ; void GlxMediaModel::updateDetailItems(void)
 
--- a/ui/uiengine/model/bwins/glxmodelwrapperu.def	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/uiengine/model/bwins/glxmodelwrapperu.def	Thu Jul 22 16:33:32 2010 +0100
@@ -11,24 +11,24 @@
 	?getStaticMetaObject@GlxModelWrapper@@SAABUQMetaObject@@XZ @ 10 NONAME ; struct QMetaObject const & GlxModelWrapper::getStaticMetaObject(void)
 	?index@GlxModelWrapper@@UBE?AVQModelIndex@@HHABV2@@Z @ 11 NONAME ; class QModelIndex GlxModelWrapper::index(int, int, class QModelIndex const &) const
 	?rowsAboutToBeInserted@GlxModelWrapper@@IAEXABVQModelIndex@@HH@Z @ 12 NONAME ; void GlxModelWrapper::rowsAboutToBeInserted(class QModelIndex const &, int, int)
-	?data@GlxModelWrapper@@UBE?AVQVariant@@ABVQModelIndex@@H@Z @ 13 NONAME ; class QVariant GlxModelWrapper::data(class QModelIndex const &, int) const
-	?staticMetaObject@GlxModelWrapper@@2UQMetaObject@@B @ 14 NONAME ; struct QMetaObject const GlxModelWrapper::staticMetaObject
-	?scrollingEnded@GlxModelWrapper@@QAEXXZ @ 15 NONAME ; void GlxModelWrapper::scrollingEnded(void)
-	?rowsRemoved@GlxModelWrapper@@IAEXABVQModelIndex@@HH@Z @ 16 NONAME ; void GlxModelWrapper::rowsRemoved(class QModelIndex const &, int, int)
-	?basemodelindex@GlxModelWrapper@@QBE?AVQModelIndex@@HHABV2@@Z @ 17 NONAME ; class QModelIndex GlxModelWrapper::basemodelindex(int, int, class QModelIndex const &) const
-	?columnCount@GlxModelWrapper@@UBEHABVQModelIndex@@@Z @ 18 NONAME ; int GlxModelWrapper::columnCount(class QModelIndex const &) const
-	?parent@GlxModelWrapper@@UBE?AVQModelIndex@@ABV2@@Z @ 19 NONAME ; class QModelIndex GlxModelWrapper::parent(class QModelIndex const &) const
-	?rowsInserted@GlxModelWrapper@@IAEXABVQModelIndex@@HH@Z @ 20 NONAME ; void GlxModelWrapper::rowsInserted(class QModelIndex const &, int, int)
-	?disConnectFromModel@GlxModelWrapper@@AAEXXZ @ 21 NONAME ; void GlxModelWrapper::disConnectFromModel(void)
-	?metaObject@GlxModelWrapper@@UBEPBUQMetaObject@@XZ @ 22 NONAME ; struct QMetaObject const * GlxModelWrapper::metaObject(void) const
-	??1GlxModelWrapper@@UAE@XZ @ 23 NONAME ; GlxModelWrapper::~GlxModelWrapper(void)
-	?connectToModel@GlxModelWrapper@@AAEXXZ @ 24 NONAME ; void GlxModelWrapper::connectToModel(void)
-	?setModel@GlxModelWrapper@@QAEXPAVQAbstractItemModel@@@Z @ 25 NONAME ; void GlxModelWrapper::setModel(class QAbstractItemModel *)
-	?tr@GlxModelWrapper@@SA?AVQString@@PBD0H@Z @ 26 NONAME ; class QString GlxModelWrapper::tr(char const *, char const *, int)
-	?qt_metacall@GlxModelWrapper@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 27 NONAME ; int GlxModelWrapper::qt_metacall(enum QMetaObject::Call, int, void * *)
-	?setRoles@GlxModelWrapper@@QAEXHH@Z @ 28 NONAME ; void GlxModelWrapper::setRoles(int, int)
-	?scrollingStarted@GlxModelWrapper@@QAEXXZ @ 29 NONAME ; void GlxModelWrapper::scrollingStarted(void)
-	?trUtf8@GlxModelWrapper@@SA?AVQString@@PBD0H@Z @ 30 NONAME ; class QString GlxModelWrapper::trUtf8(char const *, char const *, int)
-	?qt_metacast@GlxModelWrapper@@UAEPAXPBD@Z @ 31 NONAME ; void * GlxModelWrapper::qt_metacast(char const *)
-	?resetTheModel@GlxModelWrapper@@AAEXXZ @ 32 NONAME ; void GlxModelWrapper::resetTheModel(void)
+	?resetTheModel@GlxModelWrapper@@AAEXXZ @ 13 NONAME ; void GlxModelWrapper::resetTheModel(void)
+	?data@GlxModelWrapper@@UBE?AVQVariant@@ABVQModelIndex@@H@Z @ 14 NONAME ; class QVariant GlxModelWrapper::data(class QModelIndex const &, int) const
+	?staticMetaObject@GlxModelWrapper@@2UQMetaObject@@B @ 15 NONAME ; struct QMetaObject const GlxModelWrapper::staticMetaObject
+	?scrollingEnded@GlxModelWrapper@@QAEXXZ @ 16 NONAME ; void GlxModelWrapper::scrollingEnded(void)
+	?rowsRemoved@GlxModelWrapper@@IAEXABVQModelIndex@@HH@Z @ 17 NONAME ; void GlxModelWrapper::rowsRemoved(class QModelIndex const &, int, int)
+	?basemodelindex@GlxModelWrapper@@QBE?AVQModelIndex@@HHABV2@@Z @ 18 NONAME ; class QModelIndex GlxModelWrapper::basemodelindex(int, int, class QModelIndex const &) const
+	?columnCount@GlxModelWrapper@@UBEHABVQModelIndex@@@Z @ 19 NONAME ; int GlxModelWrapper::columnCount(class QModelIndex const &) const
+	?parent@GlxModelWrapper@@UBE?AVQModelIndex@@ABV2@@Z @ 20 NONAME ; class QModelIndex GlxModelWrapper::parent(class QModelIndex const &) const
+	?rowsInserted@GlxModelWrapper@@IAEXABVQModelIndex@@HH@Z @ 21 NONAME ; void GlxModelWrapper::rowsInserted(class QModelIndex const &, int, int)
+	?disConnectFromModel@GlxModelWrapper@@AAEXXZ @ 22 NONAME ; void GlxModelWrapper::disConnectFromModel(void)
+	?metaObject@GlxModelWrapper@@UBEPBUQMetaObject@@XZ @ 23 NONAME ; struct QMetaObject const * GlxModelWrapper::metaObject(void) const
+	??1GlxModelWrapper@@UAE@XZ @ 24 NONAME ; GlxModelWrapper::~GlxModelWrapper(void)
+	?connectToModel@GlxModelWrapper@@AAEXXZ @ 25 NONAME ; void GlxModelWrapper::connectToModel(void)
+	?setModel@GlxModelWrapper@@QAEXPAVQAbstractItemModel@@@Z @ 26 NONAME ; void GlxModelWrapper::setModel(class QAbstractItemModel *)
+	?tr@GlxModelWrapper@@SA?AVQString@@PBD0H@Z @ 27 NONAME ; class QString GlxModelWrapper::tr(char const *, char const *, int)
+	?qt_metacall@GlxModelWrapper@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 28 NONAME ; int GlxModelWrapper::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?setRoles@GlxModelWrapper@@QAEXHH@Z @ 29 NONAME ; void GlxModelWrapper::setRoles(int, int)
+	?scrollingStarted@GlxModelWrapper@@QAEXXZ @ 30 NONAME ; void GlxModelWrapper::scrollingStarted(void)
+	?trUtf8@GlxModelWrapper@@SA?AVQString@@PBD0H@Z @ 31 NONAME ; class QString GlxModelWrapper::trUtf8(char const *, char const *, int)
+	?qt_metacast@GlxModelWrapper@@UAEPAXPBD@Z @ 32 NONAME ; void * GlxModelWrapper::qt_metacast(char const *)
 
--- a/ui/uiengine/model/eabi/glxlistmodelu.def	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/uiengine/model/eabi/glxlistmodelu.def	Thu Jul 22 16:33:32 2010 +0100
@@ -27,4 +27,6 @@
 	_ZNK13GlxAlbumModel8rowCountERK11QModelIndex @ 26 NONAME
 	_ZTI13GlxAlbumModel @ 27 NONAME
 	_ZTV13GlxAlbumModel @ 28 NONAME
+	_ZN13GlxAlbumModel13listPopulatedEv @ 29 NONAME
+	_ZN13GlxAlbumModel14modelPopulatedEv @ 30 NONAME
 
--- a/ui/uiengine/model/eabi/glxmediamodelu.def	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/uiengine/model/eabi/glxmediamodelu.def	Thu Jul 22 16:33:32 2010 +0100
@@ -4,32 +4,39 @@
 	_ZN13GlxMediaModel11qt_metacastEPKc @ 3 NONAME
 	_ZN13GlxMediaModel12itemUpdated1Ei16GlxTBContextType @ 4 NONAME
 	_ZN13GlxMediaModel12itemsRemovedEii @ 5 NONAME
-	_ZN13GlxMediaModel13setFocusIndexERK11QModelIndex @ 6 NONAME
-	_ZN13GlxMediaModel14setContextModeE14GlxContextMode @ 7 NONAME
-	_ZN13GlxMediaModel14updateItemIconEiP6HbIcon16GlxTBContextType @ 8 NONAME
-	_ZN13GlxMediaModel16addExternalItemsEP5QListI18GlxInterfaceParamsE @ 9 NONAME
-	_ZN13GlxMediaModel16setSelectedIndexERK11QModelIndex @ 10 NONAME
-	_ZN13GlxMediaModel16staticMetaObjectE @ 11 NONAME DATA 16
-	_ZN13GlxMediaModel18clearExternalItemsEv @ 12 NONAME
-	_ZN13GlxMediaModel19getStaticMetaObjectEv @ 13 NONAME
-	_ZN13GlxMediaModel7setDataERK11QModelIndexRK8QVarianti @ 14 NONAME
-	_ZN13GlxMediaModelC1ER12GlxModelParm @ 15 NONAME
-	_ZN13GlxMediaModelC2ER12GlxModelParm @ 16 NONAME
-	_ZN13GlxMediaModelD0Ev @ 17 NONAME
-	_ZN13GlxMediaModelD1Ev @ 18 NONAME
-	_ZN13GlxMediaModelD2Ev @ 19 NONAME
-	_ZNK13GlxMediaModel10metaObjectEv @ 20 NONAME
-	_ZNK13GlxMediaModel11columnCountERK11QModelIndex @ 21 NONAME
-	_ZNK13GlxMediaModel13GetFsIconItemEi16GlxTBContextType @ 22 NONAME
-	_ZNK13GlxMediaModel13getFocusIndexEv @ 23 NONAME
-	_ZNK13GlxMediaModel13iconAvailableEiP6HbIcon16GlxTBContextType @ 24 NONAME
-	_ZNK13GlxMediaModel15GetGridIconItemEi16GlxTBContextType @ 25 NONAME
-	_ZNK13GlxMediaModel19GetExternalIconItemEi16GlxTBContextType @ 26 NONAME
-	_ZNK13GlxMediaModel4dataERK11QModelIndexi @ 27 NONAME
-	_ZNK13GlxMediaModel5indexEiiRK11QModelIndex @ 28 NONAME
-	_ZNK13GlxMediaModel6parentERK11QModelIndex @ 29 NONAME
-	_ZNK13GlxMediaModel8rowCountERK11QModelIndex @ 30 NONAME
-	_ZTI13GlxMediaModel @ 31 NONAME
-	_ZTV13GlxMediaModel @ 32 NONAME
-	_ZN13GlxMediaModel13itemCorruptedEi @ 33 NONAME
+	_ZN13GlxMediaModel13itemCorruptedEi @ 6 NONAME
+	_ZN13GlxMediaModel13setFocusIndexERK11QModelIndex @ 7 NONAME
+	_ZN13GlxMediaModel14modelpopulatedEv @ 8 NONAME
+	_ZN13GlxMediaModel14setContextModeE14GlxContextMode @ 9 NONAME
+	_ZN13GlxMediaModel14updateItemIconEiP6HbIcon16GlxTBContextType @ 10 NONAME
+	_ZN13GlxMediaModel16addExternalItemsEP5QListI18GlxInterfaceParamsE @ 11 NONAME
+	_ZN13GlxMediaModel16setSelectedIndexERK11QModelIndex @ 12 NONAME
+	_ZN13GlxMediaModel16staticMetaObjectE @ 13 NONAME DATA 16
+	_ZN13GlxMediaModel17albumTitleUpdatedE7QString @ 14 NONAME
+	_ZN13GlxMediaModel18clearExternalItemsEv @ 15 NONAME
+	_ZN13GlxMediaModel19albumTitleAvailableE7QString @ 16 NONAME
+	_ZN13GlxMediaModel19getStaticMetaObjectEv @ 17 NONAME
+	_ZN13GlxMediaModel7setDataERK11QModelIndexRK8QVarianti @ 18 NONAME
+	_ZN13GlxMediaModel9populatedEv @ 19 NONAME
+	_ZN13GlxMediaModelC1ER12GlxModelParm @ 20 NONAME
+	_ZN13GlxMediaModelC2ER12GlxModelParm @ 21 NONAME
+	_ZN13GlxMediaModelD0Ev @ 22 NONAME
+	_ZN13GlxMediaModelD1Ev @ 23 NONAME
+	_ZN13GlxMediaModelD2Ev @ 24 NONAME
+	_ZNK13GlxMediaModel10metaObjectEv @ 25 NONAME
+	_ZNK13GlxMediaModel11columnCountERK11QModelIndex @ 26 NONAME
+	_ZNK13GlxMediaModel13GetFsIconItemEi16GlxTBContextType @ 27 NONAME
+	_ZNK13GlxMediaModel13getFocusIndexEv @ 28 NONAME
+	_ZNK13GlxMediaModel13iconAvailableEiP6HbIcon16GlxTBContextType @ 29 NONAME
+	_ZNK13GlxMediaModel15GetGridIconItemEi16GlxTBContextType @ 30 NONAME
+	_ZNK13GlxMediaModel19GetExternalIconItemEi16GlxTBContextType @ 31 NONAME
+	_ZNK13GlxMediaModel4dataERK11QModelIndexi @ 32 NONAME
+	_ZNK13GlxMediaModel5indexEiiRK11QModelIndex @ 33 NONAME
+	_ZNK13GlxMediaModel6parentERK11QModelIndex @ 34 NONAME
+	_ZNK13GlxMediaModel8rowCountERK11QModelIndex @ 35 NONAME
+	_ZTI13GlxMediaModel @ 36 NONAME
+	_ZTV13GlxMediaModel @ 37 NONAME
+	_ZN13GlxMediaModel17removeContextModeE14GlxContextMode @ 38 NONAME
+	_ZN13GlxMediaModel17updateDetailItemsEv @ 39 NONAME
+	_ZN13GlxMediaModel17updateDetailsViewEv @ 40 NONAME
 
--- a/ui/uiengine/model/eabi/glxmodelwrapperu.def	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/uiengine/model/eabi/glxmodelwrapperu.def	Thu Jul 22 16:33:32 2010 +0100
@@ -3,32 +3,32 @@
 	_ZN15GlxModelWrapper11qt_metacastEPKc @ 2 NONAME
 	_ZN15GlxModelWrapper11rowsRemovedERK11QModelIndexii @ 3 NONAME
 	_ZN15GlxModelWrapper12rowsInsertedERK11QModelIndexii @ 4 NONAME
-	_ZN15GlxModelWrapper14connectToModelEv @ 5 NONAME
-	_ZN15GlxModelWrapper14modelDestroyedEv @ 6 NONAME
-	_ZN15GlxModelWrapper14scrollingEndedEv @ 7 NONAME
-	_ZN15GlxModelWrapper16scrollingStartedEv @ 8 NONAME
-	_ZN15GlxModelWrapper16staticMetaObjectE @ 9 NONAME DATA 16
-	_ZN15GlxModelWrapper18dataChangedinModelE11QModelIndexS0_ @ 10 NONAME
-	_ZN15GlxModelWrapper19disConnectFromModelEv @ 11 NONAME
-	_ZN15GlxModelWrapper19getStaticMetaObjectEv @ 12 NONAME
-	_ZN15GlxModelWrapper20rowsAboutToBeRemovedERK11QModelIndexii @ 13 NONAME
-	_ZN15GlxModelWrapper21rowsAboutToBeInsertedERK11QModelIndexii @ 14 NONAME
-	_ZN15GlxModelWrapper7setDataERK11QModelIndexRK8QVarianti @ 15 NONAME
-	_ZN15GlxModelWrapper8setModelEP18QAbstractItemModel @ 16 NONAME
-	_ZN15GlxModelWrapper8setRolesEii @ 17 NONAME
-	_ZN15GlxModelWrapperC1Ev @ 18 NONAME
-	_ZN15GlxModelWrapperC2Ev @ 19 NONAME
-	_ZN15GlxModelWrapperD0Ev @ 20 NONAME
-	_ZN15GlxModelWrapperD1Ev @ 21 NONAME
-	_ZN15GlxModelWrapperD2Ev @ 22 NONAME
-	_ZNK15GlxModelWrapper10metaObjectEv @ 23 NONAME
-	_ZNK15GlxModelWrapper11columnCountERK11QModelIndex @ 24 NONAME
-	_ZNK15GlxModelWrapper14basemodelindexEiiRK11QModelIndex @ 25 NONAME
-	_ZNK15GlxModelWrapper4dataERK11QModelIndexi @ 26 NONAME
-	_ZNK15GlxModelWrapper5indexEiiRK11QModelIndex @ 27 NONAME
-	_ZNK15GlxModelWrapper6parentERK11QModelIndex @ 28 NONAME
-	_ZNK15GlxModelWrapper8rowCountERK11QModelIndex @ 29 NONAME
-	_ZTI15GlxModelWrapper @ 30 NONAME
-	_ZTV15GlxModelWrapper @ 31 NONAME
-	_ZN15GlxModelWrapper13resetTheModelEv @ 32 NONAME
+	_ZN15GlxModelWrapper13resetTheModelEv @ 5 NONAME
+	_ZN15GlxModelWrapper14connectToModelEv @ 6 NONAME
+	_ZN15GlxModelWrapper14modelDestroyedEv @ 7 NONAME
+	_ZN15GlxModelWrapper14scrollingEndedEv @ 8 NONAME
+	_ZN15GlxModelWrapper16scrollingStartedEv @ 9 NONAME
+	_ZN15GlxModelWrapper16staticMetaObjectE @ 10 NONAME DATA 16
+	_ZN15GlxModelWrapper18dataChangedinModelE11QModelIndexS0_ @ 11 NONAME
+	_ZN15GlxModelWrapper19disConnectFromModelEv @ 12 NONAME
+	_ZN15GlxModelWrapper19getStaticMetaObjectEv @ 13 NONAME
+	_ZN15GlxModelWrapper20rowsAboutToBeRemovedERK11QModelIndexii @ 14 NONAME
+	_ZN15GlxModelWrapper21rowsAboutToBeInsertedERK11QModelIndexii @ 15 NONAME
+	_ZN15GlxModelWrapper7setDataERK11QModelIndexRK8QVarianti @ 16 NONAME
+	_ZN15GlxModelWrapper8setModelEP18QAbstractItemModel @ 17 NONAME
+	_ZN15GlxModelWrapper8setRolesEii @ 18 NONAME
+	_ZN15GlxModelWrapperC1Ev @ 19 NONAME
+	_ZN15GlxModelWrapperC2Ev @ 20 NONAME
+	_ZN15GlxModelWrapperD0Ev @ 21 NONAME
+	_ZN15GlxModelWrapperD1Ev @ 22 NONAME
+	_ZN15GlxModelWrapperD2Ev @ 23 NONAME
+	_ZNK15GlxModelWrapper10metaObjectEv @ 24 NONAME
+	_ZNK15GlxModelWrapper11columnCountERK11QModelIndex @ 25 NONAME
+	_ZNK15GlxModelWrapper14basemodelindexEiiRK11QModelIndex @ 26 NONAME
+	_ZNK15GlxModelWrapper4dataERK11QModelIndexi @ 27 NONAME
+	_ZNK15GlxModelWrapper5indexEiiRK11QModelIndex @ 28 NONAME
+	_ZNK15GlxModelWrapper6parentERK11QModelIndex @ 29 NONAME
+	_ZNK15GlxModelWrapper8rowCountERK11QModelIndex @ 30 NONAME
+	_ZTI15GlxModelWrapper @ 31 NONAME
+	_ZTV15GlxModelWrapper @ 32 NONAME
 
--- a/ui/uiengine/model/favmediamodel/favmediamodel.pro	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/uiengine/model/favmediamodel/favmediamodel.pro	Thu Jul 22 16:33:32 2010 +0100
@@ -35,6 +35,8 @@
 TARGET.UID3 = 0x20000A06
 TARGET.CAPABILITY = ALL -TCB 
 TARGET.EPOCALLOWDLLDATA = 1
+MMP_RULES += SMPSAFE 
+
 }
 # Input
 HEADERS += inc/glxfavmediamodel.h 
@@ -43,3 +45,12 @@
 SOURCES += src/glxfavmediamodel.cpp 
 
 DEFINES += QT_NO_DEBUG_OUTPUT QT_NO_WARNING_OUTPUT
+
+defBlock = \      
+"$${LITERAL_HASH}if defined(EABI)" \
+"DEFFILE  ../eabi/glxfavmediamodel.def" \
+	 "$${LITERAL_HASH}else" \
+	 "DEFFILE  ../bwins/glxfavmediamodel.def" \
+             "$${LITERAL_HASH}endif"
+	
+MMP_RULES += defBlock
--- a/ui/uiengine/model/listmodel/inc/glxalbummodel.h	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/uiengine/model/listmodel/inc/glxalbummodel.h	Thu Jul 22 16:33:32 2010 +0100
@@ -67,10 +67,12 @@
     
 signals :
     void iconAvailable(int itemIndex, HbIcon* itemIcon, GlxTBContextType tbContextType) const;
+    void listPopulated();
 public slots:
     void itemUpdated1(int mlIndex, GlxTBContextType tbContextType);
     void itemsAdded(int startIndex, int endIndex);
     void itemsRemoved(int startIndex, int endIndex);
+    void modelPopulated();
 protected:
     
 private slots:
@@ -80,6 +82,7 @@
     GlxContextMode mContextMode;
     HbIcon* mDefaultIcon;
     QCache<int, HbIcon> itemIconCache;
+    int mTempVisibleWindowIndex;
 };
 
 #endif /* GLXALBUMMODEL_H */
--- a/ui/uiengine/model/listmodel/listmodel.pro	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/uiengine/model/listmodel/listmodel.pro	Thu Jul 22 16:33:32 2010 +0100
@@ -32,9 +32,19 @@
 TARGET.UID3 = 0x20000A0A
 TARGET.CAPABILITY = ALL -TCB
 TARGET.EPOCALLOWDLLDATA = 1
+MMP_RULES += SMPSAFE
 }
 # Input
 HEADERS += inc/glxalbummodel.h 
 SOURCES += src/glxalbummodel.cpp 
 
-DEFINES += QT_NO_DEBUG_OUTPUT QT_NO_WARNING_OUTPUT
\ No newline at end of file
+DEFINES += QT_NO_DEBUG_OUTPUT QT_NO_WARNING_OUTPUT
+
+defBlock = \      
+"$${LITERAL_HASH}if defined(EABI)" \
+"DEFFILE  ../eabi/glxlistmodel.def" \
+	 "$${LITERAL_HASH}else" \
+	 "DEFFILE  ../bwins/glxlistmodel.def" \
+             "$${LITERAL_HASH}endif"
+	
+MMP_RULES += defBlock
--- a/ui/uiengine/model/listmodel/src/glxalbummodel.cpp	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/uiengine/model/listmodel/src/glxalbummodel.cpp	Thu Jul 22 16:33:32 2010 +0100
@@ -48,8 +48,11 @@
 	qDebug("insertItems() connection status %d", err);
 	err = connect(mMLWrapper, SIGNAL(removeItems(int, int)), this, SLOT(itemsRemoved(int, int)));
 	qDebug("removeItems() connection status %d", err);
+    err = connect(mMLWrapper, SIGNAL(populated()), this, SLOT(modelPopulated()));
+	qDebug("populated() connection status %d", err);
     err = connect(this, SIGNAL(iconAvailable(int, HbIcon*, GlxTBContextType)), this, SLOT(updateItemIcon(int, HbIcon*, GlxTBContextType)));
 	qDebug("iconAvailable() connection status %d", err);
+	mTempVisibleWindowIndex = 0;
     itemIconCache.setMaxCost(50);
 }
 
@@ -62,6 +65,7 @@
 	err = disconnect(mMLWrapper, SIGNAL(insertItems(int, int)), this, SLOT(itemsAdded(int, int)));
 	err = disconnect(mMLWrapper, SIGNAL(removeItems(int, int)), this, SLOT(itemsRemoved(int, int)));
     err = disconnect(this, SIGNAL(iconAvailable(int, HbIcon*, GlxTBContextType)), this, SLOT(updateItemIcon(int, HbIcon*, GlxTBContextType)));
+    err = disconnect(mMLWrapper, SIGNAL(populated()), this, SLOT(modelPopulated()));
 	delete mMLWrapper;
     mMLWrapper = NULL;
     itemIconCache.clear();
@@ -149,6 +153,8 @@
         
     case GlxSystemItemRole :
         return mMLWrapper->isSystemItem( getFocusIndex().row() );
+    case GlxVisualWindowIndex :
+        return mMLWrapper->getVisibleWindowIndex();
            
     default :       
         return QVariant();
@@ -186,6 +192,12 @@
             return TRUE;
         }
     }
+    if ( GlxTempVisualWindowIndex == role ) {
+        if ( value.isValid() && value.canConvert<int> () ) {
+        mTempVisibleWindowIndex = value.value <int> (); 
+            return TRUE;
+        }
+    }
     return FALSE;
 }
 
@@ -232,6 +244,14 @@
     return index(mMLWrapper->getFocusIndex(), 0);
 }
 
+void GlxAlbumModel::modelPopulated()
+{
+    if ( mTempVisibleWindowIndex!=-1) {
+        mMLWrapper->setVisibleWindowIndex(mTempVisibleWindowIndex);
+        mTempVisibleWindowIndex = -1;
+        emit listPopulated();
+    }
+}
 void GlxAlbumModel::itemUpdated1(int mlIndex,GlxTBContextType tbContextType  )
 {
 	Q_UNUSED(tbContextType);
--- a/ui/uiengine/model/mediamodel/inc/glxmediamodel.h	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/uiengine/model/mediamodel/inc/glxmediamodel.h	Thu Jul 22 16:33:32 2010 +0100
@@ -35,6 +35,7 @@
 class HbIcon;
 class GlxModelParm;
 class GlxMLWrapper;
+class GlxDRMUtilityWrapper;
 #include <QCache>
 #include <QVector>
 
@@ -64,6 +65,10 @@
 	* for checking if the item is editab
 	*/
 
+signals :
+	void albumTitleAvailable(QString aTitle);
+	void populated();
+
 private:
 	HbIcon* GetGridIconItem(int itemIndex, GlxTBContextType tbContextType) const;
 	HbIcon* GetFsIconItem(int itemIndex,GlxTBContextType tbContextType)const;
@@ -72,6 +77,10 @@
  * for setting the attribute context mode will be used mainly for retreiving thumbnail of different sizes.
  */
     void setContextMode(GlxContextMode contextMode);
+	/*
+	 *Removes the context
+	 */
+    void removeContextMode(GlxContextMode contextMode);
     void setFocusIndex(const QModelIndex &index);
     QModelIndex getFocusIndex() const;
     void setSelectedIndex(const QModelIndex &index);
@@ -80,11 +89,21 @@
 	
 signals :
     void iconAvailable(int itemIndex, HbIcon* itemIcon, GlxTBContextType tbContextType) const;
+	/*
+	 *signal to update the details view
+	 */
+    void updateDetailsView();
 public slots:
 	void itemUpdated1(int mlIndex, GlxTBContextType tbContextType);
 	void itemsAdded(int startIndex, int endIndex);
 	void itemsRemoved(int startIndex, int endIndex);
 	void itemCorrupted(int itemIndex);
+	void albumTitleUpdated(QString aTitle);
+	void modelpopulated();
+	/*
+	 *Emits signal to update the details view
+	 */
+	void updateDetailItems();
 protected:
 	
 private slots:
@@ -101,6 +120,8 @@
 	int externalDataCount;
 	int mFocusIndex;
 	int mSubState;
+	GlxDRMUtilityWrapper* mDRMUtilityWrapper;
+	int mTempVisibleWindowIndex;
 };
 
 
--- a/ui/uiengine/model/mediamodel/mediamodel.pro	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/uiengine/model/mediamodel/mediamodel.pro	Thu Jul 22 16:33:32 2010 +0100
@@ -20,12 +20,15 @@
 INCLUDEPATH += . ../../../inc \
 		 ../../../../inc \
              ../../../../loggers\loggerqt\inc \
-		 ../../medialistwrapper/inc 
+		 ../../medialistwrapper/inc \
+		 ../../drmutilitywrapper/inc
 
 CONFIG += hb
 
 LIBS += -lglxmedialistwrapper.dll \
-        -lglxloggerqt.dll      
+	-lglxdrmutilitywrapper.dll \
+        -lglxloggerqt.dll \
+	-lglximageviewermanager.dll		
 
 
 DEFINES += BUILD_MEDIAMODEL
@@ -35,6 +38,7 @@
 TARGET.UID3 = 0x20000A08
 TARGET.CAPABILITY = ALL -TCB 
 TARGET.EPOCALLOWDLLDATA = 1
+MMP_RULES += SMPSAFE
 }
 # Input
 HEADERS += inc/glxmediamodel.h 
@@ -43,3 +47,13 @@
 SOURCES += src/glxmediamodel.cpp 
 
 DEFINES += QT_NO_DEBUG_OUTPUT QT_NO_WARNING_OUTPUT
+
+defBlock = \      
+"$${LITERAL_HASH}if defined(EABI)" \
+"DEFFILE  ../eabi/glxmediamodel.def" \
+	 "$${LITERAL_HASH}else" \
+	 "DEFFILE  ../bwins/glxmediamodel.def" \
+             "$${LITERAL_HASH}endif"
+	
+MMP_RULES += defBlock
+
--- a/ui/uiengine/model/mediamodel/src/glxmediamodel.cpp	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/uiengine/model/mediamodel/src/glxmediamodel.cpp	Thu Jul 22 16:33:32 2010 +0100
@@ -23,16 +23,17 @@
 #include <glxmodelparm.h>
 #include <QCache>
 #include <QDebug>
-#include <hal.h>
-#include <hal_data.h>
 #include <glxmlwrapper.h>
+#include"glxdrmutilitywrapper.h"
 
 #include <glxfiltergeneraldefs.h>
 
+#include <glximageviewermanager.h>
 //#define GLXPERFORMANCE_LOG  
 #include <glxperformancemacro.h>
 
 #include "glxicondefs.h" //Contains the icon names/Ids
+#include<glxviewids.h>
 
 GlxMediaModel::GlxMediaModel(GlxModelParm & modelParm)
 {
@@ -41,7 +42,7 @@
 	mMLWrapper = new GlxMLWrapper(modelParm.collection(),0,EGlxFilterImage);
 	mMLWrapper->setContextMode( modelParm.contextMode() );
 	mContextMode = modelParm.contextMode( ) ; 
-	
+	mDRMUtilityWrapper = new GlxDRMUtilityWrapper();
 	int err = connect(mMLWrapper, SIGNAL(updateItem(int, GlxTBContextType)), this, SLOT(itemUpdated1(int, GlxTBContextType)));
 	qDebug("updateItem() connection status %d", err);
 	err = connect(mMLWrapper, SIGNAL(itemCorrupted(int)), this, SLOT(itemCorrupted(int)));
@@ -52,7 +53,10 @@
 	qDebug("updateItem() connection status %d", err);
 	err = connect(this, SIGNAL(iconAvailable(int, HbIcon*, GlxTBContextType)), this, SLOT(updateItemIcon(int, HbIcon*, GlxTBContextType)));
 	qDebug("iconAvailable() connection status %d", err);
-	//itemadded.resize(mMLWrapper->getItemCount());
+	err = connect( mMLWrapper, SIGNAL(updateAlbumTitle(QString)), this, SLOT(albumTitleUpdated(QString)));
+	qDebug("updateAlbumTitle() connection status %d", err);
+	err = connect(mMLWrapper, SIGNAL(populated()), this, SLOT(modelpopulated()));
+	err = connect(mMLWrapper, SIGNAL(updateDetails()), this, SLOT(updateDetailItems()));
 	
 	itemIconCache.setMaxCost(20);  //Changed While Doing Media Wall
 	itemFsIconCache.setMaxCost(5);
@@ -64,44 +68,62 @@
 	externalDataCount = 0;
 	mFocusIndex = -1;
 	mSubState = -1;
+	mTempVisibleWindowIndex = 0;
 }
 
 GlxMediaModel::~GlxMediaModel()
 {
     //itemadded.clear();
 	qDebug("GlxMediaModel::~GlxMediaModel");
-	int freeMemory = 0;
-	int err1 = HAL::Get( HALData::EMemoryRAMFree, freeMemory );
-	qDebug("####mediaModel : Memory available before cache cleanup  = %d and error is = %d ", freeMemory , err1 );
 	itemIconCache.clear();
 	itemFsIconCache.clear();
 	delete m_DefaultIcon;
 	m_DefaultIcon = NULL;
 	clearExternalItems();
-	err1 = HAL::Get( HALData::EMemoryRAMFree, freeMemory );
-	qDebug("####mediaModel : Memory available after cache cleanup  = %d and error is = %d ", freeMemory , err1 );
-    int err = disconnect(mMLWrapper, SIGNAL(updateIcon(int, HbIcon*)), this, SLOT(itemUpdated1(int, HbIcon*)));
+  int err = disconnect(mMLWrapper, SIGNAL(updateItem(int, GlxTBContextType)), this, SLOT(itemUpdated1(int, GlxTBContextType)));
 	err = disconnect(mMLWrapper, SIGNAL(itemCorrupted(int)), this, SLOT(itemCorrupted(int)));
 	err = disconnect(mMLWrapper, SIGNAL(insertItems(int, int)), this, SLOT(itemsAdded(int, int)));
 	err = disconnect(mMLWrapper, SIGNAL(removeItems(int, int)), this, SLOT(itemsRemoved(int, int)));
 	err = disconnect(this, SIGNAL(iconAvailable(int, HbIcon*, GlxTBContextType)), this, SLOT(updateItemIcon(int, HbIcon*, GlxTBContextType)));
+	err = disconnect(mMLWrapper, SIGNAL(updateAlbumTitle(QString)), this, SLOT(albumTitleUpdated(QString)));	    
+	err = disconnect(mMLWrapper, SIGNAL(populated()), this, SLOT(modelpopulated()));
+	err = disconnect(mMLWrapper, SIGNAL(updateDetails()), this, SLOT(updateDetailItems()));
     delete mMLWrapper;
-
+	delete mDRMUtilityWrapper;
 }
 
+//------------------------------------------------------------------------------------------------------------
+//setContextMode
+//------------------------------------------------------------------------------------------------------------
 void GlxMediaModel::setContextMode(GlxContextMode contextMode)
 {
-	if(mContextMode != contextMode)	{
+    if(contextMode == GlxContextComment)
+        {
+           mMLWrapper->setContextMode(contextMode);
+        }
+    else 
+        {
+      if(mContextMode != contextMode)	{
+        
 		itemFsIconCache.clear();
 		mMLWrapper->setContextMode(contextMode);
 		mContextMode = contextMode;
 		if ( mContextMode == GlxContextLsGrid || mContextMode == GlxContextPtGrid ) {
             itemIconCache.clear();
             //emit dataChanged( index( 0, 0), index( rowCount() - 1, 0) );  // Not Needed for HgWidget
-        }
-	}
+       }
+	  }
+     }
 }
 
+//------------------------------------------------------------------------------------------------------------
+//removeContextMode
+//------------------------------------------------------------------------------------------------------------
+void GlxMediaModel::removeContextMode(GlxContextMode contextMode)
+    {
+     mMLWrapper->removeContextMode(contextMode);
+    }
+
 //to add external data to the model
 void GlxMediaModel::addExternalItems(GlxExternalData* externalItems)
 {
@@ -157,6 +179,15 @@
 //todo refactor this whole function ... too many return statements are not good
 QVariant GlxMediaModel::data(const QModelIndex &index, int role) const
 {
+    if (role == GlxViewTitle)
+        {
+        return mMLWrapper->retrieveViewTitle();
+        }
+
+    if(role == GlxPopulated) {
+        return mMLWrapper->IsPopulated();
+    }
+
     if ( role == GlxSubStateRole ) {
         return mSubState;
     }
@@ -170,8 +201,16 @@
     }
     
     if ( role == GlxDefaultImage ) {
+        if(!m_DefaultIcon->isNull()) {
+            // this image Creation is Slow. 
+            // But what to do, Q class's Does not undersatnd our Localised File names
         return m_DefaultIcon->pixmap().toImage().convertToFormat(QImage::Format_ARGB32_Premultiplied);
     }
+        else {
+            return QImage();
+        }
+            
+    }
 
     HbIcon* itemIcon = NULL;
     QImage itemImage;
@@ -292,7 +331,18 @@
     if (role == GlxHdmiBitmap) {
         return mMLWrapper->RetrieveBitmap(itemIndex);
     }
-	    
+    
+    if (role == GlxTimeRole) {
+        return mMLWrapper->retrieveItemTime(itemIndex);
+    }
+	
+    if (role == GlxSizeRole) {
+            return mMLWrapper->retrieveItemSize(itemIndex);
+        }
+    
+    if (role == GlxDescRole) {
+              return mMLWrapper->retrieveListDesc(itemIndex);
+          }
     return QVariant();
 }
 
@@ -314,8 +364,30 @@
 
 HbIcon* GlxMediaModel::GetFsIconItem(int itemIndex, GlxTBContextType tbContextType) const
 {
-	HbIcon* itemIcon = itemFsIconCache[itemIndex];  //Initialize icon from the Cache will be NULL if Item not present
-	if (!itemIcon) {
+	HbIcon* itemIcon = NULL;  //Initialize icon from the Cache will be NULL if Item not present
+
+    bool drmProtected = mMLWrapper->IsDrmProtected(itemIndex);
+    if(drmProtected)
+        {
+        QString imagePath = mMLWrapper->retrieveItemUri(itemIndex);
+		bool rightValid = mMLWrapper->IsDrmValid(itemIndex);
+        if(!rightValid)
+            {
+            //show error note here
+            if(itemIndex == mFocusIndex )
+                mDRMUtilityWrapper->ShowRightsInfo(imagePath);
+            return itemIcon;
+            }
+        else
+            {
+            //consumeDrmRights(imagePath);
+            mDRMUtilityWrapper->ConsumeRights(imagePath);
+			bool rightValid = mDRMUtilityWrapper->ItemRightsValidityCheck(imagePath,true);
+			mMLWrapper->setDrmValid(itemIndex,rightValid);
+            }
+        }
+    itemIcon = itemFsIconCache[itemIndex];  //Initialize icon from the Cache will be NULL if Item not present
+    if (!itemIcon) {
 		itemIcon =  mMLWrapper->retrieveItemIcon(itemIndex, tbContextType);
 		if(itemIcon){
             emit iconAvailable(itemIndex,itemIcon, tbContextType);
@@ -359,6 +431,24 @@
 	emit dataChanged(index(itemIndex+externalDataCount,0),index(itemIndex+externalDataCount,0));	
 }
 
+void GlxMediaModel::modelpopulated()
+{
+    if ( mTempVisibleWindowIndex!=-1) {
+        mMLWrapper->setVisibleWindowIndex(mTempVisibleWindowIndex);
+        mTempVisibleWindowIndex = -1;
+	}
+    emit populated();
+}
+
+//------------------------------------------------------------------------------------------------------------
+//updateDetailItems
+//------------------------------------------------------------------------------------------------------------
+void GlxMediaModel::updateDetailItems()
+{
+    qDebug("GlxMediaModel::updateDetailItems");
+    emit updateDetailsView();
+}
+
 void GlxMediaModel::itemsAdded(int startIndex, int endIndex)
 {
 	qDebug("GlxMediaModel::itemsAdded %d %d", startIndex, endIndex);
@@ -401,15 +491,19 @@
 	}
 }
 
+void GlxMediaModel::albumTitleUpdated(QString aTitle)
+{
+    emit albumTitleAvailable(aTitle);
+}
 
 void GlxMediaModel::setFocusIndex(const QModelIndex &index)
 {
 	qDebug("GlxMediaModel::setFocusIndex%d", index.row());
 	int itemIndex = index.row();
-	
+	int mlIndex = -1;
 	if(itemIndex >=externalDataCount)
 	{
-		int mlIndex = itemIndex - externalDataCount;
+		mlIndex = itemIndex - externalDataCount;
 		mMLWrapper->setFocusIndex(mlIndex);
 		mFocusIndex = -1;
 	}
@@ -417,10 +511,22 @@
 		mFocusIndex = itemIndex;
 		if(rowCount() > externalDataCount) {
 			mMLWrapper->setFocusIndex(0);
+			mlIndex = 0;
 		}
 		
 	}
-
+	if(mSubState != IMAGEVIEWER_S ){
+     if( mMLWrapper->IsDrmProtected(mlIndex) && (!mMLWrapper->IsDrmValid(mlIndex)) )
+            {
+            QString imagePath = mMLWrapper->retrieveItemUri(mlIndex);
+            mDRMUtilityWrapper->ShowRightsInfo(imagePath);
+            }
+	}else {
+        CGlxImageViewerManager* CGlxImageViewerManager = CGlxImageViewerManager::InstanceL();
+        const TDesC& title = CGlxImageViewerManager->ImageUri()->Des();
+        QString imagePath = QString::fromUtf16(title.Ptr(),title.Length());
+        mDRMUtilityWrapper->ShowRightsInfo(imagePath);
+	}
 }
 
 QModelIndex GlxMediaModel::getFocusIndex() const
@@ -455,6 +561,14 @@
         }
     }
     
+    if ( GlxRemoveContextRole == role ) {
+            if ( value.isValid() &&  value.canConvert <int> () ) {
+                removeContextMode( (GlxContextMode) value.value <int> () );
+                return TRUE;
+            }
+        }
+    
+    
     if ( GlxFocusIndexRole == role ) {
         if ( value.isValid() &&  value.canConvert <int> () ) {
             setFocusIndex( index( value.value <int> (), 0) );
@@ -482,6 +596,12 @@
         mSubState = value.value <int> () ;
         return TRUE;
     }
+    if ( GlxTempVisualWindowIndex == role ) {
+            if ( value.isValid() && value.canConvert<int> () ) {
+            mTempVisibleWindowIndex = value.value <int> (); 
+            return TRUE;
+            }
+    }
 
     return FALSE;
 }
--- a/ui/uiengine/model/modelwrapper/modelwrapper.pro	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/uiengine/model/modelwrapper/modelwrapper.pro	Thu Jul 22 16:33:32 2010 +0100
@@ -30,9 +30,19 @@
 TARGET.UID3 = 0x2000718C
 TARGET.CAPABILITY = ALL -TCB
 TARGET.EPOCALLOWDLLDATA = 1
+MMP_RULES += SMPSAFE
 }
 # Input
 HEADERS += inc/glxmodelwrapper.h 
 SOURCES += src/glxmodelwrapper.cpp 
 
-DEFINES += QT_NO_DEBUG_OUTPUT QT_NO_WARNING_OUTPUT
\ No newline at end of file
+DEFINES += QT_NO_DEBUG_OUTPUT QT_NO_WARNING_OUTPUT
+
+defBlock = \      
+"$${LITERAL_HASH}if defined(EABI)" \
+"DEFFILE  ../eabi/glxmodelwrapper.def" \
+	 "$${LITERAL_HASH}else" \
+	 "DEFFILE  ../bwins/glxmodelwrapper.def" \
+             "$${LITERAL_HASH}endif"
+	
+MMP_RULES += defBlock
--- a/ui/uiengine/uiengine.pro	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/uiengine/uiengine.pro	Thu Jul 22 16:33:32 2010 +0100
@@ -16,5 +16,6 @@
 #*/ 
 TEMPLATE    = subdirs
 CONFIG += ordered
-SUBDIRS	    = medialistwrapper \
+SUBDIRS	    = drmutilitywrapper \
+              medialistwrapper \
               model
--- a/ui/viewmanagement/bwins/glxstatehandleru.def	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/viewmanagement/bwins/glxstatehandleru.def	Thu Jul 22 16:33:32 2010 +0100
@@ -3,33 +3,40 @@
 	?actionTriggered@GlxStateManager@@QAEXH@Z @ 2 NONAME ; void GlxStateManager::actionTriggered(int)
 	?setupItemsSignal@GlxStateManager@@IAEXXZ @ 3 NONAME ; void GlxStateManager::setupItemsSignal(void)
 	??_EGlxStateManager@@UAE@I@Z @ 4 NONAME ; GlxStateManager::~GlxStateManager(unsigned int)
-	?goBack@GlxStateManager@@QAEXHH@Z @ 5 NONAME ; void GlxStateManager::goBack(int, int)
-	?enterMarkingMode@GlxStateManager@@QAEXXZ @ 6 NONAME ; void GlxStateManager::enterMarkingMode(void)
-	??1GlxStateManager@@UAE@XZ @ 7 NONAME ; GlxStateManager::~GlxStateManager(void)
-	?getStaticMetaObject@GlxStateManager@@SAABUQMetaObject@@XZ @ 8 NONAME ; struct QMetaObject const & GlxStateManager::getStaticMetaObject(void)
-	?trUtf8@GlxStateManager@@SA?AVQString@@PBD0H@Z @ 9 NONAME ; class QString GlxStateManager::trUtf8(char const *, char const *, int)
-	?eventHandler@GlxStateManager@@AAEXAAH@Z @ 10 NONAME ; void GlxStateManager::eventHandler(int &)
-	?executeCommand@GlxStateManager@@QAE_NH@Z @ 11 NONAME ; bool GlxStateManager::executeCommand(int)
-	?setupItems@GlxStateManager@@QAEXXZ @ 12 NONAME ; void GlxStateManager::setupItems(void)
-	?previousState@GlxStateManager@@QAEXXZ @ 13 NONAME ; void GlxStateManager::previousState(void)
-	?createState@GlxStateManager@@AAEPAVGlxState@@H@Z @ 14 NONAME ; class GlxState * GlxStateManager::createState(int)
-	?exitApplication@GlxStateManager@@AAEXXZ @ 15 NONAME ; void GlxStateManager::exitApplication(void)
-	?changeState@GlxStateManager@@QAEXHH@Z @ 16 NONAME ; void GlxStateManager::changeState(int, int)
-	?qt_metacall@GlxStateManager@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 17 NONAME ; int GlxStateManager::qt_metacall(enum QMetaObject::Call, int, void * *)
-	??0GlxStateManager@@QAE@XZ @ 18 NONAME ; GlxStateManager::GlxStateManager(void)
-	?cleanupExternal@GlxStateManager@@QAEXXZ @ 19 NONAME ; void GlxStateManager::cleanupExternal(void)
-	?trUtf8@GlxStateManager@@SA?AVQString@@PBD0@Z @ 20 NONAME ; class QString GlxStateManager::trUtf8(char const *, char const *)
-	?qt_metacast@GlxStateManager@@UAEPAXPBD@Z @ 21 NONAME ; void * GlxStateManager::qt_metacast(char const *)
-	?staticMetaObject@GlxStateManager@@2UQMetaObject@@B @ 22 NONAME ; struct QMetaObject const GlxStateManager::staticMetaObject
-	?tr@GlxStateManager@@SA?AVQString@@PBD0H@Z @ 23 NONAME ; class QString GlxStateManager::tr(char const *, char const *, int)
-	?tr@GlxStateManager@@SA?AVQString@@PBD0@Z @ 24 NONAME ; class QString GlxStateManager::tr(char const *, char const *)
-	?nextState@GlxStateManager@@QAEXHH@Z @ 25 NONAME ; void GlxStateManager::nextState(int, int)
-	?launchFromExternal@GlxStateManager@@QAEXXZ @ 26 NONAME ; void GlxStateManager::launchFromExternal(void)
-	?externalCommand@GlxStateManager@@IAEXH@Z @ 27 NONAME ; void GlxStateManager::externalCommand(int)
-	?createGridModel@GlxStateManager@@AAEXHW4NavigationDir@@@Z @ 28 NONAME ; void GlxStateManager::createGridModel(int, enum NavigationDir)
-	?launchApplication@GlxStateManager@@QAEXXZ @ 29 NONAME ; void GlxStateManager::launchApplication(void)
-	?exitMarkingMode@GlxStateManager@@QAEXXZ @ 30 NONAME ; void GlxStateManager::exitMarkingMode(void)
-	?removeCurrentModel@GlxStateManager@@QAEXXZ @ 31 NONAME ; void GlxStateManager::removeCurrentModel(void)
-	?createModel@GlxStateManager@@AAEXHW4NavigationDir@@@Z @ 32 NONAME ; void GlxStateManager::createModel(int, enum NavigationDir)
-	?setFullScreenContext@GlxStateManager@@AAEXXZ @ 33 NONAME ; void GlxStateManager::setFullScreenContext(void)
+	?updateTNProgress@GlxStateManager@@QAEXH@Z @ 5 NONAME ; void GlxStateManager::updateTNProgress(int)
+	?goBack@GlxStateManager@@QAEXHH@Z @ 6 NONAME ; void GlxStateManager::goBack(int, int)
+	?enterMarkingMode@GlxStateManager@@QAEXXZ @ 7 NONAME ; void GlxStateManager::enterMarkingMode(void)
+	??1GlxStateManager@@UAE@XZ @ 8 NONAME ; GlxStateManager::~GlxStateManager(void)
+	?getStaticMetaObject@GlxStateManager@@SAABUQMetaObject@@XZ @ 9 NONAME ; struct QMetaObject const & GlxStateManager::getStaticMetaObject(void)
+	?trUtf8@GlxStateManager@@SA?AVQString@@PBD0H@Z @ 10 NONAME ; class QString GlxStateManager::trUtf8(char const *, char const *, int)
+	?eventHandler@GlxStateManager@@AAEXAAH@Z @ 11 NONAME ; void GlxStateManager::eventHandler(int &)
+	?executeCommand@GlxStateManager@@QAE_NH@Z @ 12 NONAME ; bool GlxStateManager::executeCommand(int)
+	?setupItems@GlxStateManager@@QAEXXZ @ 13 NONAME ; void GlxStateManager::setupItems(void)
+	?previousState@GlxStateManager@@QAEXXZ @ 14 NONAME ; void GlxStateManager::previousState(void)
+	?createState@GlxStateManager@@AAEPAVGlxState@@H@Z @ 15 NONAME ; class GlxState * GlxStateManager::createState(int)
+	?exitApplication@GlxStateManager@@AAEXXZ @ 16 NONAME ; void GlxStateManager::exitApplication(void)
+	?changeState@GlxStateManager@@QAEXHH@Z @ 17 NONAME ; void GlxStateManager::changeState(int, int)
+	?qt_metacall@GlxStateManager@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 18 NONAME ; int GlxStateManager::qt_metacall(enum QMetaObject::Call, int, void * *)
+	??0GlxStateManager@@QAE@XZ @ 19 NONAME ; GlxStateManager::GlxStateManager(void)
+	?cleanupExternal@GlxStateManager@@QAEXXZ @ 20 NONAME ; void GlxStateManager::cleanupExternal(void)
+	?setFullScreenContext@GlxStateManager@@AAEXXZ @ 21 NONAME ; void GlxStateManager::setFullScreenContext(void)
+	?cleanAllModel@GlxStateManager@@QAEXXZ @ 22 NONAME ; void GlxStateManager::cleanAllModel(void)
+	?trUtf8@GlxStateManager@@SA?AVQString@@PBD0@Z @ 23 NONAME ; class QString GlxStateManager::trUtf8(char const *, char const *)
+	?qt_metacast@GlxStateManager@@UAEPAXPBD@Z @ 24 NONAME ; void * GlxStateManager::qt_metacast(char const *)
+	?staticMetaObject@GlxStateManager@@2UQMetaObject@@B @ 25 NONAME ; struct QMetaObject const GlxStateManager::staticMetaObject
+	?tr@GlxStateManager@@SA?AVQString@@PBD0H@Z @ 26 NONAME ; class QString GlxStateManager::tr(char const *, char const *, int)
+	?tr@GlxStateManager@@SA?AVQString@@PBD0@Z @ 27 NONAME ; class QString GlxStateManager::tr(char const *, char const *)
+	?nextState@GlxStateManager@@QAEXHH@Z @ 28 NONAME ; void GlxStateManager::nextState(int, int)
+	?launchFromExternal@GlxStateManager@@QAEXXZ @ 29 NONAME ; void GlxStateManager::launchFromExternal(void)
+	?externalCommand@GlxStateManager@@IAEXH@Z @ 30 NONAME ; void GlxStateManager::externalCommand(int)
+	?createGridModel@GlxStateManager@@AAEXHW4NavigationDir@@@Z @ 31 NONAME ; void GlxStateManager::createGridModel(int, enum NavigationDir)
+	?launchApplication@GlxStateManager@@QAEXXZ @ 32 NONAME ; void GlxStateManager::launchApplication(void)
+	?exitMarkingMode@GlxStateManager@@QAEXXZ @ 33 NONAME ; void GlxStateManager::exitMarkingMode(void)
+	?removeCurrentModel@GlxStateManager@@QAEXXZ @ 34 NONAME ; void GlxStateManager::removeCurrentModel(void)
+	?createModel@GlxStateManager@@AAEXHW4NavigationDir@@@Z @ 35 NONAME ; void GlxStateManager::createModel(int, enum NavigationDir)
+	?eventFilter@GlxStateManager@@UAE_NPAVQObject@@PAVQEvent@@@Z @ 36 NONAME ; bool GlxStateManager::eventFilter(class QObject *, class QEvent *)
+	?vanishProgressDialog@GlxStateManager@@AAEXXZ @ 37 NONAME ; void GlxStateManager::vanishProgressDialog(void)
+	?launchProgressDialog@GlxStateManager@@AAEXXZ @ 38 NONAME ; void GlxStateManager::launchProgressDialog(void)
+	?saveData@GlxStateManager@@QAEXXZ @ 39 NONAME ; void GlxStateManager::saveData(void)
+	?launchActivity@GlxStateManager@@AAE_NXZ @ 40 NONAME ; bool GlxStateManager::launchActivity(void)
 
--- a/ui/viewmanagement/bwins/glxviewmanageru.def	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/viewmanagement/bwins/glxviewmanageru.def	Thu Jul 22 16:33:32 2010 +0100
@@ -1,47 +1,52 @@
 EXPORTS
-	?updateToolBarIcon@GlxViewManager@@QAEXH@Z @ 1 NONAME ; void GlxViewManager::updateToolBarIcon(int)
-	?tr@GlxViewManager@@SA?AVQString@@PBD0@Z @ 2 NONAME ; class QString GlxViewManager::tr(char const *, char const *)
-	?getStaticMetaObject@GlxViewManager@@SAABUQMetaObject@@XZ @ 3 NONAME ; struct QMetaObject const & GlxViewManager::getStaticMetaObject(void)
-	?effectFinished@GlxViewManager@@QAEXXZ @ 4 NONAME ; void GlxViewManager::effectFinished(void)
-	?qt_metacast@GlxViewManager@@UAEPAXPBD@Z @ 5 NONAME ; void * GlxViewManager::qt_metacast(char const *)
-	??_EGlxViewManager@@UAE@I@Z @ 6 NONAME ; GlxViewManager::~GlxViewManager(unsigned int)
-	?addBackSoftKeyAction@GlxViewManager@@QAEXXZ @ 7 NONAME ; void GlxViewManager::addBackSoftKeyAction(void)
-	?findView@GlxViewManager@@AAEPAVGlxView@@H@Z @ 8 NONAME ; class GlxView * GlxViewManager::findView(int)
-	?createActions@GlxViewManager@@AAEXXZ @ 9 NONAME ; void GlxViewManager::createActions(void)
-	?staticMetaObject@GlxViewManager@@2UQMetaObject@@B @ 10 NONAME ; struct QMetaObject const GlxViewManager::staticMetaObject
-	?handleAction@GlxViewManager@@QAEXXZ @ 11 NONAME ; void GlxViewManager::handleAction(void)
-	?handleUserAction@GlxViewManager@@QAEXHH@Z @ 12 NONAME ; void GlxViewManager::handleUserAction(int, int)
-	?metaObject@GlxViewManager@@UBEPBUQMetaObject@@XZ @ 13 NONAME ; struct QMetaObject const * GlxViewManager::metaObject(void) const
-	?actionTriggered@GlxViewManager@@IAEXH@Z @ 14 NONAME ; void GlxViewManager::actionTriggered(int)
-	?launchView@GlxViewManager@@QAEXHPAVQAbstractItemModel@@W4GlxEffect@@W4GlxViewEffect@@@Z @ 15 NONAME ; void GlxViewManager::launchView(int, class QAbstractItemModel *, enum GlxEffect, enum GlxViewEffect)
-	?handleMenuAction@GlxViewManager@@QAEXH@Z @ 16 NONAME ; void GlxViewManager::handleMenuAction(int)
-	?externalCommand@GlxViewManager@@IAEXH@Z @ 17 NONAME ; void GlxViewManager::externalCommand(int)
-	??0GlxViewManager@@QAE@XZ @ 18 NONAME ; GlxViewManager::GlxViewManager(void)
-	?exitMarkingMode@GlxViewManager@@QAEXH@Z @ 19 NONAME ; void GlxViewManager::exitMarkingMode(int)
-	?cancelTimer@GlxViewManager@@QAEXXZ @ 20 NONAME ; void GlxViewManager::cancelTimer(void)
-	?createToolBar@GlxViewManager@@AAEXXZ @ 21 NONAME ; void GlxViewManager::createToolBar(void)
-	?removeConnection@GlxViewManager@@AAEXXZ @ 22 NONAME ; void GlxViewManager::removeConnection(void)
-	?launchView@GlxViewManager@@QAEXHPAVQAbstractItemModel@@@Z @ 23 NONAME ; void GlxViewManager::launchView(int, class QAbstractItemModel *)
-	?createMarkingModeActions@GlxViewManager@@AAEXXZ @ 24 NONAME ; void GlxViewManager::createMarkingModeActions(void)
-	?qt_metacall@GlxViewManager@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 25 NONAME ; int GlxViewManager::qt_metacall(enum QMetaObject::Call, int, void * *)
-	?deActivateView@GlxViewManager@@AAEXXZ @ 26 NONAME ; void GlxViewManager::deActivateView(void)
-	?destroyView@GlxViewManager@@QAEXH@Z @ 27 NONAME ; void GlxViewManager::destroyView(int)
-	?resolveView@GlxViewManager@@AAEPAVGlxView@@H@Z @ 28 NONAME ; class GlxView * GlxViewManager::resolveView(int)
-	??1GlxViewManager@@UAE@XZ @ 29 NONAME ; GlxViewManager::~GlxViewManager(void)
-	?getSelectionModel@GlxViewManager@@QAEPAVQItemSelectionModel@@H@Z @ 30 NONAME ; class QItemSelectionModel * GlxViewManager::getSelectionModel(int)
-	?addConnection@GlxViewManager@@AAEXXZ @ 31 NONAME ; void GlxViewManager::addConnection(void)
-	?createMarkingModeToolBar@GlxViewManager@@AAEXXZ @ 32 NONAME ; void GlxViewManager::createMarkingModeToolBar(void)
-	?itemSpecificMenuTriggered@GlxViewManager@@QAEXHVQPointF@@@Z @ 33 NONAME ; void GlxViewManager::itemSpecificMenuTriggered(int, class QPointF)
-	?orientation@GlxViewManager@@QBE?AW4Orientation@Qt@@XZ @ 34 NONAME ; enum Qt::Orientation GlxViewManager::orientation(void) const
-	?enterMarkingMode@GlxViewManager@@QAEXH@Z @ 35 NONAME ; void GlxViewManager::enterMarkingMode(int)
-	?actionProcess@GlxViewManager@@QAEXH@Z @ 36 NONAME ; void GlxViewManager::actionProcess(int)
-	?deactivateCurrentView@GlxViewManager@@QAEXXZ @ 37 NONAME ; void GlxViewManager::deactivateCurrentView(void)
-	?trUtf8@GlxViewManager@@SA?AVQString@@PBD0H@Z @ 38 NONAME ; class QString GlxViewManager::trUtf8(char const *, char const *, int)
-	?trUtf8@GlxViewManager@@SA?AVQString@@PBD0@Z @ 39 NONAME ; class QString GlxViewManager::trUtf8(char const *, char const *)
-	?tr@GlxViewManager@@SA?AVQString@@PBD0H@Z @ 40 NONAME ; class QString GlxViewManager::tr(char const *, char const *, int)
-	?activateView@GlxViewManager@@AAEXXZ @ 41 NONAME ; void GlxViewManager::activateView(void)
-	?setupItems@GlxViewManager@@QAEXXZ @ 42 NONAME ABSENT ; void GlxViewManager::setupItems(void)
-	?launchApplication@GlxViewManager@@QAEXHPAVQAbstractItemModel@@@Z @ 43 NONAME ; void GlxViewManager::launchApplication(int, class QAbstractItemModel *)
-	?setupItems@GlxViewManager@@QAEXH@Z @ 44 NONAME ; void GlxViewManager::setupItems(int)
-	?checkMarked@GlxViewManager@@AAEXXZ @ 45 NONAME ; void GlxViewManager::checkMarked(void)
+	?launchProgressDialog@GlxViewManager@@QAEXH@Z @ 1 NONAME ; void GlxViewManager::launchProgressDialog(int)
+	?updateToolBarIcon@GlxViewManager@@QAEXH@Z @ 2 NONAME ; void GlxViewManager::updateToolBarIcon(int)
+	?tr@GlxViewManager@@SA?AVQString@@PBD0@Z @ 3 NONAME ; class QString GlxViewManager::tr(char const *, char const *)
+	?getStaticMetaObject@GlxViewManager@@SAABUQMetaObject@@XZ @ 4 NONAME ; struct QMetaObject const & GlxViewManager::getStaticMetaObject(void)
+	?effectFinished@GlxViewManager@@QAEXXZ @ 5 NONAME ; void GlxViewManager::effectFinished(void)
+	?updateProgressDialog@GlxViewManager@@QAEXH@Z @ 6 NONAME ; void GlxViewManager::updateProgressDialog(int)
+	?qt_metacast@GlxViewManager@@UAEPAXPBD@Z @ 7 NONAME ; void * GlxViewManager::qt_metacast(char const *)
+	??_EGlxViewManager@@UAE@I@Z @ 8 NONAME ; GlxViewManager::~GlxViewManager(unsigned int)
+	?addBackSoftKeyAction@GlxViewManager@@QAEXXZ @ 9 NONAME ; void GlxViewManager::addBackSoftKeyAction(void)
+	?findView@GlxViewManager@@AAEPAVGlxView@@H@Z @ 10 NONAME ; class GlxView * GlxViewManager::findView(int)
+	?createActions@GlxViewManager@@AAEXXZ @ 11 NONAME ; void GlxViewManager::createActions(void)
+	?staticMetaObject@GlxViewManager@@2UQMetaObject@@B @ 12 NONAME ; struct QMetaObject const GlxViewManager::staticMetaObject
+	?handleAction@GlxViewManager@@QAEXXZ @ 13 NONAME ; void GlxViewManager::handleAction(void)
+	?handleUserAction@GlxViewManager@@QAEXHH@Z @ 14 NONAME ; void GlxViewManager::handleUserAction(int, int)
+	?metaObject@GlxViewManager@@UBEPBUQMetaObject@@XZ @ 15 NONAME ; struct QMetaObject const * GlxViewManager::metaObject(void) const
+	?actionTriggered@GlxViewManager@@IAEXH@Z @ 16 NONAME ; void GlxViewManager::actionTriggered(int)
+	?launchView@GlxViewManager@@QAEXHPAVQAbstractItemModel@@W4GlxEffect@@W4GlxViewEffect@@@Z @ 17 NONAME ; void GlxViewManager::launchView(int, class QAbstractItemModel *, enum GlxEffect, enum GlxViewEffect)
+	?handleMenuAction@GlxViewManager@@QAEXH@Z @ 18 NONAME ; void GlxViewManager::handleMenuAction(int)
+	?externalCommand@GlxViewManager@@IAEXH@Z @ 19 NONAME ; void GlxViewManager::externalCommand(int)
+	??0GlxViewManager@@QAE@XZ @ 20 NONAME ; GlxViewManager::GlxViewManager(void)
+	?exitMarkingMode@GlxViewManager@@QAEXH@Z @ 21 NONAME ; void GlxViewManager::exitMarkingMode(int)
+	?cancelTimer@GlxViewManager@@QAEXXZ @ 22 NONAME ; void GlxViewManager::cancelTimer(void)
+	?setModel@GlxViewManager@@QAEXPAVQAbstractItemModel@@@Z @ 23 NONAME ; void GlxViewManager::setModel(class QAbstractItemModel *)
+	?createToolBar@GlxViewManager@@AAEXXZ @ 24 NONAME ; void GlxViewManager::createToolBar(void)
+	?removeConnection@GlxViewManager@@AAEXXZ @ 25 NONAME ; void GlxViewManager::removeConnection(void)
+	?launchView@GlxViewManager@@QAEXHPAVQAbstractItemModel@@@Z @ 26 NONAME ; void GlxViewManager::launchView(int, class QAbstractItemModel *)
+	?createMarkingModeActions@GlxViewManager@@AAEXXZ @ 27 NONAME ; void GlxViewManager::createMarkingModeActions(void)
+	?qt_metacall@GlxViewManager@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 28 NONAME ; int GlxViewManager::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?deActivateView@GlxViewManager@@AAEXXZ @ 29 NONAME ; void GlxViewManager::deActivateView(void)
+	?destroyView@GlxViewManager@@QAEXH@Z @ 30 NONAME ; void GlxViewManager::destroyView(int)
+	?resolveView@GlxViewManager@@AAEPAVGlxView@@H@Z @ 31 NONAME ; class GlxView * GlxViewManager::resolveView(int)
+	??1GlxViewManager@@UAE@XZ @ 32 NONAME ; GlxViewManager::~GlxViewManager(void)
+	?getSelectionModel@GlxViewManager@@QAEPAVQItemSelectionModel@@H@Z @ 33 NONAME ; class QItemSelectionModel * GlxViewManager::getSelectionModel(int)
+	?addConnection@GlxViewManager@@AAEXXZ @ 34 NONAME ; void GlxViewManager::addConnection(void)
+	?orientation@GlxViewManager@@QBE?AW4Orientation@Qt@@XZ @ 35 NONAME ; enum Qt::Orientation GlxViewManager::orientation(void) const
+	?createMarkingModeToolBar@GlxViewManager@@AAEXXZ @ 36 NONAME ; void GlxViewManager::createMarkingModeToolBar(void)
+	?checkMarked@GlxViewManager@@AAEXXZ @ 37 NONAME ; void GlxViewManager::checkMarked(void)
+	?itemSpecificMenuTriggered@GlxViewManager@@QAEXHVQPointF@@@Z @ 38 NONAME ; void GlxViewManager::itemSpecificMenuTriggered(int, class QPointF)
+	?setupItems@GlxViewManager@@QAEXXZ @ 39 NONAME ; void GlxViewManager::setupItems(void)
+	?enterMarkingMode@GlxViewManager@@QAEXH@Z @ 40 NONAME ; void GlxViewManager::enterMarkingMode(int)
+	?actionProcess@GlxViewManager@@QAEXH@Z @ 41 NONAME ; void GlxViewManager::actionProcess(int)
+	?deactivateCurrentView@GlxViewManager@@QAEXXZ @ 42 NONAME ; void GlxViewManager::deactivateCurrentView(void)
+	?trUtf8@GlxViewManager@@SA?AVQString@@PBD0H@Z @ 43 NONAME ; class QString GlxViewManager::trUtf8(char const *, char const *, int)
+	?trUtf8@GlxViewManager@@SA?AVQString@@PBD0@Z @ 44 NONAME ; class QString GlxViewManager::trUtf8(char const *, char const *)
+	?launchApplication@GlxViewManager@@QAEXHPAVQAbstractItemModel@@@Z @ 45 NONAME ; void GlxViewManager::launchApplication(int, class QAbstractItemModel *)
+	?tr@GlxViewManager@@SA?AVQString@@PBD0H@Z @ 46 NONAME ; class QString GlxViewManager::tr(char const *, char const *, int)
+	?activateView@GlxViewManager@@AAEXXZ @ 47 NONAME ; void GlxViewManager::activateView(void)
+	?hideProgressDialog@GlxViewManager@@AAEXXZ @ 48 NONAME ; void GlxViewManager::hideProgressDialog(void)
+	?applicationReady@GlxViewManager@@IAEXXZ @ 49 NONAME ; void GlxViewManager::applicationReady(void)
+	?handleReadyView@GlxViewManager@@QAEXXZ @ 50 NONAME ; void GlxViewManager::handleReadyView(void)
 
--- a/ui/viewmanagement/eabi/glxstatehandleru.def	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/viewmanagement/eabi/glxstatehandleru.def	Thu Jul 22 16:33:32 2010 +0100
@@ -6,30 +6,37 @@
 	_ZN15GlxStateManager11qt_metacallEN11QMetaObject4CallEiPPv @ 5 NONAME
 	_ZN15GlxStateManager11qt_metacastEPKc @ 6 NONAME
 	_ZN15GlxStateManager12eventHandlerERi @ 7 NONAME
-	_ZN15GlxStateManager13previousStateEv @ 8 NONAME
-	_ZN15GlxStateManager14executeCommandEi @ 9 NONAME
-	_ZN15GlxStateManager15actionTriggeredEi @ 10 NONAME
-	_ZN15GlxStateManager15cleanupExternalEv @ 11 NONAME
-	_ZN15GlxStateManager15createGridModelEi13NavigationDir @ 12 NONAME
-	_ZN15GlxStateManager15exitApplicationEv @ 13 NONAME
-	_ZN15GlxStateManager15exitMarkingModeEv @ 14 NONAME
-	_ZN15GlxStateManager15externalCommandEi @ 15 NONAME
-	_ZN15GlxStateManager16enterMarkingModeEv @ 16 NONAME
-	_ZN15GlxStateManager16setupItemsSignalEv @ 17 NONAME
-	_ZN15GlxStateManager16staticMetaObjectE @ 18 NONAME DATA 16
-	_ZN15GlxStateManager17launchApplicationEv @ 19 NONAME
-	_ZN15GlxStateManager18launchFromExternalEv @ 20 NONAME
-	_ZN15GlxStateManager18removeCurrentModelEv @ 21 NONAME
-	_ZN15GlxStateManager19getStaticMetaObjectEv @ 22 NONAME
-	_ZN15GlxStateManager6goBackEii @ 23 NONAME
-	_ZN15GlxStateManager9nextStateEii @ 24 NONAME
-	_ZN15GlxStateManagerC1Ev @ 25 NONAME
-	_ZN15GlxStateManagerC2Ev @ 26 NONAME
-	_ZN15GlxStateManagerD0Ev @ 27 NONAME
-	_ZN15GlxStateManagerD1Ev @ 28 NONAME
-	_ZN15GlxStateManagerD2Ev @ 29 NONAME
-	_ZNK15GlxStateManager10metaObjectEv @ 30 NONAME
-	_ZTI15GlxStateManager @ 31 NONAME
-	_ZTV15GlxStateManager @ 32 NONAME
-	_ZN15GlxStateManager20setFullScreenContextEv @ 33 NONAME
+	_ZN15GlxStateManager13cleanAllModelEv @ 8 NONAME
+	_ZN15GlxStateManager13previousStateEv @ 9 NONAME
+	_ZN15GlxStateManager14executeCommandEi @ 10 NONAME
+	_ZN15GlxStateManager15actionTriggeredEi @ 11 NONAME
+	_ZN15GlxStateManager15cleanupExternalEv @ 12 NONAME
+	_ZN15GlxStateManager15createGridModelEi13NavigationDir @ 13 NONAME
+	_ZN15GlxStateManager15exitApplicationEv @ 14 NONAME
+	_ZN15GlxStateManager15exitMarkingModeEv @ 15 NONAME
+	_ZN15GlxStateManager15externalCommandEi @ 16 NONAME
+	_ZN15GlxStateManager16enterMarkingModeEv @ 17 NONAME
+	_ZN15GlxStateManager16setupItemsSignalEv @ 18 NONAME
+	_ZN15GlxStateManager16staticMetaObjectE @ 19 NONAME DATA 16
+	_ZN15GlxStateManager16updateTNProgressEi @ 20 NONAME
+	_ZN15GlxStateManager17launchApplicationEv @ 21 NONAME
+	_ZN15GlxStateManager18launchFromExternalEv @ 22 NONAME
+	_ZN15GlxStateManager18removeCurrentModelEv @ 23 NONAME
+	_ZN15GlxStateManager19getStaticMetaObjectEv @ 24 NONAME
+	_ZN15GlxStateManager20setFullScreenContextEv @ 25 NONAME
+	_ZN15GlxStateManager6goBackEii @ 26 NONAME
+	_ZN15GlxStateManager9nextStateEii @ 27 NONAME
+	_ZN15GlxStateManagerC1Ev @ 28 NONAME
+	_ZN15GlxStateManagerC2Ev @ 29 NONAME
+	_ZN15GlxStateManagerD0Ev @ 30 NONAME
+	_ZN15GlxStateManagerD1Ev @ 31 NONAME
+	_ZN15GlxStateManagerD2Ev @ 32 NONAME
+	_ZNK15GlxStateManager10metaObjectEv @ 33 NONAME
+	_ZTI15GlxStateManager @ 34 NONAME
+	_ZTV15GlxStateManager @ 35 NONAME
+	_ZN15GlxStateManager11eventFilterEP7QObjectP6QEvent @ 36 NONAME
+	_ZN15GlxStateManager20launchProgressDialogEv @ 37 NONAME
+	_ZN15GlxStateManager20vanishProgressDialogEv @ 38 NONAME
+	_ZN15GlxStateManager14launchActivityEv @ 39 NONAME
+	_ZN15GlxStateManager8saveDataEv @ 40 NONAME
 
--- a/ui/viewmanagement/eabi/glxviewmanageru.def	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/viewmanagement/eabi/glxviewmanageru.def	Thu Jul 22 16:33:32 2010 +0100
@@ -1,46 +1,52 @@
 EXPORTS
 	_ZN14GlxViewManager10launchViewEiP18QAbstractItemModel @ 1 NONAME
 	_ZN14GlxViewManager10launchViewEiP18QAbstractItemModel9GlxEffect13GlxViewEffect @ 2 NONAME
-	_ZN14GlxViewManager10setupItemsEi @ 3 NONAME
+	_ZN14GlxViewManager10setupItemsEv @ 3 NONAME
 	_ZN14GlxViewManager11cancelTimerEv @ 4 NONAME
-	_ZN14GlxViewManager11destroyViewEi @ 5 NONAME
-	_ZN14GlxViewManager11qt_metacallEN11QMetaObject4CallEiPPv @ 6 NONAME
-	_ZN14GlxViewManager11qt_metacastEPKc @ 7 NONAME
-	_ZN14GlxViewManager11resolveViewEi @ 8 NONAME
-	_ZN14GlxViewManager12activateViewEv @ 9 NONAME
-	_ZN14GlxViewManager12handleActionEv @ 10 NONAME
-	_ZN14GlxViewManager13actionProcessEi @ 11 NONAME
-	_ZN14GlxViewManager13addConnectionEv @ 12 NONAME
-	_ZN14GlxViewManager13createActionsEv @ 13 NONAME
-	_ZN14GlxViewManager13createToolBarEv @ 14 NONAME
-	_ZN14GlxViewManager14deActivateViewEv @ 15 NONAME
-	_ZN14GlxViewManager14effectFinishedEv @ 16 NONAME
-	_ZN14GlxViewManager15actionTriggeredEi @ 17 NONAME
-	_ZN14GlxViewManager15exitMarkingModeEi @ 18 NONAME
-	_ZN14GlxViewManager15externalCommandEi @ 19 NONAME
-	_ZN14GlxViewManager16enterMarkingModeEi @ 20 NONAME
-	_ZN14GlxViewManager16handleMenuActionEi @ 21 NONAME
-	_ZN14GlxViewManager16handleUserActionEii @ 22 NONAME
-	_ZN14GlxViewManager16removeConnectionEv @ 23 NONAME
-	_ZN14GlxViewManager16staticMetaObjectE @ 24 NONAME DATA 16
-	_ZN14GlxViewManager17getSelectionModelEi @ 25 NONAME
-	_ZN14GlxViewManager17launchApplicationEiP18QAbstractItemModel @ 26 NONAME
-	_ZN14GlxViewManager17updateToolBarIconEi @ 27 NONAME
-	_ZN14GlxViewManager19getStaticMetaObjectEv @ 28 NONAME
-	_ZN14GlxViewManager20addBackSoftKeyActionEv @ 29 NONAME
-	_ZN14GlxViewManager21deactivateCurrentViewEv @ 30 NONAME
-	_ZN14GlxViewManager24createMarkingModeActionsEv @ 31 NONAME
-	_ZN14GlxViewManager24createMarkingModeToolBarEv @ 32 NONAME
-	_ZN14GlxViewManager25itemSpecificMenuTriggeredEi7QPointF @ 33 NONAME
-	_ZN14GlxViewManager8findViewEi @ 34 NONAME
-	_ZN14GlxViewManagerC1Ev @ 35 NONAME
-	_ZN14GlxViewManagerC2Ev @ 36 NONAME
-	_ZN14GlxViewManagerD0Ev @ 37 NONAME
-	_ZN14GlxViewManagerD1Ev @ 38 NONAME
-	_ZN14GlxViewManagerD2Ev @ 39 NONAME
-	_ZNK14GlxViewManager10metaObjectEv @ 40 NONAME
-	_ZNK14GlxViewManager11orientationEv @ 41 NONAME
-	_ZTI14GlxViewManager @ 42 NONAME
-	_ZTV14GlxViewManager @ 43 NONAME
-	_ZN14GlxViewManager11checkMarkedEv @ 44 NONAME
+	_ZN14GlxViewManager11checkMarkedEv @ 5 NONAME
+	_ZN14GlxViewManager11destroyViewEi @ 6 NONAME
+	_ZN14GlxViewManager11qt_metacallEN11QMetaObject4CallEiPPv @ 7 NONAME
+	_ZN14GlxViewManager11qt_metacastEPKc @ 8 NONAME
+	_ZN14GlxViewManager11resolveViewEi @ 9 NONAME
+	_ZN14GlxViewManager12activateViewEv @ 10 NONAME
+	_ZN14GlxViewManager12handleActionEv @ 11 NONAME
+	_ZN14GlxViewManager13actionProcessEi @ 12 NONAME
+	_ZN14GlxViewManager13addConnectionEv @ 13 NONAME
+	_ZN14GlxViewManager13createActionsEv @ 14 NONAME
+	_ZN14GlxViewManager13createToolBarEv @ 15 NONAME
+	_ZN14GlxViewManager14deActivateViewEv @ 16 NONAME
+	_ZN14GlxViewManager14effectFinishedEv @ 17 NONAME
+	_ZN14GlxViewManager15actionTriggeredEi @ 18 NONAME
+	_ZN14GlxViewManager15exitMarkingModeEi @ 19 NONAME
+	_ZN14GlxViewManager15externalCommandEi @ 20 NONAME
+	_ZN14GlxViewManager16enterMarkingModeEi @ 21 NONAME
+	_ZN14GlxViewManager16handleMenuActionEi @ 22 NONAME
+	_ZN14GlxViewManager16handleUserActionEii @ 23 NONAME
+	_ZN14GlxViewManager16removeConnectionEv @ 24 NONAME
+	_ZN14GlxViewManager16staticMetaObjectE @ 25 NONAME DATA 16
+	_ZN14GlxViewManager17getSelectionModelEi @ 26 NONAME
+	_ZN14GlxViewManager17launchApplicationEiP18QAbstractItemModel @ 27 NONAME
+	_ZN14GlxViewManager17updateToolBarIconEi @ 28 NONAME
+	_ZN14GlxViewManager19getStaticMetaObjectEv @ 29 NONAME
+	_ZN14GlxViewManager20addBackSoftKeyActionEv @ 30 NONAME
+	_ZN14GlxViewManager20launchProgressDialogEi @ 31 NONAME
+	_ZN14GlxViewManager20updateProgressDialogEi @ 32 NONAME
+	_ZN14GlxViewManager21deactivateCurrentViewEv @ 33 NONAME
+	_ZN14GlxViewManager24createMarkingModeActionsEv @ 34 NONAME
+	_ZN14GlxViewManager24createMarkingModeToolBarEv @ 35 NONAME
+	_ZN14GlxViewManager25itemSpecificMenuTriggeredEi7QPointF @ 36 NONAME
+	_ZN14GlxViewManager8findViewEi @ 37 NONAME
+	_ZN14GlxViewManager8setModelEP18QAbstractItemModel @ 38 NONAME
+	_ZN14GlxViewManagerC1Ev @ 39 NONAME
+	_ZN14GlxViewManagerC2Ev @ 40 NONAME
+	_ZN14GlxViewManagerD0Ev @ 41 NONAME
+	_ZN14GlxViewManagerD1Ev @ 42 NONAME
+	_ZN14GlxViewManagerD2Ev @ 43 NONAME
+	_ZNK14GlxViewManager10metaObjectEv @ 44 NONAME
+	_ZNK14GlxViewManager11orientationEv @ 45 NONAME
+	_ZTI14GlxViewManager @ 46 NONAME
+	_ZTV14GlxViewManager @ 47 NONAME
+	_ZN14GlxViewManager18hideProgressDialogEv @ 48 NONAME
+	_ZN14GlxViewManager15handleReadyViewEv @ 49 NONAME
+	_ZN14GlxViewManager16applicationReadyEv @ 50 NONAME
 
--- a/ui/viewmanagement/statehandler/inc/glxstatemanager.h	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/viewmanagement/statehandler/inc/glxstatemanager.h	Thu Jul 22 16:33:32 2010 +0100
@@ -24,6 +24,7 @@
 #include <QObject>
 #include <QList>
 #include <glxbasestate.h>
+#include <qmap.h>
 
 class GlxState;
 class GlxViewManager;
@@ -31,6 +32,7 @@
 class GlxAlbumModel;
 class QAbstractItemModel;
 class GlxActionHandler;
+class GlxTNObserver;
 
 #ifdef BUILD_STATEMANAGER
 #define GLX_STATEMANAGER_EXPORT Q_DECL_EXPORT
@@ -44,79 +46,165 @@
 	friend class TestGlxStateManager;
 	
 public :
+    /*
+     * Constructor
+     */
     GlxStateManager();
+    
+    /*
+     * Destructor
+     */
     virtual ~GlxStateManager();
+    
+    /*
+     * Fuction to launch the application from some external world
+     */
     void launchFromExternal();
+    
+    /*
+     * Clean the all externel data
+     */
     void cleanupExternal();
     
-    //internal exposed function
+    /*
+     *  Move the views to the multiple item selection state
+     */
     void enterMarkingMode();
+    
+    /*
+     * Exit from the multiselection state
+     */
     void exitMarkingMode();
+    
+    /*
+     * Execute the commant on multiple selected item
+     */
     bool executeCommand(qint32 commandId);
+    
+    /*
+     *  when application goes into background or come back to foreground
+     *  set and reset the background thumbnail generation property
+     */
+    bool eventFilter(QObject *obj, QEvent *ev);    
 
-signals :    
+signals :
+    /*
+     * Send the user activities ( command ) to the external world
+     */
     void externalCommand(int cmdId);
+    
+    /*
+     * TO send the signal to initialise the rest of items
+     * which is not created in the launch sequence
+     */
     void setupItemsSignal();
     
 public slots:
+    /*
+     * To launch the application
+     */
     void launchApplication();
+    
+    /*
+     * To handle the user action, view switching etc
+     */
     void actionTriggered(qint32 id);
+    
+    /*
+     * To create the items which is not created in the aluch sequence
+     */
     void setupItems();
+    
+    /*
+     * call back function to monitor the change in thumbnail manager
+     */
+    void updateTNProgress( int count);
+    void saveData();
 
 public :
-/*
- * It will create a new state and replace the current state with new state in the stack.
- * It will use in the case of state switching.
- * use -1 if state does not have internal state
- */    
+    /*
+     * It will create a new state and replace the current state with new state in the stack.
+     * It will use in the case of state switching.
+     * use -1 if state does not have internal state
+     */    
     void changeState(qint32 newStateId, int internalState );
-/*
- * Go back to previous state 
- */    
+    
+    /*
+     * Go back to previous state 
+     */    
     void previousState();
 
-/*
- * Go back to a state in hierarchy and pop all the state upto that level.
- * if state is not found, then all the state from the hierachy is removed and create a new state on level 0
- * This function will be use in the case when more then one back is required in single event.
- */
+    /*
+     * Go back to a state in hierarchy and pop all the state upto that level.
+     * if state is not found, then all the state from the hierachy is removed and create a new state on level 0
+     * This function will be use in the case when more then one back is required in single event.
+     */
     void goBack(qint32 stateId, int internalState);
        
-/*
- * Create a new state and current state should be pushed into stack.
- * use -1 if state does not have internal state
- */  
+    /*
+     * Create a new state and current state should be pushed into stack.
+     * use -1 if state does not have internal state
+     */  
     void nextState(qint32 newStateId, int internalState );
 
-/*
- * It will delete the current model
- */      
+    /*
+     * It will delete the current model
+     */      
     void removeCurrentModel();
     
+    /*
+     * It will delete the all model used by state manager
+     */
+    void cleanAllModel();
+    
 
 private:
-/*
- * Factory function to create the state.
- */  
+
+    /*
+     *  Launch the harvesting and TN generation progress bar dialog
+     */
+    void launchProgressDialog();
+    
+    /*
+     * remove the harvesting and TN generation progress bar dialog
+     */
+    void vanishProgressDialog();
+    
+    /*
+     * Factory function to create the state.
+     */  
     GlxState * createState(qint32 state);
-/*
- * Factory function to create the model.
- */  	
+    
+    /*
+     * Factory function to create the model.
+     */  	
     void createModel(qint32 stateId, NavigationDir dir = NO_DIR);
-/*
- * Factory function to create the grid model.
- */  	
+
+    /*
+     * Factory function to create the grid model.
+     */  	
     void createGridModel(int internalState, NavigationDir dir = NO_DIR);
-/*
- * To set the fullscreen context based on the currrent orientation
- */    
+
+    /*
+     * To set the fullscreen context based on the currrent orientation
+     */    
     void setFullScreenContext();
+    
+    /*
+     * Apllication event handler function
+     */
     void eventHandler(qint32 &id);
-/*
- * A function to care the exit for application, in the case when application launch from internal and external
- */        
+    
+    /*
+     * A function to care the exit for application, in the case when application launch from internal and external
+     */        
     void exitApplication();
 
+    /*Launch Application as an acitivyt.
+     * Return Value @0 : If launching an activity fails
+     *              @1 : If launch activity passes
+     */
+     bool launchActivity();
 private:
     GlxViewManager      *mViewManager;
     GlxMediaModel       *mAllMediaModel;        // for all grid
@@ -126,7 +214,10 @@
     QAbstractItemModel  *mCurrentModel;         // no owner ship
     GlxState            *mCurrentState;		
     GlxActionHandler    *mActionHandler;
+    GlxTNObserver       *mTNObserver;
     int                 mCollectionId;
+    bool                isProgressbarRunning;
+    QMap<QString, qint32> mSaveActivity;
 };
 
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ui/viewmanagement/statehandler/inc/glxtnobserver.h	Thu Jul 22 16:33:32 2010 +0100
@@ -0,0 +1,80 @@
+/*
+* Copyright (c) 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:   ?Description
+*
+*/
+
+
+
+
+#ifndef GLXTNOBSERVER_H
+#define GLXTNOBSERVER_H
+
+#include <QObject>
+#include <glxtnmonitor.h>
+
+class CGlxTNMonitor;
+
+class GlxTNObserver : public QObject, public MGlxTNObserver
+{
+    Q_OBJECT
+    
+public:
+    
+    /*
+     * constructor
+     */
+    GlxTNObserver();
+    
+    /*
+     * Call back to get the number of TN is left to create.
+     */
+    void updateTNCount(int &count); 
+    
+    /*
+     * It will return the number of TN is left to create.
+     */
+    int getTNLeftCount() ;
+    
+    /*
+     * It will start the tumbnail generation montior process.
+     */    
+    void startTNObserving(); 
+    
+    /*
+     * To start the thumbnail generation in back ground
+     */
+    void startTNMDaemon() ;
+
+    /*
+     * To stop the thumbnail generation in back ground
+     */
+    void stopTNMDaemon() ;
+    
+    /*
+     * Destructor
+     */
+    ~GlxTNObserver();
+    
+signals : 
+    /*
+     * broad cast the number of thumbnail left to generate
+     */
+    void leftTNCount( int count);
+    
+private :
+    CGlxTNMonitor* mTNMonitor;
+};
+
+#endif /* GLXTNOBSERVER_H */
--- a/ui/viewmanagement/statehandler/src/glxactionhandler.cpp	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/viewmanagement/statehandler/src/glxactionhandler.cpp	Thu Jul 22 16:33:32 2010 +0100
@@ -28,8 +28,7 @@
 
 GlxActionHandler::~GlxActionHandler()
 {
-    foreach( GlxCommandHandler *cmdhandler, mCommandHandlerList)
-        delete cmdhandler;
+    qDeleteAll( mCommandHandlerList );
     mCommandHandlerList.clear();
 }
 
--- a/ui/viewmanagement/statehandler/src/glxcommandhandlerfactory.cpp	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/viewmanagement/statehandler/src/glxcommandhandlerfactory.cpp	Thu Jul 22 16:33:32 2010 +0100
@@ -21,10 +21,13 @@
 #include<glxcommandhandlerdelete.h>
 #include <glxcommandhandleraddtocontainer.h>
 #include <glxcommandhandlerrotate.h>
+#include <glxcommandhandlerrotateimage.h>
+#include <glxcommandhandlercropimage.h>
 #include <glxcommandhandlerremovefrom.h>
 #include <glxcommandhandlernewmedia.h>
 #include <glxcommandhandlersend.h>
 #include <glxcommandhandlerrename.h>
+#include <glxcommandhandlercomment.h>
 
 
 GlxCommandHandler* GlxCommandHandlerFactory::CreateCommandHandler(int commandId)
@@ -52,7 +55,15 @@
 
         case EGlxCmdRename: cmdHandler = new GlxCommandHandlerRename();
            break;
-
+           
+        case EGlxCmdComment: cmdHandler = new GlxCommandHandlerComment();
+                   break;
+        case EGlxCmdRotateImgCW:
+        case EGlxCmdRotateImgCCW:
+            					cmdHandler = new GlxCommandHandlerRotateImage();
+            break;
+        case EGlxCmdRotateImgCrop: cmdHandler = new GlxCommandHandlerCropImage();
+            break;
         default:
            break;
         }
--- a/ui/viewmanagement/statehandler/src/glxstatemanager.cpp	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/viewmanagement/statehandler/src/glxstatemanager.cpp	Thu Jul 22 16:33:32 2010 +0100
@@ -15,43 +15,66 @@
 *
 */
 
-#include <glxstatemanager.h>
-#include <glxviewmanager.h>
-#include <glxviewids.h>
-#include <glxmediamodel.h>
-#include <glxgridstate.h>
-#include <glxliststate.h>
-#include <glxfullscreenstate.h>
-#include <glxdetailstate.h>
-#include <glxslideshowsettingsstate.h>
-#include <glxslideshowstate.h>
-#include <glxmodelparm.h>
-#include <glxcollectionpluginall.hrh>
-#include <glxcollectionplugincamera.hrh>
-#include <glxcollectionpluginalbums.hrh>
-#include <glxcollectionpluginimageviewer.hrh>
-#include <glxexternalutility.h>
-#include <glxalbummodel.h>
-#include <glxloggerenabler.h>
-#include <glxmediaid.h>
-#include <glxactionhandler.h>
-#include <glxcommandhandlers.hrh>
+//include
 #include <QApplication>
-#include <glxplugincommandid.hrh>
 #include <QDebug>
 #include <QItemSelectionModel>
 #include <hbnotificationdialog.h>
 #include <QProcess>
+#include <hbinstance.h>
+#include <HbActivityManager.h>
+#include <hbapplication.h>
 
-GlxStateManager::GlxStateManager() : mAllMediaModel(NULL), mAlbumGridMediaModel(NULL),
-            mAlbumMediaModel(NULL),mImageviewerMediaModel(NULL), mCurrentModel (NULL), mCurrentState (NULL), mActionHandler (NULL)
+//user includes
+#include "glxstatemanager.h"
+#include "glxviewmanager.h"
+#include "glxviewids.h"
+#include "glxmediamodel.h"
+#include "glxgridstate.h"
+#include "glxliststate.h"
+#include "glxfullscreenstate.h"
+#include "glxdetailstate.h"
+#include "glxslideshowsettingsstate.h"
+#include "glxslideshowstate.h"
+#include "glxtnobserver.h"
+#include "glxmodelparm.h"
+#include "glxcollectionpluginall.hrh"
+#include "glxcollectionplugincamera.hrh"
+#include "glxcollectionpluginalbums.hrh"
+#include "glxcollectionpluginimageviewer.hrh"
+#include "glxexternalutility.h"
+#include "glxalbummodel.h"
+#include "glxloggerenabler.h"
+#include "glxmediaid.h"
+#include "glxactionhandler.h"
+#include "glxcommandhandlers.hrh"
+#include "glxplugincommandid.hrh"
+#include "glxlog.h"
+#include "glxtracer.h"
+
+
+GlxStateManager::GlxStateManager() 
+    : mAllMediaModel( NULL ), 
+      mAlbumGridMediaModel( NULL ),
+      mAlbumMediaModel( NULL ),
+      mImageviewerMediaModel( NULL ), 
+      mCurrentModel( NULL ), 
+      mCurrentState( NULL ), 
+      mActionHandler( NULL ),
+      mTNObserver ( NULL ),
+      isProgressbarRunning ( false )
 {
     qDebug("GlxStateManager::GlxStateManager");
     PERFORMANCE_ADV ( d1, "view manager creation time") {
         mViewManager = new GlxViewManager();
     }
+    mTNObserver = new GlxTNObserver();
+    mSaveActivity.clear();
+    
     connect ( this, SIGNAL( setupItemsSignal() ), this, SLOT( setupItems() ), Qt::QueuedConnection );
-    connect ( mViewManager, SIGNAL(actionTriggered(qint32 )), this, SLOT(actionTriggered(qint32 )), Qt::QueuedConnection );
+    connect ( mViewManager, SIGNAL(actionTriggered( qint32 )), this, SLOT(actionTriggered( qint32 )), Qt::QueuedConnection );
+    connect ( mTNObserver, SIGNAL( leftTNCount( int ) ), this, SLOT( updateTNProgress( int ) ) );
+    connect ( qobject_cast<HbApplication*>(qApp), SIGNAL (aboutToQuit()), this, SLOT(saveData()));
 	//TO:DO TBD through exception when it is null
 }
 
@@ -85,21 +108,79 @@
     return TRUE;
 }
 
+bool GlxStateManager::eventFilter(QObject *obj, QEvent *event)
+{
+    TRACER("GlxStateManager::eventFilter() ");
+    GLX_LOG_INFO1("GlxStateManager::eventFilter() %d event type", event->type());
+    
+    if ( event->type() ==  QEvent::ApplicationActivate ) {
+        mTNObserver->startTNMDaemon();
+    }
+    if ( event->type() ==  QEvent::ApplicationDeactivate ) {
+        mTNObserver->stopTNMDaemon();
+    }
+    return QObject::eventFilter(obj, event);
+}
+
 void GlxStateManager::launchApplication()
 {
-   qDebug("GlxStateManager::launchApplication");   
-   //To:Do use it in future once performance code is removed nextState(GLX_GRIDVIEW_ID, ALL_ITEM_S)
-   
-   mCurrentState = createState(GLX_GRIDVIEW_ID);
-   mCurrentState->setState(ALL_ITEM_S);
-   
-   PERFORMANCE_ADV ( d1, "Media model creation time" ) {
-       createModel(GLX_GRIDVIEW_ID);
-   }
-   
-   PERFORMANCE_ADV ( d2, "Grid View Launch time" ) {
-       mViewManager->launchApplication( GLX_GRIDVIEW_ID, mCurrentModel);
-   }   
+    qDebug("GlxStateManager::launchApplication");   
+     bool activitySuccess = false;  
+    //To:Do use it in future once performance code is removed nextState(GLX_GRIDVIEW_ID, ALL_ITEM_S)
+     HbApplication* app = qobject_cast<HbApplication*>(qApp);
+     if(app->activateReason() == Hb::ActivationReasonActivity) {
+          activitySuccess = launchActivity();
+     }
+     if( !activitySuccess ) { 
+    mCurrentState = createState( GLX_GRIDVIEW_ID );
+    mCurrentState->setState( ALL_ITEM_S );
+    
+    int leftCount = mTNObserver->getTNLeftCount() ;
+    if (  leftCount > 0  ) {
+        mViewManager->launchApplication( GLX_GRIDVIEW_ID, mCurrentModel);
+        launchProgressDialog();
+    }
+    else {
+        createModel( GLX_GRIDVIEW_ID );
+        mViewManager->launchApplication( GLX_GRIDVIEW_ID, mCurrentModel);
+    }
+    
+    mTNObserver->startTNObserving() ; 
+     }
+     //Remove the previous activity
+     HbActivityManager* activityManager = app->activityManager();
+     bool ok = activityManager->removeActivity("PhotosMainView");
+     if ( !ok )
+     {
+         qDebug("launchapplication::Remove activity failed" );
+     } 
+}
+bool GlxStateManager::launchActivity()
+{
+    HbApplication* app = qobject_cast<HbApplication*>(qApp);
+    bool ok = app->activityManager()->waitActivity();
+    if ( !ok )
+    {
+        qDebug("subscribing to activity manager failed" );
+        //return false;  TBD: waitActivity is always returning false. Could be some issue with AM.
+    }
+    QVariant data = app->activityManager()->activityData( "PhotosMainView" );
+    QByteArray serializedModel = data.toByteArray();
+    QDataStream stream(&serializedModel, QIODevice::ReadOnly);
+    //Fetch the data from the activity Manager
+    QMap<QString, qint32> fetchActivity;
+    stream >> fetchActivity;  
+    qint32 stateId = fetchActivity.value("ID");
+    mCurrentState = createState(stateId);
+    mCurrentState->setState( fetchActivity.value("InternalState") );
+    createModel( stateId);
+	/*Model might not be populated yet to set the visibleWindowIndex right away.
+	*So, let us store the visible index as a temporary Variable, so that  visible Window Index 
+	*is set once the model is populated.
+    */
+    mCurrentModel->setData(QModelIndex(), fetchActivity.value("VisibleIndex") , GlxTempVisualWindowIndex );
+    mViewManager->launchApplication(stateId, mCurrentModel); 
+    return true;
 }
 
 void GlxStateManager::launchFromExternal()
@@ -132,6 +213,69 @@
     mViewManager->updateToolBarIcon(GLX_ALL_ACTION_ID);
 }
 
+void GlxStateManager::updateTNProgress( int count)
+{    
+    TRACER("GlxStateManager::updateTNProgress() ");
+// mCurrentModel ------------this is case when progress bar is not showing
+// count > 5 ----------------in the case of rename of an image or capture the single item
+//                           it is also launching the progress bar, to avoid this scenario add the check of count more than 5
+// count == KErrNotReady ----A case when memory card is inserted but it is not harvest so it is given an error
+//                           In that case also user should be block to browse the images
+    if ( mCurrentModel && ( count > 5  ) ) { 
+         goBack( GLX_GRIDVIEW_ID, ALL_ITEM_S ) ;
+         cleanAllModel();
+         launchProgressDialog();
+    }
+    
+    if ( isProgressbarRunning ){
+        if ( count == 0 ) {
+            createModel( mCurrentState->id() );
+            mViewManager->setModel( mCurrentModel );
+            vanishProgressDialog();
+        }
+        else {
+            mViewManager->updateProgressDialog( count );
+        }
+    }   
+}
+
+void GlxStateManager::saveData()
+{
+    if( (mCurrentState->id() == GLX_GRIDVIEW_ID && mCurrentState->state() == ALL_ITEM_S) || mCurrentState->id() == GLX_LISTVIEW_ID ) {
+    mSaveActivity.insert("ID",mCurrentState->id()); 
+    mSaveActivity.insert("InternalState",mCurrentState->state());
+    
+    //Store the visual Index
+    if(mCurrentModel)
+    {
+    	QVariant variant = mCurrentModel->data( mCurrentModel->index(0,0), GlxVisualWindowIndex );
+    	if ( variant.isValid() &&  variant.canConvert<int> () ) {
+         mSaveActivity.insert("VisibleIndex",variant.value<int>());
+    	}
+ 		}
+ 		else
+ 			   mSaveActivity.insert("VisibleIndex",0);
+ 			   
+    HbActivityManager* activityManager = qobject_cast<HbApplication*>(qApp)->activityManager();
+    
+    //Take a screenshot
+    QVariantHash metadata;
+    HbMainWindow *window = hbInstance->allMainWindows().first();
+    metadata.insert("screenshot", QPixmap::grabWidget(window, window->rect()));
+
+     QByteArray serializedModel;
+     QDataStream stream(&serializedModel, QIODevice::WriteOnly | QIODevice::Append);
+     stream << mSaveActivity;
+     //Add the activity
+    bool ok = activityManager->addActivity("PhotosMainView", serializedModel, metadata);
+     if ( !ok )
+     {
+        qDebug("SaveData::Add activity failed" );
+    }
+   }
+}
+
+
 void GlxStateManager::nextState(qint32 state, int internalState)
 {
     qDebug("GlxStateManager::nextState next state = %u", state);
@@ -166,7 +310,7 @@
 
     if ( mCurrentState->previousState() == NULL ) { //In the case only one state in stack then exit from the application
         exitApplication() ;
-        mCurrentState = NULL;
+        return ;
     }
     else {
         //effect parameter should be set here other wise there is no way to know from where it come from
@@ -187,14 +331,23 @@
 void GlxStateManager::goBack(qint32 stateId, int internalState)
 {
     qDebug("GlxStateManager::goBack()");
+    
+    //if current state and it internal state is same then no need to do any thing
+    if ( mCurrentState->id() == stateId  && mCurrentState->state() == internalState ) {
+        return ;
+    }
+    
     GlxState *state = mCurrentState;
     
-    do {
+    while ( mCurrentState ) {
+        if ( mCurrentState->id() == stateId  && mCurrentState->state() == internalState ) {
+            break ;           
+        }
+        
         mCurrentState = mCurrentState->previousState(); // set pervious state to the current state
         delete state; //delete the current state
-        state = mCurrentState;
+        state = mCurrentState;    
     }
-    while ( mCurrentState && mCurrentState->id() != stateId ); //check, cuurent state is a new state
     
     //case when new state is not hierarchy then create a new state
     if ( mCurrentState == NULL ) {
@@ -233,6 +386,7 @@
 
 void GlxStateManager::removeCurrentModel()
 {
+    TRACER("GlxStateManager::removeCurrentModel() ");
     if ( mCurrentModel == mAllMediaModel ) {
         qDebug("GlxStateManager::removeCurrentModel() remove all media model");	
         delete mAllMediaModel ;
@@ -257,6 +411,42 @@
     }
 }
 
+void GlxStateManager::cleanAllModel()
+{
+    TRACER("GlxStateManager::cleanAllModel() ");
+    delete mAllMediaModel ;
+    mAllMediaModel = NULL ;
+    delete mAlbumMediaModel ; 
+    mAlbumMediaModel = NULL ;
+    delete mAlbumGridMediaModel ;
+    mAlbumGridMediaModel = NULL ;
+    delete mImageviewerMediaModel ;
+    mImageviewerMediaModel = NULL ;
+    mCurrentModel = NULL ;
+}
+
+void GlxStateManager::launchProgressDialog()
+{
+    TRACER("GlxStateManager::launchProgressDialog() ");
+    //HbMainWindow *window = hbInstance->allMainWindows().first();
+    //window->setAutomaticOrientationEffectEnabled( true );
+    
+    QCoreApplication::instance()->installEventFilter( this );
+    mViewManager->launchProgressDialog( mTNObserver->getTNLeftCount() );
+    isProgressbarRunning = true ;
+}
+
+void GlxStateManager::vanishProgressDialog()
+{
+    TRACER("GlxStateManager::vanishProgressDialog() ");
+    //HbMainWindow *window = hbInstance->allMainWindows().first();
+    //window->setAutomaticOrientationEffectEnabled( false );
+    
+    QCoreApplication::instance()->removeEventFilter( this );
+    isProgressbarRunning = false;
+    mViewManager->updateProgressDialog( 0 );    
+}
+
 GlxState * GlxStateManager::createState(qint32 stateId)
 {
     qDebug("GlxStateManager::createState state id = %d", stateId);
@@ -436,16 +626,23 @@
         nextState(GLX_SLIDESHOWSETTINGSVIEW_ID,-1 );
         id = EGlxCmdHandled;
         break;
+        
     case EGlxCmdDetailsOpen:
         qDebug("GlxStateManager::eventHandler EGlxCmdDetailsOpen");
         nextState( GLX_DETAILSVIEW_ID, -1 );
         id = EGlxCmdHandled;
         break;
         
-    case EGlxCmdEmptyData :
-        goBack(GLX_GRIDVIEW_ID, NO_GRID_S);
+    case EGlxCmdEmptyData : {
+        GlxState *tmpState = mCurrentState ;
+        while ( tmpState->id() != GLX_GRIDVIEW_ID ) {
+            tmpState = tmpState->previousState() ;
+        }
+        
+        goBack( GLX_GRIDVIEW_ID, tmpState->state() );
         id = EGlxCmdHandled;
         break;
+    }
     	
     case EGlxCmdBack :
     	previousState();
@@ -505,37 +702,37 @@
 
 void GlxStateManager::exitApplication()
 {
-    if ( mCurrentState->id( ) == GLX_FULLSCREENVIEW_ID && mCurrentState->state() == EXTERNAL_S ) {
-        emit externalCommand(EGlxPluginCmdBack);
-    }
-    else {
+    
+    
     //To:Do memory cleanup
         QApplication::quit();
-    }    
+     
 }
 
 GlxStateManager::~GlxStateManager()
 {
     qDebug("GlxStateManager::~GlxStateManager");
-    delete mAllMediaModel;
-    delete mAlbumMediaModel;
-    delete mAlbumGridMediaModel;
-	
+    cleanAllModel();
     delete mActionHandler;
     qDebug("GlxStateManager::~GlxStateManager delete Model");
     
     disconnect ( mViewManager, SIGNAL(actionTriggered(qint32 )), this, SLOT(actionTriggered(qint32 )) );
     disconnect ( mViewManager, SIGNAL(externalCommand(int )), this, SIGNAL(externalCommand(int )) );
+    disconnect ( mTNObserver, SIGNAL( leftTNCount( int ) ), this, SLOT( updateTNProgress( int ) ) );
+    disconnect ( this, SIGNAL( setupItemsSignal() ), this, SLOT( setupItems() ) );
+    disconnect ( qobject_cast<HbApplication*>(qApp), SIGNAL (aboutToQuit()), this, SLOT(saveData()));
+    
+    delete mTNObserver;
     delete mViewManager; 
     qDebug("GlxStateManager::~GlxStateManager delete view manager");
-    delete mImageviewerMediaModel;
+    
     GlxState *tmp;   
     while (mCurrentState) {
         tmp = mCurrentState;
         mCurrentState = mCurrentState->previousState();
         delete tmp;        
     }
-    disconnect ( this, SIGNAL( setupItemsSignal() ), this, SLOT( setupItems() ) );
+    
     qDebug("GlxStateManager::~GlxStateManager Exit");
 }
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ui/viewmanagement/statehandler/src/glxtnobserver.cpp	Thu Jul 22 16:33:32 2010 +0100
@@ -0,0 +1,71 @@
+/*
+* Copyright (c) 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:   ?Description
+*
+*/
+
+#include <glxtnobserver.h>
+#include <e32property.h>
+
+#include "glxtracer.h"
+
+const TUid KTAGDPSNotification = { 0x2001FD51 };
+const TInt KForceBackgroundGeneration = 0x00000010;
+const TInt KItemsleft = 0x00000008;
+
+GlxTNObserver::GlxTNObserver() : mTNMonitor( NULL )
+{
+    TRACER("GlxTNObserver::GlxTNObserver() ");
+    RProperty::Set( KTAGDPSNotification, KForceBackgroundGeneration, ETrue );
+}
+
+void GlxTNObserver::updateTNCount(int &count)
+{
+    TRACER("GlxTNObserver::updateTNCount() ");
+    emit leftTNCount( count );
+}
+
+int GlxTNObserver::getTNLeftCount()
+{
+    TRACER("GlxTNObserver::getTNLeftCount() ");
+    TInt leftVariable =  0;
+    RProperty::Get( KTAGDPSNotification, KItemsleft, leftVariable );
+    //To:Do error handling
+    return leftVariable;
+}
+
+void GlxTNObserver::startTNObserving()
+{
+    TRACER("GlxTNObserver::startTNObserving() ");
+    mTNMonitor = CGlxTNMonitor::NewL( this );
+}
+
+void GlxTNObserver::startTNMDaemon()
+{
+    TRACER("GlxTNObserver::startTNMDaemon() ");
+    RProperty::Set( KTAGDPSNotification, KForceBackgroundGeneration, ETrue );
+}
+
+void GlxTNObserver::stopTNMDaemon()
+{
+    TRACER("GlxTNObserver::stopTNMDaemon() ");
+    RProperty::Set( KTAGDPSNotification, KForceBackgroundGeneration, EFalse );
+}
+
+GlxTNObserver::~GlxTNObserver()
+{
+    TRACER("GlxTNObserver::~GlxTNObserver() ");
+    RProperty::Set( KTAGDPSNotification, KForceBackgroundGeneration, EFalse );
+    delete mTNMonitor;
+}
--- a/ui/viewmanagement/statehandler/statehandler.pro	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/viewmanagement/statehandler/statehandler.pro	Thu Jul 22 16:33:32 2010 +0100
@@ -24,6 +24,7 @@
             ../../inc \
             ../../../inc \
             ../../../loggers/loggerqt/inc \
+            ../../../commonutilities/common/inc \
             ../../uiengine/medialists/inc \
             ../../uiengine/medialistwrapper/inc \
             ../../uiengine/model/mediamodel/inc \
@@ -39,6 +40,7 @@
 TARGET.UID3 = 0x20000A07
 TARGET.CAPABILITY = ALL -TCB 
 TARGET.EPOCALLOWDLLDATA = 1
+MMP_RULES += SMPSAFE
 }
 
 LIBS += -lglxviewmanager.dll \
@@ -47,7 +49,8 @@
         -lglxexternalutility.dll \
         -lglxloggerqt.dll \
         -lglxcommoncommandhandlers.dll \
-        -lglxlogging.dll
+        -lglxlogging.dll \
+        -lglxcommon.dll
 
 # Input
 HEADERS += inc/glxbasestate.h \
@@ -59,7 +62,8 @@
            inc/glxstatemanager.h \
            inc/glxslideshowstate.h \
            inc/glxactionhandler.h \
-           inc/glxcommandhandlerfactory.h
+           inc/glxcommandhandlerfactory.h \
+           inc/glxtnobserver.h
 
 SOURCES += src/glxbasestate.cpp \
            src/glxfullscreenstate.cpp \
@@ -70,6 +74,17 @@
            src/glxstatemanager.cpp \
            src/glxslideshowstate.cpp \
            src/glxactionhandler.cpp \
-           src/glxcommandhandlerfactory.cpp
+           src/glxcommandhandlerfactory.cpp \
+           src/glxtnobserver.cpp
 
 DEFINES += QT_NO_DEBUG_OUTPUT QT_NO_WARNING_OUTPUT
+
+defBlock = \      
+"$${LITERAL_HASH}if defined(EABI)" \
+"DEFFILE  ../eabi/glxstatehandler.def" \
+	 "$${LITERAL_HASH}else" \
+	 "DEFFILE  ../bwins/glxstatehandler.def" \
+             "$${LITERAL_HASH}endif"
+	
+MMP_RULES += defBlock
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ui/viewmanagement/viewmanager/inc/glxmainwindoweventfilter.h	Thu Jul 22 16:33:32 2010 +0100
@@ -0,0 +1,26 @@
+#ifndef GLXMAINWINDOWEVENTFILTER_H
+#define GLXMAINWINDOWEVENTFILTER_H
+#include <QObject>
+#include <QEvent>
+class GlxMainWindowEventFilter : public QObject {
+    Q_OBJECT
+public:
+
+    GlxMainWindowEventFilter() {}
+    virtual bool eventFilter(QObject *o, QEvent *e) {
+        Q_UNUSED(o);
+        switch(e->type()) {
+        case QEvent::TouchBegin:
+        case QEvent::TouchUpdate:
+        case QEvent::TouchEnd:
+            e->accept();
+            return true;
+        default:
+            break;
+        }
+        return false;
+    }
+
+};
+
+#endif
\ No newline at end of file
--- a/ui/viewmanagement/viewmanager/inc/glxviewmanager.h	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/viewmanagement/viewmanager/inc/glxviewmanager.h	Thu Jul 22 16:33:32 2010 +0100
@@ -19,7 +19,7 @@
 
 #ifndef GLXVIEWMANAGER_H
 #define GLXVIEWMANAGER_H
- #include <QItemSelectionModel>
+
 #include <QObject>
 #include <QList>
 #include <hbeffect.h>
@@ -34,7 +34,9 @@
 class HbAction;
 class QItemSelectionModel;
 class HbMenu;
-class GlxSlideShowEffectEngine;
+class GlxEffectEngine;
+class HbProgressDialog;
+class GlxMainWindowEventFilter;
 
 #ifdef BUILD_VIEWMANAGER
 #define GLX_VIEWMANAGER_EXPORT Q_DECL_EXPORT
@@ -59,7 +61,7 @@
 public :
     GlxViewManager();
     ~GlxViewManager();
-    void setupItems(int subState = -1);
+    void setupItems( );
     void launchApplication(qint32 id, QAbstractItemModel *model);
     void addBackSoftKeyAction();
 /*
@@ -92,6 +94,10 @@
  *  Return the selection model to the user
  */    
     QItemSelectionModel * getSelectionModel(qint32 viewId);
+/*
+ * To set the model of current view
+ */
+    void setModel( QAbstractItemModel *model );
 	    
 signals :
 /*
@@ -99,6 +105,7 @@
  */
     void actionTriggered(qint32 id);
     void externalCommand(int cmdId);
+    void applicationReady();
 
 public slots:
 /*
@@ -109,6 +116,9 @@
  *  It is over load slot and used to run the animation for view transition and launch the view
  */    
     void launchView (qint32 id, QAbstractItemModel *model, GlxEffect effect, GlxViewEffect viewEffect);
+    
+    void launchProgressDialog( int maxValue );
+    void updateProgressDialog( int currentValue);
 /*
  *  It will removed and deleted the view.
  *  Currently It is not used so may be in future, It will be removed.
@@ -137,11 +147,14 @@
  */    
     void itemSpecificMenuTriggered(qint32,QPointF );
     
+    void handleReadyView();
 protected:
 	
 private slots:
 
    void checkMarked();
+   void hideProgressDialog();
+   
 private:
 /*
  * It will create and return the view
@@ -189,15 +202,17 @@
     HbMainWindow     *mMainWindow; //main window pointer, It have ownership only if 
     HbAction         *mBackAction; // For back soft key
     GlxMenuManager   *mMenuManager; //Pointer of menu manger to add the menu in the view 
-    GlxSlideShowEffectEngine *mEffectEngine; //To run the animation in between view transition
+    GlxEffectEngine  *mEffectEngine; //To run the animation in between view transition
     QList<HbAction *>  mActionList; //Tool bar action list
     QList<HbAction *>  mMarkingActionList; //marking mode tool bar action list
     HbToolBar          *mViewToolBar; //view tool bar
     HbToolBar          *mMarkingToolBar; //marking mode tool bar
-    HbMenu *mMenu; 
     GlxView *mView;
     QAbstractItemModel *mModel; //no ownership
-	QItemSelectionModel * mSelectionModel;
+    QItemSelectionModel * mSelectionModel;
+    HbProgressDialog *mProgressDialog;
+    GlxMainWindowEventFilter* mWindowEventFilter;
+
 };
 
 
--- a/ui/viewmanagement/viewmanager/src/glxmenumanager.cpp	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/viewmanagement/viewmanager/src/glxmenumanager.cpp	Thu Jul 22 16:33:32 2010 +0100
@@ -20,7 +20,8 @@
 #include <hbaction.h>
 #include <hbmenu.h>
 #include <hbmainwindow.h>
-
+#include <featdiscovery.h>
+#include <publicruntimeids.hrh>
 //user include
 #include "glxviewids.h"
 #include "glxmenumanager.h"
@@ -29,7 +30,6 @@
 #include "glxlocalisationstrings.h"
 
 
-
 GlxMenuManager::GlxMenuManager(HbMainWindow* mainWindow)
     : mModel( 0),
       mMainWindow( mainWindow ),
@@ -48,11 +48,13 @@
     
     action = menu->addAction(GLX_OPTION_MARK_ALL);
     action->setData(EGlxCmdMarkAll);
+    action->setObjectName( "Menu MarkAll" );
     connect(action, SIGNAL(triggered()), this, SLOT(menuItemSelected()));
     
     action = menu->addAction(GLX_OPTION_UN_MARK_ALL);
     action->setDisabled(true);  //Dim UnMarkAll when no images are marked
     action->setData(EGlxCmdUnMarkAll);
+    action->setObjectName( "Menu UnMarkAll" );
     connect(action, SIGNAL(triggered()), this, SLOT(menuItemSelected()));    
 }
 
@@ -61,11 +63,12 @@
     QList<QAction*> actionList = menu->actions();
     for ( int i = 0 ; i < actionList.count(); i++) {
         if(actionList.at(i)->data()==EGlxCmdUnMarkAll) {
-               actionList.at(i)->setDisabled(disable);
-               break;
+            actionList.at(i)->setDisabled(disable);
+            break;
         }
      }
 }
+
 void GlxMenuManager::addMenu(qint32 viewId, HbMenu* menu)
 {
     switch(viewId) {
@@ -108,29 +111,39 @@
 {
     qDebug()<<"GlxMenuManager::CreateGridMenu";
     HbAction *action = NULL;
+    menu->setObjectName( "GridMenu" );
     
     action = menu->addAction(GLX_OPTION_SHARE);
     action->setData(EGlxCmdSend);
+    action->setObjectName( "GridMenu Send" );
     connect(action, SIGNAL(triggered()), this, SLOT(menuItemSelected()));
    
     mSubMenu = menu->addMenu(GLX_OPTION_SLIDESHOW);
+    mSubMenu->setObjectName( "GridMenu SlideShow" );
+	
     action = mSubMenu->addAction(GLX_OPTION_SS_PLAY); 
     action->setData(EGlxCmdFirstSlideshow);
+    action->setObjectName( "GridMenu Play" );
     connect(action, SIGNAL(triggered()), this, SLOT(menuItemSelected()));
     
     action = mSubMenu->addAction(GLX_OPTION_SS_SETTINGS);
     action->setData(EGlxCmdSlideshowSettings);
+    action->setObjectName( "GridMenu Setting" );
     connect(action, SIGNAL(triggered()), this, SLOT(menuItemSelected())); 
+    
     action = menu->addAction(GLX_OPTION_ADD_TO_ALBUM);
     action->setData(EGlxCmdAddToAlbum);
+    action->setObjectName( "GridMenu AddToAlbum" );
     connect(action, SIGNAL(triggered()), this, SLOT(menuItemSelected()));
     
     action = menu->addAction(GLX_OPTION_REMOVE_FROM_ALBUM);
     action->setData(EGlxCmdRemoveFrom);
+    action->setObjectName( "GridMenu RemoveAlbum" );
     connect(action, SIGNAL(triggered()), this, SLOT(menuItemSelected()));
 
     action = menu->addAction(GLX_OPTION_DELETE);
     action->setData(EGlxCmdDelete);
+    action->setObjectName( "GridMenu Delete" );
     connect(action, SIGNAL(triggered()), this, SLOT(menuItemSelected()));
 }
 
@@ -138,9 +151,11 @@
 {
     qDebug()<<"GlxMenuManager::CreateListMenu";
     HbAction *action = NULL;
+    menu->setObjectName( "Listmenu" );
     
     action = menu->addAction(GLX_OPTION_NEW_ALBUM);
     action->setData(EGlxCmdAddMedia);
+    action->setObjectName( "ListMenu NewAlbum" );
     connect(action, SIGNAL(triggered()), this, SLOT(menuItemSelected()));
 }
 
@@ -148,21 +163,47 @@
 {
     qDebug()<<"GlxMenuManager::CreateFullscreenMenu";
     HbAction *action = NULL;
+    menu->setObjectName( "FSMenu" );
     
     action = menu->addAction(GLX_OPTION_SHARE);
     action->setData(EGlxCmdSend);
+    action->setObjectName( "FSMenu Share" );
     connect(action, SIGNAL(triggered()), this, SLOT(menuItemSelected()));
     
     mSubMenu = menu->addMenu(GLX_OPTION_SLIDESHOW);
-    action = mSubMenu->addAction(GLX_OPTION_SS_PLAY); 
+    mSubMenu->setObjectName( "FSMenu SlideShow" );
+    
+    action = mSubMenu->addAction(GLX_OPTION_SS_PLAY);
     action->setData(EGlxCmdSelectSlideshow);
-    connect(action, SIGNAL(triggered()), this, SLOT(menuItemSelected())); 
+    action->setObjectName( "FSMenu Play" );
+    connect(action, SIGNAL(triggered()), this, SLOT(menuItemSelected()));
+    
     action = mSubMenu->addAction(GLX_OPTION_SS_SETTINGS);
     action->setData(EGlxCmdSlideshowSettings);
+    action->setObjectName( "FSMenu Setting" );
     connect(action, SIGNAL(triggered()), this, SLOT(menuItemSelected()));
+#ifndef __WINSCW__
+	CFeatureDiscovery* featManager = CFeatureDiscovery::NewL();
+    if(featManager->IsFeatureSupportedL(KFeatureIdFfImageEditor))
+        {
+		mSubMenu = menu->addMenu(QString("Rotate"));
+		action = mSubMenu->addAction(QString("90 CW")); 
+		action->setData(EGlxCmdRotateImgCW);
+		connect(action, SIGNAL(triggered()), this, SLOT(menuItemSelected())); 
+		action = mSubMenu->addAction(QString("90 CCW"));
+		action->setData(EGlxCmdRotateImgCCW);
+		connect(action, SIGNAL(triggered()), this, SLOT(menuItemSelected()));
+		
+		action = menu->addAction(QString("Crop"));
+		action->setData(EGlxCmdRotateImgCrop);
+		connect(action, SIGNAL(triggered()), this, SLOT(menuItemSelected()));   
+        }
+    delete featManager;
+#endif //__WINSCW__	
     
     action = menu->addAction(GLX_OPTION_ADD_TO_ALBUM);
     action->setData(EGlxCmdAddToAlbum);
+    action->setObjectName( "FSMenu AddToAlbum" );
     connect(action, SIGNAL(triggered()), this, SLOT(menuItemSelected()));
 }
 
@@ -249,30 +290,36 @@
 {
     qDebug("GlxMenuManager::showContextMenu " );
     mContextMenu = new HbMenu();
+    mContextMenu->setObjectName( "ContextMenu" );
     HbAction *action = NULL;
 
     switch ( viewId ) {
 	    case GLX_GRIDVIEW_ID :
 	        action = mContextMenu->addAction(GLX_MENU_SHARE);
 	        action->setData(EGlxCmdContextSend);
+	        action->setObjectName( "CM Send" );
 	        connect(action, SIGNAL(triggered()), this, SLOT(menuItemSelected()));
 	        
 	        action = mContextMenu->addAction(GLX_MENU_SLIDESHOW);
 	        action->setData(EGlxCmdSelectSlideshow);
+	        action->setObjectName( "CM SlideShow" );
 	        connect(action, SIGNAL(triggered()), this, SLOT(menuItemSelected()));
 
 	        if ( viewSubState() == ALBUM_ITEM_S ) {        
-	        action = mContextMenu->addAction(GLX_OPTION_REMOVE_FROM_ALBUM);
-	        action->setData(EGlxCmdContextRemoveFrom);
-	        connect(action, SIGNAL(triggered()), this, SLOT(menuItemSelected()));
+                action = mContextMenu->addAction(GLX_OPTION_REMOVE_FROM_ALBUM);
+                action->setData(EGlxCmdContextRemoveFrom);
+                action->setObjectName( "CM RemoveAlbum" );
+                connect(action, SIGNAL(triggered()), this, SLOT(menuItemSelected()));
 	        }
 	        
 	        action = mContextMenu->addAction(GLX_MENU_ADD_TO_ALBUM);
 		    action->setData(EGlxCmdContextAddToAlbum);
+		    action->setObjectName( "CM AddToAlbum" );
 		    connect(action, SIGNAL(triggered()), this, SLOT(menuItemSelected()));
 		    
 		    action = mContextMenu->addAction(GLX_MENU_DELETE);
 		    action->setData(EGlxCmdContextDelete);
+		    action->setObjectName( "CM Delete" );
 		    connect(action, SIGNAL(triggered()), this, SLOT(menuItemSelected()));
 			break;
 	    	
@@ -286,6 +333,7 @@
 	        if ( count ) {
                 action = mContextMenu->addAction(GLX_MENU_SLIDESHOW);
                 action->setData(EGlxCmdAlbumSlideShow);
+                action->setObjectName( "CM Album SlideShow" );
                 connect(action, SIGNAL(triggered()), this, SLOT(menuItemSelected()));
 	        }
 	        
@@ -293,10 +341,12 @@
             if ( variant.isValid() &&  variant.canConvert<bool> () && ( variant.value<bool>() == false ) ) {           
                 action = mContextMenu->addAction(GLX_MENU_RENAME);
                 action->setData(EGlxCmdContextRename);
+                action->setObjectName( "CM Rename" );
                 connect(action, SIGNAL(triggered()), this, SLOT(menuItemSelected()));
                             
                 action = mContextMenu->addAction(GLX_MENU_DELETE);
                 action->setData(EGlxCmdContextAlbumDelete);
+                action->setObjectName( "CM Album Delete" );
                 connect(action, SIGNAL(triggered()), this, SLOT(menuItemSelected()));
             }
 	    }
--- a/ui/viewmanagement/viewmanager/src/glxviewmanager.cpp	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/viewmanagement/viewmanager/src/glxviewmanager.cpp	Thu Jul 22 16:33:32 2010 +0100
@@ -35,6 +35,11 @@
 #include <hbmenu.h>
 #include <QDebug>
 #include <hbstyleloader.h>
+#include <hbprogressdialog.h>
+#include <QItemSelectionModel>
+#include <glxmainwindoweventfilter.h>
+#include <xqsettingsmanager.h>
+#include <xqsettingskey.h>
 
 
 GlxViewManager::GlxViewManager() 
@@ -42,9 +47,9 @@
       mMenuManager( NULL ), 
       mEffectEngine( NULL ), 
       mViewToolBar( NULL ), 
-      mMarkingToolBar( NULL ),      
-      mMenu( NULL ),
-      mSelectionModel ( NULL )
+      mMarkingToolBar( NULL ), 
+      mSelectionModel ( NULL ),
+      mProgressDialog( NULL )
 {
     qDebug("GlxViewManager::GlxViewManager() ");
     PERFORMANCE_ADV ( viewMgrD1, "main window creation time" ) {
@@ -52,20 +57,29 @@
         mMainWindow = GlxExternalUtility::instance()->getMainWindow();
         if(mMainWindow == NULL)	{
             mMainWindow = new HbMainWindow();
+            connect(mMainWindow, SIGNAL( viewReady() ), this, SLOT( handleReadyView() ));
         }
 		//Without this Zoom Does not work
+
+		mWindowEventFilter = new GlxMainWindowEventFilter;
+		mMainWindow->scene()->installEventFilter(mWindowEventFilter);
+		mMainWindow->viewport()->setAttribute(Qt::WA_AcceptTouchEvents);
 		mMainWindow->viewport()->grabGesture(Qt::PinchGesture);
     }
     HbStyleLoader::registerFilePath(":/data/photos.css");
 }
+void GlxViewManager::handleReadyView()
+{
+    emit actionTriggered( EGlxCmdSetupItem );
+    emit applicationReady();
+    disconnect(mMainWindow, SIGNAL( viewReady() ), this, SLOT( handleReadyView() ));
+}
 
-void GlxViewManager::setupItems(int subState)
+void GlxViewManager::setupItems( )
 {
     mMenuManager = new GlxMenuManager(mMainWindow);
-    addBackSoftKeyAction(); 
-    createToolBar();
-    addConnection();
-    mView->addToolBar(mViewToolBar);
+    addBackSoftKeyAction();    
+    addConnection();    
     mMenuManager->addMenu( mView->viewId(), mView->menu() );
     mMenuManager->setModel( mModel );
 }
@@ -76,6 +90,18 @@
     PERFORMANCE_ADV ( viewMgrD1, "View Creation time" ) {
         mView = resolveView(id);
     }
+    createToolBar();
+    mView->addToolBar(mViewToolBar);
+    
+    /* We are showing the toolBar before activating the 
+     * view. This is done to avoid the animation effect seen otherwise 
+     * when the tool bar comes up.
+     * 
+     * If animation Effect is not removed, it leads to flickering effect 
+     * since we are creating a new tool bar..although a fake tool bar was 
+     * already created on the splashscreen
+     * 
+     */
     mView->activate();
     
     PERFORMANCE_ADV ( viewMgrD3, "Set Model time")  
@@ -105,7 +131,8 @@
     //create the back soft key action and set the data
     mBackAction = new HbAction(Hb::BackNaviAction, this);
     mBackAction->setData(EGlxCmdBack);
-    mView->setNavigationAction(mBackAction);
+    mBackAction->setObjectName( "App Back" );
+    mView->setNavigationAction( mBackAction );
 }
 
 Qt::Orientation GlxViewManager::orientation() const
@@ -137,9 +164,9 @@
     
     //create and registered the effect
     if ( mEffectEngine == NULL ) { 
-        mEffectEngine = new GlxSlideShowEffectEngine();
+        mEffectEngine = new GlxEffectEngine();
         mEffectEngine->registerTransitionEffect();
-        connect( mEffectEngine, SIGNAL( effectFinished() ), this, SLOT( effectFinished() ) );
+        connect( mEffectEngine, SIGNAL( effectFinished() ), this, SLOT( effectFinished() ), Qt::QueuedConnection );
     }
     
     QList< QGraphicsItem * > itemList;
@@ -185,6 +212,94 @@
     }    
 }
 
+void GlxViewManager::launchProgressDialog( int maxValue )
+{
+    if ( maxValue <= 0 ) {
+        // TNM return the some error code ( negative value ) until it populated the count
+		// To show progress dialog 10 is chossen
+	     maxValue = 10;
+		          
+    }
+    if ( mProgressDialog == NULL ) {
+        mProgressDialog = new HbProgressDialog( HbProgressDialog::ProgressDialog );
+        mProgressDialog->actions().at(0)->disconnect( SIGNAL( triggered() ) );
+        connect ( mProgressDialog->actions().at(0), SIGNAL( triggered() ), this, SLOT( hideProgressDialog() ) );
+        mProgressDialog->setMinimum( 0 );
+    }
+    mProgressDialog->setMaximum( maxValue );
+    mProgressDialog->setProgressValue( 0 );
+    mProgressDialog->setModal( true );
+    mProgressDialog->actions().at(0)->setText( GLX_BUTTON_HIDE );
+    mProgressDialog->open();
+}
+
+void GlxViewManager::hideProgressDialog( )
+{
+    mMainWindow->lower();
+}
+
+void GlxViewManager::updateProgressDialog( int currentValue )
+{
+    static int i = 0;
+    HbIcon icon;
+    User::ResetInactivityTime();  
+
+    //To:Do temp code remove later
+    if ( mProgressDialog ) {
+        i = ++i % 10;
+        switch ( i ) {
+        case 0 :
+            icon = HbIcon( QString(":/data/Image1.jpg") );
+            break;
+        case 1 :
+            icon = HbIcon( QString(":/data/Image2.jpg") );
+            break;
+        case 2 :
+            icon = HbIcon( QString(":/data/Image3.jpg") );
+            break;
+        case 3 :
+            icon = HbIcon( QString(":/data/Image4.jpg") );
+            break;
+        case 4 :
+            icon = HbIcon( QString(":/data/Image5.jpg") );
+            break;
+        case 5 :
+            icon = HbIcon( QString(":/data/Image6.jpg") );
+            break;
+        case 6 :
+            icon = HbIcon( QString(":/data/Image7.jpg") );
+            break;
+        case 7 :
+            icon = HbIcon( QString(":/data/Image8.jpg") );
+            break;
+        case 8 :
+            icon = HbIcon( QString(":/data/Image9.jpg") );
+            break;
+        case 9 :
+            icon = HbIcon( QString(":/data/Image10.jpg") );
+            break;            
+        }
+        
+        int max = mProgressDialog->maximum() ;
+        if ( currentValue > max ) {
+            mProgressDialog->setMaximum( currentValue );
+            max = currentValue ;
+        }
+        
+        mProgressDialog->setIcon(icon);
+        
+        if ( currentValue < 0 ) {
+            mProgressDialog->setText( QString( "Refreshing" ) ); //To:Do string will change later
+            mProgressDialog->setProgressValue( 0 );
+        }
+        else {
+            int value = max - currentValue;
+            mProgressDialog->setProgressValue( value );
+            mProgressDialog->setText( QString( " %1 " ).arg( currentValue ) );
+        }
+    }
+}
+
 //to be called only when the photos plugin was activated by external means
 void GlxViewManager::deactivateCurrentView()
 {
@@ -226,33 +341,25 @@
     QModelIndexList selectedModelIndex = mSelectionModel->selectedIndexes();
     for ( int i = 0 ; i <  mMarkingActionList.count(); i++) {
         if( mMarkingActionList.at(i)->data()==EGlxCmdSelect) {
-       		bool noSelection=selectedModelIndex.empty();
-          mMarkingActionList.at(i)->setDisabled(noSelection);
-          mMenuManager->disableAction(mView->menu(),noSelection);
-        	break;
+       	    bool noSelection=selectedModelIndex.empty();
+            mMarkingActionList.at(i)->setDisabled(noSelection);
+            mMenuManager->disableAction(mView->menu(),noSelection);
+            break;
         }
     }
 }
+
 void GlxViewManager::enterMarkingMode(qint32 viewId)
 {
     GlxView *view = findView ( viewId );
     qDebug("GlxViewManager::enterMarkingMode view ID %d", viewId);
     
-    //In the case of first time create the marking mode menu( Mark All, Un Mark All )
-    if( mMenu == NULL ) {
-        mMenu = new HbMenu();
-        mMenuManager->createMarkingModeMenu(mMenu);
-    }
-    
     if ( mMarkingToolBar == NULL) {
         createMarkingModeToolBar(); //Marking mode tool bar is different from normal mode tool bar
     }
     
     if ( view ) { 
         view->enableMarking();
-        HbMenu *menu = view->takeMenu(); //Take the owner ship of current menu
-        view->setMenu(mMenu); //Set the marking mode menu
-        mMenu = menu;
         view->takeToolBar();
         view->addToolBar(mMarkingToolBar);
         mSelectionModel = view->getSelectionModel();
@@ -271,9 +378,6 @@
     qDebug("GlxViewManager::exitMarkingMode view ID %d", viewId);
     if ( view ) { 
         view->disableMarking(); 
-        HbMenu *menu = view->takeMenu(); //Take the owner ship of current menu
-        view->setMenu(mMenu); //Set the view menu option
-        mMenu = menu;
         view->takeToolBar();
         view->addToolBar(mViewToolBar);
         if(mSelectionModel)
@@ -302,6 +406,17 @@
     return NULL;
 }
 
+void GlxViewManager::setModel( QAbstractItemModel *model )
+{
+    if ( mView ) {
+        mView->setModel( model ) ;
+    }
+    
+    if ( mMenuManager ) {
+        mMenuManager->setModel( model );
+    }    
+}
+
 GlxView * GlxViewManager::resolveView(qint32 id)
 {
     qDebug("GlxViewManager::resolveView %d", id);
@@ -319,7 +434,9 @@
         if ( mMenuManager ) {
             mMenuManager->addMenu( id, view->menu());
         }
-        view->setNavigationAction(mBackAction);
+        if ( mBackAction ) {
+            view->setNavigationAction( mBackAction );
+        }
     }
     return view;
 }
@@ -394,30 +511,63 @@
     mActionList.clear();  
     
     //create the All tool bar button action
-    HbAction* allAction = new HbAction(this);
-    allAction->setData(EGlxCmdAllGridOpen);
-    mActionList.append(allAction);    
-    allAction->setIcon(HbIcon(GLXICON_ALL)) ;
+    HbAction* allAction = new HbAction( this );
+    allAction->setData( EGlxCmdAllGridOpen );
+    mActionList.append( allAction );    
+    allAction->setIcon( HbIcon( GLXICON_ALL ) ) ;
+    allAction->setObjectName( "All Action" );
        
     //create the Album tool bar button action
-    HbAction* albumAction = new HbAction(this);
-    albumAction->setData(EGlxCmdAlbumListOpen);
-    mActionList.append(albumAction);
-    albumAction->setIcon(HbIcon(GLXICON_ALBUMS)) ;
+    HbAction* albumAction = new HbAction( this );
+    albumAction->setData( EGlxCmdAlbumListOpen );
+    mActionList.append( albumAction );
+    albumAction->setIcon( HbIcon( GLXICON_ALBUMS ) ) ;
+    albumAction->setObjectName( "Album Action" );
    
     //create the album tool bar button action
-    HbAction* cameraAction = new HbAction(this);
-    cameraAction->setData(EGlxCmdCameraOpen);
-    mActionList.append(cameraAction);  
-    cameraAction->setIcon(HbIcon(GLXICON_CAMERA)) ;
+    HbAction* cameraAction = new HbAction( this );
+    cameraAction->setData( EGlxCmdCameraOpen );
+    mActionList.append( cameraAction );  
+    cameraAction->setIcon( HbIcon( GLXICON_CAMERA ) ) ;
+    cameraAction->setObjectName( "Camera Action" );
+    
+    //Configure the 4 th Action in the tool bar
+    XQSettingsManager *ciSettingsManager = NULL;
+    ciSettingsManager = new XQSettingsManager(this);
+    
+    
+    XQSettingsKey* operatorLinkCenrepKey = NULL;
+    operatorLinkCenrepKey = new XQSettingsKey(XQSettingsKey::TargetCentralRepository, 
+                                            KGlxCi_UidGallery, KGlxOperatorLink);
+    QVariant value = ciSettingsManager->readItemValue(*operatorLinkCenrepKey);
     
     
-    //create the ovi tool bar button action
-    HbAction* oviAction = new HbAction(this);
-    oviAction->setData(EGlxCmdOviOpen);
-    mActionList.append(oviAction);
-    oviAction->setIcon(HbIcon(GLXICON_OVI)) ;
+    switch(value.toInt()) {
+        case KGlxOvi:
+            {
+                XQSettingsKey* oviCenrepKey = NULL;
+                oviCenrepKey = new XQSettingsKey(XQSettingsKey::TargetCentralRepository, 
+                                                        KGlxCi_UidGallery, KGlxOvi);
+                QVariant Ovivalue = ciSettingsManager->readItemValue(*oviCenrepKey, XQSettingsManager::TypeString);
+                HbAction* configurableAction = new HbAction(this);
+                configurableAction->setData(EGlxCmdOviOpen);
+                mActionList.append(configurableAction);
+            
+                if ( Ovivalue.isValid() && Ovivalue.canConvert<QString>() ) {
+                    configurableAction->setIcon( HbIcon( Ovivalue.toString() ) );
+                }
 
+                delete oviCenrepKey;
+            }
+            break;
+            
+        default:
+            qDebug("GlxViewManager::Configurable Action is empty " );
+            break;
+    }
+    
+    delete operatorLinkCenrepKey;
+    delete ciSettingsManager;
 }
 
 void GlxViewManager::createMarkingModeActions()
@@ -427,6 +577,7 @@
     //create the ok tool bar button action
     HbAction* selectAction = new HbAction(GLX_BUTTON_OK, this);
     selectAction->setData(EGlxCmdSelect);
+    selectAction->setObjectName( "Select Action" );
     mMarkingActionList.append(selectAction);
     connect( selectAction, SIGNAL(triggered( )), this, SLOT(handleAction( )), Qt::QueuedConnection );
     mMarkingToolBar->addAction( selectAction );
@@ -434,6 +585,7 @@
     //create the cancel tool bar button action
     HbAction* cancelAction = new HbAction(GLX_BUTTON_CANCEL, this);
     cancelAction->setData(EGlxCmdCancel);
+    cancelAction->setObjectName( "Cancel Action" );
     mMarkingActionList.append(cancelAction); 
     connect( cancelAction, SIGNAL(triggered( )), this, SLOT(handleAction( )), Qt::QueuedConnection ); 
     mMarkingToolBar->addAction( cancelAction );
@@ -478,7 +630,7 @@
         connect(mBackAction, SIGNAL( triggered() ), this, SLOT( handleAction() ));
         
     if ( mEffectEngine )  {
-        connect( mEffectEngine, SIGNAL( effectFinished() ), this, SLOT( effectFinished() ) );
+        connect( mEffectEngine, SIGNAL( effectFinished() ), this, SLOT( effectFinished() ), Qt::QueuedConnection );
     }        
 }
 
@@ -532,20 +684,21 @@
     HbStyleLoader::unregisterFilePath(":/data/photos.css");
 	
     removeConnection();
+	
     delete mMenuManager;
-    qDebug("GlxViewManager::~GlxViewManager deleted menu manager");
+    qDebug("GlxViewManager::~GlxViewManager deleted menu manager");    
+    delete mViewToolBar;
+    delete mMarkingToolBar;
+    qDebug("GlxViewManager::~GlxViewManager deleted toolbar");
     
     while( mViewList.isEmpty( ) == FALSE){
         delete mViewList.takeLast() ;
     }
-    qDebug("GlxViewManager::~GlxViewManager view deleted");
-    
+    qDebug("GlxViewManager::~GlxViewManager view deleted");    
         
     delete mBackAction;
-    delete mViewToolBar;
-    delete mMarkingToolBar;
-    delete mMenu;
-             
+    delete mProgressDialog;
+    
     if ( mEffectEngine ) {
         mEffectEngine->deregistertransitionEffect();
         delete mEffectEngine;
@@ -555,6 +708,7 @@
         qDebug("GlxViewManager::~GlxViewManager remove view");
         delete mMainWindow;
     }
+    delete mWindowEventFilter;
     
     qDebug("GlxViewManager::~GlxViewManager Exit");
 }
--- a/ui/viewmanagement/viewmanager/viewmanager.pro	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/viewmanagement/viewmanager/viewmanager.pro	Thu Jul 22 16:33:32 2010 +0100
@@ -23,14 +23,17 @@
                  ../../views/viewbase/inc \
                  ../../views/effectengine/inc \
                  ../../../loggers/loggerqt/inc \
-                 ../../../commonutilities/externalutility/inc 
+                 ../../../commonutilities/externalutility/inc \
+                 ../../viewutilities/effectengine/inc \
         
 CONFIG += hb
 
 LIBS +=  -lglxexternalutility.dll \
          -lglxviews.dll \
-         -lglxloggerqt.dll 
-
+         -lglxloggerqt.dll \
+         -lglxviewutilities.dll \
+	 -lfeatdiscovery.dll \
+	 -lxqsettingsmanager
 
 DEFINES += BUILD_VIEWMANAGER
 symbian: { 
@@ -38,11 +41,23 @@
 TARGET.UID3 = 0x20000A03
 TARGET.CAPABILITY = ALL -TCB 
 TARGET.EPOCALLOWDLLDATA = 1
+MMP_RULES += SMPSAFE
 }
 # Input
 HEADERS += inc/glxviewmanager.h \
-           inc/glxmenumanager.h 
+           inc/glxmenumanager.h \
+	   inc/glxmainwindoweventfilter.h
 SOURCES += src/glxviewmanager.cpp\
            src/glxmenumanager.cpp 
 
 DEFINES += QT_NO_DEBUG_OUTPUT QT_NO_WARNING_OUTPUT           
+
+defBlock = \      
+"$${LITERAL_HASH}if defined(EABI)" \
+"DEFFILE  ../eabi/glxviewmanager.def" \
+	 "$${LITERAL_HASH}else" \
+	 "DEFFILE  ../bwins/glxviewmanager.def" \
+             "$${LITERAL_HASH}endif"
+	
+MMP_RULES += defBlock
+
--- a/ui/viewplugins/externalviewplugin/externalviewplugin.pro	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/viewplugins/externalviewplugin/externalviewplugin.pro	Thu Jul 22 16:33:32 2010 +0100
@@ -53,4 +53,5 @@
     isEmpty(TARGET.EPOCHEAPSIZE):TARGET.EPOCHEAPSIZE = 20480 \
         41943040
     TARGET.CAPABILITY = ALL -TCB
+    MMP_RULES += SMPSAFE
 }
\ No newline at end of file
--- a/ui/views/detailsview/inc/glxdetailscustomwidgets.h	Wed Jun 16 13:08:54 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,57 +0,0 @@
-/*
-* Copyright (c) 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:   ?Description
-*
-*/
-
-#ifndef GLXDETAILSCUSTOMWIDGETS_H
-#define GLXDETAILSCUSTOMWIDGETS_H
-
-#include <hbdataformmodelitem.h>
-#include <hbdataformviewitem.h>
-
-
-class HbIconItem;
-class HbLabel;
-class HbDataFormModelItem;
-enum 
-    {
-     ImageNameItem = HbDataFormModelItem::CustomItemEnd +1,
-     DateLabelItem,
-     LocationTagItem,
-     DurationItem,
-     ShareWithItem,
-     FaceTagItem,
-     CommentsItem
-     
-    };
-
-class GlxDetailsCustomWidgets: public HbDataFormViewItem
-{
-    Q_OBJECT
-
-public:
-    GlxDetailsCustomWidgets(QGraphicsItem *parent);
-    ~GlxDetailsCustomWidgets();
-     virtual HbAbstractViewItem* createItem();     
-     bool canSetModelIndex(const QModelIndex &index) const;
-
-protected:
-    virtual HbWidget* createCustomWidget();
-
-private:
-    HbLabel *mLabel;
-};
-
-#endif // GLXDETAILSCUSTOMWIDGETS_H
--- a/ui/views/detailsview/inc/glxdetailsview.h	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/views/detailsview/inc/glxdetailsview.h	Thu Jul 22 16:33:32 2010 +0100
@@ -20,16 +20,18 @@
 
 #include <glxview.h>
 
-class HbDataForm;
-class HbDataFormModelItem;
-class HbDataFormModel;
+
 class GlxMediaModel;
 class QAbstractItemModel;
 class HbIconItem;
-class GlxDetailsCustomWidgets;
-class GlxDetailsCustomIcon;
+
 class GlxFavMediaModel;
-
+class HbDocumentLoader;
+class HbLabel;
+class HbPushButton;
+class GlxDetailsNameLabel;
+class GlxDetailsDescriptionEdit;
+class GlxDetailsViewDocLoader;
 
 class GlxDetailsView : public GlxView  
 {
@@ -70,9 +72,9 @@
      * Sets the model corresponding to this view.
      */
     void setModel (QAbstractItemModel *model);
-/*
- * return the view item for animation
- */    
+    /*
+     * return the view item for animation
+     */    
     QGraphicsItem * getAnimationItem(GlxEffect transtionEffect);
 
 
@@ -81,15 +83,11 @@
     void rowsRemoved(const QModelIndex &parent, int start, int end);
     void dataChanged(QModelIndex startIndex, QModelIndex endIndex);
     void updateFavourites();
+    void UpdateDescription();
+    void FillDetails();
     
 private:
 
-   //Adds the Widget required to show the details
-    void addWidgets();
-
-    //Fills the data in the form
-    void setFormData();
-
     /*
      * Retrieves the image from the model and shows the image
      */
@@ -99,6 +97,8 @@
      * Sets the Date to the label recieved from MDS
      */
     void setImageName();
+    
+    void setDesc();
 
     /*
      * Sets the Date to the label received from MDS
@@ -106,6 +106,21 @@
     void setDate();
     
     /*
+     * Sets the time to the label received from MDS
+     */
+    void setTime();
+    
+    /*
+     * Sets the size to the label received from MDS
+     */
+    void setSize();    
+    
+    /*
+     * create the favourite model
+     */
+    void setFavModel();
+    
+    /*
      * Add all the model releted connection and data
      */
     void initializeNewModel();
@@ -119,47 +134,53 @@
      */
     void cleanUp();
     
+    QString sizeinStrings(int size);
+
     /*
-     * create the favourite model
+     * connects the items to slot to respective signals
      */
-    void setFavModel();
+    void setConnections();
 
-
+    /*
+     * clear the connections
+     */
+    void clearConnections();
+    
 private:
     
     //Contains the thumbnail shown in teh details view.
-    HbIconItem *mDetailsIcon;
+    HbLabel *mDetailsIcon;
     
     //Contains the favourite icon which adds or removes the image to favourite folder
-    GlxDetailsCustomIcon *mFavIcon;
-    
+    HbPushButton *mFavIcon;
+   
     //The media Model to acess the attributes; not owned,dont delete.
     QAbstractItemModel *mModel; 
     
     //The media Model to acess the attributes whether image is in favourite folder or not;owned by this view
-    GlxFavMediaModel *mFavModel;
-    
-    //The Model for the Form
-    HbDataFormModel *mDetailModel;
-
+    GlxFavMediaModel *mFavModel;    
+ 
     //The reference to the Main Window
     HbMainWindow *mWindow;
-
-    //The data form for the detail 
-    HbDataForm * mDataForm;
-
-    //Custom widgets which will contain the widgets not created/supported by data form 
-    GlxDetailsCustomWidgets *mCustomPrototype;
-    
+     
     int mSelIndex;
     
-    //Contains the Datelabel item
-    HbDataFormModelItem *mDateLabelItem;
-    
-    //Contains the ImageLabel item
-    HbDataFormModelItem *mImageLabelitem;
-    
-    //Contains the Comments item
-    HbDataFormModelItem *mCommentsLabelitem;
+   //Document Loader  
+    GlxDetailsViewDocLoader *mDocLoader;
+  
+    //Shows the Images
+    GlxDetailsNameLabel *mImageName;
+	
+	//Shows the descriptions
+     GlxDetailsDescriptionEdit *mDescriptions;
+	
+	//Shows the Date 
+    HbLabel *mDateLabel;
+	
+	//Shows the size of the image
+    HbLabel *mSizeLabel;
+	
+	//Shows the time 
+    HbLabel *mTimeLabel;    
 };
 #endif //GLXDETAILSVIEW_H
--- a/ui/views/detailsview/src/glxdetailsview.cpp	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/views/detailsview/src/glxdetailsview.cpp	Thu Jul 22 16:33:32 2010 +0100
@@ -16,16 +16,22 @@
  */
 
 //--------------------------------------------------------------------------------------------------------------------------------------------
+
+
 #include <QModelIndex>
 #include <qdatetime.h>
+#include <QDebug>
+#include <HbAnchorLayout.h>
+//--------------------------------------------------------------------------------------------------------------------------------------------
 
-//--------------------------------------------------------------------------------------------------------------------------------------------
 #include <hblabel.h>
 #include <hbdataform.h>
 #include <hbinstance.h>
 #include <hbiconitem.h>
-#include <hblineedit.h>
+#include <hbframeitem.h>
+#include <hbpushbutton.h>
 #include <hbdataformmodel.h>
+#include <hbdocumentloader.h>
 #include <hbdataformmodelitem.h>
 #include <hbdataformviewitem.h>
 
@@ -36,43 +42,56 @@
 #include "glxmediamodel.h"
 #include "glxdetailsview.h"
 #include "glxfavmediamodel.h"
+#include "glxdocloaderdefs.h"
 #include <glxcommandhandlers.hrh>
-#include "glxdetailscustomicon.h"
-#include "glxdetailscustomwidgets.h"
+#include "glxdetailsdescriptionedit.h"
+#include "glxdetailsnamelabel.h"
+
+
+#include "glxviewdocloader.h"
 #include <glxcollectionpluginalbums.hrh>
 
+#include "glxlog.h"
+#include "glxloggerenabler.h"
+
 
 #include "OstTraceDefinitions.h"
 #ifdef OST_TRACE_COMPILER_IN_USE
 #include "glxdetailsviewTraces.h"
 #endif
 
-
 //SIZE OF THE IMAGE , LAYOUTS TEAM NEED TO GIVER THE SIZE IN UNITS
 #define GLX_IMAGE_SIZE 215 
+const int KBytesInKB = 1024;
+const int KBytesInMB = 1024 * 1024;
+const int KBytesInGB = 1024 * 1024 * 1024;
 
 //--------------------------------------------------------------------------------------------------------------------------------------------
 //GlxDetailsView
 //--------------------------------------------------------------------------------------------------------------------------------------------
-GlxDetailsView::GlxDetailsView(HbMainWindow *window) :  
-    GlxView ( GLX_DETAILSVIEW_ID),
-    mDetailsIcon(NULL),
-    mFavIcon(NULL),
-    mModel(NULL),
-    mFavModel(NULL),
-    mDetailModel(NULL),
-    mWindow(window), 
-    mDataForm(NULL),     
-    mCustomPrototype(NULL),
-    mSelIndex(0),
-    mDateLabelItem(NULL),
-    mImageLabelitem(NULL),
-    mCommentsLabelitem(NULL)
-        {
-    OstTraceFunctionEntry0( GLXDETAILSVIEW_GLXDETAILSVIEW_ENTRY );    
-    setContentFullScreen( true );//for smooth transtion between grid to full screen and vice versa
+GlxDetailsView::GlxDetailsView(HbMainWindow *window) :
+GlxView(GLX_DETAILSVIEW_ID), mDetailsIcon(NULL), mFavIcon(NULL), mModel(
+        NULL), mFavModel(NULL), mWindow(window),
+        mSelIndex(0),mDocLoader(NULL),mImageName(NULL),mDescriptions(NULL),mDateLabel(NULL),mSizeLabel(NULL),mTimeLabel(NULL)
+   {
+    GLX_LOG_INFO("GlxDetailsView::GlxDetailsView");
+    OstTraceFunctionEntry0( GLXDETAILSVIEW_GLXDETAILSVIEW_ENTRY );
+    setContentFullScreen(true);//for smooth transtion between grid to full screen and vice versa
     OstTraceFunctionExit0( GLXDETAILSVIEW_GLXDETAILSVIEW_EXIT );
-        }
+   }
+
+//--------------------------------------------------------------------------------------------------------------------------------------------
+//~GlxDetailsView
+//--------------------------------------------------------------------------------------------------------------------------------------------
+GlxDetailsView::~GlxDetailsView()
+    {
+    OstTrace0( TRACE_IMPORTANT, GLXDETAILSVIEW_GLXDETAILSVIEW, "GlxDetailsView::~GlxDetailsView" );
+    
+    delete mDocLoader;
+    mDocLoader = NULL;
+    
+    cleanUp();
+    }
 
 //--------------------------------------------------------------------------------------------------------------------------------------------
 //activate
@@ -80,9 +99,21 @@
 void GlxDetailsView::activate()
     {
     OstTraceFunctionEntry0( GLXDETAILSVIEW_ACTIVATE_ENTRY );
-    setFormData();    
-    connect(mWindow, SIGNAL(orientationChanged(Qt::Orientation)), this, SLOT(updateLayout(Qt::Orientation)));
-    connect(mFavIcon,SIGNAL(updateFavourites()),this ,SLOT(updateFavourites()));
+    //create and set the Favourite Model
+    setFavModel();
+    
+    //fill the data
+    FillDetails();
+    
+    //Initialze the Model
+    initializeNewModel();
+    
+    //make the connections
+    setConnections();
+        
+    //Set context mode to fetch descriptions
+    mModel->setData(QModelIndex(), (int) GlxContextComment, GlxContextRole);    
+    
     OstTraceFunctionExit0( GLXDETAILSVIEW_ACTIVATE_EXIT );
     }
 
@@ -90,38 +121,63 @@
 //initializeView
 //--------------------------------------------------------------------------------------------------------------------------------------------
 void GlxDetailsView::initializeView(QAbstractItemModel *model)
-    {   
+    {
     OstTraceFunctionEntry0( GLXDETAILSVIEW_INITIALIZEVIEW_ENTRY );
+    bool loaded = false;
+    
+    if(!mDocLoader)
+        {
+         mDocLoader = new GlxDetailsViewDocLoader();
+        }
+    
+    //Load the docml
+    mDocLoader->load(GLX_DETAILSVIEW_DOCMLPATH, &loaded);     
+    
+    HbView *mView = static_cast<HbView*> (mDocLoader->findWidget(
+            GLX_DETAILSVIEW_VIEW));
+    
+    HbWidget *mwidget = static_cast<HbWidget*> (mDocLoader->findWidget(
+            "MainWidget"));
 
-    //To show the thumbnail 
-    if ( mDataForm == NULL) {
-    mDataForm = new HbDataForm(this);
-    mDetailModel = new HbDataFormModel();
+    mDetailsIcon = static_cast<HbLabel*> (mDocLoader->findWidget(
+            GLX_DETAILSVIEW_IMAGE));
+    mFavIcon = static_cast<HbPushButton*> (mDocLoader->findWidget(
+            GLX_DETAILSVIEW_FAVICON));
 
-    //custom prototype
-    mCustomPrototype = new GlxDetailsCustomWidgets(mDataForm);           
-    QList <HbAbstractViewItem*> protos = mDataForm->itemPrototypes();
-    protos.append(mCustomPrototype);
-    mDataForm->setItemPrototypes(protos);
+    mDescriptions = static_cast<GlxDetailsDescriptionEdit*> (mDocLoader->findWidget(
+            GLX_DETAILSVIEW_DESCRPTIONTEXT));
+    
+    mImageName = static_cast<GlxDetailsNameLabel*> (mDocLoader->findWidget(
+            GLX_DETAILSVIEW_IMGNAME));
+    
+    mDateLabel = static_cast<HbLabel*> (mDocLoader->findWidget(
+            GLX_DETAILSVIEW_DATETEXT));
+    
+    mTimeLabel = static_cast<HbLabel*> (mDocLoader->findWidget(
+            GLX_DETAILSVIEW_TIMETEXT));
+    
+    mSizeLabel = static_cast<HbLabel*> (mDocLoader->findWidget(
+            GLX_DETAILSVIEW_SIZETEXT));
 
-    //Add the Widgets according to the mime type
-    addWidgets();
-    }   
-
-    if( mDetailsIcon == NULL) {
-    mDetailsIcon = new HbIconItem(this);
-    mFavIcon = new GlxDetailsCustomIcon(this);
-    }
+    //set the frame graphics to the background of the fav icon
+    HbFrameItem* frame = new HbFrameItem(this);
+    frame->frameDrawer().setFrameType(HbFrameDrawer::NinePieces);
+    frame->frameDrawer().setFrameGraphicsName("qtg_fr_multimedia_trans");
+    frame->graphicsItem()->setOpacity(0.2);
+    mFavIcon->setBackgroundItem(frame->graphicsItem(), -1);
+    mFavIcon->setBackground(HbIcon("qtg_fr_multimedia_trans"));
+    mFavIcon->setIcon(HbIcon(GLXICON_REMOVE_FAV));
+    
+    setWidget(mView);
 
     //Set the Model
-    mModel = model;
-    initializeNewModel();
+    mModel = model;  
 
     //Set the Layout Correspondingly.
     updateLayout(mWindow->orientation());
 
     //Shows the Image 
-    showImage(); 
+    showImage();
     OstTraceFunctionExit0( GLXDETAILSVIEW_INITIALIZEVIEW_EXIT );
     }
 
@@ -130,16 +186,23 @@
 //--------------------------------------------------------------------------------------------------------------------------------------------
 void GlxDetailsView::resetView()
     {
-    OstTrace0( TRACE_NORMAL, GLXDETAILSVIEW_RESETVIEW, "GlxDetailsView::resetView" );   
+    GLX_LOG_INFO("GlxDetailsView::resetView");
+    OstTrace0( TRACE_NORMAL, GLXDETAILSVIEW_RESETVIEW, "GlxDetailsView::resetView" );
     }
 
 //--------------------------------------------------------------------------------------------------------------------------------------------
 //deActivate
 //--------------------------------------------------------------------------------------------------------------------------------------------
 void GlxDetailsView::deActivate()
-    { 
+    {
+    GLX_LOG_INFO("GlxDetailsView::deActivate");
     OstTraceFunctionEntry0( GLXDETAILSVIEW_DEACTIVATE_ENTRY );
-    cleanUp();      
+
+    //Remove the context created to update details
+    mModel->setData(QModelIndex(), (int) GlxContextComment,
+            GlxRemoveContextRole);
+    cleanUp();
+    
     OstTraceFunctionExit0( GLXDETAILSVIEW_DEACTIVATE_EXIT );
     }
 
@@ -151,17 +214,7 @@
     clearCurrentModel();
 
     //clear the connections
-    if(mWindow) {
-    disconnect(mWindow, SIGNAL(orientationChanged(Qt::Orientation)), this, SLOT(updateLayout(Qt::Orientation)));
-    }
-
-    if(mFavModel) {
-    disconnect( mFavModel, SIGNAL( dataChanged(QModelIndex,QModelIndex) ), this, SLOT( dataChanged(QModelIndex,QModelIndex) ) );
-    }
-
-    if(mFavIcon) {
-    disconnect(mFavIcon,SIGNAL(updateFavourites()),this ,SLOT(updateFavourites()));
-    }
+    clearConnections();   
 
     delete mFavModel;
     mFavModel = NULL;
@@ -170,75 +223,7 @@
     mFavIcon = NULL;
 
     delete mDetailsIcon;
-    mDetailsIcon = NULL;    
-    }  
-
-//--------------------------------------------------------------------------------------------------------------------------------------------
-//~GlxDetailsView
-//--------------------------------------------------------------------------------------------------------------------------------------------
-GlxDetailsView::~GlxDetailsView()
-    {
-    OstTrace0( TRACE_IMPORTANT, GLXDETAILSVIEW_GLXDETAILSVIEW, "GlxDetailsView::~GlxDetailsView" );
-
-    cleanUp();     
-
-    if(mDetailModel) {
-      delete mDetailModel;
-      mDataForm->setModel(0);
-    }
-
-    if(mDataForm) {
-    delete mDataForm;
-    mDataForm = NULL;
-    }       
-    }
-
-//--------------------------------------------------------------------------------------------------------------------------------------------
-//addWidgets
-//--------------------------------------------------------------------------------------------------------------------------------------------
-void GlxDetailsView::addWidgets()
-    {
-    OstTrace0( TRACE_NORMAL, GLXDETAILSVIEW_ADDWIDGETS, "GlxDetailsView::addWidgets create Form" );
-
-    //----------------------------START OF CREATION OF WIDGETS---------------------------------//
-    // To add new widgets in the details view, add it here.
-
-    //---------------------------IMAGE NAME LABEL --------------------------------------------//
-    OstTrace0( TRACE_NORMAL, DUP1_GLXDETAILSVIEW_ADDWIDGETS, "GlxDetailsView::addWidgets create Image Label" );
-    mImageLabelitem = mDetailModel->appendDataFormItem(HbDataFormModelItem::TextItem, QString("Name"), NULL);
-
-    //---------------------------DATE LABEL --------------------------------------------//
-    OstTrace0( TRACE_NORMAL, DUP2_GLXDETAILSVIEW_ADDWIDGETS, "GlxDetailsView::addWidgets date label" );
-    mDateLabelItem = mDetailModel->appendDataFormItem((HbDataFormModelItem::DataItemType)(DateLabelItem), QString("Date"), NULL);
-
-
-    //----------------------------COMMENTS TEXT ITEM---------------------------------------------//
-    OstTrace0( TRACE_NORMAL, DUP5_GLXDETAILSVIEW_ADDWIDGETS, "GlxDetailsView::addWidgets comment text" );
-    mCommentsLabelitem = mDetailModel->appendDataFormItem(HbDataFormModelItem::TextItem, QString("Description"), NULL);
-
-    //----------------------------END OF CREATION OF WIDGETS-------------------------------------//
-
-    //Set the model to the Data Form
-    mDataForm->setModel(mDetailModel);
-    }
-
-//--------------------------------------------------------------------------------------------------------------------------------------------
-//setFavModel
-//--------------------------------------------------------------------------------------------------------------------------------------------
-void GlxDetailsView::setFavModel()
-    {
-    GlxModelParm modelParm;
-
-    QString imagePath = (mModel->data(mModel->index(mModel->data(mModel->index(0,0),GlxFocusIndexRole).value<int>(),0),GlxUriRole)).value<QString>();
-
-    if(mFavModel == NULL) {
-    modelParm.setCollection( KGlxCollectionPluginFavoritesAlbumId );
-    modelParm.setContextMode(GlxContextFavorite);
-    modelParm.setPath(imagePath);
-    mFavModel = new GlxFavMediaModel( modelParm );
-    }
-    QString imageName = imagePath.section('\\',-1);
-    connect( mFavModel, SIGNAL( dataChanged(QModelIndex,QModelIndex) ), this, SLOT( dataChanged(QModelIndex,QModelIndex) ) );   
+    mDetailsIcon = NULL;
     }
 
 //--------------------------------------------------------------------------------------------------------------------------------------------
@@ -247,25 +232,112 @@
 void GlxDetailsView::setModel(QAbstractItemModel *model)
     {
     OstTrace0( TRACE_NORMAL, GLXDETAILSVIEW_SETMODEL, "GlxDetailsView::setModel" );
-    if ( mModel == model ) {
-    return ;
-    }
+    if (mModel == model)
+        {
+        return;
+        }
     clearCurrentModel();
     mModel = model;
     initializeNewModel();
     }
 
 //--------------------------------------------------------------------------------------------------------------------------------------------
+//setFavModel
+//--------------------------------------------------------------------------------------------------------------------------------------------
+void GlxDetailsView::setFavModel()
+{
+    GlxModelParm modelParm;
+    QString imagePath = (mModel->data(mModel->index(mModel->data(
+            mModel->index(0, 0), GlxFocusIndexRole).value<int> (), 0),
+            GlxUriRole)).value<QString> ();
+
+    if (mFavModel == NULL)
+        {
+        modelParm.setCollection(KGlxCollectionPluginFavoritesAlbumId);
+        modelParm.setContextMode(GlxContextFavorite);
+        modelParm.setPath(imagePath);
+        mFavModel = new GlxFavMediaModel(modelParm);
+        }
+}
+
+//--------------------------------------------------------------------------------------------------------------------------------------------
+//initializeNewModel
+//--------------------------------------------------------------------------------------------------------------------------------------------
+void GlxDetailsView::initializeNewModel()
+    {
+    OstTrace0( TRACE_NORMAL, GLXDETAILSVIEW_INITIALIZENEWMODEL, "GlxDetailsView::initializeNewModel" );
+
+    if (mModel)
+        {
+    connect(mModel, SIGNAL(rowsRemoved(QModelIndex,int,int)), this,
+            SLOT(rowsRemoved(QModelIndex,int,int)));
+        }
+    }
+
+//--------------------------------------------------------------------------------------------------------------------------------------------
+//clearCurrentModel
+//--------------------------------------------------------------------------------------------------------------------------------------------
+void GlxDetailsView::clearCurrentModel()
+    {
+    OstTrace0( TRACE_NORMAL, GLXDETAILSVIEW_CLEARCURRENTMODEL, "GlxDetailsView::clearCurrentModel" );
+
+    if (mModel)
+        {
+        disconnect(mModel, SIGNAL(rowsRemoved(QModelIndex,int,int)), this,
+                SLOT(rowsRemoved(QModelIndex,int,int)));
+        mModel = NULL;
+        }
+    }
+
+//--------------------------------------------------------------------------------------------------------------------------------------------
+//setConnections
+//--------------------------------------------------------------------------------------------------------------------------------------------
+void GlxDetailsView::setConnections()
+    {
+    connect(mWindow, SIGNAL(orientationChanged(Qt::Orientation)), this,
+            SLOT(updateLayout(Qt::Orientation)));
+    connect(mFavIcon, SIGNAL(clicked()), this, SLOT(updateFavourites()));
+    
+    connect(mDescriptions, SIGNAL(labelPressed()), this,
+            SLOT(UpdateDescription()));
+    
+    connect(mModel, SIGNAL( updateDetailsView() ), this, SLOT( FillDetails() ));
+    
+    connect(mFavModel, SIGNAL( dataChanged(QModelIndex,QModelIndex) ),
+               this, SLOT( dataChanged(QModelIndex,QModelIndex) ));    
+    }
+
+//--------------------------------------------------------------------------------------------------------------------------------------------
+//clearConnections
+//--------------------------------------------------------------------------------------------------------------------------------------------
+void GlxDetailsView::clearConnections()
+    {
+    disconnect(mWindow, SIGNAL(orientationChanged(Qt::Orientation)), this,
+            SLOT(updateLayout(Qt::Orientation)));
+    
+    disconnect(mFavIcon, SIGNAL(clicked()), this, SLOT(updateFavourites()));
+    
+    disconnect(mDescriptions, SIGNAL(labelPressed()), this,
+            SLOT(UpdateDescription()));
+    
+    disconnect(mModel, SIGNAL( updateDetailsView() ), this, SLOT( FillDetails() ));
+    
+    disconnect(mFavModel, SIGNAL( dataChanged(QModelIndex,QModelIndex) ),
+                this, SLOT( dataChanged(QModelIndex,QModelIndex) ));
+    }
+
+//--------------------------------------------------------------------------------------------------------------------------------------------
 //getAnimationItem
 //--------------------------------------------------------------------------------------------------------------------------------------------
 QGraphicsItem * GlxDetailsView::getAnimationItem(GlxEffect transtionEffect)
     {
     OstTrace0( TRACE_NORMAL, GLXDETAILSVIEW_GETANIMATIONITEM, "GlxDetailsView::getAnimationItem" );
-    if ( transtionEffect == FULLSCREEN_TO_DETAIL
-            || transtionEffect == DETAIL_TO_FULLSCREEN ) {
+    if (transtionEffect == FULLSCREEN_TO_DETAIL || transtionEffect
+            == DETAIL_TO_FULLSCREEN)
+        {
     return this;
-    }
-    return NULL;    
+        }
+    return NULL;
     }
 
 //--------------------------------------------------------------------------------------------------------------------------------------------
@@ -274,98 +346,77 @@
 void GlxDetailsView::updateLayout(Qt::Orientation orient)
     {
     OstTrace1( TRACE_NORMAL, GLXDETAILSVIEW_UPDATELAYOUT, "GlxDetailsView::updateLayout;orient=%d", orient );
-
-    qreal IconPosX = 0.0;
-    qreal IconPosY = 0.0;
-    qreal FavIconPosX = 0.0;
-    qreal FavIconPosY = 0.0;
-    qreal DataFormX = 0.0;
-    qreal DataFormY = 0.0;
-    qreal DataFormWidth = 0.0;
-    qreal DataFormHeight = 0.0;
-
-
-    qreal screenWidth = 0.0;
-    qreal screenHeight = 0.0;
-    qreal leftMargin = 0.0;
-    qreal bottomMargin = 0.0;
-    qreal screenMargin = 0.0;
-    qreal favIconSize = 0.0;
-    qreal chromeHeight = 0.0;
-    qreal middleVerticalMargin = 0.0;
-
-    style()->parameter("hb-param-screen-width", screenWidth);
-    style()->parameter("hb-param-screen-height", screenHeight);
+    GLX_LOG_INFO("GlxDetailsView::updateLayout ");
+    bool loaded = false;
+    QString section;
 
-    style()->parameter("hb-param-margin-gene-middle-vertical", middleVerticalMargin);
-    style()->parameter("hb-param-margin-gene-left", leftMargin);
-    style()->parameter("hb-param-margin-gene-bottom", bottomMargin);
-    style()->parameter("hb-param-margin-gene-screen", screenMargin);
-
-    style()->parameter("hb-param-graphic-size-primary-small", favIconSize);
-    style()->parameter("hb-param-widget-chrome-height", chromeHeight);
-
-
-    if(orient == Qt::Horizontal)
+    //Load the widgets accroding to the current Orientation
+    if (orient == Qt::Horizontal)
         {
-    OstTrace0( TRACE_NORMAL, DUP1_GLXDETAILSVIEW_UPDATELAYOUT, "GlxDetailsView::updateLayout HORIZONTAL" );
-    setGeometry(0,0,640,360);
-    IconPosX    = screenMargin;
-    IconPosY    = (screenMargin + chromeHeight);
-    FavIconPosX = (IconPosX + GLX_IMAGE_SIZE - (favIconSize +10));
-    FavIconPosY = (IconPosY + GLX_IMAGE_SIZE - (favIconSize + 10));
-    DataFormX =  screenMargin + GLX_IMAGE_SIZE + leftMargin ;
-    DataFormY =  screenMargin + chromeHeight ;
-
-    //This Commented code should be un commented , once the screen width and height size issue is solved and also
-    //the dataform issue of wrapping issue is solved
-    // DataFormWidth =  screenWidth(640) - DataFormX  - screenMargin ;
-    // DataFormHeight = screenHeight(360) - DataFormY - screenMargin ;
-    DataFormWidth = screenWidth - (screenMargin  + screenMargin) ;
-    DataFormHeight = screenHeight - DataFormY;
-
+        section = GLX_DETAILSVIEW_LSSECTION;
         }
     else
         {
-    OstTrace0( TRACE_NORMAL, DUP2_GLXDETAILSVIEW_UPDATELAYOUT, "GlxDetailsView::updateLayout VERTICAL" );
-    setGeometry(0,0,screenWidth,screenHeight);
-    IconPosX    = (screenWidth/2) - (GLX_IMAGE_SIZE/2);
-    IconPosY    = (screenMargin + chromeHeight);
-    FavIconPosX = (IconPosX + GLX_IMAGE_SIZE - (favIconSize +10));
-    FavIconPosY = (IconPosY + GLX_IMAGE_SIZE - (favIconSize +10));
-    DataFormX =  screenMargin;
-    DataFormY =  IconPosY + GLX_IMAGE_SIZE + middleVerticalMargin + bottomMargin ;
-    DataFormWidth = screenWidth - (screenMargin  + screenMargin) ;
-    DataFormHeight = screenHeight - DataFormY;
+        section = GLX_DETAILSVIEW_PTSECTION;
         }
 
-    mDetailsIcon->setPos(IconPosX,IconPosY);
-    //The Numerical should be updated once we get the parameters size from the layouts.
-    mFavIcon->setItemGeometry(QRect(FavIconPosX-2 ,FavIconPosY-2 ,favIconSize+12,favIconSize + 12)) ;
-    //Place the FavIcon with respect to the Widget.
-    mFavIcon->setItemPos(2 ,2 );
-    mDataForm->setGeometry(DataFormX,DataFormY,DataFormWidth,DataFormHeight);    
+    //Load the Sections
+    mDocLoader->load(GLX_DETAILSVIEW_DOCMLPATH, section, &loaded);
+
+    //This is just to over come the bug in docloader,once that is fixed we can remove the 
+    //below lines of code
+     setImageName();
+     setDate();
+
+    GLX_LOG_INFO1("GlxDetailsView::updateLayout =%d\n",loaded);
     }
 
 //--------------------------------------------------------------------------------------------------------------------------------------------
 //rowsRemoved
 //--------------------------------------------------------------------------------------------------------------------------------------------
-void GlxDetailsView::rowsRemoved(const QModelIndex &parent, int start, int end)
+void GlxDetailsView::rowsRemoved(const QModelIndex &parent, int start,
+        int end)
     {
     Q_UNUSED(parent);
     Q_UNUSED(start);
     Q_UNUSED(end);
     OstTrace0( TRACE_NORMAL, GLXDETAILSVIEW_ROWSREMOVED, "GlxDetailsView::rowsRemoved" );
 
-    if ( mModel->rowCount() <= 0 ) {
-    return emit actionTriggered( EGlxCmdEmptyData );
+    if (mModel->rowCount() <= 0)
+        {
+        return emit actionTriggered(EGlxCmdEmptyData);
+        }
+
+    if (start <= mSelIndex && end >= mSelIndex)
+        {
+        return emit actionTriggered(EGlxCmdBack);
+        }
     }
 
-    if ( start <= mSelIndex && end >= mSelIndex ) {
-    return emit actionTriggered( EGlxCmdBack );
+//--------------------------------------------------------------------------------------------------------------------------------------------
+//FillData
+//--------------------------------------------------------------------------------------------------------------------------------------------
+void GlxDetailsView::FillDetails()
+    {
+    OstTrace0( TRACE_NORMAL, GLXDETAILSVIEW_SETFORMDATA, "GlxDetailsView::setFormData" );
+
+    qDebug("GlxDetailsView::FillDetails");
+    //Call to set the Image Name
+    setImageName();
+
+    //Call to set the description
+    setDesc();
+
+    //Call to set the date in the from
+    setDate();
+
+    //Call to set the time
+    setTime();
+
+    //Call to set the size
+    setSize();
+
     }
-    }
-
 //--------------------------------------------------------------------------------------------------------------------------------------------
 //showImage
 //--------------------------------------------------------------------------------------------------------------------------------------------
@@ -373,46 +424,23 @@
     {
     OstTrace0( TRACE_NORMAL, GLXDETAILSVIEW_SHOWIMAGE, "GlxDetailsView::showImage" );
 
-    QVariant variant = mModel->data( mModel->index(0,0), GlxFocusIndexRole );    
-    if ( variant.isValid() &&  variant.canConvert<int> () ) {
-    mSelIndex = variant.value<int>();  
-    }
-
-    variant = mModel->data( mModel->index( mSelIndex ,0), GlxFsImageRole);
-    if ( variant.isValid() &&  variant.canConvert<HbIcon> () )
+    QVariant variant = mModel->data(mModel->index(0, 0), GlxFocusIndexRole);
+    if (variant.isValid() && variant.canConvert<int> ())
         {
-        QIcon itemIcon = variant.value<HbIcon>().qicon();
-        QPixmap itemPixmap = itemIcon.pixmap(GLX_IMAGE_SIZE,GLX_IMAGE_SIZE);
-        QSize sz(GLX_IMAGE_SIZE,GLX_IMAGE_SIZE);
-        itemPixmap = itemPixmap.scaled(sz, Qt::IgnoreAspectRatio );
-    
-    
-        HbIcon tmp = HbIcon( QIcon(itemPixmap)) ;
-        mDetailsIcon->setSize(QSize(GLX_IMAGE_SIZE, GLX_IMAGE_SIZE));
+        mSelIndex = variant.value<int> ();
+        }
+
+    variant = mModel->data(mModel->index(mSelIndex, 0), GlxFsImageRole);
+    if (variant.isValid() && variant.canConvert<HbIcon> ())
+        {
+        QIcon itemIcon = variant.value<HbIcon> ().qicon();
+        QPixmap itemPixmap = itemIcon.pixmap(GLX_IMAGE_SIZE, GLX_IMAGE_SIZE);
+        QSize sz(GLX_IMAGE_SIZE, GLX_IMAGE_SIZE);
+        itemPixmap = itemPixmap.scaled(sz, Qt::IgnoreAspectRatio);
+
+        HbIcon tmp = HbIcon(QIcon(itemPixmap));
         mDetailsIcon->setIcon(tmp);
-        mFavIcon->setItemIcon(HbIcon("qtg_graf_ratingslider_unrated"));
-    
-        qreal favIconSize = 0.0;
-        style()->parameter("hb-param-graphic-size-primary-small", favIconSize);
-        mFavIcon->setItemSize(QSize(favIconSize+10, favIconSize+10));
-        }        
-    }
-
-//--------------------------------------------------------------------------------------------------------------------------------------------
-//FillData
-//--------------------------------------------------------------------------------------------------------------------------------------------
-void GlxDetailsView::setFormData()
-    {
-    OstTrace0( TRACE_NORMAL, GLXDETAILSVIEW_SETFORMDATA, "GlxDetailsView::setFormData" );
-
-    //create and set the Favourite Model
-    setFavModel();
-
-    //Call to set the Image Name
-    setImageName();
-
-    //Call to set the date in the from
-    setDate();
+        }
     }
 
 //--------------------------------------------------------------------------------------------------------------------------------------------
@@ -421,12 +449,27 @@
 void GlxDetailsView::setImageName()
     {
     OstTraceFunctionEntry0( GLXDETAILSVIEW_SETIMAGENAME_ENTRY );
+    QString temp = "<u>";
+    QString imagePath = (mModel->data(mModel->index(mModel->data(
+            mModel->index(0, 0), GlxFocusIndexRole).value<int> (), 0),
+            GlxUriRole)).value<QString> ();
+    QString imageName = imagePath.section('\\', -1);
+    
+    temp.append(imageName);
+    temp.append("</u>");
+    mImageName->setItemText(temp);    
+    OstTraceFunctionExit0( GLXDETAILSVIEW_SETIMAGENAME_EXIT );
+    }
 
-    QString imagePath = (mModel->data(mModel->index(mModel->data(mModel->index(0,0),GlxFocusIndexRole).value<int>(),0),GlxUriRole)).value<QString>();
-    QString imageName = imagePath.section('\\',-1);
-
-    mImageLabelitem->setContentWidgetData("text",imageName);
-    OstTraceFunctionExit0( GLXDETAILSVIEW_SETIMAGENAME_EXIT );
+//--------------------------------------------------------------------------------------------------------------------------------------------
+//setImageName
+//--------------------------------------------------------------------------------------------------------------------------------------------
+void GlxDetailsView::setDesc()
+    {
+    QString description = (mModel->data(mModel->index(mModel->data(
+            mModel->index(0, 0), GlxFocusIndexRole).value<int> (), 0),
+            GlxDescRole)).value<QString> ();
+    mDescriptions->setItemText(description);
     }
 
 //--------------------------------------------------------------------------------------------------------------------------------------------
@@ -437,77 +480,101 @@
     OstTraceFunctionEntry0( GLXDETAILSVIEW_SETDATE_ENTRY );
 
     QString datestring;
-    QString str("dd.MM.yyyy");
-    QDate date = (mModel->data(mModel->index(mModel->data(mModel->index(0,0),GlxFocusIndexRole).value<int>(),0),GlxDateRole)).value<QDate>();
-
-    if(date.isNull() == FALSE )
+    QString dateFormat("dd.MM.yyyy");
+    QDate date = (mModel->data(mModel->index(mModel->data(
+            mModel->index(0, 0), GlxFocusIndexRole).value<int> (), 0),
+            GlxDateRole)).value<QDate> ();
+    
+    datestring = QString("Date: ");
+    if (date.isNull() == FALSE)
         {
-    OstTrace0( TRACE_NORMAL, GLXDETAILSVIEW_SETDATE, "GlxDetailsView::setDate is not NULL" );
-    datestring = date.toString(str);
+        OstTrace0( TRACE_NORMAL, GLXDETAILSVIEW_SETDATE, "GlxDetailsView::setDate is not NULL" );
+        datestring.append(date.toString(dateFormat));
         }
 
-    mDateLabelItem->setContentWidgetData("plainText",datestring);
+    mDateLabel->setPlainText(datestring);
 
     OstTraceFunctionExit0( GLXDETAILSVIEW_SETDATE_EXIT );
     }
 
 //--------------------------------------------------------------------------------------------------------------------------------------------
-//initializeNewModel
+//setTime
 //--------------------------------------------------------------------------------------------------------------------------------------------
-void GlxDetailsView::initializeNewModel()
+void GlxDetailsView::setTime()
     {
-    OstTrace0( TRACE_NORMAL, GLXDETAILSVIEW_INITIALIZENEWMODEL, "GlxDetailsView::initializeNewModel" );
-
-    if ( mModel ) {
-    connect(mModel, SIGNAL(rowsRemoved(QModelIndex,int,int)), this, SLOT(rowsRemoved(QModelIndex,int,int)));
-    }
+    QString timestring;
+    QString timeFormat("h:m ap");
+    QTime timevalue = (mModel->data(mModel->index(mModel->data(mModel->index(
+            0, 0), GlxFocusIndexRole).value<int> (), 0), GlxTimeRole)).value<
+            QTime> ();
+    timestring = QString("Time: ");
+    if (timevalue.isNull() == FALSE)
+        {
+        OstTrace0( TRACE_NORMAL, GLXDETAILSVIEW_SETDATE, "GlxDetailsView::setTime is not NULL" );
+        timestring.append(timevalue.toString(timeFormat));
+        }
+    mTimeLabel->setPlainText(timestring);
     }
 
 //--------------------------------------------------------------------------------------------------------------------------------------------
-//clearCurrentModel
+//setSize
 //--------------------------------------------------------------------------------------------------------------------------------------------
-void GlxDetailsView::clearCurrentModel()
+void GlxDetailsView::setSize()
     {
-    OstTrace0( TRACE_NORMAL, GLXDETAILSVIEW_CLEARCURRENTMODEL, "GlxDetailsView::clearCurrentModel" );
-
-    if ( mModel ) {
-    disconnect(mModel, SIGNAL(rowsRemoved(QModelIndex,int,int)), this, SLOT(rowsRemoved(QModelIndex,int,int)));
-    mModel = NULL ;
-    }    
-    }
+    int size = 0;
+    size = (mModel->data(mModel->index(mModel->data(mModel->index(0, 0),
+            GlxFocusIndexRole).value<int> (), 0), GlxSizeRole)).value<int> ();
+    QString sizelabel;
+    QString sizestring;
+    sizelabel = QString("Size  : ");
+    sizestring = sizeinStrings(size);
+    sizelabel.append(sizestring);
+    mSizeLabel->setPlainText(sizelabel);
+    
+   }
 
 //--------------------------------------------------------------------------------------------------------------------------------------------
 //dataChanged
 //--------------------------------------------------------------------------------------------------------------------------------------------
 void GlxDetailsView::dataChanged(QModelIndex startIndex, QModelIndex endIndex)
     {
-    Q_UNUSED(endIndex);      
- 
-    QVariant variant = mFavModel->data( startIndex, GlxFavorites );
-    if ( variant.isValid() &&  variant.canConvert<bool> () ) 
+    Q_UNUSED(endIndex);
+
+    QVariant variant = mFavModel->data(startIndex, GlxFavorites);
+    if (variant.isValid() && variant.canConvert<bool> ())
         {
-        if(variant.value<bool>() )
-            {  
-             mFavIcon->setItemIcon(HbIcon(GLXICON_ADD_TO_FAV));
+        if (variant.value<bool> ())
+            {
+            mFavIcon->setIcon(HbIcon(GLXICON_ADD_TO_FAV));
             }
-        else 
+        else
             {
-             mFavIcon->setItemIcon(HbIcon(GLXICON_REMOVE_FAV));
+            mFavIcon->setIcon(HbIcon(GLXICON_REMOVE_FAV));
             }
         }
     }
 
 //--------------------------------------------------------------------------------------------------------------------------------------------
+//UpdateDescription
+//--------------------------------------------------------------------------------------------------------------------------------------------
+void GlxDetailsView::UpdateDescription()
+    {
+    GLX_LOG_INFO("GlxDetailsView::UpdateDescription ");
+    qDebug("GlxDetailsView::UpdateDescription");
+    emit actionTriggered(EGlxCmdComment);
+    }
+
+//--------------------------------------------------------------------------------------------------------------------------------------------
 //updateFavourites
 //--------------------------------------------------------------------------------------------------------------------------------------------
 void GlxDetailsView::updateFavourites()
     {
-    QVariant variant = mFavModel->data(mFavModel->index(0,0), GlxFavorites );
-    if ( variant.isValid() &&  variant.canConvert<bool> ())
+    QVariant variant = mFavModel->data(mFavModel->index(0, 0), GlxFavorites);
+    if (variant.isValid() && variant.canConvert<bool> ())
         {
-        if(variant.value<bool>() )
+        if (variant.value<bool> ())
             {
-             emit actionTriggered( EGlxCmdRemoveFromFav); 
+            emit actionTriggered(EGlxCmdRemoveFromFav);
             }
         else
             {
@@ -515,3 +582,35 @@
             }
         }
     }
+
+//--------------------------------------------------------------------------------------------------------------------------------------------
+//sizeinStrings
+//--------------------------------------------------------------------------------------------------------------------------------------------
+QString GlxDetailsView::sizeinStrings(int size)
+    {
+    QString sizeString;
+    if (size >= KBytesInGB)
+        {
+        int gbSize = size / KBytesInGB; // Size in GB
+        sizeString.setNum(gbSize);
+        sizeString.append("GB");
+        }
+    else if (size >= KBytesInMB)
+        {
+        int mbSize = size / KBytesInMB; // Size in MB
+        sizeString.setNum(mbSize);
+        sizeString.append("MB");
+        }
+    else if (size >= KBytesInKB)
+        {
+        TInt kBsize = size / KBytesInKB; // bytes to kB
+        sizeString.setNum(kBsize);
+        sizeString.append("KB");
+        }
+    else
+        {
+        sizeString.setNum(size);
+        sizeString.append("Bytes");
+        }
+    return sizeString;
+    }
--- a/ui/views/docloaders/inc/glxviewdocloader.h	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/views/docloaders/inc/glxviewdocloader.h	Thu Jul 22 16:33:32 2010 +0100
@@ -44,4 +44,14 @@
     private: //
 };
 
+//Custom Docloader to load the details  view
+class GlxDetailsViewDocLoader : public HbDocumentLoader
+{
+protected:
+    //This creates the custom widget for details
+    QObject* createObject(const QString &type, const QString &name);
+    
+    private: //
+};
+
 #endif /* GLXVIEWDOCLOADER_H */
--- a/ui/views/docloaders/src/glxviewdocloader.cpp	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/views/docloaders/src/glxviewdocloader.cpp	Thu Jul 22 16:33:32 2010 +0100
@@ -29,6 +29,9 @@
 #include "glxcoverflow.h"
 #include "glxslideshowwidget.h"
 #include "glxslideshowview.h"
+#include "glxzoomwidget.h"
+#include "glxdetailsnamelabel.h"
+#include "glxdetailsdescriptionedit.h"
 
 //----------------------------------------------------------------------------------------
 // createObject:creates the custom widget and views of fullscreen view
@@ -56,6 +59,14 @@
         object->setObjectName(name);
         return object;
         }
+       
+       if (GLXFULLSCREENZOOMWIDGET == name) 
+        {
+        qDebug() << "GlxFullscreenViewDocLoader::createObject:ZOOM -->";
+        QObject *object = new GlxZoomWidget();
+        object->setObjectName(name);
+        return object;
+        }
     return HbDocumentLoader::createObject(type, name);
     }
 
@@ -88,3 +99,34 @@
         }
     return HbDocumentLoader::createObject(type, name);
     }
+
+	//----------------------------------------------------------------------------------------
+// createObject:creates the custom widget and views of details view
+//----------------------------------------------------------------------------------------
+QObject* GlxDetailsViewDocLoader::createObject(const QString &type, const QString &name)
+    {
+    qDebug() <<"GlxDetailsViewDocLoader::createObject -->";
+
+
+    if (GLX_DETAILSVIEW_IMGNAME == name)
+        {
+        qDebug() << "GlxDetailsViewDocLoader::createObject:GLX_DETAILSVIEW_IMGNAME -->";
+
+        QObject *object = new GlxDetailsNameLabel();
+        object->setObjectName(name);
+        return object;
+        }
+    
+    if (GLX_DETAILSVIEW_DESCRPTIONTEXT == name)
+        {
+        qDebug() << "GlxDetailsViewDocLoader::createObject:GLX_DETAILSVIEW_DESCRPTIONTEXT -->";
+
+        QObject *object = new GlxDetailsDescriptionEdit();
+        object->setObjectName(name);
+        return object;
+        }
+    
+   
+    return HbDocumentLoader::createObject(type, name);
+    }
+
--- a/ui/views/effectengine/effectplugin/inc/glxbackwardtransitionplugin.h	Wed Jun 16 13:08:54 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,35 +0,0 @@
-/*
-* Copyright (c) 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:   ?Description
-*
-*/
-
-#ifndef GLXBACKWARDTRANSITIONPLUGIN_H
-#define GLXBACKWARDTRANSITIONPLUGIN_H
-
-#include "glxeffectpluginbase.h"
-
-class GlxBackwardTransitionPlugin : public GlxEffectPluginBase
-{
-public :
-    GlxBackwardTransitionPlugin();
-    ~GlxBackwardTransitionPlugin();
-    QList <QString > getEffectFileList() { return mEffectFileList ; }
-	
-private :
-    QList <QString > mEffectFileList;
-};
-
-#endif /*GLXBACKWARDTRANSITIONPLUGIN_H*/
-
--- a/ui/views/effectengine/effectplugin/inc/glxeffectpluginbase.h	Wed Jun 16 13:08:54 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,45 +0,0 @@
-/*
-* Copyright (c) 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:   ?Description
-*
-*/
-
-#ifndef GLXEFFECTPLUGINBASE_H
-#define GLXEFFECTPLUGINBASE_H
-
-#include <QList>
-#include <QString>
-#include <QGraphicsItem>
-
-class GlxEffectPluginBase
-{
-
-public :
-    GlxEffectPluginBase() {  }
-    virtual ~GlxEffectPluginBase() {}
-    virtual QList <QString > getEffectFileList() = 0;
-    virtual void setUpItems( QList< QGraphicsItem * > &  items ) { Q_UNUSED( items ) }
-/*
- * second animation will run same time(false) or later (true)
- */    
-    virtual bool isAnimationLater(int index) 
-    { 
-        Q_UNUSED( index )
-        return false ; 
-    }
-    virtual QString ItemType() { return QString("HbIconItem") ; }
-    virtual QGraphicsItem * animationItem() { return NULL; }
-};
-
-#endif /*GLXEFFECTPLUGINBASE_H*/
\ No newline at end of file
--- a/ui/views/effectengine/effectplugin/inc/glxfadeplugin.h	Wed Jun 16 13:08:54 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,48 +0,0 @@
-/*
-* Copyright (c) 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:   ?Description
-*
-*/
-
-#ifndef GLXFADEPLUGIN_H
-#define GLXFADEPLUGIN_H
-
-#include "glxeffectpluginbase.h"
-
-class GlxFadePlugin : public GlxEffectPluginBase
-{
-public :
-    GlxFadePlugin();
-    ~GlxFadePlugin();
-    QList <QString > getEffectFileList() { return mEffectFileList ; }
- /*
-  * setup the item postion and set the mItem value
-  */
-    void setUpItems( QList< QGraphicsItem * > &  items );
-/*
- * second animation will be run later
- */    
-    bool isAnimationLater(int index) ;
-    QGraphicsItem * animationItem() 
-    { 
-        mItem->show();
-        return mItem ; 
-    }
-	
-private :
-    QList <QString > mEffectFileList;
-    QGraphicsItem *mItem;
-};
-
-#endif /*GLXFADEPLUGIN_H*/
\ No newline at end of file
--- a/ui/views/effectengine/effectplugin/inc/glxforwardtransitionplugin.h	Wed Jun 16 13:08:54 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,36 +0,0 @@
-/*
-* Copyright (c) 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:   ?Description
-*
-*/
-
-
-#ifndef GLXFORWARDTRANSITIONPLUGIN_H
-#define GLXFORWARDTRANSITIONPLUGIN_H
-
-#include "glxeffectpluginbase.h"
-
-class GlxForwardTransitionPlugin : public GlxEffectPluginBase
-{
-public :
-    GlxForwardTransitionPlugin();
-    ~GlxForwardTransitionPlugin();
-    QList <QString > getEffectFileList() { return mEffectFileList; }
-	
-private :
-    QList <QString > mEffectFileList;
-};
-
-#endif /*GLXFORWARDTRANSITIONPLUGIN_H*/
-
--- a/ui/views/effectengine/effectplugin/src/glxbackwardtransitionplugin.cpp	Wed Jun 16 13:08:54 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,32 +0,0 @@
-/*
-* Copyright (c) 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:   ?Description
-*
-*/
-
-#include "glxbackwardtransitionplugin.h"
-
-
-GlxBackwardTransitionPlugin::GlxBackwardTransitionPlugin()
-{
-    mEffectFileList.append(QString(":/data/transtionbackward.fxml"));
-    mEffectFileList.append(QString(":/data/transtion.fxml"));
-}
-
-GlxBackwardTransitionPlugin::~GlxBackwardTransitionPlugin()
-{
-    mEffectFileList.clear();
-}
-
-
--- a/ui/views/effectengine/effectplugin/src/glxfadeplugin.cpp	Wed Jun 16 13:08:54 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,50 +0,0 @@
-/*
-* Copyright (c) 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:   ?Description
-*
-*/
-
-
-#include "glxfadeplugin.h"
-
-GlxFadePlugin::GlxFadePlugin() : mItem(NULL)
-{
-    mEffectFileList.append(QString(":/data/view_flip_hide.fxml"));
-    mEffectFileList.append(QString(":/data/view_flip_show.fxml"));
-}
-
-void GlxFadePlugin::setUpItems( QList< QGraphicsItem * > &  items )
-{
-    if ( items.count() < 2 ) 
-        return;
-    
-    mItem = items.at(1);
-    mItem->hide();
-    mItem->setPos(0,0);
-    items.at(0)->setPos(0,0);
-}
-
-bool GlxFadePlugin::isAnimationLater(int index) 
-{
-    if ( index == 1) {
-        return true;
-    }
-    return false;
-}
-
-GlxFadePlugin::~GlxFadePlugin()
-{
-    mEffectFileList.clear();
-}
-
--- a/ui/views/effectengine/effectplugin/src/glxforwardtransitionplugin.cpp	Wed Jun 16 13:08:54 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,32 +0,0 @@
-/*
-* Copyright (c) 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:   ?Description
-*
-*/
-
-
-#include "glxforwardtransitionplugin.h"
-
-GlxForwardTransitionPlugin::GlxForwardTransitionPlugin()
-{
-    mEffectFileList.append(QString(":/data/transtionforward.fxml"));
-    mEffectFileList.append(QString(":/data/transtion.fxml"));
-}
-
-GlxForwardTransitionPlugin::~GlxForwardTransitionPlugin()
-{
-    mEffectFileList.clear();
-}
-
-
--- a/ui/views/effectengine/inc/glxeffectengine.h	Wed Jun 16 13:08:54 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,196 +0,0 @@
-/*
-* Copyright (c) 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:   ?Description
-*
-*/
-
-
-#ifndef GLXEFFECTENGINE_H
-#define GLXEFFECTENGINE_H
-
-#ifdef BUILD_GLXVIEWS
-#define GLX_VIEW_EXPORT Q_DECL_EXPORT
-#else
-#define GLX_VIEW_EXPORT Q_DECL_IMPORT
-#endif
-
-#include <QObject>
-#include <hbeffect.h>
-#include <QString>
-#include <QHash>
-#include <QList>
-#include "glxuistd.h"
-
-class XQSettingsKey;
-class XQSettingsManager;
-class QStringList;
-typedef enum 
-{
-    NO_MOVE,
-    MOVE_FORWARD,
-    MOVE_BACKWARD,
-} GlxSlideShowMoveDir;
-
-/*
- * This class is used for read the setting either from File System or from some xml file.
- * This Setting is used by both server and client, but It is coupled with the server and client retreive the data through the server
- */
-class GlxSlideShowSetting
-{
-public :
-    GlxSlideShowSetting(int slideDelayTime = 0, GlxEffect effect = NO_EFFECT, GlxSlideShowMoveDir moveDir = NO_MOVE);
-    ~GlxSlideShowSetting();
-    int slideDelayTime ( ) { return mSlideDelayTime; }
-    GlxEffect effect() { return mEffect ; }
-    void setEffect(GlxEffect effect) { mEffect = effect ;}
-    GlxSlideShowMoveDir slideShowMoveDir() { return mMoveDir; }
-    /* Returns the index to the selected transition effect
-    This value is fetched from Central repository */
-    int slideShowEffectIndex() ;
-    /*SlideShowSettingsView will call this API to set the index of the transition effect chosen. 
-    This data will be written to the Central Repository*/
-     void setslideShowEffectIndex( int index );
-    
-    /* Returns the index to the selected transition delay /
-    This value is fetched from Central repository */
-    int slideShowDelayIndex();
-    
-    /*SlideShowSettingsView will call this API to set the index of the transition delay chosen. 
-    This data will be written to the Central Repository*/
-    void setSlideShowDelayIndex( int index );
-    
-    /*This will return the list of effects as available in the central repository */
-    QStringList slideShowEffectList();
- 
-/*
- * This funtion read the user setting store in a file system.
- * 
- */	
-    void readSlideShowSetting();
-	
-private :
-    int mSlideDelayTime; //user set time interval in between showing slide
-    GlxEffect mEffect;         //user defined effect, To:Do It is either some integer value or some enum
-    GlxSlideShowDelay mDelay;
-    GlxSlideShowMoveDir mMoveDir;	//user defined slide move direction
-    QStringList mEffectList;
-    XQSettingsManager *mSettingsManager;
-    XQSettingsKey *mTransitionEffectCenrepKey;
-    XQSettingsKey *mTransitionDelayCenrepKey;
-    XQSettingsKey *mWaveEffectCenRepKey;
-    XQSettingsKey *mFadeEffectCenRepKey;
-    XQSettingsKey *mZoomEffectCenRepKey;
-    XQSettingsKey *mSlowCenRepKey;
-    XQSettingsKey *mMediumCenRepKey;
-    XQSettingsKey *mFastCenRepKey;
-};
-
-/*
- * This class have the views transition effect information
- */
-class GlxTransitionEffectSetting
-{
-public :
-    GlxTransitionEffectSetting(GlxEffect effect);
-    ~GlxTransitionEffectSetting();
-    
-    QList <QString > effectFileList() { return mEffectFileList ; }
-    QList <QString > itemType() { return mItemType ; }
-    QList <QString > eventType() { return mEventType ; }
-    bool isTransitionLater() { return mTransitionLater ; }
-    QGraphicsItem * animationItem() { return mItem ; }
-    
-    void setEffectFileList( QList <QString > & effectFileList) { mEffectFileList = effectFileList ; }
-    void setItemTypes( QList <QString > & itemType) { mItemType = itemType; }
-    void setEventTypes( QList <QString > & eventType) { mEventType = eventType ; }
-    void setTransitionLater(bool transitionLater) { mTransitionLater = transitionLater ; }
-    void setAnimationItem(QGraphicsItem *item) { mItem = item ;}
-    int count() { return mEffectFileList.count() ; }
-    
-private :
-    void init();
-    
-private :
-    GlxEffect mEffect;     //transition effect type
-    bool mTransitionLater; //second animation will run same time(false) or later (true)
-    QGraphicsItem *mItem; //it will used in the case of animation run later
-    QList <QString > mEffectFileList; //list of fxml file used for animation
-    QList <QString > mItemType; //list of item type 
-    QList <QString > mEventType; //list of event type
-};
-
-
-/*
- * It is customise class for Photo Application to run the effect.
- * In the case of effect setting required to read through File System: 
- * first read the setting, register the effect and then run the effect.
- * In the case of run the client effect: first Set the effect, register the effect and then run the effect.
- */
- 
-class GlxEffectPluginBase;
-
-class GLX_VIEW_EXPORT GlxSlideShowEffectEngine : public QObject
-{
-    Q_OBJECT
-    
-public:
-    GlxSlideShowEffectEngine( );
-    ~GlxSlideShowEffectEngine();
-    int slideDelayTime ( ) { return mSlideShowSetting.slideDelayTime(); }    
-    GlxSlideShowMoveDir slideShowMoveDir() { return mSlideShowSetting.slideShowMoveDir(); }
-    void readSetting() { mSlideShowSetting.readSlideShowSetting(); }
-    void setEffect(GlxEffect effect) { mSlideShowSetting.setEffect( effect ); }
-    
-    void registerEffect(const QString &itemType);
-    void deRegisterEffect(const QString &itemType);
-    
-/*  To register a set of transition effect 
- *  e.g "grid to full screeen", "fullscreen to grid"
- *  
- */  
-    void registerTransitionEffect();    
-    void deregistertransitionEffect();
-    
-    void runEffect(QGraphicsItem *  item, const QString &  itemType ); 
-    void runEffect(QList< QGraphicsItem * > &  items, const QString &  itemType );
-    void runEffect(QList< QGraphicsItem * > &  items, GlxEffect transitionEffect);
-    
-    void cancelEffect(QGraphicsItem *  item);
-    void cancelEffect( const QList< QGraphicsItem * > &  items );
-    void cancelEffect(QList< QGraphicsItem * > &  items, GlxEffect transitionEffect);
-    
-    bool isEffectRuning(QGraphicsItem *  item);
-    bool isEffectRuning(const QList< QGraphicsItem * > &  items);
-    
-signals:
-    void effectFinished();
-    
-public slots:
-    void slideShowEffectFinished( const HbEffect::EffectStatus &status );
-    void transitionEffectFinished( const HbEffect::EffectStatus &status );
-
-private:
-    void effectPluginResolver();
-    void initTransitionEffect();
-    void cleanTransitionEfffect();
-    
-private:
-    GlxSlideShowSetting mSlideShowSetting;	
-    int mNbrEffectRunning;               //containe the number of effect running
-    GlxEffectPluginBase *mEffectPlugin;
-    QHash<GlxEffect, GlxTransitionEffectSetting *> mTransitionEffectList;
-    GlxEffect mTransitionEffect;
-};
-
-#endif /*GLXEFFECTENGINE_H*/
--- a/ui/views/effectengine/src/glxeffectengine.cpp	Wed Jun 16 13:08:54 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,462 +0,0 @@
-/*
-* Copyright (c) 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:   ?Description
-*
-*/
-
-
-#include <glxeffectengine.h>
-#include "glxeffectpluginbase.h"
-#include "glxforwardtransitionplugin.h"
-#include "glxbackwardtransitionplugin.h"
-#include "glxfadeplugin.h"
-#include <QDebug>
-
-#include <xqsettingsmanager.h>
-#include <xqsettingskey.h>
-#include <QStringList>
-const TUint32 KGlxTransitionEffect     = 0x1;
-const TUint32 KGlxTransitionDelay  = 0x2;
-const TUint32 KGlxSlow  = 0x3;
-const TUint32 KGlxMeduim  = 0x4;
-const TUint32 KGlxFast  = 0x5;
-const TUint32 KGlxWaveEffect  = 0x6;
-const TUint32 KGlxFadeEffect  = 0x7;
-const TUint32 KGlxZoomToFaceEffect  = 0x8;
-const TUint32 KCRUidGallery = 0x20007194;
-GlxSlideShowSetting::GlxSlideShowSetting( int slideDelayTime, GlxEffect effect, GlxSlideShowMoveDir moveDir ) 
-    : mSlideDelayTime(slideDelayTime),
-      mEffect ( effect),
-      mMoveDir ( moveDir)
-{
-    mSettingsManager = new XQSettingsManager();
-    mTransitionEffectCenrepKey= new XQSettingsKey(XQSettingsKey::TargetCentralRepository, KCRUidGallery , KGlxTransitionEffect);
-    mTransitionDelayCenrepKey= new XQSettingsKey(XQSettingsKey::TargetCentralRepository, KCRUidGallery , KGlxTransitionDelay);
-    mSlowCenRepKey= new XQSettingsKey(XQSettingsKey::TargetCentralRepository, KCRUidGallery ,KGlxSlow);
-    mMediumCenRepKey= new XQSettingsKey(XQSettingsKey::TargetCentralRepository, KCRUidGallery ,KGlxMeduim);
-    mFastCenRepKey= new XQSettingsKey(XQSettingsKey::TargetCentralRepository, KCRUidGallery ,KGlxFast);
-
-    mWaveEffectCenRepKey= new XQSettingsKey(XQSettingsKey::TargetCentralRepository, KCRUidGallery ,KGlxWaveEffect );
-    mFadeEffectCenRepKey= new XQSettingsKey(XQSettingsKey::TargetCentralRepository, KCRUidGallery ,KGlxFadeEffect);
-    mZoomEffectCenRepKey= new XQSettingsKey(XQSettingsKey::TargetCentralRepository, KCRUidGallery , KGlxZoomToFaceEffect );
-}
-
-GlxSlideShowSetting::~GlxSlideShowSetting( )
-{
-        delete mFastCenRepKey;
-        delete mMediumCenRepKey;
-        delete mSlowCenRepKey;
-        delete mZoomEffectCenRepKey;
-        delete mFadeEffectCenRepKey;
-        delete mWaveEffectCenRepKey;
-        delete mTransitionDelayCenrepKey;
-        delete mTransitionEffectCenrepKey;
-        delete mSettingsManager;
-}
-int GlxSlideShowSetting::slideShowDelayIndex()
-{
-    QVariant effectvalue = mSettingsManager->readItemValue(*mTransitionDelayCenrepKey);
-    return effectvalue.toInt();
-}
-void GlxSlideShowSetting::setSlideShowDelayIndex( int index )
-{
-    mSettingsManager->writeItemValue(*mTransitionDelayCenrepKey, index);
-}
-QStringList GlxSlideShowSetting::slideShowEffectList()
-{
-	if(mSettingsManager->readItemValue(*mWaveEffectCenRepKey).toInt() == WAVE_EFFECT)
-        mEffectList<<"wave";
-    if(mSettingsManager->readItemValue(*mFadeEffectCenRepKey).toInt() == SMOOTH_FADE)
-        mEffectList<<"Fade";
-    if(mSettingsManager->readItemValue(*mZoomEffectCenRepKey).toInt() == ZOOM_TO_FACE)
-        mEffectList<<"Zoom to face"; 
-    return mEffectList;
-}
-int GlxSlideShowSetting::slideShowEffectIndex()
-{
-    QVariant effectvalue = mSettingsManager->readItemValue(*mTransitionEffectCenrepKey);
-    return effectvalue.toInt();
-}
-void GlxSlideShowSetting::setslideShowEffectIndex( int index )
-{
-    mSettingsManager->writeItemValue(*mTransitionEffectCenrepKey, index);
-}
-void GlxSlideShowSetting::readSlideShowSetting()
-{
-//To:Do read from the file system
-    QVariant effectvalue = mSettingsManager->readItemValue(*mTransitionDelayCenrepKey);
-    switch (effectvalue.toInt()) {
-               case SLOW:
-                   mSlideDelayTime = mSettingsManager->readItemValue(*mSlowCenRepKey).toInt();
-                   break;
-               case MEDIUM:
-                   mSlideDelayTime = mSettingsManager->readItemValue(*mMediumCenRepKey).toInt();
-                   break;
-               case FAST:
-                   mSlideDelayTime = mSettingsManager->readItemValue(*mFastCenRepKey).toInt();
-                   break;
-               default:
-    				mSlideDelayTime = 3000;
-                   break;
-	}
-    mEffect = FADE_EFFECT;
-    mMoveDir = MOVE_FORWARD;
-    qDebug("GlxSlideShowSetting::readSlideShowSetting() slide delay time %d effect %d move direction %d", mSlideDelayTime, mEffect, mMoveDir);
-}
-
-
-GlxTransitionEffectSetting::GlxTransitionEffectSetting(GlxEffect effect): mEffect(effect), mTransitionLater(false), mItem(0)
-{
-    qDebug("GlxTransitionEffectSetting::GlxTransitionEffectSetting() effect id %d ", effect);
-    mEffectFileList.clear();
-    mItemType.clear();
-    mEventType.clear();
-    init();
-}
-
-void GlxTransitionEffectSetting::init()
-{
-    qDebug("GlxTransitionEffectSetting::init() effect id %d ", mEffect);
-    
-    switch( mEffect ) {
-        case GRID_TO_FULLSCREEN :
-            mEffectFileList.append( QString(":/data/gridtofullscreenhide.fxml"));
-            mItemType.append( QString("HbGridViewItem") );
-            mEventType.append(QString("click1") );
-            
-            mEffectFileList.append( QString(":/data/gridtofullscreenshow.fxml"));
-            mItemType.append( QString("HbView") );
-            mEventType.append(QString("click2") );
-            break;
-            
-        case FULLSCREEN_TO_GRID :
-            mEffectFileList.append( QString(":/data/fullscreentogrid.fxml"));
-            mItemType.append( QString("HbGridView") );
-            mEventType.append(QString("click3") );
-            break;
-            
-        case GRID_TO_ALBUMLIST:
-            mEffectFileList.append( QString(":/data/gridtoalbumlisthide.fxml"));
-            mItemType.append( QString("HbView") );
-            mEventType.append(QString("click4") );
-                        
-            mEffectFileList.append( QString(":/data/gridtoalbumlist.fxml"));
-            mItemType.append( QString("HbListView") );
-            mEventType.append(QString("click5") );
-            break;
-             
-        case ALBUMLIST_TO_GRID:
-            mEffectFileList.append( QString(":/data/albumlisttogrid.fxml"));
-            mItemType.append( QString("HbListView") );
-            mEventType.append(QString("click6") );
-                        
-            mEffectFileList.append( QString(":/data/albumlisttogridshow.fxml"));
-            mItemType.append( QString("HbView") );
-            mEventType.append(QString("click7") );
-            break;
-            
-        case FULLSCREEN_TO_DETAIL :
-            mEffectFileList.append( QString(":/data/view_flip_hide.fxml"));
-            mItemType.append( QString("HbView") );
-            mEventType.append(QString("click8") );
-                        
-            mEffectFileList.append( QString(":/data/view_flip_show.fxml"));
-            mItemType.append( QString("HbView") );
-            mEventType.append(QString("click9") );
-            mTransitionLater = true;
-            break;
-            
-        case DETAIL_TO_FULLSCREEN :
-            mEffectFileList.append( QString(":/data/view_flip_hide.fxml"));
-            mItemType.append( QString("HbView") );
-            mEventType.append(QString("click10") );
-                        
-            mEffectFileList.append( QString(":/data/view_flip_show.fxml"));
-            mItemType.append( QString("HbView") );
-            mEventType.append(QString("click11") );
-            mTransitionLater = true;
-            break;            
-            
-        default :
-            break;
-    }    
-}
-
-GlxTransitionEffectSetting::~GlxTransitionEffectSetting()
-{
-    qDebug("GlxTransitionEffectSetting::~GlxTransitionEffectSetting() effect id %d ", mEffect);
-    mEffectFileList.clear();
-    mItemType.clear();
-    mEventType.clear();
-}
-
-
-GlxSlideShowEffectEngine::GlxSlideShowEffectEngine( ) : mNbrEffectRunning( 0 ), 
-        mEffectPlugin(NULL), 
-        mTransitionEffect(NO_EFFECT)
-{
-    qDebug("GlxSlideShowEffectEngine::GlxSlideShowEffectEngine()");
-    mTransitionEffectList.clear();
-}
-
-GlxSlideShowEffectEngine::~GlxSlideShowEffectEngine()
-{
-    qDebug("GlxSlideShowEffectEngine::~GlxSlideShowEffectEngine()");
-    delete mEffectPlugin;
-    mEffectPlugin = NULL;
-	
-    cleanTransitionEfffect();
-}
-
-void GlxSlideShowEffectEngine::registerEffect(const QString &itemType)
-{
-    effectPluginResolver();
-    QList <QString > effectPathList = mEffectPlugin->getEffectFileList();
-    
-    qDebug("GlxSlideShowEffectEngine::registerEffect() item type %s file path %s", itemType.utf16(), effectPathList[0].utf16());
-    for ( int i = 0; i < effectPathList.count() ; ++i ) {
-        HbEffect::add(itemType, effectPathList.at(i), QString( "Click%1" ).arg(i));
-    }    
-}
-
-void GlxSlideShowEffectEngine::deRegisterEffect(const QString &itemType)
-{
-    qDebug("GlxSlideShowEffectEngine::deRegisterEffect() item type %s", itemType.utf16());
-    QList <QString > effectPathList = mEffectPlugin->getEffectFileList();
-    for ( int i = 0; i < effectPathList.count() ; ++i ) {
-        HbEffect::remove(itemType, effectPathList.at(i), QString( "Click%1" ).arg(i));
-    }
-    delete mEffectPlugin ;
-    mEffectPlugin = NULL;
-}
-
-void GlxSlideShowEffectEngine::registerTransitionEffect()  
-{
-    qDebug("GlxSlideShowEffectEngine::registerTransitionEffect()");
-    initTransitionEffect();
-}
-
-void GlxSlideShowEffectEngine::deregistertransitionEffect()
-{
-    qDebug("GlxSlideShowEffectEngine::deregisterTransitionEffect()");
-    cleanTransitionEfffect();
-}
-
-void GlxSlideShowEffectEngine::runEffect(QGraphicsItem *  item, const QString &  itemType )
-{
-    qDebug("GlxSlideShowEffectEngine::runEffect()1 item type %s", itemType.utf16());
-    HbEffect::start(item, itemType, QString( "Click1" ), this, "slideShowEffectFinished");
-    ++mNbrEffectRunning;
-}
-
-void GlxSlideShowEffectEngine::runEffect(QList< QGraphicsItem * > &  items, const QString &  itemType )
-{
-    qDebug("GlxSlideShowEffectEngine::runEffect()2 item Type %s", itemType.utf16());
-    mEffectPlugin->setUpItems(items);
-    for ( int i = 0; i < items.count() ; ++i ) {
-        if ( mEffectPlugin->isAnimationLater(i) == FALSE ) {
-            HbEffect::start(items.at(i), itemType, QString( "Click%1").arg(i), this, "slideShowEffectFinished");
-        }
-        ++mNbrEffectRunning;
-    }
-}
-
-void GlxSlideShowEffectEngine::runEffect(QList< QGraphicsItem * > &  items, GlxEffect transitionEffect)
-{
-    qDebug("GlxSlideShowEffectEngine::runEffect()3 effect type %d ", transitionEffect);
-    
-    GlxTransitionEffectSetting *effectSetting = mTransitionEffectList.value( transitionEffect );
-    
-    if ( effectSetting == NULL || items.count() != effectSetting->count() ) {
-         return;
-    }
-    
-    mTransitionEffect = transitionEffect;
-    for ( int i = 0; i < effectSetting->count() ; ++i) {
-        ++mNbrEffectRunning;
-        if ( ( i == effectSetting->count() -1) && effectSetting->isTransitionLater() )
-        {
-            effectSetting->setAnimationItem( items.at(i) );
-            items.at(i)->hide();
-        }
-        else {
-            HbEffect::start(items.at(i), effectSetting->itemType().at(i), effectSetting->eventType().at(i), this, "transitionEffectFinished");
-        }
-    }    
-}
-
-void GlxSlideShowEffectEngine::cancelEffect(QGraphicsItem *  item)
-{
-    if ( HbEffect::effectRunning( item, QString( "Click1" ) ) ) {
-        HbEffect::cancel( item, QString( "Click1" ) );
-    }
-}
-
-void GlxSlideShowEffectEngine::cancelEffect(const QList< QGraphicsItem * > &  items)
-{
-    for ( int i = 0; i < items.count() ; ++i ) {    
-        if ( HbEffect::effectRunning( items.at(i), QString( "Click%1").arg(i) ) ) {
-            HbEffect::cancel( items.at(i), QString( "Click%1").arg(i) );
-        }
-    }
-}
-
-void GlxSlideShowEffectEngine::cancelEffect(QList< QGraphicsItem * > &  items, GlxEffect transitionEffect)
-{
-    GlxTransitionEffectSetting *effectSetting = mTransitionEffectList.value( transitionEffect );
-    
-    if ( effectSetting == NULL || items.count() != effectSetting->count() ) {
-         return;
-    }
-    
-    for ( int i = 0; i < effectSetting->count() ; ++i) {
-        HbEffect::cancel(items.at(i), effectSetting->eventType().at(i) );
-    }     
-}
-
-bool GlxSlideShowEffectEngine::isEffectRuning(QGraphicsItem *  item)
-{
-    if ( HbEffect::effectRunning( item, QString( "Click1" ) ) ) {
-        return true;
-    }
-    return false;
-}
-
-bool GlxSlideShowEffectEngine::isEffectRuning(const QList< QGraphicsItem * > &  items)
-{
-    for ( int i = 0; i < items.count() ; ++i ) {    
-        if ( HbEffect::effectRunning( items.at(i), QString( "Click%1").arg(i) ) ) {
-            return true;
-        }
-    }
-    return false;
-}
-
-void GlxSlideShowEffectEngine::slideShowEffectFinished( const HbEffect::EffectStatus &status )
-{
-    Q_UNUSED( status )
-    qDebug("GlxSlideShowEffectEngine::slideShowEffectFinished() number of effect %d ", mNbrEffectRunning);
-    
-    --mNbrEffectRunning;
-    
-    if ( mEffectPlugin->isAnimationLater( mNbrEffectRunning) ) {
-        HbEffect::start( mEffectPlugin->animationItem(), mEffectPlugin->ItemType(), QString( "Click%1").arg(mNbrEffectRunning), this, "slideShowEffectFinished");
-    }
-    
-    if (mNbrEffectRunning == 0) {
-        emit effectFinished();
-    }
-}
-
-void GlxSlideShowEffectEngine::transitionEffectFinished( const HbEffect::EffectStatus &status )
-{
-    Q_UNUSED( status )
-    qDebug("GlxSlideShowEffectEngine::transitionEffectFinished() number of effect %d status %d", mNbrEffectRunning, status.reason);
-    
-    --mNbrEffectRunning;
-    if ( mNbrEffectRunning == 1 ) {
-        GlxTransitionEffectSetting *effectSetting = mTransitionEffectList.value( mTransitionEffect );
-        if (  effectSetting->isTransitionLater() ){ 
-            effectSetting->animationItem()->show();
-            HbEffect::start( effectSetting->animationItem(), effectSetting->itemType().at(1), effectSetting->eventType().at(1), this, "transitionEffectFinished");
-            mTransitionEffect = NO_EFFECT;
-        }    
-    }
-    
-    if (mNbrEffectRunning == 0) {
-        emit effectFinished();
-    }
-}
-
-void GlxSlideShowEffectEngine::effectPluginResolver()
-{
-//TO:DO improved the code by using factory design pattern
-
-    delete mEffectPlugin;
-    mEffectPlugin = NULL;
-    
-    switch ( mSlideShowSetting.effect() ) {
-    case TRANSITION_EFFECT :
-        if ( slideShowMoveDir() == MOVE_FORWARD ) {
-            mEffectPlugin = new GlxForwardTransitionPlugin();
-        }
-        else {
-            mEffectPlugin = new GlxBackwardTransitionPlugin();
-        }
-        break;
-        
-    case FADE_EFFECT :
-        mEffectPlugin = new GlxFadePlugin();
-        break;
-        
-    default :
-        break;        
-    }
-}
-
-void GlxSlideShowEffectEngine::initTransitionEffect()
-{
-    GlxTransitionEffectSetting *effectSetting = NULL;
-    
-    effectSetting = new GlxTransitionEffectSetting(GRID_TO_FULLSCREEN);
-    for ( int i = 0; i < effectSetting->count(); ++i ) {
-        HbEffect::add( effectSetting->itemType().at(i), effectSetting->effectFileList().at(i), effectSetting->eventType().at(i)) ;
-    }
-    mTransitionEffectList[GRID_TO_FULLSCREEN] = effectSetting;
-    
-    effectSetting = new GlxTransitionEffectSetting( FULLSCREEN_TO_GRID );
-    for ( int i = 0; i < effectSetting->count(); ++i ) {
-        HbEffect::add( effectSetting->itemType().at(i), effectSetting->effectFileList().at(i), effectSetting->eventType().at(i)) ;
-    }
-    mTransitionEffectList[FULLSCREEN_TO_GRID] = effectSetting;
-    
-    effectSetting = new GlxTransitionEffectSetting( GRID_TO_ALBUMLIST );
-    for ( int i = 0; i < effectSetting->count(); ++i ) {
-        HbEffect::add( effectSetting->itemType().at(i), effectSetting->effectFileList().at(i), effectSetting->eventType().at(i)) ;
-    }
-    mTransitionEffectList[GRID_TO_ALBUMLIST] = effectSetting;
-    
-    effectSetting = new GlxTransitionEffectSetting( ALBUMLIST_TO_GRID );
-    for ( int i = 0; i < effectSetting->count(); ++i ) {
-        HbEffect::add( effectSetting->itemType().at(i), effectSetting->effectFileList().at(i), effectSetting->eventType().at(i)) ;
-    }
-    mTransitionEffectList[ALBUMLIST_TO_GRID] = effectSetting;
-    
-    effectSetting = new GlxTransitionEffectSetting( FULLSCREEN_TO_DETAIL );
-    for ( int i = 0; i < effectSetting->count(); ++i ) {
-        HbEffect::add( effectSetting->itemType().at(i), effectSetting->effectFileList().at(i), effectSetting->eventType().at(i)) ;
-    }
-    mTransitionEffectList[FULLSCREEN_TO_DETAIL] = effectSetting; 
-    
-    effectSetting = new GlxTransitionEffectSetting( DETAIL_TO_FULLSCREEN );
-    for ( int i = 0; i < effectSetting->count(); ++i ) {
-        HbEffect::add( effectSetting->itemType().at(i), effectSetting->effectFileList().at(i), effectSetting->eventType().at(i)) ;
-    }
-    mTransitionEffectList[DETAIL_TO_FULLSCREEN] = effectSetting;    
-}
-
-void GlxSlideShowEffectEngine::cleanTransitionEfffect()
-{	
-    qDebug("GlxSlideShowEffectEngine::cleanTrnastionEfffect()");
-    
-    foreach( GlxTransitionEffectSetting *list, mTransitionEffectList) {
-        for ( int i = 0; i < list->count(); ++i ) {
-            HbEffect::remove( list->itemType().at(i), list->effectFileList().at(i), list->eventType().at(i)) ;
-        }
-        delete list;
-    }
-    mTransitionEffectList.clear();	
-    
-}
-
--- a/ui/views/fullscreenview/inc/glxcoverflow.h	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/views/fullscreenview/inc/glxcoverflow.h	Thu Jul 22 16:33:32 2010 +0100
@@ -22,15 +22,15 @@
 
 #define NBR_ICON_ITEM 5
 
-#include <hbscrollarea.h>
 #include <hbeffect.h>
+#include <hbwidget.h>
 
 //forward declaration
 class HbIconItem;
 class HbMainWindow;
 class QAbstractItemModel;
+class QGestureEvent;
 
-class QGestureEvent;
 typedef enum
 {
     NO_MOVE,
@@ -62,31 +62,32 @@
     void partiallyCreate(QAbstractItemModel *model, QSize itemSize);
 	void setCoverFlow();
     void ClearCoverFlow();
+	void setMultitouchFilter(QGraphicsItem* multitouchFilter);
 		    
 public slots:
+	void zoomStarted(int index);
+	void zoomFinished(int index);
 
 signals :
     void coverFlowEvent(GlxCoverFlowEvent e);
     void changeSelectedIndex(const QModelIndex &index);
     void autoLeftMoveSignal();
     void autoRightMoveSignal();
+    void doubleTapEventReceived(QPointF position);
 
 protected slots:
     void panGesture ( const QPointF & delta )  ;
-    void leftGesture (int value);
-    void rightGesture (int value) ;
     void longPressGesture(const QPointF &point) ;
     void dataChanged(QModelIndex startIndex, QModelIndex endIndex);
     void rowsInserted(const QModelIndex &parent, int start, int end);
     void rowsRemoved(const QModelIndex &parent, int start, int end);
+    void modelDestroyed();
     void autoLeftMove();
     void autoRightMove();
 
 protected:
 	void gestureEvent(QGestureEvent *event);
-
     void move(int value);
-
     void setRows() ;
     void setStripLen();
     int calculateIndex(int index);
@@ -94,14 +95,53 @@
     void loadIconItems (); 
     void updateIconItem (qint16 selIndex, qint16 selIconIndex, qint16 deltaX);
     
-    //clear all the model connection
+    /*
+     * In the case of animated image, it will play the animation for focus image
+     */
+    void playAnimation();
+    
+    /*
+     * To stop the animation
+     */
+    void stopAnimation();
+    
+    /*
+     * clear all the model connection
+     */
     void clearCurrentModel();
-    //add the connection to the model
+    
+    /*
+     * add the connection to the model
+     */
     void initializeNewModel();
-    //reset all the data of cover flow
+    
+    /*
+     * reset all the data of cover flow
+     */    
     void resetCoverFlow();
     int getSubState();
+    void timerEvent(QTimerEvent *event);
 
+    /*
+     * To get the focus index
+     */
+    int getFocusIndex( );
+
+    /*
+     * To get the full screen icon of the image
+     */
+    HbIcon getIcon( int index );
+    
+    /*
+     * To get the URI of the image
+     */
+    QString getUri( int index );
+    
+    /*
+     * To get the GIF file info of the image
+     */
+    bool isAnimatedImage( int index );
+    
 private:
 	HbIconItem *mIconItem[NBR_ICON_ITEM];      //at most contain only five item
     qint16 mSelItemIndex;                    // current full screen index
@@ -116,6 +156,9 @@
     QAbstractItemModel *mModel;
     GlxUserMove mMoveDir;
     int mSpeed;        
+	bool mZoomOn;
+	QGraphicsItem* mMultitouchFilter;
+    int mTimerId;
 };
 
 #endif /* GLXCOVERFLOW_H_ */
--- a/ui/views/fullscreenview/inc/glxfullscreenview.h	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/views/fullscreenview/inc/glxfullscreenview.h	Thu Jul 22 16:33:32 2010 +0100
@@ -37,8 +37,7 @@
 class HbIconItem;
 
 //User Defined forward declartion
-class GlxZoomSlider;
-class GlxZoomControl;
+class GlxZoomWidget;
 class GlxTvOutWrapper;
 
 class GlxFullScreenView : public GlxView
@@ -86,8 +85,7 @@
     void handleToolBarAction();
 
 protected :
-    bool event(QEvent *event);
-
+    bool eventFilter(QObject *obj, QEvent *ev);
 private:
     
     /*
@@ -108,9 +106,10 @@
     void setImageStripModel();
     
     void loadFullScreenToolBar();
-    void imageSelectionAnimation(const QModelIndex &index);
+    void addToolBarAction( int commandId, const QString &iconName, const QString &name) ;
+    void imageSelectionAnimation( const QModelIndex &index );
     int getSubState();
-    void setHdmiModel(QAbstractItemModel *model);
+    void setHdmiModel( QAbstractItemModel *model );
 private:
     QAbstractItemModel  *mModel;   //no ownership
     HbMainWindow        *mWindow;  //no ownership
@@ -120,15 +119,8 @@
     HbIconItem          *mIconItem ;   //temporary item for play the image strip select animation
     GlxTvOutWrapper     *mTvOutWrapper;
     HbToolBar           *mFullScreenToolBar; //Fullscreen Toolbar
-    HbAction            *mFlipAction; //Action : it starts activates the details view
-    HbAction            *mSendAction;
-    HbAction            *mDeleteAction;
-    HbAction            *mUseImageAction;
-
     //for Zoom
-    HbPushButton        *mZmPushButton;
-    GlxZoomSlider       *mZoomSlider;
-    GlxZoomControl      *mZoomControl;
+	GlxZoomWidget		*mZoomWidget;
     HbDocumentLoader    *mDocLoader;
   
     bool                mUiOff;        // to check the current status of ui on / off
--- a/ui/views/fullscreenview/inc/glxzoomcontrol.h	Wed Jun 16 13:08:54 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,63 +0,0 @@
-/*
-* Copyright (c) 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:   ?Description
-*
-*/
-#ifndef GLXZOOMCONTROL_H
-#define GLXZOOMCONTROL_H
-#include <hbscrollarea.h>
-
-class GlxMediaModel;
-class QAbstractItemModel;
-class HbIconItem;
-class GlxImageDecoderWrapper;
-class GlxZoomControl : public HbScrollArea
-{
-Q_OBJECT
-
-public:
-	GlxZoomControl(QGraphicsItem *parent = NULL);
-	~GlxZoomControl();
-	void setModel (QAbstractItemModel *model);
-    void indexChanged (int index);
-	void setWindowSize (QSize windowSize);
-signals:
-	void hideFullScreenUi();
-public slots:
-	void zoomImage(int zoomFactor);
-	void decodedImageAvailable();
-	void initialZoomFactor(int initZoomFactor);
-private:
-	void initializeZoomControl(int zoomFactor);
-	void resetZoomControl();
-	void updateItemPosition();
-	void calculatePanOffset();
-	void checkandAdjustImageBoundaries(QPointF &finalPos, QPointF undefferedPos);
-
-private:
-	QGraphicsPixmapItem *mZoomItem;
-	QGraphicsWidget *mZoomWidget;
-	GlxImageDecoderWrapper* mImageDecoder;
-	HbIconItem *mBlackBackgroundItem;
-	QSizeF mCurrentSize;
-	QSizeF mItemSize;
-	GlxMediaModel *mModel; //not owned
-	int mInitialZoomFactor;
-	int mCurrentZoomFactor;
-	bool mIsControlActivated;
-	bool mIsItemChanged;
-	QSize mWindowSize;
-	QPointF mPanOffset;
-};
-#endif //GLXZOOMCONTROL_h
--- a/ui/views/fullscreenview/inc/glxzoomslider.h	Wed Jun 16 13:08:54 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,51 +0,0 @@
-/*
-* Copyright (c) 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:   ?Description
-*
-*/
-#ifndef GLXZOOMSLIDER_H
-#define GLXZOOMSLIDER_H
-#include <QObject>
-#include <QSize>
-class HbSlider;
-class GlxMediaModel;
-class QAbstractItemModel;
-class QGraphicsItem;
-class GlxZoomSlider : public QObject
-{
-Q_OBJECT
-
-public:
-	GlxZoomSlider (QGraphicsItem *parent = NULL);
-	~GlxZoomSlider ();
-	void setModel (QAbstractItemModel *model);
-    void indexChanged (int index);
-signals:
-	void valueChanged(int newValue);
-	void initialZoomFactor(int initZoomFactor);
-public slots:
-	void toggleSliderVisibility();
-	void filterandEmitSliderValueChanges(int newValue);
-	void sliderThumbPressed();
-	void sliderThumbReleased();
-private:
-	void retrieveActualAndDisplayedSize(QSize& itemsize, QSize& displayedSize);
-	int calculateZoomFactor(QSize& itemsize, QSize& displayedSize);
-	void calculateAndInitializeFSZoomFactor();
-	HbSlider* mZoomSlider;
-	bool isSliderVisible; 
-	bool mSliderThumbPressed;
-	GlxMediaModel *mModel; //not owned
-};
-#endif //GLXZOOMSLIDER_H
--- a/ui/views/fullscreenview/src/glxcoverflow.cpp	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/views/fullscreenview/src/glxcoverflow.cpp	Thu Jul 22 16:33:32 2010 +0100
@@ -23,14 +23,16 @@
 #include <QDebug>
 #include <QGesture>
 #include <hbpangesture.h>
+#include <hbiconanimator.h>
 
 //User Includes
 #include <glxmodelparm.h>
 #include <glxcoverflow.h>
 #include "glxviewids.h"
 
-#define GLX_COVERFLOW_SPEED 60
-#define GLX_BOUNCEBACK_SPEED 15
+#define GLX_COVERFLOW_SPEED  32
+#define GLX_BOUNCEBACK_SPEED 16
+#define GLX_BOUNCEBACK_DELTA 8
 
 GlxCoverFlow::GlxCoverFlow(QGraphicsItem *parent ) 
      : HbWidget(parent), 
@@ -42,7 +44,10 @@
        mItemSize (QSize(0,0)),
        mModel ( NULL),
        mMoveDir(NO_MOVE),
-       mSpeed ( GLX_COVERFLOW_SPEED )
+       mSpeed ( GLX_COVERFLOW_SPEED ),
+	   mZoomOn(false),
+	   mMultitouchFilter(NULL),
+       mTimerId(0)
 {
 //TO:DO through exception
    qDebug("GlxCoverFlow::GlxCoverFlow");
@@ -52,16 +57,25 @@
    connect( this, SIGNAL( autoRightMoveSignal() ), this, SLOT( autoRightMove() ), Qt::QueuedConnection );   
 }
 
+void GlxCoverFlow::setMultitouchFilter(QGraphicsItem* mtFilter)
+{
+	mMultitouchFilter = mtFilter;
+}
 void GlxCoverFlow::setCoverFlow()
 {
     qDebug("GlxCoverFlow::setCoverFlow");
     for ( qint8 i = 0; i < NBR_ICON_ITEM ; i++ ) {
-        mIconItem[i] = new HbIconItem(this);
-        mIconItem[i]->setBrush(QBrush(Qt::black));
-        mIconItem[i]->setSize(QSize(0,0));
+        mIconItem[i] = new HbIconItem( this );
+        mIconItem[i]->grabGesture( Qt::PinchGesture, Qt::ReceivePartialGestures );
+        mIconItem[i]->installSceneEventFilter( mMultitouchFilter );
+        mIconItem[i]->setBrush( QBrush( Qt::black ) );
+        mIconItem[i]->setSize( QSize( 0, 0 ) );
+        mIconItem[i]->setAlignment( Qt::AlignCenter );
+        mIconItem[i]->setObjectName( QString( "Cover%1" ).arg( i ) );
     }
+    
     mUiOn = FALSE;
-    mBounceBackDeltaX = 10;
+    mBounceBackDeltaX = GLX_BOUNCEBACK_DELTA;
 }
 
 void GlxCoverFlow::setItemSize(QSize &size)
@@ -97,44 +111,50 @@
 
 void GlxCoverFlow::gestureEvent(QGestureEvent *event)
 {    
- if(QTapGesture *gesture = static_cast<QTapGesture *>(event->gesture(Qt::TapGesture))) {        
+    if(QTapGesture *gesture = static_cast<QTapGesture *>(event->gesture(Qt::TapGesture))) {        
         if (gesture->state() == Qt::GestureFinished) {
-                     emit coverFlowEvent( TAP_EVENT );
-                      event->accept(gesture);
+            if(!mTimerId) {
+                mTimerId = startTimer(500);
+            }
+            else {
+                killTimer(mTimerId);
+                mTimerId = 0;
+                emit doubleTapEventReceived(gesture->position());
+            }
+            event->accept(gesture);
+        }
+    }
+  
+    if (QPanGesture *panningGesture = qobject_cast<QPanGesture*>(event->gesture(Qt::PanGesture))) {
+        HbPanGesture *hbPanGesture = qobject_cast<HbPanGesture *>(panningGesture);
+        if (hbPanGesture) {
+            if(hbPanGesture->state() == Qt::GestureUpdated) {
+                QPointF delta(hbPanGesture->sceneDelta());
+                panGesture(delta);
+                event->accept(panningGesture);            
+            }
+            
+            if(hbPanGesture->state() == Qt::GestureFinished) {
+                switch( mMoveDir ) {
+                    case LEFT_MOVE : 
+                        mMoveDir = NO_MOVE;
+                        mBounceBackDeltaX = ( mItemSize.width() >> 2 )  + ( mItemSize.width() >> 3 );
+                        emit autoLeftMoveSignal();
+                        break ;
+                
+                    case RIGHT_MOVE :
+                        mMoveDir = NO_MOVE;
+                        mBounceBackDeltaX = ( mItemSize.width() >> 2 )  + ( mItemSize.width() >> 3 );
+                        emit autoRightMoveSignal();
+                        break;
+                
+                    default:
+                        break;
+                } 
+                event->accept(panningGesture);
             }
         }
-  
-  if (QPanGesture *panningGesture = qobject_cast<QPanGesture*>(event->gesture(Qt::PanGesture))) {
-        HbPanGesture *hbPanGesture = qobject_cast<HbPanGesture *>(panningGesture);
-         if (hbPanGesture) {
-            if(hbPanGesture->state() == Qt::GestureUpdated) {
-                 QPointF delta(hbPanGesture->sceneDelta());
-                 panGesture(delta);
-                  event->accept(panningGesture);
-
-            }
-             if(hbPanGesture->state() == Qt::GestureFinished) {
-                 switch( mMoveDir ) {
-    
-                        case LEFT_MOVE: 
-                            mMoveDir = NO_MOVE;
-                            emit autoLeftMoveSignal();
-                            break ;
-        
-                        case RIGHT_MOVE :
-                            mMoveDir = NO_MOVE;
-                            emit autoRightMoveSignal();
-                            break;
-        
-                        default:
-                            break;
-                    } 
-                  event->accept(panningGesture);
-
-            }
-         }
-    }
-  
+    }  
 }
 
 void GlxCoverFlow::panGesture ( const QPointF & delta )  
@@ -157,38 +177,6 @@
     }
 }
 
-void GlxCoverFlow::leftGesture(int value)
-{
-    Q_UNUSED(value);
-    qDebug("GlxCoverFlow::leftGesture CurrentPos= %d value %d", mCurrentPos, value); 
-    if(getSubState() == IMAGEVIEWER_S || getSubState() == FETCHER_S ) {
-        return;
-    }
-    mMoveDir = NO_MOVE;
-    mBounceBackDeltaX = ( mItemSize.width() >> 2 )  + ( mItemSize.width() >> 3 );
-    emit autoLeftMoveSignal();
-    if ( mUiOn == TRUE ) {
-        mUiOn = FALSE;
-        emit coverFlowEvent( PANNING_START_EVENT );        
-    }
-}
-
-void GlxCoverFlow::rightGesture(int value)
-{
-    Q_UNUSED(value);
-    qDebug("GlxCoverFlow::rightGesture CurrentPos= %d value %d ", mCurrentPos, value);
-    if(getSubState() == IMAGEVIEWER_S || getSubState() == FETCHER_S ) {
-        return;
-    }
-    mMoveDir = NO_MOVE;
-    mBounceBackDeltaX = ( mItemSize.width() >> 2 )  + ( mItemSize.width() >> 3 );
-    emit autoRightMoveSignal();
-    if ( mUiOn == TRUE  ) {
-        mUiOn = FALSE;
-        emit coverFlowEvent( PANNING_START_EVENT );
-    }     
-}
-
 void GlxCoverFlow::longPressGesture(const QPointF &point)
 {
      qDebug("GlxCoverFlow::longPressGesture x = %d  y = %d", point.x(), point.y());
@@ -202,17 +190,13 @@
     
     int index = 0;
     for (int i = 0; i < NBR_ICON_ITEM ; i++) {
-        index = calculateIndex( mSelIndex + i - 2);
+        index = calculateIndex( mSelIndex + i - 2 );
         if ( index == startIndex.row() ) {
             index = ( mSelItemIndex + i - 2 + NBR_ICON_ITEM ) % NBR_ICON_ITEM;
             qDebug("GlxCoverFlow::dataChanged index = %d mSelItemIndex = %d ", index, mSelItemIndex );
-            
-            QVariant variant = mModel->data( startIndex, GlxFsImageRole );
-            if ( variant.isValid() &&  variant.canConvert<HbIcon> () ) {
-                mIconItem[index]->setIcon ( variant.value<HbIcon>() ) ; 
-            }
-            else {
-                mIconItem[index]->setIcon( HbIcon() );
+            mIconItem[ index ]->setIcon( getIcon( startIndex.row() ) );
+            if ( index == mSelItemIndex ) {
+                playAnimation( );
             }
         }
     }
@@ -244,7 +228,10 @@
     }
 }
 
-
+void GlxCoverFlow::modelDestroyed()
+{
+    mModel = NULL ;    
+}
 
 void GlxCoverFlow::autoLeftMove()
 {
@@ -258,7 +245,7 @@
     //for bounce back effect for last image ( it will do the back)
     if ( ( mCurrentPos + width ) > ( mStripLen + mBounceBackDeltaX ) && mMoveDir == NO_MOVE ) {
         mMoveDir = LEFT_MOVE;
-        mBounceBackDeltaX = 10;
+        mBounceBackDeltaX = GLX_BOUNCEBACK_DELTA;
         autoRightMoveSignal();
         return ;
     }
@@ -282,14 +269,18 @@
         }
         int selIndex = mCurrentPos / width ;
         if ( mRows == 1 || selIndex != mSelIndex ) {
+            stopAnimation();
             mSelIndex = selIndex;
             mSelItemIndex = ( ++mSelItemIndex ) % NBR_ICON_ITEM;
             selIndex = ( mSelItemIndex + 2 ) % NBR_ICON_ITEM;
             updateIconItem( mSelIndex + 2, selIndex, width * 2 ) ;
-            emit changeSelectedIndex ( mModel->index ( mSelIndex, 0 ) ) ;
+            playAnimation();
+			if(!mZoomOn) {
+                emit changeSelectedIndex ( mModel->index ( mSelIndex, 0 ) ) ;
+			}
         }
         mMoveDir = NO_MOVE;
-        mBounceBackDeltaX = 10;
+        mBounceBackDeltaX = GLX_BOUNCEBACK_DELTA;
         mSpeed = GLX_COVERFLOW_SPEED;
     }   
 }
@@ -308,7 +299,7 @@
     qDebug("GlxCoverFlow::autoRightMove diffX x = %d current pos = %d mBounceBackDeltaX x = %d", diffX, mCurrentPos, mBounceBackDeltaX);
     if ( diffX > mBounceBackDeltaX && diffX < width && mMoveDir == NO_MOVE ){
         mMoveDir = RIGHT_MOVE;
-        mBounceBackDeltaX = 10;
+        mBounceBackDeltaX = GLX_BOUNCEBACK_DELTA;
         autoLeftMoveSignal();  
         return ;
     }
@@ -334,14 +325,18 @@
         }
         int selIndex = mCurrentPos / width ;
         if ( mRows == 1 || selIndex != mSelIndex ) {
+            stopAnimation();
             mSelIndex = selIndex;
             mSelItemIndex = ( mSelItemIndex == 0 ) ?  NBR_ICON_ITEM -1 : --mSelItemIndex;
             selIndex = ( mSelItemIndex + 3 ) % NBR_ICON_ITEM;
             updateIconItem( mSelIndex - 2, selIndex, - width * 2 ) ;
-            emit changeSelectedIndex ( mModel->index ( mSelIndex, 0 ) ) ;
+            playAnimation();
+			if(!mZoomOn) {
+                emit changeSelectedIndex ( mModel->index ( mSelIndex, 0 ) ) ;
+			}
         }
         mMoveDir = NO_MOVE;
-        mBounceBackDeltaX = 10;
+        mBounceBackDeltaX = GLX_BOUNCEBACK_DELTA;
         mSpeed = GLX_COVERFLOW_SPEED;
     }
 }
@@ -406,71 +401,67 @@
 {  
     qDebug("GlxCoverFlow::loadIconItems ");
     int index = 0;
-    QVariant variant = mModel->data( mModel->index(0,0), GlxFocusIndexRole );    
-    if ( variant.isValid() &&  variant.canConvert<int> () ) {
-        mSelIndex = variant.value<int>();  
-    }  
-
+    stopAnimation();
+    mSelIndex = getFocusIndex();
+    
     qDebug("GlxCoverFlow::loadIconItems index = %d, width = %d", mSelIndex, size().width() );    
     
     for ( qint8 i = 0; i < NBR_ICON_ITEM ; i++ ) {
-        index = calculateIndex ( mSelIndex - 2 + i) ;           
-        QVariant variant = mModel->data( mModel->index(index, 0), GlxFsImageRole );
-        if ( variant.isValid() &&  variant.canConvert<HbIcon> () ) {
-            mIconItem[i]->setIcon ( variant.value<HbIcon>() ) ;       
-        }
-        else {
-            mIconItem[i]->setIcon( HbIcon() );
-        }            
+        index = calculateIndex ( mSelIndex - 2 + i) ; 
+        mIconItem[i]->setIcon( getIcon( index ) );
         mIconItem[i]->setSize ( mItemSize );
         mIconItem[i]->setPos ( QPointF ( (i - 2) * mItemSize.width(), 0) );   
     }
     
     mSelItemIndex = 2;
     mCurrentPos = mItemSize.width() * mSelIndex;
+    playAnimation();
+}
+
+void GlxCoverFlow::playAnimation()
+{
+    if ( isAnimatedImage( mSelIndex ) ) {
+        mIconItem[ mSelItemIndex ]->setIcon( HbIcon( getUri( mSelIndex ) ) );
+        mIconItem[ mSelItemIndex ]->animator().startAnimation();
+    }
+}
+
+void GlxCoverFlow::stopAnimation()
+{
+    mIconItem[ mSelItemIndex ]->animator().stopAnimation();
 }
 
 void GlxCoverFlow::updateIconItem (qint16 selIndex, qint16 selItemIndex, qint16 posX)
 {
     qDebug("GlxCoverFlow::updateIconItem selIndex = %d, selIconIndex = %d posX = %d", selIndex, selItemIndex, posX );
-    mIconItem[selItemIndex]->setPos(QPointF(posX, 0));
     
     selIndex = calculateIndex( selIndex );
-    
-    QVariant variant = mModel->data( mModel->index(selIndex, 0), GlxFsImageRole );
-    if ( variant.isValid() &&  variant.canConvert<HbIcon> () ) {
-        mIconItem[selItemIndex]->setIcon ( variant.value<HbIcon>() ) ;       
-    }
-    else {
-        mIconItem[selItemIndex]->setIcon( HbIcon() );
-    }
-    mIconItem[selItemIndex]->setSize ( mItemSize );    
+    mIconItem[ selItemIndex ]->setPos( QPointF( posX, 0 ) );    
+    mIconItem[ selItemIndex ]->setIcon( getIcon( selIndex ) );
+    mIconItem[ selItemIndex ]->setSize ( mItemSize );    
 }
 
-
 void GlxCoverFlow::clearCurrentModel()
 {
     qDebug("GlxCoverFlow::clearCurrentModel ");
     if ( mModel ) {
-        disconnect( mModel, SIGNAL( dataChanged(QModelIndex,QModelIndex) ), this, SLOT( dataChanged(QModelIndex,QModelIndex) ) );
-        disconnect(mModel, SIGNAL(rowsInserted(QModelIndex,int,int)), this, SLOT(rowsInserted(QModelIndex,int,int)));
-        disconnect(mModel, SIGNAL(rowsRemoved(QModelIndex,int,int)), this, SLOT(rowsRemoved(QModelIndex,int,int)));
+        disconnect( mModel, SIGNAL( dataChanged( QModelIndex, QModelIndex ) ), this, SLOT( dataChanged( QModelIndex, QModelIndex ) ) );
+        disconnect( mModel, SIGNAL( rowsInserted( QModelIndex, int, int ) ), this, SLOT( rowsInserted( QModelIndex, int, int ) ) );
+        disconnect( mModel, SIGNAL( rowsRemoved( QModelIndex, int, int) ), this, SLOT( rowsRemoved( QModelIndex, int, int ) ) );
+        disconnect( mModel, SIGNAL( destroyed() ), this, SLOT( modelDestroyed() ) );
         mModel = NULL ;
-    }
-/*
-    disconnect(mModel, SIGNAL(destroyed()), this, SLOT(_q_modelDestroyed()));
-    disconnect(mModel, SIGNAL(rowsAboutToBeRemoved(QModelIndex,int,int)), this, SLOT(rowsAboutToBeRemoved(QModelIndex,int,int)));
-*/  
+    } 
 }
 
 void GlxCoverFlow::initializeNewModel()
 {
     qDebug("GlxCoverFlow::initializeNewModel" );
     if ( mModel ) {
-        connect( mModel, SIGNAL( dataChanged(QModelIndex,QModelIndex) ), this, SLOT( dataChanged(QModelIndex,QModelIndex) ) );
-        connect(mModel, SIGNAL(rowsInserted(QModelIndex,int,int)), this, SLOT(rowsInserted(QModelIndex,int,int)));
-        connect(mModel, SIGNAL(rowsRemoved(QModelIndex,int,int)), this, SLOT(rowsRemoved(QModelIndex,int,int)));
-    }   
+        connect( mModel, SIGNAL( dataChanged( QModelIndex, QModelIndex ) ), this, SLOT( dataChanged( QModelIndex, QModelIndex ) ) );
+        connect( mModel, SIGNAL( rowsInserted( QModelIndex, int, int ) ), this, SLOT( rowsInserted( QModelIndex, int, int ) ) );
+        connect( mModel, SIGNAL( rowsRemoved( QModelIndex, int, int) ), this, SLOT( rowsRemoved( QModelIndex, int, int ) ) );
+        connect( mModel, SIGNAL( destroyed() ), this, SLOT( modelDestroyed() ) );
+    } 
 }
 
 void GlxCoverFlow::resetCoverFlow()
@@ -499,28 +490,21 @@
 {
     qDebug("GlxCoverFlow::resetpartiallyCreated");
     mIconItem[2]->setSize ( itemSize );
-    mIconItem[2]->setPos ( QPointF ( 0, 0) );  
-    
-    QVariant variant = model->data( model->index(0,0), GlxFocusIndexRole );    
-    if ( variant.isValid() &&  variant.canConvert<int> () ) {
-        mSelIndex = variant.value<int>();  
-       qDebug("GlxCoverFlow::partiallyCreated index mSelIndex=%d",mSelIndex);
-    }
-    
-    variant = model->data( model->index(mSelIndex, 0), GlxFsImageRole );
-    if ( variant.isValid() &&  variant.canConvert<HbIcon> () ) {
-        mIconItem[2]->setIcon ( variant.value<HbIcon>() ) ; 
-    }
+    mIconItem[2]->setPos ( QPointF ( 0, 0) ); 
+    mModel = model ; 
+    mSelIndex = getFocusIndex();
+    mIconItem[2]->setIcon( getIcon( mSelIndex ) ) ;
+    mModel = NULL;
 }
 
 GlxCoverFlow::~GlxCoverFlow()
 {
     qDebug("GlxCoverFlow::~GlxCoverFlow model " );
+    ClearCoverFlow();
     disconnect( this, SIGNAL( autoLeftMoveSignal() ), this, SLOT( autoLeftMove() ) );
     disconnect( this, SIGNAL( autoRightMoveSignal() ), this, SLOT( autoRightMove() ) );
 }
 
-
 void GlxCoverFlow::ClearCoverFlow()
 {
     qDebug("GlxCoverFlow::ClearCoverFlow  " );
@@ -542,3 +526,64 @@
     }
     return substate;
 }
+
+void GlxCoverFlow::zoomStarted(int index)
+{
+    Q_UNUSED(index)
+    stopAnimation();
+	mZoomOn = true;	
+}
+
+void GlxCoverFlow::zoomFinished(int index)
+{ 
+	mZoomOn = false;
+	playAnimation();
+	indexChanged(index);
+}
+
+void GlxCoverFlow::timerEvent(QTimerEvent *event)
+{
+    if(mTimerId == event->timerId())
+    {
+        killTimer(mTimerId);
+        mTimerId = 0;
+        emit coverFlowEvent( TAP_EVENT );
+    }
+}
+
+int GlxCoverFlow::getFocusIndex( )
+{
+    QVariant variant = mModel->data( mModel->index( 0, 0 ), GlxFocusIndexRole ) ;
+    if ( variant.isValid() && variant.canConvert< int > () ) {
+        return variant.value< int > ();
+    }
+    return -1;
+}
+
+HbIcon GlxCoverFlow::getIcon( int index )
+{
+    QVariant variant = mModel->data( mModel->index( index, 0 ), GlxFsImageRole );
+    if ( variant.isValid() &&  variant.canConvert< HbIcon > () ) {
+        return variant.value<HbIcon> () ;       
+    }
+    return HbIcon() ;
+}
+
+QString GlxCoverFlow::getUri( int index )
+{
+    QVariant variant = mModel->data( mModel->index( index, 0 ), GlxUriRole );
+    if ( variant.isValid() && variant.canConvert< QString > () ){
+        return variant.value< QString > () ;
+    }
+    return QString();
+}
+
+bool GlxCoverFlow::isAnimatedImage( int index )
+{
+    int frameCount = 0;
+    QVariant variant = mModel->data( mModel->index( index, 0 ), GlxFrameCount );
+    if ( variant.isValid() && variant.canConvert< int > () ) {
+         frameCount = variant.value< int > () ;
+    }
+    return frameCount > 1 ? true : false ;
+}
--- a/ui/views/fullscreenview/src/glxfullscreenview.cpp	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/views/fullscreenview/src/glxfullscreenview.cpp	Thu Jul 22 16:33:32 2010 +0100
@@ -29,6 +29,7 @@
 #include <QAbstractItemModel>
 #include <hbabstractviewitem.h>
 #include <hbiconitem.h>
+#include <QCoreApplication>
 
 //User Includes
 #include "glxlog.h"
@@ -42,7 +43,7 @@
 #include "glxtvoutwrapper.h"
 #include "glxfullscreenview.h" 
 #include "glxcommandhandlers.hrh"
-//#include "glxzoomwidget.h"
+#include "glxzoomwidget.h"
 
 #include "OstTraceDefinitions.h"
 #ifdef OST_TRACE_COMPILER_IN_USE
@@ -62,10 +63,7 @@
     mIconItem(NULL),
     mTvOutWrapper(NULL),
     mFullScreenToolBar(NULL),
-	mFlipAction(NULL),
-	mSendAction(NULL),
-	mDeleteAction(NULL),
-	mUseImageAction(NULL)
+	mZoomWidget(NULL)
 {
     OstTraceFunctionEntry0( GLXFULLSCREENVIEW_GLXFULLSCREENVIEW_ENTRY );
     
@@ -87,15 +85,11 @@
         mTvOutWrapper = new GlxTvOutWrapper();
     }
     setHdmiModel(model);
-
-    //Load/Retrieve the Widgets
     loadWidgets();
 
-    //Initialize the coverflow and partially creates the coverflow with one image
-    // to make the widget light weight in order to make
-    // transition smooth 
-    mCoverFlow->partiallyCreate( model, screenSize());
-    setItemVisible(Hb::AllItems, FALSE) ;
+    // Initialize the coverflow and partially creates the coverflow with one image
+    // to make the widget light weight in order to make transition smooth 
+    mCoverFlow->partiallyCreate( model, screenSize() );
     
     OstTraceFunctionExit0( GLXFULLSCREENVIEW_INITIALIZEVIEW_EXIT );
 }
@@ -103,20 +97,22 @@
 void GlxFullScreenView::loadWidgets()
 {
     OstTraceFunctionEntry0( GLXFULLSCREENVIEW_LOADWIDGETS_ENTRY );
+       
+    mCoverFlow = qobject_cast<GlxCoverFlow*> (mDocLoader->findWidget(GLXFULLSCREEN_COVERFLOW));
     
-    //Load the Coverflow and image strip widget    
-    mCoverFlow = qobject_cast<GlxCoverFlow*> (mDocLoader->findWidget(GLXFULLSCREEN_COVERFLOW));
-
+    mZoomWidget  =  qobject_cast<GlxZoomWidget*> (mDocLoader->findWidget(GLXFULLSCREENZOOMWIDGET));
+    mZoomWidget->connectDecodeRequestToPinchEvent();
+    mCoverFlow->setMultitouchFilter(mZoomWidget);
+    
     //initialise the cover flow for basic connections and the rest
     mCoverFlow->setCoverFlow();
-
-   //Load the IMAGE STRIP & FULLSCREEN TOOLBAR[PUSH BUTTON]
-    mImageStrip              =   qobject_cast<HbGridView*> (mDocLoader->findWidget(GLXFULLSCREEN_FILMSTRIP));
+    mImageStrip = qobject_cast<HbGridView*> (mDocLoader->findWidget(GLXFULLSCREEN_FILMSTRIP));
      
     //When the widget is loaded/retreived the widgets are shown by default.
     //@to do : hide the widgets by default in docml
     mImageStrip->hide();      
-	mImageStrip->setLayoutName( QString( "ImageStrip" ) );
+	mImageStrip->setLayoutName( QString( "ImageStrip" ) ); // To distinguish in CSS file
+	mImageStrip->setEnabledAnimations( HbAbstractItemView::None );
 	
     OstTraceFunctionExit0( GLXFULLSCREENVIEW_LOADWIDGETS_EXIT );
 }
@@ -133,59 +129,46 @@
 
     mFullScreenToolBar = qobject_cast<HbToolBar *> (mDocLoader->findObject(QString("toolBar")));
     mFullScreenToolBar->clearActions();
-
-    //create  Flip tool bar button action
-    mFlipAction = new HbAction(this);
-    mFlipAction->setData(EGlxCmdDetailsOpen);
-    mFlipAction->setIcon(HbIcon(GLXICON_FLIP));
-    mFullScreenToolBar->addAction( mFlipAction);
-
-    //create  Send tool bar button action
-    mSendAction = new HbAction(this);
-    mSendAction->setData(EGlxCmdSend);
-    mSendAction->setIcon(HbIcon(GLXICON_SEND));
-    mFullScreenToolBar->addAction( mSendAction);
+    
+    addToolBarAction( EGlxCmdDetailsOpen, GLXICON_FLIP, "Flip Action" ); //create  Flip tool bar button action
+    addToolBarAction( EGlxCmdSend, GLXICON_SEND, "Send Action" );        //create  Send tool bar button action
+    if( getSubState() != IMAGEVIEWER_S ) {        
+        addToolBarAction( EGlxCmdDelete, GLXICON_DELETE, "Delete Action" ); //create  Delete tool bar button action
+    }
+    else {
+        addToolBarAction( EGlxCmdHandled, GLXICON_USEIMAGE, "Use Action" ); //create  Use Image tool bar button action
+    }
+ 
+    OstTraceFunctionExit0( GLXFULLSCREENVIEW_LOADFULLSCREENTOOLBAR_EXIT );
+}
 
-    //create  Delete tool bar button action
-    mDeleteAction = new HbAction(this);
-    mDeleteAction->setData(EGlxCmdDelete);        
-    mDeleteAction->setIcon(HbIcon(GLXICON_DELETE)); 
-    
-    //create  Use Image tool bar button action
-    mUseImageAction = new HbAction(this);
-    //mUseImageAction->setData(EGlxCmdDelete);        
-    mUseImageAction->setIcon(HbIcon(GLXICON_USEIMAGE)); 
-    if(getSubState() != IMAGEVIEWER_S){
-        mFullScreenToolBar->addAction( mDeleteAction);
-    }else{
-        mFullScreenToolBar->addAction( mUseImageAction);
-    }
-     
-
-    connect(mFlipAction, SIGNAL(triggered( )), this, SLOT(handleToolBarAction( )) ); 
-    connect(mSendAction, SIGNAL(triggered( )), this, SLOT(handleToolBarAction( )) ); 
-    connect(mDeleteAction, SIGNAL(triggered( )), this, SLOT(handleToolBarAction( )) );
-    connect(mUseImageAction, SIGNAL(triggered( )), this, SLOT(handleToolBarAction( )) );
-    
-    OstTraceFunctionExit0( GLXFULLSCREENVIEW_LOADFULLSCREENTOOLBAR_EXIT );
+void GlxFullScreenView::addToolBarAction( int commandId, const QString &iconName, const QString &name )
+{
+    HbAction *action = new HbAction( this ); 
+    action->setData( commandId );
+    action->setIcon( HbIcon( iconName ) ); 
+    action->setObjectName( name );
+    mFullScreenToolBar->addAction( action);
+    connect(action, SIGNAL(triggered( )), this, SLOT(handleToolBarAction( )) ); 
 }
 
 void GlxFullScreenView::activate()
 {
     OstTraceFunctionEntry0( GLXFULLSCREENVIEW_ACTIVATE_ENTRY );    
-
-    setItemVisible(Hb::AllItems, FALSE) ;
-
 //for zoom might not be required after wk15 release
 	mWindow->viewport()->setAttribute(Qt::WA_AcceptTouchEvents,true); 
 	mWindow->viewport()->grabGesture(Qt::PinchGesture);
 	
-    if(!mCoverFlow){
+	QCoreApplication::instance()->installEventFilter(this);
+
+    if( !mCoverFlow ) {
         loadWidgets();  //retrives the widgets
     }
-
     //Loads the widgets corresponding to the orientation.
-    loadViewSection();   
+    loadViewSection();
+    
+    setStatusBarVisible(FALSE);
+    setTitleBarVisible(FALSE);
         
     mUiOffTimer = new QTimer();
     mUiOff = true;
@@ -196,7 +179,7 @@
      
     if (!mTvOutWrapper){
         mTvOutWrapper = new GlxTvOutWrapper();
-        }
+    }
     OstTraceFunctionExit0( GLXFULLSCREENVIEW_ACTIVATE_EXIT );
 }
 
@@ -236,7 +219,7 @@
     
 	//Clean up the rest of the resources allocated
     cleanUp();
-
+    QCoreApplication::instance()->removeEventFilter(this);
     //deletes the iconitems in the coverflow   
     mCoverFlow->ClearCoverFlow();
 
@@ -270,6 +253,12 @@
         delete mTvOutWrapper;
         mTvOutWrapper = NULL;
     }
+    
+    if(mZoomWidget)
+    {
+        mZoomWidget->cleanUp();
+        mZoomWidget = NULL;
+    }
     OstTraceFunctionExit0( GLXFULLSCREENVIEW_CLEANUP_EXIT );
 }
 
@@ -292,27 +281,26 @@
     mModel = model;     
 	setModelContext();  
     setHdmiModel(mModel);
-
+	mZoomWidget->setModel(mModel);  
     mCoverFlow->setModel(mModel);
     setImageStripModel();
-    if(getSubState() == IMAGEVIEWER_S)
-        {
+    if(getSubState() == IMAGEVIEWER_S) {
         setTitle("Image Viewer");
-        }
+    }
 	else if(getSubState() == FETCHER_S){
-		setItemVisible(Hb::AllItems, TRUE) ;
+		setStatusBarVisible(TRUE);
+        setTitleBarVisible(TRUE);
 	}
     OstTraceFunctionExit0( GLXFULLSCREENVIEW_SETMODEL_EXIT );
 }
 
 void GlxFullScreenView::setHdmiModel(QAbstractItemModel* model)
-    {
-    if (mTvOutWrapper)
-        mTvOutWrapper->setModel(model);
-    
-    // for the first image on screen
-    mTvOutWrapper->setImagetoHDMI();
-    }
+{
+    if (mTvOutWrapper) {
+        mTvOutWrapper->setModel(model); 
+        mTvOutWrapper->setImagetoHDMI(); // for the first image on screen
+    }    
+}
 
 void GlxFullScreenView::setModelContext()
 {
@@ -353,7 +341,7 @@
     OstTraceFunctionEntry0( GLXFULLSCREENVIEW_ACTIVATEUI_ENTRY );
     
     if ( mUiOff && getSubState() != FETCHER_S){      
-        if(!mFullScreenToolBar) {
+        if( !mFullScreenToolBar ) {
             loadFullScreenToolBar();
         }
         mUiOff = FALSE;
@@ -365,8 +353,9 @@
         }
         
         mFullScreenToolBar->show();
-        setItemVisible(Hb::AllItems, TRUE) ;
-
+		setStatusBarVisible(TRUE);
+        setTitleBarVisible(TRUE);
+       
         if ( mImageStrip && getSubState() != IMAGEVIEWER_S) {
             mImageStrip->show(); 
             HbEffect::start(mImageStrip, QString("HbGridView"), QString("TapShow"), this, "effectFinished" );
@@ -395,7 +384,8 @@
     
     mUiOff = TRUE;
 	if ( getSubState() != FETCHER_S ) {
-		setItemVisible(Hb::AllItems, FALSE) ;
+		setStatusBarVisible(FALSE);
+        setTitleBarVisible(FALSE);
 	}
     if ( mImageStrip && ( getSubState() != IMAGEVIEWER_S && getSubState() != FETCHER_S )) {
         HbEffect::start(mImageStrip, QString("HbGridView"), QString("TapHide"), this, "effectFinished" );
@@ -414,17 +404,24 @@
     
     QVariant variant = mModel->data( mModel->index(0,0), GlxFocusIndexRole );    
     if ( variant.isValid() &&  variant.canConvert<int> () && ( index.row() == variant.value<int>() ) ) {
-       OstTraceFunctionExit0( GLXFULLSCREENVIEW_CHANGESELECTEDINDEX_EXIT );
-       if (mTvOutWrapper){
-       // for the image changed on deletion
-       mTvOutWrapper->setImagetoHDMI();
-       }
-       return;
-    }         
-    mModel->setData( index, index.row(), GlxFocusIndexRole );    
+        OstTraceFunctionExit0( GLXFULLSCREENVIEW_CHANGESELECTEDINDEX_EXIT );
+        if (mTvOutWrapper){
+            // for the image changed on deletion
+            mTvOutWrapper->setImagetoHDMI();
+        }
+        if (mZoomWidget){
+            // for the image changed on deletion
+            mZoomWidget->indexChanged();
+        }
+        return;
+    }
+    
+    mModel->setData( index, index.row(), GlxFocusIndexRole );
+    mModel->setData( index, index.row(), GlxVisualWindowIndex );
+	mZoomWidget->indexChanged(index.row());  
     if (mTvOutWrapper){
-    // for the image changed on swipe
-    mTvOutWrapper->setImagetoHDMI();
+        // for the image changed on swipe
+        mTvOutWrapper->setImagetoHDMI();
     }
     OstTraceFunctionExit0( DUP1_GLXFULLSCREENVIEW_CHANGESELECTEDINDEX_EXIT );
 }
@@ -439,6 +436,7 @@
        return;
     }         
     mModel->setData( index, index.row(), GlxFocusIndexRole );
+	mZoomWidget->indexChanged(index.row());
     mCoverFlow->indexChanged(index.row());
     mImageStrip->scrollTo(index, HbGridView::EnsureVisible );
     if (mTvOutWrapper){
@@ -587,7 +585,9 @@
     QSize sz = screenSize();
 
     mCoverFlow->setItemSize(sz);
- 	OstTraceFunctionExit0( GLXFULLSCREENVIEW_SETLAYOUT_EXIT );
+ 	mZoomWidget->setWindowSize(sz);
+
+    OstTraceFunctionExit0( GLXFULLSCREENVIEW_SETLAYOUT_EXIT );
 }
 
 void GlxFullScreenView::addConnection()
@@ -611,6 +611,12 @@
         connect(mUiOffTimer, SIGNAL(timeout()), this, SLOT(hideUi()));
     }
     
+    if(mCoverFlow && mZoomWidget) {
+		connect(mZoomWidget,SIGNAL( pinchGestureReceived(int) ), mCoverFlow, SLOT( zoomStarted(int) ) );
+		connect(mZoomWidget,SIGNAL( zoomWidgetMovedBackground(int) ), mCoverFlow, SLOT( zoomFinished(int) ) );
+        connect(mCoverFlow,SIGNAL( doubleTapEventReceived(QPointF) ), mZoomWidget, SLOT( animateZoomIn(QPointF) ) );
+	}
+
     connect(mWindow, SIGNAL(orientationChanged(Qt::Orientation)), this, SLOT(orientationChanged(Qt::Orientation)));
 
     OstTraceFunctionExit0( GLXFULLSCREENVIEW_ADDCONNECTION_EXIT );
@@ -640,23 +646,11 @@
         GLX_LOG_INFO("GlxFullScreenView::removeConnection() mUiOffTimer  " );
         disconnect(mUiOffTimer, SIGNAL(timeout()), this, SLOT(hideUi()));
     }
-
             
-    if(mFlipAction) {
-        disconnect(mFlipAction, SIGNAL(triggered( )), this, SLOT(handleToolBarAction( )) );  
-    }
-
-    if(mSendAction) {
-        disconnect(mSendAction, SIGNAL(triggered( )), this, SLOT(handleToolBarAction( )) );  
-    }
-
-    if(mDeleteAction) {
-        disconnect(mDeleteAction, SIGNAL(triggered( )), this, SLOT(handleToolBarAction( )) );  
-    }
-
-    if(mUseImageAction) {
-        disconnect(mUseImageAction, SIGNAL(triggered( )), this, SLOT(handleToolBarAction( )) );  
-    }
+	if( mCoverFlow && mZoomWidget ) {
+		disconnect(mZoomWidget,SIGNAL( pinchGestureReceived(int) ), mCoverFlow, SLOT( zoomStarted(int) ) );
+		disconnect(mZoomWidget,SIGNAL( zoomWidgetMovedBackground(int) ), mCoverFlow, SLOT( zoomFinished(int) ) );
+	}
     
 	disconnect(mWindow, SIGNAL(orientationChanged(Qt::Orientation)), this, SLOT(orientationChanged(Qt::Orientation)));
 
@@ -683,22 +677,10 @@
 	cleanUp();
 	
 	delete mIconItem ;
-	mIconItem = NULL;
-    
-	if(mImageStrip) {
-        delete mImageStrip;
-        mImageStrip = NULL;
-    }
-
-    if(mFullScreenToolBar) {
-        delete mFullScreenToolBar;
-        mFullScreenToolBar = NULL;
-    }
-
-    if(mCoverFlow) {
-        delete mCoverFlow;
-        mCoverFlow = NULL;
-    }
+    delete mImageStrip;
+    delete mFullScreenToolBar;
+    delete mCoverFlow;
+    delete mZoomWidget;
 
     if(mDocLoader != NULL) {
         mDocLoader->reset();
@@ -752,27 +734,28 @@
 
 int GlxFullScreenView::getSubState()
 {
-	int substate = NO_FULLSCREEN_S;
-	QVariant variant = mModel->data( mModel->index(0,0), GlxSubStateRole );    
-	if ( variant.isValid() &&  variant.canConvert<int> ()  ) {
-		substate = variant.value<int>();
+	int substate = NO_FULLSCREEN_S;	
+	
+	if ( mModel  ) {	
+        QVariant variant = mModel->data( mModel->index(0,0), GlxSubStateRole );    
+        if ( variant.isValid() &&  variant.canConvert<int> ()  ) {
+            substate = variant.value<int>();
+        }
 	}
 	return substate;
 }
 
-bool GlxFullScreenView::event(QEvent *event)
+bool GlxFullScreenView::eventFilter(QObject *obj, QEvent *ev)
 {
-    GLX_LOG_INFO1("GlxFullScreenView::event() %d event type", event->type());
-    if ( event->type() ==  QEvent::WindowActivate && mCoverFlow) {
-        if (mTvOutWrapper){
+    GLX_LOG_INFO1("GlxFullScreenView::event() %d event type", ev->type());
+    if ( ev->type() ==  QEvent::ApplicationActivate && mTvOutWrapper) {
+        GLX_LOG_INFO("GlxFullScreenView::event() shift to native - CGlxHdmi");
         mTvOutWrapper->setToNativeMode();    
-        }
     }
-    if ( event->type() ==  QEvent::WindowDeactivate && mCoverFlow) {
-        if (mTvOutWrapper){
+    if ( ev->type() ==  QEvent::ApplicationDeactivate && mTvOutWrapper) {
+        GLX_LOG_INFO("GlxFullScreenView::event() shift to Clone - CGlxHdmi");
         mTvOutWrapper->setToCloningMode();    
-        }
     }
-    return HbView::event(event);
+    return HbView::eventFilter(obj,ev);
 }
 
--- a/ui/views/fullscreenview/src/glxzoomcontrol.cpp	Wed Jun 16 13:08:54 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,316 +0,0 @@
-/*
-* Copyright (c) 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:   ?Description
-*
-*/
-
-#include "glxzoomcontrol.h"
-#include "glximagedecoderwrapper.h"
-#include "glxmodelparm.h"
-#include <hbicon.h>
-#include <glxmediamodel.h>
-#include <QtDebug>
-#include <hbinstance.h>
-#include <hbiconitem.h>
-#include <QDebug>
-
-GlxZoomControl::GlxZoomControl(QGraphicsItem *parent) : HbScrollArea(parent),mIsControlActivated(false), mIsItemChanged(true)
-{
-	setScrollDirections(Qt::Horizontal | Qt::Vertical);
-	hide();
-	setZValue(6);
-	setScrollingStyle(PanOrFlick);
-	mBlackBackgroundItem = new HbIconItem(parent);
-	mBlackBackgroundItem->setBrush(QBrush(Qt::black));
-	mBlackBackgroundItem->hide();
-	mZoomWidget = new QGraphicsWidget(this);
-	mZoomItem = new QGraphicsPixmapItem(mZoomWidget);
-	mImageDecoder = new GlxImageDecoderWrapper;	
-
-}
-
-GlxZoomControl::~GlxZoomControl()
-{
-	resetZoomControl();
-	delete mZoomItem;
-	delete mZoomWidget;
-	mImageDecoder->resetDecoder();
-	delete mImageDecoder;
-	delete mBlackBackgroundItem;
-
-}
-
-void GlxZoomControl::zoomImage(int zoomFactor)
-{
-	qDebug("@@@GlxZoomControl::zoomImage  ZF=%d, InitialZf=%d", zoomFactor, mInitialZoomFactor);
-	if(mIsItemChanged)	{
-		initializeZoomControl(zoomFactor);
-	}
-	if(zoomFactor > mInitialZoomFactor) {
-
-		qreal zoomPercent = qreal(zoomFactor)/100.00;
-		QSizeF requiredSize = QSize(qreal(mItemSize.width() * zoomPercent), qreal(mItemSize.height() * zoomPercent ));
-		calculatePanOffset();
-		mZoomWidget->scale(requiredSize.width()/mCurrentSize.width(), requiredSize.height()/mCurrentSize.height());
-		qDebug()<<"GlxZoomControl::zoomImage scaling factor"<<requiredSize.width()/mCurrentSize.width()<<requiredSize.height()/mCurrentSize.height();
-		qDebug()<<"GlxZoomControl::zoomImage required Size"<<requiredSize.width()<<requiredSize.height();
-		qDebug()<<"GlxZoomControl::zoomImage current Size"<<mCurrentSize.width()<<mCurrentSize.height();
-		qDebug()<<"GlxZoomControl::zoomImage item Size"<<mItemSize.width()<<mItemSize.height();
-
-		//mZoomWidget->setGeometry(QRectF(-0.5*QPointF(requiredSize.width(),requiredSize.height()),requiredSize ));
-		//mZoomWidget->setPos(mWindowSize.width()/2 - requiredSize.width()/2,mWindowSize.height()/2 - requiredSize.height()/2);
-		mCurrentSize = requiredSize;	
-		mCurrentZoomFactor = zoomFactor;
-		updateItemPosition();
-		if(!mIsControlActivated) {
-			show();
-			mBlackBackgroundItem->show();
-			mIsControlActivated = true;
-			emit hideFullScreenUi();
-		}
-	}
-	if(zoomFactor < mInitialZoomFactor)
-	{
-		mBlackBackgroundItem->hide();
-		hide();
-		mPanOffset.setX(0);
-		mPanOffset.setY(0);
-		updateItemPosition();
-		mIsControlActivated = false;
-		//mZoomWidget->resetTransform();
-	}
-}
-
-void GlxZoomControl::initializeZoomControl(int zoomFactor)
-{
-	 qDebug("@@@GlxZoomControl::initializeZoomControl Zoom Factor %d", zoomFactor);
-	 if(mIsControlActivated || zoomFactor < mInitialZoomFactor)
-	 {
-		return;
-	 }
-	 qDebug("@@@GlxZoomControl::initializeZoomControl Context not activated yet");
-	 //get the image path and request for a decoded pixmap first
-	 QString imagePath = (mModel->data(mModel->index(mModel->data(mModel->index(0,0),GlxFocusIndexRole).value<int>(),0),GlxUriRole)).value<QString>();
-	 mImageDecoder->decodeImage(imagePath);
-	 connect(mImageDecoder, SIGNAL(pixmapDecoded()), this, SLOT(decodedImageAvailable()));
-	 QVariant variant = mModel->data(mModel->index(mModel->data(mModel->index(0,0),GlxFocusIndexRole).value<int>(),0),GlxFsImageRole);
-	 if ( variant.isValid() &&  variant.canConvert<HbIcon> () ) {
-		 qDebug("@@@GlxZoomControl::initializeZoomControl valid icon");
-		 QIcon itemIcon = variant.value<HbIcon>().qicon();
-		 //QSize windowSize(360,640);
-		 QSize itemSize = itemIcon.actualSize(mWindowSize);
-		 QPixmap itemPixmap = itemIcon.pixmap(itemSize);
-		 //if(itemPixmap.isNull())
-		 qDebug("@@@GlxZoomControl::initializeZoomControl Null Pixmap");
-		 //set item size to the actual size
-		 mItemSize = (mModel->data(mModel->index(mModel->data(mModel->index(0,0),GlxFocusIndexRole).value<int>(),0),GlxDimensionsRole)).value<QSize>();
-		 mCurrentSize = itemPixmap.size();
-		 mZoomItem->setPixmap(itemPixmap);
-		 mZoomWidget->setGeometry(QRectF(-0.5*QPointF(mCurrentSize.width(),mCurrentSize.height()),mItemSize ));
-		 mZoomWidget->setPos(mWindowSize.width()/2 - mCurrentSize.width()/2,mWindowSize.height()/2 - mCurrentSize.height()/2);
-		 //show();
-         //mIsControlActivated = true;
-		 mIsItemChanged = false;
-		 setContentWidget(mZoomWidget);
-	 }
-}
-
-void GlxZoomControl::setModel(QAbstractItemModel *model)
-{
-	GlxMediaModel *glxModel = dynamic_cast<GlxMediaModel *>(model);
-    if ( glxModel ==NULL ||  glxModel == mModel) {
-        return ;
-    }
-	mModel = glxModel;
-}
-
-void GlxZoomControl::resetZoomControl()
-{
-	qDebug("@@@GlxZoomControl::resetZoomControl");
-	mBlackBackgroundItem->hide();
-	hide();
-	mZoomWidget->resetTransform();
-	mZoomItem->setPixmap(QPixmap());
-	mItemSize = QSizeF(0,0);
-	mCurrentSize = mItemSize;
-	mIsControlActivated = false;
-	mIsItemChanged = true;
-	mInitialZoomFactor = 0;
-	mPanOffset.setX(0);
-	mPanOffset.	setY(0);
-	mImageDecoder->resetDecoder();		
-}
-
-void GlxZoomControl::indexChanged(int index)
-{
-	Q_UNUSED(index);
-	qDebug("@@@GlxZoomControl::indexChanged");
-	resetZoomControl();
-
-}
-
-void GlxZoomControl::decodedImageAvailable()
-{
-	//new bitmap with better resolution is available
-	//so set it to the item
-	QPixmap decodedPixmap = mImageDecoder->getPixmap();
-	if(decodedPixmap.isNull()){
-		return;
-	}
-	mCurrentSize = decodedPixmap.size();
-	//this is important if not done then old transforms will be applied on the new image
-	mZoomWidget->resetTransform();
-	mZoomItem->setPixmap(decodedPixmap);
-	QPointF undefferedPos;
-	undefferedPos.setX(mWindowSize.width()/2 - mCurrentSize.width()/2);
-	undefferedPos.setY(mWindowSize.height()/2 - mCurrentSize.height()/2);
-	mZoomWidget->setGeometry(QRectF(undefferedPos,mCurrentSize )); //temporarily setting it to an undeffered position
-	//update the image transforms
-	zoomImage(mCurrentZoomFactor);
-}
-
-void GlxZoomControl::initialZoomFactor(int initZoomFactor)
-{
-	qDebug("@@@GlxZoomControl::initialZoomFactor initZoomFactor=%d", initZoomFactor );
-	resetZoomControl();
-	mInitialZoomFactor = initZoomFactor;
-}
-
-void GlxZoomControl::setWindowSize (QSize windowSize)
-{
-	if(mWindowSize != windowSize) {
-		mWindowSize = windowSize;
-		mBlackBackgroundItem->setSize(mWindowSize);
-		mBlackBackgroundItem->setPos(0,0);
-		if(!mIsItemChanged) {
-			//first calculate offset because after orientation change this value will be lost
-			calculatePanOffset();
-			//update the item position WRT the new window size
-			updateItemPosition();
-
-		}
-	}
-}
-void GlxZoomControl::updateItemPosition()
-{
-	qreal zoomPercent = qreal(mCurrentZoomFactor)/100.00;
-	QPointF undefferedPos;
-	//calculate position if no panning was done
-	undefferedPos.setX(mWindowSize.width()/2 - mCurrentSize.width()/2);
-	undefferedPos.setY(mWindowSize.height()/2 - mCurrentSize.height()/2);
-	QPointF offset = mPanOffset;
-	//convert offset value WRT current zoomFactor
-	offset *= zoomPercent;
-	QPointF finalPos = undefferedPos + offset;
-	//check for boundry conditions 
-	checkandAdjustImageBoundaries(finalPos, undefferedPos);
-	qDebug()<<"GlxZoomControl::updateItemPosition offset x%d, y%d "<<offset.x()<< offset.y();
-	//mZoomWidget->setPos(undefferedPos + offset);
-	mZoomWidget->setGeometry(QRectF(finalPos,mCurrentSize ));
-}
-
-void GlxZoomControl::calculatePanOffset()
-{
-	qreal zoomPercent = qreal(mCurrentZoomFactor)/100.00;
-	QPointF currentPos = mZoomWidget->pos();
-	//calculate position if no panning was done
-	QPointF undefferedPos;
-	undefferedPos.setX(mWindowSize.width()/2 - mCurrentSize.width()/2);
-	undefferedPos.setY(mWindowSize.height()/2 - mCurrentSize.height()/2);
-	//get the offset with the current zoomFactor which is the difference between currentPos and undefferedPos
-	QPointF offset = currentPos - undefferedPos ;
-	qDebug()<<"GlxZoomControl::calculatePanOffset current Pos x%d, y%d undeffered x %d, y %d"<<currentPos.x()<< currentPos.y()<< undefferedPos.x()<< undefferedPos.y();
-    mPanOffset = offset;
-	//convert the offset value WRT a 100% zoomed image as that will be used for reference 
-	mPanOffset /= zoomPercent;
-	qDebug()<<"GlxZoomControl::calculatePanOffset mPanOffset x%d, y%d "<<mPanOffset.x()<< mPanOffset.y();
-}
-
-void GlxZoomControl::checkandAdjustImageBoundaries(QPointF &finalPos, QPointF undefferedPos)
-{
-	//check for boundary conditions in X Axis
-
-	//for Left side
-	//since the image is positioned WRT to screens top left corner(0,0) so if the images top left corner's X (finalPos.x()) is positive
-	//then boundry conditions for image to be on the leftmost side is met
-	if(finalPos.x() > 0) {
-		//chk if the original image position without any offset has also reached boundry conditions
-		if(undefferedPos.x() < 0) {
-		//set the image to the leftmost axis on the screen
-		finalPos.setX(0);
-		}
-		//if original image position without any offset has also reached boundry conditions then use the undefferedPos 
-		else {
-			finalPos.setX(undefferedPos.x());
-			//set offset to 0 as it is of no use anymore
-			mPanOffset.setX(0);
-		}
-	}
-
-	//Right side
-	//since the image is positioned WRT to screens top left corner(0,0) so if image Position added to the image dimensions is 
-	//greater than the screen dimensions then boundfy conditions for rightmost and lowest points are met.
-	//for X axis width will be of our concern
-	if((finalPos.x() + mCurrentSize.width()) <  mWindowSize.width()){
-		//if original image position without any offset has also reached boundry conditions then use the undefferedPos 
-		if ((undefferedPos.x() + mCurrentSize.width()) <  mWindowSize.width()) 	{
-			finalPos.setX(undefferedPos.x());
-			//set offset to 0 as it is of no use anymore
-			mPanOffset.setX(0);			
-		}
-		else {
-			//set the image to the rightmost axis on the screen
-			finalPos.setX(mWindowSize.width()- mCurrentSize.width());
-		}
-	}
-
-
-	//check for boundary conditions in Y Axis
-
-	//top
-	//since the image is positioned WRT to screens top left corner(0,0) so if the images top left corner's Y (finalPos.y()) is positive
-	//then boundry conditions for image to be on the topmost side is met
-	if(finalPos.y() > 0) {
-		//chk if the original image position without any offset has also reached boundry conditions
-		if(undefferedPos.y() < 0) {
-		//set the image to the topmost axis on the screen
-		finalPos.setY(0);
-		}
-		//if original image position without any offset has also reached boundry conditions then use the undefferedPos 
-		else {
-			finalPos.setY(undefferedPos.y());
-			//set offset to 0 as it is of no use anymore
-			mPanOffset.setY(0);
-		}
-	}
-
-	//bottom
-	//since the image is positioned WRT to screens top left corner(0,0) so if image Position added to the image dimensions is 
-	//greater than the screen dimensions then boundfy conditions for rightmost and lowest points are met.
-	//for Y axis height will be of our concern
-
-	if((finalPos.y() + mCurrentSize.height()) <  mWindowSize.height()){
-		//if original image position without any offset has also reached boundry conditions then use the undefferedPos 
-		if ((undefferedPos.y() + mCurrentSize.height()) <  mWindowSize.height()) 	{
-			finalPos.setY(undefferedPos.y());
-			//set offset to 0 as it is of no use anymore
-			mPanOffset.setY(0);			
-		}
-		else {
-			//set the image to the lowest axis on the screen
-			finalPos.setY(mWindowSize.height()- mCurrentSize.height());
-		}
-	}
-
-}
--- a/ui/views/fullscreenview/src/glxzoomslider.cpp	Wed Jun 16 13:08:54 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,133 +0,0 @@
-/*
-* Copyright (c) 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:   ?Description
-*
-*/
-
-#include "glxzoomslider.h"
-#include <hbslider.h>
-#include <glxmediamodel.h>
-#include <QAbstractItemModel>
-#include <QGraphicsItem>
-#include <QtDebug>
-#include "glxmodelparm.h"
-#include <QDebug>
-
-GlxZoomSlider::GlxZoomSlider(QGraphicsItem *parent)
-{
-	mZoomSlider = new HbSlider(Qt::Horizontal,parent);
-	mZoomSlider->hide();
-	mZoomSlider->setRange(0, 400);
-	mZoomSlider->setSingleStep(25);
-	mZoomSlider->setSliderPosition(100);
-	mZoomSlider->setZValue(7);
-	mZoomSlider->setPos(50,100);
-    mZoomSlider->resize(300.0, 0.0 );
-	isSliderVisible = false;
-	mSliderThumbPressed = false;
-	connect(mZoomSlider, SIGNAL(valueChanged(int)), this, SLOT(filterandEmitSliderValueChanges(int)));
-	connect(mZoomSlider, SIGNAL(sliderPressed()), this, SLOT(sliderThumbPressed()));
-	connect(mZoomSlider, SIGNAL(sliderReleased()), this, SLOT(sliderThumbReleased()));
-}
-
-GlxZoomSlider::~GlxZoomSlider()
-{
-	disconnect(mZoomSlider, SIGNAL(valueChanged(int)), this, SLOT(filterandEmitSliderValueChanges(int)));
-	disconnect(mZoomSlider, SIGNAL(sliderPressed()), this, SLOT(sliderThumbPressed()));
-	disconnect(mZoomSlider, SIGNAL(sliderReleased()), this, SLOT(sliderThumbReleased()));
-	delete mZoomSlider;
-	isSliderVisible = false;
-}
-
-void GlxZoomSlider::setModel (QAbstractItemModel *model)
-{
-	GlxMediaModel *glxModel = dynamic_cast<GlxMediaModel *>(model);
-    if ( glxModel ==NULL ||  glxModel == mModel) {
-        return ;
-    }
-	mModel = glxModel;
-
-}
-
-void GlxZoomSlider::indexChanged (int index)
-{
-	Q_UNUSED(index);
-	mZoomSlider->hide();
-	isSliderVisible = false;
-}
-
-void GlxZoomSlider::toggleSliderVisibility()
-{
-	if(isSliderVisible) {
-		mZoomSlider->hide();
-		isSliderVisible = false;
-	}
-	else {
-		calculateAndInitializeFSZoomFactor();
-		mZoomSlider->show();
-		isSliderVisible = true;
-	}
-}
-
-void GlxZoomSlider::retrieveActualAndDisplayedSize(QSize& itemSize, QSize& displayedSize)
-{
-	itemSize = (mModel->data(mModel->index(mModel->data(mModel->index(0,0),GlxFocusIndexRole).value<int>(),0),GlxDimensionsRole)).value<QSize>();
-	qDebug()<<"GlxZoomSlider::retrieveActualAndDisplayedSize"<<itemSize.width()<<itemSize.height();
-	 QVariant variant = mModel->data(mModel->index(mModel->data(mModel->index(0,0),GlxFocusIndexRole).value<int>(),0),GlxFsImageRole);
-	 if ( variant.isValid() &&  variant.canConvert<HbIcon> () ) {
-		 QIcon itemIcon = variant.value<HbIcon>().qicon();
-		 QSize windowSize(360,640);
-		 QSize itemSize = itemIcon.actualSize(windowSize);
-		 QPixmap itemPixmap = itemIcon.pixmap(itemSize);
-		 displayedSize = itemPixmap.size();
-		 qDebug()<<"GlxZoomSlider::retrieveActualAndDisplayedSize Display"<<displayedSize.width()<<displayedSize.height();
-		 }
-
-}
-int GlxZoomSlider::calculateZoomFactor(QSize& itemSize, QSize& displayedSize)
-{
-	int zoomFactor = 100 * (displayedSize.width())/(itemSize.width());
-	return zoomFactor;
-}
-
-void GlxZoomSlider::calculateAndInitializeFSZoomFactor()
-{
-	QSize itemSize,displaySize;
-	retrieveActualAndDisplayedSize(itemSize, displaySize);
-	int sliderPosition = calculateZoomFactor(itemSize,displaySize);
-	emit initialZoomFactor(sliderPosition);
-	mZoomSlider->setSliderPosition(sliderPosition);
-}
-
-void GlxZoomSlider::filterandEmitSliderValueChanges(int newValue)
-{
-	if (mSliderThumbPressed){
-		emit valueChanged(newValue);
-	}
-	//else {
-		qDebug()<<"GlxZoomSlider::filterandEmitSliderValueChanges stray signal"<<newValue;
-	//}
-}
-
-void GlxZoomSlider::sliderThumbPressed()
-{
-	qDebug()<<"GlxZoomSlider::sliderThumbPressed";
-	mSliderThumbPressed = true;
-}
-
-void GlxZoomSlider::sliderThumbReleased()
-{
-	qDebug()<<"GlxZoomSlider::sliderThumbReleased";
-	mSliderThumbPressed = false;
-}
--- a/ui/views/gridview/inc/glxgridview.h	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/views/gridview/inc/glxgridview.h	Thu Jul 22 16:33:32 2010 +0100
@@ -30,6 +30,8 @@
 class GlxModelWrapper;
 class HbPushButton;
 class HbIconItem;
+class HbCheckBox;
+class HbLabel;
 
 class GlxGridView : public GlxView
 {
@@ -55,13 +57,25 @@
     void scrollingStarted();
     void orientationchanged(Qt::Orientation orient);
     void visibleIndexChanged(const QModelIndex& current, const QModelIndex& previous);
+    void stateChanged(int state);
+    //show the marked item count
+    void showMarkedItemCount();
+    //show item count in the grid
+    void showItemCount();
+    //clear all the model connection
+    void clearCurrentModel();
+    //add the connection to the model
+    void initializeNewModel();
+    void showAlbumTitle(QString aTitle);
+    void populated();
 
 protected :
-    QVariant  itemChange (GraphicsItemChange change, const QVariant &value) ;
+   
 
 private slots:
     void indicateLongPress(const QModelIndex& index, QPointF coords);
     void uiButtonClicked(bool checked);
+    void cameraButtonClicked(bool checked);
 	
 private:
     void addViewConnection();
@@ -69,15 +83,25 @@
     void hideorshowitems(Qt::Orientation orient);
     void scrolltofocus();
     void loadGridView();
-  
+    void showHbItems();
+    int getSubState();
+    void showNoImageString();
+
 	HbMainWindow        *mWindow;          // no ownership
 	QAbstractItemModel  *mModel ;
 	HgWidget            *mWidget;          // HG Grid Widget
 	QItemSelectionModel *mSelectionModel;  // Selected items model
     GlxModelWrapper     *mModelWrapper;    // Temp Model Wrapper, so That Role Change not a problem
     HbPushButton        *mUiOnButton;
+    HbPushButton        *mCameraButton;    // Camera Button, when item count is zero
     bool                 mScrolling;
     HbIconItem          *mIconItem;
+    HbCheckBox          *mMarkCheckBox;    // Mark All checkbox 
+    HbLabel             *mCountItem;       // Item count of the grid
+    HbLabel             *mMainLabel;       
+    HbLabel             *mCountLabel;      // Marked item count
+    HbLabel             *mZeroItemLabel;   // zero itemcount
+    HbLabel             *mAlbumName;
 };
 
 #endif /* GLXGRIDVIEW_H_ */
--- a/ui/views/gridview/src/glxgridview.cpp	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/views/gridview/src/glxgridview.cpp	Thu Jul 22 16:33:32 2010 +0100
@@ -26,29 +26,41 @@
 #include <hbiconitem.h>
 #include <hbicon.h>
 #include <xqserviceutil.h>
+#include <hbcheckbox.h>
+#include <hblabel.h>
+#include <QString>
+#include <hbframeitem.h>
 
 //User Includes
 #include "glxviewids.h"
 #include "glxgridview.h"
 #include "glxmodelparm.h"
 #include "glxcommandhandlers.hrh"
-
+#include "glxicondefs.h"
+#include "glxlocalisationstrings.h"
 
 #include "OstTraceDefinitions.h"
 #ifdef OST_TRACE_COMPILER_IN_USE
 #include "glxgridviewTraces.h"
 #endif
 
-GlxGridView::GlxGridView(HbMainWindow *window) 
-    : GlxView ( GLX_GRIDVIEW_ID ), 
-      mWindow(window), 
-      mModel ( NULL), 
+GlxGridView::GlxGridView(HbMainWindow *window)
+    : GlxView ( GLX_GRIDVIEW_ID ),
+      mWindow(window),
+      mModel ( NULL),
       mWidget(NULL),
       mSelectionModel(NULL),
       mModelWrapper(NULL),
       mUiOnButton(NULL),
+      mCameraButton(NULL),
       mScrolling(FALSE),
-      mIconItem(NULL)
+      mIconItem(NULL),
+      mMarkCheckBox(NULL),
+      mCountItem(NULL),
+      mMainLabel(NULL),
+      mCountLabel(NULL),
+      mZeroItemLabel(NULL),
+      mAlbumName(NULL)
 {
     OstTraceFunctionEntry0( GLXGRIDVIEW_GLXGRIDVIEW_ENTRY );
     mModelWrapper = new GlxModelWrapper();
@@ -60,31 +72,47 @@
 void GlxGridView::activate()
 {
     OstTraceFunctionEntry0( GLXGRIDVIEW_ACTIVATE_ENTRY );
-    if(mUiOnButton == NULL) {
-        mUiOnButton = new HbPushButton("UI",this);
-        connect(mUiOnButton, SIGNAL(clicked(bool)), this, SLOT(uiButtonClicked(bool)));
-        mUiOnButton->setGeometry(QRectF(610,0,15,15));
-        mUiOnButton->setZValue(1);
-        mUiOnButton->hide();
+    loadGridView();
+	connect(mWindow, SIGNAL(orientationChanged(Qt::Orientation)), this, SLOT(orientationchanged(Qt::Orientation)),Qt::UniqueConnection);
+    if(mCountItem == NULL) {
+        mCountItem = new HbLabel(this);
+        mCountItem->setObjectName( "Count" );
+        HbFrameItem *frame = new HbFrameItem(this); //graphics for mCountItem
+        frame->frameDrawer().setFrameType(HbFrameDrawer::NinePieces);
+        frame->frameDrawer().setFrameGraphicsName("qtg_fr_multimedia_trans");
+        frame->graphicsItem()->setOpacity(1);
+        mCountItem->setBackgroundItem(frame->graphicsItem(),-1);
+        mCountItem->hide();
     }
-    loadGridView();
     OstTraceFunctionExit0( GLXGRIDVIEW_ACTIVATE_EXIT );
 }
 
 void GlxGridView::deActivate()
 {
     OstTraceFunctionEntry0( GLXGRIDVIEW_DEACTIVATE_ENTRY );
-    if (mUiOnButton && mUiOnButton->isVisible())
-        {
+    mScrolling = FALSE;
+    if (mUiOnButton){
         mUiOnButton->hide();
-        }    
-    if(mIconItem)
-        {
+    }
+    if(mIconItem) {
         mIconItem->hide();
         mIconItem->resetTransform();
         mIconItem->setOpacity(0);
         mIconItem->setZValue(mIconItem->zValue()-20);
-        }
+    }
+    if (mCountItem) {
+        mCountItem->hide();
+    }
+    if (mAlbumName) {
+        mAlbumName->hide();
+    }
+    if(mZeroItemLabel) {
+        mZeroItemLabel->hide();
+    }
+    if(mCameraButton) {
+        mCameraButton->hide();
+    }
+    disconnect(mWindow, SIGNAL(orientationChanged(Qt::Orientation)), this, SLOT(orientationchanged(Qt::Orientation)));
     OstTraceFunctionExit0( GLXGRIDVIEW_DEACTIVATE_EXIT );
 }
 
@@ -94,19 +122,44 @@
     setModel(model);
 }
 
-void GlxGridView::setModel(QAbstractItemModel *model) 
+void GlxGridView::clearCurrentModel()
+{
+    if ( mModel ) {
+        disconnect(mModel, SIGNAL(rowsInserted(QModelIndex,int,int)), this, SLOT(showItemCount()));
+        disconnect(mModel, SIGNAL(rowsRemoved(QModelIndex,int,int)), this, SLOT(showItemCount()));
+        disconnect(mModel, SIGNAL(destroyed()), this, SLOT( clearCurrentModel()));
+        disconnect(mModel, SIGNAL(albumTitleAvailable(QString)), this, SLOT(showAlbumTitle(QString)));
+        disconnect(mModel, SIGNAL(populated()), this, SLOT( populated()));
+        mModel = NULL ;
+    }
+}
+
+void GlxGridView::initializeNewModel()
+{
+    if ( mModel ) {
+        connect(mModel, SIGNAL(rowsInserted(QModelIndex,int,int)), this, SLOT(showItemCount()));
+        connect(mModel, SIGNAL(rowsRemoved(QModelIndex,int,int)), this, SLOT(showItemCount()));
+        connect(mModel, SIGNAL(destroyed()), this, SLOT( clearCurrentModel()));
+        connect(mModel, SIGNAL(albumTitleAvailable(QString)), this, SLOT(showAlbumTitle(QString)));
+        connect(mModel, SIGNAL(populated()), this, SLOT( populated()));
+    }
+}
+
+void GlxGridView::setModel(QAbstractItemModel *model)
 {
     OstTraceFunctionEntry0( GLXGRIDVIEW_SETMODEL_ENTRY );
     if(model)
         {
-        mModel =  model;
+        clearCurrentModel();
+        mModel = model;
+        initializeNewModel();
         QVariant variantimage = mModel->data(mModel->index(0,0),GlxDefaultImage);
         if (mWidget && variantimage.isValid() &&  variantimage.canConvert<QImage> () )
             {
             mWidget->setDefaultImage(variantimage.value<QImage>());
             }
         mModelWrapper->setModel(mModel);
-        mWidget->setModel(mModelWrapper);  
+        mWidget->setModel(mModelWrapper);
         if(!mSelectionModel)
             {
             mSelectionModel = new QItemSelectionModel(mModelWrapper, this);
@@ -114,6 +167,7 @@
             mWidget->setSelectionModel(mSelectionModel);
             }
         scrolltofocus();  // Need to do it here ?
+        showItemCount();
         }
     OstTraceFunctionExit0( GLXGRIDVIEW_SETMODEL_EXIT );
 }
@@ -130,10 +184,10 @@
         }
 }
 
-void GlxGridView::addToolBar( HbToolBar *toolBar ) 
+void GlxGridView::addToolBar( HbToolBar *toolBar )
 {
-    OstTraceFunctionEntry0( GLXGRIDVIEW_ADDTOOLBAR_ENTRY ); 
-    setToolBar(toolBar);  
+    OstTraceFunctionEntry0( GLXGRIDVIEW_ADDTOOLBAR_ENTRY );
+    setToolBar(toolBar);
     hideorshowitems(mWindow->orientation());
     OstTraceFunctionExit0( GLXGRIDVIEW_ADDTOOLBAR_EXIT );
 }
@@ -142,12 +196,246 @@
 {
     OstTrace0( TRACE_NORMAL, GLXGRIDVIEW_ENABLEMARKING, "GlxGridView::enableMarking" );
     mWidget->setSelectionMode(HgWidget::MultiSelection);
+    if (mMainLabel == NULL) {
+        mMainLabel = new HbLabel("Select Photos", this);
+        mMainLabel->setObjectName( "Select Photos");
+        HbFrameItem *frame1 = new HbFrameItem(this);    //graphics for mMainLabel
+        frame1->frameDrawer().setFrameType(HbFrameDrawer::NinePieces);
+        frame1->frameDrawer().setFrameGraphicsName("qtg_fr_multimedia_trans");
+        frame1->graphicsItem()->setOpacity(1);
+        mMainLabel->setBackgroundItem(frame1->graphicsItem(),-1);
+    }
+    if (mMarkCheckBox == NULL) {
+        mMarkCheckBox = new HbCheckBox(GLX_OPTION_MARK_ALL, this);
+        mMarkCheckBox->setObjectName( "CheckB MarkAll" );
+        HbFrameItem *frame2 = new HbFrameItem(this);    //graphics for mMarkCheckBox
+        frame2->frameDrawer().setFrameType(HbFrameDrawer::NinePieces);
+        frame2->frameDrawer().setFrameGraphicsName("qtg_fr_multimedia_trans");
+        frame2->graphicsItem()->setOpacity(1);
+        mMarkCheckBox->setBackgroundItem(frame2->graphicsItem(),-1);
+    }
+    if (mCountLabel == NULL) {
+        mCountLabel = new HbLabel(this);
+        mCountLabel->setObjectName( "MarkCount" );
+        HbFrameItem *frame3 = new HbFrameItem(this);    //graphics for mCountLabel
+        frame3->frameDrawer().setFrameType(HbFrameDrawer::NinePieces);
+        frame3->frameDrawer().setFrameGraphicsName("qtg_fr_multimedia_trans");
+        frame3->graphicsItem()->setOpacity(1);
+        mCountLabel->setBackgroundItem(frame3->graphicsItem(),-1);
+    }
+
+    hideorshowitems(mWindow->orientation());
+
+    connect( mWidget->selectionModel() , SIGNAL( selectionChanged(const QItemSelection &, const QItemSelection& ) ), this, SLOT( showMarkedItemCount() ) );
+    connect(mMarkCheckBox, SIGNAL( stateChanged(int) ), this, SLOT( stateChanged(int)));
+
 }
 
-void GlxGridView::disableMarking() 
+void GlxGridView::disableMarking()
 {
     OstTrace0( TRACE_NORMAL, GLXGRIDVIEW_DISABLEMARKING, "GlxGridView::disableMarking" );
     mWidget->setSelectionMode(HgWidget::NoSelection);
+    disconnect( mWidget->selectionModel() , SIGNAL( selectionChanged(const QItemSelection &, const QItemSelection& ) ), this, SLOT( showMarkedItemCount() ) );
+    disconnect(mMarkCheckBox, SIGNAL( stateChanged(int) ), this, SLOT( stateChanged(int)));
+    if (mMainLabel) {
+        mMainLabel->hide();
+    }
+    if (mMarkCheckBox) {
+        mMarkCheckBox->setCheckState(Qt::Unchecked);
+        mMarkCheckBox->hide();
+    }
+    if (mCountLabel) {
+        mCountLabel->hide();
+    }
+
+    hideorshowitems(mWindow->orientation());
+}
+
+void GlxGridView::stateChanged(int state)
+{
+    if(state)
+        handleUserAction(EGlxCmdMarkAll);
+    else
+        handleUserAction(EGlxCmdUnMarkAll);
+}
+
+void GlxGridView::showMarkedItemCount()
+{
+    int count = mModel->rowCount();
+    QModelIndexList indexList = mWidget->selectionModel()->selectedIndexes();
+    int markItemCount = indexList.count();
+
+    QString text= QString("%1 / %2").arg( markItemCount ).arg( count );
+    mCountLabel->setPlainText( text );
+}
+
+void GlxGridView::showItemCount()
+{
+    int count = 0;
+    if(mModel) {
+        count = mModel->rowCount();
+        QSize deviceSize = HbDeviceProfile::current().logicalSize();
+        QSize screenSize = ( mWindow->orientation() == Qt::Vertical ) ? QSize( deviceSize.width(), deviceSize.height() )
+                                                                       : QSize( deviceSize.height(), deviceSize.width() )  ;
+        if(count) {
+            if(mZeroItemLabel) {
+                mZeroItemLabel->hide();
+            }
+            if(mCameraButton) {
+                mCameraButton->hide();
+            }
+            if(isItemVisible(Hb::TitleBarItem)) {
+                QString text;
+                if(XQServiceUtil::isService())
+                    {
+                    showAlbumTitle(GLX_FETCHER_TITLE);
+                    }
+                else if (getSubState() == ALL_ITEM_S) {
+					if (mAlbumName) {
+                    	mAlbumName->hide();
+					}
+                    mCountItem->setGeometry(QRectF(0,0,screenSize.width(),deviceSize.height()/24));
+                    text = QString("%1 Items").arg( count );
+                    mCountItem->setPlainText( text );
+                    mCountItem->setAlignment(Qt::AlignLeft);
+                    mCountItem->show();
+                }
+                else if (getSubState() == ALBUM_ITEM_S) {
+                    mCountItem->hide();
+                    QVariant variant = mModel->data(mModel->index(0,0),GlxViewTitle);
+                    if (variant.toString() != NULL) {
+                        showAlbumTitle(variant.toString());
+                    }
+                }
+            }
+            else {
+                if (mCountItem) {
+                    mCountItem->hide();
+                }
+                if (mAlbumName) {
+                    mAlbumName->hide();
+                }
+            }
+
+        }
+        else {
+            bool populated = FALSE;
+            QVariant variant = mModel->data(mModel->index(0,0),GlxPopulated);
+            if (variant.isValid() &&  variant.canConvert<bool>() )
+                {
+                populated = variant.value<bool>();
+                }
+            if(populated) {
+                if (mCountItem) {
+                    mCountItem->hide();
+                }
+                if (mAlbumName) {
+                    mAlbumName->hide();
+                }
+
+                showNoImageString();
+
+                if (getSubState() == ALBUM_ITEM_S) {
+                    QVariant variant = mModel->data(mModel->index(0,0),GlxViewTitle);
+                    if (variant.toString() != NULL) {
+                        showAlbumTitle(variant.toString());
+                    }
+				}	
+            }
+        }
+    }
+}
+
+void GlxGridView::showAlbumTitle(QString aTitle)
+{
+    int count = mModel->rowCount();
+    QSize deviceSize = HbDeviceProfile::current().logicalSize();
+    QSize screenSize = ( mWindow->orientation() == Qt::Vertical ) ? QSize( deviceSize.width(), deviceSize.height() )
+                                                                   : QSize( deviceSize.height(), deviceSize.width() )  ;
+    if(mAlbumName == NULL) {
+        mAlbumName = new HbLabel(this);
+        mAlbumName->setObjectName( "Album Name" );
+        HbFrameItem *frame = new HbFrameItem(this); //graphics for mAlbumName
+        frame->frameDrawer().setFrameType(HbFrameDrawer::NinePieces);
+        frame->frameDrawer().setFrameGraphicsName("qtg_fr_multimedia_trans");
+        frame->graphicsItem()->setOpacity(1);
+        mAlbumName->setBackgroundItem(frame->graphicsItem(),-1);
+    }
+    
+	//If fetcher service set only title text
+	if((XQServiceUtil::isService() ) && isItemVisible(Hb::TitleBarItem)) {
+        mAlbumName->setGeometry(QRectF(0,0,screenSize.width(),deviceSize.height()/24));
+        QString text = QString(aTitle);
+        mAlbumName->setPlainText( text );
+        mAlbumName->show();
+    }
+	else{ //handle album tiltle and count display logic here
+	    if( count && isItemVisible(Hb::TitleBarItem)) {        
+	        mAlbumName->setGeometry(QRectF(0,0,screenSize.width()/2,deviceSize.height()/24));
+	        QString text = QString(aTitle);
+	        mAlbumName->setPlainText( text );
+	        mAlbumName->show();
+	        mCountItem->setGeometry(QRectF(screenSize.width()/2,0,screenSize.width()/2,deviceSize.height()/24));
+	        text = QString("(%1)").arg(count);
+	        mCountItem->setPlainText( text );
+	        mCountItem->setAlignment(Qt::AlignRight);
+	        mCountItem->show();
+	    }    
+	    else if((!count) && isItemVisible(Hb::TitleBarItem)) {
+	        mAlbumName->setGeometry(QRectF(0,0,screenSize.width(),deviceSize.height()/24));
+	        QString text = QString(aTitle);
+	        mAlbumName->setPlainText( text );
+	        mAlbumName->show();
+	    }
+	}
+}
+
+void GlxGridView::showNoImageString()
+{
+    qreal chromeHeight = 0.0;
+    QSize deviceSize = HbDeviceProfile::current().logicalSize();
+    QSize screenSize = ( mWindow->orientation() == Qt::Vertical ) ? QSize( deviceSize.width(), deviceSize.height() )
+                                                                   : QSize( deviceSize.height(), deviceSize.width() )  ;
+    qreal midHeight = screenSize.height()/2;
+    if (isItemVisible(Hb::TitleBarItem)) {
+        style()->parameter("hb-param-widget-chrome-height", chromeHeight);
+        midHeight -= chromeHeight;
+    }
+    if (mZeroItemLabel == NULL) {
+        QString displayText(GLX_GRID_NO_IMAGE); 
+        if(!XQServiceUtil::isService())
+            {
+            displayText.append(GLX_GRID_OPEN_CAMERA);
+            }
+        mZeroItemLabel = new HbLabel(displayText, this);
+        mZeroItemLabel->setObjectName( "No Image" );
+    }
+    mZeroItemLabel->setGeometry(QRectF(0, midHeight - deviceSize.height()/16, screenSize.width(), 3*deviceSize.height()/32));
+    mZeroItemLabel->setAlignment(Qt::AlignHCenter);
+    mZeroItemLabel->show();
+    if (mCameraButton == NULL) {
+        mCameraButton = new HbPushButton(this);
+        mCameraButton->setObjectName( "Camera Button" );
+        mCameraButton->setIcon(HbIcon(GLXICON_CAMERA));
+        mCameraButton->hide();
+        connect(mCameraButton, SIGNAL(clicked(bool)), this, SLOT(cameraButtonClicked(bool)));
+    }
+    if(!XQServiceUtil::isService())
+        {
+        mCameraButton->setGeometry(QRectF(screenSize.width()/2 - 3*deviceSize.height()/64, midHeight + deviceSize.height()/32, deviceSize.height()/32, deviceSize.height()/32));
+        mCameraButton->show();
+        }
+}
+
+void GlxGridView::populated()
+{
+      QVariant variant = mModelWrapper->data(mModelWrapper->index(0,0), GlxVisualWindowIndex );
+       int visualIndex = 0;
+       if ( variant.isValid() &&  variant.canConvert<int> () )  {
+           visualIndex = variant.value<int>();
+       }
+       mWidget->scrollTo(mModelWrapper->index(visualIndex,0));
+    showItemCount();
 }
 
 void GlxGridView::handleUserAction(qint32 commandId)
@@ -160,11 +448,11 @@
 
         case EGlxCmdUnMarkAll :
             mWidget->clearSelection();
-            break;        
+            break;
 
         default :
             break;
-    }    
+    }
 }
 
 QItemSelectionModel * GlxGridView::getSelectionModel()
@@ -184,12 +472,12 @@
 
     if ( transitionEffect == GRID_TO_FULLSCREEN )
         {
-        QVariant variant = mModel->data( mModel->index(0,0), GlxFocusIndexRole );    
-        if ( variant.isValid() &&  variant.canConvert<int> () ) 
+        QVariant variant = mModel->data( mModel->index(0,0), GlxFocusIndexRole );
+        if ( variant.isValid() &&  variant.canConvert<int> () )
             {
-            selIndex = variant.value<int>();  
-            } 
-        else 
+            selIndex = variant.value<int>();
+            }
+        else
             {
             return mWidget;
             }
@@ -213,7 +501,7 @@
             mIconItem->setPos(itemRect.topLeft());
             mIconItem->setZValue(mIconItem->zValue() + 20);
             mIconItem->show();
-            return mIconItem;   
+            return mIconItem;
             }
         else
             {
@@ -225,7 +513,7 @@
         return mWidget;
     }
     OstTraceFunctionExit0( GLXGRIDVIEW_GETANIMATIONITEM_EXIT );
-    return NULL;    
+    return NULL;
 }
 
 void GlxGridView::loadGridView()
@@ -237,12 +525,12 @@
         mWindow->viewport()->grabGesture(Qt::TapGesture);
         mWindow->viewport()->grabGesture(Qt::TapAndHoldGesture);
         mWidget = new HgGrid(orient);
+        mWidget->setObjectName( "Media Wall" );
         mWidget->setLongPressEnabled(true);
-        mWidget->setScrollBarPolicy(HgWidget::ScrollBarAutoHide);  
-        //mWidget->setItemSize(QSizeF(120,120));
-        setWidget( mWidget );  
+        mWidget->setScrollBarPolicy(HgWidget::ScrollBarAutoHide);
+        setWidget( mWidget );
         addViewConnection();
-        //hideorshowitems(orient);
+        hideorshowitems(orient);
     }
     OstTraceFunctionExit0( GLXGRIDVIEW_LOADGRIDVIEW_EXIT );
 }
@@ -253,30 +541,56 @@
 }
 void GlxGridView::hideorshowitems(Qt::Orientation orient)
 {
-    if(orient == Qt::Horizontal) 
-        {
-        if (mUiOnButton)
-            {
+    if ( mWidget && mWidget->selectionMode() == HgWidget::NoSelection ) {
+        if( orient == Qt::Horizontal ) {
+			setItemVisible(Hb::AllItems, FALSE) ;
+        	setViewFlags(viewFlags() | HbView::ViewTitleBarHidden | HbView::ViewStatusBarHidden);
+            showItemCount();
+            if(mUiOnButton == NULL) {
+                mUiOnButton = new HbPushButton(this);
+                connect(mUiOnButton, SIGNAL(clicked(bool)), this, SLOT(uiButtonClicked(bool)));
+                mUiOnButton->setGeometry(QRectF(590,0,40,40));
+                mUiOnButton->setZValue(1);
+                mUiOnButton->setIcon(HbIcon(GLXICON_WALL_UI_ON));
+                mUiOnButton->setObjectName( "UiOn Button" );
+            }
             mUiOnButton->show();
-            }
-        setItemVisible(Hb::AllItems, FALSE) ;
+        }
+        else {
+            showHbItems();
         }
-    else
-        {
-        if (mUiOnButton)
-            {
+    }
+    else if (mWidget && mWidget->selectionMode() == HgWidget::MultiSelection) {
+        setItemVisible(Hb::TitleBarItem, FALSE) ;
+        if (mUiOnButton) {
             mUiOnButton->hide();
-            }
-        setItemVisible(Hb::AllItems, TRUE) ;
+        }
+        if (mCountItem) {
+            mCountItem->hide();
+        }
+        if (mAlbumName) {
+            mAlbumName->hide();
         }
+        QSize deviceSize = HbDeviceProfile::current().logicalSize();
+        QSize screenSize = ( mWindow->orientation() == Qt::Vertical ) ? QSize( deviceSize.width(), deviceSize.height() )
+                                                                       : QSize( deviceSize.height(), deviceSize.width() )  ;
+        mMainLabel->setGeometry(QRectF(0,0,screenSize.width(),deviceSize.height()/24));
+        mMarkCheckBox->setGeometry(QRectF(0,deviceSize.height()/24,screenSize.width()/2,deviceSize.height()/72));
+        mCountLabel->setGeometry(QRectF(screenSize.width()/2,deviceSize.height()/24,screenSize.width()/2,deviceSize.height()/12 - 3));
+        mCountLabel->setAlignment(Qt::AlignRight | Qt::AlignVCenter);
+        mMainLabel->show();
+        mMarkCheckBox->show();
+        mCountLabel->show();
+        showMarkedItemCount();
+    }
 }
 
 void GlxGridView::scrolltofocus()
 {
     if(mModelWrapper && mWidget)
         {
-        QVariant variant = mModelWrapper->data( mModelWrapper->index(0,0), GlxFocusIndexRole );    
-        if ( variant.isValid() &&  variant.canConvert<int> () ) 
+        QVariant variant = mModelWrapper->data( mModelWrapper->index(0,0), GlxFocusIndexRole );
+        if ( variant.isValid() &&  variant.canConvert<int> () )
             {
             mWidget->scrollTo( mModelWrapper->index( variant.value<int>(),0) );
             mModel->setData(mModel->index(0,0),variant.value<int>(),GlxVisualWindowIndex);
@@ -284,21 +598,10 @@
         }
 }
 
-QVariant  GlxGridView::itemChange (GraphicsItemChange change, const QVariant &value) 
-    {
-    OstTrace0( TRACE_NORMAL, GLXGRIDVIEW_ITEMCHANGE, "GlxGridView::itemChange" );    
-    static bool isEmit = true;
-    if ( isEmit && change == QGraphicsItem::ItemVisibleHasChanged && value.toBool()  ) {
-    emit actionTriggered( EGlxCmdSetupItem );
-    isEmit = false;
-    }
-    return HbWidget::itemChange(change, value);
-    }
 
 void GlxGridView::addViewConnection()
 {
     OstTrace0( TRACE_NORMAL, GLXGRIDVIEW_ADDVIEWCONNECTION, "GlxGridView::addViewConnection" );
-    connect(mWindow, SIGNAL(orientationChanged(Qt::Orientation)), this, SLOT(orientationchanged(Qt::Orientation)));
     //connect(mWindow, SIGNAL(aboutToChangeOrientation()), mWidget, SLOT(aboutToChangeOrientation()));
     connect(mWindow, SIGNAL(orientationChanged(Qt::Orientation)), mWidget, SLOT(orientationChanged(Qt::Orientation)));
     connect(mWidget, SIGNAL(activated(const QModelIndex &)), SLOT( itemSelected(const QModelIndex &)));
@@ -312,7 +615,6 @@
     OstTrace0( TRACE_NORMAL, GLXGRIDVIEW_REMOVEVIEWCONNECTION, "GlxGridView::removeViewConnection" );
     if(mWidget)
         {
-        disconnect(mWindow, SIGNAL(orientationChanged(Qt::Orientation)), this, SLOT(orientationchanged(Qt::Orientation)));
         //disconnect(mWindow, SIGNAL(aboutToChangeOrientation()), mWidget, SLOT(aboutToChangeOrientation()));
         disconnect(mWindow, SIGNAL(orientationChanged(Qt::Orientation)), mWidget, SLOT(orientationChanged(Qt::Orientation)));
         disconnect(mWidget, SIGNAL(activated(const QModelIndex &)),this, SLOT( itemSelected(const QModelIndex &)));
@@ -326,36 +628,49 @@
 void GlxGridView::itemSelected(const QModelIndex &  index)
 {
     OstTrace1( TRACE_NORMAL, GLXGRIDVIEW_ITEMSELECTED, "GlxGridView::itemSelected;index=%d", index.row() );
-    if ( mWidget->selectionMode() == HgWidget::MultiSelection )
-        { 
+    if ( mWidget->selectionMode() == HgWidget::MultiSelection ) {
         return ;
-        }    
-   if(XQServiceUtil::isService()){
+    }
+    if(XQServiceUtil::isService()){
         emit gridItemSelected(index);
         return;
-    }    
-    OstTraceEventStart0( EVENT_DUP1_GLXGRIDVIEW_ITEMSELECTED_START, "Fullscreen Launch Time" );    
-    if ( mModel ) 
-        {
+    }
+    OstTraceEventStart0( EVENT_DUP1_GLXGRIDVIEW_ITEMSELECTED_START, "Fullscreen Launch Time" );
+    if ( mModel ) {
         mModel->setData( index, index.row(), GlxFocusIndexRole );
-        }
-    setItemVisible(Hb::AllItems, FALSE);
-    emit actionTriggered( EGlxCmdFullScreenOpen ); 
+    }
+    emit actionTriggered( EGlxCmdFullScreenOpen );
     OstTraceEventStop( EVENT_DUP1_GLXGRIDVIEW_ITEMSELECTED_STOP, "Fullscreen Launch Time", EVENT_DUP1_GLXGRIDVIEW_ITEMSELECTED_START );
 }
 
 void GlxGridView::scrollingStarted()
 {
-    if ((mWindow->orientation() == Qt::Horizontal))
+    if ((mWindow->orientation() == Qt::Horizontal) && mWidget->selectionMode() == HgWidget::NoSelection)
         {
         setItemVisible(Hb::AllItems, FALSE) ;
-        }    
+        setViewFlags(viewFlags() | HbView::ViewTitleBarHidden | HbView::ViewStatusBarHidden);
+        if (mUiOnButton)
+            {
+            mUiOnButton->hide();
+            }
+		if (mCountItem) {
+			mCountItem->hide();
+		}
+		if (mAlbumName) {
+            mAlbumName->hide();
+		}
+    }
+
     mScrolling = TRUE;
 }
 
 void GlxGridView::scrollingEnded()
 {
     mScrolling = FALSE;
+    if (mUiOnButton && (mWindow->orientation() == Qt::Horizontal))
+        {
+        mUiOnButton->show();
+        }
     QList<QModelIndex> visibleIndex = mWidget->getVisibleItemIndices();
     if (visibleIndex.count() <= 0)
         {
@@ -365,10 +680,11 @@
     if (  index.row() < 0 || index.row() >= mModel->rowCount() )
         {
         return;
-        }    
+        }
     if(mModel)
         {
         mModel->setData( index, index.row(), GlxVisualWindowIndex);
+        mModel->setData( index, index.row(), GlxFocusIndexRole );
         }
 }
 
@@ -387,34 +703,65 @@
         disconnect(mUiOnButton, SIGNAL(clicked(bool)), this, SLOT(uiButtonClicked(bool)));
         delete mUiOnButton;
     }
+    if(mCameraButton) {
+        disconnect(mCameraButton, SIGNAL(clicked()), this, SLOT(cameraButtonClicked()));
+        delete mCameraButton;
+    }
     delete mIconItem;
+    delete mCountItem;
+    delete mAlbumName;
+    delete mMainLabel;
+    delete mMarkCheckBox;
+    delete mCountLabel;
+    delete mZeroItemLabel;
     OstTraceFunctionExit0( DUP1_GLXGRIDVIEW_GLXGRIDVIEW_EXIT );
 }
 
 void GlxGridView::indicateLongPress(const QModelIndex& index, QPointF coords)
 {
     OstTrace0( TRACE_NORMAL, GLXGRIDVIEW_INDICATELONGPRESS, "GlxGridView::indicateLongPress" );
-     
+
      if ( mWidget->selectionMode() == HgWidget::MultiSelection )
-         { 
+         {
          return;
-         }     
-     if ( mModel ) 
+         }
+     if ( mModel )
          {
          mModel->setData( index, index.row(), GlxFocusIndexRole );
-         }     
+         }
      emit itemSpecificMenuTriggered(viewId(),coords);
 }
 
 void GlxGridView::uiButtonClicked(bool /*checked*/)
 {
-    if (isItemVisible(Hb::TitleBarItem))  // W16  All item is Not Working , So Temp Fix
+    showHbItems();
+}
+
+void GlxGridView::showHbItems()
+{
+        setItemVisible(Hb::AllItems, TRUE) ;
+    setViewFlags(viewFlags() &~ HbView::ViewTitleBarHidden &~ HbView::ViewStatusBarHidden);
+        showItemCount();
+		toolBar()->resetTransform(); // Temp, this is for HbToolbar issue to get fixed
+        toolBar()->show();
+    if (mUiOnButton)
         {
-        setItemVisible(Hb::AllItems, FALSE) ;
-        }
-    else
-        {
-        setItemVisible(Hb::AllItems, TRUE) ;
+        mUiOnButton->hide();
         }
 }
 
+void GlxGridView::cameraButtonClicked(bool /*checked*/)
+{
+    emit actionTriggered(EGlxCmdCameraOpen);
+}
+
+int GlxGridView::getSubState()
+{
+    int substate = NO_GRID_S;
+    QVariant variant = mModel->data( mModel->index(0,0), GlxSubStateRole );
+    if ( variant.isValid() &&  variant.canConvert<int> ()  ) {
+        substate = variant.value<int>();
+    }
+    return substate;
+}
+
--- a/ui/views/listview/inc/glxlistview.h	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/views/listview/inc/glxlistview.h	Thu Jul 22 16:33:32 2010 +0100
@@ -43,6 +43,7 @@
 
 public slots:
     void itemSelected(const QModelIndex &  index);
+    void populated();
     
 private slots:
 	void indicateLongPress( HbAbstractViewItem *item, QPointF coords );
--- a/ui/views/listview/src/glxlistview.cpp	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/views/listview/src/glxlistview.cpp	Thu Jul 22 16:33:32 2010 +0100
@@ -43,7 +43,6 @@
 {
     qDebug("GlxListView::GlxListView()");
     mDocLoader = new HbDocumentLoader();
-    setContentFullScreen( true );
 }
 
 void GlxListView::activate()
@@ -64,8 +63,12 @@
 void GlxListView::setModel(QAbstractItemModel *model) 
 {
     qDebug("GlxListView::setModel()");
+    if ( mModel ) {
+        disconnect(mModel, SIGNAL(listPopulated()), this, SLOT( populated()));
+    }
     mModel =  model ;
     mListView->setModel(mModel);
+    connect(mModel, SIGNAL(listPopulated()), this, SLOT( populated()));
 }
 
 void GlxListView::addToolBar( HbToolBar *toolBar ) 
@@ -137,13 +140,13 @@
             mView = static_cast<HbView*>(mDocLoader->findWidget(QString(GLX_LISTVIEW_VIEW)));
             mListView = static_cast<HbListView*>(mDocLoader->findWidget(QString(GLX_LISTVIEW_LIST)));
 
-            if(mListView) { 
+            if( mListView ) { 
                 //sets the widget
                 setWidget((QGraphicsWidget*) mView);
+                HbListViewItem *prototype = mListView->listItemPrototype();
+                prototype->setStretchingStyle(HbListViewItem::StretchLandscape);
             }
         }  
-        HbListViewItem *prototype = mListView->listItemPrototype();
-        prototype->setStretchingStyle(HbListViewItem::StretchLandscape);
     }
 }
 
@@ -181,6 +184,17 @@
     }
 }
 
+void GlxListView::populated()
+{
+    QVariant variant = mModel->data(mModel->index(0,0), GlxVisualWindowIndex );
+    int visualIndex = 0;
+    if ( variant.isValid() &&  variant.canConvert<int> () ) 
+    {
+        visualIndex = variant.value<int>();
+    }
+	//Scroll To the Visible Index as mentioned in the AM.
+    mListView->scrollTo(mModel->index(visualIndex, 0),  HbAbstractItemView::PositionAtTop );
+}
 void GlxListView::itemSelected(const QModelIndex &  index)
 {
     qDebug("GlxListView::itemSelected() index = %d", index.row() );
--- a/ui/views/slideshowsettingsview/inc/glxslideshowsettingsview.h	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/views/slideshowsettingsview/inc/glxslideshowsettingsview.h	Thu Jul 22 16:33:32 2010 +0100
@@ -30,7 +30,7 @@
 class HbMainWindow;
 class HbComboBox;
 class QAbstractItemModel;
-class GlxSlideShowSetting;
+class GlxSettingInterface;
 
 class GlxSlideShowSettingsView : public GlxView
 {
@@ -47,16 +47,16 @@
     void orientationChanged(Qt::Orientation); 
 	
 private:
-void setLayout();
+    void setLayout();
   
 private:
-	HbComboBox          *mEffect;  //Drop down box to display transition effect
+	HbComboBox          *mEffect;    //Drop down box to display transition effect
 	HbComboBox          *mDelay; 	 //Drop down box to display transition delay
-	HbMainWindow        *mWindow;  //no ownership
+	HbMainWindow        *mWindow;    //no ownership
 	HbLabel *mContextlabel;				 //Display SlideShow label
 	HbLabel *mEffectlabel;				 //Display "Transition Effect: "
-	HbLabel *mDelaylabel;					 //Display "Transition delay: "
-	GlxSlideShowSetting *mSettings;
+	HbLabel *mDelaylabel;				 //Display "Transition delay: "
+	GlxSettingInterface *mSettings;      //no ownership
 };
 
 #endif /* GLXGRIDVIEW_H_ */
--- a/ui/views/slideshowsettingsview/src/glxslideshowsettingsview.cpp	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/views/slideshowsettingsview/src/glxslideshowsettingsview.cpp	Thu Jul 22 16:33:32 2010 +0100
@@ -27,9 +27,8 @@
 #include "glxuistd.h"
 #include "glxviewids.h"
 #include "glxslideshowsettingsview.h"
-#include "glxeffectengine.h"
-
-
+#include "glxsettinginterface.h"
+#include "glxlocalisationstrings.h"
 
 
 GlxSlideShowSettingsView::GlxSlideShowSettingsView(HbMainWindow *window) 
@@ -42,22 +41,22 @@
       mDelaylabel (NULL),
       mSettings( NULL )
 {
-    mSettings = new GlxSlideShowSetting();
+    mSettings = GlxSettingInterface::instance() ;
   	setContentFullScreen( true );
 }
 
 GlxSlideShowSettingsView::~GlxSlideShowSettingsView()
 {
-    	delete mContextlabel;
-    	delete mEffectlabel;
-    	delete mDelaylabel;
-    	delete mEffect;
-    	delete mDelay;
-        delete mSettings;
+    delete mContextlabel;
+    delete mEffectlabel;
+    delete mDelaylabel;
+    delete mEffect;
+    delete mDelay;
 }
 
 void GlxSlideShowSettingsView::setModel(QAbstractItemModel *model)
 {
+    Q_UNUSED( model )
     return;
 }
 
@@ -71,35 +70,38 @@
     connect(mWindow, SIGNAL(orientationChanged(Qt::Orientation)), this, SLOT(orientationChanged(Qt::Orientation)));
     
     if ( mContextlabel == NULL ) {
-        mContextlabel = new HbLabel("Slideshow", this);
+        mContextlabel = new HbLabel( GLX_MENU_SLIDESHOW, this );
+        mContextlabel->setObjectName( "SlideShow" );
     }
     
     if ( mEffectlabel == NULL ) {
-        mEffectlabel = new HbLabel("Transition effect:", this);
+        mEffectlabel = new HbLabel( GLX_LABEL_TRANSITION_EFFECT, this );
+        mEffectlabel->setObjectName( "Effect" );
     }
     
     if ( mEffect == NULL ) {
         mEffect = new HbComboBox(this);
         QStringList effectList = mSettings->slideShowEffectList();
-        mEffect->addItems( effectList );
-        
+        mEffect->addItems( effectList ); 
+        mEffect->setObjectName( "Effect List" );
     }
     
     if ( mDelaylabel == NULL ) {
-        mDelaylabel = new HbLabel("Transition delay:", this);
+        mDelaylabel = new HbLabel( GLX_LABEL_TRANSITION_DELAY, this );
+        mDelaylabel->setObjectName( "Delay" );
     }
     
     if ( mDelay == NULL ) {
         mDelay = new HbComboBox(this);
+        mDelay->setObjectName( "Delay List" );
         QStringList delayList;
-        delayList<<"slow"<<"medium"<<"fast";
+        delayList <<  GLX_VAL_SLOW << GLX_VAL_MEDIUM << GLX_VAL_FAST ;
         mDelay->addItems( delayList );
     }
    
-   // Read the values from the cenrep
-    
-    mEffect->setCurrentIndex( mSettings->slideShowEffectIndex());
-    mDelay->setCurrentIndex( mSettings->slideShowDelayIndex());
+   // Read the values from the cenrep    
+    mEffect->setCurrentIndex( mSettings->slideShowEffectIndex() );
+    mDelay->setCurrentIndex( mSettings->slideShowDelayIndex() );
     setLayout();
 }
 
@@ -117,10 +119,8 @@
 void GlxSlideShowSettingsView::deActivate()
 {
 	 //Store the current effect and delay before going back to the previous view
-	mSettings->setslideShowEffectIndex(mEffect->currentIndex());
-	mSettings->setSlideShowDelayIndex(mDelay->currentIndex()); 
+	mSettings->setslideShowEffectIndex( mEffect->currentIndex() );
+	mSettings->setSlideShowDelayIndex( mDelay->currentIndex() ); 
     disconnect(mWindow, SIGNAL(orientationChanged(Qt::Orientation)), this, SLOT(orientationChanged(Qt::Orientation)));
 }
 
-
-
--- a/ui/views/slideshowview/inc/glxslideshowview.h	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/views/slideshowview/inc/glxslideshowview.h	Thu Jul 22 16:33:32 2010 +0100
@@ -52,7 +52,7 @@
     void modelDestroyed();
     
 protected :
-    bool event(QEvent *event);
+    bool eventFilter(QObject *obj, QEvent *ev);
     
 private:
     void loadObjects();
--- a/ui/views/slideshowview/inc/glxslideshowwidget.h	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/views/slideshowview/inc/glxslideshowwidget.h	Thu Jul 22 16:33:32 2010 +0100
@@ -36,17 +36,24 @@
 class HbAbstractDataModel;
 
 //User Forward Declarations
-class GlxSlideShowEffectEngine;
-
+class GlxEffectEngine;
+class GlxSettingInterface;
 
 #define NBR_ITEM 3
 typedef enum
 {
     UI_ON_EVENT, //send the signal when user tap on screen ( on the UI )
     UI_OFF_EVENT, //send the signal when user press continous button ( off the UI)
-    EMPTY_DATA_EVENT //send the signal when model have no data
+    EMPTY_DATA_EVENT, //send the signal when model have no data
+    EFFECT_STARTED  // sends the signal when effect is started.
 } GlxSlideShowEvent;
 
+typedef enum 
+{
+    MOVE_FORWARD,
+    MOVE_BACKWARD,
+} GlxSlideShowMoveDir;
+
 class GlxSlideShowWidget : public HbWidget
 {
 Q_OBJECT
@@ -101,14 +108,14 @@
     //add the connection to the model
     void initializeNewModel();
     void resetSlideShow();
-    void setIconItems(int moveDir);
-    void setItemPos(int moveDir);
-    void moveImage(int nextIndex, int posX, const QString & move, char * callBack);
+    void setIconItems( int moveDir );
+    void moveImage( int nextIndex, int posX, const QString & move, char * callBack );
     void addConnections();
     void removeConnections();
 
 private:
-    GlxSlideShowEffectEngine *mEffectEngine;
+    GlxEffectEngine          *mEffectEngine;
+    GlxSettingInterface      *mSettings;               //no ownership
     HbIconItem               *mIconItems[NBR_ITEM]; 
     HbPushButton             *mContinueButton;
     int                      mItemIndex;
--- a/ui/views/slideshowview/src/glxslideshowview.cpp	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/views/slideshowview/src/glxslideshowview.cpp	Thu Jul 22 16:33:32 2010 +0100
@@ -19,6 +19,7 @@
 //Includes
 #include <QEvent>
 #include <QDebug>
+#include <QCoreApplication>
 #include <hbmainwindow.h>
 #include <hbdocumentloader.h>
 
@@ -63,14 +64,17 @@
 void GlxSlideShowView::activate()
 {
     TRACER("GlxSlideShowView::activate()");
-    mWindow->setOrientation(Qt::Horizontal, true);  // Actually it is animation false, Hack for Bug in Media wall -todo- need to Address this ASAP
+    mWindow->setOrientation(Qt::Horizontal, false);
 
     //finds the widgets from the docml
     loadObjects();
-    setItemVisible(Hb::AllItems, false) ;
+    setTitleBarVisible(FALSE);
+    setStatusBarVisible(FALSE);
     connect( mSlideShowWidget, SIGNAL( slideShowEvent( GlxSlideShowEvent ) ), this, SLOT( slideShowEventHandler( GlxSlideShowEvent ) ) ); 
     connect( mSlideShowWidget, SIGNAL( indexchanged() ), this, SLOT( indexchanged() ) );
     
+    QCoreApplication::instance()->installEventFilter(this);
+    
     if (!mTvOutWrapper) {
         mTvOutWrapper = new GlxTvOutWrapper();
     }
@@ -79,14 +83,20 @@
 void GlxSlideShowView::deActivate()
 {
     TRACER("GlxSlideShowView::deActivate()");
-    mWindow->unsetOrientation(true);         // Actually it is animation false, Hack for Bug in Media wall -todo- need to Address this ASAP
+    mWindow->unsetOrientation(false);
     
-    setItemVisible( Hb::AllItems , TRUE );
+    setStatusBarVisible(TRUE);
+    setTitleBarVisible(TRUE);
+    
+                
     disconnect( mSlideShowWidget, SIGNAL( slideShowEvent( GlxSlideShowEvent ) ), this, SLOT( slideShowEventHandler( GlxSlideShowEvent ) ) );
     disconnect( mSlideShowWidget, SIGNAL( indexchanged() ), this, SLOT( indexchanged() ) );
+        
     //Delete the Items in the slide show widget
     mSlideShowWidget->cleanUp();
     
+    QCoreApplication::instance()->removeEventFilter(this);
+
     if (mTvOutWrapper){
         delete mTvOutWrapper;
         mTvOutWrapper = NULL;
@@ -107,7 +117,7 @@
     mSlideShowWidget->setModel(mModel);
     
     if (mTvOutWrapper){
-        mTvOutWrapper->setModel(mModel);
+        mTvOutWrapper->setModel(mModel,true);
         mTvOutWrapper->setImagetoHDMI();
     }
 }
@@ -141,16 +151,24 @@
     GLX_LOG_INFO1("GlxSlideShowView::slideShowEventHandler() event %d", e);
     switch ( e ) {
         case UI_ON_EVENT :
-            setItemVisible(Hb::AllItems, TRUE) ;
+            setTitleBarVisible(TRUE);
+            setStatusBarVisible(TRUE);
             break;
 
         case UI_OFF_EVENT :
-            setItemVisible(Hb::AllItems, false) ;
+            setTitleBarVisible(FALSE);
+            setStatusBarVisible(FALSE);
             break;
 
         case EMPTY_DATA_EVENT :
             emit actionTriggered( EGlxCmdEmptyData );
             break;
+            
+        case EFFECT_STARTED:
+            if (mTvOutWrapper){
+            mTvOutWrapper->fadeSurface(false);
+            }
+            break;
 
         default :
             break;        
@@ -173,24 +191,25 @@
     }
 }
 
-bool GlxSlideShowView::event(QEvent *event)
+bool GlxSlideShowView::eventFilter(QObject *obj, QEvent *event)
 {
     TRACER("GlxSlideShowView::event()");
     GLX_LOG_INFO1("GlxSlideShowView::event() %d event type", event->type());
-    if ( event->type() ==  QEvent::WindowActivate && mSlideShowWidget) {
+    if ( event->type() ==  QEvent::ApplicationActivate && mSlideShowWidget) {
         if (mTvOutWrapper){
+        GLX_LOG_INFO("GlxSlideShowView::event() shift to native - CGlxHdmi");
         mTvOutWrapper->setToNativeMode();    
         }
         mSlideShowWidget->startSlideShow();
     }
-
-    if ( event->type() ==  QEvent::WindowDeactivate && mSlideShowWidget) {
+    if ( event->type() ==  QEvent::ApplicationDeactivate && mSlideShowWidget) {
         if (mTvOutWrapper){
+        GLX_LOG_INFO("GlxSlideShowView::event() shift to Clone - CGlxHdmi");
         mTvOutWrapper->setToCloningMode();    
         }
        mSlideShowWidget->stopSlideShow();
     }
-    return HbView::event(event);
+    return HbView::eventFilter(obj,event);
 }
 
 void GlxSlideShowView::loadObjects()
--- a/ui/views/slideshowview/src/glxslideshowwidget.cpp	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/views/slideshowview/src/glxslideshowwidget.cpp	Thu Jul 22 16:33:32 2010 +0100
@@ -29,20 +29,21 @@
 #include <QGesture>
 #include <hbpangesture.h>
 
-
 //User Includes
 #include "glxicondefs.h" //Contains the icon names/Ids
 #include "glxmodelparm.h"
 #include "glxeffectengine.h"
 #include "glxdocloaderdefs.h"
 #include "glxslideshowwidget.h"
-#include <glxlog.h>
-#include <glxtracer.h>
+#include "glxsettinginterface.h"
+#include "glxlog.h"
+#include "glxtracer.h"
 
 
 GlxSlideShowWidget::GlxSlideShowWidget( QGraphicsItem *parent ) 
     : HbWidget(parent), 
       mEffectEngine(NULL), 
+      mSettings( NULL ),
       mContinueButton(NULL), 
       mItemIndex(1), 
       mSelIndex(0), 
@@ -50,17 +51,18 @@
       mModel(NULL)
 {
     TRACER("GlxSlideShowWidget::GlxSlideShowWidget()");
+    mSettings = GlxSettingInterface::instance() ; //no owner ship
     grabGesture( Qt::PanGesture );
     grabGesture( Qt::TapGesture );
 }
 
 void GlxSlideShowWidget::setSlideShowWidget(HbDocumentLoader *DocLoader)
-    {
+{
     //To:Do error handling
     TRACER("GlxSlideShowWidget::setSlideShowWidget()");   
     
     //create the effect engine
-    mEffectEngine = new GlxSlideShowEffectEngine();
+    mEffectEngine = new GlxEffectEngine();
 
     // Now load the view and the contents.
     // and then set the play icon to the button
@@ -70,8 +72,10 @@
     mIsPause = false;
 
     for ( int i = 0; i < NBR_ITEM ; i++) {
-    mIconItems[i] = new HbIconItem(this);
-    mIconItems[i]->setBrush(QBrush(Qt::black));
+        mIconItems[i] = new HbIconItem(this);
+        mIconItems[i]->setBrush(QBrush(Qt::black));
+        mIconItems[i]->setAlignment( Qt::AlignCenter );
+        mIconItems[i]->setObjectName( QString( "SlideShowIcon%1" ).arg( i ) );
     }
 
     mSlideTimer = new QTimer();
@@ -81,75 +85,68 @@
     addConnections();
 
     //Create the settings for the effects 
-    mEffectEngine->readSetting();
-    mEffectEngine->registerEffect(QString("HbIconItem"));
+    mEffectEngine->registerEffect( QString("HbIconItem") );
 
     //provide the xml info for the effect to take place
     HbEffect::add( QString("HbIconItem"), QString(":/data/transition.fxml"), QString( "Move" ));
     HbEffect::add( QString("HbIconItem"), QString(":/data/transitionleft.fxml"), QString( "LeftMove" ));
     HbEffect::add( QString("HbIconItem"), QString(":/data/transitionright.fxml"), QString( "RightMove" ));
-    }
+}
 
 GlxSlideShowWidget::~GlxSlideShowWidget()
-    {
+{
     TRACER("GlxSlideShowWidget::~GlxSlideShowWidget()");
 
     //Delete the resources allocated
     cleanUp();
 
-    if(mContinueButton)
-        {
+    if(mContinueButton) {
         delete mContinueButton;
         mContinueButton = NULL;
-        }
     }
-
+}
 
 void GlxSlideShowWidget::cleanUp()
-    {
+{
     TRACER("GlxSlideShowWidget::cleanUp()");
     removeConnections();
 
-    if(mEffectEngine)
-        {
+    if(mEffectEngine) {
         mEffectEngine->deRegisterEffect( QString("HbIconItem") );    
         delete mEffectEngine;
         mEffectEngine = NULL;
-        }
-     
+    }     
     
-    for ( int i = 0; i < NBR_ITEM ; i++) 
-        {
+    for ( int i = 0; i < NBR_ITEM ; i++) {
         delete mIconItems[i] ;
         mIconItems[i] = NULL;
-        }
+    }
 
-    if(mSlideTimer)
-        {
+    if(mSlideTimer) {
         delete mSlideTimer;
         mSlideTimer = NULL;
-        }
+    }
 
     clearCurrentModel();
     HbEffect::remove( QString("HbIconItem"), QString(":/data/transition.fxml"), QString( "Move" ));
     HbEffect::remove( QString("HbIconItem"), QString(":/data/transitionleft.fxml"), QString( "LeftMove" ));
     HbEffect::remove( QString("HbIconItem"), QString(":/data/transitionright.fxml"), QString( "RightMove" ));
-    }
+}
 
 void GlxSlideShowWidget::setModel (QAbstractItemModel *model)
-    {
+{
     TRACER("GlxSlideShowWidget::setModel()");
     if ( model == mModel ) {
-    return ;
+        return ;
     }
     clearCurrentModel();   
     mModel = model;
     initializeNewModel();
     resetSlideShow();
-    }
+}
 
 void GlxSlideShowWidget::setItemGeometry(QRect screenRect)
-    {
+{
     TRACER("GlxSlideShowWidget::setItemGeometry()");
     int index = mItemIndex;
     mScreenRect = screenRect;   
@@ -158,10 +155,10 @@
     mIconItems[index]->setGeometry( QRect( mScreenRect.width(), mScreenRect.top(), mScreenRect.width(), mScreenRect.height() ) );
     index = mItemIndex ? mItemIndex - 1 : NBR_ITEM - 1;    
     mIconItems[index]->setGeometry( QRect( -mScreenRect.width(), mScreenRect.top(), mScreenRect.width(), mScreenRect.height() ) );     
-    }
+}
 
 void GlxSlideShowWidget::triggeredEffect()
-    { 
+{ 
     TRACER("GlxSlideShowWidget::triggeredEffect()"); 
     int index = mItemIndex;
     mSlideTimer->stop();
@@ -169,54 +166,44 @@
     User::ResetInactivityTime();
 
     mItemList.append( mIconItems[index] );
-    if ( mEffectEngine->slideShowMoveDir() == MOVE_FORWARD ) {
-    index = ( mItemIndex + 1) % NBR_ITEM;
-    }
-    else {
-    index = mItemIndex ? mItemIndex - 1 : NBR_ITEM - 1;
-    }
+    index = ( mItemIndex + 1 ) % NBR_ITEM;
     mItemList.append( mIconItems[index] );
 
     GLX_LOG_INFO3("GlxSlideShowWidget::triggeredEffect() image selected index %d array index %d index %d", mSelIndex, mItemIndex, index);  
     mEffectEngine->runEffect( mItemList, QString("HbIconItem") );
-    }
-
+    emit slideShowEvent( EFFECT_STARTED );
+}
 
 void GlxSlideShowWidget::effectFinshed()
-    {
+{
     TRACER("GlxSlideShowWidget::effectFinshed()");
     //To:Do boundery condition or last item check implemented after behaviour of slide show clear
     int rowCount = mModel->rowCount();
     GLX_LOG_INFO2("GlxSlideShowWidget::effectFinshed() before image selected index %d array index %d", mSelIndex, mItemIndex); 
 
-    if ( mEffectEngine->slideShowMoveDir() == MOVE_FORWARD ) {
     mSelIndex = ( ++mSelIndex ) % rowCount;
     mItemIndex = ( ++mItemIndex ) % NBR_ITEM;
-    }
-    else {
-    mSelIndex = mSelIndex ? --mSelIndex : rowCount - 1;
-    mItemIndex = mItemIndex ? mItemIndex - 1 : NBR_ITEM - 1;
-    }
-
     mModel->setData( mModel->index(mSelIndex, 0), mSelIndex, GlxFocusIndexRole );
-    setIconItems(mEffectEngine->slideShowMoveDir());
-    //setItemPos(mEffectEngine->slideShowMoveDir());
+    mModel->setData( mModel->index(mSelIndex, 0), mSelIndex, GlxVisualWindowIndex );
+    setIconItems( MOVE_FORWARD );
+  
     GLX_LOG_INFO2("GlxSlideShowWidget::effectFinshed() after image selected index %d array index %d ", mSelIndex, mItemIndex);
+    
     if ( mIsPause == false ) {
-    mSlideTimer->start( mEffectEngine->slideDelayTime() );  
+        mSlideTimer->start( mSettings->slideShowDelayTime() );  
     } 
     mItemList.clear();
     emit indexchanged(); // on each item change
-    }
+}
 
 void GlxSlideShowWidget::cancelEffect()
-    {
+{
     TRACER("GlxSlideShowWidget::cancelEffect()");
     mEffectEngine->cancelEffect( mItemList );
-    }
+}
 
 void GlxSlideShowWidget::pauseSlideShow()
-    {
+{
     TRACER("GlxSlideShowWidget::pauseSlideShow()");
     GLX_LOG_INFO1("GlxSlideShowWidget::pauseSlideShow() %d", this->zValue());
     mIsPause = true;
@@ -225,52 +212,52 @@
     mContinueButton->setZValue( this->zValue() + 2);
     mContinueButton->show() ;
     emit slideShowEvent(UI_ON_EVENT);
-    }
+}
 
 void GlxSlideShowWidget::continueSlideShow(bool checked)
-    {
+{
     Q_UNUSED( checked )
     TRACER("GlxSlideShowWidget::continueSlideShow()");
     mIsPause = false;
     if ( mModel &&  mModel->rowCount() > 1 ) {
-    mSlideTimer->start( mEffectEngine->slideDelayTime() ); 
+        mSlideTimer->start( mSettings->slideShowDelayTime() ); 
     }
     mContinueButton->hide(); 
     emit slideShowEvent(UI_OFF_EVENT);
-    }
+}
 
 void GlxSlideShowWidget::dataChanged(QModelIndex startIndex, QModelIndex endIndex)
-    {
+{
     Q_UNUSED( endIndex )
     TRACER("GlxSlideShowWidget::dataChanged()");
     GLX_LOG_INFO2("GlxSlideShowWidget::dataChanged startIndex = %d mSelIndex = %d ", startIndex.row(), mSelIndex  );
     int deltaIndex = startIndex.row() - mSelIndex;
 
     if ( deltaIndex <= 1 && deltaIndex >= -1 ) {
-    int index = ( mItemIndex + deltaIndex + NBR_ITEM ) % NBR_ITEM; //calculated the array index in which data sould be updated
-    GLX_LOG_INFO2("GlxSlideShowWidget::dataChanged index = %d mSelItemIndex = %d ", index, mItemIndex );
-
-    QVariant variant = mModel->data( startIndex, GlxFsImageRole );
-    if ( variant.isValid() &&  variant.canConvert<HbIcon> () ) {
-    mIconItems[index]->setIcon ( variant.value<HbIcon>() ) ;
-    }
-    else {
-    mIconItems[index]->setIcon ( HbIcon() ) ; 
-    }
+        int index = ( mItemIndex + deltaIndex + NBR_ITEM ) % NBR_ITEM; //calculated the array index in which data sould be updated
+        GLX_LOG_INFO2("GlxSlideShowWidget::dataChanged index = %d mSelItemIndex = %d ", index, mItemIndex );
+    
+        QVariant variant = mModel->data( startIndex, GlxFsImageRole );
+        if ( variant.isValid() &&  variant.canConvert<HbIcon> () ) {
+            mIconItems[index]->setIcon ( variant.value<HbIcon>() ) ;
+        }
+        else {
+            mIconItems[index]->setIcon ( HbIcon() ) ; 
+        }
     }	
-    }
+}
 
 void GlxSlideShowWidget::rowsInserted(const QModelIndex &parent, int start, int end)
-    {
+{
     TRACER("GlxSlideShowWidget::rowsInserted()");
     Q_UNUSED(parent);
     Q_UNUSED(start);
     Q_UNUSED(end);
     resetSlideShow();  
-    }
+}
 
 void GlxSlideShowWidget::rowsRemoved(const QModelIndex &parent, int start, int end)
-    {
+{
     TRACER("GlxSlideShowWidget::rowsRemoved()");
     Q_UNUSED(parent);
     Q_UNUSED(start);
@@ -279,19 +266,19 @@
     GLX_LOG_INFO1( "GlxSlideShowWidget::rowsRemoved row count = %d ", mModel->rowCount()  );
 
     if ( mModel->rowCount() <= 0 ) {
-    clearCurrentModel();
-    emit slideShowEvent( EMPTY_DATA_EVENT );
+        clearCurrentModel();
+        emit slideShowEvent( EMPTY_DATA_EVENT );
     }
     else {
-    resetSlideShow();
+        resetSlideShow();
     }
-    }
+}
 
 void GlxSlideShowWidget::modelDestroyed()
-    {
+{
     TRACER("GlxSlideShowWidget::modelDestroyed()");
     clearCurrentModel();
-    }
+}
 
 
 void GlxSlideShowWidget::orientationChanged(QRect screenRect)
@@ -322,7 +309,7 @@
 }
 
 void GlxSlideShowWidget::leftMoveEffectFinished( const HbEffect::EffectStatus &status )
-    {
+{
     Q_UNUSED(status)
     TRACER("GlxSlideShowWidget::leftMoveEffectFinished()");
     GLX_LOG_INFO1("GlxSlideShowWidget::leftMoveEffectFinished() %d status", status.reason);
@@ -331,14 +318,15 @@
     mSelIndex = ( ++mSelIndex ) % rowCount;
     mItemIndex = ( ++mItemIndex ) % NBR_ITEM;
     mModel->setData( mModel->index(mSelIndex, 0), mSelIndex, GlxFocusIndexRole );
+    mModel->setData( mModel->index(mSelIndex, 0), mSelIndex, GlxVisualWindowIndex );
 
-    setIconItems(MOVE_FORWARD);
+    setIconItems( MOVE_FORWARD );
     startSlideShow();
     emit indexchanged(); // on left swipe
-    }
+}
 
 void GlxSlideShowWidget::rightMoveEffectFinished( const HbEffect::EffectStatus &status )
-    {
+{
     Q_UNUSED(status)
     TRACER ( "GlxSlideShowWidget::rightMoveEffectFinished( ) ");
     GLX_LOG_INFO1("GlxSlideShowWidget::rightMoveEffectFinished() %d status", status.reason);
@@ -347,12 +335,12 @@
     mSelIndex = mSelIndex ? --mSelIndex : rowCount - 1;
     mItemIndex = mItemIndex ? mItemIndex - 1 : NBR_ITEM - 1;
     mModel->setData( mModel->index(mSelIndex, 0), mSelIndex, GlxFocusIndexRole );
+    mModel->setData( mModel->index(mSelIndex, 0), mSelIndex, GlxVisualWindowIndex );
 
-    setIconItems(MOVE_BACKWARD);
+    setIconItems( MOVE_BACKWARD );
     startSlideShow();
     emit indexchanged(); // on right swipe
-    } 
-
+} 
  
 void GlxSlideShowWidget::gestureEvent(QGestureEvent *event)
 {  
@@ -383,160 +371,146 @@
 }    
 
 void GlxSlideShowWidget::startSlideShow ( )
-    {
+{
     TRACER ( "GlxSlideShowWidget::startSlideShow( ) ");
     GLX_LOG_INFO1 ( "GlxSlideShowWidget::startSlideShow( ) is pause %d", mIsPause);    
     if ( mIsPause == false && mModel &&  mModel->rowCount() > 1 ) {
-    mSlideTimer->start( mEffectEngine->slideDelayTime() );  
+        mSlideTimer->start( mSettings->slideShowDelayTime() );  
     }    
-    }
+}
 
 void GlxSlideShowWidget::stopSlideShow (  )
-    {
+{
     TRACER ( "GlxSlideShowWidget::stopSlideShow( ) ");
     cancelEffect();
     mSlideTimer->stop();                
-    }
+}
 
 void GlxSlideShowWidget::clearCurrentModel()
-    {
+{
     TRACER ( "GlxSlideShowWidget::clearCurrentModel( ) ");
     if ( mModel ) {
-    disconnect( mModel, SIGNAL( dataChanged(QModelIndex,QModelIndex) ), this, SLOT( dataChanged(QModelIndex,QModelIndex) ) );
-    disconnect(mModel, SIGNAL(rowsInserted(QModelIndex,int,int)), this, SLOT(rowsInserted(QModelIndex,int,int)));
-    disconnect(mModel, SIGNAL(rowsRemoved(QModelIndex,int,int)), this, SLOT(rowsRemoved(QModelIndex,int,int)));
-    disconnect(mModel, SIGNAL(destroyed()), this, SLOT( modelDestroyed()));
-    mModel = NULL ;
+        disconnect( mModel, SIGNAL( dataChanged(QModelIndex,QModelIndex) ), this, SLOT( dataChanged(QModelIndex,QModelIndex) ) );
+        disconnect(mModel, SIGNAL(rowsInserted(QModelIndex,int,int)), this, SLOT(rowsInserted(QModelIndex,int,int)));
+        disconnect(mModel, SIGNAL(rowsRemoved(QModelIndex,int,int)), this, SLOT(rowsRemoved(QModelIndex,int,int)));
+        disconnect(mModel, SIGNAL(destroyed()), this, SLOT( modelDestroyed()));
+        mModel = NULL ;
     }
 /*
     disconnect(mModel, SIGNAL(destroyed()), this, SLOT(_q_modelDestroyed()));
     disconnect(mModel, SIGNAL(rowsAboutToBeRemoved(QModelIndex,int,int)), this, SLOT(rowsAboutToBeRemoved(QModelIndex,int,int)));
  */	
-    }
+}
 
 void GlxSlideShowWidget::initializeNewModel()
-    {
+{
     TRACER("GlxSlideShowWidget::initializeNewModel" );
     if ( mModel ) {
-    connect( mModel, SIGNAL( dataChanged(QModelIndex,QModelIndex) ), this, SLOT( dataChanged(QModelIndex,QModelIndex) ) );
-    connect(mModel, SIGNAL(rowsInserted(QModelIndex,int,int)), this, SLOT(rowsInserted(QModelIndex,int,int)));
-    connect(mModel, SIGNAL(rowsRemoved(QModelIndex,int,int)), this, SLOT(rowsRemoved(QModelIndex,int,int)));
-    connect(mModel, SIGNAL(destroyed()), this, SLOT( modelDestroyed()));
+        connect( mModel, SIGNAL( dataChanged(QModelIndex,QModelIndex) ), this, SLOT( dataChanged(QModelIndex,QModelIndex) ) );
+        connect(mModel, SIGNAL(rowsInserted(QModelIndex,int,int)), this, SLOT(rowsInserted(QModelIndex,int,int)));
+        connect(mModel, SIGNAL(rowsRemoved(QModelIndex,int,int)), this, SLOT(rowsRemoved(QModelIndex,int,int)));
+        connect(mModel, SIGNAL(destroyed()), this, SLOT( modelDestroyed()));
     }	
-    }
+}
 
 
 void GlxSlideShowWidget::resetSlideShow()
-    {
+{
     TRACER("GlxSlideShowWidget::resetSlideShow()" );
 	if(! mModel) {
 		return;
 	}
     QVariant variant = mModel->data( mModel->index( mSelIndex, 0 ), GlxFocusIndexRole );
     if ( variant.isValid() &&  variant.canConvert<int> () ) {
-    mSelIndex = variant.value<int>() ;
-    GLX_LOG_INFO1("GlxSlideShowWidget::resetSlideShow() selected index %d", mSelIndex ); 
+        mSelIndex = variant.value<int>() ;
+        GLX_LOG_INFO1("GlxSlideShowWidget::resetSlideShow() selected index %d", mSelIndex ); 
     }
 
     variant = mModel->data( mModel->index( mSelIndex, 0 ), GlxFsImageRole );
     if ( variant.isValid() &&  variant.canConvert<HbIcon> () ) {
-    mIconItems[mItemIndex]->setIcon ( variant.value<HbIcon>() ) ; 
+        mIconItems[mItemIndex]->setIcon ( variant.value<HbIcon>() ) ; 
     }
     else {
-    mIconItems[mItemIndex]->setIcon ( HbIcon() ) ; 
+        mIconItems[mItemIndex]->setIcon ( HbIcon() ) ; 
     }
+    
     setIconItems(MOVE_FORWARD);
     setIconItems(MOVE_BACKWARD);
     if ( mIsPause == false && mModel &&  mModel->rowCount() > 1 ) {
-    mSlideTimer->start( mEffectEngine->slideDelayTime() );  
+        mSlideTimer->start( mSettings->slideShowDelayTime() );  
     }  
-    }
+}
 
-void GlxSlideShowWidget::setIconItems(int moveDir)
-    {
+void GlxSlideShowWidget::setIconItems( int moveDir )
+{
     TRACER("GlxSlideShowWidget::setIconItems()");
     int index = 0, itemIndex = 0;
     int rowCount = mModel->rowCount();
     GLX_LOG_INFO1("GlxSlideShowWidget::setIconItems() rowcount %d ", rowCount);
 
     if ( rowCount == 0 ) {
-    return ;
+        return ;
     }
-
-    if (moveDir == MOVE_FORWARD) {
-    index = ( mSelIndex + 1) % rowCount;
-    itemIndex = ( mItemIndex + 1) % NBR_ITEM;
-    }else {
-    index = mSelIndex ? mSelIndex - 1 : rowCount - 1;  
-    itemIndex = mItemIndex ? mItemIndex - 1 : NBR_ITEM - 1; 
+    
+    if ( moveDir == MOVE_FORWARD ) {
+        index = ( mSelIndex + 1 ) % rowCount;
+        itemIndex = ( mItemIndex + 1) % NBR_ITEM;
+    }
+    else {
+        index = mSelIndex ? mSelIndex - 1 : rowCount - 1;  
+        itemIndex = mItemIndex ? mItemIndex - 1 : NBR_ITEM - 1; 
     }
 
     GLX_LOG_INFO4("GlxSlideShowWidget::setIconItems() image selected index %d array index %d index %d icon index %d", mSelIndex, mItemIndex, index, itemIndex);
 
     QVariant variant = mModel->data( mModel->index( index, 0 ), GlxFsImageRole );
     if ( variant.isValid() &&  variant.canConvert<HbIcon> () ) {
-    mIconItems[itemIndex]->setIcon ( variant.value<HbIcon>() ) ; 
+        mIconItems[itemIndex]->setIcon ( variant.value<HbIcon>() ) ; 
     }
     else {
-    mIconItems[itemIndex]->setIcon ( HbIcon() ) ;
+        mIconItems[itemIndex]->setIcon ( HbIcon() ) ;
     } 
-    }
-
-//To:DO it is not used so may be remove later
-void GlxSlideShowWidget::setItemPos(int moveDir)
-    {
-    Q_UNUSED( moveDir) 
-    TRACER("GlxSlideShowWidget::setItemPos()");
-    GLX_LOG_INFO1("GlxSlideShowWidget::setItemPos() array index %d", mItemIndex );
-
-    if (moveDir == MOVE_FORWARD) {
-    int index = ( mItemIndex + 1) % NBR_ITEM;
-    mIconItems[index]->setPos( mScreenRect.width(), mScreenRect.top() );
-    }
-    else {
-    int index = mItemIndex ? mItemIndex - 1 : NBR_ITEM - 1;    
-    mIconItems[index]->setPos( -mScreenRect.width(), mScreenRect.top() ); 
-    }   
-    }
+}
 
 void GlxSlideShowWidget::moveImage(int nextIndex, int posX, const QString & move, char * callBack)
-    {
+{
     TRACER("GlxSlideShowWidget::MoveImage()");
 
     if ( mModel->rowCount() <= 1 || mEffectEngine->isEffectRuning( mItemList ) ) {
-    return ;
+        return ;
     }
 
     mSlideTimer->stop();
-    HbEffect::start(mIconItems[mItemIndex], QString("HbIconItem"), move );
+    HbEffect::start( mIconItems[mItemIndex], QString("HbIconItem"), move );
     mIconItems[nextIndex]->setPos( posX, mScreenRect.top());
+    mIconItems[nextIndex]->setOpacity(1);
     HbEffect::start(mIconItems[nextIndex], QString("HbIconItem"), QString("Move"), this, callBack );    
-    }
+}
 
 void GlxSlideShowWidget::addConnections()
-    {
+{
     TRACER("GlxSlideShowWidget::addConnections()");
     if ( mEffectEngine )  {
-    connect( mEffectEngine, SIGNAL( effectFinished() ), this, SLOT( effectFinshed() ) );
+        connect( mEffectEngine, SIGNAL( effectFinished() ), this, SLOT( effectFinshed() ) );
     }
     if ( mSlideTimer ) {
-    connect( mSlideTimer, SIGNAL(timeout()), this, SLOT( triggeredEffect() ) );
+        connect( mSlideTimer, SIGNAL(timeout()), this, SLOT( triggeredEffect() ) );
     }
     if ( mContinueButton ) {
-    connect( mContinueButton, SIGNAL( clicked(bool) ), this, SLOT( continueSlideShow(bool) ) );
+        connect( mContinueButton, SIGNAL( clicked(bool) ), this, SLOT( continueSlideShow(bool) ) );
     }
-    }
+}
 
 void GlxSlideShowWidget::removeConnections()
-    {
+{
     TRACER("GlxSlideShowWidget::removeConnections()");
     if ( mEffectEngine )  {
-    disconnect( mEffectEngine, SIGNAL( effectFinished() ), this, SLOT( effectFinshed() ) );
+        disconnect( mEffectEngine, SIGNAL( effectFinished() ), this, SLOT( effectFinshed() ) );
     }
     if ( mSlideTimer ) {
-    disconnect( mSlideTimer, SIGNAL(timeout()), this, SLOT( triggeredEffect() ) );
+        disconnect( mSlideTimer, SIGNAL(timeout()), this, SLOT( triggeredEffect() ) );
     }
     if ( mContinueButton ) {
-    disconnect( mContinueButton, SIGNAL( clicked(bool) ), this, SLOT( continueSlideShow(bool) ) );
+        disconnect( mContinueButton, SIGNAL( clicked(bool) ), this, SLOT( continueSlideShow(bool) ) );
     }
-    }
+}
--- a/ui/views/viewbase/inc/glxview.h	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/views/viewbase/inc/glxview.h	Thu Jul 22 16:33:32 2010 +0100
@@ -60,6 +60,7 @@
     void actionTriggered(qint32 id);
     void itemSpecificMenuTriggered(qint32,QPointF );
     void gridItemSelected(const QModelIndex &);
+   
     
 private :
 	qint32 mId;	
--- a/ui/views/views.pro	Wed Jun 16 13:08:54 2010 +0100
+++ b/ui/views/views.pro	Thu Jul 22 16:33:32 2010 +0100
@@ -20,10 +20,9 @@
 DEPENDPATH += . fullscreenview/inc fullscreenview/src gridview/inc gridview/src slideshowsettingsview/inc slideshowsettingsview/src viewbase/inc
 CONFIG += hb
 
-LIBS += -lglxmediamodel.dll \
-        -lglxlistmodel.dll \
-        -lglxfavmediamodel.dll \
-	-lglximagedecoderwrapper.dll \
+LIBS += -lglxfavmediamodel.dll \
+        -lglxmediamodel.dll \
+        -lglximagedecoderwrapper.dll \
         -lglxloggerqt.dll \
         -lshareui.dll \
         -lglxtvout.dll \
@@ -32,14 +31,19 @@
         -lglxlogging.dll \
         -lganeswidgets.dll \
         -lglxmodelwrapper.dll \
-        -lxqsettingsmanager
+        -lglxviewutilities.dll \
+	 -lglxzoomwidget.dll \
+        -ldetailsnamelabel.dll \
+        -ldetailsnamelabelplugin.dll \
+        -ldetailsdescriptionedit.dll \
+        -ldetailsdescriptioneditplugin.dll
 
 DEFINES += BUILD_GLXVIEWS
 
 INCLUDEPATH += . ../inc \
           ../../inc \
+  	  ../widgets/glxzoomwidget/inc \
           ../uiengine/model/mediamodel/inc \
-          ../uiengine/model/listmodel/inc \
 	  ../uiengine/model/favmediamodel/inc \
           ../uiengine/medialistwrapper/inc \
           ../viewbase/inc \
@@ -48,55 +52,52 @@
           ../../traces \
           ../../tvout/tvoutwrapper/inc \
           ../uiengine/model/modelwrapper/inc \
-          /epoc32/include/mw/hgwidgets
+          ../viewutilities/effectengine/inc \
+          ../viewutilities/settingutility/inc \
+          /epoc32/include/mw/hgwidgets \
+          ../detailscustomwidget/detailsnamelabel/inc \
+          ../detailscustomwidget/detailsdescriptionedit/inc
 
 symbian: { 
 TARGET.UID3 = 0x200009EF
 INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
 TARGET.EPOCALLOWDLLDATA = 1
 TARGET.CAPABILITY = ALL -TCB 
+MMP_RULES += SMPSAFE
 }
 
 # Input
 HEADERS += viewbase/inc/glxview.h \
            fullscreenview/inc/glxcoverflow.h \
            fullscreenview/inc/glxfullscreenview.h \
-           fullscreenview/inc/glxzoomslider.h  \
-           fullscreenview/inc/glxzoomcontrol.h  \
            detailsview/inc/glxdetailsview.h  \
-           detailsview/inc/glxdetailscustomwidgets.h  \
-           detailsview/inc/glxdetailscustomicon.h \
            gridview/inc/glxgridview.h \
-					 slideshowsettingsview/inc/glxslideshowsettingsview.h \
+           slideshowsettingsview/inc/glxslideshowsettingsview.h \
            listview/inc/glxlistview.h \
-           effectengine/inc/glxeffectengine.h \
            slideshowview/inc/glxslideshowview.h \
            slideshowview/inc/glxslideshowwidget.h \
-           effectengine/effectplugin/inc/glxeffectpluginbase.h \
-           effectengine/effectplugin/inc/glxbackwardtransitionplugin.h \
-           effectengine/effectplugin/inc/glxforwardtransitionplugin.h \
-           effectengine/effectplugin/inc/glxfadeplugin.h \
-	   	   docloaders/inc/glxviewdocloader.h \
+           docloaders/inc/glxviewdocloader.h \
            viewsfactory/inc/glxviewsfactory.h \
            
 SOURCES += viewbase/src/glxview.cpp \
            fullscreenview/src/glxcoverflow.cpp \
            fullscreenview/src/glxfullscreenview.cpp \
-           fullscreenview/src/glxzoomslider.cpp \
-           fullscreenview/src/glxzoomcontrol.cpp \
-           detailsview/src/glxdetailsview.cpp \
-           detailsview/src/glxdetailscustomwidgets.cpp \
-           detailsview/src/glxdetailscustomicon.cpp \
+	   detailsview/src/glxdetailsview.cpp \
            gridview/src/glxgridview.cpp \
            slideshowsettingsview/src/glxslideshowsettingsview.cpp \
            listview/src/glxlistview.cpp \
-           effectengine/src/glxeffectengine.cpp \
            slideshowview/src/glxslideshowview.cpp \
            slideshowview/src/glxslideshowwidget.cpp \
-           effectengine/effectplugin/src/glxbackwardtransitionplugin.cpp \
-           effectengine/effectplugin/src/glxforwardtransitionplugin.cpp \
-           effectengine/effectplugin/src/glxfadeplugin.cpp \
 	   docloaders/src/glxviewdocloader.cpp \
            viewsfactory/src/glxviewsfactory.cpp
 
-DEFINES += QT_NO_DEBUG_OUTPUT QT_NO_WARNING_OUTPUT 
\ No newline at end of file
+DEFINES += QT_NO_DEBUG_OUTPUT QT_NO_WARNING_OUTPUT 
+
+defBlock = \      
+"$${LITERAL_HASH}if defined(EABI)" \
+"DEFFILE  ../eabi/glxviews.def" \
+	 "$${LITERAL_HASH}else" \
+	 "DEFFILE  ../bwins/glxviews.def" \
+             "$${LITERAL_HASH}endif"
+	
+MMP_RULES += defBlock
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ui/viewutilities/effectengine/inc/glxeffectengine.h	Thu Jul 22 16:33:32 2010 +0100
@@ -0,0 +1,158 @@
+/*
+* Copyright (c) 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:   ?Description
+*
+*/
+
+
+#ifndef GLXEFFECTENGINE_H
+#define GLXEFFECTENGINE_H
+
+#ifdef BUILD_GLXVIEWUTILITIES
+#define GLX_VIEWUTILITIES_EXPORT Q_DECL_EXPORT
+#else
+#define GLX_VIEWUTILITIES_EXPORT Q_DECL_IMPORT
+#endif
+
+#include <QObject>
+#include <hbeffect.h>
+#include <QString>
+#include <QHash>
+#include <QList>
+#include "glxuistd.h"
+
+
+class QStringList ;
+class GlxTransitionEffectSetting ;
+class GlxEffectPluginBase;
+class GlxEffectPluginResolver;
+
+/*
+ * It is customise class for Photo Application to run the effect.
+ */
+
+class GLX_VIEWUTILITIES_EXPORT GlxEffectEngine : public QObject
+{
+    Q_OBJECT
+    
+public:
+    /*
+     * Constructor
+     */
+    GlxEffectEngine( );
+    /*
+     * Destructor
+     */
+    ~GlxEffectEngine();
+    
+    /*
+     * Register the item type with selected effect
+     * User can change the effect at run time so it is required to register and deregister the effect
+     * before playing the effect.
+     */
+    void registerEffect(const QString &itemType);
+    
+    /*
+     * Deregister the current register slide show effect
+     */
+    void deRegisterEffect(const QString &itemType);
+    
+   /*  
+    *  To register a set of transition effect 
+    *  e.g "grid to full screeen", "fullscreen to grid"  
+    */  
+    void registerTransitionEffect();
+    
+    /*
+     * Deregister the set of register transition effect
+     */
+    void deregistertransitionEffect();
+    
+    /*
+     * Run the effect on single item
+     */
+    void runEffect(QGraphicsItem *  item, const QString &  itemType ); 
+    
+    /*
+     * Run the effect on multiple item
+     */
+    void runEffect(QList< QGraphicsItem * > &  items, const QString &  itemType );
+    
+    /*
+     * Run the transition effect 
+     */
+    void runEffect(QList< QGraphicsItem * > &  items, GlxEffect transitionEffect);
+    
+    /*
+     * Cancel the runing effect on the given item
+     */
+    void cancelEffect(QGraphicsItem *  item);
+    
+    /*
+     * Cancel the running effect on the given items
+     */
+    void cancelEffect( const QList< QGraphicsItem * > &  items );
+    
+    /*
+     * cancel the runing transition effect
+     */
+    void cancelEffect(QList< QGraphicsItem * > &  items, GlxEffect transitionEffect);
+    
+    /*
+     * Return the running status of the given item
+     */
+    bool isEffectRuning(QGraphicsItem *  item);
+    
+    /*
+     * return the running status of given items
+     */
+    bool isEffectRuning(const QList< QGraphicsItem * > &  items);
+    
+signals:
+    /*
+     * emit the signal of effect finished
+     */
+    void effectFinished();
+    
+public slots:
+    /*
+     * Slot to monitor the slide show effect finished
+     */
+    void slideShowEffectFinished( const HbEffect::EffectStatus &status );
+    
+    /*
+     * Slot to monitor the transi
+     */
+    void transitionEffectFinished( const HbEffect::EffectStatus &status );
+
+private:
+    /*
+     * Initialise the all transition effect
+     */
+    void initTransitionEffect();
+    
+    /*
+     * Clear the all transition effect
+     */
+    void cleanTransitionEfffect();
+    
+private:
+    int mNbrEffectRunning;               //containe the number of effect running
+    GlxEffectPluginBase *mEffectPlugin;  //No ownership
+    QHash<GlxEffect, GlxTransitionEffectSetting *> mTransitionEffectList;
+    GlxEffect mTransitionEffect;
+    GlxEffectPluginResolver *mEffectResolver;
+};
+
+#endif /*GLXEFFECTENGINE_H*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ui/viewutilities/effectengine/inc/glxtransitioneffect.h	Thu Jul 22 16:33:32 2010 +0100
@@ -0,0 +1,62 @@
+/*
+* Copyright (c) 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:   ?Description
+*
+*/
+
+#ifndef GLXTRANSITIONEFFECT_H
+#define GLXTRANSITIONEFFECT_H
+
+#include <QList>
+
+#include "glxuistd.h"
+
+class QString;
+class QGraphicsItem ;
+
+/*
+ * This class have the views transition effect information
+ */
+class GlxTransitionEffectSetting
+{
+public :
+    GlxTransitionEffectSetting(GlxEffect effect);
+    ~GlxTransitionEffectSetting();
+    
+    QList <QString > effectFileList() { return mEffectFileList ; }
+    QList <QString > itemType() { return mItemType ; }
+    QList <QString > eventType() { return mEventType ; }
+    bool isTransitionLater() { return mTransitionLater ; }
+    QGraphicsItem * animationItem() { return mItem ; }
+    
+    void setEffectFileList( QList <QString > & effectFileList) { mEffectFileList = effectFileList ; }
+    void setItemTypes( QList <QString > & itemType) { mItemType = itemType; }
+    void setEventTypes( QList <QString > & eventType) { mEventType = eventType ; }
+    void setTransitionLater(bool transitionLater) { mTransitionLater = transitionLater ; }
+    void setAnimationItem(QGraphicsItem *item) { mItem = item ;}
+    int count() { return mEffectFileList.count() ; }
+    
+private :
+    void init();
+    
+private :
+    GlxEffect mEffect;     //transition effect type
+    bool mTransitionLater; //second animation will run same time(false) or later (true)
+    QGraphicsItem *mItem; //it will used in the case of animation run later
+    QList <QString > mEffectFileList; //list of fxml file used for animation
+    QList <QString > mItemType; //list of item type 
+    QList <QString > mEventType; //list of event type
+};
+
+#endif //GLXTRANSITIONEFFECT_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ui/viewutilities/effectengine/src/glxeffectengine.cpp	Thu Jul 22 16:33:32 2010 +0100
@@ -0,0 +1,268 @@
+/*
+* Copyright (c) 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:   ?Description
+*
+*/
+
+
+#include "glxeffectengine.h"
+#include "glxeffectpluginbase.h"
+#include "glxtransitioneffect.h"
+#include "glxsettinginterface.h"
+#include "glxeffectpluginresolver.h"
+
+#include <QDebug>
+
+GlxEffectEngine::GlxEffectEngine( ) 
+    : mNbrEffectRunning( 0 ), 
+      mEffectPlugin( NULL ), 
+      mTransitionEffect( NO_EFFECT ),
+      mEffectResolver( NULL )
+{
+    qDebug("GlxSlideShowEffectEngine::GlxSlideShowEffectEngine()");
+    mTransitionEffectList.clear();
+}
+
+GlxEffectEngine::~GlxEffectEngine()
+{
+    qDebug("GlxSlideShowEffectEngine::~GlxSlideShowEffectEngine()");
+    delete mEffectResolver;
+    mEffectResolver = NULL;
+	
+    cleanTransitionEfffect();
+}
+
+void GlxEffectEngine::registerEffect(const QString &itemType)
+{
+    GlxSettingInterface *settingObj = GlxSettingInterface::instance(); // NO ownership 
+    if ( mEffectResolver == NULL ) {
+        mEffectResolver = new GlxEffectPluginResolver();
+    }
+    /* read the selected effect through the centrep and get the effect plugin object through effect plugin resolver*/
+    mEffectPlugin = mEffectResolver->effectPlugin( settingObj->slideShowEffectId( settingObj->slideShowEffectIndex ( ) ) ); //No ownership
+    
+    QList <QString > effectPathList = mEffectPlugin->effectFileList();
+    
+    qDebug("GlxSlideShowEffectEngine::registerEffect() item type %s file path %s", itemType.utf16(), effectPathList[0].utf16());
+    for ( int i = 0; i < effectPathList.count() ; ++i ) {
+        HbEffect::add(itemType, effectPathList.at(i), QString( "Click%1" ).arg(i));
+    }    
+}
+
+void GlxEffectEngine::deRegisterEffect(const QString &itemType)
+{
+    qDebug("GlxSlideShowEffectEngine::deRegisterEffect() item type %s", itemType.utf16());
+    QList <QString > effectPathList = mEffectPlugin->effectFileList();
+    for ( int i = 0; i < effectPathList.count() ; ++i ) {
+        HbEffect::remove(itemType, effectPathList.at(i), QString( "Click%1" ).arg(i));
+    }
+    mEffectPlugin = NULL;
+}
+
+void GlxEffectEngine::registerTransitionEffect()  
+{
+    qDebug("GlxSlideShowEffectEngine::registerTransitionEffect()");
+    initTransitionEffect();
+}
+
+void GlxEffectEngine::deregistertransitionEffect()
+{
+    qDebug("GlxSlideShowEffectEngine::deregisterTransitionEffect()");
+    cleanTransitionEfffect();
+}
+
+void GlxEffectEngine::runEffect(QGraphicsItem *  item, const QString &  itemType )
+{
+    qDebug("GlxSlideShowEffectEngine::runEffect()1 item type %s", itemType.utf16());
+    HbEffect::start(item, itemType, QString( "Click1" ), this, "slideShowEffectFinished");
+    ++mNbrEffectRunning;
+}
+
+void GlxEffectEngine::runEffect(QList< QGraphicsItem * > &  items, const QString &  itemType )
+{
+    qDebug("GlxSlideShowEffectEngine::runEffect()2 item Type %s", itemType.utf16());
+    mEffectPlugin->setUpItems(items);
+    for ( int i = 0; i < items.count() ; ++i ) {
+        if ( mEffectPlugin->isAnimationLater(i) == FALSE ) {
+            HbEffect::start(items.at(i), itemType, QString( "Click%1").arg(i), this, "slideShowEffectFinished");
+        }
+        ++mNbrEffectRunning;
+    }
+}
+
+void GlxEffectEngine::runEffect(QList< QGraphicsItem * > &  items, GlxEffect transitionEffect)
+{
+    qDebug("GlxSlideShowEffectEngine::runEffect()3 effect type %d ", transitionEffect);
+    
+    GlxTransitionEffectSetting *effectSetting = mTransitionEffectList.value( transitionEffect );
+    
+    if ( effectSetting == NULL || items.count() != effectSetting->count() ) {
+         return;
+    }
+    
+    mTransitionEffect = transitionEffect;
+    for ( int i = 0; i < effectSetting->count() ; ++i) {
+        ++mNbrEffectRunning;
+        if ( ( i == effectSetting->count() -1) && effectSetting->isTransitionLater() )
+        {
+            effectSetting->setAnimationItem( items.at(i) );
+            items.at(i)->hide();
+        }
+        else {
+            HbEffect::start(items.at(i), effectSetting->itemType().at(i), effectSetting->eventType().at(i), this, "transitionEffectFinished");
+        }
+    }    
+}
+
+void GlxEffectEngine::cancelEffect(QGraphicsItem *  item)
+{
+    if ( HbEffect::effectRunning( item, QString( "Click1" ) ) ) {
+        HbEffect::cancel( item, QString( "Click1" ) );
+    }
+}
+
+void GlxEffectEngine::cancelEffect(const QList< QGraphicsItem * > &  items)
+{
+    for ( int i = 0; i < items.count() ; ++i ) {    
+        if ( HbEffect::effectRunning( items.at(i), QString( "Click%1").arg(i) ) ) {
+            HbEffect::cancel( items.at(i), QString( "Click%1").arg(i) );
+        }
+    }
+}
+
+void GlxEffectEngine::cancelEffect(QList< QGraphicsItem * > &  items, GlxEffect transitionEffect)
+{
+    GlxTransitionEffectSetting *effectSetting = mTransitionEffectList.value( transitionEffect );
+    
+    if ( effectSetting == NULL || items.count() != effectSetting->count() ) {
+         return;
+    }
+    
+    for ( int i = 0; i < effectSetting->count() ; ++i) {
+        HbEffect::cancel(items.at(i), effectSetting->eventType().at(i) );
+    }     
+}
+
+bool GlxEffectEngine::isEffectRuning(QGraphicsItem *  item)
+{
+    if ( HbEffect::effectRunning( item, QString( "Click1" ) ) ) {
+        return true;
+    }
+    return false;
+}
+
+bool GlxEffectEngine::isEffectRuning(const QList< QGraphicsItem * > &  items)
+{
+    for ( int i = 0; i < items.count() ; ++i ) {    
+        if ( HbEffect::effectRunning( items.at(i), QString( "Click%1").arg(i) ) ) {
+            return true;
+        }
+    }
+    return false;
+}
+
+void GlxEffectEngine::slideShowEffectFinished( const HbEffect::EffectStatus &status )
+{
+    Q_UNUSED( status )
+    qDebug("GlxSlideShowEffectEngine::slideShowEffectFinished() number of effect %d ", mNbrEffectRunning);
+    
+    --mNbrEffectRunning;
+    
+    if ( mEffectPlugin->isAnimationLater( mNbrEffectRunning) ) {
+        HbEffect::start( mEffectPlugin->animationItem(), mEffectPlugin->ItemType(), QString( "Click%1").arg(mNbrEffectRunning), this, "slideShowEffectFinished");
+    }
+    
+    if (mNbrEffectRunning == 0) {
+        emit effectFinished();
+    }
+}
+
+void GlxEffectEngine::transitionEffectFinished( const HbEffect::EffectStatus &status )
+{
+    Q_UNUSED( status )
+    qDebug("GlxSlideShowEffectEngine::transitionEffectFinished() number of effect %d status %d", mNbrEffectRunning, status.reason);
+    
+    --mNbrEffectRunning;
+    if ( mNbrEffectRunning == 1 ) {
+        GlxTransitionEffectSetting *effectSetting = mTransitionEffectList.value( mTransitionEffect );
+        if (  effectSetting->isTransitionLater() ){ 
+            effectSetting->animationItem()->show();
+            HbEffect::start( effectSetting->animationItem(), effectSetting->itemType().at(1), effectSetting->eventType().at(1), this, "transitionEffectFinished");
+            mTransitionEffect = NO_EFFECT;
+        }    
+    }
+    
+    if (mNbrEffectRunning == 0) {
+        emit effectFinished();
+    }
+}
+
+void GlxEffectEngine::initTransitionEffect()
+{
+    GlxTransitionEffectSetting *effectSetting = NULL;
+    
+    effectSetting = new GlxTransitionEffectSetting(GRID_TO_FULLSCREEN);
+    for ( int i = 0; i < effectSetting->count(); ++i ) {
+        HbEffect::add( effectSetting->itemType().at(i), effectSetting->effectFileList().at(i), effectSetting->eventType().at(i)) ;
+    }
+    mTransitionEffectList[GRID_TO_FULLSCREEN] = effectSetting;
+    
+    effectSetting = new GlxTransitionEffectSetting( FULLSCREEN_TO_GRID );
+    for ( int i = 0; i < effectSetting->count(); ++i ) {
+        HbEffect::add( effectSetting->itemType().at(i), effectSetting->effectFileList().at(i), effectSetting->eventType().at(i)) ;
+    }
+    mTransitionEffectList[FULLSCREEN_TO_GRID] = effectSetting;
+    
+    effectSetting = new GlxTransitionEffectSetting( GRID_TO_ALBUMLIST );
+    for ( int i = 0; i < effectSetting->count(); ++i ) {
+        HbEffect::add( effectSetting->itemType().at(i), effectSetting->effectFileList().at(i), effectSetting->eventType().at(i)) ;
+    }
+    mTransitionEffectList[GRID_TO_ALBUMLIST] = effectSetting;
+    
+    effectSetting = new GlxTransitionEffectSetting( ALBUMLIST_TO_GRID );
+    for ( int i = 0; i < effectSetting->count(); ++i ) {
+        HbEffect::add( effectSetting->itemType().at(i), effectSetting->effectFileList().at(i), effectSetting->eventType().at(i)) ;
+    }
+    mTransitionEffectList[ALBUMLIST_TO_GRID] = effectSetting;
+    
+    effectSetting = new GlxTransitionEffectSetting( FULLSCREEN_TO_DETAIL );
+    for ( int i = 0; i < effectSetting->count(); ++i ) {
+        HbEffect::add( effectSetting->itemType().at(i), effectSetting->effectFileList().at(i), effectSetting->eventType().at(i)) ;
+    }
+    mTransitionEffectList[FULLSCREEN_TO_DETAIL] = effectSetting; 
+    
+    effectSetting = new GlxTransitionEffectSetting( DETAIL_TO_FULLSCREEN );
+    for ( int i = 0; i < effectSetting->count(); ++i ) {
+        HbEffect::add( effectSetting->itemType().at(i), effectSetting->effectFileList().at(i), effectSetting->eventType().at(i)) ;
+    }
+    mTransitionEffectList[DETAIL_TO_FULLSCREEN] = effectSetting;    
+}
+
+void GlxEffectEngine::cleanTransitionEfffect()
+{	
+    qDebug("GlxSlideShowEffectEngine::cleanTrnastionEfffect()");
+    
+    QHashIterator<GlxEffect, GlxTransitionEffectSetting *> iter( mTransitionEffectList );
+
+    while ( iter.hasNext() ) {
+        iter.next();
+        GlxTransitionEffectSetting *list =  iter.value();
+        for ( int i = 0; i < list->count(); ++i ) {
+            HbEffect::remove( list->itemType().at(i), list->effectFileList().at(i), list->eventType().at(i)) ;
+        }
+        delete list;        
+    }
+    mTransitionEffectList.clear();
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ui/viewutilities/effectengine/src/glxtransitioneffect.cpp	Thu Jul 22 16:33:32 2010 +0100
@@ -0,0 +1,106 @@
+/*
+* Copyright (c) 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:   ?Description
+*
+*/
+
+#include <glxtransitioneffect.h>
+
+#include <QString>
+
+GlxTransitionEffectSetting::GlxTransitionEffectSetting(GlxEffect effect): mEffect(effect), mTransitionLater(false), mItem(0)
+{
+    qDebug("GlxTransitionEffectSetting::GlxTransitionEffectSetting() effect id %d ", effect);
+    mEffectFileList.clear();
+    mItemType.clear();
+    mEventType.clear();
+    init();
+}
+
+void GlxTransitionEffectSetting::init()
+{
+    qDebug("GlxTransitionEffectSetting::init() effect id %d ", mEffect);
+    
+    switch( mEffect ) {
+        case GRID_TO_FULLSCREEN :
+            mEffectFileList.append( QString(":/data/gridtofullscreenhide.fxml"));
+            mItemType.append( QString("HbGridViewItem") );
+            mEventType.append(QString("click1") );
+            
+            mEffectFileList.append( QString(":/data/gridtofullscreenshow.fxml"));
+            mItemType.append( QString("HbView") );
+            mEventType.append(QString("click2") );
+            break;
+            
+        case FULLSCREEN_TO_GRID :
+            mEffectFileList.append( QString(":/data/fullscreentogrid.fxml"));
+            mItemType.append( QString("HbGridView") );
+            mEventType.append(QString("click3") );
+            break;
+            
+        case GRID_TO_ALBUMLIST:
+            mEffectFileList.append( QString(":/data/gridtoalbumlisthide.fxml"));
+            mItemType.append( QString("HbView") );
+            mEventType.append(QString("click4") );
+                        
+            mEffectFileList.append( QString(":/data/gridtoalbumlist.fxml"));
+            mItemType.append( QString("HbListView") );
+            mEventType.append(QString("click5") );
+            break;
+             
+        case ALBUMLIST_TO_GRID:
+            mEffectFileList.append( QString(":/data/albumlisttogrid.fxml"));
+            mItemType.append( QString("HbListView") );
+            mEventType.append(QString("click6") );
+                        
+            mEffectFileList.append( QString(":/data/albumlisttogridshow.fxml"));
+            mItemType.append( QString("HbView") );
+            mEventType.append(QString("click7") );
+            break;
+            
+        case FULLSCREEN_TO_DETAIL :
+            mEffectFileList.append( QString(":/data/view_flip_hide.fxml"));
+            mItemType.append( QString("HbView") );
+            mEventType.append(QString("click8") );
+                        
+            mEffectFileList.append( QString(":/data/view_flip_show.fxml"));
+            mItemType.append( QString("HbView") );
+            mEventType.append(QString("click9") );
+            mTransitionLater = true;
+            break;
+            
+        case DETAIL_TO_FULLSCREEN :
+            mEffectFileList.append( QString(":/data/view_flip_hide.fxml"));
+            mItemType.append( QString("HbView") );
+            mEventType.append(QString("click10") );
+                        
+            mEffectFileList.append( QString(":/data/view_flip_show.fxml"));
+            mItemType.append( QString("HbView") );
+            mEventType.append(QString("click11") );
+            mTransitionLater = true;
+            break;            
+            
+        default :
+            break;
+    }    
+}
+
+GlxTransitionEffectSetting::~GlxTransitionEffectSetting()
+{
+    qDebug("GlxTransitionEffectSetting::~GlxTransitionEffectSetting() effect id %d ", mEffect);
+    mEffectFileList.clear();
+    mItemType.clear();
+    mEventType.clear();
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ui/viewutilities/effectplugin/inc/glxeffectpluginbase.h	Thu Jul 22 16:33:32 2010 +0100
@@ -0,0 +1,77 @@
+/*
+* Copyright (c) 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:   ?Description
+*
+*/
+
+#ifndef GLXEFFECTPLUGINBASE_H
+#define GLXEFFECTPLUGINBASE_H
+
+#include <QList>
+#include <QString>
+#include <QGraphicsItem>
+
+/*
+ * It is based class of diffetent animation plugin.
+ * These Plugin mostly used for playing the animation in slide show
+ */
+
+class GlxEffectPluginBase 
+{
+public :
+    /*
+     * Constructor
+     */
+    GlxEffectPluginBase( int effectId ) { mEffectId = effectId ;  }
+    
+    /*
+     * Destructor
+     */
+    virtual ~GlxEffectPluginBase() {}
+    
+    /*
+     * return the list of effect file's 
+     */
+    virtual QList <QString > effectFileList() = 0;
+    
+    /*
+     * Setup the item's postion and other properties before plaing the animation
+     */
+    virtual void setUpItems( QList< QGraphicsItem * > &  items ) { Q_UNUSED( items ) }
+
+    /*
+     * second animation will run same time(false) or later (true)
+     */    
+    virtual bool isAnimationLater(int index) 
+    { 
+        Q_UNUSED( index )
+        return false ; 
+    }
+    
+    /*
+     * Return the item type of animated object
+     */
+    virtual QString ItemType() { return QString("HbIconItem") ; }
+    
+    /*
+     * Return the animation object
+     */
+    virtual QGraphicsItem * animationItem() { return NULL; }
+    
+private :
+    int mEffectId ;
+
+};
+
+#endif /*GLXEFFECTPLUGINBASE_H*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ui/viewutilities/effectplugin/inc/glxeffectpluginresolver.h	Thu Jul 22 16:33:32 2010 +0100
@@ -0,0 +1,59 @@
+/*
+* Copyright (c) 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:   ?Description
+*
+*/
+
+
+#ifndef GLXEFFECTPLUGINRESOLVER_H
+#define GLXEFFECTPLUGINRESOLVER_H
+
+#include <hbeffect.h>
+#include <QHash>
+
+#include "glxuistd.h"
+
+class GlxEffectPluginBase ;
+class QString ;
+
+class GlxEffectPluginResolver 
+{ 
+
+public :
+    /*
+     * Constructor
+     */
+    GlxEffectPluginResolver( );
+    
+    /*
+     * Return the name of the effect
+     */
+    static QString effectName( int effectId );
+    
+    /*
+     * Return the effect plugin instance to run the effect
+     */
+    GlxEffectPluginBase * effectPlugin( int effectId );
+    
+    /*
+     * Destructor
+     */
+    ~GlxEffectPluginResolver( );
+    
+private :
+    QHash< GlxEffect, GlxEffectPluginBase * > mEffectPluginList ;
+};
+
+
+#endif //GLXEFFECTPLUGINRESOLVER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ui/viewutilities/effectplugin/inc/glxfadeeffectplugin.h	Thu Jul 22 16:33:32 2010 +0100
@@ -0,0 +1,57 @@
+/*
+* Copyright (c) 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:   ?Description
+*
+*/
+
+#ifndef GLXFADEEFFECTPLUGIN_H
+#define GLXFADEEFFECTPLUGIN_H
+
+#include "glxeffectpluginbase.h"
+
+class QString ;
+
+class GlxFadeEffectPlugin : public GlxEffectPluginBase
+{
+public :
+    /*
+     * Constructor
+     */
+    GlxFadeEffectPlugin();
+    
+    /*
+     *  Destructor
+     */
+    ~GlxFadeEffectPlugin();
+    
+    /*
+     * return the fade in and fade out fxml file list
+     */
+    QList <QString > effectFileList() { return mEffectFileList ; }
+    
+   /*
+    * setup the item postion and set the mItem value
+    */
+    void setUpItems( QList< QGraphicsItem * > &  items );
+    
+    /*
+     * get the name of the effect, use to shown in the slide show setting view
+     */
+    static QString effectName(); 
+	
+private :
+    QList <QString > mEffectFileList;
+};
+
+#endif /* GLXFADEEFFECTPLUGIN_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ui/viewutilities/effectplugin/inc/glxflipeffectplugin.h	Thu Jul 22 16:33:32 2010 +0100
@@ -0,0 +1,57 @@
+/*
+* Copyright (c) 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:   ?Description
+*
+*/
+
+
+#ifndef GLXFLIPEFFECTPLUGIN_H
+#define GLXFLIPEFFECTPLUGIN_H
+
+#include "glxeffectpluginbase.h"
+
+class GlxFlipEffectPlugin : public GlxEffectPluginBase
+{
+public :
+    /*
+     *  Constructor
+     */
+    GlxFlipEffectPlugin();
+    
+    /*
+     *  Destructor
+     */
+    ~GlxFlipEffectPlugin();
+    
+    /*
+     *  Get the flip hide and Flip Show file list
+     */
+    QList <QString > effectFileList() { return mEffectFileList; }
+    
+    /*
+     * setup the item postion and set the mItem value
+     */
+    void setUpItems( QList< QGraphicsItem * > &  items );
+    
+    /*
+     * get the name of the effect, use to shown in the slide show setting view
+     */
+    static QString effectName();
+	
+private :
+    QList <QString > mEffectFileList;
+};
+
+#endif /*GLXFLIPEFFECTPLUGIN_H*/
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ui/viewutilities/effectplugin/inc/glxhelixeffectplugin.h	Thu Jul 22 16:33:32 2010 +0100
@@ -0,0 +1,57 @@
+/*
+* Copyright (c) 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:   ?Description
+*
+*/
+
+#ifndef GLXHELIXEFFECTPLUGIN_H
+#define GLXHELIXEFFECTPLUGIN_H
+
+#include "glxeffectpluginbase.h"
+
+class QString ;
+
+class GlxHelixEffectPlugin : public GlxEffectPluginBase
+{
+public :
+    /*
+     * Constructor
+     */
+    GlxHelixEffectPlugin();
+    
+    /*
+     *  Destructor
+     */
+    ~GlxHelixEffectPlugin();
+    
+    /*
+     * return the fade in and fade out fxml file list
+     */
+    QList <QString > effectFileList() { return mEffectFileList ; }
+    
+   /*
+    * setup the item postion and set the mItem value
+    */
+    void setUpItems( QList< QGraphicsItem * > &  items );
+    
+    /*
+     * get the name of the effect, use to shown in the slide show setting view
+     */
+    static QString effectName(); 
+	
+private :
+    QList <QString > mEffectFileList;
+};
+
+#endif /* GLXHELIXEFFECTPLUGIN_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ui/viewutilities/effectplugin/inc/glxzoominoutplugin.h	Thu Jul 22 16:33:32 2010 +0100
@@ -0,0 +1,57 @@
+/*
+* Copyright (c) 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:   ?Description
+*
+*/
+
+
+#ifndef GLXZOOMINOUTEFFECTPLUGIN_H
+#define GLXZOOMINOUTEFFECTPLUGIN_H
+
+#include "glxeffectpluginbase.h"
+
+class GlxZoomInOutEffectPlugin : public GlxEffectPluginBase
+{
+public :
+    /*
+     *  Constructor
+     */
+    GlxZoomInOutEffectPlugin();
+    
+    /*
+     *  Destructor
+     */
+    ~GlxZoomInOutEffectPlugin();
+    
+    /*
+     *  Get the flip hide and Flip Show file list
+     */
+    QList <QString > effectFileList() { return mEffectFileList; }
+    
+    /*
+     * setup the item postion and set the mItem value
+     */
+    void setUpItems( QList< QGraphicsItem * > &  items );
+    
+    /*
+     * get the name of the effect, use to shown in the slide show setting view
+     */
+    static QString effectName() { return QString ("ZoomInOut") ; }
+    
+private :
+    QList <QString > mEffectFileList;
+    QGraphicsItem *mItem;
+};
+
+#endif /*GLXZOOMINOUTEFFECTPLUGIN_H*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ui/viewutilities/effectplugin/src/glxeffectpluginresolver.cpp	Thu Jul 22 16:33:32 2010 +0100
@@ -0,0 +1,97 @@
+/*
+* Copyright (c) 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:   ?Description
+*
+*/
+
+#include <QString>
+
+#include "glxeffectpluginresolver.h"
+#include "glxeffectpluginbase.h"
+#include "glxfadeeffectplugin.h"
+#include "glxflipeffectplugin.h"
+#include "glxzoominoutplugin.h"
+#include "glxhelixeffectplugin.h"
+
+GlxEffectPluginResolver::GlxEffectPluginResolver()
+{
+    mEffectPluginList.clear();
+}
+
+QString GlxEffectPluginResolver::effectName( int effectId )
+{
+    qDebug( " GlxEffectPluginResolver::effectName %d ", effectId );
+    switch ( effectId ) {
+    case FLIP_EFFECT :
+        return GlxFlipEffectPlugin::effectName();
+        
+    case SMOOTH_FADE :
+        return GlxFadeEffectPlugin::effectName() ;
+    
+    case ZOOM_TO_FACE :
+        return GlxZoomInOutEffectPlugin::effectName();
+        
+    case HELIX_EFFECT :
+        return GlxHelixEffectPlugin::effectName();
+        
+    default :
+        return GlxFadeEffectPlugin::effectName() ;
+    }
+}
+
+GlxEffectPluginBase *GlxEffectPluginResolver::effectPlugin( int effectId )
+{
+    qDebug( " GlxEffectPluginResolver::effectPlugin %d ", effectId );
+    GlxEffectPluginBase * effectPlugin = mEffectPluginList.value( ( GlxEffect  )effectId );
+    if ( effectPlugin ) {
+        return  effectPlugin ;
+    }
+    
+    switch ( effectId ) {
+        case FLIP_EFFECT :
+            effectPlugin = new GlxFlipEffectPlugin();
+            mEffectPluginList[ FLIP_EFFECT ] = effectPlugin ;
+            break ;
+            
+        case ZOOM_TO_FACE :
+            effectPlugin = new GlxZoomInOutEffectPlugin() ;
+            mEffectPluginList[ ZOOM_TO_FACE ] = effectPlugin ;
+            break ;
+            
+        case HELIX_EFFECT :
+            effectPlugin = new GlxHelixEffectPlugin() ;
+            mEffectPluginList[ HELIX_EFFECT ] = effectPlugin ;
+            break ;
+        
+        case SMOOTH_FADE :   
+        default :
+            effectPlugin = mEffectPluginList.value( SMOOTH_FADE );
+            if ( effectPlugin == NULL ) {
+                effectPlugin = new GlxFadeEffectPlugin();
+                mEffectPluginList[ SMOOTH_FADE ] = effectPlugin ;
+            }
+            break ;
+    } 
+
+    return effectPlugin ;
+}
+
+GlxEffectPluginResolver::~GlxEffectPluginResolver()
+{
+    foreach( GlxEffectPluginBase *list, mEffectPluginList) {
+        delete list;
+        list = NULL;
+    }
+    mEffectPluginList.clear();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ui/viewutilities/effectplugin/src/glxfadeeffectplugin.cpp	Thu Jul 22 16:33:32 2010 +0100
@@ -0,0 +1,47 @@
+/*
+* Copyright (c) 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:   ?Description
+*
+*/
+
+
+#include "glxfadeeffectplugin.h"
+#include "glxuistd.h"
+#include "glxlocalisationstrings.h"
+
+GlxFadeEffectPlugin::GlxFadeEffectPlugin() : GlxEffectPluginBase( SMOOTH_FADE )
+{
+    mEffectFileList.append(QString(":/data/opacity_deactivate.fxml"));
+    mEffectFileList.append(QString(":/data/opacity_activate.fxml"));
+}
+
+void GlxFadeEffectPlugin::setUpItems( QList< QGraphicsItem * > &  items )
+{
+    if ( items.count() < 2 ) 
+        return;
+   
+    items.at(0)->setPos(0,0);
+    items.at(1)->setPos(0,0);
+}
+
+QString GlxFadeEffectPlugin::effectName() 
+{ 
+    return ( GLX_VAL_SMOOTH_FADE ) ; 
+}
+
+GlxFadeEffectPlugin::~GlxFadeEffectPlugin()
+{
+    mEffectFileList.clear();
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ui/viewutilities/effectplugin/src/glxflipeffectplugin.cpp	Thu Jul 22 16:33:32 2010 +0100
@@ -0,0 +1,47 @@
+/*
+* Copyright (c) 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:   ?Description
+*
+*/
+
+
+#include "glxflipeffectplugin.h"
+#include "glxuistd.h"
+
+GlxFlipEffectPlugin::GlxFlipEffectPlugin() : GlxEffectPluginBase( FLIP_EFFECT )
+{
+    mEffectFileList.append(QString(":/data/uphide.fxml"));
+    mEffectFileList.append(QString(":/data/downshow.fxml"));
+}
+
+void GlxFlipEffectPlugin::setUpItems( QList< QGraphicsItem * > &  items )
+{
+    if ( items.count() < 2 ) 
+        return;
+   
+    items.at(0)->setPos(0,0);
+    items.at(1)->setPos(0,0);
+}
+
+QString GlxFlipEffectPlugin::effectName() 
+{ 
+    return ( "FLip" ) ; 
+}
+
+GlxFlipEffectPlugin::~GlxFlipEffectPlugin()
+{
+    mEffectFileList.clear();
+}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ui/viewutilities/effectplugin/src/glxhelixeffectplugin.cpp	Thu Jul 22 16:33:32 2010 +0100
@@ -0,0 +1,47 @@
+/*
+* Copyright (c) 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:   ?Description
+*
+*/
+
+
+#include "glxhelixeffectplugin.h"
+#include "glxuistd.h"
+#include "glxlocalisationstrings.h"
+
+GlxHelixEffectPlugin::GlxHelixEffectPlugin() : GlxEffectPluginBase( HELIX_EFFECT )
+{
+    mEffectFileList.append(QString(":/data/helix.fxml"));
+    mEffectFileList.append(QString(":/data/fadein.fxml"));
+}
+
+void GlxHelixEffectPlugin::setUpItems( QList< QGraphicsItem * > &  items )
+{
+    if ( items.count() < 2 ) 
+        return;
+   
+    items.at(0)->setPos(0,0);
+    items.at(1)->setPos(0,0);
+}
+
+QString GlxHelixEffectPlugin::effectName() 
+{ 
+    return ( "Helix" ) ; 
+}
+
+GlxHelixEffectPlugin::~GlxHelixEffectPlugin()
+{
+    mEffectFileList.clear();
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ui/viewutilities/effectplugin/src/glxzoominoutplugin.cpp	Thu Jul 22 16:33:32 2010 +0100
@@ -0,0 +1,41 @@
+/*
+* Copyright (c) 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:   ?Description
+*
+*/
+
+
+#include "glxzoominoutplugin.h"
+#include "glxuistd.h"
+
+GlxZoomInOutEffectPlugin::GlxZoomInOutEffectPlugin() : GlxEffectPluginBase( ZOOM_TO_FACE )
+{
+    mEffectFileList.append(QString(":/data/zoomin.fxml"));
+    mEffectFileList.append(QString(":/data/zoomout.fxml"));
+}
+
+void GlxZoomInOutEffectPlugin::setUpItems( QList< QGraphicsItem * > &  items )
+{
+    if ( items.count() < 2 ) 
+        return;
+    
+    mItem = items.at(1);
+    mItem->setPos(0,0);
+    items.at(0)->setPos(0,0);
+}
+
+GlxZoomInOutEffectPlugin::~GlxZoomInOutEffectPlugin()
+{
+    mEffectFileList.clear();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ui/viewutilities/settingutility/inc/glxsetting.h	Thu Jul 22 16:33:32 2010 +0100
@@ -0,0 +1,117 @@
+/*
+* Copyright (c) 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:   ?Description
+*
+*/
+
+#ifndef GLXSETTING_H
+#define GLXSETTING_H
+
+
+#include <glxsettinginterface.h>
+
+class XQSettingsKey;
+class XQSettingsManager;
+class QStringList;
+
+#define NBR_SLIDESHOW_EFFECT 4
+
+/*
+ * This class is used for read and write the photos application related setting from the centrep.
+ */
+class GlxSetting : public GlxSettingInterface
+{
+
+public :
+    /*
+     * It will return the singlton object of this class
+     */
+	static GlxSettingInterface * instance(); 
+	    
+    /* 
+     * Returns the index to the selected transition effect
+     * This value is fetched from Central repository 
+     */
+    int slideShowEffectIndex() ;
+    
+    /*
+     * SlideShowSettingsView will call this API to set the index of the transition effect chosen. 
+     * This data will be written to the Central Repository
+     */
+     void setslideShowEffectIndex( int index );
+    
+    /* 
+     * Returns the index to the selected transition delay /
+     * This value is fetched from Central repository 
+     */
+    int slideShowDelayIndex();
+    
+    /*
+     * SlideShowSettingsView will call this API to set the index of the transition delay chosen. 
+     * This data will be written to the Central Repository
+     */
+    void setSlideShowDelayIndex( int index );
+    
+    /*
+     * It will return the slide show delay time for playing the slide show.
+     * This value is fetched for central repository
+     */
+    int slideShowDelayTime() ;
+    
+    /*
+     * This will return the list of effects as available in the central repository 
+     */
+    QStringList slideShowEffectList();
+    
+    /*
+     * This will return the effect ID based on the effect index 
+     * Effect index will be 0,1,2... and effect ID is GLX_EFFECT
+     * Effect id is store in the centrep with respect to index.
+     */
+    int slideShowEffectId( int index ) ;
+    
+protected :
+    /*
+     * Constructor
+     */
+    GlxSetting( );
+    
+    /*
+     * Copy Constructor
+     */
+    GlxSetting( GlxSetting & );
+    
+    /*
+     * Destructor
+     */
+    ~GlxSetting();
+	
+private :    
+    XQSettingsManager *mSettingsManager;
+    XQSettingsKey *mTransitionEffectCenrepKey;
+    XQSettingsKey *mTransitionDelayCenrepKey;
+    
+    XQSettingsKey *mSlideShowEffectCenRepKey[ NBR_SLIDESHOW_EFFECT ];
+    
+    
+    XQSettingsKey *mSlowCenRepKey;
+    XQSettingsKey *mMediumCenRepKey;
+    XQSettingsKey *mFastCenRepKey;
+    
+    static GlxSetting mObj;
+};
+
+
+
+#endif //GLXSETTING_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ui/viewutilities/settingutility/inc/glxsettinginterface.h	Thu Jul 22 16:33:32 2010 +0100
@@ -0,0 +1,103 @@
+/*
+* Copyright (c) 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:   ?Description
+*
+*/
+
+#ifndef GLXSETTINGINTERFACE_H
+#define GLXSETTINGINTERFACE_H
+
+#include <qglobal.h>
+
+#ifdef BUILD_GLXVIEWUTILITIES
+#define GLX_VIEWUTILITIES_EXPORT Q_DECL_EXPORT
+#else
+#define GLX_VIEWUTILITIES_EXPORT Q_DECL_IMPORT
+#endif
+
+class QStringList ;
+
+/*
+ * This is an interface for read and write the photos application related setting from the centrep.
+ */
+class GLX_VIEWUTILITIES_EXPORT GlxSettingInterface
+{
+
+public :
+    /*
+     * return the instance of the GlxSetting
+     */
+	static GlxSettingInterface * instance();
+    
+    /* 
+     * Returns the index to the selected transition effect
+     * This value is fetched from Central repository 
+     */
+    virtual int slideShowEffectIndex() = 0 ;
+    
+    /*
+     * SlideShowSettingsView will call this API to set the index of the transition effect chosen. 
+     * This data will be written to the Central Repository
+     */
+    virtual void setslideShowEffectIndex( int index ) = 0 ;
+    
+    /* 
+     * Returns the index to the selected transition delay 
+     * This value is fetched from Central repository 
+     */
+    virtual int slideShowDelayIndex() = 0 ;
+    
+    /*
+     * SlideShowSettingsView will call this API to set the index of the transition delay chosen. 
+     * This data will be written to the Central Repository
+     */
+    virtual void setSlideShowDelayIndex( int index ) = 0;
+    
+    /*
+     * It will return the slide show delay time for playing the slide show.
+     * This value is fetched for central repository
+     */
+    virtual int slideShowDelayTime() = 0;
+    
+    /*
+     * This will return the list of effects as available in the central repository 
+     */
+    virtual QStringList slideShowEffectList() = 0;
+    
+    /*
+     * This will return the effect ID based on the effect index 
+     * Effect index will be 0,1,2... and effect ID is GLX_EFFECT
+     * Effect id is store in the centrep with respect to index.
+     */
+    virtual int slideShowEffectId( int index ) = 0;
+    
+protected :
+    /*
+     * Constructor
+     */
+    GlxSettingInterface( );
+    
+    /*
+     * Copy Constructor
+     */
+    GlxSettingInterface( GlxSettingInterface & );
+    
+    /*
+     * Destructor
+     */
+    virtual ~GlxSettingInterface() ;
+};
+
+#endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ui/viewutilities/settingutility/src/glxsetting.cpp	Thu Jul 22 16:33:32 2010 +0100
@@ -0,0 +1,138 @@
+/*
+* Copyright (c) 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:   ?Description
+*
+*/
+
+#include <xqsettingsmanager.h>
+#include <xqsettingskey.h>
+#include <QStringList>
+
+#include "glxsetting.h"
+#include "glxeffectpluginresolver.h"
+#include "glxuistd.h"
+
+
+const TUint32 KGlxTransitionEffect     = 0x1;
+const TUint32 KGlxTransitionDelay  = 0x2;
+const TUint32 KGlxSlow  = 0x3;
+const TUint32 KGlxMeduim  = 0x4;
+const TUint32 KGlxFast  = 0x5;
+const TUint32 KGlxSlideShowEffect[ ]  = { 0x6, 0x7, 0x8, 0x9 };
+const TUint32 KCRUidGallery = 0x20007194;
+
+GlxSetting GlxSetting::mObj ;
+
+
+GlxSetting::GlxSetting(  ) 
+{
+    mSettingsManager = new XQSettingsManager();
+    mTransitionEffectCenrepKey = new XQSettingsKey( XQSettingsKey::TargetCentralRepository, KCRUidGallery , KGlxTransitionEffect );
+    mTransitionDelayCenrepKey = new XQSettingsKey( XQSettingsKey::TargetCentralRepository, KCRUidGallery , KGlxTransitionDelay );
+    mSlowCenRepKey = new XQSettingsKey( XQSettingsKey::TargetCentralRepository, KCRUidGallery ,KGlxSlow );
+    mMediumCenRepKey = new XQSettingsKey( XQSettingsKey::TargetCentralRepository, KCRUidGallery ,KGlxMeduim );
+    mFastCenRepKey = new XQSettingsKey( XQSettingsKey::TargetCentralRepository, KCRUidGallery ,KGlxFast );
+
+    for ( int i = 0; i < NBR_SLIDESHOW_EFFECT; i++ ) {
+        mSlideShowEffectCenRepKey[ i ] = new XQSettingsKey( XQSettingsKey::TargetCentralRepository, KCRUidGallery , KGlxSlideShowEffect[ i ] );
+    }
+}
+
+GlxSetting::GlxSetting( GlxSetting & )
+{
+
+}
+
+GlxSetting::~GlxSetting( )
+{            
+    delete mFastCenRepKey;
+    delete mMediumCenRepKey;
+    delete mSlowCenRepKey;
+    delete mTransitionDelayCenrepKey;
+    delete mTransitionEffectCenrepKey;
+    delete mSettingsManager;
+    
+    for ( int i = 0 ; i < NBR_SLIDESHOW_EFFECT ; i++ ) {
+        delete mSlideShowEffectCenRepKey[ i ];
+    }
+}
+
+GlxSettingInterface * GlxSetting::instance()
+{
+    return &mObj ;
+}
+
+int GlxSetting::slideShowEffectIndex()
+{
+    QVariant effectvalue = mSettingsManager->readItemValue(*mTransitionEffectCenrepKey);
+    return effectvalue.toInt();
+}
+
+void GlxSetting::setslideShowEffectIndex( int index )
+{
+    mSettingsManager->writeItemValue( *mTransitionEffectCenrepKey, index ) ;
+}
+
+int GlxSetting::slideShowDelayIndex()
+{
+    QVariant effectvalue = mSettingsManager->readItemValue(*mTransitionDelayCenrepKey);
+    return effectvalue.toInt();
+}
+
+void GlxSetting::setSlideShowDelayIndex( int index )
+{
+    mSettingsManager->writeItemValue(*mTransitionDelayCenrepKey, index);
+}
+
+int GlxSetting::slideShowDelayTime()
+{
+    QVariant effectvalue = mSettingsManager->readItemValue(*mTransitionDelayCenrepKey);
+    switch ( effectvalue.toInt() ) {
+    case SLOW:
+        return mSettingsManager->readItemValue(*mSlowCenRepKey).toInt();
+        
+    case MEDIUM:
+        return mSettingsManager->readItemValue(*mMediumCenRepKey).toInt();
+
+    case FAST:
+        return mSettingsManager->readItemValue(*mFastCenRepKey).toInt();
+
+     default:
+        return 3000;
+     }
+}
+
+QStringList GlxSetting::slideShowEffectList()
+{
+    QStringList effectList;
+    effectList.clear();
+    int effectId = 0;
+    
+    for ( int i = 0 ; i < NBR_SLIDESHOW_EFFECT ; i++ ) {
+        effectId = mSettingsManager->readItemValue( * mSlideShowEffectCenRepKey[ i ] ).toInt() ;
+        effectList << GlxEffectPluginResolver::effectName ( effectId );
+    }
+    
+    return effectList;
+}
+
+int GlxSetting::slideShowEffectId( int index )
+{
+    if ( index >= NBR_SLIDESHOW_EFFECT || index < 0 ) {
+       return NO_EFFECT ;
+    }
+    
+    return mSettingsManager->readItemValue( * mSlideShowEffectCenRepKey[ index ] ).toInt() ;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ui/viewutilities/settingutility/src/glxsettinginterface.cpp	Thu Jul 22 16:33:32 2010 +0100
@@ -0,0 +1,37 @@
+/*
+* Copyright (c) 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:   ?Description
+*
+*/
+
+#include <glxsettinginterface.h>
+#include <glxsetting.h>
+
+GlxSettingInterface::GlxSettingInterface()
+{
+}
+
+GlxSettingInterface::~GlxSettingInterface()
+{
+}
+
+GlxSettingInterface::GlxSettingInterface( GlxSettingInterface & )
+{
+}
+
+GlxSettingInterface * GlxSettingInterface::instance()
+{
+    return GlxSetting::instance();
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ui/viewutilities/viewutilities.pro	Thu Jul 22 16:33:32 2010 +0100
@@ -0,0 +1,72 @@
+#/* 
+#* Copyright (c) 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:
+#*
+#*/ 
+TEMPLATE = lib
+TARGET = glxviewutilities
+
+DEPENDPATH += . settingutiliy/inc settingutility/src
+CONFIG += hb
+
+LIBS += -lxqsettingsmanager
+
+DEFINES += BUILD_GLXVIEWUTILITIES
+
+INCLUDEPATH += . ../inc \
+          ../../inc \
+          ../../loggers/loggerqt/inc \
+          ../../traces \
+          /epoc32/include/mw/hgwidgets
+
+symbian: { 
+TARGET.UID3 = 0x2000718E
+INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
+TARGET.EPOCALLOWDLLDATA = 1
+TARGET.CAPABILITY = ALL -TCB 
+MMP_RULES += SMPSAFE
+}
+
+# Input
+HEADERS += settingutility/inc/glxsetting.h \
+           settingutility/inc/glxsettinginterface.h \
+           effectplugin/inc/glxeffectpluginbase.h \
+           effectplugin/inc/glxfadeeffectplugin.h \
+           effectplugin/inc/glxflipeffectplugin.h \
+           effectplugin/inc/glxzoominoutplugin.h \
+           effectplugin/inc/glxhelixeffectplugin.h \
+           effectplugin/inc/glxeffectpluginresolver.h \
+           effectengine/inc/glxtransitioneffect.h \
+           effectengine/inc/glxeffectengine.h 
+	   	     
+SOURCES += settingutility/src/glxsetting.cpp \
+           settingutility/src/glxsettinginterface.cpp \
+           effectplugin/src/glxfadeeffectplugin.cpp \
+           effectplugin/src/glxflipeffectplugin.cpp \
+           effectplugin/src/glxzoominoutplugin.cpp \
+           effectplugin/src/glxhelixeffectplugin.cpp \
+           effectplugin/src/glxeffectpluginresolver.cpp \
+           effectengine/src/glxtransitioneffect.cpp \
+           effectengine/src/glxeffectengine.cpp
+
+DEFINES += QT_NO_DEBUG_OUTPUT QT_NO_WARNING_OUTPUT 
+
+defBlock = \      
+"$${LITERAL_HASH}if defined(EABI)" \
+"DEFFILE  ../eabi/glxviewutilities.def" \
+	 "$${LITERAL_HASH}else" \
+	 "DEFFILE  ../bwins/glxviewutilities.def" \
+             "$${LITERAL_HASH}endif"
+	
+MMP_RULES += defBlock
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ui/widgets/bwins/glxzoomwidgetu.def	Thu Jul 22 16:33:32 2010 +0100
@@ -0,0 +1,42 @@
+EXPORTS
+	?dataChanged@GlxZoomWidget@@IAEXVQModelIndex@@0@Z @ 1 NONAME ; void GlxZoomWidget::dataChanged(class QModelIndex, class QModelIndex)
+	?limitRequiredSize@GlxZoomWidget@@AAEXAAVQSizeF@@@Z @ 2 NONAME ; void GlxZoomWidget::limitRequiredSize(class QSizeF &)
+	?cleanUp@GlxZoomWidget@@QAEXXZ @ 3 NONAME ; void GlxZoomWidget::cleanUp(void)
+	?setMinMaxZValue@GlxZoomWidget@@QAEXHH@Z @ 4 NONAME ; void GlxZoomWidget::setMinMaxZValue(int, int)
+	?sendDecodeRequest@GlxZoomWidget@@QAEXH@Z @ 5 NONAME ; void GlxZoomWidget::sendDecodeRequest(int)
+	??0GlxZoomWidget@@QAE@PAVQGraphicsItem@@@Z @ 6 NONAME ; GlxZoomWidget::GlxZoomWidget(class QGraphicsItem *)
+	?qt_metacast@GlxZoomWidget@@UAEPAXPBD@Z @ 7 NONAME ; void * GlxZoomWidget::qt_metacast(char const *)
+	?staticMetaObject@GlxZoomWidget@@2UQMetaObject@@B @ 8 NONAME ; struct QMetaObject const GlxZoomWidget::staticMetaObject
+	?tr@GlxZoomWidget@@SA?AVQString@@PBD0H@Z @ 9 NONAME ; class QString GlxZoomWidget::tr(char const *, char const *, int)
+	?sceneEvent@GlxZoomWidget@@MAE_NPAVQEvent@@@Z @ 10 NONAME ; bool GlxZoomWidget::sceneEvent(class QEvent *)
+	?trUtf8@GlxZoomWidget@@SA?AVQString@@PBD0@Z @ 11 NONAME ; class QString GlxZoomWidget::trUtf8(char const *, char const *)
+	?getFocusedImage@GlxZoomWidget@@AAE?AVQPixmap@@XZ @ 12 NONAME ; class QPixmap GlxZoomWidget::getFocusedImage(void)
+	?setModel@GlxZoomWidget@@QAEXPAVQAbstractItemModel@@@Z @ 13 NONAME ; void GlxZoomWidget::setModel(class QAbstractItemModel *)
+	?finalizeWidgetTransform@GlxZoomWidget@@AAEXXZ @ 14 NONAME ; void GlxZoomWidget::finalizeWidgetTransform(void)
+	?executeGestureEvent@GlxZoomWidget@@AAE_NPAVQGraphicsItem@@PAVQGestureEvent@@@Z @ 15 NONAME ; bool GlxZoomWidget::executeGestureEvent(class QGraphicsItem *, class QGestureEvent *)
+	?zoomImage@GlxZoomWidget@@AAEXMVQPointF@@@Z @ 16 NONAME ; void GlxZoomWidget::zoomImage(float, class QPointF)
+	?activate@GlxZoomWidget@@QAEXXZ @ 17 NONAME ; void GlxZoomWidget::activate(void)
+	?connectDecodeRequestToPinchEvent@GlxZoomWidget@@QAEXXZ @ 18 NONAME ; void GlxZoomWidget::connectDecodeRequestToPinchEvent(void)
+	?indexChanged@GlxZoomWidget@@QAEXH@Z @ 19 NONAME ; void GlxZoomWidget::indexChanged(int)
+	?animateZoomIn@GlxZoomWidget@@QAEXVQPointF@@@Z @ 20 NONAME ; void GlxZoomWidget::animateZoomIn(class QPointF)
+	?getStaticMetaObject@GlxZoomWidget@@SAABUQMetaObject@@XZ @ 21 NONAME ; struct QMetaObject const & GlxZoomWidget::getStaticMetaObject(void)
+	?animationTimeLineFinished@GlxZoomWidget@@QAEXXZ @ 22 NONAME ; void GlxZoomWidget::animationTimeLineFinished(void)
+	?qt_metacall@GlxZoomWidget@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 23 NONAME ; int GlxZoomWidget::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?zoomWidgetMovedBackground@GlxZoomWidget@@IAEXH@Z @ 24 NONAME ; void GlxZoomWidget::zoomWidgetMovedBackground(int)
+	?indexChanged@GlxZoomWidget@@QAEXXZ @ 25 NONAME ; void GlxZoomWidget::indexChanged(void)
+	?animateZoomOut@GlxZoomWidget@@QAEXVQPointF@@@Z @ 26 NONAME ; void GlxZoomWidget::animateZoomOut(class QPointF)
+	?timerEvent@GlxZoomWidget@@MAEXPAVQTimerEvent@@@Z @ 27 NONAME ; void GlxZoomWidget::timerEvent(class QTimerEvent *)
+	?adjustGestureCenter@GlxZoomWidget@@AAEXAAVQPointF@@AAM@Z @ 28 NONAME ; void GlxZoomWidget::adjustGestureCenter(class QPointF &, float &)
+	?metaObject@GlxZoomWidget@@UBEPBUQMetaObject@@XZ @ 29 NONAME ; struct QMetaObject const * GlxZoomWidget::metaObject(void) const
+	?decodedImageAvailable@GlxZoomWidget@@QAEXXZ @ 30 NONAME ; void GlxZoomWidget::decodedImageAvailable(void)
+	??_EGlxZoomWidget@@UAE@I@Z @ 31 NONAME ; GlxZoomWidget::~GlxZoomWidget(unsigned int)
+	??1GlxZoomWidget@@UAE@XZ @ 32 NONAME ; GlxZoomWidget::~GlxZoomWidget(void)
+	?sceneEventFilter@GlxZoomWidget@@MAE_NPAVQGraphicsItem@@PAVQEvent@@@Z @ 33 NONAME ; bool GlxZoomWidget::sceneEventFilter(class QGraphicsItem *, class QEvent *)
+	?pinchGestureReceived@GlxZoomWidget@@IAEXH@Z @ 34 NONAME ; void GlxZoomWidget::pinchGestureReceived(int)
+	?setWindowSize@GlxZoomWidget@@QAEXVQSize@@@Z @ 35 NONAME ; void GlxZoomWidget::setWindowSize(class QSize)
+	?retreiveFocusedImage@GlxZoomWidget@@AAEXXZ @ 36 NONAME ; void GlxZoomWidget::retreiveFocusedImage(void)
+	?animationFrameChanged@GlxZoomWidget@@QAEXH@Z @ 37 NONAME ; void GlxZoomWidget::animationFrameChanged(int)
+	?tr@GlxZoomWidget@@SA?AVQString@@PBD0@Z @ 38 NONAME ; class QString GlxZoomWidget::tr(char const *, char const *)
+	?trUtf8@GlxZoomWidget@@SA?AVQString@@PBD0H@Z @ 39 NONAME ; class QString GlxZoomWidget::trUtf8(char const *, char const *, int)
+	?modelDestroyed@GlxZoomWidget@@IAEXXZ @ 40 NONAME ; void GlxZoomWidget::modelDestroyed(void)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ui/widgets/eabi/glxzoomwidgetu.def	Thu Jul 22 16:33:32 2010 +0100
@@ -0,0 +1,48 @@
+EXPORTS
+	_ZN13GlxZoomWidget10sceneEventEP6QEvent @ 1 NONAME
+	_ZN13GlxZoomWidget10timerEventEP11QTimerEvent @ 2 NONAME
+	_ZN13GlxZoomWidget11dataChangedE11QModelIndexS0_ @ 3 NONAME
+	_ZN13GlxZoomWidget11qt_metacallEN11QMetaObject4CallEiPPv @ 4 NONAME
+	_ZN13GlxZoomWidget11qt_metacastEPKc @ 5 NONAME
+	_ZN13GlxZoomWidget12indexChangedEi @ 6 NONAME
+	_ZN13GlxZoomWidget12indexChangedEv @ 7 NONAME
+	_ZN13GlxZoomWidget13animateZoomInE7QPointF @ 8 NONAME
+	_ZN13GlxZoomWidget13setWindowSizeE5QSize @ 9 NONAME
+	_ZN13GlxZoomWidget14animateZoomOutE7QPointF @ 10 NONAME
+	_ZN13GlxZoomWidget15getFocusedImageEv @ 11 NONAME
+	_ZN13GlxZoomWidget15setMinMaxZValueEii @ 12 NONAME
+	_ZN13GlxZoomWidget16sceneEventFilterEP13QGraphicsItemP6QEvent @ 13 NONAME
+	_ZN13GlxZoomWidget16staticMetaObjectE @ 14 NONAME DATA 16
+	_ZN13GlxZoomWidget17limitRequiredSizeER6QSizeF @ 15 NONAME
+	_ZN13GlxZoomWidget17sendDecodeRequestEi @ 16 NONAME
+	_ZN13GlxZoomWidget19adjustGestureCenterER7QPointFRf @ 17 NONAME
+	_ZN13GlxZoomWidget19executeGestureEventEP13QGraphicsItemP13QGestureEvent @ 18 NONAME
+	_ZN13GlxZoomWidget19getStaticMetaObjectEv @ 19 NONAME
+	_ZN13GlxZoomWidget20pinchGestureReceivedEi @ 20 NONAME
+	_ZN13GlxZoomWidget20retreiveFocusedImageEv @ 21 NONAME
+	_ZN13GlxZoomWidget21animationFrameChangedEi @ 22 NONAME
+	_ZN13GlxZoomWidget21decodedImageAvailableEv @ 23 NONAME
+	_ZN13GlxZoomWidget23finalizeWidgetTransformEv @ 24 NONAME
+	_ZN13GlxZoomWidget25animationTimeLineFinishedEv @ 25 NONAME
+	_ZN13GlxZoomWidget25zoomWidgetMovedBackgroundEi @ 26 NONAME
+	_ZN13GlxZoomWidget32connectDecodeRequestToPinchEventEv @ 27 NONAME
+	_ZN13GlxZoomWidget7cleanUpEv @ 28 NONAME
+	_ZN13GlxZoomWidget8activateEv @ 29 NONAME
+	_ZN13GlxZoomWidget8setModelEP18QAbstractItemModel @ 30 NONAME
+	_ZN13GlxZoomWidget9zoomImageEf7QPointF @ 31 NONAME
+	_ZN13GlxZoomWidgetC1EP13QGraphicsItem @ 32 NONAME
+	_ZN13GlxZoomWidgetC2EP13QGraphicsItem @ 33 NONAME
+	_ZN13GlxZoomWidgetD0Ev @ 34 NONAME
+	_ZN13GlxZoomWidgetD1Ev @ 35 NONAME
+	_ZN13GlxZoomWidgetD2Ev @ 36 NONAME
+	_ZNK13GlxZoomWidget10metaObjectEv @ 37 NONAME
+	_ZTI13GlxZoomWidget @ 38 NONAME
+	_ZTV13GlxZoomWidget @ 39 NONAME
+	_ZThn16_N13GlxZoomWidgetD0Ev @ 40 NONAME
+	_ZThn16_N13GlxZoomWidgetD1Ev @ 41 NONAME
+	_ZThn8_N13GlxZoomWidget10sceneEventEP6QEvent @ 42 NONAME
+	_ZThn8_N13GlxZoomWidget16sceneEventFilterEP13QGraphicsItemP6QEvent @ 43 NONAME
+	_ZThn8_N13GlxZoomWidgetD0Ev @ 44 NONAME
+	_ZThn8_N13GlxZoomWidgetD1Ev @ 45 NONAME
+	_ZN13GlxZoomWidget14modelDestroyedEv @ 46 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ui/widgets/glxzoomwidget/glxzoomwidget.pro	Thu Jul 22 16:33:32 2010 +0100
@@ -0,0 +1,59 @@
+#/* 
+#* Copyright (c) 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:
+#*
+#*/ 
+
+
+TEMPLATE = lib
+TARGET = glxzoomwidget
+
+CONFIG += hb
+
+DEFINES += GLXZOOMWIDGET_LIBRARY
+
+LIBS += -lglxmodelwrapper.dll \
+        -lglximagedecoderwrapper.dll \
+
+DEPENDPATH += . inc src
+INCLUDEPATH += . \
+            ../../../commonutilities/imagedecoderwrapper/inc \
+            ../uiengine/model/modelwrapper/inc \
+            ../../inc \
+            ../../../inc 
+
+symbian: { 
+TARGET.UID3 = 0x200104E4
+INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
+TARGET.EPOCALLOWDLLDATA = 1
+TARGET.CAPABILITY = ALL -TCB
+MMP_RULES += SMPSAFE 
+}
+
+exportfile = "inc/glxzoomwidget.h APP_LAYER_PLATFORM_EXPORT_PATH(glxzoomwidget.h)"
+exportfile += "inc/glxzoomwidget_global.h APP_LAYER_PLATFORM_EXPORT_PATH(glxzoomwidget_global.h)"
+BLD_INF_RULES.prj_exports += exportfile
+
+# Input
+HEADERS += inc/glxzoomwidget.h inc/glxzoomwidget_global.h
+SOURCES += src/glxzoomwidget.cpp
+
+defBlock = \      
+"$${LITERAL_HASH}if defined(EABI)" \
+"DEFFILE  ../eabi/glxzoomwidget.def" \
+	 "$${LITERAL_HASH}else" \
+	 "DEFFILE  ../bwins/glxzoomwidget.def" \
+             "$${LITERAL_HASH}endif"
+	
+MMP_RULES += defBlock
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ui/widgets/glxzoomwidget/inc/glxzoomwidget.h	Thu Jul 22 16:33:32 2010 +0100
@@ -0,0 +1,142 @@
+/*
+* Copyright (c) 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:   glxzoomwidget.h
+*               definition of the class glxzoomwidget which controls the Zoom behavior of coverflow.
+*
+*/
+#ifndef GLXZOOMWIDGET_H
+#define GLXZOOMWIDGET_H
+
+#include <QObject>
+#include <QGraphicsWidget>
+#include <QPixmap>
+#include <hbscrollarea.h>
+
+#include <glxzoomwidget_global.h>
+
+class QGestureEvent;
+class QPinchGesture;
+class HbIconItem;
+class GlxImageDecoderWrapper;
+class QTimeLine;
+
+const int MAXZVALUE = 100;
+const int MINZVALUE = 0;
+
+class GLXZOOMWIDGETSHARED_EXPORT GlxZoomWidget : public HbScrollArea
+{
+    Q_OBJECT
+
+    public:
+    GlxZoomWidget (QGraphicsItem *parent = NULL);
+    ~GlxZoomWidget ();
+    void setModel (QAbstractItemModel *model) ;
+    void indexChanged(int index);
+    void setWindowSize(QSize windowSize);
+    void cleanUp();
+    void activate();
+    void setMinMaxZValue(int minZvalue, int maxZvalue);
+    void connectDecodeRequestToPinchEvent();
+    
+    /*
+     * This is an overloaded function when an index is changes due to deletion 
+     */
+    void indexChanged();
+    
+    signals:
+    void pinchGestureReceived(int index);
+    void zoomWidgetMovedBackground(int index);
+
+    public slots:
+    //for Decoder support
+    void decodedImageAvailable();
+    void sendDecodeRequest(int index);
+
+	//for animation effects
+	void animateZoomIn(QPointF animRefPoint);
+	void animateZoomOut(QPointF animRefPoint);
+	void animationFrameChanged(int frameNumber);
+	void animationTimeLineFinished();
+
+    protected:
+    bool sceneEvent(QEvent *event);
+    bool sceneEventFilter(QGraphicsItem *watched,QEvent *event);
+    void timerEvent(QTimerEvent *event);
+    protected slots:
+    void dataChanged(QModelIndex startIndex, QModelIndex endIndex);
+    void modelDestroyed();
+
+    private:
+    bool executeGestureEvent(QGraphicsItem *source,QGestureEvent *event);
+    //Responsible for changing the transforms of the widget wrt the ZF and center
+	//Also adjusts the ZF, center and final size so as to respect the boundaries
+    void zoomImage(qreal zoomFactor, QPointF center);
+    //This API will adjust the gesture center to maintain boundaries
+	//called from GlxZoomWidget::zoomImage
+    void adjustGestureCenter(QPointF & gestureCenter, qreal& zoomFactor);
+    //this API will limit the max/min Zoom Size possible
+	//called from GlxZoomWidget::zoomImage
+    void limitRequiredSize(QSizeF &requiredSize);
+	//gets the latest focussed image from the model
+    void retreiveFocusedImage();
+    //finalize the transform and update the sizehint of mZoomWidget
+    void finalizeWidgetTransform();
+    //get the focused image from the model
+    QPixmap getFocusedImage();
+
+    //data members
+    private:
+    //view widgets
+    QGraphicsPixmapItem *mZoomItem;   //Item containing the pixmap
+    QGraphicsWidget *mZoomWidget;     //container :all scaling and transforms would be done on this widget
+    HbIconItem* mBlackBackgroundItem; //for setting black background
+
+    //view Z values 
+    //might push to layouts later
+
+    int mMinZValue ;
+    int mMaxZValue ;
+
+
+    //to be in sync with the model
+    QAbstractItemModel *mModel;
+    int mFocusIndex;
+
+    //size parameter
+    QSizeF mItemSize;        // the actual pixmap size. Keep it updated with latest pixmap size
+    QSizeF mStepCurrentSize; //to save the size before gesture started
+    QSizeF mCurrentSize;     //save sizes scaled by gesture
+    QSize mWindowSize;      //the window size
+    QSizeF mMinScaleSize;   //minimum posible size
+    QSizeF mMinDecScaleSize;   //the Minimum scale limit after which the image scaling down should be decelerated
+    QSizeF mMaxScaleSize;   // the maximum scale limit
+    QSizeF mMaxScaleDecSize;   // the Maximum scale limit after which the image scaling should be decelerated
+	//for animation effect
+	qreal m_FinalAnimatedScaleFactor;
+	QPointF m_AnimRefPoint;
+	QTimeLine *m_AnimTimeLine;
+    //for Decoder support
+    GlxImageDecoderWrapper* mImageDecoder;
+
+    //status flags
+	//To check if the decode request has already been send or not
+    bool mImageDecodeRequestSend; 
+	//To check if the pinch gesture is in progress to block any events to HbScrollArea
+    bool mPinchGestureOngoing; 
+    //to check if decoded image is available
+    bool mDecodedImageAvailable;
+    int mTimerId;
+
+};
+#endif  //GLXZOOMWIDGET_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ui/widgets/glxzoomwidget/inc/glxzoomwidget_global.h	Thu Jul 22 16:33:32 2010 +0100
@@ -0,0 +1,12 @@
+#ifndef GLXZOOMWIDGET_GLOBAL_H
+#define GLXZOOMWIDGET_GLOBAL_H
+
+#include <QtCore/qglobal.h>
+
+#if defined(GLXZOOMWIDGET_LIBRARY)
+#  define GLXZOOMWIDGETSHARED_EXPORT Q_DECL_EXPORT
+#else
+#  define GLXZOOMWIDGETSHARED_EXPORT Q_DECL_IMPORT
+#endif
+
+#endif // GLXZOOMWIDGET_GLOBAL_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ui/widgets/glxzoomwidget/src/glxzoomwidget.cpp	Thu Jul 22 16:33:32 2010 +0100
@@ -0,0 +1,526 @@
+ /*
+* Copyright (c) 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:   glxzoomwidget.cpp
+*               description of the class GlxGlxZoomWidget which controls the Zoom behavior of coverflow.
+*
+*/
+#include <QPinchGesture>
+#include <hbiconitem.h>
+#include <QTimeLine>
+#include <QGesture>
+#include "glximagedecoderwrapper.h"
+#include "glxmodelparm.h"
+#include "glxzoomwidget.h"
+
+GlxZoomWidget::GlxZoomWidget(QGraphicsItem *parent):HbScrollArea(parent), mModel(NULL), mMinZValue(MINZVALUE), mMaxZValue(MAXZVALUE), mImageDecodeRequestSend(false), mPinchGestureOngoing(false), mDecodedImageAvailable(false), mTimerId(0)
+{
+    grabGesture(Qt::PinchGesture);
+    grabGesture(Qt::TapGesture);
+    setAcceptTouchEvents(true) ;
+    setFrictionEnabled(false);
+    setZValue(mMinZValue);
+    //create the child items and background
+    mZoomWidget = new QGraphicsWidget(this);
+    mZoomItem = new QGraphicsPixmapItem(mZoomWidget);
+    mZoomItem->setTransformationMode(Qt::SmoothTransformation);
+    //the black background
+    //replace when a proper substitute for setting backgrounds is known
+    mBlackBackgroundItem = new HbIconItem(this);
+    mBlackBackgroundItem->setBrush(QBrush(Qt::black));
+    mBlackBackgroundItem->hide();
+    //does not work so is commented
+    //setBackgroundItem(mBlackBackgroundItem);
+
+    //initializing the image decoder
+    mImageDecoder = new GlxImageDecoderWrapper;
+
+	//inititalizing the timer for animation
+	m_AnimTimeLine = new QTimeLine(500, this);
+	m_AnimTimeLine->setFrameRange(0, 100);
+	connect(m_AnimTimeLine, SIGNAL(frameChanged(int)), this, SLOT(animationFrameChanged(int)));
+	connect(m_AnimTimeLine, SIGNAL(finished()), this, SLOT(animationTimeLineFinished()));
+}
+
+GlxZoomWidget::~GlxZoomWidget()
+{
+    //disconnect all existing signals
+    disconnect(this,SIGNAL( pinchGestureReceived(int) ), this, SLOT( sendDecodeRequest(int) ) );
+    //no Null checks required
+    delete mZoomItem;
+//    delete mZoomWidget; //as this is a content widegt it will automatically be deleted
+    delete mBlackBackgroundItem;
+    //reset the decoder to cancel pending tasks
+    if(mImageDecoder) {
+        mImageDecoder->resetDecoder();
+        delete mImageDecoder;
+    }
+}
+
+void GlxZoomWidget::setModel (QAbstractItemModel *model)
+{
+    if(model)
+    {
+        mModel = model;
+        retreiveFocusedImage(); //Update mZoomItem with focused Image
+        connect( mModel, SIGNAL( dataChanged(QModelIndex,QModelIndex) ), this, SLOT( dataChanged(QModelIndex,QModelIndex) ) );
+        connect( mModel, SIGNAL( destroyed() ), this, SLOT( modelDestroyed() ) );
+    }
+}
+
+void GlxZoomWidget::setWindowSize(QSize windowSize)
+{
+    mWindowSize = windowSize;
+    mBlackBackgroundItem->setGeometry(QRectF(QPointF(0,0), mWindowSize));
+    //try to reset the max and min zoomed size here
+}
+
+void GlxZoomWidget::indexChanged(int index)
+{
+    Q_UNUSED(index);
+    if(mFocusIndex != index) {
+        mImageDecoder->resetDecoder();//reset the decoder first to cancel pending tasks
+        mImageDecodeRequestSend = false;
+        mDecodedImageAvailable = false;
+        retreiveFocusedImage();  //Update mZoomItem with focused Image
+    }
+}
+
+void GlxZoomWidget::cleanUp()
+{
+    if(mModel) {
+        disconnect( mModel, SIGNAL( dataChanged(QModelIndex,QModelIndex) ), this, SLOT( dataChanged(QModelIndex,QModelIndex) ) );
+        disconnect( mModel, SIGNAL( destroyed() ), this, SLOT( modelDestroyed() ) );
+        mModel = NULL;
+    }
+    if(mImageDecoder) {
+        mImageDecoder->resetDecoder();
+    }
+    mZoomItem->setPixmap(QPixmap());
+}
+
+void GlxZoomWidget::activate()
+{
+}
+
+void GlxZoomWidget::setMinMaxZValue(int minZvalue, int maxZvalue)
+{
+    mMinZValue = minZvalue;
+    mMaxZValue = maxZvalue;
+}
+
+void GlxZoomWidget::connectDecodeRequestToPinchEvent()
+{
+    connect(this,SIGNAL( pinchGestureReceived(int) ), this, SLOT( sendDecodeRequest(int) ), Qt::QueuedConnection );
+}
+
+bool GlxZoomWidget::sceneEvent(QEvent *event)
+{
+    bool consume(false);
+    if (event->type() == QEvent::Gesture) {
+        consume = executeGestureEvent(this, static_cast<QGestureEvent*>(event));
+    }
+    if(!consume)
+    {
+        consume = HbScrollArea::sceneEvent(event);
+    }
+    return consume;
+}
+
+bool GlxZoomWidget::sceneEventFilter(QGraphicsItem *watched,QEvent *event)
+{
+     qDebug("GlxCoverFlow::eventFilter " );
+    bool consume = false;
+    if (event->type() == QEvent::Gesture) {
+        consume = executeGestureEvent(watched, static_cast<QGestureEvent*>(event));
+    }
+
+    if(!consume) {
+        consume = HbScrollArea::sceneEventFilter(watched,event);
+    }
+    return consume;
+
+}
+
+bool GlxZoomWidget::executeGestureEvent(QGraphicsItem *source,QGestureEvent *event)
+{
+         if(QTapGesture *gesture = static_cast<QTapGesture *>(event->gesture(Qt::TapGesture))) {        
+            if (gesture->state() == Qt::GestureFinished) {
+                if(!mTimerId) {
+                    mTimerId = startTimer(500);
+                }
+            else {
+                killTimer(mTimerId);
+                mTimerId = 0;
+                animateZoomOut(gesture->position());
+            }
+        }
+        event->accept(gesture);
+        return true;
+    }
+     if (QGesture *pinch = event->gesture(Qt::PinchGesture))  {
+       QPinchGesture* pinchG = static_cast<QPinchGesture *>(pinch);
+       QPinchGesture::ChangeFlags changeFlags = pinchG->changeFlags();
+       if (changeFlags & QPinchGesture::ScaleFactorChanged) {
+            mPinchGestureOngoing = true;
+            //bring the zoom widget to foreground
+            setZValue(mMaxZValue);
+            //show the black background
+            mBlackBackgroundItem->setParentItem(parentItem());
+            mBlackBackgroundItem->setZValue(mMaxZValue - 1);
+            mBlackBackgroundItem->show();
+
+            //retreive the gesture values
+            qreal value = pinchG->scaleFactor() / pinchG->lastScaleFactor();
+            QPointF center = pinchG->property("centerPoint").toPointF();
+            //set the gesture center to the scene coordinates
+            QPointF sceneGestureCenter = source->sceneTransform().map(center);
+            zoomImage(value, sceneGestureCenter);
+
+        }
+       if (pinchG->state() == Qt::GestureStarted) {
+           emit pinchGestureReceived(mFocusIndex);
+       }
+
+       if (pinchG->state() == Qt::GestureFinished) {
+           if(mStepCurrentSize != mCurrentSize) {
+               //For giving a spring effect when user has zoomed more than normal.
+               if(mStepCurrentSize.width() > mMaxScaleDecSize.width())   {
+                   //scale the image to limited size
+                   qreal value = mMaxScaleDecSize.width()/mCurrentSize.width();
+                   QPointF center(mWindowSize.width()/2, mWindowSize.height()/2);
+                   QPointF sceneGestureCenter = source->sceneTransform().map(center);
+                   zoomImage(value, sceneGestureCenter);
+               }
+               mPinchGestureOngoing = false;
+                //finalize the transforms to the geometry else panning will not work
+                finalizeWidgetTransform();
+           }
+//push the Zoom widget to background when zoomed image size nears FS image
+           if(mStepCurrentSize.width() <= mMinDecScaleSize.width()*1.3)  {
+               mBlackBackgroundItem->hide();
+               //push the widget back to background
+               setZValue(mMinZValue);
+               emit zoomWidgetMovedBackground(mFocusIndex);
+               //do not reset the transform here as it will then zoom-in the widget to decoded image size
+           }
+       }
+       //gesture accepted
+       return true;
+     }
+     //gesture rejected
+     if(!mPinchGestureOngoing) {
+         return false; 
+     }
+     return true;
+
+}
+
+void GlxZoomWidget::zoomImage(qreal zoomFactor, QPointF center)
+{
+    adjustGestureCenter(center, zoomFactor);
+    QSizeF requiredSize(mCurrentSize.width()*zoomFactor, mCurrentSize.height()*zoomFactor);
+    limitRequiredSize(requiredSize);
+    if(requiredSize != mCurrentSize) {
+        QTransform zoomTransform = mZoomWidget->transform();
+        QPointF transformedCenter = mZoomWidget->sceneTransform().inverted().map(center);
+        zoomTransform.translate(transformedCenter.x(),transformedCenter.y());
+        zoomTransform.scale(requiredSize.width()/mCurrentSize.width(), requiredSize.height()/mCurrentSize.height());
+        zoomTransform.translate(-transformedCenter.x(),-transformedCenter.y());
+        mZoomWidget->setTransform(zoomTransform);
+        mCurrentSize = requiredSize;
+    }
+
+}
+
+
+void GlxZoomWidget::limitRequiredSize(QSizeF &requiredSize)
+{
+    if(requiredSize.width() > mMaxScaleSize.width() ) {
+        requiredSize = mMaxScaleSize ;
+    }
+    else if(requiredSize.width() < mMinDecScaleSize.width() ) {
+        requiredSize = mMinDecScaleSize ;
+    }
+
+
+}
+
+//makes sure that the gesture is on the screen center if the image is smaller than the screen
+void GlxZoomWidget::adjustGestureCenter(QPointF & gestureCenter, qreal& zoomFactor)
+{
+    if(zoomFactor > 1 &&zoomFactor > 1.2 )  {
+        zoomFactor = 1.2;
+    }
+
+    if(zoomFactor < 1 &&zoomFactor < 0.8 )   {
+        zoomFactor = 0.8;
+    }
+    QSizeF requiredSize(mCurrentSize.width()*zoomFactor, mCurrentSize.height()*zoomFactor);
+    //keep smaller image centered
+    if(mCurrentSize.width() <= mWindowSize.width() )
+    {
+        gestureCenter.setX(mWindowSize.width()/2);
+
+    }
+    if(mCurrentSize.height() <= mWindowSize.height())
+    {
+        gestureCenter.setY(mWindowSize.height()/2);
+
+    }
+    //maintains the boundary of the edges for zoom out conditions
+    if(zoomFactor < 1)
+    {
+        QPointF itemOriginPos = mZoomWidget->sceneTransform().map(QPointF(0,0));
+        bool hasWidthExceededWindow = mCurrentSize.width() > mWindowSize.width();
+        bool hasHeightExceededWindow = mCurrentSize.height() > mWindowSize.height();
+        if(itemOriginPos.x() >= 0)  {
+        //image has crossed left boundry leaving blank space
+            if(hasWidthExceededWindow) {
+                //stick the gesture to the left corner
+                gestureCenter.setX(itemOriginPos.x());
+            }
+        }
+        //Check if the right boundry can be adjusted
+        if(itemOriginPos.x()+ mCurrentSize.width() <= mWindowSize.width()) {
+                //Image is before the right boundry leaving blank space
+                if(hasWidthExceededWindow) {
+                    //stick the gesture to the right corner
+                    gestureCenter.setX(itemOriginPos.x()+ mCurrentSize.width());
+                }
+        }
+        //check if the upper boundry could be adjusted
+        if(itemOriginPos.y() >= 0) {
+                //image has crossed the upper boundry leaving blank space
+                if(hasHeightExceededWindow) {
+                    //stick the image to the upper boundry
+                    gestureCenter.setY(itemOriginPos.y());
+                }
+        }
+        //check if the lower boundry could be adjusted
+        if(itemOriginPos.y()+ mCurrentSize.height() <= mWindowSize.height()) {
+        //Image is before the right boundry leaving blank space
+            if(hasHeightExceededWindow) {
+                //stick the image to the right corner
+                gestureCenter.setY(itemOriginPos.y()+ mCurrentSize.height());
+            }
+
+        }
+    }
+    //control the zoom Factor to boundaries
+    if(mCurrentSize.width() > mWindowSize.width() && requiredSize.width() <= mWindowSize.width())
+    {
+        zoomFactor =  mWindowSize.width()/mCurrentSize.width();
+
+    }
+    else if(mCurrentSize.height() > mWindowSize.height() && requiredSize.height() <= mWindowSize.height())
+    {
+        zoomFactor =  mWindowSize.height()/mCurrentSize.height();
+
+    }
+
+    //reduce the ZF so as to show a decelerated effect at max/min levels
+
+    if(mCurrentSize.width() > mMaxScaleDecSize.width() && zoomFactor > 1 ) {
+        zoomFactor = 1.0 + ((zoomFactor-1.0)/6) ;
+    }
+        if(mCurrentSize.width() < mMinDecScaleSize.width() && zoomFactor < 1 ) {
+        zoomFactor = 1.0 - ((1.0-zoomFactor)/6) ;
+    }
+
+
+}
+
+//get the latest focused image and set it to mZoomItem
+void GlxZoomWidget::retreiveFocusedImage()
+{
+
+    QPixmap targetPixmap(getFocusedImage());
+    //initialize all the variables wrt the focussed pixmap
+    mZoomWidget->resetTransform();
+    mItemSize = targetPixmap.size();
+    mMaxScaleSize = mItemSize;
+    mMaxScaleSize.scale(mWindowSize*13, Qt::KeepAspectRatio);
+    mMaxScaleDecSize = mItemSize;
+    mMaxScaleDecSize.scale(mWindowSize*7, Qt::KeepAspectRatio);
+    mMinScaleSize = mItemSize* 0.7;
+    mMinDecScaleSize = mItemSize;
+    QPointF originPos = sceneTransform().map(QPointF(0,0));
+    mZoomWidget->setGeometry(QRectF(QPointF(mWindowSize.width()/2 - mItemSize.width()/2,mWindowSize.height()/2 - mItemSize.height()/2),mItemSize )); //chk this
+    mZoomWidget->setPreferredSize(mItemSize);
+    mZoomItem->setPixmap(targetPixmap);
+    mCurrentSize = mItemSize;
+    mStepCurrentSize = mItemSize;
+    setContentWidget(mZoomWidget);
+    show();
+}
+
+
+void GlxZoomWidget::dataChanged(QModelIndex startIndex, QModelIndex endIndex)
+{
+    if(mFocusIndex >= startIndex.row() && mFocusIndex <= endIndex.row()) {
+        //get the latest image from the model
+        //will replace a decoded image if callback is received after decoded image is received so a fix is required
+        //retreiveFocusedImage();
+        if(!mDecodedImageAvailable)  {
+        QPixmap targetPixmap(getFocusedImage());
+        mItemSize = targetPixmap.size();
+        mMaxScaleSize = mItemSize;
+        mMaxScaleSize.scale(mWindowSize*13, Qt::KeepAspectRatio);
+        mMaxScaleDecSize = mItemSize;
+        mMaxScaleDecSize.scale(mWindowSize*7, Qt::KeepAspectRatio);
+        mMinScaleSize = mItemSize* 0.7;
+        mMinDecScaleSize = mItemSize;
+        mZoomItem->setPixmap(targetPixmap);
+        finalizeWidgetTransform();
+        }
+    }
+}
+
+void GlxZoomWidget::modelDestroyed()
+{
+    mModel = NULL ;    
+}
+
+void GlxZoomWidget::indexChanged()
+    {
+    retreiveFocusedImage();
+    }
+
+void GlxZoomWidget::decodedImageAvailable()
+{
+    //new bitmap with better resolution is available
+    //so set it to the item
+    QPixmap decodedPixmap = mImageDecoder->getPixmap();
+    disconnect(mImageDecoder, SIGNAL(pixmapDecoded()), this, SLOT(decodedImageAvailable()));
+    if(decodedPixmap.isNull()){
+        return;
+    }
+    mDecodedImageAvailable = true;
+    mZoomItem->setPixmap(decodedPixmap);
+    mItemSize = decodedPixmap.size();
+    //this is important if not done then old transforms will be applied on the new image
+    finalizeWidgetTransform();
+}
+
+void GlxZoomWidget::sendDecodeRequest(int index)
+{
+    if(!mImageDecodeRequestSend) {
+        QString imagePath = (mModel->data(mModel->index(index,0),GlxUriRole)).value<QString>();
+        mImageDecoder->decodeImage(imagePath);
+        connect(mImageDecoder, SIGNAL(pixmapDecoded()), this, SLOT(decodedImageAvailable()));
+        mImageDecodeRequestSend = true;
+    }
+}
+
+
+void GlxZoomWidget::finalizeWidgetTransform()
+{
+    QPointF widgetPos = mZoomWidget->sceneTransform().map(QPointF(0,0)); //Map the origin wrt scene
+    mZoomWidget->resetTransform();
+    mZoomWidget->scale(mCurrentSize.width()/mItemSize.width(), mCurrentSize.height()/mItemSize.height());
+    mZoomWidget->setGeometry(QRectF(widgetPos , mCurrentSize));
+    // this updates HbScrollArea on the sizeHint of ZoomWidget
+    mZoomWidget->setPreferredSize(mCurrentSize);
+    mStepCurrentSize = mCurrentSize;
+}
+
+QPixmap GlxZoomWidget::getFocusedImage()
+{
+    mFocusIndex = mModel->data(mModel->index(0,0),GlxFocusIndexRole).value<int>();
+    QVariant iconVariant = mModel->data(mModel->index(mFocusIndex,0),GlxFsImageRole);
+    QVariant sizeVariant = mModel->data(mModel->index(mFocusIndex,0),GlxDimensionsRole);
+    QPixmap targetPixmap;
+    //retreive pixmap from the HbIcon received from model
+    //should change the model to return and save pixmaps and convert to HbIcons Instead
+    if ( iconVariant.isValid() &&  iconVariant.canConvert<HbIcon> () ) {
+         QIcon itemIcon = iconVariant.value<HbIcon>().qicon();
+         QSize itemSize = itemIcon.actualSize(mWindowSize);
+         QSize scaleSize;
+         if(sizeVariant.isValid() &&  sizeVariant.canConvert<QSize> ()) {
+             scaleSize = sizeVariant.toSize();
+             if(!(scaleSize.width() < mWindowSize.width() && scaleSize.height() < mWindowSize.height()))  {
+                 scaleSize = mWindowSize;
+             }
+         }
+         targetPixmap = itemIcon.pixmap(itemSize).scaled(scaleSize, Qt::KeepAspectRatio);
+         mItemSize = targetPixmap.size();
+    }
+    return targetPixmap;
+
+}
+
+
+
+
+
+void GlxZoomWidget::animateZoomIn(QPointF animRefPoint)
+{
+      emit pinchGestureReceived(mFocusIndex);
+            //bring the zoom widget to foreground
+            setZValue(mMaxZValue);
+            //show the black background
+            mBlackBackgroundItem->setParentItem(parentItem());
+            mBlackBackgroundItem->setZValue(mMaxZValue - 1);
+            mBlackBackgroundItem->show();
+	m_AnimRefPoint = animRefPoint;
+    QSizeF requiredSize = mItemSize;
+    requiredSize.scale(mWindowSize*3.5, Qt::KeepAspectRatio);
+	m_FinalAnimatedScaleFactor = requiredSize.width()/mMinDecScaleSize.width();
+	m_AnimTimeLine->setDirection(QTimeLine::Forward);
+	m_AnimTimeLine->start();
+  //  zoomImage(5, m_AnimRefPoint);
+
+}
+void GlxZoomWidget::animateZoomOut(QPointF animRefPoint)
+{
+	m_AnimRefPoint = animRefPoint;
+	m_FinalAnimatedScaleFactor = mMinDecScaleSize.width()/mCurrentSize.width();
+	//m_AnimTimeLine->setDirection(QTimeLine::Backward);
+	m_AnimTimeLine->start();
+}
+void GlxZoomWidget::animationFrameChanged(int frameNumber)
+{
+qreal scaleFactor = 1;
+	if(m_FinalAnimatedScaleFactor > 1) {
+        scaleFactor = (1.0 + (((m_FinalAnimatedScaleFactor - 1)/100)*frameNumber))/(mCurrentSize.width()/mMinDecScaleSize.width());
+	}
+	if(m_FinalAnimatedScaleFactor < 1) {
+        scaleFactor = (m_FinalAnimatedScaleFactor+ (((1 - m_FinalAnimatedScaleFactor)/100)*frameNumber))/(mCurrentSize.width()/mMinDecScaleSize.width());
+	}
+
+	zoomImage(scaleFactor, m_AnimRefPoint);
+
+}
+void GlxZoomWidget::animationTimeLineFinished()
+{
+	finalizeWidgetTransform();
+//push the Zoom widget to background when zoomed image size nears FS image
+           if(mStepCurrentSize.width() <= mMinDecScaleSize.width()*1.3)  {
+               mBlackBackgroundItem->hide();
+               //push the widget back to background
+               setZValue(mMinZValue);
+               emit zoomWidgetMovedBackground(mFocusIndex);
+               //do not reset the transform here as it will then zoom-in the widget to decoded image size
+           }
+}
+
+
+void GlxZoomWidget::timerEvent(QTimerEvent *event)
+{
+    if(mTimerId == event->timerId())
+    {
+        killTimer(mTimerId);
+        mTimerId = 0;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ui/widgets/widgets.pro	Thu Jul 22 16:33:32 2010 +0100
@@ -0,0 +1,19 @@
+#/* 
+#* Copyright (c) 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:
+#*
+#*/ 
+TEMPLATE    = subdirs
+CONFIG += ordered
+SUBDIRS	    = glxzoomwidget