/*
* 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: Button control
*
*/

// Version : %version: 9 %



// INCLUDE FILES
#include <eikenv.h>
#include <gulicon.h>
#include <AknUtils.h>
#include <AknIconUtils.h>
#include <AknsDrawUtils.h>

#include "mpxvideoplaybackbutton.h"

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

CMPXVideoPlaybackButton::CMPXVideoPlaybackButton()
{
}

// -------------------------------------------------------------------------------------------------
// CMPXVideoPlaybackButton::ConstructL()
// Symbian 2nd phase constructor can leave.
// -------------------------------------------------------------------------------------------------
//
void CMPXVideoPlaybackButton::ConstructL( CMPXVideoPlaybackControlsController* aController, 
                                          TRect aRect, const TDesC &aIconPath )
{
    MPX_DEBUG(_L("CMPXVideoPlaybackButton::ConstructL()"));

    iIConPath = aIconPath.AllocL();
    iController = aController;

    SetRect( aRect );
}

// -------------------------------------------------------------------------------------------------
// CMPXVideoPlaybackButton::NewL()
// Two-phased constructor.
// -------------------------------------------------------------------------------------------------
//
CMPXVideoPlaybackButton* CMPXVideoPlaybackButton::NewL( CMPXVideoPlaybackControlsController* aController, 
                                                        TRect aRect, const TDesC &aIconPath)
{
    MPX_DEBUG(_L("CMPXVideoPlaybackButton::NewL()"));

    CMPXVideoPlaybackButton* self = new ( ELeave ) CMPXVideoPlaybackButton();

    CleanupStack::PushL( self );
    self->ConstructL( aController, aRect, aIconPath );
    CleanupStack::Pop();
    return self;
}

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

    if ( iIConPath )
    {
        delete iIConPath;
        iIConPath = NULL;
    }

    if ( iDefaultButton )
    {
        delete iDefaultButton;
        iDefaultButton = NULL;
    }

    if ( iDimmedButton )
    {
        delete iDimmedButton;
        iDimmedButton = NULL;
    }

    if ( iPressedButton )
    {
        delete iPressedButton;
        iPressedButton = NULL;
    }
}

// -------------------------------------------------------------------------------------------------
// CMPXVideoPlaybackButton::CreateDefaultButtonL()
// -------------------------------------------------------------------------------------------------
//
void CMPXVideoPlaybackButton::CreateDefaultButtonL( const TAknsItemID &aID,
                                                    const TInt aFileIndex,
                                                    const TInt aFileMaskIndex )
{
    MPX_DEBUG(_L("CMPXVideoPlaybackButton::CreateDefaultButtonL()"));

    if ( iDefaultButton )
    {
        delete iDefaultButton;
        iDefaultButton = NULL;
    }

    iDefaultButton = CreateButtonL( aID, aFileIndex, aFileMaskIndex );
}

// -------------------------------------------------------------------------------------------------
// CMPXVideoPlaybackButton::CreateButtonL()
// -------------------------------------------------------------------------------------------------
//
void CMPXVideoPlaybackButton::CreateDimmedButtonL( const TAknsItemID &aID,
                                                   const TInt aFileIndex,
                                                   const TInt aFileMaskIndex )
{
    MPX_DEBUG(_L("CMPXVideoPlaybackButton::CreateDimmedButtonL()"));

    if ( iDimmedButton )
    {
        delete iDimmedButton;
        iDimmedButton = NULL;
    }

    iDimmedButton = CreateButtonL( aID, aFileIndex, aFileMaskIndex );
}

// -------------------------------------------------------------------------------------------------
// CMPXVideoPlaybackButton::CreatePressedButtonL()
// -------------------------------------------------------------------------------------------------
//
void CMPXVideoPlaybackButton::CreatePressedButtonL( const TAknsItemID &aID,
                                                    const TInt aFileIndex,
                                                    const TInt aFileMaskIndex )
{
    MPX_DEBUG(_L("CMPXVideoPlaybackButton::CreatePressedButtonL()"));

    if ( iPressedButton )
    {
        delete iPressedButton;
        iPressedButton = NULL;
    }

    iPressedButton = CreateButtonL( aID, aFileIndex, aFileMaskIndex );
}

