phoneapp/phoneuiview/src/cphonetoolbarcontroller.cpp
changeset 0 5f000ab63145
child 1 838b0a10d15b
equal deleted inserted replaced
-1:000000000000 0:5f000ab63145
       
     1 /*
       
     2 * Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies). 
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:  Handles the updating of toolbar buttons
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 #include <eikappui.h>
       
    20 #include <eikenv.h>
       
    21 #include <eikapp.h>
       
    22 #include <eikcolib.h>
       
    23 #include <gulicon.h>
       
    24 #include <akntoolbar.h>
       
    25 #include <aknbutton.h>
       
    26 #include <StringLoader.h>
       
    27 #include <phoneui.rsg>
       
    28 #include <pevirtualengine.h>
       
    29 #include <data_caging_path_literals.hrh>
       
    30 #include <phoneappcommands.hrh>
       
    31 #include <phoneui.mbg>
       
    32 
       
    33 #include "cphonetoolbarcontroller.h"
       
    34 #include "PhoneUI.hrh"
       
    35 #include "PhoneRssBase.h"
       
    36 #include "TPhoneCmdParamInteger.h"
       
    37 #include "TPhoneCmdParamBoolean.h"
       
    38 #include "PhoneLogger.h"
       
    39 
       
    40 
       
    41 _LIT ( KPhoneMifFileName, "phoneui.mif" );
       
    42 _LIT( KToolbarButtonEmptyStr, "" );
       
    43 
       
    44 const TInt KNumberOfButtons = 5;
       
    45 struct SPhoneToolbarButton
       
    46     {
       
    47     TInt iIconIndex;
       
    48     TInt iMaskIndex;
       
    49     TInt iCommandId;
       
    50     };
       
    51 
       
    52 const SPhoneToolbarButton bArray[KNumberOfButtons] =
       
    53         { 
       
    54             {  EMbmPhoneuiQgn_indi_dialer_contacts,
       
    55                EMbmPhoneuiQgn_indi_dialer_contacts_mask,
       
    56                EPhoneInCallCmdActivatEPhonebook
       
    57             },
       
    58             {  EMbmPhoneuiQgn_indi_tb_microphone_mute,
       
    59 	           EMbmPhoneuiQgn_indi_tb_microphone_mute_mask,
       
    60 	           EPhoneInCallCmdMute
       
    61 	        }, 
       
    62 	        {  EMbmPhoneuiQgn_indi_tb_microphone_unmute,
       
    63 	           EMbmPhoneuiQgn_indi_tb_microphone_unmute_mask,
       
    64 	           EPhoneInCallCmdUnmute
       
    65 	        },
       
    66 	        {  EMbmPhoneuiQgn_indi_tb_ihf_on,
       
    67 	           EMbmPhoneuiQgn_indi_tb_ihf_on_mask,
       
    68 	           EPhoneInCallCmdActivateIhf
       
    69 	        },
       
    70 	        {  EMbmPhoneuiQgn_indi_tb_handset,
       
    71 	           EMbmPhoneuiQgn_indi_tb_handset_mask,
       
    72 	           EPhoneInCallCmdHandset
       
    73 	        }
       
    74         }; 
       
    75 
       
    76 
       
    77 // ======== MEMBER FUNCTIONS ========
       
    78 
       
    79 // ---------------------------------------------------------------------------
       
    80 // Constructor
       
    81 // ---------------------------------------------------------------------------
       
    82 //
       
    83 CPhoneToolbarController::CPhoneToolbarController( CCoeEnv& aCoeEnv ):
       
    84     iCoeEnv ( aCoeEnv )   
       
    85     {
       
    86     }
       
    87 
       
    88 // ---------------------------------------------------------------------------
       
    89 // Second phase constructor
       
    90 // ---------------------------------------------------------------------------
       
    91 //
       
    92 void CPhoneToolbarController::ConstructL()
       
    93     {
       
    94     if ( !iToolbar )
       
    95         {
       
    96         iToolbar = CAknToolbar::NewL( R_PHONEUI_TOOLBAR );
       
    97         }
       
    98   
       
    99     CEikAppUiFactory* appUiFactory =
       
   100         static_cast<CEikAppUiFactory*>( CEikonEnv::Static()->AppUiFactory() );  
       
   101     appUiFactory->SetViewFixedToolbar( iToolbar );
       
   102     
       
   103     if( iToolbar )
       
   104         {
       
   105         iToolbar->SetToolbarObserver( 
       
   106                         static_cast<MAknToolbarObserver*>( this ));  
       
   107         iToolbar->SetWithSliding( EFalse );
       
   108         iToolbar->SetCloseOnAllCommands( EFalse );
       
   109         iToolbar->SetFocusing( EFalse );
       
   110         
       
   111         CAknButton* button( NULL );
       
   112 
       
   113         for( TInt i = 0; i < KNumberOfButtons; i++ )
       
   114             {
       
   115             TAknsItemID skinId = GetSkinIdL( bArray[i].iCommandId );
       
   116             // Load tooltip text.
       
   117             HBufC* tooltipText;
       
   118             GetTooltipTextL ( bArray[i].iCommandId, tooltipText );  
       
   119             CleanupStack::PushL( tooltipText );      
       
   120          
       
   121             button = CreateButtonLC(
       
   122                 bArray[i].iIconIndex, 
       
   123                 bArray[i].iMaskIndex, 
       
   124                 *tooltipText, 
       
   125                 skinId,
       
   126                 bArray[i].iCommandId );
       
   127             // Takes ownership of the button                    
       
   128             iToolbar->AddItemL( button, EAknCtButton, bArray[i].iCommandId,0 );
       
   129            
       
   130             CleanupStack::Pop( button );
       
   131             CleanupStack::PopAndDestroy( tooltipText );
       
   132             }
       
   133         }
       
   134     }
       
   135     
       
   136 // ---------------------------------------------------------------------------
       
   137 // CreateButtonL
       
   138 // ---------------------------------------------------------------------------
       
   139 //
       
   140 CAknButton* CPhoneToolbarController::CreateButtonLC( 
       
   141     TInt aNormalIconId,
       
   142     TInt aNormalMaskId,
       
   143     const TDesC& aTooltipText,
       
   144     const TAknsItemID& aSkinIconId,
       
   145     TInt /*aCommand*/ )
       
   146     {
       
   147     TFileName mifPath( KDriveZ );
       
   148     mifPath.Append( KDC_APP_BITMAP_DIR );
       
   149     mifPath.Append( KPhoneMifFileName );
       
   150 
       
   151    
       
   152     CAknButton* button = CAknButton::NewLC( 
       
   153         mifPath,
       
   154         aNormalIconId,
       
   155         aNormalMaskId,
       
   156         -1, -1, // dimmed
       
   157         -1, -1, // pressed
       
   158         -1, -1, // hover
       
   159         KToolbarButtonEmptyStr(),
       
   160         aTooltipText, // help
       
   161         0, // flags
       
   162         0, // state flags
       
   163         aSkinIconId );
       
   164                                      
       
   165     button->SetFocusing( EFalse );
       
   166     button->SetBackground( iToolbar );
       
   167 
       
   168     return button;
       
   169     }
       
   170     
       
   171 // ---------------------------------------------------------------------------
       
   172 // Static constructor
       
   173 // ---------------------------------------------------------------------------
       
   174 //
       
   175 CPhoneToolbarController* CPhoneToolbarController::NewL( CCoeEnv& aCoeEnv )
       
   176     {
       
   177     CPhoneToolbarController* self =  new (ELeave) CPhoneToolbarController( aCoeEnv);
       
   178     CleanupStack::PushL( self );
       
   179     self->ConstructL();
       
   180     CleanupStack::Pop( self );
       
   181     return self;
       
   182     }
       
   183 
       
   184 // ---------------------------------------------------------------------------
       
   185 // Destructor
       
   186 // ---------------------------------------------------------------------------
       
   187 //
       
   188 CPhoneToolbarController::~CPhoneToolbarController()
       
   189     {
       
   190     delete iToolbar;
       
   191     }
       
   192 
       
   193 // ---------------------------------------------------------------------------
       
   194 // UpdateToolbar
       
   195 // ---------------------------------------------------------------------------
       
   196 //
       
   197 void CPhoneToolbarController::UpdateToolbar()
       
   198     {
       
   199     __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneToolbarController::UpdateToolbar()" );
       
   200     // Show 'Mute'/'Unmute' icon
       
   201     iToolbar->HideItem( EPhoneInCallCmdMute, iMuteFlag, EFalse );
       
   202     iToolbar->HideItem( EPhoneInCallCmdUnmute, !iMuteFlag, ETrue );   
       
   203 
       
   204     // Show 'Handset'/'Ihf' icon
       
   205     iToolbar->HideItem( EPhoneInCallCmdActivateIhf, iIhfFlag, EFalse );
       
   206     iToolbar->HideItem( EPhoneInCallCmdHandset, !iIhfFlag, ETrue );
       
   207     }   
       
   208 
       
   209 // ---------------------------------------------------------------------------
       
   210 // OfferToolbarEventL
       
   211 // ---------------------------------------------------------------------------
       
   212 //
       
   213 void CPhoneToolbarController::OfferToolbarEventL( TInt aCommand )
       
   214     {
       
   215     __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneToolbarController::OfferToolbarEventL()" );
       
   216     // Forward pressed toolbar button to the framework 
       
   217     // so that we can handle it in active state            
       
   218     static_cast<MEikCommandObserver*>( CEikonEnv::Static()->EikAppUi() )
       
   219        ->ProcessCommandL( aCommand );            
       
   220     } 
       
   221    
       
   222 // ---------------------------------------------------------------------------
       
   223 // DynInitToolbarL
       
   224 // ---------------------------------------------------------------------------
       
   225 //
       
   226 void CPhoneToolbarController::DynInitToolbarL( TInt aResourceId, 
       
   227                                               CAknToolbar* /*aToolbar*/ )
       
   228     { 
       
   229     if ( aResourceId == R_PHONEUI_TOOLBAR )
       
   230         {
       
   231         UpdateToolbar();
       
   232         }     
       
   233     }
       
   234 
       
   235 // ---------------------------------------------------------------------------
       
   236 // GetTooltipText
       
   237 //
       
   238 // Tooltip texts for toolbar buttons
       
   239 // ---------------------------------------------------------------------------
       
   240 //
       
   241 void  CPhoneToolbarController::GetTooltipTextL( TInt aCommandId, HBufC*& aText ) 
       
   242     {
       
   243     TInt resourceId = 0;
       
   244     switch( aCommandId )
       
   245         {                     
       
   246         case EPhoneInCallCmdActivatEPhonebook:
       
   247             resourceId = R_PHONEUI_TOOLTIP_CONTACTS;
       
   248             break; 
       
   249             
       
   250         case EPhoneInCallCmdMute:
       
   251             resourceId = R_PHONEUI_TOOLTIP_MUTE;
       
   252             break;
       
   253             
       
   254         case EPhoneInCallCmdActivateIhf:
       
   255             resourceId = R_PHONEUI_TOOLTIP_LOUDSPEAKER;
       
   256             break;
       
   257             
       
   258         case EPhoneInCallCmdUnmute:
       
   259             resourceId = R_PHONEUI_TOOLTIP_UNMUTE;
       
   260             break;
       
   261             
       
   262         case EPhoneInCallCmdHandset:
       
   263             resourceId = R_PHONEUI_TOOLTIP_HANDSET;
       
   264             break;
       
   265             
       
   266         default:
       
   267             aText = KNullDesC().Alloc();
       
   268             break;
       
   269         }
       
   270         
       
   271     if( resourceId )
       
   272         {
       
   273         aText = StringLoader::LoadL( resourceId, &iCoeEnv );
       
   274         }
       
   275         
       
   276     }
       
   277 
       
   278 // ---------------------------------------------------------------------------
       
   279 TAknsItemID CPhoneToolbarController::GetSkinIdL( TInt aCommandId ) 
       
   280     {
       
   281     TAknsItemID skinId = KAknsIIDNone;
       
   282     switch( aCommandId )
       
   283         {                       
       
   284         case EPhoneInCallCmdActivatEPhonebook:
       
   285             skinId = KAknsIIDQgnIndiDialerContacts;
       
   286             break; 
       
   287         case EPhoneInCallCmdMute:
       
   288             skinId = KAknsIIDQgnIndiButtonMuteMic;
       
   289             break;
       
   290         case EPhoneInCallCmdActivateIhf:
       
   291             skinId = KAknsIIDQgnIndiButtonLoudspeaker;
       
   292             break;
       
   293         case EPhoneInCallCmdUnmute:
       
   294             skinId = KAknsIIDQgnIndiButtonUnmuteMic;
       
   295             break;
       
   296         case EPhoneInCallCmdHandset:
       
   297             skinId = KAknsIIDQgnIndiButtonHandset;
       
   298             break;
       
   299         default:
       
   300             skinId = KAknsIIDNone;
       
   301             break;
       
   302         }
       
   303     return skinId;        
       
   304     }
       
   305 // ShowToolbar
       
   306 //
       
   307 // ---------------------------------------------------------------------------
       
   308 //
       
   309 void CPhoneToolbarController::ShowToolbar()
       
   310     {
       
   311     __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneToolbarController::ShowToolbar()" );
       
   312     if ( iToolbar )
       
   313         {
       
   314         if ( iToolbar->IsToolbarDisabled() )
       
   315             {
       
   316             TRAP_IGNORE(iToolbar->DisableToolbarL( EFalse ));
       
   317             }
       
   318         UpdateToolbar();
       
   319         iToolbar->HideItemsAndDrawOnlyBackground( EFalse );
       
   320         iToolbar->SetToolbarVisibility( ETrue, EFalse );
       
   321         }
       
   322     }
       
   323 
       
   324 // ---------------------------------------------------------------------------
       
   325 // HideToolbar
       
   326 //
       
   327 // ---------------------------------------------------------------------------
       
   328 //
       
   329 void CPhoneToolbarController::HideToolbar()
       
   330     {
       
   331     __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneToolbarController::HideToolbar()" );
       
   332     if ( iToolbar )
       
   333         {
       
   334         if( iToolbar->IsShown() )
       
   335             {
       
   336             iToolbar->HideItemsAndDrawOnlyBackground( ETrue );
       
   337             }
       
   338         else if ( iToolbar->IsToolbarDisabled() )
       
   339             {
       
   340             TRAP_IGNORE(iToolbar->DisableToolbarL( EFalse ));
       
   341             iToolbar->HideItemsAndDrawOnlyBackground( ETrue );
       
   342             iToolbar->SetToolbarVisibility( ETrue, EFalse );
       
   343             }
       
   344         }        
       
   345     }
       
   346 
       
   347 // ---------------------------------------------------------
       
   348 // CPhoneToolbarController::SetMuteFlag
       
   349 // ---------------------------------------------------------
       
   350 //
       
   351 void CPhoneToolbarController::SetMuteFlag( TPhoneCommandParam* aCommandParam )
       
   352     {
       
   353     __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneToolbarController::SetMuteFlag()" );
       
   354     // Check is the given parameter valid
       
   355     if ( aCommandParam->ParamId() == TPhoneCommandParam::EPhoneParamIdBoolean )
       
   356         {
       
   357         TPhoneCmdParamBoolean* muteFlag = 
       
   358             static_cast<TPhoneCmdParamBoolean*>( aCommandParam );
       
   359 
       
   360         iMuteFlag = muteFlag->Boolean();
       
   361         UpdateToolbar();
       
   362         }
       
   363     }
       
   364 
       
   365 // ---------------------------------------------------------
       
   366 // CPhoneToolbarController::SetIhfFlag
       
   367 // ---------------------------------------------------------
       
   368 //
       
   369 void CPhoneToolbarController::SetIhfFlag( TPhoneCommandParam* aCommandParam )
       
   370     {
       
   371     __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneToolbarController::SetIhfFlag()" );
       
   372     // Check is the given parameter valid
       
   373     if ( aCommandParam->ParamId() == TPhoneCommandParam::EPhoneParamIdBoolean )
       
   374         {
       
   375         TPhoneCmdParamBoolean* ihfFlag = 
       
   376             static_cast<TPhoneCmdParamBoolean*>( aCommandParam );
       
   377 
       
   378         iIhfFlag = ihfFlag->Boolean();
       
   379         UpdateToolbar();
       
   380         }
       
   381     }
       
   382 
       
   383 // ---------------------------------------------------------
       
   384 // CPhoneToolbarController::DimToolbar
       
   385 // ---------------------------------------------------------
       
   386 //
       
   387 void CPhoneToolbarController::DimToolbar( const TBool aDimmed )
       
   388     {
       
   389  //   __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneToolbarController::DimToolbar()" );
       
   390 
       
   391     // Dim/Undim all toolbar buttons 
       
   392     iToolbar->SetItemDimmed( EPhoneInCallCmdMute, aDimmed, ETrue );
       
   393     iToolbar->SetItemDimmed( EPhoneInCallCmdUnmute, aDimmed, ETrue );
       
   394     iToolbar->SetItemDimmed( EPhoneInCallCmdActivatEPhonebook, aDimmed, ETrue );
       
   395     iToolbar->SetItemDimmed( EPhoneInCallCmdActivateIhf, aDimmed, ETrue );
       
   396     iToolbar->SetItemDimmed( EPhoneInCallCmdHandset, aDimmed, ETrue );        
       
   397     }
       
   398 
       
   399 // ---------------------------------------------------------
       
   400 // CPhoneToolbarController::SetToolbarButtonDimmed
       
   401 // ---------------------------------------------------------
       
   402 //
       
   403 void CPhoneToolbarController::SetToolbarButtonDimmed( const TInt aCommandId, const TBool aDimmed )
       
   404     {
       
   405  // __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneToolbarController::SetToolbarButtonDimmed()" );
       
   406 
       
   407     // Dim toolbar button 
       
   408     iToolbar->SetItemDimmed( aCommandId, aDimmed, ETrue );
       
   409     }
       
   410 
       
   411 // END
       
   412