filemanager/App/src/CFileManagerContainerBase.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Wed, 13 Oct 2010 14:17:31 +0300
branchRCL_3
changeset 52 40fb776cbfb3
parent 42 f5c50b8af68c
permissions -rw-r--r--
Revision: 201039 Kit: 201041

/*
* Copyright (c) 2006-2007 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:  Base class for all file manager containers
*
*/



// INCLUDE FILES
#include <aknlists.h>
#include <eikclbd.h>
#include <StringLoader.h>
#include <FileManagerUID.h>
#include "CFileManagerContainerBase.h"
#include "FileManager.hrh"


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

// -----------------------------------------------------------------------------
// CFileManagerContainerBase::CFileManagerContainerBase
// C++ default constructor can NOT contain any code, that
// might leave.
// -----------------------------------------------------------------------------
//
CFileManagerContainerBase::CFileManagerContainerBase()
    {
    }

// -----------------------------------------------------------------------------
// CFileManagerContainerBase::ConstructL
// 
// -----------------------------------------------------------------------------
//
void CFileManagerContainerBase::ConstructL(
        const TRect& aRect,
        const TInt aFocusedIndex )
    {
    CreateWindowL();
    iListBox = CreateListBoxL();
    if ( !iListBox )
        {
        User::Leave( KErrGeneral );
        }
    SetListEmptyL();
    iListBox->CreateScrollBarFrameL( ETrue );
    iListBox->ScrollBarFrame()->SetScrollBarVisibilityL(
        CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto );
    iListBox->SetObserver( this );
    iListBox->SetListBoxObserver( this );
    SetIndex( aFocusedIndex );
    iListBox->SetFocus( ETrue );
    iListBox->AddSelectionObserverL( this );
    SetRect( aRect );
    ActivateL();
    }

// -----------------------------------------------------------------------------
// CFileManagerContainerBase::~CFileManagerContainerBase
//
// -----------------------------------------------------------------------------
//
CFileManagerContainerBase::~CFileManagerContainerBase()
    {
    delete iListBox;
    delete iEmptyText;
    }

// -----------------------------------------------------------------------------
// CFileManagerContainerBase::SizeChanged
// 
// -----------------------------------------------------------------------------
//
void CFileManagerContainerBase::SizeChanged()
    {
    if ( iListBox )
        {
        iListBox->SetRect( Rect() );
        }
    }

// -----------------------------------------------------------------------------
// CFileManagerContainerBase::CountComponentControls
// 
// -----------------------------------------------------------------------------
//
TInt CFileManagerContainerBase::CountComponentControls() const
    {
    return iListBox ? 1 : 0;
    }

// -----------------------------------------------------------------------------
// CFileManagerContainerBase::ComponentControl
// 
// -----------------------------------------------------------------------------
//
CCoeControl* CFileManagerContainerBase::ComponentControl(
        TInt /* aIndex */ ) const
    {
    return iListBox;
    }

// -----------------------------------------------------------------------------
// CFileManagerContainerBase::OfferKeyEventL
// 
// -----------------------------------------------------------------------------
//
TKeyResponse CFileManagerContainerBase::OfferKeyEventL(
        const TKeyEvent& aKeyEvent, TEventCode aType )
    {
    return iListBox->OfferKeyEventL( aKeyEvent, aType );
    }

// -----------------------------------------------------------------------------
// CFileManagerContainerBase::ListBox
// 
// -----------------------------------------------------------------------------
//
CEikListBox& CFileManagerContainerBase::ListBox()
    {
    return *iListBox;
    }

// -----------------------------------------------------------------------------
// CFileManagerContainerBase::RefreshListL
// 
// -----------------------------------------------------------------------------
//
void CFileManagerContainerBase::RefreshListL( TInt aFocusedIndex )
    {
    if ( !iListBox )
        {
        return;
        }

    TBool isEmpty( ETrue );
    if ( iArray )
        {
        if ( iArray->MdcaCount() )
            {
            isEmpty = EFalse;
            iListBox->Model()->SetItemTextArray( iArray );
            // Remove ownership from listbox.
            iListBox->Model()->SetOwnershipType( ELbmDoesNotOwnItemArray );
            }
        }
    if ( isEmpty )
        {
        SetEmptyArrayL();
        }

    iListBox->Reset();
    SetIndex( aFocusedIndex );
    iListBox->UpdateScrollBarsL();
    iListBox->SetFocus( ETrue );

    if ( iEmptyText )
        {
        iListBox->View()->SetListEmptyTextL( *iEmptyText );
        }
    else
        {
        iListBox->View()->SetListEmptyTextL( KNullDesC );
        }
    iListBox->DrawDeferred();
    }

