homesync/contentmanager/mediaservant/src/msfillbrowsecontainer.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 17 Dec 2009 08:52:00 +0200
changeset 0 7f85d04be362
permissions -rw-r--r--
Revision: 200947 Kit: 200951

/*
* Copyright (c) 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:  CMSFillBrowseContainer class implementation
*
*/


#include <mediaservant.rsg>
#include <StringLoader.h>
#include <utf.h>
#include <e32math.h>

#include "mserv.hlp.hrh"
#include "cmfillrule.h"
#include "msfillbrowsecontainer.h"
#include "msfillbrowseview.h"
#include "msappui.h"
#include "msengine.h"
#include "mediaservantuid.h"

#include "msdebug.h"

// --------------------------------------------------------------------------
// CMSFillBrowseContainer::CMSFillBrowseContainer()
// --------------------------------------------------------------------------
//
CMSFillBrowseContainer::CMSFillBrowseContainer(
                                    CMSAppUi& aAppUi,
                                    CMSFillBrowseView& aView )
    {
    LOG(_L("[MediaServant]\t CMSFillBrowseContainer::\
    CMSFillBrowseContainer"));

    iAppUi = &aAppUi;
    iView = &aView;
    iIconCount = 0; //default icon   

    iAppUi->MSEngine()->SetObserver( this );
    }

// --------------------------------------------------------------------------
// CMSFillBrowseContainer::~CMSFillBrowseContainer()
// --------------------------------------------------------------------------
//
CMSFillBrowseContainer::~CMSFillBrowseContainer()
    {
    LOG(_L("[MediaServant]\t CMSFillBrowseContainer::\
    ~CMSFillBrowseContainer"));

    iStatusArray.Close();

    delete iListBox; // Deletes listbox object.
    }

// --------------------------------------------------------------------------
// CMSFillBrowseContainer::RandomizeListL()
// --------------------------------------------------------------------------
//
void CMSFillBrowseContainer::RandomizeListL()
    {
    LOG(_L("[MediaServant]\t CMSFillBrowseContainer::RandomizeListL"));

    iAppUi->MSEngine()->PreProcessFillListL( iRule->Name() );
    HBufC* naviText = StringLoader::LoadLC( R_MS_WAIT_RANDOMIZE );
    iView->SetNavigationPaneTextL( *naviText );
    CleanupStack::PopAndDestroy( naviText );
    }

// --------------------------------------------------------------------------
// CMSFillBrowseContainer::HasListRandomRule
// --------------------------------------------------------------------------
//
TBool CMSFillBrowseContainer::HasListRandomRule()
    {
    TBool retval = EFalse;
    if ( iRule->Method() == ECMRandom )
        {
        retval = ETrue;
        }
    return retval;
    }

// --------------------------------------------------------------------------
// CMSFillBrowseContainer::ReadyL()
// engine observer callback
// --------------------------------------------------------------------------
//
void CMSFillBrowseContainer::ReadyL( TCmService aService, TInt /*aError*/ )
    {
    LOG(_L("[MediaServant]\t CMSFillBrowseContainer::ReadyL"));

    if ( aService == ECmServicePreProcessingFilllist )
        {
        iView->ClearCurrentNaviPaneText();
        // read rules again
        iAppUi->FillRuleController()->UpdateArrayL();

        GetBrowseDataL();
        // Add data to listbox
        UpdateListBoxDataL();
        }
    }

// --------------------------------------------------------------------------
// CMSFillBrowseContainer::CheckIfStatusChanged()
// Checks if status values are changed
// --------------------------------------------------------------------------
//
TBool CMSFillBrowseContainer::CheckIfStatusChanged()
    {
    TBool status( EFalse );

    TInt itemCount = iItemArray->Count();

    for ( TInt i = 0; i < itemCount; i++ )
        {
        TCmListItemStatus status1 = (*iItemArray)[i]->Status();
        TCmListItemStatus status2 = iStatusArray[i];
        if ( (*iItemArray)[i]->Status() != iStatusArray[i] )
            {
            status = ETrue;
            i = itemCount; // break loop
            }
        }

    return status;
    }

// --------------------------------------------------------------------------
// CMSFillBrowseContainer::SetFileStatusesL()
// Sets file statuses
// --------------------------------------------------------------------------
//
void CMSFillBrowseContainer::SetFileStatusesL()
    {
    if ( CheckIfStatusChanged() )
        {
        iAppUi->MSEngine()->SetFillFileStatusesL( iItemArray );
        }
    }

