homesync/contentmanager/mediaservant/src/msitembrowser.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Mon, 04 Oct 2010 00:34:14 +0300
changeset 35 f37b1259bd7b
parent 0 7f85d04be362
permissions -rw-r--r--
Revision: 201037 Kit: 201039

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



#include <AknIconArray.h>
#include <mediaservant.rsg>
#include <mediaservant.mbg>
#include <avkon.mbg>
#include <aknnotedialog.h>
#include <StringLoader.h>
#include <e32math.h>

#include "cmbaselistitem.h"
#include "msappui.h"
#include "msitembrowser.h"
#include "msengine.h"
#include "msconstants.h"
#include "msdebug.h"


// --------------------------------------------------------------------------
// CMSItemBrowser::ConstructL()
// --------------------------------------------------------------------------
//
void CMSItemBrowser::ConstructL( TRect aRect )
    {
    LOG(_L("[MediaServant]\t CMSItemBrowser::ConstructL"));    

    GetBrowseDataL();

    CreateWindowL();

    iListBox = new (ELeave) CAknDoubleGraphicStyleListBox;

    SetListBoxFromResourceL(iListBox, R_BROWSE_VIEW_LISTBOX);

    // Create icons
    CAknIconArray* icons = new (ELeave) CAknIconArray( EIconCount );
    CleanupStack::PushL( icons );
    MAknsSkinInstance* skin = AknsUtils::SkinInstance();

    // mark icon
    AppendIconToArrayL( icons, skin,
                        KAvkonMifFileName,
                        KAknsIIDDefault,
                        EMbmAvkonQgn_indi_marked_add,
                        EMbmAvkonQgn_indi_marked_add_mask );

    // image icon
    AppendIconToArrayL( icons, skin,
                        KMSMifFileName,
                        KAknsIIDDefault,
                        EMbmMediaservantQgn_prop_file_image,
                        EMbmMediaservantQgn_prop_file_image_mask );
    // audio icon
    AppendIconToArrayL( icons, skin,
                        KMSMifFileName,
                        KAknsIIDDefault,
                        EMbmMediaservantQgn_prop_file_audio,
                        EMbmMediaservantQgn_prop_file_audio_mask );
    // video icon
    AppendIconToArrayL( icons, skin,
                        KMSMifFileName,
                        KAknsIIDDefault,
                        EMbmMediaservantQgn_prop_file_video,
                        EMbmMediaservantQgn_prop_file_video_mask );


    iListBox->ItemDrawer()->FormattedCellData()->SetIconArray(icons);
    CleanupStack::Pop(icons);

    // Container is listbox observer
    iListBox->SetListBoxObserver( this );

    SetRect(aRect);

    // Add data to listbox
    UpdateListBoxDataL();

    ActivateL(); // Activates window. ( Ready to draw )
    }

// --------------------------------------------------------------------------
// CMSItemBrowser::~CMSItemBrowser
// --------------------------------------------------------------------------
CMSItemBrowser::~CMSItemBrowser()
    {
    if ( iItemArray )
        {
        iItemArray->ResetAndDestroy();
        iItemArray->Close();
        delete iItemArray;
        }
    }

// --------------------------------------------------------------------------
// CMSItemBrowser::CountComponentControls()
// Returns number of components.
// --------------------------------------------------------------------------
//
TInt CMSItemBrowser::CountComponentControls() const
    {
    return 1; // return number of controls inside this container
    }

// --------------------------------------------------------------------------
// CMSItemBrowser::ComponentControl()
// Returns pointer to particular component.
// --------------------------------------------------------------------------
//
CCoeControl* CMSItemBrowser::ComponentControl( TInt /*aIndex*/) const

    {
    return iListBox; // return a pointer to the listbox
    }

// --------------------------------------------------------------------------
// CMSItemBrowser::OfferKeyEventL()
// Handles the key events.
// --------------------------------------------------------------------------
//
TKeyResponse CMSItemBrowser::OfferKeyEventL(
    const TKeyEvent& aKeyEvent,
    TEventCode aType )
    {
    LOG(_L("[MediaServant]\t CMSItemBrowser::OfferKeyEventL"));

    TKeyResponse response = EKeyWasNotConsumed;

    if ( aType != EEventKey )
        {
        response =  EKeyWasNotConsumed;
        }

    if ( iListBox )
        {
        response = iListBox->OfferKeyEventL( aKeyEvent, aType );
        }

    return response;
    }

