connectionmonitoring/connectionmonitorui/src/ConnectionMonitorUiView.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Fri, 19 Feb 2010 23:12:51 +0200
branchRCL_3
changeset 8 2e6c4614c58e
parent 4 77415202bfc8
child 54 984e13af52c4
permissions -rw-r--r--
Revision: 201003 Kit: 201007

/*
* 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:  view class
*     
*
*/


// INCLUDE FILES
#include  <eikmenup.h>
#include  <akntitle.h>   //for CAknTitlePane
#include  <ConnectionMonitorUi.rsg>
#include  <StringLoader.h>

#include  <hlplch.h>
#include <csxhelp/cmon.hlp.hrh>

    
#include  "ConnectionMonitorUiDetailsView.h"
#include  "ConnectionMonitorUi.hrh"
#include  "ConnectionMonitorUiAppUi.h"
#include  "ConnectionMonitorUiView.h"
#include  "ConnectionMonitorUiContainer.h" 
#include  "ConnectionArray.h"
#include  "FeatureManagerWrapper.h"


// CONSTANTS 

// ================= MEMBER FUNCTIONS =======================
// ---------------------------------------------------------
// CConnectionMonitorUiView::CConnectionMonitorUiView
// ---------------------------------------------------------
//
#ifdef RD_CONTROL_PANEL
CConnectionMonitorUiView::CConnectionMonitorUiView( 
                                    CConnectionArray* const aConnectionArray,
                                    RConnectionMonitor* aMonitor,
                                    TBool aIsEmbedded,
                                    CActiveWrapper* aActiveWrapper )
    : CAknView(),
      iConnectionArray( aConnectionArray ),
      iMonitor( aMonitor ),
      isHelpSupported( EFalse ),
      iIsEmbedded( EFalse ),
      iActiveWrapper( aActiveWrapper )
    {
   	iIsEmbedded = aIsEmbedded;
    }
#else
CConnectionMonitorUiView::CConnectionMonitorUiView( 
                                    CConnectionArray* const aConnectionArray,
                                    RConnectionMonitor* aMonitor,
                                    CActiveWrapper* aActiveWrapper )
    : CAknView(),
      iConnectionArray( aConnectionArray ),
      iMonitor( aMonitor ),
      isHelpSupported( EFalse ),
      iActiveWrapper( aActiveWrapper )
    {
    }
#endif // RD_CONTROL_PANEL

// ---------------------------------------------------------
// CConnectionMonitorUiView::ConstructL
// ---------------------------------------------------------
//
void CConnectionMonitorUiView::ConstructL()
    {
    isHelpSupported = FeatureManager::FeatureSupported( KFeatureIdHelp );

    TInt actView( NULL );

#ifdef RD_CONTROL_PANEL
    if ( iIsEmbedded )
        {
        actView = R_CP_CONNECTIONMONITORUI_VIEW;
        }
    else
        {
        actView = R_CONNECTIONMONITORUI_VIEW;
        }
#else
        actView = R_CONNECTIONMONITORUI_VIEW;
#endif // RD_CONTROL_PANEL

    BaseConstructL( actView );        
    }

// ---------------------------------------------------------
// CConnectionMonitorUiView::~CConnectionMonitorUiView()
// ---------------------------------------------------------
//
CConnectionMonitorUiView::~CConnectionMonitorUiView()
    {
    delete iContainer;
    }

// ---------------------------------------------------------
// TUid CConnectionMonitorUiView::Id()
// ---------------------------------------------------------
//
TUid CConnectionMonitorUiView::Id() const
    {
    return KConnectionsViewId;
    }

// ---------------------------------------------------------
// CConnectionMonitorUiView::HandleCommandL( TInt aCommand )
// ---------------------------------------------------------
//
void CConnectionMonitorUiView::HandleCommandL( TInt aCommand )
    {   
    switch ( aCommand )
        {
        case EAknSoftkeyDetails:
            {
            if ( IsSelectedConnectionAlive() )
                {
                BringupDetailsViewL();
                }
            break;
            }
        case EConnectionMonitorUiCmdAppDetails:
            {
            BringupDetailsViewL();
            break;
            }
        case EConnectionMonitorUiCmdAppEndConn:
            {
            iContainer->EndConnectionL();
            break;
            }
        case EConnectionMonitorUiCmdAppEndAll:
            {
            iContainer->EndAllConnectionL();
            break;
            }
       case EAknCmdHelp:
            {
            if ( isHelpSupported )
                {
                HlpLauncher::LaunchHelpApplicationL(
                    CEikonEnv::Static()->WsSession(),
                    CEikonEnv::Static()->EikAppUi()->AppHelpContextL() );
                }
            break;
            }
       default:
            {
            AppUi()->HandleCommandL( aCommand );
            break;
            }
        }
    }

