/*
* 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: 
*     Logs application "App List" view class implementation
*
*/


// INCLUDE FILES
#include <Logs.rsg>
#include <w32std.h>
#include <apgtask.h>

#include "CLogsAppListView.h"
#include "CLogsAppListControlContainer.h"
#include "CLogsAppUi.h"
#include "CLogsEngine.h"

// EXTERNAL DATA STRUCTURES

// EXTERNAL FUNCTION PROTOTYPES  

// CONSTANTS

// MACROS

// LOCAL CONSTANTS AND MACROS

// MODULE DATA STRUCTURES

// LOCAL FUNCTION PROTOTYPES

// ==================== LOCAL FUNCTIONS ====================

// ================= MEMBER FUNCTIONS =======================

// ----------------------------------------------------------------------------
// CLogsAppListView::NewL
// ----------------------------------------------------------------------------
//
CLogsAppListView* CLogsAppListView::NewL() 
    {
    CLogsAppListView* self = new ( ELeave ) CLogsAppListView;
    CleanupStack::PushL( self );
    self->ConstructL();
    CleanupStack::Pop();
    return self;
    }

// ----------------------------------------------------------------------------
// CLogsAppListView::~CLogsAppListView
// ----------------------------------------------------------------------------
//
CLogsAppListView::~CLogsAppListView()
    {
    if( iContainer )
        {
        AppUi()->RemoveFromViewStack( *this, iContainer );
        delete iContainer;
        }
    }

// ----------------------------------------------------------------------------
// CLogsAppListView::HandleCommandL
// ----------------------------------------------------------------------------
//
void CLogsAppListView::HandleCommandL( TInt aCommandId )
    {
    switch( aCommandId )
        {
        case ELogsCmdMenuOpen:
            LogsAppUi()->CmdOkL( iContainer->ListBox()->CurrentItemIndex() );
            break;

        default:
            CLogsBaseView::HandleCommandL( aCommandId );
        }
    }

// ----------------------------------------------------------------------------
// CLogsAppListView::Id
// ----------------------------------------------------------------------------
//
TUid CLogsAppListView::Id() const
    {
    return TUid::Uid( ELogAppListViewId );
    }

// ----------------------------------------------------------------------------
// CLogsAppListView::HandleClientRectChange
// ----------------------------------------------------------------------------
//
void CLogsAppListView::HandleClientRectChange()
    {
    if (iContainer)
        {
        iContainer->SetRect( ClientRect() );  
        }
    }

// ----------------------------------------------------------------------------
// CLogsAppListView::DoActivateL
// ----------------------------------------------------------------------------
//
void CLogsAppListView::DoActivateL( const TVwsViewId& aPrevViewId, 
          TUid aCustomMessageId, const TDesC8& /* aCustomMessage */ )
    {
    //Reset ProvideOnlyRecentViews always when other than CLogsRecentListView is activated. 
    LogsAppUi()->SetProvideOnlyRecentViews( EFalse );
    
    if( ! iContainer )
        {
        iContainer = CLogsAppListControlContainer::NewL( this, ClientRect() );
        AppUi()->AddToViewStackL( *this, iContainer );
        }

    //Set focus to correct row if we return from subselection view
    switch( aPrevViewId.iViewUid.iUid )
        {
        case ECtViewId:
            iSelectedLine = 1;
            break;    
        case EGprsCounterViewId:
            iSelectedLine = 2;
            break;    
        case ELogSubAppListViewId:
        default:
            iSelectedLine = 0;    
        }

    // See Error ELJG-7PKAC8  
    iContainer->ListBox()->SetCurrentItemIndex( iSelectedLine );
    iContainer->ListBox()->SetListBoxObserver( this );

    LogsAppUi()->SetPreviousViewId( aPrevViewId.iViewUid );
    LogsAppUi()->SetCurrentViewId( Id() );

    Engine()->DeleteSMSEventUpdater();  // <>StartSMSEventUpdaterL()

    if( aCustomMessageId.iUid == ELogsViewActivationBackground )
        {
        // We have activated this view because we are hiding Logs into 
        // background (faking exit) so this view is waiting when Logs is 
        // again foregrounded. 
        // Now we can enable bring-to-foreground on view activation:         
        AppUi()->SetCustomControl(0); 
        AppUi()->HideInBackground(); 
        }
    
    // Just to make sure the inputblocker is not on
    RemoveInputBlocker();
    }

// ----------------------------------------------------------------------------
// CLogsAppListView::DoDeactivate
// ----------------------------------------------------------------------------
//
void CLogsAppListView::DoDeactivate()
    {
    if( iContainer )
        {
        iSelectedLine = iContainer->ListBox()->CurrentItemIndex();
        // Remove view and its control from the view stack
        AppUi()->RemoveFromViewStack( *this, iContainer );

        // Destroy the container control
        delete iContainer;
        iContainer = NULL;
        }
    }

// ----------------------------------------------------------------------------
// CLogsAppListView::ConstructL
// ----------------------------------------------------------------------------
//
void CLogsAppListView::ConstructL()
    {
    BaseConstructL( R_LOGS_APP_LIST_VIEW );
    }

// ----------------------------------------------------------------------------
// CLogsAppListView::CLogsAppListView
// ----------------------------------------------------------------------------
//
CLogsAppListView::CLogsAppListView()
    {
    }


//  End of File

