emailcontacts/contactactionmenu/inc/cfsccontactactionmenuimpl.h
author Simon Howkins <simonh@symbian.org>
Thu, 25 Nov 2010 12:13:04 +0000
branchRCL_3
changeset 83 31a5fbf5db1d
parent 0 8466d47a6819
permissions -rw-r--r--
Adjusted to avoid exports, etc, from a top-level bld.inf

/*
* 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:  Definition of the class CFscContactActionMenuImpl.
*
*/


#ifndef C_FSCCONTACTACTIONMENUIMPL_H
#define C_FSCCONTACTACTIONMENUIMPL_H

#include <e32base.h>
#include <coemain.h>
#include <AknPopupFader.h> 
#include <eikcmobs.h>
//<cmail>
#include "cfsccontactactionmenu.h"
#include "mfsccontactactionserviceobserver.h"
//</cmail>

#include "mfsccontactactionmenulistobserver.h"

// FORWARD DECLARATIONS
class CFscContactActionService;
class CFscContactActionMenuModelImpl;
class CFscContactActionMenuList;
class CActiveSchedulerWait;
class CEikButtonGroupContainer;
class CTextResolver;
class CEikonEnv;
class CFscContactActionMenuItem;
    
/**
 *  Contact Action Menu implementation.
 *  Contains API that implements all the functionality of the Contact Action
 *  Menu.
 *
 *  @lib fsccontactactionmenu.lib
 *  @since S60 3.1
 */
