connectionmonitoring/connectionmonitorui/src/ConnectionMonitorUiDetailsContainer.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectionmonitoring/connectionmonitorui/src/ConnectionMonitorUiDetailsContainer.cpp Thu Dec 17 08:55:21 2009 +0200
@@ -0,0 +1,615 @@
+/*
+* Copyright (c) 2002 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: container control class
+*
+*
+*/
+
+// INCLUDE FILES
+#include "ConnectionMonitorUiDetailsContainer.h"
+
+#include <aknnavi.h> //for CNaviPane
+#include <aknnavide.h> //for CAknNavigationDecorator
+#include <StringLoader.h>
+#include <ConnectionMonitorUi.rsg>
+
+#include "ConnectionArray.h"
+#include "ConnectionMonitorUiLogger.h"
+#include "ConnectionMonitorUiDetailsView.h"
+#include "ConnectionMonitorUi.hrh"
+
+// CONSTANTS
+
+// ---------------------------------------------------------
+// CConnectionMonitorUiDetailsContainer::ConstructL( const TRect& aRect )
+// EPOC two phased constructor
+// ---------------------------------------------------------
+//
+void CConnectionMonitorUiDetailsContainer::ConstructL( const TRect& aRect,
+ CConnectionMonitorUiDetailsView* aParentView )
+ {
+ CMUILOGGER_WRITE( "CConnectionMonitorUiDetailsContainer::ConstructL" );
+ CreateWindowL();
+
+ iParentView = aParentView;
+ iListBox = new( ELeave ) CAknSingleHeadingStyleListBox;
+ iListBox->SetContainerWindowL( *this );
+ TInt flags = 0;
+ flags |= EAknListBoxViewerFlags;
+ iListBox->ConstructL( this, flags );
+ iListBox->CreateScrollBarFrameL( ETrue );
+ iListBox->ScrollBarFrame()->SetScrollBarVisibilityL(
+ CEikScrollBarFrame::EOff,
+ CEikScrollBarFrame::EAuto );
+
+ CMUILOGGER_WRITE( "Creating connection details array" );
+
+ iListBox->Model()->SetOwnershipType( ELbmOwnsItemArray );
+
+ SetRect( aRect );
+
+ HBufC* noConn = StringLoader::LoadLC( R_QTN_CMON_NO_ACTIVE_CONNECTIONS,
+ iEikonEnv );
+ CListBoxView *lbview = iListBox->View();
+ lbview->SetListEmptyTextL( *noConn );
+ CleanupStack::PopAndDestroy( noConn );
+
+
+ GetPanesL();
+
+ ActivateL();
+ CMUILOGGER_WRITE( "CConnectionMonitorUiDetailsContainer::ConstructL" );
+ }
+
+// ---------------------------------------------------------
+// CConnectionMonitorUiDetailsContainer::SetSelectedConnectionL
+// ---------------------------------------------------------
+//
+void CConnectionMonitorUiDetailsContainer::SetSelectedConnectionL(
+ TUint aConnectionIndex )
+ {
+ CMUILOGGER_ENTERFN( "CConnectionMonitorUiDetailsContainer::SetSelectedConnectionL" );
+ CMUILOGGER_WRITE_F( "aConnectionIndex : %d", &aConnectionIndex );
+ CMUILOGGER_WRITE_F( "iConnectionArray->MdcaCount() : %d",
+ iConnectionArray->MdcaCount() );
+
+ CConnectionInfoBase* temp = ( *iConnectionArray ).At( aConnectionIndex );
+ CDesCArrayFlat* tempArray = temp ? temp->GetDetailsArray() : NULL ;
+ if ( tempArray )
+ {
+ iConnectionIndex = aConnectionIndex;
+ iConnectionInfo = temp;
+ iListBox->Model()->SetItemTextArray( tempArray );
+ iListBox->Model()->SetOwnershipType( ELbmDoesNotOwnItemArray );
+ iListBox->Reset();
+ iListBox->UpdateScrollBarsL();
+ }
+
+ CMUILOGGER_LEAVEFN( "CConnectionMonitorUiDetailsContainer::SetSelectedConnectionL" );
+ }
+
+// ---------------------------------------------------------
+// CConnectionMonitorUiDetailsContainer::~CConnectionMonitorUiDetailsContainer
+// ---------------------------------------------------------
+//
+CConnectionMonitorUiDetailsContainer::~CConnectionMonitorUiDetailsContainer()
+ {
+ delete iListBox;
+ delete iNaviDecorator;
+ }
+
+// ---------------------------------------------------------
+// CConnectionMonitorUiContainer::CConnectionMonitorUiContainer
+// ---------------------------------------------------------
+//
+CConnectionMonitorUiDetailsContainer::CConnectionMonitorUiDetailsContainer(
+ const CConnectionArray* const aConnectionArray )
+ : iConnectionArray( aConnectionArray )
+ {
+ }
+
+// ---------------------------------------------------------
+// CConnectionMonitorUiDetailsContainer::SizeChanged()
+// Called by framework when the view size is changed
+// ---------------------------------------------------------
+//
+void CConnectionMonitorUiDetailsContainer::SizeChanged()
+ {
+ iListBox->SetRect( Rect() );
+ }
+
+// ---------------------------------------------------------
+// CConnectionMonitorUiDetailsContainer::CountComponentControls() const
+// ---------------------------------------------------------
+//
+TInt CConnectionMonitorUiDetailsContainer::CountComponentControls() const
+ {
+ return 1; // return nbr of controls inside this container
+ }
+
+// ---------------------------------------------------------
+// CConnectionMonitorUiDetailsContainer::ComponentControl( TInt aIndex ) const
+// ---------------------------------------------------------
+//
+CCoeControl* CConnectionMonitorUiDetailsContainer::ComponentControl(
+ TInt aIndex ) const
+ {
+ switch ( aIndex )
+ {
+ case 0:
+ return iListBox;
+ default:
+ return NULL;
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CLogsDetailView::HandleNaviDecoratorEventL
+// Handler for pointer events, when the Navi Pane arrows have been tapped
+// ----------------------------------------------------------------------------
+//
+void CConnectionMonitorUiDetailsContainer::HandleNaviDecoratorEventL( TInt aEventID )
+ {
+ switch (aEventID)
+ {
+ case MAknNaviDecoratorObserver::EAknNaviDecoratorEventRightTabArrow:
+ if ( iConnectionIndex < (iConnectionArray->MdcaCount() - 1) ) {
+ SetSelectedConnectionL(iConnectionIndex + 1);
+ }
+ break;
+
+ case MAknNaviDecoratorObserver::EAknNaviDecoratorEventLeftTabArrow:
+ if ( iConnectionIndex > 0 ) {
+ SetSelectedConnectionL(iConnectionIndex - 1);
+ }
+ break;
+
+ default:
+ return;
+ }
+ }
+
+// ---------------------------------------------------------
+// CConnectionMonitorUiDetailsContainer::OfferKeyEventL
+// ---------------------------------------------------------
+//
+TKeyResponse CConnectionMonitorUiDetailsContainer::OfferKeyEventL(
+ const TKeyEvent& aKeyEvent,
+ TEventCode aType )
+ {
+ CMUILOGGER_ENTERFN( "CConnectionMonitorUiDetailsContainer::OfferKeyEventL" );
+
+ TKeyResponse result( EKeyWasNotConsumed );
+ TInt index = iConnectionIndex;
+ TInt index_closed = iConnectionIndex;
+ CConnectionInfoBase* connection = NULL;
+ if ( aType == EEventKey )
+ {
+ if ( ( aKeyEvent.iCode == EKeyLeftArrow ) ||
+ ( aKeyEvent.iCode == EKeyRightArrow ) )
+ {
+
+ TInt dir = 0;
+ switch (aKeyEvent.iCode)
+ {
+ case EKeyLeftArrow:
+ {
+ dir = -1;
+ break;
+ }
+ case EKeyRightArrow:
+ {
+ dir = 1;
+ break;
+ }
+ }
+ // Handle mirrored layout by negating the directionality
+ if (AknLayoutUtils::LayoutMirrored())
+ {
+ dir = -1 * dir;
+ }
+
+ index += dir;
+
+ TBool step( EFalse );
+
+ CMUILOGGER_WRITE_F( "OfferKeyEventL index: %d", index );
+
+ while ( ( index > -1 ) && ( index < iConnectionArray->MdcaCount()
+ && !step ) )
+ {
+ connection = ( *iConnectionArray )[index];
+ TBool alive = connection->IsAlive();
+ CMUILOGGER_WRITE_F( "OfferKeyEventL alive: %b", alive );
+
+ if ( alive )
+ {
+ if ( ( index_closed > -1 ) &&
+ ( index_closed < iConnectionArray->MdcaCount() ) )
+ {
+ CConnectionInfoBase* connection_closed
+ = ( *iConnectionArray )[index_closed];
+
+ if ( iParentView->GetViewRefreshState() )
+ {
+ step = ETrue;
+ CConnectionMonitorUiAppUi* appUi =
+ (CConnectionMonitorUiAppUi*)
+ iEikonEnv->EikAppUi();
+ appUi->DeleteDetailsView(
+ GetSelectedConnectionInfo()
+ ->GetConnectionId(),
+ GetSelectedConnectionInfo() );
+ appUi->StartTimerL();
+ iParentView->SetViewRefreshState( EFalse );
+ if ( index_closed > index )
+ {
+ iConnectionInfo = connection;
+ iConnectionIndex = index;
+ }
+ iListBox->Model()->SetItemTextArray(
+ connection->GetDetailsArray() );
+ iListBox->DrawNow();
+ iListBox->UpdateScrollBarsL();
+ PushAndRefreshNaviPaneL();
+ }
+ else
+ {
+ step = ETrue;
+ iConnectionInfo = connection;
+ iConnectionIndex = index;
+ iListBox->Model()->SetItemTextArray(
+ connection->GetDetailsArray() );
+ iListBox->DrawNow();
+ iListBox->UpdateScrollBarsL();
+ PushAndRefreshNaviPaneL();
+ }
+ }
+ }
+ else
+ {
+ index += dir;
+ }
+ }
+ result = iListBox->OfferKeyEventL( aKeyEvent, aType );
+ }
+ else if ( aKeyEvent.iCode == EKeyDevice3 )
+ // selection key press -> go back to main view
+ {
+ CConnectionMonitorUiAppUi::Static()->ActivateLocalViewL(
+ TUid::Uid( EConnectionMonitorUiMainViewTab ) );
+ result = EKeyWasConsumed;
+ }
+ else
+ {
+ result = iListBox->OfferKeyEventL( aKeyEvent, aType );
+ }
+ }
+
+ CMUILOGGER_LEAVEFN( "CConnectionMonitorUiDetailsContainer::OfferKeyEventL" );
+
+ return result;
+ }
+
+// ---------------------------------------------------------
+// CConnectionMonitorUiDetailsContainer::OnEventL
+// ---------------------------------------------------------
+//
+void CConnectionMonitorUiDetailsContainer::OnEventL(
+ const CConnMonEventBase& aConnMonEvent,
+ const TInt aIndex )
+ {
+ CMUILOGGER_ENTERFN( "CConnectionMonitorUiDetailsContainer::OnEventL()" );
+ CMUILOGGER_WRITE_F( "aIndex : %d", aIndex );
+
+ switch ( aConnMonEvent.EventType() )
+ {
+ case EConnMonDeleteConnection:
+ {
+ if ( aIndex == iConnectionIndex )
+ {
+ TUint count = iConnectionArray->MdcaCount();
+ switch ( count )
+ {
+ case 0:
+ {
+ iListBox->Model()->SetItemTextArray(
+ new (ELeave) CDesCArrayFlat( 1 ) );
+ iListBox->Model()->SetOwnershipType(
+ ELbmOwnsItemArray );
+ iConnectionIndex = 0;
+ iConnectionInfo = NULL;
+ break;
+ }
+ case 1:
+ {
+ SetSelectedConnectionL( 0 );
+ break;
+ }
+ default :
+ {
+ TInt index = iConnectionIndex < count ?
+ iConnectionIndex :
+ iConnectionIndex - 1;
+ SetSelectedConnectionL( index );
+ break;
+ }
+ }
+ iListBox->DrawNow();
+ iListBox->UpdateScrollBarsL();
+ }
+ break;
+ }
+ case EConnMonCreateConnection:
+ {
+ CMUILOGGER_WRITE_F( "iConnectionInfo : %d", iConnectionInfo );
+
+ if ( !iConnectionInfo )
+ {
+ SetSelectedConnectionL( 0 );
+ }
+ break;
+ }
+ default:
+ {
+ if ( !iConnectionInfo )
+ {
+ SetSelectedConnectionL( 0 );
+ }
+ else if ( ( aIndex == iConnectionIndex ) && ( iConnectionArray->MdcaCount() ) )
+ {
+ iListBox->DrawNow();
+ iListBox->UpdateScrollBarsL();
+ }
+ break;
+ }
+ }
+ PushAndRefreshNaviPaneL();
+ CMUILOGGER_LEAVEFN( "CConnectionMonitorUiDetailsContainer::OnEventL()" );
+ }
+
+// ---------------------------------------------------------
+// CConnectionMonitorUiDetailsContainer::OnTimerEventL
+// ---------------------------------------------------------
+//
+void CConnectionMonitorUiDetailsContainer::OnTimerEventL()
+ {
+ if ( iConnectionArray->MdcaCount() )
+ {
+ iListBox->DrawNow();
+ iListBox->UpdateScrollBarsL();
+ CMUILOGGER_WRITE_F( "CMUIDW GetStatus() before: %d",
+ iConnectionInfo->GetStatus() );
+ if ( iConnectionInfo->GetStatus() == EConnectionClosing )
+ {
+ CConnectionMonitorUiAppUi* tempApUi =
+ CConnectionMonitorUiAppUi::Static();
+ tempApUi->StopTimer();
+ iConnectionInfo->StatusChangedL();
+ }
+ CMUILOGGER_WRITE_F( "CMUIDW GetStatus() after: %d",
+ iConnectionInfo->GetStatus() );
+ }
+ PushAndRefreshNaviPaneL();
+ }
+
+// ---------------------------------------------------------
+// CConnectionMonitorUiDetailsContainer::DrawFirstAllListBoxItem
+// ---------------------------------------------------------
+//
+void CConnectionMonitorUiDetailsContainer::DrawFirstAllListBoxItem()
+ {
+ TInt count = iListBox->Model()->NumberOfItems() - 1;
+ for ( TInt i = count; i > -1; --i )
+ {
+ iListBox->DrawItem( i );
+ }
+ }
+
+// ---------------------------------------------------------
+// CConnectionMonitorUiDetailsContainer::ListBox
+// ---------------------------------------------------------
+//
+CAknSingleHeadingStyleListBox*
+ CConnectionMonitorUiDetailsContainer::ListBox() const
+ {
+ return iListBox;
+ }
+
+// ---------------------------------------------------------
+// CConnectionMonitorUiDetailsContainer::GetPanesL
+// ---------------------------------------------------------
+//
+void CConnectionMonitorUiDetailsContainer::GetPanesL()
+ {
+ CEikStatusPane* statusPane = iEikonEnv->AppUiFactory()->StatusPane();
+
+ iNaviPane = STATIC_CAST( CAknNavigationControlContainer*,
+ statusPane->ControlL( TUid::Uid(EEikStatusPaneUidNavi ) ) );
+
+ PushAndRefreshNaviPaneL();
+ }
+
+// ---------------------------------------------------------
+// CConnectionMonitorUiDetailsContainer::PushAndRefreshNaviPaneL
+// ---------------------------------------------------------
+//
+void CConnectionMonitorUiDetailsContainer::PushAndRefreshNaviPaneL()
+ {
+ TUint countOfConnection = iConnectionArray->NumberOfActiveConnections();
+ CMUILOGGER_WRITE_F( "countOfConnection : %d", countOfConnection );
+
+ if ( ( iConnectionIndex > countOfConnection ) && // spec. index update
+ ( countOfConnection == 0 ) )
+ {
+ iConnectionIndex = iConnectionArray->
+ GetArrayIndex(
+ GetSelectedConnectionInfo()
+ ->GetConnectionId() );
+ }
+
+ CMUILOGGER_WRITE_F( "iConnectionIndex : %d", iConnectionIndex );
+
+ if ( iNaviDecorator )
+ {
+ PopNaviPane();
+ }
+
+ if ( iParentView->GetViewRefreshState() ) // connection closed
+ {
+ iNaviDecorator = iNaviPane->CreateNavigationLabelL( KNullDesC );
+ }
+ else // connection alive
+ {
+ HBufC* textOfNaviPane = NULL;
+
+ CArrayFixFlat<TInt>* array = new( ELeave ) CArrayFixFlat<TInt>( 2 );
+ CleanupStack::PushL( array );
+
+ if ( ( countOfConnection == 1 ) &&
+ ( iConnectionIndex + 1 >= countOfConnection ) )
+ {
+ array->AppendL( countOfConnection );
+ }
+ else
+ {
+ array->AppendL( countOfConnection ? iConnectionIndex + 1 : 0 );
+ }
+
+ array->AppendL( countOfConnection );
+ textOfNaviPane = StringLoader::LoadLC(
+ R_QTN_CMON_NAVI_NOF_CONNECTION,
+ *array );
+
+ iNaviDecorator = iNaviPane->CreateNavigationLabelL(
+ *textOfNaviPane );
+
+ CleanupStack::PopAndDestroy( textOfNaviPane );
+ CleanupStack::PopAndDestroy( array );
+ }
+
+ iNaviDecorator->MakeScrollButtonVisible( ETrue );
+
+ CAknNavigationDecorator::TScrollButton left = CAknNavigationDecorator::ELeftButton;
+ CAknNavigationDecorator::TScrollButton right = CAknNavigationDecorator::ERightButton;
+ if ( AknLayoutUtils::LayoutMirrored() )
+ {
+ left = CAknNavigationDecorator::ERightButton;
+ right = CAknNavigationDecorator::ELeftButton;
+ }
+
+ if ( iParentView->GetViewRefreshState() )
+ {
+ iNaviDecorator->SetScrollButtonDimmed( left,
+ ( ( iConnectionIndex == 0 ) ||
+ ( countOfConnection == 0 ) ) );
+ }
+ else
+ {
+ iNaviDecorator->SetScrollButtonDimmed(
+ left,
+ ( ( iConnectionIndex == 0 ) ||
+ ( countOfConnection == 0 ) ||
+ ( ( countOfConnection == 1 ) &&
+ ( iConnectionIndex + 1 >=
+ countOfConnection ) ) ) );
+ }
+
+ if ( iParentView->GetViewRefreshState() )
+ {
+ iNaviDecorator->SetScrollButtonDimmed( right,
+ iConnectionIndex >= countOfConnection );
+ }
+ else
+ {
+ iNaviDecorator->SetScrollButtonDimmed( right,
+ iConnectionIndex + 1 >= countOfConnection );
+ }
+
+ iNaviDecorator->SetNaviDecoratorObserver( this );
+
+ iNaviPane->PushL( *iNaviDecorator );
+ }
+
+
+// ---------------------------------------------------------
+// CConnectionMonitorUiDetailsContainer::PopNaviPane
+// ---------------------------------------------------------
+//
+void CConnectionMonitorUiDetailsContainer::PopNaviPane()
+ {
+ iNaviPane->Pop( iNaviDecorator );
+ delete iNaviDecorator;
+ iNaviDecorator = NULL;
+ }
+
+
+// ---------------------------------------------------------
+// CConnectionMonitorUiDetailsContainer::HandleResourceChange
+// ---------------------------------------------------------
+//
+void CConnectionMonitorUiDetailsContainer::HandleResourceChange( TInt aType )
+ {
+ CCoeControl::HandleResourceChange( aType );
+ if ( aType == KEikDynamicLayoutVariantSwitch )
+ {
+ TRect mainPaneRect;
+ AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane,
+ mainPaneRect );
+ SetRect( mainPaneRect );
+ DrawNow();
+ }
+ }
+
+// ---------------------------------------------------------
+// CConnectionMonitorUiDetailsContainer::FocusChanged
+// ---------------------------------------------------------
+//
+void CConnectionMonitorUiDetailsContainer::FocusChanged( TDrawNow aDrawNow )
+ {
+ CMUILOGGER_ENTERFN( "CConnectionMonitorUiDetailsContainer::FocusChanged" );
+ CCoeControl::FocusChanged( aDrawNow );
+ if ( iListBox )
+ {
+ iListBox->SetFocus( IsFocused() );
+ }
+ CMUILOGGER_LEAVEFN( "CConnectionMonitorUiDetailsContainer::FocusChanged" );
+ }
+
+
+// ---------------------------------------------------------
+// CConnectionMonitorUiDetailsContainer::GetIndexOfSelectedItem
+// ---------------------------------------------------------
+//
+TInt CConnectionMonitorUiDetailsContainer::GetIndexOfSelectedItem()
+ {
+ CMUILOGGER_WRITE_F(
+ "CMUIDetailsContainer::GetIndexOfSelectedItem iConnectionIndex: %d",
+ iConnectionIndex );
+
+ return iConnectionIndex;
+ }
+
+// ---------------------------------------------------------
+// CConnectionMonitorUiDetailsContainer::GetSelectedConnectionInfo()
+// ---------------------------------------------------------
+//
+ CConnectionInfoBase* CConnectionMonitorUiDetailsContainer::
+ GetSelectedConnectionInfo() const
+ {
+ return iConnectionInfo;
+ }
+
+
+// End of File