widgetmanager/src/wmmaincontainer.cpp
changeset 1 5315654608de
parent 0 f72a12da539e
child 2 08c6ee43b396
--- a/widgetmanager/src/wmmaincontainer.cpp	Thu Dec 17 08:40:49 2009 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1323 +0,0 @@
-/*
-* Copyright (c) 2009 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:
-* Implementation of the container control for WidgetManager application.
-*
-*/
-
-// INCLUDE FILES
-#include <aknViewAppUi.h>
-#include <eikappui.h>
-#include <widgetmanagerview.rsg>
-#include <coemain.h>
-#include <eikenv.h>
-#include <barsread.h>
-#include <AknUtils.h>
-#include <barsread.h>
-#include <StringLoader.h>
-#include <eikenv.h>
-#include <AknIconArray.h>
-#include <aknstyluspopupmenu.h> 
-#include <avkon.loc>
-#include <aknlayout.cdl.h>
-#include <layoutmetadata.cdl.h>
-#include <aknlayoutscalable_avkon.cdl.h>
-#include <AknsSkinInstance.h>
-#include <apgicnfl.h>
-#include <AknIconUtils.h>
-#include <AknsDrawUtils.h>
-#include <aknenv.h>
-#include <aknlists.h>
-#include <eikclbd.h>
-#include <aknsfld.h>
-#include <AknLayout.lag>
-#include <aknlayoutscalable_avkon.cdl.h>
-#include <AknsBasicBackgroundControlContext.h>
-#include <apgcli.h>
-#include <widgetmanager.mbg>
-#include <avkon.rsg>
-#include <coecobs.h>
-#include <coecntrl.h>
-#include <SWInstApi.h> //installer
-#include <WidgetRegistryClient.h> // widgetreqistry
-#include <aknbutton.h> // CAknButton
-#include <SchemeHandler.h> // for starting the OVI client
-#include <featmgr.h>     // FeatureManager
-#include <hlplch.h>      // HlpLauncher
-#include <csxhelp/hmsc.hlp.hrh>
-#include <aisystemuids.hrh>
-
-#include "wmcommon.h"
-#include "wmplugin.h"
-#include "wmmaincontainer.h"
-#include "wmmaincontainerview.h"
-#include "wmresourceloader.h"
-#include "widgetmanager.hrh"
-#include "wmlistbox.h"
-#include "wmpersistentwidgetorder.h"
-#include "wmdetailsdlg.h"
-#include "wmwidgetloaderao.h"
-
-// CONSTANTS
-const TInt KTextLimit = 40; // Text-limit for find-field
-const TInt KMinWidgets = 1; // minimum number of widgets to show findpane
-_LIT8( KWrtMime, "application/x-nokia-widget");
-
-// ---------------------------------------------------------
-// CWmMainContainer::CWmMainContainer()
-// ---------------------------------------------------------
-//
-CWmMainContainer::CWmMainContainer( CWmPlugin& aWmPlugin )
-    :iWmPlugin( aWmPlugin )
-	{
-    iWidgetsList = NULL;
-    iFindbox = NULL;
-    iFindPaneIsVisible = EFalse;
-    iBgContext = NULL;
-    iFocusMode = ENowhere;
-    iClosingDown = EFalse;
-	}
-
-// ---------------------------------------------------------
-// CWmMainContainer::~CWmMainContainer()
-// ---------------------------------------------------------
-//
-CWmMainContainer::~CWmMainContainer()
-	{
-	RemoveCtrlsFromStack();
-    Components().ResetAndDestroy();
-    delete iWidgetLoader;
-    iWidgetsList = NULL;
-    iOviPortal = NULL;
-    iFindbox = NULL;
-	delete iBgContext;
-	}
-
-// ---------------------------------------------------------
-// CWmMainContainer::NewL
-// ---------------------------------------------------------
-//
-CWmMainContainer* CWmMainContainer::NewL( 
-		const TRect& aRect, 
-		const CCoeControl* aParent, 
-		MEikCommandObserver* aCommandObserver,
-		CWmPlugin& aWmPlugin )
-	{
-	CWmMainContainer* self = CWmMainContainer::NewLC( 
-			aRect, 
-			aParent, 
-			aCommandObserver,
-			aWmPlugin );
-	CleanupStack::Pop( self );
-	return self;
-	}
-
-// ---------------------------------------------------------
-// CWmMainContainer::NewLC
-// ---------------------------------------------------------
-//
-CWmMainContainer* CWmMainContainer::NewLC( 
-		const TRect& aRect, 
-		const CCoeControl* aParent, 
-    MEikCommandObserver* aCommandObserver,
-    CWmPlugin& aWmPlugin )
-	{
-	CWmMainContainer* self = new ( ELeave ) CWmMainContainer( aWmPlugin );
-	CleanupStack::PushL( self );
-	self->ConstructL( aRect, aParent, aCommandObserver );
-	return self;
-	}
-
-// ---------------------------------------------------------
-// ScreenRect
-// rectangle representing the screen
-// ---------------------------------------------------------
-//
-TRect ScreenRect()
-    {
-    TRect screen;
-    CCoeEnv* env = CCoeEnv::Static();
-    if ( env )
-        {
-        CWsScreenDevice* screenDevice = env->ScreenDevice();
-        if ( screenDevice )
-            screen.SetRect( TPoint(0,0), screenDevice->SizeInPixels() );
-        }
-    return screen;
-    }
-
-// ---------------------------------------------------------
-// CWmMainContainer::ConstructL
-// ---------------------------------------------------------
-//
-void CWmMainContainer::ConstructL( 
-		const TRect& aRect, 
-		const CCoeControl* aParent, 
-        MEikCommandObserver* /*aCommandObserver*/ )
-	{
-    // Initialize control array
-	InitComponentArrayL();
-	Components().SetControlsOwnedExternally( ETrue );
-
-	// create the UI
-	if ( aParent == NULL )
-	    {
-		CreateWindowL();
-		iParent = this;
-	    }
-	else
-	    {
-	    SetContainerWindowL( *aParent );
-	    iParent = aParent;
-	    }
-
-	// background context
-	iBgContext = CAknsBasicBackgroundControlContext::NewL( 
-	        KAknsIIDQsnBgScreen, ScreenRect() , ETrue);
-
-	// set up controls
-	InitializeControlsL( aRect );
-
-	// set size and activate
-	SetRect( aRect );
-	if ( !aParent )
-        {
-        ActivateL();
-        }
-	
-	}
-
-// ---------------------------------------------------------
-// CWmMainContainer::SizeChanged
-// ---------------------------------------------------------
-//
-void CWmMainContainer::SizeChanged()
-	{
-	CCoeControl::SizeChanged();
-    iBgContext->SetRect( ScreenRect() );
-	TRAP_IGNORE( LayoutControlsL() );
-	}
-
-// ---------------------------------------------------------
-// CWmMainContainer::LayoutControlsL
-// ---------------------------------------------------------
-//
-void CWmMainContainer::LayoutControlsL()
-	{
-	TRect rect = Rect();
-	TBool landscape = ( rect.Width() > rect.Height() );
-
-    // calculate layout (different in landscape and portrait)
-	TRect oviButtonRect;
-	TRect widgetsListRect;
-	if ( landscape )
-	    {
-	    iLayout = ELandscape;
-        const TInt KOffset = 2;
-        TInt oviButtonWidth = rect.Width() / 6;
-        widgetsListRect.SetRect(
-                TPoint( 0, 0 ),
-                TPoint( rect.Width() - oviButtonWidth - KOffset, rect.Height() ) );
-        oviButtonRect.SetRect(
-                TPoint( rect.Width() - oviButtonWidth, KOffset ),
-                TPoint( rect.Width() - KOffset, rect.Height() - KOffset ) );
-	    }
-	else
-	    {
-	    iLayout = EPortrait;
-	    const TInt KOffset = 2;
-	    TInt oviButtonHeight = rect.Height() / 8;
-	    oviButtonRect.SetRect(
-	            TPoint( KOffset, KOffset ),
-	            TPoint( rect.Width() - KOffset, oviButtonHeight ) );
-	    widgetsListRect.SetRect(
-	            TPoint( 0, oviButtonHeight + KOffset ),
-	            TPoint( rect.Width(), rect.Height() ) );
-	    }
-
-    // Apply layout to child controls
-	iOviPortal->SetRect( oviButtonRect );
-	iOviPortal->SetHighlightRect( oviButtonRect );
-    iWidgetsList->SetRect( widgetsListRect );
-    if( iFindbox && iFindPaneIsVisible )
-        {
-        // resizes listbox/searchfield
-        HandleFindSizeChanged();
-        }
-
-    // change OVI portal button style
-    if ( landscape )
-        {
-        // vertical style button
-        iOviPortal->State()->SetTextL( KNullDesC() );
-        TInt iconDimension = oviButtonRect.Width() * 2 / 3;
-        iOviPortal->SetIconSize( TSize( iconDimension, iconDimension ) );
-        iOviPortal->SetTextVerticalAlignment( 
-                CAknButton::ECenter );
-        iOviPortal->SetTextAndIconAlignment(
-                CAknButton::EIconOverText );
-        }
-    else
-        {
-        // horizontal style button
-        HBufC* oviText = StringLoader::LoadLC( R_QTN_WM_GO_TO_OVI_STORE );
-        iOviPortal->State()->SetTextL( *oviText );
-        CleanupStack::PopAndDestroy( oviText );
-        TInt iconDimension = oviButtonRect.Height() * 2 / 3;
-        iOviPortal->SetIconSize( TSize( iconDimension, iconDimension ) );
-        iOviPortal->SetTextHorizontalAlignment( 
-                CGraphicsContext::ECenter );
-        iOviPortal->SetTextAndIconAlignment(
-                CAknButton::EIconBeforeText );
-        }
-
-    DrawDeferred();
-	}
-
-// ---------------------------------------------------------
-// CWmMainContainer::OfferKeyEventL
-// ---------------------------------------------------------
-//
-TKeyResponse CWmMainContainer::OfferKeyEventL( 
-		const TKeyEvent& aKeyEvent, 
-		TEventCode aType )
-	{
-    TKeyResponse keyResponse( EKeyWasNotConsumed );
-    
-    if ( iFindbox )
-        {
-        // open search field with alpha digit numbers
-        if ( aType == EEventKeyDown && !iFindPaneIsVisible && 
-        aKeyEvent.iScanCode < EStdKeyF1 &&
-            TChar(aKeyEvent.iScanCode).IsAlphaDigit() )
-            {
-            ActivateFindPaneL();
-            
-            if ( iFindPaneIsVisible )
-                {
-                return EKeyWasConsumed;
-                }
-            }
-        
-        if ( iFindPaneIsVisible )
-            {
-            // deactive the FindPane when Back has been pressed
-            if ( aType == EEventKeyDown && 
-                aKeyEvent.iScanCode == EStdKeyBackspace )
-                {
-                TBuf<KTextLimit> searchText;
-                iFindbox->GetSearchText( searchText );
-                if ( searchText == KNullDesC )
-                    {
-                    DeactivateFindPaneL();
-                    return EKeyWasConsumed;
-                    }
-                }
-            
-            // Cancel-selected need to unfocus findbox 
-            // to receive event in ProcessCommand
-            if ( aType == EEventKeyDown 
-            && aKeyEvent.iScanCode == EStdKeyDevice1 )
-                {
-                iFindbox->SetFocus( EFalse );
-                UpdateFocusMode();
-                return EKeyWasConsumed;
-                }
-
-            if ( aKeyEvent.iScanCode == EStdKeyNo ||
-                aKeyEvent.iCode == EKeyNo )
-                {
-                DeactivateFindPaneL();
-                return EKeyWasConsumed;
-                }
-
-            // find items with all event codes (that's the reason why there is EEventKey instead of aType)
-            TBool needsRefresh( EFalse );
-            keyResponse = AknFind::HandleFindOfferKeyEventL( 
-                                                aKeyEvent, EEventKey, this, 
-                                iWidgetsList, iFindbox, ETrue, needsRefresh );            
-            if ( needsRefresh )
-                {
-                DrawNow();
-                }
-            }
-        }
-
-    // check special cases for movement between controls
-    if ( keyResponse == EKeyWasNotConsumed && !iFindPaneIsVisible )
-         {
-         keyResponse = MoveFocusByKeys( aKeyEvent, aType );
-         }
-
-    // pass key event except backpace or delete key event to widgets list if focused
-    if ( keyResponse == EKeyWasNotConsumed && iWidgetsList->IsFocused() )
-        {
-        if ( (aType == EEventKey) && (aKeyEvent.iCode == EKeyBackspace || aKeyEvent.iCode == EKeyDelete))
-            {
-            if( CanDoUninstall() )
-                {
-                UninstallWidgetL();
-                }
-            else
-                {
-                CWmWidgetData* data = iWidgetsList->WidgetData();
-                if( data != NULL )
-                    iWmPlugin.ResourceLoader().InfoPopupL(
-                         R_QTN_WM_UNINST_NOT_ALLOWED, data->Name() );
-                }
-            }
-        else 
-            {
-			//passing to listbox handler
-            keyResponse = iWidgetsList->OfferKeyEventL( 
-                    aKeyEvent, aType );
-            }
-        }
-
-    // pass key event to OVI portal if focused
-    if ( keyResponse == EKeyWasNotConsumed && iOviPortal->IsFocused() )
-        {
-        keyResponse = iOviPortal->OfferKeyEventL( 
-                            aKeyEvent, aType );
-        }
-
-    if ( keyResponse == EKeyWasConsumed )
-        DrawDeferred();
-
-	// Do not let UI framework forward the keys to child controls as
-	// we have already done that.
-    return EKeyWasConsumed;
-	}
-
-
-// ---------------------------------------------------------
-// CWmMainContainer::MoveFocusByKeys
-// ---------------------------------------------------------
-//
-TKeyResponse CWmMainContainer::MoveFocusByKeys(
-                        const TKeyEvent& aKeyEvent, 
-                        TEventCode aType )
-    {
-    TKeyResponse keyResponse( EKeyWasNotConsumed );
-
-    if ( iWidgetsList->IsFocused() )
-        {
-        // ------------------------------------
-        // focus is in the WIDGETS LIST
-        // ------------------------------------
-        if ( iLayout == EPortrait &&
-                aKeyEvent.iScanCode == EStdKeyUpArrow &&
-                iWidgetsList->CurrentItemIndex() == 0 )
-            {
-            // widget list top -> up -> ovi button (portrait)
-            if ( aType == EEventKey )
-                SetFocusToOviButton();
-            keyResponse = EKeyWasConsumed;
-            }
-        else if ( iLayout == EPortrait &&
-                aKeyEvent.iScanCode == EStdKeyDownArrow &&
-                iWidgetsList->CurrentItemIndex() ==
-                   iWidgetsList->Model()->NumberOfItems() - 1 )
-            {
-            // widget list bottom -> down -> ovi button (portrait)
-            if ( aType == EEventKey )
-                SetFocusToOviButton();
-            keyResponse = EKeyWasConsumed;
-            }
-        else if ( iLayout == ELandscape &&
-                aKeyEvent.iScanCode == EStdKeyRightArrow )
-            {
-            // widget list -> right -> ovi button (landscape)
-            if ( aType == EEventKey )
-                SetFocusToOviButton();
-            keyResponse = EKeyWasConsumed;
-            }
-        else if ( iLayout == ELandscapeMirrored &&
-                aKeyEvent.iScanCode == EStdKeyLeftArrow )
-            {
-            // widget list -> left -> ovi button (landscape mirrored)
-            if ( aType == EEventKey )
-                SetFocusToOviButton();
-            keyResponse = EKeyWasConsumed;
-            }
-        }
-    else if ( iOviPortal->IsFocused() )
-        {
-        // ------------------------------------
-        // focus is in the OVI PORTAL BUTTON
-        // ------------------------------------
-        if ( iLayout == EPortrait &&
-                aKeyEvent.iScanCode == EStdKeyDownArrow )
-            {
-            // ovi button -> down -> widget list top (portrait)
-            if ( aType == EEventKey )
-                SetFocusToWidgetList( 0 );
-            keyResponse = EKeyWasConsumed;
-            }
-        else if ( iLayout == EPortrait &&
-                aKeyEvent.iScanCode == EStdKeyUpArrow )
-            {
-            // obi button -> up -> widget list bottom (portrait)
-            if ( aType == EEventKey )
-                SetFocusToWidgetList( iWidgetsList->Model()->NumberOfItems()-1 );
-            keyResponse = EKeyWasConsumed;
-            }
-        else if ( iLayout == ELandscape &&
-                aKeyEvent.iScanCode == EStdKeyLeftArrow )
-            {
-            // ovi button -> left -> widget list (landscape)
-            if ( aType == EEventKey )
-                SetFocusToWidgetList();
-            keyResponse = EKeyWasConsumed;
-            }
-        else if ( iLayout == ELandscapeMirrored &&
-                aKeyEvent.iScanCode == EStdKeyRightArrow )
-            {
-            // ovi button -> right -> widget list (landscape mirrored)
-            if ( aType == EEventKey )
-                SetFocusToWidgetList();
-            keyResponse = EKeyWasConsumed;
-            }
-        }
-    else
-        {
-        // ------------------------------------
-        // focus is NOWHERE
-        // ------------------------------------
-        if ( aKeyEvent.iScanCode == EStdKeyUpArrow ||
-                aKeyEvent.iScanCode == EStdKeyDownArrow ||
-                aKeyEvent.iScanCode == EStdKeyLeftArrow ||
-                aKeyEvent.iScanCode == EStdKeyRightArrow )
-            {
-            // no focus -> key hit -> focus list
-            if ( aType == EEventKey )
-                SetFocusToWidgetList();
-            keyResponse = EKeyWasConsumed;
-            }
-        }
-
-    return keyResponse;
-    }
-
-// ---------------------------------------------------------
-// CWmMainContainer::SetFocusToOviButton
-// ---------------------------------------------------------
-//
-void CWmMainContainer::SetFocusToOviButton()
-    {
-    iWidgetsList->SetFocus(EFalse);
-    iOviPortal->SetFocus(ETrue);
-    DrawDeferred();
-    UpdateFocusMode();
-    }
-
-// ---------------------------------------------------------
-// CWmMainContainer::SetFocusToWidgetList
-// ---------------------------------------------------------
-//
-void CWmMainContainer::SetFocusToWidgetList( TInt aIndex )
-    {
-    iOviPortal->SetFocus(EFalse);
-    iWidgetsList->SetFocus(ETrue);
-    if ( aIndex >= 0 && aIndex < iWidgetsList->Model()->NumberOfItems() )
-        {
-        iWidgetsList->SetCurrentItemIndex( aIndex );
-        }
-    DrawDeferred();
-    UpdateFocusMode();
-    }
-
-// ---------------------------------------------------------
-// CWmMainContainer::UpdateFocusMode
-// ---------------------------------------------------------
-//
-void CWmMainContainer::UpdateFocusMode()
-    {
-    if ( iOviPortal->IsFocused() )
-        {
-        // OVI BUTTON is focused 
-        iFocusMode = EOvi;
-        }
-    else if( ( iFindPaneIsVisible ) && 
-        ( iFindbox->IsFocused() || iWidgetsList->IsFocused() ) )
-        {
-        // FIND MODE
-        iFocusMode = EFind;
-        }
-    else if ( iWidgetsList->IsFocused() )
-        {
-        // WIDGETS LIST is focused 
-        iFocusMode = EList;
-        }
-    else
-        {
-        // NO focus
-        iFocusMode = ENowhere;
-        }
-    }
-
-// ---------------------------------------------------------
-// CWmMainContainer::FindChildControlByPoint
-// ---------------------------------------------------------
-//
-CCoeControl* CWmMainContainer::FindChildControlByPoint(
-        const TPoint& aPoint )
-    {
-    CCoeControl* theControl = NULL;
-    CCoeControlArray::TCursor cursor = Components().Begin();
-    CCoeControl* c;
-    while((c=cursor.Control<CCoeControl>()) != NULL )
-        {
-        if(c->IsVisible())
-            {
-            if ( c->Rect().Contains( aPoint ) ) theControl = c;
-            }
-        cursor.Next();
-        }
-    return theControl;
-    }
-
-// ---------------------------------------------------------
-// CWmMainContainer::HandlePointerEventL
-// ---------------------------------------------------------
-//
-void CWmMainContainer::HandlePointerEventL( const TPointerEvent& aPointerEvent )
-    {
-    if ( !iClosingDown  )
-        {
-		
-		if (aPointerEvent.iType == TPointerEvent::EButton1Down)
-			{
-	        // Check if user clicked a child control
-	        CCoeControl* control = FindChildControlByPoint( aPointerEvent.iPosition );
-	        if ( control && !control->IsFocused() )
-	            {
-	            // Set focus to the control that was clicked
-	            control->SetFocus( ETrue );
-	            // remove focus from ALL other child controls.
-	            CCoeControlArray::TCursor cursor = Components().Begin();
-	            CCoeControl* c;
-	            while ((c=cursor.Control<CCoeControl>()) != NULL )
-	                {
-	                if ( c != control && c->IsFocused() ) c->SetFocus( EFalse );
-	                cursor.Next();
-	                }
-	            // update focus mode accordingly
-	            UpdateFocusMode();
-	            // repaint
-	            DrawDeferred();
-	            }
-			}
-        
-        CCoeControl::HandlePointerEventL( aPointerEvent );
-        }
-    }
-
-// ---------------------------------------------------------
-// CWmMainContainer::InitializeControlsL
-// ---------------------------------------------------------
-//
-void CWmMainContainer::InitializeControlsL( const TRect& /*aRect*/ )
-	{
-	// Create OVI STORE button
-    iOviPortal = CAknButton::NewL();
-    iWmPlugin.ResourceLoader().LoadButtonL( *iOviPortal,
-            R_WM_PORTAL_BUTTON );
-    iOviPortal->SetMopParent( this );
-    iOviPortal->SetFocusing( ETrue );
-    AddControlL( iOviPortal, EOviPortal );
-    iOviPortal->SetContainerWindowL( *this );
-	// ToDo : replace 3-10 IID with real one when available (wk46)
-	iOviPortal->SetFrameAndCenterIds( 
-						KAknsIIDQgnHomeWmButton,
-						KAknsIIDQgnHomeWmButtonCenter,
-						KAknsIIDDefault,
-						KAknsIIDDefault,
-						KAknsIIDDefault,
-						KAknsIIDDefault,
-						KAknsIIDDefault,
-						KAknsIIDDefault,
-						KAknsIIDDefault,
-						KAknsIIDDefault );
-    iOviPortal->ActivateL();
-    iOviPortal->SetObserver( this );
-
-    // Create widget list box
-    iWidgetsList = CWmListBox::NewL(
-            iWmPlugin,
-            TRect(),
-            iParent );
-    iWidgetsList->SetMopParent( this );
-    AddControlL( iWidgetsList, EWidgetsList );
-	iWidgetsList->ActivateL();
-    iWidgetsList->SetListBoxObserver( this );
-    
-    // Create scroll bar.
-    iWidgetsList->CreateScrollBarFrameL( ETrue );
-    iWidgetsList->ScrollBarFrame()->SetScrollBarVisibilityL(
-        CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto );
-    iWidgetsList->UpdateScrollBarsL(); 
-    
-    // search field
-    iFindbox = CAknSearchField::NewL( *this,
-                        CAknSearchField::EAdaptiveSearch,
-                        0, KTextLimit );
-    AddControlL( iFindbox, EFindBox );
-
-    UpdateFocusMode();
-    StartLoadingWidgetsL();
-    }
-
-// ---------------------------------------------------------
-// CWmMainContainer::HandleWidgetListChanged
-// ---------------------------------------------------------
-//
-void CWmMainContainer::HandleWidgetListChanged()
-    {
-    TRAP_IGNORE( StartLoadingWidgetsL(); );
-    }
-
-// ---------------------------------------------------------
-// CWmMainContainer::StartLoadingWidgetsL
-// ---------------------------------------------------------
-//
-void CWmMainContainer::StartLoadingWidgetsL()
-    {
-    if ( !iWidgetLoader )
-        {
-        // create the widget loader AO
-        iWidgetLoader = CWmWidgetLoaderAo::NewL( iWmPlugin, *iWidgetsList );
-        }
-    iWidgetLoader->StartLoading();
-    }
-
-// ---------------------------------------------------------
-// CWmMainContainer::HandleResourceChange
-// ---------------------------------------------------------
-//
-void CWmMainContainer::HandleResourceChange( TInt aType )
-	{
-    CCoeControl::HandleResourceChange( aType );
-	
-    if ( KEikDynamicLayoutVariantSwitch == aType )
-        {
-        TRect rect;
-        AknLayoutUtils::LayoutMetricsRect( 
-                            AknLayoutUtils::EMainPane, rect );
-        SetRect( rect );
-        
-        // notify widgetlist
-        iWidgetsList->HandleLayoutChanged();
-        }
-	}
-
-
-// ---------------------------------------------------------
-// CWmMainContainer::MopSupplyObject
-// ---------------------------------------------------------
-//
-TTypeUid::Ptr CWmMainContainer::MopSupplyObject( TTypeUid aId )
-    {
-    if ( aId.iUid == MAknsControlContext::ETypeId )
-        {
-        return MAknsControlContext::SupplyMopObject( 
-                                            aId, iBgContext );
-        }
-    return CCoeControl::MopSupplyObject( aId );
-    }
-
-// ---------------------------------------------------------
-// CWmMainContainer::Draw
-// ---------------------------------------------------------
-//
-void CWmMainContainer::Draw( const TRect& /*aRect*/ ) const
-	{
-	CWindowGc& gc = SystemGc();	
-    MAknsSkinInstance* skin = AknsUtils::SkinInstance();
-    MAknsControlContext* cc = AknsDrawUtils::ControlContext( this );
-    AknsDrawUtils::Background( skin, cc, this, gc, Rect() );
-	}
-
-// ---------------------------------------------------------
-// CWmMainContainer::AddControlL
-// ---------------------------------------------------------
-//
-void CWmMainContainer::AddControlL( 
-                                CCoeControl* aControl, 
-                                TInt aControlId )
-    {
-    Components().AppendLC( aControl, aControlId ); // Ownership transfered 
-    CleanupStack::Pop(aControl);    
-    iWmPlugin.ViewAppUi().AddToStackL( aControl );
-    aControl->MakeVisible( ETrue );
-    }
-
-// ---------------------------------------------------------
-// CWmMainContainer::PortalSelected
-// ---------------------------------------------------------
-//
-TBool CWmMainContainer::PortalSelected()
-    {    
-    return ( iFocusMode == EOvi );
-    }
-
-// ---------------------------------------------------------
-// CWmMainContainer::WidgetSelected
-// ---------------------------------------------------------
-//
-TBool CWmMainContainer::WidgetSelected() 
-    {
-    return ( iFocusMode == EList ) || ( iFocusMode == EFind );
-    }
-
-// ---------------------------------------------------------
-// CWmMainContainer::CanDoAdd
-// ---------------------------------------------------------
-//
-TBool CWmMainContainer::CanDoAdd()
-    {
-    TBool retVal = EFalse;
-    CWmWidgetData* data = iWidgetsList->WidgetData();
-    if ( WidgetSelected() && data )
-        {
-        if ( data->HsContentInfo().CanBeAdded() )
-            retVal = ETrue;
-        }
-    return retVal;
-    }
-
-// ---------------------------------------------------------
-// CWmMainContainer::CanDoUninstall
-// ---------------------------------------------------------
-//
-TBool CWmMainContainer::CanDoUninstall() 
-    {
-    TBool retVal( EFalse );
-    CWmWidgetData* data = iWidgetsList->WidgetData();
-    if ( WidgetSelected() && data )
-        {
-        if ( data->WidgetType() == CWmWidgetData::ECps &&
-                data->PublisherUid() != KNullUid )
-            {
-            retVal = ETrue;
-            }
-        }
-    return retVal;
-    }
-
-// ---------------------------------------------------------
-// CWmMainContainer::CanDoLaunch
-// ---------------------------------------------------------
-//
-TBool CWmMainContainer::CanDoLaunch() 
-    {
-    TBool retVal(EFalse);
-    if ( WidgetSelected() )
-        {
-        CWmWidgetData* data = iWidgetsList->WidgetData();        
-        if ( data->WidgetType() == CWmWidgetData::ECps &&
-            data->PublisherUid() != KNullUid )
-            {
-            retVal = ETrue;
-            }
-        }
-    return retVal;
-    }
-
-// ---------------------------------------------------------
-// CWmMainContainer::CanDoFind
-// ---------------------------------------------------------
-//
-TBool CWmMainContainer::CanDoFind()
-    {
-    TBool canDo( !iFindPaneIsVisible );
-    if ( canDo )
-        {
-        canDo = ( iFocusMode == EList || iFocusMode == ENowhere );
-        }
-    return canDo;
-    }
-
-// ---------------------------------------------------------
-// CWmMainContainer::CanDoSort
-// ---------------------------------------------------------
-//
-TBool CWmMainContainer::CanDoSort()
-    {
-    return !iFindPaneIsVisible;
-    }
-
-// ---------------------------------------------------------
-// CWmMainContainer::CanDoDetails
-// ---------------------------------------------------------
-//
-TBool CWmMainContainer::CanDoDetails()
-    {
-    return WidgetSelected();
-    }
-
-// ---------------------------------------------------------
-// CWmMainContainer::CanDoHelp
-// ---------------------------------------------------------
-//
-TBool CWmMainContainer::CanDoHelp()
-    {
-    return FeatureManager::FeatureSupported( KFeatureIdHelp );
-    }
-
-// ---------------------------------------------------------------------------
-// CWmMainContainer::AddWidgetToHomeScreenL
-// ---------------------------------------------------------------------------
-//
-void CWmMainContainer::AddWidgetToHomeScreenL()
-    {
-    CWmWidgetData* data = iWidgetsList->WidgetData();
-    if ( data )
-        {
-        if ( iFindbox && iFindPaneIsVisible )
-            {
-            DeactivateFindPaneL();
-            }
-
-        SetExitStatus( iWmPlugin.ContentController().AddWidgetL(
-            data->HsContentInfo() ) );
-        
-        iWmPlugin.Deactivate();
-        }
-
-    }
-
-// ---------------------------------------------------------------------------
-// CWmMainContainer::SetExitStatus
-// ---------------------------------------------------------------------------
-//
-void CWmMainContainer::SetExitStatus( TInt aExitStatus )
-    {
-    iExitStatus = aExitStatus;
-    }
-
-// ---------------------------------------------------------------------------
-// CWmMainContainer::ExitStatus
-// ---------------------------------------------------------------------------
-//
-TInt CWmMainContainer::ExitStatus( )
-    {
-    return iExitStatus;
-    }
-	
-// ---------------------------------------------------------------------------
-// CWmMainContainer::LaunchWidgetL
-// ---------------------------------------------------------------------------
-//
-void CWmMainContainer::LaunchWidgetL()
-    {
-    if ( CanDoLaunch() )
-        {
-        CWmWidgetData* data = iWidgetsList->WidgetData();
-        
-        HBufC* param = KNullDesC().AllocLC(); // launch params
-        
-        RApaLsSession appArc;
-        User::LeaveIfError( appArc.Connect() ); // connect to AppArc server
-        CleanupClosePushL( appArc );
-        TThreadId id;
-        User::LeaveIfError( appArc.StartDocument(
-            *param, data->PublisherUid(), id ) );
-    
-        CleanupStack::PopAndDestroy( &appArc );      
-        CleanupStack::PopAndDestroy( param );
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CWmMainContainer::ActivateFindPaneL
-// ---------------------------------------------------------------------------
-//
-void CWmMainContainer::ActivateFindPaneL()
-    {
-    if ( iFindbox && !iFindPaneIsVisible &&
-            iWidgetsList->Model()->NumberOfItems() > KMinWidgets )
-        {
-		// enable filtering
-        CAknFilteredTextListBoxModel* m = 
-                static_cast <CAknFilteredTextListBoxModel*> ( iWidgetsList->Model() );
-        if ( m )
-            {
-            m->CreateFilterL( iWidgetsList, iFindbox );
-            if ( m->Filter() )
-                {
-                m->Filter()->SetParentControl( this );
-                }
-            }
-
-        iFindbox->ActivateL();
-        iFindbox->ResetL();
-        iFindbox->SetSearchTextL( KNullDesC );
-        iFindbox->SetSkinEnabledL( ETrue );
-
-        iFindPaneIsVisible = ETrue;
-        iFindbox->MakeVisible( ETrue );
-        
-        // layout listbox and findbox
-        LayoutControlsL();        
-        
-        iFindbox->SetFocus( ETrue );
-        iWidgetsList->SetFindPaneIsVisible( ETrue );
-
-        // set soft key set
-        CEikButtonGroupContainer* cbaGroup =
-            CEikButtonGroupContainer::Current();
-        cbaGroup->SetCommandSetL( R_AVKON_SOFTKEYS_OPTIONS_CANCEL__SELECT );
-        cbaGroup->DrawNow();
-
-        UpdateFocusMode();
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CWmMainContainer::DeactivateFindPaneL
-// ---------------------------------------------------------------------------
-//
-void CWmMainContainer::DeactivateFindPaneL()
-    {
-    if( iFindbox && iFindPaneIsVisible )
-	    {
-        // notify search field we're shutting down
-        TKeyEvent keyEvent = { EKeyNo, EStdKeyNo, 0, 0  };
-        iFindbox->OfferKeyEventL( keyEvent, EEventKey );
-        
-        // reset findbox
-        iFindbox->ResetL();
-
-        // reset filter
-        CAknFilteredTextListBoxModel* m = 
-                static_cast <CAknFilteredTextListBoxModel*> ( iWidgetsList->Model() );
-        if ( m && m->Filter() )
-            {
-            m->Filter()->ResetFilteringL();
-            m->RemoveFilter();
-            }
-
-        iFindbox->MakeVisible( EFalse );
-        iFindbox->SetFocus( EFalse );
-        iFindPaneIsVisible = EFalse;
-        iWidgetsList->SetFindPaneIsVisible( EFalse );
-        
-        LayoutControlsL();
-        iWidgetsList->SetFocus( ETrue );
-
-        // set soft key set
-        CEikButtonGroupContainer* cbaGroup =
-            CEikButtonGroupContainer::Current();
-        cbaGroup->SetCommandSetL( R_AVKON_SOFTKEYS_OPTIONS_BACK__SELECT );
-        cbaGroup->DrawNow();
-
-        UpdateFocusMode();
-        DrawNow();
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CWmMainContainer::SortListAlphabeticallyL
-// ---------------------------------------------------------------------------
-//
-void CWmMainContainer::SortListAlphabeticallyL()
-    {
-    if ( iWidgetsList )
-        {
-        iWidgetsList->SetSortOrderL( CWmListBox::EAlphabetical );
-       
-        //store changed list order
-        CWmPersistentWidgetOrder* widgetOrder =
-            CWmPersistentWidgetOrder::NewL( iWmPlugin.FileServer() );
-        CleanupStack::PushL( widgetOrder );
-        widgetOrder->StoreL( iWidgetsList->WidgetDataArray() );
-        CleanupStack::PopAndDestroy( widgetOrder );
-
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CWmMainContainer::UninstallWidgetL
-// ---------------------------------------------------------------------------
-//
-void CWmMainContainer::UninstallWidgetL()
-    {
-    if ( CanDoUninstall() )
-        {
-        CWmWidgetData* data = iWidgetsList->WidgetData();
-        
-        SwiUI::RSWInstLauncher installer;
-        User::LeaveIfError( installer.Connect() );
-        
-        installer.Uninstall( data->PublisherUid(), KWrtMime );
-        installer.Close();
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CWmMainContainer::OpenOviPortalL
-// ---------------------------------------------------------------------------
-//
-void CWmMainContainer::OpenOviPortalL()
-    {
-    _LIT( KParam, "{\"Parameters\": {\"cmd\": \"channel\", \"id\": \"tag:mosh.nokia.com,2009-04:atom/2.0/channels/10\" }}" );
-    _LIT( KHtmlFile, "C:\\private\\102829a0\\com.nokia.ovi.juniper.WRTClient\\Juniper\\Main.html" );
-    _LIT( KFileName, "securewidgetui.exe" );
-    _LIT( KUrl, "4 https://store.ovi.com/applications/");
-    
-    RApaLsSession appArcSession;
-    User::LeaveIfError( appArcSession.Connect() );
-    CleanupClosePushL( appArcSession );
-    
-    HBufC* param = HBufC::NewLC( KParam().Length() );
-    param->Des().Copy(KParam);
-    
-    TThreadId id;
-    CApaCommandLine* cmdLine = CApaCommandLine::NewLC(); 
-    cmdLine->SetCommandL( EApaCommandOpen ); 
-    cmdLine->SetExecutableNameL( KFileName );
-    cmdLine->SetDocumentNameL( KHtmlFile );
-    HBufC8* buf8 = HBufC8::NewLC( param->Des().Length() );
-    buf8->Des().Copy( *param );
-    cmdLine->SetOpaqueDataL( *buf8 );
-    cmdLine->SetTailEndL( *buf8 );
-    
-    TInt err = appArcSession.StartApp( *cmdLine, id );
-    if ( err == KErrNone )
-        {
-        _LIT( KSchemeTemplate, "ecwrtservices:command=launch&app=com.nokia.ovi.juniper.WRTClient&commandLine=");
-        const TInt KSecureWidgetWebAppSchemeHandlerUid = 0x102829B2;
-        
-        // Create scheme url to launch the widget
-        HBufC* schemeUrl = HBufC::NewLC( KSchemeTemplate().Length() + 
-                param->Des().Length() );
-        
-        schemeUrl->Des().Copy( KSchemeTemplate );
-        schemeUrl->Des().Append( *param );
-        
-        // Initialize scheme handler plugin
-        TUid dtorId;
-        CSchemeHandler* schemeHandler = reinterpret_cast<CSchemeHandler*>(
-                    REComSession::CreateImplementationL( 
-                            TUid::Uid( KSecureWidgetWebAppSchemeHandlerUid ), 
-                            dtorId, schemeUrl ) );
-        CleanupStack::PushL( schemeHandler );
-        
-        // Handle the scheme url
-        schemeHandler->HandleUrlEmbeddedL();
-        
-        CleanupStack::PopAndDestroy( schemeHandler );
-        REComSession::FinalClose();
-        CleanupStack::PopAndDestroy( schemeUrl );     
-        }
-    else
-        {
-        // Ovi store not found start browser
-        const TUid KOSSBrowserUidValue = { 0x10008D39 };
-        HBufC* param = HBufC::NewLC( KUrl().Length() );
-        param->Des().Copy( KUrl );
-        TUid id( KOSSBrowserUidValue );
-        
-        TApaTaskList taskList( CEikonEnv::Static()->WsSession() );
-        TApaTask task = taskList.FindApp(id);
-        if( task.Exists() )
-            {
-            task.BringToForeground();
-            HBufC8* param8 = HBufC8::NewLC(param->Length());
-            param8->Des().Append(*param);
-            task.SendMessage(TUid::Uid(0), *param8); // UID not used
-            CleanupStack::PopAndDestroy(param8);
-            }
-        else
-            {
-            if( !appArcSession.Handle() )
-                {
-                User::LeaveIfError( appArcSession.Connect() );
-                }
-            TThreadId thread;
-            User::LeaveIfError(appArcSession.StartDocument(*param, KOSSBrowserUidValue, thread));
-            appArcSession.Close();   
-            }
-        CleanupStack::PopAndDestroy( param );
-        }
-    
-    CleanupStack::PopAndDestroy( buf8 );
-    CleanupStack::PopAndDestroy( cmdLine );
-    CleanupStack::PopAndDestroy( param );
-    CleanupStack::PopAndDestroy( &appArcSession );
-
-    // unfocus OVI button
-	iOviPortal->SetFocus( EFalse );
-	iOviPortal->DrawDeferred();
-    UpdateFocusMode();
-    }
-
-// ---------------------------------------------------------------------------
-// CWmMainContainer::SelectL
-// ---------------------------------------------------------------------------
-//
-void CWmMainContainer::SelectL()
-    {
-    if ( WidgetSelected() )
-        AddWidgetToHomeScreenL();
-    else if ( PortalSelected() )
-        OpenOviPortalL();
-    else
-        SetFocusToWidgetList();
-    }
-
-// ---------------------------------------------------------------------------
-// CWmMainContainer::ShowHelpL
-// ---------------------------------------------------------------------------
-//
-void CWmMainContainer::ShowHelpL()
-    {
-    TUid fwUid = TUid::Uid( AI_UID3_AIFW_COMMON );
-    // retrieve resolve host application help context
-    CArrayFix<TCoeHelpContext>* helpContext =
-        iEikonEnv->EikAppUi()->AppHelpContextL();
-
-    // add the widget manager entry into the help context
-    CleanupStack::PushL( helpContext );
-    helpContext->InsertL( 0, TCoeHelpContext(
-            fwUid, KWM_HLP_WIDGET_COLLECTION ) );
-    CleanupStack::Pop( helpContext );
-
-    // launch help
-    HlpLauncher::LaunchHelpApplicationL(
-          iEikonEnv->WsSession(),
-          helpContext );
-    helpContext = 0; // HlpLauncher takes ownership of helpContext
-    }
-
-// ---------------------------------------------------------------------------
-// CWmMainContainer::RemoveCtrlsFromStack
-// ---------------------------------------------------------------------------
-//
-void CWmMainContainer::RemoveCtrlsFromStack()
-    {    
-    for ( TInt i=0; i < CountComponentControls(); i++ ) 
-        {
-        CCoeControl* ctl = ComponentControl( i ) ;
-        if ( ctl )
-            {
-            iWmPlugin.ViewAppUi().RemoveFromStack( ctl );
-            }
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CWmMainContainer::HandleListBoxEventL
-// ---------------------------------------------------------------------------
-//
-void CWmMainContainer::HandleListBoxEventL(
-        CEikListBox* /*aListBox*/, TListBoxEvent aEventType )
-    {
-    if ( !iClosingDown && ( aEventType == EEventEnterKeyPressed ||
-            aEventType == EEventItemSingleClicked ) )
-        {
-        AddWidgetToHomeScreenL();
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CWmMainContainer::HandleControlEventL
-// ---------------------------------------------------------------------------
-//
-void CWmMainContainer::HandleControlEventL(
-        CCoeControl* aControl, TCoeEvent aEventType )
-    {
-    if ( !iClosingDown && aControl == iOviPortal && aEventType == EEventStateChanged )
-        {
-        OpenOviPortalL();
-        }
-    }
-
-// ----------------------------------------------------
-// CWmMainContainer::LaunchDetailsDialogL
-// ----------------------------------------------------
-//
-void CWmMainContainer::LaunchDetailsDialogL()
-    {
-    CWmWidgetData* data = iWidgetsList->WidgetData();
-    if ( data )
-        {
-        const CFbsBitmap* logo = ( data->LogoImage() ) ? 
-                    data->LogoImage() : iWidgetsList->DefaultLogo();
-        const CFbsBitmap* mask = ( data->LogoImageMask() ) ? 
-                    data->LogoImageMask() : iWidgetsList->DefaultMask();
-        
-        TPtrC description = ( data->Description().Length() > 0 ) ? 
-            data->Description() : iWmPlugin.ResourceLoader().NoDescriptionText();
-        CWmDetailsDlg* dlg = CWmDetailsDlg::NewL(
-                data->Name(), description, 
-                data->HsContentInfo().CanBeAdded(),
-                logo, mask, iBgContext );
-
-        if ( dlg && dlg->ExecuteLD() == ECbaAddToHs )
-            {
-            AddWidgetToHomeScreenL();
-            }
-        }
-    }
-
-// ----------------------------------------------------
-// CWmMainContainer::SetClosingDown
-// ----------------------------------------------------
-//
-void CWmMainContainer::SetClosingDown( TBool aClosingDown )
-    {
-    iClosingDown = aClosingDown;
-    }
-
-// ----------------------------------------------------
-// CWmMainContainer::ClosingDown
-// ----------------------------------------------------
-//
-TBool CWmMainContainer::ClosingDown()
-    {
-    return iClosingDown;
-    }
-
-// ----------------------------------------------------
-// CWmMainContainer::HandleFindSizeChanged
-// ----------------------------------------------------
-//
-void CWmMainContainer::HandleFindSizeChanged()
-    {    
-    TAknWindowLineLayout findPane = 
-            AknLayoutScalable_Avkon::find_pane().LayoutLine();
-
-    TAknWindowLineLayout listPane;
-
-    TRect listRect = iWidgetsList->Rect();
-    listPane.il = listRect.iTl.iX;
-    listPane.it = listRect.iTl.iY;
-    listPane.ib = 0;
-    listPane.iH = TUint16( listRect.Height() - ( findPane.iH - 1 ) );
-    listPane.iW = listRect.Width();
-    listPane.ir = ELayoutEmpty;
-    findPane.iW = listPane.iW;
-
-    TRect rect = Rect();
-    AknLayoutUtils::LayoutControl( iFindbox, rect, findPane );
-    AknLayoutUtils::LayoutControl( iWidgetsList, rect, listPane );
-    
-    iWidgetsList->DrawNow();
-    }
-
-
-// End of File
-