diff -r 63be7eb3fc78 -r f28ada11abbf wlanutilities/wlansniffer/mainapplication/src/wsfdetailscontainer.cpp --- /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 +#include +#include +#include +#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( + 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( + 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 +