/*
* 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:  Implementation of MPXVideoPlaybackControlConfiguration
*
*/

// Version : %version: 11 %


// INCLUDE FILES
#include <e32def.h>
#include <e32base.h>
#include <AknUtils.h>

#include "mpxvideoplaybackcontrolconfiguration.h"
#include "mpxvideoplaybackcontrolscontroller.h"
#include "mpxvideoplaybackviewfiledetails.h"
#include "mpxvideo_debug.h"

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

// -------------------------------------------------------------------------------------------------
// CMPXVideoPlaybackControlConfiguration::CMPXVideoPlaybackControlConfiguration()
// C++ default constructor can NOT contain any code, that might leave.
// -------------------------------------------------------------------------------------------------
//
CMPXVideoPlaybackControlConfiguration::CMPXVideoPlaybackControlConfiguration(
    CMPXVideoPlaybackControlsController* aController)
    : iControlsController( aController )
{
}

// -------------------------------------------------------------------------------------------------
// CMPXVideoPlaybackControlConfiguration::ConstructL()
// Symbian 2nd phase constructor can leave.
// -------------------------------------------------------------------------------------------------
//
void CMPXVideoPlaybackControlConfiguration::ConstructL()
{
    MPX_DEBUG(_L("CMPXVideoPlaybackControlConfiguration::ConstructL()"));

    CreateControlListL();
}

// -------------------------------------------------------------------------------------------------
// CMPXVideoPlaybackControlConfiguration::NewL()
// Two-phased constructor.
// -------------------------------------------------------------------------------------------------
//
CMPXVideoPlaybackControlConfiguration*
CMPXVideoPlaybackControlConfiguration::NewL( CMPXVideoPlaybackControlsController* aController )
{
    MPX_DEBUG(_L("CMPXVideoPlaybackControlConfiguration::NewL()"));

    CMPXVideoPlaybackControlConfiguration* self =
        new (ELeave) CMPXVideoPlaybackControlConfiguration( aController );

    CleanupStack::PushL(self);
    self->ConstructL();
    CleanupStack::Pop();

    return self;
}

// -------------------------------------------------------------------------------------------------
// CMPXVideoPlaybackControlConfiguration::~CMPXVideoPlaybackControlConfiguration()
// Destructor.
// -------------------------------------------------------------------------------------------------
//
CMPXVideoPlaybackControlConfiguration::~CMPXVideoPlaybackControlConfiguration()
{
    MPX_DEBUG(_L("CMPXVideoPlaybackControlConfiguration::~CMPXVideoPlaybackControlConfiguration"));

    iControlsList.Reset();
}

// -------------------------------------------------------------------------------------------------
// CMPXVideoPlaybackControlConfiguration::CreateControlListL()
// -------------------------------------------------------------------------------------------------
//
void CMPXVideoPlaybackControlConfiguration::CreateControlListL()
{
    MPX_DEBUG(_L("CMPXVideoPlaybackControlConfiguration::CreateControlListL()"));

    CMPXVideoPlaybackViewFileDetails* fileDetails = iControlsController->FileDetails();

    if ( fileDetails->iPlaybackMode == EMPXVideoStreaming )
    {
        //
        // streaming mode, add branding animation control to show while initializing
        //
        iControlsList.AppendL( EMPXBrandingAnimation );
    }
    else if ( fileDetails->iRNFormat )
    {
        //
        // RN clip and local mode, add RN logo bitmap to show while initializing
        //
        iControlsController->SetRealOneBitmapVisibility( ETrue );
    }

    iControlsList.AppendL( EMPXSoftkeyDetails );
    iControlsList.AppendL( EMPXSoftkeyBack );
    iControlsList.AppendL( EMPXProgressBar );
    iControlsList.AppendL( EMPXVolumeBar );
    iControlsList.AppendL( EMPXBufferingLabel );

    if ( AknLayoutUtils::PenEnabled() )
    {
        iControlsList.AppendL( EMPXButtonBar );
    }
    else
    {
        iControlsList.AppendL( EMPXVideoPausedIcon );
    }
}

// -------------------------------------------------------------------------------------------------
// CMPXVideoPlaybackControlConfiguration::ControlList
// -------------------------------------------------------------------------------------------------
//
RArray<TMPXVideoPlaybackControls>& CMPXVideoPlaybackControlConfiguration::ControlList()
{
    MPX_DEBUG(_L("CMPXVideoPlaybackControlConfiguration::ControlList()"));

    return iControlsList;
}

