--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/wlanutilities/wlansniffer/mainapplication/src/wsfdetailscontainer.cpp Wed Sep 01 12:20:32 2010 +0100
@@ -0,0 +1,388 @@
+/*
+* Copyright (c) 2007-2008 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: Implementation of CWsfDetailsContainer.
+*
+*/
+
+// INCLUDE FILES
+#include <aknnavi.h>
+#include <aknnavide.h>
+#include <wlansniffer.rsg>
+#include <aknnavilabel.h>
+#include "wsfdetailscontainer.h"
+#include "wsfdetailsviewcontrollerpartner.h"
+#include "wsfappui.h"
+#include "wsfdetailsviewmodel.h"
+#include "wsfactivetimeupdater.h"
+
+#include "wsflogger.h"
+
+// CONSTANTS
+LOCAL_D const TInt KUpdateInterval = 10000000; // in micro seconds (10 sec)
+
+
+// ======== MEMBER FUNCTIONS ========
+// ---------------------------------------------------------
+// CCSnifferDetailsContainer::NewL()
+// ---------------------------------------------------------
+//
+CWsfDetailsContainer* CWsfDetailsContainer::NewL(
+ const TRect& aRect,
+ MWsfActiveTimerHandler& aController )
+ {
+ LOG_ENTERFN( "CWsfDetailsContainer::NewL" );
+ CWsfDetailsContainer* self = CWsfDetailsContainer::NewLC( aRect,
+ aController );
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// ---------------------------------------------------------
+// CCSnifferDetailsContainer::NewLC()
+// ---------------------------------------------------------
+//
+CWsfDetailsContainer* CWsfDetailsContainer::NewLC(
+ const TRect& aRect,
+ MWsfActiveTimerHandler& aController )
+ {
+ LOG_ENTERFN( "CWsfDetailsContainer::NewLC" );
+ CWsfDetailsContainer* self = new( ELeave ) CWsfDetailsContainer;
+ CleanupStack::PushL( self );
+ self->ConstructL( aRect, aController );
+ return self;
+ }
+
+// ---------------------------------------------------------
+// CWsfDetailsContainer::~CCSnifferDetailsContainer
+// ---------------------------------------------------------
+//
+CWsfDetailsContainer::~CWsfDetailsContainer()
+ {
+ LOG_ENTERFN( "CWsfDetailsContainer::~CWsfDetailsContainer" );
+ PopNaviPane();
+ delete iListBox;
+ delete iNaviDecorator;
+
+ if( iActiveUpdater )
+ {
+ iActiveUpdater->Stop();
+ }
+ delete iActiveUpdater;
+ }
+
+// ---------------------------------------------------------
+// CCSnifferDetailsContainer::ConstructL()
+// ---------------------------------------------------------
+//
+void CWsfDetailsContainer::ConstructL( const TRect& aRect,
+ MWsfActiveTimerHandler& aController )
+ {
+ LOG_ENTERFN( "CWsfDetailsContainer::ConstructL" );
+ CreateWindowL();
+
+ iListBox = new( ELeave ) CAknSingleHeadingStyleListBox;
+ iListBox->SetContainerWindowL( *this );
+ TInt flags = 0;
+ flags |= EAknListBoxViewerFlags | EAknListBoxDisableItemSpecificMenu;
+ iListBox->ConstructL( this, flags );
+ iListBox->CreateScrollBarFrameL( ETrue );
+ iListBox->ScrollBarFrame()->SetScrollBarVisibilityL(
+ CEikScrollBarFrame::EOff,
+ CEikScrollBarFrame::EAuto );
+
+ iListBox->Model()->SetOwnershipType( ELbmOwnsItemArray );
+
+ SetRect( aRect );
+
+ // Create and start Active Object 'Active Updater'
+ iActiveUpdater = CWsfActiveTimeUpdater::NewL( &aController );
+ iActiveUpdater->Start( KUpdateInterval );
+
+ ActivateL();
+ }
+
+
+// ---------------------------------------------------------
+// CWsfDetailsContainer::CConnectionMonitorUiContainer
+// ---------------------------------------------------------
+//
+CWsfDetailsContainer::CWsfDetailsContainer() : iDetailsModel( NULL )
+ {
+ }
+
+// ---------------------------------------------------------
+// CWsfDetailsContainer::CConnectionMonitorUiContainer
+// ---------------------------------------------------------
+//
+void CWsfDetailsContainer::SetDetailsModel( CWsfDetailsViewModel* aModel )
+ {
+ iDetailsModel = aModel;
+ }
+
+// ---------------------------------------------------------
+// CWsfDetailsContainer::SizeChanged()
+// ---------------------------------------------------------
+//
+void CWsfDetailsContainer::SizeChanged()
+ {
+ iListBox->SetRect( Rect() );
+ }
+
+// ---------------------------------------------------------
+// CWsfDetailsContainer::CountComponentControls()
+// ---------------------------------------------------------
+//
+TInt CWsfDetailsContainer::CountComponentControls() const
+ {
+ return 1; // return nbr of controls inside this container
+ }
+
+// ---------------------------------------------------------
+// CWsfDetailsContainer::ComponentControl()
+// ---------------------------------------------------------
+//
+CCoeControl* CWsfDetailsContainer::ComponentControl( TInt aIndex ) const
+ {
+ LOG_ENTERFN( "CWsfDetailsContainer::ComponentControl" );
+ switch ( aIndex )
+ {
+ case 0:
+ return iListBox;
+ default:
+ return NULL;
+ }
+ }
+
+// ---------------------------------------------------------
+// CWsfDetailsContainer::OfferKeyEventL
+// ---------------------------------------------------------
+//
+TKeyResponse CWsfDetailsContainer::OfferKeyEventL( const TKeyEvent& aKeyEvent,
+ TEventCode aType )
+ {
+ LOG_ENTERFN( "CWsfDetailsContainer::OfferKeyEventL" );
+ TKeyResponse result = EKeyWasNotConsumed;
+
+ if ( aType == EEventKey || aType == EEventKeyDown )
+ {
+ result = iListBox->OfferKeyEventL( aKeyEvent, aType );
+
+ if ( aKeyEvent.iCode == EKeyLeftArrow )
+ {
+ if ( iPartner )
+ {
+ iPartner->HandleLeftKeyPressedL();
+ result = EKeyWasConsumed;
+ }
+ }
+ else if ( aKeyEvent.iCode == EKeyRightArrow )
+ {
+ if ( iPartner )
+ {
+ iPartner->HandleRightKeyPressedL();
+ result = EKeyWasConsumed;
+ }
+ }
+ else if ( aKeyEvent.iCode == EKeyOK )
+ {
+ if ( iPartner )
+ {
+ iPartner->HandleSelectionKeyPressedL();
+ }
+ }
+ }
+
+ return result;
+ }
+
+// ---------------------------------------------------------
+// CWsfDetailsContainer::GetPanesL
+// ---------------------------------------------------------
+//
+void CWsfDetailsContainer::GetPanesL()
+ {
+ LOG_ENTERFN( "CWsfDetailsContainer::GetPanesL" );
+ if( !iNaviPane )
+ {
+ CEikStatusPane* statusPane = iEikonEnv->AppUiFactory()->StatusPane();
+
+ iNaviPane = static_cast<CAknNavigationControlContainer*>(
+ statusPane->ControlL(
+ TUid::Uid(EEikStatusPaneUidNavi ) ) );
+ }
+ }
+
+// ---------------------------------------------------------
+// CWsfDetailsContainer::UpdateNaviPaneL
+// ---------------------------------------------------------
+//
+void CWsfDetailsContainer::UpdateNaviPaneL( const TDesC& aPaneText )
+ {
+ LOG_ENTERFN( "CWsfDetailsContainer::UpdateNaviPaneL" );
+ LOG_WRITEF("UpdateNaviPaneL - aPaneTest: %S", &aPaneText );
+ if ( !( ( CWsfAppUi *)( iEikonEnv->AppUi() ) )->Foreground() )
+ {
+ return;
+ }
+
+ GetPanesL();
+
+ if ( !iNaviDecorator )
+ {
+ delete iNaviDecorator;
+ iNaviDecorator = NULL;
+ if( iNaviPane )
+ {
+ iNaviDecorator = iNaviPane->CreateNavigationLabelL( aPaneText );
+ iNaviPane->PushL( *iNaviDecorator );
+ }
+ }
+ else
+ {
+ CAknNaviLabel* naviLabel = static_cast<CAknNaviLabel*>(
+ iNaviDecorator->DecoratedControl() );
+ naviLabel->SetTextL( aPaneText );
+ // make sure at top and redraw
+ iNaviPane->PushL( *iNaviDecorator );
+ }
+
+ if ( iNaviDecorator )
+ {
+ // Set the Observer of the NaviDecorator
+ iNaviDecorator->SetNaviDecoratorObserver( this );
+ // Show or hide the left and right arrow button
+ iNaviDecorator->SetScrollButtonDimmed(
+ CAknNavigationDecorator::ELeftButton,
+ iDetailsModel->FormatLeftScrollButton() );
+ iNaviDecorator->SetScrollButtonDimmed(
+ CAknNavigationDecorator::ERightButton,
+ iDetailsModel->FormatRightScrollButton() );
+ // Set the visibility of the buttons
+ iNaviDecorator->MakeScrollButtonVisible( ETrue );
+ }
+ }
+
+// ---------------------------------------------------------
+// CWsfDetailsContainer::UpdateListBoxL
+// ---------------------------------------------------------
+//
+void CWsfDetailsContainer::UpdateListBoxL( MDesCArray* aItemTextArray )
+ {
+ LOG_ENTERFN( "CWsfDetailsContainer::UpdateListBoxL" );
+ for( TInt i = 0; i < aItemTextArray->MdcaCount(); i++)
+ {
+ TPtrC temp = aItemTextArray->MdcaPoint( i );
+ TBuf<100> tempElement = temp;
+ LOG_WRITEF( "aItemTextArray: %S", &tempElement );
+ }
+
+ iListBox->Reset();
+ iListBox->Model()->SetItemTextArray( aItemTextArray );
+ iListBox->Model()->SetOwnershipType( ELbmDoesNotOwnItemArray );
+ iListBox->HandleItemAdditionL();
+ }
+
+// ---------------------------------------------------------
+// CWsfDetailsContainer::SetPartner
+// ---------------------------------------------------------
+//
+void CWsfDetailsContainer::SetPartner(
+ MWsfDetailsViewControllerPartner& aPartner )
+ {
+ iPartner = &aPartner;
+ }
+
+// ---------------------------------------------------------
+// CWsfDetailsContainer::PopNaviPane
+// ---------------------------------------------------------
+//
+void CWsfDetailsContainer::PopNaviPane()
+ {
+ LOG_ENTERFN( "CWsfDetailsContainer::PopNaviPane" );
+ if ( iNaviPane && iNaviDecorator )
+ {
+ iNaviPane->Pop( iNaviDecorator );
+ delete iNaviDecorator;
+ iNaviDecorator = NULL;
+ }
+ }
+
+
+// ---------------------------------------------------------
+// CCSnifferDetailsContainer::HandleResourceChange
+// ---------------------------------------------------------
+//
+void CWsfDetailsContainer::HandleResourceChange( TInt aType )
+ {
+ LOG_ENTERFN( "CWsfDetailsContainer::HandleResourceChange" );
+ CCoeControl::HandleResourceChange( aType );
+ if( aType == KEikDynamicLayoutVariantSwitch )
+ {
+ TRect mainPaneRect;
+ AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane,
+ mainPaneRect );
+ SetRect( mainPaneRect );
+ DrawNow();
+ }
+ }
+
+// ---------------------------------------------------------
+// CWsfDetailsContainer::FocusChanged
+// ---------------------------------------------------------
+//
+void CWsfDetailsContainer::FocusChanged( TDrawNow aDrawNow )
+ {
+ LOG_ENTERFN( "CWsfDetailsContainer::FocusChanged" );
+ CCoeControl::FocusChanged( aDrawNow );
+ if( iListBox )
+ {
+ iListBox->SetFocus( IsFocused() );
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CWsfDetailsContainer::HandleNaviDecoratorEventL
+// --------------------------------------------------------------------------
+//
+void CWsfDetailsContainer::HandleNaviDecoratorEventL( TInt aEventID )
+ {
+ LOG_ENTERFN( "CWsfDetailsContainer::HandleNaviDecoratorEventL" );
+ if ( AknLayoutUtils::PenEnabled() )
+ {
+ switch ( aEventID )
+ {
+ case EAknNaviDecoratorEventRightTabArrow:
+ {
+ if( iPartner && !iDetailsModel->FormatRightScrollButton() )
+ {
+ iPartner->HandleRightKeyPressedL();
+ }
+ break;
+ }
+ case EAknNaviDecoratorEventLeftTabArrow:
+ {
+ if( iPartner && !iDetailsModel->FormatLeftScrollButton() )
+ {
+ iPartner->HandleLeftKeyPressedL();
+ }
+ break;
+ }
+ default:
+ return;
+ }
+ }
+ }
+
+// End of File
+