// -----------------------------------------------------------------------------
// CFileManagerContainerBase::SetListEmptyL
// 
// -----------------------------------------------------------------------------
//
void CFileManagerContainerBase::SetListEmptyL()
    {
    if ( !iListBox )
        {
        return;
        }
    SetEmptyArrayL();
    iListBox->View()->SetListEmptyTextL( KNullDesC );
    }

// -----------------------------------------------------------------------------
// CFileManagerContainerBase::SetIndex
// 
// -----------------------------------------------------------------------------
//
void CFileManagerContainerBase::SetIndex( TInt aFocusedIndex )
    {
    if ( !iListBox )
        {
        return;
        }
    // Check that given index is valid
    if ( aFocusedIndex >= 0 && 
         aFocusedIndex < iListBox->Model()->NumberOfItems() )
        {
        iListBox->SetCurrentItemIndex( aFocusedIndex );
        }
    else
        {
        // if list is empty or value is negative then set focus to 0
        if ( !iListBox->Model()->NumberOfItems() || aFocusedIndex < 0 )
            {
            iListBox->SetCurrentItemIndex( 0 );
            }
        else 
            {
            // Something has been deleted in the end of the list
            // set focus to last one so the focus doesn't jump around
            iListBox->SetCurrentItemIndex(
                iListBox->Model()->NumberOfItems() - 1 );
            }
        }
    }

// -----------------------------------------------------------------------------
// CFileManagerContainerBase::SetTextArray
// 
// -----------------------------------------------------------------------------
//
void CFileManagerContainerBase::SetTextArray( MDesCArray* aArray )
    {
    iArray = aArray;
    }

// -----------------------------------------------------------------------------
// CFileManagerContainerBase::SetEmptyTextL
// 
// -----------------------------------------------------------------------------
//
void CFileManagerContainerBase::SetEmptyTextL( TInt aTextId )
    {
    delete iEmptyText;
    iEmptyText = NULL;

    if ( aTextId )
        {
        iEmptyText = StringLoader::LoadL( aTextId );
        }
    }

// -----------------------------------------------------------------------------
// CFileManagerContainerBase::SetHelpContext
// 
// -----------------------------------------------------------------------------
//
void CFileManagerContainerBase::SetHelpContext(
        const TDesC& aHelpContext )
    {
    iHelpContext = aHelpContext;
    }

// -----------------------------------------------------------------------------
// CFileManagerContainerBase::HandleListBoxEventL
//
// -----------------------------------------------------------------------------
//
void CFileManagerContainerBase::HandleListBoxEventL(
        CEikListBox* /*aListBox*/, TListBoxEvent aEventType )
    {
    switch ( aEventType )
        {
        case EEventItemSingleClicked: // FALLTHROUGH
        case EEventEnterKeyPressed:
            {
            static_cast< CAknAppUi* >( ControlEnv()->AppUi() )->
                ProcessCommandL( EFileManagerSelectionKey );
            break;
            }
        default:
            {
            break;
            }
        }
    }

// -----------------------------------------------------------------------------
// CFileManagerContainerBase::HandleControlEventL
//
// -----------------------------------------------------------------------------
//
void CFileManagerContainerBase::HandleControlEventL(
        CCoeControl* /* aControl*/, TCoeEvent /*aEventType*/ )
    {
    }

// -----------------------------------------------------------------------------
// CFileManagerContainerBase::FocusChanged
// 
// -----------------------------------------------------------------------------
//
void CFileManagerContainerBase::FocusChanged( TDrawNow aDrawNow )
    {
    CCoeControl::FocusChanged( aDrawNow );

    if ( iListBox )
        {
        iListBox->SetFocus( IsFocused(), aDrawNow );
        }
    }

