--- /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 <e32base.h>
+#include <centralrepository.h>
+#include <barsread.h> // Resource reader
+#include <BtuiViewResources.rsg> // Compiled resource ids
+#include <btfeaturescfg.h> // For EnterpriseEnablementL()
+#include "BTUIMainContainer.h"
+#include "debug.h" // Global declarations
+#include "btui.h"
+#ifdef __SERIES60_HELP
+#include <csxhelp/bt.hlp.hrh> // 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<KBTUIMaxFormattedNameLength>&,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);
+}