photosgallery/viewframework/views/viewbase/src/glxtoolbarcontroller.cpp
changeset 0 4e91876724a2
child 18 bcb43dc84c44
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/photosgallery/viewframework/views/viewbase/src/glxtoolbarcontroller.cpp	Thu Dec 17 08:45:44 2009 +0200
@@ -0,0 +1,367 @@
+/*
+* 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:    Media item list observer interface 
+*
+*/
+
+
+
+
+#include "glxtoolbarcontroller.h"
+#include <aknbutton.h>
+#include <akntoolbar.h>                     // For Toolbar
+#include <glxcommandhandlers.hrh>           // For Command ids
+#include <glxtracer.h>                         // For Logs
+#include <mglxmedialist.h>
+
+#include <glxnavigationalstate.h>
+#include <mpxcollectionpath.h>
+#include <glxcollectionpluginimageviewer.hrh>
+const TInt KGlxToolbarButtonUnLatched = 0;   // As per the states in resource file
+const TInt KGlxToolbarButtonLatched = 1 ;
+
+//----------------------------------------------------------------------------------
+// NewL
+//----------------------------------------------------------------------------------
+//
+CGlxToolbarController* CGlxToolbarController::NewL()
+    {
+    TRACER("CGlxToolbarController::NewL");
+    
+    CGlxToolbarController *self = new( ELeave ) CGlxToolbarController ();
+    return self;
+    }
+
+//----------------------------------------------------------------------------------
+// Default Constructor
+//----------------------------------------------------------------------------------
+//
+CGlxToolbarController::CGlxToolbarController( )
+    {
+    TRACER("CGlxToolbarController::Default constructor");
+    
+    }
+    
+//----------------------------------------------------------------------------------
+// AddToObserver
+//----------------------------------------------------------------------------------
+//
+void CGlxToolbarController::AddToObserverL (MGlxMediaList& aList, CAknToolbar* aToolbar)
+    {
+    TRACER("CGlxToolbarController::AddToObserverL");
+
+    iToolbar = aToolbar;
+    iAttributeAvailable = EFalse;
+    iToolbar->SetDimmed(ETrue);
+    iToolbar->DrawNow();
+    aList.AddMediaListObserverL ( this );
+    }
+
+//----------------------------------------------------------------------------------
+// RemoveFromObserver 
+//----------------------------------------------------------------------------------
+//
+void CGlxToolbarController::RemoveFromObserver (MGlxMediaList& aList)
+    {
+    TRACER("CGlxToolbarController::RemoveFromObserver");
+    
+    if( aList.SelectionCount()<= 0 )
+        {
+        EnableLatch( EGlxCmdStartMultipleMarking, EFalse );
+        }
+
+    aList.RemoveMediaListObserver ( this );
+    }
+
+//----------------------------------------------------------------------------
+// HandleItemAddedL
+//----------------------------------------------------------------------------
+//
+void CGlxToolbarController::HandleItemAddedL(TInt /*aStartIndex*/, TInt /*aEndIndex*/, 
+        MGlxMediaList* /*aList*/)
+    {
+    TRACER("CGlxToolbarController::HandleItemAddedL");
+    
+    }
+
+//----------------------------------------------------------------------------
+// HandleMediaL
+//----------------------------------------------------------------------------
+//
+void CGlxToolbarController::HandleMediaL(TInt /*aListIndex*/, MGlxMediaList* /*aList*/)
+    {
+    TRACER("CGlxToolbarController::HandleMediaL");
+    
+    }
+
+//----------------------------------------------------------------------------
+// HandleItemRemovedL
+//----------------------------------------------------------------------------
+//
+void CGlxToolbarController::HandleItemRemovedL(TInt /*aStartIndex*/, 
+        TInt /*aEndIndex*/, MGlxMediaList* aList)
+    {
+    TRACER("CGlxToolbarController::HandleItemRemovedL");
+    
+    if( aList->Count() <= 0 )
+        {
+        iToolbar->SetDimmed(ETrue);
+        iToolbar->DrawNow();
+        }
+    }
+
+//----------------------------------------------------------------------------
+// HandleItemModifiedL
+//----------------------------------------------------------------------------
+//
+void CGlxToolbarController::HandleItemModifiedL(const RArray<TInt>& /*aItemIndexes*/, 
+        MGlxMediaList* /*aList*/)
+    {
+    TRACER("CGlxToolbarController::HandleItemModifiedL");
+    
+    }
+
+//----------------------------------------------------------------------------
+// HandleAttributesAvailableL
+//----------------------------------------------------------------------------
+//
+void CGlxToolbarController::HandleAttributesAvailableL(TInt aItemIndex, 
+        const RArray<TMPXAttribute>& /*aAttributes*/, 
+        MGlxMediaList* aList)
+    {
+    TRACER("CGlxToolbarController::HandleAttributesAvailableL");
+    
+    if( aItemIndex == aList->FocusIndex() )
+        {        
+        iAttributeAvailable = ETrue;
+        SetStatusL(aList);
+        }
+    }
+
+//----------------------------------------------------------------------------
+// HandleFocusChangedL
+//----------------------------------------------------------------------------
+//
+void CGlxToolbarController::HandleFocusChangedL(NGlxListDefs::TFocusChangeType /*aType*/, 
+        TInt aNewIndex, TInt /*aOldIndex*/, 
+        MGlxMediaList* aList)
+    {  
+    TRACER("CGlxToolbarController::HandleFocusChangedL");
+    
+    // If new index is not equal to -1 (i.e., if there are some items present), 
+    // then check the media item
+    if( (aNewIndex == aList->FocusIndex()) && (KErrNotFound != aNewIndex) )
+        {
+        //Get the current media item from medialist
+        const TGlxMedia& mediaItem = aList->Item(aList->FocusIndex());
+        //Check whether media item is a system item, for example Favourites album
+        TBool isSystemItem = EFalse;
+        mediaItem.GetSystemItem(isSystemItem);
+        if( mediaItem.IsStatic() )
+            {
+            iToolbar->SetDimmed(ETrue);  
+            }
+        else if( iToolbar->IsDimmed() )
+            {
+            iToolbar->SetDimmed(EFalse);
+            }
+        if( isSystemItem )
+             {
+             iToolbar->SetItemDimmed( EGlxCmdRename, ETrue, ETrue );
+             }
+        else
+             {
+             iToolbar->SetItemDimmed( EGlxCmdRename, EFalse, ETrue );   
+            }
+        }
+    //DrawNow must be called since SetDimmed does not redraw the toolbar
+    iToolbar->DrawNow();     
+    }
+
+//----------------------------------------------------------------------------
+// HandleItemSelectedL
+//----------------------------------------------------------------------------
+//
+void CGlxToolbarController::HandleItemSelectedL(TInt /*aIndex*/, TBool /*aSelected*/, 
+        MGlxMediaList* aList)
+    {
+    TRACER("CGlxToolbarController::HandleItemSelectedL");
+    
+    // If atleast 1 item is marked, or if Mark All is called, then Latch the mark button.
+    if((aList->SelectionCount() == 1 ) || (aList->SelectionCount() == aList->Count()))
+        {
+        EnableLatch( EGlxCmdStartMultipleMarking, ETrue );
+        }
+	/* single clk chngs
+	 * check the current view status.
+	 * need to disable upload button in toolbar for grid by default
+	 */
+	if(!IsFullScreenView())
+        {
+        if(aList->SelectionCount() >= 1 )
+            {
+            iToolbar->SetItemDimmed(EGlxCmdUpload,EFalse , ETrue);
+            }
+        else
+            {
+            iToolbar->SetItemDimmed(EGlxCmdUpload,ETrue , ETrue);
+            }    
+        }
+    
+    //DrawNow must be called since SetDimmed does not redraw the toolbar
+    iToolbar->DrawNow();    
+    }
+
+//----------------------------------------------------------------------------
+// HandleMessageL
+//----------------------------------------------------------------------------
+//
+void CGlxToolbarController::HandleMessageL(const CMPXMessage& /*aMessage*/, 
+        MGlxMediaList* /*aList*/)
+    {
+    TRACER("CGlxToolbarController::HandleMessageL");
+    
+    }
+
+//----------------------------------------------------------------------------
+// Destructor
+//----------------------------------------------------------------------------
+//
+CGlxToolbarController::~CGlxToolbarController()
+    {
+    TRACER("CGlxToolbarController Destructor");
+    
+    }
+
+//----------------------------------------------------------------------------
+// SetStatusOnViewActivationL
+//----------------------------------------------------------------------------
+//
+void CGlxToolbarController::SetStatusOnViewActivationL( MGlxMediaList* aList )
+     {
+     	TRACER("CGlxToolbarController::SetStatusOnViewActivationL");
+     	
+     // When going back from fullscreen to grid, when the attributes are already 
+     // available in the cache, there is no HandleAttributeAvailable callback. Hence,
+     // checking for medialist count.
+     if( !iAttributeAvailable && (aList->Count(NGlxListDefs::ECountNonStatic) > 0))
+         {
+         SetStatusL(aList);
+         }    
+     }
+
+//----------------------------------------------------------------------------
+//SetStatusL
+//----------------------------------------------------------------------------
+//
+void CGlxToolbarController::SetStatusL(MGlxMediaList* aList)
+	{
+	TRACER("CGlxToolbarController::SetStatusL");
+	if(KErrNotFound != aList->FocusIndex())
+		{
+		//Get the current media item from medialist
+		const TGlxMedia& mediaItem = aList->Item(aList->FocusIndex());      
+
+		//Check whether media item is a system item, for example Favourites album
+		TBool isSystemItem = EFalse;    
+		mediaItem.GetSystemItem(isSystemItem);
+
+		if(!mediaItem.IsStatic() && iToolbar->IsDimmed())
+			{
+			//Activate (Undim) the toolbar if item in focus is not static
+			iToolbar->SetDimmed(EFalse);            
+			}    
+
+
+		if( isSystemItem )
+			{
+			iToolbar->SetItemDimmed( EGlxCmdRename, ETrue, ETrue );
+			}
+		else
+			{
+			iToolbar->SetItemDimmed( EGlxCmdRename, EFalse, ETrue );
+			}    
+		}    
+	/* single clk chngs
+	 * enable/disable upload button as per selection count, only in grid view
+	 */
+	if(aList->SelectionCount()== 0 && !IsFullScreenView())
+	    {
+	    iToolbar->SetItemDimmed(EGlxCmdUpload,ETrue , ETrue);
+	    }
+	
+	//DrawNow must be called since SetDimmed does not redraw the toolbar
+	iToolbar->DrawNow();
+	}
+
+//----------------------------------------------------------------------------
+// EnableLatch
+//----------------------------------------------------------------------------
+//
+void CGlxToolbarController::EnableLatch( TInt aCommandId, TInt aLatched )
+    {
+    CAknButton* toolbarButton = static_cast<CAknButton*>
+                                (iToolbar->ControlOrNull( aCommandId ));
+
+    if( toolbarButton )
+        {           
+        if(aLatched)
+            {
+            toolbarButton->SetCurrentState( KGlxToolbarButtonLatched, ETrue );
+            }
+        else
+            {
+            toolbarButton->SetCurrentState( KGlxToolbarButtonUnLatched, ETrue );
+            }
+        }
+    }
+//----------------------------------------------------------------------------
+// Check for current view mode .Grid/fullscreen/imgviewer
+//----------------------------------------------------------------------------
+//
+TBool CGlxToolbarController::IsFullScreenView()
+    {
+    TBool fullscreenViewingMode = EFalse;
+             
+     CGlxNavigationalState* aNavigationalState = CGlxNavigationalState::InstanceL();
+     CMPXCollectionPath* naviState = aNavigationalState->StateLC();
+     
+     if ( naviState->Levels() >= 1)
+         {
+         if (aNavigationalState->ViewingMode() == NGlxNavigationalState::EBrowse) 
+             {
+             // For image viewer collection, goto view mode
+             if (naviState->Id() == TMPXItemId(KGlxCollectionPluginImageViewerImplementationUid))
+                 {
+                 // current view mode is img vwr
+                 fullscreenViewingMode = ETrue;
+                 }
+             else
+                 {
+                 //current view mode is Grid 
+                 fullscreenViewingMode = EFalse;
+                 }
+             } 
+         else 
+             {
+             //current view mode is Fullscreen
+             fullscreenViewingMode = ETrue;
+             }                
+         }
+     CleanupStack::PopAndDestroy( naviState );
+     aNavigationalState->Close();
+     return fullscreenViewingMode;
+    }
+//end os file
+