/*
* Copyright (c) 2008 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: Plugin IF for Avkon based plugin views
*
*/
#ifndef CCAPPVIEWPLUGINAKNVIEW_H
#define CCAPPVIEWPLUGINAKNVIEW_H
#ifndef __CCAPPUTILUNITTESTMODE
#include <AknView.h>
#include <coneresloader.h>
#endif //__CCAPPUTILUNITTESTMODE
class CCCAppViewPluginAknContainer;
/**
* CAknView tailored for the needs of CCApp plugins.
*
* @code
* Derive from CCCAppViewPluginBase, which is inherited from CCCAppViewPluginAknView.
*
* class CCCAppMyPlugin : public CCCAppViewPluginBase
* {
* ...
*
* CCCAppViewPluginBase is inherited from CAknView. CAknView has pure
* virtual method for view id. With plugin views, this method is used
* to return the implementation Id. This helps to identify the views and
* the plugins with each other.
*
* TUid CCCAppMyPlugin::Id()const
* {
* return TUid::Uid( KCCAMyPluginImplmentationUid );
* }
*
* During the preparations CCCAppViewPluginBase's PreparePluginViewL() is called. It is called
* only once in plugin's lifespan. Use it to load resource-file containing the resources your
* plugin needs. Actual loading of menus / soft keys can be left to base-class via calling
* BaseConstructL() and id of AVKON_VIEW -resource struct.
*
* void CCCAppMyPlugin::PreparePluginViewL( MCCAppPluginParameter& aPluginParameter )
* {
* // preparing resources for use
* TFileName fileName( KCCAppCommLauncherResourceFileName );
* BaflUtils::NearestLanguageFile( iCoeEnv->FsSession(), fileName );
* iResourceLoader.OpenL( fileName );
* // calling base-class to let it do the rest of loading
* BaseConstructL( R_COMMLAUNCHER_VIEW );
*
* // other plugin preparation work...
* }
*
* When plugin view is going to be activated to the display, DoActivateL()
* is called. Base-class DoActivateL should be called.
*
* void CCCAppMyPlugin::DoActivateL(
* const TVwsViewId& aPrevViewId,
* TUid aCustomMessageId,
* const TDesC8& aCustomMessage )
* {
* // Forward the activation-call to base-class
* CCCAppViewPluginAknView::DoActivateL(
* aPrevViewId, aCustomMessageId, aCustomMessage );
* // other plugin activation work ...
*
* During the activation of plugin view NewContainerL() is called. Use it to
* construct your container-class inherited from CCCAppViewPluginAknContainer.
*
* void CCCAppMyPlugin::NewContainerL()
* {
* iContainer = new (ELeave) CCCAppMyContainer();
* }
*
* When plugin view is going to be deactivated from the display,
* DoDeactivate() is called. Base-class DoDeactivate should be called.
* Plugin view is deleted during the deactivation process, but container
* is.
*
* void CCCAppMyPlugin::DoDeactivate()
* {
* // Forward the deactivation-call to base-class
* CCCAppViewPluginAknView::DoDeactivate();
* // other plugin deactivation work ...
* }
*
* Each plugin view should show its own title in the titlePane.
* To Facilitate this, the Plugin View base-Class provides SetTitleL(aTitle) API.
* Base-class SetTitleL should be called.
* The new title 'aTitle' gets updated in the TitlePane of the View
*
* void CCCAppMyPlugin::SetTitleL()
* {
* // Forward the SetTitleL-call to base-class
* CCCAppViewPluginAknView::SetTitleL( _LIT("My Title") );
}
*
* @endcode
*
* @lib ccapputil.dll
* @since S60 v5.0
*/
class CCCAppViewPluginAknView : public CAknView
{
public: // Constructors & destructors
/**
* C++ constructor.
*/
IMPORT_C CCCAppViewPluginAknView();
/**
* Destructor
*/
IMPORT_C virtual ~CCCAppViewPluginAknView();
protected: // From CAknView
/**
* Creates needed container through NewContainerL() and adds it
* to stack.
*
* This should be called from the sub-class.
*
* See more details from CAknView.
*
* @since S60 v5.0
*/
IMPORT_C virtual void DoActivateL(
const TVwsViewId& aPrevViewId,
TUid aCustomMessageId,
const TDesC8& aCustomMessage );
/**
* Deletes used container.
*
* This should be called from the sub-class.
*
* See more details from CAknView.
*
* @since S60 v5.0
*/
IMPORT_C virtual void DoDeactivate();
/**
* Calls CCApplication's HandleCommandL() which takes care of
* following events: EEikCmdExit, EAknSoftkeyBack, EAknSoftkeyExit
* and EAknCmdHelp (will call container classes GetHelpContext-callback).
*
* This should be called from the sub-class.
*
* See more details from CAknView.
*
* @since S60 v5.0
*/
IMPORT_C virtual void HandleCommandL( TInt aCommand );
protected: // New
/**
* Creates container,
*
* @since S60 v5.0
*/
void CreateContainerL();
/**
* This is meant for sub-class to create a container. Called during DoActivateL.
*
* @since S60 v5.0
*/
virtual void NewContainerL() = 0;
/**
* Deletes container if exists.
*
* @since S60 v5.0
*/
void DeleteContainerIfExists();
public:
/**
* Sets the title of the View Plugin
* @param aTitle - the title to be set for the Plugin View
*
* @since S60 v5.0
*
*/
IMPORT_C void SetTitleL( const TDesC& aTitle );
protected: // Data
/**
* Container.
* Owned.
*/
CCCAppViewPluginAknContainer* iContainer;
/**
* Resourceloader.
* Owned.
*/
RConeResourceLoader iResourceLoader;
};
#endif // CCAPPVIEWPLUGINAKNVIEW_H
//End of file