/*
* Copyright (c) 2005 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:  The MUS application's UI class.
*
*/

#include "musuibackgroundviewcontainer.h"
#include "musuiappui.h"
#include "muslogger.h" // debug logging

#include <AknsControlContext.h>
#include <AknsBasicBackgroundControlContext.h>
#include <AknsDrawUtils.h>
#include <StringLoader.h>                // StringLoader
#include <aknnotewrappers.h>
#include <AknWaitDialog.h>
#include <AknGlobalNote.h>
#include <AknDef.h>


// Hidden window group. magic number 32 hiddens window
_LIT( KMusUiBackgroundWindowGroupName,"32MusUiBackground" );


// -----------------------------------------------------------------------------
//
// -----------------------------------------------------------------------------
//
CMusUiBackgroundViewContainer* CMusUiBackgroundViewContainer::NewL( 
    const TRect& aRect, 
    TInt aOrdinalPosition )
    {
    CMusUiBackgroundViewContainer* self =
        new( ELeave )CMusUiBackgroundViewContainer( aOrdinalPosition );
    CleanupStack::PushL( self );
    self->ConstructL( aRect );
    CleanupStack::Pop( self );
    return self;
    }

// -----------------------------------------------------------------------------
//
// -----------------------------------------------------------------------------
//
CMusUiBackgroundViewContainer::CMusUiBackgroundViewContainer( 
    TInt aOrdinalPosition ) : iOrdinalPosition( aOrdinalPosition )
    {
    }

// -----------------------------------------------------------------------------
//
// -----------------------------------------------------------------------------
//
void CMusUiBackgroundViewContainer::ConstructL( const TRect& aRect )
    {
    MUS_LOG( "mus: [MUSUI ]  -> CMusUiBackgroundViewContainer::ConstructL()" );
    
    RWindowGroup iMyWindowGroup = RWindowGroup( iCoeEnv->WsSession() );
    User::LeaveIfError( iMyWindowGroup.Construct( ( TUint32 )&iMyWindowGroup) );

    iMyWindowGroup.SetName( KMusUiBackgroundWindowGroupName );
    iMyWindowGroup.SetOrdinalPosition( iOrdinalPosition, ECoeWinPriorityNormal );
    iMyWindowGroup.EnableReceiptOfFocus( EFalse );
	iMyWindowGroup.AutoForeground( EFalse );
    iMyWindowGroup.SetNonFading( ETrue );

    CreateWindowL(&iMyWindowGroup);

    iGroupIdentifier = iMyWindowGroup.Identifier();

    iBackGround = CAknsBasicBackgroundControlContext::NewL(
        KAknsIIDQsnBgAreaMain,
        aRect,
        EFalse );

    SetRect( aRect );

    ActivateL();

    MUS_LOG( "mus: [MUSUI ]  <- CMusUiBackgroundViewContainer::ConstructL()" );
    }

// -----------------------------------------------------------------------------
//
// -----------------------------------------------------------------------------
//
CMusUiBackgroundViewContainer::~CMusUiBackgroundViewContainer()
    {
    MUS_LOG( "mus: [MUSUI ]  -> CMusUiBackgroundViewContainer::~CMusUiBackgroundViewContainer()" );
    delete iBackGround;
    MUS_LOG( "mus: [MUSUI ]  <- CMusUiBackgroundViewContainer::~CMusUiBackgroundViewContainer()" );
    }

// -----------------------------------------------------------------------------
//
// -----------------------------------------------------------------------------
//
void CMusUiBackgroundViewContainer::RefreshView()
    {
    MUS_LOG( "mus: [MUSUI ]  -> CMusUiBackgroundViewContainer::RefreshView()" );

    DrawNow();

    MUS_LOG( "mus: [MUSUI ]  <- CMusUiBackgroundViewContainer::RefreshView()" );
    }


// -----------------------------------------------------------------------------
// Set's this group right ordinal position
// -----------------------------------------------------------------------------
//
void CMusUiBackgroundViewContainer::SetOrdinalPosition()
    {
    MUS_LOG1( "mus: [MUSUI ]  -> CMusUiBackgroundViewContainer::SetOrdinalPosition(): %d",
                iOrdinalPosition );
    MakeVisible( ETrue );

    iCoeEnv->WsSession().SetWindowGroupOrdinalPosition( iGroupIdentifier,
                                                        iOrdinalPosition );

    DrawNow();
    MUS_LOG( "mus: [MUSUI ]  <- CMusUiBackgroundViewContainer::SetOrdinalPosition()" );
    }