// -----------------------------------------------------------------------------
// CFileManagerContainerBase::GetHelpContext
// 
// -----------------------------------------------------------------------------
// 
void CFileManagerContainerBase::GetHelpContext(
        TCoeHelpContext& aContext ) const
	{
    if ( iHelpContext.Length() )
        {
        aContext.iMajor = TUid::Uid( KFileManagerUID3 );
	    aContext.iContext = iHelpContext;
	    }
    else
        {
        CCoeControl::GetHelpContext( aContext );
        }
	}

// -----------------------------------------------------------------------------
// CFileManagerContainerBase::ListBoxExists
// 
// -----------------------------------------------------------------------------
// 
TBool CFileManagerContainerBase::ListBoxExists() const
    {
    return iListBox ? ETrue : EFalse;
    }

// -----------------------------------------------------------------------------
// CFileManagerContainerBase::SetEmptyArrayL
// 
// -----------------------------------------------------------------------------
// 
void CFileManagerContainerBase::SetEmptyArrayL()
    {
    CDesCArray* empty = new( ELeave ) CDesCArrayFlat( 1 );
    iListBox->Model()->SetItemTextArray( empty );
    // Transfer ownership to listbox.
    iListBox->Model()->SetOwnershipType( ELbmOwnsItemArray );
    }

// -----------------------------------------------------------------------------
// CFileManagerContainerBase::ProcessCommandL
// 
// -----------------------------------------------------------------------------
// 
void CFileManagerContainerBase::ProcessCommandL( TInt aCommandId )
    {
    switch ( aCommandId )
        {
        case EAknSoftkeyShiftMSK:
            {
            static_cast< CAknAppUi* >( ControlEnv()->AppUi() )->
                ProcessCommandL( EFileManagerToggleMark );
            break;
            }
            
        default:
            {
            break;
            }
        }
    }

// -----------------------------------------------------------------------------
// CFileManagerContainerBase::SelectionModeChanged
// 
// -----------------------------------------------------------------------------
// 
void CFileManagerContainerBase::SelectionModeChanged(
        CEikListBox* aListBox, TBool aSelectionModeEnabled )
    {
    if ( iListBox == aListBox &&
        iSelectionModeEnabled != aSelectionModeEnabled )
        {
        iSelectionModeEnabled = aSelectionModeEnabled;
        if ( !iSelectionModeEnabled )
            {
            // Update cba after selection mode gets done
            UpdateCba();
            }
        }
    }

// -----------------------------------------------------------------------------
// CFileManagerContainerBase::SelectionModeEnabled
// 
// -----------------------------------------------------------------------------
// 
TBool CFileManagerContainerBase::SelectionModeEnabled() const
    {
    return iSelectionModeEnabled;
    }

// -----------------------------------------------------------------------------
// CFileManagerContainerBase::UpdateCba
// 
// -----------------------------------------------------------------------------
// 
void CFileManagerContainerBase::UpdateCba()
    {
    }

// -----------------------------------------------------------------------------
// CFileManagerContainerBase::ListBoxCurrentItemIndex
// 
// -----------------------------------------------------------------------------
// 
TInt CFileManagerContainerBase::ListBoxCurrentItemIndex()
    {
    return iListBox->CurrentItemIndex();
    }

// -----------------------------------------------------------------------------
// CFileManagerContainerBase::ListBoxNumberOfItems
// 
// -----------------------------------------------------------------------------
//
TInt CFileManagerContainerBase::ListBoxNumberOfItems()
    {
    return iListBox->Model()->NumberOfItems();
    }

// -----------------------------------------------------------------------------
// CFileManagerContainerBase::ListBoxSelectionIndexes
// 
// -----------------------------------------------------------------------------
//
const CArrayFix< TInt >* CFileManagerContainerBase::ListBoxSelectionIndexes()
    {
    return iListBox->SelectionIndexes();
    }

// -----------------------------------------------------------------------------
// CFileManagerContainerBase::ListBoxSelectionIndexesCount
// 
// -----------------------------------------------------------------------------
//
TInt CFileManagerContainerBase::ListBoxSelectionIndexesCount()
    {
    return iListBox->SelectionIndexes()->Count();
    }

