Revision: 201039 RCL_3 PDK_3.0.4
authorDremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Wed, 13 Oct 2010 14:32:09 +0300
branchRCL_3
changeset 75 01504893d9cb
parent 68 5b238bc8ffb6
child 77 0a4059b7d4fe
Revision: 201039 Kit: 201041
photos_plat/gallery_utilities_api/inc/glxmediageneraldefs.h
photosgallery/collectionframework/datasource/plugins/glxdatasourcemde2.5/src/glxdatasourcetaskmds.cpp
photosgallery/common/src/glxfilterfactory.cpp
photosgallery/controllers/fetcher/data/glxfetcherdialog.rss
photosgallery/controllers/fetcher/inc/glxfetchercontainer.h
photosgallery/controllers/fetcher/inc/glxfetcherdialog.h
photosgallery/controllers/fetcher/src/glxfetcher.cpp
photosgallery/controllers/fetcher/src/glxfetchercontainer.cpp
photosgallery/controllers/fetcher/src/glxfetcherdialog.cpp
photosgallery/controllers/imageviewer/bwins/glximageviewermanageru.def
photosgallery/controllers/imageviewer/eabi/glximageviewermanageru.def
photosgallery/controllers/imageviewer/group/glximageviewermanager.mmp
photosgallery/controllers/imageviewer/inc/glximageviewermanager.h
photosgallery/controllers/imageviewer/src/glximageviewermanager.cpp
photosgallery/gallery/inc/glxappui.h
photosgallery/gallery/loc/photos.loc
photosgallery/gallery/src/glxappui.cpp
photosgallery/help/data/xhtml.zip
photosgallery/imgvwr/src/glxivwrappui.cpp
photosgallery/slideshow/engine/inc/shwconstants.h
photosgallery/slideshow/engine/tsrc/group/bld.inf
photosgallery/slideshow/engine/tsrc/group/t_cshweffectcontrol.mmp
photosgallery/slideshow/engine/tsrc/group/t_cshweffects.mmp
photosgallery/slideshow/engine/tsrc/group/t_cshwmusiccontrol.mmp
photosgallery/slideshow/engine/tsrc/group/t_cshwplaybackfactory.mmp
photosgallery/slideshow/engine/tsrc/group/t_cshwsettingsmodel.mmp
photosgallery/slideshow/engine/tsrc/group/t_cshwslideshowengine.mmp
photosgallery/slideshow/engine/tsrc/group/t_cshwzoomandpaneffect.mmp
photosgallery/slideshow/engine/tsrc/stubs/stub_tglxlayoutsplitter.cpp
photosgallery/slideshow/engine/tsrc/stubs/stub_tglxlayoutsplitter.h
photosgallery/slideshow/engine/tsrc/stubs/tmglxvisuallist_adapter.cpp
photosgallery/slideshow/engine/tsrc/stubs/tmglxvisuallist_adapter.h
photosgallery/slideshow/engine/tsrc/stubs/tmshweffectmanager_adapter.cpp
photosgallery/slideshow/engine/tsrc/stubs/tmshweffectmanager_adapter.h
photosgallery/slideshow/engine/tsrc/t_cshweffectcontrol/t_cshweffectcontrol.cpp
photosgallery/slideshow/engine/tsrc/t_cshweffectcontrol/t_cshweffectcontrol.h
photosgallery/slideshow/engine/tsrc/t_cshweffectcontrol/t_cshweffectcontrol_dllmain.cpp
photosgallery/slideshow/engine/tsrc/t_cshweffects/t_cshweffects.cpp
photosgallery/slideshow/engine/tsrc/t_cshweffects/t_cshweffects.h
photosgallery/slideshow/engine/tsrc/t_cshweffects/t_cshweffects_dllmain.cpp
photosgallery/slideshow/engine/tsrc/t_cshwmusiccontrol/t_cshwmusiccontrol.cpp
photosgallery/slideshow/engine/tsrc/t_cshwmusiccontrol/t_cshwmusiccontrol.h
photosgallery/slideshow/engine/tsrc/t_cshwmusiccontrol/t_cshwmusiccontrol_dllmain.cpp
photosgallery/slideshow/engine/tsrc/t_cshwplaybackfactory/t_cshwplaybackfactory.cpp
photosgallery/slideshow/engine/tsrc/t_cshwplaybackfactory/t_cshwplaybackfactory.h
photosgallery/slideshow/engine/tsrc/t_cshwplaybackfactory/t_cshwplaybackfactory_dllmain.cpp
photosgallery/slideshow/engine/tsrc/t_cshwsettingsmodel/t_cshwsettingsmodel.cpp
photosgallery/slideshow/engine/tsrc/t_cshwsettingsmodel/t_cshwsettingsmodel.h
photosgallery/slideshow/engine/tsrc/t_cshwsettingsmodel/t_cshwsettingsmodelDllMain.cpp
photosgallery/slideshow/engine/tsrc/t_cshwzoomandpaneffect/t_cshwzoomandpaneffect.cpp
photosgallery/slideshow/engine/tsrc/t_cshwzoomandpaneffect/t_cshwzoomandpaneffect.h
photosgallery/slideshow/engine/tsrc/t_cshwzoomandpaneffect/t_cshwzoomandpaneffect_dllmain.cpp
photosgallery/slideshow/settingsdialog/data/shwsettingsdialog.rss
photosgallery/slideshow/settingsdialog/src/shwslideshowsettingslist.cpp
photosgallery/slideshow/view/group/shwslideshowviewplugin.mmp
photosgallery/slideshow/view/inc/shwslideshowview.h
photosgallery/slideshow/view/src/shwslideshowview.cpp
photosgallery/slideshow/view/src/shwslideshowvolumecontrol.cpp
photosgallery/slideshow/view/src/shwslideshowvolumecontrol.h
photosgallery/viewframework/commandhandlers/commandhandlerbase/group/glxcommandhandlerbase.mmp
photosgallery/viewframework/commandhandlers/commandhandlerbase/inc/glxmpxcommandcommandhandler.h
photosgallery/viewframework/commandhandlers/commandhandlerbase/src/glxmpxcommandcommandhandler.cpp
photosgallery/viewframework/commandhandlers/commoncommandhandlers/inc/glxcommandhandlerslideshow.h
photosgallery/viewframework/commandhandlers/commoncommandhandlers/src/glxcommandhandlerdelete.cpp
photosgallery/viewframework/commandhandlers/commoncommandhandlers/src/glxcommandhandlernewmedia.cpp
photosgallery/viewframework/commandhandlers/commoncommandhandlers/src/glxcommandhandlerrename.cpp
photosgallery/viewframework/commandhandlers/commoncommandhandlers/src/glxcommandhandlersend.cpp
photosgallery/viewframework/commandhandlers/commoncommandhandlers/src/glxcommandhandlerslideshow.cpp
photosgallery/viewframework/commandhandlers/commoncommandhandlers/src/glxmediaselectionpopup.cpp
photosgallery/viewframework/commandhandlers/inc/glxcommandhandlers.hrh
photosgallery/viewframework/dataprovider/inc/glxdetailsboundcommand.hrh
photosgallery/viewframework/dataprovider/inc/glxdrmgiftexturecreator.h
photosgallery/viewframework/dataprovider/src/glxdetailsboundcommand.cpp
photosgallery/viewframework/dataprovider/src/glxdrmgiftexturecreator.cpp
photosgallery/viewframework/dataprovider/src/glxmulmodelproviderbase.cpp
photosgallery/viewframework/drmutility/group/glxdrmutility.mmp
photosgallery/viewframework/drmutility/src/glxdrmutility.cpp
photosgallery/viewframework/medialists/src/glxattributecontext.cpp
photosgallery/viewframework/medialists/src/glxcachemanager.cpp
photosgallery/viewframework/plugins/fullscreenviewplugin/data/glxfullscreenviewdata.rss
photosgallery/viewframework/plugins/gridviewplugin/data/glxgridviewdata.rss
photosgallery/viewframework/texturemanager/group/glxtexturemanager.mmp
photosgallery/viewframework/texturemanager/inc/glxbitmapdecoderwrapper.h
photosgallery/viewframework/texturemanager/src/glxbitmapdecoderwrapper.cpp
photosgallery/viewframework/texturemanager/src/glxtexturemanagerimpl.cpp
photosgallery/viewframework/tvout/src/glxhdmicontroller.cpp
photosgallery/viewframework/tvout/src/glxhdmisurfaceupdater.cpp
photosgallery/viewframework/uiutilities/data/glxuiutilities.rss
photosgallery/viewframework/uiutilities/group/glxuiutilities.mmp
photosgallery/viewframework/uiutilities/inc/glxmmcnotifier.h
photosgallery/viewframework/uiutilities/inc/glxvisualutilities.h
photosgallery/viewframework/uiutilities/src/glxmmcnotifier.cpp
photosgallery/viewframework/uiutilities/src/glxprogressindicator.cpp
photosgallery/viewframework/uiutilities/src/glxtextentrypopup.cpp
photosgallery/viewframework/uiutilities/src/glxvisualutilities.cpp
photosgallery/viewframework/views/cloudview/group/glxcloudview.mmp
photosgallery/viewframework/views/cloudview/inc/glxcloudviewcontrol.h
photosgallery/viewframework/views/cloudview/inc/glxcloudviewimp.h
photosgallery/viewframework/views/cloudview/inc/glxtagscontextmenucontrol.h
photosgallery/viewframework/views/cloudview/src/glxcloudviewcontrol.cpp
photosgallery/viewframework/views/cloudview/src/glxcloudviewimp.cpp
photosgallery/viewframework/views/cloudview/src/glxtagscontextmenucontrol.cpp
photosgallery/viewframework/views/fullscreenview/inc/glxfullscreenviewimp.h
photosgallery/viewframework/views/fullscreenview/src/glxfullscreenviewimp.cpp
photosgallery/viewframework/views/gridview/bwins/glxgridviewu.def
photosgallery/viewframework/views/gridview/eabi/glxgridviewu.def
photosgallery/viewframework/views/gridview/inc/glxgridviewmlobserver.h
photosgallery/viewframework/views/gridview/src/glxgridviewcontainer.cpp
photosgallery/viewframework/views/gridview/src/glxgridviewimp.cpp
photosgallery/viewframework/views/gridview/src/glxgridviewmlobserver.cpp
photosgallery/viewframework/views/listview/src/glxlistviewimp.cpp
photosgallery/viewframework/views/listview/src/glxpreviewthumbnailbinding.cpp
photosgallery/viewframework/views/metadatadialog/data/glxmetadatadialog.rss
photosgallery/viewframework/views/metadatadialog/inc/glximgvwrmetadatacontainer.h
photosgallery/viewframework/views/metadatadialog/inc/glximgvwrmetadatadialog.h
photosgallery/viewframework/views/metadatadialog/inc/glxmetadatacontainer.h
photosgallery/viewframework/views/metadatadialog/inc/glxmetadatadialog.h
photosgallery/viewframework/views/metadatadialog/inc/mglxmetadatadialogobserver.h
photosgallery/viewframework/views/metadatadialog/src/glximgvwrmetadatacontainer.cpp
photosgallery/viewframework/views/metadatadialog/src/glximgvwrmetadatadialog.cpp
photosgallery/viewframework/views/metadatadialog/src/glxmetadatacontainer.cpp
photosgallery/viewframework/views/metadatadialog/src/glxmetadatadialog.cpp
photosgallery/viewframework/views/viewbase/bwins/glxviewbaseu.def
photosgallery/viewframework/views/viewbase/eabi/glxviewbaseu.def
photosgallery/viewframework/views/viewbase/group/glxviewbase.mmp
photosgallery/viewframework/views/viewbase/inc/glxviewbase.h
photosgallery/viewframework/views/viewbase/src/glxmedialistviewbase.cpp
photosgallery/viewframework/views/viewbase/src/glxtoolbarcontroller.cpp
photosgallery/viewframework/views/viewbase/src/glxviewbase.cpp
photosgallery/viewframework/views/zoomview/src/glxzoomcontrol.cpp
photosgallery/viewframework/visuallistmanager/src/glxvisuallistwindow.cpp
--- a/photos_plat/gallery_utilities_api/inc/glxmediageneraldefs.h	Wed Sep 15 12:13:06 2010 +0300
+++ b/photos_plat/gallery_utilities_api/inc/glxmediageneraldefs.h	Wed Oct 13 14:32:09 2010 +0300
@@ -114,9 +114,4 @@
     EGlxDrmRightsValid,
     EGlxDrmRightsInvalid
     }; 
-
-// Maximum length of a media pop-up text
-// Example, Album/Tag/Title/Description's length is set to 40 chars maximum
-const TInt KMaxMediaPopupTextLength = 40;
-
 #endif // __T_GLXMEDIAGENERALDEFS_H__
--- a/photosgallery/collectionframework/datasource/plugins/glxdatasourcemde2.5/src/glxdatasourcetaskmds.cpp	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/collectionframework/datasource/plugins/glxdatasourcemde2.5/src/glxdatasourcetaskmds.cpp	Wed Oct 13 14:32:09 2010 +0300
@@ -314,10 +314,6 @@
         {
         __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
--- a/photosgallery/common/src/glxfilterfactory.cpp	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/common/src/glxfilterfactory.cpp	Wed Oct 13 14:32:09 2010 +0300
@@ -230,20 +230,16 @@
 // Creates a filter most suited for the SlideShow
 // ---------------------------------------------------------------------------
 //   
-EXPORT_C CMPXFilter* TGlxFilterFactory::CreateSlideShowFilterFromExistingFilterL(
-        CMPXFilter* aOriginalFilter, CMPXCollectionPath* aSelectedListPath,
-        TBool aReverseSortDirection)
-    {
+EXPORT_C CMPXFilter* TGlxFilterFactory::CreateSlideShowFilterFromExistingFilterL(   CMPXFilter* aOriginalFilter,
+                                                                                    CMPXCollectionPath* aSelectedListPath,
+                                                                                    TBool aReverseSortDirection)
+    {     
     TGlxFilterProperties filterProperties;
-    // Ref:NShwSlideshow::TPlayDirection
-	// EPlayForwards = 0; Chronological Order (Older to newer)
-    // EPlayBackwards = 1; Reverse Chronological Order (Newer to older)
-    filterProperties.iSortDirection = aReverseSortDirection ? 
-            EGlxFilterSortDirectionNotUsed : EGlxFilterSortDirectionReverse;
+    filterProperties.iSortDirection = aReverseSortDirection ? EGlxFilterSortDirectionReverse : EGlxFilterSortDirectionNotUsed;
     filterProperties.iItemType = EGlxFilterImage;
     filterProperties.iPath = aSelectedListPath;
-    filterProperties.iNoDRM = ETrue;
-    filterProperties.iExcludeAnimation = ETrue;
+    filterProperties.iNoDRM = ETrue;;
+    filterProperties.iExcludeAnimation = ETrue;;
     return CreateCombinedFilterL(filterProperties, aOriginalFilter);
     }
     
--- a/photosgallery/controllers/fetcher/data/glxfetcherdialog.rss	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/controllers/fetcher/data/glxfetcherdialog.rss	Wed Oct 13 14:32:09 2010 +0300
@@ -152,19 +152,79 @@
         };
     }
 	
-RESOURCE DIALOG r_glx_fetcher_dialog
-    {
-    // blocking dialog with CBA and no border please
-    flags=EEikDialogFlagNoDrag | EEikDialogFlagFillAppClientRect |
-    EEikDialogFlagCbaButtons | EEikDialogFlagWait |
-    EEikDialogFlagNoBackgroundFade |EEikDialogFlagNoBorder;
-    buttons = R_AVKON_SOFTKEYS_CANCEL;
-    // Do not add any items
-    }
+RESOURCE MENU_BAR r_multiselect_ok_menubar
+	{
+	titles=
+		{
+		MENU_TITLE { menu_pane=r_multiselect_ok_menu; txt=""; }
+		};
+	}
+
+
+RESOURCE MENU_PANE r_multiselect_ok_menu
+	{
+    items=
+        {
+        MENU_ITEM
+            {
+            command=EAknSoftkeySelect; 
+            txt = qtn_cffh_options_select; 
+            },
 
-RESOURCE TBUF r_glx_softkey_cancel
-    {buf = text_softkey_cancel;}
+        MENU_ITEM 
+            {
+            command=EGlxCmdSelectMarked; 
+            txt = qtn_cffh_select_marked; 
+            },
+        MENU_ITEM
+			{
+			command = EGlxCmdStartMultipleMarking; 
+			txt = qtn_lgal_options_mark_multi;
+			},
+        MENU_ITEM 
+            {
+            command=EGlxCmdMarkingSubmenu;
+            txt = qtn_options_list; 
+            cascade = r_multiselect_marking_submenu; 
+            }
+        };
+	}
+
+	
+//End of MultiSelect	
+
+RESOURCE DIALOG r_modal_single_dialog
+  {
+  // blocking dialog with CBA and no border please
+  flags=EEikDialogFlagNoDrag | EEikDialogFlagFillAppClientRect |
+      EEikDialogFlagCbaButtons | EEikDialogFlagWait |
+          EEikDialogFlagNoBackgroundFade |EEikDialogFlagNoBorder;
+  buttons = R_AVKON_SOFTKEYS_CANCEL;
+  // Do not add any items
+  }
+
+RESOURCE DIALOG r_modal_multi_dialog
+  {
+  // blocking dialog with CBA and no border please
+  flags=EEikDialogFlagNoDrag | EEikDialogFlagFillAppClientRect |
+      EEikDialogFlagCbaButtons | EEikDialogFlagWait |
+          EEikDialogFlagNoBackgroundFade |EEikDialogFlagNoBorder;
+  buttons = R_AVKON_SOFTKEYS_CANCEL;
+  // Do not add any items
+  }
+
+RESOURCE TBUF r_glx_softkey_cancel  { buf = text_softkey_cancel; }
 
 RESOURCE TBUF r_glx_marking_mark
-    {buf=qtn_msk_mark;}
+    { buf=qtn_msk_mark; }
 
+// custom CBA resource for options - ok options menu - cancel
+RESOURCE CBA r_glx_softkeys_options_cancel_context
+    {
+    buttons =
+        {
+        CBA_BUTTON { id=EAknSoftkeyOptions; txt = text_softkey_option; },
+        CBA_BUTTON { id=EAknSoftkeyCancel; txt = text_softkey_cancel; },
+        CBA_BUTTON { id=EAknSoftkeyContextOptions; txt = text_softkey_option; }
+        };
+    }
--- a/photosgallery/controllers/fetcher/inc/glxfetchercontainer.h	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/controllers/fetcher/inc/glxfetchercontainer.h	Wed Oct 13 14:32:09 2010 +0300
@@ -178,7 +178,7 @@
     /**
      * Set the Icons
      */
-    void SetIconsL(TInt aIndex);
+    void SetIconsL(TInt index);
 	
     /**
      * This doesnt add up any value to the code, just to satisfy the compiler
--- a/photosgallery/controllers/fetcher/inc/glxfetcherdialog.h	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/controllers/fetcher/inc/glxfetcherdialog.h	Wed Oct 13 14:32:09 2010 +0300
@@ -75,7 +75,12 @@
          * @ref CEikDialog
          */
         TBool OkToExitL(TInt aKeycode);
-
+    
+        /**  
+         *   From MEikMenuObserver
+         */
+        void  DynInitMenuPaneL (TInt aResourceId, CEikMenuPane *aMenuPane) ;
+        
 	protected: // From CAknDialog
         /**  
          *   From MEikMenuObserver
@@ -121,6 +126,9 @@
          */
         SEikControlInfo CreateCustomControlL(TInt aControlType);
     
+    private: // CAknDialog
+        void HandlePointerEventL(const TPointerEvent& aPointerEvent);
+    
     private:// From MGlxEventObserver
     
         virtual void HandleDoubleTapEventL(TInt aCommandId);          
@@ -137,10 +145,12 @@
 	     */
 	    void HandleMMCRemovalL();
 
+    
     private:
         CGlxFetcherContainer* iFetcherContainer ;              //Container Object
         CGlxUiUtility* iUiUtility;                             // UiUtility
-
+        CAlfEnv* iEnv;                                         // Alf Environment
+    
         // Selected items array
         // Not Own. Owned by the client
         CDesCArray& iSelectedFiles;
--- a/photosgallery/controllers/fetcher/src/glxfetcher.cpp	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/controllers/fetcher/src/glxfetcher.cpp	Wed Oct 13 14:32:09 2010 +0300
@@ -199,11 +199,18 @@
 	        }
 	    }
 	// create the dialog first
-	iDialog = CGlxFetcherDialog::NewL(aSelectedFiles, iVerifier, iFilterType,
-            *iTitle, iIsMultiSelection);
+	iDialog =
+	    CGlxFetcherDialog::NewL( aSelectedFiles, iVerifier ,iFilterType ,*iTitle, iIsMultiSelection );
 	// Returns zero when Fetcher is cancelled by User.
 	
-	buttonId = iDialog->ExecuteLD( R_GLX_FETCHER_DIALOG );
+	if( iIsMultiSelection )
+		{
+		buttonId = iDialog->ExecuteLD( R_MODAL_MULTI_DIALOG );
+		}
+	else
+		{
+		buttonId = iDialog->ExecuteLD( R_MODAL_SINGLE_DIALOG );	
+		}
     // Return false if the fetcher was canceled by user
 	return ( 0 != buttonId && aSelectedFiles.Count()!=0);
   	}
--- a/photosgallery/controllers/fetcher/src/glxfetchercontainer.cpp	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/controllers/fetcher/src/glxfetchercontainer.cpp	Wed Oct 13 14:32:09 2010 +0300
@@ -32,6 +32,7 @@
 #include <AknsBasicBackgroundControlContext.h>      // Background Context
 
 #include <glxuistd.h>                               // KGlxFetchontextPriorityNormal and KGlxIconsFilename           
+#include <glxcollectionpluginall.hrh> 	            // All item collection plugin id
 #include <glxfilterfactory.h>                       // For Filters required in Medilaits
 #include <glxresourceutilities.h>                   // for CGlxResourceUtilities
 #include <glxfetcherdialog.rsg>                     // FOR GETTING Dialog ID AND RESOURCE ID
@@ -57,6 +58,11 @@
 #include "glxfetchercommandhandler.h"
 
 const TInt KPadding(7);
+const TInt KNoOfPages(4);
+const TInt KBufferTreshold(1);
+const TInt KItemsPerPage(18);
+const TInt KBufferSize(KNoOfPages * KItemsPerPage);
+const TInt KBufferTresholdSize(KBufferTreshold * KItemsPerPage);
 
 //-----------------------------------------------------------------------------
 // Two-phased constructor.
@@ -137,6 +143,7 @@
         }
     }
 
+
 // ---------------------------------------------------------------------------
 // CreateAndDisplayGridL
 // ---------------------------------------------------------------------------
@@ -162,7 +169,6 @@
 	    iMultipleMarkNotStarted = EFalse;
 	    }
 	}
-
 // ---------------------------------------------------------------------------
 // CreateMediaListL()
 // Creates a collection path
@@ -193,7 +199,6 @@
 	
 	CleanupStack::PopAndDestroy( path );
 	}
-
 // ---------------------------------------------------------------------------
 // CreateHgGridWidgetL
 // ---------------------------------------------------------------------------
@@ -247,9 +252,7 @@
     // This Displays the scrollbar at the opening of the Grid view
     iHgGrid->SetScrollBarTypeL(CHgScroller::EHgScrollerTimeStrip );
     // Enable Buffer support
-    iHgGrid->EnableScrollBufferL(*this, (KNoOfPages
-            * iUiUtility->VisibleItemsInPageGranularityL()),
-            KBufferTresholdSize);
+    iHgGrid->EnableScrollBufferL(*this, KBufferSize, KBufferTresholdSize);
     // Enable Marking support
     iHgGrid->SetMarkingObserver(*this);
 
@@ -262,12 +265,12 @@
 //  
 void CGlxFetcherContainer::CreateGridMediaListObserverL()
     {
-    iGlxGridMLObserver = CGlxGridViewMLObserver::NewL(*this, *iMediaList,
-            iHgGrid, iFilterType);
+    iGlxGridMLObserver = CGlxGridViewMLObserver::NewL(*iMediaList, iHgGrid,
+            iFilterType);
     }
     
 // ---------------------------------------------------------------------------
-// Request
+// BufferPositionChanged
 // ---------------------------------------------------------------------------
 //  
 void CGlxFetcherContainer::Request(TInt aRequestStart, TInt aRequestEnd,
@@ -276,7 +279,6 @@
     TRACER("CGlxFetcherContainer::Request()");
     TRAP_IGNORE(RequestL( aRequestStart, aRequestEnd ));
     }
-
 // ---------------------------------------------------------------------------
 // RequestL
 // ---------------------------------------------------------------------------
@@ -301,7 +303,7 @@
             visIndex = 0;
             }
 		
-        GLX_LOG_INFO1("CGlxFetcherContainer::Request - SetVisibleWindowIndex "
+        GLX_LOG_INFO1("CGlxGridViewImp::Request - SetVisibleWindowIndex "
                 "visIndex(%d)", visIndex);
         iMediaList->SetVisibleWindowIndexL(visIndex);
         }
@@ -312,14 +314,13 @@
         TInt lastOnScreen = firstIndex + iHgGrid->ItemsOnScreen() - 1;
         if (i >= firstIndex && i <= lastOnScreen)
             {
-            GLX_LOG_INFO1("CGlxFetcherContainer::Request - RefreshScreen i(%d)", i);
+            GLX_LOG_INFO1("CGlxGridViewImp::Request - RefreshScreen i(%d)", i);
             iHgGrid->RefreshScreen(i);
             }
         }
     }
-
 // ---------------------------------------------------------------------------
-// SetIconsL
+// SetIcons
 // ---------------------------------------------------------------------------
 //  
 void CGlxFetcherContainer::SetIconsL(TInt aIndex)
@@ -342,11 +343,11 @@
         CFbsBitmap* bitmap = new (ELeave) CFbsBitmap;
         bitmap->Duplicate( value->iBitmap->Handle());
         iHgGrid->ItemL(aIndex).SetIcon(CGulIcon::NewL(bitmap));
-        GLX_LOG_INFO1("### CGlxFetcherContainer::Request value-Index is %d",aIndex);
+        GLX_LOG_INFO1("### CGlxGridViewImp::Request value-Index is %d",aIndex);
         }
     else if (item.GetIconInfo(icon))
         {
-        GLX_LOG_INFO1("CGlxFetcherContainer::Request - icon(%d)", aIndex);
+        GLX_LOG_INFO1("CGlxGridViewImp::Request - icon(%d)", aIndex);
         CFbsBitmap* bitmap = NULL;
         CFbsBitmap* mask = NULL;
         AknsUtils::CreateIconLC(AknsUtils::SkinInstance(), KAknsIIDNone,
@@ -362,13 +363,13 @@
         iHgGrid->ItemL(aIndex).SetIcon(CGulIcon::NewL(bitmap, mask));
         CleanupStack::Pop(mask);
         CleanupStack::Pop(bitmap);
-        GLX_LOG_INFO1("### CGlxFetcherContainer::Request GetIconInfo-Index is %d",
+        GLX_LOG_INFO1("### CGlxGridViewImp::Request GetIconInfo-Index is %d",
                 aIndex);
         }
     else if (KErrNone != tnError && KErrNotSupported != tnError)
         {
         GLX_LOG_INFO2(
-                "CGlxFetcherContainer::Request - image_corrupted tnError(%d), "
+                "CGlxGridViewImp::Request - image_corrupted tnError(%d), "
                     "i(%d)", tnError, aIndex);
 
         CFbsBitmap* bitmap = NULL;
@@ -440,29 +441,22 @@
     }
 
 // ---------------------------------------------------------------------------
-// HandleSelectL
+// HandleSelect
 // ---------------------------------------------------------------------------
 //  
 void CGlxFetcherContainer::HandleSelectL( TInt aIndex )
     {
-    TRACER("CGlxFetcherContainer::HandleSelectL()");
-    GLX_LOG_INFO1("CGlxFetcherContainer::HandleSelectL(%d)", aIndex);
+    TRACER("CGlxGridViewImp::HandleSelect()");
     // Make sure that the Selection Index is inside medialist count
-    if (aIndex < iMediaList->Count() && aIndex >= 0)
+    if (aIndex <iMediaList->Count() && aIndex >=0)
         {
         // Setting the focus of the medialist
-        iMediaList->SetFocusL(NGlxListDefs::EAbsolute, aIndex);
-
-        //Show Left Soft Key when media is selected
-        CEikButtonGroupContainer* cbaContainer =
-                CEikButtonGroupContainer::Current();
-        cbaContainer->SetCommandSetL(R_AVKON_SOFTKEYS_OK_CANCEL);
-        cbaContainer->DrawDeferred();
+        iMediaList->SetFocusL(NGlxListDefs::EAbsolute, aIndex);        
         }
     }
 
 // ---------------------------------------------------------------------------
-// HandleOpenL
+// HandleOpen
 // ---------------------------------------------------------------------------
 //  
 void CGlxFetcherContainer::HandleOpenL( TInt aIndex )
@@ -488,7 +482,7 @@
 //  
 void CGlxFetcherContainer::HandleMarkingL( TInt aIndex, TBool/* aMarked*/ )
     {
-    TRACER("CGlxFetcherContainer::HandleMarkingL()");
+    TRACER("CGlxGridViewImp::HandleMarkingL()");
     HandleMultipleMarkingL(aIndex);
     iEventObserver.HandleMarkEventL();    
     }
@@ -499,7 +493,7 @@
 //  
 void CGlxFetcherContainer::HandleMultipleMarkingL(TInt aIndex )
     {
-    TRACER("CGlxFetcherContainer::HandleMultipleMarkingL()");
+    TRACER("CGlxGridViewImp::HandleMultipleMarkingL()");
     if(iMediaList->IsSelected(aIndex))
         {
         if(iHgGrid)
@@ -609,6 +603,7 @@
     return retVal;
     }
 
+
 // -----------------------------------------------------------------------------
 // Retrieve Uris
 // -----------------------------------------------------------------------------
--- a/photosgallery/controllers/fetcher/src/glxfetcherdialog.cpp	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/controllers/fetcher/src/glxfetcherdialog.cpp	Wed Oct 13 14:32:09 2010 +0300
@@ -142,6 +142,7 @@
     
 	// Get the Hitchcock environment.
     iUiUtility = CGlxUiUtility::UtilityL();
+    iEnv = iUiUtility->Env();
     iFetchUri = EFalse;
     iMMCNotifier = CGlxMMCNotifier::NewL(*this);
     }
@@ -207,7 +208,6 @@
 		    }
 		}
 	}
-
 //-----------------------------------------------------------------------------
 // CGlxFetcherDialog::OkToExitL
 //-----------------------------------------------------------------------------
@@ -394,6 +394,16 @@
     }
 
 //-----------------------------------------------------------------------------
+// CGlxFetcherDialog::DynInitMenuPaneL
+//-----------------------------------------------------------------------------
+void CGlxFetcherDialog::DynInitMenuPaneL(
+        TInt /*aResourceId*/, CEikMenuPane* /*aMenuPane*/ )
+    {
+    TRACER("CGlxFetcherDialog::DynInitMenuPaneL");
+    // No Implementation
+    }
+
+//-----------------------------------------------------------------------------
 // CGlxFetcherDialog::OfferKeyEventL
 //-----------------------------------------------------------------------------
 TKeyResponse CGlxFetcherDialog::OfferKeyEventL(const TKeyEvent& aKeyEvent,
@@ -404,15 +414,28 @@
     response = iFetcherContainer->OfferKeyEventL(aKeyEvent,aType);
  
     if(response == EKeyWasNotConsumed)
-        {
         response = CAknDialog::OfferKeyEventL(aKeyEvent,aType);
-        }
 
     return response;    
     }
 
 //-----------------------------------------------------------------------------
-// CGlxFetcherDialog::HandleDoubleTapEventL
+// CGlxFetcherDialog::HandlePointerEventL
+// Handles all pointer events to the screen.
+// Offers the events to the primary display control (container - widgets)
+// and also finally calls handlescreenbufferevent and draws the bitmap onto
+// the screen
+//-----------------------------------------------------------------------------
+void CGlxFetcherDialog::HandlePointerEventL(
+    const TPointerEvent& aPointerEvent)
+    {
+    TRACER("CGlxFetcherDialog::HandlePointerEventL");
+    CCoeControl::HandlePointerEventL( aPointerEvent );
+    iEnv->PrimaryDisplay().HandlePointerEventL( aPointerEvent );
+    }
+
+//-----------------------------------------------------------------------------
+// CGlxFetcherDialog::HandleDoubleTapEvent
 // Callback from the container for double tap events
 // Offers the event from container to Dialog
 //-----------------------------------------------------------------------------
--- a/photosgallery/controllers/imageviewer/bwins/glximageviewermanageru.def	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/controllers/imageviewer/bwins/glximageviewermanageru.def	Wed Oct 13 14:32:09 2010 +0300
@@ -1,13 +1,11 @@
 EXPORTS
-	?SetImageUriL@CGlxImageViewerManager@@QAEXABVTDesC16@@@Z @ 1 NONAME ; void CGlxImageViewerManager::SetImageUriL(class TDesC16 const &)
-	?CloseImageDecoder@CGlxImageViewerManager@@QAEXXZ @ 2 NONAME ; void CGlxImageViewerManager::CloseImageDecoder(void)
-	?Reset@CGlxImageViewerManager@@QAEXXZ @ 3 NONAME ; void CGlxImageViewerManager::Reset(void)
-	?ImageUri@CGlxImageViewerManager@@QAEPAVHBufC16@@XZ @ 4 NONAME ; class HBufC16 * CGlxImageViewerManager::ImageUri(void)
-	?ImageFileHandle@CGlxImageViewerManager@@QAEAAVRFile64@@XZ @ 5 NONAME ; class RFile64 & CGlxImageViewerManager::ImageFileHandle(void)
-	?InstanceL@CGlxImageViewerManager@@SAPAV1@XZ @ 6 NONAME ; class CGlxImageViewerManager * CGlxImageViewerManager::InstanceL(void)
-	?CreateImageDecoderL@CGlxImageViewerManager@@QAEXXZ @ 7 NONAME ; void CGlxImageViewerManager::CreateImageDecoderL(void)
-	?SetImageFileHandleL@CGlxImageViewerManager@@QAEXABVRFile@@@Z @ 8 NONAME ; void CGlxImageViewerManager::SetImageFileHandleL(class RFile const &)
-	?DeleteInstance@CGlxImageViewerManager@@QAEXXZ @ 9 NONAME ; void CGlxImageViewerManager::DeleteInstance(void)
-	?IsPrivate@CGlxImageViewerManager@@QAEHXZ @ 10 NONAME ; int CGlxImageViewerManager::IsPrivate(void)
-	?IsPrivateGif@CGlxImageViewerManager@@QAEHXZ @ 11 NONAME ; int CGlxImageViewerManager::IsPrivateGif(void)
+	?SetImageFileHandleL@CGlxImageViewerManager@@QAEXABVRFile@@@Z @ 1 NONAME ; void CGlxImageViewerManager::SetImageFileHandleL(class RFile const &)
+	?SetImageUriL@CGlxImageViewerManager@@QAEXABVTDesC16@@@Z @ 2 NONAME ; void CGlxImageViewerManager::SetImageUriL(class TDesC16 const &)
+	?DeleteInstance@CGlxImageViewerManager@@QAEXXZ @ 3 NONAME ; void CGlxImageViewerManager::DeleteInstance(void)
+	?Reset@CGlxImageViewerManager@@QAEXXZ @ 4 NONAME ; void CGlxImageViewerManager::Reset(void)
+	?IsPrivate@CGlxImageViewerManager@@QAEHXZ @ 5 NONAME ; int CGlxImageViewerManager::IsPrivate(void)
+	?ImageUri@CGlxImageViewerManager@@QAEPAVHBufC16@@XZ @ 6 NONAME ; class HBufC16 * CGlxImageViewerManager::ImageUri(void)
+	?ImageFileHandle@CGlxImageViewerManager@@QAEAAVRFile64@@XZ @ 7 NONAME ; class RFile64 & CGlxImageViewerManager::ImageFileHandle(void)
+	?InstanceL@CGlxImageViewerManager@@SAPAV1@XZ @ 8 NONAME ; class CGlxImageViewerManager * CGlxImageViewerManager::InstanceL(void)
+	?IsPrivateGif@CGlxImageViewerManager@@QAEHXZ @ 9 NONAME ; int CGlxImageViewerManager::IsPrivateGif(void)
 
--- a/photosgallery/controllers/imageviewer/eabi/glximageviewermanageru.def	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/controllers/imageviewer/eabi/glximageviewermanageru.def	Wed Oct 13 14:32:09 2010 +0300
@@ -1,15 +1,13 @@
 EXPORTS
-	_ZN22CGlxImageViewerManager12IsPrivateGifEv @ 1 NONAME
-	_ZN22CGlxImageViewerManager12SetImageUriLERK7TDesC16 @ 2 NONAME
-	_ZN22CGlxImageViewerManager14DeleteInstanceEv @ 3 NONAME
-	_ZN22CGlxImageViewerManager15ImageFileHandleEv @ 4 NONAME
-	_ZN22CGlxImageViewerManager17CloseImageDecoderEv @ 5 NONAME
-	_ZN22CGlxImageViewerManager19CreateImageDecoderLEv @ 6 NONAME
-	_ZN22CGlxImageViewerManager19SetImageFileHandleLERK5RFile @ 7 NONAME
-	_ZN22CGlxImageViewerManager5ResetEv @ 8 NONAME
-	_ZN22CGlxImageViewerManager8ImageUriEv @ 9 NONAME
-	_ZN22CGlxImageViewerManager9InstanceLEv @ 10 NONAME
-	_ZN22CGlxImageViewerManager9IsPrivateEv @ 11 NONAME
-	_ZTI22CGlxImageViewerManager @ 12 NONAME
-	_ZTV22CGlxImageViewerManager @ 13 NONAME
+	_ZN22CGlxImageViewerManager12SetImageUriLERK7TDesC16 @ 1 NONAME
+	_ZN22CGlxImageViewerManager14DeleteInstanceEv @ 2 NONAME
+	_ZN22CGlxImageViewerManager15ImageFileHandleEv @ 3 NONAME
+	_ZN22CGlxImageViewerManager19SetImageFileHandleLERK5RFile @ 4 NONAME
+	_ZN22CGlxImageViewerManager5ResetEv @ 5 NONAME
+	_ZN22CGlxImageViewerManager8ImageUriEv @ 6 NONAME
+	_ZN22CGlxImageViewerManager9InstanceLEv @ 7 NONAME
+	_ZN22CGlxImageViewerManager9IsPrivateEv @ 8 NONAME
+	_ZTI22CGlxImageViewerManager @ 9 NONAME
+	_ZTV22CGlxImageViewerManager @ 10 NONAME
+	_ZN22CGlxImageViewerManager12IsPrivateGifEv @ 11 NONAME
 
--- a/photosgallery/controllers/imageviewer/group/glximageviewermanager.mmp	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/controllers/imageviewer/group/glximageviewermanager.mmp	Wed Oct 13 14:32:09 2010 +0300
@@ -38,12 +38,12 @@
 
 USERINCLUDE             ../inc
 
-LIBRARY                 efsrv.lib
-LIBRARY                 euser.lib
+LIBRARY 				efsrv.lib
+LIBRARY					euser.lib
 LIBRARY                 caf.lib             // ContentAccess::CManager
 LIBRARY                 flogger.lib         // For Logging Tracer
 LIBRARY                 glxcommon.lib       // CGlxSingetonStore
 LIBRARY                 cone.lib            // ConeUtils
 LIBRARY                 platformenv.lib     // DriveInfo
-LIBRARY                 imageconversion.lib // CImageDecoder
+
 //EXPORTUNFROZEN
\ No newline at end of file
--- a/photosgallery/controllers/imageviewer/inc/glximageviewermanager.h	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/controllers/imageviewer/inc/glximageviewermanager.h	Wed Oct 13 14:32:09 2010 +0300
@@ -23,7 +23,7 @@
 #include <e32std.h>
 #include <e32base.h>
 #include <caf/manager.h>
-#include <imageconversion.h>
+
 // CLASS DECLARATION
 class RFile;
 class RFile64;
@@ -55,8 +55,6 @@
     IMPORT_C void SetImageUriL(const TDesC& aFileName);
     IMPORT_C void SetImageFileHandleL(const RFile& aFileHandle);
     IMPORT_C void Reset();
-    IMPORT_C void CreateImageDecoderL();    
-    IMPORT_C void CloseImageDecoder();
 
 private:
 
@@ -97,9 +95,6 @@
     /// Flag that stores if the gif file is in a private folder. 
     /// ETrue means the gif is from private path, else EFalse 
     TBool iIsPrivateGif;
-
-    /// Image Decoder, which keeps the file in use while viewing
-    CImageDecoder* iImageDecoder;
     };
 
 #endif // GLXIMAGEVIEWERMANAGER_H
--- a/photosgallery/controllers/imageviewer/src/glximageviewermanager.cpp	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/controllers/imageviewer/src/glximageviewermanager.cpp	Wed Oct 13 14:32:09 2010 +0300
@@ -26,7 +26,6 @@
 #include <caf/content.h>
 #include <driveinfo.h>
 #include <coeutils.h>
-#include <coemain.h>
 
 _LIT( KPrivateFolder, "\\Private\\" );
 _LIT( KGifFileMime, "image/gif" );
@@ -122,7 +121,6 @@
         User::Leave(KErrNotSupported);    
         }
     iImageUri = aFileName.AllocL();  
-    CreateImageDecoderL();
     }
 
 // ---------------------------------------------------------------------------
@@ -139,8 +137,6 @@
     delete iFile;
     iFile = NULL;
 
-	CloseImageDecoder();
-
     if (iIsPrivateGif)
         {
         iManager->DeleteFile(iImageUri->Des());
@@ -212,51 +208,3 @@
         }
     SetImageUriL( filePath );
     }
-
-// ---------------------------------------------------------------------------
-// CloseImageDecoder
-// ---------------------------------------------------------------------------
-//
-EXPORT_C void CGlxImageViewerManager::CloseImageDecoder()
-    {
-    TRACER("void CGlxImageViewerManager::CloseImageDecoder()");
-    if (iImageDecoder)
-        {
-        delete iImageDecoder;
-        iImageDecoder = NULL;
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CreateImageDecoderL
-// ---------------------------------------------------------------------------
-//
-EXPORT_C void CGlxImageViewerManager::CreateImageDecoderL()
-    {
-    TRACER("void CGlxImageViewerManager::CreateImageDecoderL()");
-
-    CloseImageDecoder();
-
-    TInt err = KErrNone;
-    if (IsPrivate())
-        {
-        if (&ImageFileHandle())
-            {
-            GLX_DEBUG1("CGlxImageViewerManager::CreateImageDecoderL() FH");
-            TRAP(err, iImageDecoder = CImageDecoder::FileNewL(
-                    ImageFileHandle(), ContentAccess::EPeek));
-            }
-        }
-    else
-        {
-        if (ImageUri())
-            {
-            GLX_DEBUG1("CGlxImageViewerManager::CreateImageDecoderL() FN");
-            TRAP(err, iImageDecoder = CImageDecoder::FileNewL(
-                    CCoeEnv::Static()->FsSession(), ImageUri()->Des()));
-            }
-        }
-
-    GLX_DEBUG2("CGlxImageViewerManager::CreateImageDecoderL() err(%d)", err);
-    User::LeaveIfError(err);
-    }
--- a/photosgallery/gallery/inc/glxappui.h	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/gallery/inc/glxappui.h	Wed Oct 13 14:32:09 2010 +0300
@@ -153,33 +153,25 @@
     void ReserveMemoryL(TEntryType aType);
 
     //OOM
-    /**
-     * Invoked by the OOM framework FreeRam event 
-     * to free the memory for other applications.
-     */
+    /*
+    *Invoked by the OOM framwork when photos app needs to free memory for other applications.
+    */
     void StartCleanupL();
 
     //OOM
-    /**
-     * Invoked by the OOM framework MemoryGood event 
-     * to stop the memory clean-up operation.
-     */
+    /*
+    *Invoked by the OOM framwork when photos app needs to free memory for other applications.
+    */
     void StopCleanupL();
-
-    /**
+	
+	/**
      * Check for updates via IAD.
      */
     void DoCheckForIADUpdatesL();
-    
     /**
      * close photos app.
      */
-    void ClosePhotosL();
-
-    /**
-     * Open navigational state at root level
-     */
-    void NavigateToMainListL();
+     void ClosePhotosL();
 
 private:
     MMPXViewUtility* iViewUtility;
@@ -210,17 +202,23 @@
      * IAD updater class
      */
     CGlxIadUpdate* iIadUpdate;
+	
+    /**
+    *This flag to chk whether red key has been pressed
+    */
+    TBool iEndKeyPressed;
 
     /**
-     * Timer to check for IAD updates 30 seconds after application startup.
+     *Timer to check for IAD updates 30 seconds after application startup.
      */
-    CPeriodic* iPeriodic;
+     CPeriodic* iPeriodic ;
+     
+     /**
+      * Flag to filter any spurious EPathChanged event from MPX Collection f/w.
+      */     
+     TBool iStateChangeRequested;
+} ;
 
-    /**
-     * Flag to filter any spurious EPathChanged event from MPX Collection f/w.
-     */
-    TBool iStateChangeRequested;
-    };
 
 #endif // C_GLXWERAPPUI_H
 
--- a/photosgallery/gallery/loc/photos.loc	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/gallery/loc/photos.loc	Wed Oct 13 14:32:09 2010 +0300
@@ -598,12 +598,6 @@
 //
 #define qtn_lgal_details_description        "Description"
 
-// d:Type field in the details view.
-// l:list_logical_template_5_title
-// r:8.0
-//
-#define qtn_lgal_details_type        "Type"
-
 // d:Location field in the details view.
 // l:list_logical_template_5_title
 // r:8.0
@@ -1358,129 +1352,3 @@
 // r:4.0
 //
 #define qtn_lgal_slideshow_softkey_end          "End"
-
-//-----------------------------------------------------------------------------
-// Removal of suites view - related strings
-//-----------------------------------------------------------------------------
-//
-// d:Icon text for "All" toolbar extn button
-// l:cell_tb_ext_pane_t1/opt1
-// r:11.0
-//
-#define qtn_lgal_toolbar_extension_all_nc "All"
-
-// d:Icon text for "All" toolbar extn button
-// d:%N will be replaced with count of items present in All
-// l:cell_tb_ext_pane_t1/opt1
-// r:11.0
-//
-#define qtn_lgal_toolbar_extension_all "All (%N)"	
-
-// d:Icon text for "Album" toolbar extn button
-// l:cell_tb_ext_pane_t1/opt1
-// r:11.0
-//
-#define qtn_lgal_toolbar_extension_album_nc "Albums"
-
-// d:Icon text for "Album" toolbar extn button
-// d:%N will be replaced with count of albums present
-// l:cell_tb_ext_pane_t1/opt1
-// r:11.0
-//
-#define qtn_lgal_toolbar_extension_album "Albums (%N)"
-
-// d:Icon text for "Tags" toolbar extn button
-// l:cell_tb_ext_pane_t1/opt1
-// r:11.0
-//
-#define qtn_lgal_toolbar_extension_tags_nc "Tags"
-
-// d:Icon text for "Tags" toolbar extn button
-// d:%N will be replaced with count of tags present
-// l:cell_tb_ext_pane_t1/opt1
-// r:11.0
-//
-#define qtn_lgal_toolbar_extension_tags "Tags (%N)"
-
-// d:Icon text for "Places" toolbar extn button
-// l:cell_tb_ext_pane_t1/opt1
-// r:11.0
-//
-#define qtn_lgal_toolbar_extension_places_nc "Places"
-
-// d:Icon text for "Places" toolbar extn button
-// d:%N will be replaced with count of places present
-// l:cell_tb_ext_pane_t1/opt1
-// r:11.0
-//
-#define qtn_lgal_toolbar_extension_places "Places (%N)"
-
-// d: Tooltip string for "Change View" toolbar item
-// l: popup_preview_text_window_t1
-// r: 11.0
-#define qtn_lgal_tooltip_change_view "Change View"
-
-// d: Tooltip string for "All" toolbar item
-// l: popup_preview_text_window_t1
-// r: 11.0
-#define qtn_lgal_tooltip_all "All"
-
-// d: Tooltip string for "Albums" toolbar item
-// l: popup_preview_text_window_t1
-// r: 11.0
-#define qtn_lgal_tooltip_albums "Albums"
-
-// d: Tooltip string for "Tags" toolbar item
-// l: popup_preview_text_window_t1
-// r: 11.0
-#define qtn_lgal_tooltip_tags "Tags"
-
-// d: Tooltip string for "places" toolbar item
-// l: popup_preview_text_window_t1
-// r: 11.0
-#define qtn_lgal_tooltip_places "Places"
-
-// d: Tooltip string for "New album" toolbar item
-// l: popup_preview_text_window_t1
-// r: 11.0
-#define qtn_lgal_preview_tooltip_new_album "New album"
-
-// d: Tooltip string for "New tag" toolbar item
-// l: popup_preview_text_window_t1
-// r: 11.0
-#define qtn_lgal_tooltip_new_tag "New Tag"
-
-// d: Tooltip string for "Sort" toolbar item
-// l: popup_preview_text_window_t1
-// r: 11.0
-#define qtn_lgal_tooltip_sort "Sort"
-
-// d: Options menu item to open All items in grid view
-// l: list_single_pane_t1_cp2
-// r: 11.0
-#define qtn_lgal_option_all "All"
-
-// d: Options menu item to open Albums list view
-// l: list_single_pane_t1_cp2
-// r: 11.0
-#define qtn_lgal_option_albums "Albums"
-
-// d: Options menu item to open Places list view
-// l: list_single_pane_t1_cp2
-// r: 11.0
-#define qtn_lgal_option_places "Places"
-
-// d: Options menu item to open Tags cloud view
-// l: list_single_pane_t1_cp2
-// r: 11.0
-#define qtn_lgal_option_tags "Tags"
-
-// d: "Birthday" option in select album pop-up or select tag popup
-// l:list_single_pane_t1
-// r: 11.0
-#define qtn_lgal_option_birthday "Birthday" 
-
-// d: "Personal" option in select album pop-up or select tag popup
-// l:list_single_pane_t1
-// r: 11.0
-#define qtn_lgal_option_personal "Personal"
--- a/photosgallery/gallery/src/glxappui.cpp	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/gallery/src/glxappui.cpp	Wed Oct 13 14:32:09 2010 +0300
@@ -60,10 +60,6 @@
 #include <hal_data.h>
 #include <oommonitorsession.h>
 #include <glxtracer.h>
-#include <glxmedialist.h>
-#include <glxmedialistiterator.h>
-#include <glxattributecontext.h>
-#include <glxattributeretriever.h>
 
 //OOM
 #include <oommonitorplugin.h>
@@ -123,6 +119,7 @@
     ReserveMemoryL(EEntryTypeStartUp);
     // publish zoom context, no zoom keys for now
     NGlxZoomStatePublisher::PublishStateL( EFalse );
+    iEndKeyPressed = EFalse;
     iStateChangeRequested = EFalse;
     }
 
@@ -133,6 +130,7 @@
 CGlxAppUi::~CGlxAppUi()
     {
     TRACER("CGlxAppUi::~CGlxAppUi()");
+	iEndKeyPressed = EFalse;
     if ( iNavigationalState )
         {
         iNavigationalState->RemoveObserver(*this);
@@ -245,7 +243,12 @@
     TRAPD(err, HandleActivationMessageL(aCommand, aDocumentName, aTail));
     if ( KErrNone != err )
         {
-        NavigateToMainListL();
+        // Open navigational state at root level
+        CMPXCollectionPath* newState = CMPXCollectionPath::NewL();
+        CleanupStack::PushL( newState );
+        iNavigationalState->NavigateToL( *newState );
+        iStateChangeRequested = ETrue;
+        CleanupStack::PopAndDestroy( newState );
         }
 
     //Start a timer to check for thr IAD update after 60 Secs.
@@ -450,7 +453,12 @@
 
     if (aData.Length() == 0 )
         {
-        NavigateToMainListL();
+        // Open navigational state at root level
+        CMPXCollectionPath* newState = CMPXCollectionPath::NewL();
+        CleanupStack::PushL(newState);
+        iNavigationalState->NavigateToL(*newState);
+        iStateChangeRequested = ETrue;
+        CleanupStack::PopAndDestroy(newState);
         }
     else
         {
@@ -460,21 +468,6 @@
     }
 
 // ---------------------------------------------------------------------------
-// NavigateToMainListL
-// ---------------------------------------------------------------------------
-//
-void CGlxAppUi::NavigateToMainListL()
-    {
-    TRACER("void CGlxAppUi::NavigateToMainListL()");
-    // Open navigational state at root level
-    CMPXCollectionPath* collPath = CMPXCollectionPath::NewL();
-    CleanupStack::PushL(collPath);
-    iNavigationalState->NavigateToL(*collPath);
-    iStateChangeRequested = ETrue;
-    CleanupStack::PopAndDestroy(collPath);
-    }
-
-// ---------------------------------------------------------------------------
 // HandleActivationMessageL
 // ---------------------------------------------------------------------------
 //
@@ -492,8 +485,8 @@
     RDesReadStream stream(aData);
     CleanupClosePushL(stream);
     stream >> msgUid;
-
-    switch (msgUid.iUid)
+    
+    switch ( msgUid.iUid )
         {
         case KGlxActivationCmdShowLastModified:
         case KGlxActivationCameraAlbum:
@@ -501,64 +494,17 @@
             {
             GLX_LOG_INFO("CGlxAppUi::HandleActivationMessageL: Creating Screen Clearer");
             iUiUtility->DisplayScreenClearerL();
-
             HBufC8* activationParam = HBufC8::NewLC(KMaxUidName);
-            // While harvesting is in progress, activate the Camera Album 
-            // instead of All grid. However, do not change the activation
-            // parameter as it is used within photos.
             activationParam->Des().AppendNum(KGlxActivationCmdShowAll);
             SetActivationParamL(*activationParam);
             CleanupStack::PopAndDestroy(activationParam);
-
+            
+            // Go to All grid view
+            GLX_LOG_INFO("CGlxAppUi::HandleActivationMessageL: All Grid View");
             // Send the command to reset the view
             ProcessCommandL(EGlxCmdResetView);
             iNavigationalState->SetBackExitStatus(ETrue);
-            
-            // 1)While harvesting is going on, TNM publishes itemsleft 'PSkey' value.
-            //      After harvesting is over, itemsleft count will be 0.
-            // 2)Tnm sets the value to KErrNotReady until it gets the total count while harvesting.
-            //      TNM doesn't update the key value in batches. It updates @ a single shot. 
-            //      so need to check against KErrNotReady also.
-            if (iUiUtility->GetItemsLeftCount() == KErrNotReady
-                    || iUiUtility->GetItemsLeftCount())
-                {
-                // Go to Camera Album grid view
-                GLX_LOG_INFO("CGlxAppUi::HandleActivationMessageL: Camera Album Grid View");
-                path->AppendL(KGlxCollectionPluginAlbumsImplementationUid);
-                MGlxMediaList* mediaList = MGlxMediaList::InstanceL(*path);
-                CleanupClosePushL(*mediaList);
-
-                TGlxSequentialIterator iter;
-                CGlxAttributeContext* attributeContext =
-                        new (ELeave) CGlxAttributeContext(&iter);
-                CleanupStack::PushL(attributeContext);
-                iter.SetRange(1);
-                attributeContext->AddAttributeL(KMPXMediaGeneralTitle);
-                mediaList->AddContextL(attributeContext,
-                        KGlxFetchContextPriorityBlocking);
-                TRAPD(err, GlxAttributeRetriever::RetrieveL(
-                        *attributeContext, *mediaList, EFalse));
-                if (err != KErrNone)
-                    {
-                    mediaList->RemoveContext(attributeContext);
-                    User::Leave( err);
-                    }
-                TInt count = mediaList->Count();
-                GLX_LOG_INFO1("CGlxAppUi::HandleActivationMessageL() count=%d", count);
-                __ASSERT_DEBUG(count != 0, Panic(EGlxPanicRequiredItemNotFound));
-
-                path->AppendL(TMPXItemId(mediaList->Item(0).Id().Value()));
-
-                mediaList->RemoveContext(attributeContext);
-                CleanupStack::PopAndDestroy(attributeContext);
-                CleanupStack::PopAndDestroy(mediaList);
-                }
-            else
-                {
-                // Go to All grid view
-                GLX_LOG_INFO("CGlxAppUi::HandleActivationMessageL: All Grid View");
-                path->AppendL(KGlxCollectionPluginAllImplementationUid);
-                }
+            path->AppendL(KGlxCollectionPluginAllImplementationUid);
             }
             break;
 
@@ -568,10 +514,10 @@
         }
     CleanupStack::PopAndDestroy(&stream);
     iNavigationalState->SetStartingLevel(path->Levels());
-    iNavigationalState->NavigateToL(*path);
+    iNavigationalState->NavigateToL( *path );
     iStateChangeRequested = ETrue;
     CleanupStack::PopAndDestroy(path);
-
+    
     // Introduced to fix bug EMJN-78GH6N. 
     if (0 != iEikonEnv->RootWin().OrdinalPosition())
         {
@@ -703,34 +649,36 @@
 // Handle OOM events.
 // ---------------------------------------------------------------------------
 //
-void CGlxAppUi::HandleApplicationSpecificEventL(TInt aEventType,
-        const TWsEvent& aWsEvent)
-    {
-    TRACER("CGlxAppUi::HandleApplicationSpecificEventL");
-    GLX_LOG_INFO1("CGlxAppUi::HandleApplicationSpecificEventL() aEventType=%d", aEventType);
 
-    CAknViewAppUi::HandleApplicationSpecificEventL(aEventType, aWsEvent);
-    if (aWsEvent.Type() == KAknUidValueEndKeyCloseEvent)
-        {
-        ClosePhotosL();
-        }
-
-    switch (aEventType)
-        {
-        case KAppOomMonitor_FreeRam:
-            {
-            StartCleanupL();
-            }
-            break;
-        case KAppOomMonitor_MemoryGood:
-            {
-            StopCleanupL();
-            }
-            break;
-        default:
-            break;
-        }
-    }
+void CGlxAppUi::HandleApplicationSpecificEventL(TInt aEventType, const TWsEvent& aWsEvent)
+{
+TRACER("CGlxAppUi::HandleApplicationSpecificEventL");
+CAknViewAppUi::HandleApplicationSpecificEventL(aEventType,aWsEvent);
+	if(aWsEvent.Type() == KAknUidValueEndKeyCloseEvent)
+		{
+		/**
+		* Making the flag etrue ensures that it will not call LaunchMmViewL in handlecommandl while 
+		* red key is pressed. Otherwise it will launch matrix menu, not idle screen. 
+		*/
+		iEndKeyPressed = ETrue;
+		ClosePhotosL();
+		}
+switch(aEventType)	
+	{
+	case KAppOomMonitor_FreeRam:
+		{
+		StartCleanupL();				
+		}
+		break;
+	case KAppOomMonitor_MemoryGood:
+		{
+		StopCleanupL();
+		}
+		break;
+	default:
+		break;
+	}
+}
 
 // ---------------------------------------------------------------------------
 // StartCleanup
@@ -739,7 +687,6 @@
 //
 void CGlxAppUi::StartCleanupL()
     {
-    TRACER("CGlxAppUi::StartCleanupL");
     MGlxCache* cacheManager = MGlxCache::InstanceL();
     cacheManager->ReleaseRAML();
     cacheManager->Close();
@@ -752,7 +699,6 @@
 //
 void CGlxAppUi::StopCleanupL()
     {
-    TRACER("CGlxAppUi::StopCleanupL");
     MGlxCache* cacheManager = MGlxCache::InstanceL();
     cacheManager->StopRAMReleaseL();
     cacheManager->Close();
Binary file photosgallery/help/data/xhtml.zip has changed
--- a/photosgallery/imgvwr/src/glxivwrappui.cpp	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/imgvwr/src/glxivwrappui.cpp	Wed Oct 13 14:32:09 2010 +0300
@@ -37,7 +37,7 @@
 #include <glxtracer.h>
 #include <glxlog.h>
 #include <glxivwr.rsg>
-#include <eikbtgpc.h>
+
 
 
 //constants
@@ -73,13 +73,7 @@
 
     // Enable Avkon skins.
     BaseConstructL( EAknEnableSkin | EAknEnableMSK | EAknSingleClickCompatible );
-     
-    // Hide status pane
-	StatusPane()->MakeVisible(EFalse);
-	// Hide Softkeys
-	CEikButtonGroupContainer* cba = CEikButtonGroupContainer::Current();
-	cba->MakeVisible(EFalse); 
-       
+
     // Create navigational state 
     iNavigationalState = CGlxNavigationalState::InstanceL();
     iNavigationalState->AddObserverL( *this );
--- a/photosgallery/slideshow/engine/inc/shwconstants.h	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/slideshow/engine/inc/shwconstants.h	Wed Oct 13 14:32:09 2010 +0300
@@ -34,10 +34,9 @@
     {
     enum TPlayDirection
         {
-        // Chronological Order (Older to newer)
-        EPlayForwards = 0,
-        // Reverse Chronological Order (Newer to older)
-        EPlayBackwards = 1 // default
+        EPlayForwards = 1,	// default
+        EPlayBackwards,
+        EPlayRandom
         };
 
     // Named constants for navigation directions 
--- a/photosgallery/slideshow/engine/tsrc/group/bld.inf	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/slideshow/engine/tsrc/group/bld.inf	Wed Oct 13 14:32:09 2010 +0300
@@ -26,10 +26,17 @@
 PRJ_EXPORTS
 
 PRJ_TESTMMPFILES
+//t_cshwzoomandpaneffect.mmp
 t_cshwdefaulteffectmanager.mmp
 t_cshwtimercontrol.mmp
 t_cshwviewcontrol.mmp
 t_cshweventrouter.mmp
+//t_cshwmusiccontrol.mmp
+//t_cshwsettingsmodel.mmp
+//t_cshweffects.mmp
+//t_cshweffectcontrol.mmp
+//t_cshwslideshowengine.mmp
+//t_cshwplaybackfactory.mmp
 
 PRJ_MMPFILES
 ../../group/shwslideshowengine.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/photosgallery/slideshow/engine/tsrc/group/t_cshweffectcontrol.mmp	Wed Oct 13 14:32:09 2010 +0300
@@ -0,0 +1,85 @@
+/*
+* Copyright (c) 2006-2007 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:    Slideshow engine build file for test
+ *
+*/
+
+
+
+#include        <platform_paths.hrh>
+#include "../../../../group/glxbuildcommon.mmh"
+
+TARGET		t_cshweffectcontrol.dll
+TARGETTYPE	dll
+UID			0x1000af5a 0x01700000
+
+CAPABILITY	ALL -TCB
+
+SOURCEPATH	../t_cshweffectcontrol
+SOURCE		t_cshweffectcontrol.cpp
+SOURCE		t_cshweffectcontrol_dllmain.cpp
+
+SOURCEPATH	../stubs
+SOURCE		tmglxvisuallist_adapter.cpp
+SOURCE		stub_tglxlayoutsplitter.cpp
+SOURCE		tmshweffectmanager_adapter.cpp
+SOURCE		stub_glxfetchcontexts.cpp
+
+// Sources required by the test suite
+SOURCEPATH	../../controlsrc
+SOURCE		shweffectcontrol.cpp
+SOURCE		shweventpublisherbase.cpp
+SOURCE		shwevent.cpp
+SOURCEPATH	../../coresrc
+SOURCE		shwthumbnailloader.cpp
+SOURCE		shwthumbnailcontext.cpp
+SOURCE		shwtimer.cpp
+
+USERINCLUDE	../t_cshweffectcontrol
+USERINCLUDE	../stubs
+USERINCLUDE	../../../../viewframework/medialists/tsrc/inc
+
+// User include folders required by the tested code
+SYSTEMINCLUDE   ../../inc
+SYSTEMINCLUDE   ../../controlsrc
+SYSTEMINCLUDE   ../../coresrc
+SYSTEMINCLUDE   ../../effectsrc
+SYSTEMINCLUDE   ../../../utils
+SYSTEMINCLUDE   ../../../../commonui/inc
+SYSTEMINCLUDE   ../../../../inc
+SYSTEMINCLUDE   ../../../../viewframework/medialists/inc
+SYSTEMINCLUDE   ../../../../viewframework/layouts/inc
+SYSTEMINCLUDE   ../../../../viewframework/visuallistmanager/inc
+SYSTEMINCLUDE   ../../../../viewframework/uiutilities/inc // for attribute retriever
+
+
+// System include folders required by the tested code
+APP_LAYER_SYSTEMINCLUDE
+
+LIBRARY EUnit.lib
+LIBRARY EUnitUtil.lib
+LIBRARY euser.lib
+LIBRARY mpxcommon.lib
+// glx dependencies
+LIBRARY	 glxlayouts.lib
+
+// allow static data
+#ifndef WINSCW
+EPOCALLOWDLLDATA
+#endif
+
+// no need to export test DLLs
+EXPORTUNFROZEN
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/photosgallery/slideshow/engine/tsrc/group/t_cshweffects.mmp	Wed Oct 13 14:32:09 2010 +0300
@@ -0,0 +1,87 @@
+/*
+* Copyright (c) 2007-2007 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:  Slideshow engine build file for test
+ *
+*/
+
+
+
+#include        <platform_paths.hrh>
+#include "../../../../group/glxbuildcommon.mmh"
+
+TARGET          t_cshweffects.dll
+TARGETTYPE      dll
+UID             0x1000af5a 0x01700000
+
+CAPABILITY              ALL -TCB
+
+SOURCEPATH              ../t_cshweffects
+SOURCE                  t_cshweffects.cpp
+SOURCE                  t_cshweffects_dllmain.cpp
+
+// Sources required by the test suite
+SOURCEPATH	../../effectsrc
+SOURCE		shwcrossfadeeffect.cpp
+SOURCE		shwcrossfadelayout.cpp
+SOURCE		shwzoomandpaneffect.cpp
+SOURCE		shwzoomandpanlayout.cpp
+SOURCE		shwcurvefactory.cpp
+
+SOURCEPATH		../../coresrc
+SOURCE			shwtimer.cpp
+
+USERINCLUDE             ../t_cshweffects
+
+// User include folders required by the tested code
+USERINCLUDE             ../../inc
+USERINCLUDE             ../../effectsrc
+USERINCLUDE             ../../../utils
+USERINCLUDE             ../../coresrc
+
+
+
+// System include folders required by the tested code
+SYSTEMINCLUDE           ../../../../viewframework/medialists/inc
+SYSTEMINCLUDE           ../../../../viewframework/layouts/inc
+SYSTEMINCLUDE           ../../../../viewframework/visuallistmanager/inc
+SYSTEMINCLUDE           ../../../../inc
+
+APP_LAYER_SYSTEMINCLUDE
+
+
+LIBRARY                 EUnit.lib
+LIBRARY                 EUnitUtil.lib
+LIBRARY                 euser.lib
+
+// Libraries required by the tested code
+LIBRARY glxmedialists.lib
+LIBRARY glxlayouts.lib
+
+LIBRARY bafl.lib
+LIBRARY estor.lib
+LIBRARY hitchcock.lib
+LIBRARY cone.lib
+LIBRARY efsrv.lib 
+LIBRARY commonengine.lib
+LIBRARY avkon.lib
+
+// allow static data
+#ifndef WINSCW
+EPOCALLOWDLLDATA
+#endif
+
+// no need to export test DLLs
+EXPORTUNFROZEN
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/photosgallery/slideshow/engine/tsrc/group/t_cshwmusiccontrol.mmp	Wed Oct 13 14:32:09 2010 +0300
@@ -0,0 +1,79 @@
+/*
+* Copyright (c) 2007-2007 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:  Slideshow engine build file for test
+ *
+*/
+
+
+
+#include        <platform_paths.hrh>
+#include "../../../../group/glxbuildcommon.mmh"
+
+TARGET          t_cshwmusiccontrol.dll
+TARGETTYPE      dll
+UID             0x1000af5a 0x01700000
+
+CAPABILITY              ALL -TCB
+
+SOURCEPATH              ../t_cshwmusiccontrol
+SOURCE                  t_cshwmusiccontrol.cpp
+SOURCE                  t_cshwmusiccontrol_dllmain.cpp
+
+// Sources required by the test suite
+SOURCEPATH              ../../controlsrc
+SOURCE                  shwevent.cpp
+SOURCE                  shwmusiccontrol.cpp
+SOURCE                  shweventpublisherbase.cpp
+
+USERINCLUDE             ../t_cshwmusiccontrol
+
+// User include folders required by the tested code
+USERINCLUDE             ../../inc
+USERINCLUDE             ../../coresrc
+USERINCLUDE             ../../../utils
+USERINCLUDE             ../../controlsrc
+USERINCLUDE             ../../effectsrc
+
+
+
+// System include folders required by the tested code
+SYSTEMINCLUDE           ../../../../viewframework/medialists/inc
+SYSTEMINCLUDE           ../../../../viewframework/layouts/inc
+SYSTEMINCLUDE           ../../../../viewframework/visuallistmanager/inc
+SYSTEMINCLUDE           ../../../../inc
+APP_LAYER_SYSTEMINCLUDE
+SYSTEMINCLUDE           ../../../../viewframework/views/fullscreenview/inc
+
+// for mgallery drm
+SYSTEMINCLUDE     		../../../../viewframework/drmutility/inc
+
+
+LIBRARY                 eunit.lib
+LIBRARY                 eunitutil.lib
+LIBRARY					efsrv.lib 
+LIBRARY                 euser.lib
+
+LIBRARY     			mpxplaybackutility.lib
+
+// Libraries required by the tested code
+
+// allow static data
+#ifndef WINSCW
+EPOCALLOWDLLDATA
+#endif
+
+// no need to export test DLLs
+EXPORTUNFROZEN
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/photosgallery/slideshow/engine/tsrc/group/t_cshwplaybackfactory.mmp	Wed Oct 13 14:32:09 2010 +0300
@@ -0,0 +1,102 @@
+/*
+* Copyright (c) 2007-2007 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:  Slideshow engine build file for test
+ *
+*/
+
+
+
+#include        <platform_paths.hrh>
+#include "../../../../group/glxbuildcommon.mmh"
+
+TARGET          t_cshwplaybackfactory.dll
+TARGETTYPE      dll
+UID             0x1000af5a 0x01700000
+
+CAPABILITY              ALL -TCB
+
+// test code
+SOURCEPATH      ../t_cshwplaybackfactory
+SOURCE          t_cshwplaybackfactory.cpp
+SOURCE          t_cshwplaybackfactory_dllmain.cpp
+
+// stubs for code under test
+SOURCEPATH      ../stubs
+SOURCE          tmglxvisuallist_adapter.cpp
+SOURCE          stub_glxfetchcontexts.cpp
+
+// code under test
+SOURCEPATH      ../../controlsrc
+SOURCE          shwevent.cpp
+SOURCE          shweffectcontrol.cpp
+SOURCE          shwviewcontrol.cpp
+SOURCE          shwtimercontrol.cpp
+SOURCE          shweventrouter.cpp
+SOURCE          shwmusiccontrol.cpp
+SOURCE          shweventpublisherbase.cpp
+SOURCEPATH      ../../effectsrc
+SOURCE          shwdefaulteffectmanager.cpp
+SOURCEPATH      ../../coresrc
+SOURCE          shwplaybackfactory.cpp
+SOURCE          shwthumbnailloader.cpp
+SOURCE          shwsettingsmodel.cpp
+SOURCE          shwtimer.cpp
+SOURCE          shwthumbnailcontext.cpp
+
+// test code
+USERINCLUDE     ../t_cshwplaybackfactory
+USERINCLUDE     ../stubs
+USERINCLUDE     ../../../../viewframework/medialists/tsrc/inc
+
+// User include folders required by the code under test
+USERINCLUDE     ../../inc
+USERINCLUDE     ../../coresrc
+USERINCLUDE     ../../../utils
+USERINCLUDE     ../../controlsrc
+USERINCLUDE     ../../effectsrc
+
+
+
+// System include folders required by the code under test
+SYSTEMINCLUDE   ../../../../commonui/inc
+SYSTEMINCLUDE   ../../../../viewframework/medialists/inc
+SYSTEMINCLUDE   ../../../../viewframework/layouts/inc
+SYSTEMINCLUDE   ../../../../viewframework/visuallistmanager/inc
+SYSTEMINCLUDE   ../../../../viewframework/uiutilities/inc // for attribute retriever
+SYSTEMINCLUDE   ../../../../inc
+APP_LAYER_SYSTEMINCLUDE
+
+
+LIBRARY         EUnit.lib
+LIBRARY         EUnitUtil.lib
+LIBRARY         euser.lib
+
+// Libraries required by the code under test
+LIBRARY         glxlayouts.lib
+LIBRARY         mpxplaybackutility.lib  // for music playback
+LIBRARY         efsrv.lib
+LIBRARY         mpxcommon.lib
+
+// For central repository
+LIBRARY         centralrepository.lib 
+
+// allow writeable statics
+#ifndef WINSCW
+EPOCALLOWDLLDATA
+#endif
+
+// no need to export test DLLs
+EXPORTUNFROZEN
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/photosgallery/slideshow/engine/tsrc/group/t_cshwsettingsmodel.mmp	Wed Oct 13 14:32:09 2010 +0300
@@ -0,0 +1,64 @@
+/*
+* Copyright (c) 2007-2007 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:  Slideshow engine build file for test
+ *
+*/
+
+
+
+#include        <platform_paths.hrh>
+#include "../../../../group/glxbuildcommon.mmh"
+
+TARGET          t_cshwsettingsmodel.dll
+TARGETTYPE      dll
+UID             0x1000af5a 0x01700000
+
+CAPABILITY              ALL -TCB
+
+// test code
+SOURCEPATH              ../t_cshwsettingsmodel
+SOURCE                  t_cshwsettingsmodel.cpp
+SOURCE                  t_cshwsettingsmodeldllmain.cpp
+SOURCEPATH              ../../coresrc
+SOURCE                  shwsettingsmodel.cpp
+
+
+// code under test
+USERINCLUDE             ../../inc
+USERINCLUDE             ../../../utils
+USERINCLUDE             ../../../group	// for shwbuildvariant.hrh
+
+// test code
+USERINCLUDE             ../t_cshwsettingsmodel
+
+
+// System include folders required by the tested code
+SYSTEMINCLUDE           ../../../../inc
+
+APP_LAYER_SYSTEMINCLUDE
+
+LIBRARY                 EUnit.lib
+LIBRARY                 euser.lib
+// For central repository
+LIBRARY 				centralrepository.lib 
+
+// allow static data
+#ifndef WINSCW
+EPOCALLOWDLLDATA
+#endif
+
+// no need to export test DLLs
+EXPORTUNFROZEN
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/photosgallery/slideshow/engine/tsrc/group/t_cshwslideshowengine.mmp	Wed Oct 13 14:32:09 2010 +0300
@@ -0,0 +1,100 @@
+/*
+* Copyright (c) 2007-2007 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:  Slideshow engine build file for test
+ *
+*/
+
+
+
+#include        <platform_paths.hrh>
+#include "../../../../group/glxbuildcommon.mmh"
+
+TARGET          t_cshwslideshowengine.dll
+TARGETTYPE      dll
+UID             0x1000af5a 0x01700000
+
+CAPABILITY              ALL -TCB
+
+// test code
+SOURCEPATH              ../t_cshwslideshowengine
+SOURCE                  t_cshwslideshowengine.cpp
+SOURCE                  t_cshwslideshowengine_dllmain.cpp
+
+// stubs for code under test
+SOURCEPATH              ../stubs
+SOURCE                  tmglxvisuallist_adapter.cpp
+SOURCE                  tmshweventobserver_adapter.cpp
+SOURCE                  stub_tglxlayoutsplitter.cpp
+SOURCE                  stub_glxfetchcontexts.cpp
+
+// code under test
+SOURCEPATH              ../../controlsrc
+SOURCE                  shwevent.cpp
+SOURCE                  shweffectcontrol.cpp
+SOURCE                  shwviewcontrol.cpp
+SOURCE                  shwtimercontrol.cpp
+SOURCE                  shwmusiccontrol.cpp
+SOURCE                  shweventrouter.cpp
+SOURCE                  shweventpublisherbase.cpp
+SOURCEPATH              ../../coresrc
+SOURCE                  shwslideshowengine.cpp
+SOURCE                  shwslideshowengineimpl.cpp
+SOURCE                  shwthumbnailloader.cpp
+SOURCE                  shwtimer.cpp
+SOURCE                  shwthumbnailcontext.cpp
+
+// test code
+USERINCLUDE ../t_cshwslideshowengine
+USERINCLUDE ../stubs
+USERINCLUDE	../../../../viewframework/medialists/tsrc/inc
+
+// code under test
+USERINCLUDE             ../../inc
+USERINCLUDE             ../../coresrc
+USERINCLUDE             ../../controlsrc
+USERINCLUDE             ../../effectsrc
+USERINCLUDE             ../../../utils
+
+
+// System include folders required by the tested code
+APP_LAYER_SYSTEMINCLUDE
+
+SYSTEMINCLUDE           ../../../../commonui/inc
+SYSTEMINCLUDE           ../../../../inc
+SYSTEMINCLUDE           ../../../../viewframework/medialists/inc
+SYSTEMINCLUDE           ../../../../viewframework/layouts/inc
+SYSTEMINCLUDE           ../../../../viewframework/visuallistmanager/inc
+SYSTEMINCLUDE           ../../../../viewframework/uiutilities/inc // for attribute retriever
+
+LIBRARY                 EUnit.lib
+LIBRARY                 EUnitUtil.lib
+LIBRARY                 euser.lib
+
+// cshwmusiccontrol libraries
+LIBRARY                 efsrv.lib 
+LIBRARY                 mpxplaybackutility.lib
+LIBRARY                 mpxcommon.lib
+
+// Libraries required by the tested code
+LIBRARY glxlayouts.lib
+
+// allow static data
+#ifndef WINSCW
+EPOCALLOWDLLDATA
+#endif
+
+// no need to export test DLLs
+EXPORTUNFROZEN
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/photosgallery/slideshow/engine/tsrc/group/t_cshwzoomandpaneffect.mmp	Wed Oct 13 14:32:09 2010 +0300
@@ -0,0 +1,85 @@
+/*
+* Copyright (c) 2007-2007 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:  Slideshow engine build file for test
+ *
+*/
+
+
+
+#include        <platform_paths.hrh> 
+#include "../../../../group/glxbuildcommon.mmh"
+
+TARGET			t_cshwzoomandpaneffect.dll
+TARGETTYPE		dll
+UID				0x1000af5a 0x01700000
+
+CAPABILITY		ALL -TCB
+
+SOURCEPATH		../t_cshwzoomandpaneffect
+SOURCE			t_cshwzoomandpaneffect.cpp
+SOURCE			t_cshwzoomandpaneffect_dllmain.cpp
+
+// Sources required by the test suite
+SOURCEPATH		../../effectsrc
+SOURCE			shwzoomandpaneffect.cpp
+SOURCE			shwresourceutility.cpp
+SOURCE			shwzoomandpanlayout.cpp
+SOURCE			shwcurvefactory.cpp
+SOURCE			shwcrossfadelayout.cpp
+
+SOURCEPATH		../../coresrc
+SOURCE			shwtimer.cpp
+
+USERINCLUDE		../t_cshwzoomandpaneffect
+
+// User include folders required by the tested code
+USERINCLUDE		../../inc
+USERINCLUDE		../../coresrc
+USERINCLUDE		../../controlsrc
+USERINCLUDE		../../effectsrc
+USERINCLUDE		../../../utils
+
+
+// System include folders required by the tested code
+SYSTEMINCLUDE	../../../../viewframework/medialists/inc
+SYSTEMINCLUDE	../../../../viewframework/layouts/inc
+SYSTEMINCLUDE	../../../../viewframework/visuallistmanager/inc
+SYSTEMINCLUDE	../../../../inc
+APP_LAYER_SYSTEMINCLUDE
+
+SYSTEMINCLUDE	        ../../../../common/inc          // for CGlxResourceUtilities
+
+LIBRARY			EUnit.lib
+LIBRARY			EUnitUtil.lib
+LIBRARY			euser.lib
+
+// Libraries required by the tested code
+LIBRARY			bafl.lib
+LIBRARY			efsrv.lib
+LIBRARY			glxlayouts.lib
+LIBRARY         glxcommon.lib                   // for CResourceUtilities
+LIBRARY			estor.lib
+LIBRARY			avkon.lib
+LIBRARY			cone.lib
+LIBRARY			hitchcock.lib
+
+// allow static data
+#ifndef WINSCW
+EPOCALLOWDLLDATA
+#endif
+
+// no need to export test DLLs
+EXPORTUNFROZEN
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/photosgallery/slideshow/engine/tsrc/stubs/stub_tglxlayoutsplitter.cpp	Wed Oct 13 14:32:09 2010 +0300
@@ -0,0 +1,134 @@
+/*
+* Copyright (c) 2006-2007 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 file for image transaction in slideshow
+ *
+*/
+
+
+
+
+#include "stub_tglxlayoutsplitter.h"
+
+extern TBool gSplitterAddLayoutLCalled = EFalse;
+extern TBool gSplitterRemoveLayoutLCalled = EFalse;
+
+// -----------------------------------------------------------------------------
+// Stub for TGlxLayout -->
+// -----------------------------------------------------------------------------
+TGlxLayout::TGlxLayout()
+    {
+    }
+TGlxLayout::~TGlxLayout()
+    {
+    }
+void TGlxLayout::SetNext( MGlxLayout* /*aLayout*/ )
+	{
+	}
+MGlxLayout* TGlxLayout::Next() const
+	{
+	return NULL;
+	}
+void TGlxLayout::Insert(MGlxLayout* /*aLayout*/)
+    {
+    }
+void TGlxLayout::Remove(MGlxLayout* /*aLayout*/)
+    {
+    }
+void TGlxLayout::SetLayoutValues( TGlxLayoutInfo& /*aInfo*/ )
+	{
+	}
+TBool TGlxLayout::Changed() const
+	{
+	return ETrue;
+	}
+void TGlxLayout::ClearChanged()
+	{
+	}
+void TGlxLayout::DoSetLayoutValues( TGlxLayoutInfo& /*aInfo*/ )
+	{
+	}
+TBool TGlxLayout::DoChanged() const
+	{
+	return ETrue;
+	}
+void TGlxLayout::DoClearChanged()
+	{
+	}
+// -----------------------------------------------------------------------------
+// <-- Stub for TGlxLayout
+// -----------------------------------------------------------------------------
+
+// -----------------------------------------------------------------------------
+// Stub for layout splitter -->
+// -----------------------------------------------------------------------------
+TGlxLayoutSplitter::TGlxLayoutSplitter()
+	{
+	gSplitterAddLayoutLCalled = EFalse;
+	gSplitterRemoveLayoutLCalled = EFalse;
+	}
+TGlxLayoutSplitter::~TGlxLayoutSplitter()
+	{
+	}
+void TGlxLayoutSplitter::SetVisualListL(MGlxVisualList* /*aVisualList*/)
+	{
+	}
+
+void TGlxLayoutSplitter::AddLayoutL(MGlxLayout* /*aLayout*/, const CHuiVisual* /*aVisual*/)
+	{
+	gSplitterAddLayoutLCalled = ETrue;
+	}
+
+void TGlxLayoutSplitter::RemoveLayout(const CHuiVisual* /*aVisual*/)
+	{
+	gSplitterRemoveLayoutLCalled = ETrue;
+	}
+void TGlxLayoutSplitter::SetDefaultLayout(MGlxLayout* /*aLayout*/)
+	{
+	}
+
+void TGlxLayoutSplitter::HandleFocusChangedL(
+	TInt /*aFocusIndex*/, TReal32 /*aItemsPerSecond*/, MGlxVisualList* /*aList*/,
+	NGlxListDefs::TFocusChangeType /*aType*/ )
+	{
+	
+	}
+void TGlxLayoutSplitter::HandleSizeChanged( const TSize& /*aSize*/, MGlxVisualList* /*aList*/ )
+	{
+	
+	}
+void TGlxLayoutSplitter::HandleVisualRemoved(
+	const CHuiVisual* /*aVisual*/, MGlxVisualList* /*aList*/ )
+	{
+	
+	}
+void TGlxLayoutSplitter::HandleVisualAddedL(
+	CHuiVisual* /*aVisual*/, TInt /*aIndex*/, MGlxVisualList* /*aList*/ )
+	{
+	
+	}
+void TGlxLayoutSplitter::DoSetLayoutValues( TGlxLayoutInfo& /*aInfo*/ )
+	{
+	
+	}
+TBool TGlxLayoutSplitter::DoChanged() const
+	{
+	return ETrue;	
+	}
+void TGlxLayoutSplitter::DoClearChanged()
+	{
+	
+	}
+// -----------------------------------------------------------------------------
+// <-- Stub for layout splitter
+// -----------------------------------------------------------------------------
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/photosgallery/slideshow/engine/tsrc/stubs/stub_tglxlayoutsplitter.h	Wed Oct 13 14:32:09 2010 +0300
@@ -0,0 +1,30 @@
+/*
+* Copyright (c) 2006-2007 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 file for image transaction in slideshow
+ *
+*/
+
+
+
+#ifndef __STUB_TGLXLAYOUTSPLITTER_H__
+#define __STUB_TGLXLAYOUTSPLITTER_H__
+
+#include <glxlayoutsplitter.h>
+
+extern TBool gSplitterAddLayoutLCalled;
+extern TBool gSplitterRemoveLayoutLCalled;
+
+#endif      //  __STUB_TGLXLAYOUTSPLITTER_H__
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/photosgallery/slideshow/engine/tsrc/stubs/tmglxvisuallist_adapter.cpp	Wed Oct 13 14:32:09 2010 +0300
@@ -0,0 +1,272 @@
+/*
+* Copyright (c) 2006-2007 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 file for visual list adapter
+ *
+*/
+
+
+
+
+//  CLASS HEADER
+#include "TMGlxVisualList_Adapter.h"
+
+//  EXTERNAL INCLUDES
+#include <EUnitMacros.h>
+#include <mglxvisuallistobserver.h>
+
+// declate the enum to be printed as TInt
+EUNIT_DECLARE_PRINTABLE_AS_TINT( MGlxVisualList_Observer::TMGlxVisualListMethodId )
+
+//  INTERNAL INCLUDES
+
+// CONSTRUCTION
+
+TMGlxVisualList_Adapter::TMGlxVisualList_Adapter( MGlxVisualList_Observer* aObserver )
+	: iSize( TMGlxVisualList_Adapter_Config::KDefaultSize ),
+	iFocus( TMGlxVisualList_Adapter_Config::KDefaultFocus ),
+	iMGlxVisualList_Observer( aObserver ),
+	iMGlxVisualList( NULL )
+	{
+	}
+
+TMGlxVisualList_Adapter::~TMGlxVisualList_Adapter()
+	{
+	// release the array
+	iObservers.Close();
+	}
+
+void TMGlxVisualList_Adapter::SetAdaptee( MGlxVisualList* aAdaptee )
+	{
+	iMGlxVisualList = aAdaptee;
+	}
+
+//  METHODS
+TGlxVisualListId TMGlxVisualList_Adapter::Id() const
+	{
+	// inform the test case
+	iMGlxVisualList_Observer->MGlxVisualList_MethodCalled( MGlxVisualList_Observer::E_TGlxVisualListId_Id_ );
+	// call the actual method
+	if ( iMGlxVisualList )
+		{
+		return iMGlxVisualList->Id();
+		}
+	return TGlxVisualListId( reinterpret_cast< unsigned int >( (void*)this ) );
+	}
+	
+CHuiVisual* TMGlxVisualList_Adapter::Visual( TInt aListIndex )
+	{
+	// inform the test case
+	iMGlxVisualList_Observer->MGlxVisualList_MethodCalled( MGlxVisualList_Observer::E_CHuiVisual_p_Visual_TInt_ );
+	// call the actual method
+	if ( iMGlxVisualList )
+		{
+		return iMGlxVisualList->Visual( aListIndex );
+		}
+	// return the index as visual
+	return (CHuiVisual*)aListIndex;
+	}
+
+CGlxVisualObject* TMGlxVisualList_Adapter::Item( TInt aListIndex )
+    {
+    // inform the test case
+    iMGlxVisualList_Observer->MGlxVisualList_MethodCalled( MGlxVisualList_Observer::E_CGlxVisualObject_p_Item_TInt_ );
+    // call the actual method
+    if ( iMGlxVisualList )
+        {
+        return iMGlxVisualList->Item( aListIndex );
+        }
+    // return the index as item
+    return (CGlxVisualObject*)aListIndex;
+    }
+
+TInt TMGlxVisualList_Adapter::ItemCount() const
+	{
+	// inform the test case
+	iMGlxVisualList_Observer->MGlxVisualList_MethodCalled( MGlxVisualList_Observer::E_TInt_ItemCount_ );
+	// call the actual method
+	if ( iMGlxVisualList )
+		{
+		return iMGlxVisualList->ItemCount();
+		}
+	return iSize;
+	}
+
+TInt TMGlxVisualList_Adapter::FocusIndex() const
+	{
+	// inform the test case
+	iMGlxVisualList_Observer->MGlxVisualList_MethodCalled( MGlxVisualList_Observer::E_TInt_FocusIndex_ );
+	// call the actual method
+	if ( iMGlxVisualList )
+		{
+		return iMGlxVisualList->FocusIndex();
+		}
+	return iFocus;
+	}
+	
+CHuiControlGroup* TMGlxVisualList_Adapter::ControlGroup() const
+	{
+	// inform the test case
+	iMGlxVisualList_Observer->MGlxVisualList_MethodCalled( MGlxVisualList_Observer::E_CHuiControlGroup_p_ControlGroup_ );
+	// call the actual method
+	if ( iMGlxVisualList )
+		{
+		return iMGlxVisualList->ControlGroup();
+		}
+	return NULL;
+	}
+	
+void TMGlxVisualList_Adapter::AddObserverL( MGlxVisualListObserver* aObserver )
+	{
+	// inform the test case
+	iMGlxVisualList_Observer->MGlxVisualList_MethodCalled( MGlxVisualList_Observer::E_void_AddObserverL_MGlxVisualListObserver_p_ );
+	
+	// call the actual method
+	if ( iMGlxVisualList )
+		{
+		iMGlxVisualList->AddObserverL( aObserver );
+		}
+
+	// add the observer to array
+	iObservers.AppendL( aObserver );
+	}
+	
+void TMGlxVisualList_Adapter::RemoveObserver( MGlxVisualListObserver* aObserver )
+	{
+	// inform the test case
+	iMGlxVisualList_Observer->MGlxVisualList_MethodCalled( MGlxVisualList_Observer::E_void_RemoveObserver_MGlxVisualListObserver_p_ );
+	// call the actual method
+	if ( iMGlxVisualList )
+		{
+		iMGlxVisualList->RemoveObserver( aObserver );
+		}
+	}
+	
+void TMGlxVisualList_Adapter::AddLayoutL( MGlxLayout* aLayout )
+	{
+	// inform the test case
+	iMGlxVisualList_Observer->MGlxVisualList_MethodCalled( MGlxVisualList_Observer::E_void_AddLayoutL_MGlxLayout_p_ );
+	
+	TInt* memAlloc = new (ELeave) TInt;
+	delete memAlloc;
+	
+	// call the actual method
+	if ( iMGlxVisualList )
+		{
+		iMGlxVisualList->AddLayoutL( aLayout );
+		}
+	}
+	
+void TMGlxVisualList_Adapter::RemoveLayout( const MGlxLayout* aLayout )
+	{
+	// inform the test case
+	iMGlxVisualList_Observer->MGlxVisualList_MethodCalled( MGlxVisualList_Observer::E_void_RemoveLayout_const_MGlxLayout_p_ );
+	// call the actual method
+	if ( iMGlxVisualList )
+		{
+		iMGlxVisualList->RemoveLayout( aLayout );
+		}
+	}
+	
+TGlxViewContextId TMGlxVisualList_Adapter::AddContextL( TInt aFrontVisibleRangeOffset, TInt aRearVisibleRangeOffset )
+	{
+	// inform the test case
+	iMGlxVisualList_Observer->MGlxVisualList_MethodCalled( MGlxVisualList_Observer::E_TGlxViewContextId_AddContextL_TInt_TInt_ );
+	
+	TInt* memAlloc = new (ELeave) TInt;
+	delete memAlloc;
+	
+	// call the actual method
+	if ( iMGlxVisualList )
+		{
+		return iMGlxVisualList->AddContextL( aFrontVisibleRangeOffset, aRearVisibleRangeOffset );
+		}
+	return TGlxViewContextId( reinterpret_cast< unsigned int >( (void*)this) );
+	}
+	
+void TMGlxVisualList_Adapter::RemoveContext( const TGlxViewContextId& aContextId )
+	{
+	// inform the test case
+	iMGlxVisualList_Observer->MGlxVisualList_MethodCalled( MGlxVisualList_Observer::E_void_RemoveContext_const_TGlxViewContextId_r_ );
+	// call the actual method
+	if ( iMGlxVisualList )
+		{
+		iMGlxVisualList->RemoveContext( aContextId );
+		}
+	}
+
+void TMGlxVisualList_Adapter::NavigateL( TInt aIndexCount )
+	{
+	// inform the test case
+	iMGlxVisualList_Observer->MGlxVisualList_MethodCalled( MGlxVisualList_Observer::E_void_NavigateL_TInt_ );
+	
+	TInt* memAlloc = new (ELeave) TInt;
+	delete memAlloc;
+	
+	// call the actual method
+	if ( iMGlxVisualList )
+		{
+		iMGlxVisualList->NavigateL( aIndexCount );
+		}
+
+	// change the focus
+	iFocus = (iFocus + aIndexCount)% iSize;
+	// if navigated backwards, loop the index 
+	if( iFocus < 0 )
+		{
+		iFocus = iSize - 1;
+		}
+
+	EUNIT_PRINT( _L("Visual list focus %d"), iFocus );
+
+	for( TInt i=0; i<iObservers.Count(); i++ )
+		{
+		iObservers[ i ]->HandleFocusChangedL( iFocus, 0, this, NGlxListDefs::EUnknown );
+		}
+	}
+	
+TSize TMGlxVisualList_Adapter::Size() const
+	{
+	// inform the test case
+	iMGlxVisualList_Observer->MGlxVisualList_MethodCalled( MGlxVisualList_Observer::E_TSize_Size_ );
+	// call the actual method
+	if ( iMGlxVisualList )
+		{
+		return iMGlxVisualList->Size();
+		}
+	return TSize( 0, 0 );
+	}
+	
+void TMGlxVisualList_Adapter::BringVisualsToFront()
+	{
+	// inform the test case
+	iMGlxVisualList_Observer->MGlxVisualList_MethodCalled( MGlxVisualList_Observer::E_void_BringVisualsToFront_ );
+	// call the actual method
+	if ( iMGlxVisualList )
+		{
+		iMGlxVisualList->BringVisualsToFront();
+		}
+	}
+
+void TMGlxVisualList_Adapter::EnableAnimationL(TBool /*aAnimate*/, TInt /*aIndex*/)
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// SetDefaultIconBehaviourL
+// -----------------------------------------------------------------------------
+void TMGlxVisualList_Adapter::SetDefaultIconBehaviourL( TBool /*aEnable*/ )
+    {
+    }
+
+//  END OF FILE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/photosgallery/slideshow/engine/tsrc/stubs/tmglxvisuallist_adapter.h	Wed Oct 13 14:32:09 2010 +0300
@@ -0,0 +1,99 @@
+/*
+* Copyright (c) 2006-2007 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 file for visual list adapter
+ *
+*/
+
+
+
+
+#ifndef __TMGLXVISUALLIST_ADAPTER_H__
+#define __TMGLXVISUALLIST_ADAPTER_H__
+
+//  EXTERNAL INCLUDES
+
+//  INTERNAL INCLUDES
+#include "MGlxVisualList_Observer.h"
+#include <mglxvisuallist.h>
+
+//  FORWARD DECLARATIONS
+
+namespace TMGlxVisualList_Adapter_Config
+	{
+	const TInt KDefaultSize = 3;
+	const TInt KDefaultFocus = 1;
+	}
+
+//  CLASS DEFINITION
+/**
+ * Stub version of visual list
+ * for testing purposes
+ */
+class TMGlxVisualList_Adapter
+    : public MGlxVisualList
+	{
+	public:     // Constructors and destructors
+
+		/**
+		 * Construction
+		 */
+		TMGlxVisualList_Adapter( MGlxVisualList_Observer* aObserver );
+		~TMGlxVisualList_Adapter();
+		void SetAdaptee( MGlxVisualList* aAdaptee );        
+
+	public:	// from MGlxVisualList
+
+		TGlxVisualListId Id() const;
+		CHuiVisual* Visual(TInt aListIndex);
+         CGlxVisualObject* Item(TInt aListIndex);
+		TInt ItemCount() const;
+		TInt FocusIndex() const;
+		CHuiControlGroup* ControlGroup() const;
+		void AddObserverL(MGlxVisualListObserver* aObserver);
+		void RemoveObserver(MGlxVisualListObserver* aObserver);
+		void AddLayoutL(MGlxLayout* aLayout);
+		void RemoveLayout(const MGlxLayout* aLayout);
+		TGlxViewContextId AddContextL(TInt aFrontVisibleRangeOffset, TInt aRearVisibleRangeOffset);
+		void RemoveContext(const TGlxViewContextId& aContextId);
+		void NavigateL(TInt aIndexCount);
+		TSize Size() const;
+		void BringVisualsToFront();
+        void EnableAnimationL(TBool aAnimate, TInt aIndex);
+        /// @ref MGlxVisualList::SetDefaultIconBehaviourL
+        void SetDefaultIconBehaviourL( TBool aEnable );
+        
+        void AddIconL( TInt , const CHuiTexture& , 
+            NGlxIconMgrDefs::TGlxIconPosition ,
+            TBool , TBool ,  TInt, TReal32, TReal32  ) { }
+            
+        TBool RemoveIcon( TInt , const CHuiTexture&  ) { return ETrue;}
+    
+        void SetIconVisibility( TInt , const CHuiTexture&, TBool  ) { }
+
+	public:		// Data
+
+		TInt iSize;
+		TInt iFocus;
+		
+	private:    // Data
+
+		RArray<MGlxVisualListObserver*> iObservers;
+		MGlxVisualList_Observer* iMGlxVisualList_Observer;
+		MGlxVisualList* iMGlxVisualList;
+
+	};
+
+#endif      //  __TMGLXVISUALLIST_ADAPTER_H__
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/photosgallery/slideshow/engine/tsrc/stubs/tmshweffectmanager_adapter.cpp	Wed Oct 13 14:32:09 2010 +0300
@@ -0,0 +1,246 @@
+/*
+* Copyright (c) 2006-2007 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 file for managing effect in slideshow
+ *
+*/
+
+
+
+
+//  CLASS HEADER
+#include "tmshweffectmanager_adapter.h"
+
+//  EXTERNAL INCLUDES
+//  INTERNAL INCLUDES
+#include <EUnitMacros.h>
+
+// declare the enums to be printable as TInts
+EUNIT_DECLARE_PRINTABLE_AS_TINT( MShwEffectManager_Observer::TMShwEffectManagerMethodId )
+
+// CONSTRUCTION
+
+TMShwEffectManager_Adapter::TMShwEffectManager_Adapter(
+	MShwEffectManager_Observer* aObserver )
+	: iViewDuration( 0 ),
+	iTransitionDuration( 0 ),
+    iPrepareVisual( NULL ),
+    iViewVisual( NULL ),
+    iTransitionVisual( NULL ),
+	iMShwEffectManager_Observer( aObserver ), 
+	iMShwEffectManager( NULL )
+	{
+	}
+
+void TMShwEffectManager_Adapter::SetAdaptee( MShwEffectManager* aAdaptee )
+	{
+	iMShwEffectManager = aAdaptee;
+	}
+
+//  METHODS
+void TMShwEffectManager_Adapter::AddEffectL( MShwEffect* aEffect )
+	{
+	// inform the observer
+	iMShwEffectManager_Observer->MShwEffectManager_MethodCalled( 
+		MShwEffectManager_Observer::E_void_AdoptEffectsL_TArrayMShwEffect_p );
+
+	// allocate to cause an alloc leave
+	TInt* memAlloc = new (ELeave) TInt;
+	delete memAlloc;
+
+	// call the actual method
+	if ( iMShwEffectManager )
+		{
+		iMShwEffectManager->AddEffectL( aEffect );
+		}
+	}
+    
+MShwEffect* TMShwEffectManager_Adapter::CurrentEffect()
+    {
+    // inform the observer
+    iMShwEffectManager_Observer->MShwEffectManager_MethodCalled( 
+    	MShwEffectManager_Observer::E_MShwEffect_p_CurrentEffect );
+    // call the actual method
+    if ( iMShwEffectManager )
+        {
+        return iMShwEffectManager->CurrentEffect();
+        }
+    return this;
+    }
+   
+MShwEffect* TMShwEffectManager_Adapter::Effect( TInt aDirection )
+	{
+	// inform the observer
+	iMShwEffectManager_Observer->MShwEffectManager_MethodCalled( 
+		MShwEffectManager_Observer::E_MShwEffect_p_NextEffect );
+	// call the actual method
+	if ( iMShwEffectManager )
+		{
+		return iMShwEffectManager->Effect( aDirection );
+		}
+	return this;
+	}
+    
+void TMShwEffectManager_Adapter::ProceedToEffect( TInt aDirection )
+	{
+	// inform the observer
+	iMShwEffectManager_Observer->MShwEffectManager_MethodCalled( 
+		MShwEffectManager_Observer::E_void_ProceedToNextEffect );
+	// call the actual method
+	if ( iMShwEffectManager )
+		{
+		iMShwEffectManager->ProceedToEffect( aDirection );
+		}
+	}
+
+void TMShwEffectManager_Adapter::SetEffectOrder(
+	MShwEffectManager::TShwEffectOrder /*aOrder*/ )
+    {
+    }
+    
+MShwEffectManager::TShwEffectOrder TMShwEffectManager_Adapter::EffectOrder()
+    {
+    return EEffectOrderProgrammed;
+    }
+    
+void TMShwEffectManager_Adapter::SetProgrammedEffects(
+	RArray< TShwEffectInfo >& /*aEffects*/ )
+    {
+    }
+    
+TInt TMShwEffectManager_Adapter::ProgrammedEffects(
+	RArray< MShwEffect* >& /*aEffects*/ )
+    {
+    return KErrNone;
+    }
+	
+void TMShwEffectManager_Adapter::SetDefaultEffectL( TShwEffectInfo /*aInfo*/ )
+	{
+	}
+
+void TMShwEffectManager_Adapter::GetActiveEffectsL( RPointerArray< MShwEffect >& /*aEffects*/ )
+	{
+	}
+	
+/// MShwEffect part
+MShwEffect* TMShwEffectManager_Adapter::CloneLC()
+	{
+	return NULL;
+	}
+
+void TMShwEffectManager_Adapter::InitializeL( 
+	CHuiEnv* /*aHuiEnv*/,
+    MGlxVisualList* /*aVisualList*/,
+    MGlxMediaList* /*aMediaList*/,
+    TSize /*aScreenSize*/ )
+    {
+	// inform the observer
+	iMShwEffectManager_Observer->MShwEffectManager_MethodCalled( 
+		MShwEffectManager_Observer::E_MGlxLayout_InitializeL );
+
+	// allocate to cause an alloc leave in OOM tests
+	TInt* memAlloc = new (ELeave) TInt;
+	delete memAlloc;
+    }
+
+TSize TMShwEffectManager_Adapter::PrepareViewL( CHuiVisual* aVisual, TSize /*aSize*/ )
+	{
+	// store the visual
+    iPrepareVisual = aVisual;
+
+	// inform the observer
+	iMShwEffectManager_Observer->MShwEffectManager_MethodCalled( 
+		MShwEffectManager_Observer::E_MGlxLayout_PrepareViewL );
+
+	// allocate to cause an alloc leave in OOM tests
+	TInt* memAlloc = new (ELeave) TInt;
+	delete memAlloc;
+
+	return TSize( 0, 0 );
+	}
+
+MGlxLayout* TMShwEffectManager_Adapter::EnterViewL( 
+	CHuiVisual* aVisual, TInt aDuration, TInt /*aDuration2*/ )
+	{
+	iViewDuration = aDuration;
+	// store the visual
+    iViewVisual = aVisual;
+
+	// inform the observer
+	iMShwEffectManager_Observer->MShwEffectManager_MethodCalled( 
+		MShwEffectManager_Observer::E_MGlxLayout_EnterViewL_TInt );
+
+	// allocate to cause an alloc leave
+	TInt* memAlloc = new (ELeave) TInt;
+	delete memAlloc;
+
+	return NULL;
+	}
+
+void TMShwEffectManager_Adapter::ExitView( CHuiVisual* aVisual )
+	{
+	// store the visual
+    iViewVisual = aVisual;
+	
+	// inform the observer
+	iMShwEffectManager_Observer->MShwEffectManager_MethodCalled( 
+		MShwEffectManager_Observer::E_void_ExitView );
+	}
+
+MGlxLayout* TMShwEffectManager_Adapter::EnterTransitionL(
+	CHuiVisual* aVisual, TInt aDuration )
+	{
+	iTransitionDuration = aDuration;
+	// store the visual
+    iTransitionVisual = aVisual;
+
+	// inform the observer
+	iMShwEffectManager_Observer->MShwEffectManager_MethodCalled( 
+		MShwEffectManager_Observer::E_MGlxLayout_EnterTransitionL_TInt );
+
+	// allocate to cause an alloc leave
+	TInt* memAlloc = new (ELeave) TInt;
+	delete memAlloc;
+	
+	return NULL;
+	}
+
+void TMShwEffectManager_Adapter::ExitTransition( CHuiVisual* aVisual )
+	{
+	// store the visual
+    iTransitionVisual = aVisual;
+
+    // inform the observer
+    iMShwEffectManager_Observer->MShwEffectManager_MethodCalled( 
+    	MShwEffectManager_Observer::E_void_ExitTransition );
+	}
+
+void TMShwEffectManager_Adapter::PauseL()
+	{
+	// allocate to cause an alloc leave
+	TInt* memAlloc = new (ELeave) TInt;
+	delete memAlloc;
+	}
+
+void TMShwEffectManager_Adapter::Resume()
+	{
+	}
+
+TShwEffectInfo TMShwEffectManager_Adapter::EffectInfo()
+	{
+	TShwEffectInfo info;
+	info.iName = KNullDesC;
+	return info;
+	}
+
+//  END OF FILE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/photosgallery/slideshow/engine/tsrc/stubs/tmshweffectmanager_adapter.h	Wed Oct 13 14:32:09 2010 +0300
@@ -0,0 +1,96 @@
+/*
+* Copyright (c) 2006-2007 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 file for managing effect in slideshow
+ *
+*/
+
+
+
+
+#ifndef __TMSHWEFFECTMANAGER_ADAPTER_H__
+#define __TMSHWEFFECTMANAGER_ADAPTER_H__
+
+//  EXTERNAL INCLUDES
+
+
+//  INTERNAL INCLUDES
+#include "mshweffectmanager_observer.h"
+#include "shweffectmanager.h"
+#include "shweffect.h"
+
+//  FORWARD DECLARATIONS
+
+//  CLASS DEFINITION
+/**
+ * Stub implementation of effect manager and effect.
+ */
+class TMShwEffectManager_Adapter
+    : public MShwEffectManager, public MShwEffect
+    {
+    public:     // Constructors and destructors
+
+        /**
+         * Construction
+         */
+        TMShwEffectManager_Adapter( MShwEffectManager_Observer* aObserver );
+        void SetAdaptee( MShwEffectManager* aAdaptee );        
+
+    public:	// From MShwEffectManager
+
+        void AddEffectL( MShwEffect* aEffect );
+        MShwEffect* CurrentEffect();
+        MShwEffect* Effect( TInt aDirection );
+        void ProceedToEffect( TInt aDirection );
+        void SetEffectOrder( TShwEffectOrder aOrder );
+        TShwEffectOrder EffectOrder();
+        void SetProgrammedEffects( RArray< TShwEffectInfo >& aEffects );
+        TInt ProgrammedEffects( RArray< MShwEffect* >& aEffects );
+		void SetDefaultEffectL(TShwEffectInfo aInfo);
+		void GetActiveEffectsL( RPointerArray< MShwEffect >& aEffects );
+         
+    public: // From MShwEffect
+    
+		MShwEffect* CloneLC();
+		void InitializeL( 
+    		CHuiEnv* aHuiEnv,
+		    MGlxVisualList* aVisualList,
+		    MGlxMediaList* aMediaList,
+		    TSize aScreenSize );
+		TSize PrepareViewL( CHuiVisual* aVisual, TSize aSize );
+		MGlxLayout* EnterViewL( CHuiVisual* aVisual, TInt aDuration, TInt aDuration2 );
+		void ExitView( CHuiVisual* aVisual );
+		MGlxLayout* EnterTransitionL( CHuiVisual* aVisual, TInt aDuration );
+		void ExitTransition( CHuiVisual* aVisual );
+		void PauseL();
+		void Resume();
+		TShwEffectInfo EffectInfo();
+                
+    public:		// Data (for verification)
+
+    	TInt iViewDuration;
+    	TInt iTransitionDuration;
+    	CHuiVisual* iPrepareVisual;
+    	CHuiVisual* iViewVisual;
+    	CHuiVisual* iTransitionVisual;
+    	
+    private:    // Data
+
+        MShwEffectManager_Observer* iMShwEffectManager_Observer;
+        MShwEffectManager* iMShwEffectManager;
+
+    };
+
+#endif      //  __TMSHWEFFECTMANAGER_ADAPTER_H__
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/photosgallery/slideshow/engine/tsrc/t_cshweffectcontrol/t_cshweffectcontrol.cpp	Wed Oct 13 14:32:09 2010 +0300
@@ -0,0 +1,932 @@
+/*
+* Copyright (c) 2006-2007 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:   Test for effect control for the slideshow
+ *
+*/
+
+
+
+
+//  CLASS HEADER
+#include "t_cshweffectcontrol.h"
+
+//  EXTERNAL INCLUDES
+#include <EUnitMacros.h>
+#include <EUnitDecorators.h>
+
+//  INTERNAL INCLUDES
+#include "shwslideshowenginepanic.h"
+#include "shweffectcontrol.h"
+#include "shwevent.h"
+#include "shwthumbnailcontext.h"
+#include "shwautoptr.h"
+
+#include "stub_tglxlayoutsplitter.h"
+#include "stub_glxfetchcontexts.h"
+
+// -----------------------------------------------------------------------------
+// Stub for NShwEngine::Panic -->
+// -----------------------------------------------------------------------------
+TBool gNShwEnginePanicCalled = EFalse;
+namespace NShwEngine
+	{
+	extern void Panic( TShwEnginePanic aPanic )
+	    {
+	    gNShwEnginePanicCalled = ETrue;
+	    // in test situation just do a leave
+	    User::Leave( aPanic );
+	    }
+	}
+
+// -----------------------------------------------------------------------------
+// <-- Stub for NShwEngine::Panic
+// -----------------------------------------------------------------------------
+
+// CONSTRUCTION
+T_CShwEffectControl* T_CShwEffectControl::NewL()
+    {
+    T_CShwEffectControl* self = T_CShwEffectControl::NewLC();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+T_CShwEffectControl* T_CShwEffectControl::NewLC()
+    {
+    T_CShwEffectControl* self = new( ELeave ) T_CShwEffectControl();
+    CleanupStack::PushL( self );
+
+    self->ConstructL();
+
+    return self;
+    }
+
+// Destructor (virtual by CBase)
+T_CShwEffectControl::~T_CShwEffectControl()
+    {
+    }
+
+// Default constructor
+T_CShwEffectControl::T_CShwEffectControl() :
+	iStubEffectManager( this )
+    {
+    }
+
+// Second phase construct
+void T_CShwEffectControl::ConstructL()
+    {
+    // The ConstructL from the base class CEUnitTestSuiteClass must be called.
+    // It generates the test case table.
+    CEUnitTestSuiteClass::ConstructL();
+    }
+
+//  METHODS
+void T_CShwEffectControl::MGlxMediaList_MethodCalled( TMGlxMediaListMethodId aMethodId )
+	{
+	// append the methodid in the array
+	TInt error = iMediaListCalls.Append( aMethodId );
+	// check that append succeeded
+	if( error != KErrNone )
+		{
+		// critical error, not enough space to append messages
+		User::Panic( _L("T_CShwEffectControl::MGlxMediaList_MethodCalled"), __LINE__ );
+		}
+	}
+
+void T_CShwEffectControl::MGlxVisualList_MethodCalled( TMGlxVisualListMethodId aMethodId )
+	{
+	// append the methodid in the array
+	TInt error = iVisualListCalls.Append( aMethodId );
+	// check that append succeeded
+	if( error != KErrNone )
+		{
+		// critical error, not enough space to append messages
+		User::Panic( _L("TestError:AppendFail"), -1 );
+		}
+	}
+
+void T_CShwEffectControl::MShwEffectManager_MethodCalled( TMShwEffectManagerMethodId aMethodId )
+	{
+	// append the methodid in the array
+	TInt error = iEffectCalls.Append( aMethodId );
+	// check that append succeeded
+	if( error != KErrNone )
+		{
+		// critical error, not enough space to append messages
+		User::Panic( _L("TestError:AppendFail"), -2 );
+		}
+	}
+
+TInt gSendEventLeaveCode = KErrNone;
+void T_CShwEffectControl::SendEventL( MShwEvent* aEvent )
+	{
+	// need to clone the event since the caller goes out of scope
+	TInt error = iEvents.Append( aEvent->CloneLC() );
+	CleanupStack::Pop(); // aEvent->CloneLC()
+	
+	// check that append succeeded
+	if( error != KErrNone )
+		{
+		// critical error, not enough space to append events
+		User::Panic( _L("T_CShwEffectControl::NotifyL"), __LINE__ );
+		}
+    User::LeaveIfError( gSendEventLeaveCode );
+	
+	// stop the scheduler loop if its started
+	if( iWait.IsStarted() )
+		{
+		iWait.AsyncStop();
+		}
+	}
+
+void T_CShwEffectControl::EmptySetupL()
+	{
+	gNShwEnginePanicCalled = EFalse; // by default no panic was called
+	gSendEventLeaveCode = KErrNone; // by default no leaves in SendEventL
+	// make room for 20 entries on each array
+	iVisualListCalls.ReserveL( 20 );
+	iMediaListCalls.ReserveL( 20 );
+	iEffectCalls.ReserveL( 20 );
+	iEvents.ReserveL( 20 );
+
+	iStubVisualList = new( ELeave ) TMGlxVisualList_Adapter( this );
+	iStubMediaList = new( ELeave ) TMGlxMediaList_Stub( this );
+
+	// set the size and focus of the list
+	iStubVisualList->iSize = 3;
+	iStubVisualList->iFocus = 1;
+	iStubMediaList->iCount = 3;
+	iStubMediaList->iFocus = 1;
+
+	iStubEffectManager.iViewDuration = 0;
+	iStubEffectManager.iTransitionDuration = 0;
+	
+	// reset the visuals of effect stub
+    iStubEffectManager.iPrepareVisual = reinterpret_cast<CHuiVisual*>( KErrNotFound );
+    iStubEffectManager.iViewVisual = reinterpret_cast<CHuiVisual*>( KErrNotFound );
+    iStubEffectManager.iTransitionVisual = reinterpret_cast<CHuiVisual*>( KErrNotFound );
+    
+    // tell the thumbnail stub to add attributes
+    // this tells the thumbnailcontext stub to add entries to the
+    // array which then tell the thumbnail loader that the 
+    // thumbnail was not yet loaded
+    gThumbnailContextRequestCount = 1;
+    // by default size is available
+    gTGlxMediaGetDimensions = ETrue;
+    // by default we dont want alloc behavior
+    gFetchContextAllocTest = EFalse;
+	}
+
+void T_CShwEffectControl::SetupL()
+	{
+	// reuse the empty version to create the stubs
+	EmptySetupL();
+	// create the effect control
+	iCShwEffectControl = 
+		CShwEffectControl::NewL( 
+			iStubEffectManager, *iStubVisualList, *iStubMediaList, TSize( 320, 240 ) );
+	// set the event queue
+	iCShwEffectControl->SetEventQueue( this );
+
+    // perform the second phase of construction
+	TShwEventInitialize initEvent;
+    iCShwEffectControl->NotifyL( &initEvent );
+	}
+
+void T_CShwEffectControl::Teardown()
+	{
+	// delete effect control
+	delete iCShwEffectControl;
+	iCShwEffectControl = NULL; 
+	// close the arrays
+	iEffectCalls.Close();
+	iVisualListCalls.Close();
+	iMediaListCalls.Close();
+	// release events
+	for( TInt i=0; i<iEvents.Count(); i++ )
+		{
+		MShwEvent* event = iEvents[ i ];
+		delete event;
+		}
+	iEvents.Close();
+	// release the visual list stub
+	delete iStubVisualList;
+	iStubVisualList = NULL;
+	// delete the media list stub
+	delete iStubMediaList;
+	iStubMediaList = NULL;
+	}
+
+void T_CShwEffectControl::TestConstructionL()
+	{
+    // we want alloc behavior
+    gFetchContextAllocTest = ETrue;
+	// reset stub
+	iStubVisualList->iSize = 11;
+	iStubVisualList->iFocus = 10;
+	// reset the state as setup uses splitter
+	gSplitterAddLayoutLCalled = EFalse;
+	gSplitterRemoveLayoutLCalled = EFalse;
+	// create an effect control
+	CShwEffectControl* tmp = 
+		CShwEffectControl::NewL( 
+			iStubEffectManager, *iStubVisualList, *iStubMediaList, TSize( 320, 240 ) );
+	// need to put to cleanupstack in case NotifyL leaves
+	CleanupStack::PushL( tmp );
+
+	EUNIT_ASSERT_DESC( tmp, "Construction successfull");
+
+	EUNIT_ASSERT_EQUALS_DESC( 0, iEffectCalls.Count(), "Effect manager was not called" );
+
+    // perform the second phase of construction
+	TShwEventInitialize initEvent;
+    tmp->NotifyL( &initEvent );
+
+	// check that the calls made by CShwEffectControl were correct ones
+	EUNIT_ASSERT_EQUALS_DESC( 2, iEffectCalls.Count(), "Effect manager was called 2 times" );
+	EUNIT_ASSERT_EQUALS_DESC( E_MShwEffect_p_CurrentEffect, iEffectCalls[ 0 ], "current effect was called" );
+	EUNIT_ASSERT_EQUALS_DESC( E_MGlxLayout_PrepareViewL, iEffectCalls[ 1 ], "current effect was called" );
+
+    // test notify again with size not available
+    gTGlxMediaGetDimensions = EFalse;
+    // call notify again
+    tmp->NotifyL( &initEvent );
+	// check that the calls made by CShwEffectControl were correct ones
+	EUNIT_ASSERT_EQUALS_DESC( 4, iEffectCalls.Count(), "Effect manager was called 4 times" );
+	EUNIT_ASSERT_EQUALS_DESC( E_MShwEffect_p_CurrentEffect, iEffectCalls[ 2 ], "current effect was called" );
+	EUNIT_ASSERT_EQUALS_DESC( E_MGlxLayout_PrepareViewL, iEffectCalls[ 3 ], "current effect was called" );
+
+	// check splitter usage
+	EUNIT_ASSERT_DESC( !gSplitterAddLayoutLCalled, "layout was not set" );
+	EUNIT_ASSERT_DESC( !gSplitterRemoveLayoutLCalled, "layout was not removed" );
+
+	CleanupStack::PopAndDestroy( tmp );
+	}
+
+void T_CShwEffectControl::TransitionCompletedL()
+	{
+	// reset the state as setup uses splitter
+	gSplitterAddLayoutLCalled = EFalse;
+	gSplitterRemoveLayoutLCalled = EFalse;
+
+	// call transition completed
+	iCShwEffectControl->SendTransitionReadyL();
+
+	// check that we got the correct event
+	EUNIT_ASSERT_DESC( iEvents.Count() > 0, "we got an event");
+	EUNIT_ASSERT_DESC( 
+		dynamic_cast<TShwEventTransitionReady*>( iEvents[ 0 ] ), 
+		"event was correct class" );
+
+	// check splitter usage
+	EUNIT_ASSERT_DESC( !gSplitterAddLayoutLCalled, "layout was not set" );
+	EUNIT_ASSERT_DESC( !gSplitterRemoveLayoutLCalled, "layout was not removed" );
+	}
+    
+void T_CShwEffectControl::TransitionCompleted2L()
+	{
+	// tell the thumbnail context that the thumbnail is already loaded
+	// so that the thumbnail loader will immediately make the callback
+	gThumbnailContextRequestCount = 0;
+	// tell the medialist stub to notify that we have the first thumbnail loaded
+	iStubMediaList->NotifyAttributesAvailableL( iStubMediaList->iFocus );
+
+	// check that we dont have event
+	EUNIT_ASSERT_EQUALS_DESC( 1, iEvents.Count(), "event received");
+	// check that we got the correct event
+	EUNIT_ASSERT_DESC( 
+		dynamic_cast<TShwEventReadyToView*>( iEvents[ 0 ] ), 
+		"event was correct class" );
+
+	// send the event
+	TShwEventStartTransition trans( 123 );
+	iCShwEffectControl->NotifyL( &trans );
+	
+	// start the wait loop
+	iWait.Start();
+	// check that we got event
+	EUNIT_ASSERT_EQUALS_DESC( 3, iEvents.Count(), "we got an event");
+	// check that we got the correct events
+	EUNIT_ASSERT_DESC( 
+		dynamic_cast<TShwEventReadyToView*>( iEvents[ 1 ] ), 
+		"event was correct class" );
+	EUNIT_ASSERT_DESC( 
+		dynamic_cast<TShwEventTransitionReady*>( iEvents[ 2 ] ), 
+		"event was correct class" );
+	}
+
+void T_CShwEffectControl::NotifyLL()
+	{
+	TInt initialEffectCalls = iEffectCalls.Count();
+	TInt initialVisualCalls = iVisualListCalls.Count();
+
+	// reset the state as setup uses splitter
+	gSplitterAddLayoutLCalled = EFalse;
+	gSplitterRemoveLayoutLCalled = EFalse;
+	// reset the visuals
+	iStubEffectManager.iPrepareVisual = reinterpret_cast<CHuiVisual*>( KErrNotFound );
+	iStubEffectManager.iViewVisual = reinterpret_cast<CHuiVisual*>( KErrNotFound );
+	iStubEffectManager.iTransitionVisual = reinterpret_cast<CHuiVisual*>( KErrNotFound );
+
+	// test not supported event path
+	iCShwEffectControl->NotifyL( NULL );
+
+	// check that there was no new calls made by CShwEffectControl to visual list or effect manager
+	EUNIT_ASSERT_EQUALS_DESC( initialEffectCalls, iEffectCalls.Count(), "Effect manager was not called" );
+	EUNIT_ASSERT_EQUALS_DESC( initialVisualCalls, iVisualListCalls.Count(), "Visual list was not called" );
+
+	// test if( viewEvent )
+
+	// tell the stub context that a request is complete
+	gThumbnailContextRequestCount = KErrNone;
+	// tell the media list stub to notify that thumbnail in focus is loaded
+	iStubMediaList->NotifyAttributesAvailableL( iStubMediaList->iFocus );
+
+	// check that we got the event
+	EUNIT_ASSERT_EQUALS_DESC( 1, iEvents.Count(), "we got an event");
+	// this was the first time the event was received so we get init complete event
+	EUNIT_ASSERT_DESC( 
+		dynamic_cast< TShwEventReadyToView* >( iEvents[ 0 ] ), 
+		"TShwEventReadyToView received" );
+
+	// tell the stub context that its request is complete, at this point there is no
+	// context so we only test that thumbnail context works without one
+	gThumbnailContextRequestCount = KErrNone;
+	// tell the media list stub to notify that next thumbnail is loaded
+	// remember the modulo
+	iStubMediaList->NotifyAttributesAvailableL( 
+		( iStubMediaList->iFocus + 1 )%iStubMediaList->iCount );
+
+	// if( view_event ) : true
+	// if( iLoopStarted ) : false
+	TShwEventStartView start( 999 );
+	iCShwEffectControl->NotifyL( &start );
+
+	// thumbnail notify is always asynchronous so first check we did not yet get the event
+	EUNIT_ASSERT_EQUALS_DESC( 1, iEvents.Count(), "we got only previous event");
+	// start async wait
+	iWait.Start();
+
+	// check that we got view ready event
+	EUNIT_ASSERT_EQUALS_DESC( 2, iEvents.Count(), "we got an event");
+	EUNIT_ASSERT_DESC( dynamic_cast<TShwEventReadyToAdvance*>( iEvents[ 1 ] ), "TShwEventReadyToAdvance received" );
+
+	// check the visual given to effect
+	EUNIT_ASSERT_EQUALS_DESC( (TInt)iStubEffectManager.iPrepareVisual, 2, "prepare was given visual 2 (focus is on 1)" );
+	EUNIT_ASSERT_EQUALS_DESC( (TInt)iStubEffectManager.iViewVisual, 1, "view was given visual 1 (focus is on 1)" );
+	EUNIT_ASSERT_EQUALS_DESC( (TInt)iStubEffectManager.iTransitionVisual, KErrNotFound, "transition was not given visual" );
+	// check splitter usage
+	EUNIT_ASSERT_DESC( gSplitterAddLayoutLCalled, "layout was set (view layout)" );
+	EUNIT_ASSERT_DESC( gSplitterRemoveLayoutLCalled, "layout was removed (old view layout)" );
+
+	// test path:
+	EUNIT_PRINT( _L("if( view_event ) : false") );
+	EUNIT_PRINT( _L("else if( trans_event ) : true") );
+	// if( view_event ) : false
+	// else if( trans_event ) : true
+	TInt effectCalls = iEffectCalls.Count();
+	TInt visualCalls = iVisualListCalls.Count();
+	// reset the visuals
+	iStubEffectManager.iPrepareVisual = reinterpret_cast<CHuiVisual*>( KErrNotFound );
+	iStubEffectManager.iViewVisual = reinterpret_cast<CHuiVisual*>( KErrNotFound );
+	iStubEffectManager.iTransitionVisual = reinterpret_cast<CHuiVisual*>( KErrNotFound );
+	// send the event
+	TShwEventStartTransition trans( 666 );
+	iCShwEffectControl->NotifyL( &trans );
+	// check that view duration was stored from view event
+	EUNIT_ASSERT_EQUALS_DESC( 999, iStubEffectManager.iViewDuration, "view duration is set correctly" );
+	// check that transition duration was given as parameter
+	EUNIT_ASSERT_EQUALS_DESC( 666, iStubEffectManager.iTransitionDuration, "transition duration is set correctly" );
+	// check the visual given to effect
+	EUNIT_ASSERT_EQUALS_DESC( (TInt)iStubEffectManager.iPrepareVisual, KErrNotFound, "prepare was not given visual" );
+	EUNIT_ASSERT_EQUALS_DESC( (TInt)iStubEffectManager.iViewVisual, 2, "view was given visual 2 (focus is on 2)" );
+	EUNIT_ASSERT_EQUALS_DESC( (TInt)iStubEffectManager.iTransitionVisual, 1, "transition was given visual 1 (focus is on 1)" );
+	// check splitter usage
+	EUNIT_ASSERT_DESC( gSplitterAddLayoutLCalled, "layout was set" );
+	EUNIT_ASSERT_DESC( gSplitterRemoveLayoutLCalled, "layout was removed" );
+
+	// test path:
+	EUNIT_PRINT( _L("if( view_event ) : true") );
+	EUNIT_PRINT( _L("if( iLoopStarted ) : true") );
+	EUNIT_PRINT( _L("else if( trans_event ) : false") );
+	// if( view_event ) : true
+	// if( iLoopStarted ) : true
+	// reset the state of splitter stub
+	gSplitterAddLayoutLCalled = EFalse;
+	gSplitterRemoveLayoutLCalled = EFalse;
+	effectCalls = iEffectCalls.Count();
+	visualCalls = iVisualListCalls.Count();
+	// reset the visuals
+	iStubEffectManager.iPrepareVisual = reinterpret_cast<CHuiVisual*>( KErrNotFound );
+	iStubEffectManager.iViewVisual = reinterpret_cast<CHuiVisual*>( KErrNotFound );
+	iStubEffectManager.iTransitionVisual = reinterpret_cast<CHuiVisual*>( KErrNotFound );
+	// move focus to 2
+	iStubVisualList->iFocus = 2;
+	iStubMediaList->iFocus = 2;
+
+	// tell the stub context that its request is complete
+	gThumbnailContextRequestCount = KErrNone;
+	// tell the media list stub to notify that thumbnail is loaded
+	// remember the modulo
+	iStubMediaList->NotifyAttributesAvailableL( 
+		( iStubMediaList->iFocus + 1 )%iStubMediaList->iCount );
+
+	// send the event
+	TShwEventStartView start2( 123 );
+	iCShwEffectControl->NotifyL( &start2 );
+
+	// check we got the ready to view event 
+	EUNIT_ASSERT_EQUALS_DESC( 3, iEvents.Count(), "we got ready to view");
+	EUNIT_ASSERT_DESC( dynamic_cast<TShwEventReadyToView*>( iEvents[ 2 ] ), "TShwEventReadyToView received" );
+	// start async wait
+	iWait.Start();
+
+	// check that view duration was not set
+	EUNIT_ASSERT_EQUALS_DESC( 999, iStubEffectManager.iViewDuration, "view duration is same as last, see above" );
+	// check the visual given to effect
+	EUNIT_ASSERT_EQUALS_DESC( (TInt)iStubEffectManager.iPrepareVisual, 0, "prepare view was given visual 0 (focus is on 2, size is 3)" );
+	EUNIT_ASSERT_EQUALS_DESC( (TInt)iStubEffectManager.iViewVisual, KErrNotFound, "view was not given visual" );
+	EUNIT_ASSERT_EQUALS_DESC( (TInt)iStubEffectManager.iTransitionVisual, 1, "exit transition was given visual 1 (focus is on 2)" );
+	// check that we got view ready event
+	EUNIT_ASSERT_EQUALS_DESC( 4, iEvents.Count(), "event received" );
+	EUNIT_ASSERT_DESC( dynamic_cast<TShwEventReadyToAdvance*>( iEvents[ 3 ] ), "TShwEventReadyToAdvance received" );
+
+	// check splitter usage
+	EUNIT_ASSERT_DESC( !gSplitterAddLayoutLCalled, "layout was not set" );
+	EUNIT_ASSERT_DESC( gSplitterRemoveLayoutLCalled, "layout was removed" );
+	}
+
+void T_CShwEffectControl::SlowImageLoadL()
+	{
+	// test path:
+	EUNIT_PRINT( _L("if( view_event ) : true") );
+	EUNIT_PRINT( _L("if( iLoopStarted ) : false") );
+	EUNIT_PRINT( _L("else if( trans_event ) : false") );
+
+	// tell the stub context that its request is complete
+	gThumbnailContextRequestCount = KErrNone;
+	// tell the media list stub to notify that thumbnail in focus is loaded
+	iStubMediaList->NotifyAttributesAvailableL( iStubMediaList->iFocus );
+
+	// check that we got the event
+	EUNIT_ASSERT_EQUALS_DESC( 1, iEvents.Count(), "we got an event");
+	// this was the first time the event was received so we get init complete event
+	EUNIT_ASSERT_DESC( 
+		dynamic_cast< TShwEventReadyToView* >( iEvents[ 0 ] ), 
+		"TShwEventReadyToView received" );
+
+	// tell the stub context that its request is not complete
+	gThumbnailContextRequestCount = 1;
+
+	// if( view_event ) : true
+	// if( iLoopStarted ) : false
+	TShwEventStartView start( 999 );
+	iCShwEffectControl->NotifyL( &start );
+	// variable iLoopStarted is initialized as false so we dont go through the loop
+	// check that we got view ready event
+	EUNIT_ASSERT_EQUALS_DESC( 1, iEvents.Count(), "new event not received" );
+
+	// tell the stub context that its request is complete
+	gThumbnailContextRequestCount = KErrNone;
+	// tell the media list stub to notify that thumbnail is loaded
+	// remember the modulo
+	iStubMediaList->NotifyAttributesAvailableL( 
+		( iStubMediaList->iFocus + 1 )%iStubMediaList->iCount );
+
+	EUNIT_ASSERT_EQUALS_DESC( 2, iEvents.Count(), "we got an event");
+	EUNIT_ASSERT_DESC( dynamic_cast<TShwEventReadyToAdvance*>( iEvents[ 1 ] ), "TShwEventReadyToAdvance received" );
+	}
+
+void T_CShwEffectControl::SlowImageLoad2L()
+	{
+	// set the size and focus of the list
+	iStubVisualList->iSize = 10;
+	iStubVisualList->iFocus = 1;
+	iStubMediaList->iCount = 10;
+	iStubMediaList->iFocus = 1;
+	// test path:
+	EUNIT_PRINT( _L("if( view_event ) : true") );
+	EUNIT_PRINT( _L("if( iLoopStarted ) : false") );
+	EUNIT_PRINT( _L("else if( trans_event ) : false") );
+
+	// tell the stub context that its request is complete
+	gThumbnailContextRequestCount = KErrNone;
+	// tell the media list stub to notify that thumbnail in focus is loaded
+	iStubMediaList->NotifyAttributesAvailableL( iStubMediaList->iFocus );
+
+	// check that we got the event
+	EUNIT_ASSERT_EQUALS_DESC( 1, iEvents.Count(), "we got an event");
+	// this was the first time the event was received so we get init complete event
+	EUNIT_ASSERT_DESC( 
+		dynamic_cast< TShwEventReadyToView* >( iEvents[ 0 ] ), 
+		"TShwEventReadyToView received" );
+
+	// tell the stub context that its request is not complete
+	gThumbnailContextRequestCount = 1;
+
+	// if( view_event ) : true
+	// if( iLoopStarted ) : false
+	TShwEventStartView start( 999 );
+	iCShwEffectControl->NotifyL( &start );
+	// variable iLoopStarted is initialized as false so we dont go through the loop
+	// check that we got view ready event
+	EUNIT_ASSERT_EQUALS_DESC( 1, iEvents.Count(), "new event not received" );
+
+	// tell the stub context that its request is complete
+	gThumbnailContextRequestCount = KErrNone;
+	// tell the media list stub to notify that thumbnail is loaded
+	// remember the modulo
+	iStubMediaList->NotifyAttributesAvailableL( 
+		( iStubMediaList->iFocus + 3 )%iStubMediaList->iCount );
+	EUNIT_ASSERT_EQUALS_DESC( 1, iEvents.Count(), "new event not received" );
+
+	// tell the media list stub to notify that thumbnail is loaded
+	// remember the modulo
+	iStubMediaList->NotifyAttributesAvailableL( 
+		( iStubMediaList->iFocus + 2 )%iStubMediaList->iCount );
+	EUNIT_ASSERT_EQUALS_DESC( 1, iEvents.Count(), "new event not received" );
+
+	// tell the stub context that its request is not complete
+	gThumbnailContextRequestCount = 1;
+	// tell the media list stub to notify that thumbnail is loaded
+	// remember the modulo
+	iStubMediaList->NotifyAttributesAvailableL( 
+		( iStubMediaList->iFocus + 1 )%iStubMediaList->iCount );
+	EUNIT_ASSERT_EQUALS_DESC( 1, iEvents.Count(), "new event not received" );
+
+	// tell the stub context that its request is complete
+	gThumbnailContextRequestCount = KErrNone;
+	iStubMediaList->NotifyAttributesAvailableL( 
+		( iStubMediaList->iFocus + 1 )%iStubMediaList->iCount );
+	EUNIT_ASSERT_EQUALS_DESC( 2, iEvents.Count(), "event received" );
+	// this was second time the event was received so we get view complete event
+	EUNIT_ASSERT_DESC( 
+		dynamic_cast<TShwEventReadyToAdvance*>( iEvents[ 1 ] ), 
+		"TShwEventViewReady received" );
+	}
+
+void T_CShwEffectControl::HandleFocusChangedL()
+	{
+	TInt initialVisualListCalls = iVisualListCalls.Count();
+	iCShwEffectControl->HandleFocusChangedL( 0, 0, NULL, NGlxListDefs::EUnknown );
+	EUNIT_ASSERT_NOT_EQUALS_DESC( 
+		initialVisualListCalls, iVisualListCalls.Count(), "Visual list was called" );
+	}
+
+void T_CShwEffectControl::TestThumbnailLoadingL()
+	{
+    // create shw thumbnail context for index 1 and size 100,100
+    const TInt thumbIndex = 1;
+    CShwThumbnailContext* context = CShwThumbnailContext::NewLC(thumbIndex,
+            TSize(100, 100), iStubMediaList);
+
+    // test that the index is returned
+    // set iterator to first
+    context->SetToFirst(iStubMediaList);
+    // then iterate once
+    TInt index = (*context)++;
+    EUNIT_ASSERT_EQUALS_DESC(thumbIndex, index, "check first iterated index");
+
+    index = (*context)++;
+    EUNIT_ASSERT_EQUALS_DESC( KErrNotFound, index, "next index is KErrNotFound" );
+
+    // check range
+    EUNIT_ASSERT_DESC( !context->InRange( thumbIndex-1 ), "thumbIndex-1 is not in range" );
+    EUNIT_ASSERT_DESC( !context->InRange( thumbIndex+1 ), "thumbIndex+1 is not in range" );
+    EUNIT_ASSERT_DESC( context->InRange( thumbIndex ), "thumbIndex is in range" );
+
+    CleanupStack::PopAndDestroy(context);
+    }
+
+void T_CShwEffectControl::TestErrorsInThumbnailLoadingL()
+	{
+	// set the size and focus of the list
+	iStubVisualList->iSize = 10;
+	iStubVisualList->iFocus = 1;
+	iStubMediaList->iCount = 10;
+	iStubMediaList->iFocus = 1;
+// first test that first thumbnail does not load
+	// tell the stub context that its request has error
+	gThumbnailContextRequestCount = KErrCorrupt;
+        {
+    	// create an effect control, no need to delete or cleanupstack
+    	TShwAutoPtr< CShwEffectControl > tmp = 
+    		CShwEffectControl::NewL( 
+    			iStubEffectManager, *iStubVisualList, *iStubMediaList, TSize( 320, 240 ) );
+    	// need to set the event queue		
+    	tmp->SetEventQueue( this );
+        // perform the second phase of construction
+    	TShwEventInitialize initEvent;
+        tmp->NotifyL( &initEvent );
+    	
+        // check that we did not get an event
+    	EUNIT_ASSERT_EQUALS_DESC( 0, iEvents.Count(), "we did not yet get an event");
+
+    	// start async wait loop
+    	iWait.Start();
+        
+    	// check that we got the event
+    	EUNIT_ASSERT_EQUALS_DESC( 1, iEvents.Count(), "we got an event");
+    	// this was the first time the event was received so we get init complete event
+    	EUNIT_ASSERT_DESC( 
+    		dynamic_cast< TShwEventReadyToView* >( iEvents[ 0 ] ), 
+    		"TShwEventReadyToView received" );
+        // delete and remove the event
+        delete iEvents[ 0 ];
+        iEvents.Remove( 0 );
+    	// tmp gets deleted here, EUnit checks for memory
+        }
+
+// test that second thumbnail does not load
+	// tell the stub context that its request is not yet completed
+	gThumbnailContextRequestCount = 1;
+        {
+    	// create an effect control, no need to delete or cleanupstack
+    	TShwAutoPtr< CShwEffectControl > tmp = 
+    		CShwEffectControl::NewL( 
+    			iStubEffectManager, *iStubVisualList, *iStubMediaList, TSize( 320, 240 ) );
+    	// need to set the event queue
+    	tmp->SetEventQueue( this );
+        // perform the second phase of construction
+    	TShwEventInitialize initEvent;
+        tmp->NotifyL( &initEvent );
+        // check that we did not get an event
+    	EUNIT_ASSERT_EQUALS_DESC( 0, iEvents.Count(), "we did not yet get new event");
+    	
+    	// tell the stub context that the request has error
+    	gThumbnailContextRequestCount = KErrCorrupt;
+    	// tell the media list stub to notify that first thumbnail is loaded
+    	iStubMediaList->NotifyAttributesAvailableL( iStubMediaList->iFocus  );
+
+    	// check that we got the event
+    	EUNIT_ASSERT_EQUALS_DESC( 1, iEvents.Count(), "we got an event");
+    	// this was the first time the event was received so we get init complete event
+    	EUNIT_ASSERT_DESC( 
+    		dynamic_cast< TShwEventReadyToView* >( iEvents[ 0 ] ), 
+    		"TShwEventReadyToView received" );
+        // delete and remove the event
+        delete iEvents[ 0 ];
+        iEvents.Remove( 0 );
+    	// tmp gets deleted here, EUnit checks for memory
+        }
+
+// test HandleError call before first thumbnail
+	// tell the stub context that its request is not yet completed
+	gThumbnailContextRequestCount = 1;
+        {
+    	// create an effect control, no need to delete or cleanupstack
+    	TShwAutoPtr< CShwEffectControl > tmp = 
+    		CShwEffectControl::NewL( 
+    			iStubEffectManager, *iStubVisualList, *iStubMediaList, TSize( 320, 240 ) );
+    	// need to set the event queue		
+    	tmp->SetEventQueue( this );
+        // perform the second phase of construction
+    	TShwEventInitialize initEvent;
+        tmp->NotifyL( &initEvent );
+        // check that we did not get an event
+    	EUNIT_ASSERT_EQUALS_DESC( 0, iEvents.Count(), "we did not yet get new event");
+
+    	// tell the stub context that the request has error
+    	gThumbnailContextRequestCount = KErrCorrupt;
+    	// tell the media list stub to notify that there was an error
+    	iStubMediaList->NotifyError( KErrNoMemory  );
+
+    	// start async wait loop
+    	iWait.Start();
+
+    	// check that we got the event
+    	EUNIT_ASSERT_EQUALS_DESC( 1, iEvents.Count(), "we got an event");
+    	// this was the first time the event was received so we get init complete event
+    	EUNIT_ASSERT_DESC( 
+    		dynamic_cast< TShwEventReadyToView* >( iEvents[ 0 ] ), 
+    		"TShwEventReadyToView received" );
+        // delete and remove the event
+        delete iEvents[ 0 ];
+        iEvents.Remove( 0 );
+    	// tmp gets deleted here, EUnit checks for memory
+        }
+
+// test HandleError call after first thumbnail
+	// tell the stub context that its request is completed
+	gThumbnailContextRequestCount = KErrNone;
+        {
+    	// create an effect control, no need to delete or cleanupstack
+    	TShwAutoPtr< CShwEffectControl > tmp = 
+    		CShwEffectControl::NewL( 
+    			iStubEffectManager, *iStubVisualList, *iStubMediaList, TSize( 320, 240 ) );
+    	// need to set the event queue		
+    	tmp->SetEventQueue( this );
+        // perform the second phase of construction
+    	TShwEventInitialize initEvent;
+        tmp->NotifyL( &initEvent );
+        // check that we did not get an event
+    	EUNIT_ASSERT_EQUALS_DESC( 0, iEvents.Count(), "we did not yet get new event");
+
+    	// start async wait loop
+    	iWait.Start();
+
+    	// check that we got the event
+    	EUNIT_ASSERT_EQUALS_DESC( 1, iEvents.Count(), "we got an event");
+    	// this was the first time the event was received so we get init complete event
+    	EUNIT_ASSERT_DESC( 
+    		dynamic_cast< TShwEventReadyToView* >( iEvents[ 0 ] ), 
+    		"TShwEventReadyToView received" );
+        // delete and remove the event
+        delete iEvents[ 0 ];
+        iEvents.Remove( 0 );
+
+    	// tell the stub context that its request is not yet completed
+    	gThumbnailContextRequestCount = 1;
+        // send start view
+        TShwEventStartView startView( 123 );
+        tmp->NotifyL( &startView );
+
+    	// tell the stub context that the request has error
+    	gThumbnailContextRequestCount = KErrCorrupt;
+    	// tell the media list stub to notify that there was an error
+    	iStubMediaList->NotifyError( KErrNoMemory  );
+
+    	// start async wait loop
+    	iWait.Start();
+
+    	// check that we got the event
+    	EUNIT_ASSERT_EQUALS_DESC( 1, iEvents.Count(), "we got an event");
+    	// this was the first time the event was received so we get init complete event
+    	EUNIT_ASSERT_DESC( 
+    		dynamic_cast< TShwEventReadyToAdvance* >( iEvents[ 0 ] ), 
+    		"TShwEventReadyToView received" );
+        // delete and remove the event
+        delete iEvents[ 0 ];
+        iEvents.Remove( 0 );
+    	// tmp gets deleted here, EUnit checks for memory
+        }
+
+// test HandleItemRemovedL call
+	// tell the stub context that its request is not completed
+	gThumbnailContextRequestCount = KErrNone;
+        {
+    	// create an effect control, no need to delete or cleanupstack
+    	TShwAutoPtr< CShwEffectControl > tmp = 
+    		CShwEffectControl::NewL( 
+    			iStubEffectManager, *iStubVisualList, *iStubMediaList, TSize( 320, 240 ) );
+    	// need to set the event queue		
+    	tmp->SetEventQueue( this );
+        // perform the second phase of construction
+    	TShwEventInitialize initEvent;
+        tmp->NotifyL( &initEvent );
+        // check that we did not get an event
+    	EUNIT_ASSERT_EQUALS_DESC( 0, iEvents.Count(), "we did not yet get new event");
+
+    	// start async wait loop
+    	iWait.Start();
+
+    	// check that we got the event
+    	EUNIT_ASSERT_EQUALS_DESC( 1, iEvents.Count(), "we got an event");
+    	// this was the first time the event was received so we get init complete event
+    	EUNIT_ASSERT_DESC( 
+    		dynamic_cast< TShwEventReadyToView* >( iEvents[ 0 ] ), 
+    		"TShwEventReadyToView received" );
+        // delete and remove the event
+        delete iEvents[ 0 ];
+        iEvents.Remove( 0 );
+        
+        // tell medialist stub to call HandleItemRemovedL
+        iStubMediaList->NotifyItemRemoved( 0, 1 );
+        // this time the list was not empty so nothing done
+    	// check that we got no event
+    	EUNIT_ASSERT_EQUALS_DESC( 0, iEvents.Count(), "we got no event");
+        // remove items from stub medialist
+        iStubMediaList->iCount = 0;
+        // tell medialist stub to call HandleItemRemovedL
+        iStubMediaList->NotifyItemRemoved( 0, 1 );
+
+    	// check that we got the event
+    	EUNIT_ASSERT_EQUALS_DESC( 1, iEvents.Count(), "we got an event");
+    	// this was the first time the event was received so we get init complete event
+    	EUNIT_ASSERT_DESC( 
+    		dynamic_cast< TShwEventFatalError* >( iEvents[ 0 ] ), 
+    		"TShwEventReadyToView received" );
+        // delete and remove the event
+        delete iEvents[ 0 ];
+        iEvents.Remove( 0 );
+
+        // tell medialist stub to call HandleItemRemovedL again
+        iStubMediaList->NotifyItemRemoved( 0, 1 );
+        // this does nothing as the thumbnail loader was deleted and all contexts removed
+    	// check that we got no event
+    	EUNIT_ASSERT_EQUALS_DESC( 0, iEvents.Count(), "we got an event");
+    	// tmp gets deleted here, EUnit checks for memory
+        }
+
+    // test also leave on SendEventL
+	// tell the stub context that its request is not completed
+	gThumbnailContextRequestCount = KErrNone;
+        {
+    	// create an effect control, no need to delete or cleanupstack
+    	TShwAutoPtr< CShwEffectControl > tmp = 
+    		CShwEffectControl::NewL( 
+    			iStubEffectManager, *iStubVisualList, *iStubMediaList, TSize( 320, 240 ) );
+    	// need to set the event queue		
+    	tmp->SetEventQueue( this );
+        // perform the second phase of construction
+    	TShwEventInitialize initEvent;
+        tmp->NotifyL( &initEvent );
+    	// start async wait loop
+    	iWait.Start();
+        // remove items from stub medialist
+        iStubMediaList->iCount = 0;
+        // tell SendEventL to leave
+        gSendEventLeaveCode = KErrNoMemory;
+        // tell medialist stub to call HandleItemRemovedL
+        TRAPD( error, iStubMediaList->NotifyItemRemoved( 0, 1 ) );
+        // check that engine did panic
+        EUNIT_ASSERT_DESC( gNShwEnginePanicCalled, "Engine panic was called" );
+    	EUNIT_ASSERT_EQUALS_DESC( 
+    	    NShwEngine::EEngineFatalError, error, "panic code was fatal error");
+        }
+    
+	}
+
+
+//  TEST TABLE
+EUNIT_BEGIN_TEST_TABLE(
+    T_CShwEffectControl,
+    "Test suite for CShwEffectControl",
+    "UNIT" )
+
+EUNIT_ALLOC_TEST(
+    "Construct-destruct test",
+    "CShwEffectControl",
+    "CShwEffectControl",
+    "FUNCTIONALITY",
+    EmptySetupL, TestConstructionL, Teardown )	// needs to have teardown as alloc test
+    
+EUNIT_ALLOC_TEST(
+    "test TransitionCompleted",
+    "CShwEffectControl",
+    "TransitionCompleted",
+    "FUNCTIONALITY",
+    SetupL, TransitionCompletedL, Teardown )
+
+EUNIT_NOT_DECORATED_TEST(	// cant be decorated as active objects
+    "test TransitionCompleted",
+    "CShwEffectControl",
+    "TransitionCompleted",
+    "FUNCTIONALITY",
+    SetupL, TransitionCompleted2L, Teardown )
+
+EUNIT_NOT_DECORATED_TEST(	// cant be decorated as active objects
+    "test NotifyL",
+    "CShwEffectControl",
+    "NotifyL",
+    "FUNCTIONALITY",
+    SetupL, NotifyLL, Teardown )
+
+EUNIT_NOT_DECORATED_TEST(	// cant be decorated as active objects
+    "slow image load",
+    "CShwEffectControl",
+    "NotifyL",
+    "FUNCTIONALITY",
+    SetupL, SlowImageLoadL, Teardown )
+
+EUNIT_NOT_DECORATED_TEST(	// cant be decorated as active objects
+    "slow image load",
+    "CShwEffectControl",
+    "NotifyL",
+    "FUNCTIONALITY",
+    SetupL, SlowImageLoad2L, Teardown )
+
+EUNIT_TEST(
+    "HandleFocusChangedL",
+    "CShwEffectControl",
+    "HandleFocusChangedL",
+    "FUNCTIONALITY",
+    SetupL, HandleFocusChangedL, Teardown )
+
+EUNIT_TEST(
+    "Thumbnail loading",
+    "CShwThumbnailContext",
+    "multiple",
+    "FUNCTIONALITY",
+    SetupL, TestThumbnailLoadingL, Teardown )
+
+EUNIT_TEST(
+    "Thumbnail errors",
+    "CShwThumbnailLoader",
+    "multiple",
+    "FUNCTIONALITY",
+    EmptySetupL, TestErrorsInThumbnailLoadingL, Teardown )
+
+EUNIT_END_TEST_TABLE
+
+//  END OF FILE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/photosgallery/slideshow/engine/tsrc/t_cshweffectcontrol/t_cshweffectcontrol.h	Wed Oct 13 14:32:09 2010 +0300
@@ -0,0 +1,112 @@
+/*
+* Copyright (c) 2006-2007 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:   Test for effect control for the slideshow
+ *
+*/
+
+
+
+
+#ifndef __T_CSHWEFFECTCONTROL_H__
+#define __T_CSHWEFFECTCONTROL_H__
+
+//  EXTERNAL INCLUDES
+#include <CEUnitTestSuiteClass.h>
+#include <EUnitDecorators.h>
+
+
+//  INTERNAL INCLUDES
+#include "tmglxvisuallist_adapter.h"
+#include "tmglxmedialist_stub.h"
+#include "tmshweffectmanager_adapter.h"
+#include "shweventqueue.h"
+
+//  FORWARD DECLARATIONS
+class CShwEffectControl;
+
+//  CLASS DEFINITION
+/**
+ * EUnit test suite for CShwEffectControl
+ *
+ */
+NONSHARABLE_CLASS( T_CShwEffectControl )
+	: public CEUnitTestSuiteClass, 
+	public MGlxMediaList_Stub_Observer,
+	public MGlxVisualList_Observer, 
+	public MShwEffectManager_Observer, 
+	public MShwEventQueue
+    {
+    public:     // Constructors and destructors
+
+        /**
+         * Two phase construction
+         */
+        static T_CShwEffectControl* NewL();
+        static T_CShwEffectControl* NewLC();
+        /**
+         * Destructor
+         */
+        ~T_CShwEffectControl();
+
+	private:    // Constructors and destructors
+
+		T_CShwEffectControl();
+		void ConstructL();
+
+	public:	// from MGlxMediaList_Stub_Observer, MGlxVisualList_Observer, MShwEffectManager_Observer, MShwEventQueue
+
+		void MGlxMediaList_MethodCalled( TMGlxMediaListMethodId aMethodId );
+		void MGlxVisualList_MethodCalled( TMGlxVisualListMethodId aMethodId );
+		void MShwEffectManager_MethodCalled( TMShwEffectManagerMethodId aMethodId );
+		void SendEventL( MShwEvent* aEvent );
+
+	private:    // New methods
+
+		void EmptySetupL();
+		void SetupL();
+		void Teardown();
+
+		void TestConstructionL();
+		void TransitionCompletedL();
+		void TransitionCompleted2L();
+		void NotifyLL();
+		void SlowImageLoadL();
+		void SlowImageLoad2L();
+		void HandleFocusChangedL();
+		void TestThumbnailLoadingL();
+		void TestErrorsInThumbnailLoadingL();
+
+    private:    // Data
+
+        CShwEffectControl* iCShwEffectControl;
+        
+        TMGlxVisualList_Adapter* iStubVisualList;
+		TMGlxMediaList_Stub* iStubMediaList;
+
+        TMShwEffectManager_Adapter iStubEffectManager;
+        
+        CActiveSchedulerWait iWait;
+        
+        RArray<TInt> iVisualListCalls;
+        RArray<TInt> iMediaListCalls;
+        RArray<TInt> iEffectCalls;
+        RArray<MShwEvent*> iEvents;
+
+        EUNIT_DECLARE_TEST_TABLE; 
+
+    };
+
+#endif      //  __T_CSHWEFFECTCONTROL_H__
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/photosgallery/slideshow/engine/tsrc/t_cshweffectcontrol/t_cshweffectcontrol_dllmain.cpp	Wed Oct 13 14:32:09 2010 +0300
@@ -0,0 +1,32 @@
+/*
+* Copyright (c) 2006-2007 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:   Test for effect control for the slideshow
+ *
+*/
+
+
+
+
+//  CLASS HEADER
+#include "T_CShwEffectControl.h"
+
+//  EXTERNAL INCLUDES
+#include <CEUnitTestSuite.h>
+
+EXPORT_C MEUnitTest* CreateTestSuiteL()
+    {
+    return T_CShwEffectControl::NewL();
+    }
+
+//  END OF FILE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/photosgallery/slideshow/engine/tsrc/t_cshweffects/t_cshweffects.cpp	Wed Oct 13 14:32:09 2010 +0300
@@ -0,0 +1,321 @@
+/*
+* Copyright (c) 2007-2007 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:   Test for effect for the slideshow
+ *
+*/
+
+
+
+//  CLASS HEADER
+#include "t_cshweffects.h"
+
+//  EXTERNAL INCLUDES
+#include <digia/eunit/EUnitMacros.h>
+#include <digia/eunit/EUnitDecorators.h>
+
+#include <uiacceltk/huiEnv.h>
+#include <uiacceltk/huiDisplayCoeControl.h>
+#include <uiacceltk/huiImageVisual.h>
+#include <uiacceltk/huiControl.h>
+
+//  INTERNAL INCLUDES
+#include "shweffect.h"
+#include "shwresourceutility.h"
+#include "shwslideshowenginepanic.h"
+
+// -----------------------------------------------------------------------------
+// Stub for NShwEngine::Panic -->
+// -----------------------------------------------------------------------------
+TBool gNShwEnginePanicCalled = EFalse;
+namespace NShwEngine
+	{
+	extern void Panic( TShwEnginePanic aPanic )
+	    {
+	    gNShwEnginePanicCalled = ETrue;
+	    // in test situation just do a leave
+	    User::Leave( aPanic );
+	    }
+	}
+// -----------------------------------------------------------------------------
+// <-- Stub for NShwEngine::Panic
+// -----------------------------------------------------------------------------
+
+// -----------------------------------------------------------------------------
+// Stub for LocalisedNameL >>>
+// -----------------------------------------------------------------------------
+TPtrC gNameForEffect( 0, 0 );
+_LIT( T_KZoomPanName, "ZoomAndPan" );
+_LIT( T_KCrossfadeName, "Crossfade" );
+HBufC* ShwResourceUtility::LocalisedNameL( TInt aResourceId )
+	{
+	if( aResourceId == R_SHW_EFFECT_ZOOM_AND_PAN )
+		{
+		gNameForEffect.Set( T_KZoomPanName() );
+		return T_KZoomPanName().AllocL();
+		}
+	else if( aResourceId == R_SHW_EFFECT_CROSS_FADE )
+		{
+		gNameForEffect.Set( T_KCrossfadeName() );
+		return T_KCrossfadeName().AllocL();
+		}
+	gNameForEffect.Set( KNullDesC );
+	return NULL;		 
+	}
+// -----------------------------------------------------------------------------
+// <<< Stub for LocalisedNameL
+// -----------------------------------------------------------------------------
+
+class CTestControl : public CHuiControl
+	{
+	public:
+		static CTestControl* NewL( CHuiEnv& aEnv )
+			{
+			return new (ELeave) CTestControl( aEnv );
+			}
+		CTestControl( CHuiEnv& aEnv )
+	        : CHuiControl( aEnv )
+	    	{
+	    	}	
+	};
+
+// CONSTRUCTION
+T_CShwEffects* T_CShwEffects::NewLC( T_ShwEffectFactoryL* aEffectFactory )
+    {
+    T_CShwEffects* self = new( ELeave ) T_CShwEffects;
+    CleanupStack::PushL( self );
+
+	self->iEffectFactory = aEffectFactory;
+    self->ConstructL();
+
+    return self;
+    }
+
+// Destructor (virtual by CBase)
+T_CShwEffects::~T_CShwEffects()
+    {
+    }
+
+// Default constructor
+T_CShwEffects::T_CShwEffects()
+    {
+    }
+
+// Second phase construct
+void T_CShwEffects::ConstructL()
+    {
+    // The ConstructL from the base class CEUnitTestSuiteClass must be called.
+    // It generates the test case table.
+    CEUnitTestSuiteClass::ConstructL();
+    }
+
+//  METHODS
+
+void T_CShwEffects::EmptyL()
+	{
+	}
+
+void T_CShwEffects::SetupL()
+	{
+	// set name for the effect verification
+	gNameForEffect.Set( KNullDesC );
+
+	// create HUI env
+	iEnv = CHuiEnv::NewL();
+	// create Display
+    iCoeDisplay = CHuiDisplayCoeControl::NewL( *iEnv, TRect( 0, 0, 100, 100 ) );
+
+	// create control
+	iControl = CTestControl::NewL( *iEnv );
+	
+	// create the visual, ownership goes to iCoeDisplay
+	iVisual = CHuiImageVisual::AddNewL( *iControl );
+	
+	// call the factory method to construct the effect
+	iEffect = (*iEffectFactory)();
+	}
+
+void T_CShwEffects::Teardown()
+	{
+	// delete effect
+	delete iEffect;
+	iEffect = NULL;
+
+	// delete control, it deletes the visual
+	delete iControl;
+	iControl = NULL;
+
+	// delete display
+	delete iCoeDisplay;
+	iCoeDisplay = NULL;
+	
+	// delete env last
+	delete iEnv;
+	iEnv = NULL; 
+	}
+
+void T_CShwEffects::T_ConstructorL()
+	{
+	// call the factory method to construct the effect
+	iEffect = (*iEffectFactory)();
+
+	EUNIT_ASSERT_DESC( iEffect, "Effect is constructed");
+	// EUnit checks that memory is in balance
+	// teardown deletes the object
+	}
+    
+void T_CShwEffects::T_PrepareViewLL()
+	{
+	// initialize with null lists but proper screen
+	iEffect->InitializeL(
+	    NULL, 
+	    NULL, 
+	    NULL, 
+	    TSize( 320, 240 ) );
+	// call prepare view with proper size
+	TSize size = iEffect->PrepareViewL( iVisual, TSize( 320, 240 ) );
+	// verify that the thumbnail size is not 0,0
+	EUNIT_ASSERT_GREATER_DESC( 
+	    size.iWidth, 0, "thumbnail size is set");
+	EUNIT_ASSERT_GREATER_DESC( 
+	    size.iHeight, 0, "thumbnail size is set");
+
+	// call prepare view with unknown size
+	size = iEffect->PrepareViewL( iVisual, TSize( KErrNotFound, KErrNotFound ) );
+	// verify that the thumbnail size is not 0,0
+	EUNIT_ASSERT_GREATER_DESC( 
+	    size.iWidth, 0, "thumbnail size is set");
+	EUNIT_ASSERT_GREATER_DESC( 
+	    size.iHeight, 0, "thumbnail size is set");
+	}
+    
+void T_CShwEffects::T_EnterViewLL()
+	{
+	MGlxLayout* layout = iEffect->EnterViewL( iVisual, 123, 345 );
+	EUNIT_ASSERT_DESC( layout, "Layout is not NULL");
+	}
+    
+void T_CShwEffects::T_ExitViewL()
+	{
+	iEffect->ExitView( iVisual );
+	// nothing to really verify what the effect is supposed to do
+	EUNIT_ASSERT_DESC( iEffect, "Effect is constructed");
+	}
+    
+void T_CShwEffects::T_EnterTransitionLL()
+	{
+	MGlxLayout* layout = iEffect->EnterTransitionL( iVisual, 321 );
+	EUNIT_ASSERT_DESC( layout, "Layout is not NULL");
+	}
+
+void T_CShwEffects::T_ExitTransitionL()
+	{
+	iEffect->ExitTransition( iVisual );
+	// nothing to really verify what the effect is supposed to do
+	EUNIT_ASSERT_DESC( iEffect, "Effect is constructed");
+	}
+
+void T_CShwEffects::T_PauseLL()
+	{
+	iEffect->PauseL();
+	// nothing to really verify what the effect is supposed to do
+	EUNIT_ASSERT_DESC( iEffect, "Effect is constructed");
+	}
+
+void T_CShwEffects::T_ResumeL()
+	{
+	iEffect->Resume();
+	// nothing to really verify what the effect is supposed to do
+	EUNIT_ASSERT_DESC( iEffect, "Effect is constructed");
+	}
+    
+void T_CShwEffects::T_EffectInfoL()
+	{
+	// get effect info
+	TShwEffectInfo info = iEffect->EffectInfo();
+	// assert that the info contains some values
+	EUNIT_ASSERT_EQUALS_DESC( info.iName, gNameForEffect, "Info has correct name");
+	}
+
+//  TEST TABLE
+EUNIT_BEGIN_TEST_TABLE(
+    T_CShwEffects,
+    "Test suite for MShwEffect",
+    "UNIT" )
+
+EUNIT_ALLOC_TEST(
+    "Constructor test",
+    "MShwEffect",
+    "Constructor test",
+    "FUNCTIONALITY",
+    EmptyL, T_ConstructorL, Teardown )	// need teardown since alloc test
+
+EUNIT_TEST(
+    "PrepareViewL",
+    "CShwCrossFadeEffect",
+    "PrepareViewL",
+    "FUNCTIONALITY",
+    SetupL, T_PrepareViewLL, Teardown)
+    
+EUNIT_TEST(
+    "EnterViewL",
+    "CShwCrossFadeEffect",
+    "EnterViewL",
+    "FUNCTIONALITY",
+    SetupL, T_EnterViewLL, Teardown)
+    
+EUNIT_TEST(
+    "ExitView",
+    "CShwCrossFadeEffect",
+    "ExitView",
+    "FUNCTIONALITY",
+    SetupL, T_ExitViewL, Teardown)
+    
+EUNIT_TEST(
+    "EnterTransitionL",
+    "CShwCrossFadeEffect",
+    "EnterTransitionL",
+    "FUNCTIONALITY",
+    SetupL, T_EnterTransitionLL, Teardown)
+    
+EUNIT_TEST(
+    "ExitTransition",
+    "CShwCrossFadeEffect",
+    "ExitTransition",
+    "FUNCTIONALITY",
+    SetupL, T_ExitTransitionL, Teardown)
+    
+EUNIT_TEST(
+    "PauseL",
+    "CShwCrossFadeEffect",
+    "PauseL",
+    "FUNCTIONALITY",
+    SetupL, T_PauseLL, Teardown)
+    
+EUNIT_TEST(
+    "Resume",
+    "CShwCrossFadeEffect",
+    "Resume",
+    "FUNCTIONALITY",
+    SetupL, T_ResumeL, Teardown)
+    
+EUNIT_TEST(
+    "EffectInfo",
+    "CShwCrossFadeEffect",
+    "EffectInfo",
+    "FUNCTIONALITY",
+    SetupL, T_EffectInfoL, Teardown)
+
+EUNIT_END_TEST_TABLE
+
+//  END OF FILE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/photosgallery/slideshow/engine/tsrc/t_cshweffects/t_cshweffects.h	Wed Oct 13 14:32:09 2010 +0300
@@ -0,0 +1,97 @@
+/*
+* Copyright (c) 2007-2007 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:  Test for control for the slideshow
+ *
+*/
+
+
+
+
+#ifndef __T_CSHWEFFECT_H__
+#define __T_CSHWEFFECT_H__
+
+//  EXTERNAL INCLUDES
+#include <digia/eunit/CEUnitTestSuiteClass.h>
+#include <digia/eunit/EUnitDecorators.h>
+
+//  INTERNAL INCLUDES
+
+//  FORWARD DECLARATIONS
+class MShwEffect;
+class CHuiEnv;
+class CHuiDisplayCoeControl;
+class CHuiControl;
+class CHuiImageVisual;
+
+//	TYPE DEFINITIONS
+typedef MShwEffect* (T_ShwEffectFactoryL)();
+
+//  CLASS DEFINITION
+/**
+ * EUnit test suite for slideshow effects
+ */
+NONSHARABLE_CLASS( T_CShwEffects )
+	: public CEUnitTestSuiteClass
+    {
+    public:     // Constructors and destructors
+
+		/**
+		 * Two phase construction
+		 */
+		static T_CShwEffects* NewLC( T_ShwEffectFactoryL* aEffectFactory );
+
+		/**
+		 * Destructor
+		 */
+		~T_CShwEffects();
+
+    private:    // Constructors and destructors
+
+		T_CShwEffects();
+		void ConstructL();
+
+    private:    // New methods
+
+		void EmptyL();
+		void SetupL();
+		void Teardown();
+
+		void T_ConstructorL();
+		void T_PrepareViewLL();
+		void T_EnterViewLL();
+		void T_ExitViewL();
+		void T_EnterTransitionLL();
+		void T_ExitTransitionL();
+		void T_PauseLL();
+		void T_ResumeL();
+		void T_EffectInfoL();
+
+    private:    // Data
+
+		T_ShwEffectFactoryL* iEffectFactory;
+		MShwEffect* iEffect;
+
+		CHuiEnv* iEnv;
+		CHuiDisplayCoeControl* iCoeDisplay;
+		CHuiControl* iControl;
+		CHuiImageVisual* iVisual;
+
+
+		EUNIT_DECLARE_TEST_TABLE; 
+
+    };
+
+#endif      //  __T_CSHWEFFECT_H__
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/photosgallery/slideshow/engine/tsrc/t_cshweffects/t_cshweffects_dllmain.cpp	Wed Oct 13 14:32:09 2010 +0300
@@ -0,0 +1,64 @@
+/*
+* Copyright (c) 2007-2007 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:   Test for control for the slideshow
+ *
+*/
+
+
+
+
+//  CLASS HEADER
+#include "t_cshweffects.h"
+
+//  EXTERNAL INCLUDES
+#include <digia/eunit/CEUnitTestSuite.h>
+
+// CLASS UNDER TEST
+#include "shwcrossfadeeffect.h"
+#include "shwzoomandpaneffect.h"
+
+MShwEffect* CreateCrossfadeL()
+	{
+	// create the normal zoom and pan
+	MShwEffect* eff = CShwCrossFadeEffect::NewLC();
+	CleanupStack::Pop( eff );
+	return eff;
+	}
+
+MShwEffect* CreateZoomAndPanL()
+	{
+	MShwEffect* eff = CShwZoomAndPanEffect::NewLC();
+	CleanupStack::Pop( eff );
+	return eff;
+	}
+
+EXPORT_C MEUnitTest* CreateTestSuiteL()
+	{
+	// Create a root suite to contain tests for both the effects
+	CEUnitTestSuite* rootSuite = 
+		CEUnitTestSuite::NewLC( _L("ShwEffect Unit Tests") );
+
+	// Note that NewLC leaves the object in the cleanupstack.
+	rootSuite->AddL( T_CShwEffects::NewLC( &CreateCrossfadeL ) );
+	CleanupStack::Pop(); // T_CShwEffects instance
+
+	rootSuite->AddL( T_CShwEffects::NewLC( &CreateZoomAndPanL ) );
+	CleanupStack::Pop(); // T_CShwEffects instance
+
+	CleanupStack::Pop( rootSuite ); // rootSuite instance
+
+	return rootSuite;
+	}
+
+//  END OF FILE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/photosgallery/slideshow/engine/tsrc/t_cshwmusiccontrol/t_cshwmusiccontrol.cpp	Wed Oct 13 14:32:09 2010 +0300
@@ -0,0 +1,527 @@
+/*
+* Copyright (c) 2007-2007 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:  Test for music control for the slideshow
+ *
+*/
+
+
+
+//  CLASS HEADER
+#include "t_cshwmusiccontrol.h"
+
+//  EXTERNAL INCLUDES
+#include <EUnitMacros.h>
+#include <EUnitDecorators.h>
+
+//  INTERNAL INCLUDES
+#include "shwevent.h"
+
+namespace
+	{
+	_LIT(KFileName, "c:\\knightrider.mp3");	
+	}
+
+// CONSTRUCTION
+T_CShwMusicControl* T_CShwMusicControl::NewL()
+    {
+    T_CShwMusicControl* self = T_CShwMusicControl::NewLC();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+T_CShwMusicControl* T_CShwMusicControl::NewLC()
+    {
+    T_CShwMusicControl* self = new( ELeave ) T_CShwMusicControl;
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    return self;
+    }
+
+
+
+// Destructor (virtual by CBase)
+T_CShwMusicControl::~T_CShwMusicControl()
+    {
+    }
+
+
+
+// Default constructor
+T_CShwMusicControl::T_CShwMusicControl() 
+				   :iMusicOn(EFalse),
+				    iCurrentVolume(KErrNotFound),
+				    iMaxVolume(KErrNotFound),
+				    iPrevVolume(KErrNotFound)
+    {
+    }
+
+// Second phase construct
+void T_CShwMusicControl::ConstructL()
+    {
+    // The ConstructL from the base class CEUnitTestSuiteClass must be called.
+    // It generates the test case table.
+    CEUnitTestSuiteClass::ConstructL();
+    }
+
+void T_CShwMusicControl::SendEventL(MShwEvent* aEvent)
+	{
+	iEvent = aEvent->CloneLC();
+	CleanupStack::Pop( iEvent );
+	}
+
+TBool gMusicOnCalled = EFalse;
+void T_CShwMusicControl::MusicOnL()
+	{
+	EUNIT_PRINT(_L("Music is ON"));
+	iMusicOn = ETrue;
+	gMusicOnCalled = ETrue;
+	// leave if error code set
+    User::LeaveIfError( iLeaveInObserver );
+	}
+	
+TBool gMusicOffCalled = EFalse;
+void T_CShwMusicControl::MusicOff()
+	{
+	EUNIT_PRINT(_L("Music is OFF"));
+	iMusicOn = EFalse;
+	gMusicOffCalled = ETrue;
+	}
+
+
+void T_CShwMusicControl::MusicVolume(TInt aCurrentVolume, TInt aMaxVolume)
+	{
+	iPrevVolume    = iCurrentVolume;
+	iCurrentVolume = aCurrentVolume;
+	iMaxVolume     = aMaxVolume;
+	EUNIT_PRINT(_L("current volume %d"),aCurrentVolume);
+	if(iWait.IsStarted())
+		{
+		iWait.AsyncStop();
+		}
+	}
+
+void T_CShwMusicControl::ErrorWithTrackL( TInt aErrorCode )
+	{
+	iErrorCode = aErrorCode;
+	}
+
+void T_CShwMusicControl::Empty()
+	{
+	}
+
+void T_CShwMusicControl::SetupL()
+    {
+    // reset current and max volume
+    iCurrentVolume = KErrNotFound;
+    iMaxVolume = KErrNotFound;
+    // reset error code
+    iErrorCode = KErrNone;
+    // reset leave flag
+    iLeaveInObserver = KErrNone;
+    // reset state flags
+    gMusicOnCalled = EFalse;
+    gMusicOffCalled = EFalse;
+    
+    iCShwMusicControl = CShwMusicControl::NewL( *this, KFileName );
+	// set the event queue - inherited from parent CShwEventPublisherBase
+	iCShwMusicControl->SetEventQueue(this);
+    }
+
+
+void T_CShwMusicControl::Teardown()
+    {
+    delete iCShwMusicControl;
+    iCShwMusicControl = NULL;
+    
+    delete iEvent;
+    iEvent = NULL;
+    }
+
+void T_CShwMusicControl::TestConstructL()
+	{
+	EUNIT_PRINT(_L("CShwMusicControl::NewL"));
+	// create 
+    iCShwMusicControl = CShwMusicControl::NewL(*this, KFileName);
+	// set the event queue
+	iCShwMusicControl->SetEventQueue(this);
+	// test that object exists
+	EUNIT_ASSERT_DESC(iCShwMusicControl, "object created");
+	// test that no error
+	EUNIT_ASSERT_EQUALS_DESC( 
+	    KErrNone, iErrorCode, "if there was error, make sure track file exists");
+	// delete music control
+    delete iCShwMusicControl;
+    iCShwMusicControl = NULL;
+    // EUnit checks for memory leaks
+	}
+
+void T_CShwMusicControl::T_NotifyLL()
+    {
+	// test that no error
+	EUNIT_ASSERT_EQUALS_DESC( 
+	    KErrNone, iErrorCode, "if there was error, make sure track file exists");
+    // send start event
+    TShwEventStart start;
+    iCShwMusicControl->NotifyL(&start);
+	// Need to let the scheduler loop to get first volume callback
+	iWait.Start(); // Wait for notification of volume
+	EUNIT_ASSERT(iMusicOn == ETrue);
+    EUNIT_ASSERT(iCurrentVolume != KErrNotFound && iMaxVolume != KErrNotFound);
+    }
+
+void T_CShwMusicControl::T_NotifyL1L()
+    {
+	// test that no error
+	EUNIT_ASSERT_EQUALS_DESC( 
+	    KErrNone, iErrorCode, "if there was error, make sure track file exists");
+    // if should evaluate false: if (event)
+    MShwEvent* iParam1 = NULL;
+    iCShwMusicControl->NotifyL(iParam1);
+
+	EUNIT_ASSERT_DESC( !iEvent, "event was not received" );
+
+    // test also HandlePropertyL with unsupported property
+    iCShwMusicControl->HandlePropertyL( EPbPropertyMute, 0, 0 );
+    // test that volume was not send
+    EUNIT_ASSERT( iCurrentVolume == KErrNotFound && iMaxVolume == KErrNotFound );
+    }
+    
+void T_CShwMusicControl::T_NotifyL2L()
+    {
+	// test that no error
+	EUNIT_ASSERT_EQUALS_DESC( 
+	    KErrNone, iErrorCode, "if there was error, make sure track file exists");
+    // send start event
+    TShwEventStart start;
+    iCShwMusicControl->NotifyL( &start );
+	// Need to let the scheduler loop to get first volume callback
+	iWait.Start();
+	// check that we got the volume
+    EUNIT_ASSERT(iCurrentVolume != KErrNotFound && iMaxVolume != KErrNotFound);
+
+    // send pause
+    TShwEventPause pause;
+    iCShwMusicControl->NotifyL( &pause );
+	EUNIT_ASSERT( iMusicOn == EFalse );
+
+    // send resume
+    TShwEventResume resume;
+    iCShwMusicControl->NotifyL( &resume );
+
+	EUNIT_ASSERT(iMusicOn != EFalse );
+	}
+
+void T_CShwMusicControl::T_NotifyL3L()
+    {
+	// test that no error
+	EUNIT_ASSERT_EQUALS_DESC( 
+	    KErrNone, iErrorCode, "if there was error, make sure track file exists");
+    // send resume before start
+    TShwEventResume resume;
+    iCShwMusicControl->NotifyL( &resume );
+	EUNIT_ASSERT_DESC( iMusicOn == ETrue, "music is on" );
+
+    // Send pause before start, does not pause
+    TShwEventPause pause;
+    iCShwMusicControl->NotifyL( &pause );
+	EUNIT_ASSERT_DESC( iMusicOn == EFalse, "music is off" );
+
+    // send start event
+    TShwEventStart start;
+    iCShwMusicControl->NotifyL( &start );
+	// Need to let the scheduler loop to get first volume callback
+	iWait.Start();
+
+    // Second subsequent pause request 
+    iCShwMusicControl->NotifyL( &pause );
+	EUNIT_ASSERT_DESC( iMusicOn == EFalse, "music is now paused" );
+	}
+
+void T_CShwMusicControl::T_NotifyL4L()
+    {
+	// test that no error
+	EUNIT_ASSERT_EQUALS_DESC( 
+	    KErrNone, iErrorCode, "if there was error, make sure track file exists");
+    // send start event
+    TShwEventStart start;
+    iCShwMusicControl->NotifyL(&start);
+	// Need to let the scheduler loop to get first volume callback
+	iWait.Start();
+	
+    // if should evaluate false: if (event)
+    TShwEventVolumeDown vol;
+    iCShwMusicControl->NotifyL(&vol);
+
+	// Need to let the scheduler loop to get another volume callback
+	iWait.Start();
+	EUNIT_ASSERT_GREATER_DESC( iPrevVolume, iCurrentVolume, "volume should decrease" );
+	EUNIT_ASSERT_NOT_EQUALS( KErrNotFound, iMaxVolume );
+	 
+	iMaxVolume = KErrNotFound;
+    }
+    
+void T_CShwMusicControl::T_NotifyL5L()
+    {
+	// test that no error
+	EUNIT_ASSERT_EQUALS_DESC( 
+	    KErrNone, iErrorCode, "if there was error, make sure track file exists");
+    // send start event
+    TShwEventStart start;
+    iCShwMusicControl->NotifyL(&start);
+	// Need to let the scheduler loop to get first volume callback
+	iWait.Start();
+	
+    // if should evaluate false: if (event)
+    TShwEventVolumeUp vol;
+    iCShwMusicControl->NotifyL(&vol);
+
+	// Need to let the scheduler loop to get another volume callback
+	iWait.Start();
+	EUNIT_ASSERT_GREATER_DESC( iCurrentVolume, iPrevVolume, "volume should increase" );
+	EUNIT_ASSERT_NOT_EQUALS( KErrNotFound, iMaxVolume );
+	iMaxVolume = KErrNotFound;
+	}
+        
+void T_CShwMusicControl::T_ExtendedPlayL()
+    {
+	// test that no error
+	EUNIT_ASSERT_EQUALS_DESC( 
+	    KErrNone, iErrorCode, "if there was error, make sure track file exists");
+
+    TShwEventStart start;
+    iCShwMusicControl->NotifyL( &start );
+	
+	if (!iTimer)
+		{
+		iTimer = CPeriodic::NewL(EPriorityNormal);
+		}
+
+    // play for 10 seconds
+	const TInt KPlayPeriod = 10 * 1000000;    // Microseconds
+	TCallBack callBack(StopPlaying, this);
+	iTimer->Start(KPlayPeriod, KPlayPeriod, callBack);		
+	
+	iPlayWait.Start();
+	
+	delete iTimer;
+    iTimer = NULL;
+	
+    TShwEventPause pause;
+    iCShwMusicControl->NotifyL(&pause);
+	EUNIT_ASSERT(iMusicOn == EFalse);
+
+	}   
+
+TInt T_CShwMusicControl::StopPlaying(TAny* aMusicControl)
+    {
+    T_CShwMusicControl* self = reinterpret_cast<T_CShwMusicControl*>(aMusicControl);
+
+	if(self->iPlayWait.IsStarted())
+		{
+		self->iPlayWait.AsyncStop();
+		}
+
+    return KErrNone;
+    }    
+
+void T_CShwMusicControl::T_ErrorInFileL()
+    {
+    // need to reset state as the setup is empty
+    gMusicOnCalled = EFalse;
+    // file that does not exist
+    _LIT( KErrorFileName, "C:\\juubaduuba.mp123" );
+	// create 
+    iCShwMusicControl = CShwMusicControl::NewL( *this, KErrorFileName );
+	// set the event queue
+	iCShwMusicControl->SetEventQueue( this );
+	// test that object exists
+	EUNIT_ASSERT_DESC(iCShwMusicControl, "object created");
+	
+	// test that error was called
+	// test that no error
+	EUNIT_ASSERT_EQUALS_DESC( 
+	    KErrNotFound, iErrorCode, "track should not exist");
+
+    // test that start is a no-op
+    TShwEventStart start;
+    iCShwMusicControl->NotifyL( &start );
+	
+	// test that music is off
+    EUNIT_ASSERT_DESC( gMusicOnCalled == EFalse, "music on was not called" );
+
+	// delete music control
+    delete iCShwMusicControl;
+    iCShwMusicControl = NULL;
+    // EUnit checks for memory leaks
+	}   
+
+void T_CShwMusicControl::T_LeaveInObserverL()
+    {
+    // make observer leave
+    iLeaveInObserver = KErrCorrupt;
+
+    // send start event
+    TShwEventStart start;
+    iCShwMusicControl->NotifyL( &start );
+    
+	// test that music is off
+	EUNIT_ASSERT_DESC( iMusicOn == EFalse, "music is off");
+    EUNIT_ASSERT_DESC( gMusicOnCalled == ETrue, "music on was called (and it did leave)" );
+    EUNIT_ASSERT_DESC( gMusicOffCalled == ETrue, "music off was called" );
+    // reset flags
+    gMusicOnCalled = EFalse;
+    gMusicOffCalled = EFalse;
+
+    // make observer not leave
+    iLeaveInObserver = KErrNone;
+
+    // resend start event
+    iCShwMusicControl->NotifyL( &start );
+	// test that music is on
+	EUNIT_ASSERT_DESC( iMusicOn == ETrue, "music is on");
+    EUNIT_ASSERT_DESC( gMusicOnCalled == ETrue, "music on was called" );
+    EUNIT_ASSERT_DESC( gMusicOffCalled == EFalse, "music off was not called" );
+    // reset flags
+    gMusicOnCalled = EFalse;
+    gMusicOffCalled = EFalse;
+
+    // send pause
+    TShwEventPause pause;
+    iCShwMusicControl->NotifyL( &pause );
+	EUNIT_ASSERT_DESC( iMusicOn == EFalse, "music is off" );
+    EUNIT_ASSERT_DESC( gMusicOnCalled == EFalse, "music on was not called" );
+    EUNIT_ASSERT_DESC( gMusicOffCalled == ETrue, "music off was called" );
+    // reset flags
+    gMusicOnCalled = EFalse;
+    gMusicOffCalled = EFalse;
+
+    // make observer leave
+    iLeaveInObserver = KErrCorrupt;
+
+    // send resume
+    TShwEventResume resume;
+    iCShwMusicControl->NotifyL( &resume );
+	EUNIT_ASSERT_DESC( iMusicOn == EFalse, "music is off" );
+    EUNIT_ASSERT_DESC( gMusicOnCalled == ETrue, "music on was called (and it did leave)" );
+    EUNIT_ASSERT_DESC( gMusicOffCalled == ETrue, "music off was called" );
+    // reset flags
+    gMusicOnCalled = EFalse;
+    gMusicOffCalled = EFalse;
+
+    // send volume up
+    TShwEventVolumeUp vol;
+    iCShwMusicControl->NotifyL( &vol );
+    EUNIT_ASSERT_DESC( gMusicOnCalled == EFalse, "music on was not called" );
+    EUNIT_ASSERT_DESC( gMusicOffCalled == EFalse, "music off was not called" );
+    // reset flags
+    gMusicOnCalled = EFalse;
+    gMusicOffCalled = EFalse;
+
+    // make observer not leave
+    iLeaveInObserver = KErrNone;
+
+    // send resume
+    iCShwMusicControl->NotifyL( &resume );
+	EUNIT_ASSERT_DESC( iMusicOn == ETrue, "music is on" );
+    EUNIT_ASSERT_DESC( gMusicOnCalled == ETrue, "music on was called" );
+    EUNIT_ASSERT_DESC( gMusicOffCalled == EFalse, "music off was not called" );
+	}
+
+//  TEST TABLE
+EUNIT_BEGIN_TEST_TABLE(
+    T_CShwMusicControl,
+    "Test suite for CShwMusicControl",
+    "UNIT" )
+
+/*
+ Commented out as MPX crashes with Kern-exec 0
+EUNIT_ALLOC_TEST(
+    "Constructor test",
+    "CShwMusicControl",
+    "NewL",
+    "FUNCTIONALITY",
+    Empty, TestConstructL, Teardown )
+*/
+// these cant be decorated as the EUnit
+// scheduler does not implement Error method
+EUNIT_NOT_DECORATED_TEST(
+    "NotifyL - test 0",
+    "CShwMusicControl",
+    "NotifyL",
+    "FUNCTIONALITY",
+    SetupL, T_NotifyLL, Teardown)
+
+EUNIT_NOT_DECORATED_TEST(
+    "NotifyL - test 1",
+    "CShwMusicControl",
+    "NotifyL",
+    "FUNCTIONALITY",
+    SetupL, T_NotifyL1L, Teardown)
+
+EUNIT_NOT_DECORATED_TEST(
+    "NotifyL - test 2",
+    "CShwMusicControl",
+    "NotifyL",
+    "FUNCTIONALITY",
+    SetupL, T_NotifyL2L, Teardown)
+
+EUNIT_NOT_DECORATED_TEST(
+    "NotifyL - test 3",
+    "CShwMusicControl",
+    "NotifyL",
+    "FUNCTIONALITY",
+    SetupL, T_NotifyL3L, Teardown)
+
+EUNIT_NOT_DECORATED_TEST(
+    "NotifyL - test 4",
+    "CShwMusicControl",
+    "NotifyL",
+    "FUNCTIONALITY",
+    SetupL, T_NotifyL4L, Teardown)
+
+EUNIT_NOT_DECORATED_TEST(
+    "NotifyL - test 5",
+    "CShwMusicControl",
+    "NotifyL",
+    "FUNCTIONALITY",
+    SetupL, T_NotifyL5L, Teardown)
+
+EUNIT_NOT_DECORATED_TEST(
+    "Test error in file",
+    "CShwMusicControl",
+    "ConstructL, NotifyL",
+    "FUNCTIONALITY",
+    Empty, T_ErrorInFileL, Teardown)
+
+EUNIT_NOT_DECORATED_TEST(
+    "Test leave in observer",
+    "CShwMusicControl",
+    "NotifyL",
+    "FUNCTIONALITY",
+    SetupL, T_LeaveInObserverL, Teardown )
+
+/*
+commented out as no added value for the time beeing
+EUNIT_NOT_DECORATED_TEST(
+    "Play for multitple seconds",
+    "CShwMusicControl",
+    "NotifyL - test 6",
+    "FUNCTIONALITY",
+    SetupL, T_ExtendedPlayL, Teardown)
+*/
+    
+    
+EUNIT_END_TEST_TABLE
+
+//  END OF FILE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/photosgallery/slideshow/engine/tsrc/t_cshwmusiccontrol/t_cshwmusiccontrol.h	Wed Oct 13 14:32:09 2010 +0300
@@ -0,0 +1,138 @@
+/*
+* Copyright (c) 2007-2007 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:  Test for music control for the slideshow
+ *
+*/
+
+
+
+
+#ifndef __T_CSHWMUSICCONTROL_H__
+#define __T_CSHWMUSICCONTROL_H__
+
+//  EXTERNAL INCLUDES
+#include <CEUnitTestSuiteClass.h>
+#include <EUnitDecorators.h>
+
+
+//  INTERNAL INCLUDES
+#include "shweventqueue.h"
+#include "shwmusiccontrol.h"
+#include "shwmusicobserver.h"
+
+//  FORWARD DECLARATIONS
+
+
+const TInt KMaxFileLen = 256;
+
+//  CLASS DEFINITION
+/**
+ * EUnit test suite for CShwMusicControl
+ */
+NONSHARABLE_CLASS( T_CShwMusicControl )
+	: public CEUnitTestSuiteClass,
+	  public MShwMusicObserver,
+	  public MShwEventQueue
+    {
+    public:     // Constructors and destructors
+
+        /**
+         * Two phase construction
+         */
+        static T_CShwMusicControl* NewL();
+        static T_CShwMusicControl* NewLC();
+        /**
+         * Destructor
+         */
+        ~T_CShwMusicControl();
+
+    private:    // Constructors and destructors
+
+        T_CShwMusicControl();
+        void ConstructL();
+	
+	public: 
+		static TInt StopPlaying(TAny* aMusicControl);
+
+	public:	// From MShwEventQueue
+	
+		void SendEventL( MShwEvent* aEvent );
+		
+
+	public:	// From MShwMusicObserver
+		
+		void MusicOnL();
+		void MusicOff();
+		void MusicVolume(TInt aCurrentVolume, TInt aMaxVolume);
+		void ErrorWithTrackL(TInt aErrorCode);
+		
+    private:    // New methods
+
+		void SetupL();
+		void Teardown();
+		void Empty();
+
+		void TestConstructL();
+		void T_NotifyLL();
+		void T_NotifyL1L();
+		void T_NotifyL2L();
+		void T_NotifyL3L();
+		void T_NotifyL4L();
+		void T_NotifyL5L();
+		void T_ExtendedPlayL();
+		void T_ErrorInFileL();
+		void T_LeaveInObserverL();
+		
+    private:    // Data
+		// The music state
+		TBool iMusicOn;
+		
+		// The music volume
+		TInt iCurrentVolume;
+		
+		// The maximum music volume
+		TInt iMaxVolume;
+		
+		// The previous music volume setting 
+		// - used to test volume up and down.
+		TInt iPrevVolume;
+				
+		// Own: the class under test
+        CShwMusicControl* iCShwMusicControl;
+
+		// Own: the event received from SendEventL
+        MShwEvent* iEvent;
+        
+        // Own: scheduler wait object
+        CActiveSchedulerWait iWait;
+        
+        // Own: scheduler wait object
+        CActiveSchedulerWait iPlayWait;
+        
+        // Own: a timer callback 
+        CPeriodic* iTimer;
+        
+        /// Own: the error code from ErrorWithTrackL
+        TInt iErrorCode;
+        
+        /// Own: error code to cause a leave in observer
+        TInt iLeaveInObserver;
+        
+        EUNIT_DECLARE_TEST_TABLE; 
+
+    };
+
+#endif      //  __T_CSHWMUSICCONTROL_H__
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/photosgallery/slideshow/engine/tsrc/t_cshwmusiccontrol/t_cshwmusiccontrol_dllmain.cpp	Wed Oct 13 14:32:09 2010 +0300
@@ -0,0 +1,32 @@
+/*
+* Copyright (c) 2007-2007 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:  Test for music control for the slideshow
+ *
+*/
+
+
+
+
+//  CLASS HEADER
+#include "t_cshwmusiccontrol.h"
+
+//  EXTERNAL INCLUDES
+#include <CEUnitTestSuite.h>
+
+EXPORT_C MEUnitTest* CreateTestSuiteL()
+    {
+    return T_CShwMusicControl::NewL();
+    }
+
+//  END OF FILE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/photosgallery/slideshow/engine/tsrc/t_cshwplaybackfactory/t_cshwplaybackfactory.cpp	Wed Oct 13 14:32:09 2010 +0300
@@ -0,0 +1,332 @@
+/*
+* Copyright (c) 2007-2007 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:    Test suite for CShwPlaybackFactory
+ *
+*/
+
+
+
+//  CLASS HEADER
+#include "t_cshwplaybackfactory.h"
+
+//  EXTERNAL INCLUDES
+#include <digia/eunit/EUnitMacros.h>
+#include <digia/eunit/EUnitDecorators.h>
+#include <glxthumbnailcontext.h>
+#include <glxsetvaluelayout.h>
+
+//  INTERNAL INCLUDES
+#include "shwplaybackfactory.h"
+#include "shwslideshowenginepanic.h"
+#include "shwcrossfadeeffect.h"
+#include "shwzoomandpaneffect.h"
+#include "shwconstants.h"
+
+// -----------------------------------------------------------------------------
+// Stub for NShwEngine::Panic -->
+// -----------------------------------------------------------------------------
+TBool gNShwEnginePanicCalled = EFalse;
+namespace NShwEngine
+	{
+	extern void Panic( TShwEnginePanic aPanic )
+	    {
+	    gNShwEnginePanicCalled = ETrue;
+	    // in test situation just do a leave
+	    User::Leave( aPanic );
+	    }
+	}
+// -----------------------------------------------------------------------------
+// <-- Stub for NShwEngine::Panic
+// -----------------------------------------------------------------------------
+
+TGlxSetValueLayout gStubLayout( TGlxLayoutInfo::EPosition );
+
+// -----------------------------------------------------------------------------
+// Stub for CShwCrossFadeEffect -->
+// -----------------------------------------------------------------------------
+inline CShwCrossFadeEffect::CShwCrossFadeEffect()
+	{
+	}
+CShwCrossFadeEffect* CShwCrossFadeEffect::NewLC()
+	{
+	CShwCrossFadeEffect* self = new (ELeave) CShwCrossFadeEffect;
+	CleanupStack::PushL( self );
+	return self;
+	}
+CShwCrossFadeEffect::~CShwCrossFadeEffect()
+	{
+	}
+MShwEffect* CShwCrossFadeEffect::CloneLC()
+	{
+	return NewLC();
+	}
+void CShwCrossFadeEffect::InitializeL( 
+	CHuiEnv* /*aHuiEnv*/, MGlxVisualList* /*aVisualList*/,
+    MGlxMediaList* /*aMediaList*/, TSize /*aScreenSize*/ )
+	{
+	}
+TSize CShwCrossFadeEffect::PrepareViewL( CHuiVisual* /*aVisual*/, TSize /*aSize*/ )
+	{
+	return TSize( 0, 0 );
+	}
+MGlxLayout* CShwCrossFadeEffect::EnterViewL( 
+	CHuiVisual* /*aVisual*/, TInt /*aDuration*/, TInt /*aDuration2*/ )
+	{
+	return &gStubLayout;
+	}
+void CShwCrossFadeEffect::ExitView( CHuiVisual* /*aVisual*/ )
+	{
+	}
+MGlxLayout* CShwCrossFadeEffect::EnterTransitionL( 
+	CHuiVisual* /*aVisual*/, TInt /*aDuration*/ )
+	{
+	return &gStubLayout;
+	}
+void CShwCrossFadeEffect::ExitTransition( CHuiVisual* /*aVisual*/ )
+	{
+	}
+void CShwCrossFadeEffect::PauseL()
+	{
+	}
+void CShwCrossFadeEffect::Resume()
+	{
+	}
+// the effect info for zoom and pan
+TShwEffectInfo gCrossFadeEffectInfo;
+TShwEffectInfo CShwCrossFadeEffect::EffectInfo()
+	{
+	return gCrossFadeEffectInfo;
+	}
+
+// -----------------------------------------------------------------------------
+// <-- Stub for CShwCrossFadeEffect
+// -----------------------------------------------------------------------------
+
+// -----------------------------------------------------------------------------
+// Stub for CShwZoomAndPanEffect -->
+// -----------------------------------------------------------------------------
+inline CShwZoomAndPanEffect::CShwZoomAndPanEffect()
+	{
+	}
+CShwZoomAndPanEffect* CShwZoomAndPanEffect::NewLC()
+	{
+	CShwZoomAndPanEffect* self = new (ELeave) CShwZoomAndPanEffect;
+	CleanupStack::PushL( self );
+	return self;
+	}
+CShwZoomAndPanEffect::~CShwZoomAndPanEffect()
+	{
+	}
+MShwEffect* CShwZoomAndPanEffect::CloneLC()
+	{
+	return NewLC();
+	}
+void CShwZoomAndPanEffect::InitializeL( 
+	CHuiEnv* /*aHuiEnv*/, MGlxVisualList* /*aVisualList*/,
+    MGlxMediaList* /*aMediaList*/, TSize /*aScreenSize*/ )
+	{
+	}
+TSize CShwZoomAndPanEffect::PrepareViewL( CHuiVisual* /*aVisual*/, TSize /*aSize*/ )
+	{
+	return TSize( 0, 0 );
+	}
+MGlxLayout* CShwZoomAndPanEffect::EnterViewL(
+	CHuiVisual* /*aVisual*/, TInt /*aDuration*/, TInt /*aDuration2*/ )
+	{
+	return &gStubLayout;
+	}
+void CShwZoomAndPanEffect::ExitView( CHuiVisual* /*aVisual*/ )
+	{
+	}
+MGlxLayout* CShwZoomAndPanEffect::EnterTransitionL(
+	CHuiVisual* /*aVisual*/, TInt /*aDuration*/ )
+	{
+	return &gStubLayout;
+	}
+void CShwZoomAndPanEffect::ExitTransition( CHuiVisual* /*aVisual*/ )
+	{
+	}
+void CShwZoomAndPanEffect::PauseL()
+	{
+	}
+void CShwZoomAndPanEffect::Resume()
+	{
+	}
+// the effect info for zoom and pan
+TShwEffectInfo gZoomAndPanEffectInfo;
+TShwEffectInfo CShwZoomAndPanEffect::EffectInfo()
+	{
+	return gZoomAndPanEffectInfo;
+	}
+
+// -----------------------------------------------------------------------------
+// <-- Stub for CShwZoomAndPanEffect
+// -----------------------------------------------------------------------------
+
+// CONSTRUCTION
+T_CShwPlaybackFactory* T_CShwPlaybackFactory::NewL()
+    {
+    T_CShwPlaybackFactory* self = T_CShwPlaybackFactory::NewLC();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+T_CShwPlaybackFactory* T_CShwPlaybackFactory::NewLC()
+    {
+    T_CShwPlaybackFactory* self = new( ELeave ) T_CShwPlaybackFactory();
+    CleanupStack::PushL( self );
+
+    self->ConstructL();
+
+    return self;
+    }
+
+// Destructor (virtual by CBase)
+T_CShwPlaybackFactory::~T_CShwPlaybackFactory()
+    {
+    }
+
+// Default constructor
+T_CShwPlaybackFactory::T_CShwPlaybackFactory()
+    {
+    }
+
+// Second phase construct
+void T_CShwPlaybackFactory::ConstructL()
+    {
+    // The ConstructL from the base class CEUnitTestSuiteClass must be called.
+    // It generates the test case table.
+    CEUnitTestSuiteClass::ConstructL();
+    }
+
+//  METHODS
+
+void T_CShwPlaybackFactory::Empty()
+	{
+	}
+
+void T_CShwPlaybackFactory::SetupL()
+	{
+	// create the stubs
+	iStubVisuallist = new( ELeave ) TMGlxVisualList_Adapter( this );
+	iStubMedialist = new( ELeave ) TMGlxMediaList_Stub( this );
+
+    // fix the effect infos
+	gCrossFadeEffectInfo.iId.iPluginUid = NShwSlideshow::KDefaultEffectPluginUid;
+	gCrossFadeEffectInfo.iId.iIndex 	= NShwSlideshow::KEffectUidXFadeNormal;
+    gZoomAndPanEffectInfo.iId.iPluginUid = NShwSlideshow::KDefaultEffectPluginUid;
+    gZoomAndPanEffectInfo.iId.iIndex     = NShwSlideshow::KEffectUidZoomAndPan;
+
+	/// @todo add an own test case where the music observer is also given 
+	/// so that the music control is constructed
+	iCShwPlaybackFactory = 
+		CShwPlaybackFactory::NewL( 
+			iHuiEnv, iStubVisuallist, iStubMedialist, *this, TSize( 100, 100 ) );
+	}
+
+void T_CShwPlaybackFactory::Teardown()
+	{
+	delete iCShwPlaybackFactory;
+	iCShwPlaybackFactory = NULL; 
+	delete iStubVisuallist;
+	iStubVisuallist = NULL;
+	delete iStubMedialist;
+	iStubMedialist = NULL;
+	}
+
+TInt gCounter = 0;
+
+void T_CShwPlaybackFactory::T_ContructL()
+	{
+	// trap the call as it will leave, dont trap oom as this is alloc test
+	EUNIT_TRAP_EXCEPT_ALLOC_D( err,
+	    {
+    	iCShwPlaybackFactory = 
+    		CShwPlaybackFactory::NewL( 
+    			iHuiEnv, iStubVisuallist, iStubMedialist, *this, TSize( 100, 100 ) );
+	    } );
+	EUNIT_ASSERT_EQUALS_DESC( KErrArgument, err, "wrong effect tried to set" );
+	EUNIT_ASSERT_DESC( !iCShwPlaybackFactory, "playback factory not created" );
+	}
+
+void T_CShwPlaybackFactory::T_ContructValidEffectL()
+    {
+    EUNIT_PRINT( _L("T_ContructValidEffectL") );
+    // call setup to test the succesfull case
+	SetupL();
+	
+	EUNIT_ASSERT_DESC( iCShwPlaybackFactory, "Test that object created" );
+    }
+
+void T_CShwPlaybackFactory::T_EventObserversL()
+	{
+	// get observers
+	RPointerArray< MShwEventObserver > obs = 
+		iCShwPlaybackFactory->EventObservers();
+	// check the amount
+	EUNIT_ASSERT_EQUALS_DESC(
+		obs.Count(),
+		3,
+		"3 observers returned, music is off by default");
+	}
+
+void T_CShwPlaybackFactory::T_EventPublishersL(  )
+	{
+	// get publishers
+	RPointerArray< MShwEventPublisher > obs = 
+		iCShwPlaybackFactory->EventPublishers();
+	// check the amount
+	EUNIT_ASSERT_EQUALS_DESC(
+		obs.Count(),
+		3,
+		"3 publishers returned, music is off by default");
+	}
+
+//  TEST TABLE
+EUNIT_BEGIN_TEST_TABLE(
+    T_CShwPlaybackFactory,
+    "CShwPlaybackFactory test suite",
+    "UNIT" )
+
+EUNIT_ALLOC_TEST(
+    "Constructor invalid effects",
+    "CShwPlaybackFactory",
+    "Constructor test",
+    "FUNCTIONALITY",
+    Empty, T_ContructL, Teardown )
+
+EUNIT_ALLOC_TEST(
+    "Constructor valid effects",
+    "CShwPlaybackFactory",
+    "Constructor test",
+    "FUNCTIONALITY",
+    Empty, T_ContructValidEffectL, Teardown )
+
+EUNIT_ALLOC_TEST(
+    "EventObservers",
+    "CShwPlaybackFactory",
+    "EventObservers",
+    "FUNCTIONALITY",
+    SetupL, T_EventObserversL, Teardown)
+    
+EUNIT_ALLOC_TEST(
+    "EventPublishers",
+    "CShwPlaybackFactory",
+    "EventPublishers",
+    "FUNCTIONALITY",
+    SetupL, T_EventPublishersL, Teardown)  
+
+EUNIT_END_TEST_TABLE
+
+//  END OF FILE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/photosgallery/slideshow/engine/tsrc/t_cshwplaybackfactory/t_cshwplaybackfactory.h	Wed Oct 13 14:32:09 2010 +0300
@@ -0,0 +1,114 @@
+/*
+* Copyright (c) 2007-2007 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:    Test suite for CShwPlaybackFactory
+ *
+*/
+
+
+
+
+#ifndef __T_CSHWPLAYBACKFACTORY_H__
+#define __T_CSHWPLAYBACKFACTORY_H__
+
+//  EXTERNAL INCLUDES
+#include <digia/eunit/CEUnitTestSuiteClass.h>
+#include <digia/eunit/EUnitDecorators.h>
+
+
+//  INTERNAL INCLUDES
+#include "shwplaybackfactory.h"
+#include "shwmusicobserver.h"
+
+#include "tmglxmedialist_stub.h"
+#include "tmglxvisuallist_adapter.h"
+
+//  FORWARD DECLARATIONS
+class CHuiEnv;
+
+//  CLASS DEFINITION
+/**
+ * EUnit test suite for CShwPlaybackFactory
+ */
+NONSHARABLE_CLASS( T_CShwPlaybackFactory )
+	: public CEUnitTestSuiteClass,
+	public MGlxMediaList_Stub_Observer,
+	public MGlxVisualList_Observer,
+	public MShwMusicObserver
+	{
+	public:     // Constructors and destructors
+
+		/**
+		 * Two phase construction
+		 */
+		static T_CShwPlaybackFactory* NewL();
+		static T_CShwPlaybackFactory* NewLC();
+		/**
+		 * Destructor
+		 */
+		~T_CShwPlaybackFactory();
+
+	private:    // Constructors and destructors
+
+		T_CShwPlaybackFactory();
+		void ConstructL();
+
+	public:     // from MGlxMediaList_Stub_Observer and MGlxVisualList_Observer
+	
+		void MGlxMediaList_MethodCalled( TMGlxMediaListMethodId /*aMethodId*/ )
+			{ // not interested on the events
+			}
+		void MGlxVisualList_MethodCalled( TMGlxVisualListMethodId /*aMethodId*/ )
+			{ // not interested on the events
+			}
+
+	public:	// From MShwMusicObserver
+
+		void MusicOnL()
+			{ // not interested on the events
+			}
+		void MusicOff()
+			{ // not interested on the events
+			}
+		void MusicVolume( TInt /*aCurrentVolume*/, TInt /*aMaxVolume*/ )
+			{ // not interested on the events
+			}
+		void ErrorWithTrackL( TInt /*aErrorCode*/ )
+			{ // not interested on the events
+			}
+
+	private:    // New methods
+
+		void Empty();
+		void SetupL();
+		void Teardown();
+		void T_ContructL();
+		void T_ContructValidEffectL();
+		void T_EventObserversL();
+		void T_EventPublishersL();
+
+	private:    // Data
+		
+		CHuiEnv* iHuiEnv;
+		TMGlxMediaList_Stub* iStubMedialist;
+		TMGlxVisualList_Adapter* iStubVisuallist;
+
+		// class under test
+		CShwPlaybackFactory* iCShwPlaybackFactory;
+		EUNIT_DECLARE_TEST_TABLE; 
+
+	};
+
+#endif      //  __T_CSHWPLAYBACKFACTORY_H__
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/photosgallery/slideshow/engine/tsrc/t_cshwplaybackfactory/t_cshwplaybackfactory_dllmain.cpp	Wed Oct 13 14:32:09 2010 +0300
@@ -0,0 +1,39 @@
+/*
+* Copyright (c) 2007-2007 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:    Test suite for CShwPlaybackFactory
+ *
+*/
+
+
+
+
+//  CLASS HEADER
+#include "t_cshwplaybackfactory.h"
+
+//  EXTERNAL INCLUDES
+#include <digia/eunit/CEUnitTestSuite.h>
+
+EXPORT_C MEUnitTest* CreateTestSuiteL()
+    {
+    return T_CShwPlaybackFactory::NewL();
+    }
+
+#ifndef EKA2
+GLDEF_C TInt E32Dll( TDllReason )
+	{
+	return KErrNone;
+	}
+#endif
+
+//  END OF FILE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/photosgallery/slideshow/engine/tsrc/t_cshwsettingsmodel/t_cshwsettingsmodel.cpp	Wed Oct 13 14:32:09 2010 +0300
@@ -0,0 +1,212 @@
+/*
+* Copyright (c) 2004 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:   Test for settings model for the slideshow
+*
+*/
+
+
+
+
+//  CLASS HEADER
+#include "t_cshwsettingsmodel.h"
+
+//	CLASS UNDER TEST
+#include "shwsettingsmodel.h"
+
+//  EXTERNAL INCLUDES
+#include <digia/eunit/EUnitMacros.h>
+#include <centralrepository.h>
+
+//  INTERNAL INCLUDES
+
+
+// CONSTRUCTION
+T_CShwSettingsModel* T_CShwSettingsModel::NewL()
+    {
+    T_CShwSettingsModel* self = T_CShwSettingsModel::NewLC();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+T_CShwSettingsModel* T_CShwSettingsModel::NewLC()
+    {
+    T_CShwSettingsModel* self = new (ELeave) T_CShwSettingsModel();
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    return self;
+    }
+
+
+// Destructor (virtual by CBase)
+T_CShwSettingsModel::~T_CShwSettingsModel()
+    {
+    }
+
+
+// Default constructor
+T_CShwSettingsModel::T_CShwSettingsModel()
+    {
+    }
+
+
+// Second phase construct
+void T_CShwSettingsModel::ConstructL()
+    {
+    // The ConstructL from the base class CEUnitTestSuiteClass must be called.
+    // It generates the test case table.
+    CEUnitTestSuiteClass::ConstructL();
+    }
+
+//  METHODS
+
+
+void T_CShwSettingsModel::SetupL()
+    {
+    iShwSettingsModel = CShwSettingsModel::NewL();
+    }
+
+void T_CShwSettingsModel::Teardown()
+    {
+	delete iShwSettingsModel;
+	iShwSettingsModel = NULL;
+	
+	const TInt KEngineId = 0x200071D3;	
+	const TUid KEngineUid = TUid::Uid(KEngineId);
+    TRAP_IGNORE( 
+        {
+    	CRepository* repository = CRepository::NewL(KEngineUid);
+    	TInt err = repository->Reset();
+    	User::LeaveIfError(err);
+    	delete repository;
+        } );
+    }
+
+
+
+void T_CShwSettingsModel::TestGetDefaultValues()
+	{
+    TBuf<KMaxFileName> fileNamePath;
+    iShwSettingsModel->MusicNamePathL(fileNamePath);
+    _LIT(KDefaultFileName, "None");
+    EUNIT_ASSERT(fileNamePath == KDefaultFileName);
+
+    const TUint KDefaultUid = 0x200071D6;
+    TUid defaultUId;
+    defaultUId.iUid = KDefaultUid;
+
+	TUid uId;
+	TUint index = 0;	
+    iShwSettingsModel->TransitionTypeL(uId, index);
+    EUNIT_ASSERT(defaultUId.iUid == uId.iUid);
+    EUNIT_ASSERT_EQUALS_DESC( 1, index, "default index is 0");
+	}
+
+void T_CShwSettingsModel::TestSetAndGetMusicPathL()
+    {
+    // Set music name and path field.
+	_LIT(KTestFileName, "c:\\test\\knightrider.mp3");
+    iShwSettingsModel->SaveMusicNamePathL( KTestFileName() );
+
+    // Compare returned values to those set.
+    TFileName fileNamePath;
+    iShwSettingsModel->MusicNamePathL(fileNamePath);
+    EUNIT_ASSERT(fileNamePath == KTestFileName);
+
+    // try setting an empty music name
+    iShwSettingsModel->SaveMusicNamePathL( KNullDesC() );
+    // test that it was not set
+    iShwSettingsModel->MusicNamePathL(fileNamePath);
+    EUNIT_ASSERT(fileNamePath == KTestFileName);
+    }
+
+
+void T_CShwSettingsModel::TestSetAndGetMusicOnOffL()
+    {
+    iShwSettingsModel->SaveMusicStateL(ETrue);
+    EUNIT_ASSERT(iShwSettingsModel->MusicOnL() == ETrue);
+    }
+    
+
+void T_CShwSettingsModel::TestSetAndGetTransDelayL()
+    {
+    const TUint KTimeDelay = 5;
+    iShwSettingsModel->SaveTransDelayL(KTimeDelay);
+	EUNIT_ASSERT(iShwSettingsModel->TransDelayL() == KTimeDelay);
+    }    
+
+    
+void T_CShwSettingsModel::TestSetAndGetTransitionTypeL()
+    {
+    const TUint KUid = 0x01234567;
+    TUid uId1;
+    uId1.iUid = KUid;
+    iShwSettingsModel->SaveTransitionTypeL(uId1, 1);
+
+	TUid uId2;
+	TUint index = 0;	
+    iShwSettingsModel->TransitionTypeL(uId2, index);
+    EUNIT_ASSERT(uId1.iUid == uId2.iUid);
+    EUNIT_ASSERT(index == 1);
+    }       
+    
+//  TEST TABLE
+
+EUNIT_BEGIN_TEST_TABLE(
+    T_CShwSettingsModel,
+    "Test suite for CShwSettingsModel",
+    "MODULE" )
+
+EUNIT_TEST(
+    "Test Get Default Values",
+    "TestGetDefaultValues",
+    "Central Repositoy getter - default values",
+    "FUNCTIONALITY",
+    SetupL, TestGetDefaultValues, Teardown)
+
+
+EUNIT_TEST(
+    "Test Set And Get Music Path",
+    "TestSetAndGetMusicPath",
+    "Music name and path Central Repositoy setter and getter",
+    "FUNCTIONALITY",
+    SetupL, TestSetAndGetMusicPathL, Teardown)
+
+
+EUNIT_TEST(
+    "Test Set And Get Music On/Off",
+    "TestSetAndGetMusicOnOffL",
+    "Music On/Off Central Repositoy setter and getter",
+    "FUNCTIONALITY",
+    SetupL, TestSetAndGetMusicOnOffL, Teardown)
+
+
+EUNIT_TEST(
+    "Test Set And Get Transition Delay",
+    "TestSetAndGetTransDelayL",
+    "Transition Delay Central Repositoy setter and getter",
+    "FUNCTIONALITY",
+    SetupL, TestSetAndGetTransDelayL, Teardown)
+
+
+EUNIT_TEST(
+    "Test Set And Get Transition Type",
+    "TestSetAndGetTransitionTypeL",
+    "Transition Type Central Repositoy setter and getter",
+    "FUNCTIONALITY",
+    SetupL, TestSetAndGetTransitionTypeL, Teardown)
+
+
+EUNIT_END_TEST_TABLE
+
+//  END OF FILE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/photosgallery/slideshow/engine/tsrc/t_cshwsettingsmodel/t_cshwsettingsmodel.h	Wed Oct 13 14:32:09 2010 +0300
@@ -0,0 +1,91 @@
+/*
+* Copyright (c) 2007-2007 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:   Test for settings model for the slideshow
+ *
+*/
+
+
+
+
+
+#ifndef __T_CSHWSETTINGSMODEL_H__
+#define __T_CSHWSETTINGSMODEL_H__
+
+//  EXTERNAL INCLUDES
+#include <digia/eunit/CEUnitTestSuiteClass.h>
+
+//  INTERNAL INCLUDES
+
+
+//  FORWARD DECLARATIONS
+class CShwSettingsModel;
+
+//  CLASS DEFINITION
+/**
+ *
+ * Test class for CShwSettingsModel
+ *
+ */
+NONSHARABLE_CLASS( T_CShwSettingsModel )
+     : public CEUnitTestSuiteClass
+    {
+    public:     // Constructors and destructors
+
+        /**
+         * Two phase construction
+         */
+        static T_CShwSettingsModel* NewL();
+        static T_CShwSettingsModel* NewLC();
+        /**
+         * Destructor
+         */
+        ~T_CShwSettingsModel();
+
+    private:    // Constructors and destructors
+
+        T_CShwSettingsModel();
+        void ConstructL();
+
+    public:     // From observer interface
+
+        
+
+    private:    // New methods
+
+         void SetupL();
+        
+         void Teardown();
+        
+         void TestGetDefaultValues();
+        
+         void TestSetAndGetMusicPathL();
+         
+         void TestSetAndGetMusicOnOffL();
+         
+         void TestSetAndGetTransDelayL();
+         
+         void TestSetAndGetTransitionTypeL();
+        
+
+    private:    // Data
+
+		CShwSettingsModel* iShwSettingsModel;
+
+        EUNIT_DECLARE_TEST_TABLE; 
+
+    };
+
+#endif // __T_CSHWSETTINGSMODEL_H__
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/photosgallery/slideshow/engine/tsrc/t_cshwsettingsmodel/t_cshwsettingsmodelDllMain.cpp	Wed Oct 13 14:32:09 2010 +0300
@@ -0,0 +1,41 @@
+/*
+* Copyright (c) 2004 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:   Test for settings model for the slideshow
+*
+*/
+
+
+
+
+//  CLASS HEADER
+#include "T_CShwSettingsModel.h"
+
+//  EXTERNAL INCLUDES
+#include <digia/eunit/CEUnitTestSuite.h>
+
+/**
+ * Test suite factory function.
+ */
+EXPORT_C MEUnitTest* CreateTestSuiteL()
+    {
+    return T_CShwSettingsModel::NewL();
+    }
+
+//  END OF FILE
+
+
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/photosgallery/slideshow/engine/tsrc/t_cshwzoomandpaneffect/t_cshwzoomandpaneffect.cpp	Wed Oct 13 14:32:09 2010 +0300
@@ -0,0 +1,1069 @@
+/*
+* Copyright (c) 2007-2007 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:   Test for zoom and pan effect in slideshow
+ *
+*/
+
+
+
+//  CLASS HEADER
+#include "t_cshwzoomandpaneffect.h"
+
+//  EXTERNAL INCLUDES
+#include <digia/eunit/eunitmacros.h>
+#include <digia/eunit/eunitdecorators.h>
+#include <digia/eunit/teunitfillmem.h>
+#include <e32math.h>
+
+#include <uiacceltk/huienv.h>
+#include <uiacceltk/huidisplaycoecontrol.h>
+#include <uiacceltk/huicurvepath.h>
+#include <uiacceltk/huirealpoint.h>
+#include <uiacceltk/huicontrol.h>
+#include <uiacceltk/huiimagevisual.h>
+
+//  INTERNAL INCLUDES
+#include "shwzoomandpaneffect.h"
+#include "shwzoomandpanlayout.h"
+#include "shwcrossfadelayout.h"
+#include "shwcurvefactory.h"
+#include "shwconstants.h"
+#include "shwautoptr.h"
+#include "shwcallback.h"
+#include "shwslideshowenginepanic.h"
+#include "shwgeometryutilities.h"
+
+using namespace NShwSlideshow;
+
+// -----------------------------------------------------------------------------
+// Stub for NShwEngine::Panic -->
+// -----------------------------------------------------------------------------
+TBool gNShwEnginePanicCalled = EFalse;
+namespace NShwEngine
+	{
+	extern void Panic( TShwEnginePanic aPanic )
+	    {
+	    gNShwEnginePanicCalled = ETrue;
+	    // in test situation just do a leave
+	    User::Leave( aPanic );
+	    }
+	}
+// -----------------------------------------------------------------------------
+// <-- Stub for NShwEngine::Panic
+// -----------------------------------------------------------------------------
+
+//	LOCAL HELPERs
+namespace
+	{
+	/**
+	 * @param aSource the TReal32 to round
+	 * @return a rounded TInt
+	 */
+	inline TInt TReal2TInt( TReal32 aSource )
+		{
+		if( aSource < 0 )
+			{
+			// just subst 0.5 and cast, -0.4 becomes -0.9 and typecast
+			// truncates it to 0, -0.6 becomes -1.1 and its truncated to -1
+			return TInt( aSource - TReal32( 0.5 ) );
+			}
+		else
+			{
+			// just add 0.5 and cast, 0.4 becomes 0.9 and typecast
+			// truncates it to 0, 0.6 becomes 1.1 and its truncated to 1
+			return TInt( aSource + TReal32( 0.5 ) );
+			}
+		}
+	}
+
+class CTestControl : public CHuiControl
+	{
+	public:
+		static CTestControl* NewL( CHuiEnv& aEnv )
+			{
+			return new (ELeave) CTestControl( aEnv );
+			}
+		CTestControl( CHuiEnv& aEnv )
+	        : CHuiControl( aEnv )
+	    	{
+	    	}	
+	};
+
+// CONSTRUCTION
+T_CShwZoomAndPanEffect* T_CShwZoomAndPanEffect::NewL()
+    {
+    T_CShwZoomAndPanEffect* self = T_CShwZoomAndPanEffect::NewLC();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+T_CShwZoomAndPanEffect* T_CShwZoomAndPanEffect::NewLC()
+    {
+    T_CShwZoomAndPanEffect* self = new( ELeave ) T_CShwZoomAndPanEffect();
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    return self;
+    }
+
+// Destructor (virtual by CBase)
+T_CShwZoomAndPanEffect::~T_CShwZoomAndPanEffect()
+    {
+    }
+
+// Default constructor
+T_CShwZoomAndPanEffect::T_CShwZoomAndPanEffect()
+    {
+    }
+
+// Second phase construct
+void T_CShwZoomAndPanEffect::ConstructL()
+    {
+    // The ConstructL from the base class CEUnitTestSuiteClass must be called.
+    // It generates the test case table.
+    CEUnitTestSuiteClass::ConstructL();
+    }
+
+//  METHODS
+// global constant for screensize
+const TInt gScreenWidth = 100;
+const TInt gScreenHeight = 100;
+const TRect gScreenRect( 0, 0, gScreenWidth, gScreenHeight );
+void T_CShwZoomAndPanEffect::Empty()
+	{
+	}
+
+void T_CShwZoomAndPanEffect::SetupL()
+	{
+	// create env
+	iEnv = CHuiEnv::NewL();
+
+	// create Display
+    iCoeDisplay = CHuiDisplayCoeControl::NewL( *iEnv, gScreenRect );
+
+	// create control
+	iControl = CTestControl::NewL( *iEnv );
+	
+	// create the visual, ownership goes to iControl
+	iVisual = CHuiImageVisual::AddNewL( *iControl );
+
+	// create class under test
+	CShwZoomAndPanEffect* tmp = CShwZoomAndPanEffect::NewLC();
+    // take ownership
+    iCShwZoomAndPanEffect = tmp;
+	// remove the pointer from cleanup stack
+	CleanupStack::Pop( tmp );
+	}
+
+void T_CShwZoomAndPanEffect::Teardown()
+	{
+	// delete class under test
+	delete iCShwZoomAndPanEffect; 
+	iCShwZoomAndPanEffect = NULL; 
+
+	// delete control, it also deletes the visual
+	delete iControl;
+	iControl = NULL;
+
+	// delete display
+	delete iCoeDisplay;
+	iCoeDisplay = NULL;
+
+	// delete environment
+	delete iEnv;
+	iEnv = NULL;
+	}
+
+void T_CShwZoomAndPanEffect::T_TestGeometryAlgorithmsL()
+    {
+    // use the namespace for coord utilities
+    using namespace NShwGeometryUtilities;
+    
+    // test     FitDimension
+        // fit width with same values
+        {
+        TInt width = 10;
+        TInt height = 10;
+        FitDimension( width, height, 10 );
+        EUNIT_ASSERT_EQUALS_DESC( 10, width, "width is same" );
+        EUNIT_ASSERT_EQUALS_DESC( 10, height, "height is same" );
+        }
+        // fit width with width greater
+        {
+        TInt width = 20;
+        TInt height = 10;
+        FitDimension( width, height, 10 );
+        EUNIT_ASSERT_EQUALS_DESC( 20, width, "width is same" );
+        EUNIT_ASSERT_EQUALS_DESC( 10, height, "height is same" );
+        }
+        // fit width with new height greater
+        {
+        TInt width = 20;
+        TInt height = 10;
+        FitDimension( width, height, 20 );
+        EUNIT_ASSERT_EQUALS_DESC( 40, width, "width increased" );
+        EUNIT_ASSERT_EQUALS_DESC( 20, height, "height increased" );
+        }
+        // fit width with new height smaller
+        {
+        TInt width = 22;
+        TInt height = 11;
+        FitDimension( width, height, 5 );
+        EUNIT_ASSERT_EQUALS_DESC( 10, width, "width decreased" );
+        EUNIT_ASSERT_EQUALS_DESC( 5, height, "height decreased" );
+        }
+
+        // fit height with same values
+        {
+        TInt width = 99;
+        TInt height = 88;
+        FitDimension( height, width, 99 );
+        EUNIT_ASSERT_EQUALS_DESC( 99, width, "width is same" );
+        EUNIT_ASSERT_EQUALS_DESC( 88, height, "height is same" );
+        }
+        // fit height with width greater
+        {
+        TInt width = 22;
+        TInt height = 11;
+        FitDimension( height, width, 22 );
+        EUNIT_ASSERT_EQUALS_DESC( 22, width, "width is same" );
+        EUNIT_ASSERT_EQUALS_DESC( 11, height, "height is same" );
+        }
+        // fit height with new width greater
+        {
+        TInt width = 22;
+        TInt height = 11;
+        FitDimension( height, width, 33 );
+        EUNIT_ASSERT_EQUALS_DESC( 33, width, "width increased" );
+        EUNIT_ASSERT_EQUALS_DESC( 16, height, "height increased" );
+        }
+        // fit height with new width smaller
+        {
+        TInt width = 99;
+        TInt height = 88;
+        FitDimension( height, width, 88 );
+        EUNIT_ASSERT_EQUALS_DESC( 88, width, "width increased" );
+        EUNIT_ASSERT_EQUALS_DESC( 78, height, "height increased" );
+        }
+
+    // test     FitInsideBox
+        // fit with same width and height
+        {
+        TInt width = 99;
+        TInt height = 99;
+        FitInsideBox( width, height, 99, 99 );
+        EUNIT_ASSERT_EQUALS_DESC( 99, width, "width is same as box" );
+        EUNIT_ASSERT_EQUALS_DESC( 99, height, "height is same as box" );
+        }
+        // fit with smaller width and height
+        {
+        TInt width = 99;
+        TInt height = 99;
+        FitInsideBox( width, height, 100, 100 );
+        EUNIT_ASSERT_EQUALS_DESC( 99, width, "width did not change" );
+        EUNIT_ASSERT_EQUALS_DESC( 99, height, "height did not change" );
+        }
+        // fit with greater width and height
+        {
+        TInt width = 111;
+        TInt height = 111;
+        FitInsideBox( width, height, 100, 100 );
+        EUNIT_ASSERT_EQUALS_DESC( 100, width, "width is same as box" );
+        EUNIT_ASSERT_EQUALS_DESC( 100, height, "height is same as box" );
+        }
+        // fit with greater and width closer to box
+        {
+        TInt width = 150;
+        TInt height = 200;
+        FitInsideBox( width, height, 100, 100 );
+        EUNIT_ASSERT_EQUALS_DESC( 75, width, "width is smaller" );
+        EUNIT_ASSERT_EQUALS_DESC( 100, height, "height is same as box" );
+        }
+        // fit with greater and height closer to box
+        {
+        TInt width = 150;
+        TInt height = 100;
+        FitInsideBox( width, height, 100, 100 );
+        EUNIT_ASSERT_EQUALS_DESC( 100, width, "width is same as box" );
+        EUNIT_ASSERT_EQUALS_DESC( 66, height, "height is smaller" );
+        }
+        // fit with smaller and width closer to box
+        {
+        TInt width = 75;
+        TInt height = 40;
+        FitInsideBox( width, height, 100, 100 );
+        EUNIT_ASSERT_EQUALS_DESC( 75, width, "width did not change" );
+        EUNIT_ASSERT_EQUALS_DESC( 40, height, "height did not change" );
+        }
+        // fit with smaller and height closer to box
+        {
+        TInt width = 60;
+        TInt height = 90;
+        FitInsideBox( width, height, 100, 100 );
+        EUNIT_ASSERT_EQUALS_DESC( 60, width, "width did not change" );
+        EUNIT_ASSERT_EQUALS_DESC( 90, height, "height did not change" );
+        }
+        // fit with width greater and height smaller to box
+        {
+        TInt width = 110;
+        TInt height = 90;
+        FitInsideBox( width, height, 100, 100 );
+        EUNIT_ASSERT_EQUALS_DESC( 100, width, "width is same as box" );
+        EUNIT_ASSERT_EQUALS_DESC( 81, height, "height is smaller" );
+        }
+        // fit with height greater and width smaller to box
+        {
+        TInt width = 90;
+        TInt height = 120;
+        FitInsideBox( width, height, 100, 100 );
+        EUNIT_ASSERT_EQUALS_DESC( 90*100/120, width, "width is smaller" );
+        EUNIT_ASSERT_EQUALS_DESC( 100, height, "height is same as box" );
+        }
+
+    // test     FitToCoverBox
+        // fit with same width and height
+        {
+        TInt width = 99;
+        TInt height = 99;
+        FitToCoverBox( width, height, 99, 99 );
+        EUNIT_ASSERT_EQUALS_DESC( 99, width, "width is same as box" );
+        EUNIT_ASSERT_EQUALS_DESC( 99, height, "height is same as box" );
+        }
+        // fit with smaller width and height
+        {
+        TInt width = 99;
+        TInt height = 99;
+        FitToCoverBox( width, height, 100, 100 );
+        EUNIT_ASSERT_EQUALS_DESC( 100, width, "width is same as box" );
+        EUNIT_ASSERT_EQUALS_DESC( 100, height, "height is same as box" );
+        }
+        // fit with greater width and height
+        {
+        TInt width = 111;
+        TInt height = 111;
+        FitToCoverBox( width, height, 100, 100 );
+        EUNIT_ASSERT_EQUALS_DESC( 100, width, "width is same as box" );
+        EUNIT_ASSERT_EQUALS_DESC( 100, height, "height is same as box" );
+        }
+        // fit with greater and width closer to box
+        {
+        TInt width = 150;
+        TInt height = 200;
+        FitToCoverBox( width, height, 100, 100 );
+        EUNIT_ASSERT_EQUALS_DESC( 100, width, "width is same as box" );
+        EUNIT_ASSERT_EQUALS_DESC( 133, height, "height is greater" );
+        }
+        // fit with greater and height closer to box
+        {
+        TInt width = 150;
+        TInt height = 100;
+        FitToCoverBox( width, height, 100, 100 );
+        EUNIT_ASSERT_EQUALS_DESC( 150, width, "width is greater than box" );
+        EUNIT_ASSERT_EQUALS_DESC( 100, height, "height is same as box" );
+        }
+        // fit with greater and height closer to box
+        {
+        TInt width = 300;
+        TInt height = 200;
+        FitToCoverBox( width, height, 100, 100 );
+        EUNIT_ASSERT_EQUALS_DESC( 150, width, "width is greater than box" );
+        EUNIT_ASSERT_EQUALS_DESC( 100, height, "height is same as box" );
+        }
+        // fit with smaller and width closer to box
+        {
+        TInt width = 75;
+        TInt height = 40;
+        FitToCoverBox( width, height, 100, 100 );
+        EUNIT_ASSERT_EQUALS_DESC( 187, width, "width is greater" );
+        EUNIT_ASSERT_EQUALS_DESC( 100, height, "height is same as box" );
+        }
+        // fit with smaller and height closer to box
+        {
+        TInt width = 60;
+        TInt height = 90;
+        FitToCoverBox( width, height, 100, 100 );
+        EUNIT_ASSERT_EQUALS_DESC( 100, width, "width is same as box" );
+        EUNIT_ASSERT_EQUALS_DESC( 150, height, "height is greater" );
+        }
+    }
+
+void T_CShwZoomAndPanEffect::T_LayoutTestL()
+	{
+// test zoom and pan
+	// create the layout
+	TEUnitFillMem< TShwZoomAndPanLayout > layout;
+
+	// check that layout has correct init values
+	// need to upcast to get access to public functions
+	MGlxLayout& base = static_cast< MGlxLayout& >( layout );
+	TGlxLayoutInfoResetter info;
+	info.iPosition.iX = -1;
+	info.iPosition.iY = -1;
+	info.iSize.iX = -1;
+	info.iSize.iY = -1;
+
+	base.SetLayoutValues( info );
+	// verify that the position was not set
+	EUNIT_ASSERT_EQUALS_DESC( -1, (TInt)info.iPosition.iX,"x position not changed" );
+	EUNIT_ASSERT_EQUALS_DESC( -1, (TInt)info.iPosition.iY,"y position not changed" );
+	// check size
+	EUNIT_ASSERT_NOT_EQUALS_DESC( 
+		-1, (TInt)info.iSize.iX,"x size changed" );
+	EUNIT_ASSERT_NOT_EQUALS_DESC( 
+		-1, (TInt)info.iSize.iY,"y size changed" );
+
+	// set custom screen size and image size; image smaller than screen
+	layout.SetSizes( TSize( 99, 88 ), TSize( 44, 55 ), TSize( 500, 500 ) );
+	// redo layout
+	base.SetLayoutValues( info );
+	// verify that the position was not set
+	EUNIT_ASSERT_EQUALS_DESC( -1, (TInt)info.iPosition.iX,"x position not changed" );
+	EUNIT_ASSERT_EQUALS_DESC( -1, (TInt)info.iPosition.iY,"y position not changed" );
+	// check size
+	EUNIT_ASSERT_EQUALS_DESC( 99, TReal2TInt( info.iSize.iX ),"x size changed" );
+	EUNIT_ASSERT_EQUALS_DESC( 124, TReal2TInt( info.iSize.iY ),"y size changed" );
+
+	// set custom screen size and image size; image larger than screen
+	layout.SetSizes( TSize( 99, 88 ), TSize( 144, 155 ), TSize( 500, 500 ) );
+	// redo layout
+	base.SetLayoutValues( info );
+	// verify that the position was not set
+	EUNIT_ASSERT_EQUALS_DESC( -1, (TInt)info.iPosition.iX,"x position not changed" );
+	EUNIT_ASSERT_EQUALS_DESC( -1, (TInt)info.iPosition.iY,"y position not changed" );
+	// check size
+	EUNIT_ASSERT_EQUALS_DESC( 99, TReal2TInt( info.iSize.iX ),"x size changed" );
+	EUNIT_ASSERT_EQUALS_DESC( 107, TReal2TInt( info.iSize.iY ),"y size changed" );
+
+	// set custom screen size and image size; image partially larger than screen
+	layout.SetSizes( TSize( 99, 88 ), TSize( 100, 15 ), TSize( 500, 500 ) );
+	// redo layout
+	base.SetLayoutValues( info );
+	// verify that the position was not set
+	EUNIT_ASSERT_EQUALS_DESC( -1, (TInt)info.iPosition.iX,"x position not changed" );
+	EUNIT_ASSERT_EQUALS_DESC( -1, (TInt)info.iPosition.iY,"y position not changed" );
+	// check size
+	EUNIT_ASSERT_EQUALS_DESC( 587, TReal2TInt( info.iSize.iX ),"x size changed" );
+	EUNIT_ASSERT_EQUALS_DESC( 88, TReal2TInt( info.iSize.iY ),"y size changed" );
+
+	// set big enough image so that it zooms
+	layout.SetSizes( TSize( 100, 100 ), TSize( 200, 150 ), TSize( 500, 500 ) );
+	layout.StartZoom( TShwZoomAndPanLayout::EZoomIn, 0 );
+	// redo layout
+	base.SetLayoutValues( info );
+	// check that layout is changed
+	EUNIT_ASSERT_DESC( layout.Changed(), "layout is changed" );
+	// clear changeflag
+	layout.ClearChanged();
+	EUNIT_ASSERT_DESC( !layout.Changed(), "layout is not changed" );
+
+// test crossfade
+	// create the crossfade layout
+	TEUnitFillMem< TShwCrossFadeLayout > cflayout;
+	// get base class pointer
+	MGlxLayout& base2 = static_cast< MGlxLayout& >( cflayout );
+    // reset info opacity
+	info.iOpacity = -1;
+    // run the layout
+	base2.SetLayoutValues( info );
+	// verify that opacity was set to minimum
+	EUNIT_ASSERT_EQUALS_DESC(
+	    TInt( KMinOpacity ), TReal2TInt( info.iOpacity ),"opacity is minimum" );
+	// check that layout is not changed
+	EUNIT_ASSERT_DESC( !cflayout.Changed(), "layout is not changed" );
+    // set new value
+    cflayout.Set( 2.0, 0 );
+    // reset info opacity
+	info.iOpacity = -1;
+    // run the layout
+	base2.SetLayoutValues( info );
+	// check that layout is changed
+	EUNIT_ASSERT_DESC( cflayout.Changed(), "layout is changed" );
+	// verify that opacity was set to maximum
+	EUNIT_ASSERT_EQUALS_DESC( 
+	    TInt( KMaxOpacity ), TReal2TInt( info.iOpacity ),"opacity is maximum" );
+	// clear change flag
+	cflayout.ClearChanged();
+	EUNIT_ASSERT_DESC( !cflayout.Changed(), "layout is not changed" );
+	}
+
+void T_CShwZoomAndPanEffect::T_CurveTestL()
+	{
+	// create env, no need to delete or cleanupstack
+	TShwAutoPtr< CHuiEnv > env = CHuiEnv::NewL();
+
+	// create curve path with 200 length
+	TShwAutoPtr< CHuiCurvePath > ellipsis = 
+		NShwCurveFactory::CreateEllipsisL( TSize( 100, 200 ), 200 );
+
+	// the ellipsis is clockwise around the box
+	// check ellipsis values, point 0
+	TReal32 x_value = ellipsis->MapValue( 0, 0 );
+	TReal32 y_value = ellipsis->MapValue( 0, 1 );
+	EUNIT_ASSERT_EQUALS_DESC( 50, TReal2TInt( x_value ), "x coordinate");
+	EUNIT_ASSERT_EQUALS_DESC( 0, TReal2TInt( y_value ), "y coordinate");
+
+	// point 50
+	x_value = ellipsis->MapValue( 50, 0 );
+	y_value = ellipsis->MapValue( 50, 1 );
+	EUNIT_ASSERT_EQUALS_DESC( 0, TReal2TInt( x_value ), "x coordinate");
+	EUNIT_ASSERT_EQUALS_DESC( 100, TReal2TInt( y_value ), "y coordinate");
+	
+	// point 100
+	x_value = ellipsis->MapValue( 100, 0 );
+	y_value = ellipsis->MapValue( 100, 1 );
+	EUNIT_ASSERT_EQUALS_DESC( -50, TReal2TInt( x_value ), "x coordinate");
+	EUNIT_ASSERT_EQUALS_DESC( 0, TReal2TInt( y_value ), "y coordinate");
+
+	// point 150
+	x_value = ellipsis->MapValue( 150, 0 );
+	y_value = ellipsis->MapValue( 150, 1 );
+	EUNIT_ASSERT_EQUALS_DESC( 0, TReal2TInt( x_value ), "x coordinate");
+	EUNIT_ASSERT_EQUALS_DESC( -100, TReal2TInt( y_value ), "y coordinate");
+
+	// point 200
+	x_value = ellipsis->MapValue( 200, 0 );
+	y_value = ellipsis->MapValue( 200, 1 );
+	EUNIT_ASSERT_EQUALS_DESC( 50, TReal2TInt( x_value ), "x coordinate");
+	EUNIT_ASSERT_EQUALS_DESC( 0, TReal2TInt( y_value ), "y coordinate");
+	}
+
+void T_CShwZoomAndPanEffect::T_ZoomAndPanTestL()
+	{
+	// create env, no need to delete or cleanupstack
+	TShwAutoPtr< CHuiEnv > env = CHuiEnv::NewL();
+
+	// size of screen
+	const TInt screenX = 320;
+	const TInt screenY = 200;
+	TSize screen( screenX, screenY );
+	// size of image, smaller than screen x KMaxZoomAndPanFactor
+	// but larger than screen
+	const TInt originalImageX = ( screenX + screenX * KMaxZoomAndPanFactor ) / 2;
+	const TInt originalImageY = ( screenY + screenY * KMaxZoomAndPanFactor ) / 2;
+	TSize image( originalImageX, originalImageY );
+	// create curve path with 100 length
+	TShwAutoPtr< CHuiCurvePath > ellipsis = 
+		NShwCurveFactory::CreateEllipsisL( screen, 100 );
+
+	// create the layout
+	TEUnitFillMem< TShwZoomAndPanLayout > layout;
+	// set screen and image size and maximum size
+	layout.SetSizes( screen, image, 
+	    TSize( screenX * KMaxZoomAndPanFactor, screenY * KMaxZoomAndPanFactor ) );
+	// set the panning curve
+	layout.SetPanningCurve( &ellipsis );
+
+	// check that layout has correct init values
+	// need to upcast to get access to public functions
+	MGlxLayout& base = static_cast< MGlxLayout& >( layout );
+	TGlxLayoutInfoResetter info;
+	// reset info
+	info.iPosition.iX = -1;info.iPosition.iY = -1;
+	info.iSize.iX = -1; info.iSize.iY = -1;
+	// run the layout
+	base.SetLayoutValues( info );
+	// verify that the position was set properly, the initial size is minimum
+	// so pan gets scaled to 0
+	TInt initialXonCurve = 160;
+	TInt initialYonCurve = 0;
+	EUNIT_ASSERT_EQUALS_DESC(
+		0, TReal2TInt( info.iPosition.iX ),"x position set" );
+	EUNIT_ASSERT_EQUALS_DESC(
+		0, TReal2TInt( info.iPosition.iY ),"y position set" );
+	// verify size
+	EUNIT_ASSERT_EQUALS_DESC( 
+		screenX, TReal2TInt( info.iSize.iX ),"default x size is screen size" );
+	EUNIT_ASSERT_EQUALS_DESC( 
+		screenY, TReal2TInt( info.iSize.iY ),"default y size is screen size" );
+
+	// do zoom in in 1 second
+	layout.StartZoom( TShwZoomAndPanLayout::EZoomIn, 1 );
+
+	// create timer to give us callback
+	TShwAutoPtr< CPeriodic > timer = CPeriodic::NewL( CActive::EPriorityStandard );
+	// wait for 1.5 seconds (to be sure the zoom completes)
+    timer->Start(1.5 * 1000000, 1.5 * 1000000, TShwCallBack<
+            T_CShwZoomAndPanEffect, &T_CShwZoomAndPanEffect::CancelAsyncL> (
+            this));
+	// start async wait
+	iAsyncWait.Start();
+
+	// reset info
+	info.iPosition.iX = -1;info.iPosition.iY = -1;
+	info.iSize.iX = -1; info.iSize.iY = -1;
+	// run the layout
+	base.SetLayoutValues( info );
+	// verify that the position was set; zoom in does one half of the curve
+	EUNIT_ASSERT_EQUALS_DESC( 
+		-initialXonCurve, TReal2TInt( info.iPosition.iX ),"x position looped on the opposite side" );
+	EUNIT_ASSERT_EQUALS_DESC( 
+		initialYonCurve, TReal2TInt( info.iPosition.iY ),"y position looped back" );
+	// verify size, after zoom in we are in 4x screen size
+	EUNIT_ASSERT_GREATER_DESC( 
+		TReal2TInt( info.iSize.iX ), originalImageX,"x size is greater than original size" );
+	EUNIT_ASSERT_GREATER_DESC( 
+		TReal2TInt( info.iSize.iY ), originalImageY,"y size is greater than original size" );
+
+	// perform zoom out in one second
+	layout.StartZoom( TShwZoomAndPanLayout::EZoomOut, 1 );
+	// cancel old timer
+	timer->Cancel();
+	// wait for 1.5 seconds (to be sure the zoom completes)
+    timer->Start(1.5 * 1000000, 1.5 * 1000000, TShwCallBack<
+            T_CShwZoomAndPanEffect, &T_CShwZoomAndPanEffect::CancelAsyncL> (
+            this));
+	// start async wait
+	iAsyncWait.Start();
+
+	// reset info
+	info.iPosition.iX = -1;info.iPosition.iY = -1;
+	info.iSize.iX = -1; info.iSize.iY = -1;
+	// run the layout
+	base.SetLayoutValues( info );
+	// verify that the position was set to zero again as in minimum size the pan is 0
+	EUNIT_ASSERT_EQUALS_DESC( 
+		0, TReal2TInt( info.iPosition.iX ), "x position looped " );
+	EUNIT_ASSERT_EQUALS_DESC( 
+		0, TReal2TInt( info.iPosition.iY ), "y position looped back" );
+	// verify size, after zoom in we are in 100% size
+	EUNIT_ASSERT_EQUALS_DESC( 
+		screenX, TReal2TInt( info.iSize.iX ),"x size is back to minimum" );
+	EUNIT_ASSERT_EQUALS_DESC( 
+		screenY, TReal2TInt( info.iSize.iY ),"y size is back to minimum" );
+	}
+
+void T_CShwZoomAndPanEffect::T_PauseTestL()
+	{
+	// display size is define by gScreenRect
+	// give the HUI env to the effect and the size
+	TSize screenSize = gScreenRect.Size();
+	iCShwZoomAndPanEffect->InitializeL( 
+	    iEnv,
+	    NULL,
+	    NULL,
+	    screenSize );
+
+	// prepare view with a max size image
+	TSize imageSize( screenSize.iWidth * KMaxThumbnailSize, screenSize.iHeight * KMaxThumbnailSize );
+	TSize thumbSize = iCShwZoomAndPanEffect->PrepareViewL( iVisual, imageSize );
+	// check thumbnail size
+	EUNIT_ASSERT_EQUALS_DESC( 
+		imageSize.iHeight, thumbSize.iHeight, "thumbnail is image size" );
+	EUNIT_ASSERT_EQUALS_DESC( 
+		imageSize.iWidth, thumbSize.iWidth, "thumbnail is image size" );
+
+	// then enter view, fade in should last 250 millliseconds and view 500
+	// get the layout chain
+	MGlxLayout* layout = 
+		iCShwZoomAndPanEffect->EnterViewL( iVisual, 500, 250 );
+	// get the initial layout values
+	TGlxLayoutInfoResetter info;
+	// reset info
+	info.iPosition.iX = -1;info.iPosition.iY = -1;
+	info.iSize.iX = -1; info.iSize.iY = -1;
+	info.iOpacity = -1;
+	// run the layout to get values
+	layout->SetLayoutValues( info );
+	
+	// next pause the effect
+	iCShwZoomAndPanEffect->PauseL();
+	// create timer to give us callback
+	TShwAutoPtr< CPeriodic > timer = CPeriodic::NewL( CActive::EPriorityStandard );
+	// start asynch wait for 1.5 second
+    timer->Start(1.5 * 1000000, 1.5 * 1000000, TShwCallBack<
+            T_CShwZoomAndPanEffect, &T_CShwZoomAndPanEffect::CancelAsyncL> (
+            this));
+	// start async wait
+	iAsyncWait.Start();
+	// cancel the timer
+	timer->Cancel();
+
+	// now verify that the layout chain is in same situation
+	// get new layout values
+	TGlxLayoutInfoResetter info2;
+	// reset info2
+	info2.iPosition.iX = -1;info2.iPosition.iY = -1;
+	info2.iSize.iX = -1; info2.iSize.iY = -1;
+	info2.iOpacity = -1;
+	// run the layout to get values
+	layout->SetLayoutValues( info2 );
+	// check that no changes
+	EUNIT_ASSERT_EQUALS_DESC( 
+		TReal2TInt( info.iOpacity ), TReal2TInt( info2.iOpacity ), "opacity" );
+	EUNIT_ASSERT_EQUALS_DESC( 
+		TReal2TInt( info.iPosition.iX ), TReal2TInt( info2.iPosition.iX ), "position x" );
+	EUNIT_ASSERT_EQUALS_DESC( 
+		TReal2TInt( info.iPosition.iY ), TReal2TInt( info2.iPosition.iY ), "position y" );
+	EUNIT_ASSERT_EQUALS_DESC( 
+		TReal2TInt( info.iSize.iX ), TReal2TInt( info2.iSize.iX ), "size x" );
+	EUNIT_ASSERT_EQUALS_DESC( 
+		TReal2TInt( info.iSize.iY ), TReal2TInt( info2.iSize.iY ), "size y" );
+
+	// resume the effect
+	iCShwZoomAndPanEffect->Resume();
+	
+	// start timer for 1.5 seconds
+    timer->Start(1.5 * 1000000, 1.5 * 1000000, TShwCallBack<
+            T_CShwZoomAndPanEffect, &T_CShwZoomAndPanEffect::CancelAsyncL> (
+            this));
+	// start async wait
+	iAsyncWait.Start();
+	// cancel the timer
+	timer->Cancel();
+
+	// now verify that the layout chain did change
+	// reset info2
+	info2.iPosition.iX = -1;info2.iPosition.iY = -1;
+	info2.iSize.iX = -1; info2.iSize.iY = -1;
+	info2.iOpacity = -1;
+	// run the layout to get values
+	layout->SetLayoutValues( info2 );
+    // check that values did not change
+	EUNIT_ASSERT_NOT_EQUALS_DESC( 
+		TReal2TInt( info.iOpacity ), TReal2TInt( info2.iOpacity ), "opacity" );
+	EUNIT_ASSERT_NOT_EQUALS_DESC( 
+		TReal2TInt( info.iSize.iX ), TReal2TInt( info2.iSize.iX ), "size x" );
+	EUNIT_ASSERT_NOT_EQUALS_DESC( 
+		TReal2TInt( info.iSize.iY ), TReal2TInt( info2.iSize.iY ), "size y" );
+	EUNIT_ASSERT_NOT_EQUALS_DESC( 
+		TReal2TInt( info.iPosition.iX ), TReal2TInt( info2.iPosition.iX ), "position x" );
+	EUNIT_ASSERT_NOT_EQUALS_DESC( 
+		TReal2TInt( info.iPosition.iY ), TReal2TInt( info2.iPosition.iY ), "position y" );
+
+	// enter view again, fade in should last 250 millliseconds and view 500
+	// get the layout chain
+	layout = iCShwZoomAndPanEffect->EnterViewL( iVisual, 500, 250 );
+	// get the initial layout values
+	// reset info
+	info.iPosition.iX = -1;info.iPosition.iY = -1;
+	info.iSize.iX = -1; info.iSize.iY = -1;
+	info.iOpacity = -1;
+	// run the layout to get values
+	layout->SetLayoutValues( info );
+	// start timer for .1 seconds, to make sure opacity does not run too fast
+    timer->Start(0.1 * 1000000, 0.1 * 1000000, TShwCallBack<
+            T_CShwZoomAndPanEffect, &T_CShwZoomAndPanEffect::CancelAsyncL> (
+            this));
+	// start async wait
+	iAsyncWait.Start();
+	// cancel the timer
+	timer->Cancel();
+
+	// reset info2
+	info2.iPosition.iX = -1;info2.iPosition.iY = -1;
+	info2.iSize.iX = -1; info2.iSize.iY = -1;
+	info2.iOpacity = -1;
+	// run the layout to get values
+	layout->SetLayoutValues( info2 );
+	// check that size and opacity changed, multiply with 10 to remove rounding errors
+	EUNIT_ASSERT_NOT_EQUALS_DESC( 
+		TReal2TInt( info.iOpacity * 10 ), TReal2TInt( info2.iOpacity * 10 ), "opacity" );
+	EUNIT_ASSERT_NOT_EQUALS_DESC( 
+		TReal2TInt( info.iSize.iX ), TReal2TInt( info2.iSize.iX ), "size x" );
+	EUNIT_ASSERT_NOT_EQUALS_DESC( 
+		TReal2TInt( info.iSize.iY ), TReal2TInt( info2.iSize.iY ), "size y" );
+
+	// pause the effect
+	iCShwZoomAndPanEffect->PauseL();
+	// run the layout to get values
+	layout->SetLayoutValues( info2 );
+	// start timer for 1.0 seconds
+    timer->Start(1.0 * 1000000, 1.0 * 1000000, TShwCallBack<
+            T_CShwZoomAndPanEffect, &T_CShwZoomAndPanEffect::CancelAsyncL> (
+            this));
+	// start async wait
+	iAsyncWait.Start();
+	// cancel the timer
+	timer->Cancel();
+	TGlxLayoutInfoResetter info3;
+	// reset info3
+	info3.iPosition.iX = -1;info3.iPosition.iY = -1;
+	info3.iSize.iX = -1; info3.iSize.iY = -1;
+	info3.iOpacity = -1;
+	// run the layout to get values
+	layout->SetLayoutValues( info3 );
+	// check that no changes between info2 and info3, multiply opacity to remove rounding error
+	EUNIT_ASSERT_EQUALS_DESC( 
+		TReal2TInt( info2.iOpacity * 10 ), TReal2TInt( info3.iOpacity * 10 ), "opacity" );
+	EUNIT_ASSERT_EQUALS_DESC( 
+		TReal2TInt( info2.iSize.iX ), TReal2TInt( info3.iSize.iX ), "size x" );
+	EUNIT_ASSERT_EQUALS_DESC( 
+		TReal2TInt( info2.iSize.iY ), TReal2TInt( info3.iSize.iY ), "size y" );
+	EUNIT_ASSERT_EQUALS_DESC( 
+		TReal2TInt( info2.iPosition.iX ), TReal2TInt( info3.iPosition.iX ), "position x" );
+	EUNIT_ASSERT_EQUALS_DESC( 
+		TReal2TInt( info2.iPosition.iY ), TReal2TInt( info3.iPosition.iY ), "position y" );
+
+	// now do the resume
+	iCShwZoomAndPanEffect->Resume();
+	// start timer for 1.0 seconds
+    timer->Start(1.0 * 1000000, 1.0 * 1000000, TShwCallBack<
+            T_CShwZoomAndPanEffect, &T_CShwZoomAndPanEffect::CancelAsyncL> (
+            this));
+	// start async wait
+	iAsyncWait.Start();
+	// cancel the timer
+	timer->Cancel();
+
+	// reset info3
+	info3.iPosition.iX = -1;info3.iPosition.iY = -1;
+	info3.iSize.iX = -1; info3.iSize.iY = -1;
+	info3.iOpacity = -1;
+	// run the layout to get values
+	layout->SetLayoutValues( info3 );
+	// check that values  did change between info2 and info3, multiply opacity to remove rounding error
+	EUNIT_ASSERT_NOT_EQUALS_DESC( 
+		TReal2TInt( info2.iOpacity * 10 ), TReal2TInt( info3.iOpacity * 10 ), "opacity" );
+	EUNIT_ASSERT_NOT_EQUALS_DESC( 
+		TReal2TInt( info2.iSize.iX ), TReal2TInt( info3.iSize.iX ), "size x" );
+	EUNIT_ASSERT_NOT_EQUALS_DESC( 
+		TReal2TInt( info2.iSize.iY ), TReal2TInt( info3.iSize.iY ), "size y" );
+	EUNIT_ASSERT_NOT_EQUALS_DESC( 
+		TReal2TInt( info2.iPosition.iX ), TReal2TInt( info3.iPosition.iX ), "position x" );
+	EUNIT_ASSERT_NOT_EQUALS_DESC( 
+		TReal2TInt( info2.iPosition.iY ), TReal2TInt( info3.iPosition.iY ), "position y" );
+	}
+
+void T_CShwZoomAndPanEffect::T_TestBoundariesL()
+    {
+    // get the screen size
+	TSize screenSize = gScreenRect.Size();
+    // calculate the maximum width and height
+    TInt maximumImageWidth = screenSize.iWidth * KMaxThumbnailSize;
+    TInt maximumImageHeight = screenSize.iHeight * KMaxThumbnailSize;
+    
+	// display size is define by gScreenRect
+	// give the HUI env to the effect and the size
+	iCShwZoomAndPanEffect->InitializeL( 
+	    iEnv,
+	    NULL,
+	    NULL,
+	    screenSize );
+
+	// prepare view with image twice as wide but half the height of maximum
+	TSize imageSize( 
+	    maximumImageWidth * 2, 
+	    maximumImageHeight / 2 );
+	TSize thumbSize = iCShwZoomAndPanEffect->PrepareViewL( iVisual, imageSize );
+    // check the thumbnail size
+    // note that the thumbnail may be wider than higher than the maximage but the area
+    // is the same
+	EUNIT_ASSERT_EQUALS_DESC( 
+		maximumImageWidth * 2, thumbSize.iWidth, "size x" );
+	EUNIT_ASSERT_EQUALS_DESC( 
+		maximumImageHeight / 2, thumbSize.iHeight, "size y" );
+
+	// then enter view, fade in should last 0 millliseconds and view 0 so that the new values
+	// are immediate
+	// get the layout chain
+	MGlxLayout* layout = 
+		iCShwZoomAndPanEffect->EnterViewL( iVisual, 0, 0 );
+	// get the initial layout values
+	TGlxLayoutInfoResetter info;
+	// reset info
+	info.iPosition.iX = -1;info.iPosition.iY = -1;
+	info.iSize.iX = -1; info.iSize.iY = -1;
+	info.iOpacity = -1;
+	// run the layout to get values
+	layout->SetLayoutValues( info );
+    // check that image width is maximum screen width times two and height is 
+    // original by two (as original was twice as wide as fitted)
+    // note that the thumbnail may be wider than higher than the maximage but the area
+    // is the same
+	EUNIT_ASSERT_EQUALS_DESC(
+		maximumImageWidth * 2, TReal2TInt( info.iSize.iX ), "size x" );
+	EUNIT_ASSERT_EQUALS_DESC( 
+		maximumImageHeight / 2, TReal2TInt( info.iSize.iY ), "size y" );
+
+	// prepare view with image max wide but twice the height of maximum
+	imageSize.SetSize( maximumImageWidth, maximumImageHeight * 2 );
+	iCShwZoomAndPanEffect->PrepareViewL( iVisual, imageSize );
+	// then enter view, fade in should last 0 millliseconds and view 0 so that the new values
+	// are immediate
+	// get the layout chain
+	layout = iCShwZoomAndPanEffect->EnterViewL( iVisual, 0, 0 );
+	// get the initial layout values
+	// reset info
+	info.iPosition.iX = -1;info.iPosition.iY = -1;
+	info.iSize.iX = -1; info.iSize.iY = -1;
+	info.iOpacity = -1;
+	// run the layout to get values
+	layout->SetLayoutValues( info );
+    // check that image area is same as maximum image area
+    // note that the thumbnail may be wider than higher than the maximage but the area
+    // is the same
+	EUNIT_ASSERT_EQUALS_DESC( 
+		maximumImageWidth * maximumImageHeight, 
+		TReal2TInt( info.iSize.iX * info.iSize.iY ), "size x" );
+
+    // test image partially smaller than screen, should not zoom
+	// prepare view with image quarter of the screen wide but four times the height of screen
+	imageSize.SetSize( gScreenWidth / 4, gScreenHeight * 4 );
+	iCShwZoomAndPanEffect->PrepareViewL( iVisual, imageSize );
+	// then enter view, fade in should last 0 millliseconds and view 0 so that the new values
+	// are immediate
+	// get the layout chain
+	layout = iCShwZoomAndPanEffect->EnterViewL( iVisual, 0, 0 );
+	// get the initial layout values
+	// reset info
+	info.iPosition.iX = -1;info.iPosition.iY = -1;
+	info.iSize.iX = -1; info.iSize.iY = -1;
+	info.iOpacity = -1;
+	// run the layout to get values
+	layout->SetLayoutValues( info );
+    // check that image size is the maximum screen width and height multiplied by 16
+	EUNIT_ASSERT_EQUALS_DESC( 
+		gScreenWidth, TReal2TInt( info.iSize.iX ), "size x" );
+	EUNIT_ASSERT_EQUALS_DESC( 
+		gScreenHeight * 4 * 4, TReal2TInt( info.iSize.iY ), "size y" );
+
+    // test image partially smaller than screen, should zoom
+	// prepare view with image half of the screen wide but three times the height of screen
+	imageSize.SetSize( gScreenWidth - 10, gScreenHeight * 2 );
+	iCShwZoomAndPanEffect->PrepareViewL( iVisual, imageSize );
+	// then enter view, fade in should last 0 millliseconds and view 0 so that the new values
+	// are immediate
+	// get the layout chain
+	layout = iCShwZoomAndPanEffect->EnterViewL( iVisual, 0, 0 );
+	// get the initial layout values
+	// reset info
+	info.iPosition.iX = -1;info.iPosition.iY = -1;
+	info.iSize.iX = -1; info.iSize.iY = -1;
+	info.iOpacity = -1;
+	// run the layout to get values
+	layout->SetLayoutValues( info );
+    // check image area, should be same as max size
+	EUNIT_ASSERT_EQUALS_DESC( 
+		maximumImageWidth * maximumImageHeight, 
+		TReal2TInt( info.iSize.iX * info.iSize.iY ), "size x" );
+
+    // test image that is screen size, should not zoom
+	// prepare view with image 
+	imageSize.SetSize( gScreenWidth, gScreenHeight );
+	iCShwZoomAndPanEffect->PrepareViewL( iVisual, imageSize );
+	// then enter view, fade in should last 0 millliseconds and view 0 so that the new values
+	// are immediate
+	// get the layout chain
+	layout = iCShwZoomAndPanEffect->EnterViewL( iVisual, 0, 0 );
+	// get the initial layout values
+	// reset info
+	info.iPosition.iX = -1;info.iPosition.iY = -1;
+	info.iSize.iX = -1; info.iSize.iY = -1;
+	info.iOpacity = -1;
+	// run the layout to get values
+	layout->SetLayoutValues( info );
+    // check that image size is screen size
+	EUNIT_ASSERT_EQUALS_DESC( 
+		gScreenWidth, TReal2TInt( info.iSize.iX ), "size x" );
+	EUNIT_ASSERT_EQUALS_DESC( 
+		gScreenHeight, TReal2TInt( info.iSize.iY ), "size y" );
+
+    // test image partially larger than screen, should zoom
+	// prepare view
+	imageSize.SetSize( gScreenWidth * 1.5, gScreenHeight * 1.5 );
+	iCShwZoomAndPanEffect->PrepareViewL( iVisual, imageSize );
+	// then enter view, fade in should last 0 millliseconds and view 0 so that the new values
+	// are immediate
+	// get the layout chain
+	layout = iCShwZoomAndPanEffect->EnterViewL( iVisual, 0, 0 );
+	// get the initial layout values
+	// reset info
+	info.iPosition.iX = -1;info.iPosition.iY = -1;
+	info.iSize.iX = -1; info.iSize.iY = -1;
+	info.iOpacity = -1;
+	// run the layout to get values
+	layout->SetLayoutValues( info );
+    // check that image size is the screen multiplied by max zoom
+	EUNIT_ASSERT_EQUALS_DESC( 
+		TInt(gScreenWidth * KMaxZoomAndPanFactor), TReal2TInt( info.iSize.iX ), "size x" );
+	EUNIT_ASSERT_EQUALS_DESC( 
+		TInt(gScreenHeight * KMaxZoomAndPanFactor), TReal2TInt( info.iSize.iY ), "size y" );
+		
+	// enter transition to increase the counter, duration zero
+	// ignore layout chain
+	iCShwZoomAndPanEffect->EnterTransitionL( iVisual, 0 );
+    // enter the same effect again, this time we do zoom out (max to min size)
+	// get the layout chain
+	layout = iCShwZoomAndPanEffect->EnterViewL( iVisual, 0, 0 );
+	// reset info
+	info.iPosition.iX = -1;info.iPosition.iY = -1;
+	info.iSize.iX = -1; info.iSize.iY = -1;
+	info.iOpacity = -1;
+	// run the layout to get values
+	layout->SetLayoutValues( info );
+    // check that image size is the screen multiplied by max zoom
+	EUNIT_ASSERT_EQUALS_DESC( 
+		gScreenWidth, TReal2TInt( info.iSize.iX ), "size x" );
+	EUNIT_ASSERT_EQUALS_DESC( 
+		gScreenHeight, TReal2TInt( info.iSize.iY ), "size y" );
+    }
+
+TInt T_CShwZoomAndPanEffect::CancelAsyncL()
+	{
+	// stop async wait
+	iAsyncWait.AsyncStop();
+	// return KErrNone to stop the timer
+	return KErrNone;
+	}
+
+//  TEST TABLE
+EUNIT_BEGIN_TEST_TABLE(
+    T_CShwZoomAndPanEffect,
+    "Test suite for CShwZoomAndPanEffect and Layout",
+    "UNIT" )
+
+EUNIT_TEST(
+    "Geometry utilities test",
+    "NShwGeometryUtilities",
+    "FitDimension,FitInsideBox,FitToCoverBox",
+    "FUNCTIONALITY",
+    Empty, T_TestGeometryAlgorithmsL, Empty )
+
+EUNIT_TEST(
+    "Layout test",
+    "TShwZoomAndPanLayout",
+    "TShwZoomAndPanLayout",
+    "FUNCTIONALITY",
+    Empty, T_LayoutTestL, Empty )
+
+EUNIT_TEST(
+    "Curve test",
+    "ShwCurveFactory",
+    "CreateEllipsisL",
+    "FUNCTIONALITY",
+    Empty, T_CurveTestL, Empty )
+
+EUNIT_TEST(
+    "Zoom and pan test",
+    "TShwZoomAndPanLayout",
+    "DoSetLayoutValues",
+    "FUNCTIONALITY",
+    Empty, T_ZoomAndPanTestL, Empty )
+
+EUNIT_TEST(
+    "Pause Zoom and pan",
+    "CShwZoomAndPanEffect",
+    "PauseL, Resume",
+    "FUNCTIONALITY",
+    SetupL, T_PauseTestL, Teardown )
+
+EUNIT_TEST(
+    "Test boundaries",
+    "CShwZoomAndPanEffect",
+    "PrepareViewL",
+    "FUNCTIONALITY",
+    SetupL, T_TestBoundariesL, Teardown )
+
+EUNIT_END_TEST_TABLE
+
+//  END OF FILE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/photosgallery/slideshow/engine/tsrc/t_cshwzoomandpaneffect/t_cshwzoomandpaneffect.h	Wed Oct 13 14:32:09 2010 +0300
@@ -0,0 +1,101 @@
+/*
+* Copyright (c) 2007-2007 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:  Test for zoom and pan effect in slideshow
+ *
+*/
+
+
+
+
+#ifndef __T_CSHWZOOMANDPANEFFECT_H__
+#define __T_CSHWZOOMANDPANEFFECT_H__
+
+//  EXTERNAL INCLUDES
+#include <digia/eunit/CEUnitTestSuiteClass.h>
+#include <digia/eunit/EUnitDecorators.h>
+
+//  INTERNAL INCLUDES
+
+//  FORWARD DECLARATIONS
+class CHuiEnv;
+class CHuiDisplayCoeControl;
+class CHuiControl;
+class CHuiImageVisual;
+class CShwZoomAndPanEffect;
+
+//  CLASS DEFINITION
+/**
+ * EUnit test suite for Zoom and pan related classes
+ */
+NONSHARABLE_CLASS( T_CShwZoomAndPanEffect )
+	: public CEUnitTestSuiteClass
+    {
+    public:     // Constructors and destructors
+
+        /**
+         * Two phase construction
+         */
+        static T_CShwZoomAndPanEffect* NewL();
+        static T_CShwZoomAndPanEffect* NewLC();
+        /**
+         * Destructor
+         */
+        ~T_CShwZoomAndPanEffect();
+
+		// helper
+		TInt CancelAsyncL();
+
+    private:    // Constructors and destructors
+
+        T_CShwZoomAndPanEffect();
+        void ConstructL();
+
+    private:    // New methods
+
+		void Empty();
+        void SetupL();
+        void Teardown();
+        void T_LayoutTestL();
+        void T_CurveTestL();
+        void T_ZoomAndPanTestL();
+        void T_PauseTestL();
+        void T_TestGeometryAlgorithmsL();
+        void T_TestBoundariesL();
+
+    private:    // Data
+
+		/// Own: HUI environment
+		CHuiEnv* iEnv;
+
+		/// Own: HUI display		
+		CHuiDisplayCoeControl* iCoeDisplay;
+
+		/// Own: HUI control
+		CHuiControl* iControl;
+
+		/// Own: HUI visual
+		CHuiImageVisual* iVisual;
+		
+		/// Own: asynch wait
+		CActiveSchedulerWait iAsyncWait;
+
+		/// Own: class under test
+		CShwZoomAndPanEffect* iCShwZoomAndPanEffect;
+		EUNIT_DECLARE_TEST_TABLE; 
+
+    };
+
+#endif      //  __T_CSHWZOOMANDPANEFFECT_H__
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/photosgallery/slideshow/engine/tsrc/t_cshwzoomandpaneffect/t_cshwzoomandpaneffect_dllmain.cpp	Wed Oct 13 14:32:09 2010 +0300
@@ -0,0 +1,39 @@
+/*
+* Copyright (c) 2007-2007 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:  Test for zoom and pan effect in slideshow
+ *
+*/
+
+
+
+
+//  CLASS HEADER
+#include "t_cshwzoomandpaneffect.h"
+
+//  EXTERNAL INCLUDES
+#include <digia/eunit/CEUnitTestSuite.h>
+
+EXPORT_C MEUnitTest* CreateTestSuiteL()
+    {
+    return T_CShwZoomAndPanEffect::NewL();
+    }
+
+#ifndef EKA2
+GLDEF_C TInt E32Dll( TDllReason )
+	{
+	return KErrNone;
+	}
+#endif
+
+//  END OF FILE
--- a/photosgallery/slideshow/settingsdialog/data/shwsettingsdialog.rss	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/slideshow/settingsdialog/data/shwsettingsdialog.rss	Wed Oct 13 14:32:09 2010 +0300
@@ -264,7 +264,6 @@
     }
 // -----------------------------------------------------------------------------
 // Slideshow settings play direction popup setting texts resource
-// Direction of slideshow play (0->Older to newer, 1->newer to older)
 // -----------------------------------------------------------------------------
 RESOURCE ARRAY r_shw_settingslist_play_direction_texts
     {
@@ -272,12 +271,12 @@
         {
         AVKON_ENUMERATED_TEXT
             {
-            value = 0;
+            value = 1;
             text = qtn_lgal_slideshow_settings_older_to_newer;
             },
         AVKON_ENUMERATED_TEXT
             {
-            value = 1;
+            value = 0;
             text = qtn_lgal_slideshow_settings_newer_to_older;
             }
         };
@@ -354,16 +353,15 @@
 // ---------------------------------------------------------------------------
 // Delay transition slider.
 // ---------------------------------------------------------------------------
-RESOURCE SLIDER_WITH_FEEDBACK_STYLE  r_shw_settingslist_delay_slider
+RESOURCE SLIDER r_shw_settingslist_delay_slider
     {
-    feedbackstyle = EAknSliderFbDynamic;
-    layout = EAknSettingsItemSliderLayout;
-    minvalue = KMinTransDelay;
-    maxvalue = KMaxTransDelay;
-    step = KTransDelayStep;
+    layout 	  = EAknSettingsItemSliderLayout;
+    minvalue  = KMinTransDelay;  
+    maxvalue  = KMaxTransDelay;
+    step 	  = KTransDelayStep;	
     valuetype = EAknSliderValueNone;
-    minlabel = qtn_lgal_slideshow_settings_delay_slow;
-    maxlabel = qtn_lgal_slideshow_settings_delay_fast;
+    minlabel  = qtn_lgal_slideshow_settings_delay_slow;
+    maxlabel  = qtn_lgal_slideshow_settings_delay_fast;
     }
     
     
--- a/photosgallery/slideshow/settingsdialog/src/shwslideshowsettingslist.cpp	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/slideshow/settingsdialog/src/shwslideshowsettingslist.cpp	Wed Oct 13 14:32:09 2010 +0300
@@ -1203,26 +1203,25 @@
 //-----------------------------------------------------------------------------
 void CShwSlideShowSettingsList::SetPlayDirectionL(TBool aNewPlayDirection)
 	{
-    TRACER("CShwSlideShowSettingsList::SetPlayDirectionL");
-    GLX_LOG_INFO1("CShwSlideShowSettingsList::SetPlayDirectionL(%d)",
-            aNewPlayDirection);
-
-    // retrieve play direction setting
-    (*SettingItemArray())[EPlayDirectionItem]->EditItemL(EFalse);
-
-    // updates play direction 
-    iPlayDirection = aNewPlayDirection;
-
-    // internalise new state to settings item
-    (*(SettingItemArray()))[EPlayDirectionItem]->StoreL();
-
-    // persist direction
-    iShwSettings.SavePlayOrderL(iPlayDirection);
-
-    // redraw music on/off control
-    ListBox()->DrawItem(EPlayDirectionItem);
-    }
-
+	TRACER("CShwSlideShowSettingsList::SetPlayDirectionL");
+	GLX_LOG_INFO("CShwSlideShowSettingsList::SetMusicStateL");	
+    if (aNewPlayDirection != iPlayDirection)
+        {
+    	// retrieve play direction setting
+    	(*SettingItemArray())[EPlayDirectionItem]->EditItemL(EFalse);
+    	// updates play direction 
+    	iPlayDirection = aNewPlayDirection;
+    	// internalise new state to settings item
+    	(*(SettingItemArray()))[EPlayDirectionItem]->StoreL();
+    	
+    	// persist direction
+    	iShwSettings.SavePlayOrderL(iPlayDirection);
+    	//@TODO cenrep update
+    	
+    	// redraw music on/off control
+    	ListBox()->DrawItem(EPlayDirectionItem);
+        }
+	}
 //-----------------------------------------------------------------------------
 // CShwSlideShowSettingsList::ConfirmationQueryL
 //-----------------------------------------------------------------------------
--- a/photosgallery/slideshow/view/group/shwslideshowviewplugin.mmp	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/slideshow/view/group/shwslideshowviewplugin.mmp	Wed Oct 13 14:32:09 2010 +0300
@@ -75,7 +75,6 @@
 SYSTEMINCLUDE   ../../../viewframework/visuallistmanager/inc
 SYSTEMINCLUDE   ../../../viewframework/uiutilities/inc
 SYSTEMINCLUDE   ../../../viewframework/texturemanager/inc
-SYSTEMINCLUDE   ../../../viewframework/commandhandlers/inc
 SYSTEMINCLUDE   ../../../viewframework/commandhandlers/commoncommandhandlers/inc
 SYSTEMINCLUDE   ../../../viewframework/commandhandlers/commandhandlerbase/inc
 SYSTEMINCLUDE   ../../engine/inc // slideshow engine
@@ -106,6 +105,8 @@
 LIBRARY         mpxcommon.lib
 LIBRARY         ecom.lib
 
+LIBRARY         hitchcock.lib	// HUI
+
 LIBRARY         glxviewbase.lib
 LIBRARY         glxmedialists.lib
 LIBRARY         glxvisuallistmanager.lib
@@ -122,7 +123,7 @@
 LIBRARY         aknicon.lib             //  AknIconUtils
 
 LIBRARY         etel3rdparty.lib // for CTelephony
-LIBRARY         alfclient.lib
+LIBRARY 		alfclient.lib
 LIBRARY         gesturehelper.lib
 
 LIBRARY         remconcoreapi.lib
@@ -130,5 +131,4 @@
 //LIBRARY 		hgcontextutility.lib 					// For Teleport
 LIBRARY			glxtvout.lib
 LIBRARY			fbscli.lib
-LIBRARY         ws32.lib      // RWindowGroup
 // End of File
--- a/photosgallery/slideshow/view/inc/shwslideshowview.h	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/slideshow/view/inc/shwslideshowview.h	Wed Oct 13 14:32:09 2010 +0300
@@ -23,7 +23,6 @@
 #include <glxviewbase.h>
 #include <mglxmedialistobserver.h>
 #include <AknProgressDialog.h>
-#include <AknWsEventObserver.h>
 #include <gestureobserver.h>
 #include <gesturehelper.h>
 #include "shwengineobserver.h"
@@ -74,8 +73,7 @@
                                        public MShwGestureObserver,
                                        public MStorageNotifierObserver,
                                        public MGlxTvObserver,
-									   public MGlxHDMIDecoderObserver,
-									   public MAknWsEventObserver
+									   public MGlxHDMIDecoderObserver
     {
     public:
 
@@ -141,9 +139,6 @@
          */
         void HandleForegroundEventL(TBool aForeground);
 
-    public: // From MAknWsEventObserver
-        void HandleWsEventL(const TWsEvent& aEvent, CCoeControl* aDestination);
-
     public: // From CGlxViewBase
     	
     	/**
@@ -346,11 +341,6 @@
 		 * for which HDMI advance decoding will be done
 		 */
 		TInt GetNextIndex();
-		/**
-         * Returns the application foreground status.
-		 * Foreground status is found using WindowsGroupID
-		 */
-		TBool IsAppInForegroundL();
 	public:
 	//to keep in track which of the command set is active/on top
 		enum TShwState
@@ -435,6 +425,7 @@
 		
 	TShwState iShwState;
 	TShwFurniture iShwFurniture;	
+	TInt iCurrentActiveCommandSet;
 	CShwGestureControl* iShwGestureControl;
 	GestureHelper::CGestureControl* iGestureControl;
 	CAlfControlGroup* iGestureControlGroup;
@@ -453,7 +444,6 @@
 
 	TInt iHdmiWidth;
     TInt iHdmiHeight;
-    CAknWsEventMonitor* iAknEventMonitor;// not owned
     };
 
 #endif  // C_SHWSLIDESHOWVIEW_H
--- a/photosgallery/slideshow/view/src/shwslideshowview.cpp	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/slideshow/view/src/shwslideshowview.cpp	Wed Oct 13 14:32:09 2010 +0300
@@ -40,7 +40,6 @@
 #include <glxresolutionutility.h>               // for CGlxResolutionUtility
 #include <shwslideshowview.rsg> // view's resource
 #include <data_caging_path_literals.hrh>	// for resource directory path
-#include <glxcommandhandlers.hrh>			// for EGlxCmdResetView
 #include <glxlog.h>
 #include <glxtracer.h>
 #include <aknsoundsystem.h>				// for CAknKeySoundSystem
@@ -71,8 +70,8 @@
 #include <glxicons.mbg>
 #include <AknIconUtils.h>
 #include <glxuistd.h>
+#include <glxgeneraluiutilities.h>
 #include <glxuiutilities.rsg>
-#include <glxgeneraluiutilities.h>
 
 namespace
     {
@@ -245,23 +244,11 @@
 				{
 				iWaitDialog->ProcessFinishedL();
 				}
-            HBufC* popupText = NULL;
-            //Load the "No Images to Play Slideshow" string from the resource file
-            popupText = StringLoader::LoadLC(R_GLX_NO_IMAGES_TO_PLAY_SLIDESHOW);
-            // Show the Info Note.
-            GlxGeneralUiUtilities::ShowInfoNoteL(popupText->Des(), EFalse);
-            // LoadLC will push text on to cleanupstack, 
-            // hence it should be poped and destroyed
-            CleanupStack::PopAndDestroy(popupText);
 			}
 		else
 			{
 			// The list should now be populated, so set the focus
 			SetListFocusL();
-
-			// Initialize control textures            
-			iVolumeControl->InitControlTextureL();
-
 			// Need to take latest screen size as layout has changed
 			TRect currentScreen;
 			AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EScreen,
@@ -391,8 +378,6 @@
             &CShwSlideshowView::PopulateListL> (this));
     iMSKPressed = EFalse;
     iLSKPressed = EFalse;
-    iAknEventMonitor
-            = static_cast<CAknAppUiBase*> (CCoeEnv::Static()->AppUi())->EventMonitor();
     }
    
 // ---------------------------------------------------------------------------
@@ -409,16 +394,15 @@
 
 // ---------------------------------------------------------------------------
 // From CAknView
-// Background event handling in HandleWsEventL.
-// Foreground event handling this function.
+// Foreground event handling function.
 // ---------------------------------------------------------------------------
 //
 void CShwSlideshowView::HandleForegroundEventL(TBool aForeground)
     {
-	TRACER("CShwSlideshowView::HandleForegroundEventL");
-	GLX_LOG_INFO1("CShwSlideshowView::HandleForegroundEventL(%d)", aForeground);
+    TRACER("CShwSlideshowView::HandleForegroundEventL");
+  	GLX_LOG_INFO( "CShwSlideshowView::HandleForegroundEventL()" );
 	iIsForegrnd = aForeground;
-	if (aForeground)
+    if( aForeground )
         {
         if (iHdmiController && iHdmiActive)
             {
@@ -435,6 +419,16 @@
             iEngine->GetMusicVolumeL();
             }
         }
+    else
+        {
+        if (iHdmiController && iHdmiActive)
+            {
+            iHdmiController->ShiftToCloningMode();
+            }
+        // Something else has gained the foreground
+        iPauseHandler->SwitchToBackgroundL();
+        }
+
     CAknView::HandleForegroundEventL(aForeground);
     }
 
@@ -516,8 +510,6 @@
 	// We will require to act on events ONLY when the view is active.
 	// So listen to them only when the view is active.
     iShwGestureControl->AddObserverL(this);    
-    iAknEventMonitor->Enable(ETrue);
-    iAknEventMonitor->AddObserverL(this);
     }
 
 // -----------------------------------------------------------------------------
@@ -558,8 +550,6 @@
     //are always valid so no need to test for != NULL
    	iDisplay->Roster().Hide( *iVolumeControlGroup );
 
-    iAknEventMonitor->Enable(EFalse);
-    iAknEventMonitor->RemoveObserver(this);
 
   	//Ensure we revert to a proper background
     TRAP_IGNORE( 
@@ -773,23 +763,23 @@
 // ---------------------------------------------------------------------------
 //
 void CShwSlideshowView::EngineStartedL()
-    {
-    TRACER("CShwSlideshowView::EngineStartedL");
-    GLX_LOG_INFO( "CShwSlideshowView::EngineStartedL()" );
-    if (iWaitDialog)
-        {
-        // cancel the progress bar
-        iWaitDialog->ProcessFinishedL();
-        }
-    if (iHdmiController)
-        {
-        iHdmiController->ShiftToPostingMode();
-        }
-    // Here, iShwState value is either 0(first instance)
-    // or EShwExiting(remembered from previous instance)
-    iShwState = EShwPlay;
-    ShowShwFurnitureL();
-    }
+	{
+	TRACER("CShwSlideshowView::EngineStartedL");
+	GLX_LOG_INFO( "CShwSlideshowView::EngineStartedL()" );
+
+	if (iWaitDialog)
+		{
+		// cancel the progress bar
+		iWaitDialog->ProcessFinishedL();
+		}
+	if (iHdmiController)
+		{
+		iHdmiController->ShiftToPostingMode();
+		}
+	iShwState = EShwPlay;
+	ReplaceCommandSetL(R_SHW_SOFTKEYS_END_PAUSE, R_SHW_SOFTKEYS_END_PAUSE);
+	ShowShwFurnitureL();
+	}
 
 // ---------------------------------------------------------------------------
 // From MShwEngineObserver
@@ -799,19 +789,20 @@
 void CShwSlideshowView::EnginePausedL()
     {
     TRACER("CShwSlideshowView::EnginePausedL");
-    GLX_LOG_INFO( "CShwSlideshowView::EnginePausedL()" );
+  	GLX_LOG_INFO( "CShwSlideshowView::EnginePausedL()" );
+    
     // Cancel the backlight if it's on
-    if (iBackLightTimer->IsRunning())
+    if ( iBackLightTimer->IsRunning() )
         {
         iBackLightTimer->Cancel();
         }
-    if (!iUiUtility->IsExitingState() && (iShwState != EShwExiting))
-        {
-        iShwState = EShwPause;
-        ReplaceCommandSetL(R_SHW_SOFTKEYS_END_CONTINUE,
-                R_SHW_SOFTKEYS_END_PAUSE);
-        ShowShwFurnitureL();
-        }
+        
+    if(!iUiUtility->IsExitingState())
+    	{
+    	iShwState = EShwPause;
+   		ReplaceCommandSetL(R_SHW_SOFTKEYS_END_CONTINUE,R_SHW_SOFTKEYS_END_PAUSE);
+    	ShowShwFurnitureL();
+    	}
     }
 
 // ---------------------------------------------------------------------------
@@ -819,24 +810,20 @@
 // Engine resumed callback.
 // ---------------------------------------------------------------------------
 //
-void CShwSlideshowView::EngineResumedL()
-    {
-    TRACER("CShwSlideshowView::EngineResumedL");
-    GLX_LOG_INFO( "CShwSlideshowView::EngineResumedL" );
-    iEngine->GetMusicVolumeL();
+void CShwSlideshowView::EngineResumedL()   
+	{
+	TRACER("CShwSlideshowView::EngineResumedL");
+  	GLX_LOG_INFO( "CShwSlideshowView::EngineResumedL" );
+	iEngine->GetMusicVolumeL();
     // Re-enable the backlight if it's off
-    if (!iBackLightTimer->IsRunning())
+    if ( !iBackLightTimer->IsRunning() )
         {
         iBackLightTimer->StartL();
         }
-    if (iShwState != EShwExiting)
-        {
-        iShwState = EShwPlay;
-        ReplaceCommandSetL(R_SHW_SOFTKEYS_END_PAUSE,
-                R_SHW_SOFTKEYS_END_CONTINUE);
-        ShowShwFurnitureL();
-        }
-    }
+    iShwState = EShwPlay;
+    ReplaceCommandSetL(R_SHW_SOFTKEYS_END_PAUSE,R_SHW_SOFTKEYS_END_CONTINUE);
+    ShowShwFurnitureL();
+	}
 // ---------------------------------------------------------------------------
 // From MShwEngineObserver
 // Engine LSK Pressed
@@ -1024,13 +1011,17 @@
 	CleanupClosePushL( stream );
 	stream.ReadInt32L();
 
+
 	//Get the play direction.
+	
 	CShwSettingsModel* shwSettingsMdl = CShwSettingsModel::NewL();
-	CleanupStack::PushL(shwSettingsMdl);
-	iPlayDirection
-			= static_cast<NShwSlideshow::TPlayDirection> (shwSettingsMdl->PlayOrderL());
+        CleanupStack::PushL( shwSettingsMdl );
+        iPlayDirection = static_cast< NShwSlideshow::
+	TPlayDirection>(shwSettingsMdl->PlayOrderL());	
         CleanupStack::PopAndDestroy( shwSettingsMdl );   
 
+
+
 	// Retrieve the path
 	iCollectionPath = CMPXCollectionPath::NewL();
 	iCollectionPath->InternalizeL( stream );
@@ -1061,31 +1052,28 @@
 void CShwSlideshowView::SetListFocusL()
     {
     TRACER("CShwSlideshowView::SetListFocusL");
-    GLX_LOG_INFO("CShwSlideshowView::SetListFocusL");
+  	GLX_LOG_INFO( "CShwSlideshowView::SetListFocusL" );
     // Ensure that we start the slideshow from the correct image index:
     // if there are any selected images we always start from the first one,
     // otherwise we try to use the item with focus from the unfiltered list
     // so long as it hasn't been filtered out, in which case we use the first image.
     TInt selectionCount = iCollectionPath->Selection().Count();
     TInt focusIndex = 0;
-    if (selectionCount == 0)
+    if ( selectionCount == 0 )
         {
-
         // nothing selected, so determine which item has focus in the original list
         focusIndex = iMediaList->FocusIndex();
-        GLX_LOG_INFO1("SlideshowView::SetListFocusL focusIndex(%d)", focusIndex);
-
-        const TGlxMedia& mediaItem = iMediaList->Item(focusIndex);
+        const TGlxMedia& mediaItem = iMediaList->Item( focusIndex );
         // Check if this item is in the filtered list
-        TGlxIdSpaceId spaceId = iMediaList->IdSpaceId(focusIndex);
-        focusIndex = iFilteredList->Index(spaceId, mediaItem.Id());
-        if (focusIndex == KErrNotFound)
+        TGlxIdSpaceId spaceId = iMediaList->IdSpaceId( focusIndex );
+        focusIndex = iFilteredList->Index( spaceId, mediaItem.Id() );
+        if ( focusIndex == KErrNotFound )
             {
-            focusIndex = ((iPlayDirection == NShwSlideshow::EPlayBackwards)
-                          ? 0 : iFilteredList->Count() - 1);
+            // it's been filtered out so just use the first item
+            focusIndex = 0;
             }
         }
-    iFilteredList->SetFocusL(NGlxListDefs::EAbsolute, focusIndex);
+    iFilteredList->SetFocusL( NGlxListDefs::EAbsolute, focusIndex );
     }
 
 
@@ -1198,6 +1186,8 @@
         CEikButtonGroupContainer::EVertical,
         this, R_SHW_SOFTKEYS_END_PAUSE );
     iShwCba->MakeVisible(EFalse); 
+    //set the current active command set
+	ReplaceCommandSetL(R_SHW_SOFTKEYS_END_PAUSE,R_SHW_SOFTKEYS_END_PAUSE);
 	}
 	
 // -----------------------------------------------------------------------------
@@ -1217,6 +1207,8 @@
         }
     // set the new command set
     iShwCba->SetCommandSetL( aNewComandId );
+    // keep the current active command set
+    iCurrentActiveCommandSet = aNewComandId;
     }
 
 	
@@ -1237,6 +1229,7 @@
 	    iVolumeControl->Hide();
 	    }	
 	iShwFurniture = EFurnitureHidden;
+	
 	}
 	
 // -----------------------------------------------------------------------------
@@ -1269,19 +1262,13 @@
     {
     TRACER("CShwSlideshowView::ProcessCommandL");
     GLX_LOG_INFO( "CShwSlideshowView::ProcessCommandL" );
-    switch (aCommandId)
+    switch(aCommandId)
         {
         case EShwSlideshowCmdEnd:
-        case EAknSoftkeyBack:
-        case EGlxCmdResetView:
             {
             iShwState = EShwExiting;
-            iDisplay->Roster().Hide(*iGestureControlGroup);
-            HideShwFurniture();
-            if (aCommandId == EShwSlideshowCmdEnd)
-                {
-                aCommandId = EAknSoftkeyBack;
-                }
+            aCommandId = EAknSoftkeyBack;
+            iDisplay->Roster().Hide( *iGestureControlGroup );        
             break;
             }
             //When user presses MSK or LSK this cmd will Generated
@@ -1289,11 +1276,11 @@
         case EShwSlideshowCmdContinue:
             {
             // If MSK preesed to toggle visibility of softekey
-            if (iMSKPressed)
+            if(iMSKPressed)
                 {
                 iMSKPressed = EFalse;
-                }
-            else if (iLSKPressed)
+                }            
+            else if(iLSKPressed)
                 {
                 iLSKPressed = EFalse;// Already Handlled
                 }
@@ -1301,8 +1288,9 @@
                 {
                 iPauseHandler->UserToggledPauseL();
                 }
-            break;
+            break;  
             }
+
         default:
             {
             break;
@@ -1553,50 +1541,3 @@
 	TRACER("CShwSlideshowView::HandleHDMIDecodingEventL()");
 	iEngine->HandleHDMIDecodingEventL(aStatus);
 	}
-// -------------------------------------------------------------------------------------------------
-//   CShwSlideshowView::IsAppInForegroundL()
-// -------------------------------------------------------------------------------------------------
-//
-TBool CShwSlideshowView::IsAppInForegroundL()
-    {
-    TRACER("CShwSlideshowView::IsAppInForegroundL()");
-    TBool ret = EFalse;
-    CArrayFixFlat<TInt>* wgList = new (ELeave) CArrayFixFlat<TInt> (
-            iEikonEnv->WsSession().NumWindowGroups());
-    CleanupStack::PushL(wgList);
-    if (iEikonEnv->WsSession().WindowGroupList(0, wgList) == KErrNone)
-        {
-        //  Check if Photos App window group is in foreground
-        ret = (iCoeEnv->RootWin().Identifier() == wgList->At(0));
-        GLX_LOG_INFO2("SlideshowView::IsAppInForegroundL() ret=%d, wgId=%u",
-                ret, wgList->At(0));
-        }
-
-    CleanupStack::PopAndDestroy(wgList);
-    return ret;
-    }
-
-// -------------------------------------------------------------------------------------------------
-// CShwSlideshowView::HandleWsEventL()
-// WS Events handling function
-// -------------------------------------------------------------------------------------------------
-//
-void CShwSlideshowView::HandleWsEventL(const TWsEvent& aEvent,
-        CCoeControl* /*aDestination*/)
-    {
-	TRACER("CShwSlideshowView::HandleWsEventL()");
-	TInt event = aEvent.Type();
-	GLX_LOG_INFO1("CShwSlideshowView::HandleWsEventL() event=%d", event);
-
-	// If we are sent to full background, shift to cloning mode
-	if ((event == KAknFullOrPartialForegroundLost) && !IsAppInForegroundL())
-		{
-		GLX_LOG_INFO("SlideshowView::HandleWsEventL() App is in background!");
-		if (iHdmiController && iHdmiActive)
-			{
-			iHdmiController->ShiftToCloningMode();
-			}
-		// Something else has gained the foreground
-		iPauseHandler->SwitchToBackgroundL();
-		}
-	}
--- a/photosgallery/slideshow/view/src/shwslideshowvolumecontrol.cpp	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/slideshow/view/src/shwslideshowvolumecontrol.cpp	Wed Oct 13 14:32:09 2010 +0300
@@ -163,6 +163,35 @@
     // BackGround Visual
     iBackgroundImageVisual->EnableBrushesL();
     iBackgroundImageVisual->SetOpacity( KHalfOpacityOpaque );
+
+	// Get the icon file
+	TFileName mifFile( KDC_APP_BITMAP_DIR );
+    mifFile.Append( KIconsFilename );
+    User::LeaveIfError( CompleteWithAppPath( mifFile ) );
+    // Get the texture manager
+   	CGlxTextureManager& textureMgr = iUtility.GlxTextureManager();
+    // Load the background texture
+    
+    // Below given icon ID is to be changed once the Capped_element Icon
+    // is available in the build
+    CAlfTexture& backgroundTexture = textureMgr.CreateIconTextureL
+        ( EMbmGlxiconsQgn_graf_adapt_search_bg, mifFile );
+    
+    // apply an image brush to the visual
+    iBrush = CAlfImageBrush::NewL(iAlfEnv, TAlfImage( backgroundTexture ) );
+    iBackgroundImageVisual->Brushes()->AppendL( iBrush, EAlfHasOwnership );
+	iBackgroundImageVisual->SetScaleMode( CAlfImageVisual::EScaleFitInside );
+	// Muted visual
+	CAlfTexture& textureMuted = iUtility.GlxTextureManager().CreateIconTextureL
+	    ( EMbmGlxiconsQgn_indi_mup_speaker_muted, mifFile );										
+	iMuteImageVisual->SetImage( textureMuted );
+    iMuteImageVisual->SetScaleMode( CAlfImageVisual::EScaleFitInside );
+    
+	// Speaker visual
+	CAlfTexture& textureSpkr = iUtility.GlxTextureManager().CreateIconTextureL
+        ( EMbmGlxiconsQgn_indi_mup_speaker, mifFile );
+    iSpeakerImageVisual->SetImage( textureSpkr );
+    iSpeakerImageVisual->SetScaleMode( CAlfImageVisual::EScaleFitInside );	
 	
 	//hide the volume level visualation by default
 	iMainVisual->SetOpacity(KOpacityTransperent);
@@ -225,43 +254,6 @@
 		roster.Hide( *group );
 		}	
 	}
-
-// ---------------------------------------------------------------------------
-// InitControlTextureL
-// ---------------------------------------------------------------------------
-void CShwSlideshowVolumeControl::InitControlTextureL()
-    {
-    TRACER("CShwSlideshowVolumeControl::InitControlTextureL");
-    // Get the icon file
-    TFileName mifFile( KDC_APP_BITMAP_DIR );
-    mifFile.Append( KIconsFilename );
-    User::LeaveIfError( CompleteWithAppPath( mifFile ) );
-    // Get the texture manager
-    CGlxTextureManager& textureMgr = iUtility.GlxTextureManager();
-    // Load the background texture
-    
-    // Below given icon ID is to be changed once the Capped_element Icon
-    // is available in the build
-    CAlfTexture& backgroundTexture = textureMgr.CreateIconTextureL
-        ( EMbmGlxiconsQgn_graf_adapt_search_bg, mifFile );
-    
-    // apply an image brush to the visual
-    iBrush = CAlfImageBrush::NewL(iAlfEnv, TAlfImage( backgroundTexture ) );
-    iBackgroundImageVisual->Brushes()->AppendL( iBrush, EAlfHasOwnership );
-    iBackgroundImageVisual->SetScaleMode( CAlfImageVisual::EScaleFitInside );
-    // Muted visual
-    CAlfTexture& textureMuted = iUtility.GlxTextureManager().CreateIconTextureL
-        ( EMbmGlxiconsQgn_indi_mup_speaker_muted, mifFile );                                        
-    iMuteImageVisual->SetImage( textureMuted );
-    iMuteImageVisual->SetScaleMode( CAlfImageVisual::EScaleFitInside );
-    
-    // Speaker visual
-    CAlfTexture& textureSpkr = iUtility.GlxTextureManager().CreateIconTextureL
-        ( EMbmGlxiconsQgn_indi_mup_speaker, mifFile );
-    iSpeakerImageVisual->SetImage( textureSpkr );
-    iSpeakerImageVisual->SetScaleMode( CAlfImageVisual::EScaleFitInside );      
-    }
-
 // ---------------------------------------------------------------------------
 // ShowControlL
 // ---------------------------------------------------------------------------
--- a/photosgallery/slideshow/view/src/shwslideshowvolumecontrol.h	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/slideshow/view/src/shwslideshowvolumecontrol.h	Wed Oct 13 14:32:09 2010 +0300
@@ -103,13 +103,6 @@
     void Hide();
     
     /**
-     * Initilize the control textures
-     * e.g. When slideshow engine started or
-     * textures are removed due to foreground lost event
-     */
-    void InitControlTextureL();
-
-    /**
      * Called when the control should be shown.
      * e.g. Key press and tap event
      */
--- a/photosgallery/viewframework/commandhandlers/commandhandlerbase/group/glxcommandhandlerbase.mmp	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/viewframework/commandhandlers/commandhandlerbase/group/glxcommandhandlerbase.mmp	Wed Oct 13 14:32:09 2010 +0300
@@ -47,7 +47,7 @@
 SYSTEMINCLUDE   ../../../medialists/inc
 SYSTEMINCLUDE   ../../../uiutilities/inc
 SYSTEMINCLUDE	../../../../common/inc            // for CGlxResourceUtilities
-SYSTEMINCLUDE   ../../../../commonui/inc
+
 
 LIBRARY         aknicon.lib
 LIBRARY         aknlayout2.lib
@@ -73,8 +73,7 @@
 LIBRARY         glxuiutilities.lib
 LIBRARY         glxvisuallistmanager.lib
 LIBRARY         glxcommon.lib                   // for CResourceUtilities
-LIBRARY         glxcommonui.lib
-LIBRARY         glximageviewermanager.lib
+
 LIBRARY         hlplch.lib
 
 LIBRARY         hitchcock.lib // HUI framework
@@ -84,8 +83,7 @@
 LIBRARY         mpxviewutility.lib
 LIBRARY         ws32.lib 
 LIBRARY         commonengine.lib
-LIBRARY         caf.lib
-LIBRARY         libpthread.lib
-LIBRARY			eikdlg.lib
+
+LIBRARY					libpthread.lib
 // End of File
 
--- a/photosgallery/viewframework/commandhandlers/commandhandlerbase/inc/glxmpxcommandcommandhandler.h	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/viewframework/commandhandlers/commandhandlerbase/inc/glxmpxcommandcommandhandler.h	Wed Oct 13 14:32:09 2010 +0300
@@ -30,8 +30,7 @@
 class MGlxMediaList;
 class MGlxMediaListProvider;
 class CAknAppUi;
-class CGlxImageViewerManager;
-
+	
 /**
  * @class CGlxMpxCommandCommandHandler
  *  
@@ -231,16 +230,6 @@
      * Remove medialist observer
      */
     void RemoveMediaListObserver();
-	
-    /**
-     * Creates the image viewer instance, if not created already.
-     */    
-    void CreateImageViewerInstanceL();
-    
-    /**
-     * Deletes the image viewer instance, if created already.
-     */    
-    void DeleteImageViewerInstance();
 
 protected: // From MGlxMediaListObserver    
     /// See @ref MGlxMediaListObserver::HandleItemAddedL
@@ -292,9 +281,6 @@
 	
     /// The AppUI. Not owned
     CAknAppUi* iAppUi;
-    
-    // For image viewer, not own
-    CGlxImageViewerManager* iImageViewerInstance;
 	};
 
 #endif // __C_GLXMPXCOMMANDCOMMANDHANDLER_H__
--- a/photosgallery/viewframework/commandhandlers/commandhandlerbase/src/glxmpxcommandcommandhandler.cpp	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/viewframework/commandhandlers/commandhandlerbase/src/glxmpxcommandcommandhandler.cpp	Wed Oct 13 14:32:09 2010 +0300
@@ -43,12 +43,9 @@
 #include <glxcommandhandlers.hrh>
 #include <glxtracer.h>
 #include <glxresourceutilities.h>                // for CGlxResourceUtilities
-#include <glxnavigationalstate.h>
-#include <mpxcollectionpath.h>
-#include <glxcollectionpluginimageviewer.hrh>
-#include <glximageviewermanager.h>
-#include <caf/manager.h>
 
+/// @todo Move elsewhere
+const TInt KGlxMaxNoteLength = 256;
 
 // -----------------------------------------------------------------------------
 // ConstructL
@@ -123,85 +120,40 @@
 
     if ( consume )
         {
-        CGlxNavigationalState* navState = CGlxNavigationalState::InstanceL();
-		CleanupClosePushL(*navState);
-        CMPXCollectionPath* path = navState->StateLC();
-        CreateImageViewerInstanceL();
-        TBool privatePath = iImageViewerInstance->IsPrivate();
-        TBool viewerPathId = (path->Id() == TMPXItemId(KGlxCollectionPluginImageViewerImplementationUid)) ? ETrue : EFalse;
-        iImageViewerInstance->CloseImageDecoder();
-        DeleteImageViewerInstance();
-        CleanupStack::PopAndDestroy(path);
-        CleanupStack::PopAndDestroy(navState);
-	 		
-        if (viewerPathId && !privatePath)
+        // get a command object from the deriving class.
+        // Allow deriving class modify the consume value, even without 
+        // creating a commmand (in case it wants to filter out a command)
+        CMPXCommand* command = CreateCommandL(aCommandId, aList, consume);
+        
+        if (command)
             {
-            RFs fs;
-			CleanupClosePushL(fs);
-            User::LeaveIfError(fs.Connect());
-			ContentAccess::CManager *manager = ContentAccess::CManager::NewL();
-			CleanupStack::PushL(manager);
-			fs.SetAtt(focusedMedia.Uri(), 0, KEntryAttReadOnly);		
-            TInt ret = manager->DeleteFile(focusedMedia.Uri());
-            if(ret != KErrNone)
+            CleanupStack::PushL(command);
+            
+            if ( CommandInfo(aCommandId).iStopAnimationForExecution )
                 {
-				CreateImageViewerInstanceL();
-				iImageViewerInstance->CreateImageDecoderL();
-				DeleteImageViewerInstance();
-                HBufC* noteText = StringLoader::LoadL(R_GLX_DELETION_FAILURE_NOTE);
-                CleanupStack::PushL(noteText);
-                const TDesC& itemName = focusedMedia.Uri();
-                TParsePtrC parse(focusedMedia.Uri());
-                TBuf<KMaxFileName> text;
-                StringLoader::Format(text, *noteText, -1, parse.Name());
-                GlxGeneralUiUtilities::ShowErrorNoteL(text, ETrue);
-                CleanupStack::PopAndDestroy(noteText);
-                }
-            CleanupStack::PopAndDestroy(manager);
-            CleanupStack::PopAndDestroy(&fs);
-            if(ret == KErrNone)
-                {
-                iAppUi->ProcessCommandL(EAknSoftkeyExit);
+                // Stop GIF animation
+                iAppUi->ProcessCommandL(EGlxCmdDisableAnimations);
+                iAnimationStopped = ETrue;
                 }
-            }
-        else
-            {
-            // get a command object from the deriving class.
-            // Allow deriving class modify the consume value, even without 
-            // creating a commmand (in case it wants to filter out a command)
-            CMPXCommand* command = CreateCommandL(aCommandId, aList, consume);
-
-            if (command)
-                {
-                CleanupStack::PushL(command);
-
-                if (CommandInfo(aCommandId).iStopAnimationForExecution)
-                    {
-                    // Stop GIF animation
-                    iAppUi->ProcessCommandL(EGlxCmdDisableAnimations);
-                    iAnimationStopped = ETrue;
-                    }
+            
+            // Add the pointer of this command handler as session id into the message
+            // This can be used to ensure that this object is the intended recipient
+            // of a message
+            command->SetTObjectValueL<TAny*>(KMPXCommandGeneralSessionId,
+            		static_cast<TAny*>(this));
 
-                // Add the pointer of this command handler as session id into the message
-                // This can be used to ensure that this object is the intended recipient
-                // of a message
-                command->SetTObjectValueL<TAny*> (
-                        KMPXCommandGeneralSessionId,
-                        static_cast<TAny*> (this));
-
-                aList.AddMediaListObserverL(this);
-
-                aList.CommandL(*command);
-
-                // raise progress note. Note will be closed when complete message received
-                // For EGlxCmdAddMedia we dont need to show dialog as EGlxCmdAddToAlbum or
-                // EGlxCmdAddTag will show processing dialog.
-                if (aCommandId != EGlxCmdAddMedia)
-                    {
-                    ProgressNoteL(aCommandId);
-                    }
-                CleanupStack::PopAndDestroy(command);
+       		aList.AddMediaListObserverL(this);
+			
+            aList.CommandL(*command);
+            
+            // raise progress note. Note will be closed when complete message received
+			// For EGlxCmdAddMedia we dont need to show dialog as EGlxCmdAddToAlbum or
+			// EGlxCmdAddTag will show processing dialog.
+            if (aCommandId != EGlxCmdAddMedia)
+                {
+                ProgressNoteL(aCommandId);
                 }
+            CleanupStack::PopAndDestroy(command);
             }
         }
     
@@ -429,7 +381,7 @@
             // noteText has a place for a title string in it
             const TDesC& itemName = media->ValueText(KMPXMediaGeneralTitle);
     
-            TBuf<KMaxFileName> text;
+            TBuf<KGlxMaxNoteLength> text;
             StringLoader::Format(text, *noteText, -1, itemName);
     
             // show popup
@@ -464,7 +416,7 @@
         // item count
 		TInt count = aMediaList.SelectionCount();
 
-        TBuf<KMaxFileName> text;
+        TBuf<KGlxMaxNoteLength> text;
 		GlxGeneralUiUtilities::FormatString(text, *noteText, -1, count, ETrue);
 		
         // show popup
@@ -531,26 +483,21 @@
     // get progress note 
     HBufC* progressText = ProgressTextL(aCommandId);
     __ASSERT_DEBUG(progressText, Panic(EGlxPanicNullDescriptor));
-    CleanupStack::PushL(progressText);
+	CleanupStack::PushL(progressText);
     // construct progress dialog
-    iProgressDialog = new (ELeave) CAknProgressDialog(
-            (REINTERPRET_CAST(CEikDialog**,&iProgressDialog)));
-    iProgressDialog->PrepareLC(R_GLX_PROGRESS_NOTE);
-    if (aCommandId == EGlxCmdRename)
-        {
-        iProgressDialog->ButtonGroupContainer().SetCommandSetL(
-                R_AVKON_SOFTKEYS_EMPTY);
-        }
-    iProgressDialog->SetTextL(*progressText);
-    iProgressDialog->SetCallback(this);
-
+	iProgressDialog = new(ELeave)CAknProgressDialog(
+			(REINTERPRET_CAST(CEikDialog**,&iProgressDialog)));
+	iProgressDialog->PrepareLC(R_GLX_PROGRESS_NOTE); 
+	iProgressDialog->SetTextL(*progressText);
+	iProgressDialog->SetCallback(this);
+	
     // pick up progress info so that progress notification can be later updated
-    iProgressInfo = iProgressDialog->GetProgressInfoL();
-
+	iProgressInfo = iProgressDialog->GetProgressInfoL();
+	
     // launch the note
-    iProgressDialog->RunLD();
-    CleanupStack::PopAndDestroy(progressText);
-    }
+	iProgressDialog->RunLD();
+	CleanupStack::PopAndDestroy(progressText); 
+	}
 
 // -----------------------------------------------------------------------------
 // DismissProgressNoteL
@@ -752,27 +699,3 @@
         TRAP_IGNORE(DismissProgressNoteL());
         }
     }
-
-// -----------------------------------------------------------------------------
-// CreateImageViewerInstanceL
-// -----------------------------------------------------------------------------
-//
-void CGlxMpxCommandCommandHandler::CreateImageViewerInstanceL()
-    {
-    TRACER("CGlxMpxCommandCommandHandler::CreateImageViewerInstanceL");
-    iImageViewerInstance = CGlxImageViewerManager::InstanceL();    
-    __ASSERT_ALWAYS(iImageViewerInstance, Panic(EGlxPanicNullPointer));
-    }
-
-// -----------------------------------------------------------------------------
-// DeleteImageViewerInstance
-// -----------------------------------------------------------------------------
-//
-void CGlxMpxCommandCommandHandler::DeleteImageViewerInstance()
-    {
-    TRACER("CGlxMpxCommandCommandHandler::DeleteImageViewerInstance");
-    if ( iImageViewerInstance )
-        {
-        iImageViewerInstance->DeleteInstance();
-        }
-    }
--- a/photosgallery/viewframework/commandhandlers/commoncommandhandlers/inc/glxcommandhandlerslideshow.h	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/viewframework/commandhandlers/commoncommandhandlers/inc/glxcommandhandlerslideshow.h	Wed Oct 13 14:32:09 2010 +0300
@@ -70,9 +70,6 @@
     TBool DoIsDisabled(TInt aCommandId, MGlxMediaList& aList) const;
     /// @ref CGlxMediaListCommandHandler::BypassFiltersForExecute
     TBool BypassFiltersForExecute() const;
-    /// @ref CGlxMediaListCommandHandler::DynInitMenuPaneL
-    void DynInitMenuPaneL(TInt aResourceId, CEikMenuPane* aMenuPane, 
-                            TBool aIsBrowseMode);
     /// @ref CGlxCommandHandler::PopulateToolbar
     void PopulateToolbarL();
 private:    // From MGlxMediaListObserver
--- a/photosgallery/viewframework/commandhandlers/commoncommandhandlers/src/glxcommandhandlerdelete.cpp	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/viewframework/commandhandlers/commoncommandhandlers/src/glxcommandhandlerdelete.cpp	Wed Oct 13 14:32:09 2010 +0300
@@ -39,8 +39,6 @@
 #include <mpxcollectionpath.h>
 #include <glxcollectionpluginimageviewer.hrh>
 #include "glxcommandfactory.h"
-#include <glximageviewermanager.h>
-
 
 // ---------------------------------------------------------------------------
 // Two-phased constructor.
@@ -216,31 +214,35 @@
         MGlxMediaList& aList) const 
         {
         TRACER( "CGlxCommandHandlerDelete::DoIsDisabled" );
-        TBool disable = EFalse;
-
-        CGlxNavigationalState* navState = CGlxNavigationalState::InstanceL();
-		CleanupClosePushL(*navState);
-        CMPXCollectionPath* path = navState->StateLC();
+        TBool fullscreenViewingMode = EFalse;
+        CGlxNavigationalState* aNavigationalState = CGlxNavigationalState::InstanceL();
+        CMPXCollectionPath* naviState = aNavigationalState->StateLC();
         
-        if ( path->Levels() >= 1)
+        if ( naviState->Levels() >= 1)
             {
-			CGlxImageViewerManager* viewerInstance = CGlxImageViewerManager::InstanceL();
-            if (path->Id() == TMPXItemId(KGlxCollectionPluginImageViewerImplementationUid)
-                        && viewerInstance->IsPrivate())
+            if (aNavigationalState->ViewingMode() == NGlxNavigationalState::EBrowse) 
                 {
-                //it means we are in image viewer private path.
-                disable = ETrue;
-                }
-			viewerInstance->DeleteInstance();
+                // For image viewer collection, goto view mode
+                if (naviState->Id() == TMPXItemId(KGlxCollectionPluginImageViewerImplementationUid))
+                    {
+                    //it means we are in img viewer.
+                    fullscreenViewingMode = ETrue;
+                    }
+                } 
+            else 
+                {
+                //it means we are in Fullscreen.
+                fullscreenViewingMode = ETrue;
+                }                
             }
-        CleanupStack::PopAndDestroy(path);
-        CleanupStack::PopAndDestroy(navState);
-
-        if (EGlxCmdDelete==aCommandId && 0 == aList.Count())
+        CleanupStack::PopAndDestroy( naviState );
+        aNavigationalState->Close();
+        if (EGlxCmdDelete==aCommandId && 0 == aList.Count() &&
+		                                 !fullscreenViewingMode)
             {   
-            disable = ETrue;
+            return ETrue;
             }     
-        return disable;
+        return EFalse;
         }
 //end of file
 		
--- a/photosgallery/viewframework/commandhandlers/commoncommandhandlers/src/glxcommandhandlernewmedia.cpp	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/viewframework/commandhandlers/commoncommandhandlers/src/glxcommandhandlernewmedia.cpp	Wed Oct 13 14:32:09 2010 +0300
@@ -11,13 +11,17 @@
 *
 * Contributors:
 *
-* Description:    New media command handler
+* Description:    Delete command handler
 *
 */
 
 
 
 
+/**
+ * @internal reviewed 06/06/2007 by Dave Schofield
+ */
+
 #include "glxcommandhandlernewmedia.h"
 
 #include <AknUtils.h>
@@ -41,11 +45,12 @@
 #include <mpxcollectionpath.h>
 #include <mpxcommonframeworkdefs.h>
 #include <StringLoader.h>
-#include <glxmediageneraldefs.h>    // for KMaxMediaPopupTextLength
+
 #include <data_caging_path_literals.hrh>
 #include <glxuiutilities.rsg>
-#include <e32const.h> //For TDigitType
 
+const TInt KMaxMediaPopupTitleLength = 0x28;    // Accepts only 40 characters
+const TInt KMaxNewMediaItemTitleLength = 0x28;  // Accepts only 40 characters
 const TInt KMaxNumberLength = 10;
 
 _LIT(KOpenBracket, "(");
@@ -187,7 +192,7 @@
     CMPXCollectionPath* path = aMediaList.PathLC( NGlxListDefs::EPathParent );
     CMPXCommand* command = NULL;
 
-    TBuf <KMaxMediaPopupTextLength> defaultNewMediaItemTitle;
+    TBuf <KMaxNewMediaItemTitleLength> defaultNewMediaItemTitle;
     
     TRAPD(error, TitlesL(TGlxMediaId(path->Id(0)), defaultNewMediaItemTitle));
     if(error != KErrNone)
@@ -211,6 +216,8 @@
     TPtr newMediaItemTitleDes = iNewMediaItemTitle->Des();
     
     CGlxTextEntryPopup* dialog = CGlxTextEntryPopup::NewL(*mediaPopupTitle, newMediaItemTitleDes);
+    
+    
     if(dialog->ExecuteLD() == EEikBidOk)
     	{
         command = TGlxCommandFactory::AddContainerCommandLC(*iNewMediaItemTitle, path->Id(0));
@@ -293,18 +300,14 @@
             KGlxMediaCollectionPluginSpecificDefaultMediaTitle);
     rootList->AddContextL(attributeContext, KGlxFetchContextPriorityBlocking);
 
-    // Media list must not have been deleted when the destructor of 
-    // TGlxContextRemover is called while going out-of-scope.
-        {
-        TGlxFetchContextRemover contextRemover(attributeContext, *rootList);
-        // put to cleanupstack as cleanupstack is emptied before stack objects
-        // are deleted
-        CleanupClosePushL(contextRemover);
-        User::LeaveIfError(GlxAttributeRetriever::RetrieveL(
-                *attributeContext, *rootList, ETrue));
-        // context off the list
-        CleanupStack::PopAndDestroy(&contextRemover);
-        } // Limiting scope of contextRemover
+    TGlxFetchContextRemover contextRemover(attributeContext, *rootList);
+    // put to cleanupstack as cleanupstack is emptied before stack objects
+    // are deleted
+    CleanupClosePushL(contextRemover);
+    User::LeaveIfError(GlxAttributeRetriever::RetrieveL(*attributeContext,
+            *rootList, ETrue));
+    // context off the list
+    CleanupStack::PopAndDestroy(&contextRemover);
 
     TInt index = rootList->Index(KGlxIdSpaceIdRoot, aCollectionId);
 
@@ -317,7 +320,7 @@
         {
         aDefaultNewMediaItemTitle.Copy(media->ValueText(
                 KGlxMediaCollectionPluginSpecificDefaultMediaTitle).Left(
-                        KMaxMediaPopupTextLength));
+                KMaxMediaPopupTitleLength));
         }
 
     CleanupStack::PopAndDestroy(attributeContext);
@@ -384,17 +387,12 @@
                                 - KCloseBracket().Length();
                         if (length > 0)
                             {
-							HBufC* num = title.Mid(pos, length).AllocLC();
-							TPtr numPtr = num->Des();
-							//Change to Western numeric for determining next numeral
-							AknTextUtils::ConvertDigitsTo(numPtr,EDigitTypeWestern);
-                            TLex lex(numPtr);
+                            TLex lex = title.Mid(pos, length);
                             TInt val = 0;
                             if (lex.Val(val) == KErrNone)
                                 {
                                 numbers.InsertInOrderL(val);
                                 }
-                            CleanupStack::PopAndDestroy(num);
                             }
                         }
                     }
@@ -422,21 +420,18 @@
     TInt defaultTitleLength = aDefaultNewMediaItemTitle.Length()
             + KFileNameFormatString().Length() + KCloseBracket().Length()
             + KMaxNumberLength;
-    // If the default title length is bigger than KMaxMediaPopupTextLength, 
+    // If the default title length is bigger than KMaxMediaPopupTitleLength, 
     // make sure we allocate enough space for it.
-    TInt titleLength = defaultTitleLength > KMaxMediaPopupTextLength ? 
+    TInt titleLength = defaultTitleLength > KMaxMediaPopupTitleLength ? 
                                             defaultTitleLength
-                                            : KMaxMediaPopupTextLength;
+                                            : KMaxMediaPopupTitleLength;
     HBufC* newMediaItemTitle = HBufC::NewL(titleLength);
     TPtr newMediaItemTitleDes = newMediaItemTitle->Des();
     newMediaItemTitleDes.Append(aDefaultNewMediaItemTitle);
 
     if (nextNumber > 0)
         {
-		newMediaItemTitleDes.AppendFormat(KFileNameFormatString, nextNumber);
-		//Change numeric according to current input language here
-		AknTextUtils::ConvertDigitsTo(newMediaItemTitleDes,
-				AknTextUtils::TextEditorDigitType());
+        newMediaItemTitleDes.AppendFormat(KFileNameFormatString, nextNumber);
         }
     else
         {
--- a/photosgallery/viewframework/commandhandlers/commoncommandhandlers/src/glxcommandhandlerrename.cpp	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/viewframework/commandhandlers/commoncommandhandlers/src/glxcommandhandlerrename.cpp	Wed Oct 13 14:32:09 2010 +0300
@@ -38,10 +38,13 @@
 #include <glxicons.mbg>
 #include <glxtracer.h>
 #include <glxlog.h>
-#include <glxmediageneraldefs.h>    // for KMaxMediaPopupTextLength
 
 #include "glxcommandfactory.h"
 
+namespace
+	{
+	const TInt KNameMaxLength = 128;
+	}
 
 // ---------------------------------------------------------------------------
 // Two-phased constructor.
@@ -78,7 +81,7 @@
 //
 void CGlxCommandHandlerRename::ConstructL(const TDesC& aFileName)
 	{
-	iRenameText = HBufC::NewL(KMaxMediaPopupTextLength);
+	iRenameText = HBufC::NewL(KNameMaxLength);
 
 	iResourceOffset = CCoeEnv::Static()->AddResourceFileL(aFileName);
 
@@ -134,13 +137,16 @@
     TPtr textPtr = iRenameText->Des();
     GetTitleL( textPtr, aMediaList );
     // store the current name.
-    TBuf<KMaxMediaPopupTextLength> currentName; 
+    TBuf<KNameMaxLength> currentName; 
     currentName.Copy(textPtr);  
 
  	// Load the title for the popup 
     HBufC* title = StringLoader::LoadLC( R_GLX_POPUP_RENAME_TITLE );
     CGlxTextEntryPopup* popup = CGlxTextEntryPopup::NewL( *title,
     	textPtr );
+
+
+    	
 	if ( popup->ExecuteLD() == EEikBidOk && currentName != *iRenameText)
 		{
 		// Text entry was successful
--- a/photosgallery/viewframework/commandhandlers/commoncommandhandlers/src/glxcommandhandlersend.cpp	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/viewframework/commandhandlers/commoncommandhandlers/src/glxcommandhandlersend.cpp	Wed Oct 13 14:32:09 2010 +0300
@@ -138,7 +138,6 @@
 	
     if (aCommandId == EGlxCmdSend)
         {
-        iAvkonAppUi->ProcessCommandL(EGlxCmdDialogLaunched);
         SendSelectedItemsL();
         return ETrue;
         }
@@ -365,7 +364,6 @@
 	CleanupStack::PopAndDestroy(filterOutPlugins);
 	CleanupStack::PopAndDestroy(title);
 	CleanupStack::PopAndDestroy(msgData);
-	iAvkonAppUi->ProcessCommandL(EGlxCmdDialogDismissed);
 	}
 	
 
--- a/photosgallery/viewframework/commandhandlers/commoncommandhandlers/src/glxcommandhandlerslideshow.cpp	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/viewframework/commandhandlers/commoncommandhandlers/src/glxcommandhandlerslideshow.cpp	Wed Oct 13 14:32:09 2010 +0300
@@ -46,8 +46,6 @@
 #include <glxsettingsmodel.h>
 #include <glxupnprenderer.h> // get UPnP state
 #include <glxgeneraluiutilities.h>
-#include <glxthumbnailattributeinfo.h>
-
 namespace
 	{
 	const TInt KShwDefaultBufferSize = 128;
@@ -555,95 +553,4 @@
             CAknButton::EPositionLeft);
 	}
 
-// -----------------------------------------------------------------------------
-// DynInitMenuPaneL
-// -----------------------------------------------------------------------------
-//
-void CGlxCommandHandlerSlideshow::DynInitMenuPaneL(TInt /*aResourceId*/,
-        CEikMenuPane* aMenuPane, TBool aIsBrowseMode)
-    {
-    TRACER("CGlxCommandHandlerSlideshow::DynInitMenuPaneL");
-    MGlxMediaList& mediaList = MediaList();
-    if (aMenuPane)
-        {
-        TInt pos = 0;
-        if (mediaList.Count())
-            {
-            TInt focusIndex = mediaList.FocusIndex();
-            if (!aIsBrowseMode && focusIndex > KErrNotFound && focusIndex
-                    < mediaList.Count())
-                {
-                if (aMenuPane->MenuItemExists(EGlxCmdSlideshowPlay, pos))
-                    {
-                    const TGlxMedia& media = mediaList.Item(focusIndex);
-                    if (EMPXVideo == media.Category())
-                        {
-                        aMenuPane->SetItemDimmed(EGlxCmdSlideshowPlay, ETrue);
-                        }
-                    else
-                        {
-                        CEikMenuPaneItem::SData& item =
-                                aMenuPane->ItemDataByIndexL(pos);
-                        if (item.iFlags & EEikMenuItemSpecific)
-                            {
-                            TSize tnSize = iUiUtility->GetGridIconSize();
-                            TMPXAttribute thumbnailAttribute(
-                                    KGlxMediaIdThumbnail,
-                                    GlxFullThumbnailAttributeId(ETrue,
-                                            tnSize.iWidth, tnSize.iHeight));
-
-                            const CGlxThumbnailAttribute* value =
-                                    media.ThumbnailAttribute(
-                                            thumbnailAttribute);
-
-                            // No thumbnail available, hence there might be
-                            // no vaild items to play slideshow
-                            if (!value)
-                                {
-                                aMenuPane->SetItemDimmed(
-                                        EGlxCmdSlideshowPlay, ETrue);
-                                }
-                            }
-                        }
-                    }
-                }
-
-            if (aIsBrowseMode)
-                {
-                if (aMenuPane->MenuItemExists(EGlxCmdSlideshow, pos)
-                        && mediaList.SelectionCount())
-                    {
-                    aMenuPane->SetItemDimmed(EGlxCmdSlideshow, ETrue);
-                    }
-
-                if (aMenuPane->MenuItemExists(EGlxCmdSlideshowPlay, pos)
-                        && mediaList.SelectionCount() == 0)
-                    {
-                    CEikMenuPaneItem::SData& item =
-                            aMenuPane->ItemDataByIndexL(pos);
-                    if (item.iFlags & EEikMenuItemSpecific
-                            && EMPXVideo == mediaList.Item(
-                                    mediaList.FocusIndex()).Category())
-                        {
-                        aMenuPane->SetItemDimmed(EGlxCmdSlideshowPlay, ETrue);
-                        }
-                    }
-                }
-            }
-        else
-            {
-            if (aMenuPane->MenuItemExists(EGlxCmdSlideshowPlay, pos))
-                {
-                aMenuPane->SetItemDimmed(EGlxCmdSlideshowPlay, ETrue);
-                }
-
-            if (aMenuPane->MenuItemExists(EGlxCmdSlideshow, pos))
-                {
-                aMenuPane->SetItemDimmed(EGlxCmdSlideshow, ETrue);
-                }
-            }
-        }
-    }
-
-
 // End of File
--- a/photosgallery/viewframework/commandhandlers/commoncommandhandlers/src/glxmediaselectionpopup.cpp	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/viewframework/commandhandlers/commoncommandhandlers/src/glxmediaselectionpopup.cpp	Wed Oct 13 14:32:09 2010 +0300
@@ -15,6 +15,11 @@
 *
 */
 
+
+/**
+ * @internal reviewed 06/06/2007 by Dave Schofield
+ * @internal reviewed 13/07/2007 by Aki Vanhatalo
+ */
 // INCLUDE FILES
 
 #include "glxmediaselectionpopup.h"
@@ -243,14 +248,8 @@
 					{
 					cbaContainer->SetCommandSetL(R_AVKON_SOFTKEYS_CANCEL);
 					}
-                //LSK / SK1’s visibility is determined by the screen context, if single click support enabled.
-                //As suggested by Avkon, disable the CEikCba’s item specific softkey default behavior.
-				CEikCba* eikCba = static_cast<CEikCba*>( cbaContainer->ButtonGroup() );
-				if( eikCba )
-					{
-					eikCba->EnableItemSpecificSoftkey( EFalse );
-					}
 				cbaContainer->DrawDeferred();
+
                 }
             listBox->DrawDeferred();
 
@@ -335,9 +334,7 @@
 		const TKeyEvent& aKeyEvent, TEventCode aType)
 	{
     TRACER("CGlxSingleGraphicPopupMenuStyleListBox::OfferKeyEventL");
-    //Note: To add custom implementation to OfferKeyEventL(), change 
-    //CAknSingleGraphicPopupMenuStyleListBox to CGlxSingleGraphicPopupMenuStyleListBox.
-    
+
     //Based on the selected item index, disable the MultipleSelection flag
     //to stop the flickering of 'marked box', when Highlighted 'New Tag' is selected.
     CGlxMediaListAdaptor* mediaListAdaptor =
@@ -488,9 +485,11 @@
 
     iMediaList->RemoveMediaListObserver(this); // We no longer require any callbacks from the media list
 
+
     CMPXCollectionPath* path = NULL;
     if (aAccepted)
         {
+
 		//Check if a static item is selected
 		if (iMediaListAdaptor->IsStaticItemSelected())
             {
@@ -520,6 +519,7 @@
                 // The error is neither KErrNone or KErrCancel, leave.
                 User::Leave(error);
                 }
+
             }
         else
             {
@@ -885,18 +885,14 @@
             KGlxMediaCollectionPluginSpecificSelectMediaPopupTitle);
     rootList->AddContextL(attributeContext, KGlxFetchContextPriorityBlocking);
 
-    // Media list must not have been deleted when the destructor of 
-    // TGlxContextRemover is called while going out-of-scope.
-        {
-        // TGlxContextRemover will remove the context when it goes out of scope
-        // Used here to avoid a trap and still have safe cleanup   
-        TGlxFetchContextRemover contextRemover(attributeContext, *rootList);
-        CleanupClosePushL(contextRemover);
-        User::LeaveIfError(GlxAttributeRetriever::RetrieveL(
-                *attributeContext, *rootList, EFalse));
-        // context off the list
-        CleanupStack::PopAndDestroy(&contextRemover);
-        } // Limiting scope of contextRemover
+    // TGlxContextRemover will remove the context when it goes out of scope
+    // Used here to avoid a trap and still have safe cleanup   
+    TGlxFetchContextRemover contextRemover(attributeContext, *rootList);
+    CleanupClosePushL(contextRemover);
+    User::LeaveIfError(GlxAttributeRetriever::RetrieveL(*attributeContext,
+            *rootList, EFalse));
+    // context off the list
+    CleanupStack::PopAndDestroy(&contextRemover);
 
     TInt index = rootList->Index(KGlxIdSpaceIdRoot, iCollectionId);
 
--- a/photosgallery/viewframework/commandhandlers/inc/glxcommandhandlers.hrh	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/viewframework/commandhandlers/inc/glxcommandhandlers.hrh	Wed Oct 13 14:32:09 2010 +0300
@@ -93,7 +93,6 @@
     EGlxCmdSave,
     EGlxCmdRenameCompleted, 
     EGlxCmdDialogLaunched,
-    EGlxCmdDialogDismissed, //For sendui dialog dismiss.Handled in FS and Grid
     EGlxCmdAiwBase = 0x6000
     };
     
--- a/photosgallery/viewframework/dataprovider/inc/glxdetailsboundcommand.hrh	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/viewframework/dataprovider/inc/glxdetailsboundcommand.hrh	Wed Oct 13 14:32:09 2010 +0300
@@ -52,7 +52,7 @@
 enum TImageVwrDetailsFields
 	{
 	EImgVwrNameItem,
-	EImgVwrMimeTypeItem,
+	EImgVwrDescriptionItem,
 	EImgVwrDateAndTimeItem,
 	EImgVwrSizeItem,
 	EImgVwrResolutionItem,
--- a/photosgallery/viewframework/dataprovider/inc/glxdrmgiftexturecreator.h	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/viewframework/dataprovider/inc/glxdrmgiftexturecreator.h	Wed Oct 13 14:32:09 2010 +0300
@@ -28,6 +28,8 @@
 class CGlxBinding;
 class TGlxMedia;                            // Reference to a media item in the item pool
 class CAlfEnv;
+class CGlxDRMUtility;
+class CGlxImageViewerManager;
 
 namespace Alf
     {
@@ -113,6 +115,19 @@
 	void ProcessImageL();
 	
 	void SetTexture(TInt aTextureId=KErrNotFound);
+	
+	/*
+     * Check whether the drm rights are expired or not
+     * for animated gifs.
+     */
+    TBool IsDRMRightsExpiredL();
+    
+    /**
+     * Sets the default or FS texture as initial texture.
+     * Then creates Image decoder & starts image decoding 
+     * if DRM Rights are not expired.
+     */
+    void SetInitialTextureAndStartDecodingL();
 
 private:
 
@@ -146,5 +161,10 @@
     TFrameInfo iFrameInfo;
     TBool iFrameShift;
     MGlxMediaList& iMediaList;
+	
+	/** Poniter to instance of DRM utility (owned) */
+    CGlxDRMUtility* iDrmUtility; 
+    /** For image viewer, not own */
+    CGlxImageViewerManager* iImageViewerInstance;
     };
 #endif /* GLXDRMGIFTEXTURECREATOR_H_ */
--- a/photosgallery/viewframework/dataprovider/src/glxdetailsboundcommand.cpp	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/viewframework/dataprovider/src/glxdetailsboundcommand.cpp	Wed Oct 13 14:32:09 2010 +0300
@@ -17,14 +17,11 @@
 
 
 
-#include    "glxdetailsboundcommand.hrh"
-#include    "glxdetailsboundcommand.h"                  // Handles user commands
-#include    "glxuiutility.h"
-/** Error Id EMPY-7MKDHP **/ 
-#include    "mglxmetadatadialogobserver.h"              //for call back to dailog
 
 #include    <e32base.h>                                 // Base class for all classes to be instantiated on the heap
 #include    <ExifModify.h>                              //For CExifModify
+#include    "glxdetailsboundcommand.hrh"
+#include    "glxdetailsboundcommand.h"                  // Handles user commands
 #include    <glxmetadatadialog.rsg>
 #include    <glxuiutilities.rsg>
 #include    <glxuiutilities.rsg>
@@ -40,11 +37,16 @@
 #include    <glxlog.h>                                  // Logging
 #include    <glxtracer.h>
 #include    <glxviewbase.rsg>
-#include    <glxscreenfurniture.h>
-#include    <glxresourceutilities.h>                    // for CGlxResourceUtilities
-#include    <glxmediageneraldefs.h>                     // for KMaxMediaPopupTextLength
+#include    "glxuiutility.h"
+#include <glxscreenfurniture.h>
+#include <glxresourceutilities.h>                // for CGlxResourceUtilities
+/** Error Id EMPY-7MKDHP **/ 
+#include 	"mglxmetadatadialogobserver.h" 				//for call back to dailog
 
 
+//CONSTANTS
+const TInt KMaxMediaPopupTitleLength = 0x100;
+
 // ----------------------------------------------------------------------------
 // CGlxTitleBoundCommand::NewL
 // ----------------------------------------------------------------------------
@@ -89,11 +91,11 @@
 	        {
 	        ///@todo - remove popup when editable template is avaliable
 	        //Popup for testing
-	        HBufC* textBuf = HBufC::NewLC( KMaxMediaPopupTextLength );
+	        HBufC* textBuf = HBufC::NewLC( KMaxMediaPopupTitleLength );
 	        (textBuf->Des()).Copy((media->ValueText(KMPXMediaGeneralTitle)));
 	        TPtr textPtr = textBuf->Des();
 	        /// bug fix - EMPY-7MCKD6 
-	        TBuf<KMaxMediaPopupTextLength> titleText(*textBuf);
+	        TBuf<KMaxMediaPopupTitleLength> titleText(*textBuf);
 	        /// bug fix - EMPY-7MCKD6
 	        ///@todo - remove literal for popup title when resource string is avaliable
 			HBufC *buf = StringLoader::LoadLC(R_GLX_METADATA_VIEW_TITLE_NSERIES);
@@ -384,11 +386,11 @@
 		{
 		///@todo - remove popup when editable template is avaliable
 		//Popup for testing
-		HBufC* textBuf = HBufC::NewLC( KMaxMediaPopupTextLength );
+		HBufC* textBuf = HBufC::NewLC( KMaxMediaPopupTitleLength );
 		(textBuf->Des()).Copy((media->ValueText(KMPXMediaGeneralComment)));
 		TPtr textPtr = textBuf->Des();
 		/// bug fix - EMPY-7MCKD6
-		TBuf<KMaxMediaPopupTextLength> descText(*textBuf);
+		TBuf<KMaxMediaPopupTitleLength> descText(*textBuf);
 		/// bug fix - EMPY-7MCKD6
 		///@todo - remove literal for popup title when resource string is avaliable
 		
@@ -1020,6 +1022,7 @@
 void CGlxUsageRightsBoundCommand::InitMenuL( CEikMenuPane& aMenu ) const
 	{
 	TRACER("CGlxUsageRightsBoundCommand::InitMenuL");
+	aMenu.SetItemTextL( KGlxViewBoundMenuCommandId, R_GLX_METADATA_VIEW_OPTIONS_VIEW ); 
 	aMenu.SetItemDimmed( KGlxViewBoundMenuCommandId, EFalse );
 	}
 
--- a/photosgallery/viewframework/dataprovider/src/glxdrmgiftexturecreator.cpp	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/viewframework/dataprovider/src/glxdrmgiftexturecreator.cpp	Wed Oct 13 14:32:09 2010 +0300
@@ -29,6 +29,8 @@
 #include "glxuiutility.h"
 #include "glxdrmgiftexturecreator.h"
 #include "glxdrmgifactivedecoder.h"
+#include <glxdrmutility.h>
+#include <glximageviewermanager.h>
 
 // Default frame interval for animation, in microseconds
 const TInt KDefaultFrameInterval = 100000;
@@ -65,9 +67,11 @@
         }
 
     iUiUtility->Close();
-
+    if (iDrmUtility)
+        {
+        iDrmUtility->Close();
+        }
     delete iGlxDecoderAO;
-
     iFsSession.Close();
     }
 
@@ -83,6 +87,12 @@
     iTransparencyPossible = EFalse;
     iFrameShift = EFalse;
 
+    //delete image viewer instance, if present.
+    if ( iImageViewerInstance )
+        {
+        iImageViewerInstance->DeleteInstance();
+        }
+    
     if (iGlxDecoderAO)
         {
         iGlxDecoderAO->Cancel();
@@ -135,21 +145,14 @@
     TRACER("CGlxDrmGifTextureCreator::ConstructL()");
     iUiUtility = CGlxUiUtility::UtilityL();
     User::LeaveIfError(iFsSession.Connect());
-    iBitmapReady = EFalse;
-    iAnimCount = 0;
-    iAnimateFlag = EFalse;
-    iTransparencyPossible = EFalse;
-    iFrameShift = EFalse;
-
-    //Set the initial texture, it could be default or the FS texture
-    SetTexture();
+    
+    //Create DRM Utility to check DRM rights validity 
+    iDrmUtility = CGlxDRMUtility::InstanceL();
     // Create the active object
     iGlxDecoderAO = CGlxDRMgifDecoderAO::NewL(this);
-#ifdef _DEBUG
-    iStartTime.HomeTime();
-#endif	
-    CreateImageDecoderL(iMedia->Uri());
-    CreateBitmapAndStartDecodingL();
+    
+    //Set the initial texture.And create and starts the Image Decoder
+    SetInitialTextureAndStartDecodingL();
     }
 
 // -----------------------------------------------------------------------------
@@ -160,8 +163,17 @@
     {
     TRACER("CGlxDrmGifTextureCreator::UpdateNewImageL()");
     GLX_LOG_INFO1("DrmGif: UpdateNewImageL() aItemIndex=%d", aItemIndex);
+    
+    //Start Decoding only if the aItemIndex refers to new Item index
     if (aItemIndex == iItemIndex)
         {
+        //All textures were flushed when in background.
+        //so, when app. comes to foreground again and DRM Rights have expired for 
+        //current item, then create default Texture.
+        if(iUiUtility->GetForegroundStatus() && IsDRMRightsExpiredL())
+            {
+            SetTexture();
+            }
         return;
         }
 
@@ -171,19 +183,38 @@
     iItemIndex = aItemIndex;
     iMedia = &aMedia;
 
+    //Set the initial texture.And create and starts the Image Decoder
+    SetInitialTextureAndStartDecodingL();
+    }
+
+// -----------------------------------------------------------------------------
+// SetInitialTextureAndStartDecodingL 
+// -----------------------------------------------------------------------------
+void CGlxDrmGifTextureCreator::SetInitialTextureAndStartDecodingL()
+    {
+    TRACER("CGlxDrmGifTextureCreator::SetInitialTextureAndStartDecodingL()");
+    
     iBitmapReady = EFalse;
     iAnimCount = 0;
     iAnimateFlag = EFalse;
     iTransparencyPossible = EFalse;
     iFrameShift = EFalse;
 
+    //Creates the image viewer instance, if not created already.
+    iImageViewerInstance = CGlxImageViewerManager::InstanceL();    
+    __ASSERT_ALWAYS(iImageViewerInstance, Panic(EGlxPanicNullPointer));
+    
     //Set the initial texture, it could be default or the FS texture
     SetTexture();
 #ifdef _DEBUG
     iStartTime.HomeTime();
 #endif
-    CreateImageDecoderL(iMedia->Uri());
-    CreateBitmapAndStartDecodingL();
+    //Check if DRM Rights are not expired before starting image decoding
+    if (!IsDRMRightsExpiredL())
+        {
+        CreateImageDecoderL(iMedia->Uri());
+        CreateBitmapAndStartDecodingL();
+        }  
     }
 
 // -----------------------------------------------------------------------------
@@ -507,3 +538,27 @@
         iModel->SetData(iItemIndex, item);
         }
     }
+
+// -----------------------------------------------------------------------------
+// IsDRMRightsExpiredL
+// -----------------------------------------------------------------------------
+//
+TBool CGlxDrmGifTextureCreator::IsDRMRightsExpiredL()
+    {
+    TRACER("CGlxDrmGifTextureCreator::IsDRMRightsExpiredL");
+    //To check if DRM rights are expired
+    TBool expired = EFalse;
+    TMPXGeneralCategory cat = iMedia->Category();
+    
+    if (iImageViewerInstance->IsPrivate())
+        {
+        expired = !iDrmUtility->DisplayItemRightsCheckL
+                            (iImageViewerInstance->ImageFileHandle(),(cat == EMPXImage));
+        }
+    else
+        {
+        expired = !iDrmUtility->DisplayItemRightsCheckL(iMedia->Uri(), (cat == EMPXImage));
+        }
+    return expired;
+    }
+
--- a/photosgallery/viewframework/dataprovider/src/glxmulmodelproviderbase.cpp	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/viewframework/dataprovider/src/glxmulmodelproviderbase.cpp	Wed Oct 13 14:32:09 2010 +0300
@@ -20,16 +20,19 @@
 
 #include "glxmulmodelproviderbase.h"
 
+#include <e32err.h>
 #include <alf/alfenv.h>
 #include <alf/alfevent.h>
 #include <alf/ialfwidgetfactory.h>
 #include <alf/alfwidgetenvextension.h>
+//#include <osn/ustring.h>
 #include <mul/imulwidget.h>
 #include <mul/mulevent.h>
 #include <mul/mulvisualitem.h>
-#include <mul/imulcoverflowwidget.h>               // An interface for Multimedia coverflow Widget
 #include <glxlog.h>  //Logging
 #include <glxtracer.h>
+#include "glxbinding.h"
+#include "glxcommandbindingutility.h"
 #include <glxnavigationalstate.h>
 #include <glxnavigationalstatedefs.h>
 
@@ -39,9 +42,8 @@
 #include <glxtexturemanager.h>
 #include <glxicons.mbg>
 #include <glxuistd.h>
+#include <mul/imulcoverflowwidget.h>               // An interface for Multimedia coverflow Widget
 #include "glxdrmgiftexturecreator.h"
-#include "glxbinding.h"
-#include "glxcommandbindingutility.h"
 
 using namespace Alf;
 
@@ -49,6 +51,9 @@
 static const char* const KGridWidget = "GridWidget";
 static const char* const KCoverFlowWidget = "CoverflowWidget";
 
+//@todo to be uncommented when using command binding
+//#include "glxboundcommand.h"
+
 // ----------------------------------------------------------------------------
 // BaseConstructL
 // ----------------------------------------------------------------------------
@@ -184,7 +189,6 @@
 	AlfEventStatus response = EEventNotHandled;
 	if ( aEvent.IsCustomEvent() )
 		{
-		GLX_LOG_INFO1("CGlxMulModelProviderBase::offerEvent() aEvent.CustomParameter(%d)", aEvent.CustomParameter());    
 		switch ( aEvent.CustomParameter() ) 
 			{
 			case KAlfActionIdDeviceLayoutChanged:
@@ -202,29 +206,9 @@
 				response = EEventHandled;
 				}
 				break;
-            case Alf::ETypeItemRemoved:
-                {
-                GLX_LOG_INFO("CGlxMulModelProviderBase::offerEvent - ETypeItemRemoved!");
-                CGlxUiUtility* uiUtility = CGlxUiUtility::UtilityL();
-                CleanupClosePushL(*uiUtility);
-                if (iModel->Count() == 0 && UString(KCoverFlowWidget)
-                        == UString(iWidget.widgetName())
-                        && iNavigationalState->ViewingMode()
-                                == NGlxNavigationalState::EView
-                        && uiUtility->GetForegroundStatus())
-                    {
-                    uiUtility->SetViewNavigationDirection(
-                            EGlxNavigationBackwards);
-
-                    iNavigationalState->ActivatePreviousViewL();
-                    response = EEventHandled;
-                    }
-                CleanupStack::PopAndDestroy(uiUtility);
-                }
-                break;
-            default:
-                break;
-            }
+			default:
+				break;
+			}
 		}
 	return response;
 	}
@@ -460,7 +444,6 @@
     {
     TRACER("CGlxMulModelProviderBase::RemoveItems");
     // RemoveItems does not throw according to model documentation
-    GLX_LOG_INFO2("CGlxMulModelProviderBase::RemoveItems() aIndex(%d), aCount(%d)", aIndex, aCount);    
     iModel->Remove( aIndex, aCount );
     }    
 
--- a/photosgallery/viewframework/drmutility/group/glxdrmutility.mmp	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/viewframework/drmutility/group/glxdrmutility.mmp	Wed Oct 13 14:32:09 2010 +0300
@@ -44,6 +44,5 @@
 LIBRARY         drmhelper.lib
 LIBRARY         caf.lib
 LIBRARY         cafutils.lib
-LIBRARY         drmuihandling.lib
-LIBRARY         efsrv.lib
+
 // End of File
--- a/photosgallery/viewframework/drmutility/src/glxdrmutility.cpp	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/viewframework/drmutility/src/glxdrmutility.cpp	Wed Oct 13 14:32:09 2010 +0300
@@ -32,9 +32,6 @@
 #include "glxtracer.h"
 #include "glxlog.h"
 
-#include <drmuihandling.h>
-using namespace DRM;
-
 const TInt KGlxDRMThumbnailHeight = 120;
 const TInt KGlxDRMThumbnailWidth = 90;
 
@@ -171,16 +168,7 @@
 #ifdef _DEBUG
     TTime startTime;
     startTime.HomeTime();
-#endif 
-    TFileName fileName(KNullDesC);
-    fileName.Append(aFileHandle.FullName(fileName));
-    if (iLastConsumedItemUri->Length() > 0)
-        {
-        if (fileName.CompareF(*iLastConsumedItemUri) == 0)
-            {
-            return ETrue;
-            }
-        }
+#endif         
     TBool rightsValid = EFalse;
     ContentAccess::TAttribute attrib =
         aCheckViewRights ? ContentAccess::ECanView : ContentAccess::ECanPlay;
@@ -231,20 +219,6 @@
         TBool aCheckViewRights)
     {
     TRACER("CGlxDRMUtility::DisplayItemRightsCheckL(RFile)");
-    TFileName fileName(KNullDesC);
-    fileName.Append(aFileHandle.FullName(fileName));
-    // Allow to display if rights for a URI was just consumed (i.e. same as stored URI)
-    if (iLastConsumedItemUri->Length() > 0)
-        {
-        if (fileName.CompareF(*iLastConsumedItemUri) == 0)
-            {
-            return ETrue;
-            }
-        }
-
-    //Clear the stored uri
-    ClearLastConsumedItemUriL();
-
     // Otherwise, check current rights for the URI of newly focused item
     return ItemRightsValidityCheckL(aFileHandle, aCheckViewRights);
     }
@@ -288,22 +262,7 @@
     {
     TRACER("CGlxDRMUtility::ConsumeRightsL(RFile)");
     CData* data = CData::NewLC(aFileHandle, KDefaultContentObject(), EPeek);
-
-    //When consuming rights for a URI, clear stored URI
-    ClearLastConsumedItemUriL();
-
     TInt err = data->ExecuteIntent(ContentAccess::EView);
-    TFileName fileName(KNullDesC);
-    fileName.Append(aFileHandle.FullName(fileName));
-
-    if (err == KErrNone)
-        {
-        //Update stored URI
-        iLastConsumedItemUri = iLastConsumedItemUri->ReAllocL(fileName.Length());
-        TPtr newPtr = iLastConsumedItemUri->Des();
-        newPtr.Copy(fileName);
-        }
-
     CleanupStack::PopAndDestroy(data);
     return (err == KErrNone);
     }
@@ -407,22 +366,15 @@
 EXPORT_C void CGlxDRMUtility::ShowDRMDetailsPaneL(const TDesC& aUri)
     {
     TRACER("CGlxDRMUtility::ShowDRMDetailsPaneL(URI)");
-    GLX_LOG_URI("CGlxDRMUtility::ShowDRMDetailsPaneL(%S)", &aUri);
-    RFs fs;
-    User::LeaveIfError(fs.Connect());
-    CleanupClosePushL(fs);
+    TRAPD( err, iDrmHelper->LaunchDetailsViewEmbeddedL( aUri ) );
+    // if no rights ask user to re-activate
+    if (err == KErrCANoRights)
+        {
+        HBufC* buf = aUri.AllocLC();
+        iDrmHelper->ActivateContentL(*buf);
+        CleanupStack::PopAndDestroy(buf);
+        }
 
-    RFile64 drmFile;
-    User::LeaveIfError(drmFile.Open(fs, aUri, EFileRead
-            | EFileShareReadersOrWriters));
-    CleanupClosePushL(drmFile);
-
-    CDrmUiHandling* drmUiHandler = CDrmUiHandling::NewLC();
-    TRAP_IGNORE(drmUiHandler->ShowDetailsViewL(drmFile));
-    CleanupStack::PopAndDestroy(drmUiHandler);
-
-    CleanupStack::PopAndDestroy(&drmFile);
-    CleanupStack::PopAndDestroy(&fs);
     }
 
 //============================================================================
@@ -431,9 +383,12 @@
 EXPORT_C void CGlxDRMUtility::ShowDRMDetailsPaneL(RFile& aFileHandle)
     {
     TRACER("CGlxDRMUtility::ShowDRMDetailsPaneL(RFile)");
-    CDrmUiHandling* drmUiHandler = CDrmUiHandling::NewLC();
-    TRAP_IGNORE(drmUiHandler->ShowDetailsViewL(aFileHandle));
-    CleanupStack::PopAndDestroy(drmUiHandler);
+    TRAPD( err, iDrmHelper->LaunchDetailsViewEmbeddedL( aFileHandle ) );
+    // if no rights ask user to re-activate
+    if (err == KErrCANoRights)
+        {
+        //need to check if we need to handle.
+        }
     }
 
 //============================================================================
--- a/photosgallery/viewframework/medialists/src/glxattributecontext.cpp	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/viewframework/medialists/src/glxattributecontext.cpp	Wed Oct 13 14:32:09 2010 +0300
@@ -172,19 +172,20 @@
             }
         }
     
+    
     // If the attribute request is for Thumbnail, Check if there is a match found.
     // And set the size and thumbnail quality
 	TIdentityRelation<TMPXAttribute> matchContent(&TMPXAttribute::MatchContentId);
 	TMPXAttribute tnAttr(KGlxMediaIdThumbnail, 0);
 	
-	if (aAttributes.Find(tnAttr, matchContent) != KErrNotFound) 
+	if (iAttributes.Find(tnAttr, matchContent) != KErrNotFound) 
 		{
 		// Allocate CMPXAttributeSpecs
 		CMPXAttributeSpecs* attributeSpecs = CMPXAttributeSpecs::NewL();
 		CleanupStack::PushL(attributeSpecs);
 		
-		attributeSpecs->SetTObjectValueL(
-	    TMPXAttribute( KGlxMediaIdThumbnail,
+	attributeSpecs->SetTObjectValueL(
+	   TMPXAttribute( KGlxMediaIdThumbnail,
 					   KGlxAttribSpecThumbnailSize ), 
 					   TSize(iDefaultSpecSize.iWidth,iDefaultSpecSize.iHeight) );
 		
@@ -192,16 +193,11 @@
 		   TMPXAttribute( KGlxMediaIdThumbnail,
 					   KGlxAttribSpecThumbnailQualityOverSpeed ), ETrue );
 		
-		// Memory leak guard check
-		if (aDetailedSpecs)
-		    {
-            delete aDetailedSpecs;
-            aDetailedSpecs = NULL;
-		    }
 		aDetailedSpecs = attributeSpecs;
 		
 		// Pop from stack
 		CleanupStack::Pop(attributeSpecs);
+		
 		}
 
     // If an error was found, return KErrGeneral
--- a/photosgallery/viewframework/medialists/src/glxcachemanager.cpp	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/viewframework/medialists/src/glxcachemanager.cpp	Wed Oct 13 14:32:09 2010 +0300
@@ -1007,8 +1007,6 @@
                         TGlxIdSpaceId spaceId = list->IdSpaceId(iRequestedItemIndexes[0]);
                         HandleCollectionMediaL(spaceId, *iMPXMedia, KErrNone);
                         DeleteImageViewerInstance();
-                        delete iReader;
-                        iReader = NULL;
                         return;
                         }
                     else
--- a/photosgallery/viewframework/plugins/fullscreenviewplugin/data/glxfullscreenviewdata.rss	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/viewframework/plugins/fullscreenviewplugin/data/glxfullscreenviewdata.rss	Wed Oct 13 14:32:09 2010 +0300
@@ -251,8 +251,6 @@
                             txt = qtn_options_send_via; },
                 MENU_ITEM { command = EGlxCmdAiwShareOnOvi; 
                             /* txt comes from ShareOnline 4.3 */},
-                MENU_ITEM { command = EGlxCmdDelete;
-                            txt = qtn_lgal_options_delete; }, 
                 MENU_ITEM { command = EGlxCmdAiwEdit; 
                             txt = qtn_lgal_options_edit; },
                 MENU_ITEM { command = EGlxCmdDetails;
--- a/photosgallery/viewframework/plugins/gridviewplugin/data/glxgridviewdata.rss	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/viewframework/plugins/gridviewplugin/data/glxgridviewdata.rss	Wed Oct 13 14:32:09 2010 +0300
@@ -1,22 +1,25 @@
 /*
- * 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:    Resource definitions for Grid View plugin
- *
- */
+* 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:    Resource definitions for Grid View plugin
+*
+*/
+
+
+
 
 //	RESOURCE IDENTIFIER
-NAME MPXC
+NAME	MPXC
 
 //	INCLUDES
 
@@ -35,11 +38,9 @@
 
 //	RESOURCE DEFINITIONS 
 
-RESOURCE RSS_SIGNATURE
-    {}
+RESOURCE RSS_SIGNATURE { }
 
-RESOURCE TBUF
-    {buf="GLTV";}
+RESOURCE TBUF { buf="GLTV"; }
 
 // -----------------------------------------------------------------------------------
 // Resource Definitions
@@ -47,10 +48,10 @@
 
 // Downloads Grid View
 RESOURCE AVKON_VIEW r_grid_view
-    {
-    menubar = r_grid_menubar;
-    cba = r_grid_softkeys;
-    }
+	{
+	menubar = r_grid_menubar;
+	cba = r_grid_softkeys;  
+	}
 
 // Captured Grid View
 RESOURCE AVKON_VIEW r_glx_captured_grid_view
@@ -80,27 +81,26 @@
     cba = r_grid_softkeys;
     }
 
+
 // ------------------------------------------------------------------------------------
 // Menu Bar Resources 
 // ------------------------------------------------------------------------------------
 
 // Basic Grid Views
 RESOURCE MENU_BAR r_grid_menubar
-    {
-    titles=
-        {
-        MENU_TITLE
-            {menu_pane=r_glx_grid_menu; txt="";}
-        };
-    }
+	{
+	titles=
+		{
+		MENU_TITLE { menu_pane=r_glx_grid_menu; txt=""; }
+		};
+	}
 
 // Albums Grid View
 RESOURCE MENU_BAR r_glx_album_grid_menubar
     {
     titles=
         {
-        MENU_TITLE
-            {menu_pane=r_glx_album_grid_menu; txt="";}
+        MENU_TITLE { menu_pane=r_glx_album_grid_menu; txt=""; }
         };
     }
 
@@ -109,10 +109,10 @@
     {
     titles=
         {
-        MENU_TITLE
-            {menu_pane=r_taggrid_menu; txt="";}
+        MENU_TITLE { menu_pane=r_taggrid_menu; txt=""; }
         };
-    }
+    }   
+
 
 // ------------------------------------------------------------------------------------
 // Menu Contents for Grid views
@@ -121,180 +121,144 @@
 // Basic grid views
 RESOURCE MENU_PANE r_glx_grid_menu
     {
-    items=
-        {
-        MENU_ITEM
-            {command = EGlxCmdPlay;
-            txt = qtn_lgal_options_play;},
-        MENU_ITEM
-            {command = EGlxCmdSend;
-            txt = qtn_options_send_via;
-            flags = EEikMenuItemSpecific;},
-        MENU_ITEM
-            {command = EGlxCmdAiwShareOnOvi;
-            /* txt comes from ShareOnline 4.3 */},
-        MENU_ITEM
-            {command = EGlxCmdDelete;
-            txt = qtn_lgal_options_delete;
-            flags = EEikMenuItemSpecific;},
-        MENU_ITEM
-            {command = EGlxCmdSlideshowPlay;
-            txt = qtn_lgal_options_slideshow;
-            flags = EEikMenuItemSpecific;},
-        MENU_ITEM
-            {command = EGlxCmdSlideshow;
-            txt = qtn_lgal_options_slideshow;
-            cascade = r_grid_shw_menu;},
-        MENU_ITEM
-            {command = EGlxCmdAiwEdit;
-            txt = qtn_lgal_options_edit;
-            flags = EEikMenuItemSpecificListQuery;},
-        MENU_ITEM
-            {command = EGlxCmdDetails;
-            txt = qtn_lgal_options_details;},
-        MENU_ITEM
-            {command = EAknMarkAll;
-            txt = qtn_options_list_mark_all;},
-        MENU_ITEM
-            {command = EAknUnmarkAll;
-            txt = qtn_options_list_unmark_all;},
-        MENU_ITEM
-            {command = EGlxCmdAddToAlbum;
-            txt = qtn_lgal_options_add_to_album;
-            flags = EEikMenuItemSpecific;},
-        MENU_ITEM
-            {command = EGlxCmdAddTag;
-            txt = qtn_lgal_options_properties_add_tag;
-            flags = EEikMenuItemSpecific;},
-        MENU_ITEM
-            {command = EAknCmdHelp;
-            txt = qtn_options_help;},
-        MENU_ITEM
-            {command = EAknCmdExit;
-            txt = qtn_options_exit;}
-        };
+        items=
+                {
+                  MENU_ITEM { command = EGlxCmdPlay;
+                              txt = qtn_lgal_options_play; },
+                  MENU_ITEM { command = EGlxCmdSend;
+                              txt = qtn_options_send_via; 
+                              flags = EEikMenuItemSpecific; },
+                  MENU_ITEM { command = EGlxCmdAiwShareOnOvi; 
+                           /* txt comes from ShareOnline 4.3 */ 
+                           flags = EEikMenuItemSpecific;},        
+                  MENU_ITEM { command = EGlxCmdDelete;
+                              txt = qtn_lgal_options_delete; 
+                              flags = EEikMenuItemSpecific; }, 
+                   MENU_ITEM { command = EGlxCmdSlideshowPlay;
+                              txt = qtn_lgal_options_slideshow;
+                              flags = EEikMenuItemSpecific;},
+                  MENU_ITEM { command = EGlxCmdSlideshow;
+                              txt = qtn_lgal_options_slideshow;
+                              cascade = r_grid_shw_menu; },
+                  MENU_ITEM { command = EGlxCmdAiwEdit; 
+                              txt = qtn_lgal_options_edit; 
+                              flags = EEikMenuItemSpecificListQuery;}, 
+                  MENU_ITEM { command = EGlxCmdDetails;
+                              txt = qtn_lgal_options_details; },    
+                  MENU_ITEM { command = EAknMarkAll;
+                              txt = qtn_options_list_mark_all;},   
+                  MENU_ITEM { command = EAknUnmarkAll;
+                              txt = qtn_options_list_unmark_all;},                                                                                
+                  MENU_ITEM { command = EGlxCmdAddToAlbum;
+                              txt = qtn_lgal_options_add_to_album; 
+                              flags = EEikMenuItemSpecific; },
+                  MENU_ITEM { command = EGlxCmdAddTag;
+                              txt = qtn_lgal_options_properties_add_tag;
+                              flags = EEikMenuItemSpecific; }, 
+                  MENU_ITEM { command = EAknCmdHelp; 
+                              txt = qtn_options_help; },
+                  MENU_ITEM { command = EAknCmdExit; 
+                              txt = qtn_options_exit; }
+                };
     }
 
 // Albums Grid
 RESOURCE MENU_PANE r_glx_album_grid_menu
     {
-    items=
-        {
-        MENU_ITEM
-            {command = EGlxCmdPlay;
-            txt = qtn_lgal_options_play;},
-        MENU_ITEM
-            {command = EGlxCmdSend;
-            txt = qtn_options_send_via;
-            flags = EEikMenuItemSpecific;},
-        MENU_ITEM
-            {command = EGlxCmdAiwShareOnOvi;
-            /* txt comes from ShareOnline 4.3 */},
-        MENU_ITEM
-            {command = EGlxCmdRemoveFrom;
-            txt = qtn_lgal_options_remove_from_album;
-            flags = EEikMenuItemSpecific;},
-        MENU_ITEM
-            {command = EGlxCmdDelete;
-            txt = qtn_lgal_options_delete;
-            flags = EEikMenuItemSpecific;},
-        MENU_ITEM
-            {command = EGlxCmdSlideshowPlay;
-            txt = qtn_lgal_options_slideshow;
-            flags = EEikMenuItemSpecific;},
-        MENU_ITEM
-            {command = EGlxCmdSlideshow;
-            txt = qtn_lgal_options_slideshow;
-            cascade = r_grid_shw_menu;},
-        MENU_ITEM
-            {command = EGlxCmdAiwEdit;
-            txt = qtn_lgal_options_edit;
-            flags = EEikMenuItemSpecificListQuery;},
-        MENU_ITEM
-            {command = EGlxCmdDetails;
-            txt = qtn_lgal_options_details;},
-        MENU_ITEM
-            {command = EAknMarkAll;
-            txt = qtn_options_list_mark_all;},
-        MENU_ITEM
-            {command = EAknUnmarkAll;
-            txt = qtn_options_list_unmark_all;},
-        MENU_ITEM
-            {command = EGlxCmdAddToAlbum;
-            txt = qtn_lgal_options_add_to_album;},
-        MENU_ITEM
-            {command = EGlxCmdAddTag;
-            txt = qtn_lgal_options_properties_add_tag;
-            flags = EEikMenuItemSpecific;},
-        MENU_ITEM
-            {command = EAknCmdHelp;
-            txt = qtn_options_help;},
-        MENU_ITEM
-            {command = EAknCmdExit;
-            txt = qtn_options_exit;}
-        };
-    }
+        items= 
+            {                             
+                  MENU_ITEM { command = EGlxCmdPlay;
+                              txt = qtn_lgal_options_play; },
+                  MENU_ITEM { command = EGlxCmdSend;
+                              txt = qtn_options_send_via; 
+                              flags = EEikMenuItemSpecific; },  
+                  MENU_ITEM { command = EGlxCmdAiwShareOnOvi; 
+                           /* txt comes from ShareOnline 4.3 */ 
+                               flags = EEikMenuItemSpecific;},  
+                  MENU_ITEM { command = EGlxCmdRemoveFrom;
+                              txt = qtn_lgal_options_remove_from_album; 
+                              flags = EEikMenuItemSpecific; },
+                  MENU_ITEM { command = EGlxCmdDelete;
+                              txt = qtn_lgal_options_delete; 
+                              flags = EEikMenuItemSpecific; },
+                  MENU_ITEM { command = EGlxCmdSlideshowPlay;
+                              txt = qtn_lgal_options_slideshow;
+                              flags = EEikMenuItemSpecific;},
+                  MENU_ITEM { command = EGlxCmdSlideshow;
+                              txt = qtn_lgal_options_slideshow;
+                              cascade = r_grid_shw_menu; },
+                  MENU_ITEM { command = EGlxCmdAiwEdit; 
+                              txt = qtn_lgal_options_edit; 
+                              flags = EEikMenuItemSpecificListQuery;}, 
+                  MENU_ITEM { command = EGlxCmdDetails;
+                              txt = qtn_lgal_options_details; },    
+ 		  MENU_ITEM { command = EAknMarkAll;
+                              txt = qtn_options_list_mark_all;},   
+		  MENU_ITEM { command = EAknUnmarkAll;
+                              txt = qtn_options_list_unmark_all;},                                                                                
+                  MENU_ITEM { command = EGlxCmdAddToAlbum;
+                              txt = qtn_lgal_options_add_to_album; 
+                              flags = EEikMenuItemSpecific; },
+                  MENU_ITEM { command = EGlxCmdAddTag;
+                              txt = qtn_lgal_options_properties_add_tag;
+                              flags = EEikMenuItemSpecific; }, 
+                  MENU_ITEM { command = EAknCmdHelp; 
+                              txt = qtn_options_help; },
+                  MENU_ITEM { command = EAknCmdExit; 
+                              txt = qtn_options_exit; }
+                };
+        }
 
 // Tags Grid
 RESOURCE MENU_PANE r_taggrid_menu
-    {
-    items=
-        {
-        MENU_ITEM
-            {command = EGlxCmdPlay;
-            txt = qtn_lgal_options_play;},
-        MENU_ITEM
-            {command = EGlxCmdSend;
-            txt = qtn_options_send_via;
-            flags = EEikMenuItemSpecific;},
-        MENU_ITEM
-            {command = EGlxCmdAiwShareOnOvi;
-            /* txt comes from ShareOnline 4.3 */},
-        MENU_ITEM
-            {command=EGlxCmdRemoveFrom;
-            txt = qtn_lgal_options_remove_from_tag;
-            flags = EEikMenuItemSpecific;},
-        MENU_ITEM
-            {command = EGlxCmdDelete;
-            txt = qtn_lgal_options_delete;
-            flags = EEikMenuItemSpecific;},
-        MENU_ITEM
-            {command = EGlxCmdSlideshowPlay;
-            txt = qtn_lgal_options_slideshow;
-            flags = EEikMenuItemSpecific;},
-        MENU_ITEM
-            {command = EGlxCmdSlideshow;
-            txt = qtn_lgal_options_slideshow;
-            cascade = r_grid_shw_menu;},
-        MENU_ITEM
-            {command = EGlxCmdAiwEdit;
-            txt = qtn_lgal_options_edit;
-            flags = EEikMenuItemSpecificListQuery;},
-        MENU_ITEM
-            {command = EGlxCmdDetails;
-            txt = qtn_lgal_options_details;},
-        MENU_ITEM
-            {command = EAknMarkAll;
-            txt = qtn_options_list_mark_all;},
-        MENU_ITEM
-            {command = EAknUnmarkAll;
-            txt = qtn_options_list_unmark_all;},
-        MENU_ITEM
-            {command = EGlxCmdAddToAlbum;
-            txt = qtn_lgal_options_add_to_album;
-            flags = EEikMenuItemSpecific;},
-        MENU_ITEM
-            {command = EGlxCmdAddTag;
-            txt = qtn_lgal_options_properties_add_tag;},
-        MENU_ITEM
-            {command = EAknCmdHelp;
-            txt = qtn_options_help;},
-        MENU_ITEM
-            {command = EAknCmdExit;
-            txt = qtn_options_exit;}
-        };
+   {
+   items=
+         {
+        MENU_ITEM { command = EGlxCmdPlay;
+                    txt = qtn_lgal_options_play; },
+        MENU_ITEM { command = EGlxCmdSend;
+                    txt = qtn_options_send_via; 
+                    flags = EEikMenuItemSpecific; },
+        MENU_ITEM { command = EGlxCmdAiwShareOnOvi; 
+                 /* txt comes from ShareOnline 4.3 */ 
+                 flags = EEikMenuItemSpecific;},  
+        MENU_ITEM { command=EGlxCmdRemoveFrom; 
+                    txt = qtn_lgal_options_remove_from_tag; 
+                    flags = EEikMenuItemSpecific; },
+        MENU_ITEM { command = EGlxCmdDelete;
+                    txt = qtn_lgal_options_delete; 
+                    flags = EEikMenuItemSpecific; }, 
+        MENU_ITEM { command = EGlxCmdSlideshowPlay;
+                    txt = qtn_lgal_options_slideshow;
+                    flags = EEikMenuItemSpecific;},
+        MENU_ITEM { command = EGlxCmdSlideshow;
+                    txt = qtn_lgal_options_slideshow;
+                    cascade = r_grid_shw_menu; },
+        MENU_ITEM { command = EGlxCmdAiwEdit; 
+                    txt = qtn_lgal_options_edit; 
+                    flags = EEikMenuItemSpecificListQuery;}, 
+        MENU_ITEM { command = EGlxCmdDetails;
+                    txt = qtn_lgal_options_details; },    
+        MENU_ITEM { command = EAknMarkAll;
+                    txt = qtn_options_list_mark_all;},   
+		MENU_ITEM { command = EAknUnmarkAll;
+                    txt = qtn_options_list_unmark_all;},
+        MENU_ITEM { command = EGlxCmdAddToAlbum;
+                    txt = qtn_lgal_options_add_to_album;
+                    flags = EEikMenuItemSpecific; },
+        MENU_ITEM { command = EGlxCmdAddTag;
+                    txt = qtn_lgal_options_properties_add_tag; 
+                    flags = EEikMenuItemSpecific; },
+         MENU_ITEM { command = EAknCmdHelp; 
+                     txt = qtn_options_help; },
+         MENU_ITEM { command = EAknCmdExit; 
+                     txt = qtn_options_exit; }                     
+         };
     }
 
+
+
+
 // ------------------------------------------------------------------------------------
 // Submenu contents
 // ------------------------------------------------------------------------------------
@@ -304,153 +268,146 @@
     {
     items=
         {
-        MENU_ITEM
-            {command=EGlxCmdSlideshowPlay;
-            txt=qtn_lgal_options_slideshow_play;},
-        MENU_ITEM
-            {command=EGlxCmdSlideshowSettings;
-            txt=qtn_lgal_options_slideshow_settings_general;}
+        MENU_ITEM { command=EGlxCmdSlideshowPlay; txt=qtn_lgal_options_slideshow_play; },
+        MENU_ITEM { command=EGlxCmdSlideshowSettings; txt=qtn_lgal_options_slideshow_settings_general; }        
         };
     }
 
+
 // EditList sub menu for Marking
 RESOURCE MENU_PANE r_viu_editlist_menu
     {
     items =
         {
         /*MENU_ITEM
-         {
-         command = EAknCmdMark;
-         txt = qtn_options_list_mark_one;
-         },*/
+            {
+            command = EAknCmdMark;
+            txt = qtn_options_list_mark_one;
+            },*/
         MENU_ITEM
             {
             command = EAknMarkAll;
             txt = qtn_options_list_mark_all;
             },
         /*MENU_ITEM
-         {
-         command = EAknCmdUnmark;
-         txt = qtn_options_list_unmark_one;
-         },*/
+            {
+            command = EAknCmdUnmark;
+            txt = qtn_options_list_unmark_one;
+            },*/
         MENU_ITEM
             {
             command = EAknUnmarkAll;
             txt = qtn_options_list_unmark_all;
-            }
+            }                       
         };
     }
 
+// Rotate Sub menu
+//RESOURCE MENU_PANE r_rotate_sub_menu
+//    {
+//    items = 
+//        {
+//         MENU_ITEM
+//            {
+//             command = EGlxCmdRotateLeft;
+//             txt = qtn_lgal_options_rotate_left;
+//            },
+//         MENU_ITEM
+//            {
+//             command = EGlxCmdRotateRight;
+//             txt = qtn_lgal_options_rotate_right;
+//            }
+//        };
+//    }
+
 // Home Network sub menu
 RESOURCE MENU_PANE r_home_network_menu
     {
     items=
         {
-        MENU_ITEM
-            {command=EGlxShowViaUpnpSubmenuVersion;
-            txt=qtn_lgal_options_sub_show_ext;},
-        MENU_ITEM
-            {command=EGlxStopShowingSubmenuVersion;
-            txt=qtn_lgal_options_sub_stop_show;},
-        MENU_ITEM
-            {command=EGlxCopyToHomeNetwork;
-            txt=qtn_lgal_options_copy_to_home_net;}
+        MENU_ITEM { command=EGlxShowViaUpnpSubmenuVersion; txt=qtn_lgal_options_sub_show_ext; },
+        MENU_ITEM { command=EGlxStopShowingSubmenuVersion; txt=qtn_lgal_options_sub_stop_show; },
+        MENU_ITEM { command=EGlxCopyToHomeNetwork; txt=qtn_lgal_options_copy_to_home_net; }
         };
     }
 
+
 // ------------------------------------------------------------------------------------
 // Other Menubars
 // ------------------------------------------------------------------------------------
 
 RESOURCE MENU_BAR r_grid_ok_menubar
-    {
-    titles=
-        {
-        MENU_TITLE
-            {menu_pane=r_grid_ok_menu; txt="";}
-        };
-    }
-
+	{
+	titles=
+		{
+		MENU_TITLE { menu_pane=r_grid_ok_menu; txt=""; }
+		};
+	}
+	
 RESOURCE MENU_BAR r_grid_ok_menubar_album_gridview
-    {
-    titles=
-        {
-        MENU_TITLE
-            {menu_pane=r_grid_ok_menu_album_gridview; txt="";}
-        };
-    }
+	{
+	titles=
+		{
+		MENU_TITLE { menu_pane=r_grid_ok_menu_album_gridview; txt=""; }
+		};
+	}
 
 RESOURCE MENU_BAR r_grid_ok_menubar_tag_gridview
     {
     titles=
         {
-        MENU_TITLE
-            {menu_pane=r_grid_ok_menu_tag_gridview; txt="";}
+        MENU_TITLE { menu_pane=r_grid_ok_menu_tag_gridview; txt=""; }
         };
     }
 
 RESOURCE MENU_PANE r_grid_ok_menu
-    {
-    items=
-        {
-        MENU_ITEM
-            {command = EGlxCmdDelete;
-            txt = qtn_lgal_options_delete;},
-        MENU_ITEM
-            {command = EAknUnmarkAll;
-            txt = qtn_options_list_unmark_all;},
-        MENU_ITEM
-            {command = EGlxCmdAddToAlbum;
-            txt = qtn_lgal_options_add_to_album;},
-        MENU_ITEM
-            {command = EGlxCmdAddTag;
-            txt = qtn_lgal_options_properties_add_tag;}
-        };
-    }
+  {
+        items=
+                {
+                MENU_ITEM { command = EGlxCmdDelete; 
+                            txt = qtn_lgal_options_delete; },
+                MENU_ITEM { command = EAknUnmarkAll;
+                            txt = qtn_options_list_unmark_all; },
+                MENU_ITEM { command = EGlxCmdAddToAlbum; 
+                            txt = qtn_lgal_options_add_to_album; },
+                MENU_ITEM { command = EGlxCmdAddTag;
+                            txt = qtn_lgal_options_properties_add_tag; }
+                };
+  }
 
 RESOURCE MENU_PANE r_grid_ok_menu_album_gridview
-    {
-    items=
-        {
-        MENU_ITEM
-            {command = EGlxCmdDelete;
-            txt = qtn_lgal_options_delete;},
-        MENU_ITEM
-            {command = EAknUnmarkAll;
-            txt = qtn_options_list_unmark_all;},
-        MENU_ITEM
-            {command = EGlxCmdAddToAlbum;
-            txt = qtn_lgal_options_add_to_album;},
-        MENU_ITEM
-            {command = EGlxCmdAddTag;
-            txt = qtn_lgal_options_properties_add_tag;},
-        MENU_ITEM
-            {command = EGlxCmdRemoveFrom;
-            txt = qtn_lgal_options_remove_from_album;}
-        };
-    }
+  {
+        items=
+                {
+                MENU_ITEM { command = EGlxCmdDelete; 
+                            txt = qtn_lgal_options_delete; },
+                MENU_ITEM { command = EAknUnmarkAll;
+                            txt = qtn_options_list_unmark_all; },
+                MENU_ITEM { command = EGlxCmdAddToAlbum; 
+                            txt = qtn_lgal_options_add_to_album; },
+                MENU_ITEM { command = EGlxCmdAddTag;
+                            txt = qtn_lgal_options_properties_add_tag; }, 
+                MENU_ITEM { command = EGlxCmdRemoveFrom; 
+                            txt = qtn_lgal_options_remove_from_album; }
+                };
+  }
 
 RESOURCE MENU_PANE r_grid_ok_menu_tag_gridview
-    {
-    items=
-        {
-        MENU_ITEM
-            {command = EGlxCmdDelete;
-            txt = qtn_lgal_options_delete;},
-        MENU_ITEM
-            {command = EAknUnmarkAll;
-            txt = qtn_options_list_unmark_all;},
-        MENU_ITEM
-            {command = EGlxCmdAddToAlbum;
-            txt = qtn_lgal_options_add_to_album;},
-        MENU_ITEM
-            {command = EGlxCmdAddTag;
-            txt = qtn_lgal_options_properties_add_tag;},
-        MENU_ITEM
-            {command=EGlxCmdRemoveFrom;
-            txt=qtn_lgal_options_remove_from_tag;}
-        };
-    }
+  {
+        items=
+                {
+                MENU_ITEM { command = EGlxCmdDelete; 
+                            txt = qtn_lgal_options_delete; },
+                MENU_ITEM { command = EAknUnmarkAll;
+                            txt = qtn_options_list_unmark_all; },
+                MENU_ITEM { command = EGlxCmdAddToAlbum; 
+                            txt = qtn_lgal_options_add_to_album; },
+                MENU_ITEM { command = EGlxCmdAddTag;
+                            txt = qtn_lgal_options_properties_add_tag; }, 
+                MENU_ITEM { command=EGlxCmdRemoveFrom; 
+                            txt=qtn_lgal_options_remove_from_tag; }
+                };
+  }
 
 // ------------------------------------------------------------------------------------
 // Softkey resources
@@ -478,6 +435,7 @@
         };
     }
 
+
 RESOURCE CBA r_grid_softkeys_fullscreen
     {
     buttons =
@@ -505,7 +463,7 @@
 // ------------------------------------------------------------------------------------
 RESOURCE TBUF r_grid_empty_view_text
     {
-    buf = qtn_lgal_empty_grid_no_items;
+    buf = qtn_lgal_empty_grid_no_items; 
     }
 
 RESOURCE TBUF r_grid_empty_view_text_image
@@ -537,57 +495,57 @@
     items =
         {
         TBAR_CTRL
-            {
-            type = EAknCtButton;
-            id = EGlxCmdSlideshowPlay;
-            control = AVKON_BUTTON
-                {
-                flags = 0;
-                states =
-                    {
-                    AVKON_BUTTON_STATE
-                        {
-                        bmpfile = "z:\\Resource\\apps\\glxicons.mif";
-                        bmpid = EMbmGlxiconsQgn_indi_tb_slideshow;
-                        bmpmask = EMbmGlxiconsQgn_indi_tb_slideshow_mask;
-                        press_bmpid = EMbmGlxiconsQgn_indi_tb_slideshow;
-                        press_bmpmask = EMbmGlxiconsQgn_indi_tb_slideshow_mask;
-                        helptxt = qtn_lgal_tooltip_slideshow;
-                        }
-                    };
-                };
-            },
-        TBAR_CTRL
-            {
-            type = EAknCtButton;
-            id = EGlxCmdStartMultipleMarking;
-            control = AVKON_BUTTON
-                {
-                flags = 0;
-                states =
-                    {
-                    AVKON_BUTTON_STATE
-                        {
-                        bmpfile = "z:\\Resource\\apps\\glxicons.mif";
-                        bmpid = EMbmGlxiconsQgn_indi_cam4_tb_mark;
-                        bmpmask = EMbmGlxiconsQgn_indi_cam4_tb_mark_mask;
-                        press_bmpid = EMbmGlxiconsQgn_indi_cam4_tb_mark;
-                        press_bmpmask = EMbmGlxiconsQgn_indi_cam4_tb_mark_mask;
-                        helptxt = qtn_lgal_tooltip_mark_items;
-                        },
-                    AVKON_BUTTON_STATE
-                        {
-                        flags = KAknButtonStateHasLatchedFrame;
-                        bmpfile = "z:\\Resource\\apps\\glxicons.mif";
-                        bmpid = EMbmGlxiconsQgn_indi_tb_unmark;
-                        bmpmask = EMbmGlxiconsQgn_indi_tb_unmark_mask;
-                        press_bmpid = EMbmGlxiconsQgn_indi_tb_unmark;
-                        press_bmpmask = EMbmGlxiconsQgn_indi_tb_unmark_mask;
-                        helptxt = qtn_lgal_tooltip_unmark_all;
-                        }
-                    };
-                };
-            },
+              {
+              type = EAknCtButton;
+              id = EGlxCmdSlideshowPlay;
+              control = AVKON_BUTTON
+                  {
+                  flags = 0;
+                  states =
+                      {
+                      AVKON_BUTTON_STATE
+                          {
+                          bmpfile = "z:\\Resource\\apps\\glxicons.mif";
+                          bmpid = EMbmGlxiconsQgn_indi_tb_slideshow; 
+                          bmpmask = EMbmGlxiconsQgn_indi_tb_slideshow_mask;
+                          press_bmpid = EMbmGlxiconsQgn_indi_tb_slideshow;
+                          press_bmpmask = EMbmGlxiconsQgn_indi_tb_slideshow_mask;
+                          helptxt = qtn_lgal_tooltip_slideshow;
+                          }
+                      };
+                  };
+              },
+          TBAR_CTRL
+              {
+              type = EAknCtButton;
+              id = EGlxCmdStartMultipleMarking;
+              control = AVKON_BUTTON
+                  {
+                  flags = 0;
+                  states =
+                      {
+                      AVKON_BUTTON_STATE
+                          {
+                          bmpfile = "z:\\Resource\\apps\\glxicons.mif";
+                          bmpid = EMbmGlxiconsQgn_indi_cam4_tb_mark; 
+                          bmpmask = EMbmGlxiconsQgn_indi_cam4_tb_mark_mask;
+                          press_bmpid = EMbmGlxiconsQgn_indi_cam4_tb_mark;
+                          press_bmpmask = EMbmGlxiconsQgn_indi_cam4_tb_mark_mask;
+                          helptxt = qtn_lgal_tooltip_mark_items;
+                          },
+                      AVKON_BUTTON_STATE
+                          {
+                          flags = KAknButtonStateHasLatchedFrame;
+                          bmpfile = "z:\\Resource\\apps\\glxicons.mif";
+                          bmpid = EMbmGlxiconsQgn_indi_tb_unmark; 
+                          bmpmask = EMbmGlxiconsQgn_indi_tb_unmark_mask;
+                          press_bmpid = EMbmGlxiconsQgn_indi_tb_unmark;
+                          press_bmpmask = EMbmGlxiconsQgn_indi_tb_unmark_mask;
+                          helptxt = qtn_lgal_tooltip_unmark_all;
+                          }
+                      };
+                  };
+              },
         TBAR_CTRL
             {
             type = EAknCtButton;
@@ -624,7 +582,7 @@
                         bmpid = EMbmGlxicons1click_default_icon_active;
                         bmpmask = EMbmGlxicons1click_default_icon_active_mask;
                         press_bmpid = EMbmGlxicons1click_default_icon_active;
-                        press_bmpmask = EMbmGlxicons1click_default_icon_active_mask;
+                        press_bmpmask = EMbmGlxicons1click_default_icon_active_mask;                      
                         }
                     };
                 };
--- a/photosgallery/viewframework/texturemanager/group/glxtexturemanager.mmp	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/viewframework/texturemanager/group/glxtexturemanager.mmp	Wed Oct 13 14:32:09 2010 +0300
@@ -72,4 +72,5 @@
 LIBRARY         glximageviewermanager.lib
 LIBRARY         apgrfx.lib
 LIBRARY         apmime.lib
+LIBRARY         thumbnailmanager.lib
 // End of File
--- a/photosgallery/viewframework/texturemanager/inc/glxbitmapdecoderwrapper.h	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/viewframework/texturemanager/inc/glxbitmapdecoderwrapper.h	Wed Oct 13 14:32:09 2010 +0300
@@ -24,6 +24,12 @@
 // INCLUDE FILES
 #include<alf/alftimedvalue.h>
 #include <IclExtJpegApi.h>  // For CExtJpegDecoder
+// For decoding via TNM 
+#include <thumbnailmanager.h>
+#include <thumbnailmanagerobserver.h>
+#include <thumbnailobjectsource.h>
+#include <thumbnaildata.h>
+#include <glxmedia.h>
 
 /**
  * Observer interface used to be notified when texture bitmap   is completed.
@@ -42,7 +48,9 @@
  * this is a wrapper class, doesn't actually decode the images.
  */
 
-class CGlxBitmapDecoderWrapper: public CActive
+class CGlxBitmapDecoderWrapper: public CBase
+                               ,public MThumbnailManagerObserver
+    
     {
 public:
     /*This Enums specifies the state of the Decoding*/
@@ -72,7 +80,7 @@
      * @param aSourceFileName :contains the file name
      * @param aindex:contains the index value
      */
-    void DoDecodeImageL(const TDesC & aSourceFileName,TInt aIndex);
+    void DoDecodeImageL(const TGlxMedia& aMedia,TInt aIndex);
 
     /**
      * starts the decoding and updates the state of the decoding
@@ -83,14 +91,12 @@
      * @param aBytesRequested : Request for free memory in Bytes
      */
     TInt OOMRequestFreeMemoryL( TInt aBytesRequested);
+    /**
+     * Cancels all the pending requests and release resources
+     */
+    void CancelRequest();
 
-public:    
-    /**
-     * Standard Active object functions
-     */
-    virtual void RunL();
-    virtual void DoCancel();
-
+    
 private:
     /**
      * Constructor
@@ -101,33 +107,32 @@
      * Second-phase constuction 
      */
     void ConstructL(MGlxBitmapDecoderObserver* aObserver);
-    
     /**
-     * If the image format is non jpeg, then we need to calculate as per
-     * reduction factor and reduced size as what the decoder is going to return us
-     * This function returns if that needs to be done. 
+     * Gets Thumbnails from TNM. 
      */
-    TBool DoesMimeTypeNeedsRecalculateL();
-    
+    void GetThumbnailL( HBufC* aImagePath );
     /**
-     * Recalculate the size for png/bmp as decoder fails to 
-     * decode for desired size 
-     */
-    TSize ReCalculateSizeL();
+    *  From MThumbnailManagerObserver, not used
+    */
+    virtual void ThumbnailPreviewReady( MThumbnailData& aThumbnail, 
+                                TThumbnailRequestId aId );
+                                
+    /**
+    *  From MThumbnailManagerObserver
+    */  
+    virtual void ThumbnailReady( TInt aError, 
+                         MThumbnailData& aThumbnail, 
+                         TThumbnailRequestId aId );
 
 private:    
     /* Contains the TextureManagerImpl object,calls the HandleBitmapDecoded*/
     MGlxBitmapDecoderObserver* iObserver;
-    /*Specifies the Decoder */
-    CImageDecoder* iImageDecoder; // decoder from ICL API
     /*Contains the Thumbnail Index*/
     TInt iThumbnailIndex;
     /*Contains the Bitmap generated*/
     CFbsBitmap* iBitmap;
     /*contains the original size of the image*/
     TAlfRealSize iOriginalSize;
-    /*A handle to a file server session.*/ 
-    RFs iFs;
     /*To store the target image size*/
     TSize iTargetBitmapSize;
     /*To store the image uri path*/ 
@@ -136,6 +141,9 @@
     TTime iStartTime;
     TTime iStopTime;
 #endif
+
+    CThumbnailManager* iTnManager;
+    TThumbnailRequestId iTnReqId;
     };
 
 #endif //C_GLXBITMAPDECODERWRAPPER_H
--- a/photosgallery/viewframework/texturemanager/src/glxbitmapdecoderwrapper.cpp	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/viewframework/texturemanager/src/glxbitmapdecoderwrapper.cpp	Wed Oct 13 14:32:09 2010 +0300
@@ -41,8 +41,6 @@
     const TInt KGlxCriticalRAMForPhotos = 9056550;
     const TInt KGlxDecodeBitmapFactor = 3;
     
-    _LIT(KMimeJpeg,"image/jpeg");
-    _LIT(KMimeJpg,"image/jpg");
     }
 
 // ---------------------------------------------------------------------------
@@ -64,8 +62,7 @@
 // Constructor
 // ---------------------------------------------------------------------------
 //
-CGlxBitmapDecoderWrapper::CGlxBitmapDecoderWrapper() :
-    CActive(EPriorityLow)
+CGlxBitmapDecoderWrapper::CGlxBitmapDecoderWrapper()
     {
     TRACER("CGlxBitmapDecoderWrapper::CGlxBitmapDecoderWrapper()");
     }		
@@ -77,12 +74,16 @@
 CGlxBitmapDecoderWrapper::~CGlxBitmapDecoderWrapper()
     {
     TRACER("CGlxBitmapDecoderWrapper::~CGlxBitmapDecoderWrapper()");
-    iFs.Close();
-    Cancel();
-    if (iImageDecoder)
+    if (iTnManager)
         {
-        delete iImageDecoder;
-        iImageDecoder = NULL;
+        iTnManager->CancelRequest(iTnReqId);
+        delete iTnManager;
+        iTnManager = NULL;
+        }
+    if(iBitmap)
+        {
+        delete iBitmap;
+        iBitmap = NULL;
         }
     if (iImagePath)
         {
@@ -98,80 +99,31 @@
     {
     TRACER("CGlxBitmapDecoderWrapper::ConstructL ");
     iObserver = aObserver;
-    User::LeaveIfError(iFs.Connect());
-    CActiveScheduler::Add( this );
     }
 
 // ---------------------------------------------------------------------------
 // DoDecodeImageL
 // ---------------------------------------------------------------------------		
-void CGlxBitmapDecoderWrapper::DoDecodeImageL(const TDesC& aSourceFileName,
+void CGlxBitmapDecoderWrapper::DoDecodeImageL(const TGlxMedia& aMedia,
         TInt aIndex)
     {
     TRACER("CGlxBitmapDecoderWrapper::DoDecodeImageL()");
-    GLX_LOG_URI("CGlxBitmapDecoderWrapper::DoDecodeImageL(%S)",
-            &aSourceFileName);
 
     iThumbnailIndex = aIndex;
-
-#ifdef _DEBUG
-    iStartTime.HomeTime();
-#endif                          
-
-    if (iImageDecoder)
-        {
-        delete iImageDecoder;
-        iImageDecoder = NULL;
-        }
-
-    CImageDecoder::TOptions options =
-            (CImageDecoder::TOptions) (CImageDecoder::EOptionNoDither
-                    | CImageDecoder::EOptionAlwaysThread);
+    TSize originalDim;
+    aMedia.GetDimensions(originalDim);
+    iOriginalSize.iWidth = originalDim.iWidth;
+    iOriginalSize.iHeight = originalDim.iHeight;
 
-    // Use extended JPEG decoder
-    GLX_DEBUG1("DoDecodeImageL:: EHwImplementation" );
-    TRAPD( err, iImageDecoder = CExtJpegDecoder::FileNewL(
-                    CExtJpegDecoder::EHwImplementation, iFs,
-                    aSourceFileName, options ) );
-    GLX_DEBUG2("DoDecodeImageL:: EHwImplementation (%d)", err);
-    if (KErrNone != err)
-        {
-        TRAP(err,iImageDecoder = CExtJpegDecoder::FileNewL(
-                        CExtJpegDecoder::ESwImplementation, iFs,
-                        aSourceFileName, options ) );
-        GLX_DEBUG2("DoDecodeImageL:: ESwImplementation (%d)", err);
-        if (KErrNone != err)
-            {
-            GLX_DEBUG1("DoDecodeImageL::CImageDecoder");
-            // Not a JPEG - use standard decoder
-            iImageDecoder = CImageDecoder::FileNewL(iFs, aSourceFileName,
-                    options);
-            }
-        }
-#ifdef _DEBUG
-    iStopTime.HomeTime();
-    GLX_DEBUG2("*** Decoder Creation took <%d> us ***",
-            (TInt)iStopTime.MicroSecondsFrom(iStartTime).Int64());
-#endif                          
-
-    TSize imageSize = iImageDecoder->FrameInfo().iOverallSizeInPixels;
-    GLX_DEBUG3("GlxDecoderWrapper::DecodeImageL() - OverallSize: w=%d, h=%d",
-            imageSize.iWidth, imageSize.iHeight);
-    iOriginalSize.iWidth = imageSize.iWidth;
-    iOriginalSize.iHeight = imageSize.iHeight;
-
-    if (iBitmap)
-        {
-        delete iBitmap;
-        iBitmap = NULL;
-        }
-    
     if (iImagePath)
         {
         delete iImagePath;
         iImagePath = NULL;
         }
-    iImagePath = aSourceFileName.Alloc();
+
+    const TDesC& uri = aMedia.Uri();
+    GLX_LOG_URI("CGlxBitmapDecoderWrapper::DoDecodeImageL(%S)", &uri);
+    iImagePath = uri.Alloc();
     
     DecodeImageL();
     }
@@ -229,13 +181,8 @@
         if (minmemorytodecode < (freeMemory - KGlxCriticalRAMForPhotos))
             {
             GLX_DEBUG1("DecodeImageL:RAM available decoding image");            
-            iBitmap = new (ELeave) CFbsBitmap();
-            iBitmap->Create(ReCalculateSizeL(),
-                    iImageDecoder->FrameInfo().iFrameDisplayMode);
-#ifdef _DEBUG
-            iStartTime.HomeTime(); // Get home time
-#endif                          
-            iImageDecoder->Convert(&iStatus, *iBitmap);
+             
+            GetThumbnailL(iImagePath);
             }
         else
             {
@@ -257,77 +204,18 @@
             if (err != KErrNoMemory)
                 {
                 GLX_DEBUG1("DecodeImageL:Sufficient RAM available");                
-                iBitmap = new (ELeave) CFbsBitmap();
-                iBitmap->Create(ReCalculateSizeL(),
-                        iImageDecoder->FrameInfo().iFrameDisplayMode);
-#ifdef _DEBUG
-                iStartTime.HomeTime(); // Get home time
-#endif                          
-                iImageDecoder->Convert(&iStatus, *iBitmap);
+                GetThumbnailL(iImagePath);
                 }
             else
                 {
                 GLX_DEBUG1("NOT ENOUGH MEMORY - "
                         "Using the Fullscreen Thumbnail For Zoom");
-                //release the file held by decoder immediately.
-                iImageDecoder->Cancel();
-                delete iImageDecoder;
-                iImageDecoder = NULL;
                 //Inform the client that there is no decode happened and there we take care 
                 //of showing the fullscreen thumbnail.
                 iObserver->HandleBitmapDecodedL(iThumbnailIndex, NULL);
                 return;
                 }
             }
-
-        SetActive();
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// RunL
-// ---------------------------------------------------------------------------
-//
-void CGlxBitmapDecoderWrapper::RunL()
-    {
-    TRACER("CGlxBitmapDecoderWrapper::RunL()");
-    if( iStatus == KErrNone )
-        {
-        iObserver->HandleBitmapDecodedL(iThumbnailIndex,iBitmap);
-        iBitmap = NULL;
-
-        //release the file held by decoder immediately.
-        GLX_DEBUG1("CGlxBitmapDecoderWrapper::RunL:Decoding Finished");
-        iImageDecoder->Cancel();
-        delete iImageDecoder;
-        iImageDecoder = NULL;
-#ifdef _DEBUG
-        iStopTime.HomeTime();
-        GLX_DEBUG2("*** Image Decode took <%d> us ***", 
-                       (TInt)iStopTime.MicroSecondsFrom(iStartTime).Int64());            
-#endif                          
-
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// DoCancel
-// ---------------------------------------------------------------------------
-//
-void CGlxBitmapDecoderWrapper::DoCancel()
-    {
-    TRACER("CGlxBitmapDecoderWrapper::DoCancel ");
-    if(iImageDecoder)
-        {
-        GLX_DEBUG1("CGlxBitmapDecoderWrapper::DoCancel iImageDecoder delete");
-        iImageDecoder->Cancel();
-        delete iImageDecoder;
-        iImageDecoder = NULL;
-        }
-    if(iBitmap)
-        {
-        delete iBitmap;
-        iBitmap = NULL;
         }
     }
 
@@ -359,57 +247,89 @@
     }
 
 // -----------------------------------------------------------------------------
-// DoesMimeTypeNeedsRecalculateL()
+// CGlxBitmapDecoderWrapper::GetThumbnailL()
 // -----------------------------------------------------------------------------
 //
-TBool CGlxBitmapDecoderWrapper::DoesMimeTypeNeedsRecalculateL()
+void CGlxBitmapDecoderWrapper::GetThumbnailL( HBufC* aImagePath )
     {
-    TRACER("CGlxBitmapDecoderWrapper::DoesMimeTypeNeedsRecalculateL");
-    RApaLsSession session;
-    TDataType mimeType;
-    TUid uid;
+    TRACER("CGlxBitmapDecoderWrapper::GetThumbnailL");
+    if (!iTnManager)
+        {
+        iTnManager = CThumbnailManager::NewL(*this);
+        iTnManager->SetDisplayModeL(EColor16M);
+        }
 
-    User::LeaveIfError(session.Connect());
-    CleanupClosePushL(session);
-    User::LeaveIfError(session.AppForDocument(iImagePath->Des(), uid,
-            mimeType));
-    CleanupStack::PopAndDestroy(&session);
+    iTnManager->SetFlagsL(CThumbnailManager::EDefaultFlags);
+    iTnManager->SetThumbnailSizeL(iTargetBitmapSize);
+    iTnManager->SetQualityPreferenceL(CThumbnailManager::EOptimizeForQuality);
+    const TDesC& uri = aImagePath->Des();
+    GLX_LOG_URI("CGlxBitmapDecoderWrapper::GetThumbnailL: (%S)", aImagePath );
+    CThumbnailObjectSource* source = CThumbnailObjectSource::NewLC(uri, 0);
+#ifdef _DEBUG
+    iStartTime.HomeTime(); // Get home time
+#endif                          
+    iTnReqId = iTnManager->GetThumbnailL(*source);
+    CleanupStack::PopAndDestroy(source);
+    }
 
-    if (mimeType.Des().Compare(KMimeJpeg) == 0 || mimeType.Des().Compare(
-            KMimeJpg) == 0)
-        {
-        GLX_LOG_INFO("CGlxBitmapDecoderWrapper::DoesMimeTypeNeedsRecalculateL - jpeg");
-        return EFalse;
-        }
-    else
-        {
-        GLX_LOG_INFO("CGlxHdmiSurfaceUpdater::DoesMimeTypeNeedsRecalculateL - non jpeg");
-        return ETrue;
-        }
+// -----------------------------------------------------------------------------
+// CGlxBitmapDecoderWrapper::ThumbnailPreviewReady
+// From MThumbnailManagerObserver
+// -----------------------------------------------------------------------------
+//
+void CGlxBitmapDecoderWrapper::ThumbnailPreviewReady( MThumbnailData& /*aThumbnail*/, 
+                            TThumbnailRequestId /*aId*/ )
+    {
+    TRACER("CGlxBitmapDecoderWrapper::ThumbnailPreviewReady");    
     }
 
 // -----------------------------------------------------------------------------
-// ReCalculateSize 
+// CGlxBitmapDecoderWrapper::ThumbnailReady
+// From MThumbnailManagerObserver
 // -----------------------------------------------------------------------------
-TSize CGlxBitmapDecoderWrapper::ReCalculateSizeL()
+//                            
+void CGlxBitmapDecoderWrapper::ThumbnailReady( TInt aError, 
+                     MThumbnailData& aThumbnail, 
+                     TThumbnailRequestId /*aId*/ )
     {
-    TRACER("CGlxBitmapDecoderWrapper::ReCalculateSizeL()");
-    if (DoesMimeTypeNeedsRecalculateL())
+    TRACER("CGlxBitmapDecoderWrapper::ThumbnailReady");
+#ifdef _DEBUG
+    iStopTime.HomeTime();
+    GLX_DEBUG2("*** CGlxBitmapDecoderWrapper::ThumbnailReady() TNM took <%d> us to decode***",
+            (TInt)iStopTime.MicroSecondsFrom(iStartTime).Int64());
+#endif                          
+
+    if (aError == KErrNone)
         {
-        TSize fullFrameSize = iImageDecoder->FrameInfo().iOverallSizeInPixels;
-        // calculate the reduction factor on what size we need
-        TInt reductionFactor = iImageDecoder->ReductionFactor(fullFrameSize,
-                iTargetBitmapSize);
-        // get the reduced size onto destination size
-        TSize destSize;
-        User::LeaveIfError(iImageDecoder->ReducedSize(fullFrameSize,
-                reductionFactor, destSize));
-        GLX_LOG_INFO2("CGlxBitmapDecoderWrapper::ReCalculateSizeL() "
-                        "destSize=%d, %d",destSize.iWidth,destSize.iHeight);
-        return destSize;
+        if (iBitmap)
+            {
+            delete iBitmap;
+            iBitmap = NULL;
+            }
+        iBitmap = aThumbnail.DetachBitmap();
+        iObserver->HandleBitmapDecodedL(iThumbnailIndex, iBitmap);
+        iBitmap = NULL;
+		}
+    }
+
+// -----------------------------------------------------------------------------
+// CGlxBitmapDecoderWrapper::CancelRequest()
+// Cancels all the pending requests and release resources
+// -----------------------------------------------------------------------------
+//
+void CGlxBitmapDecoderWrapper::CancelRequest()
+    {
+    TRACER("CGlxBitmapDecoderWrapper::CancelRequest");
+    if (iTnManager)
+        {
+        iTnManager->CancelRequest(iTnReqId);
+        delete iTnManager;
+        iTnManager = NULL;
         }
-    else
+
+    if (iBitmap)
         {
-        return iTargetBitmapSize;
+        delete iBitmap;
+        iBitmap = NULL;
         }
     }
--- a/photosgallery/viewframework/texturemanager/src/glxtexturemanagerimpl.cpp	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/viewframework/texturemanager/src/glxtexturemanagerimpl.cpp	Wed Oct 13 14:32:09 2010 +0300
@@ -518,7 +518,7 @@
     GLX_LOG_INFO1("CGlxTextureManagerImpl RemoveZoomList  Count()=%d",count);
 	if(iZoomDecoder)
       {
-       iZoomDecoder->Cancel();
+      iZoomDecoder->CancelRequest();
       }
     for(TInt i = count - 1; i >= 0; i--)
         {
@@ -859,7 +859,7 @@
 	iZoomedList[index].iBitmap=NULL;
 	iZoomedList[index].iObserver = aObserver ;  
 
-	iZoomDecoder->DoDecodeImageL(aMedia.Uri(), iZoomedList.Count()-1);
+	iZoomDecoder->DoDecodeImageL(aMedia,iZoomedList.Count()-1);
 	return *(iZoomedList[index].iTexture);
     }
 
--- a/photosgallery/viewframework/tvout/src/glxhdmicontroller.cpp	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/viewframework/tvout/src/glxhdmicontroller.cpp	Wed Oct 13 14:32:09 2010 +0300
@@ -161,7 +161,7 @@
     {
     TRACER("CGlxHdmiController::ShiftToPostingMode()");
     iIsPhotosInForeground = ETrue;
-    if (iGlxTvOut->IsHDMIConnected() && iIsImageSupported)
+    if (iGlxTvOut->IsHDMIConnected())
         {
         if (!iSurfaceUpdater)
             {
--- a/photosgallery/viewframework/tvout/src/glxhdmisurfaceupdater.cpp	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/viewframework/tvout/src/glxhdmisurfaceupdater.cpp	Wed Oct 13 14:32:09 2010 +0300
@@ -71,9 +71,6 @@
     TRAP_IGNORE(iDecoderObserver.HandleHDMIDecodingEventL(EHdmiDisconnected));
 
     ReleaseContent();
-
-    delete iNextImagePath;
-
     if (iWindow)
         {
         iWindow->RemoveBackgroundSurface(ETrue);
@@ -83,8 +80,11 @@
         iTimer->Cancel();
         }
     delete iTimer;
-    delete iGlxDecoderAO;
-    delete iSurfBufferAO;
+    if (iGlxDecoderAO)
+        {
+        delete iGlxDecoderAO;
+        }
+    iGlxDecoderAO = NULL;
     iFsSession.Close();
     if (iSurfManager)
         {
@@ -99,6 +99,7 @@
             iSurfChunk->Close();
             }
         delete iSurfChunk;
+        iSurfChunk = NULL;
         GLX_LOG_INFO(
                 "CGlxHdmiSurfaceUpdater::~CGlxHdmiSurfaceUpdater(). iSurfManager->CloseSurface()");
         iSurfManager->CloseSurface(iSurfId);
@@ -106,6 +107,7 @@
                 "CGlxHdmiSurfaceUpdater::~CGlxHdmiSurfaceUpdater(). iSurfManager->Close()");
         iSurfManager->Close();
         delete iSurfManager;
+        iSurfManager = NULL;
         }
     }
 
@@ -236,9 +238,6 @@
         const TDesC& aNextImageFile, CFbsBitmap* aFsBitmap)
     {
     TRACER("CGlxHdmiSurfaceUpdater::UpdateNewImageL()");
-    delete iNextImagePath;
-    iNextImagePath = NULL;
-
     if (!aImageFile.CompareC(*iImagePath) && !iDecodingCurrent
             && !iDecodingNext)
         {
@@ -269,6 +268,11 @@
     else
         {
         ReleaseContent();
+		if (iNextImagePath)
+			{
+			delete iNextImagePath;
+			iNextImagePath = NULL;
+			}
 		// Ongoing decoding is cancelled if any,reset the decoding flags. 
 		iDecodingNext = EFalse;
 		iDecodingCurrent = EFalse;
@@ -1000,8 +1004,11 @@
     TRACER("CGlxHdmiSurfaceUpdater::DecodeNextImageL()");
     ReleaseContent();
     iImagePath = iNextImagePath->Alloc();
-    delete iNextImagePath;
-    iNextImagePath = NULL;
+    if (iNextImagePath)
+        {
+        delete iNextImagePath;
+        iNextImagePath = NULL;
+        }
     iIsNonJpeg = EFalse;
     GLX_LOG_INFO("Before - iWindow->Size()");
     iTvScreenSize = iWindow->Size();
--- a/photosgallery/viewframework/uiutilities/data/glxuiutilities.rss	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/viewframework/uiutilities/data/glxuiutilities.rss	Wed Oct 13 14:32:09 2010 +0300
@@ -297,15 +297,17 @@
         DLG_LINE
             {
             type = EAknCtQuery;
-            id = EGeneralQuery;
+            id = EAknCtQuery;
             control = AVKON_DATA_QUERY
                 {
-                layout = EDataLayout;
-                control=EDWIN
-                    {
-                    maxlength = 40; // KMaxMediaPopupTextLength
-                    lines = 1;
-                    };
+                    layout = EDataLayout;
+                    control=EDWIN
+                        {
+                        flags = EEikEdwinAutoSelection | KSingleLineHorizontalScrollingEditorFlags;
+                        maxlength = 128; // KMGXMaxFileName
+                        lines = 1;
+                        avkon_flags = EAknEditorFlagNoT9;
+                        };
                 };
             }
         };
@@ -854,15 +856,3 @@
             }
         };
     }
-
-//resource for image viewer deletion failure note
-RESOURCE TBUF r_glx_deletion_failure_note
-    { 
-    buf = qtn_fldr_cant_delete_item; 
-    }
-
-//resource for illegal characters in file name note
-RESOURCE TBUF r_glx_qtn_fldr_illegal_characters
-    { 
-    buf = qtn_fldr_illegal_characters; 
-    }
--- a/photosgallery/viewframework/uiutilities/group/glxuiutilities.mmp	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/viewframework/uiutilities/group/glxuiutilities.mmp	Wed Oct 13 14:32:09 2010 +0300
@@ -118,8 +118,7 @@
 LIBRARY         libstdcpp.lib
 LIBRARY         flogger.lib
 //LIBRARY       hgcontextutility.lib 					// For Teleport
-LIBRARY         akntransitionutils.lib
-LIBRARY         goommonitor.lib      //For GOOM
-LIBRARY         platformenv.lib      //For DriveInfo
+LIBRARY		akntransitionutils.lib
+LIBRARY		goommonitor.lib      //For GOOM
 
 // End of File
--- a/photosgallery/viewframework/uiutilities/inc/glxmmcnotifier.h	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/viewframework/uiutilities/inc/glxmmcnotifier.h	Wed Oct 13 14:32:09 2010 +0300
@@ -90,11 +90,6 @@
      * MMC state
      */
     TGlxMMCState istate;
-    
-    /**
-     * Default Memory Card drive identifier specified by TDriveNumber 
-     */
-    TInt iDefaultMemoryCardDrive;
     };
 
 #endif /* GLXMMCNOTIFIER_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/photosgallery/viewframework/uiutilities/inc/glxvisualutilities.h	Wed Oct 13 14:32:09 2010 +0300
@@ -0,0 +1,49 @@
+/*
+* 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:    Alf visual utilities
+*
+*/
+
+
+
+
+#ifndef __GLXVISUALUTILITIES_H__
+#define __GLXVISUALUTILITIES_H__
+
+// EXTERNAL HEADERS
+#include <e32std.h>
+
+// FORWARD DECLARES
+class CHuiVisual;
+class CHuiControl;
+
+/**
+ * Namespace to hold the CHuiVisual related algorithms.
+ *
+ * @author Kimmo Hoikka
+ * @lib glxhuiutils.lib
+ */
+namespace NGlxVisualUtilities
+    {
+    /**
+     * Method to transfer the ownership of CHuiVisuals to a new CHuiControl.
+     * In case of a Leave the ownership is held in the old owner so the ownership transfer
+     * succeeds either completely or not at all.
+     * @param aVisual reference to the topmost visual in the hierarchy
+     * @param aNewParent the new parent to be applied to all visuals in the hierarchy
+     */
+    IMPORT_C void TransferVisualsL( CHuiVisual& aVisual, CHuiControl& aNewParent );
+    }
+
+#endif // __GLXVISUALUTILITIES_H__
--- a/photosgallery/viewframework/uiutilities/src/glxmmcnotifier.cpp	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/viewframework/uiutilities/src/glxmmcnotifier.cpp	Wed Oct 13 14:32:09 2010 +0300
@@ -18,7 +18,7 @@
 
 #include <glxtracer.h>
 #include <glxlog.h>
-#include <driveinfo.h>
+
 #include "glxmmcnotifier.h"
 
 // ---------------------------------------------------------
@@ -92,11 +92,6 @@
     TRACER("CGlxMMCNotifier::ConstructL()");
     TInt err = iFs.Connect();
     GLX_LOG_INFO1("CGlxMMCNotifier::ConstructL iFs.Connect err %d",err );
-
-    User::LeaveIfError(DriveInfo::GetDefaultDrive(
-            DriveInfo::EDefaultRemovableMassStorage, iDefaultMemoryCardDrive));
-    GLX_LOG_INFO1("CGlxMMCNotifier::ConstructL iFs.Connect iDrive %d",
-			 iDefaultMemoryCardDrive );
     IssueRequest();
     }
 
@@ -119,13 +114,11 @@
     TRACER("CGlxMMCNotifier::RunL()");
     TDriveInfo driveInfo;
     // Get the drive info for memory card     
-    TInt err = iFs.Drive(driveInfo, iDefaultMemoryCardDrive);
-    GLX_LOG_INFO1("CGlxMMCNotifier::RunL driveInfo err=%d", err);
-    if (err == KErrNone && (driveInfo.iDriveAtt & KDriveAttRemovable))
-        {
-        GLX_LOG_INFO1("CGlxMMCNotifier::RunL driveInfo.iDriveAtt=%d",
-                driveInfo.iDriveAtt);
-        switch (driveInfo.iType)
+    TInt err = iFs.Drive( driveInfo, EDriveF );
+    GLX_LOG_INFO1("CGlxMMCNotifier::RunL err %d",err );
+    if( err == KErrNone )      
+        {      
+        switch( driveInfo.iType )        
             {        
             case EMediaNotPresent:          
                 {          
--- a/photosgallery/viewframework/uiutilities/src/glxprogressindicator.cpp	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/viewframework/uiutilities/src/glxprogressindicator.cpp	Wed Oct 13 14:32:09 2010 +0300
@@ -179,6 +179,7 @@
     else
         {
         iProgressDialog->ProcessFinishedL();
+        iGlxGridViewNotifyObserver.HandleDialogDismissedL();
         if (iProgressDialog)
             {
             iProgressDialog = NULL;
@@ -222,7 +223,6 @@
         }
     iProgressDialog = NULL;
     iProgressInfo = NULL;
-    iGlxGridViewNotifyObserver.HandleDialogDismissedL();
     }
 
 // -----------------------------------------------------------------------------
--- a/photosgallery/viewframework/uiutilities/src/glxtextentrypopup.cpp	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/viewframework/uiutilities/src/glxtextentrypopup.cpp	Wed Oct 13 14:32:09 2010 +0300
@@ -122,9 +122,8 @@
     else
 	    {
 	    uiUtility->SetAppOrientationL( EGlxOrientationTextEntry );
-	    }
-    // Enable predictiveTextInput option in the query dialog!       
-    SetPredictiveTextInputPermitted( ETrue ); 
+	    }       
+      
     TInt retVal = CAknTextQueryDialog::ExecuteLD(R_GLX_TEXT_ENTRY_QUERY);
 
     CleanupStack::PopAndDestroy( &rollbackState ); // cleanupItem
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/photosgallery/viewframework/uiutilities/src/glxvisualutilities.cpp	Wed Oct 13 14:32:09 2010 +0300
@@ -0,0 +1,167 @@
+/*
+* 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:    ALF visual utilities
+*
+*/
+
+
+
+
+// CLASS HEADER
+#include "glxvisualutilities.h"
+
+// EXTERNAL HEADERS
+#include <uiacceltk/huicontrol.h>
+#include <uiacceltk/huivisual.h>
+
+namespace NGlxVisualUtilities
+    {
+    /**
+     * TGlxVisualTransferCleanup
+     * This class handles the awkward situation in visual ownership transfer
+     * that some of the visuals are transferred to new parent and a leave occurs.
+     * In leave case we need to undo the ownership transfer completely.
+     * This class also removes the ownership from the old control in case
+     * there was no leave.
+     * @usage:
+     * \code
+     *      RArray<CHuiVisual*> allvisuals;
+     *      TGlxVisualTransferCleanup cleanup( allvisuals );
+     *       // set the parent to remove from to be the new one
+     *      cleanup.iParentToRemoveFrom = aNewParent;
+     *      CleanupClosePushL( cleanup );
+     *      // start to append the visuals to the new parent
+     *      // in case of leave they are removed from new parent
+     *      RecurseAndTransferVisualsL( visualcleanup, aVisual, aNewParent );
+     *      // set the parent to remove to be the old one
+     *      cleanup.iParentToRemoveFrom = oldParent;
+     *      // remove the item from cleanupstack,
+     *      // this removes the visuals from their old parent 
+     *      CleanupStack::PopAndDestroy( &cleanup );
+     * \endcode
+     */
+    NONSHARABLE_CLASS( TGlxVisualTransferCleanup )
+    	{
+    	public:
+
+            /**
+    		 * Constructor.
+    		 * @param aArray, the array of Visuals 
+    		 * @param aOldParent, the old parent of visuals
+    		 * @param aNewParent, the new parent for visuals
+    		 */
+    		inline TGlxVisualTransferCleanup( 
+                RArray<CHuiVisual*>& aArray )
+                : iArray( aArray )
+    			{
+                }
+
+            /**
+             * Close. Put this class to Cleanupstack with 
+             * CleanupClosePushL so that this gets called in case of a leave
+             */
+            inline void Close()
+                {
+                // need to remove all visuals from the given parent
+                // loop through all the CHuiVisuals
+                for( TInt i = 0; i < iArray.Count(); ++i )
+                    {
+                    // remove from the given parent
+                    iParentToRemoveFrom->Remove( iArray[ i ] );
+                    }
+                // reset the array
+                iArray.Reset();
+                }
+
+            /// Ref: the parent where to remove
+            MHuiVisualOwner* iParentToRemoveFrom;
+
+        private: // Implementation
+
+            /// Ref: the array containing all the visuals
+            RArray<CHuiVisual*>& iArray; 
+
+    	};
+
+    /**
+     * Recursive helper method to transfer the ownership of visuals
+     * @param aVisualCleanup an array containing all visuals in the hierarchy
+     * @param aVisual the visual to move to new control
+     * @param aNewParent the new parent for the visual
+     */
+    void RecurseAndTransferVisualsL(
+        RArray<CHuiVisual*>& aVisualCleanup,
+        CHuiVisual& aVisual, CHuiControl& aNewParent )
+        {
+        // make room to the pointer so that we always succeed in appending
+        // Note that we need to make room for one new item, thus count + 1
+        aVisualCleanup.ReserveL( aVisualCleanup.Count() + 1 );
+        // append us to the new parent, Note that for a while we are
+        // owner by two controls but thats not a problem as the other parent 
+        // is removed by either TGlxVisualTransferCleanup.Close() by CleanupStack
+        // or destructor of TGlxVisualTransferCleanup and there is no other way
+        // of getting out from this method (of course panic is ;)
+        aNewParent.AppendL( &aVisual );
+        // add us in the cleanuparray so that we can be removed from the 
+        // new parent in case some of the following AppendLs leave
+        // this does not fail as reserve was called so no AppendL needed
+        aVisualCleanup.Append( &aVisual );
+        // check if the visual has childs
+        TInt childCount = aVisual.Count();
+        // transfer all the childs
+        while( childCount-- > 0 )
+            {
+            // get the child
+            CHuiVisual& childVisual = aVisual.Visual( childCount );
+            // call transfer recursively on the child
+            RecurseAndTransferVisualsL( 
+                aVisualCleanup, childVisual, aNewParent );
+            }
+        }
+
+    // -------------------------------------------------------------------------
+	// TransferVisualsL
+	// -------------------------------------------------------------------------
+    EXPORT_C void TransferVisualsL( 
+        CHuiVisual& aVisual, CHuiControl& aNewParent )
+        {
+        // check if parent is already correct
+        if( &( aVisual.Owner() ) == 
+            static_cast< MHuiVisualOwner* >( &aNewParent ) )
+            {
+            // nothing else to be done
+            return;
+            }
+        // create an array for visual pointers on the stack
+        RArray< CHuiVisual* > visualcleanup;
+        // create the cleanup item from stack as well
+        TGlxVisualTransferCleanup removeParent( visualcleanup );
+        // set the parent to remove from to be the new one
+        removeParent.iParentToRemoveFrom = &aNewParent;
+        // need to remember the old parent
+        MHuiVisualOwner* oldParent = &( aVisual.Owner() );
+        // put it to cleanupstack so that close gets called in case of leave
+        CleanupClosePushL( removeParent );
+        // run the recursive loop, if it leaves the visuals are removed from
+        // new parent by the Close method of cleanParents
+        RecurseAndTransferVisualsL( visualcleanup, aVisual, aNewParent );
+        // set the parent to remove to be the old one
+        removeParent.iParentToRemoveFrom = oldParent;
+        // remove the item from cleanupstack,
+        // this removes the visuals from the old parent 
+        CleanupStack::PopAndDestroy( &removeParent );
+        // close the array
+        visualcleanup.Close();
+        }
+    }
--- a/photosgallery/viewframework/views/cloudview/group/glxcloudview.mmp	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/viewframework/views/cloudview/group/glxcloudview.mmp	Wed Oct 13 14:32:09 2010 +0300
@@ -84,6 +84,4 @@
 LIBRARY		charconv.lib         // For UtfConverter
 LIBRARY         commonengine.lib
 LIBRARY 	gfxtrans.lib
-LIBRARY		alfdecoderserverclient.lib //For CAlfEffectObserver
-LIBRARY		akntransitionutils.lib //For CAknTransitionUtils
 // End of File
\ No newline at end of file
--- a/photosgallery/viewframework/views/cloudview/inc/glxcloudviewcontrol.h	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/viewframework/views/cloudview/inc/glxcloudviewcontrol.h	Wed Oct 13 14:32:09 2010 +0300
@@ -365,17 +365,17 @@
 	 **/
     void SetFocusColor();
     
-    /** 
-     * Resets focused item color
-     **/
-    void ResetFocusColor();
     
-    /**
-     *  Set the focus to first visible item
-     *  in the current view position
-     */
-    void SetFocusToFirstVisibleItemL();
-
+    /** 
+	 * Set the middle point of the infobuble
+	 **/
+    void SetBubleMidPoint(TPoint& aMidPoint);
+  
+   /** 
+	 * Create the infobublecontainer
+	 **/  
+    void CreateBubleContainer();
+    
    /** 
 	 * Move the viewport up depending on the condition
 	 *
@@ -387,6 +387,11 @@
 	 **/  
     void MoveDownIfRequired();
 
+    /** 
+	 * calculate the mid point of the bubble
+	 **/
+    void CalculateBubleMidPoint();
+	 
 public:
 
 	void HandleItemAddedL(TInt aStartIndex, TInt aEndIndex,
@@ -555,6 +560,9 @@
 	// FocusIndex keeps track of the focussed row 
 	TInt iFocusRowIndex;
 
+	// EndRowindex keeps track of the end row 
+	TInt iEndRowIndex;
+
 	//keeps track of the end row 
 	TInt iLayoutIndex;
 
@@ -645,9 +653,6 @@
 
     /**flag to identify the next down event */
     TBool iDownEventReceived;
-    
-    // Flag to show Alf visual focus
-    TBool iShowFocus;
 	};
 
 #endif // C_GLXCLOUDVIEWCONTROL_H
--- a/photosgallery/viewframework/views/cloudview/inc/glxcloudviewimp.h	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/viewframework/views/cloudview/inc/glxcloudviewimp.h	Wed Oct 13 14:32:09 2010 +0300
@@ -32,7 +32,6 @@
 
 #include "glxtagscontextmenucontrol.h"  // MGlxItemMenuObserver
 #include "glxmmcnotifier.h"
-#include <alf/alfcompositionutility.h> // MAlfEffectObserver
 
 // FORWARD DECLARATIONS
 class CGlxCloudViewControl;
@@ -55,8 +54,7 @@
 									public MGlxEnterKeyEventObserver,
 									public MGlxCloudViewLayoutObserver,
 									public MGlxItemMenuObserver,
-									public MStorageNotifierObserver,
-									public CAlfEffectObserver::MAlfEffectObserver
+									public MStorageNotifierObserver
 	{
 public:
 
@@ -122,9 +120,6 @@
 	 * @param aCommand command to be handled
 	 */
 	void HandleGridMenuListL(TInt aCommand);
-public://From MAlfEffectObserver
-	void HandleEffectCallback(TInt aType, TInt aHandle, TInt aStatus);
-	
 public:    
     void HandleForegroundEventL(TBool aForeground); 
 	
@@ -263,11 +258,6 @@
 	CGlxMMCNotifier* iMMCNotifier;
 	
 	TBool iMMCState;
-	
-	//For Alf Effects
-	CAlfEffectObserver* iAlfEffectObs;
-	TInt iEffectHandle;
-		
 	};
 }
 #endif // C_GLXTESTTILEVIEWIMP_H
--- a/photosgallery/viewframework/views/cloudview/inc/glxtagscontextmenucontrol.h	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/viewframework/views/cloudview/inc/glxtagscontextmenucontrol.h	Wed Oct 13 14:32:09 2010 +0300
@@ -37,7 +37,7 @@
      * To Handle menu items in Grid layout
      * @param aCommand command to be handled
      */
-    virtual void HandleGridMenuListL(TInt aCommand = 0) = 0;
+    virtual void HandleGridMenuListL(TInt aCommand) = 0;
     };
 
 class CGlxTagsContextMenuControl : public CAlfControl,
--- a/photosgallery/viewframework/views/cloudview/src/glxcloudviewcontrol.cpp	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/viewframework/views/cloudview/src/glxcloudviewcontrol.cpp	Wed Oct 13 14:32:09 2010 +0300
@@ -44,6 +44,7 @@
 #include <glxattributecontext.h> //attribute context
 #include <mglxmedialist.h> //for medialist
 
+#include "glxcontainerinfobubble.h" //intelligent class for data of infobubble
 #include "glxcloudview.hrh"
 #include "mglxcloudviewmskobserver.h" // For Msk Observer
 #include "mglxenterkeyeventobserver.h" // For enterkey observer
@@ -61,7 +62,7 @@
 const TInt KRowHeight = 72;
 const TInt KLeftMargin = 10;
 const TInt KNumMinRowSpace = 2;
-const TInt KColSpace = 30;
+const TInt KColSpace = 20;
 const TInt KRightmargin = 10;//Aligning Right margin
 const TInt KMinTagSize = 77;
 const TInt KTagScreenHeight = 460;
@@ -198,6 +199,8 @@
 
         if ( iLabels.Count ()==listCount && iAttributeContext->RequestCountL (&iMediaList)==0)
             {
+            //if we navigate in forward direction, first item should be highlighted.if we are navigating in
+            // backwards direction, index is not necessarily zero, it will be restored.
             if ( iUiUtility->ViewNavigationDirection ()== EGlxNavigationForwards && iMediaList.Count ())
                 {
                 iMediaList.SetFocusL (NGlxListDefs::EAbsolute, 0);
@@ -209,7 +212,6 @@
     iTouchFeedback = MTouchFeedback::Instance(); 
     iPhysics = CAknPhysics::NewL(*this, NULL);
     InitPhysicsL();
-    iShowFocus = EFalse;
     }
 
 
@@ -240,6 +242,7 @@
 // --------------------------------------------------------------------------- 
 //
 CGlxCloudViewControl::~CGlxCloudViewControl()
+
     {
     TRACER("GLX_CLOUD::CGlxCloudViewControl::~CGlxCloudViewControl");
     iCloudInfo.Close ();
@@ -269,23 +272,20 @@
 TInt CGlxCloudViewControl::LayoutVisibleRows(TPoint aStartPoint,TInt aRowStartIndex
         , TInt aRowEndIndex)
     {
-    TRACER("CGlxCloudViewControl::LayoutVisibleRows");
+    TRACER("GLX_CLOUD::CGlxCloudViewControl::DrawRow");
     TSize vsize;
     TPoint tl, br;
     tl = aStartPoint;
-    br.iX = 0;
     br.iY = tl.iY + KRowHeight;
-    const TInt KMaxScreenWidth = iTagScreenWidth - iScrollPaneHandle.iW;
     //drawing in reverse for arabic hebrew support
     if ( GlxGeneralUiUtilities::LayoutIsMirrored ())
         {
-		GLX_LOG_INFO("Mirrorred Layout");
-		//In Mirrored layout, 'BottomRight' considers scrollpane width for each row
-        br.iX =  aStartPoint.iX  - iScrollPaneHandle.iW;
+        br.iX =  aStartPoint.iX; 
+        const TInt KMaxScreenWidth = iTagScreenWidth - iScrollPaneHandle.iW;
         //Set the positions of tags in a row.
         for (TInt j = aRowStartIndex; j <= aRowEndIndex; j++)
             {
-            vsize = iLabels[j]->TextExtents();
+            vsize = iLabels[j]->TextExtents ();
             if ( vsize.iWidth < KMinTagSize )
                 {
                 vsize.iWidth = KMinTagSize;
@@ -295,15 +295,15 @@
                 {
                 TAlfRealSize tagSize( KMaxScreenWidth, br.iY );
                 iLabels[j]->SetWrapping( CAlfTextVisual::ELineWrapTruncate );
+                vsize = iLabels[j]->TextExtents ();
                 tl.iX -= aStartPoint.iX;
                 tl.iY = aStartPoint.iY;
                 br.iX = tagSize.iWidth;              
                 }
             else
                 {
-				tl.iX = br.iX - vsize.iWidth;
+                tl.iX -= (vsize.iWidth + KColSpace);
                 }
-            
             //Set the anchor points for the tags 	            	        
             iLayout->SetAnchor (EAlfAnchorTopLeft, iLayoutIndex,
                     EAlfAnchorOriginLeft, EAlfAnchorOriginTop,
@@ -313,17 +313,17 @@
                     EAlfAnchorOriginLeft, EAlfAnchorOriginTop,
                     EAlfAnchorMetricAbsolute, EAlfAnchorMetricAbsolute,
                     TAlfTimedPoint (br.iX, br.iY));
-            //Bottom-Right corner for next tag in same row
             br.iX -= (vsize.iWidth + KColSpace); 
             iLayoutIndex += 1;
             }
+
         }
     else
         {
-		GLX_LOG_INFO("NOT Mirrorred Layout");
+        const TInt KMaxScreenWidth = iTagScreenWidth - iScrollPaneHandle.iW;
         for (TInt j = aRowStartIndex; j <= aRowEndIndex; j++)
             {
-            vsize = iLabels[j]->TextExtents();
+            vsize = iLabels[j]->TextExtents ();
             if( vsize.iWidth < KMinTagSize )
                 {
                 vsize.iWidth = KMinTagSize;
@@ -331,6 +331,7 @@
             if (vsize.iWidth > KMaxScreenWidth)
                 {
                 TAlfRealSize tagSize( KMaxScreenWidth, br.iY );
+                TAlfRealPoint startPos( aStartPoint.iX, 0 );
                 iLabels[j]->SetWrapping( CAlfTextVisual::ELineWrapTruncate );
                 tl.iX = aStartPoint.iX;
                 tl.iY = aStartPoint.iY;
@@ -338,9 +339,8 @@
                 }
             else
                 {
-                br.iX = tl.iX + vsize.iWidth;
+                br.iX += vsize.iWidth + KColSpace;
                 }
-            
             iLayout->SetAnchor (EAlfAnchorTopLeft, iLayoutIndex,
                     EAlfAnchorOriginLeft, EAlfAnchorOriginTop,
                     EAlfAnchorMetricAbsolute, EAlfAnchorMetricAbsolute,
@@ -349,21 +349,22 @@
                     EAlfAnchorOriginLeft, EAlfAnchorOriginTop,
                     EAlfAnchorMetricAbsolute, EAlfAnchorMetricAbsolute,
                     TAlfTimedPoint (br.iX, br.iY));
-            //Top-Left Corner for next tag in same row
-            tl.iX += (vsize.iWidth + KColSpace);
+            tl.iX = br.iX;
             iLayoutIndex += 1;
             }
         }
     return 0;
     }
 
+
+
+
 // --------------------------------------------------------------------------- 
 // LayoutVisibleArea()
 // 
 // ---------------------------------------------------------------------------
 void CGlxCloudViewControl::LayoutVisibleArea()
     {
-	TRACER("CGlxCloudViewControl::LayoutVisibleArea");
     //screen height for boundary check:how many rows fit in.
     //find out how many rows can fit in.
     //add upper and lower margin spacing 5 pixels
@@ -376,13 +377,13 @@
         {
         startpoint.iX = iTagScreenWidth - KRightmargin;        
         }
-    //else start from beginning
+
+    //else start from biginning
     else
         {
         startpoint.iX = KLeftMargin;
         }
         startpoint.iY = KNumMinRowSpace;
-    
     //associate the active visuals with anchor layout
     GLX_LOG_INFO("GLX_CLOUD ::CGlxCloudViewControl::::LayoutVisibleArea Layout reset");
     GLX_LOG_INFO1("GLX_CLOUD ::CGlxCloudViewControl::::LayoutVisibleArea layout Count after reset  %d ", iLayout->Count ());
@@ -393,6 +394,7 @@
         {
         GLX_LOG_INFO("GLX_CLOUD ::CGlxCloudViewControl::::FindEndRowIndex Entering layout append");
 
+
         TAlfTimedValue opacity;
         opacity.SetValueNow(1.0); // immediate change
         iLabels[j]->SetOpacity(opacity);
@@ -401,14 +403,16 @@
     GLX_LOG_INFO("GLX_CLOUD ::CGlxCloudViewControl::::LayoutVisibleArea Exiting layout append");
     iLayoutIndex = 0;
     GLX_LOG_INFO1("GLX_CLOUD ::CGlxCloudViewControl::::LayoutVisibleArea layout Count realloc  %d ", iLayout->Count ());
-    TInt totalHeight = 0;
-    for (TInt j = 0; j <= iCloudInfo.Count() - 1; j++)
+    for (TInt j = 0; j <= iEndRowIndex; j++)
         {
         GLX_LOG_INFO1("GLX_CLOUD ::CGlxCloudViewControl::::LayoutVisibleArea Drawing row started  %d ", j);
         LayoutVisibleRows (startpoint,iCloudInfo[j].iStartIndex, 
                 iCloudInfo[j].iEndIndex);
         startpoint.iY += KRowHeight + KNumMinRowSpace;		
-
+        }
+    TInt totalHeight = 0;
+    for (TInt j = 0; j <= iCloudInfo.Count()-1; j++)
+        {
         totalHeight+=KRowHeight;
         totalHeight+=KNumMinRowSpace;
         }
@@ -443,7 +447,9 @@
                 iScrollEventData.mViewLength,
                 0);
         DisplayScrollBar();
-        }   	
+        }
+    //constructing the bubblecontainer
+    CreateBubleContainer();   	
 
     iLayout->UpdateChildrenLayout (); //update layout
 
@@ -452,191 +458,156 @@
     MoveDownIfRequired();
     }
 
+
 // --------------------------------------------------------------------------- 
 // OfferEventL()
 // --------------------------------------------------------------------------- 
 //
 TBool CGlxCloudViewControl::OfferEventL(const TAlfEvent &aEvent)
-    {
-    TRACER("GLX_CLOUD:: CGlxCloudViewControl::OfferEventL");
+    {   TRACER("GLX_CLOUD:: CGlxCloudViewControl::OfferEventL");
 
     //check if key inputs needs handling
     TBool consumed = EFalse;
-    if (iLabels.Count() == 0)
+    if ( ( iLabels.Count () == 0 ) ) 
         {
         GLX_LOG_INFO( "GLX_CLOUD ::CGlxCloudViewControl::offerkeyeventL no key press returning  ");
         return EFalse; //return as no futher processing is required
         }
 
-    if (aEvent.IsKeyEvent() && iTagsContextMenuControl->ItemMenuVisibility())
-        {
-        // Hide the context menu, if visible
-        ShowContextItemMenuL(EFalse);
-        }
-
     if ( aEvent.IsKeyEvent ()&& aEvent.Code() == EEventKey )
         {
         switch (aEvent.KeyEvent().iCode)            
             {	
+            //@ EABI-7R7FRU Fute failure: Tag views enter key has no functionality.
             case EKeyEnter :
             case EKeyDevice3:
                 {
-                if (iShowFocus)
-                    {
-                    iShowFocus = EFalse;
-                    iObserverEnterKeyEvent.HandleEnterKeyEventL(
-                            (TInt) EAknCmdOpen);
-                    }
-                else
-                    {
-                    SetFocusToFirstVisibleItemL();
-                    }
-                consumed = ETrue;
+                iObserverEnterKeyEvent.HandleEnterKeyEventL( (TInt)EAknCmdOpen );
+                consumed= ETrue;
                 }
                 break;
             case EKeyUpArrow:
-                {
-                if (iShowFocus)
+                {             
+                if(iCloudInfo.Count() >1 )
                     {
-                    HandleKeyUpL();
-                    iFocusRowIndex = RowNumber(iMediaList.FocusIndex());
+                    HandleKeyUpL ();
+                    consumed = ETrue;
+                    iFocusRowIndex = RowNumber (iMediaList.FocusIndex ()); 
 
-                    MoveUpIfRequired();
+                    MoveUpIfRequired();                   
                     }
-                else
-                    {
-                    SetFocusToFirstVisibleItemL();
-                    }
-                consumed = ETrue;
                 }
                 break;
 
             case EKeyDownArrow:
-                {
-                if (iShowFocus)
+                {              
+                if (iCloudInfo.Count() > 1)
                     {
-                    HandleKeyDownL();
-                    iFocusRowIndex = RowNumber(iMediaList.FocusIndex());
+                    HandleKeyDownL ();
+                    consumed = ETrue;
+                    iFocusRowIndex = RowNumber (iMediaList.FocusIndex ());
 
-                    MoveDownIfRequired();
-                    }
-                else
-                    {
-                    SetFocusToFirstVisibleItemL();
-                    }
-                consumed = ETrue;
+                    MoveDownIfRequired();                                 
+                    }                  
                 }
                 break;
 
             case EKeyLeftArrow:
             case EKeyPrevious:
                 {
-                if (iShowFocus)
+                // arabic hebrew change
+                if ( GlxGeneralUiUtilities::LayoutIsMirrored () )
                     {
-                    // arabic hebrew change
-                    if (GlxGeneralUiUtilities::LayoutIsMirrored())
+                    if ( iMediaList.FocusIndex() == iMediaList.Count() - 1 )
                         {
-                        if (iMediaList.FocusIndex() == iMediaList.Count() - 1)
-                            {
-                            iMediaList.SetFocusL(NGlxListDefs::EAbsolute, 0);
-                            }
-                        else
-                            {
-                            iMediaList.SetFocusL(NGlxListDefs::EAbsolute,
-                                    iMediaList.FocusIndex() + 1);
-                            }
-                        iScrollDirection = 0;
+                        iMediaList.SetFocusL (NGlxListDefs::EAbsolute, 0);
                         }
                     else
                         {
-                        if (iMediaList.FocusIndex() == 0)
-                            {
-                            iMediaList.SetFocusL(NGlxListDefs::EAbsolute,
-                                    iMediaList.Count() - 1);
-                            }
-                        else
-                            {
-                            iMediaList.SetFocusL(NGlxListDefs::EAbsolute,
-                                    iMediaList.FocusIndex() - 1);
-                            }
-                        iScrollDirection = 1;
+                        iMediaList.SetFocusL (NGlxListDefs::EAbsolute,
+                                iMediaList.FocusIndex ()+ 1);
                         }
-                    TInt focusRowIndex = RowNumber(iMediaList.FocusIndex());
-                    if (iFocusRowIndex != focusRowIndex)
-                        {
-                        iFocusRowIndex = focusRowIndex;
-                        if (iScrollDirection == 0)
-                            {
-                            MoveDownIfRequired();
-                            }
-                        else
-                            {
-                            MoveUpIfRequired();
-                            }
-                        }
+                    iScrollDirection = 0;
                     }
                 else
                     {
-                    SetFocusToFirstVisibleItemL();
+                    if ( iMediaList.FocusIndex ()== 0 )
+                        {
+                        iMediaList.SetFocusL (NGlxListDefs::EAbsolute,
+                                iMediaList.Count() - 1 );
+                        }
+                    else
+                        {
+                        iMediaList.SetFocusL (NGlxListDefs::EAbsolute,
+                                iMediaList.FocusIndex ()- 1);
+                        }
+                    iScrollDirection = 1;
                     }
                 consumed = ETrue;
+                TInt focusRowIndex = RowNumber (iMediaList.FocusIndex ());
+                if(iFocusRowIndex != focusRowIndex)
+                    {
+                    iFocusRowIndex = focusRowIndex; 
+                    if( iScrollDirection == 0 )
+                        {                      
+                        MoveDownIfRequired();
+                        }
+                    else
+                        {
+                        MoveUpIfRequired();
+                        }
+                    }                
                 }
+
                 break;
 
             case EKeyRightArrow:
             case EKeyNext:
-                {
-                if (iShowFocus)
+                {               
+                // arabic hebrew change
+                if ( GlxGeneralUiUtilities::LayoutIsMirrored () )
                     {
-                    // arabic hebrew change
-                    if (GlxGeneralUiUtilities::LayoutIsMirrored())
+                    if ( iMediaList.FocusIndex ()== 0 )
                         {
-                        if (iMediaList.FocusIndex() == 0)
-                            {
-                            iMediaList.SetFocusL(NGlxListDefs::EAbsolute,
-                                    iMediaList.Count() - 1);
-                            }
-                        else
-                            {
-                            iMediaList.SetFocusL(NGlxListDefs::EAbsolute,
-                                    iMediaList.FocusIndex() - 1);
-                            }
-                        iScrollDirection = 1;
+                        iMediaList.SetFocusL (NGlxListDefs::EAbsolute,
+                                iMediaList.Count() - 1 );
                         }
                     else
                         {
-                        if (iMediaList.FocusIndex() == iMediaList.Count() - 1)
-                            {
-                            iMediaList.SetFocusL(NGlxListDefs::EAbsolute, 0);
-                            }
-                        else
-                            {
-                            iMediaList.SetFocusL(NGlxListDefs::EAbsolute,
-                                    iMediaList.FocusIndex() + 1);
-                            }
-                        iScrollDirection = 0;
+                        iMediaList.SetFocusL (NGlxListDefs::EAbsolute,
+                                iMediaList.FocusIndex ()- 1);
                         }
-                    TInt focusRowIndex = RowNumber(iMediaList.FocusIndex());
-
-                    if (iFocusRowIndex != focusRowIndex)
-                        {
-                        iFocusRowIndex = focusRowIndex;
-                        if (iScrollDirection == 1)
-                            {
-                            MoveUpIfRequired();
-                            }
-                        else
-                            {
-                            MoveDownIfRequired();
-                            }
-                        }
+                    iScrollDirection = 1;
                     }
                 else
                     {
-                    SetFocusToFirstVisibleItemL();
+                    if ( iMediaList.FocusIndex ()== iMediaList.Count() - 1 )
+                        {
+                        iMediaList.SetFocusL (NGlxListDefs::EAbsolute, 0);
+                        }
+                    else
+                        {
+                        iMediaList.SetFocusL (NGlxListDefs::EAbsolute,
+                                iMediaList.FocusIndex ()+ 1);
+                        }
+                    iScrollDirection = 0;
                     }
+                TInt focusRowIndex = RowNumber (iMediaList.FocusIndex ());
+
+                if( iFocusRowIndex != focusRowIndex )
+                    {
+                    iFocusRowIndex = focusRowIndex;  
+                    if( iScrollDirection == 1 )
+                        {                           
+                        MoveUpIfRequired();                               
+                        }
+                    else
+                        {                           
+                        MoveDownIfRequired();                               
+                        }
+                    }
+                }
                 consumed = ETrue;
-                }
                 break;
 
             default:
@@ -678,6 +649,7 @@
     iScrollDirection = 1;
     }
 
+
 // --------------------------------------------------------------------------- 
 // HandleKeyDown()
 // --------------------------------------------------------------------------- 
@@ -712,14 +684,14 @@
     {
     TRACER("GLX_CLOUD::CGlxCloudViewControl::HandleLayoutFocusChange");
 
-    if ((iShowFocus || !iUiUtility->IsPenSupported()) && (iLabels.Count() - 1
-            >= iMediaList.FocusIndex()))
+    if ( iLabels.Count()-1 >= iMediaList.FocusIndex())
         {
         //to highlight focused element 
         SetFocusColor(); 
         }
     }
 
+
 // --------------------------------------------------------------------------- 
 // FocusUpdate()
 // --------------------------------------------------------------------------- 
@@ -727,12 +699,14 @@
 void CGlxCloudViewControl::FocusUpdate()
     {
     TRACER("GLX_CLOUD::CGlxCloudViewControl::FocusUpdate");
-    iFocusRowIndex = RowNumber(iMediaList.FocusIndex());
-    GLX_LOG_INFO1("GLX_CLOUD::FocusUpdate iFocusRowIndex=%d", 
-            iFocusRowIndex);
+    GLX_LOG_INFO1("GLX_CLOUD ::CGlxCloudViewControl::FocusUpdate HighLighted RowNum  %d ",iFocusRowIndex);
+    GLX_LOG_INFO1("GLX_CLOUD ::CGlxCloudViewControl::FocusUpdate End RowNumn %d ",iCloudInfo.Count()-1);
+    iFocusRowIndex = RowNumber (iMediaList.FocusIndex ());
+    iEndRowIndex = iCloudInfo.Count()-1;
     LayoutVisibleArea();
     }
 
+
 // --------------------------------------------------------------------------- 
 // ResetLayout()
 // --------------------------------------------------------------------------- 
@@ -749,23 +723,25 @@
     iLabels.Reset();
     }
 
+
 // --------------------------------------------------------------------------- 
 // GetRownum()
 // --------------------------------------------------------------------------- 
 //
 TInt CGlxCloudViewControl::RowNumber(TInt aItemIndex) const
-	{
-	TRACER("GLX_CLOUD::CGlxCloudViewControl::GetRownum");
-	//Get the rownumber of the given item index.
-	TInt i;
-	for (i = 0; i < iCloudInfo.Count(); i++)
-		{
-		if ((aItemIndex >= iCloudInfo[i].iStartIndex) && (aItemIndex
-				<= iCloudInfo[i].iEndIndex))
-			break;
-		}
-	return i;
-	}
+{
+
+TRACER("GLX_CLOUD::CGlxCloudViewControl::GetRownum");
+//Get the rownumber of the given item index.
+TInt i;
+for (i = 0; i < iCloudInfo.Count (); i++)
+    {
+    if ( (aItemIndex >= iCloudInfo[i].iStartIndex) && (aItemIndex <=iCloudInfo[i].iEndIndex))
+        break;
+    }
+return i;
+
+}
 
 // --------------------------------------------------------------------------- 
 // FetchAttributeFromCacheL()
@@ -799,6 +775,7 @@
         }
     }
 
+
 //medialist Observers
 
 // ---------------------------------------------------------------------------
@@ -828,11 +805,16 @@
         //reset the layout and get the items from cache
         UpdateLayout(); //remove all the visuals from the layout.layout is empty now.
         iCloudInfo.Close (); //row information is reset
+        //get the new array contents from cache.no need to reset the array as the number
+        //of items in array will remain same.
+        FetchAttributeFromCacheL();
+        UpdateRowDataL (); //updates the row data and reassigns font sizes and draw the layout on screen.
         }
 
     InitPhysicsL();
     }
 
+
 // ---------------------------------------------------------------------------
 // HandleMediaL().
 // ---------------------------------------------------------------------------
@@ -915,6 +897,8 @@
         //of items in array will remain same.
         UpdateLayout(); //remove all the visuals from the layout.layout is empty now.        
         FetchAttributeFromCacheL();
+        //if we navigate in forward direction, first item should be highlighted.if we are navigating in
+        // backwards direction, index is not necessarily zero, it will be restored.
         if ( iUiUtility->ViewNavigationDirection ()== EGlxNavigationForwards && iMediaList.Count ())
             {
             iMediaList.SetFocusL (NGlxListDefs::EAbsolute, 0);
@@ -985,6 +969,7 @@
 // ---------------------------------------------------------------------------
 //
 void CGlxCloudViewControl::UpdateRowDataL()
+
     {
     TRACER("GLX_CLOUD::CGlxCloudViewControl::UpdateRowData()");
 
@@ -1006,7 +991,7 @@
     //Setting the Font Styles based on association counts
     //Finding the maximum value of image association
     //Determining the Font(Style) for each visual
-    TInt maxCount = MaxUsageCount (); //Maximum Association count 
+    TInt maxCount= MaxUsageCount (); //Maximum Association count 
     GLX_LOG_INFO1("GLX_CLOUD ::CGlxCloudViewControl::UpdateRowData  mediaCount %d ", maxCount);
     GLX_LOG_INFO1("GLX_CLOUD ::CGlxCloudViewControl::UpdateRowData  iLabels.Count()  %d ",iLabels.Count());
     if ( 0 == maxCount )
@@ -1045,7 +1030,7 @@
             }
 
         // Current row width will be progressively incremented to fit as many tags as possible
-        rowWidth += currentTagSize.iWidth + KColSpace;
+        rowWidth += currentTagSize.iWidth + 10;
         GLX_LOG_INFO1("GLX_CLOUD ::CGlxCloudViewControl::UpdateRowData   currentTagSize.iWidth %d ", currentTagSize.iWidth);
         GLX_LOG_INFO1("GLX_CLOUD ::CGlxCloudViewControl::UpdateRowData  rowWidth %d ", rowWidth);
 
@@ -1069,7 +1054,7 @@
         // then we must fit the current visual into the next row.
         // Do that check now and adjust accordingly.
         // Fix for EAHN-7BZD78 is to exclude the gap value between the row's tags from the logic
-        else if ( rowWidth - KColSpace > KMaxScreenWidth )
+        else if ( rowWidth - 10 > KMaxScreenWidth )
             {
             GLX_LOG_INFO("GLX_CLOUD :: CGlxCloudViewControl::UpdateRowData Row added");
             lastRowStartTagIndex = currentTagIndex - 1;
@@ -1097,6 +1082,8 @@
 
     GLX_LOG_INFO1("GLX_CLOUD ::CGlxCloudViewControl::UpdateRowData  iCloudInfo.count loop exit  %d ", iCloudInfo.Count());
     FocusUpdate (); //Start screen drawing 
+
+    iEndRowIndex = iCloudInfo.Count()-1;
     }
 
 // ---------------------------------------------------------------------------
@@ -1259,11 +1246,11 @@
     }
 
 // ---------------------------------------------------------------------------
-// AppendToCloudArrayL()
+// SetFocusColor()
 // ---------------------------------------------------------------------------
 //
-void CGlxCloudViewControl::AppendToCloudArrayL(TGlxCloudInfo& aCloudInfo,
-        const TInt& aStartIndex, const TInt& aEndIndex)
+void CGlxCloudViewControl::AppendToCloudArrayL( 
+        TGlxCloudInfo& aCloudInfo,const TInt& aStartIndex, const TInt& aEndIndex )
     {
     TRACER("GLX_CLOUD::CGlxCloudViewControl::AppendToCloudArrayL");
     aCloudInfo.iStartIndex = aStartIndex;
@@ -1275,28 +1262,30 @@
 // SetFocusColor()
 // ---------------------------------------------------------------------------
 //
-void CGlxCloudViewControl::SetFocusColor()
+void  CGlxCloudViewControl::SetFocusColor()
     {
-    TRACER("GLX_CLOUD::CGlxCloudViewControl::SetFocusColor");
-    if (iMediaList.Count())
-        {
-        iLabels[iMediaList.FocusIndex()]->SetColor(
-                KAknsIIDQsnHighlightColors, EAknsCIQsnHighlightColorsCG3);
-        }
+    iLabels[iMediaList.FocusIndex()]->SetColor (KAknsIIDQsnHighlightColors ,EAknsCIQsnHighlightColorsCG3); 
+    }
+
+
+// ---------------------------------------------------------------------------
+// SetBubleMidPoint()
+// ---------------------------------------------------------------------------
+//
+void  CGlxCloudViewControl::SetBubleMidPoint(TPoint& aMidPoint)
+    {
+    TRACER("GLX_CLOUD::CGlxCloudViewControl::SetBubleMidPoint");
+    //Substract the viewport position so as to set the buble at the right position on the screen     
+    aMidPoint.iX-=iViewPortPosition.iX;
+    aMidPoint.iY-=iViewPortPosition.iY;
     }
 
 // ---------------------------------------------------------------------------
-// ResetFocusColor()
+// CreateBubleContainer()
 // ---------------------------------------------------------------------------
-//
-void CGlxCloudViewControl::ResetFocusColor()
-    {
-    TRACER("GLX_CLOUD::CGlxCloudViewControl::ResetFocusColor");
-    if (iMediaList.Count())
-        {
-        iLabels[iMediaList.FocusIndex()]->SetColor(KAknsIIDQsnTextColors,
-                EAknsCIQsnTextColorsCG6);
-        }
+//   
+void CGlxCloudViewControl::CreateBubleContainer()
+    {   
     }
 
 // ---------------------------------------------------------------------------
@@ -1306,21 +1295,19 @@
 void CGlxCloudViewControl::MoveUpIfRequired()
     {
     TRACER("GLX_CLOUD::CGlxCloudViewControl::MoveUpIfRequired");
-    TInt focusIndex = iMediaList.FocusIndex();
-
     //get the focused item's position
     TPoint point;
-    iLayout->ChildPos(focusIndex,point);
+    iLayout->ChildPos(iMediaList.FocusIndex(),point);
     TSize size;
-    iLayout->ChildSize(focusIndex,size);
-
-    TInt rownumber = RowNumber(focusIndex);
+    iLayout->ChildSize(iMediaList.FocusIndex(),size);
+    TInt focus = iMediaList.FocusIndex();
+    TInt rownumber = RowNumber(focus);
     //if the focused item is not visible then move the viewport
     if(point.iY < iViewPortPosition.iY)         
         { 
         //set the new position of viewport
-        TInt offset = iViewPortPosition.iY - point.iY;
-        iViewPortPosition.iY-=offset;
+        TInt offeset = iViewPortPosition.iY - point.iY;
+        iViewPortPosition.iY-=offeset;
         if( (iViewPortPosition.iY < 0) )
             {
             iViewPortPosition.iY = 0;
@@ -1336,57 +1323,89 @@
     Scroll();  
     }
 
+
 // ---------------------------------------------------------------------------
 // MoveDownIfRequired()
 // ---------------------------------------------------------------------------
 //
 void CGlxCloudViewControl::MoveDownIfRequired()
     {
-    TRACER("GLX_CLOUD::CGlxCloudViewControl::MoveDownIfRequired");
-    TInt focusIndex = iMediaList.FocusIndex();
-
+    TRACER("GLX_CLOUD::CGlxCloudViewControl::MoveDownIfRequired");  
     //get the focused item's position
     TPoint point;
-    iLayout->ChildPos(focusIndex, point);
+    iLayout->ChildPos(iMediaList.FocusIndex(),point);
     TSize size;
-    iLayout->ChildSize(focusIndex, size);
-
-    //Reset viewport position for cases:
-    //case 1)Focus index is first item
-    if (focusIndex == 0)
-        {
-		iViewPortPosition.iY = 0;
-		}
-    //case 2)Focused item is in last screen
-    else if( point.iY > (iViewPortVirtualSize.iHeight - iViewPortSize.iHeight))
+    iLayout->ChildSize(iMediaList.FocusIndex(),size);
+    //if the focused visual is not visible then move the viewport 
+    if(point.iY+size.iHeight > iViewPortPosition.iY+iViewPortSize.iHeight )
+        { 
+        //set the new position of viewport
+        TInt offeset = (point.iY+size.iHeight) - (iViewPortPosition.iY+iViewPortSize.iHeight);
+        iViewPortPosition.iY+=offeset;
+        if( (iViewPortPosition.iY > iViewPortVirtualSize.iHeight) )
+            {
+            iViewPortPosition.iY = iViewPortVirtualSize.iHeight - iViewPortSize.iHeight;
+            } 
+        }
+    //if its key event then it should be cyclic
+    else if (iMediaList.FocusIndex() == 0)
         {
-        iViewPortPosition.iY = iViewPortVirtualSize.iHeight - iViewPortSize.iHeight;
-        }
-    else
-        {
-        iViewPortPosition.iY = point.iY + KNumMinRowSpace;
-        }
-
-    //Validate the viewport position
-    if ((iViewPortPosition.iY > iViewPortVirtualSize.iHeight))
-        {
-		iViewPortPosition.iY = iViewPortVirtualSize.iHeight - iViewPortSize.iHeight;
-        }
-
-    GLX_LOG_INFO1("GLX_CLOUD::MoveDownIfRequired() iViewPortPosition.iY:%d",
-            iViewPortPosition.iY);
+        iViewPortPosition.iY = 0;
+        }     
     iViewPortLayout->SetViewportPos(iViewPortPosition, KSlowCloudMovement);
     iScrollEventData.mViewStartPos = iViewPortPosition.iY;
     if(iScrollBarWidget)
         {
-        Scroll();
+        Scroll();           
         }
-    }
+    }     
+
+// ---------------------------------------------------------------------------
+// MoveDownIfRequired()
+// ---------------------------------------------------------------------------
+//
+void CGlxCloudViewControl::CalculateBubleMidPoint()
+    { 
+    TRACER("GLX_CLOUD::CGlxCloudViewControl::CalculateBubleMidPoint");
+    TPoint midpoint;
+    TAlfRealRect focussedItemRect;
+    TRect mainPaneRect;
+    AknLayoutUtils::LayoutMetricsRect (AknLayoutUtils::EMainPane, mainPaneRect);
+
+    CAlfVisual& visual = iLayout->Visual( iMediaList.FocusIndex() );
+    focussedItemRect = visual.DisplayRect();
+
+    if( GlxGeneralUiUtilities::LayoutIsMirrored () )
+        {  
+        midpoint.iX = focussedItemRect.iBr.iX +
+        ((focussedItemRect.iTl.iX - focussedItemRect.iBr.iX )/2);
+        }
+
+    else 
+        {
+        midpoint.iX=focussedItemRect.iTl.iX +
+        ((focussedItemRect.iBr.iX - focussedItemRect.iTl.iX )/2);
+        }
+
+    midpoint.iY=focussedItemRect.iTl.iY+
+                ((focussedItemRect.iBr.iY - focussedItemRect.iTl.iY )/2); 
+    TPoint anchorRect;
+
+    //Get the position of anchor layout
+    iViewPortLayout->ChildPos (0, anchorRect);
+
+    //Add the differance to the midpoint
+    midpoint.iX+=anchorRect.iX;
+    midpoint.iY+=anchorRect.iY; 
+
+    //Substract from the viewport position the viewport position    
+    SetBubleMidPoint(midpoint);   
+    } 
 
 // ---------------------------------------------------------------------------
 // HandlePointerEventL()
 // ---------------------------------------------------------------------------
-//
+//  
 TBool CGlxCloudViewControl::HandlePointerEventL( const TAlfEvent &aEvent )
     {
     TRACER("GLX_CLOUD::CGlxCloudViewControl::HandlePointerEventL");
@@ -1424,8 +1443,6 @@
                     {
                     iTouchFeedback->InstantFeedback(ETouchFeedbackBasic);
                     iMediaList.SetFocusL (NGlxListDefs::EAbsolute, index);
-                    iShowFocus = ETrue;
-                    HandleLayoutFocusChange();
 
                     //Start the timer to interpret longpress events
                     iTimerComplete = EFalse;
@@ -1448,12 +1465,6 @@
         }
     else if (iDownEventReceived && aEvent.PointerUp())
         {
-        if (!iTagsContextMenuControl->ItemMenuVisibility())
-            {
-            iShowFocus = EFalse;
-            ResetFocusColor();
-            }
-
         iDownEventReceived = EFalse;
         Display()->Roster().SetPointerEventObservers(0, *this);
         consumed = ETrue;
@@ -1487,8 +1498,10 @@
                     TInt focus = iMediaList.FocusIndex();
                     if (index != focus)
                         {
+                        iTouchFeedback->InstantFeedback( ETouchFeedbackBasic );
                         TInt focusrowindex = iFocusRowIndex;
                         iMediaList.SetFocusL(NGlxListDefs::EAbsolute, index);
+                        SetFocusColor();
                         iFocusRowIndex = RowNumber (iMediaList.FocusIndex ());
                         
                         if( iFocusRowIndex > focusrowindex)
@@ -1757,17 +1770,15 @@
     }
 
 // ---------------------------------------------------------------------------
-// InitializeScrollBar()
+// attachScrollBar()
 // ---------------------------------------------------------------------------
-//
-void CGlxCloudViewControl::InitializeScrollBar(
-        IAlfScrollBarWidget* aScrollBarWidget)
+//	
+void CGlxCloudViewControl::InitializeScrollBar(IAlfScrollBarWidget* aScrollBarWidget)
     {
     TRACER("GLX_CLOUD::CGlxCloudViewControl::InitializeScrollBar");
     iScrollBarWidget = aScrollBarWidget;
     ((IAlfScrollBarModel *) (iScrollBarWidget->model()))->initializeData(
             iScrollEventData.mSpan, iScrollEventData.mViewLength, 0);
-    Scroll();
     DisplayScrollBar();
     }
 
@@ -1824,30 +1835,19 @@
 // DisplayScrollBar()
 // ---------------------------------------------------------------------------
 //
-void CGlxCloudViewControl::DisplayScrollBar()
+void CGlxCloudViewControl::DisplayScrollBar() 
     {
-    TRACER("GLX_CLOUD::CGlxCloudViewControl::DisplayScrollBar()");
     if (iScrollBarWidget)
         {
         IAlfElement* vertBaseElement =(iScrollBarWidget->control()->findElement ("BaseElement"));
         IAlfScrollBarDefaultBaseElement* scrollbarbaselement=static_cast<IAlfScrollBarDefaultBaseElement*> (
             vertBaseElement->makeInterface (IAlfScrollBarDefaultBaseElement::type() ) );
 
-        TInt totalHeight = 0;
-        for (TInt index = 0; index <= iCloudInfo.Count() - 1; index++)
-            {
-            totalHeight += KRowHeight;
-            totalHeight += KNumMinRowSpace;
-            }
-
-        // To set the scrollbar visibility, it's enough to set the opacity
-        // of baselayout. No need to set the opacity of thumb separately.
-        // Set the scrollbar visibility only
-        // when visuals height exceeds the screen height
-        if (iScrollEventData.mSpan && totalHeight > iTagScreenHeight)
+        // To set the scrollbar visibility, it's enough to set the opacity 
+        // of baselayout. No need to set the opacity of thumb separately. 
+        if (iScrollEventData.mSpan)
             {
             //make scroll bar visible
-            GLX_LOG_INFO("GLX_CLOUD: Make scrollbar visible!");
             scrollbarbaselement->setOpacity(1.0);
             }
         else
@@ -1868,31 +1868,30 @@
     AknLayoutUtils::LayoutMetricsRect (AknLayoutUtils::EMainPane, rect);
     if ((rect.Width() != (iTagScreenWidth + KRightmargin)) || (rect.Height() != iScreenHeight))
         {
-		//set the new screen dimensions
-		iScreenHeight = rect.Height();
-		iTagScreenWidth = rect.Width() - KRightmargin;
-		if (IsLandscape())
-			{
-			iTagScreenHeight = rect.Height();
-			}
-		else
-			{
-			iTagScreenHeight = KTagScreenHeight;
-			}
+        //set the new screen dimensions
+        iScreenHeight=rect.Height();
+       iTagScreenWidth = rect.Width()- KRightmargin;
+        if(IsLandscape())
+            {   
+            iTagScreenHeight = rect.Height();   
+            }
+        else 
+            {
+            iTagScreenHeight = KTagScreenHeight;
+            }
 
-		iViewPortLayout->SetSize(
-				TAlfRealSize(iTagScreenWidth, iTagScreenHeight), 0);
-		//delete all layout associations
-		if (iCloudInfo.Count() != 0)//check for the empty cloud view
-			{
-			UpdateLayout();
-			FetchAttributeFromCacheL();
-			//generate row structures and draw rows on screen
-			UpdateRowDataL();
+        iViewPortLayout->SetSize(TAlfRealSize(iTagScreenWidth,iTagScreenHeight), 0);
+        //delete all layout associations
+        if ( iCloudInfo.Count ()!= 0)//check for the empty cloud view
+            {
+            UpdateLayout();
+            FetchAttributeFromCacheL();
+            //generate row structures and draw rows on screen
+            UpdateRowDataL ();                                    
 
-			InitPhysicsL();
-			}
-		}
+            InitPhysicsL();
+            }
+        }
     }
 
 // ---------------------------------------------------------------------------
@@ -1964,7 +1963,6 @@
         return EFalse;
         }
     }
-
 // ---------------------------------------------------------------------------
 // TimerCompleteL()
 // ---------------------------------------------------------------------------
@@ -1985,54 +1983,23 @@
     TRect rect;
     AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EMainPane, rect);
     
-    //only if not dragged and physics hasnt started
-    if (!iPhysicsStarted && !iViewDragged)
+    if(!iPhysicsStarted)//only if physics hasnt started
         {
         iTagsContextMenuControl->SetViewableRect(rect);
         iTagsContextMenuControl->ShowItemMenuL(ETrue);
         iTagsContextMenuControl->SetDisplay(midpoint);
         }
    }
-
 // ---------------------------------------------------------------------------
 // ShowContextItemMenuL()
 // ---------------------------------------------------------------------------
 //
 void CGlxCloudViewControl::ShowContextItemMenuL(TBool aShow)
     {
-    TRACER("GLX_CLOUD::ShowContextItemMenuL");
-    GLX_LOG_INFO1("GLX_CLOUD::ShowContextItemMenuL() aShow=%d", aShow);
     iTagsContextMenuControl->ShowItemMenuL(aShow);
     if(!aShow)
         {
         iViewPortLayout->UpdateChildrenLayout(0);
-        iShowFocus = EFalse;
-        ResetFocusColor();
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// SetFocusToFirstVisibleItemL()
-// ---------------------------------------------------------------------------
-//
-void CGlxCloudViewControl::SetFocusToFirstVisibleItemL()
-    {
-    TRACER("GLX_CLOUD::CGlxCloudViewControl::SetFocusToFirstVisibleItemL()");
-    iShowFocus = ETrue;
-
-    TInt visIndex = GetAbsoluteIndex(TPoint(KLeftMargin + KLeftMargin,
-            KColSpace));
-    GLX_LOG_INFO1("GLX_CLOUD::SetFocusToFirstVisibleItemL() visIndex=%d", visIndex);
-
-    if (visIndex != KErrNotFound)
-        {
-        iMediaList.SetFocusL(NGlxListDefs::EAbsolute, visIndex);
-
-        MoveUpIfRequired();
-        }
-    else
-        {
-        HandleLayoutFocusChange();
         }
     }
 
--- a/photosgallery/viewframework/views/cloudview/src/glxcloudviewimp.cpp	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/viewframework/views/cloudview/src/glxcloudviewimp.cpp	Wed Oct 13 14:32:09 2010 +0300
@@ -51,14 +51,9 @@
 #include <akntranseffect.h>                             
 #include <gfxtranseffect/gfxtranseffect.h>
 #include "glxgfxtranseffect.h"  // For transition effects
-#include <akntransitionutils.h> //For CAknTransitionUtils
-
+    
 const TInt KViewId = 0x200071B7;
 
-//Transition animation used for Cloud view activation
-_LIT( KTfxResourceActivate , "z:\\resource\\effects\\photos_gridview_appear.fxml");
-_LIT( KTfxResourceNoEffect, "");
-
 using namespace Alf;
 // ======== MEMBER FUNCTIONS ========
 
@@ -144,11 +139,7 @@
 CGlxCloudViewImp::~CGlxCloudViewImp()
     {
     TRACER("GLX_CLOUD::CGlxCloudViewImp::~CGlxCloudViewImp");
-    if(iAlfEffectObs)
-		{
-		delete iAlfEffectObs;
-		}  
-    
+        
     CleanupVisuals ();
     delete iEmptyListText;
     if ( iResourceOffset )
@@ -221,33 +212,27 @@
     {
     TRACER("GLX_CLOUD::CGlxCloudViewImp::DoMLViewActivateL");
         
+    TUint transitionID = (iUiUtility->ViewNavigationDirection()==
+          EGlxNavigationForwards)?KActivateTransitionId:KDeActivateTransitionId; 
+    
+    GfxTransEffect::BeginFullScreen( transitionID, TRect(),
+            AknTransEffect::EParameterType, 
+            AknTransEffect::GfxTransParam( KPhotosUid,
+            AknTransEffect::TParameter::EEnableEffects) );   
+
+    
     if(StatusPane())
         {
         StatusPane()->MakeVisible(ETrue);
         }
-    
     ConstructCloudControlL();
     GLX_LOG_INFO("CGlxCloudViewImp::DoMLViewActivateL Cloud View Control Created" );  
     
+    GfxTransEffect::EndFullScreen();
+	
     // set app state to tag-browser view
     GlxSetAppState::SetState (EGlxInTagBrowserView);
     iMMCNotifier = CGlxMMCNotifier::NewL(*this);
-    
-    //Set the ALF animation effect to CAlfAnchorLayout since the animation
-    //does not work for both avkon and alf together.
-    //Check if the transitions are enabled from themes
-    if (CAknTransitionUtils::TransitionsEnabled( AknTransEffect::EFullScreenTransitionsOff ))
-		{
-		if(!iAlfEffectObs)
-			{
-			iAlfEffectObs = CAlfEffectObserver::NewL();
-			}
-		
-		iAnchorlayout->SetEffectL( KTfxResourceActivate );
-		iEffectHandle = iAnchorlayout->Identifier();
-		iAlfEffectObs->SubscribeCallbackL(this,iEffectHandle);
-		}
-
     }
 
 // ---------------------------------------------------------------------------
@@ -349,13 +334,13 @@
 
 	IAlfWidgetFactory& widgetFactory = AlfWidgetEnvExtension::widgetFactory(*(iUiUtility->Env ())); 
 
-    iViewWidget = widgetFactory.createViewWidget("viewwidget", 0, 0, iDisplay);
-	iViewWidget->setRect(ClientRect());
-	iViewWidget->show(true);
-
-	IAlfLayoutManager* layoutmanager = IAlfInterfaceBase::makeInterface<
-			IAlfLayoutManager>(iViewWidget->control());
-	iViewWidget->setRect(ClientRect());
+    iViewWidget = widgetFactory.createViewWidget("viewwidget", 0,0,iDisplay);
+    
+    iViewWidget->setRect( ClientRect() );
+   iViewWidget->show(true); 
+    
+    IAlfLayoutManager* layoutmanager = IAlfInterfaceBase::makeInterface<IAlfLayoutManager>(iViewWidget->control());
+    iViewWidget->setRect(ClientRect());
    
     // parent layout handle for scrollbar
     iScrollPaneHandle = AknLayoutScalable_UiAccel::aa_scroll_pane(0).LayoutLine();
@@ -456,11 +441,7 @@
 void CGlxCloudViewImp::HandleGridMenuListL(TInt aCommand)
     {
     TRACER("GLX_CLOUD::CGlxCloudViewImp::HandleGridMenuListL");
-    iCloudControl->ShowContextItemMenuL(EFalse);
-    if (aCommand)
-        {
-        ProcessCommandL(aCommand);
-        }
+    ProcessCommandL(aCommand);
     }
 
 // ----------------------------------------------------------------------------
@@ -511,19 +492,3 @@
         ProcessCommandL(EAknSoftkeyClose);
         }
     }
-
-// ---------------------------------------------------------------------------
-// HandleEffectCallback
-// 
-// ---------------------------------------------------------------------------
-//
-void CGlxCloudViewImp::HandleEffectCallback(TInt aType, TInt aHandle, TInt /*aStatus*/)
-    {
-    TRACER("CGlxCloudViewImp::HandleEffectCallback()");
-    if (aHandle == iEffectHandle && aType == EAlfEffectComplete
-			&& iAnchorlayout)
-        {
-        TRAP_IGNORE(iAnchorlayout->SetEffectL(KTfxResourceNoEffect));
-        }
-    }
-
--- a/photosgallery/viewframework/views/cloudview/src/glxtagscontextmenucontrol.cpp	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/viewframework/views/cloudview/src/glxtagscontextmenucontrol.cpp	Wed Oct 13 14:32:09 2010 +0300
@@ -36,7 +36,6 @@
 #include <alf/alfframebrush.h>
 
 #include <StringLoader.h>
-#include <touchfeedback.h>
 
 // Photos Headers
 #include "glxtagscontextmenucontrol.h"
@@ -275,21 +274,26 @@
         }
 
     TInt upperYPos = aPoint.iY - KMinimalGap;
-    TInt xPos = aPoint.iX;
+    TInt XPos = aPoint.iX;
     
+    //Preferred is to display in upper area
+    TInt upperDisplayableHeight = upperYPos - iViewableRect.iTl.iY;
+    TInt rightDisplayableWidth = iViewableRect.iBr.iX - (XPos + KRightMargin
+            + KWidthPadding);
+
     //always draw above
-    if ((iViewableRect.iBr.iX - (xPos + KRightMargin + KWidthPadding))
-            < iMaxTextWidth)
+    if(rightDisplayableWidth < iMaxTextWidth)
         {
-        xPos = aPoint.iX - iMaxTextWidth;
+        XPos = aPoint.iX - iMaxTextWidth;
         }
-
-    if (upperYPos + KGridHeight > iViewableRect.iBr.iY)
+    if(upperDisplayableHeight < KGridHeight)
         {
-        upperYPos = iViewableRect.iBr.iY - KGridHeight;
+        iMainVisual->SetPos(TAlfRealPoint(XPos , upperYPos ));
         }
-
-    iMainVisual->SetPos(TAlfRealPoint(xPos, upperYPos));
+    else
+        {
+        iMainVisual->SetPos(TAlfRealPoint(XPos , upperYPos - KGridHeight));
+        }
     
 	if ( iTimer)
 	    {
@@ -341,7 +345,6 @@
 
     if (aEvent.IsPointerEvent() && iItemMenuVisibility )
         {
-        MTouchFeedback* feedback = MTouchFeedback::Instance();
         if (aEvent.PointerDown())
             {
             iCommandId = KErrNotFound;
@@ -386,10 +389,6 @@
                     iCommandId = EGlxCmdRename;
                     }
                 consumed = ETrue;
-                if (feedback)
-                    {
-                    feedback->InstantFeedback(ETouchFeedbackBasic);
-                    }
                 CleanupStack::Pop(brush);
                 }//End of iItemMenuVisibility check
             }//End of Pointer down event 
@@ -422,10 +421,6 @@
                 {
                 HandleUpEventL();
                 }
-            else if (eventInsideControl && feedback)
-                {
-                feedback->InstantFeedback(ETouchFeedbackBasic);
-                }
             consumed = ETrue;
             }
         consumed = ETrue;
@@ -441,7 +436,6 @@
     {
     TRACER("GLX_CLOUD::CGlxTagsContextMenuControl::TimerCompleteL");
     ShowItemMenuL(EFalse);
-    iItemMenuObserver.HandleGridMenuListL();
     }
 
 // --------------------------------------------------------------------------- 
--- a/photosgallery/viewframework/views/fullscreenview/inc/glxfullscreenviewimp.h	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/viewframework/views/fullscreenview/inc/glxfullscreenviewimp.h	Wed Oct 13 14:32:09 2010 +0300
@@ -52,7 +52,6 @@
 class CGestureHelper;
 class TGlxMedia;
 class CGlxFullScreenBusyIcon;
-class CGlxNavigationalState;
 
 namespace Alf
 	{
@@ -315,18 +314,6 @@
      */
     void UpdateItems();
 
-    /**
-     * Handle coverflow item removed event / 
-     * external file deletion while gaining foreground
-     */
-    void HandleItemRemovedL();
-    
-    /**
-     * Sets the title pane text
-     * @param aTitleText Title text
-     */
-    void SetTitlePaneTextL(const TDesC& aTitleText);
-
 private:
     /** Softkey resource id's */
     TFullScreenViewResourceIds iResourceIds; 
@@ -370,8 +357,6 @@
     CPeriodic* iPeriodic;
     CGlxFullScreenBusyIcon* iBusyIcon;
 	
-    CGlxNavigationalState* iNaviState;
-    
     GestureHelper::CGestureHelper* iGestureHelper;
     TBool   iMultiTouchGestureOngoing   ;
     
@@ -379,9 +364,6 @@
     TInt iInitialZoomRatio ;
     //Previous focused index
     TInt iOldFocusIndex;
-    // Previous focused Uri
-    HBufC* iUri;
-
     TBool iImgViewerMode;
 	CGlxMMCNotifier* iMMCNotifier;
 	TBool iMMCState;
--- a/photosgallery/viewframework/views/fullscreenview/src/glxfullscreenviewimp.cpp	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/viewframework/views/fullscreenview/src/glxfullscreenviewimp.cpp	Wed Oct 13 14:32:09 2010 +0300
@@ -46,7 +46,6 @@
 #include <mpxcollectionpath.h>
 
 #include <gesturehelper.h>
-#include <coeutils.h>
 
 using namespace GestureHelper;
 
@@ -210,8 +209,6 @@
 		iPeriodic = CPeriodic::NewL(CActive::EPriorityStandard);
 		}
 	iGlxTvOut = CGlxTv::NewL(*this);
-	
-	iNaviState = CGlxNavigationalState::InstanceL();
     }
 
 // ---------------------------------------------------------------------------
@@ -230,12 +227,6 @@
         delete iMMCNotifier;
         iMMCNotifier = NULL;
         }
-    
-    if (iUri)
-        {
-        delete iUri;
-        }
-    
     if(iMediaListMulModelProvider)
         {
         delete iMediaListMulModelProvider;
@@ -270,11 +261,6 @@
  		iPeriodic->Cancel();
  		delete iPeriodic;
  		}
-    
-    if (iNaviState)
-        {
-        iNaviState->Close();
-        }    
 	}
  // ---------------------------------------------------------------------------
 // From CGlxViewBase
@@ -340,34 +326,33 @@
     // hide the toolbar
     EnableFSToolbar(EFalse);
     
-    if (iMediaList->Count() == 0)
-        {
-        GLX_LOG_INFO("CGlxFullScreenViewImp::DoMLViewActivateL() - No items!");	
-		// While in slideshow from fullscreen view,
-        // 1) Connect USB in mass storage mode or 
-        // 2) Delete items through file manager 
-        // shall result in activating fullscreen view with no items; so, goto grid view.
-        iNaviState->ActivatePreviousViewL();
-        }
-    else
-        {
-        //fix for ESLM-7YYDXC: When in FullScreen View, view mode must be 'EView'
-        //While coming back from SlideShow to FullScreen view, need to set view mode.
-        if (iMediaList->Count() && iNaviState->ViewingMode()
-                != NGlxNavigationalState::EView)
-            {
-            iNaviState->SetToViewMode();
-            }
-        }
-
-    CMPXCollectionPath* collPath = iNaviState->StateLC();
-    if (collPath->Id() == TMPXItemId(
-            KGlxCollectionPluginImageViewerImplementationUid))
+    CGlxNavigationalState* navigationalState =  CGlxNavigationalState::InstanceL();
+    CleanupClosePushL( *navigationalState );
+    CMPXCollectionPath* naviState = navigationalState->StateLC();
+    
+    if(!iMediaList->Count())
+		{
+        //Fix For EPKA-7U5DT7-slideshow launched from FullScreen and connect USB in mass storage mode results in Photos crash
+        navigationalState->ActivatePreviousViewL();
+        }  
+	else
+		{
+		//fix for ESLM-7YYDXC: When in FullScreen View, view mode must be 'EView'
+		//While coming back from SlideShow to FullScreen view, need to set view mode.
+		if(navigationalState->ViewingMode() != NGlxNavigationalState::EView)
+		   	{
+		   	navigationalState->SetToViewMode();
+		   	}
+		}
+		
+    if(naviState->Id() == TMPXItemId(KGlxCollectionPluginImageViewerImplementationUid))
         {
         iImgViewerMode = ETrue;
         CreateImageViewerInstanceL();
         }
-    CleanupStack::PopAndDestroy(collPath);
+    //destroy and close navistate and navipath
+    CleanupStack::PopAndDestroy( naviState );
+    CleanupStack::PopAndDestroy( navigationalState );
 
     iScrnSize = iUiUtility->DisplaySize();
     iGridIconSize = iUiUtility->GetGridIconSize();
@@ -432,7 +417,6 @@
     CAknViewAppUi* appui = AppUi();
     if ( appui )
         {
-        SetTitlePaneTextL(KNullDesC);
         appui->StatusPane()->MakeVisible(EFalse);
         appui->Cba()->MakeVisible(EFalse);
         }
@@ -511,7 +495,6 @@
         iSliderModel = widgetFactory.createModel<IMulSliderModel> ("mulslidermodel");
         iSliderModel->SetTemplate(ESliderTemplate3);
         iSliderWidget->setModel(iSliderModel);
-        iSliderWidget->control()->disableState(IAlfWidgetControl::Focusable);
     
         //adding the range and slider tick value 
         if(iSliderModel)
@@ -554,12 +537,6 @@
     //Since the toolbar should not be present for ImageViewer.
     if(!iImgViewerMode)
         {
-		TInt focusIndex = iMediaList->FocusIndex();
-		if (focusIndex >= 0 && focusIndex < iMediaList->Count())
-			{
-			TBool dimmed = (EMPXVideo == iMediaList->Item(focusIndex).Category());
-			Toolbar()->SetItemDimmed(EGlxCmdSlideshowPlay, dimmed, ETrue);
-			}
         //show the toolbar
         EnableFSToolbar(ETrue);
         }
@@ -695,6 +672,7 @@
 	        HideUi(iSliderWidget->IsHidden());
 	        }
 		}
+    iViewWidget->show(ETrue);
     }
 
 // ---------------------------------------------------------------------------
@@ -714,6 +692,7 @@
         {
         iSliderWidget->AddEventHandler(*this);
         }
+    iViewWidget->show(ETrue);
     iViewWidget->setRect(TRect(TPoint(0,0),AlfUtil::ScreenSize()));
 	GlxSetAppState::SetState(EGlxInFullScreenView);   
     }
@@ -963,11 +942,6 @@
     if(iZoomControl && iZoomControl->Activated())
         {
         iZoomControl->HandleZoomForegroundEvent(aForeground);
-        if (aForeground && iUri && !ConeUtils::FileExists(iUri->Des()))
-            {
-            GLX_LOG_INFO("File does not exist, Exit zoom view!");
-            HandleItemRemovedL();
-            }
         }
 
     if (!aForeground)
@@ -983,13 +957,15 @@
 		if (iMediaList)
 			{
 			/** if there is no image to show go back to the previous view */
-			if (!iMediaList->Count() && iNaviState->ViewingMode()
-                    == NGlxNavigationalState::EView)
-                {
-                iUiUtility->SetViewNavigationDirection(
-                        EGlxNavigationBackwards);
-                iNaviState->ActivatePreviousViewL();
-                }
+			if (!iMediaList->Count())
+				{
+				iUiUtility->SetViewNavigationDirection(EGlxNavigationBackwards);
+				CGlxNavigationalState* navigationalState =
+						CGlxNavigationalState::InstanceL();
+				CleanupClosePushL(*navigationalState);
+				navigationalState ->ActivatePreviousViewL();
+				CleanupStack::PopAndDestroy(navigationalState);
+				}
 			else if (iMediaListMulModelProvider)
 				{
 	            UpdateItems();
@@ -1037,7 +1013,6 @@
     TRACER("CGlxFullScreenViewImp::offerEventL");
     if ( aEvent.IsKeyEvent())
         {
-		GLX_LOG_INFO1("CGlxFullScreenViewImp::OfferEventL aEvent.KeyEvent().iScanCode: %d",aEvent.KeyEvent().iScanCode); 
         switch ( aEvent.KeyEvent().iScanCode )
             {
             case EStdKeyNkpAsterisk :
@@ -1050,19 +1025,12 @@
                 //EKeyApplicationC for which TStdScancode is EStdKeyApplicatoinC
             case EStdKeyApplicationC: 
                 {
-                TInt focusIndex = iMediaList->FocusIndex();
-                if (focusIndex >= 0 && focusIndex < iMediaList->Count())
+                if(EEventKeyDown == aEvent.Code())
                     {
-                    if (EEventKey == aEvent.Code() && (EMPXImage 
-                            == iMediaList->Item(focusIndex).Category()))
-                        {
-                        HideUi(EFalse);
-                        SetSliderToMin();
-                        TRAP_IGNORE(ActivateZoomControlL(EZoomStartKey));
-                        return EEventHandled;
-                        }
+                    HideUi(EFalse);
+                    TRAP_IGNORE( ActivateZoomControlL(EZoomStartKey));
+                    return EEventConsumed;
                     }
-				// Fall through to show the UI in case of EMPXVideo
                 }
             case EStdKeyUpArrow:            
             case EStdKeyDownArrow:
@@ -1154,17 +1122,11 @@
                 
             case ETypeRemove:
                 {
-                // If From photos, delete the img.
-                // If Image-Viewer collection and not in private Path 
-                // handle the "C" or BackSpace key to delete the item
-                if (!iImgViewerMode || (iImageViewerInstance
-                        && !iImageViewerInstance->IsPrivate()))
-                    {
-                    ProcessCommandL(EGlxCmdDelete);
-                    return EEventConsumed;
-                    }
-                return EEventNotHandled;
+                // Handle the "C" key or the BackSpace key to Delete an item.
+                ProcessCommandL(EGlxCmdDelete);
+                return EEventConsumed;
                 }               
+                
             case ETypeDoubleTap:
                 {
                 GLX_LOG_INFO("CGlxFullScreenViewImp::OfferEventL ETypeDoubleTap");   
@@ -1189,13 +1151,33 @@
                 }
             case ETypeItemRemoved:
                 {
-                GLX_LOG_INFO("CGlxFullScreenViewImp::OfferEventL ETypeItemRemoved");
-                HandleItemRemovedL();
+                SetItemToHDMIL();
+                TInt focusIndex = iMediaList->FocusIndex();
+                if (focusIndex != KErrNotFound && EUiOn == GetUiState())
+                    {
+                    // show/hide the slider
+                    if (iSliderWidget)
+                        {
+                        iSliderWidget->ShowWidget(CheckIfSliderToBeShownL());
+                        }
+                    }
+                /** if this is the last image deleted when Photo is in foreground, go back to the previous view*/
+				if (!iMediaList->Count() && IsForeground())
+					{
+					iUiUtility->SetViewNavigationDirection(
+							EGlxNavigationBackwards);
+					CGlxNavigationalState* navigationalState =
+							CGlxNavigationalState::InstanceL();
+					CleanupClosePushL(*navigationalState);
+					navigationalState ->ActivatePreviousViewL();
+					CleanupStack::PopAndDestroy(navigationalState);
+					}
                 return EEventConsumed;
                 }
             case ETypeHighlight:
                 {
-                GLX_LOG_INFO("CGlxFullScreenViewImp::OfferEventL ETypeHighlight");
+                //Clear the last consumed uri when swiping to next image 
+                iDrmUtility->ClearLastConsumedItemUriL();
                 iMediaList->SetFocusL( NGlxListDefs::EAbsolute,(aEvent.CustomEventData())); 
                 if (AknLayoutUtils::PenEnabled())
                 	{
@@ -1219,7 +1201,6 @@
                 if(item.Category() == EMPXVideo)
                     {                                 
                     ProcessCommandL(EGlxCmdPlay);
-                    iViewWidget->show(false);
                     } 
                 else
                     { 
@@ -1302,22 +1283,9 @@
             iIsDialogLaunched = ETrue;
             break;
             }
-        case EGlxCmdDialogDismissed:
-            {
-            if (iIsDialogLaunched && iIsMMCRemoved)
-                {
-                ProcessCommandL(EAknSoftkeyExit);
-                }
-            consumed = ETrue;
-            iIsDialogLaunched = EFalse;
-            break;
-            }
 		case EAknSoftkeyBack:
             {
             HideUi(ETrue);
-            // Enable status pane  and  Set null text 
-			StatusPane()->MakeVisible(ETrue);
-			SetTitlePaneTextL(KNullDesC);
             break;
             }                        
         } 
@@ -1855,11 +1823,7 @@
         //(e.g. video, corrupted item, item with invalid DRM)
         iHdmiController->ItemNotSupported();
         }
-    
     iOldFocusIndex = iMediaList->FocusIndex();
-    delete iUri;
-    iUri = NULL;   
-    iUri = item.Uri().AllocL();
     }
 
 // ---------------------------------------------------------------------------
@@ -2096,63 +2060,3 @@
             }
         }
     }
-
-// ---------------------------------------------------------------------------
-// Sets the title pane text
-// ---------------------------------------------------------------------------
-void CGlxFullScreenViewImp::SetTitlePaneTextL(const TDesC& aTitleText)
-	{
-    TRACER("CGlxFullScreenViewImp::SetTitlePaneTextL()");
-    CAknViewAppUi* appui = AppUi();
-    if (appui)
-        {
-        CAknTitlePane* titlePane =
-                (CAknTitlePane*) appui->StatusPane()->ControlL(TUid::Uid(
-                        EEikStatusPaneUidTitle));
-        titlePane->SetTextL(aTitleText);
-        titlePane->DrawNow();
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// HandleItemRemovedL
-// ---------------------------------------------------------------------------
-void CGlxFullScreenViewImp::HandleItemRemovedL()
-    {
-    TRACER("CGlxFullScreenViewImp::HandleItemRemovedL()");
-    TInt focusIndex = iMediaList->FocusIndex();
-    TInt mlCount = iMediaList->Count();
-    GLX_LOG_INFO2("CGlxFullScreenViewImp::HandleItemRemovedL focusIndex=%d, iOldFocusIndex=%d",
-            focusIndex, iOldFocusIndex);
-    // When photos is in background, the Following scenario could happen,
-    // 1) First item is deleted => iOldFocusIndex == focusIndex (or)
-    // 2) Last item is deleted => iOldFocusIndex == mlCount (or)
-    // 3) New item is added and focused item is deleted => iOldFocusIndex != focusIndex
-    if (mlCount && (iOldFocusIndex == focusIndex || iOldFocusIndex == mlCount
-            || iOldFocusIndex != focusIndex) && iZoomControl
-            && iZoomControl->Activated())
-        {
-        GLX_LOG_INFO("Focused item is removed, Exit zoom view!");
-        DeactivateZoomControlL();
-        }
-    SetItemToHDMIL();
-    if (focusIndex != KErrNotFound && focusIndex < iMediaList->Count() && EUiOn
-            == GetUiState())
-        {
-        // show/hide the slider
-        if (iSliderWidget)
-            {
-            iSliderWidget->ShowWidget(CheckIfSliderToBeShownL());
-            }
-        TBool dimmed = (EMPXVideo == iMediaList->Item(focusIndex).Category());
-        Toolbar()->SetItemDimmed(EGlxCmdSlideshowPlay, dimmed, ETrue);
-        }
-    /** if this is the last image deleted when Photo is in foreground, go back to the previous view*/
-    if (mlCount == 0 && IsForeground() && iNaviState->ViewingMode()
-            == NGlxNavigationalState::EView)
-        {
-        iUiUtility->SetViewNavigationDirection(EGlxNavigationBackwards);
-        iNaviState->ActivatePreviousViewL();
-        }
-    TRAP_IGNORE(ShowDrmExpiryNoteL());
-    }
--- a/photosgallery/viewframework/views/gridview/bwins/glxgridviewu.def	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/viewframework/views/gridview/bwins/glxgridviewu.def	Wed Oct 13 14:32:09 2010 +0300
@@ -1,5 +1,5 @@
 EXPORTS
 	?NewLC@CGlxGridView@@SAPAV1@PAVMGlxMediaListFactory@@ABVTGridViewResourceIds@@HABVTDesC16@@@Z @ 1 NONAME ; class CGlxGridView * CGlxGridView::NewLC(class MGlxMediaListFactory *, class TGridViewResourceIds const &, int, class TDesC16 const &)
 	?NewL@CGlxGridView@@SAPAV1@PAVMGlxMediaListFactory@@ABVTGridViewResourceIds@@HABVTDesC16@@@Z @ 2 NONAME ; class CGlxGridView * CGlxGridView::NewL(class MGlxMediaListFactory *, class TGridViewResourceIds const &, int, class TDesC16 const &)
-	?NewL@CGlxGridViewMLObserver@@SAPAV1@AAVMHgScrollBufferObserver@@AAVMGlxMediaList@@PAVCHgGrid@@W4TGlxFilterItemType@@@Z @ 3 NONAME ; class CGlxGridViewMLObserver * CGlxGridViewMLObserver::NewL(class MHgScrollBufferObserver &, class MGlxMediaList &, class CHgGrid *, enum TGlxFilterItemType)
+	?NewL@CGlxGridViewMLObserver@@SAPAV1@AAVMGlxMediaList@@PAVCHgGrid@@W4TGlxFilterItemType@@@Z @ 3 NONAME ; class CGlxGridViewMLObserver * CGlxGridViewMLObserver::NewL(class MGlxMediaList &, class CHgGrid *, enum TGlxFilterItemType)
 
--- a/photosgallery/viewframework/views/gridview/eabi/glxgridviewu.def	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/viewframework/views/gridview/eabi/glxgridviewu.def	Wed Oct 13 14:32:09 2010 +0300
@@ -1,7 +1,7 @@
 EXPORTS
 	_ZN12CGlxGridView4NewLEP20MGlxMediaListFactoryRK20TGridViewResourceIdsiRK7TDesC16 @ 1 NONAME
 	_ZN12CGlxGridView5NewLCEP20MGlxMediaListFactoryRK20TGridViewResourceIdsiRK7TDesC16 @ 2 NONAME
-	_ZN22CGlxGridViewMLObserver4NewLER23MHgScrollBufferObserverR13MGlxMediaListP7CHgGrid18TGlxFilterItemType @ 3 NONAME
+	_ZN22CGlxGridViewMLObserver4NewLER13MGlxMediaListP7CHgGrid18TGlxFilterItemType @ 3 NONAME
 	_ZTI21CGlxGridViewContainer @ 4 NONAME
 	_ZTI22CGlxGridViewMLObserver @ 5 NONAME
 	_ZTV21CGlxGridViewContainer @ 6 NONAME
--- a/photosgallery/viewframework/views/gridview/inc/glxgridviewmlobserver.h	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/viewframework/views/gridview/inc/glxgridviewmlobserver.h	Wed Oct 13 14:32:09 2010 +0300
@@ -23,15 +23,10 @@
 #include <mglxmedialistobserver.h>
 #include <glxfiltergeneraldefs.h>
 
-// CONSTANTS
-const TInt KNoOfPages(3);
-const TInt KBufferTresholdSize(3);    // in rows
-
 // FORWARD DECLARATIONS
 class CGlxMediaList;
 class CHgGrid;
 class CGlxDRMUtility;
-class MHgScrollBufferObserver;
 //class CHgContextUtility;
 
 // CLASS DECLARATION
@@ -46,10 +41,9 @@
      *
      * @return Pointer to newly created object.
      */
-    IMPORT_C static CGlxGridViewMLObserver* NewL(
-            MHgScrollBufferObserver& aHgScrollBufferObs,
-            MGlxMediaList& aMediaList, CHgGrid* aHgGrid,
-            TGlxFilterItemType aFilterType = EGlxFilterVideoAndImages);
+    IMPORT_C static CGlxGridViewMLObserver* NewL(MGlxMediaList& aMediaList,
+            CHgGrid* aHgGrid, TGlxFilterItemType aFilterType =
+                    EGlxFilterVideoAndImages);
 
     /**
      * Destructor.
@@ -77,8 +71,7 @@
     /**
      * C++ default constructor.
      */
-    CGlxGridViewMLObserver(MHgScrollBufferObserver& aHgScrollBufferObs,
-            MGlxMediaList& aMediaList, CHgGrid* aHgGrid,
+    CGlxGridViewMLObserver(MGlxMediaList& aMediaList, CHgGrid* aHgGrid,
             TGlxFilterItemType aFilterType);
 
     /**
@@ -134,8 +127,6 @@
     void SetIconL(TInt aItemIndex, TInt aBitmapId, TInt aMaskId, TInt aFlags);
     
 private:
-    // Hg Grid scroll buffer observer
-    MHgScrollBufferObserver& iHgScrollBufferObs;
 
     MGlxMediaList& iMediaList;
 	
--- a/photosgallery/viewframework/views/gridview/src/glxgridviewcontainer.cpp	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/viewframework/views/gridview/src/glxgridviewcontainer.cpp	Wed Oct 13 14:32:09 2010 +0300
@@ -44,6 +44,9 @@
 #include "glxgridviewimp.h"
 #include "glxgridviewmlobserver.h"                      // medialist observer for Hg Grid
 
+const TInt KNoOfPages(3);
+const TInt KBufferTresholdSize(3); 						// in rows
+
 // ======== MEMBER FUNCTIONS ========
 
 // ---------------------------------------------------------------------------
@@ -340,7 +343,7 @@
 	{
     TRACER("CGlxGridViewContainer::HandleOpenL()");
 	// Make sure that the Selection Index is inside medialist count
-	if (!iIsDialogLaunched && aIndex <iMediaList->Count() && aIndex >=0)
+	if (aIndex <iMediaList->Count() && aIndex >=0)
 		{
 		if (!(iHgGrid->Flags() && CHgScroller::EHgScrollerSelectionMode))
 			{
@@ -523,8 +526,7 @@
 	{
 	TRACER("CGlxGridViewContainer::CreateGridMediaListObserverL()");
 	// Creating the Medialist observer for HG Grid
-	iGlxGridMLObserver = CGlxGridViewMLObserver::NewL(*this, *iMediaList,
-            iHgGrid);
+	iGlxGridMLObserver = CGlxGridViewMLObserver::NewL(*iMediaList, iHgGrid);
 	}
     
 // ---------------------------------------------------------------------------
@@ -960,17 +962,6 @@
 		    iIsDialogLaunched = ETrue;
             break;
    		    }
-		case EGlxCmdDialogDismissed:
-		    {
-            if (iIsDialogLaunched && iIsMMCRemoved)
-                {
-                iGlxGridViewObserver.HandleGridEventsL(EAknSoftkeyExit);
-                }
-
-            iIsDialogLaunched = EFalse;
-            retVal = ETrue;
-            break;
-            }
 		default:
 			break;
 		}
--- a/photosgallery/viewframework/views/gridview/src/glxgridviewimp.cpp	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/viewframework/views/gridview/src/glxgridviewimp.cpp	Wed Oct 13 14:32:09 2010 +0300
@@ -127,6 +127,9 @@
 	{
 	TRACER("CGlxGridViewImp::DoMLViewActivateL()");
 
+    TUint transitionID = (iUiUtility->ViewNavigationDirection()==
+          EGlxNavigationForwards)?KActivateTransitionId:KFSDeActivateTransitionId; 
+    
     HBufC8* activationParam = HBufC8::NewLC(KMaxUidName);
     activationParam->Des().AppendNum(KGlxActivationCmdShowAll);    
 
@@ -177,8 +180,8 @@
         iToolbar = CAknToolbar::NewL(R_GLX_GRID_VIEW_TOOLBAR);
         SetGridToolBar(iToolbar);
         SetToolbarObserver(this);
-        iToolbar->SetDimmed(ETrue);
-        iToolbar->SetToolbarVisibility(ETrue);
+        //Make the toolbar visible only when the medialist is populated
+        iToolbar->SetToolbarVisibility(iMediaList->IsPopulated());
         }
 	//Create gridview container
 	iGlxGridViewContainer = CGlxGridViewContainer::NewL(iMediaList,
@@ -190,14 +193,11 @@
     // except if launched from Camera App.
     if (aCustomMessage.Compare(activationParam->Des()) != 0) 
         {
-		TUint transitionID = (iUiUtility->ViewNavigationDirection()
-				== EGlxNavigationForwards) ? KActivateTransitionId
-				: KFSDeActivateTransitionId;
         GfxTransEffect::BeginFullScreen( transitionID, TRect(),
                                     AknTransEffect::EParameterType, 
                                     AknTransEffect::GfxTransParam( KPhotosUid,
-                                    AknTransEffect::TParameter::EEnableEffects) );
-        iIsTransEffectStarted = ETrue;
+                                    AknTransEffect::TParameter::EEnableEffects) );	
+        GfxTransEffect::EndFullScreen();
         }	
 	CleanupStack::PopAndDestroy(activationParam);
 	}
--- a/photosgallery/viewframework/views/gridview/src/glxgridviewmlobserver.cpp	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/viewframework/views/gridview/src/glxgridviewmlobserver.cpp	Wed Oct 13 14:32:09 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies). 
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -55,30 +55,25 @@
 // ---------------------------------------------------------------------------
 //
 EXPORT_C CGlxGridViewMLObserver* CGlxGridViewMLObserver::NewL(
-        MHgScrollBufferObserver& aHgScrollBufferObs,
         MGlxMediaList& aMediaList, CHgGrid* aHgGrid,
         TGlxFilterItemType aFilterType)
     {
     TRACER("CGlxGridViewMLObserver::NewL()");
     CGlxGridViewMLObserver* self = new (ELeave) CGlxGridViewMLObserver(
-            aHgScrollBufferObs, aMediaList, aHgGrid, aFilterType);
+            aMediaList, aHgGrid, aFilterType);
     CleanupStack::PushL(self);
     self->ConstructL();
     CleanupStack::Pop(self);
     return self;
     }
-
 // ---------------------------------------------------------------------------
 // C++ default constructor can NOT contain any code, that
 // might leave.
 // ---------------------------------------------------------------------------
 //
-CGlxGridViewMLObserver::CGlxGridViewMLObserver(
-        MHgScrollBufferObserver& aHgScrollBufferObs,
-        MGlxMediaList& aMediaList, CHgGrid* aHgGrid,
-        TGlxFilterItemType aFilterType) :
-    iHgScrollBufferObs(aHgScrollBufferObs), iMediaList(aMediaList), iHgGrid(
-            aHgGrid), iFilterType(aFilterType)
+CGlxGridViewMLObserver::CGlxGridViewMLObserver(MGlxMediaList& aMediaList,
+        CHgGrid* aHgGrid, TGlxFilterItemType aFilterType) :
+    iMediaList(aMediaList), iHgGrid(aHgGrid), iFilterType(aFilterType)
     {
     TRACER("CGlxGridViewMLObserver::CGlxGridViewMLObserver()");
     }
@@ -86,7 +81,7 @@
 // ---------------------------------------------------------------------------
 // Symbian 2nd phase constructor can leave.
 // ---------------------------------------------------------------------------
-//
+//  
 void CGlxGridViewMLObserver::ConstructL()
     {
     TRACER("CGlxGridViewMLObserver::ConstructL()");
@@ -99,19 +94,19 @@
     iGridIconSize = uiUtility->GetGridIconSize();
     iItemsPerPage = uiUtility->VisibleItemsInPageGranularityL();
     CleanupStack::PopAndDestroy(uiUtility);
-
-    iQualityTnAttrib = TMPXAttribute (KGlxMediaIdThumbnail,
-        GlxFullThumbnailAttributeId( ETrue,  iGridIconSize.iWidth,
+    
+    iQualityTnAttrib = TMPXAttribute (KGlxMediaIdThumbnail, 
+        GlxFullThumbnailAttributeId( ETrue,  iGridIconSize.iWidth, 
                 iGridIconSize.iHeight ) );
 
-    iSpeedTnAttrib = TMPXAttribute (KGlxMediaIdThumbnail,
-        GlxFullThumbnailAttributeId( EFalse,  iGridIconSize.iWidth,
+    iSpeedTnAttrib = TMPXAttribute (KGlxMediaIdThumbnail, 
+        GlxFullThumbnailAttributeId( EFalse,  iGridIconSize.iWidth, 
                 iGridIconSize.iHeight ) );
-
+    
     iIconsFileName.Append(KDC_APP_BITMAP_DIR);
     iIconsFileName.Append(KGlxIconsFilename);
     iIsDefaultIconSet = EFalse;
-
+    
     iDiskErrorIntimated = EFalse;
     }
 
@@ -133,8 +128,8 @@
 // ----------------------------------------------------------------------------
 // HandleItemAddedL
 // ----------------------------------------------------------------------------
-//
-void CGlxGridViewMLObserver::HandleItemAddedL( TInt aStartIndex, TInt aEndIndex,
+// 
+void CGlxGridViewMLObserver::HandleItemAddedL( TInt aStartIndex, TInt aEndIndex, 
      MGlxMediaList* aList )
     {
     TRACER("CGlxGridViewMLObserver::HandleItemAddedL()");
@@ -152,14 +147,14 @@
         TTime startTime;
         GLX_LOG_INFO("CGlxGridViewMLObserver::HandleItemAddedL - ResizeL(+)");
         startTime.HomeTime();
-#endif
+#endif    
         iHgGrid->ResizeL(aList->Count());
 #ifdef _DEBUG
         TTime stopTime;
         stopTime.HomeTime();
         GLX_DEBUG2("CGlxGridViewMLObserver::HandleItemAddedL - ResizeL(-) took <%d> us",
                 (TInt)stopTime.MicroSecondsFrom(startTime).Int64());
-#endif
+#endif         
         }
     else
         {
@@ -173,65 +168,46 @@
 // ----------------------------------------------------------------------------
 // HandleItemRemoved
 // ----------------------------------------------------------------------------
-//
-void CGlxGridViewMLObserver::HandleItemRemovedL( TInt aStartIndex,
+//  
+void CGlxGridViewMLObserver::HandleItemRemovedL( TInt aStartIndex, 
         TInt aEndIndex, MGlxMediaList* aList )
     {
     TRACER("CGlxGridViewMLObserver::HandleItemRemovedL()");
-    GLX_DEBUG3("CGlxGridViewMLObserver::HandleItemRemovedL() aStartIndex(%d), aEndIndex(%d)",
-        aStartIndex, aEndIndex);
     if (iHgGrid)
         {
-        TInt mediaCount = aList->Count();
-        // If the last item is also deleted, refresh the view
-        if (mediaCount <= 0)
+        TInt mediaCount = aList->Count();   
+        
+        for (TInt i = aEndIndex; i>= aStartIndex; i--)
             {
-            if (iMediaList.VisibleWindowIndex() > iMediaList.Count())
-                {
-                iMediaList.SetVisibleWindowIndexL(0);
-                }
-            //This is done since the Hg doesnot refresh the screen
-            //when we remove all the items from the grid
-            GLX_LOG_INFO("CGlxGridViewMLObserver::HandleItemRemovedL - Hg Reset");
-            iHgGrid->DrawDeferred();
-            iHgGrid->Reset();
-            return;
+            iHgGrid->RemoveItem(i);
             }
 
-        if (aStartIndex == aEndIndex)
-            {
-            iHgGrid->RemoveItem(aStartIndex);
-            }
-        else
-            {
-            GLX_LOG_INFO("CGlxGridViewMLObserver::HandleItemRemovedL - Hg RemoveItems(+)");
-            // Need to disable the buffering support until HgGrid data model
-            // is synced with Medialist; Otherwise, RequestL would result in
-            // requesting same index for the no of items removed.
-            iHgGrid->DisableScrollBuffer();
-            for (TInt i = aEndIndex; i >= aStartIndex; i--)
+	    // If the last item is also deleted, this refreshes the view
+	    if (mediaCount <=0)
+	        {
+            if(iMediaList.VisibleWindowIndex() > iMediaList.Count())
                 {
-                iHgGrid->RemoveItem(i);
-                }
-            // Enable Buffer support
-            iHgGrid->EnableScrollBufferL(iHgScrollBufferObs, (KNoOfPages
-                    * iItemsPerPage), KBufferTresholdSize);
-            GLX_LOG_INFO("CGlxGridViewMLObserver::HandleItemRemovedL - Hg RemoveItems(-)");
+                iMediaList.SetVisibleWindowIndexL(0);
+                }	        	
+			//This is done since the Hg doesnot refresh the screen
+			//when we remove all the items from the grid
+	        iHgGrid->DrawDeferred(); 
+	        iHgGrid->Reset();
+			return;
+	        }
+	    else if (iMediaList.VisibleWindowIndex() > iMediaList.Count())
+            {
+            iMediaList.SetVisibleWindowIndexL(iMediaList.Count()-1);
             }
-
-        if (iMediaList.VisibleWindowIndex() > iMediaList.Count())
-            {
-            iMediaList.SetVisibleWindowIndexL(iMediaList.Count() - 1);
-            }
-        iHgGrid->RefreshScreen(iHgGrid->FirstIndexOnScreen());
+        iHgGrid->RefreshScreen(iHgGrid->FirstIndexOnScreen()); 			
         }
     }
 
 // ----------------------------------------------------------------------------
 // HandleAttributesAvailableL
 // ----------------------------------------------------------------------------
-//
-void CGlxGridViewMLObserver::HandleAttributesAvailableL( TInt aItemIndex,
+//  
+void CGlxGridViewMLObserver::HandleAttributesAvailableL( TInt aItemIndex, 
     const RArray<TMPXAttribute>& aAttributes, MGlxMediaList* /*aList*/ )
     {
     TRACER("CGlxGridViewMLObserver::HandleAttributesAvailableL()");
@@ -290,20 +266,20 @@
 					CHgItem::EHgItemFlagsNone);
             }
         }
-
-    //Now Update the items with the DRM/video icon and  date/time
+    
+    //Now Update the items with the DRM/video icon and  date/time 
     UpdateItemsL(aItemIndex,aAttributes);
-
+    
     //Now refresh the screen based on the attributes available index
     RefreshScreenL(aItemIndex,aAttributes);
     }
-
+    
 // ----------------------------------------------------------------------------
 // HandleFocusChangedL
 // ----------------------------------------------------------------------------
-//
+//  
 void CGlxGridViewMLObserver::HandleFocusChangedL( NGlxListDefs::
-    TFocusChangeType /*aType*/, TInt aNewIndex, TInt aOldIndex,
+    TFocusChangeType /*aType*/, TInt aNewIndex, TInt aOldIndex, 
     MGlxMediaList* /*aList*/ )
     {
     TRACER("CGlxGridViewMLObserver::HandleFocusChangedL()");
@@ -323,8 +299,8 @@
 // ----------------------------------------------------------------------------
 // HandleItemSelected
 // ----------------------------------------------------------------------------
-//
-void CGlxGridViewMLObserver::HandleItemSelectedL(TInt /*aIndex*/,
+//  
+void CGlxGridViewMLObserver::HandleItemSelectedL(TInt /*aIndex*/, 
     TBool /*aSelected*/, MGlxMediaList* /*aList*/ )
     {
     TRACER("CGlxGridViewMLObserver::HandleItemSelectedL()");
@@ -333,18 +309,18 @@
 // ----------------------------------------------------------------------------
 // HandleMessageL
 // ----------------------------------------------------------------------------
-//
- void CGlxGridViewMLObserver::HandleMessageL( const CMPXMessage& /*aMessage*/,
+//    
+ void CGlxGridViewMLObserver::HandleMessageL( const CMPXMessage& /*aMessage*/, 
     MGlxMediaList* /*aList*/ )
     {
     TRACER("CGlxGridViewMLObserver::HandleMessageL()");
     }
-
+  
 // ----------------------------------------------------------------------------
 // HandleError
 // ----------------------------------------------------------------------------
 //
-void CGlxGridViewMLObserver::HandleError( TInt /*aError*/ )
+void CGlxGridViewMLObserver::HandleError( TInt /*aError*/ ) 
     {
     TRACER("CGlxGridViewMLObserver::HandleError()");
     TRAP_IGNORE(HandleErrorL());
@@ -359,15 +335,15 @@
     TRACER("CGlxGridViewMLObserver::HandleErrorL()");
 
     TInt bitmapId  = EMbmGlxiconsQgn_prop_image_corrupted;
-    TInt maskId = EMbmGlxiconsQgn_prop_image_corrupted_mask;
+    TInt maskId = EMbmGlxiconsQgn_prop_image_corrupted_mask;	
     TInt flags     = CHgItem::EHgItemFlagsNone ;
-
+    
     for ( TInt i = 0; i < iMediaList.Count(); i++ )
         {
         const TGlxMedia& item = iMediaList.Item( i );
         TInt thumbnailError = GlxErrorManager::HasAttributeErrorL(
                 item.Properties(), KGlxMediaIdThumbnail );
-
+        
         if (KErrNone != thumbnailError)
             {
             switch (thumbnailError)
@@ -402,19 +378,19 @@
 					    }
 
                     }
-                    break;
+                    break;  
                 }
-
+            
             SetIconL(i, bitmapId, maskId, flags);
             }
         }
-    iHgGrid->RefreshScreen(iHgGrid->FirstIndexOnScreen());
+    iHgGrid->RefreshScreen(iHgGrid->FirstIndexOnScreen());    
     }
 
 // ----------------------------------------------------------------------------
 // SetIconL
 // ----------------------------------------------------------------------------
-//
+//  
 void CGlxGridViewMLObserver::SetIconL(TInt aItemIndex, TInt aBitmapId,
         TInt aMaskId, TInt aFlags)
     {
@@ -440,17 +416,17 @@
 // ----------------------------------------------------------------------------
 // HandleCommandCompleteL
 // ----------------------------------------------------------------------------
-//
-void CGlxGridViewMLObserver::HandleCommandCompleteL( CMPXCommand* /*aCommandResult*/,
+//  
+void CGlxGridViewMLObserver::HandleCommandCompleteL( CMPXCommand* /*aCommandResult*/, 
     TInt /*aError*/, MGlxMediaList* /*aList*/ )
     {
     TRACER("CGlxGridViewMLObserver::HandleCommandCompleteL()");
     }
-
+  
 // ----------------------------------------------------------------------------
 // HandleMediaL
 // ----------------------------------------------------------------------------
-//
+//  
 void CGlxGridViewMLObserver::HandleMediaL( TInt /*aListIndex*/, MGlxMediaList* /*aList*/ )
     {
     TRACER("CGlxGridViewMLObserver::HandleMediaL()");
@@ -489,22 +465,22 @@
 
         GLX_DEBUG2("GridMLObserver::HandlePopulatedL() iMediaList.Count()=%d",
                 iMediaList.Count());
-
+        
         if (iMediaList.Count() <= 0)
             {
             GLX_DEBUG1("GridMLObserver::HandlePopulatedL() - SetEmptyTextL()");
             iHgGrid->DrawNow();
             }
-
+        
         GLX_DEBUG1("GridMLObserver::HandlePopulatedL() - SetDefaultIconL()");
         SetDefaultIconL(ETrue);
         }
     }
-
+  
 // ----------------------------------------------------------------------------
 // HandleItemModifiedL
 // ----------------------------------------------------------------------------
-//
+//  
 void CGlxGridViewMLObserver::HandleItemModifiedL(const RArray<TInt>& aItemIndexes,
     MGlxMediaList* /*aList*/)
     {
@@ -513,9 +489,9 @@
         {
         TInt modifiedIndex = aItemIndexes[index];
         iModifiedIndexes.AppendL(modifiedIndex);
-        }
+        }  
     }
-
+                  
 // ----------------------------------------------------------------------------
 // HasRelevantThumbnailAttribute
 // ----------------------------------------------------------------------------
@@ -530,7 +506,7 @@
                                                        iSpeedTnAttrib );
     if ( qualityTn || speedTn )
         {
-        GLX_DEBUG1("GridMLObserver::HasRelevantThumbnail() - TN avail");
+        GLX_DEBUG1("GridMLObserver::HasRelevantThumbnail() - TN avail");                 
         return ETrue;
         }
     return EFalse;
@@ -540,7 +516,7 @@
 // ----------------------------------------------------------------------------
 // RefreshScreenL
 // ----------------------------------------------------------------------------
-//
+// 
 void CGlxGridViewMLObserver::RefreshScreenL(TInt aItemIndex,
                                       const RArray<TMPXAttribute>& aAttributes)
     {
@@ -566,11 +542,11 @@
                     firstIndex))
                 {
                 GLX_DEBUG2("GridMLObserver::HandleAttributesAvailableL()"
-                        " RefreshScreen - aItemIndex(%d)", aItemIndex);
+                        " RefreshScreen - aItemIndex(%d)", aItemIndex);					
                 iHgGrid->RefreshScreen(aItemIndex);
                 }
             }
-
+        
         if (!iIsDefaultIconSet)
             {
             GLX_DEBUG1("GridMLObserver::HandleAttributesAvailableL()"
@@ -589,17 +565,17 @@
                 if ( HasRelevantThumbnail(lastOnScreen) )
                     {
                     GLX_DEBUG2("GridMLObserver::HandleAttributesAvailableL()"
-                        " RefreshScreen - aItemIndex(%d)", aItemIndex);
+                        " RefreshScreen - aItemIndex(%d)", aItemIndex);					
                     iHgGrid->RefreshScreen(aItemIndex);
                     }
                 else if (aItemIndex == lastOnScreen)
                     {
                     GLX_DEBUG2("GridMLObserver::HandleAttributesAvailableL()"
-                           " RefreshScreen - lastOnScreen(%d)", lastOnScreen);
+                           " RefreshScreen - lastOnScreen(%d)", lastOnScreen); 
                     iHgGrid->RefreshScreen(lastOnScreen);
                     }
                 }
-
+            
             if (!iIsDefaultIconSet)
                 {
                 GLX_DEBUG1("GridMLObserver::HandleAttributesAvailableL()"
@@ -608,12 +584,12 @@
                 }
             }
         }
-
-    if (iModifiedIndexes.Count() > 0)
+    
+    if (iModifiedIndexes.Count() > 0)        
         {
         for(TInt index = 0;index<iModifiedIndexes.Count();index++)
             {
-            if (iModifiedIndexes[index] == aItemIndex &&
+            if (iModifiedIndexes[index] == aItemIndex && 
 			                     HasRelevantThumbnail(aItemIndex))
                 {
                 GLX_DEBUG2("GridMLObserver::HandleAttributesAvailableL()"
@@ -625,19 +601,19 @@
             }
         }
     }
-
+    
 // ----------------------------------------------------------------------------
 // UpdateItemsL
 // ----------------------------------------------------------------------------
-//
-void CGlxGridViewMLObserver::UpdateItemsL(TInt aItemIndex,
+// 
+void CGlxGridViewMLObserver::UpdateItemsL(TInt aItemIndex, 
                                       const RArray<TMPXAttribute>& aAttributes)
     {
     TRACER("CGlxGridViewMLObserver::UpdateItemsL()");
     TInt mediaCount = iMediaList.Count();
     const TGlxMedia& item = iMediaList.Item( aItemIndex );
     TIdentityRelation< TMPXAttribute > match ( &TMPXAttribute::Match );
-
+    
     if (aAttributes.Find(KMPXMediaDrmProtected, match) != KErrNotFound)
         {
         if (item.IsDrmProtected())
@@ -651,9 +627,9 @@
                      * fix for EABI-7RKHDG
                      * to show the invalid DRM icon
                      */
-                    TMPXGeneralCategory  cat = item.Category();
+                    TMPXGeneralCategory  cat = item.Category();                  
                     TBool checkViewRights = (cat==EMPXImage);
-
+                    
                     if(iDRMUtility->ItemRightsValidityCheckL(uri, checkViewRights))
                         {
                         iHgGrid->ItemL(aItemIndex).SetFlags(
@@ -665,11 +641,11 @@
                                 CHgItem::EHgItemFlagsDrmRightsExpired);
                         }
                     }
-                else
+                else 
                     {
-                    TMPXGeneralCategory  cat = item.Category();
+                    TMPXGeneralCategory  cat = item.Category();                  
                     TBool checkViewRights = (cat==EMPXImage);
-
+                    
                     if(iDRMUtility->ItemRightsValidityCheckL(uri, checkViewRights))
                         {
                         iHgGrid->ItemL(aItemIndex).SetFlags(
@@ -684,7 +660,7 @@
                 }
             }
         }
-
+    
     if (aAttributes.Find(KMPXMediaGeneralDate, match) != KErrNotFound)
         {
         TTime time(0);
@@ -693,20 +669,20 @@
             iHgGrid->ItemL(aItemIndex).SetTime(time);
             }
         }
-
+    
     if (aAttributes.Find(KMPXMediaGeneralCategory, match) != KErrNotFound)
         {
         if (item.Category() == EMPXVideo)
             {
             iHgGrid->ItemL(aItemIndex).SetFlags(CHgItem::EHgItemFlagsVideo);
             }
-        }
+        }    
     }
-
+    
 // ----------------------------------------------------------------------------
 // DisplayErrorNoteL
 // ----------------------------------------------------------------------------
-//
+// 
 void CGlxGridViewMLObserver::DisplayErrorNoteL(TInt aError)
     {
     TRACER("CGlxGridViewMLObserver::DisplayErrorNoteL()");
@@ -720,7 +696,7 @@
 // ----------------------------------------------------------------------------
 // SetDefaultIconL
 // ----------------------------------------------------------------------------
-//
+// 
 void CGlxGridViewMLObserver::SetDefaultIconL(TBool aTransparent)
     {
     TRACER("CGlxGridViewMLObserver::SetDefaultIconL()");
@@ -735,7 +711,7 @@
         TSize bmpSize = CHgGrid::PreferredImageSize();
         bitmap->Create(bmpSize, EColor16M);
         mask->Create(bmpSize, EGray256); // Gray mask
-        const TInt scanlineLength = bmpSize.iWidth; // 1 byte per pixel
+        const TInt scanlineLength = bmpSize.iWidth; // 1 byte per pixel 
         RBuf8 maskData;
         maskData.Create(scanlineLength);
         maskData.FillZ(scanlineLength); // Init with zero
@@ -750,7 +726,7 @@
         mask->EndDataAccess();
         iHgGrid->SetDefaultIconL(CGulIcon::NewL(bitmap, mask));
         CleanupStack::Pop(mask);
-        CleanupStack::Pop(bitmap);
+        CleanupStack::Pop(bitmap);		
         }
     else if (!iIsDefaultIconSet)
         {
--- a/photosgallery/viewframework/views/listview/src/glxlistviewimp.cpp	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/viewframework/views/listview/src/glxlistviewimp.cpp	Wed Oct 13 14:32:09 2010 +0300
@@ -182,6 +182,22 @@
     {
     TRACER("CGlxListViewImp::DoMLViewActivateL");  
     
+    TUint transitionID = (iUiUtility->ViewNavigationDirection()==
+         EGlxNavigationForwards)?KActivateTransitionId:KDeActivateTransitionId;
+		
+    //Do the activate animation only for views other than mainlist view and
+	//on backward navigation from any other views to main list view, since 
+	//for the app start the animation effect is by default provided.
+    if (iMediaList->IdSpaceId(0) != KGlxIdSpaceIdRoot || 
+           transitionID == KDeActivateTransitionId) 
+        {
+    	GfxTransEffect::BeginFullScreen( transitionID, TRect(),
+                                   AknTransEffect::EParameterType, 
+                         AknTransEffect::GfxTransParam( KPhotosUid, 
+                         AknTransEffect::TParameter::EEnableEffects) );   
+    	GfxTransEffect::EndFullScreen();
+    	}
+    
     iNextViewActivationEnabled = ETrue;
     if(StatusPane())
         {
@@ -290,23 +306,6 @@
     CreateListL();
     iProgressIndicator = CGlxProgressIndicator::NewL(*this);
     iMMCNotifier = CGlxMMCNotifier::NewL(*this);
-    
-    TUint transitionID = (iUiUtility->ViewNavigationDirection()==
-             EGlxNavigationForwards)?KActivateTransitionId:KDeActivateTransitionId;
-    		
-	//Do the activate animation only for views other than mainlist view and
-	//on backward navigation from any other views to main list view, since 
-	//for the app start the animation effect is by default provided.
-	if (iMediaList->IdSpaceId(0) != KGlxIdSpaceIdRoot || 
-		   transitionID == KDeActivateTransitionId) 
-		{
-		GfxTransEffect::BeginFullScreen( transitionID, TRect(),
-								   AknTransEffect::EParameterType, 
-						 AknTransEffect::GfxTransParam( KPhotosUid, 
-						 AknTransEffect::TParameter::EEnableEffects) ); 
-		iIsTransEffectStarted = ETrue;
-		}
-        
     }
 
 // ---------------------------------------------------------------------------
@@ -633,12 +632,6 @@
     if (iMediaList->FocusIndex() != EGlxListItemAll || iMediaList->IdSpaceId(
             0) != KGlxIdSpaceIdRoot)
         {
-        // Delete the bitmap; otherwise this memory will be leaked
-        if (aBitmap)
-            {
-            delete aBitmap;
-            aBitmap = NULL;
-            }
         GLX_LOG_INFO("CGlxListViewImp::PreviewTNReadyL()- Ignore!");
         return;
         }
@@ -722,6 +715,16 @@
             HBufC* emptyText = StringLoader::LoadLC(R_LIST_EMPTY_VIEW_TEXT); 
             iList->SetEmptyTextL(*emptyText);
             CleanupStack::PopAndDestroy(emptyText);
+            
+            //While coming back to main listview
+            TGlxIdSpaceId id = iMediaList->IdSpaceId(0);
+            if((id == KGlxIdSpaceIdRoot) && (mediaCount > 0))
+                {            
+                for (TInt i = 0; i < mediaCount; i++)
+                    {
+                    SetDefaultThumbnailL(i);
+                    }
+                }            
             }		
         
 		//Fix for ESLM-7SAHPT::Clear Flag to Disable QWERTY search input in list view
@@ -739,18 +742,11 @@
 		
 	if (mediaCount)
 	    {
-        TGlxIdSpaceId id = iMediaList->IdSpaceId(0);
-
 		for (TInt i=0; i<mediaCount; i++)
 			{
 		   	const TGlxMedia& item = iMediaList->Item(i);
 			iList->ItemL(i).SetTitleL(item.Title());
 			iList->ItemL(i).SetTextL(item.SubTitle());
-            // Set the default TNs for the main listview
-            if (id == KGlxIdSpaceIdRoot)
-                {
-                SetDefaultThumbnailL(i);
-                }
 			}
 		GLX_DEBUG3("CGlxListViewImp::CreateListL() Medialist Count = %d, "
 		        "iLastFocusIndex %d",mediaCount,iLastFocusedIndex);
--- a/photosgallery/viewframework/views/listview/src/glxpreviewthumbnailbinding.cpp	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/viewframework/views/listview/src/glxpreviewthumbnailbinding.cpp	Wed Oct 13 14:32:09 2010 +0300
@@ -153,11 +153,9 @@
             if (value)
                 {
                 CFbsBitmap* bitmap = new (ELeave) CFbsBitmap;
-                CleanupStack::PushL(bitmap);
                 ScaleBitmapToListSizeL(value->iBitmap, bitmap);
                 GLX_LOG_INFO1("iObserver.PreviewTNReadyL() iTrialCount=%d", iTrialCount);
                 iObserver.PreviewTNReadyL(bitmap, NULL);
-                CleanupStack::Pop(bitmap);
                 }
             else
                 {
--- a/photosgallery/viewframework/views/metadatadialog/data/glxmetadatadialog.rss	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/viewframework/views/metadatadialog/data/glxmetadatadialog.rss	Wed Oct 13 14:32:09 2010 +0300
@@ -217,9 +217,11 @@
 	{
 	items=
 		{
+		MENU_ITEM { command = KGlxViewBoundMenuCommandId; txt = qtn_lgal_options_view; },
+        	MENU_ITEM { command = EGlxCmdAiwShowMap; txt = qtn_lgal_option_show_on_map;},
 		MENU_ITEM { command = KGlxDeleteBoundMenuCommandId; txt = qtn_lgal_options_delete;flags = EEikMenuItemSpecific; },
 		MENU_ITEM { command = EAknCmdHelp; txt = qtn_options_help; }
-	        };
+	    };
 	}
     	
 // -----------------------------------------------------------------------------
@@ -435,9 +437,9 @@
                         },
                     AVKON_SETTING_ITEM
                         {
-                        identifier = EImgVwrMimeTypeItem;
+                        identifier = EImgVwrDescriptionItem;
                         setting_page_resource = r_metadata_name_settings_page;
-                        name = qtn_lgal_details_type;
+                        name = qtn_lgal_details_description;
                         empty_item_text = " ";
                         },
                     AVKON_SETTING_ITEM
--- a/photosgallery/viewframework/views/metadatadialog/inc/glximgvwrmetadatacontainer.h	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/viewframework/views/metadatadialog/inc/glximgvwrmetadatacontainer.h	Wed Oct 13 14:32:09 2010 +0300
@@ -11,9 +11,15 @@
 *
 * Contributors:
 *
-* Description: Image viewer metadata dialog container implementation
+* Description: 
 *
 */
+/*
+ * glximgvwrmetadatacontainer.h
+ *
+ *  Created on: Oct 22, 2009
+ *      Author: sourbasu
+ */
 
 #ifndef GLXIMGVWRMETADATACONTAINER_H_
 #define GLXIMGVWRMETADATACONTAINER_H_
@@ -43,117 +49,120 @@
 public MGlxMediaListObserver
 
     {
-public:
-    // Constructors and destructor
+public:  // Constructors and destructor
+    void ViewDynInitMenuPaneL(TInt aResourceId, CEikMenuPane *aMenuPane);
     /**
-     * Symbian standard tow phase construction.Construct object of CGlxImgVwrMetadataContainer object.
-     * 
-     * @param aRect rect for control
-     * @param aMediaList media list
-     * @return Metadata container object
-     */
-    static CGlxImgVwrMetadataContainer* NewL(const TRect& aRect,
-            const TDesC& aUri);
-
+    * Symbian standard tow phase construction.Construct object of CGlxImgVwrMetadataContainer object.
+    * 
+    * @param aRect rect for control
+    * @param aMediaList media list
+    * @return Metadata container object
+    */
+    static CGlxImgVwrMetadataContainer* NewL( const TRect& aRect,const TDesC& aUri);
+    
     /**
-     * Symbian standard tow phase construction.Construct object of CGlxImgVwrMetadataContainer object.
-     * 
-     * @param aRect rect for control
-     * @param aMediaList media list
-     * @return Metadata container object
-     */
-    static CGlxImgVwrMetadataContainer* NewLC(const TRect& aRect,
-            const TDesC& aUri);
-
+    * Symbian standard tow phase construction.Construct object of CGlxImgVwrMetadataContainer object.
+    * 
+    * @param aRect rect for control
+    * @param aMediaList media list
+    * @return Metadata container object
+    */  
+    static CGlxImgVwrMetadataContainer* NewLC( const TRect& aRect,const TDesC& aUri);
+    
     /**
-     * Destructor
-     */
+    * Destructor
+    */       
     ~CGlxImgVwrMetadataContainer();
 
-public:
-
-    // @ref CAknSettingItemList::CreateSettingItemL
-    CAknSettingItem* CreateSettingItemL(TInt aIdentifier);
-
-    // @ref CAknSettingItemList::HandleListBoxEventL
-    void HandleListBoxEventL(CEikListBox* aListBox, TListBoxEvent aEventType);
-    void HandleListboxChangesL();
-
-    //Change MSK
+public: 
+        
+   // @ref CAknSettingItemList::CreateSettingItemL
+   CAknSettingItem* CreateSettingItemL(TInt aIdentifier);
+   
+   // @ref CAknSettingItemList::HandleListBoxEventL
+   void HandleListBoxEventL(CEikListBox* aListBox,
+                                 TListBoxEvent aEventType);
+   void HandleListboxChangesL();
+   
+   //Enable disble the options based on the current selected item
+   TBool IsItemModifiable();
+   //Change MSK
     void ChangeMskL();
-
     //Enable marquee support
     void EnableMarqueingL();
-
+    
+    
+    
+    
 public:
-    //MedialistObserver APIS
-    void HandleItemAddedL(TInt aStartIndex, TInt aEndIndex,
-            MGlxMediaList* aList);
-    void
-            HandleItemRemovedL(TInt aStartIndex, TInt aEndIndex,
-                    MGlxMediaList*/* aList */);
-    void HandleAttributesAvailableL(TInt aItemIndex, const RArray<
-            TMPXAttribute>& aAttributes, MGlxMediaList* aList);
-    void HandleFocusChangedL(NGlxListDefs::TFocusChangeType aType,
-            TInt aNewIndex, TInt aOldIndex, MGlxMediaList* aList);
-    void HandleItemSelectedL(TInt aIndex, TBool aSelected,
-            MGlxMediaList* aList);
-    void HandleMessageL(const CMPXMessage& aMessage, MGlxMediaList* aList);
-    void HandleError(TInt aError);
-    void HandleCommandCompleteL(CMPXCommand* aCommandResult, TInt aError,
-            MGlxMediaList* aList);
-    void HandleMediaL(TInt aListIndex, MGlxMediaList* aList);
-    void HandleItemModifiedL(const RArray<TInt>& aItemIndexes,
-            MGlxMediaList* aList);
-    MGlxMediaList& MediaList();
-    void HandleCommandCompleteL(TAny* aSessionId,
-            CMPXCommand* /*aCommandResult*/, TInt aError,
-            MGlxMediaList* aList);
+        //MedialistObserver APIS
+        void HandleItemAddedL( TInt aStartIndex, TInt aEndIndex, MGlxMediaList* aList );
+        void HandleItemRemovedL( TInt aStartIndex, TInt aEndIndex, MGlxMediaList*/* aList */);
+        void HandleAttributesAvailableL( TInt aItemIndex, 
+        const RArray<TMPXAttribute>& aAttributes, MGlxMediaList* aList );    
+        void HandleFocusChangedL( NGlxListDefs::TFocusChangeType aType, 
+        TInt aNewIndex, TInt aOldIndex, MGlxMediaList* aList );
+        void HandleItemSelectedL(TInt aIndex, TBool aSelected, MGlxMediaList* aList );
+        void HandleMessageL( const CMPXMessage& aMessage, MGlxMediaList* aList );
+        void HandleError( TInt aError );
+        void HandleCommandCompleteL( CMPXCommand* aCommandResult, TInt aError, 
+        MGlxMediaList* aList );
+        void HandleMediaL( TInt aListIndex, MGlxMediaList* aList );
+        void HandleItemModifiedL( const RArray<TInt>& aItemIndexes, MGlxMediaList* aList );
+        void HandleErrorL();
+        MGlxMediaList& MediaList();
+        void HandleCommandCompleteL(TAny* aSessionId, 
+                CMPXCommand* /*aCommandResult*/, TInt aError, MGlxMediaList* aList);
 
 private:
 
-    /**
-     * C++ constructor.
-     * 
-     * @param aMediaList media list
-     */
-    CGlxImgVwrMetadataContainer(const TDesC& aUri);
-
-    /**
-     * Symbian 2nd phase constructor
-     * @param aRect rect for this control
-     */
-    void ConstructL(const TRect& aRect);
-    void CreateMediaListForSelectedItemL();
-    void SetAttributesL(TMPXAttribute attribute);
-    void EditItemL(TInt aIndex, TBool aCalledFromMenu);
-    void SetLicenseItemVisibilityL();
+        /**
+        * C++ constructor.
+        * 
+        * @param aMediaList media list
+        */
+        CGlxImgVwrMetadataContainer(const TDesC& aUri);
+        
+        /**
+        * Symbian 2nd phase constructor
+        * @param aRect rect for this control
+        */      
+        void ConstructL( const TRect& aRect);
+        void CreateMediaListForSelectedItemL();
+        void SetAttributesL(TMPXAttribute attribute);
+        void EditItemL(TInt aIndex, TBool aCalledFromMenu);
+        void SetNameDescriptionL(TInt aItem);
+        void SetDurationLIicenseItemVisibilityL();
+        TBool IsLicenseItem();
 
-    /**
-     * Create Image Viewer manager Instance
-     */
-    void CreateImageViewerInstanceL();
-
-    /**
-     * Delete Image Viewer manager Instance
-     */
-    void DeleteImageViewerInstance();
+        /**
+         * Create Image Viewer manager Instance
+         */
+        void CreateImageViewerInstanceL();
+        
+        /**
+         * Delete Image Viewer manager Instance
+         */
+        void DeleteImageViewerInstance();
 
-private:
-    //data
-    //Flag to check if the item is a video.
-    TBool iVideo;
-    //To check if marquee is enabled.
-    TBool iMarquee;
-    //to set visible license items based on the Item.
-    TBool iSetVisible;
-    RBuf iTextSetter;
-    const TDesC& iUri;
-    MGlxMediaList* iItemMediaList;
-    CGlxAttributeContext* iMainListAttributecontext;
-    TGlxSelectionIterator iSelectionIterator;
-    // For image viewer, not own
-    CGlxImageViewerManager* iImageViewerInstance;
+   
+private:    //data
+    
+        //Flag to check if the item is a video.
+        TBool iVideo;
+        //To check if marquee is enabled.
+        TBool iMarquee;
+        //to set visible license items based on the Item.
+        TBool iSetVisible;
+        RBuf iTextSetter;
+        const TDesC& iUri ;
+        MGlxMediaList* iItemMediaList;
+        CGlxAttributeContext* iMainListAttributecontext;
+        TGlxSelectionIterator iSelectionIterator;
+        // For image viewer, not own
+        CGlxImageViewerManager* iImageViewerInstance;
     };
 
+
+
 #endif /* GLXIMGVWRMETADATACONTAINER_H_ */
--- a/photosgallery/viewframework/views/metadatadialog/inc/glximgvwrmetadatadialog.h	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/viewframework/views/metadatadialog/inc/glximgvwrmetadatadialog.h	Wed Oct 13 14:32:09 2010 +0300
@@ -25,41 +25,41 @@
 // SYSTEM INCLUDES
 #include <AknDialog.h>
 
+#include <alf/alfscreenbuffer.h>
 #include <glximgvwrmetadatacontainer.h>
-
+// FORWARD DECLARATIONS
+class CGlxMetadataCommandHandler;
+class CGlxCommandHandlerAddToContainer;
+class CGlxUiUtility;
 
 // CLASS DECLARATION
 /**
  *  CGlxImgVwrMetadataDialog
  * 
- *  Image Viewer Metadata dialog implementation
+ *  Metadata dialog implementation
  */
 class CGlxImgVwrMetadataDialog : public CAknDialog
+
     {
-public:
-    // Constructors and destructor
+public: // Constructors and destructor
 
     /**
      * Two-phased constructor.
      *
      * @param aURI uri or file name of item
      */
-    IMPORT_C static CGlxImgVwrMetadataDialog* NewL(const TDesC& aUri);
+    IMPORT_C static CGlxImgVwrMetadataDialog* NewL( const TDesC& aUri );
 
     /**
      * Destructor.
      */
     virtual ~CGlxImgVwrMetadataDialog();
 
-private:
-    /**
-     * Constructor.
-     * @param aURI uri or file name of item
-     */  
+private :
     CGlxImgVwrMetadataDialog(const TDesC& aUri);
 
-public:
-    // Functions from base classes
+
+public: // Functions from base classes
 
     /**
      * Initializes the dialog and calls CAknDialog's 
@@ -71,64 +71,105 @@
      */
     IMPORT_C TInt ExecuteLD();
 
-protected:
+    
+protected:  // Functions from base classes
+
     /**
      * From MEikCommandObserver Prosesses menucommands
      *
      * @param aCommandId     Commant value defined in resources.
      */
-    void ProcessCommandL(TInt aCommandId);
+    void ProcessCommandL( TInt aCommandId );
+
+    /**
+     * From MEikMenuObserver Initializes items on the menu
+     *
+     * @param aMenuId    Current menu's resource Id
+     * @param aMenuPane  Pointer to menupane
+     */
+    void DynInitMenuPaneL(TInt aMenuId, CEikMenuPane* aMenuPane);
+    //hanldes orientation changes.
+    void HandleResourceChange( TInt aType );
+    void SizeChanged();
 
-private:
+private:        
+    /**
+     * Initializes the dialog's controls before the dialog is sized and 
+     * layed out. Empty by default.
+     */
+    void PreLayoutDynInitL();
+
+    /**
+     * Initializes the dialog's controls after the dialog has been sized 
+     * but before it has been activated.
+     */
+    void PostLayoutDynInitL();
     /**
      * Symbian 2nd phase constructor.
+     * 
+     * @param aURI
      */
     void ConstructL();
 
     /**
+     * Constructs the Alf Environment and display
+     */
+    void ConstructAlfEnvL();
+
+    /**
      * Initalise the resource
+     *
      */
-    void InitResourceL();
+    void InitResourceL();   
+
+    /** 
+     * To deal with any specific commands
+     *
+     * @param aCommand The command to respond to
+     * @return ETrue if the command has been handled.
+     *
+     */
+    TBool HandleViewCommandL(TInt aCommand);
+
+
 
 private:
+
+    void Draw( const TRect& /*aRect*/ ) const;    
+    void HandlePointerEventL(const TPointerEvent& aPointerEvent);       
     /**
      * SetTitleL
      * Sets title for view
      * @param aTitleText title of view to be set
      */
-    void SetTitleL(const TDesC& aTitleText);
+    void SetTitleL(const TDesC& aTitleText);    
     /**
      * SetPreviousTitleL
      * Sets title of previous view
      */
     void SetPreviousTitleL();
 
-    /** 
-    * Sets the dialog toolbar visibility
-    * @param aVisible - ETrue for visible; EFalse otherwise.
-    */
     void SetDetailsDlgToolbarVisibility(TBool aVisible);
 
-public:
-    // from MEikDialogPageObserver
+public: // from MEikDialogPageObserver
     /**
      * @ref MEikDialogPageObserver::CreateCustomControlL
      */
     SEikControlInfo CreateCustomControlL(TInt aControlType);
 
 public:
-    /** 
-    * Handles the toolbar visiblity to be in sync with the calling app
-    * @param aVisible - ETrue for visible; EFalse otherwise.
-    */    
+    /*
+     *  
+     */
     void HandleToolbarResetting(TBool aVisible);
 
-private:
-    //data
+private: //data
+
     TInt iResourceOffset;
     TBool iStatusPaneAvailable;
-    HBufC* iPreviousTitle;
-    const TDesC& iUri;
+    CGlxUiUtility* iUiUtility;      
+    HBufC* iPreviousTitle;    
+    const TDesC& iUri; 
     CGlxImgVwrMetadataContainer* iContainer;
     };
 
--- a/photosgallery/viewframework/views/metadatadialog/inc/glxmetadatacontainer.h	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/viewframework/views/metadatadialog/inc/glxmetadatacontainer.h	Wed Oct 13 14:32:09 2010 +0300
@@ -96,6 +96,7 @@
    
    //Enable disble the options based on the current selected item
    TBool IsItemModifiable();
+   TBool IsLicenseItem();
    TBool IsLocationItem();
    
    //Delete the location information
@@ -217,8 +218,6 @@
     	//Flag to indicate rename command is started
     	TBool iRenameStarted;
 
-        // Flag to indicate text entry popup display status
-        TBool iIsPopupShown;
 	};
 
 #endif //C_GLXMETADATACONTAINER_H__
--- a/photosgallery/viewframework/views/metadatadialog/inc/glxmetadatadialog.h	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/viewframework/views/metadatadialog/inc/glxmetadatadialog.h	Wed Oct 13 14:32:09 2010 +0300
@@ -127,9 +127,18 @@
     * @param aMenuPane  Pointer to menupane
     */
     void DynInitMenuPaneL(TInt aMenuId, CEikMenuPane* aMenuPane);
+		//hanldes orientation changes.
+    void HandleResourceChange( TInt aType );
+    void SizeChanged();
 
 private:        
 		/**
+		* Initializes the dialog's controls before the dialog is sized and 
+		* layed out. Empty by default.
+		*/
+		void PreLayoutDynInitL();
+		
+		/**
 		 * Initializes the dialog's controls after the dialog has been sized 
 		 * but before it has been activated.
 		 */
@@ -142,6 +151,11 @@
 		void ConstructL();
 		
 		/**
+		 * Constructs the Alf Environment and display
+		 */
+		void ConstructAlfEnvL();
+		
+		/**
 		* Initalise the resource
 		*
 		*/
@@ -163,6 +177,8 @@
 		MGlxMediaList& MediaList();
         
 private:
+
+		void Draw( const TRect& /*aRect*/ ) const;    
 		void HandlePointerEventL(const TPointerEvent& aPointerEvent);   	
 		/**
 		* SetTitleL
@@ -175,23 +191,14 @@
 		* Sets title of previous view
 		*/
 		void SetPreviousTitleL();
-
-		/** 
-		* Sets the dialog toolbar visibility
-		* @param aVisible - ETrue for visible; EFalse otherwise.
+			/**
+		* Find out the items nature to set the corresponding options
 		*/
+		void OnLocationEditL();
+		void AddTagL();
+		void AddAlbumL();    
 		void SetDetailsDlgToolbarVisibility(TBool aVisible);
-
-public:
-    // from MGlxMetadataDialogObserver	
-    /**
-     * Find out the items nature to set the corresponding options
-     */
-    void OnLocationEditL();
-    void AddTagL();
-    void AddAlbumL();
-    void HandleItemRemovedL();
-
+		
 public: // from MEikDialogPageObserver
     /**
     * @ref MEikDialogPageObserver::CreateCustomControlL
--- a/photosgallery/viewframework/views/metadatadialog/inc/mglxmetadatadialogobserver.h	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/viewframework/views/metadatadialog/inc/mglxmetadatadialogobserver.h	Wed Oct 13 14:32:09 2010 +0300
@@ -34,7 +34,6 @@
 		virtual void OnLocationEditL() = 0;
 		virtual void AddTagL() = 0;
 		virtual void AddAlbumL() = 0;
-		virtual void HandleItemRemovedL() = 0;
 	};
 
 #endif /*MGLXMETADATADIALOGOBSERVER_H_*/
--- a/photosgallery/viewframework/views/metadatadialog/src/glximgvwrmetadatacontainer.cpp	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/viewframework/views/metadatadialog/src/glximgvwrmetadatacontainer.cpp	Wed Oct 13 14:32:09 2010 +0300
@@ -1,43 +1,68 @@
 /*
- * 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".
+* 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: 
+*
+*/
+/*
+ * glximgvwrmetadatacontainer.cpp
  *
- * Initial Contributors:
- * Nokia Corporation - initial contribution.
- *
- * Contributors:
- *
- * Description: Image viewer metadata dialog implementation
+ *  Created on: Oct 22, 2009
+ *      Author: sourbasu
  */
 
+
 #include  "glximgvwrmetadatacontainer.h"
 #include  "glxustringconverter.h"                // converts the symbian types to UString type
+#include  <AknUtils.h>
 #include  <StringLoader.h>
 #include  <glxmetadatadialog.rsg>
+#include  <glxviewbase.rsg>
 #include  <glxlog.h>
 #include  <glxtracer.h>
 #include  <glxscreenfurniture.h>
 #include  <glxdetailsmulmodelprovider.h>          //Details data provider
 #include  <glxdetailsboundcommand.hrh>
+#include  <glxcommandhandleraddtocontainer.h>     // For CGlxCommandHandlerAddToContainer
+#include  <glxcommandhandlers.hrh>                // for command handler id
+#include  <glxcommandfactory.h>                   //for command factory
 #include  <mpxcommandgeneraldefs.h>               // Content ID identifying general category of content provided
+
+#include  <glxtextentrypopup.h>    
+#include  <glxcollectionpluginall.hrh>
+#include  <glxuistd.h>
+#include  <glxcollectionplugintags.hrh>           // tag collection plugin uid
+#include  <glxthumbnailattributeinfo.h>           // KGlxMediaIdThumbnail
 #include  <glxattributeretriever.h>               // CGlxAttributeReteiver
+#include  <aknQueryControl.h>
 #include  <glxdrmutility.h>                       //For launching DRM details pane
-#include  <glxuiutilities.rsg>
+#include  <glxgeneraluiutilities.h>               // General utilties class definition
+#include  <ExifModify.h>    
+#include  <glxuiutilities.rsg>                    //For CExifModify
 #include  <mpxmediadrmdefs.h>
 #include  <glxfilterfactory.h>
-#include  <glxcollectionpluginimageviewer.hrh>
-#include  <eikfrlb.h>                              // For marquee 
-#include  <eikfrlbd.h>                             // For marquee
+#include <glxcollectionpluginimageviewer.hrh>
+
+//marquee
 
-const TInt KMediaListId = 0x2000D248;
-const TInt KMarqueeLoopCount = 3;
-const TInt KMarqueeScrollAmount = 20;
-const TInt KMarqueeScrollDelay = 1000000;
-const TInt KMarqueeScrollInterval = 200000;
+#include <eikfrlb.h>
+#include <eikfrlbd.h>
+const TInt KMaxMediaPopupTitleLength = 0x100;
+const TInt KMediaListId              = 0x2000D248;
+const TInt KMarqueeLoopCount         = 3;
+const TInt KMarqueeScrollAmount      = 20;
+const TInt KMarqueeScrollDelay       = 1000000;
+const TInt KMarqueeScrollInterval    = 200000;
 
 // ============================ MEMBER FUNCTIONS ===============================
 
@@ -45,12 +70,10 @@
 // NewL
 // ---------------------------------------------------------
 //  
-CGlxImgVwrMetadataContainer* CGlxImgVwrMetadataContainer::NewL(
-        const TRect& aRect, const TDesC& item)
+CGlxImgVwrMetadataContainer* CGlxImgVwrMetadataContainer::NewL( const TRect& aRect,const TDesC& item)
     {
-    TRACER("CGlxImgVwrMetadataContainer::NewL");
-    CGlxImgVwrMetadataContainer* self = CGlxImgVwrMetadataContainer::NewLC(
-            aRect, item);
+    TRACER("CGlxImgVwrMetadataContainer::NewL");  
+    CGlxImgVwrMetadataContainer* self = CGlxImgVwrMetadataContainer::NewLC( aRect,item);
     CleanupStack::Pop(self);
     return self;
     }
@@ -59,14 +82,12 @@
 // NewLC
 // ---------------------------------------------------------
 //  
-CGlxImgVwrMetadataContainer* CGlxImgVwrMetadataContainer::NewLC(
-        const TRect& aRect, const TDesC& aUri)
+CGlxImgVwrMetadataContainer* CGlxImgVwrMetadataContainer::NewLC( const TRect& aRect,const TDesC& aUri)
     {
-    TRACER("CGlxImgVwrMetadataContainer::NewLC");
-    CGlxImgVwrMetadataContainer* self =
-            new (ELeave) CGlxImgVwrMetadataContainer(aUri);
+    TRACER("CGlxImgVwrMetadataContainer::NewLC"); 
+    CGlxImgVwrMetadataContainer* self = new(ELeave) CGlxImgVwrMetadataContainer(aUri);
     CleanupStack::PushL(self);
-    self->ConstructL(aRect);
+    self->ConstructL( aRect);
     return self;
     }
 
@@ -74,18 +95,18 @@
 // CGlxImgVwrMetadataContainer
 // ---------------------------------------------------------
 //  
-CGlxImgVwrMetadataContainer::CGlxImgVwrMetadataContainer(
-        const TDesC& aUri) : iUri(aUri)
-    {
-    // No implementation
-    }
+CGlxImgVwrMetadataContainer::CGlxImgVwrMetadataContainer(const TDesC& aUri)
+:iUri(aUri)
+        {
+        // No implementation
+        }
 
 // ---------------------------------------------------------
 // CGlxImgVwrMetadataContainer::ConstructL
 // ---------------------------------------------------------
 //  
-void CGlxImgVwrMetadataContainer::ConstructL(const TRect& /*aRect*/)
-    {
+void CGlxImgVwrMetadataContainer::ConstructL( const TRect& /*aRect*/ )
+    {   
     TRACER("CGlxMetadataContainer::ConstructLL()");
     //Creating the RBuf texts for all the items except tags & albums
     //which would be updated as whne the item is edited
@@ -100,19 +121,19 @@
 CGlxImgVwrMetadataContainer::~CGlxImgVwrMetadataContainer()
     {
     TRACER("CGlxImgVwrMetadataContainer::~CGlxImgVwrMetadataContainer");
-    if (iItemMediaList)
+    if( iItemMediaList ) 
         {
         iItemMediaList->RemoveContext(iMainListAttributecontext);
         iItemMediaList->RemoveMediaListObserver(this);
         iItemMediaList->Close();
-        iItemMediaList = NULL;
-        }
-    if (iMainListAttributecontext)
+        iItemMediaList = NULL;  
+        } 
+    if( iMainListAttributecontext )
         {
         delete iMainListAttributecontext;
         iMainListAttributecontext = NULL;
         }
-    if (IsVisible())
+    if( IsVisible() )
         {
         MakeVisible(EFalse);
         }
@@ -126,38 +147,43 @@
     {
     TRACER("CGlxMetadataContainer::HandleAttributesAvailableL()");
     //returns the active medialist.
-    return *iItemMediaList;
+    return *iItemMediaList;    
     }
 
 //-----------------------------------------------------------------------------
 // CGlxImgVwrMetadataContainer::CreateSettingItemL
 //-----------------------------------------------------------------------------
-CAknSettingItem* CGlxImgVwrMetadataContainer::CreateSettingItemL(
-        TInt aResourceId)
+CAknSettingItem* CGlxImgVwrMetadataContainer::CreateSettingItemL(TInt aResourceId)
     {
-    TRACER("CGlxImgVwrMetadataContainer::CreateSettingItemL");
+    TRACER("CGlxImgVwrMetadataContainer::CreateSettingItemL");      
     CAknSettingItem* settingItem = NULL; // No need to push onto cleanup stack
-    iTextSetter.Zero();
+    iTextSetter.Zero();  
 
     //Creating a empty Settings list box which will  be populated with metadata in handleattributeavailable
-    switch (aResourceId)
+    switch(aResourceId)
         {
         case EImgVwrNameItem:
         case EImgVwrDateAndTimeItem:
-        case EImgVwrMimeTypeItem:
-        case EImgVwrSizeItem:
+        case EImgVwrDescriptionItem:
+            {
+            settingItem = new (ELeave) CAknTextSettingItem( 
+                    aResourceId, iTextSetter );
+
+            break;          
+            }
+        case EImgVwrSizeItem:            
         case EImgVwrResolutionItem:
             {
-            settingItem = new (ELeave) CAknTextSettingItem(aResourceId,
-                    iTextSetter);
+            settingItem = new (ELeave) CAknTextSettingItem( 
+                    aResourceId, iTextSetter );
 
-            break;
-            }
+            break;          
+            }            
 
         case EImgVwrlicenseItem:
             {
-            settingItem = new (ELeave) CAknTextSettingItem(aResourceId,
-                    iTextSetter);
+            settingItem = new (ELeave) CAknTextSettingItem( 
+                    aResourceId, iTextSetter );
             //Hide the item until we get the attributes
             //where in we check for the usage rights.                                                                                                            
             settingItem->SetHidden(ETrue);
@@ -168,65 +194,57 @@
 
         default:
             {
-            break;
+            break;    
             }
         }
     return settingItem;
     }
+//-----------------------------------------------------------------------------
+// CGlxImgVwrMetadataContainer::IsItemModifiable
+//-----------------------------------------------------------------------------
+TBool CGlxImgVwrMetadataContainer::IsItemModifiable()
+    {
+    TRACER("CGlxMetadataContainer::IsItemModifiable()");
+    //Only items like name , description, tag and albums are modifiable
+    //The check is for the items from ENameItem(0) tille ETagsItem(4)
+    if(ListBox()->CurrentItemIndex()<=ETagsItem)
+        {
+        return EFalse;
+        }
+    //return ETrue to dim the item
+    return ETrue;
+
+    }
 
 //-----------------------------------------------------------------------------
 // CGlxImgVwrMetadataContainer::HandleListBoxEventL
 //-----------------------------------------------------------------------------
-void CGlxImgVwrMetadataContainer::HandleListBoxEventL(
-        CEikListBox* /*aListBox*/, TListBoxEvent aEventType)
+void CGlxImgVwrMetadataContainer::HandleListBoxEventL(CEikListBox*  /*aListBox*/,
+        TListBoxEvent aEventType)
     {
-    TRACER("CGlxImgVwrMetadataContainer::HandleListBoxEventL()");
+    TRACER("CGlxMetadataContainer::HandleListBoxEventL()");
+    GLX_LOG_INFO("CGlxImgVwrMetadataContainer::HandleListBoxEventL");         
     if (aEventType == EEventItemSingleClicked)
         {
-        if (iItemMediaList->Count() == 0)
+        if(iItemMediaList->Count() == 0)
             {
-            GLX_LOG_INFO("CGlxImgVwrMetadataContainer:: NO Items");
+            GLX_LOG_INFO("CGlxImgVwrMetadataContainer:: NO Items");         
             return;
             }
-        TInt index = ListBox()->CurrentItemIndex();
-        if (EImgVwrlicenseItem == index)
+        TInt index = ListBox()->CurrentItemIndex() ;
+        if(EImgVwrlicenseItem == index)
             {
-            GLX_LOG_INFO("CGlxImgVwrMetadataContainer::Licence item");
+            GLX_LOG_INFO("CGlxImgVwrMetadataContainer::Licence item");         
             CGlxDRMUtility* drmUtility = CGlxDRMUtility::InstanceL();
             CleanupClosePushL(*drmUtility);
             CreateImageViewerInstanceL();
-            if (iImageViewerInstance->IsPrivate())
+            if(iImageViewerInstance->IsPrivate())
                 {
-                RFile64& fileHandle = iImageViewerInstance->ImageFileHandle();
-                // check if rights have expired
-                TBool expired = EFalse;
-                expired = !drmUtility->ItemRightsValidityCheckL(fileHandle,
-                        ETrue);
-
-                if (expired)
-                    {
-                    drmUtility->ShowRightsInfoL(fileHandle);
-                    }
-                else
-                    {
-                    drmUtility->ShowDRMDetailsPaneL(fileHandle);
-                    }
+                drmUtility->ShowDRMDetailsPaneL(iImageViewerInstance->ImageFileHandle());
                 }
             else
                 {
-                const TDesC& uri = iItemMediaList->Item(0).Uri();
-                // check if rights have expired
-                TBool expired = EFalse;
-                expired = !drmUtility->ItemRightsValidityCheckL(uri, ETrue);
-
-                if (expired)
-                    {
-                    drmUtility->ShowRightsInfoL(uri);
-                    }
-                else
-                    {
-                    drmUtility->ShowDRMDetailsPaneL(uri);
-                    }
+                drmUtility->ShowDRMDetailsPaneL(iItemMediaList->Item(0).Uri());
                 }
             CleanupStack::PopAndDestroy(drmUtility);
             DeleteImageViewerInstance();
@@ -234,128 +252,139 @@
         }
     }
 
+// ----------------------------------------------------------------------------
+// CGlxImgVwrMetadataContainer::ViewDynInitMenuPaneL
+// ----------------------------------------------------------------------------
+// 
+void CGlxImgVwrMetadataContainer::ViewDynInitMenuPaneL(TInt aMenuId, CEikMenuPane* aMenuPane)
+    {
+    TRACER("CGlxMetadataContainer::ViewDynInitMenuPaneL()");
+    if( aMenuId == R_METADATA_MENU )
+            {
+            //Set dim the options based on the utem selected
+            //Viewdetails option will be availble only for the license item
+            aMenuPane->SetItemDimmed(KGlxViewBoundMenuCommandId,IsLicenseItem());
+            }
+    }
+
 //Medialist callbacks.    
 // ----------------------------------------------------------------------------
 // CGlxImgVwrMetadataContainer::HandleAttributesAvailableL
 // ----------------------------------------------------------------------------
 //
-void CGlxImgVwrMetadataContainer::HandleAttributesAvailableL(
-        TInt /*aItemIndex*/, const RArray<TMPXAttribute>& aAttributes,
-        MGlxMediaList* aList)
+void CGlxImgVwrMetadataContainer::HandleAttributesAvailableL( TInt /*aItemIndex*/, 
+        const RArray<TMPXAttribute>& aAttributes, MGlxMediaList* aList )
     {
     TRACER("CGlxMetadataContainer::HandleAttributesAvailableL()");
     //generic medialist for the item for all the attributes required other than tags and albums.
     TInt x = aAttributes.Count();
-    if (aList == iItemMediaList)
+    if(aList == iItemMediaList)
         {
         // Loop untill it checks for all the avialable attributes
-        for (TInt i = aAttributes.Count() - 1; i >= 0; i--)
+        for (TInt i = aAttributes.Count() - 1; i >= 0 ; i--)
             {
             //set attributes to the items in the container
-            SetAttributesL(aAttributes[i]);
+            SetAttributesL(aAttributes[i]);                   
             }
         }
+
     }
 
 // ----------------------------------------------------------------------------
 // HandleItemAddedL
 // ----------------------------------------------------------------------------
 // 
-void CGlxImgVwrMetadataContainer::HandleItemAddedL(TInt /*aStartIndex*/,
-        TInt /*aEndIndex*/, MGlxMediaList* aList)
+void CGlxImgVwrMetadataContainer::HandleItemAddedL( TInt /*aStartIndex*/, TInt /*aEndIndex*/, 
+        MGlxMediaList* aList )
     {
     TRACER("CGlxMetadataContainer::HandleItemAddedL()");
-    if (!iMarquee)
+    if(!iMarquee)
         {
-        EnableMarqueingL();
+            EnableMarqueingL();
         }
-    SetLicenseItemVisibilityL();
-    if (aList == iItemMediaList)
+    SetDurationLIicenseItemVisibilityL();
+    if(aList == iItemMediaList)
         {
-        if (iItemMediaList->Count())
+        if(iItemMediaList->Count())
             {
             TGlxMedia item = iItemMediaList->Item(0);
-            CGlxUStringConverter* stringConverter =
-                    CGlxUStringConverter::NewL();
-            CleanupStack::PushL(stringConverter);
-            for (TInt index = 0; index <= EImgVwrlicenseItem; index++)
+            CGlxUStringConverter* stringConverter = CGlxUStringConverter::NewL();
+            CleanupStack::PushL(stringConverter );
+            for(TInt index = 0; index <= EImgVwrlicenseItem; index++)
                 {
-                HBufC* string = NULL;
-                iTextSetter.Zero();
+                HBufC* string = NULL;               
+				iTextSetter.Zero();
 
-                if (index == EImgVwrSizeItem)
+                if(index == EImgVwrSizeItem)
                     {
-                    stringConverter->AsStringL(item, KMPXMediaGeneralSize, 0,
-                            string);
+                    stringConverter->AsStringL(item,
+                            KMPXMediaGeneralSize,0, string );              
                     }
-                else if (index == EImgVwrNameItem)
-                    {
-                    stringConverter->AsStringL(item, KMPXMediaGeneralTitle,
-                            0, string);
-                    }
-                else if (index == EImgVwrDateAndTimeItem)
+                else if(index == EImgVwrNameItem)
                     {
                     stringConverter->AsStringL(item,
-                            KGlxMediaGeneralLastModifiedDate,
-                            R_QTN_DATE_USUAL_WITH_ZERO, string);
+                            KMPXMediaGeneralTitle,0, string );
                     }
-                else if (index == EImgVwrMimeTypeItem)
-                    {
-                    stringConverter->AsStringL(item,
-                            KMPXMediaGeneralMimeType, 0, string);
+                else if(index == EImgVwrDateAndTimeItem)
+                    {  
+                    stringConverter->AsStringL( item, 
+                            KGlxMediaGeneralLastModifiedDate,
+                            R_QTN_DATE_USUAL_WITH_ZERO,string );
                     }
-                else if (index == EImgVwrResolutionItem)
+                else if(index == EImgVwrDescriptionItem)
                     {
                     stringConverter->AsStringL(item,
-                            KGlxMediaGeneralDimensions, 0, string);
+                            KMPXMediaGeneralComment,0, string ); 
                     }
-                else if (index == EImgVwrlicenseItem)
+                else if(index == EImgVwrResolutionItem)
                     {
-                    // If an item is DRM protected, License field in details
-                    // should display "View Details"
-                    string = StringLoader::LoadL(
-                            R_GLX_METADATA_VIEW_OPTIONS_VIEW);
-                    }
-                else
+                    stringConverter->AsStringL(item,
+                            KGlxMediaGeneralDimensions,0, string );
+                    }    
+                else if(index == EImgVwrlicenseItem)
+					{
+					// If an item is DRM protected, License field in details
+					// should display "View Details"
+					string = StringLoader::LoadL(R_GLX_METADATA_VIEW_OPTIONS_VIEW);
+					}                
+                else 
                     {
                     //no implementation
-                    }
-                if (string)
+                    } 
+                if(string)
                     {
                     iTextSetter.Zero();
                     iTextSetter.Append(*string);
                     }
-                CleanupStack::PushL(string);
-                EditItemL(index, EFalse);
-                CleanupStack::PopAndDestroy(string);
+                CleanupStack::PushL( string );
+                EditItemL(index,EFalse);   
+                CleanupStack::PopAndDestroy(string );           
                 }
-            CleanupStack::PopAndDestroy(stringConverter);
-            }
+            CleanupStack::PopAndDestroy(stringConverter );
+            }   
         }
+
+
     }
-
 // ----------------------------------------------------------------------------
 // EnableMarqueingL
 // ----------------------------------------------------------------------------
 //  
 void CGlxImgVwrMetadataContainer::EnableMarqueingL()
     {
-    TRACER("CGlxImgVwrMetadataContainer::EnableMarqueingL()");
+    TRACER("CGlxImgVwrMetadataContainer::EnableMarqueingL()");    
     iMarquee = ETrue;
     ListBox()->UseLogicalToVisualConversion(ETrue);
-    ListBox()->ItemDrawer()->ColumnData()->SetMarqueeParams(
-            KMarqueeLoopCount, KMarqueeScrollAmount, KMarqueeScrollDelay,
-            KMarqueeScrollInterval);
+    ListBox()->ItemDrawer()->ColumnData()->SetMarqueeParams (KMarqueeLoopCount,
+            KMarqueeScrollAmount, KMarqueeScrollDelay, KMarqueeScrollInterval);
     ListBox()->ItemDrawer()->ColumnData()->EnableMarqueeL(ETrue);
-    }
-
+    }    
 // ----------------------------------------------------------------------------
 // HandleCommandCompleteL
 // ----------------------------------------------------------------------------
 // 
-void CGlxImgVwrMetadataContainer::HandleCommandCompleteL(
-        TAny* /*aSessionId*/, CMPXCommand* /*aCommandResult*/,
-        TInt /*aError*/, MGlxMediaList* /*aList*/)
+void CGlxImgVwrMetadataContainer::HandleCommandCompleteL(TAny* /*aSessionId*/, 
+        CMPXCommand* /*aCommandResult*/, TInt /*aError*/, MGlxMediaList* /*aList*/)
     {
     TRACER("CGlxImgVwrMetadataContainer::HandleCommandCompleteL()");
     }
@@ -364,58 +393,63 @@
 // HandleItemRemoved
 // ----------------------------------------------------------------------------
 //  
-void CGlxImgVwrMetadataContainer::HandleItemRemovedL(TInt /*aStartIndex*/,
-        TInt /*aEndIndex*/, MGlxMediaList* /*aList*/)
+void CGlxImgVwrMetadataContainer::HandleItemRemovedL(  TInt /*aStartIndex*/, TInt /*aEndIndex*/, 
+        MGlxMediaList* /*aList*/  )
     {
-    TRACER("CGlxImgVwrMetadataContainer::HandleItemRemovedL()");
-    }
-
+    TRACER("CGlxImgVwrMetadataContainer::HandleItemRemovedL()");    
+    }    
 // ----------------------------------------------------------------------------
 // HandleFocusChangedL
 // ----------------------------------------------------------------------------
 //  
-void CGlxImgVwrMetadataContainer::HandleFocusChangedL(
-        NGlxListDefs::TFocusChangeType /*aType*/, TInt /*aNewIndex*/,
-        TInt /*aOldIndex*/, MGlxMediaList* /*aList*/)
+void CGlxImgVwrMetadataContainer::HandleFocusChangedL( NGlxListDefs::
+        TFocusChangeType /*aType*/, TInt /*aNewIndex*/, TInt /*aOldIndex*/, 
+        MGlxMediaList* /*aList*/ )
     {
     TRACER("CGlxImgVwrMetadataContainer::HandleFocusChangedL()");
     }
-
 // ----------------------------------------------------------------------------
 // HandleItemSelected
 // ----------------------------------------------------------------------------
 //  
-void CGlxImgVwrMetadataContainer::HandleItemSelectedL(TInt /*aIndex*/,
-        TBool /*aSelected*/, MGlxMediaList* /*aList*/)
+void CGlxImgVwrMetadataContainer::HandleItemSelectedL(TInt /*aIndex*/, 
+        TBool /*aSelected*/, MGlxMediaList* /*aList*/ )
     {
     TRACER("CGlxImgVwrMetadataContainer::HandleItemSelectedL");
     }
-
 // ----------------------------------------------------------------------------
 // HandleMessageL
 // ----------------------------------------------------------------------------
 //    
-void CGlxImgVwrMetadataContainer::HandleMessageL(
-        const CMPXMessage& /*aMessage*/, MGlxMediaList* /*aList*/)
+void CGlxImgVwrMetadataContainer::HandleMessageL( const CMPXMessage& /*aMessage*/, 
+        MGlxMediaList* /*aList*/ )
     {
     TRACER("CGlxImgVwrMetadataContainer::HandleMessageL()");
     }
-
 // ----------------------------------------------------------------------------
 // HandleError
 // ----------------------------------------------------------------------------
 //
-void CGlxImgVwrMetadataContainer::HandleError(TInt /*aError*/)
+void CGlxImgVwrMetadataContainer::HandleError( TInt /*aError*/ ) 
     {
     TRACER("CGlxImgVwrMetadataContainer::HandleError()");
+    TRAP_IGNORE(HandleErrorL());
     }
 
 // ----------------------------------------------------------------------------
+// HandleErrorL
+// ----------------------------------------------------------------------------
+//
+void CGlxImgVwrMetadataContainer::HandleErrorL()
+    {
+    TRACER("CGlxImgVwrMetadataContainer::HandleErrorL()");
+    }
+// ----------------------------------------------------------------------------
 // HandleCommandCompleteL
 // ----------------------------------------------------------------------------
 //  
-void CGlxImgVwrMetadataContainer::HandleCommandCompleteL(
-        CMPXCommand* /*aCommandResult*/, TInt /*aError*/, MGlxMediaList* /*aList*/)
+void CGlxImgVwrMetadataContainer::HandleCommandCompleteL( CMPXCommand* /*aCommandResult*/, 
+        TInt /*aError*/, MGlxMediaList* /*aList*/ )
     {
     TRACER("CGlxImgVwrMetadataContainer::HandleCommandCompleteL()");
     }
@@ -424,8 +458,7 @@
 // HandleMediaL
 // ----------------------------------------------------------------------------
 //  
-void CGlxImgVwrMetadataContainer::HandleMediaL(TInt /*aListIndex*/,
-        MGlxMediaList* /*aList*/)
+void CGlxImgVwrMetadataContainer::HandleMediaL( TInt /*aListIndex*/, MGlxMediaList* /*aList*/ )
     {
     TRACER("CGlxImgVwrMetadataContainer::HandleMediaL()");
     }
@@ -434,40 +467,48 @@
 // HandleItemModifiedL
 // ----------------------------------------------------------------------------
 //  
-void CGlxImgVwrMetadataContainer::HandleItemModifiedL(
-        const RArray<TInt>& /*aItemIndexes*/, MGlxMediaList* /*aList*/)
+void CGlxImgVwrMetadataContainer::HandleItemModifiedL( const RArray<TInt>& /*aItemIndexes*/,
+        MGlxMediaList* /*aList*/ )
     {
     TRACER("CGlxImgVwrMetadataContainer::HandleItemModifiedL()");
     }
-
 // ----------------------------------------------------------------------------
 // ChangeMskL
-// ----------------------------------------------------------------------------    
+// ----------------------------------------------------------------------------
+//     
 void CGlxImgVwrMetadataContainer::ChangeMskL()
     {
-    TRACER("CGlxImgVwrMetadataContainer::ChangeMskL()");
-    CGlxUiUtility* uiUtility = CGlxUiUtility::UtilityL();
-    CleanupClosePushL(*uiUtility);
-    switch (ListBox()->CurrentItemIndex())
+    TRACER("CGlxImgVwrMetadataContainer::ChangeMsk()");
+    TInt index = ListBox()->CurrentItemIndex();
+    CGlxUiUtility* uiUtility = CGlxUiUtility::UtilityL();               
+    switch(index)
         {
-        case EImgVwrNameItem:
-        case EImgVwrMimeTypeItem:
+        case EImgVwrNameItem:        
+        case EImgVwrDescriptionItem:
+            {
+            uiUtility->ScreenFurniture()->ModifySoftkeyIdL(CEikButtonGroupContainer::EMiddleSoftkeyPosition,
+                    EAknSoftkeyEdit,R_GLX_METADATA_MSK_EDIT);
+            }        
+            break;          
         case EImgVwrDateAndTimeItem:
         case EImgVwrSizeItem:
         case EImgVwrResolutionItem:
         case EImgVwrlicenseItem:
             {
-            uiUtility->ScreenFurniture()->ModifySoftkeyIdL(
-                    CEikButtonGroupContainer::EMiddleSoftkeyPosition,
-                    EAknSoftkeyEdit, R_GLX_METADATA_MSK_BLANK);
-            }
+            uiUtility->ScreenFurniture()->ModifySoftkeyIdL(CEikButtonGroupContainer::EMiddleSoftkeyPosition,
+                    EAknSoftkeyEdit,R_GLX_METADATA_MSK_BLANK);            
+            }        
             break;
         default:
             {
-            break;
+            break;    
             }
         }
-    CleanupStack::PopAndDestroy(uiUtility);
+
+    if ( uiUtility )
+        {
+        uiUtility->Close();
+        }   
     }
 
 //-----------------------------------------------------------------------------
@@ -479,105 +520,103 @@
 
     //create the collection path for the medialist to be created
     CMPXCollectionPath* path = CMPXCollectionPath::NewL();
-    CleanupStack::PushL(path);
-    // Set the Image viewer collection path as the details dialog 
-    // can be launched from private or user data path
-    path->AppendL(KGlxCollectionPluginImageViewerImplementationUid);
+    CleanupStack::PushL( path );
+    //set the all collection path as the details dialog can be launched from any of the grid views and filter with URI
+    path->AppendL(/*KGlxCollectionPluginAllImplementationUid*/KGlxCollectionPluginImageViewerImplementationUid);
     //create the filter with the URI
-    CMPXFilter* filter = TGlxFilterFactory::CreateURIFilterL(iUri);
-    CleanupStack::PushL(filter);
+    CMPXFilter* filter  = TGlxFilterFactory::CreateURIFilterL(iUri);  
+    CleanupStack::PushL( filter );
     //create the medialist   
-    iItemMediaList = MGlxMediaList::InstanceL(*path, TGlxHierarchyId(
-            KMediaListId), filter);
+    iItemMediaList = MGlxMediaList::InstanceL(*path,TGlxHierarchyId(KMediaListId),filter);   
 
     //Add the attributes which are required to be displayed.
-    iMainListAttributecontext = new (ELeave) CGlxAttributeContext(
-            &iSelectionIterator);
+    iMainListAttributecontext = new (ELeave) CGlxAttributeContext(&iSelectionIterator);
     iMainListAttributecontext->AddAttributeL(KMPXMediaDrmProtected);
     iMainListAttributecontext->AddAttributeL(KMPXMediaGeneralSize);
-    iMainListAttributecontext->AddAttributeL(KGlxMediaGeneralDimensions);
+    iMainListAttributecontext->AddAttributeL(KGlxMediaGeneralDimensions); 
     iMainListAttributecontext->AddAttributeL(KMPXMediaGeneralTitle);
     iMainListAttributecontext->AddAttributeL(KGlxMediaGeneralLastModifiedDate);
-    iMainListAttributecontext->AddAttributeL(KMPXMediaGeneralMimeType);
+    iMainListAttributecontext->AddAttributeL(KMPXMediaGeneralComment); 
 
     //Add Context so that we get the handleattributes call once the medialist is populated with above mentioned attributes.
-    iItemMediaList->AddContextL(iMainListAttributecontext,
-            KGlxFetchContextPriorityBlocking);
+    iItemMediaList->AddContextL( iMainListAttributecontext,
+            KGlxFetchContextPriorityBlocking );
 
     //add to observer for callbacks.
     iItemMediaList->AddMediaListObserverL(this);
 
-    CleanupStack::PopAndDestroy(filter);
-    CleanupStack::PopAndDestroy(path);
+    CleanupStack::PopAndDestroy( filter );
+    CleanupStack::PopAndDestroy( path ); 
     }
-
 // ----------------------------------------------------------------------------
-// CGlxImgVwrMetadataContainer::SetAttributesL
+// CGlxImgVwrMetadataContainer::SetAttributes
 // ----------------------------------------------------------------------------
 //
 void CGlxImgVwrMetadataContainer::SetAttributesL(TMPXAttribute attribute)
     {
-    TRACER("CGlxImgVwrMetadataContainer::SetAttributesL");
+    TRACER("CGlxImgVwrMetadataContainer::SetAttributesL");    
 
-    if (!iSetVisible)
+    if(!iSetVisible)
         {
         iSetVisible = ETrue;
-        SetLicenseItemVisibilityL();
+        SetDurationLIicenseItemVisibilityL();
         }
     TGlxMedia item = iItemMediaList->Item(0);
     //Create the string convertor instance 
     //String convertor class with provide the specific format for date,location and duration and size.
     CGlxUStringConverter* stringConverter = CGlxUStringConverter::NewL();
-    CleanupStack::PushL(stringConverter);
-    HBufC* string = NULL;
+    CleanupStack::PushL(stringConverter );
+    HBufC* string = NULL;    
 
     //if attribute is date and time we need to pass the format it as R_QTN_DATE_USUAL_WITH_ZERO else null
-    if (attribute == KGlxMediaGeneralLastModifiedDate)
+    if(attribute == KGlxMediaGeneralLastModifiedDate)
         {
-        stringConverter->AsStringL(item, attribute,
-                R_QTN_DATE_USUAL_WITH_ZERO, string);
-        }
+        stringConverter->AsStringL(item, 
+                attribute,
+                R_QTN_DATE_USUAL_WITH_ZERO, string );
+        }    
     else
         {
-        stringConverter->AsStringL(item, attribute, 0, string);
+        stringConverter->AsStringL(item,
+                attribute,0, string );
         }
     //get the settings item based on the attribute and set the text.
-    if (string)
+    if ( string )
         {
         iTextSetter.Zero();
         iTextSetter.Append(*string);
-        if (attribute == KMPXMediaGeneralSize)
+        if(attribute == KMPXMediaGeneralSize)
             {
-            EditItemL(EImgVwrSizeItem, EFalse);
-            }
-        else if (attribute == KMPXMediaGeneralTitle)
-            {
-            EditItemL(EImgVwrNameItem, EFalse);
-            }
-        else if (attribute == KGlxMediaGeneralLastModifiedDate)
+            EditItemL(EImgVwrSizeItem,EFalse);
+            }    
+        else if(attribute == KMPXMediaGeneralTitle)
             {
-            EditItemL(EImgVwrDateAndTimeItem, EFalse);
+            EditItemL(EImgVwrNameItem,EFalse);
             }
-        else if (attribute == KMPXMediaGeneralMimeType)
+        else if(attribute == KGlxMediaGeneralLastModifiedDate)
+            {  
+            EditItemL(EImgVwrDateAndTimeItem,EFalse);
+            }
+        else if(attribute == KMPXMediaGeneralComment)
             {
-            EditItemL(EImgVwrMimeTypeItem, EFalse);
+            EditItemL(EImgVwrDescriptionItem,EFalse);
             }
-        else if (attribute == KGlxMediaGeneralDimensions)
+        else if(attribute == KGlxMediaGeneralDimensions)
             {
-            EditItemL(EImgVwrResolutionItem, EFalse);
-            }
+            EditItemL(EImgVwrResolutionItem,EFalse);
+            }/*
         else if(attribute == KMPXMediaDrmProtected)
             {
-            EditItemL(EImgVwrlicenseItem, EFalse);
-            }
+            EditItemL(EImgVwrlicenseItem,EFalse);
+            }*/
         else
             {
-            //no implementation
-            }
+            
+            } 
         delete string;
         string = NULL;
         }
-    CleanupStack::PopAndDestroy(stringConverter);
+    CleanupStack::PopAndDestroy(stringConverter );
     }
 
 // ----------------------------------------------------------------------------
@@ -586,7 +625,7 @@
 //
 void CGlxImgVwrMetadataContainer::EditItemL(TInt aIndex, TBool /*aCalledFromMenu*/)
     {
-    TRACER("CGlxImgVwrMetadataContainer::EditItemL");
+    TRACER("CGlxImgVwrMetadataContainer::EditItemL");   
     CAknSettingItem* settingsitem = NULL;
     settingsitem = (*SettingItemArray())[aIndex];
     settingsitem->LoadL();
@@ -595,30 +634,116 @@
     ListBox()->DrawNow();
     }
 
+
+
 // ----------------------------------------------------------------------------
-// CGlxImgVwrMetadataContainer::SetLicenseItemVisibilityL()
+// CGlxMetadataContainer::SetAttributes
 // ----------------------------------------------------------------------------
-void CGlxImgVwrMetadataContainer::SetLicenseItemVisibilityL()
+//
+void CGlxImgVwrMetadataContainer::SetNameDescriptionL(TInt aItem)
+    {
+    TRACER("CGlxImgVwrMetadataContainer::SetNameDescriptionL");   
+    //This function is commn for updatng both name and description once modified    
+    //get the item handle to be modified       
+    CAknSettingItem* settingsitem = (*SettingItemArray())[aItem]; 
+    HBufC* textBuf = HBufC::NewLC( KMaxMediaPopupTitleLength );
+    (textBuf->Des()).Copy((settingsitem->SettingTextL()));
+    TPtr textPtr = textBuf->Des();
+    TBuf<KMaxMediaPopupTitleLength> titleText(*textBuf);
+    HBufC *buf = NULL;
+    if(aItem == ENameItem)
+        {
+        buf = StringLoader::LoadLC(R_GLX_METADATA_VIEW_TITLE_NSERIES);
+        }
+    else
+        {
+        buf = StringLoader::LoadLC(R_GLX_METADATA_VIEW_DESCRIPTION_NSERIES);
+        }
+
+    //Launch the text entry editor.
+    CGlxTextEntryPopup* popup = CGlxTextEntryPopup::NewL( *buf, textPtr );
+    CleanupStack::PopAndDestroy(buf);
+    if(aItem == EImgVwrDescriptionItem)
+        {
+        popup->SetLeftSoftKeyL(ETrue);
+        }
+    
+    //action upon selecting ok from the editor 
+    if ( popup->ExecuteLD() == EEikBidOk )
     {
-    TRACER("CGlxMetadataContainer::SetLicenseItemVisibilityL()");
+      if(0 != (titleText.Compare(*textBuf)))
+      {
+        //Modify the MDS and setting list only if the entry is different from previous Item value
+        iTextSetter.Zero();
+        iTextSetter.Copy(*textBuf);
+        EditItemL(aItem,EFalse);
+        if( iItemMediaList->Count() > 0 )
+        {
+          iItemMediaList->SetFocusL(NGlxListDefs::EAbsolute,0);//set focus to first item
+          CMPXCollectionPath* path = iItemMediaList->PathLC();
+          CMPXCommand* command = NULL;
+          //Create the glx command based on the item
+          if(aItem == ENameItem)
+              {
+              command = TGlxCommandFactory::RenameCommandLC(settingsitem->SettingTextL(),
+     *path); 
+              }
+          else
+              {
+              command = TGlxCommandFactory::SetDescriptionCommandLC(settingsitem->SettingTextL(),
+     *path);
+              }              
+          command->SetTObjectValueL<TAny*>(KMPXCommandGeneralSessionId, static_cast<TAny*>(this));
+          //issue command to the medialist which further calls data source to update MDS
+          iItemMediaList->CommandL(*command);
+          CleanupStack::PopAndDestroy(command);
+          CleanupStack::PopAndDestroy(path);
+          }
+      }         
+    }
+    CleanupStack::PopAndDestroy( textBuf );
+     
+    }
+// ----------------------------------------------------------------------------
+// CGlxImgVwrMetadataContainer::SetDurationLIicenseItemVisibilityL()
+// ----------------------------------------------------------------------------
+// 
+void CGlxImgVwrMetadataContainer::SetDurationLIicenseItemVisibilityL()
+    {
+    TRACER("CGlxMetadataContainer::SetDurationLIicenseItemVisibilityL()");
     //get the media item.
     const TGlxMedia& item = iItemMediaList->Item(0);
     const CGlxMedia* media = item.Properties();
 
-    // Check for DRM protection
-    if (media && media->IsSupported(KMPXMediaDrmProtected))
+    //in order to check for video category and drm rights
+   
+    CAknSettingItem* hiddenItem = NULL;
+        
+     if( media && media->IsSupported(KMPXMediaDrmProtected))
         {
-        if (item.IsDrmProtected())
-            {
-            CAknSettingItem* hiddenItem =
-                    (*SettingItemArray())[EImgVwrlicenseItem];
-            //Set the License item visible
-            hiddenItem->SetHidden(EFalse);
-            //Refresh the listbox when any items visiblity is changed
-            this->HandleChangeInItemArrayOrVisibilityL();
-            }
+         if(item.IsDrmProtected())
+             {
+             hiddenItem = (*SettingItemArray())[EImgVwrlicenseItem];
+             //Set the License item visible
+             hiddenItem->SetHidden(EFalse);             
+             //Required to refresh the listbox when any items visiblity is changed
+             this->HandleChangeInItemArrayOrVisibilityL();
+             }
         }
     }
+//-----------------------------------------------------------------------------
+// CGlxImgVwrMetadataContainer::IsLicenseItem
+//-----------------------------------------------------------------------------
+TBool CGlxImgVwrMetadataContainer::IsLicenseItem()
+    {
+    TRACER("CGlxMetadataContainer::IsLicenseItem()");
+    //Checks the item for DRMProtection.
+    if((ListBox()->CurrentItemIndex()== EImgVwrlicenseItem))
+        {
+        return EFalse;
+        }
+    return ETrue;
+    }
 
 // -----------------------------------------------------------------------------
 // CreateImageViewerInstanceL
@@ -627,7 +752,7 @@
 void CGlxImgVwrMetadataContainer::CreateImageViewerInstanceL()
     {
     TRACER("CGlxImgVwrMetadataContainer::CreateImageViewerInstanceL");
-    iImageViewerInstance = CGlxImageViewerManager::InstanceL();
+    iImageViewerInstance = CGlxImageViewerManager::InstanceL();    
     __ASSERT_ALWAYS(iImageViewerInstance, Panic(EGlxPanicNullPointer));
     }
 
@@ -638,10 +763,11 @@
 void CGlxImgVwrMetadataContainer::DeleteImageViewerInstance()
     {
     TRACER("CGlxImgVwrMetadataContainer::DeleteImageViewerInstance");
-    if (iImageViewerInstance)
+    if ( iImageViewerInstance )
         {
         iImageViewerInstance->DeleteInstance();
         }
     }
 
+
 //End of file
--- a/photosgallery/viewframework/views/metadatadialog/src/glximgvwrmetadatadialog.cpp	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/viewframework/views/metadatadialog/src/glximgvwrmetadatadialog.cpp	Wed Oct 13 14:32:09 2010 +0300
@@ -20,18 +20,31 @@
 
 //system includes
 #include <AknUtils.h>                   //for AknUtils
+#include <lbsposition.h> 
 #include <akntitle.h>
+#include <coeaui.h>
 #include <data_caging_path_literals.hrh>// KDC_APP_RESOURCE_DIR 
+#include <eikmenub.h>                   // for CEikMenuBar
 #include <StringLoader.h>
 #include <akntoolbar.h>
+#include <glxcommandhandleraddtocontainer.h>         // For CGlxCommandHandlerAddToContainer
 
 //User includes
 #include <glxmetadatadialog.rsg>
 #include <glxresourceutilities.h>
 #include <glxlog.h>
 #include <glxtracer.h>
+#include <glxcollectionpluginall.hrh>
+#include <glxfilterfactory.h>               // for TGlxFilterFactory
+#include <glxuiutility.h>
 #include <glxcommandhandlers.hrh>
+#include <hlplch.h>                     // for HlpLauncher
+#include <photos.hlp.hrh>
+#include <glxgallery.hrh>
 #include <glxdetailsboundcommand.hrh>
+#include <glxscreenfurniture.h>
+#include <glxuiutilities.rsg>
+#include <glxpanic.h>                    // For Panics
 #include "glxmetadatacommandhandler.h"
 
 // ============================ MEMBER FUNCTIONS ===============================
@@ -51,14 +64,10 @@
     return self;
     }
 
-// -----------------------------------------------------------------------------
-// CGlxImgVwrMetadataDialog
-// -----------------------------------------------------------------------------
-//
 CGlxImgVwrMetadataDialog::CGlxImgVwrMetadataDialog(const TDesC& aUri):iUri(aUri)
     {
+
     }
-
 // -----------------------------------------------------------------------------
 // ConstructL
 // -----------------------------------------------------------------------------
@@ -84,11 +93,13 @@
         iStatusPaneAvailable = ETrue;       
         }
 
+    // make the toolbar disabled
+    SetDetailsDlgToolbarVisibility(EFalse);        
+
     // do we have status pane
     if( statusPane )
         {
-        GLX_LOG_INFO1("GLX_UMP::CGlxImgVwrMetadataDialog::ConstructL::STATUS PANE = %d",
-                statusPane->IsVisible());    
+        GLX_LOG_INFO1("GLX_UMP::CGlxImgVwrMetadataDialog::ConstructL::STATUS PANE = %d",statusPane->IsVisible());    
         // load the title text
         HBufC* text = StringLoader::LoadL(R_GLX_METADATA_VIEW_TITLE_DETAILS, iEikonEnv );
         SetTitleL( *text );
@@ -98,6 +109,9 @@
             }
         iAvkonAppUi->StatusPane()->MakeVisible(ETrue);             
         }
+
+    iUiUtility = CGlxUiUtility::UtilityL(); 
+
     } 
 
 // -----------------------------------------------------------------------------
@@ -106,8 +120,10 @@
 //
 CGlxImgVwrMetadataDialog::~CGlxImgVwrMetadataDialog()
     {
+
     TRACER("CGlxImgVwrMetadataDialog::~CGlxImgVwrMetadataDialog");
 
+
     //To Disable the status pane if the dialog is launched from fullscreenview  
     if (!iStatusPaneAvailable && iAvkonAppUi)
         {
@@ -127,6 +143,11 @@
         TRAP_IGNORE(iAvkonAppUi->ProcessCommandL(EGlxCmdResetView));
         }
 
+    if( iUiUtility )
+        {
+        iUiUtility->Close();
+        }
+
     if (iResourceOffset)
         {
         CCoeEnv::Static()->DeleteResourceFile(iResourceOffset);
@@ -158,41 +179,56 @@
     TRACER("CGlxImgVwrMetadataDialog::ExecuteLD");     
     return CAknDialog::ExecuteLD( R_IMG_VIEWER_METADATA_DIALOG );
     }
-
 // -----------------------------------------------------------------------------
 // ProcessCommandL
 // -----------------------------------------------------------------------------
 //
-void CGlxImgVwrMetadataDialog::ProcessCommandL(TInt /*aCommandId*/)
+void CGlxImgVwrMetadataDialog::ProcessCommandL( TInt aCommandId )
     {
     TRACER("CGlxImgVwrMetadataDialog::ProcessCommandL");
     // hide menu bar
     iMenuBar->StopDisplayingMenuBar();
     }
-
 //-----------------------------------------------------------------------------
 // CGlxImgVwrMetadataDialog::CreateCustomControlL
 //-----------------------------------------------------------------------------
 SEikControlInfo CGlxImgVwrMetadataDialog::CreateCustomControlL(TInt 
         aControlType)
     {
-    GLX_LOG_INFO("CGlxImgVwrMetadataDialog::CreateCustomControlL");
+    GLX_LOG_INFO("CShwSlideshowSettingsDialog::CreateCustomControlL");
 
     // create control info, no flags or trailer text set
     SEikControlInfo controlInfo;
-    controlInfo.iControl = NULL;
-    controlInfo.iTrailerTextId = 0;
-    controlInfo.iFlags = 0;
+    controlInfo.iControl        = NULL;
+    controlInfo.iTrailerTextId  = 0;
+    controlInfo.iFlags          = 0;
     if (aControlType == EMetaDataDialogListBox)
         {
-        iContainer = CGlxImgVwrMetadataContainer::NewL(
-                iAvkonAppUi->ClientRect(), iUri);
+        iContainer = CGlxImgVwrMetadataContainer::NewL(iAvkonAppUi->ClientRect(),iUri);        
         controlInfo.iControl = iContainer; // giving ownership   
         }
     return controlInfo; // returns ownership of ItemList
     }
 
 // -----------------------------------------------------------------------------
+// CGlxImgVwrMetadataDialog::DynInitMenuPaneL
+// -----------------------------------------------------------------------------
+//
+void CGlxImgVwrMetadataDialog::DynInitMenuPaneL(TInt /*aMenuId*/,
+        CEikMenuPane* /*aMenuPane*/)
+    {
+    //no implementation
+    }
+
+//-----------------------------------------------------------------------------
+// CGlxImgVwrMetadataDialog::SizeChanged
+//-----------------------------------------------------------------------------
+void CGlxImgVwrMetadataDialog::SizeChanged()
+    {
+    TRACER("CGlxImgVwrMetadataDialog::SizeChanged");
+    CAknDialog::SizeChanged();
+    }
+// -----------------------------------------------------------------------------
 // CGlxImgVwrMetadataDialog::InitResourceL
 // -----------------------------------------------------------------------------
 //
@@ -210,12 +246,65 @@
     iResourceOffset = CCoeEnv::Static()->AddResourceFileL(resourceFile);
     }  
 
+
+// -----------------------------------------------------------------------------
+// CGlxImgVwrMetadataDialog::HandleViewCommandL
+// -----------------------------------------------------------------------------
+//    
+TBool CGlxImgVwrMetadataDialog::HandleViewCommandL( TInt /*aCommand*/ )
+    {
+    TRACER("CGlxImgVwrMetadataDialog::HandleViewCommandL");
+    return EFalse;
+    }
+// ---------------------------------------------------------------------------
+// CGlxImgVwrMetadataDialog::PreLayoutDynInitL
+// ---------------------------------------------------------------------------
+//
+void CGlxImgVwrMetadataDialog::PreLayoutDynInitL()
+    {
+    // No Implementation
+    }
+
+//-----------------------------------------------------------------------------
+// CGlxImgVwrMetadataDialog::PostLayoutDynInitL
+//-----------------------------------------------------------------------------
+//
+void CGlxImgVwrMetadataDialog::PostLayoutDynInitL()
+    {}
+
+//-----------------------------------------------------------------------------
+// CGlxImgVwrMetadataDialog::Draw
+//-----------------------------------------------------------------------------
+//
+void CGlxImgVwrMetadataDialog::Draw( const TRect& /*aRect*/ ) const
+{
+TRACER("CGlxImgVwrMetadataDialog::Draw");
+TRect rect;
+AknLayoutUtils::LayoutMetricsRect (AknLayoutUtils::EMainPane, rect);
+
+// Get the standard graphics context
+CWindowGc& gc = SystemGc();
+gc.SetBrushColor(KRgbWhite);
+gc.DrawRect(rect);
+}
+
+//-----------------------------------------------------------------------------
+// CGlxImgVwrMetadataDialog::HandlePointerEventL
+//-----------------------------------------------------------------------------
+//
+void CGlxImgVwrMetadataDialog::HandlePointerEventL(
+        const TPointerEvent& aPointerEvent)
+    {
+    TRACER("CGlxImgVwrMetadataDialog::HandlePointerEventL");
+    CCoeControl::HandlePointerEventL( aPointerEvent );
+    }
+
 // ---------------------------------------------------------------------------
 // CGlxImgVwrMetadataDialog::SetTitleL()
 // ---------------------------------------------------------------------------
 void CGlxImgVwrMetadataDialog::SetTitleL(const TDesC& aTitleText)
     {
-    TRACER("CGlxImgVwrMetadataDialog::SetTitleL");
+    TRACER("CGlxFetcherContainer::SetTitleL");
     CEikStatusPane* statusPane = iEikonEnv->AppUiFactory()->StatusPane();
     CleanupStack::PushL(statusPane);
     // get pointer to the default title pane control
@@ -239,7 +328,7 @@
 // ---------------------------------------------------------------------------
 void CGlxImgVwrMetadataDialog::SetPreviousTitleL()
     {
-    TRACER("CGlxImgVwrMetadataDialog::SetPreviousTitleL");
+    TRACER("CGlxFetcherContainer::SetPreviousTitleL");
     CEikStatusPane* prevStatusPane = iEikonEnv->AppUiFactory()->StatusPane();
     CleanupStack::PushL(prevStatusPane);
     CAknTitlePane* prevTitlePane = ( CAknTitlePane* )prevStatusPane->ControlL(
@@ -253,7 +342,16 @@
     CleanupStack::Pop(prevTitlePane);
     CleanupStack::Pop(prevStatusPane);
     }
-
+// -----------------------------------------------------------------------------
+// CGlxImgVwrMetadataDialog::HandleResourceChange
+// -----------------------------------------------------------------------------
+//
+void CGlxImgVwrMetadataDialog::HandleResourceChange( TInt aType )
+    {
+    TRACER("CGlxImgVwrMetadataDialog::HandleResourceChange");
+    //Handle global resource changes, such as scalable UI or skin events and orientation change (override)
+    CAknDialog::HandleResourceChange( aType );
+    }
 // -----------------------------------------------------------------------------
 // CGlxImgVwrMetadataDialog::HandleToolbarResetting
 // -----------------------------------------------------------------------------
--- a/photosgallery/viewframework/views/metadatadialog/src/glxmetadatacontainer.cpp	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/viewframework/views/metadatadialog/src/glxmetadatacontainer.cpp	Wed Oct 13 14:32:09 2010 +0300
@@ -17,41 +17,47 @@
 
 #include  "glxmetadatacontainer.h"
 #include  "glxustringconverter.h"        		 // converts the symbian types to UString type
-#include  "mglxmetadatadialogobserver.h"
-
+#include  <AknUtils.h>
 #include  <StringLoader.h>
-#include  <caf/manager.h>                         // For Filesystem
-#include  <ExifModify.h>                          // For CExifModify 
-#include  <mpxcommandgeneraldefs.h>               // Content ID identifying general category of content provided
-#include  <mpxmediadrmdefs.h>
-#include  <eikfrlb.h>                             // For marquee  
-#include  <eikfrlbd.h>                            // For marquee
-
 #include  <glxmetadatadialog.rsg>
+#include  <glxviewbase.rsg>
+#include  <glxlog.h>
+#include  <glxtracer.h>
 #include  <glxscreenfurniture.h>
+#include  <glxdetailsmulmodelprovider.h>  		  //Details data provider
 #include  <glxdetailsboundcommand.hrh>
 #include  <glxcommandhandleraddtocontainer.h>     // For CGlxCommandHandlerAddToContainer
 #include  <glxcommandhandlers.hrh>                // for command handler id
-#include  <glxcommandfactory.h>                   // for command factory
+#include  <glxcommandfactory.h>                   //for command factory
+#include  <mpxcommandgeneraldefs.h>               // Content ID identifying general category of content provided
+#include  "mglxmetadatadialogobserver.h"
 #include  <glxtextentrypopup.h>
+#include  <glxcollectionpluginall.hrh>
 #include  <glxuistd.h>
 #include  <glxcollectionplugintags.hrh>       	  // tag collection plugin uid
+#include  <glxthumbnailattributeinfo.h>           // KGlxMediaIdThumbnail
 #include  <glxattributeretriever.h>               // CGlxAttributeReteiver
-#include  <glxdrmutility.h>                       // For launching DRM details pane
+#include  <aknQueryControl.h>
+#include  <glxdrmutility.h>                       //For launching DRM details pane
 #include  <glxgeneraluiutilities.h>               // General utilties class definition
-#include  <glxuiutilities.rsg>                    
+#include  <ExifModify.h>
+#include  <glxuiutilities.rsg>                    //For CExifModify
+#include  <mpxmediadrmdefs.h>
 #include  <glxfilterfactory.h>
-#include  <glxlog.h>
-#include  <glxtracer.h>
+#include  <caf/manager.h>						  //For Filesystem
 #include <glxgeneraluiutilities.h>
+//marquee
 
+#include <eikfrlb.h>
+#include <eikfrlbd.h>
+const TInt KMaxMediaPopupTitleLength = 0x100;
 const TInt KMediaListId  			 = 0x2000D248;
 const TInt KOffsets					 = 50;
 const TInt KMarqueeLoopCount         = 3;
 const TInt KMarqueeScrollAmount      = 20;
 const TInt KMarqueeScrollDelay       = 1000000;
 const TInt KMarqueeScrollInterval    = 200000;
-
+_LIT( KGlxTextSetter, "");
 _LIT( KGlxComma, ",");
 
 // ============================ MEMBER FUNCTIONS ===============================
@@ -60,41 +66,39 @@
 // NewL
 // ---------------------------------------------------------
 //
-CGlxMetadataContainer* CGlxMetadataContainer::NewL(const TRect& aRect,
-        MGlxMetadataDialogObserver& aDialogObserver, const TDesC& item,
-        MToolbarResetObserver& aResetToolbarObs)
-    {
-    TRACER("CGlxMetadataContainer::NewL");
-    CGlxMetadataContainer* self = CGlxMetadataContainer::NewLC(aRect,
-            aDialogObserver, item, aResetToolbarObs);
-    CleanupStack::Pop(self);
-    return self;
-    }
+CGlxMetadataContainer* CGlxMetadataContainer::NewL( const TRect& aRect,
+                                                    MGlxMetadataDialogObserver& aDialogObserver,
+                                                    const TDesC& item,MToolbarResetObserver& aResetToolbarObs)
+	{
+	TRACER("CGlxMetadataContainer::NewL");
+	CGlxMetadataContainer* self = CGlxMetadataContainer::NewLC( aRect,
+                                                                aDialogObserver,item,aResetToolbarObs);
+	CleanupStack::Pop(self);
+	return self;
+	}
 
 // ---------------------------------------------------------
 // NewLC
 // ---------------------------------------------------------
 //
-CGlxMetadataContainer* CGlxMetadataContainer::NewLC(const TRect& aRect,
-        MGlxMetadataDialogObserver& aDialogObserver, const TDesC& aUri,
-        MToolbarResetObserver& aResetToolbarObs)
-    {
-    TRACER("CGlxMetadataContainer::NewLC");
-    CGlxMetadataContainer* self = new (ELeave) CGlxMetadataContainer(
-            aDialogObserver, aResetToolbarObs);
-    CleanupStack::PushL(self);
-    self->ConstructL(aRect, aUri);
-    return self;
-    }
+CGlxMetadataContainer* CGlxMetadataContainer::NewLC( const TRect& aRect,
+													 MGlxMetadataDialogObserver&  aDialogObserver,
+													 const TDesC& aUri,MToolbarResetObserver& aResetToolbarObs)
+	{
+	TRACER("CGlxMetadataContainer::NewLC");
+	CGlxMetadataContainer* self = new(ELeave) CGlxMetadataContainer(aDialogObserver, aResetToolbarObs);
+	CleanupStack::PushL(self);
+	self->ConstructL( aRect, aUri);
+	return self;
+	}
 
 // ---------------------------------------------------------
 // CGlxMetadataContainer
 // ---------------------------------------------------------
 //
-CGlxMetadataContainer::CGlxMetadataContainer(
-        MGlxMetadataDialogObserver& aDialogObserver,
-        MToolbarResetObserver& aResetToolbarObs) :
-    iDialogObesrver(aDialogObserver), iResetToolbarObs(aResetToolbarObs)
+CGlxMetadataContainer::CGlxMetadataContainer(MGlxMetadataDialogObserver& aDialogObserver,
+                                              MToolbarResetObserver& aResetToolbarObs)
+					  :iDialogObesrver ( aDialogObserver ),iResetToolbarObs(aResetToolbarObs)
     {
     // No implementation
     }
@@ -105,40 +109,38 @@
 //
 void CGlxMetadataContainer::ConstructL(const TRect& /*aRect*/,
         const TDesC& aUri)
-    {
+	{
     TRACER("CGlxMetadataContainer::ConstructL");
 
-    //media's uri
-    iUri = aUri.AllocL();
+	//media's uri
+	iUri = aUri.AllocL();
 
-    //Creating the RBuf texts for all the items except tags & albums
-    //which would be updated as whne the item is edited
-    iTextSetter.CreateL(KMaxFileName);
+	//Creating the RBuf texts for all the items except tags & albums
+	//which would be updated as whne the item is edited
+	iTextSetter.CreateL(KMaxFileName);
 
-    //RBuf text which would be updated as when a tag is edited for the item.
-    iTagSetter.CreateL(KMaxFileName);
+	//RBuf text which would be updated as when a tag is edited for the item.
+	iTagSetter.CreateL(KMaxFileName);
 
-    //RBuf text which would be updated as when a album is edited for the item.
-    iAlbumSetter.CreateL(KMaxFileName);
+	//RBuf text which would be updated as when a album is edited for the item.
+	iAlbumSetter.CreateL(KMaxFileName);
 
-    //Create medialist filtered by uri - iUri
-    CreateMediaListForSelectedItemL();
+	//Create medialist filtered by uri - iUri
+	CreateMediaListForSelectedItemL();
 
-    //Setting the iVideo flag to EFalse initially
-    iVideo = EFalse;
+	//Setting the iVideo flag to EFalse initially
+	iVideo = EFalse;
 
-    //Setting the iMarquee flag to EFalse initially
+	//Setting the iMarquee flag to EFalse initially
     iMarquee = EFalse;
 
     //check when Remove location information is selected.
     iLocationinfo = EFalse;
 
-    //Flag to indicate rename command is started
-    iRenameStarted = EFalse;
+	//Flag to indicate rename command is started
+	iRenameStarted = EFalse;
 
-    // Flag to indicate text entry popup display status
-	iIsPopupShown = EFalse;
-    }
+	}
 
 // ---------------------------------------------------------
 // ~CGlxMetadataContainer
@@ -214,63 +216,64 @@
     {
     TRACER("CGlxMetadataContainer::CreateSettingItemL");
     CAknSettingItem* settingItem = NULL; // No need to push onto cleanup stack
-    iTextSetter.Zero();
+	iTextSetter.Zero();
 
-    // Creating a empty Settings list box which will  be populated 
-    // with metadata in handleattributeavailable
-    switch (aResourceId)
+    //Creating a empty Settings list box which will  be populated with metadata in handleattributeavailable
+
+    switch(aResourceId)
         {
         case ENameItem:
         case EDateAndTimeItem:
         case EDescriptionItem:
             {
-            settingItem = new (ELeave) CAknTextSettingItem(aResourceId,
-                    iTextSetter);
+            settingItem = new (ELeave) CAknTextSettingItem(
+                                             aResourceId, iTextSetter );
 
             break;
             }
         case ETagsItem:
             {
-            settingItem = new (ELeave) CAknTextSettingItem(aResourceId,
-                    iTagSetter);
+             iTagSetter.Copy(KGlxTextSetter);
+             settingItem = new (ELeave) CAknTextSettingItem(
+                                                             aResourceId, iTagSetter );
             break;
             }
         case EAlbumsItem:
             {
-            settingItem = new (ELeave) CAknTextSettingItem(aResourceId,
-                    iAlbumSetter);
+            iAlbumSetter.Copy(KGlxTextSetter);
+            settingItem = new (ELeave) CAknTextSettingItem(
+                                                  aResourceId, iAlbumSetter );
             break;
             }
         case ELocationItem:
         case ESizeItem:
         case EResolutionItem:
             {
-            settingItem = new (ELeave) CAknTextSettingItem(aResourceId,
-                    iTextSetter);
-
-            break;
-            }
+            settingItem = new (ELeave) CAknTextSettingItem( 
+                                                  aResourceId, iTextSetter );
+            
+            break;          
+            }            
         case EDurationItem:
         case ElicenseItem:
             {
-            settingItem = new (ELeave) CAknTextSettingItem(aResourceId,
-                    iTextSetter);
-            //Hide the item until we get the attributes
-            //where in we check for the usage rights.                                                                                                            
-            settingItem->SetHidden(ETrue);
-            //Required to refresh the listbox when any items visiblity is changed
-            this->HandleChangeInItemArrayOrVisibilityL();
-            }
+              settingItem = new (ELeave) CAknTextSettingItem( 
+                                                         aResourceId, iTextSetter );
+							//Hide the item until we get the attributes
+							//where in we check for the usage rights.                                                                                                            
+              settingItem->SetHidden(ETrue);
+              //Required to refresh the listbox when any items visiblity is changed
+              this->HandleChangeInItemArrayOrVisibilityL();
+             }
             break;
-
+           
         default:
             {
-            break;
+            break;    
             }
         }
     return settingItem;
     }
-
 //-----------------------------------------------------------------------------
 // CGlxMetadataContainer::IsItemModifiable
 //-----------------------------------------------------------------------------
@@ -285,8 +288,25 @@
         }
     //return ETrue to dim the item
     return ETrue;
+    
     }
-
+//-----------------------------------------------------------------------------
+// CGlxMetadataContainer::IsLicenseItem
+//-----------------------------------------------------------------------------
+TBool CGlxMetadataContainer::IsLicenseItem()
+    {
+    TRACER("CGlxMetadataContainer::IsLicenseItem");
+    //Checks the item for DRMProtection.
+    //if item is a video item index should be ELicense else check for EDuration Item.
+    //because License Item index would become EDuration as the duration item is hidden in case of inage file.
+    if((!iVideo && ListBox()->CurrentItemIndex()== EDurationItem) 
+            || (ListBox()->CurrentItemIndex()== ElicenseItem))
+        {
+        return EFalse;
+        }
+    return ETrue;
+    }
+    
 //-----------------------------------------------------------------------------
 // CGlxMetadataContainer::IsLocationItem
 //-----------------------------------------------------------------------------
@@ -315,7 +335,7 @@
 void CGlxMetadataContainer::HandleListBoxEventL(CEikListBox*  /*aListBox*/,
                                                     TListBoxEvent aEventType)
     {
-    GLX_LOG_INFO("CGlxMetadataContainer::HandleListBoxEventL");         
+    TRACER("CGlxMetadataContainer::HandleListBoxEventL");
     if ((aEventType == EEventEnterKeyPressed) || 
         (aEventType == EEventEditingStarted) ||
         (aEventType == EEventItemSingleClicked))
@@ -333,15 +353,15 @@
 
     //dont Edit Item's details if medialist is empty
     //OR Rename command is in progress
-    if (iItemMediaList->Count() == 0 || iRenameStarted)
-        {
-        GLX_LOG_INFO("MediaList empty or Rename command started");
-        return;
-        }
+    if(iItemMediaList->Count() == 0 || iRenameStarted)
+    	{
+		GLX_LOG_INFO("MediaList empty or Rename command started");
+    	return;
+    	}
 
     TInt index = ListBox()->CurrentItemIndex();
 
-    switch (index)
+    switch(index)
         {
         case ENameItem:
         case EDescriptionItem:
@@ -350,87 +370,60 @@
             break;
             }
         case ETagsItem:
-            {
-            //Set the focus of the item
-            iItemMediaList->SetFocusL(NGlxListDefs::EAbsolute, 0);
-            //Launch add to container commandhandler via dialog observer.
-            iDialogObesrver.AddTagL();
-            break;
-            }
+			{
+			//Set the focus of the item
+			iItemMediaList->SetFocusL(NGlxListDefs::EAbsolute,0);
+			//Launch add to container commandhandler via dialog observer.
+			iDialogObesrver.AddTagL();
+			break;
+			}
         case EAlbumsItem:
-            {
-            //Set the focus of the item
-            iItemMediaList->SetFocusL(NGlxListDefs::EAbsolute, 0);
-            //Launch add to container commandhandler via dialog observer.
-            iDialogObesrver.AddAlbumL();
-            break;
-            }
-        case ELocationItem:
-            {
-            // Get the Media Item
-            const TGlxMedia& media = iItemMediaList->Item(0);
-            // Test to see if the Coordinate is Present
-            TCoordinate coordinate;
-            if (!media.GetCoordinate(coordinate))
-                {
-                HBufC *noLocationBuf = StringLoader::LoadLC(
-                        R_GLX_METADATA_NOTE_INFO_NO_LOCATION);
-                GlxGeneralUiUtilities::ShowInfoNoteL(*noLocationBuf, ETrue);
-                CleanupStack::PopAndDestroy(noLocationBuf);
-                }
-			else
+			{
+			//Set the focus of the item
+			iItemMediaList->SetFocusL(NGlxListDefs::EAbsolute,0);
+			//Launch add to container commandhandler via dialog observer.
+			iDialogObesrver.AddAlbumL();
+			break;
+			}
+		case ELocationItem:
+			{
+			// Get the Media Item
+			const TGlxMedia& media = iItemMediaList->Item(0);
+			// Test to see if the Coordinate is Present
+			TCoordinate coordinate;
+			if( !media.GetCoordinate(coordinate) )
 				{
-				CAknSettingItem* settingsitem = (*SettingItemArray())[index]; 
-			    GlxGeneralUiUtilities::ShowInfoNoteL(settingsitem->SettingTextL(),ETrue);
+				HBufC *noLocationBuf = StringLoader::LoadLC(R_GLX_METADATA_NOTE_INFO_NO_LOCATION);
+				GlxGeneralUiUtilities::ShowInfoNoteL(*noLocationBuf,ETrue);
+				CleanupStack::PopAndDestroy(noLocationBuf);
 				}
-            break;
-            }
+			break;
+			}
         case EDurationItem:
-            {
-            //This is condition is useful when the license item is selected for a image file
-            if (iVideo)
-                {
-                break;
-                }
-            }
-        case EResolutionItem:
-        	{
-			//This is condition is useful when the license item is selected for a DRM Video file
-			if (!iVideo || !iItemMediaList->Item(0).IsDrmProtected())
+			{
+			//This is condition is useful when the license item is selected for a image file
+			if(iVideo)
 				{
 				break;
 				}
 			}
         case ElicenseItem:
-            {
-            const TGlxMedia& item = iItemMediaList->Item(0);
-            if (item.IsDrmProtected())
-                {
+			{
+		    const TGlxMedia& item = iItemMediaList->Item(0);
+		    if( item.IsDrmProtected())
+		        {
                 //Create DRM utility
                 CGlxDRMUtility* drmUtility = CGlxDRMUtility::InstanceL();
                 CleanupClosePushL(*drmUtility);
-
-                // check if rights have expired
-                TBool expired = EFalse;
-                expired = !drmUtility->ItemRightsValidityCheckL(item.Uri(),
-                        EMPXImage == item.Category());
-
-                if (expired)
-                    {
-                    drmUtility->ShowRightsInfoL(item.Uri());
-                    }
-                else
-                    {
-                    drmUtility->ShowDRMDetailsPaneL(item.Uri());
-                    }
+                drmUtility->ShowDRMDetailsPaneL(item.Uri());
                 CleanupStack::PopAndDestroy(drmUtility);
-                }
-            }
-            break;
+			    }
+			}
+			break;
         default:
-            {
-            break;
-            }
+			{
+			break;    
+			}
         }
     }
 //-----------------------------------------------------------------------------
@@ -439,42 +432,40 @@
 void CGlxMetadataContainer::CreateMediaListForSelectedItemL( )
     {
     TRACER("CGlxMetadataContainer::CreateMediaListForSelectedItemL");
-
+   
     //create the collection path for the medialist to be created
     CMPXCollectionPath* path = CMPXCollectionPath::NewL();
-    CleanupStack::PushL(path);
+    CleanupStack::PushL( path );
     //set the all collection path as the details dialog can be launched from any of the grid views and filter with URI
     path->AppendL(KGlxCollectionPluginAllImplementationUid);
     //create the filter with the URI
     CMPXFilter* filter = TGlxFilterFactory::CreateURIFilterL(*iUri);
-    CleanupStack::PushL(filter);
+	CleanupStack::PushL( filter );
     //create the medialist
-    iItemMediaList = MGlxMediaList::InstanceL(*path, TGlxHierarchyId(
-            KMediaListId), filter);
+    iItemMediaList = MGlxMediaList::InstanceL(*path,TGlxHierarchyId(KMediaListId),filter);
 
     //Add the attributes which are required to be displayed.
-    iMainListAttributecontext = new (ELeave) CGlxAttributeContext(
-            &iSelectionIterator);
+    iMainListAttributecontext = new (ELeave) CGlxAttributeContext(&iSelectionIterator);
     iMainListAttributecontext->AddAttributeL(KMPXMediaDrmProtected);
     iMainListAttributecontext->AddAttributeL(KMPXMediaGeneralCategory);
     iMainListAttributecontext->AddAttributeL(KMPXMediaGeneralSize);
-    iMainListAttributecontext->AddAttributeL(KGlxMediaGeneralDimensions);
+    iMainListAttributecontext->AddAttributeL(KGlxMediaGeneralDimensions); 
     iMainListAttributecontext->AddAttributeL(KMPXMediaGeneralTitle);
-    iMainListAttributecontext->AddAttributeL(KMPXMediaGeneralDate);
-    iMainListAttributecontext->AddAttributeL(KMPXMediaGeneralComment);
+    iMainListAttributecontext->AddAttributeL(KGlxMediaGeneralLastModifiedDate);
+    iMainListAttributecontext->AddAttributeL(KMPXMediaGeneralComment); 
     iMainListAttributecontext->AddAttributeL(KGlxMediaGeneralLocation);
-    iMainListAttributecontext->AddAttributeL(KMPXMediaGeneralDuration);
+    iMainListAttributecontext->AddAttributeL(KMPXMediaGeneralDuration);    
     iMainListAttributecontext->AddAttributeL(KMPXMediaGeneralUri);
-
+    
     //Add Context so that we get the handleattributes call once the medialist is populated with above mentioned attributes.
-    iItemMediaList->AddContextL(iMainListAttributecontext,
-            KGlxFetchContextPriorityBlocking);
-
+    iItemMediaList->AddContextL( iMainListAttributecontext,
+            KGlxFetchContextPriorityBlocking );
+    
     //add to observer for callbacks.
     iItemMediaList->AddMediaListObserverL(this);
-
-    CleanupStack::PopAndDestroy(filter);
-    CleanupStack::PopAndDestroy(path);
+    
+    CleanupStack::PopAndDestroy( filter );
+    CleanupStack::PopAndDestroy( path ); 
     }
 
 //-----------------------------------------------------------------------------
@@ -483,208 +474,209 @@
 void CGlxMetadataContainer::CreateTagsMediaListL()
     {
     TRACER("CGlxMetadataContainer::CreateTagsMediaListL");
-    //create the collection path for the medialist to be created
-    CMPXCollectionPath* path = CMPXCollectionPath::NewL();
-    CleanupStack::PushL(path);
-    //Set the Tags collection for the particular item
-    path->AppendL(KGlxTagCollectionPluginImplementationUid);
-    //get the media item for which we require the tags collection
-    TGlxMedia item = iItemMediaList->Item(0);
-    //create the medialist filter with media ID
-    CMPXFilter* filter1 =
-            TGlxFilterFactory::CreateExcludeContainersWithoutItemFilterL(
-                    item.Id());
-    CleanupStack::PushL(filter1);
-    //set the array order as required, here its alphabetical
-    TGlxFilterProperties filterProperty;
-    filterProperty.iSortOrder = EGlxFilterSortOrderAlphabetical;
-    filterProperty.iSortDirection = EGlxFilterSortDirectionAscending;
-    //combine the filter with filterProperty
-    CMPXFilter* filter = TGlxFilterFactory::CreateCombinedFilterL(
-            filterProperty, filter1, EFalse);
-    CleanupStack::PushL(filter);
-
-    //create the medialist to get the tags array.
-    iTagMediaList = MGlxMediaList::InstanceL(*path, TGlxHierarchyId(
-            KMediaListId), filter);
-
-    //add the attribute KMPXMediaGeneralTitle to the context to get the tag name
-    iTagContext = CGlxDefaultAttributeContext::NewL();
-    iTagContext->AddAttributeL(KMPXMediaGeneralTitle);
-    iTagContext->SetRangeOffsets(KOffsets, KOffsets);
-
-    //Add Context so that we get the handleattributes call once the medialist is populated with tags.
-    iTagMediaList->AddContextL(iTagContext,
-            KGlxFetchContextPriorityUMPViewTagPane);
-
-    //add to observer for callbacks.                                      
-    iTagMediaList->AddMediaListObserverL(this);
-
-    CleanupStack::PopAndDestroy(filter);
-    CleanupStack::PopAndDestroy(filter1);
-    CleanupStack::PopAndDestroy(path);
+    	//create the collection path for the medialist to be created
+      CMPXCollectionPath* path = CMPXCollectionPath::NewL();
+      CleanupStack::PushL( path );
+      //Set the Tags collection for the particular item
+      path->AppendL(KGlxTagCollectionPluginImplementationUid);
+      //get the media item for which we require the tags collection
+      TGlxMedia item = iItemMediaList->Item(0);            
+      //create the medialist filter with media ID
+      CMPXFilter* filter1  = 
+              TGlxFilterFactory::CreateExcludeContainersWithoutItemFilterL(item.Id());
+      CleanupStack::PushL(filter1);
+      //set the array order as required, here its alphabetical
+      TGlxFilterProperties filterProperty;
+      filterProperty.iSortOrder = EGlxFilterSortOrderAlphabetical;
+      filterProperty.iSortDirection = EGlxFilterSortDirectionAscending;
+      //combine the filter with filterProperty
+      CMPXFilter* filter  = TGlxFilterFactory::CreateCombinedFilterL( filterProperty,
+                                                                      filter1,
+                                                                      EFalse);
+      CleanupStack::PushL(filter); 
+      
+      //create the medialist to get the tags array.
+      iTagMediaList = MGlxMediaList::InstanceL(*path,TGlxHierarchyId(KMediaListId),filter);
+      
+      //add the attribute KMPXMediaGeneralTitle to the context to get the tag name
+      iTagContext = CGlxDefaultAttributeContext::NewL();
+      iTagContext->AddAttributeL(KMPXMediaGeneralTitle); 
+      iTagContext->SetRangeOffsets(KOffsets,KOffsets);
+      
+      //Add Context so that we get the handleattributes call once the medialist is populated with tags.
+      iTagMediaList->AddContextL( iTagContext,
+                                      KGlxFetchContextPriorityUMPViewTagPane );
+                                      
+			//add to observer for callbacks.                                      
+      iTagMediaList->AddMediaListObserverL(this);
+      
+      CleanupStack::PopAndDestroy(filter);
+      CleanupStack::PopAndDestroy(filter1);
+      CleanupStack::PopAndDestroy(path);
+  
     }
-
 //-----------------------------------------------------------------------------
 // CGlxMetadataContainer::CreateAlbumsMediaListL
 //-----------------------------------------------------------------------------
 void CGlxMetadataContainer::CreateAlbumsMediaListL()
     {
     TRACER("CGlxMetadataContainer::CreateAlbumsMediaListL");
-    //create the collection path for the medialist to be created
-    CMPXCollectionPath* path = CMPXCollectionPath::NewL();
-    CleanupStack::PushL(path);
-    //Set the albums collection for the particular item
-    path->AppendL(KGlxCollectionPluginAlbumsImplementationUid);
-    //get the media item for which we require the tags collection
-    TGlxMedia item = iItemMediaList->Item(0);
-    //create the medialist filter with media ID
-    CMPXFilter* filter =
-            TGlxFilterFactory::CreateExcludeContainersWithoutItemFilterL(
-                    item.Id());
-    CleanupStack::PushL(filter);
-    //create the albums medialist.
-    iAlbumMediaList = MGlxMediaList::InstanceL(*path, TGlxHierarchyId(
-            KMediaListId), filter);
+    	//create the collection path for the medialist to be created
+      CMPXCollectionPath* path = CMPXCollectionPath::NewL();
+      CleanupStack::PushL( path );
+      //Set the albums collection for the particular item
+      path->AppendL(KGlxCollectionPluginAlbumsImplementationUid);
+      //get the media item for which we require the tags collection
+      TGlxMedia item = iItemMediaList->Item(0);     
+      //create the medialist filter with media ID
+      CMPXFilter* filter  =
+              TGlxFilterFactory::CreateExcludeContainersWithoutItemFilterL(item.Id());
+      CleanupStack::PushL(filter);    
+      //create the albums medialist.
+      iAlbumMediaList = MGlxMediaList::InstanceL(*path,
+                                                  TGlxHierarchyId(KMediaListId),
+                                                  filter);
+                                                  
+      //add the attribute KMPXMediaGeneralTitle to the context to get the album name
+      iAlbumContext = CGlxDefaultAttributeContext::NewL();
+      iAlbumContext->AddAttributeL(KMPXMediaGeneralTitle);
+      iAlbumContext->SetRangeOffsets(KOffsets,KOffsets);
+      //Add Context to the medialist so that we get the handleattributes call once the medialist is populated with albums.
+      iAlbumMediaList->AddContextL( iAlbumContext, 
+                              KGlxFetchContextPriorityUMPViewAlbumPane );
+      
+      //add to observer for callbacks. 
+      iAlbumMediaList->AddMediaListObserverL(this);        
+       
+      CleanupStack::PopAndDestroy(filter);   
+      CleanupStack::PopAndDestroy(path); 
+  
+    }
 
-    //add the attribute KMPXMediaGeneralTitle to the context to get the album name
-    iAlbumContext = CGlxDefaultAttributeContext::NewL();
-    iAlbumContext->AddAttributeL(KMPXMediaGeneralTitle);
-    iAlbumContext->SetRangeOffsets(KOffsets, KOffsets);
-    //Add Context to the medialist so that we get the handleattributes call once the medialist is populated with albums.
-    iAlbumMediaList->AddContextL(iAlbumContext,
-            KGlxFetchContextPriorityUMPViewAlbumPane);
-
-    //add to observer for callbacks. 
-    iAlbumMediaList->AddMediaListObserverL(this);
-
-    CleanupStack::PopAndDestroy(filter);
-    CleanupStack::PopAndDestroy(path);
-    }
 
 // ----------------------------------------------------------------------------
 // CGlxMetadataContainer::ViewDynInitMenuPaneL
 // ----------------------------------------------------------------------------
 // 
-void CGlxMetadataContainer::ViewDynInitMenuPaneL(TInt aMenuId,
-        CEikMenuPane* aMenuPane)
+void CGlxMetadataContainer::ViewDynInitMenuPaneL(TInt aMenuId, CEikMenuPane* aMenuPane)
     {
-    if (aMenuId == R_METADATA_MENU)
+    if( aMenuId == R_METADATA_MENU )
         {
-        //Set dim the options based on the item selected
+        //Set dim the options based on the utem selected
+        //Viewdetails option will be availble only for the license item
+        //Delete option will be available only for the location item	
+        aMenuPane->SetItemDimmed(KGlxViewBoundMenuCommandId,IsLicenseItem());
         //location info will be enabled if the item has a location info
-        aMenuPane->SetItemDimmed(KGlxDeleteBoundMenuCommandId,
-                IsLocationItem());
+		aMenuPane->SetItemDimmed(KGlxDeleteBoundMenuCommandId,IsLocationItem());
+		// Show on Map is no longer part of requirements and should not be shown in the 
+		// options menu. When show on map has to come back, replace the 'ETrue' below with 
+		// the function IsLocationItem. 
+        aMenuPane->SetItemDimmed(EGlxCmdAiwShowMap,ETrue);
         }
+        
+    
     }
-
 // ----------------------------------------------------------------------------
 // CGlxMetadataContainer::RemoveLocationL
 // ----------------------------------------------------------------------------
 //
 void CGlxMetadataContainer::RemoveLocationL() 
     {
-    TRACER("CGlxMetadataContainer::RemoveLocationL");
-
+    TRACER("CGlxMetadataContainer::RemoveLocationL");    
+    
     iLocationinfo = ETrue;
     // get the media item
-    const TGlxMedia& media = iItemMediaList->Item(0);
+    const TGlxMedia& media = iItemMediaList->Item(0);    
     // Test to see if the coordinate is present
     TCoordinate coordinate;
     TBool isSupported = media.GetCoordinate(coordinate);
-    if (!isSupported)
+    if( !isSupported )
         {
-        HBufC *buf = StringLoader::LoadLC(
-                R_GLX_METADATA_NOTE_INFO_NO_LOCATION);
-        GlxGeneralUiUtilities::ShowInfoNoteL(*buf, ETrue);
+        HBufC *buf = StringLoader::LoadLC(R_GLX_METADATA_NOTE_INFO_NO_LOCATION);
+        GlxGeneralUiUtilities::ShowInfoNoteL(*buf,ETrue);
         CleanupStack::PopAndDestroy(buf);
         }
     else
         {
-        HBufC *buf =
-                StringLoader::LoadLC(R_GLX_METADATA_NOTE_DELETE_LOCATION);
-        TBool response = GlxGeneralUiUtilities::ConfirmQueryL(
-                R_GLX_QUERY_YES_NO, *buf);
+        HBufC *buf = StringLoader::LoadLC(R_GLX_METADATA_NOTE_DELETE_LOCATION);
+        TBool response = GlxGeneralUiUtilities::ConfirmQueryL(R_GLX_QUERY_YES_NO,*buf);
         CleanupStack::PopAndDestroy(buf);
-
-        if (response)
+   
+        if( response )
             {
             //user selected yes, so delete location     
             //send command for delete location after successfull removal of command remove this pane
-            if (iItemMediaList->Count() > 0)
-                {
+            if( iItemMediaList->Count() > 0 )
+                {       
                 //set focus to first item	
-                iItemMediaList->SetFocusL(NGlxListDefs::EAbsolute, 0);
-
+                iItemMediaList->SetFocusL(NGlxListDefs::EAbsolute,0);
+                
                 // Deleting location information from image file
                 RFs rFs;
-                User::LeaveIfError(rFs.Connect());
-                CleanupClosePushL(rFs);
-                RFile rFile;
-                User::LeaveIfError(rFile.Open(rFs,
-                        iItemMediaList->Item(0).Uri(), EFileWrite));
-                CleanupClosePushL(rFile);
-
+                User::LeaveIfError( rFs.Connect() );
+                CleanupClosePushL( rFs );
+                RFile rFile;                
+                User::LeaveIfError( rFile.Open(rFs,
+                                               iItemMediaList->Item(0).Uri()
+                                               ,EFileWrite ));
+                CleanupClosePushL( rFile );
+                
                 TInt imageFileSize = 0; // Image File Size
-                User::LeaveIfError(rFile.Size(imageFileSize));
-                HBufC8* imageData = HBufC8::NewL(imageFileSize); //Actual Image Data
-                CleanupStack::PushL(imageData);
-
+                User::LeaveIfError( rFile.Size( imageFileSize ) );
+                HBufC8* imageData = HBufC8::NewL( imageFileSize );  //Actual Image Data
+                CleanupStack::PushL( imageData );
+                
                 TPtr8 myImagePtr = imageData->Des();
-                TInt readError = rFile.Read(myImagePtr);
-                if (readError != KErrNone)
+                TInt readError = rFile.Read( myImagePtr );
+                if ( readError != KErrNone )
                     {
-                    User::Leave(KErrGeneral);
+                    User::Leave( KErrGeneral );
                     }
-
+                    
                 //CExifModify Interface class for modifying existing Exif v2.2 (or prior) 
                 //file format or creating Exif v2.2 file format using valid Jpeg image     
                 CExifModify* exifWriter = NULL;
                 TRAPD(err,exifWriter = CExifModify::NewL( imageData->Des()));
-                CleanupStack::PushL(exifWriter);
-                if (err == KErrNone)
+                CleanupStack::PushL( exifWriter );
+                if(err == KErrNone)
                     {
-                    //Removes the specified IFD structure and all its tags from the Exif data
-                    exifWriter->DeleteIfd(EIfdGps);
-
-                    HBufC8* modifiedExif = exifWriter->WriteDataL(
-                            imageData->Des()); //Modified Image Data
-                    CleanupStack::PushL(modifiedExif);
+					//Removes the specified IFD structure and all its tags from the Exif data
+					exifWriter->DeleteIfd  ( EIfdGps  );
+                
+					HBufC8* modifiedExif = exifWriter->WriteDataL( imageData->Des() );  //Modified Image Data
+					CleanupStack::PushL( modifiedExif );
+                
+					const TUint32 fileSize = modifiedExif->Des().Length();  //Size of Modified File
+					TInt oldSize;
+					rFile.Size( oldSize );
+					// set position to begin of file & write the Modified data (Without Location Information)
+					TInt pos = 0;
+					User::LeaveIfError( rFile.Seek( ESeekStart, pos ) );
+					User::LeaveIfError( rFile.Write( modifiedExif->Des(), fileSize ) );
 
-                    const TUint32 fileSize = modifiedExif->Des().Length(); //Size of Modified File
-                    TInt oldSize;
-                    rFile.Size(oldSize);
-                    // set position to begin of file & write the Modified data (Without Location Information)
-                    TInt pos = 0;
-                    User::LeaveIfError(rFile.Seek(ESeekStart, pos));
-                    User::LeaveIfError(rFile.Write(modifiedExif->Des(),
-                            fileSize));
+					TTime lastModified;
+					lastModified.UniversalTime();   
+					User::LeaveIfError( rFile.SetModified( lastModified ) );    //Change the Modified Time
 
-                    TTime lastModified;
-                    lastModified.UniversalTime();
-                    User::LeaveIfError(rFile.SetModified(lastModified)); //Change the Modified Time
-
-                    CleanupStack::PopAndDestroy(modifiedExif);
+					CleanupStack::PopAndDestroy( modifiedExif);
                     }
-                CleanupStack::PopAndDestroy(exifWriter);
-                CleanupStack::PopAndDestroy(imageData);
-                CleanupStack::PopAndDestroy(&rFile);
-                CleanupStack::PopAndDestroy(&rFs);
+                CleanupStack::PopAndDestroy( exifWriter);
+                CleanupStack::PopAndDestroy( imageData );
+                CleanupStack::PopAndDestroy( &rFile );
+                CleanupStack::PopAndDestroy( &rFs );
 
                 //Deleting location information from MDS database
-                CMPXCollectionPath* path = iItemMediaList->PathLC();
-                CMPXCommand* command =
-                        TGlxCommandFactory::DeleteLocationCommandLC(*path);
-
-                command->SetTObjectValueL<TAny*> (
-                        KMPXCommandGeneralSessionId,
-                        static_cast<TAny*> (this));
-
-                iItemMediaList->CommandL(*command);
+                CMPXCollectionPath* path =  iItemMediaList->PathLC();
+                CMPXCommand* command = TGlxCommandFactory::DeleteLocationCommandLC(*path);
+            
+                command->SetTObjectValueL<TAny*>(KMPXCommandGeneralSessionId,
+                                                 static_cast<TAny*>(this));
+            
+                iItemMediaList->CommandL(*command);            
                 CleanupStack::PopAndDestroy(command);
                 CleanupStack::PopAndDestroy(path);
                 }
-            }
+            }       
         }
     }
 // ----------------------------------------------------------------------------
@@ -702,86 +694,89 @@
     ListBox()->DrawNow();
     }
 // ----------------------------------------------------------------------------
-// CGlxMetadataContainer::SetAttributesL
+// CGlxMetadataContainer::SetAttributes
 // ----------------------------------------------------------------------------
 //
 void CGlxMetadataContainer::SetAttributesL(TMPXAttribute attribute)
 	{
-    TRACER("CGlxMetadataContainer::SetAttributesL");
-
+    TRACER("CGlxMetadataContainer::SetAttributesL");    
+    
     //create the tags and albums medialist once the item medialist is populated
     //Tags and albums medialist can be created only with media ID.
-    if (!iTagMediaList)
-        {
-        CreateTagsMediaListL();
-        }
-    if (!iAlbumMediaList)
-        {
-        CreateAlbumsMediaListL();
-        }
-    if (!iSetVisible)
-        {
-        iSetVisible = ETrue;
-        SetDurationLIicenseItemVisibilityL();
-        }
+    if(!iTagMediaList)
+		{
+		CreateTagsMediaListL();
+		}		
+    if(!iAlbumMediaList)
+		{
+		CreateAlbumsMediaListL();	
+		}
+    if(!iSetVisible)
+		{
+		iSetVisible = ETrue;
+		SetDurationLIicenseItemVisibilityL();
+		}
     TGlxMedia item = iItemMediaList->Item(0);
     //Create the string convertor instance 
     //String convertor class with provide the specific format for date,location and duration and size.
     CGlxUStringConverter* stringConverter = CGlxUStringConverter::NewL();
-    CleanupStack::PushL(stringConverter);
-    HBufC* string = NULL;
-
+    CleanupStack::PushL(stringConverter );
+    HBufC* string = NULL;    
+    
     //if attribute is date and time we need to pass the format it as R_QTN_DATE_USUAL_WITH_ZERO else null
-    if (attribute == KMPXMediaGeneralDate)
+    if(attribute == KGlxMediaGeneralLastModifiedDate)
         {
-        stringConverter->AsStringL(item, attribute,
-                R_QTN_DATE_USUAL_WITH_ZERO, string);
-        }
+        stringConverter->AsStringL(item, 
+                                   attribute,
+                                   R_QTN_DATE_USUAL_WITH_ZERO, string );
+        }    
     else
         {
-        stringConverter->AsStringL(item, attribute, 0, string);
+        stringConverter->AsStringL(item,
+                                   attribute,0, string );
         }
     //get the settings item based on the attribute and set the text.
-    if (string)
-        {
+    if ( string )
+		{
         iTextSetter.Zero();
-        iTextSetter.Append(*string);
-        if (attribute == KMPXMediaGeneralSize)
-            {
-            EditItemL(ESizeItem, EFalse);
-            }
-        else if (attribute == KMPXMediaGeneralDuration)
-            {
-            EditItemL(EDurationItem, EFalse);
-            }
-        else if (attribute == KMPXMediaGeneralTitle)
-            {
-            EditItemL(ENameItem, EFalse);
-            }
-        else if (attribute == KMPXMediaGeneralDate)
-            {
-            EditItemL(EDateAndTimeItem, EFalse);
-            }
-        else if (attribute == KMPXMediaGeneralComment)
-            {
-            EditItemL(EDescriptionItem, EFalse);
-            }
-        else if (attribute == KGlxMediaGeneralLocation)
-            {
-            EditItemL(ELocationItem, EFalse);
-            }
-        else if (attribute == KGlxMediaGeneralDimensions)
-            {
-            EditItemL(EResolutionItem, EFalse);
-            }
-        else
-            {
-            }
-        delete string;
-        string = NULL;
-        }
-    CleanupStack::PopAndDestroy(stringConverter);
-    }
+		iTextSetter.Append(*string);
+		if(attribute == KMPXMediaGeneralSize)
+			{
+			EditItemL(ESizeItem,EFalse);
+			}
+		else if(attribute == KMPXMediaGeneralDuration)
+			{
+			EditItemL(EDurationItem,EFalse);
+			}
+		else if(attribute == KMPXMediaGeneralTitle)
+			{
+			EditItemL(ENameItem,EFalse);
+			}
+		else if(attribute == KGlxMediaGeneralLastModifiedDate)
+			{  
+			EditItemL(EDateAndTimeItem,EFalse);
+			}
+		else if(attribute == KMPXMediaGeneralComment)
+			{
+			EditItemL(EDescriptionItem,EFalse);
+			}
+		else if(attribute == KGlxMediaGeneralLocation)
+			{
+			EditItemL(ELocationItem,EFalse);
+			}
+		else if(attribute == KGlxMediaGeneralDimensions)
+			{
+			EditItemL(EResolutionItem,EFalse);
+			}    
+		else
+			{
+    
+			} 
+		delete string;
+		string = NULL;
+		}
+    CleanupStack::PopAndDestroy(stringConverter );
+	}
 
 // ----------------------------------------------------------------------------
 // CGlxMetadataContainer::SetNameDescriptionL
@@ -789,18 +784,17 @@
 //
 void CGlxMetadataContainer::SetNameDescriptionL(TInt aItem)
     {
-    TRACER("CGlxMetadataContainer::SetNameDescriptionL");
+    TRACER("CGlxMetadataContainer::SetNameDescriptionL");   
     //This functions i commn for updatng both name and description once modified    
     //get the item handcle to be modified    	
-    CAknSettingItem* settingsitem = (*SettingItemArray())[aItem];
-    HBufC* textBuf = HBufC::NewLC(KMaxMediaPopupTextLength);
-    const TDesC& popupText = settingsitem->SettingTextL();
-    (textBuf->Des()).Copy(popupText.Left(KMaxMediaPopupTextLength));
+    CAknSettingItem* settingsitem = (*SettingItemArray())[aItem]; 
+    HBufC* textBuf = HBufC::NewLC( KMaxMediaPopupTitleLength );
+    (textBuf->Des()).Copy((settingsitem->SettingTextL()));
     TPtr textPtr = textBuf->Des();
     //Remove preceeding & trailing spaces
     textPtr.Trim();
-    HBufC* buf = NULL;
-
+    TBuf<KMaxMediaPopupTitleLength> titleText(*textBuf);
+    HBufC *buf = NULL;
     if(aItem == ENameItem)
         {
         buf = StringLoader::LoadLC(R_GLX_METADATA_VIEW_TITLE_NSERIES);
@@ -809,129 +803,109 @@
         {
         buf = StringLoader::LoadLC(R_GLX_METADATA_VIEW_DESCRIPTION_NSERIES);
         }
-
+    
     //Launch the text entry editor.
-    CGlxTextEntryPopup* popup = CGlxTextEntryPopup::NewL(*buf, textPtr);
+    CGlxTextEntryPopup* popup = CGlxTextEntryPopup::NewL( *buf, textPtr );
     CleanupStack::PopAndDestroy(buf);
-    if (aItem == EDescriptionItem)
+    if(aItem == EDescriptionItem)
         {
         popup->SetLeftSoftKeyL(ETrue);
         }
-    iIsPopupShown = ETrue;
-
+    
     //action upon selecting ok from the editor 
-    if (popup->ExecuteLD() == EEikBidOk)
-        {
-        iIsPopupShown = EFalse;
-		if (iItemMediaList->Count() && 0 != (popupText.Compare(*textBuf)))
-            {
-            TFileName fileName = ParseFileName(*textBuf);
-            //check If filename already exists
-            if ((aItem == ENameItem) && (BaflUtils::FileExists(
-                    ControlEnv()->FsSession(), fileName)))
-                {
-                //if changed title is same as existing one then showing the already use popup to user
-                HBufC* info = StringLoader::LoadLC(R_GLX_NAME_ALREADY_USED,
-                        *textBuf);
-                GlxGeneralUiUtilities::ShowInfoNoteL(*info, ETrue);
-                CleanupStack::PopAndDestroy(info);
-                }
-            // Check if the filename is valid
-            else if ((aItem == ENameItem)
-                    && (!ControlEnv()->FsSession().IsValidName(*textBuf)))
-                {
-                //Show illegal characters error note 
-                HBufC* info = StringLoader::LoadLC(
-                        R_GLX_QTN_FLDR_ILLEGAL_CHARACTERS);
-                GlxGeneralUiUtilities::ShowInfoNoteL(*info, ETrue);
-                CleanupStack::PopAndDestroy(info);
-                }
-            else
-                {
-                //Modify the MDS and setting list only if the entry is different from previous Item value
+    if ( popup->ExecuteLD() == EEikBidOk )
+		{
+		if(0 != (titleText.Compare(*textBuf)))
+			{
+			
+			TFileName fileName = ParseFileName(*textBuf);
+			//check If filename already exists
+			if ((aItem == ENameItem) &&
+					(BaflUtils::FileExists(ControlEnv()->FsSession(), fileName)))
+				{
+				//if changed title is same as existing one then showing the already use popup to user
+				HBufC* info = StringLoader::LoadLC(R_GLX_NAME_ALREADY_USED, *textBuf);
+				GlxGeneralUiUtilities::ShowInfoNoteL(*info, ETrue);
+				CleanupStack::PopAndDestroy(info);
+				}
+			else
+				{
+				//Modify the MDS and setting list only if the entry is different from previous Item value
                 iTextSetter.Zero();
-                iTextSetter.Copy(*textBuf);
-                EditItemL(aItem, EFalse);
-                iItemMediaList->SetFocusL(NGlxListDefs::EAbsolute, 0);//set focus to first item
-
-                if (aItem == ENameItem)
-                    {
-                    //indicate Rename command is started
-                    iRenameStarted = ETrue;
-                    //set Setting List Box to Dimmed status
-                    SetDimmed(iRenameStarted);
-
-                    const TGlxMedia& media = iItemMediaList->Item(0);
-                    ContentAccess::CManager *manager =
-                            ContentAccess::CManager::NewL();
-                    CleanupStack::PushL(manager);
-                    HBufC* modifiedName = fileName.AllocLC();
-
-                    //rename the media
-                    TInt error = manager->RenameFile(media.Uri(),
-                            *modifiedName);
-                    if (KErrNone == error)
-                        {
-                        //Redundant call But needed in case FileSystem is too slow 
-                        //to notify MDS for updating title.
-                        //Create the glx command for updating Title in MDS
-                        CMPXCollectionPath* path = iItemMediaList->PathLC();
-                        CMPXCommand* command =
-                                TGlxCommandFactory::RenameCommandLC(
-                                        settingsitem->SettingTextL(), *path);
-                        command->SetTObjectValueL<TAny*> (
-                                KMPXCommandGeneralSessionId,
-                                static_cast<TAny*> (this));
-                        //issue command to the medialist which further 
-                        //calls data source to update MDS
-                        iItemMediaList->CommandL(*command);
-                        CleanupStack::PopAndDestroy(command);
-                        CleanupStack::PopAndDestroy(path);
-                        }
-                    else
-                        {
-                        //Renaming commmand failed
-                        iRenameStarted = EFalse;
-                        //reset Setting Items to undim status
-                        SetDimmed(iRenameStarted);
-                        //Reset the EName Settings field
-                        iTextSetter.Zero();
-                        iTextSetter.Copy(media.Title());
-                        EditItemL(ENameItem, EFalse);
+				iTextSetter.Copy(*textBuf);
+				EditItemL(aItem,EFalse);
+				iItemMediaList->SetFocusL(NGlxListDefs::EAbsolute,0);//set focus to first item
+				
+				if(aItem == ENameItem)
+					{
+					//indicate Rename command is started
+					iRenameStarted = ETrue;
+					//set Setting List Box to Dimmed status
+					SetDimmed(iRenameStarted);
+					
+					const TGlxMedia& media = iItemMediaList->Item(0);
+					ContentAccess::CManager *manager = ContentAccess::CManager::NewL();
+					CleanupStack::PushL(manager);
+					HBufC* modifiedName = fileName.AllocLC();
+					
+					//rename the media
+					TInt error = manager->RenameFile(media.Uri(), *modifiedName);
+					if(KErrNone == error)
+						{
+						//Redundant call But needed in case FileSystem is too slow 
+						//to notify MDS for updating title.
+						//Create the glx command for updating Title in MDS
+						CMPXCollectionPath* path = iItemMediaList->PathLC();
+						CMPXCommand* command = TGlxCommandFactory::RenameCommandLC(
+								settingsitem->SettingTextL(), *path);
+						command->SetTObjectValueL<TAny*> (
+								KMPXCommandGeneralSessionId,
+								static_cast<TAny*> (this));
+						//issue command to the medialist which further 
+						//calls data source to update MDS
+						iItemMediaList->CommandL(*command);
+						CleanupStack::PopAndDestroy(command);
+						CleanupStack::PopAndDestroy(path);
+						}
+					else
+						{
+						//Renaming commmand failed
+						iRenameStarted = EFalse;
+						//reset Setting Items to undim status
+						SetDimmed(iRenameStarted);
+						//Reset the EName Settings field
+						iTextSetter.Zero();
+						iTextSetter.Copy(media.Title());
+						EditItemL(ENameItem,EFalse);
 						GlxGeneralUiUtilities::ShowErrorNoteL(error);
-                        }
-                    CleanupStack::PopAndDestroy(modifiedName);
-                    CleanupStack::PopAndDestroy(manager);
-                    }
-                else
-                    {
-                    //Create the glx command for changing description
-                    CMPXCollectionPath* path = iItemMediaList->PathLC();
-                    CMPXCommand* command =
-                            TGlxCommandFactory::SetDescriptionCommandLC(
-                                    settingsitem->SettingTextL(), *path);
-                    command->SetTObjectValueL<TAny*> (
-                            KMPXCommandGeneralSessionId,
-                            static_cast<TAny*> (this));
-                    //issue command to the medialist which further 
-                    //calls data source to update MDS
-                    iItemMediaList->CommandL(*command);
-                    CleanupStack::PopAndDestroy(command);
-                    CleanupStack::PopAndDestroy(path);
-                    }
-                }
-            }
-        }
-    CleanupStack::PopAndDestroy(textBuf);
-
+						}
+					CleanupStack::PopAndDestroy(modifiedName);
+					CleanupStack::PopAndDestroy(manager);
+					}
+				else
+					{
+					//Create the glx command for changing description
+					CMPXCollectionPath* path = iItemMediaList->PathLC();
+					CMPXCommand* command =
+							TGlxCommandFactory::SetDescriptionCommandLC(
+									settingsitem->SettingTextL(), *path);
+					command->SetTObjectValueL<TAny*> (
+							KMPXCommandGeneralSessionId,
+							static_cast<TAny*> (this));
+					//issue command to the medialist which further 
+					//calls data source to update MDS
+					iItemMediaList->CommandL(*command);
+					CleanupStack::PopAndDestroy(command);
+					CleanupStack::PopAndDestroy(path);
+					}
+				}
+			}
+		}
+    CleanupStack::PopAndDestroy( textBuf );
+    
     //notify observer that some operation has happened. So refresh the toolbar area..
     iResetToolbarObs.HandleToolbarResetting(EFalse);
-    if (!iItemMediaList->Count())
-        {
-        iDialogObesrver.HandleItemRemovedL();
-        }
     }
-
 // ----------------------------------------------------------------------------
 // CGlxMetadataContainer::UpdateTagsL()
 // ----------------------------------------------------------------------------
@@ -940,25 +914,23 @@
     {
     TRACER("CGlxMetadataContainer::UpdateTagsL");
     //Get the tag setting item handle to set the text
-    CAknSettingItem* settingsitem = (*SettingItemArray())[ETagsItem];
-
-    //Set the tag setter to empty string before filling in the data.                                                
-    iTagSetter.Zero();
-     
-    //Loop to appened all the tags to the iTagSetter.
-    for (TInt index = 0; index < iTagMediaList->Count(); index++)
-        {
-        if (iTagSetter.Length())
-            {
-            iTagSetter.Append(KGlxComma);
-            }
-        const TGlxMedia& item = iTagMediaList->Item(index);
-        const TDesC& title = item.Title();
-        iTagSetter.Append(title);
-        }
-    EditItemL(ETagsItem, EFalse);
-    }
-
+     CAknSettingItem* settingsitem =
+                             (*SettingItemArray())[ETagsItem]; 
+                             //Set the tag setter to empty string before filling in the data.                                                
+     iTagSetter.Copy(KGlxTextSetter);
+     //Loop to appened all the tags to the iTagSetter.
+     for( TInt index = 0 ; index < iTagMediaList->Count() ; index++ )
+		{
+		if(iTagSetter.Length())
+			{
+			iTagSetter.Append(KGlxComma);
+			}
+		const TGlxMedia&  item = iTagMediaList->Item( index );
+		const TDesC& title = item.Title();
+		iTagSetter.Append(title);
+		}    
+     EditItemL(ETagsItem,EFalse);
+     }
 // ----------------------------------------------------------------------------
 // CGlxMetadataContainer::UpdateAlbumsL()
 // ----------------------------------------------------------------------------
@@ -967,11 +939,10 @@
     {
     TRACER("CGlxMetadataContainer::UpdateAlbumsL");	
     //Get the tag setting item handle to set the text
-    CAknSettingItem* settingsitem = (*SettingItemArray())[EAlbumsItem];
-
+    CAknSettingItem* settingsitem = 
+                        (*SettingItemArray())[EAlbumsItem];     
     //Set the tag setter to empty string before filling in the data.
-    iAlbumSetter.Zero();
-    
+    iAlbumSetter.Copy(KGlxTextSetter);
     //Loop to appened all the tags to the iAlbumSetter.
     for( TInt index = 0 ; index < iAlbumMediaList->Count() ; index++ )
 		{
@@ -985,7 +956,6 @@
 		}
 	EditItemL(EAlbumsItem,EFalse);
     }
-
 // ----------------------------------------------------------------------------
 // CGlxMetadataContainer::SetDurationLIicenseItemVisibilityL()
 // ----------------------------------------------------------------------------
@@ -998,50 +968,43 @@
     const CGlxMedia* media = item.Properties();
 
     //in order to check for video category and drm rights
-
+   
     CAknSettingItem* hiddenItem = NULL;
-    if (item.Category() == EMPXVideo)
-        {
-        if (!item.IsDrmProtected())
-            {
-            hiddenItem = (*SettingItemArray())[EDurationItem];
-            //Set the duration item visible
-            hiddenItem->SetHidden(EFalse);
-            }
-        else
-            {
-            hiddenItem = (*SettingItemArray())[EResolutionItem];
-            //Set the Resolution item in-visible for DRM protected Video
-            hiddenItem->SetHidden(ETrue);
-            }
+    if( item.Category() == EMPXVideo)
+        {  
+        if(!item.IsDrmProtected())
+	        {
+	        hiddenItem = (*SettingItemArray())[EDurationItem];        
+	        //Set the duration item visible
+	        hiddenItem->SetHidden(EFalse);         
+	        }              
         //set the video flag which would be used to enable/disable the view details option.               
         this->HandleChangeInItemArrayOrVisibilityL();
         iVideo = ETrue;
-        }
-    if (media && media->IsSupported(KMPXMediaDrmProtected))
+        }    
+     if( media && media->IsSupported(KMPXMediaDrmProtected))
         {
-        if (item.IsDrmProtected())
-            {
-            hiddenItem = (*SettingItemArray())[ElicenseItem];
-            //Set the License item visible
-            hiddenItem->SetHidden(EFalse);
-            //Required to refresh the listbox when any items visiblity is changed
-            this->HandleChangeInItemArrayOrVisibilityL();
-            }
+		if(item.IsDrmProtected())
+			{
+			hiddenItem = (*SettingItemArray())[ElicenseItem];
+			//Set the License item visible
+			hiddenItem->SetHidden(EFalse);             
+			//Required to refresh the listbox when any items visiblity is changed
+			this->HandleChangeInItemArrayOrVisibilityL();
+			}
         }
-    }
-
+    }   
 //Medialist callbacks.    
 // ----------------------------------------------------------------------------
 // CGlxMetadataContainer::HandleAttributesAvailableL
 // ----------------------------------------------------------------------------
 //
-void CGlxMetadataContainer::HandleAttributesAvailableL(TInt /*aItemIndex*/,
-        const RArray<TMPXAttribute>& aAttributes, MGlxMediaList* aList)
+void CGlxMetadataContainer::HandleAttributesAvailableL( TInt /*aItemIndex*/, 
+    const RArray<TMPXAttribute>& aAttributes, MGlxMediaList* aList )
     {
     TRACER("CGlxMetadataContainer::HandleAttributesAvailableL()");
     //generic medialist for the item for all the attributes required other than tags and albums.
-    if (aList == iItemMediaList)
+    if(aList == iItemMediaList)
         {
         // Loop untill it checks for all the avialable attributes
         for (TInt i = aAttributes.Count() - 1; i >= 0; i--)
@@ -1059,38 +1022,36 @@
         //Check if media's uri(i.e 'aModifiedUri') is different from 'iUri'
         //i.e media is Renamed then Refesh Media list.
         TMPXAttribute uriAttrib(KMPXMediaGeneralUri);
-        TIdentityRelation<TMPXAttribute> match(&TMPXAttribute::Match);
+        TIdentityRelation< TMPXAttribute > match ( &TMPXAttribute::Match );
         TInt index = aAttributes.Find(uriAttrib, match);
         if (KErrNotFound != index)
-            {
-            HBufC* modifiedUri = NULL;
-            TGlxMedia item = iItemMediaList->Item(0);
-            //Create the string convertor instance
-            CGlxUStringConverter* stringConverter =
-                    CGlxUStringConverter::NewL();
-            CleanupStack::PushL(stringConverter);
+        	{
+        	HBufC* modifiedUri = NULL;
+			TGlxMedia item = iItemMediaList->Item(0);
+			//Create the string convertor instance
+			CGlxUStringConverter* stringConverter = CGlxUStringConverter::NewL();
+			CleanupStack::PushL(stringConverter);
+
 			//fetch media uri
-			stringConverter->AsStringL(item, aAttributes[index], 0, modifiedUri);
-			if (modifiedUri)
+			stringConverter->AsStringL(item,aAttributes[index],0, modifiedUri );
+			CleanupStack::PopAndDestroy(stringConverter);
+
+			//Check if media item was renamed
+			if (modifiedUri && modifiedUri->Compare(*iUri) != 0)
 				{
+				//Set rename command as started since
+				//Rename is also possible from File Manager
+				iRenameStarted = ETrue;
 				CleanupStack::PushL(modifiedUri);
-				//Check if media item was renamed
-				if (modifiedUri->CompareF(*iUri) != 0)
-					{
-					//Set rename command as started since
-					//Rename is also possible from File Manager
-					iRenameStarted = ETrue;
-					RefreshMediaListL(*modifiedUri);
-					}
+				RefreshMediaListL(*modifiedUri);
 				CleanupStack::PopAndDestroy(modifiedUri);
 				}
-			CleanupStack::PopAndDestroy(stringConverter);
 			}
 
         }
-
+    
     TMPXAttribute titleAttrib(KMPXMediaGeneralTitle);
-    TIdentityRelation<TMPXAttribute> match(&TMPXAttribute::Match);
+    TIdentityRelation< TMPXAttribute > match ( &TMPXAttribute::Match );
 
     if (KErrNotFound != aAttributes.Find(titleAttrib, match))
         {
@@ -1103,117 +1064,118 @@
             UpdateAlbumsL();
             }
         }
+    
     }
 
 // ----------------------------------------------------------------------------
 // HandleItemAddedL
 // ----------------------------------------------------------------------------
 // 
-void CGlxMetadataContainer::HandleItemAddedL(TInt /*aStartIndex*/,
-        TInt /*aEndIndex*/, MGlxMediaList* aList)
+void CGlxMetadataContainer::HandleItemAddedL( TInt /*aStartIndex*/, TInt /*aEndIndex*/, 
+     MGlxMediaList* aList )
     {
     TRACER("CGlxMetadataContainer::HandleItemAddedL()");
-
-    if (!iTagMediaList)
-        {
+    
+    if(!iTagMediaList)
+		{
         CreateTagsMediaListL();
-        }
-    if (!iAlbumMediaList)
-        {
-        CreateAlbumsMediaListL();
-        }
-    if (!iMarquee)
-        {
+		}       
+    if(!iAlbumMediaList)
+		{
+        CreateAlbumsMediaListL();   
+		}
+    if(!iMarquee)
+		{
         EnableMarqueingL();
-        }
+		}
     SetDurationLIicenseItemVisibilityL();
-    if (aList == iTagMediaList)
+    if(aList == iTagMediaList)
+		{     
+		UpdateTagsL();
+		}
+	else if(aList == iAlbumMediaList)
+		{
+		UpdateAlbumsL();
+		}
+    if(aList == iItemMediaList)
         {
-        UpdateTagsL();
-        }
-    else if (aList == iAlbumMediaList)
-        {
-        UpdateAlbumsL();
-        }
-    if (aList == iItemMediaList)
-        {
-        if (iItemMediaList->Count())
-            {
-            TGlxMedia item = iItemMediaList->Item(0);
-            CGlxUStringConverter* stringConverter =
-                    CGlxUStringConverter::NewL();
-            CleanupStack::PushL(stringConverter);
-            for (TInt index = 0; index <= EDurationItem; index++)
-                {
-                HBufC* string = NULL;
-                iTextSetter.Zero();
+        if(iItemMediaList->Count())
+			{
+			TGlxMedia item = iItemMediaList->Item(0);
+			CGlxUStringConverter* stringConverter = CGlxUStringConverter::NewL();
+			CleanupStack::PushL(stringConverter );
+			for(TInt index = 0; index <= EDurationItem ; index++)
+				{
+				HBufC* string = NULL;               
+                iTextSetter.Zero();             
+  
+				if(index == ESizeItem)
+					{
+					stringConverter->AsStringL(item,
+							KMPXMediaGeneralSize,0, string );              
+					}
+				else if(index == EDurationItem)
+					{
+					stringConverter->AsStringL(item, 
+							KMPXMediaGeneralDuration,0, string );
+					}
+				else if(index == ENameItem)
+					{
+					stringConverter->AsStringL(item,
+							KMPXMediaGeneralTitle,0, string );
+					}
+				else if(index == EDateAndTimeItem)
+					{  
+					stringConverter->AsStringL( item, 
+					        KGlxMediaGeneralLastModifiedDate,
+							R_QTN_DATE_USUAL_WITH_ZERO,string );
+					}
+				else if(index == EDescriptionItem)
+					{
+					stringConverter->AsStringL(item,
+							KMPXMediaGeneralComment,0, string ); 
+					}
+				else if(index == ELocationItem)
+					{
+					stringConverter->AsStringL(item,
+							KGlxMediaGeneralLocation,0, string );
+					}
+				else if(index == EResolutionItem)
+					{
+					stringConverter->AsStringL(item,
+							KGlxMediaGeneralDimensions,0, string );
+					}    
+				else if(index == ElicenseItem)
+					{
+					// If an item is DRM protected, License field in details
+					// should display "View Details"
+					string = StringLoader::LoadL(R_GLX_METADATA_VIEW_OPTIONS_VIEW);					
+					} 				
+				else
+					{
+					//no implementation
+					} 
+				if(string)
+					{
+					iTextSetter.Copy(KGlxTextSetter);
+					iTextSetter.Append(*string);
+					}	
+				CleanupStack::PushL( string );
+				EditItemL(index,EFalse);
+				CleanupStack::PopAndDestroy(string );
+				}
+			CleanupStack::PopAndDestroy(stringConverter );
 
-                if (index == ESizeItem)
-                    {
-                    stringConverter->AsStringL(item, KMPXMediaGeneralSize, 0,
-                            string);
-                    }
-                else if (index == EDurationItem)
-                    {
-                    stringConverter->AsStringL(item,
-                            KMPXMediaGeneralDuration, 0, string);
-                    }
-                else if (index == ENameItem)
-                    {
-                    stringConverter->AsStringL(item, KMPXMediaGeneralTitle,
-                            0, string);
-                    }
-                else if (index == EDateAndTimeItem)
-                    {
-                    stringConverter->AsStringL(item, KMPXMediaGeneralDate,
-                            R_QTN_DATE_USUAL_WITH_ZERO, string);
-                    }
-                else if (index == EDescriptionItem)
-                    {
-                    stringConverter->AsStringL(item, KMPXMediaGeneralComment,
-                            0, string);
-                    }
-                else if (index == ELocationItem)
-                    {
-                    stringConverter->AsStringL(item,
-                            KGlxMediaGeneralLocation, 0, string);
-                    }
-                else if (index == EResolutionItem)
-                    {
-                    stringConverter->AsStringL(item,
-                            KGlxMediaGeneralDimensions, 0, string);
-                    }
-                else if (index == ElicenseItem)
-                    {
-                    // If an item is DRM protected, License field in details
-                    // should display "View Details"
-                    string = StringLoader::LoadL(
-                            R_GLX_METADATA_VIEW_OPTIONS_VIEW);
-                    }
-                else
-                    {
-                    //no implementation
-                    }
-                if (string)
-                    {
-                    iTextSetter.Append(*string);
-                    }
-                CleanupStack::PushL(string);
-                EditItemL(index, EFalse);
-                CleanupStack::PopAndDestroy(string);
-                }
-            CleanupStack::PopAndDestroy(stringConverter);
-
-            //Reopening Media list is completed
-            //& Rename Command is also completed
-            if (iRenameStarted)
-                {
-                iRenameStarted = EFalse;
-                //reset Setting Items to undimmed status
-                SetDimmed(iRenameStarted);
-                iAvkonAppUi->ProcessCommandL(EGlxCmdRenameCompleted);
-                }
-            }
+			//Reopening Media list is completed
+			//& Rename Command is also completed
+			if(iRenameStarted)
+				{
+				iRenameStarted = EFalse;
+				//reset Setting Items to undimmed status
+				SetDimmed(iRenameStarted);
+				iAvkonAppUi->ProcessCommandL(EGlxCmdRenameCompleted);
+				}
+			}
         }
     }
 // ----------------------------------------------------------------------------
@@ -1222,114 +1184,102 @@
 //  
 void CGlxMetadataContainer::EnableMarqueingL()
     {
-    TRACER("CGlxMetadataContainer::EnableMarqueingL()");
+    TRACER("CGlxMetadataContainer::EnableMarqueingL()");    
     iMarquee = ETrue;
     ListBox()->UseLogicalToVisualConversion(ETrue);
-    ListBox()->ItemDrawer()->ColumnData()->SetMarqueeParams(
-            KMarqueeLoopCount, KMarqueeScrollAmount, KMarqueeScrollDelay,
-            KMarqueeScrollInterval);
+    ListBox()->ItemDrawer()->ColumnData()->SetMarqueeParams (KMarqueeLoopCount,
+            KMarqueeScrollAmount, KMarqueeScrollDelay, KMarqueeScrollInterval);
     ListBox()->ItemDrawer()->ColumnData()->EnableMarqueeL(ETrue);
-
+    
     //Fetch the current item index
     TInt index = ListBox()->CurrentItemIndex();
 
     //Reset the disable marquee flag, so that marquee effect can continue (this is normally reset by 
     //base class of glxmetaDatadialog::HandlePointerEventL()
     ListBox()->ItemDrawer()->ClearFlags(CListItemDrawer::EDisableMarquee);
-
+    
     //This is the function which actually starts marquee effect. It is anyway being called from base
     //implementation of OfferKeyEventL(), but for pointer event, we have to call
     //this function
     ListBox()->DrawItem(index);
-    }
-
+    }    
 // ----------------------------------------------------------------------------
 // HandleCommandCompleteL
 // ----------------------------------------------------------------------------
 // 
-void CGlxMetadataContainer::HandleCommandCompleteL(TAny* aSessionId,
+void CGlxMetadataContainer::HandleCommandCompleteL(TAny* aSessionId, 
         CMPXCommand* aCommandResult, TInt aError, MGlxMediaList* aList)
     {
     TRACER("CGlxMetadataContainer::HandleCommandCompleteL()");
-
+    
     //Callback from MDS when rename the Title
-    if (aError == KErrNone)
-        {
-        if (aList == iItemMediaList && aCommandResult->IsSupported(
-                KMPXMediaGeneralTitle))
-            {
-            GLX_LOG_INFO("RenameCMD to MDS completed");
-            //Since RenameCommand to MDS is redundant and FileSystem has 
-            //already renamed the file, so there is no need to do anything here
-            }
-        }
-
+    if(aError == KErrNone)
+		{
+		if(aList == iItemMediaList && aCommandResult->IsSupported(KMPXMediaGeneralTitle))
+			{
+			GLX_LOG_INFO("RenameCMD to MDS completed");
+			//Since RenameCommand to MDS is redundant and FileSystem has 
+			//already renamed the file, so there is no need to do anything here
+			}
+		}
+    
     //To update the location information once the delete operation is successful.
-    if (aList == iItemMediaList && iLocationinfo && static_cast<TAny*> (this)
-            == aSessionId)
-        {
-        TGlxMedia media = iItemMediaList->Item(0);
-        media.DeleteLocationAttribute();
-        iLocationinfo = EFalse;
-        if (aError == KErrNone)
-            {
+    if(aList == iItemMediaList && iLocationinfo 
+            && static_cast<TAny*>( this ) == aSessionId)
+		{
+		TGlxMedia media = iItemMediaList->Item(0) ;
+		media.DeleteLocationAttribute();
+		iLocationinfo = EFalse;      
+		if ( aError == KErrNone )
+			{
             iTextSetter.Zero();
-            EditItemL(ELocationItem, EFalse);
-            }
-        }
-    }
-
+			EditItemL(ELocationItem,EFalse);
+			}
+		}
+	}
+          
 // ----------------------------------------------------------------------------
-// HandleItemRemovedL
+// HandleItemRemoved
 // ----------------------------------------------------------------------------
 //  
-void CGlxMetadataContainer::HandleItemRemovedL(TInt /*aStartIndex*/,
-        TInt /*aEndIndex*/, MGlxMediaList* /*aList*/)
+void CGlxMetadataContainer::HandleItemRemovedL(  TInt /*aStartIndex*/, TInt /*aEndIndex*/, 
+        MGlxMediaList* /*aList*/  )
     {
-    TRACER("CGlxMetadataContainer::HandleItemRemovedL()");
-    //Ignore if this callback corresponds to a rename operation.
-    if (!iItemMediaList->Count() && !iIsPopupShown && !iRenameStarted)
-        {
-        iDialogObesrver.HandleItemRemovedL();
-        }
-    }
-
+    TRACER("CGlxMetadataContainer::HandleItemRemovedL()");    
+    }    
 // ----------------------------------------------------------------------------
 // HandleFocusChangedL
 // ----------------------------------------------------------------------------
 //  
-void CGlxMetadataContainer::HandleFocusChangedL(
-        NGlxListDefs::TFocusChangeType /*aType*/, TInt /*aNewIndex*/,
-        TInt /*aOldIndex*/, MGlxMediaList* /*aList*/)
+void CGlxMetadataContainer::HandleFocusChangedL( NGlxListDefs::
+    TFocusChangeType /*aType*/, TInt /*aNewIndex*/, TInt /*aOldIndex*/, 
+    MGlxMediaList* /*aList*/ )
     {
     TRACER("CGlxMetadataContainer::HandleFocusChangedL()");
     }
-
 // ----------------------------------------------------------------------------
-// HandleItemSelectedL
+// HandleItemSelected
 // ----------------------------------------------------------------------------
 //  
-void CGlxMetadataContainer::HandleItemSelectedL(TInt /*aIndex*/,
-        TBool /*aSelected*/, MGlxMediaList* /*aList*/)
+void CGlxMetadataContainer::HandleItemSelectedL(TInt /*aIndex*/, 
+    TBool /*aSelected*/, MGlxMediaList* /*aList*/ )
     {
     TRACER("CGlxMetadataContainer::HandleItemSelectedL");
     }
-
 // ----------------------------------------------------------------------------
 // HandleMessageL
 // ----------------------------------------------------------------------------
 //    
-void CGlxMetadataContainer::HandleMessageL(const CMPXMessage& /*aMessage*/,
-        MGlxMediaList* /*aList*/)
+void CGlxMetadataContainer::HandleMessageL( const CMPXMessage& /*aMessage*/, 
+    MGlxMediaList* /*aList*/ )
     {
     TRACER("CGlxMetadataContainer::HandleMessageL()");
     }
-
 // ----------------------------------------------------------------------------
 // HandleError
 // ----------------------------------------------------------------------------
 //
-void CGlxMetadataContainer::HandleError(TInt /*aError*/)
+void CGlxMetadataContainer::HandleError( TInt /*aError*/ ) 
     {
     TRACER("CGlxMetadataContainer::HandleError()");
     TRAP_IGNORE(HandleErrorL());
@@ -1343,117 +1293,114 @@
     {
     TRACER("CGlxMetadataContainer::HandleErrorL()");
     }
-
 // ----------------------------------------------------------------------------
 // HandleCommandCompleteL
 // ----------------------------------------------------------------------------
 //  
-void CGlxMetadataContainer::HandleCommandCompleteL(
-        CMPXCommand* /*aCommandResult*/, TInt /*aError*/, MGlxMediaList* /*aList*/)
+void CGlxMetadataContainer::HandleCommandCompleteL( CMPXCommand* /*aCommandResult*/, 
+    TInt /*aError*/, MGlxMediaList* /*aList*/ )
     {
     TRACER("CGlxMetadataContainer::HandleCommandCompleteL()");
     }
-
+  
 // ----------------------------------------------------------------------------
 // HandleMediaL
 // ----------------------------------------------------------------------------
 //  
-void CGlxMetadataContainer::HandleMediaL(TInt /*aListIndex*/, MGlxMediaList* /*aList*/)
+void CGlxMetadataContainer::HandleMediaL( TInt /*aListIndex*/, MGlxMediaList* /*aList*/ )
     {
     TRACER("CGlxMetadataContainer::HandleMediaL()");
     }
-
+  
 // ----------------------------------------------------------------------------
 // HandleItemModifiedL
 // ----------------------------------------------------------------------------
 //  
-void CGlxMetadataContainer::HandleItemModifiedL(
-        const RArray<TInt>& /*aItemIndexes*/, MGlxMediaList* /*aList*/)
+void CGlxMetadataContainer::HandleItemModifiedL( const RArray<TInt>& /*aItemIndexes*/,
+    MGlxMediaList* /*aList*/ )
     {
     TRACER("CGlxMetadataContainer::HandleItemModifiedL()");
     }
-
 // ----------------------------------------------------------------------------
 // ChangeMskL
 // ----------------------------------------------------------------------------
 //     
 void CGlxMetadataContainer::ChangeMskL()
-    {
+	{
     TRACER("CGlxMetadataContainer::ChangeMskL()");
     CGlxUiUtility* uiUtility = CGlxUiUtility::UtilityL();
     CleanupClosePushL(*uiUtility);
     switch (ListBox()->CurrentItemIndex())
         {
-        case ENameItem:
+        case ENameItem:        
         case EDescriptionItem:
-        case ETagsItem:
-        case EAlbumsItem:
+       	case ETagsItem:
+        case EAlbumsItem:        
             {
-            uiUtility->ScreenFurniture()->ModifySoftkeyIdL(
-                    CEikButtonGroupContainer::EMiddleSoftkeyPosition,
-                    EAknSoftkeyEdit, R_GLX_METADATA_MSK_EDIT);
-            }
-            break;
+            uiUtility->ScreenFurniture()->ModifySoftkeyIdL(CEikButtonGroupContainer::EMiddleSoftkeyPosition,
+            EAknSoftkeyEdit,R_GLX_METADATA_MSK_EDIT);
+            }        
+        	break;        	
         case EDateAndTimeItem:
         case ELocationItem:
         case ESizeItem:
         case EDurationItem:
         case ElicenseItem:
         case EResolutionItem:
-            {
-            uiUtility->ScreenFurniture()->ModifySoftkeyIdL(
-                    CEikButtonGroupContainer::EMiddleSoftkeyPosition,
-                    EAknSoftkeyEdit, R_GLX_METADATA_MSK_BLANK);
-            }
-            break;
+	        {
+	        uiUtility->ScreenFurniture()->ModifySoftkeyIdL(CEikButtonGroupContainer::EMiddleSoftkeyPosition,
+            EAknSoftkeyEdit,R_GLX_METADATA_MSK_BLANK);            
+	        }        
+        	break;
         default:
-            {
-            break;
-            }
+	        {
+	        break;    
+	        }
         }
+        
 
     CleanupStack::PopAndDestroy(uiUtility);
-    }
-
+	}
+	
 // ---------------------------------------------------------------------------
 // Parse the drive, path & extension from the old uri,
 // And return the modified uri by appending the new title
 // ---------------------------------------------------------------------------
 TFileName CGlxMetadataContainer::ParseFileName(const TDesC& aTitleText)
-    {
-    TRACER("CGlxMetadataContainer::ParseFileName()");
-    const TGlxMedia& media = iItemMediaList->Item(0);
-    TParsePtrC parsePtr(media.Uri());
+	{
+	TRACER("CGlxMetadataContainer::ParseFileName()");
+	const TGlxMedia& media = iItemMediaList->Item(0);
+	TParsePtrC parsePtr(media.Uri());
 
-    TFileName destinationFileName;
-    destinationFileName.Append(parsePtr.DriveAndPath());
-    destinationFileName.Append(aTitleText);
-    destinationFileName.Append(parsePtr.Ext());
+	TFileName destinationFileName;
+	destinationFileName.Append(parsePtr.DriveAndPath());
+	destinationFileName.Append(aTitleText);
+	destinationFileName.Append(parsePtr.Ext());
 
-    return destinationFileName;
-    }
+	return destinationFileName;
+	}
 
 // ---------------------------------------------------------------------------
 // Refresh MediaList with modified FileName.
 // ---------------------------------------------------------------------------
 void CGlxMetadataContainer::RefreshMediaListL(const TDesC& aModifiedUri)
-    {
-    //Refresh media list since media is renamed
+	{
+	//Refresh media list since media is renamed
     TRACER("CGlxMetadataContainer::RefreshMediaListL()");
     GLX_LOG_URI("CGlxMetadataContainer::RefreshMediaListL(%S)", &aModifiedUri);
     if (iUri)
-        {
-        delete iUri;
-        iUri = NULL;
-        }
-    //always points to current media name
-    iUri = aModifiedUri.AllocL();
-    CMPXFilter* filter = TGlxFilterFactory::CreateURIFilterL(*iUri);
-    CleanupStack::PushL(filter);
+		{
+		delete iUri;
+		iUri = NULL;
+		}
+	//always points to current media name
+	iUri = aModifiedUri.AllocL();
+	CMPXFilter* filter = TGlxFilterFactory::CreateURIFilterL(*iUri);
+	CleanupStack::PushL(filter);
 
-    //Update media list's filter
-    iItemMediaList->SetFilterL(filter);
-    CleanupStack::PopAndDestroy(filter);
+	//Update media list's filter
+	iItemMediaList->SetFilterL(filter);
+	CleanupStack::PopAndDestroy(filter);
     }
 
 //End of file
--- a/photosgallery/viewframework/views/metadatadialog/src/glxmetadatadialog.cpp	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/viewframework/views/metadatadialog/src/glxmetadatadialog.cpp	Wed Oct 13 14:32:09 2010 +0300
@@ -28,7 +28,6 @@
 #include <akntoolbar.h>
 #include <glxcommandhandleraddtocontainer.h>         // For CGlxCommandHandlerAddToContainer
 #include <aknphysics.h> // For Kinetic Scrolling
-#include <eikdialogext.h>
 
 //User includes
 #include <glxmetadatadialog.rsg>
@@ -55,85 +54,83 @@
 // NewL
 // -----------------------------------------------------------------------------
 //
-EXPORT_C CGlxMetadataDialog* CGlxMetadataDialog::NewL(const TDesC& aUri)
-    {
-    TRACER("CGlxMetadataDialog::NewL");
+EXPORT_C CGlxMetadataDialog* CGlxMetadataDialog::NewL( const TDesC& aUri  )
+	{
+	TRACER("CGlxMetadataDialog::NewL");
+	
+	CGlxMetadataDialog* self = new(ELeave) CGlxMetadataDialog(aUri );
+	CleanupStack::PushL( self );
+	self->ConstructL();
+	CleanupStack::Pop( self );
+	return self;
+	}
 
-    CGlxMetadataDialog* self = new (ELeave) CGlxMetadataDialog(aUri);
-    CleanupStack::PushL(self);
-    self->ConstructL();
-    CleanupStack::Pop(self);
-    return self;
-    }
+CGlxMetadataDialog::CGlxMetadataDialog(const TDesC& aUri):iUri(aUri)
+{
 
-CGlxMetadataDialog::CGlxMetadataDialog(const TDesC& aUri) :
-    iUri(aUri)
-    {
-    }
-
+}
 // -----------------------------------------------------------------------------
 // ConstructL
 // -----------------------------------------------------------------------------
 //
 void CGlxMetadataDialog::ConstructL()
 	{
-    TRACER("CGlxMetadataDialog::ConstructL");
+	TRACER("CGlxMetadataDialog::ConstructL");
 
-    // Load dialog's resource file
-    InitResourceL();
+	// Load dialog's resource file
+	InitResourceL();
 
-    iStatusPaneAvailable = EFalse;
-    // set the title to the dialog, Note that avkon dialogs do not support
-    // setting the title in the status pane so we need to do it the hard way
-    // get status pane
-    CEikStatusPane* statusPane = iEikonEnv->AppUiFactory()->StatusPane();
+	iStatusPaneAvailable = EFalse;
+	// set the title to the dialog, Note that avkon dialogs do not support
+	// setting the title in the status pane so we need to do it the hard way
+	// get status pane
+	CEikStatusPane* statusPane = iEikonEnv->AppUiFactory()->StatusPane();
 
-    if (statusPane && statusPane->IsVisible())
-        {
-        iStatusPaneAvailable = ETrue;
-        }
+	if (statusPane && statusPane->IsVisible())
+		{
+		iStatusPaneAvailable = ETrue;
+		}
 
-    // make the toolbar disabled
-    SetDetailsDlgToolbarVisibility(EFalse);
+	// make the toolbar disabled
+	SetDetailsDlgToolbarVisibility(EFalse);
 
-    // do we have status pane
-    if (statusPane)
-        {
-        GLX_LOG_INFO1("GLX_UMP::CGlxMetadataDialog::ConstructL::STATUS PANE = %d",statusPane->IsVisible());
-        // load the title text
-        HBufC* text = StringLoader::LoadL(R_GLX_METADATA_VIEW_TITLE_DETAILS,
-                iEikonEnv);
-        SetTitleL(*text);
-        if (text)
-            {
-            delete text;
-            }
-        iAvkonAppUi->StatusPane()->MakeVisible(ETrue);
-        }
+	// do we have status pane
+	if (statusPane)
+		{
+		GLX_LOG_INFO1("GLX_UMP::CGlxMetadataDialog::ConstructL::STATUS PANE = %d",statusPane->IsVisible());
+		// load the title text
+		HBufC* text = StringLoader::LoadL(R_GLX_METADATA_VIEW_TITLE_DETAILS,
+				iEikonEnv );
+		SetTitleL(*text);
+		if (text)
+			{
+			delete text;
+			}
+		iAvkonAppUi->StatusPane()->MakeVisible(ETrue);
+		}
+
+	iUiUtility = CGlxUiUtility::UtilityL();
+	TFileName uiutilitiesrscfile;
+	uiutilitiesrscfile.Append(CGlxResourceUtilities::GetUiUtilitiesResourceFilenameL());
 
-    iUiUtility = CGlxUiUtility::UtilityL();
-    TFileName uiutilitiesrscfile;
-    uiutilitiesrscfile.Append(
-            CGlxResourceUtilities::GetUiUtilitiesResourceFilenameL());
+	iAddToTag = CGlxCommandHandlerAddToContainer::NewL(this, EGlxCmdAddTag,
+			EFalse, uiutilitiesrscfile);
+	iAddToAlbum = CGlxCommandHandlerAddToContainer::NewL(this,
+			EGlxCmdAddToAlbum, EFalse, uiutilitiesrscfile);
 
-    iAddToTag = CGlxCommandHandlerAddToContainer::NewL(this, EGlxCmdAddTag,
-            EFalse, uiutilitiesrscfile);
-    iAddToAlbum = CGlxCommandHandlerAddToContainer::NewL(this,
-            EGlxCmdAddToAlbum, EFalse, uiutilitiesrscfile);
+	// Call the base class' two-phased constructor
+	CAknDialog::ConstructL(R_METADATA_MENUBAR);
 
-    // Call the base class' two-phased constructor
-    CAknDialog::ConstructL(R_METADATA_MENUBAR);
-
-    // Instantiate the command handler
-    iMetadataCmdHandler = CGlxMetadataCommandHandler::NewL(this);
+	// Instantiate the command handler
+	iMetadataCmdHandler = CGlxMetadataCommandHandler::NewL(this);
 
-    //steps to find kinetic scroll threshold value
-    CAknPhysics* physics = CAknPhysics::NewL(*this, NULL);
-    CleanupStack::PushL(physics);
-    iKineticDragThreshold = physics->DragThreshold();
-    CleanupStack::PopAndDestroy(physics);
-    physics = NULL;
-    }
+	//steps to find kinetic scroll threshold value
+	CAknPhysics* physics = CAknPhysics::NewL(*this, NULL);
+	CleanupStack::PushL(physics);
+	iKineticDragThreshold = physics->DragThreshold();
+	CleanupStack::PopAndDestroy(physics);
+	physics = NULL;
+	}
 
 // -----------------------------------------------------------------------------
 // ~CGlxMetadataDialog
@@ -220,76 +217,74 @@
     // return the refernce of media list
     return iContainer->MediaList();
     }
- 
 // -----------------------------------------------------------------------------
 // ProcessCommandL
 // -----------------------------------------------------------------------------
 //
 void CGlxMetadataDialog::ProcessCommandL( TInt aCommandId )
 	{
-    TRACER("CGlxMetadataDialog::ProcessCommandL");
-
-    // hide menu bar
-    iMenuBar->StopDisplayingMenuBar();
+	TRACER("CGlxMetadataDialog::ProcessCommandL");
+	
+	// hide menu bar
+	iMenuBar->StopDisplayingMenuBar();
 
-    switch (aCommandId)
-        {
-        case EAknSoftkeyEdit:
-        case EAknSoftkeyCancel:
-        case EAknSoftkeySelect:
-        case EAknSoftkeyOk:
-            {
-            TryExitL(aCommandId);
-            break;
-            }
+	switch( aCommandId )
+		{
+		case EAknSoftkeyEdit:
+		case EAknSoftkeyCancel:
+		case EAknSoftkeySelect:
+		case EAknSoftkeyOk:
+			{
+			TryExitL( aCommandId );
+			break;
+			}
 
-        case EAknCmdHelp:
-            {
-            TCoeHelpContext helpContext;
-            helpContext.iMajor = TUid::Uid(KGlxGalleryApplicationUid);
-            helpContext.iContext.Copy(LGAL_HLP_DETAILS_VIEW);
-            const TInt KListSz = 1;
-            CArrayFix<TCoeHelpContext>* contextList =
-                    new (ELeave) CArrayFixFlat<TCoeHelpContext> (KListSz);
-            CleanupStack::PushL(contextList);
-            contextList->AppendL(helpContext);
-            HlpLauncher::LaunchHelpApplicationL(iEikonEnv->WsSession(),
-                    contextList);
-            CleanupStack::Pop(contextList);
-            break;
-            }
-        case KGlxDeleteBoundMenuCommandId:
-            {
-            //Event passed on to container to handle	
-            //Delete the location information of the data.	  
-            iContainer->RemoveLocationL();
-            break;
-            }
-        case KGlxEditBoundMenuCommandId:
-        case KGlxViewBoundMenuCommandId:
-            {
-            //To edit the details - forward the event to container to edit
-            //Both edit and view details command are handled in the same function based on the item.	
-            iContainer->HandleListboxChangesL();
-            break;
-            }
-        case EGlxCmdAiwBase:
-            {
-            // pass aCommandId to command handler
-            iMetadataCmdHandler->DoExecuteL(aCommandId, MediaList());
-            }
-        default:
-            break;
-        }
-    }
-
+		case EAknCmdHelp:
+			{
+			TCoeHelpContext helpContext;
+			helpContext.iMajor = TUid::Uid( KGlxGalleryApplicationUid );
+			helpContext.iContext.Copy( LGAL_HLP_DETAILS_VIEW );
+			const TInt KListSz = 1;
+			CArrayFix<TCoeHelpContext>* contextList =
+			new (ELeave) CArrayFixFlat<TCoeHelpContext>( KListSz );
+			CleanupStack::PushL(contextList);
+			contextList->AppendL(helpContext);
+			HlpLauncher::LaunchHelpApplicationL(
+			iEikonEnv->WsSession(), contextList );
+			CleanupStack::Pop( contextList );
+			break;
+			}
+		case KGlxDeleteBoundMenuCommandId:
+	    {
+	    //Event passed on to container to handle	
+      //Delete the location information of the data.	  
+	    iContainer->RemoveLocationL();
+	    break;
+	    }	      
+		case KGlxEditBoundMenuCommandId:
+		case KGlxViewBoundMenuCommandId:
+	    {
+	    //To edit the details - forward the event to container to edit
+  		//Both edit and view details command are handled in the same function based on the item.	
+	    iContainer->HandleListboxChangesL();
+	    break;
+	    }
+		case EGlxCmdAiwBase:
+			{
+			// pass aCommandId to command handler
+			iMetadataCmdHandler->DoExecuteL( aCommandId, MediaList() );
+			}
+		default:
+			break;
+		}
+	}
 //-----------------------------------------------------------------------------
 // CGlxMetadataDialog::CreateCustomControlL
 //-----------------------------------------------------------------------------
 SEikControlInfo CGlxMetadataDialog::CreateCustomControlL(TInt 
                                                                 aControlType)
     {
-    TRACER("CGlxMetadataDialog::CreateCustomControlL");
+    GLX_LOG_INFO("CShwSlideshowSettingsDialog::CreateCustomControlL");
     
     // create control info, no flags or trailer text set
     SEikControlInfo controlInfo;
@@ -305,6 +300,7 @@
     return controlInfo; // returns ownership of ItemList
     }
 
+
 // -----------------------------------------------------------------------------
 // CGlxMetadataDialog::OfferKeyEventL
 // -----------------------------------------------------------------------------
@@ -312,34 +308,34 @@
 TKeyResponse CGlxMetadataDialog::OfferKeyEventL( const TKeyEvent& aKeyEvent,
                                                 TEventCode aType )
 	{
-    TRACER("CGlxMetadataDialog::OfferKeyEventL");
-    TKeyResponse response = EKeyWasNotConsumed;
-    switch (aKeyEvent.iCode)
-        {
-        case EKeyUpArrow:
-        case EKeyDownArrow:
-            {
-            if (!iUiUtility->IsPenSupported())
-                {
-                iContainer->ChangeMskL();
-                }
-            iContainer->EnableMarqueingL();
-            break;
-            }
-        default:
-            break;
-        }
-    if (response == EKeyWasNotConsumed)
-        {
-        // container didn't consume the key so try the base class
-        // this is crucial as platform uses a key event to dismiss dialog
-        // when a view changes to another. the base class also consumes all
-        // the keys we dont want to handle automatically as this is a 
-        // blocking dialog
-        response = CAknDialog::OfferKeyEventL(aKeyEvent, aType);
-        }
-    return response;
-    }
+	TRACER("CGlxMetadataDialog::OfferKeyEventL");
+	TKeyResponse response = EKeyWasNotConsumed;
+		switch(aKeyEvent.iCode)
+			{
+			case EKeyUpArrow:
+			case EKeyDownArrow:
+				{
+				if(!iUiUtility->IsPenSupported())
+				    {
+                        iContainer->ChangeMskL();
+				    }
+				iContainer->EnableMarqueingL();
+				break;
+				}
+			default:
+				break;
+			}
+    if ( response == EKeyWasNotConsumed )
+         {
+         // container didn't consume the key so try the base class
+         // this is crucial as platform uses a key event to dismiss dialog
+         // when a view changes to another. the base class also consumes all
+         // the keys we dont want to handle automatically as this is a 
+         // blocking dialog
+         response = CAknDialog::OfferKeyEventL( aKeyEvent, aType );
+         }
+     return response;
+	}
 
 // -----------------------------------------------------------------------------
 // CGlxMetadataDialog::DynInitMenuPaneL
@@ -404,6 +400,14 @@
 	return retVal;
 	}
 
+//-----------------------------------------------------------------------------
+// CGlxMetadataDialog::SizeChanged
+//-----------------------------------------------------------------------------
+void CGlxMetadataDialog::SizeChanged()
+	{
+	TRACER("CGlxMetadataDialog::SizeChanged");
+  CAknDialog::SizeChanged();
+	}
 // -----------------------------------------------------------------------------
 // CGlxMetadataDialog::InitResourceL
 // -----------------------------------------------------------------------------
@@ -411,6 +415,7 @@
 void CGlxMetadataDialog::InitResourceL()    
 	{
 	TRACER("CGlxMetadataDialog::InitResourceL");
+	
 	_LIT(KGlxMetadataDialogResource,"glxmetadatadialog.rsc");
 	//add resource file
 	TParse parse;
@@ -421,6 +426,7 @@
 	iResourceOffset = CCoeEnv::Static()->AddResourceFileL(resourceFile);
 	}  
 
+
 // -----------------------------------------------------------------------------
 // CGlxMetadataDialog::HandleViewCommandL
 // -----------------------------------------------------------------------------
@@ -430,21 +436,44 @@
 	TRACER("CGlxMetadataDialog::HandleViewCommandL");
 	return EFalse;
 	}
-
+// ---------------------------------------------------------------------------
+// CGlxMetadataDialog::PreLayoutDynInitL
+// ---------------------------------------------------------------------------
+//
+void CGlxMetadataDialog::PreLayoutDynInitL()
+	{
+	// No Implementation
+	}
+	
 //-----------------------------------------------------------------------------
 // CGlxMetadataDialog::PostLayoutDynInitL
 //-----------------------------------------------------------------------------
 //
 void CGlxMetadataDialog::PostLayoutDynInitL()
-    {
-    TRACER("CGlxMetadataDialog::PostLayoutDynInitL");
-    if (!iUiUtility->IsPenSupported())
-        {
-        iUiUtility->ScreenFurniture()->ModifySoftkeyIdL(
-                CEikButtonGroupContainer::EMiddleSoftkeyPosition,
-                EAknSoftkeyEdit, R_GLX_METADATA_MSK_EDIT);
-        }
-    }
+	{
+	TRACER("CGlxMetadataDialog::PostLayoutDynInitL");
+	if(!iUiUtility->IsPenSupported())
+		{
+		iUiUtility->ScreenFurniture()->ModifySoftkeyIdL(CEikButtonGroupContainer::EMiddleSoftkeyPosition,
+															EAknSoftkeyEdit,R_GLX_METADATA_MSK_EDIT);	
+		}		
+	}
+
+//-----------------------------------------------------------------------------
+// CGlxMetadataDialog::Draw
+//-----------------------------------------------------------------------------
+//
+void CGlxMetadataDialog::Draw( const TRect& /*aRect*/ ) const
+	{
+	TRACER("CGlxMetadataDialog::Draw");
+    TRect rect;
+    AknLayoutUtils::LayoutMetricsRect (AknLayoutUtils::EMainPane, rect);
+
+	// Get the standard graphics context
+	CWindowGc& gc = SystemGc();
+	gc.SetBrushColor(KRgbWhite);
+	gc.DrawRect(rect);
+	}
 
 //-----------------------------------------------------------------------------
 // CGlxMetadataDialog::HandlePointerEventL
@@ -453,51 +482,50 @@
 void CGlxMetadataDialog::HandlePointerEventL(
     const TPointerEvent& aPointerEvent)
 	{
+
     TRACER("CGlxMetadataDialog::HandlePointerEventL");
 
     //This has to be called first, as base class implementation sets the flag 
     // of settings dialog with EDisableMarquee 
-    CCoeControl::HandlePointerEventL(aPointerEvent);
-
+    CCoeControl::HandlePointerEventL( aPointerEvent );
+    
     //After the above call we can call our implementation to reset the marque 
     // flag and start marqueeing if needed
-    if (aPointerEvent.iType == TPointerEvent::EButton1Down
+    if(aPointerEvent.iType == TPointerEvent::EButton1Down
             || aPointerEvent.iType == TPointerEvent::EButton2Down
             || aPointerEvent.iType == TPointerEvent::EButton3Down
             || aPointerEvent.iType == TPointerEvent::EDrag)
         {
-        if (aPointerEvent.iType != TPointerEvent::EDrag)
+            if(aPointerEvent.iType != TPointerEvent::EDrag)
             {
-            iViewDragged = EFalse;
+                iViewDragged = EFalse;
             }
-
-        if (aPointerEvent.iType == TPointerEvent::EDrag)
+            
+            if(aPointerEvent.iType == TPointerEvent::EDrag)
             {
-            TInt delta = iPrev.iY - aPointerEvent.iPosition.iY;
-            //Check for physics threshold, if not more than threshold, we can
-            //still continue marqueeing
-            TInt deltaAbs = delta < 0 ? -delta : delta;
-            if (!iViewDragged && deltaAbs >= iKineticDragThreshold)
-                {
-                iViewDragged = ETrue;
-                }
+                TInt delta = iPrev.iY - aPointerEvent.iPosition.iY;
+                //Check for physics threshold, if not more than threshold, we can
+                //still continue marqueeing
+                TInt deltaAbs = delta < 0 ? -delta : delta;
+                if(!iViewDragged && deltaAbs >= iKineticDragThreshold)
+                    iViewDragged = ETrue;
             }
-
-        //This has to done at every above mentioned event, since the  
-        //disable marquee flag is set by base implementation, forcing 
-        //us the need to reset it everytime.
-        if (!iViewDragged)
+            
+            //This has to done at every above mentioned event, since the  
+            //disable marquee flag is set by base implementation, forcing 
+            //us the need to reset it everytime.
+            if(!iViewDragged)
             {
-            iContainer->EnableMarqueingL();
+                iContainer->EnableMarqueingL();
             }
         }
-
+    
     //record positions unless it is drag event
-    if (aPointerEvent.iType != TPointerEvent::EDrag)
+    if(aPointerEvent.iType != TPointerEvent::EDrag)
         {
         iPrev = aPointerEvent.iPosition;
         }
-    }
+	}
 
 // ---------------------------------------------------------------------------
 // CGlxMetadataDialog::OnLocationEditL
@@ -510,43 +538,28 @@
 	}
 	
 // ---------------------------------------------------------------------------
-// CGlxMetadataDialog::AddTagL
+// CGlxMetadataDialog::AddTag
 // ---------------------------------------------------------------------------
 //
 void CGlxMetadataDialog::AddTagL()
-    {
-    TRACER("CGlxMetadataDialog::AddTagL");    
+{
     iAddToTag->ExecuteL(EGlxCmdAddTag);
-    }
-
+}
 // ---------------------------------------------------------------------------
-// CGlxMetadataDialog::AddAlbumL
+// CGlxMetadataDialog::AddAlbum
 // ---------------------------------------------------------------------------
 //
 void CGlxMetadataDialog::AddAlbumL()
-    {
-    TRACER("CGlxMetadataDialog::AddAlbumL");
+{
     iAddToAlbum->ExecuteL(EGlxCmdAddToAlbum);
-    }
-
-// ---------------------------------------------------------------------------
-// CGlxMetadataDialog::HandleItemRemovedL
-// ---------------------------------------------------------------------------
-//
-void CGlxMetadataDialog::HandleItemRemovedL()
-    {
-    TRACER("CGlxMetadataDialog::HandleItemRemovedL");
-    Extension()->iPublicFlags.Set(CEikDialogExtension::EDelayedExit);
-    ProcessCommandL(EAknSoftkeyCancel);
-    Extension()->iPublicFlags.Clear(CEikDialogExtension::EDelayedExit);
-    }
+}
 
 // ---------------------------------------------------------------------------
 // CGlxMetadataDialog::SetTitleL()
 // ---------------------------------------------------------------------------
 void CGlxMetadataDialog::SetTitleL(const TDesC& aTitleText)
     {
-    TRACER("CGlxMetadataDialog::SetTitleL");
+    TRACER("CGlxFetcherContainer::SetTitleL");
     CEikStatusPane* statusPane = iEikonEnv->AppUiFactory()->StatusPane();
     CleanupStack::PushL(statusPane);
     // get pointer to the default title pane control
@@ -570,7 +583,7 @@
 // ---------------------------------------------------------------------------
 void CGlxMetadataDialog::SetPreviousTitleL()
     {
-    TRACER("CGlxMetadataDialog::SetPreviousTitleL");
+    TRACER("CGlxFetcherContainer::SetPreviousTitleL");
     CEikStatusPane* prevStatusPane = iEikonEnv->AppUiFactory()->StatusPane();
     CleanupStack::PushL(prevStatusPane);
     CAknTitlePane* prevTitlePane = ( CAknTitlePane* )prevStatusPane->ControlL(
@@ -584,6 +597,16 @@
     CleanupStack::Pop(prevTitlePane);
     CleanupStack::Pop(prevStatusPane);
     }
+// -----------------------------------------------------------------------------
+// CGlxMetadataDialog::HandleResourceChange
+// -----------------------------------------------------------------------------
+//
+void CGlxMetadataDialog::HandleResourceChange( TInt aType )
+    {
+    TRACER("CGlxMetadataDialog::HandleResourceChange");
+    //Handle global resource changes, such as scalable UI or skin events and orientation change (override)
+    CAknDialog::HandleResourceChange( aType );
+    }
 
 // -----------------------------------------------------------------------------
 // CGlxMetadataDialog::HandleToolbarResetting
@@ -592,6 +615,7 @@
 void CGlxMetadataDialog::HandleToolbarResetting(TBool aVisible)
     {
     TRACER("CGlxMetadataDialog::HandleToolbarResetting");
+
     CAknToolbar* popupToolbar = iAvkonAppUi->PopupToolbar();
     if(popupToolbar)
         {
@@ -611,8 +635,7 @@
         }
     }
 
-void CGlxMetadataDialog::ViewPositionChanged(const TPoint& /*aNewPosition*/,
-        TBool /*aDrawNow*/, TUint /*aFlags*/)
+void CGlxMetadataDialog::ViewPositionChanged( const TPoint& /*aNewPosition*/, TBool /*aDrawNow*/, TUint /*aFlags*/ )
     {
     //Dummy implementation
     }
--- a/photosgallery/viewframework/views/viewbase/bwins/glxviewbaseu.def	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/viewframework/views/viewbase/bwins/glxviewbaseu.def	Wed Oct 13 14:32:09 2010 +0300
@@ -27,17 +27,17 @@
 	?DoViewAnimationL@CGlxViewBase@@MAEXW4TGlxViewswitchAnimation@@W4TGlxNavigationDirection@@@Z @ 26 NONAME ; void CGlxViewBase::DoViewAnimationL(enum TGlxViewswitchAnimation, enum TGlxNavigationDirection)
 	??1CGlxViewBase@@UAE@XZ @ 27 NONAME ; CGlxViewBase::~CGlxViewBase(void)
 	?SetTitleL@CGlxViewBase@@QAEXABVTDesC16@@@Z @ 28 NONAME ; void CGlxViewBase::SetTitleL(class TDesC16 const &)
-	?GetToolBar@CGlxViewBase@@QAEPAVCAknToolbar@@XZ @ 29 NONAME ; class CAknToolbar * CGlxViewBase::GetToolBar(void)
-	??0CGlxMediaListViewBase@@QAE@XZ @ 30 NONAME ; CGlxMediaListViewBase::CGlxMediaListViewBase(void)
-	?DisableTitle@CGlxViewBase@@QAEXXZ @ 31 NONAME ; void CGlxViewBase::DisableTitle(void)
-	?SetGridToolBar@CGlxViewBase@@QAEXPAVCAknToolbar@@@Z @ 32 NONAME ; void CGlxViewBase::SetGridToolBar(class CAknToolbar *)
-	?HandleCommandL@CGlxViewBase@@EAEXH@Z @ 33 NONAME ; void CGlxViewBase::HandleCommandL(int)
-	?FetchAttributesForCommandL@CGlxViewBase@@MAEXH@Z @ 34 NONAME ; void CGlxViewBase::FetchAttributesForCommandL(int)
-	??1CGlxTitleFetcher@@UAE@XZ @ 35 NONAME ; CGlxTitleFetcher::~CGlxTitleFetcher(void)
-	?OfferToolbarEventL@CGlxViewBase@@MAEXH@Z @ 36 NONAME ; void CGlxViewBase::OfferToolbarEventL(int)
-	?ViewDeactivated@CGlxViewBase@@MAEXXZ @ 37 NONAME ; void CGlxViewBase::ViewDeactivated(void)
-	?FetchAttributesL@CGlxViewBase@@MAEXXZ @ 38 NONAME ; void CGlxViewBase::FetchAttributesL(void)
-	?DoPrepareCommandHandlerL@CGlxMediaListViewBase@@MAEXPAVCGlxCommandHandler@@@Z @ 39 NONAME ; void CGlxMediaListViewBase::DoPrepareCommandHandlerL(class CGlxCommandHandler *)
-	?FetchAttributesForCommandL@CGlxMediaListViewBase@@EAEXH@Z @ 40 NONAME ; void CGlxMediaListViewBase::FetchAttributesForCommandL(int)
-	?SetToolbarStateL@CGlxViewBase@@MAEXXZ @ 41 NONAME ; void CGlxViewBase::SetToolbarStateL(void)
+	??0CGlxMediaListViewBase@@QAE@XZ @ 29 NONAME ; CGlxMediaListViewBase::CGlxMediaListViewBase(void)
+	?DisableTitle@CGlxViewBase@@QAEXXZ @ 30 NONAME ; void CGlxViewBase::DisableTitle(void)
+	?HandleCommandL@CGlxViewBase@@EAEXH@Z @ 31 NONAME ; void CGlxViewBase::HandleCommandL(int)
+	?FetchAttributesForCommandL@CGlxViewBase@@MAEXH@Z @ 32 NONAME ; void CGlxViewBase::FetchAttributesForCommandL(int)
+	??1CGlxTitleFetcher@@UAE@XZ @ 33 NONAME ; CGlxTitleFetcher::~CGlxTitleFetcher(void)
+	?OfferToolbarEventL@CGlxViewBase@@MAEXH@Z @ 34 NONAME ; void CGlxViewBase::OfferToolbarEventL(int)
+	?ViewDeactivated@CGlxViewBase@@MAEXXZ @ 35 NONAME ; void CGlxViewBase::ViewDeactivated(void)
+	?FetchAttributesL@CGlxViewBase@@MAEXXZ @ 36 NONAME ; void CGlxViewBase::FetchAttributesL(void)
+	?DoPrepareCommandHandlerL@CGlxMediaListViewBase@@MAEXPAVCGlxCommandHandler@@@Z @ 37 NONAME ; void CGlxMediaListViewBase::DoPrepareCommandHandlerL(class CGlxCommandHandler *)
+	?FetchAttributesForCommandL@CGlxMediaListViewBase@@EAEXH@Z @ 38 NONAME ; void CGlxMediaListViewBase::FetchAttributesForCommandL(int)
+	?SetToolbarStateL@CGlxViewBase@@MAEXXZ @ 39 NONAME ; void CGlxViewBase::SetToolbarStateL(void)
+	?GetToolBar@CGlxViewBase@@QAEPAVCAknToolbar@@XZ @ 40 NONAME ; class CAknToolbar * CGlxViewBase::GetToolBar(void)
+	?SetGridToolBar@CGlxViewBase@@QAEXPAVCAknToolbar@@@Z @ 41 NONAME ; void CGlxViewBase::SetGridToolBar(class CAknToolbar *)
 
--- a/photosgallery/viewframework/views/viewbase/eabi/glxviewbaseu.def	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/viewframework/views/viewbase/eabi/glxviewbaseu.def	Wed Oct 13 14:32:09 2010 +0300
@@ -52,8 +52,8 @@
 	_ZTV20MGlxMediaListFactory @ 51 NONAME
 	_ZTV21CGlxMediaListViewBase @ 52 NONAME
 	_ZThn12_N12CGlxViewBase16DynInitMenuPaneLEiP12CEikMenuPane @ 53 NONAME
-	_ZThn172_N21CGlxMediaListViewBase9MediaListEv @ 54 NONAME
-	_ZThn176_N21CGlxMediaListViewBase21HandleTitleAvailableLERK7TDesC16 @ 55 NONAME
+	_ZThn168_N21CGlxMediaListViewBase9MediaListEv @ 54 NONAME
+	_ZThn172_N21CGlxMediaListViewBase21HandleTitleAvailableLERK7TDesC16 @ 55 NONAME
 	_ZThn4_N12CGlxViewBase14ViewActivatedLERK10TVwsViewId4TUidRK6TDesC8 @ 56 NONAME
 	_ZThn4_N12CGlxViewBase15ViewDeactivatedEv @ 57 NONAME
 	_ZThn80_N12CGlxViewBase17AnimationCompleteEP13MGlxAnimation @ 58 NONAME
--- a/photosgallery/viewframework/views/viewbase/group/glxviewbase.mmp	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/viewframework/views/viewbase/group/glxviewbase.mmp	Wed Oct 13 14:32:09 2010 +0300
@@ -109,8 +109,7 @@
 LIBRARY 		  libc.lib
 LIBRARY		      libglib.lib
 LIBRARY				glxcommandhandlerbase.lib
-LIBRARY         glxcommonui.lib		//added as per single clk chngs
-LIBRARY			gfxtrans.lib //For GfxTransEffect
+LIBRARY         glxcommonui.lib     //added as per single clk chngs
 // End of File
 
 SOURCEPATH ../src
\ No newline at end of file
--- a/photosgallery/viewframework/views/viewbase/inc/glxviewbase.h	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/viewframework/views/viewbase/inc/glxviewbase.h	Wed Oct 13 14:32:09 2010 +0300
@@ -253,9 +253,6 @@
 	
 	/// The view animation time
     TInt iViewAnimationTime; 
-    
-    /// Status of FullScreen Transition is started
-    TBool iIsTransEffectStarted;
 private:
     /**
      * Functions to handle view activate asynchronously
--- a/photosgallery/viewframework/views/viewbase/src/glxmedialistviewbase.cpp	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/viewframework/views/viewbase/src/glxmedialistviewbase.cpp	Wed Oct 13 14:32:09 2010 +0300
@@ -169,11 +169,8 @@
         if ((navigationalState->Id() != TMPXItemId(
 				KGlxCollectionPluginAlbumsImplementationUid)))
             {
-			if (!iPreloadContextForCommandHandlers)
-				{
-				iPreloadContextForCommandHandlers
-						= new (ELeave) CGlxAttributeContext(&iSelectionIterator);
-				}
+            iPreloadContextForCommandHandlers
+                    = new (ELeave) CGlxAttributeContext(&iSelectionIterator);
             TInt commandHandlerCount = iCommandHandlerList.Count();
             for (TInt i = 0; i < commandHandlerCount; i++)
                 {
@@ -393,8 +390,6 @@
         if (iPreloadContextForCommandHandlers)
             {
             iMediaList->RemoveContext(iPreloadContextForCommandHandlers);
-            delete iPreloadContextForCommandHandlers;
-            iPreloadContextForCommandHandlers = NULL;
             }
         iMediaList->Close();
         iMediaList = NULL;
--- a/photosgallery/viewframework/views/viewbase/src/glxtoolbarcontroller.cpp	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/viewframework/views/viewbase/src/glxtoolbarcontroller.cpp	Wed Oct 13 14:32:09 2010 +0300
@@ -225,10 +225,7 @@
     TRAPD(err, CheckShareonlineVersionL());
     GLX_LOG_INFO2("CGlxToolbarController::SetStatusOnViewActivationL(%d),"
             " err(%d)", aList->Count(), err);
-    if (iToolbar->IsDimmed())
-    	{
-        iToolbar->SetDimmed(EFalse);
-    	}
+
     CGlxNavigationalState* navigationalState =
             CGlxNavigationalState::InstanceL();
     CleanupClosePushL(*navigationalState);
@@ -322,21 +319,13 @@
 		if (navigationalState->ViewingMode() == NGlxNavigationalState::EView)
 			{
 			SetToolbarItemsDimmed(EFalse);
-            TInt focusIndex = aList->FocusIndex();
-            if (focusIndex >= 0 && focusIndex < aList->Count())
-                {
-                TBool dimmed = (EMPXVideo
-                        == aList->Item(focusIndex).Category());
-                iToolbar->SetItemDimmed(EGlxCmdSlideshowPlay, dimmed, ETrue);
-                }
-            }
+			}
 		else if (navigationalState->ViewingMode()
 				== NGlxNavigationalState::EBrowse)
 			{
 			TBool dimmed = aList->SelectionCount() ? EFalse : ETrue;
 			iToolbar->SetItemDimmed(EGlxCmdSend, dimmed, ETrue);
 			iToolbar->SetItemDimmed(EGlxCmdUpload, dimmed, ETrue);
-			iToolbar->SetItemDimmed(EGlxCmdSlideshowPlay, EFalse, ETrue);
 			}
 		CleanupStack::PopAndDestroy(navigationalState);
 		}
@@ -393,7 +382,6 @@
         iToolbar->SetItemDimmed(EGlxCmdStartMultipleMarking, aDimmed, ETrue);
         iToolbar->SetItemDimmed(EGlxCmdSend, aDimmed, ETrue);
         iToolbar->SetItemDimmed(EGlxCmdUpload, aDimmed, ETrue);
-        iToolbar->SetItemDimmed(EGlxCmdDelete, aDimmed, ETrue);
         }
     }
 
--- a/photosgallery/viewframework/views/viewbase/src/glxviewbase.cpp	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/viewframework/views/viewbase/src/glxviewbase.cpp	Wed Oct 13 14:32:09 2010 +0300
@@ -43,9 +43,6 @@
 
 #include <aknbutton.h>                      // for getting the button state
 
-// For transition effects                           
-#include <gfxtranseffect/gfxtranseffect.h>
-
 _LIT(KGlxViewBaseResource, "glxviewbase.rsc");
 
 /// Length of time a view-switch animation should take
@@ -57,7 +54,6 @@
 //	
 EXPORT_C CGlxViewBase::CGlxViewBase(TBool aSyncActivation) :
     iViewAnimationTime(KGlxViewSwitchAnimationDuration),
-    iIsTransEffectStarted(EFalse),
     iViewAnimationInProgress(EGlxViewAnimationNone),
     iSyncActivation(aSyncActivation)
     {
@@ -551,6 +547,10 @@
     CAknToolbar* toolbar = GetToolBar();
     if(toolbar)
         {
+        CAknButton* slideshowButton =
+            static_cast<CAknButton*> (toolbar->ControlOrNull(EGlxCmdSlideshow));
+        TBool slideshowdimmed = EFalse;
+
         //Here after the toolbar cmd is processed it is enabled
         //back. For share the toolbar state should be same as it was 
         //earlier, so we take the current state and reset back after
@@ -562,35 +562,28 @@
         CAknButton* markButton =
             static_cast<CAknButton*> (toolbar->ControlOrNull(EGlxCmdStartMultipleMarking));
         TBool markButtondimmed = EFalse;
-        
-        CAknButton* deleteButton =
-            static_cast<CAknButton*> (toolbar->ControlOrNull(EGlxCmdDelete));
-        TBool deleteButtondimmed = EFalse;
-        
-        CAknButton* sendButton =
-            static_cast<CAknButton*> (toolbar->ControlOrNull(EGlxCmdSend));
-        TBool sendButtondimmed = EFalse;
+
+        if(slideshowButton)
+            {
+            // Get current button state
+            CAknButtonState* currentState = slideshowButton->State();
+            slideshowdimmed = slideshowButton->IsDimmed();
+            }
 
         if(markButton)
             {
+            // Get current button state
+            CAknButtonState* currentState = markButton->State();
             markButtondimmed = markButton->IsDimmed();
             }        
         
         if(uploadButton)
             {
+            // Get current button state
+            CAknButtonState* currentState = uploadButton->State();
             uploaddimmed = uploadButton->IsDimmed();
-            }     
-        
-        if(deleteButton)
-            {
-			deleteButtondimmed = deleteButton->IsDimmed();
             }
-        
-        if(sendButton)
-            {
-			sendButtondimmed = sendButton->IsDimmed();
-            }
-        
+
         // Deactivate the toolbar. Don't accept the toolbar input when the command
         // execution is already in progress.
         SetToolbarItemsDimmed(ETrue); 
@@ -602,28 +595,20 @@
         // after command execution.
         SetToolbarStateL();
 
-        // Note: Slideshow toolbar item update is done
-        // at CGlxToolbarController::SetStatusL()
-
         if(!markButtondimmed)
             {
             toolbar->SetItemDimmed(EGlxCmdStartMultipleMarking, EFalse, ETrue);
             }
 
+        if(!slideshowdimmed)
+            {
+            toolbar->SetItemDimmed(EGlxCmdSlideshowPlay, EFalse, ETrue);
+            }
+        
         if(uploaddimmed || (aCommand == EGlxCmdStartMultipleMarking))
             {
             toolbar->SetItemDimmed(EGlxCmdUpload, ETrue, ETrue);
             }
- 
-        if(!deleteButtondimmed)
-            {
-            toolbar->SetItemDimmed(EGlxCmdDelete, EFalse, ETrue);
-            }
-        
-        if(!sendButtondimmed)
-            {
-            toolbar->SetItemDimmed(EGlxCmdSend, EFalse, ETrue);
-            }        
         }    
     }
 
@@ -725,14 +710,6 @@
         iCommandHandlerList[i]->ActivateL(Id().iUid);
         i++;
         }
-    
-    //Check if transition effect is already started.
-    //Calling the 'EndFullScreen()' actually starts the FS transition effect.
-    if(iIsTransEffectStarted)
-		{
-		GfxTransEffect::EndFullScreen();
-		iIsTransEffectStarted = EFalse;
-		}
 
     InitAnimationL(EGlxViewAnimationEntry); 
     }
@@ -750,8 +727,6 @@
         toolbar->SetItemDimmed(EGlxCmdSlideshowPlay, aDimmed, ETrue);
         toolbar->SetItemDimmed(EGlxCmdStartMultipleMarking, aDimmed, ETrue);
         toolbar->SetItemDimmed(EGlxCmdUpload, aDimmed, ETrue);
-        toolbar->SetItemDimmed(EGlxCmdDelete, aDimmed, ETrue);
-        toolbar->SetItemDimmed(EGlxCmdSend, aDimmed, ETrue);
         }
     }
 
--- a/photosgallery/viewframework/views/zoomview/src/glxzoomcontrol.cpp	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/viewframework/views/zoomview/src/glxzoomcontrol.cpp	Wed Oct 13 14:32:09 2010 +0300
@@ -490,6 +490,19 @@
         }
     else
         {
+        TInt focus = iMediaList.FocusIndex();
+        const TGlxMedia item = iMediaList.Item(focus);
+        TGlxIdSpaceId spaceId = iMediaList.IdSpaceId(focus);
+        GLX_LOG_INFO("CGlxZoomControl::HandleZoomForegroundEvent - Get the FS texture");
+        // Get the texture created in fullscreen view.
+        TRAPD(err, iImageTexture = &(iTextureMgr->CreateNewTextureForMediaL(
+                                ScreenSize(), item, spaceId, this)));
+
+        if (iImageTexture && iImageTexture->HasContent() && KErrNone == err)
+            {
+            GLX_LOG_INFO("CGlxZoomControl::HandleZoomForegroundEvent - Show the FS texture");
+            iImageVisual->SetImage(*iImageTexture);
+            }
         iGPUMemMonitor->RequestMemory();
         }
     } 
@@ -552,9 +565,11 @@
 // TextureContentChangedL
 // -----------------------------------------------------------------------------
 //
-void CGlxZoomControl::TextureContentChangedL( TBool /*aHasContent*/ , CAlfTexture* aNewTexture)
+void CGlxZoomControl::TextureContentChangedL(TBool aHasContent,
+        CAlfTexture* aNewTexture)
     {
     TRACER("CGlxZoomControl::TextureContentChangedL ");
+    GLX_LOG_INFO2("CGlxZoomControl::TextureContentChangedL() aNewTexture=%x, aHasContent=%d", aNewTexture, aHasContent);
     //if both the textures are null that means we do not have memory to 
     //decode and show anything. So try and check if the fullscreen texture 
     //is created by now if not then go to fullscreen view.
@@ -563,40 +578,43 @@
         {
         if(NULL == iImageTexture)
             {
-            TSize TextureSize = ScreenSize();
+            TSize textureSize = ScreenSize();
             TInt focus = iMediaList.FocusIndex();
             TGlxMedia item = iMediaList.Item( focus );
             TGlxIdSpaceId idspace = iMediaList.IdSpaceId( focus );
     
             CAlfTexture* newTexture = NULL;
-            //Get the texture Created in fullscreen View.
-            TRAPD(errtexture, newTexture = &(iTextureMgr->CreateNewTextureForMediaL(
-                            TextureSize,item, idspace, this )));
+            // Get the texture created in fullscreen view.
+            TRAPD(err, newTexture = &(iTextureMgr->CreateNewTextureForMediaL(
+                            textureSize,item, idspace, this)));
             
-            if(errtexture != KErrNone)
+            GLX_LOG_INFO2("CGlxZoomControl::TextureContentChangedL(1) newTexture=%x, err=%d", newTexture, err);
+            if(newTexture && newTexture->HasContent() && err == KErrNone)
                 {
-                GLX_LOG_INFO( "CGlxTextureManagerImpl::HandleBitmapDecodedL::CreateNewTextureForMediaL Failed");
-                //Exit zoom and goto fullscreen
-                HandleZoomOutL(KGlxZoomOutCommand);
+                GLX_LOG_INFO("CGlxZoomControl::TextureContentChangedL:Show FS texture");
+                // Show the fullscreen texture.
+                iImageTexture = newTexture;
+                iImageVisual->SetImage(*iImageTexture);
                 }
             else
                 {
-                //show the fullscreen texture.
-                iImageTexture = newTexture;
-                iImageVisual->SetImage( *iImageTexture );   
+                GLX_LOG_INFO("CGlxZoomControl::TextureContentChangedL:CreateNewTextureForMediaL Failed");
+                // Exit zoom and goto fullscreen
+                HandleZoomOutL(KGlxZoomOutCommand);
                 }           
             }
-         else
+         else if (iImageTexture->HasContent())
             {
-            //show the existing first level decoded image texture in case second level
-            //decoding fails
-            iImageVisual->SetImage( *iImageTexture );   
+            // Show the existing decoded image texture
+            GLX_LOG_INFO("CGlxZoomControl::TextureContentChangedL - Show the existing texture");
+            iImageVisual->SetImage(*iImageTexture);
             }                   
         }
-    else
+    else if (aHasContent && aNewTexture->HasContent())
         {
+        GLX_LOG_INFO("CGlxZoomControl::TextureContentChangedL - Show the NEW texture");
         iImageTexture = aNewTexture;
-        iImageVisual->SetImage( *iImageTexture );        
+        iImageVisual->SetImage(*iImageTexture);
         }
     }
 
@@ -960,7 +978,6 @@
         {
         //Refeed the textures if we are coming back to foreground from background
         //To Retrive the image details
-        TMPXAttribute thumbNailAttribute(0, 0);
         TInt focusIndex = iMediaList.FocusIndex();
         TGlxIdSpaceId idspace = iMediaList.IdSpaceId(focusIndex);
         //Get the texture Created in fullscreen View.
@@ -968,16 +985,17 @@
 
         // if we already have the decoded zoomed image bitmap use the texture corresponding to that.
         // Else make do with the fullscreen texture till that happens.  
-        TRAP_IGNORE(iImageTexture =
-                iTextureMgr->CreateZoomedTextureL());
+        TRAPD(err, iImageTexture = iTextureMgr->CreateZoomedTextureL());
 
-        if (NULL == iImageTexture)
+        GLX_LOG_INFO2("CGlxZoomControl::HandleGoomMemoryReleased(1) iImageTexture=%x err=%d", iImageTexture, err);
+        if (!iImageTexture || KErrNone != err)
             {
-            TRAP_IGNORE(iImageTexture = &(iTextureMgr->CreateNewTextureForMediaL(
+            TRAP(err, iImageTexture = &(iTextureMgr->CreateNewTextureForMediaL(
                                     ScreenSize(), item, idspace, this)))
             }
 
-        if (NULL != iImageTexture)
+        GLX_LOG_INFO2("CGlxZoomControl::HandleGoomMemoryReleased(2) iImageTexture=%x err=%d", iImageTexture, err);
+        if (iImageTexture && iImageTexture->HasContent() && KErrNone == err)
             {
             iImageVisual->SetImage(*iImageTexture);
             return;
--- a/photosgallery/viewframework/visuallistmanager/src/glxvisuallistwindow.cpp	Wed Sep 15 12:13:06 2010 +0300
+++ b/photosgallery/viewframework/visuallistmanager/src/glxvisuallistwindow.cpp	Wed Oct 13 14:32:09 2010 +0300
@@ -146,9 +146,9 @@
 		object.SetScaleMode(CAlfImageVisual::EScaleNormal);
 		}
 			    
-	// Keep the visual invisible to avoid showing wrong visual in the starting, 
-	// Effect control will make it visisble
-    object.SetVisible( EFalse );
+    // show the object. do this before notifying control, to show
+    // at the image if control leaves
+    object.SetVisible( ETrue );
     
     // notify observer
     iControl->HandleVisualAddedL( object.Visual(), aIndex );