--- /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
+