/*
* 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 "musuidefinitions.h"
#include "musuilivesharingviewcontainer.h"
#include "musuieventcontroller.h"
#include "musuigeneralview.h"
#include "musuilivesharingview.h"
#include "musuiappui.h"
#include "musuilevelindicator.h"
#include "musuidialogutil.h"
#include "musui.hrh"
#include "muslogger.h" // debug logging
#include "mussettings.h"
#include <musui.rsg>

#include <AknsDrawUtils.h>
#include <AknDef.h>


// -----------------------------------------------------------------------------
//
// -----------------------------------------------------------------------------
//
void CMusUiLiveSharingViewContainer::ConstructL( CMusUiGeneralView* aView,
                                                 const TRect& aRect )
    {
    MUS_LOG( "mus: [MUSUI ]  -> CMusUiLiveSharingViewContainer::ConstructL" );
    
    CMusUiSendViewContainer::ConstructL( aView, 
                                         aRect,
                                         EAknOrientationVertical );
    // check if operator specific functionality is needed  
    iOperatorSpecificFunctionality = 
        ( MultimediaSharingSettings::OperatorVariantSettingL() == 
                                        MusSettingsKeys::EOperatorSpecific );

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


// -----------------------------------------------------------------------------
//
// -----------------------------------------------------------------------------
//
CMusUiLiveSharingViewContainer::~CMusUiLiveSharingViewContainer()
    {
    MUS_LOG( "mus: [MUSUI ]  -> CMusUiLiveSharingViewContainer::~CMusUiLiveSharingViewContainer" );
    // NOP
    MUS_LOG( "mus: [MUSUI ]  <- CMusUiLiveSharingViewContainer::~CMusUiLiveSharingViewContainer" );
    }


// -----------------------------------------------------------------------------
//
// -----------------------------------------------------------------------------
//
void CMusUiLiveSharingViewContainer::SetZoomValues( TInt aMinZoom, TInt aMaxZoom )
    {
    iIndicator->SetRange( aMinZoom, aMaxZoom, ETrue );
    }


// -----------------------------------------------------------------------------
//
// -----------------------------------------------------------------------------
//
void CMusUiLiveSharingViewContainer::SetBrightnessValues( TInt aMinBrightness, 
                                                          TInt aMaxBrightness )
    {
    iIndicator->SetRange( aMinBrightness, aMaxBrightness, ETrue );
    }


// -----------------------------------------------------------------------------
//
// -----------------------------------------------------------------------------
//
void CMusUiLiveSharingViewContainer::SetZoomL( TInt aZoomLevel )
    {
    MUS_LOG( "mus: [MUSUI ]  -> CMusUiLiveSharingViewContainer::SetZoomL" )

    iIndicator->SetLevelL( EMusUiIndicatorTypeZoom, 
                           aZoomLevel, 
                           ETrue /* use timer */ );
                          
    MUS_LOG( "mus: [MUSUI ]  <- CMusUiLiveSharingViewContainer::SetZoomL" )
    }


// -----------------------------------------------------------------------------
//
// -----------------------------------------------------------------------------
//
void CMusUiLiveSharingViewContainer::SetBrightnessL( TInt aBrightnessLevel )
    {
    MUS_LOG( "mus: [MUSUI ]  -> CMusUiLiveSharingViewContainer::SetBrightnessL" )
    
    iIndicator->SetLevelL( EMusUiIndicatorTypeBrightness, 
                           aBrightnessLevel, 
                           ETrue /* use timer */ );
                          
    MUS_LOG( "mus: [MUSUI ]  <- CMusUiLiveSharingViewContainer::SetBrightnessL" )
    }


// -----------------------------------------------------------------------------
//
// -----------------------------------------------------------------------------
//
void CMusUiLiveSharingViewContainer::SetZoomVisible(  TBool aVisible )
    {
    iIndicator->SetIndicatorType( EMusUiIndicatorTypeZoom );
    MakeVisible( aVisible );
    SetGloballyCapturing( aVisible );
    SetPointerCapture( aVisible );  
    }


// -----------------------------------------------------------------------------
//
// -----------------------------------------------------------------------------
//
void CMusUiLiveSharingViewContainer::SetBrightnessVisible( TBool aVisible)
    {
    iIndicator->SetIndicatorType(EMusUiIndicatorTypeBrightness);
    MakeVisible( aVisible );
    SetGloballyCapturing( aVisible );
    SetPointerCapture( aVisible );  
    }


// -----------------------------------------------------------------------------
//
// -----------------------------------------------------------------------------
//
TMusUiIndicatorType CMusUiLiveSharingViewContainer::GetIndicatorType()
	{
	return iIndicator->GetIndicatorType();
	}


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


// -----------------------------------------------------------------------------
// Called by framework to retrieve the control specified by index.
// -----------------------------------------------------------------------------
//
CCoeControl* CMusUiLiveSharingViewContainer::ComponentControl( TInt aIndex ) const
    {
    CCoeControl* control = NULL;
    switch ( aIndex )
        {
        case 0:
            control = iIndicator;
            break;
        default:
            break;
        }
    return control;
    }


// -----------------------------------------------------------------------------
// Called by framework to act on key events if required.
// -----------------------------------------------------------------------------
//
TKeyResponse CMusUiLiveSharingViewContainer::OfferKeyEventL(
    const TKeyEvent& aKeyEvent,
    TEventCode /*aType*/ )
    {
    MUS_LOG1( "mus: [MUSUI ]  -> CMusUiLiveSharingViewContainer::OfferKeyEventL: %d",
              aKeyEvent.iCode );
    MUS_LOG1( "mus: [MUSUI ]  -> CMusUiLiveSharingViewContainer::OfferKeyEventL: %d",
              aKeyEvent.iScanCode );
            
    TKeyResponse ret( EKeyWasNotConsumed );

    if ( MUS_NO_TOOLBAR )
        {
        CMusUiLiveSharingView* view = 
            static_cast< CMusUiLiveSharingView* >( MusUiView() );      
        switch ( aKeyEvent.iCode )
            {
            case EKeyLeftArrow:
                {
                view->HandleCommandL( EMusuiCmdViewVolumeDown );
                ret = EKeyWasConsumed;
                break;
                }
            case EKeyRightArrow:
                {
                view->HandleCommandL( EMusuiCmdViewVolumeUp );
                ret = EKeyWasConsumed;
                break;
                }
            case EKeyUpArrow:
                {
                view->HandleKeyUpArrowL();
                ret = EKeyWasConsumed;
                break;
                }
            case EKeyDownArrow:
                {
                view->HandleKeyDownArrowL();
                ret = EKeyWasConsumed;
                break;
                }
            default:
                break;
            }
        }

    MUS_LOG( "mus: [MUSUI ]  <- CMusUiLiveSharingViewContainer::OfferKeyEventL" );
    return ret;
    }

// -----------------------------------------------------------------------------
//
// -----------------------------------------------------------------------------
//
void CMusUiLiveSharingViewContainer::HandlePointerEventL( 
                                            const TPointerEvent& aPointerEvent)
    {
    if ( Rect().Contains( aPointerEvent.iPosition ) )
        {
        // Forward to base class in order to use slider
        CCoeControl::HandlePointerEventL( aPointerEvent );
        }
    else
        {
        MakeVisible( EFalse );
        }
    }


// end of file
