diff -r f72a12da539e -r 5315654608de widgetmanager/src/wmmaincontainer.cpp --- 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 -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include //installer -#include // widgetreqistry -#include // CAknButton -#include // for starting the OVI client -#include // FeatureManager -#include // HlpLauncher -#include -#include - -#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 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()) != 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()) != 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 ( 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 ( 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( - 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* 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 -