// -------------------------------------------------------------------------------------------------
// CMPXVideoPlaybackControlConfiguration::UpdateControlListL
// -------------------------------------------------------------------------------------------------
//
void CMPXVideoPlaybackControlConfiguration::UpdateControlListL(
    TMPXVideoPlaybackControlCommandIds aEvent )
{
    MPX_DEBUG(_L("CMPXVideoPlaybackControlConfiguration::UpdateControlListL(%d)"), aEvent);

    //
    //  This fuction will be getting called
    //    - After Initialization complete
    //    - When TV-out cable get connected/disconnected
    //    - When enters/exits aspect ratio mode
    //
    switch ( aEvent )
    {
        case EMPXControlCmdSetDownloadPaused:
        {
            if ( ! iDownloadPausedAdded )
            {
                iControlsList.AppendL( EMPXDownloadPausedIcon );

                iDownloadPausedAdded = ETrue;
            }

            break;
        }
        case EMPXControlCmdClearDownloadPaused:
        {
            if ( iDownloadPausedAdded )
            {
                DeleteControlFromList( EMPXDownloadPausedIcon );

                iDownloadPausedAdded = EFalse;
            }

            break;
        }
        case EMPXControlCmdTvOutConnected:
        {
            if ( ! iTitleArtistIndicatorsAdded )
            {
                iControlsList.AppendL( EMPXTitleLabel );
                iControlsList.AppendL( EMPXArtistLabel );

                iTitleArtistIndicatorsAdded = ETrue;
            }

            if ( iAspectRatioIconAdded )
            {
                DeleteControlFromList( EMPXAspectRatioIcon );
                iAspectRatioIconAdded = EFalse;
            }

            break;
        }
        case EMPXControlCmdTvOutDisconnected:
        {
            if ( iControlsController->FileDetails()->iVideoEnabled )
            {
                if ( iTitleArtistIndicatorsAdded )
                {
                    DeleteControlFromList( EMPXTitleLabel );
                    DeleteControlFromList( EMPXArtistLabel );

                    iTitleArtistIndicatorsAdded = EFalse;
                }

                if ( ! iAspectRatioIconAdded &&
                     iControlsController->FileDetails()->iVideoHeight > 0 &&
                     iControlsController->FileDetails()->iVideoWidth > 0 )
                {
                    iControlsList.AppendL( EMPXAspectRatioIcon );
                    iAspectRatioIconAdded = ETrue;
                }
            }
            break;
        }
        case EMPXControlCmdPluginInitialized:
        {
            if ( iControlsController->FileDetails()->iPlaybackMode == EMPXVideoStreaming ||
                 iControlsController->FileDetails()->iPlaybackMode == EMPXVideoLiveStreaming )
            {
                DeleteControlFromList( EMPXBrandingAnimation );
            }

            break;
        }
        default:
        {
            break;
        }
    }
}

// -------------------------------------------------------------------------------------------------
// CMPXVideoPlaybackControlConfiguration::DeleteControlFromList
// -------------------------------------------------------------------------------------------------
//
void CMPXVideoPlaybackControlConfiguration::DeleteControlFromList(
        TMPXVideoPlaybackControls aControl )
{
    MPX_DEBUG(_L("CMPXVideoPlaybackControlConfiguration::DeleteControlFromList(%d)"), aControl);

    TInt index = iControlsList.Find( aControl );

    if ( index != KErrNotFound )
    {
        iControlsList.Remove( index );
    }
}

// -------------------------------------------------------------------------------------------------
// CMPXVideoPlaybackControlConfiguration::UpdateControlsWithFileDetailsL
// -------------------------------------------------------------------------------------------------
//
void CMPXVideoPlaybackControlConfiguration::UpdateControlsWithFileDetailsL()
{
    MPX_DEBUG(_L("CMPXVideoPlaybackControlConfiguration::UpdateControlsWithFileDetailsL()"));

    CMPXVideoPlaybackViewFileDetails* fileDetails = iControlsController->FileDetails();

    if ( fileDetails->iVideoEnabled )
    {
        if ( iAudioOnlyIndicatorsAdded )
        {
            DeleteControlFromList( EMPXRealAudioBitmap );
            DeleteControlFromList( EMPXSoundBitmap );
            DeleteControlFromList( EMPXNoVideoBitmap );

            iAudioOnlyIndicatorsAdded = EFalse;
        }

        if ( fileDetails->iTvOutConnected )
        {
            if ( ! iTitleArtistIndicatorsAdded )
            {
                iControlsList.AppendL( EMPXTitleLabel );
                iControlsList.AppendL( EMPXArtistLabel );

                iTitleArtistIndicatorsAdded = ETrue;
            }

            if ( iAspectRatioIconAdded )
            {
                DeleteControlFromList( EMPXAspectRatioIcon );
                iAspectRatioIconAdded = EFalse;
            }
        }
        else
        {
            if ( iTitleArtistIndicatorsAdded )
            {
                DeleteControlFromList( EMPXTitleLabel );
                DeleteControlFromList( EMPXArtistLabel );

                iTitleArtistIndicatorsAdded = EFalse;
            }

            //
            //  If video is enabled, add aspect ratio icon
            //
            if ( ! iAspectRatioIconAdded &&
                   fileDetails->iVideoHeight > 0 &&
                   fileDetails->iVideoWidth > 0 &&
                   AknLayoutUtils::PenEnabled() )
            {
                iControlsList.AppendL( EMPXAspectRatioIcon );
                iAspectRatioIconAdded = ETrue;
            }
        }
    }
    else
    {
        //
        //  No video for this clip
        //
    
        //
        //  Remove the Real One bitmap and show the audio only bitmaps
        //
        iControlsController->SetRealOneBitmapVisibility( EFalse );

        if ( ! iAudioOnlyIndicatorsAdded )
        {
            if ( fileDetails->iRNFormat )
            {
                iControlsList.AppendL( EMPXRealAudioBitmap );
            }

            //
            //  this media clip doesn't have a supported video stream,
            //  display "No Video" bitmap instead of
            //  the generic "Sound" bitmap
            //
            if ( fileDetails->iPartialPlayback )
            {
                iControlsList.AppendL( EMPXNoVideoBitmap );
            }
            else
            {
                iControlsList.AppendL( EMPXSoundBitmap );
            }

            iAudioOnlyIndicatorsAdded = ETrue;
        }

        if ( ! iTitleArtistIndicatorsAdded )
        {
            iControlsList.AppendL( EMPXTitleLabel );
            iControlsList.AppendL( EMPXArtistLabel );

            iTitleArtistIndicatorsAdded = ETrue;
        }

        //
        //  If video isn't enable, delete aspect ratio icon
        //
        if ( iAspectRatioIconAdded )
        {
            DeleteControlFromList( EMPXAspectRatioIcon );
            iAspectRatioIconAdded = EFalse;
        }
    }
}


// End of File
