diff -r 613943a21004 -r 9386f31cc85b bluetoothengine/btui/Ecom/src/BTUIMainContainer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bluetoothengine/btui/Ecom/src/BTUIMainContainer.cpp Wed Sep 01 12:20:04 2010 +0100 @@ -0,0 +1,466 @@ +/* +* Copyright (c) 2006-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: This is the implementation of main container. It contains +* all necessary AVKON components and handles user inputs. +* +*/ + +#include +#include +#include // Resource reader +#include // Compiled resource ids +#include // For EnterpriseEnablementL() +#include "BTUIMainContainer.h" +#include "debug.h" // Global declarations +#include "btui.h" +#ifdef __SERIES60_HELP +#include // Help ids +#endif + +// --------------------------------------------------------- +// CBTUIMainContainer::ConstructL +// Symbian OS 2nd phase constructor can leave +// --------------------------------------------------------- +// +void CBTUIMainContainer::ConstructL(const TRect& aRect, CBTUIMainView* aMainView ) + { + TRACE_FUNC_ENTRY + + CreateWindowL(); + + iMainView = aMainView; + + // Check if listbox is empty + __ASSERT_DEBUG(iBtMainListBox==0, PANIC( EBTMainListNotEmpty )); + __ASSERT_DEBUG(iBtAllItemsArray==0, PANIC( EBTAllFormatStingsArrayNotEmpty )); + __ASSERT_DEBUG(iBtListItemArray==0, PANIC( EBTFormatStingsArrayNotEmpty )); + + // Create main itemlist + iBtMainListBox = new (ELeave) CAknSettingStyleListBox; + iBtMainListBox->SetContainerWindowL( *this ); + iBtMainListBox->ConstructL( this, EAknListBoxMarkableList ); + + + // Update settings from original sources via model + iBtEngSettingsRef = iMainView->GetBtSettingsReference(); + + __ASSERT_DEBUG(iBtEngSettingsRef!=0, PANIC(EBTPanicIllegalValue)); + + // Read all format strings from resources and create array for them + iBtAllItemsArray = iCoeEnv->ReadDesCArrayResourceL( R_BT_LABEL_STRINGS ); + iBtListItemArray = new (ELeave) TMainListItemArray( + iBtAllItemsArray, aMainView, iBtEngSettingsRef ); + + // Set up/down arrows at bottom of the screen (scrollbar) + iBtMainListBox->CreateScrollBarFrameL( ETrue ); + iBtMainListBox->ScrollBarFrame()->SetScrollBarVisibilityL( + CEikScrollBarFrame::EOn, CEikScrollBarFrame::EAuto ); + + // Set text labels for list items again (overwriting resource definitions) + iBtMainListBox->Model()->SetItemTextArray( iBtListItemArray ); + iBtMainListBox->Model()->SetOwnershipType( ELbmDoesNotOwnItemArray ); // Does not delete items array + + // Set up the observer (events listener) + iBtMainListBox->SetListBoxObserver( this ); + + + + SetRect(aRect); + ActivateL(); + + TRACE_FUNC_EXIT + } + +// --------------------------------------------------------- +// Destructor +// --------------------------------------------------------- +// +CBTUIMainContainer::~CBTUIMainContainer() + { + TRACE_FUNC_ENTRY + delete iBtMainListBox; + delete iBtAllItemsArray; + delete iBtListItemArray; + TRACE_FUNC_EXIT + } + +// --------------------------------------------------------- +// CBTUIMainContainer::SizeChanged() +// From CCoeControl +// Called by framework when the view size is changed +// --------------------------------------------------------- +// +void CBTUIMainContainer::SizeChanged() + { + TRACE_FUNC_ENTRY + iBtMainListBox->SetRect(Rect()); // Mandatory, otherwise not drawn + } + +// --------------------------------------------------------- +// From CCoeControl +// CBTUIMainContainer::CountComponentControls() const +// --------------------------------------------------------- +// +TInt CBTUIMainContainer::CountComponentControls() const + { + TRACE_FUNC_ENTRY + if(iBtMainListBox ) + return 1; + else + return 0; // return nbr of controls inside this container + } + +// --------------------------------------------------------- +// From CCoeControl +// CBTUIMainContainer::ComponentControl(TInt aIndex) const +// --------------------------------------------------------- +// +CCoeControl* CBTUIMainContainer::ComponentControl(TInt aIndex) const + { + TRACE_FUNC_ENTRY + if( aIndex ==0 ) + { + return iBtMainListBox; + } + return NULL; + } + +// --------------------------------------------------------- +// From CCoeControl +// CBTUIMainContainer::Draw +// --------------------------------------------------------- +// +void CBTUIMainContainer::Draw(const TRect& /* aRect */) const + { + } + +// --------------------------------------------------------- +// From CoeControl +// CBTUIMainContainer::HandleControlEventL +// --------------------------------------------------------- +// +void CBTUIMainContainer::HandleControlEventL( CCoeControl* /* aControl */, TCoeEvent /* aEventType */) + { + } + +// --------------------------------------------------------- +// From CoeControl +// CBTUIMainContainer::OfferKeyEventL +// Redirect keypresses to the listbox +// --------------------------------------------------------- +// +TKeyResponse CBTUIMainContainer::OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType) + { + TRACE_FUNC_ENTRY + if(( iBtMainListBox ) && ( aKeyEvent.iCode != EKeyLeftArrow ) + && (aKeyEvent.iCode != EKeyRightArrow )) + { + TKeyResponse res = iBtMainListBox->OfferKeyEventL( aKeyEvent, aType ); + + // Store current item index for options list usage later + // + iCurrentItemIndex = iBtMainListBox->CurrentItemIndex(); + return res; + } + return EKeyWasNotConsumed; + } + +// --------------------------------------------------------- +// From MEikListBoxObserver +// CBTUIMainContainer::HandleListBoxEventL +// --------------------------------------------------------- +// +void CBTUIMainContainer::HandleListBoxEventL(CEikListBox* aListBox, TListBoxEvent aEventType) + { + TRACE_FUNC_ENTRY + + __ASSERT_DEBUG(iMainView!=0, PANIC(EBTPanicIllegalValue)); + + // this is no longer called, unless MSK is disabled. + // if msk is not disabled, then + // BTMainView::HandleCommand(EBTUICmdMSK) is called instead + if( aEventType == EEventEnterKeyPressed + || aEventType == EEventItemSingleClicked ) // Selection key pressed, or item clicked + { + TInt currentHighLightPosition = aListBox->CurrentItemIndex(); + switch(currentHighLightPosition) + { + case EBTMainListItemPowerMode: + iMainView->HandleCommandL( EBTUICmdChangePowerStateSelect ); + break; + case EBTMainListItemVisibilityMode: + iMainView->HandleCommandL( EBTUICmdChangeVisibilitySelect ); + break; + case EBTMainListItemNameSetting: + iMainView->HandleCommandL( EBTUICmdChangeBTNameSelect ); + break; + + // For Bluetooth SIM Access Profile feature + // + case EBTMainListItemSapMode: + iMainView->HandleCommandL( EBTUICmdChangeSapStateSelect ); + break; + default: + break; + } + aListBox->DrawItem(currentHighLightPosition); // Redraw item only to the screen + } + } + +// ---------------------------------------------------- +// From CEikListBox +// CBTUIMainContainer::CurrentItemIndex +// ---------------------------------------------------- +// +TInt CBTUIMainContainer::CurrentItemIndex() + { + TRACE_FUNC_ENTRY + + return iBtMainListBox->CurrentItemIndex(); + } + +// ---------------------------------------------------- +// CBTUIMainContainer::SettingChangedL +// ---------------------------------------------------- +// +void CBTUIMainContainer::SettingChanged( TBTMainListItemIndexes /* aListItem */ ) + { + TRACE_FUNC_ENTRY + + iBtMainListBox->DrawDeferred(); + } + +#ifdef __SERIES60_HELP + +// --------------------------------------------------------- +// From CCoeControl +// CBTUIMainContainer::GetHelpContext +// --------------------------------------------------------- +// +void CBTUIMainContainer::GetHelpContext(TCoeHelpContext& aContext) const + { + TRACE_FUNC_ENTRY + + aContext.iMajor = KBtuiUid3; + aContext.iContext = KBT_HLP_MAIN; + } + +#else + +// --------------------------------------------------------- +// From CCoeControl +// CBTUIMainContainer::GetHelpContext +// --------------------------------------------------------- +// +void CBTUIMainContainer::GetHelpContext(TCoeHelpContext& /*aContext*/) const + { + TRACE_FUNC_ENTRY + } + +#endif + +// --------------------------------------------------------- +// From CCoeControl +// CBTUIMainContainer::HandleResourceChange +// --------------------------------------------------------- +// +void CBTUIMainContainer::HandleResourceChange( TInt aType ) + { + TRACE_FUNC_ENTRY + //Pass the event to base class, so whenever resource changing happened, + //this control will be considered to be re-drawed by base class, therefore + //no specific DrawNow() function call is needed here. + CCoeControl::HandleResourceChange(aType); + + //Handle change in layout orientation + //aType == KAknsMessageSkinChange is handled by base class. + if (aType == KEikDynamicLayoutVariantSwitch) + { + //"TRect rect = iAvkonAppUi->ClientRect();" + // The line above provides to big rectangle in the bottom causing cba's overdrawn by by blank area. + // Correct way to do this is below. + TRect mainPaneRect; + AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EMainPane, mainPaneRect); + SetRect(mainPaneRect); + } + } + +// --------------------------------------------------------- +// From CCoeControl +// CBTUIMainContainer::FocusChanged +// --------------------------------------------------------- +// +void CBTUIMainContainer::FocusChanged(TDrawNow /*aDrawNow*/) + { + TRACE_FUNC_ENTRY + if( iBtMainListBox) + { + iBtMainListBox->SetFocus( IsFocused() ); + } + } + + +// ******************************************* +// Nested class function implemenations: +// ******************************************* + +// ---------------------------------------------------- +// CBTUIMainContainer::TMainListItemArray::TMainListItemArray +// Initialize friend class +// ---------------------------------------------------- +CBTUIMainContainer::TMainListItemArray::TMainListItemArray( CDesCArray* aBtAllItemsArray, + CBTUIMainView* aMainView, CBTEngSettings* aBtEngSettings) + + : iArray( *aBtAllItemsArray ), // Store references + iMainView( aMainView ), + iBtEngSettingsRef( aBtEngSettings ) + + { + TRACE_FUNC_ENTRY + } + +// ---------------------------------------------------- +// CBTUIMainContainer::TMainListItemArray::MdcaCount() +// ---------------------------------------------------- +// +TInt CBTUIMainContainer::TMainListItemArray::MdcaCount() const + { + TRACE_FUNC_ENTRY + return KNumberOfMainViewItems; + } + +// ---------------------------------------------------- +// CBTUIMainContainer::TMainListItemArray::MdcaPointL +// Main view listbox item formatter: +// Returns the current format string depending value +// of the item concerned. +// ---------------------------------------------------- +// +TPtrC CBTUIMainContainer::TMainListItemArray::MdcaPoint( TInt aIndex ) const + { + TRACE_FUNC_ENTRY + _LIT(KBTUIEmptyFormatString, " \t \t\t "); // Empty format string if illegal indexing + TPtrC chosen; + + switch ( aIndex ) + { + case EBTMainListItemPowerMode: + { + TBTPowerStateValue powerState; + iBtEngSettingsRef->GetPowerState(powerState); + if( powerState==EBTPowerOn ) + chosen.Set( iArray.MdcaPoint( EBTUISettModulePowerOn )); + else + chosen.Set( iArray.MdcaPoint( EBTUISettModulePowerOff )); + break; + } + + case EBTMainListItemVisibilityMode: + { + TBTVisibilityMode mode; + iBtEngSettingsRef->GetVisibilityMode(mode); + + switch(mode) + { + case EBTVisibilityModeGeneral: + chosen.Set( iArray.MdcaPoint( EBTUISettVisibilityModeGeneral )); + break; + + case EBTVisibilityModeHidden: + chosen.Set( iArray.MdcaPoint( EBTUISettVisibilityModeHidden )); + break; + + case EBTVisibilityModeTemporary: + chosen.Set( iArray.MdcaPoint( EBTUISettVisibilityModeTemp )); + break; + + default: + break; + } + break; + } + + case EBTMainListItemNameSetting: + { + TDes &buf = MUTABLE_CAST(TBuf&,iItemText); + buf.Zero(); + buf.Append( iArray.MdcaPoint( EBTUISettBTNameHeader ) ); + buf.Append( *iMainView->GetBTLocalName() ); + chosen.Set( iItemText ); + break; + } + + // For Bluetooth SIM Access Profile feature + case EBTMainListItemSapMode: + { + BluetoothFeatures::TEnterpriseEnablementMode mode = BluetoothFeatures::EEnabled; + TRAPD(err, mode = BluetoothFeatures::EnterpriseEnablementL()); + if ( err == KErrNone ) + { + if ( mode == BluetoothFeatures::EDataProfilesDisabled ) + { + chosen.Set( iArray.MdcaPoint( EBTUISettSapDisabled )); + break; + } + } + + TInt sapStatus; + TRAP_IGNORE(GetSapStatusL(sapStatus);); + + if(sapStatus==EBTSapEnabled) + { + chosen.Set( iArray.MdcaPoint( EBTUISettSapEnabled )); + } + else + { + chosen.Set( iArray.MdcaPoint( EBTUISettSapDisabled )); + } + + TInt sapMode = KErrNone; + TRAP_IGNORE(sapMode = iMainView->GetSapStatusL()); + + + if(sapMode==EBTSapEnabled) + { + if ( sapMode ) + { + chosen.Set( iArray.MdcaPoint( EBTUISettSapEnabled )); + } + else + { + chosen.Set( iArray.MdcaPoint( EBTUISettSapDisabled )); + } + } + + break; + } + default: + chosen.Set( KBTUIEmptyFormatString ); + break; + } + + return chosen; + } + +// ---------------------------------------------------------------------- +// CBTUIMainContainer::TMainListItemArray::GetSapStatusL(TInt& aStatus) +// ---------------------------------------------------------------------- +// +void CBTUIMainContainer::TMainListItemArray::GetSapStatusL( TInt& aStatus ) +{ + CRepository* repository = CRepository::NewL(KCRUidBTEngPrivateSettings); + CleanupStack::PushL(repository); + repository->Get(KBTSapEnabled, aStatus); + CleanupStack::PopAndDestroy(repository); +}