basiclocationinfodisplay/blid/ui/src/CBlidBaseContainer.cpp
author Pat Downey <patd@symbian.org>
Wed, 01 Sep 2010 12:31:27 +0100
branchRCL_3
changeset 18 870918037e16
parent 0 522cd55cc3d7
permissions -rw-r--r--
Revert incorrect RCL_3 drop: Revision: 201033 Kit: 201035

/*
* Copyright (c) 2005 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:  Provides Blid request container class methods.
*
*/


// INCLUDE FILES
#include <akncontext.h> 
#include <aknnavide.h> 
#include <eikspane.h> 
#include <barsread.h> 
#include <akntabgrp.h>
#include <AknIconArray.h>
#include <gulicon.h>
#include <StringLoader.h> 
#include <akntitle.h> 
#include <eiklbx.h> 
#include <avkon.hrh>
#include <coehelp.h>
#include <AknsUtils.h>
#include <akntabgrp.h>
#include <blid.mbg>
#include "CBlidBaseContainer.h"
#include "MKeyProcessor.h"
#include "BlidUID.h"
#include "bliduiconsts.h"
#include "Blidutils.h"
#include "Blid.hrh"
#include "CBlidAppUi.h"

TBool CBlidBaseContainer::iGPSAvailability = EFalse;
// ================= MEMBER FUNCTIONS =======================
// ----------------------------------------------------
// CBlidBaseContainer::CBlidBaseContainer
// First phase constructor, can not leave
// ----------------------------------------------------
//
CBlidBaseContainer::CBlidBaseContainer(
    MKeyProcessor& aKeyProcessor,
    const TDesC& aHelpContext )
    :iKeyProcessor(aKeyProcessor)
    {
    iContextName = aHelpContext;
    }

// ----------------------------------------------------
// CBlidBaseContainer::~CBlidBaseContainer
// Destructor, frees allocated resources
// ----------------------------------------------------
//
CBlidBaseContainer::~CBlidBaseContainer()
    {
    }

// ----------------------------------------------------
// CBlidBaseContainer::ActivateTabL
// Activates a tab specified bt tab id
// ----------------------------------------------------
//
void CBlidBaseContainer::ActivateTabL( 
                         CAknNavigationDecorator& aNaviDecorator,
                         TInt aTabId )
    {
    CEikStatusPane* sp = iEikonEnv->AppUiFactory()->StatusPane();    
    CAknNavigationControlContainer* naviPane =
        static_cast<CAknNavigationControlContainer*>(
        sp->ControlL(TUid::Uid(EEikStatusPaneUidNavi)));
    CAknTabGroup* tabGroup = static_cast<CAknTabGroup*>( 
        aNaviDecorator.DecoratedControl() );
    tabGroup->SetActiveTabById( aTabId );
    naviPane->PushL( aNaviDecorator );
    }


// ----------------------------------------------------
// CBlidBaseContainer::GetHelpContext
// Get the help context for the application
// ----------------------------------------------------
//
void CBlidBaseContainer::GetHelpContext( TCoeHelpContext& aContext ) const
    {
    aContext.iContext = iContextName;
    aContext.iMajor = TUid::Uid(KBLIDUID3);
    }

// ----------------------------------------------------
// CBlidBaseContainer::OfferKeyEventL
// Handles the key event
// ----------------------------------------------------
//
TKeyResponse CBlidBaseContainer::OfferKeyEventL(
                    const TKeyEvent& aKeyEvent,
                    TEventCode aType)
    {
    CEikStatusPane* sp = StatusPane();
    // Fetch pointer to the default navi pane control
    CAknNavigationControlContainer* naviPane = 
        static_cast<CAknNavigationControlContainer*>(sp->ControlL( 
        TUid::Uid(EEikStatusPaneUidNavi)));
    CAknNavigationDecorator* naviDecorator = naviPane->Top();

    // Check if navigation pane controls exists, because decorator does 
    // not exist in every cases. E.g. after contact fetch in "new rule" 
    // command operation naviDecorator is null. 
    if ( naviDecorator && naviDecorator->ControlType() == 
        CAknNavigationDecorator::ETabGroup )
        {
        if ( naviDecorator->DecoratedControl()->OfferKeyEventL( 
            aKeyEvent, aType ) == EKeyWasConsumed )
            {
            return EKeyWasConsumed;
            }
        }    

    if ( iKeyProcessor.ProcessKeyEventL( aKeyEvent, aType ) == 
        EKeyWasConsumed )
        {
        return EKeyWasConsumed;
        }

    for ( TInt i = 0; i < CountComponentControls(); i++ )
        {
        if ( ComponentControl(i)->OfferKeyEventL( aKeyEvent, aType ) == 
            EKeyWasConsumed )
            {
            return EKeyWasConsumed;
            }
        }
    
    return EKeyWasNotConsumed;    
    }

// ----------------------------------------------------
// CBlidBaseContainer::HandleResourceChange
// Handles the change in app resource
// ----------------------------------------------------
//
void CBlidBaseContainer::HandleResourceChange(TInt aType)
    {
    CCoeControl::HandleResourceChange(aType);
    if( aType == KAknsMessageSkinChange )
        {        
        static_cast<CBlidAppUi*>(iCoeEnv->AppUi())->SkinChange();
        }
    }