class CFscContactActionMenuImpl 
    : public CFscContactActionMenu, 
      public MFscContactActionMenuListObserver,
      public MAknFadedComponent,
      public MCoeForegroundObserver,
      public MEikCommandObserver,
      public MFscContactActionServiceObserver
    {
    
public: // Public constructors and destructor

    /**
     * Two-phased constructor.
     *
     * @param aParams Pointer construction parameters
     * @return New instance of the component       
     */
    static CFscContactActionMenuImpl* NewL( TAny* aParams );
   
    /**
     * Destructor.
     */
    virtual ~CFscContactActionMenuImpl();  
    
public: // From CFscContactActionMenu

    /**
     * Execute Action Menu
     *   ExecuteL opens Action Menu with current item set. Method is
     *   synchronous and it will return when Action Menu is closed.
     *
     * @param aPosition Vertical position where menu is to be openned
     * @param aIndex Index of focused/highlighted item when menu is opened
     * @return Execution result
     */
    TFscActionMenuResult ExecuteL( 
        TFscContactActionMenuPosition aPosition = EFscCenter, TInt aIndex = 0, MFsActionMenuPositionGiver* aPositionGiver = 0 );

    /**
     * Dismiss menu
     *   Menu gets closed if it was visible when the method was called. 
     *   Otherwise method call does not do anything
     *
     * @param aSlide If ETrue menu slides away from the screen. 
     *   Otherwise it disappears instantly
     */
    void Dismiss( TBool aSlide );  

    /**
     * Return a reference to Action Menu's model
     * 
     * @return Reference to menu model
     */
    MFscContactActionMenuModel& Model();
  
    /**
     * Return index of selected item
     * 
     * @return index of selected item
     */
    TInt FocusedItemIndex();
    
    /**
     * Return selected menu item object.
     * 
     * @return selected menu item object.
     */
    CFscContactActionMenuItem& FocusedItem();

    /**
     * This method is called if the menu was opened from meeting request.
     * 
     * @param aOpenedFromMR ETrue, if opened from meeting request.
     */
    void SetOpenedFromMR( TBool aOpenedFromMR );
    
public: // From MFscContactActionMenuListObserver
    
    /**
     * Handle action menu list event
     *
     * @param aEvent Event code
     * @param aError Error code used with error event
     */
    void HandleListEvent( TFscContactActionMenuListEvent aEvent,
                          TInt aError = KErrNone );   
    
    /**
     * Check if executed action is completed.
     */
    TBool IsOperationCompleted();
    
public: // From MAknFadedComponent

    /**
     * Count Faded Components
     *
     * @return count
     */
    TInt CountFadedComponents();

    /**
     * Get Faded Component
     *
     * @param component index
     * @return component
     */
    CCoeControl* FadedComponent( TInt aIndex );     
     
public: // From MCoeForegroundObserver
    
    /** 
     * Handles the application coming to the foreground. 
     */
    void HandleGainingForeground();
    
    /** 
     * Handles the application going into the background. 
     */
    void HandleLosingForeground();
     
public: // From MEikCommandObserver

    /**
     * ProcessCommandL
     *
     * @param aCommandId Command Id
     */
    void ProcessCommandL( TInt aCommandId );
    
protected: // From base class MFscContactActionServiceObserver
    
    /**
     * From MFscContactActionServiceObserver.
     * Called when QueryActionsL method is complete.
     */
    void QueryActionsComplete();
        
    /**
     * From MFscContactActionServiceObserver.
     * Called when QueryActionsL method failed.
     * 
     * @param aError An error code of the failure.
     */
    void QueryActionsFailed( TInt aError );
    
    /**
     * From MFscContactActionServiceObserver.
     * Called when ExecuteL method is complete.
     */
    void ExecuteComplete();
       
    /**
     * From MFscContactActionServiceObserver.
     * Called when ExecuteL method failed.
     * 
     * @param aError An error code of the failure.
     */
    void ExecuteFailed( TInt aError );
    

private: // Private constructors

    /**
     * Constructor.
     *
     * @param aParams Construction parameters
     */
    CFscContactActionMenuImpl( 
        const TFscContactActionMenuConstructParameters& aParams );

    /**
     * Second phase constructor.
     *
     * @param aParams Construction parameters
     */
    void ConstructL(
        const TFscContactActionMenuConstructParameters& aParams );

private: // Private methods

    /**
     * Execute Action Menu
     *   ExecuteL opens Action Menu with current item set. Method is
     *   synchronous and it will return when Action Menu is closed.
     *
     * @param aPosition Vertical position where menu is to be openned
     * @param aIndex Index of focused/highlighted item when menu is opened
     */
    void DoExecuteL( 
        TFscContactActionMenuPosition aPosition,
        TInt aIndex );

    /**
     * Dismiss Action Menu
     */
    void DoDismiss();
        
    /**
     * Start menu execution wait
     */
    void StartWait();

    /**
     * Stop menu execution wait
     */
    void StopWait();
    
    /**
     * Show menu's cba
     */
    void ShowMenuCbaL();
        
    /**
     * Hide menu's cba
     */
    void HideMenuCba();
    
    /**
     * Handle item click
     */
     void HandleItemClick();
    
    /**
     * Update fade colors
     */
     void UpdateFadeColors();

private: // data

    /**
     * Menu model
     *  Owned
     */
    CFscContactActionMenuModelImpl*    iModel;

    /**
     * Menu's UI list
     *  Owned
     */
    CFscContactActionMenuList*         iList;
    
    /**
     * Menu's current mode
     */
    TFscContactActionMenuMode          iMode;
    
    /**
     * ExecuteL result code
     */
    TFscActionMenuResult               iMenuResult;
 
    /**
     * Selected item index
     */
    TInt                                iSelectedItemIndex;
    
    /**
     * Error status while action menu is executed
     */
    TInt                                iError;
    
    /*
     * Instant exit flag
     */
    TBool                               iExit;
    
    /**
     * Button group container for menu's softkeys
     *  Owned
     */
    CEikButtonGroupContainer*           iButtonGroupContainer;    
    
    /**
     * Wait loop for ExecuteL
     *  Owned
     */
    CActiveSchedulerWait*               iWait;
    
    /**
     * Popup fader for dialog style fading effect
     */
    TAknPopupFader                      iFader;
    
    /**
     * Text resolver for resolving error texts
     *  Owned
     */
    CTextResolver*                      iTextResolver;
    
    /**
     * Operation observer.
     * Not own.
     */
    MFscContactActionServiceObserver* iObserver;
    
    /**
     * Is action execution finished?
     */
    TBool isExecuteCompleted;

    /**
     * Is action executing.
     */
    TBool iIsActionExecuting;
    
    /**
     * Dummy item returned in case of error.
     */
    CFscContactActionMenuItem* iDummyMenuItem;

    TBool iOpenedFromMR;
    };

#endif // C_FSCCONTACTACTIONMENUIMPL_H