// -----------------------------------------------------------------------------
// Set's this group right ordinal position
// -----------------------------------------------------------------------------
//
void CMusUiBackgroundViewContainer::SetOrdinalPosition( TInt aOrdianlPosition)
    {
    MUS_LOG1( "mus: [MUSUI ]  -> CMusUiBackgroundViewContainer::SetOrdinalPosition(): %d",
            aOrdianlPosition );
    MakeVisible( ETrue );

    iCoeEnv->WsSession().SetWindowGroupOrdinalPosition( iGroupIdentifier,
                                                        aOrdianlPosition );

    DrawNow();
    MUS_LOG( "mus: [MUSUI ]  <- CMusUiBackgroundViewContainer::SetOrdinalPosition()" );
    }

// -----------------------------------------------------------------------------
//
// -----------------------------------------------------------------------------
//
void CMusUiBackgroundViewContainer::UpdateOrdinalPositionValue( TBool aUp )
    {
    MUS_LOG1( "mus: [MUSUI ]  -> CMusUiBackgroundViewContainer::UpdateOrdinalPositionValue(): %d",
                aUp );
    if ( aUp )
        {
        ++iOrdinalPosition;
        }
    else
        {
        --iOrdinalPosition;
        }
    SetOrdinalPosition();
    MUS_LOG( "mus: [MUSUI ]  <- CMusUiBackgroundViewContainer::UpdateOrdinalPositionValue()" );
    }


// -----------------------------------------------------------------------------
// Called by framework when the view size is changed
// -----------------------------------------------------------------------------
//
void CMusUiBackgroundViewContainer::SizeChanged()
    {
    MUS_LOG( "mus: [MUSUI ]  -> CMusUiBackgroundViewContainer::SizeChanged()" );
    TRect parentRect(Rect());
    if (iBackGround)
        {
        (static_cast<CAknsBasicBackgroundControlContext*>(iBackGround))->SetRect(parentRect);
        }

    SetOrdinalPosition();
    //MakeVisible( EFalse );
    MUS_LOG( "mus: [MUSUI ]  <- CMusUiBackgroundViewContainer::SizeChanged()" );
    }


// -----------------------------------------------------------------------------
// Called by framework when to retrieve the no. of controls.
// -----------------------------------------------------------------------------
//
TInt CMusUiBackgroundViewContainer::CountComponentControls() const
    {
    return 0; // return nbr of controls inside this container
    }


// -----------------------------------------------------------------------------
// Called by framework to retrieve the control specified by index.
// -----------------------------------------------------------------------------
//
CCoeControl* CMusUiBackgroundViewContainer::ComponentControl( TInt /*aIndex*/ ) const
    {
    return NULL;
    }


// -----------------------------------------------------------------------------
// Called by framework to redraw the screen area.
// -----------------------------------------------------------------------------
//
void CMusUiBackgroundViewContainer::Draw( const TRect& aRect ) const
    {
    MUS_LOG( "mus: [MUSUI ]  -> CMusUiBackgroundViewContainer::Draw()" );

    CWindowGc& gc = SystemGc();

    MAknsSkinInstance* skin = AknsUtils::SkinInstance();
    MAknsControlContext* cc = AknsDrawUtils::ControlContext( this );
    if(!AknsDrawUtils::Background( skin, cc,this,gc,aRect,KAknsDrawParamDefault ))
        {
        MUS_LOG( "mus: [MUSUI ]     Skin not valid or not found" );
        gc.SetBrushColor( iEikonEnv->ControlColor( EColorWindowBackground, *this ) );
        gc.SetBrushStyle( CGraphicsContext::ESolidBrush );
        gc.Clear( aRect );
        }

    MUS_LOG( "mus: [MUSUI ]  <- CMusUiBackgroundViewContainer::Draw()" );
    }

// -----------------------------------------------------------------------------
//
// -----------------------------------------------------------------------------
//
void CMusUiBackgroundViewContainer::HandleControlEventL(
    CCoeControl* /*aControl*/,TCoeEvent /*aEventType*/)
    {
    // TODO: Add your control event handler code here
    }


// -----------------------------------------------------------------------------
// Called by framework to act on key events if required.
// -----------------------------------------------------------------------------
//
TKeyResponse CMusUiBackgroundViewContainer::OfferKeyEventL(
                        const TKeyEvent& /*aKeyEvent*/,
                        TEventCode /*aType*/ )
    {
    return EKeyWasNotConsumed;
    }


// -----------------------------------------------------------------------------
// Supply the Mob Object for background skin drawing
// -----------------------------------------------------------------------------
//
TTypeUid::Ptr CMusUiBackgroundViewContainer::MopSupplyObject( TTypeUid aId )
    {
    if (aId.iUid == MAknsControlContext::ETypeId && iBackGround )
        {
        return MAknsControlContext::SupplyMopObject( aId, iBackGround );
        }
    return CCoeControl::MopSupplyObject( aId );
    }



// end of file