// ---------------------------------------------------------
// CConnectionMonitorUiView::DynInitMenuPaneL()
// ---------------------------------------------------------
//
void CConnectionMonitorUiView::DynInitMenuPaneL( TInt aResourceId,
                                                 CEikMenuPane* aMenuPane )
    {
    MEikMenuObserver::DynInitMenuPaneL( aResourceId, aMenuPane );
    // This is a security measure to prevent menu pane updates when
    // the main view is not active. This should not happen but
    // just to be safe it is checked.
    if ( !iContainer )
        {
        return;
        }
    switch ( aResourceId )
        {
        case R_CONNECTIONMONITORUI_VIEW_MENU:
            {
            if ( !iConnectionArray->MdcaCount() )
                {
                aMenuPane->DeleteMenuItem( 
                                EConnectionMonitorUiCmdAppDetails );
                aMenuPane->DeleteMenuItem( 
                                EConnectionMonitorUiCmdAppEndConn );
                aMenuPane->DeleteMenuItem( 
                                EConnectionMonitorUiCmdAppEndAll );
                }
            else if ( iConnectionArray->MdcaCount() == 1 )
                {
                aMenuPane->DeleteMenuItem( 
                                EConnectionMonitorUiCmdAppEndAll );
                if ( !IsSelectedConnectionAlive() )
                    {
                    aMenuPane->DeleteMenuItem( 
                                    EConnectionMonitorUiCmdAppDetails );
                    }
                else if ( IsSelectedConnectionSuspended() )
                    {
                    aMenuPane->DeleteMenuItem( 
                                EConnectionMonitorUiCmdAppEndConn );
                    }
                }
            else if ( iConnectionArray->NumberOfSuspendedConnections() >= 1 )
                {
                aMenuPane->DeleteMenuItem( 
                                EConnectionMonitorUiCmdAppEndAll );
                if ( IsSelectedConnectionSuspended() )
                    {
                    aMenuPane->DeleteMenuItem( 
                                EConnectionMonitorUiCmdAppEndConn );
                    }
                }
            else
                {
                if ( !IsSelectedConnectionAlive() )
                    {
                    aMenuPane->DeleteMenuItem( 
                                    EConnectionMonitorUiCmdAppDetails );
                    aMenuPane->DeleteMenuItem( 
                                    EConnectionMonitorUiCmdAppEndConn );
                    }
                }
            break;
            }
        case R_CONNECTIONMONITORUI_APP_MENU:
            {
            if ( !isHelpSupported )
                {
                aMenuPane->DeleteMenuItem( EAknCmdHelp );
                }
            break;
            }
        default:
            {
            break;
            }
        }
    }

// ---------------------------------------------------------
// CConnectionMonitorUiView::HandleListBoxEventL
// ---------------------------------------------------------
//
void CConnectionMonitorUiView::HandleListBoxEventL( CEikListBox* /*aListBox*/, 
                                                    TListBoxEvent aEventType )
    {
    switch ( aEventType )
        {
        case EEventEnterKeyPressed:
        //case EEventItemDoubleClicked:
        case EEventItemSingleClicked:
            {
            if ( IsSelectedConnectionAlive() )
                {
                BringupDetailsViewL();
                }
            }
            break;
        default:
            break;
        }
    }

// ---------------------------------------------------------
// CConnectionMonitorUiView::DoActivateL
// ---------------------------------------------------------
//
void CConnectionMonitorUiView::DoActivateL(
                                            const TVwsViewId& /*aPrevViewId*/, 
                                            TUid /*aCustomMessageId*/,
                                            const TDesC8& /*aCustomMessage*/ )
    {
    CMUILOGGER_ENTERFN( "CConnectionMonitorUiView::DoActivateL" );
    
    if ( !iContainer )
        {
        iContainer = new( ELeave ) CConnectionMonitorUiContainer( 
                                                            iConnectionArray,
                                                            iMonitor,
                                                            iActiveWrapper );
        iContainer->SetMopParent( this );
        
        
	    CConnectionMonitorUiDetailsView* view = 
	        STATIC_CAST( CConnectionMonitorUiDetailsView*,
	        AppUi()->View( TUid::Uid( EConnectionMonitorUiDetailsViewTab ) ) );

	    TInt index  = view->GetSelectedConnection();
    	CMUILOGGER_WRITE_F( "index: %d", index );
                
        iContainer->ConstructL( index, ClientRect() );
        iContainer->ListBox()->SetListBoxObserver( this );

        CConnectionMonitorUiAppUi::Static()->StartConnEventNotification( 
                                                                  iContainer );
        iContainer->PushAndRefreshNaviPaneL();
        AppUi()->AddToViewStackL( *this, iContainer );
        ConnectionKeyObserver();
        }
    CMUILOGGER_LEAVEFN( "CConnectionMonitorUiView::DoActivateL" );
    
    }

