phonebookui/Phonebook2/xSPExtensionManager/src/CxSPSortView.cpp
branchRCL_3
changeset 63 f4a778e096c2
child 64 c1e8ba0c2b16
child 68 9da50d567e3c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookui/Phonebook2/xSPExtensionManager/src/CxSPSortView.cpp	Wed Sep 01 12:29:52 2010 +0100
@@ -0,0 +1,321 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*       Implementation for CxSPSortView.
+*
+*/
+
+
+// INCLUDE FILES
+#include "CxSPSortView.h"
+#include "CxSPSortViewControl.h"
+
+// System includes
+#include <eiklbi.h>
+#include <eiklbx.h> 
+#include <AknUtils.h>
+#include <AknGlobalNote.h>
+#include <aknnavi.h>
+#include <aknnavide.h>
+#include <StringLoader.h>
+#include <eikbtgpc.h>
+#include <eikspane.h>
+#include <avkon.hrh>
+#include <avkon.rsg>
+
+//Pbk2
+#include <MPbk2AppUi.h>
+#include <CPbk2UIExtensionView.h>
+#include <MPbk2ViewActivationTransaction.h>
+#include <MPbk2ViewExplorer.h>
+#include <CPbk2ViewState.h>
+#include <MPbk2StartupMonitor.h>
+#include <Pbk2Debug.h>
+
+// internal
+#include "ExtensionManager.hrh"
+#include <ExtensionManagerRes.rsg>
+#include "ExtensionManagerUID.H"
+#include "CxSPLoader.h"
+#include "MxSPFactory.h"
+#include "CxSPViewIdChanger.h"
+
+
+using namespace Phonebook2;
+
+// ================= MEMBER FUNCTIONS =======================
+
+inline CxSPSortView::CxSPSortView( CxSPViewIdChanger& aViewIdChanger,
+								   MxSPContactManager& aContactManager,
+								   CPbk2UIExtensionView& aView,
+								   CxSPArray& aExtensions ) :
+									CxSPBaseView( aViewIdChanger, aContactManager, aView ),
+									iViewIdChanger( aViewIdChanger ),
+									iExtensions( aExtensions )
+    {
+    }
+
+inline void CxSPSortView::ConstructL()
+    {
+    ViewBaseConstructL( KEXTENSIONMANAGERIMPLEMENTATIONUID,
+    					EExtensionManagerSortViewId );        
+    }
+
+CxSPSortView* CxSPSortView::NewL( CxSPViewIdChanger& aViewIdChanger,
+								   MxSPContactManager& aContactManager,
+								   CPbk2UIExtensionView& aView,
+								   CxSPArray& aExtensions )
+    {
+    CxSPSortView* self = new(ELeave) CxSPSortView( aViewIdChanger, 
+    											   aContactManager,
+    											   aView,
+    											   aExtensions );
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+CxSPSortView::~CxSPSortView()
+    {
+    delete iNaviDecorator;
+    if (iContainer)
+	    {
+        CCoeEnv::Static()->AppUi()->RemoveFromStack(iContainer);
+        }
+    delete iContainer;
+    }
+
+void CxSPSortView::HandleCommandL
+        (TInt aCommand)
+    {
+    switch (aCommand)
+        {
+        case EAknSoftkeyBack: // Back softkey
+            {
+            TBool changes = iContainer->CommitSortL( this );
+            if( !changes )
+            	{
+        		Pbk2AppUi()->Pbk2ViewExplorer()->
+            		ActivatePhonebook2ViewL( TUid::Uid(
+                		EPbk2NamesListViewId ), NULL );
+				}
+            // No else. If there were changes in the sort order we will be
+            // notified via MGlobalNoteObserver API when the user has closed
+            // the resulting global note
+            break;
+            }
+        case EExtensionManagerCmdMove: // Move softkey
+        	{
+        	iContainer->SetCurrentItemMarkedL( ETrue );
+            UpdateCbasL( R_AVKON_SOFTKEYS_OK_CANCEL );
+        	break;
+        	}
+        case EAknSoftkeyOk: // Ok softkey
+        	{
+        	iContainer->MoveMarkedItemL();
+            UpdateCbasL( R_EXTENSION_MANAGER_SORT_VIEW_SOFTKEYS );
+        	break;
+        	}
+        case EAknSoftkeyCancel: // Cancel softkey
+        	{
+        	iContainer->SetCurrentItemMarkedL( EFalse );
+            UpdateCbasL( R_EXTENSION_MANAGER_SORT_VIEW_SOFTKEYS );
+
+        	break;
+        	}
+        default:
+            {
+            Pbk2AppUi()->HandleCommandL( aCommand );
+            break;
+            }
+        }
+    }
+
+void CxSPSortView::DoActivateViewL( const TVwsViewId& aPrevViewId,
+                         TUid /*aCustomMessageId*/,
+                         const TDesC8& /*aCustomMessage*/ )
+	{
+    MPbk2ViewActivationTransaction* viewActivationTransaction =
+        Pbk2AppUi()->Pbk2ViewExplorer()->HandleViewActivationLC(
+            iView.Id(),
+            aPrevViewId,
+            NULL,
+            NULL,
+            EUpdateAll );
+
+    // Notifies startup monitor of view activation
+    if ( Pbk2AppUi()->Pbk2StartupMonitor() )
+        {
+        Pbk2AppUi()->Pbk2StartupMonitor()->
+            NotifyViewActivationL( iView.Id() );
+        }
+	 
+    if (!iContainer)
+        {
+        iContainer = CxSPSortViewControl::NewL( iViewIdChanger, iExtensions, iView );
+        CCoeEnv::Static()->AppUi()->AddToStackL( iView, iContainer );        
+        iContainer->SetMopParent( &iView );        
+        iContainer->SetRect( iView.ClientRect() );      
+        
+        CCoeControl& ctrl=iContainer->ComponentControl();
+        CEikListBox& listbox=static_cast <CEikListBox&> (ctrl);
+        listbox.SetListBoxObserver( this );
+        
+        iContainer->ActivateL();
+        
+        UpdateCbasL( R_EXTENSION_MANAGER_SORT_VIEW_SOFTKEYS );
+         
+        // Invoke DrawNow() to avoid the cba flicker
+        iView.Cba()->DrawNow();
+        } 
+
+    // Commit application-wide state changes
+    viewActivationTransaction->Commit();
+    CleanupStack::PopAndDestroy(); //viewActivationTransaction
+	
+	// Remove the tabs from the navipane
+    CEikStatusPane* sp = CEikonEnv::Static()->AppUiFactory()->StatusPane();
+    CAknNavigationControlContainer* np =
+        static_cast<CAknNavigationControlContainer*>(
+            sp->ControlL( TUid::Uid( EEikStatusPaneUidNavi ) ) );
+    delete iNaviDecorator;
+    iNaviDecorator = NULL;
+
+    iNaviDecorator = np->CreateNavigationLabelL();
+    np->PushL( *iNaviDecorator );
+    sp->DrawNow();
+	}
+
+void CxSPSortView::UpdateCbasL( TInt aResourceId )
+    {
+    CCoeControl& ctrl=iContainer->ComponentControl();
+    CEikListBox& listbox=static_cast <CEikListBox&> (ctrl);
+       
+    TBool noItemHightLighted = listbox.View()->ItemDrawer()->Flags() & CListItemDrawer::ESingleClickDisabledHighlight;
+    
+    if ( aResourceId == R_EXTENSION_MANAGER_SORT_VIEW_SOFTKEYS )
+        {
+        if ( noItemHightLighted )
+            {
+            // Load the default cba for the sort view
+            iView.Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_BACK );
+            }
+        else
+            {
+            // Load the default cba for the sort view
+            iView.Cba()->SetCommandSetL( R_EXTENSION_MANAGER_SORT_VIEW_SOFTKEYS );
+            }
+        iView.Cba()->DrawDeferred();
+        }
+    else if ( aResourceId == R_AVKON_SOFTKEYS_OK_CANCEL )
+        {
+        if ( noItemHightLighted )
+            {
+            // Load the default cba for the sort view
+            iView.Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_CANCEL );
+            }
+        else
+            {
+            // Load the default cba for the sort view
+            iView.Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_OK_CANCEL );
+            }
+        iView.Cba()->DrawDeferred();
+        }
+    
+    }
+
+void CxSPSortView::DoDeactivate()
+	{
+    if (iContainer)
+        {
+        CCoeEnv::Static()->AppUi()->RemoveFromStack( iContainer );
+        delete iContainer;
+        iContainer = NULL;
+        }
+
+	if( iNaviDecorator )
+		{
+		// Remove the view-specific navipane decorations
+	    CEikStatusPane* sp = CEikonEnv::Static()->AppUiFactory()->StatusPane();
+	    TRAP_IGNORE( CAknNavigationControlContainer* np =
+	         		 static_cast<CAknNavigationControlContainer*>(
+	            	 sp->ControlL( TUid::Uid( EEikStatusPaneUidNavi )));  // CSI: 42 #
+			    	 np->Pop( iNaviDecorator );
+				   );
+		}
+	}
+
+void CxSPSortView::HandleStatusPaneSizeChange()
+    {
+    // Resize the container to fill the client rectangle
+    if (iContainer)
+        {
+        iContainer->SetRect( iView.ClientRect() );
+        }
+    }
+
+void CxSPSortView::HandleListBoxEventL(CEikListBox* aListBox, TListBoxEvent aEventType)
+    {
+    if( AknLayoutUtils::PenEnabled() )
+        {
+        switch ( aEventType )
+            {
+            case EEventItemSingleClicked:
+                {
+                CCoeControl& ctrl=iContainer->ComponentControl();
+                CEikListBox& listbox=static_cast <CEikListBox&> (ctrl);
+                const CListBoxView::CSelectionIndexArray* inds = listbox.SelectionIndexes();
+                TInt count = inds->Count();
+                 
+                if ( count <= 0 )
+                     {
+                     HandleCommandL( EExtensionManagerCmdMove );
+                     }
+                 else
+                     {
+                     HandleCommandL( EAknSoftkeyOk );
+                     }
+                break;
+                }
+            default:
+               break;
+            }
+          }
+    }
+
+void CxSPSortView::GlobalNoteClosed( const TInt aResult )
+    {
+    PBK2_DEBUG_PRINT(
+            PBK2_DEBUG_STRING("CxSPSortView::GlobalNoteClosed [%i]"), aResult );
+
+    // This event results from a call to iContainer->CommitSortL when sorting
+    // has been changed and the user has closed the resulting global note,
+    // so we need to exit the application
+    Pbk2AppUi()->ExitApplication();
+    }
+
+void CxSPSortView::GlobalNoteError( const TInt aErr )
+    {
+    PBK2_DEBUG_PRINT(
+            PBK2_DEBUG_STRING("CxSPSortView::GlobalNoteError [%i]"), aErr );
+
+    // This event results from a call to iContainer->CommitSortL when sorting
+    // has been changed and there was a problem with the resulting global note,
+    // so we need to exit the application.
+    // We could also try to show the error to the user.
+    Pbk2AppUi()->ExitApplication();
+    }
+
+//  End of File