// -----------------------------------------------------------------------------
// CFileManagerContainerBase::ListBoxToggleItemL
// 
// -----------------------------------------------------------------------------
//
void CFileManagerContainerBase::ListBoxToggleItemL( TInt aIndex )
    {
    iListBox->View()->ToggleItemL( aIndex );
    }

// -----------------------------------------------------------------------------
// CFileManagerContainerBase::ListBoxIsItemSelected
// 
// -----------------------------------------------------------------------------
//
TBool CFileManagerContainerBase::ListBoxIsItemSelected( TInt aIndex )
    {
    return iListBox->View()->ItemIsSelected( aIndex );
    }

// -----------------------------------------------------------------------------
// CFileManagerContainerBase::ListBoxSelectAllL
// 
// -----------------------------------------------------------------------------
//
void CFileManagerContainerBase::ListBoxSelectAllL()
    {
    TInt count( ListBoxNumberOfItems() );
    if ( count > 0 )
        {
        CArrayFixFlat<TInt>* array =
            new( ELeave ) CArrayFixFlat< TInt >( count );
        CleanupStack::PushL( array );
        for ( TInt i( 0 ); i < count; ++i )
            {
            array->AppendL( i );
            }
        iListBox->View()->SetSelectionIndexesL( array );
        CleanupStack::PopAndDestroy( array );
        }
    }

// -----------------------------------------------------------------------------
// CFileManagerContainerBase::ListBoxClearSelection
// 
// -----------------------------------------------------------------------------
//
void CFileManagerContainerBase::ListBoxClearSelection()
    {
    iListBox->View()->ClearSelection();
    }

// -----------------------------------------------------------------------------
// CFileManagerContainerBase::ListBoxSetTextL
// 
// -----------------------------------------------------------------------------
//
void CFileManagerContainerBase::ListBoxSetTextL( const TDesC& aText )
    {
    iListBox->View()->SetListEmptyTextL( aText );
    iListBox->DrawDeferred();
    }

// -----------------------------------------------------------------------------
// CFileManagerContainerBase::IsSearchFieldVisible
// 
// -----------------------------------------------------------------------------
//
TBool CFileManagerContainerBase::IsSearchFieldVisible() const
    {
    return EFalse;
    }

// -----------------------------------------------------------------------------
// CFileManagerContainerBase::EnableSearchFieldL
// 
// -----------------------------------------------------------------------------
//
void CFileManagerContainerBase::EnableSearchFieldL(
        TBool /*aEnable*/, const TDesC& /*aSearchText^*/ )
    {
    }

// -----------------------------------------------------------------------------
// CFileManagerContainerBase::SetCurrentItemIndexAfterSearch
// 
// -----------------------------------------------------------------------------
//
void CFileManagerContainerBase::SetCurrentItemIndexAfterSearch(
        TInt /*aIndex*/ )
    {
    }

// -----------------------------------------------------------------------------
// CFileManagerContainerBase::ListBoxSelectItemL
// 
// -----------------------------------------------------------------------------
//
void CFileManagerContainerBase::ListBoxSelectItemL( TInt aIndex )
    {
    iListBox->View()->SelectItemL( aIndex );
    }

// -----------------------------------------------------------------------------
// CFileManagerContainerBase::ListBoxDeselectItem
// 
// -----------------------------------------------------------------------------
//
void CFileManagerContainerBase::ListBoxDeselectItem( TInt aIndex )
    {
    iListBox->View()->DeselectItem( aIndex );
    }

// -----------------------------------------------------------------------------
// CFileManagerContainerBase::ListBoxSetSelectionIndexesL
// 
// -----------------------------------------------------------------------------
//
void CFileManagerContainerBase::ListBoxSetSelectionIndexesL(const CArrayFixFlat<TInt>* 
                                                                aSelectionIndexes)
	{
	iListBox->View()->SetSelectionIndexesL( aSelectionIndexes );
	}
	
// -----------------------------------------------------------------------------
// CFileManagerContainerBase::SearchFieldToListBoxIndex
// 
// -----------------------------------------------------------------------------
//
TInt CFileManagerContainerBase::SearchFieldToListBoxIndex( TInt aIndex )
    {
    return 0;
    }
//  End of File