diff -r 6385c4c93049 -r 8e6fa1719340 browserui/browser/BrowserAppSrc/BrowserWindowSelectionContainer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/browserui/browser/BrowserAppSrc/BrowserWindowSelectionContainer.cpp Wed Sep 01 12:31:04 2010 +0100 @@ -0,0 +1,317 @@ +/* +* 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 CBrowserWindowSelectionContainer. +* +* +*/ + + + +// INCLUDE FILES +#include "BrowserWindowSelectionContainer.h" +#include "BrowserWindowSelectionView.h" +#include "BrowserAppUi.h" +#include "Display.h" +#include "WindowInfoProvider.h" +#include "BrowserWindowManager.h" +#include "BrowserWindow.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +// --------------------------------------------------------- +// CBrowserWindowSelectionContainer::ConstructL +// --------------------------------------------------------- +// +void CBrowserWindowSelectionContainer::ConstructL(const TRect& aRect) + { + CreateWindowL(); + // Tabgroup has been read from resource and it were pushed to the navi pane. + // Get pointer to the navigation decorator with the ResourceDecorator() function. + // Application owns the decorator and it has responsibility to delete the object. + iNaviDecorator = iView->ApiProvider().Display().NaviPaneL()->CreateTabGroupL(); + iTabGroup = (CAknTabGroup*)iNaviDecorator->DecoratedControl(); + iTabGroup->SetObserver(this); + + /* + // Create tab icon + iTabIcon = new (ELeave) CEikImage; + TResourceReader rr; + iCoeEnv->CreateResourceReaderLC( rr, R_BROWSER_ICON_PROP_FOLDER ); + iTabIcon->ConstructFromResourceL( rr ); + CleanupStack::PopAndDestroy(); // rr + */ + + SetRect(aRect); + ActivateL(); + } + +// --------------------------------------------------------- +// CBrowserWindowSelectionContainer::CBrowserWindowSelectionContainer +// --------------------------------------------------------- +// +CBrowserWindowSelectionContainer::CBrowserWindowSelectionContainer( CBrowserWindowSelectionView *aView ) : iView( aView ) + { + } + +// --------------------------------------------------------- +// CBrowserWindowSelectionContainer::~CBrowserWindowSelectionContainer +// --------------------------------------------------------- +// +CBrowserWindowSelectionContainer::~CBrowserWindowSelectionContainer() + { + delete iNaviDecorator; + delete iThumbnail; + } + +// --------------------------------------------------------- +// CBrowserWindowSelectionContainer::ChangeTabL +// --------------------------------------------------------- +// +void CBrowserWindowSelectionContainer::ChangeTabL( CArrayFixFlat* aTabTexts, TInt aActivateTab ) + { + // If there are any tabs + if ( iTabGroup->TabCount() ) + { + TInt tabCount = iTabGroup->TabCount(); + // Delete all tabs + for ( TInt tabIndex = 0; tabIndex < tabCount; tabIndex++ ) + { + // Delete the first tab until there is no more tab... + iTabGroup->DeleteTabL( iTabGroup->TabIdFromIndex( 0 ) ); + } + } + // If only two tabs are needed, dont show more tabs. + if ( aTabTexts->Count() == 2 ) + { + GetTabGroup()->SetTabFixedWidthL( EAknTabWidthWithTwoLongTabs ); + } + // If more than two tabs are needed, maximum 3 tabs are visible + else + { + GetTabGroup()->SetTabFixedWidthL( EAknTabWidthWithThreeLongTabs ); + } + // Add create the tabs + for ( TInt tabIndex = 0; tabIndex < aTabTexts->Count(); tabIndex++ ) + { + iTabGroup->AddTabL( tabIndex, (*aTabTexts)[tabIndex]->Des() /*, iTabIcon->Bitmap(), iTabIcon->Mask()*/ ); + } + // Set focus of the specified tab + iTabGroup->SetActiveTabByIndex( aActivateTab ); + // Handle tab changes. + iView->ApiProvider().Display().NaviPaneL()->PushL( *iNaviDecorator ); + + // Draw the thumbnail by the window id. + GetWindowThumbnailL( iView->GetWindowIdFromTabIndex( GetTabGroup()->ActiveTabIndex() ) ); + DrawNow(); + } + +// --------------------------------------------------------- +// CBrowserWindowSelectionContainer::SizeChanged +// --------------------------------------------------------- +// +void CBrowserWindowSelectionContainer::SizeChanged() + { + // TODO: Add here control resize code etc. + } + +// --------------------------------------------------------- +// CBrowserWindowSelectionContainer::CountComponentControls +// --------------------------------------------------------- +// +TInt CBrowserWindowSelectionContainer::CountComponentControls() const + { + return 0; // return nbr of controls inside this container + } + +// --------------------------------------------------------- +// CBrowserWindowSelectionContainer::ComponentControl +// --------------------------------------------------------- +// +CCoeControl* CBrowserWindowSelectionContainer::ComponentControl(TInt aIndex) const + { + switch ( aIndex ) + { + default: + return NULL; + } + } + +// --------------------------------------------------------- +// CBrowserWindowSelectionContainer::Draw +// --------------------------------------------------------- +// +void CBrowserWindowSelectionContainer::Draw(const TRect& aRect) const + { + CWindowGc& gc = SystemGc(); + + // Create a gray background... + gc.SetPenColor(TRgb(45,44,50)); + gc.SetPenStyle(CGraphicsContext::ESolidPen); + gc.SetBrushColor( KRgbDarkGray ); + gc.SetBrushStyle( CGraphicsContext::ESolidBrush ); + gc.DrawRect( aRect ); + + if ( iThumbnail ) + { +#ifdef BRDO_MULTITOUCH_ENABLED_FF + TSize viewSize(aRect.Width(), aRect.Height()); + int centerImageWidth(viewSize.iWidth*60/100); + int centerImageHeight(viewSize.iHeight*75/100); + int centerImageX(viewSize.iWidth*20/100); + int centerImageY(viewSize.iHeight*(100-75)/(2*100)); + TPoint centerImageOrigin(centerImageX, centerImageY); +#endif + // Put in center + // release + TSize bitmapSize = iThumbnail->Bitmap()->SizeInPixels(); + // test + //TSize bitmapSize = iThumbnail->SizeInPixels(); + TInt x = ( aRect.Width()-bitmapSize.iWidth ) / 2; + TInt y = ( aRect.Height()-bitmapSize.iHeight ) / 2; + // Draw thumbnail + // release +#ifdef BRDO_MULTITOUCH_ENABLED_FF + gc.BitBlt( centerImageOrigin, iThumbnail->Bitmap(), TRect(0, 0, centerImageWidth, centerImageHeight) ); +#else + gc.BitBlt( TPoint(x,y), iThumbnail->Bitmap() ); +#endif + // test + // gc.BitBlt( TPoint(x,y), iThumbnail ); + } + } + +// --------------------------------------------------------- +// CBrowserWindowSelectionContainer::OfferKeyEventL +// --------------------------------------------------------- +// +TKeyResponse CBrowserWindowSelectionContainer::OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType ) + { + // Handle if Ok key was pressed. + if ( aType == EEventKey && aKeyEvent.iCode == EKeyOK ) + { + TInt windowId = iView->GetWindowIdFromTabIndex( GetTabGroup()->ActiveTabIndex() ); + iView->ApiProvider().WindowMgr().SwitchWindowL( windowId ); + //If the user switches window we reset the CalledFromAnotherApp status + if(iView->ApiProvider().CalledFromAnotherApp()) + { + iView->ApiProvider().SetCalledFromAnotherApp(EFalse); + } + iView->ApiProvider().SetViewToBeActivatedIfNeededL( iView->GetPreviousViewID() ); + return EKeyWasConsumed; + } + + // Check if navipane has valid parameters. + if ( !iTabGroup ) + { + return EKeyWasNotConsumed; + } + if ( !iTabGroup->TabCount() ) + { + return EKeyWasNotConsumed; + } + if ( !iNaviDecorator ) + { + return EKeyWasNotConsumed; + } + // Get tab group + CAknTabGroup* tabGroup = STATIC_CAST( CAknTabGroup*, iNaviDecorator->DecoratedControl() ); + // If tab group was not created succesfully. + if ( !tabGroup ) + { + return EKeyWasNotConsumed; + } + // If tab group has no tabs. + if ( !tabGroup->TabCount() ) + { + return EKeyWasNotConsumed; + } + // Forward events to tabgroup. + const TKeyResponse result = tabGroup->OfferKeyEventL( aKeyEvent, aType ); + + return result; + } + +// --------------------------------------------------------- +// CBrowserWindowSelectionContainer::HandleControlEventL +// --------------------------------------------------------- +// +void CBrowserWindowSelectionContainer::HandleControlEventL( + CCoeControl* /*aControl*/,TCoeEvent /*aEventType*/) + { + // TODO: Add your control event handler code here + } + +// --------------------------------------------------------- +// CBrowserWindowSelectionContainer::GetWindowThumbnail +// --------------------------------------------------------- +// +void CBrowserWindowSelectionContainer::GetWindowThumbnailL( TInt aWindowId ) + { + // Get window url + CBrowserWindow* window; + iView->ApiProvider().WindowMgr().Window( aWindowId, window ); + HBufC* windowUrl = window->BrCtlInterface().PageInfoLC( TBrCtlDefs::EPageInfoUrl ); + + // Get thumbnail + // release + delete iThumbnail; + if (windowUrl) + { + iThumbnail = window->BrCtlInterface().GetBitmapData( windowUrl->Des(), TBrCtlDefs::EBitmapThumbnail ); + } + else + { + iThumbnail = NULL; + } + // eof release + + + CleanupStack::PopAndDestroy(); // windowUrl + } + +// --------------------------------------------------------- +// CBrowserWindowSelectionContainer::HandlePointerEventL +// --------------------------------------------------------- +// +void CBrowserWindowSelectionContainer::HandlePointerEventL(const TPointerEvent& aPointerEvent) + { + if (aPointerEvent.iType == TPointerEvent::EButton1Down) + { + iView->HandleCommandL(EAknCmdOpen); + } + } + +// --------------------------------------------------------- +// CBrowserWindowSelectionContainer::TabChangedL +// --------------------------------------------------------- +// +void CBrowserWindowSelectionContainer::TabChangedL(TInt /*aIndex*/) + { + iView->UpdateTitleL(); + iView->UpdateTumbnailL(); + } + +// End of File