// --------------------------------------------------------------------------
// CMSItemBrowser::HandleListBoxEventL()
// Handles listbox event.
// --------------------------------------------------------------------------
void CMSItemBrowser::HandleListBoxEventL(
    CEikListBox* /*aListBox*/,
    TListBoxEvent /*aEventType*/ )
    {
    LOG(_L("[MediaServant]\t CMSItemBrowser::HandleListBoxEventL"));
    }

// --------------------------------------------------------------------------
// CMSItemBrowser::ReadDataFromEngineL()
// Reads data items from engine
// --------------------------------------------------------------------------
//
void CMSItemBrowser::UpdateListBoxDataL()
    {
    LOG(_L("[MediaServant]\t CMSItemBrowser::UpdateListBoxDataL"));

    // Listbox items
    CDesCArray* itemArray = static_cast<CDesCArray*>
                                   (iListBox->Model()->ItemTextArray());
    // Clear list
    itemArray->Reset();

    TInt count = iItemArray->Count();

    for (TInt index = 0; index < count; index++)
        {
        TInt iconType;
        CCmBaseListItem* item = (*iItemArray)[index];
        TUint32 fileSize = item->Size();
        HBufC* fileSizeStr = NULL;
        HBufC* primaryText = HBufC::NewLC( KMaxDataTypeLength );
        HBufC* secondaryText = HBufC::NewLC( KMaxDataTypeLength );

        switch ( iMediaType )
            {
            case ECmVideo:
            // fall through
            case ECmOtherVideo:
                {
                iconType = EIconVideo;
                break;
                }
            case ECmImage:
            // fall through
            case ECmOtherImage:
                {
                iconType = EIconImage;
                break;
                }
            case ECmAudio:
                {
                iconType = EIconAudio;

                secondaryText->Des().Copy( item->SecondaryText() );
                break;
                }
            default:
                {
                iconType = EIconVideo;
                break;
                }
            }

        // Set item secondary text
        if ( fileSize < KMega )
            {
            if ( secondaryText->Length() )
                {
                secondaryText->Des().Append( KDelimiter);
                }

            fileSizeStr = StringLoader::LoadLC(
                                  R_MS_FILE_SIZE_KB, fileSize / KKilo );
            }
        else
            {
            if ( secondaryText->Length() )
                {
                secondaryText->Des().Append( KDelimiter );
                }

            TReal size( 0 );
            Math::Round( size, TReal( fileSize ) / KMega, 0 );
            fileSizeStr = StringLoader::LoadLC(
                                  R_MS_FILE_SIZE_MB, size );
            }

        secondaryText->Des().Append( *fileSizeStr );
        if ( fileSizeStr )
            {
            CleanupStack::PopAndDestroy( fileSizeStr );
            }

        // do number conversion
        TPtr ptr = secondaryText->Des();
        AknTextUtils::DisplayTextLanguageSpecificNumberConversion( ptr );

        // add item
        AppendItemToListBoxArrayL(
                            iListBox,
                            iListBox->Model(),
                            iconType, // default icon
                            (*iItemArray)[index]->PrimaryText(),
                            *secondaryText );
        CleanupStack::PopAndDestroy( secondaryText );
        CleanupStack::PopAndDestroy( primaryText );
        }
    }

// --------------------------------------------------------------------------
// CMSItemBrowser::SetCurrentFileStatus
// --------------------------------------------------------------------------
//
void CMSItemBrowser::SetFileStatus( TInt aIndex,
                                           TCmListItemStatus aStatus )
    {
    LOG(_L("[MediaServant]\t CMSItemBrowser::SetFileStatus"));

    (*iItemArray)[aIndex]->SetStatus( aStatus );
    }

// --------------------------------------------------------------------------
// CMSItemBrowser::GetCurrentFileStatus
// --------------------------------------------------------------------------
//
TCmListItemStatus CMSItemBrowser::FileStatus( TInt aIndex )
    {
    LOG(_L("[MediaServant]\t CMSItemBrowser::FileStatus"));

    return (*iItemArray)[ aIndex ]->Status();
    }

// --------------------------------------------------------------------------
// CMSItemBrowser::ListBox()
// Returns listbox
// --------------------------------------------------------------------------
//
CEikListBox* CMSItemBrowser::ListBox()
    {
    return iListBox;
    }

// --------------------------------------------------------------------------
// CMSItemBrowser::SizeChanged()
// Called by framework when the view size is changed.
// --------------------------------------------------------------------------
//
void CMSItemBrowser::SizeChanged()
    {
    // container control resize code.
    if ( iListBox )
        {
        iListBox->SetRect( Rect() ); // Set rectangle of listbox.
        }
    }