// ----------------------------------------------------
// CBlidBaseContainer::CreateNaviPaneL
// Creates the navigation pane
// ----------------------------------------------------
//
CAknNavigationDecorator* CBlidBaseContainer::CreateNaviPaneL( 
                                             TBool aDefaultNaviPane )
    {    
    CEikStatusPane* sp = StatusPane();
    if( !sp )
    	{
    	User::Leave( KErrGeneral );
    	}
    // Fetch pointer to the default navi pane control
    CAknNavigationControlContainer* naviPane = 
        static_cast<CAknNavigationControlContainer*>(sp->ControlL( 
        TUid::Uid(EEikStatusPaneUidNavi)));
    if( !naviPane )
    	{
    	User::Leave( KErrGeneral );
    	}
    CAknNavigationDecorator* decorator = NULL;
    if ( aDefaultNaviPane ) // dummy tab
        {        
        naviPane->PushDefaultL(EFalse);
        }
    else
        {              
        decorator = naviPane->CreateTabGroupL(iKeyProcessor.TabObserver());
        decorator->SetControlType( CAknNavigationDecorator::ETabGroup );
        CAknTabGroup* tabGroup = 
        static_cast< CAknTabGroup* > ( decorator->DecoratedControl() );        
        AddTabsL( *tabGroup );        
        }
    return decorator;
    }

// ----------------------------------------------------
// CBlidBaseContainer::AddIconL
// Add icon
// ----------------------------------------------------
//
void CBlidBaseContainer::AddIconL
        ( CAknIconArray* aIcons,
          const TAknsItemID aSkinID,
          const TDesC& aIconFileWithPath,
          TInt aIconGraphicsIndex,
          TInt aIconGraphicsMaskIndex )
    {
    CFbsBitmap *bitmap = NULL;    
    CFbsBitmap* mask = NULL; 
    MAknsSkinInstance* skin = AknsUtils::SkinInstance();
    AknsUtils::CreateIconLC( skin,
                            aSkinID,
                            bitmap,
                            mask,
                            aIconFileWithPath,
                            aIconGraphicsIndex,
                            aIconGraphicsMaskIndex );
    
    // Append it to icons array
	CGulIcon* icon = CGulIcon::NewL( bitmap, mask );
    CleanupStack::Pop( 2 ); // mask, bitmap. icon has now ownership
	CleanupStack::PushL( icon );
	aIcons->AppendL( icon );
    CleanupStack::Pop( ); // icon

    }

// ----------------------------------------------------
// CBlidBaseContainer::MakeTitleL
// Sets the title to text specified by a resource
// ----------------------------------------------------
//
void CBlidBaseContainer::MakeTitleL( TInt aResourceText )
    {
    HBufC* buf = StringLoader::LoadLC(aResourceText);       
    CAknTitlePane* title = static_cast<CAknTitlePane*>( StatusPane()->
                            ControlL( TUid::Uid( EEikStatusPaneUidTitle ) ) );
    CleanupStack::Pop(); //buf
    title->SetText(buf); // Takes ownership of buf
    }

// ----------------------------------------------------
// CBlidBaseContainer::MakeEmptyTextListBoxL
// 
// ----------------------------------------------------
//
void CBlidBaseContainer::MakeEmptyTextListBoxL( 
                CEikListBox* aListBox,
                TInt aResourceText )
    {
    HBufC* textFromResourceFile;
    textFromResourceFile = 
        StringLoader::LoadLC( aResourceText, iCoeEnv );        
    aListBox->View()->SetListEmptyTextL( *textFromResourceFile );
    CleanupStack::PopAndDestroy();  // textFromResourceFile.
    }

// ----------------------------------------------------
// CBlidBaseContainer::StatusPane
// Returns the status pane
// ----------------------------------------------------
//
CEikStatusPane* CBlidBaseContainer::StatusPane()
    {
    return iEikonEnv->AppUiFactory()->StatusPane();
    }

// ----------------------------------------------------
// CBlidBaseContainer::AddTabsL
// Adds the tabs
// ----------------------------------------------------
//
void CBlidBaseContainer::AddTabsL(CAknTabGroup& aTabGroup)
    {
    aTabGroup.SetTabFixedWidthL(EAknTabWidthWithTwoTabs);
	MAknsSkinInstance* skin = AknsUtils::SkinInstance(); 
    HBufC* filename = BlidUtils::GetBitmapFilenameLC();        
    CFbsBitmap* bitmap = NULL;
    CFbsBitmap* bitmapMask = NULL;
        
    //Add tab icon 1
    AknsUtils::CreateIconLC( skin,
                            KAknsIIDQgnPropBlidNavigationTab3,
                            bitmap,
                            bitmapMask,
                            *filename,
                            EMbmBlidQgn_prop_blid_navigation_tab3,
                            EMbmBlidQgn_prop_blid_navigation_tab3_mask );             
    aTabGroup.AddTabL( EBlidNavigationView, bitmap, bitmapMask );
    CleanupStack::Pop(2); //bitmap, bitmapmask

    //Add tab icon 2
    AknsUtils::CreateIconLC( skin,
                            KAknsIIDQgnPropBlidTripTab3,
                            bitmap,
                            bitmapMask,
                            *filename,
                            EMbmBlidQgn_prop_blid_trip_tab3,
                            EMbmBlidQgn_prop_blid_trip_tab3_mask );             
    aTabGroup.AddTabL( EBlidTripMeterView, bitmap, bitmapMask );
    CleanupStack::Pop(2); //bitmap, bitmapmask

    
    
    CleanupStack::PopAndDestroy(); //filename
    }

// ---------------------------------------------------------
// CBlidBaseContainer::SetGPSAvailability
// Sets the GPS availability to ETrue or EFalse
// ---------------------------------------------------------
//
void CBlidBaseContainer::SetGPSAvailability(const TBool aAvailability)
    {
    iGPSAvailability = aAvailability;
    }

// ---------------------------------------------------------
// CBlidBaseContainer::IsGPSAvailable
// Checks if GPS is available
// ---------------------------------------------------------
//
TBool CBlidBaseContainer::IsGPSAvailable() 
    {
    return iGPSAvailability;
    }

// End of File