phonebookui/Phonebook2/ccapplication/ccapp/inc/ccaappview.h
changeset 0 e686773b3f54
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookui/Phonebook2/ccapplication/ccapp/inc/ccaappview.h	Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,376 @@
+/*
+* Copyright (c) 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:  A class responsible handling the views
+ *
+*/
+
+
+#ifndef C_CCAAPPVIEW_H
+#define C_CCAAPPVIEW_H
+
+#include <e32base.h>                             
+#include <coedef.h>
+#include <w32std.h>
+
+#include <mccacontactobserver.h>
+#include <mccappengine.h>
+
+// FORWARD DECLARATIONS
+class CCCAppStatusPaneHandler;
+class CCCAAppAppUi;
+class MVPbkStoreContact;
+class MCCAppPluginsContactObserver;
+
+/**
+ *  CCCAppView
+ *
+ *  @code
+ *  @endcode
+ *
+ *  @lib ccaapp
+ *  @since S60 v5.0
+ */
+class CCCAppView : 
+    public CBase,
+    public MCCAppContactFieldDataObserver,
+    public MCCAppEngine
+	{
+#ifdef __CCAPPUNITTESTMODE
+    friend class ut_CCCAppView;
+#endif// __CCAPPUNITTESTMODE  
+    
+public:
+	/**
+	 * Two-phased constructor.
+	 */
+    static CCCAppView* NewL( CCCAAppAppUi& aAppUi );
+    
+    /**
+     * Destructor.
+     */
+    ~CCCAppView();
+
+    
+public: // From MCCAppEngine
+    
+    /**
+     * From MCCAppEngine
+     */ 
+    void CCAppContactEventL();
+    
+    /**
+     * From MCCAppEngine
+     */ 
+    void AddObserverL( MCCAppPluginsContactObserver& aObserver );
+    
+    /**
+     * From MCCAppEngine
+     */ 
+    void RemoveObserver( MCCAppPluginsContactObserver& aObserver );
+    
+    /**
+     * From MCCAppEngine
+     */ 
+    MCCAParameter& Parameter();
+
+    /**
+     * From MCCAppEngine
+     */ 
+    void ShowPluginL( TUid aUid ); 
+
+    /**
+     * From MCCAppEngine
+     */ 
+    void HidePluginL( TUid aUid );    
+
+private:// from MCCAppContactFieldDataObserver
+
+	/**
+	 * from MCCAppContactFieldDataObserver
+	 */
+    void ContactFieldDataObserverNotifyL( 
+        MCCAppContactFieldDataObserver::TParameter& aParameter );    
+
+	/**
+	 * from MCCAppContactFieldDataObserver
+	 */
+    void ContactFieldDataObserverHandleErrorL( 
+        TInt aState, TInt aError );
+
+private:
+	/**
+	 * Constructor.
+	 */        
+    CCCAppView( CCCAAppAppUi& aAppUi );    
+    void ConstructL();
+
+public: // Implementation
+
+	/**
+     * Activates the plugin view.
+     * AppUi exits in case it receives error.
+	 *
+	 * @since S60 v5.0
+	 * @param aUid is the uid of the plugin preferred to be visible 1st
+	 * @return possible error code
+	 */
+    TInt StartView( const TUid aUid );    
+
+	/**
+	 * Changes the plugin view.
+     * AppUi exits in case it receives error.
+	 *
+	 * @since S60 v5.0
+	 * @param aForward next/previous plugin
+     * @return possible error code
+	 */
+    TInt ChangeView( TBool aForward );
+
+    /**
+     * TabChangedL is called after the tab is
+     * succesfully changed by CAknTabGroup.
+     * TabChangedL activates corresponding plugin.
+     *
+     * @since S60 v5.0
+     * @param aIndex of plugin to be activated
+     */    
+    void TabChangedL( TInt aIndex );
+    
+    /**
+	 * Returns the AppUi reference
+	 *
+	 * @since S60 v5.0
+	 * @return reference to CCCAAppAppUi
+	 */    
+    CCCAAppAppUi& AppUi();
+
+	/**
+	 * Returns the Eikon Enviroment reference
+	 *
+	 * @since S60 v5.0
+	 * @return reference to CEikonEnv
+	 */ 
+    CEikonEnv& EikonEnv();
+
+	/**
+	 * Returns the CCCAppPluginLoader reference
+	 *
+	 * @since S60 v5.0
+	 * @return reference to CCCAppPluginLoader
+	 */ 
+    CCCAppPluginLoader& PluginLoader();
+
+    /**
+     * Tries to handle most of the cases when plugin 
+     * leaves in critical point. Panics are out of our
+     * reach.
+     * 
+     * In practise "bad boy" is removed from plugin 
+     * array and the 1st plugin in the array is then 
+     * activated.
+     * 
+     * Handles the cases if leave occurs in one of the 
+     * following plugin methods:
+     * - NewL / ConstructL
+     * - PreparePluginViewL
+     * - NewContainerL
+     * - DoActivateL
+     * 
+     * DoActivateL call happens in Avkon fw and by
+     * default the last working view is set to be
+     * active. To keep the functionality similar
+     * (and simple) in most cases, CIdle callback
+     * ResetViewL() is used.
+     * 
+     * Since recovering should not be everyday use case,
+     * implementation is a compromise. Recovering 
+     * functionality is not recursive. If the plugin
+     * failing is the 1st one, application is closed. 
+     *
+     * @since S60 v5.0
+     */
+    void RecoverFromBadPluginL();
+    
+    /**
+     * @return ETrue if active plug-in is busy with some processing,
+     *         EFalse otherwise
+     */
+    TBool CurrentPluginBusy();
+
+private: //New
+
+	/**
+	 * Activates plugin itself
+	 *
+	 * @since S60 v5.0
+	 * @param aPluginDataInFocus is the data of plugin to be activated
+	 */ 
+    void ActivatePluginL( CCCAppPluginData& aPluginDataInFocus );
+
+	/**
+	 * Updates the titlepane based on contact data notifications.
+	 * See also ContactFieldDataObserverNotifyL.
+	 *
+	 * @since S60 v5.0
+	 * @param aContactField is contact data field
+	 */
+    void ContactFieldFetchedNotifyL( 
+        CCmsContactField& aContactField );       
+
+    /**
+     * Activates the plugin view. Leaves in case of errors.
+     *
+     * @since S60 v5.0
+     * @param aUid is the uid of the plugin preferred to be visible 1st
+     */    
+    void StartViewL( const TUid aUid );    
+
+    /**
+     * Changes the plugin view. Leaves in case of errors.
+     *
+     * @since S60 v5.0
+     * @param aForward next/previous plugin
+     */    
+    void ChangeViewL( TBool aForward );    
+    
+    /**
+     * CIdle-callback for resetting the view.
+     * See RecoverFromBadPluginL.
+     *
+     * @since S60 v5.0
+     */
+    static TInt ResetViewL( TAny* aSelf );    
+
+    /**
+     * Check other plugin visibilities.
+     *
+     * @since S60 v5.0
+     */    
+    void CheckOtherPluginVisibilitiesL();    
+
+    /**
+     * Check other plugin visibilities.
+     *
+     * @since S60 v5.0
+     * @param aPluginToFocus 
+     */    
+    void StartPluginL(TInt aPluginToFocus);    
+
+    /**
+     * Shows plugin.
+     *
+     * @since S60 v5.0
+     * @param aUid 
+     */    
+    void PerformShowPluginL( TUid aUid ); 
+    
+    /**
+     * Hides plugin.
+     *
+     * @since S60 v5.0
+     * @param aUid 
+     */    
+    void PerformHidePluginL( TUid aUid );    
+    
+    /**
+     * Callback function for CIdle object that calls ConstructDelayedL().
+     *
+     * @since S60 v5.0
+     * @param aContainer 
+     */    
+    static TInt ConstructDelayedCallbackL( TAny* aContainer );
+
+    /**
+     * Performs time consuming construction operations once.
+     *
+     * @since S60 v5.0
+     */    
+    void DoConstructDelayedL();    
+    
+    
+    /**
+     * Performs the synch between the tabs & the Visible Plugins
+     *
+     * @since S60 v5.0
+     */
+    void SynchPluginVisibilityWithTabAfterDelayedStartL();
+
+private: //Data
+
+	/**
+	 * Status pane handler.
+	 * Own.  
+	 */    
+    CCCAppStatusPaneHandler* iPaneHandler; 
+
+    /**
+     * Reference to AppUi
+     * Not own.
+     */
+    CCCAAppAppUi& iAppUi;
+
+    /**
+     * Pointer to pluginloader
+     * Own.
+     */
+    CCCAppPluginLoader* iPluginLoader;
+
+    /**
+     * Boolean for monitoring is view change currently in progress.
+     * Own.
+     */
+    TBool iViewChangeInProgress;
+     
+    /**
+     * Pointer to CMS contact fetcher wrapper
+     * Own.
+     */      
+     CCCAppCmsContactFetcherWrapper* iCmsWrapper;
+
+     /**
+      * Pointer to CIdle in cases of recovering
+      * Own.
+      */      
+     CIdle* iViewResetter;
+     
+     /**
+      * Pointer to observers.
+      * Not owed.
+      */
+     RPointerArray<MCCAppPluginsContactObserver> iObservers;
+
+     /**
+      * Members and pointers for functionality to control delayed
+      * lazy plugin initialisation during construction.
+      */
+     CIdle* iDelayedConstructor;     
+     TBool iDelayedStarting;
+     
+     enum TDelayState
+         {
+         EDelayedCreateTabs = 0,
+         EDelayedCheckVisibilities,
+         EDelayedCheckVisibilitiesOk,
+         EDelayedFinish
+         };
+     TInt iDelayState;
+     TInt iDelayedPluginVisibilityCheck;
+     TBool iDelayedVisibilityChanged;
+     
+     //has a list of plugins which needs tobe synched
+     RArray <TUid> iPluginUidToBeSynchd;
+	};
+
+#endif // C_CCAAPPVIEW_H
+