// ---------------------------------------------------------
// CConnectionMonitorUiView::DoDeactivate
// ---------------------------------------------------------
//
void CConnectionMonitorUiView::DoDeactivate()
    {
    CMUILOGGER_ENTERFN( "CConnectionMonitorUiView::DoDeactivate" );
    
    if ( iContainer )
        {
        AppUi()->RemoveFromViewStack( *this, iContainer );
        CConnectionMonitorUiAppUi::Static()->StopConnEventNotification( 
                                                                  iContainer );
        iContainer->PopNaviPane();
        delete iContainer;
        iContainer = NULL;
        }
    CMUILOGGER_LEAVEFN( "CConnectionMonitorUiView::DoDeactivate" );
    }

// ---------------------------------------------------------
// CConnectionMonitorUiView::SetTitlePaneTextL
// ---------------------------------------------------------
//
void CConnectionMonitorUiView::SetTitlePaneTextL( TInt aResourceId )
    {
    CEikStatusPane* statusPane = iEikonEnv->AppUiFactory()->StatusPane();
    CAknTitlePane* titlePane =
        ( CAknTitlePane* )statusPane->ControlL(
                            TUid::Uid( EEikStatusPaneUidTitle ) );
    HBufC* text = iEikonEnv->AllocReadResourceLC( aResourceId );
    titlePane->SetTextL( text->Des() );
    CleanupStack::PopAndDestroy( text );
    }

// ---------------------------------------------------------
// CConnectionMonitorUiView::BringupDetailsViewL
// ---------------------------------------------------------
//
void CConnectionMonitorUiView::BringupDetailsViewL()
    {
    CConnectionMonitorUiDetailsView* view = 
        STATIC_CAST( CConnectionMonitorUiDetailsView*,
                     AppUi()->View( TUid::Uid( 
                     EConnectionMonitorUiDetailsViewTab ) ) );

    TInt selIndex = iContainer->SelectedConnection();
    view->SetSelectedConnection( selIndex );
    AppUi()->ActivateLocalViewL( 
                             TUid::Uid( EConnectionMonitorUiDetailsViewTab ) );
    }

// ---------------------------------------------------------
// CConnectionMonitorUiView::IsSelectedConnectionAlive
// ---------------------------------------------------------
//
TBool CConnectionMonitorUiView::IsSelectedConnectionAlive() const
    {
    TInt selIndex = iContainer->SelectedConnection();
    TBool result( EFalse );
    if ( selIndex > -1 )
        {
        result = ( *iConnectionArray )[selIndex]->IsAlive();
        }

    return result;
    }
    
// ---------------------------------------------------------
// CConnectionMonitorUiView::IsSelectedConnectionSuspended
// ---------------------------------------------------------
//
TBool CConnectionMonitorUiView::IsSelectedConnectionSuspended() const
    {
    TInt selIndex = iContainer->SelectedConnection();
    TBool result( EFalse );
    if ( selIndex > -1 )
        {
        result = ( *iConnectionArray )[selIndex]->IsSuspended();
        }

    return result;
    }    
    
// ---------------------------------------------------------
// CConnectionMonitorUiView::ConnectionKeyObserver
// ---------------------------------------------------------
//
void CConnectionMonitorUiView::ConnectionKeyObserver() const
    {
    if ( !( iConnectionArray->MdcaCount() ) )
        {
        Cba()->MakeCommandVisible( EAknSoftkeyDetails,EFalse );
        }
    else
        {
        if ( iConnectionArray->NumberOfActiveConnections() )
            {
            Cba()->MakeCommandVisible( EAknSoftkeyDetails,ETrue );
            }
        else
            {
            Cba()->MakeCommandVisible( EAknSoftkeyDetails,EFalse );
            }
        }
	}

// ---------------------------------------------------------
// CConnectionMonitorUiView::HandleItemAdditionL
// ---------------------------------------------------------
//
void CConnectionMonitorUiView::HandleItemAdditionL()
    {
    iContainer->ListBox()->HandleItemAdditionL();
    }

    

// End of File