// -------------------------------------------------------------------------------------------------
// CMPXVideoPlaybackButton::CreateButtonL()
// -------------------------------------------------------------------------------------------------
//
CGulIcon* CMPXVideoPlaybackButton::CreateButtonL( const TAknsItemID &aID,
                                                  const TInt aFileIndex,
                                                  const TInt aFileMaskIndex )
{
    MPX_DEBUG(_L("CMPXVideoPlaybackButton::CreateButtonL()"));

    CGulIcon* icon = AknsUtils::CreateGulIconL( AknsUtils::SkinInstance(),
                                                aID,
                                                iIConPath->Des(),
                                                aFileIndex,
                                                aFileMaskIndex );

    if ( icon )
    {
        AknIconUtils::SetSize( icon->Bitmap(),
                               Rect().Size(),
                               EAspectRatioNotPreserved );
    }

    return icon;
}

// -------------------------------------------------------------------------------------------------
//   CMPXVideoPlaybackButton::Draw()
// -------------------------------------------------------------------------------------------------
//
void CMPXVideoPlaybackButton::Draw( const TRect& aRect ) const
{
    MPX_DEBUG(_L("CMPXVideoPlaybackButton::Draw()"));

    CWindowGc& gc = SystemGc();
    gc.SetClippingRect( aRect );

    if ( iController->SetBackgroundBlack() )
    {
        if ( Window().DisplayMode() == EColor16MAP )
        {
            gc.SetDrawMode( CGraphicsContext::EDrawModeWriteAlpha );
            gc.SetBrushColor( TRgb::Color16MAP( 255 ) );
            gc.Clear( aRect );
        }
        else if ( Window().DisplayMode() == EColor16MA )
        {
            gc.SetDrawMode( CGraphicsContext::EDrawModeWriteAlpha );
            gc.SetBrushColor( TRgb::Color16MA( 0 ) );
            gc.Clear( aRect );
        }
    }
    else
    {
        // draw a solid background so that the entire progress
        // bar is shown not just the area representing the
        // portion that has been played.
        gc.SetBrushColor( KRgbBlack );
        gc.SetBrushStyle( CGraphicsContext::ESolidBrush );
        gc.DrawRect( aRect );
        gc.SetBrushStyle( CGraphicsContext::ENullBrush );
    }

    switch( iState )
    {
        case EMPXButtonNormal:
        {
            gc.BitBltMasked( Rect().iTl,
                             iDefaultButton->Bitmap(),
                             TRect( Rect().Size() ),
                             iDefaultButton->Mask(),
                             ETrue );
            break;
        }
        case EMPXButtonDimmed:
        {
            gc.BitBltMasked( Rect().iTl,
                             iDimmedButton->Bitmap(),
                             TRect( Rect().Size() ),
                             iDimmedButton->Mask(),
                             ETrue );
            break;
        }
        case EMPXButtonPressed:
        {
            gc.BitBltMasked( Rect().iTl,
                             iPressedButton->Bitmap(),
                             TRect( Rect().Size() ),
                             iPressedButton->Mask(),
                             ETrue );
            break;
        }
    }
}

// -------------------------------------------------------------------------------------------------
// CMPXVideoPlaybackButton::CountComponentControls()
// -------------------------------------------------------------------------------------------------
//
TInt CMPXVideoPlaybackButton::CountComponentControls() const
{
    return 0;
}

// -------------------------------------------------------------------------------------------------
// CMPXVideoPlaybackButton::SetDimmed
// -------------------------------------------------------------------------------------------------
//
void CMPXVideoPlaybackButton::SetDimmed( TBool aDimmed )
{
    MPX_DEBUG(_L("CMPXVideoPlaybackButton::SetDimmed() (%d)"), aDimmed);

    if ( aDimmed && iDimmedButton )
    {
        iState = EMPXButtonDimmed;
    }
    else if ( iState == EMPXButtonDimmed )
    {
        iState = EMPXButtonNormal;
    }

    if ( IsVisible() )
    {
        DrawNow();
    }
}

// -------------------------------------------------------------------------------------------------
// CMPXVideoPlaybackButton::SetPressed
// -------------------------------------------------------------------------------------------------
//
void CMPXVideoPlaybackButton::SetPressed( TBool aPressed )
{
    MPX_DEBUG(_L("CMPXVideoPlaybackButton::SetPressed() (%d)"), aPressed);

    if ( aPressed && iPressedButton )
    {
        iState = EMPXButtonPressed;
    }
    else if ( iState == EMPXButtonPressed )
    {
        iState = EMPXButtonNormal;
    }

    if ( IsVisible() )
    {
        DrawDeferred();
    }
}

//  End of File
