voipplugins/svtcallmenu/src/svtcallmenu.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Mon, 18 Jan 2010 20:12:36 +0200
changeset 0 a4daefaec16c
permissions -rw-r--r--
Revision: 201001 Kit: 201003

/*
* 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:  Main class for svtcallmenu.
*
*/


#include "svtcallmenu.h"
#include "svtcallstatehandler.h"

#include <eikmenup.h>
#include <phoneappcommands.hrh>
#include <phoneappvoipcommands.hrh>

// ======== MEMBER FUNCTIONS ========

// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
//
CSvtCallMenu::CSvtCallMenu()
    {
    }

  
// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
//
CSvtCallMenu* CSvtCallMenu::NewL()
    {
    CSvtCallMenu* self = new ( ELeave ) CSvtCallMenu;
    return self;
    }


// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
//
CSvtCallMenu::~CSvtCallMenu()
    {
    delete iCallStateHandler;
    }
      
       
// ---------------------------------------------------------------------------
// Modifys call menu
// ---------------------------------------------------------------------------
//
void CSvtCallMenu::ModifyExtensionsCallMenuL( 
        const RArray<CTelMenuExtension::TCallInfo>& aCallArray,
        CEikMenuPane& aMenuPane )
    {
    CreateCallStateHandlerL( aCallArray );
    CEikMenuPane*  menuPane= &aMenuPane;
    RArray<TInt> menuItemArray;
    CleanupClosePushL( menuItemArray );

    // Menu items to array
    TInt menuItemCount = menuPane->NumberOfItemsInPane();
    for ( TInt i( 0 ); i < menuItemCount; i++ )
        {
        menuItemArray.AppendL( menuPane->MenuItemCommandId( i ) );
        }

    // Menu items to be deleted 
    for ( TInt i( 0 ); i < menuItemArray.Count(); i++ )
        {
        switch( menuItemArray[ i ] )
            {
            case EPhoneInCallCmdUnattendedTransfer:
                {
                if ( !iCallStateHandler->FeatureSupported( 
                       CSvtCallStateHandler::ESvmFeatureUnattendedTransfer ) )
                    {
                    menuPane->DeleteMenuItem( menuItemArray[ i ] ); 
                    }
                break;
                }
            case EPhoneInCallCmdSwitchToVideo:
            case EPhoneInCallCmdCreateConference:
            case EPhoneInCallCmdConferenceMenu:
            case EPhoneInCallCmdJoin:
            case EPhoneCallComingCmdSoftReject:
            case EPhoneInCallCmdSendToCallerMenu:
                    {
                    // SIP voip doesn't support above features
                    // Remove those items from the menu
                    menuPane->DeleteMenuItem( menuItemArray[ i ] ); 
                    }
                break;
            default: 
                break;
            }
        }
    
    CleanupStack::PopAndDestroy( &menuItemArray );    

    }

// ---------------------------------------------------------------------------
// Modifys touch pane
// ---------------------------------------------------------------------------
//
void CSvtCallMenu::ModifyExtensionsTouchPaneButtonsL( 
        const RArray<CTelMenuExtension::TCallInfo>& /*aCallArray*/,
        MTelTouchPaneExtension& aTouchPane )
    {  
    TInt buttonCount = aTouchPane.NumberOfButtonsInPane();
        
    for ( TInt i=0; i < buttonCount; i++ )    
        {
        TInt commandId = aTouchPane.ButtonCommandId( i );
    
        switch ( commandId )
            {
            case EPhoneInCallCmdConferenceMenu:
            case EPhoneInCallCmdCreateConference:
            case EPhoneInCallCmdJoin:
                {
                // SIP VoIP not support conference -> set item dimmed
                aTouchPane.SetButtonDimmed( commandId, ETrue );         
                break;  
                }
            default:
                break;                    
            } // switch
        } // for        
    }
          
// ---------------------------------------------------------------------------
// Handles custom menu commands.
// ---------------------------------------------------------------------------
//
TBool CSvtCallMenu::HandleCommandL( TInt /*aCommand*/ )
    {        
    return EFalse;
    }
    
// ---------------------------------------------------------------------------
// Creates call state handler
// ---------------------------------------------------------------------------
//
void CSvtCallMenu::CreateCallStateHandlerL(
        const RArray<CTelMenuExtension::TCallInfo>& aCallArray )
    {
    if ( iCallStateHandler )
        {
        delete iCallStateHandler;
        iCallStateHandler = NULL;
        }
    
    iCallStateHandler = CSvtCallStateHandler::NewL( aCallArray );
    }