/*
* Copyright (c) 2007 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 "musuiclipsharingviewcontainer.h"
#include "musuisendview.h"
#include "musuilevelindicator.h"
#include "musuidialogutil.h"
#include "musuidefinitions.h"
#include "musuisendcontroller.h"
#include "muslogger.h" // debug logging
#include <musui.rsg>

#include <AknWaitDialog.h>
#include <AknsBasicBackgroundControlContext.h>
#include <AknsUtils.h>
#include <AknsDrawUtils.h>

// -----------------------------------------------------------------------------
//
// -----------------------------------------------------------------------------
//
CMusUiSendViewContainer::CMusUiSendViewContainer()
    {
    // NOP
    }
    

// -----------------------------------------------------------------------------
//
// -----------------------------------------------------------------------------
//
void CMusUiSendViewContainer::ConstructL( CMusUiGeneralView* aView,
                                          const TRect& aRect,
                                          TAknOrientation aIndicatorLayout,
                                          TBool aContainerVisible,
                                          TBool aIndicatorVisible )
    {
    MUS_LOG2( "mus: [MUSUI ]  -> CMusUiSendViewContainer::ConstructL, visibilty:%d,%d",
        aContainerVisible, aIndicatorVisible );
    
    CreateWindowL();
    iView = aView;
    iBackGround = CAknsBasicBackgroundControlContext::NewL(
                            KAknsIIDQsnBgAreaMain,
                            aRect,
                            EFalse );

    iIndicator = CMusUiLevelIndicator::NewL( aIndicatorLayout,
                                             0, 
                                             100, 
                                             this,
                                             aRect,
                                             this );
    iIndicator->SetContainerWindowL( *this );
    
    iVideoRect = aRect;
    
    SetRect( aRect );
    
    iIndicator->SetRect( Rect() );
    
    if ( aContainerVisible && !aIndicatorVisible )
        {
        iIndicator->MakeVisible( aIndicatorVisible );
        }

    MakeVisible( aContainerVisible );
    ActivateL();
    
    MUS_LOG( "mus: [MUSUI ]  <- CMusUiSendViewContainer::ConstructL" );
    }


// -----------------------------------------------------------------------------
//
// -----------------------------------------------------------------------------
//
CMusUiSendViewContainer::~CMusUiSendViewContainer()
    {
    MUS_LOG( "mus: [MUSUI ]  -> CMusUiSendViewContainer::~CMusUiSendViewContainer" );

    delete iIndicator;
    delete iBackGround;

    MUS_LOG( "mus: [MUSUI ]  <- CMusUiSendViewContainer::~CMusUiSendViewContainer" );
    }


// -----------------------------------------------------------------------------
// Fetches a pointer to the view that owns this container.
// -----------------------------------------------------------------------------
//
CMusUiGeneralView* CMusUiSendViewContainer::MusUiView() const
    {
    MUS_LOG( "mus: [MUSUI ]  -> CMusUiSendViewContainer::MusUiView" );
    MUS_LOG( "mus: [MUSUI ]  <- CMusUiSendViewContainer::MusUiView" );
    return iView;
    }


// -----------------------------------------------------------------------------
//
// -----------------------------------------------------------------------------
//
void CMusUiSendViewContainer::SetController( CMusUiSendController* aController )
    {
    iSendController = aController;
    }


// -----------------------------------------------------------------------------
// Called by framework to redraw the screen area.
// -----------------------------------------------------------------------------
//
void CMusUiSendViewContainer::Draw( const TRect& aRect ) const
    {
    MUS_LOG( "mus: [MUSUI ]  -> CMusUiSendViewContainer::Draw" );
    CWindowGc& gc = SystemGc();
  
    MAknsSkinInstance* skin = AknsUtils::SkinInstance();
    MAknsControlContext* cc = AknsDrawUtils::ControlContext( this );
    if(!AknsDrawUtils::Background( skin, 
                                   cc,
                                   this,
                                   gc,
                                   iVideoRect,
                                   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 ]  <- CMusUiSendViewContainer::Draw" );
    }
    

// -----------------------------------------------------------------------------
// Called by framework when the view size is changed
// -----------------------------------------------------------------------------
//
void CMusUiSendViewContainer::SizeChanged()
    {
    if (iBackGround)
        {
        static_cast<CAknsBasicBackgroundControlContext*>
                                ( iBackGround )->SetRect( Rect() );
        }
    iIndicator->SetRect( Rect() );    
    }
    

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


// -----------------------------------------------------------------------------
//
// -----------------------------------------------------------------------------
//
void CMusUiSendViewContainer::SetLevelIndicatorVisibility( TBool aVisible)
    {
    MUS_LOG1( "mus: [MUSUI ]  -> CMusUiSendViewContainer::SetLevelIndicatorVisibility( %d )",
              aVisible )
              
    MakeVisible( aVisible );
    
    MUS_LOG( "mus: [MUSUI ]  <- CMusUiSendViewContainer::SetLevelIndicatorVisibility" )
    }


// -----------------------------------------------------------------------------
//
// -----------------------------------------------------------------------------
//
void CMusUiSendViewContainer::IndicatorLevelChanged( TInt aNewLevel )
    {
    if ( iSendController )
        {
        TRAPD( error, iSendController->HandleSliderValueChangeL( aNewLevel ) )

        if ( error != KErrNone )
            {
            MUS_LOG1( "mus: [MUSUI ]     Error during handling of slider value change( %d )",
                      error )
              
            iSendController->HandleError( error );
            }
        }
    }
    


// end of file
