wlanutilities/wlansniffer/mainapplication/src/wsfdetailscontainer.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Mon, 21 Jun 2010 16:55:05 +0300
branchRCL_3
changeset 20 a9524956f6b5
parent 0 56b72877c1cb
permissions -rw-r--r--
Revision: 201023 Kit: 2010125

/*
* 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