--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/vtuis/videotelui/src/sliders/cvtuipopupbase.cpp Mon Nov 23 14:47:47 2009 +0200
@@ -0,0 +1,509 @@
+/*
+* 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: Base class for video telephone popups
+*
+*/
+
+
+#include <cvtlogger.h>
+#include <aknutils.h>
+#include <aknvolumepopup.h>
+#include <fbs.h>
+
+#include "cvtuipopupbase.h"
+#include "mvtuicomponentmanager.h"
+#include "mvtuicomponentstateobserver.h"
+#include "VtUiPanic.h"
+#include <layoutmetadata.cdl.h>
+#include <videotelui.rsg>
+#include <aknlayoutscalable_apps.cdl.h>
+
+// default time out time for popup
+const TInt KDefaultTimeOutTime = 2;
+
+// max value for slider is 100 (100%)
+const TInt KMaxSliderValue = 100;
+
+// Implementation of TVtUiBaseComponentState
+
+// ---------------------------------------------------------------------------
+// TVtUiBaseComponentState::TVtUiBaseComponentState
+// ---------------------------------------------------------------------------
+//
+TVtUiBaseComponentState::TVtUiBaseComponentState(
+ MVtUiComponent& aComponent, TVtUiBlockListBitField aBitField ) :
+ TVtUiComponentState( aComponent, aBitField )
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// CVtUiPopupBase::~CVtUiPopupBase
+// ---------------------------------------------------------------------------
+//
+CVtUiPopupBase::~CVtUiPopupBase()
+ {
+ __VTPRINTENTER( "CVtUiPopupBase.~CVtUiPopupBase" )
+ if ( iPopup )
+ {
+ iPopup->CloseVolumePopup();
+ }
+ // unregister component change registration
+ iComponentManager.ChangeComponentRegistration(
+ iComponentState, MVtUiComponentManager::EUnregister );
+ delete iPopup;
+ __VTPRINTEXIT( "CVtUiPopupBase.~CVtUiPopupBase" )
+ }
+
+// ---------------------------------------------------------------------------
+// CVtUiPopupBase::ComponentId
+// ---------------------------------------------------------------------------
+//
+ MVtUiComponent::TComponentId CVtUiPopupBase::ComponentId() const
+ {
+ __VTPRINTENTER( "CVtUiPopupBase.ComponentId" )
+ __VTPRINTEXIT( "CVtUiPopupBase.ComponentId" )
+ return iComponentId;
+ }
+
+// ---------------------------------------------------------------------------
+// CVtUiPopupBase::ComponentAsControl
+// ---------------------------------------------------------------------------
+//
+ CCoeControl* CVtUiPopupBase::ComponentAsControl()
+ {
+ __VTPRINTENTER( "CVtUiPopupBase.ComponentAsControl" )
+ __VTPRINTEXIT( "CVtUiPopupBase.ComponentAsControl" )
+ return NULL;
+ }
+
+// ---------------------------------------------------------------------------
+// CVtUiPopupBase::DoActivateL
+// ---------------------------------------------------------------------------
+//
+void CVtUiPopupBase::DoActivateL()
+ {
+ __VTPRINTENTER( "CVtUiPopupBase.DoActivateL" )
+ User::LeaveIfError(
+ iComponentManager.ChangeResourceChangeRegistration(
+ *this, MVtUiComponentManager::ERegister ) );
+
+ User::LeaveIfError( iComponentManager.ChangeKeyEventRegistration(
+ *this, MVtUiComponentManager::ERegister ) );
+
+ ShowPopupL();
+ __VTPRINTEXIT( "CVtUiPopupBase.DoActivateL" )
+ }
+
+// ---------------------------------------------------------------------------
+// CVtUiPopupBase::DoDeactivateL()
+// ---------------------------------------------------------------------------
+//
+void CVtUiPopupBase::DoDeactivateL()
+ {
+ __VTPRINTENTER( "CVtUiPopupBase.DoDeactivateL()" )
+ iPopup->CloseVolumePopup();
+ //notify observer that popup has been closed
+ if ( iCompStateObserver )
+ {
+ iCompStateObserver->ComponenStateChangedL();
+ }
+ // unregister resource change registration
+ iComponentManager.ChangeResourceChangeRegistration(
+ *this, MVtUiComponentManager::EUnregister );
+
+ iComponentManager.ChangeKeyEventRegistration(
+ *this, MVtUiComponentManager::EUnregister );
+ __VTPRINTEXIT( "CVtUiPopupBase.DoDeactivateL()" )
+ }
+
+// ---------------------------------------------------------------------------
+// CVtUiPopupBase::HandleResourceChangeL()
+// ---------------------------------------------------------------------------
+//
+void CVtUiPopupBase::HandleResourceChangeL( TInt aType )
+ {
+ __VTPRINTENTER( "CVtUiPopupBase.HandleResourceChangeL()" )
+ if ( aType == KEikDynamicLayoutVariantSwitch )
+ {
+ iPopup->SetPosition( PopupPosition() );
+ }
+ __VTPRINTEXIT( "CVtUiPopupBase.HandleResourceChangeL()" )
+ }
+
+// ---------------------------------------------------------------------------
+// CVtUiPopupBase::HandleControlEventL
+// ---------------------------------------------------------------------------
+//
+void CVtUiPopupBase::HandleControlEventL( CCoeControl* /*aControl*/,
+ TCoeEvent aEventType )
+ {
+ __VTPRINTENTER( "CVtUiPopupBase.HandleControlEventL" )
+ if ( aEventType == EEventStateChanged )
+ {
+ // popup closed
+ if( !IsPopUpVisible() )
+ {
+ ClosePopup();
+ }
+ }
+ __VTPRINTEXIT( "CVtUiPopupBase.HandleControlEventL" )
+ }
+
+// ---------------------------------------------------------------------------
+// CVtUiPopupBase::OfferKeyEventL()
+// ---------------------------------------------------------------------------
+//
+TKeyResponse CVtUiPopupBase::OfferKeyEventL( const TKeyEvent& aEvent,
+ TEventCode aCode )
+ {
+ __VTPRINTENTER( "CVtUiPopupBase.OfferKeyEventL" )
+ TKeyResponse response( EKeyWasNotConsumed );
+ // Don't handle other types here
+ if ( aCode != EEventKey )
+ {
+ return response;
+ }
+
+ if ( aEvent.iScanCode == EStdKeyUpArrow ||
+ aEvent.iScanCode == EStdKeyDownArrow )
+ {
+ __VTPRINT( DEBUG_GEN, "CVtUiPopupBase.OfferKeyEventL" )
+ TInt step( 1 );
+ if ( aEvent.iScanCode == EStdKeyDownArrow )
+ {
+ step = -step;
+ }
+
+ const TInt current( Value() );
+ TInt value( current + step );
+
+ TInt maxValue;
+ TInt minValue;
+ iPopup->GetRange( minValue, maxValue );
+
+ __VTPRINT2( DEBUG_GEN, "CVtUiPopupBase.OfferKeyEventL iPopup minValue = %d",
+ minValue )
+ __VTPRINT2( DEBUG_GEN, "CVtUiPopupBase.OfferKeyEventL iPopup maxValue = %d",
+ maxValue )
+
+ minValue = minValue / iScalingConstant;
+ value = Max( minValue, Min( value, iStepCount ) );
+ if ( value != current )
+ {
+ __VTPRINT2( DEBUG_GEN, "CVtUiPopupBase.OfferKeyEventL Volume value = %d",
+ value )
+ SetValue( value );
+ response = EKeyWasConsumed;
+ }
+ ShowPopupL();
+ }
+ __VTPRINTEXITR( "CVtUiPopupBase.OfferKeyEventL %d", response )
+ return response;
+ }
+
+// ---------------------------------------------------------------------------
+// CVtUiPopupBase::SetObserver()
+// ---------------------------------------------------------------------------
+//
+void CVtUiPopupBase::SetObserver( MVtUiComponentStateObserver& aCompStateObserver )
+ {
+ __VTPRINTENTER( "CVtUiPopupBase.SetObserver()" )
+ iCompStateObserver = &aCompStateObserver;
+ __VTPRINTEXIT( "CVtUiPopupBase.SetObserver()" )
+ }
+
+// ---------------------------------------------------------------------------
+// CVtUiPopupBase::SetValueType()
+// ---------------------------------------------------------------------------
+//
+void CVtUiPopupBase::SetValueType( TInt aValueType )
+ {
+ __VTPRINTENTER( "CVtUiPopupBase.SetValueType" )
+ iPopup->SetValueType( aValueType );
+ __VTPRINTEXIT( "CVtUiPopupBase.SetValueType" )
+ }
+
+// ---------------------------------------------------------------------------
+// CVtUiPopupBase::SetPermanenVisibility()
+// ---------------------------------------------------------------------------
+//
+void CVtUiPopupBase::SetPermanenVisibility( TBool aPermanent )
+ {
+ __VTPRINTENTER( "CVtUiPopupBase.SetPermanenVisibility" )
+ __VTPRINT2( DEBUG_GEN, "CVtUiPopupBase = %d", aPermanent );
+ const TInt longPeriod( 86400 ); // 24 h
+ if ( aPermanent )
+ {
+ iPopup->SetTimeOutAsSecond( longPeriod );
+ iPopup->ClosePopupWhenTappedOutside( !aPermanent );
+ }
+ else
+ {
+ iPopup->ClosePopupWhenTappedOutside( !aPermanent );
+ iPopup->SetTimeOutAsSecond( iTimeOutTime );
+ }
+ __VTPRINTEXIT( "CVtUiPopupBase.SetPermanenVisibility" )
+ }
+
+// ---------------------------------------------------------------------------
+// CVtUiPopupBase::CVtUiPopupBase
+// ---------------------------------------------------------------------------
+//
+CVtUiPopupBase::CVtUiPopupBase( MVtUiComponentManager& aComponentManager,
+ TVtUiBlockListBitField aBitField, TComponentId aComponentId ) :
+ iComponentManager ( aComponentManager ), iComponentState( *this, aBitField ),
+ iComponentId( aComponentId ), iScalingConstant( 1 )
+ {
+ __VTPRINTENTER( "CVtUiPopupBase.CVtUiPopupBase" )
+ __VTPRINTEXIT( "CVtUiPopupBase.CVtUiPopupBase" )
+ }
+
+// ---------------------------------------------------------------------------
+// CVtUiPopupBase::BaseConstructL
+// ---------------------------------------------------------------------------
+//
+void CVtUiPopupBase::BaseConstructL()
+ {
+ __VTPRINTENTER( "CVtUiPopupBase.BaseConstructL" )
+ iPopup = CAknVolumePopup::NewL( NULL, ETrue );
+ iPopup->SetObserver( this );
+
+ // Initialized to 2 seconds
+ iTimeOutTime = KDefaultTimeOutTime;
+
+ // set position
+ iPopup->SetPosition( PopupPosition() );
+
+ User::LeaveIfError(
+ iComponentManager.ChangeComponentRegistration(
+ iComponentState, MVtUiComponentManager::ERegister ) );
+ __VTPRINTEXIT( "CVtUiPopupBase.BaseConstructL" )
+ }
+
+// ---------------------------------------------------------------------------
+// CVtUiPopupBase::ShowPopupL
+// ---------------------------------------------------------------------------
+//
+void CVtUiPopupBase::ShowPopupL()
+ {
+ __VTPRINTENTER( "CVtUiPopupBase.ShowPopupL" )
+ iPopup->ShowVolumePopupL();
+ __VTPRINTEXIT( "CVtUiPopupBase.ShowPopupL" )
+ }
+
+// ---------------------------------------------------------------------------
+// CVtUiPopupBase::OpenPopupL
+// ---------------------------------------------------------------------------
+//
+void CVtUiPopupBase::OpenPopupL()
+ {
+ __VTPRINTENTER( "CVtUiPopupBase.OpenPopupL" )
+ TRAPD( error,
+ iComponentManager.RequestActivationL( ComponentId() ) );
+ __VTPRINT2( DEBUG_GEN, "CVtUiPopupBase.OpenPopupL reqAct=%d", error );
+ User::LeaveIfError( error );
+ __VTPRINTEXIT( "CVtUiPopupBase.OpenPopupL" )
+ }
+
+// ---------------------------------------------------------------------------
+// CVtUiPopupBase::ClosePopup
+// ---------------------------------------------------------------------------
+//
+void CVtUiPopupBase::ClosePopup()
+ {
+ __VTPRINTENTER( "CVtUiPopupBase.ClosePopup" )
+ TInt error( KErrNone );
+ TRAP( error, iComponentManager.DeActivateComponentL( ComponentId() ) );
+ __VTPRINTEXITR( "CVtUiPopupBase.ClosePopup %d", error )
+ }
+
+// ---------------------------------------------------------------------------
+// CVtUiPopupBase::SetTimeOut
+// ---------------------------------------------------------------------------
+//
+void CVtUiPopupBase::SetTimeOut( TInt aTime )
+ {
+ iTimeOutTime = aTime;
+ iPopup->SetTimeOutAsSecond( aTime );
+ }
+
+// ---------------------------------------------------------------------------
+// CVtUiPopupBase::IsPopUpVisible
+// ---------------------------------------------------------------------------
+//
+TBool CVtUiPopupBase::IsPopUpVisible()
+ {
+ return iPopup->IsVisible();
+ }
+
+// ---------------------------------------------------------------------------
+// CVtUiPopupBase::PopupPosition
+// ---------------------------------------------------------------------------
+//
+TPoint CVtUiPopupBase::PopupPosition() const
+ {
+ __VTPRINTENTER( "CVtUiPopupBase.PopupPosition" )
+ TRect mainPaneRect;
+ TAknWindowLineLayout popupLineLayout;
+ AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane, mainPaneRect );
+ if ( Layout_Meta_Data::IsLandscapeOrientation() )
+ {
+ popupLineLayout =
+ AknLayoutScalable_Apps::aid_placing_vt_slider_lsc().LayoutLine();
+ }
+ else
+ {
+ popupLineLayout =
+ AknLayoutScalable_Apps::aid_placing_vt_slider_prt().LayoutLine();
+ }
+
+ TAknLayoutRect layoutRect;
+ layoutRect.LayoutRect( mainPaneRect, popupLineLayout );
+ __VTPRINTEXIT( "CVtUiPopupBase.PopupPosition" )
+ return layoutRect.Rect().iTl;
+ }
+
+// ---------------------------------------------------------------------------
+// CVtUiPopupBase::SetPopupValue
+// ---------------------------------------------------------------------------
+//
+void CVtUiPopupBase::SetPopupValue( TInt aValue )
+ {
+ iPopup->SetValue( aValue * iScalingConstant );
+ }
+
+// ---------------------------------------------------------------------------
+// CVtUiPopupBase::SetAdjustRange
+// ---------------------------------------------------------------------------
+//
+void CVtUiPopupBase::SetAdjustRange( TInt aMinValue, TInt aMaxValue,
+ TInt aStepCount )
+ {
+ __VTPRINTENTER( "CVtUiPopupBase.SetAdjustRange" )
+ __ASSERT_ALWAYS( aMinValue <= aMaxValue &&
+ ( aMaxValue - aMinValue ) >= aStepCount &&
+ aStepCount > 0, VtUiPanic::Panic( EVtUiPanicOutOfRange ) );
+
+ // store stepcount
+ iStepCount = aStepCount;
+
+ // Aknvolumepopup does not do any scaling i.e max value
+ // must be 100 or otherwise the per cent value is not shown right.
+ // Scaling constant is used to multiple max value to be 100.
+ iScalingConstant = KMaxSliderValue / aMaxValue;
+ iPopup->SetRange( aMinValue, KMaxSliderValue );
+ TInt stepSize = KMaxSliderValue / aStepCount;
+ iPopup->SetStepSize( stepSize );
+ __VTPRINTEXIT( "CVtUiPopupBase.SetAdjustRange" )
+ }
+
+// ---------------------------------------------------------------------------
+// CVtUiPopupBase::SetValue
+// ---------------------------------------------------------------------------
+//
+void CVtUiPopupBase::SetValue( TInt aValue )
+ {
+ __VTPRINTENTER( "CVtUiPopupBase.SetValue" )
+ SetPopupValue( aValue );
+ __VTPRINTEXITR( "CVtUiPopupBase.SetValue %d", Value() )
+ }
+
+ // ---------------------------------------------------------------------------
+// CVtUiPopupBase::ScaleAndSetValue
+// ---------------------------------------------------------------------------
+//
+ void CVtUiPopupBase::ScaleAndSetValue( TInt aValue )
+ {
+ __VTPRINTENTER( "CVtUiPopupBase.ScaleAndSetValue" )
+ SetPopupValue( SliderValueWithScaling( aValue ) );
+ __VTPRINTEXITR( "CVtUiPopupBase.ScaleAndSetValue %d", Value() )
+ }
+
+// ---------------------------------------------------------------------------
+// CVtUiPopupBase::ScaledValue
+// ---------------------------------------------------------------------------
+//
+ TInt CVtUiPopupBase::ScaledValue() const
+ {
+ __VTPRINTENTER( "CVtUiPopupBase.ScaledValue" )
+ TInt value = Value() * ( iMax-iMin ) / iStepCount + iMin;
+ __VTPRINTEXITR( "CVtUiPopupBase.ScaledValue %d", value )
+ return value;
+ }
+
+// ---------------------------------------------------------------------------
+// CVtUiPopupBase::SliderValueWithScaling
+// ---------------------------------------------------------------------------
+//
+ TInt CVtUiPopupBase::SliderValueWithScaling( TInt aValue) const
+ {
+ __VTPRINTENTER( "CVtUiPopupBase.SliderValueWithScaling" )
+ __VTPRINT2( DEBUG_GEN, "CVtUiPopupBase.aValue=%d", aValue )
+ __VTPRINT2( DEBUG_GEN, "CVtUiPopupBase.iStepCount=%d", iStepCount )
+ __VTPRINT2( DEBUG_GEN, "CVtUiPopupBase.iMax=%d", iMax )
+
+ if ( iMax == aValue)
+ {
+ return iStepCount;
+ }
+ else if ( iMin == aValue )
+ {
+ return 0;
+ }
+ TInt modValue = iStepCount * ( aValue - iMin) % ( iMax - iMin );
+ TInt value = iStepCount * ( aValue - iMin) / ( iMax - iMin );
+
+ if ( modValue > ( iMax - iMin ) / 2 )
+ {
+ value++;
+ }
+
+ __VTPRINTEXITR( "CVtUiPopupBase.SliderValueWithScaling %d", value )
+ return value;
+ }
+
+// ---------------------------------------------------------------------------
+// CVtUiPopupBase::SetMinAndMaxValues
+// ---------------------------------------------------------------------------
+//
+void CVtUiPopupBase::SetMinAndMaxValues( TInt aMin, TInt aMax )
+ {
+ __VTPRINTENTER( "CVtUiPopupBase.SetMaxAndMinValues" )
+ __VTPRINT2( DEBUG_GEN, "CVtUiPopupBase..aMax=%d", aMax )
+ __VTPRINT2( DEBUG_GEN, "CVtUiPopupBase..aMinV=%d", aMin )
+ iMax = aMax;
+ iMin = aMin;
+ __VTPRINTEXIT( "CVtUiPopupBase.SetMaxAndMinValues " )
+ }
+
+// ---------------------------------------------------------------------------
+// CVtUiPopupBase::Value
+// ---------------------------------------------------------------------------
+//
+TInt CVtUiPopupBase::Value() const
+ {
+ __VTPRINTENTER( "CVtUiPopupBase.Value" )
+ __VTPRINTEXITR( "CVtUiPopupBase.Value %d", iPopup->Value() )
+ return iPopup->Value() / iScalingConstant;
+ }
+
+// ---------------------------------------------------------------------------
+// CVtUiPopupBase::UpdatePopupL
+// ---------------------------------------------------------------------------
+//
+void CVtUiPopupBase::UpdatePopupL()
+ {
+ __VTPRINTENTER( "CVtUiPopupBase.UpdatePopupL" )
+ __VTPRINTEXIT( "CVtUiPopupBase.UpdatePopupL " )
+ }