diff -r 6385c4c93049 -r 8e6fa1719340 browserui/browser/BrowserAppSrc/BrowserWindowSelectionView.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/browserui/browser/BrowserAppSrc/BrowserWindowSelectionView.cpp Wed Sep 01 12:31:04 2010 +0100 @@ -0,0 +1,370 @@ +/* +* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "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 CBrowserWindowSelectionView. +* +* +*/ + + +// INCLUDE FILES +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "BrowserAppUi.h" +#include "CommonConstants.h" +#include "BrowserWindowSelectionView.h" +#include "BrowserWindowSelectionContainer.h" +#include "Preferences.h" +#include "Display.h" +#include "BrowserWindowManager.h" +#include "BrowserWindow.h" + +// ================= MEMBER FUNCTIONS ======================= + +// ---------------------------------------------------------------------------- +// CBrowserWindowSelectionView::NewLC +// ---------------------------------------------------------------------------- +// +CBrowserWindowSelectionView* CBrowserWindowSelectionView::NewLC( MApiProvider& aApiProvider ) + { + CBrowserWindowSelectionView* view = new (ELeave) CBrowserWindowSelectionView( aApiProvider ); + CleanupStack::PushL( view ); + view->ConstructL( ); + return view; + } + +// --------------------------------------------------------- +// CBrowserWindowSelectionView::CBrowserWindowSelectionView +// --------------------------------------------------------- +// +CBrowserWindowSelectionView::CBrowserWindowSelectionView( MApiProvider& aApiProvider ): +CBrowserViewBase( aApiProvider ) + { + } + +// --------------------------------------------------------- +// CBrowserWindowSelectionView::ConstructL(const TRect& aRect) +// EPOC two-phased constructor +// --------------------------------------------------------- +// +void CBrowserWindowSelectionView::ConstructL() + { + BaseConstructL( R_BROWSERWINDOWSELECTION_VIEW ); + iTitles = new (ELeave) CArrayFixFlat( 2 ); + iWindowIds = new (ELeave) CArrayFixFlat( 2 ); + } + +// --------------------------------------------------------- +// CBrowserWindowSelectionView::~CBrowserWindowSelectionView() +// destructor +// --------------------------------------------------------- +// +CBrowserWindowSelectionView::~CBrowserWindowSelectionView() + { + if ( iContainer ) + { + AppUi()->RemoveFromViewStack( *this, iContainer ); + } + + delete iContainer; + delete iWindowInfo; + delete iTitles; + delete iWindowIds; + } + +// --------------------------------------------------------- +// TUid CBrowserWindowSelectionView::Id() +// +// --------------------------------------------------------- +// +TUid CBrowserWindowSelectionView::Id() const + { + return KUidBrowserWindowSelectionViewId; + } + +// --------------------------------------------------------------------------- +// CBrowserWindowSelectionView::CommandSetResourceIdL +// --------------------------------------------------------------------------- +TInt CBrowserWindowSelectionView::CommandSetResourceIdL() + { + TInt commandSet = 0; // R_AVKON_SOFTKEYS_EMPTY; + return commandSet; + } + +// --------------------------------------------------------- +// CBrowserWindowSelectionView::HandleCommandL() +// --------------------------------------------------------- +// +void CBrowserWindowSelectionView::HandleCommandL(TInt aCommand) + { + switch ( aCommand ) + { + case EAknCmdOpen: + { + TInt windowId = GetWindowIdFromTabIndex( iContainer->GetTabGroup()->ActiveTabIndex() ); + ApiProvider().WindowMgr().SwitchWindowL( windowId ); + //If the user switches window we reset the CalledFromAnotherApp status + if(ApiProvider().CalledFromAnotherApp()) + { + ApiProvider().SetCalledFromAnotherApp(EFalse); + } + ApiProvider().SetViewToBeActivatedIfNeededL( GetPreviousViewID() ); + break; + } + case EWmlCmdCloseWindow: + { + TInt windowId = GetWindowIdFromTabIndex( iContainer->GetTabGroup()->ActiveTabIndex() ); + TInt newWindowId = ApiProvider().WindowMgr().DeleteWindowL( windowId, EFalse ); + + // Check if there is only one remaining window, + // after closing the window. + delete iWindowInfo; + iWindowInfo = NULL; + iWindowInfo = ApiProvider().WindowMgr().GetWindowInfoL( this ); + if ( iWindowInfo->Count() < 2 ) + { + ApiProvider().SetViewToBeActivatedIfNeededL( KUidBrowserContentViewId ); + ApiProvider().WindowMgr().SwitchWindowL( newWindowId ); + } + break; + } + case EWmlCmdCloseAllWindowButThis: + { + iWindowEventsDisabled = ETrue; + // Get current window id. + TInt windowId = GetWindowIdFromTabIndex( iContainer->GetTabGroup()->ActiveTabIndex() ); + // Get all windows id. + delete iWindowInfo; + iWindowInfo = NULL; + iWindowInfo = ApiProvider().WindowMgr().GetWindowInfoL( this ); + + // Delete all windows except this. + for ( TInt i = 0; i < iWindowInfo->Count(); i++ ) + { + if ( (*iWindowInfo)[i]->iWindowId != windowId ) + { + ApiProvider().WindowMgr().DeleteWindowL( (*iWindowInfo)[i]->iWindowId, ETrue ); + } + } + // Activate curent window. + ApiProvider().SetViewToBeActivatedIfNeededL( KUidBrowserContentViewId ); + ApiProvider().WindowMgr().SwitchWindowL( windowId ); + iWindowEventsDisabled = EFalse; + break; + } + case EWmlCmdWindowSelectionCancel: + { + ApiProvider().SetViewToBeActivatedIfNeededL( KUidBrowserContentViewId ); + break; + } + default: + { + break; + } + } + } + +// --------------------------------------------------------- +// CBrowserWindowSelectionView::HandleClientRectChange() +// --------------------------------------------------------- +// +void CBrowserWindowSelectionView::HandleClientRectChange() + { + if ( iContainer ) + { + iContainer->SetRect( ClientRect() ); + } + } + +// --------------------------------------------------------- +// CBrowserWindowSelectionView::DoActivateL(...) +// +// --------------------------------------------------------- +// +void CBrowserWindowSelectionView::DoActivateL( const TVwsViewId& aPrevViewId,TUid /*aCustomMessageId*/, + const TDesC8& /*aCustomMessage*/) + { + StatusPane()->SwitchLayoutL( R_AVKON_STATUS_PANE_LAYOUT_USUAL ); + StatusPane()->MakeVisible( ETrue ); + + iPreviousViewID = ApiProvider().LastActiveViewId( ); + ApiProvider().SetLastActiveViewId( Id() ); + iLastViewId = aPrevViewId; + if (!iContainer) + { + iContainer = new (ELeave) CBrowserWindowSelectionContainer( this ); + iContainer->SetMopParent(this); + iContainer->ConstructL( ClientRect() ); + AppUi()->AddToStackL( *this, iContainer ); + UpdateTabsL(); + } + ApiProvider().WindowMgr().AddObserverL( this ); + } + +// --------------------------------------------------------- +// CBrowserWindowSelectionView::DoDeactivate() +// --------------------------------------------------------- +// +void CBrowserWindowSelectionView::DoDeactivate() + { + if ( iContainer ) + { + AppUi()->RemoveFromViewStack( *this, iContainer ); + } + + delete iContainer; + iContainer = NULL; + ApiProvider().WindowMgr().RemoveObserver( this ); + } + +// --------------------------------------------------------- +// CBrowserWindowSelectionView::CreateWindowInfoLC() +// --------------------------------------------------------- +// +HBufC* CBrowserWindowSelectionView::CreateWindowInfoLC( const CBrowserWindow& aWindow ) + { + HBufC* buf = aWindow.BrCtlInterface().PageInfoLC( TBrCtlDefs::EPageInfoTitle ); + if( !buf || !buf->Length() ) + { + CleanupStack::PopAndDestroy( buf ); + buf = aWindow.BrCtlInterface().PageInfoLC( TBrCtlDefs::EPageInfoUrl ); + } + return buf; + } + +// --------------------------------------------------------- +// CBrowserWindowSelectionView::UpdateTabs() +// --------------------------------------------------------- +// +void CBrowserWindowSelectionView::UpdateTabsL() + { + delete iWindowInfo; + iWindowInfo = NULL; + iWindowInfo = ApiProvider().WindowMgr().GetWindowInfoL( this ); + + iTitles->Reset(); + iWindowIds->Reset(); + TInt activeTab = 0; + for ( TInt i = 0; i < iWindowInfo->Count(); i++ ) + { + iTitles->AppendL( CONST_CAST( HBufC*, (*iWindowInfo)[i]->iWindowText ) ); + iWindowIds->AppendL( (*iWindowInfo)[i]->iWindowId ); + if ( (*iWindowInfo)[i]->iCurrent ) + { + activeTab = i; + HBufC* title = CONST_CAST( HBufC*, (*iWindowInfo)[i]->iWindowText ); + if ( title ) + { + ApiProvider().Display().SetTitleL( title->Des() ); + } + } + } + iContainer->ChangeTabL( iTitles, activeTab ); + } + + +// --------------------------------------------------------- +// CBrowserWindowSelectionView::UpdateTabs() +// --------------------------------------------------------- +// +void CBrowserWindowSelectionView::UpdateTumbnailL() + { + TInt windowId = GetWindowIdFromTabIndex( iContainer->GetTabGroup()->ActiveTabIndex() ); + iContainer->GetWindowThumbnailL( windowId ); + iContainer->DrawNow(); + } + +// --------------------------------------------------------- +// CBrowserWindowSelectionView::UpdateTitleL() +// --------------------------------------------------------- +// +void CBrowserWindowSelectionView::UpdateTitleL( ) + { + HBufC* title = GetWindowTitleFromTabIndex( iContainer->GetTabGroup()->ActiveTabIndex() ); + ApiProvider().Display().SetTitleL( (*title).Des( ) ); + } + +// ----------------------------------------------------------------------------- +// CBrowserWindowSelectionView::GetWindowIdFromTabIndex +// ----------------------------------------------------------------------------- +// +TInt CBrowserWindowSelectionView::GetWindowIdFromTabIndex( TInt aActiveTabIndex ) + { + TInt windowId = 0; + for ( TInt i = 0; i < iWindowIds->Count(); i++ ) + { + if ( i == aActiveTabIndex ) + { + windowId = (*iWindowInfo)[i]->iWindowId; + } + } + return windowId; + } + +// ----------------------------------------------------------------------------- +// CBrowserWindowSelectionView::GetWindowIdFromTabIndex +// ----------------------------------------------------------------------------- +// +HBufC* CBrowserWindowSelectionView::GetWindowTitleFromTabIndex( TInt aActiveTabIndex ) + { + HBufC* windowText = NULL; + for ( TInt i = 0; i < iWindowInfo->Count(); i++ ) + { + if ( i == aActiveTabIndex ) + { + windowText = CONST_CAST( HBufC*, (*iWindowInfo)[i]->iWindowText ); + } + } + return windowText; + } + +// --------------------------------------------------------- +// CBrowserWindowSelectionView::WindowEventHandlerL +// --------------------------------------------------------- +// +void CBrowserWindowSelectionView::WindowEventHandlerL( TWindowEvent aEvent, TInt /*aWindowId*/ ) + { + if ( !iWindowEventsDisabled ) + { + if ( aEvent == EWindowClose || aEvent == EWindowOpen ) + { + delete iWindowInfo; + iWindowInfo = NULL; + iWindowInfo = ApiProvider().WindowMgr().GetWindowInfoL( this ); + // Update tabs when there are more than one windows open. + if ( iWindowInfo->Count() > 1 ) + { + UpdateTabsL(); + } + } + if ( aEvent == EWindowLoadStart ) + { + iEikonEnv->InfoMsg( _L("load start") ); + } + if ( aEvent == EWindowLoadStop ) + { + iEikonEnv->InfoMsg( _L("load stop") ); + } + } + } + +// End of File