homemedia/homemedia/src/homemediacontainer.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:      Main application window
*
*/





#include <StringLoader.h> 
#include <homemedia.rsg>

// debug log support
_LIT( KComponentLogfile, "homemedia.txt");
#include "upnplog.h"

#include "homemediacontainer.h"
#include "upnppluginloader.h"
#include "upnpfilesharingengine.h"
#include "iupnp.hlp.hrh"

//CONSTANTS
#define KHomeMEdiaUID           0x2000F8D6 // home media app UID
static const TInt KNumberOfItemsBeforePlugins( 2 );
_LIT( KFormatWithOneStr , "%d\t%S\t\t" );
_LIT( KFormatWithTwoStr , "%d\t%S\t%S\t" );

// --------------------------------------------------------------------------
// CHomeMediaContainer::NewL
// --------------------------------------------------------------------------
//
CHomeMediaContainer* CHomeMediaContainer::NewL(const TRect& aRect,
    CUPnPFileSharingEngine& aFileSharing,
    const RPointerArray<CUPnPPluginInterface>& aPluginArray)
    {
    CHomeMediaContainer* self = 
        CHomeMediaContainer::NewLC(aRect, aFileSharing, aPluginArray );
    CleanupStack::Pop(self); 
    return self;
    }

// --------------------------------------------------------------------------
// CHomeMediaContainer::NewLC
// --------------------------------------------------------------------------
//
CHomeMediaContainer* CHomeMediaContainer::NewLC(const TRect& aRect,
    CUPnPFileSharingEngine& aFileSharing,
    const RPointerArray<CUPnPPluginInterface>& aPluginArray)
    {
    CHomeMediaContainer* self = 
        new (ELeave) CHomeMediaContainer(aFileSharing,aPluginArray);
    CleanupStack::PushL(self);
    self->ConstructL(aRect);
    return self;
    }

// --------------------------------------------------------------------------
// CHomeMediaContainer::~CHomeMediaContainer
// --------------------------------------------------------------------------
//
CHomeMediaContainer::~CHomeMediaContainer()
    {
    }

// --------------------------------------------------------------------------
// CHomeMediaContainer::UpdateL
// --------------------------------------------------------------------------
//
void CHomeMediaContainer::UpdateL()
    {
    if( iListBoxItems->Count() > 0 )
        {
        iListBoxItems->Reset();
        }
    //Set Browse item
    HBufC* columnText = StringLoader::LoadLC( R_HOMEMEDIA_BROWSEHOME_TEXT );
    AddColumnL(KFormatWithOneStr,0,columnText);
    CleanupStack::PopAndDestroy( columnText );

    //Set Sharing item
    HBufC* secondaryText = NULL;
    if ( iFileSharing.SharingStateL() )
        {
        secondaryText = 
            StringLoader::LoadLC( R_HOMEMEDIA_SHARE_ACTIVE_TEXT );
        }
    else
        {
        secondaryText = 
            StringLoader::LoadLC( R_HOMEMEDIA_SHARE_INACTIVE_TEXT );
        }

    columnText = StringLoader::LoadLC( R_HOMEMEDIA_SHARECONTENT_TEXT );
    AddColumnL( KFormatWithTwoStr,
                1,
                columnText,
                secondaryText );
    CleanupStack::PopAndDestroy( columnText );
    CleanupStack::PopAndDestroy( secondaryText );

    //Load plugins icons & texts
    UpdatePluginsL();
   }

// --------------------------------------------------------------------------
// CHomeMediaContainer::CHomeMediaContainer
// --------------------------------------------------------------------------
//
CHomeMediaContainer::CHomeMediaContainer( 
    CUPnPFileSharingEngine& aFileSharing,
    const RPointerArray<CUPnPPluginInterface>& aPluginArray ):
    iFileSharing( aFileSharing ),
    iPluginArray( aPluginArray )
    {
    // No implementation required
    }

// --------------------------------------------------------------------------
// CHomeMediaContainer::ConstructL
// --------------------------------------------------------------------------
//
void CHomeMediaContainer::ConstructL(const TRect& aRect)
    {
    CAknDoubleLargeStyleListBox* listBoxModel
                                   = new (ELeave)CAknDoubleLargeStyleListBox;
    BaseConstructL( aRect , listBoxModel );
    UpdateL();
    }

// --------------------------------------------------------------------------
// CHomeMediaContainer::UpdatePluginsL
// --------------------------------------------------------------------------
//
void CHomeMediaContainer::UpdatePluginsL()
    {
    __LOG("CHomeMediaContainer::UpdatePluginsL begin");
    CEikFormattedCellListBox* listBox = 
        static_cast<CEikFormattedCellListBox*>( &ListBox() );

    CArrayPtr<CGulIcon>& icons = 
        *listBox->ItemDrawer()->FormattedCellData()->IconArray();
    // Remove old plugins icons
    TInt pluginIcons = icons.Count() - KNumberOfItemsBeforePlugins;
    while( pluginIcons )
        {
        pluginIcons--;
        CGulIcon* icon = icons[ KNumberOfItemsBeforePlugins ];
        icons.Delete( KNumberOfItemsBeforePlugins );
        delete icon;
        icon = NULL;
        }

    for( TInt i = 0; i < iPluginArray.Count(); i++ )
        {
        //append icon
        const CGulIcon& icon = iPluginArray[i]->GetIcon();
        CGulIcon* copyIcon = CGulIcon::NewL( icon.Bitmap(), icon.Mask() );
        CleanupStack::PushL( copyIcon );
        // Icon is handled by us, but bitmaps by plugin
        // when we delete icon, we delete icon only but not bitmaps
        copyIcon->SetBitmapsOwnedExternally( ETrue );
        icons.AppendL( copyIcon ); //Ownership goes to array
        CleanupStack::Pop( copyIcon );

        HBufC* primary = NULL;
        HBufC* secondary = NULL;

        // if title of the plugin is not null alloc space for it
        if ( &(iPluginArray[i]->GetTitle()) )
            {
            primary = ( iPluginArray[i]->GetTitle() ).AllocLC();
            }
        else
            {
            primary = KNullDesC().AllocLC();
            }

        // if secondary text of the plugin is not null alloc space for it
        if ( &(iPluginArray[i]->GetSecondaryText()) )
            {
            secondary = ( iPluginArray[i]->GetSecondaryText() ).AllocLC();
            }
        else
            {
            secondary = KNullDesC().AllocLC();
            }

        AddColumnL( KFormatWithTwoStr,
                    i + KNumberOfItemsBeforePlugins,
                    primary,
                    secondary );

        // deletion of the texts after they have been set to listbox item
        CleanupStack::PopAndDestroy( secondary );
        CleanupStack::PopAndDestroy( primary );
        }
    __LOG("CHomeMediaContainer::UpdatePluginsL end");
    }


// ---------------------------------------------------------------------------
// CHomeMediaContainer::GetHelpContext
// ---------------------------------------------------------------------------
//
void CHomeMediaContainer::GetHelpContext( TCoeHelpContext& aContext ) const
    {

    aContext.iMajor = TUid::Uid(0x2000F8D6);
    aContext.iContext = KUPNP_HLP_MAIN_VIEW;
    }