vtuis/videotelui/src/features/prefs/cvtuiprefsettinglistbase.cpp
branchRCL_3
changeset 35 779871d1e4f4
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vtuis/videotelui/src/features/prefs/cvtuiprefsettinglistbase.cpp	Wed Sep 01 12:29:12 2010 +0100
@@ -0,0 +1,406 @@
+/*
+* 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:  Softkey UI feature implementation.
+*
+*/
+
+
+#include    <cvtengmodel.h>
+#include    <mvtengcamerapreferences.h>
+#include    <eikenv.h>
+#include    <cvtlogger.h>
+#include    <avkon.hrh>
+#include    <akntoolbar.h>
+
+#include    "cvtuiprefsettinglistbase.h"
+#include    "CVtUiAppUi.h"
+#include    "cvtuitransparentsettingpage.h"
+#include    "CVtUiMainControl.h"
+#include    "CVtUiContextControl.h"
+#include    "CVtUiRemoteVideoControl.h"
+#include    "cvtuifeaturemanager.h"
+#include    "VtUiLayout.h"
+#include    "CVtUiEndCallButtonPane.h"
+
+#include    <layoutmetadata.cdl.h>
+
+// constants
+static const TInt KMaxNumberOfArrayItems = 5;
+static const TInt KMaxNumberOfActiveItems = 5;
+static const TInt KOrdinalPositionBase = 4;
+
+// ---------------------------------------------------------------------------
+// CVtUiPrefSettingListBase::~CVtUiPrefSettingListBase
+// ---------------------------------------------------------------------------
+// 
+CVtUiPrefSettingListBase::~CVtUiPrefSettingListBase()
+    {
+    __VTPRINTENTER( "CVtUiPrefSettingListBase.~CVtUiPrefSettingListBase" )
+    delete iViewfinderBitmap;
+    delete iSettingPage;
+    iActiveItems.Close();
+    __VTPRINTEXIT( "CVtUiPrefSettingListBase.~CVtUiPrefSettingListBase" )
+    }
+
+// ---------------------------------------------------------------------------
+// CVtUiPrefSettingListBase::InitFeatureL
+// ---------------------------------------------------------------------------
+// 
+void CVtUiPrefSettingListBase::InitFeatureL()
+    {
+    __VTPRINTENTER( "CVtUiPrefSettingListBase.InitFeatureL" )
+    ResizeBackroundBitmapRect();
+    __VTPRINTEXIT( "CVtUiPrefSettingListBase.InitFeatureL" )
+    }
+
+// ---------------------------------------------------------------------------
+// CVtUiPrefSettingListBase::IsPendingCmd
+// ---------------------------------------------------------------------------
+//
+TBool CVtUiPrefSettingListBase::IsPendingCmd()
+    {
+    return iPendingSettingChangeCmd;
+    }
+
+// ---------------------------------------------------------------------------
+// CVtUiPrefSettingListBase::HandlePendingCmd
+// ---------------------------------------------------------------------------
+//
+void CVtUiPrefSettingListBase::HandlePendingCmdL()
+    {
+    SettingPageItemChangedL( iOriginalSelection );
+    }
+
+// ---------------------------------------------------------------------------
+// CVtUiPrefSettingListBase::HandleSettingPageEventL
+// ---------------------------------------------------------------------------
+//
+void CVtUiPrefSettingListBase::HandleSettingPageEventL(
+    CAknSettingPage* /*aSettingPage*/, TAknSettingPageEvent aEventType )
+    {
+    __VTPRINTENTER( "CVtUiPrefSettingListBase.HandleSettingPageEventL" )
+    const TInt currentItem = iSettingPage->ListBoxControl()->CurrentItemIndex();      
+    switch ( aEventType )
+        {
+        case EEventSettingCancelled:
+             {
+             if ( iOriginalSelection != currentItem )
+                {
+                // Set back to orginal selection
+                SettingPageItemChangedL( iOriginalSelection );
+                iCurrentSelection = iOriginalSelection;
+                }
+             Stop();
+             break;   
+             }     
+         case EEventSettingChanged:
+             {
+             SettingPageItemChangedL( currentItem );
+             iOriginalSelection = currentItem;
+             Stop();
+             break;
+             }
+         case EEventSettingOked:
+             {
+             // Check if the current selection has changed
+             if ( iOriginalSelection != currentItem )
+                 {       
+                 SettingPageItemChangedL( currentItem );
+                 iOriginalSelection = currentItem;
+                 iCurrentSelection = currentItem;
+                 }                 
+             Stop();                 
+             break;
+             }
+         default:
+             break;
+        }
+    __VTPRINTEXIT( "CVtUiPrefSettingListBase.HandleSettingPageEventL" )        
+    }
+
+// ---------------------------------------------------------------------------
+// CVtUiPrefSettingListBase::ListStateChangedL
+// ---------------------------------------------------------------------------
+//
+void CVtUiPrefSettingListBase::ListStateChangedL()
+    {
+    __VTPRINTENTER( "CVtUiPrefSettingListBase.ListStateChangedL" )
+    // Check if new item is focused in the selection list
+    
+    const TInt currentItem = iSettingPage->ListBoxControl()->CurrentItemIndex();
+    if ( iCurrentSelection != currentItem )
+        {
+        // Update current selection
+        iCurrentSelection = currentItem;
+        // Adjust frame
+        SettingPageItemChangedL( currentItem );    
+        }    
+    __VTPRINTEXIT( "CVtUiPrefSettingListBase.ListStateChangedL" )
+    }
+
+// ---------------------------------------------------------------------------
+// CVtUiPrefSettingListBase::StartSettingPageL
+// ---------------------------------------------------------------------------
+//
+void CVtUiPrefSettingListBase::StartSettingPageL()
+    {
+    __VTPRINTENTER( "CVtUiPrefSettingListBase.StartSettingPageL" )
+    // Swap image places if needed
+    iAppUi.SwitchViewFinderToMainPaneL();
+    
+    // Creates setting page first
+    CreateSettingPageL();
+    
+    // Sort controls window position
+    SortControlsWindowPoistion();
+
+    // Launch setting page.
+    iSettingPage->ExecuteLD( CAknSettingPage::EUpdateWhenAccepted, EFalse );
+    iSettingPage = NULL;
+    __VTPRINTEXIT( "CVtUiPrefSettingListBase.StartSettingPageL" )
+    }
+
+// ---------------------------------------------------------------------------
+// CVtUiPrefSettingListBase::StopSettingPageL
+//    
+//
+void CVtUiPrefSettingListBase::StopSettingPageL()
+    {
+    __VTPRINTENTER( "CVtUiPrefSettingListBase.StopSettingPageL" )
+    
+    if ( iSettingPage)
+        {
+        // Cancell the setting page
+        TKeyEvent keyEvent;
+        keyEvent.iCode =  EKeyEscape;
+        iSettingPage->OfferKeyEventL( keyEvent, EEventKey );
+        }
+    
+    // Sort controls window position
+    SortControlsWindowPoistion();
+    
+    // Swap image places if needed  
+    iAppUi.RestoreViewFinderL();
+    
+    __VTPRINTEXIT( "CVtUiPrefSettingListBase.StopSettingPageL" )
+    }
+
+// ---------------------------------------------------------------------------
+// CVtUiPrefSettingListBase::SizeChanged
+// ---------------------------------------------------------------------------
+//
+void CVtUiPrefSettingListBase::SizeChanged()
+    {
+    __VTPRINTENTER( "CVtUiPrefSettingListBase.SizeChanged" )
+    ResizeBackroundBitmapRect();
+    // Set new coordinates and size
+    if( iSettingPage )
+        {
+        iSettingPage->SetBitmapPositionAndClipRect( iBitmapTopLeftCorner,
+            iBitmapClippingRect );
+        iSettingPage->HandleLayoutChangeL();
+        }
+    __VTPRINTEXIT( "CVtUiPrefSettingListBase.SizeChanged" )
+    }
+
+// ---------------------------------------------------------------------------
+// CVtUiPrefSettingListBase::UpdateBackground
+// ---------------------------------------------------------------------------
+//
+void CVtUiPrefSettingListBase::UpdateBackground( CFbsBitmap* aFrame )
+    {
+    __VTPRINTENTER( "CVtUiPrefSettingListBase.UpdateBackground" )
+    if ( aFrame )
+        {
+        // aFrame is valid only in this callback, the bitmap
+        // must be copied for use as the setting page background
+        iViewfinderBitmap->Duplicate( aFrame->Handle() );
+        if ( iSettingPage )
+            {
+            // Update background
+            iSettingPage->ChangeBackground( iViewfinderBitmap );
+            }
+        }
+    __VTPRINTEXIT( "CVtUiPrefSettingListBase.UpdateBackground" )        
+    }
+    
+// ---------------------------------------------------------------------------
+// CVtUiPrefSettingListBase::UpdateSettingL
+// ---------------------------------------------------------------------------
+// 
+void CVtUiPrefSettingListBase::UpdateSettingL()
+    {
+    // if no active items do nothing
+    if ( iActiveItems.Count() > 0 )
+        {
+        // user change the focuse in the list but not
+        // select it indeed
+        if( iOriginalSelection != iCurrentSelection )  
+            SettingPageItemChangedL( iCurrentSelection );
+        else
+        // yes,user has tapped down the OK button to choose a item
+            SettingPageItemChangedL( iOriginalSelection );        
+        }
+    }
+        
+// ---------------------------------------------------------------------------
+// CVtUiPrefSettingListBase::CVtUiPrefSettingListBase
+// ---------------------------------------------------------------------------
+//
+CVtUiPrefSettingListBase::CVtUiPrefSettingListBase( CVtUiFeatureManager&
+    aFeatureManager,  TVtUiFeatureId aFeatureId ) : CVtUiFeatureBase(
+    aFeatureId, aFeatureManager ), iActiveItems( KMaxNumberOfActiveItems ), 
+    iPendingSettingChangeCmd( EFalse ), iBitmapTopLeftCorner( 0, 0 ), 
+    iAppUi( aFeatureManager.AppUi() )
+    {
+    __VTPRINTENTER( "CVtUiPrefSettingListBase.CVtUiPrefSettingListBase" )   
+    __VTPRINTEXIT( "CVtUiPrefSettingListBase.CVtUiPrefSettingListBase" )
+    }
+
+
+// ---------------------------------------------------------------------------
+// CVtUiPrefSettingListBase::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CVtUiPrefSettingListBase::ConstructL()
+    {
+    __VTPRINTENTER( "CVtUiPrefSettingListBase.ConstructL" )
+    BaseConstructL();
+    // Get camera preferences extension.
+    iCameraPref = static_cast<MVtEngCameraPreferences*> (iFeatureManager.
+        AppUi().Model().Extension( KVtEngExtensionCameraPreferences ) );
+    // Create backgound bitmap
+    iViewfinderBitmap = new ( ELeave ) CFbsBitmap();
+    __VTPRINTEXIT( "CVtUiPrefSettingListBase.ConstructL" )
+    }
+     
+// ---------------------------------------------------------------------------
+// CVtUiPrefSettingListBase::ReadAndAppendItemL
+// ---------------------------------------------------------------------------
+//
+void CVtUiPrefSettingListBase::ReadAndAppendItemL( CDesCArray& aItems,
+    TInt aResId )
+    {
+    __VTPRINTENTER( "CVtUiPrefSettingListBase.ReadAndAppendItemL" )
+    HBufC* text = iAppUi.GetEikonEnv()->AllocReadResourceLC( aResId );
+    aItems.AppendL( *text );
+    CleanupStack::PopAndDestroy(); // text
+    __VTPRINTEXIT( "CVtUiPrefSettingListBase.ReadAndAppendItemL" )
+    }    
+    
+// ---------------------------------------------------------------------------
+// CVtUiPrefSettingListBase::CreateSettingPageL
+// ---------------------------------------------------------------------------
+//
+void CVtUiPrefSettingListBase::CreateSettingPageL()
+    {
+    __VTPRINTENTER( "CVtUiPrefSettingListBase.CreateSettingPageL" )
+    CDesCArray* selectionArray = new ( ELeave ) 
+        CDesCArraySeg( KMaxNumberOfArrayItems );
+    CleanupStack::PushL( selectionArray );
+    // Set items must be called before CurrentSelection function
+    // Otherwise iActiveItems array is not populated
+    iActiveItems.Reset();
+    SetItemsL( *selectionArray );
+    TInt resourceId = SettingPageResId();
+    
+    // Current selection is needed when a new item is focused in the list
+    iCurrentSelection = iOriginalSelection;
+    TInt current( CurrentSelection() );
+    if ( !iSettingPage )
+        {
+        iSettingPage = new ( ELeave ) CVtUiTransparentSettingPage( resourceId,
+            iCurrentSelection, selectionArray );
+        iSettingPage->ConstructL();
+        iSettingPage->SetSettingPageObserver( this );
+        iSettingPage->SetSettingPageEventStateObserver( this );
+        }
+     CleanupStack::PopAndDestroy(); // selectionArray        
+     ResizeBackroundBitmapRect();
+     iSettingPage->SetBitmapPositionAndClipRect( iBitmapTopLeftCorner, 
+        iBitmapClippingRect );            
+    __VTPRINTEXIT( "CVtUiPrefSettingListBase.CreateSettingPageL" )
+    }
+
+// ---------------------------------------------------------------------------
+// CVtUiPrefSettingListBase::ShrinkBackroundBitmapRect
+// ---------------------------------------------------------------------------
+//    
+void CVtUiPrefSettingListBase::ResizeBackroundBitmapRect()
+    {
+    __VTPRINTENTER( "CVtUiPrefSettingListBase.ResizeBackroundBitmapRect" )
+    TRect parent( iAppUi.MainControl().Size() );
+    TAknWindowLineLayout rect;
+    TAknLayoutRect iStreamLayout;
+    VtUiLayout::GetSecondWindowStreamLayout( rect, ETrue );
+    iStreamLayout.LayoutRect( parent, rect );
+    
+    // In landscape rect from layout doesn't work 
+    // for some reason
+    if ( Layout_Meta_Data::IsLandscapeOrientation() )
+        {
+        iBitmapClippingRect = parent;
+        }
+    else
+        {
+        iBitmapClippingRect = iStreamLayout.Rect();
+        }
+    
+    iBitmapTopLeftCorner = iStreamLayout.Rect().iTl;
+    __VTPRINTEXIT( "CVtUiPrefSettingListBase.ResizeBackroundBitmapRect" )
+    }
+
+// ---------------------------------------------------------------------------
+// CVtUiPrefSettingListBase::SortControlsWindowPoistion
+// ---------------------------------------------------------------------------
+//
+void CVtUiPrefSettingListBase::SortControlsWindowPoistion()
+    {
+    TInt ordinalPos = KOrdinalPositionBase;
+    
+    if ( iSettingPage )
+        {
+        ordinalPos++;
+        }
+    
+    // Re-sort control's window position
+    iAppUi.MainControl().DrawableWindow()->SetOrdinalPosition( 
+        ordinalPos--, 
+        iAppUi.MainControl().DrawableWindow()->OrdinalPriority() );
+    
+    if ( iSettingPage )
+        {
+        iSettingPage->DrawableWindow()->SetOrdinalPosition(
+            ordinalPos--,
+            iSettingPage->DrawableWindow()->OrdinalPriority() );
+        }
+    
+    iAppUi.CurrentFixedToolbar()->DrawableWindow()->SetOrdinalPosition(
+        ordinalPos--,
+        iAppUi.CurrentFixedToolbar()->DrawableWindow()->OrdinalPriority() );
+    
+    iAppUi.ContextControl().DrawableWindow()->SetOrdinalPosition( 
+        ordinalPos--, 
+        iAppUi.ContextControl().DrawableWindow()->OrdinalPriority() );
+    
+    iAppUi.RemoteVideoControl().DrawableWindow()->SetOrdinalPosition(
+        ordinalPos--, 
+        iAppUi.RemoteVideoControl().DrawableWindow()->OrdinalPriority() );
+    
+    iAppUi.EndCallButtonPane().DrawableWindow()->SetOrdinalPosition(
+        ordinalPos--, 
+        iAppUi.EndCallButtonPane().DrawableWindow()->OrdinalPriority() );
+    }
+
+// End of file