// --------------------------------------------------------------------------
// CMSFillBrowseContainer::GetBrowseDataL()
// Gets file information from engine
// --------------------------------------------------------------------------
//
void CMSFillBrowseContainer::GetBrowseDataL()
    {
    LOG(_L("[MediaServant]\t CMSFillBrowseContainer::GetBrowseDataL"));

    CMSParameterAgent* parameterAgent = iAppUi->ParameterAgent();

    TInt selected = iAppUi->ParameterAgent()->FillViewFocusIndex();

    RPointerArray<CMSFillList>* fillListArray =
                        iAppUi->FillRuleController()->FillListArray();

    CMSFillList* fillList = (*fillListArray)[selected];
    iRule = fillList->List();
    // get media type
    iMediaType = iRule->MediaType();
    // get items covered by rule
    if( iItemArray )
        {
        iItemArray->ResetAndDestroy();
        iItemArray->Close();
        delete iItemArray;
        iItemArray = NULL;
        }
    iItemArray = iAppUi->MSEngine()->GetFillListItemsL( iRule->Name() );
    // keep original statuses safe
    for ( TInt i = 0; i < iItemArray->Count(); i++ )
        {
        iStatusArray.AppendL( (*iItemArray)[i]->Status() );
        }

    // Set title pane text
    HBufC* ruleName = CnvUtfConverter::ConvertToUnicodeFromUtf8L(
                                                    iRule->Name() );
    CleanupStack::PushL( ruleName );
    iView->SetTitlePaneTextL( *ruleName );
    CleanupStack::PopAndDestroy( ruleName );

    // set navi pane text
    CreateAndSetNaviPaneTextL( fillList->ItemCount(), fillList->ListSize() );
    }

// --------------------------------------------------------------------------
// CMSFillBrowseContainer::CreateAndSetNaviPaneTextL()
// --------------------------------------------------------------------------
//
void CMSFillBrowseContainer::CreateAndSetNaviPaneTextL( TUint32 aCount,
                                                        TUint32 aSize )
    {
    LOG(_L("[MediaServant]\t CMSFillBrowseContainer::\
    CreateAndSetNaviPaneTextL"));

    // Set navi pane text
    CArrayFix<TInt>* infoArray =
        new ( ELeave ) CArrayFixFlat<TInt>(2); // only 2 numbers needed
    CleanupStack::PushL( infoArray );

    HBufC* naviText = NULL;

    TReal size( 0 );
    Math::Round( size, TReal( aSize ) / KMega, 0 );


    switch ( aCount )
        {
        case 0: // 0 items
            {
            naviText = StringLoader::LoadLC(
                        R_MS_FILL_LIST_BROWSE_NAVI_0_ITEMS );
            break;
            }
        case 1: // 1 item
            {
            naviText = StringLoader::LoadLC(
                        R_MS_FILL_LIST_BROWSE_NAVI_1_ITEM, size );
            break;
            }
        default: // many items
            {
            infoArray->AppendL( size );
            infoArray->AppendL( aCount );
            naviText = StringLoader::LoadLC(
                        R_MS_FILL_LIST_BROWSE_NAVI_ITEMS, *infoArray );
            // do number conversion
            TPtr ptr = naviText->Des();
            AknTextUtils::DisplayTextLanguageSpecificNumberConversion( ptr );
            break;
            }
        }

    iView->SetNavigationPaneTextL( *naviText );
    CleanupStack::PopAndDestroy( naviText );
    CleanupStack::PopAndDestroy( infoArray );
    }


// --------------------------------------------------------------------------
// CMSFillBrowseContainer::SetStatusOfFiles()
// --------------------------------------------------------------------------
//
void CMSFillBrowseContainer::SetStatusOfFiles( TCmListItemStatus aStatus )
    {
    LOG(_L("[MediaServant]\t CMSFillBrowseContainer::SetStatusOfFiles"));

    const CListBoxView::CSelectionIndexArray* selections =
                                    ListBox()->SelectionIndexes();
    TInt count = selections->Count();

    // mark used
    if ( count )
        {
        for ( TInt index = 0; index < count; index++)
            {
            SetFileStatus( (*selections)[ index ], aStatus );

            }
        }
    // set only highlighted item status
    else
        {
        SetFileStatus( ListBox()->CurrentItemIndex(), aStatus );
        }

    }

// --------------------------------------------------------------------------
// CMSFillBrowseContainer::HandleResourceChange
// Handles layout change
// --------------------------------------------------------------------------
//
void CMSFillBrowseContainer::HandleResourceChange( TInt aType )
    {
    LOG(_L("[MediaServant]\t CMSFillBrowseContainer::\
    HandleResourceChange"));


    if ( aType == KEikDynamicLayoutVariantSwitch )
        {
        SetRect( iView->ClientRect() );
        }

    CCoeControl::HandleResourceChange( aType );
    }

// ---------------------------------------------------------------------------
// CMSFillBrowseContainer::GetHelpContext
// ---------------------------------------------------------------------------
//
void CMSFillBrowseContainer::GetHelpContext( TCoeHelpContext& aContext ) const
    {
    LOG(_L("[MediaServant]\t CMSFillBrowseContainer::GetHelpContext"));

    aContext.iMajor = TUid::Uid(KMediaServantUID3);
    aContext.iContext = KMSERV_HLP_FILL_BROWSE;
    }

// End of File