phoneapp/phoneuiview/src/cphonetoolbarcontroller.cpp
changeset 0 5f000ab63145
child 1 838b0a10d15b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneapp/phoneuiview/src/cphonetoolbarcontroller.cpp	Mon Jan 18 20:18:27 2010 +0200
@@ -0,0 +1,412 @@
+/*
+* 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:  Handles the updating of toolbar buttons
+*
+*/
+
+
+#include <eikappui.h>
+#include <eikenv.h>
+#include <eikapp.h>
+#include <eikcolib.h>
+#include <gulicon.h>
+#include <akntoolbar.h>
+#include <aknbutton.h>
+#include <StringLoader.h>
+#include <phoneui.rsg>
+#include <pevirtualengine.h>
+#include <data_caging_path_literals.hrh>
+#include <phoneappcommands.hrh>
+#include <phoneui.mbg>
+
+#include "cphonetoolbarcontroller.h"
+#include "PhoneUI.hrh"
+#include "PhoneRssBase.h"
+#include "TPhoneCmdParamInteger.h"
+#include "TPhoneCmdParamBoolean.h"
+#include "PhoneLogger.h"
+
+
+_LIT ( KPhoneMifFileName, "phoneui.mif" );
+_LIT( KToolbarButtonEmptyStr, "" );
+
+const TInt KNumberOfButtons = 5;
+struct SPhoneToolbarButton
+    {
+    TInt iIconIndex;
+    TInt iMaskIndex;
+    TInt iCommandId;
+    };
+
+const SPhoneToolbarButton bArray[KNumberOfButtons] =
+        { 
+            {  EMbmPhoneuiQgn_indi_dialer_contacts,
+               EMbmPhoneuiQgn_indi_dialer_contacts_mask,
+               EPhoneInCallCmdActivatEPhonebook
+            },
+            {  EMbmPhoneuiQgn_indi_tb_microphone_mute,
+	           EMbmPhoneuiQgn_indi_tb_microphone_mute_mask,
+	           EPhoneInCallCmdMute
+	        }, 
+	        {  EMbmPhoneuiQgn_indi_tb_microphone_unmute,
+	           EMbmPhoneuiQgn_indi_tb_microphone_unmute_mask,
+	           EPhoneInCallCmdUnmute
+	        },
+	        {  EMbmPhoneuiQgn_indi_tb_ihf_on,
+	           EMbmPhoneuiQgn_indi_tb_ihf_on_mask,
+	           EPhoneInCallCmdActivateIhf
+	        },
+	        {  EMbmPhoneuiQgn_indi_tb_handset,
+	           EMbmPhoneuiQgn_indi_tb_handset_mask,
+	           EPhoneInCallCmdHandset
+	        }
+        }; 
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------------------------
+//
+CPhoneToolbarController::CPhoneToolbarController( CCoeEnv& aCoeEnv ):
+    iCoeEnv ( aCoeEnv )   
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// Second phase constructor
+// ---------------------------------------------------------------------------
+//
+void CPhoneToolbarController::ConstructL()
+    {
+    if ( !iToolbar )
+        {
+        iToolbar = CAknToolbar::NewL( R_PHONEUI_TOOLBAR );
+        }
+  
+    CEikAppUiFactory* appUiFactory =
+        static_cast<CEikAppUiFactory*>( CEikonEnv::Static()->AppUiFactory() );  
+    appUiFactory->SetViewFixedToolbar( iToolbar );
+    
+    if( iToolbar )
+        {
+        iToolbar->SetToolbarObserver( 
+                        static_cast<MAknToolbarObserver*>( this ));  
+        iToolbar->SetWithSliding( EFalse );
+        iToolbar->SetCloseOnAllCommands( EFalse );
+        iToolbar->SetFocusing( EFalse );
+        
+        CAknButton* button( NULL );
+
+        for( TInt i = 0; i < KNumberOfButtons; i++ )
+            {
+            TAknsItemID skinId = GetSkinIdL( bArray[i].iCommandId );
+            // Load tooltip text.
+            HBufC* tooltipText;
+            GetTooltipTextL ( bArray[i].iCommandId, tooltipText );  
+            CleanupStack::PushL( tooltipText );      
+         
+            button = CreateButtonLC(
+                bArray[i].iIconIndex, 
+                bArray[i].iMaskIndex, 
+                *tooltipText, 
+                skinId,
+                bArray[i].iCommandId );
+            // Takes ownership of the button                    
+            iToolbar->AddItemL( button, EAknCtButton, bArray[i].iCommandId,0 );
+           
+            CleanupStack::Pop( button );
+            CleanupStack::PopAndDestroy( tooltipText );
+            }
+        }
+    }
+    
+// ---------------------------------------------------------------------------
+// CreateButtonL
+// ---------------------------------------------------------------------------
+//
+CAknButton* CPhoneToolbarController::CreateButtonLC( 
+    TInt aNormalIconId,
+    TInt aNormalMaskId,
+    const TDesC& aTooltipText,
+    const TAknsItemID& aSkinIconId,
+    TInt /*aCommand*/ )
+    {
+    TFileName mifPath( KDriveZ );
+    mifPath.Append( KDC_APP_BITMAP_DIR );
+    mifPath.Append( KPhoneMifFileName );
+
+   
+    CAknButton* button = CAknButton::NewLC( 
+        mifPath,
+        aNormalIconId,
+        aNormalMaskId,
+        -1, -1, // dimmed
+        -1, -1, // pressed
+        -1, -1, // hover
+        KToolbarButtonEmptyStr(),
+        aTooltipText, // help
+        0, // flags
+        0, // state flags
+        aSkinIconId );
+                                     
+    button->SetFocusing( EFalse );
+    button->SetBackground( iToolbar );
+
+    return button;
+    }
+    
+// ---------------------------------------------------------------------------
+// Static constructor
+// ---------------------------------------------------------------------------
+//
+CPhoneToolbarController* CPhoneToolbarController::NewL( CCoeEnv& aCoeEnv )
+    {
+    CPhoneToolbarController* self =  new (ELeave) CPhoneToolbarController( aCoeEnv);
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CPhoneToolbarController::~CPhoneToolbarController()
+    {
+    delete iToolbar;
+    }
+
+// ---------------------------------------------------------------------------
+// UpdateToolbar
+// ---------------------------------------------------------------------------
+//
+void CPhoneToolbarController::UpdateToolbar()
+    {
+    __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneToolbarController::UpdateToolbar()" );
+    // Show 'Mute'/'Unmute' icon
+    iToolbar->HideItem( EPhoneInCallCmdMute, iMuteFlag, EFalse );
+    iToolbar->HideItem( EPhoneInCallCmdUnmute, !iMuteFlag, ETrue );   
+
+    // Show 'Handset'/'Ihf' icon
+    iToolbar->HideItem( EPhoneInCallCmdActivateIhf, iIhfFlag, EFalse );
+    iToolbar->HideItem( EPhoneInCallCmdHandset, !iIhfFlag, ETrue );
+    }   
+
+// ---------------------------------------------------------------------------
+// OfferToolbarEventL
+// ---------------------------------------------------------------------------
+//
+void CPhoneToolbarController::OfferToolbarEventL( TInt aCommand )
+    {
+    __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneToolbarController::OfferToolbarEventL()" );
+    // Forward pressed toolbar button to the framework 
+    // so that we can handle it in active state            
+    static_cast<MEikCommandObserver*>( CEikonEnv::Static()->EikAppUi() )
+       ->ProcessCommandL( aCommand );            
+    } 
+   
+// ---------------------------------------------------------------------------
+// DynInitToolbarL
+// ---------------------------------------------------------------------------
+//
+void CPhoneToolbarController::DynInitToolbarL( TInt aResourceId, 
+                                              CAknToolbar* /*aToolbar*/ )
+    { 
+    if ( aResourceId == R_PHONEUI_TOOLBAR )
+        {
+        UpdateToolbar();
+        }     
+    }
+
+// ---------------------------------------------------------------------------
+// GetTooltipText
+//
+// Tooltip texts for toolbar buttons
+// ---------------------------------------------------------------------------
+//
+void  CPhoneToolbarController::GetTooltipTextL( TInt aCommandId, HBufC*& aText ) 
+    {
+    TInt resourceId = 0;
+    switch( aCommandId )
+        {                     
+        case EPhoneInCallCmdActivatEPhonebook:
+            resourceId = R_PHONEUI_TOOLTIP_CONTACTS;
+            break; 
+            
+        case EPhoneInCallCmdMute:
+            resourceId = R_PHONEUI_TOOLTIP_MUTE;
+            break;
+            
+        case EPhoneInCallCmdActivateIhf:
+            resourceId = R_PHONEUI_TOOLTIP_LOUDSPEAKER;
+            break;
+            
+        case EPhoneInCallCmdUnmute:
+            resourceId = R_PHONEUI_TOOLTIP_UNMUTE;
+            break;
+            
+        case EPhoneInCallCmdHandset:
+            resourceId = R_PHONEUI_TOOLTIP_HANDSET;
+            break;
+            
+        default:
+            aText = KNullDesC().Alloc();
+            break;
+        }
+        
+    if( resourceId )
+        {
+        aText = StringLoader::LoadL( resourceId, &iCoeEnv );
+        }
+        
+    }
+
+// ---------------------------------------------------------------------------
+TAknsItemID CPhoneToolbarController::GetSkinIdL( TInt aCommandId ) 
+    {
+    TAknsItemID skinId = KAknsIIDNone;
+    switch( aCommandId )
+        {                       
+        case EPhoneInCallCmdActivatEPhonebook:
+            skinId = KAknsIIDQgnIndiDialerContacts;
+            break; 
+        case EPhoneInCallCmdMute:
+            skinId = KAknsIIDQgnIndiButtonMuteMic;
+            break;
+        case EPhoneInCallCmdActivateIhf:
+            skinId = KAknsIIDQgnIndiButtonLoudspeaker;
+            break;
+        case EPhoneInCallCmdUnmute:
+            skinId = KAknsIIDQgnIndiButtonUnmuteMic;
+            break;
+        case EPhoneInCallCmdHandset:
+            skinId = KAknsIIDQgnIndiButtonHandset;
+            break;
+        default:
+            skinId = KAknsIIDNone;
+            break;
+        }
+    return skinId;        
+    }
+// ShowToolbar
+//
+// ---------------------------------------------------------------------------
+//
+void CPhoneToolbarController::ShowToolbar()
+    {
+    __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneToolbarController::ShowToolbar()" );
+    if ( iToolbar )
+        {
+        if ( iToolbar->IsToolbarDisabled() )
+            {
+            TRAP_IGNORE(iToolbar->DisableToolbarL( EFalse ));
+            }
+        UpdateToolbar();
+        iToolbar->HideItemsAndDrawOnlyBackground( EFalse );
+        iToolbar->SetToolbarVisibility( ETrue, EFalse );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// HideToolbar
+//
+// ---------------------------------------------------------------------------
+//
+void CPhoneToolbarController::HideToolbar()
+    {
+    __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneToolbarController::HideToolbar()" );
+    if ( iToolbar )
+        {
+        if( iToolbar->IsShown() )
+            {
+            iToolbar->HideItemsAndDrawOnlyBackground( ETrue );
+            }
+        else if ( iToolbar->IsToolbarDisabled() )
+            {
+            TRAP_IGNORE(iToolbar->DisableToolbarL( EFalse ));
+            iToolbar->HideItemsAndDrawOnlyBackground( ETrue );
+            iToolbar->SetToolbarVisibility( ETrue, EFalse );
+            }
+        }        
+    }
+
+// ---------------------------------------------------------
+// CPhoneToolbarController::SetMuteFlag
+// ---------------------------------------------------------
+//
+void CPhoneToolbarController::SetMuteFlag( TPhoneCommandParam* aCommandParam )
+    {
+    __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneToolbarController::SetMuteFlag()" );
+    // Check is the given parameter valid
+    if ( aCommandParam->ParamId() == TPhoneCommandParam::EPhoneParamIdBoolean )
+        {
+        TPhoneCmdParamBoolean* muteFlag = 
+            static_cast<TPhoneCmdParamBoolean*>( aCommandParam );
+
+        iMuteFlag = muteFlag->Boolean();
+        UpdateToolbar();
+        }
+    }
+
+// ---------------------------------------------------------
+// CPhoneToolbarController::SetIhfFlag
+// ---------------------------------------------------------
+//
+void CPhoneToolbarController::SetIhfFlag( TPhoneCommandParam* aCommandParam )
+    {
+    __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneToolbarController::SetIhfFlag()" );
+    // Check is the given parameter valid
+    if ( aCommandParam->ParamId() == TPhoneCommandParam::EPhoneParamIdBoolean )
+        {
+        TPhoneCmdParamBoolean* ihfFlag = 
+            static_cast<TPhoneCmdParamBoolean*>( aCommandParam );
+
+        iIhfFlag = ihfFlag->Boolean();
+        UpdateToolbar();
+        }
+    }
+
+// ---------------------------------------------------------
+// CPhoneToolbarController::DimToolbar
+// ---------------------------------------------------------
+//
+void CPhoneToolbarController::DimToolbar( const TBool aDimmed )
+    {
+ //   __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneToolbarController::DimToolbar()" );
+
+    // Dim/Undim all toolbar buttons 
+    iToolbar->SetItemDimmed( EPhoneInCallCmdMute, aDimmed, ETrue );
+    iToolbar->SetItemDimmed( EPhoneInCallCmdUnmute, aDimmed, ETrue );
+    iToolbar->SetItemDimmed( EPhoneInCallCmdActivatEPhonebook, aDimmed, ETrue );
+    iToolbar->SetItemDimmed( EPhoneInCallCmdActivateIhf, aDimmed, ETrue );
+    iToolbar->SetItemDimmed( EPhoneInCallCmdHandset, aDimmed, ETrue );        
+    }
+
+// ---------------------------------------------------------
+// CPhoneToolbarController::SetToolbarButtonDimmed
+// ---------------------------------------------------------
+//
+void CPhoneToolbarController::SetToolbarButtonDimmed( const TInt aCommandId, const TBool aDimmed )
+    {
+ // __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneToolbarController::SetToolbarButtonDimmed()" );
+
+    // Dim toolbar button 
+    iToolbar->SetItemDimmed( aCommandId, aDimmed, ETrue );
+    }
+
+// END
+