browserui/browser/BrowserAppSrc/BrowserWindowSelectionContainer.cpp
changeset 0 84ad3b177aa3
child 24 868cceedabd3
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppSrc/BrowserWindowSelectionContainer.cpp	Mon Mar 30 12:49:49 2009 +0300
@@ -0,0 +1,304 @@
+/*
+* 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 <BrowserNG.rsg>
+#include <aknnavi.h>
+#include <akntabgrp.h>
+#include <aknnavide.h> 
+#include <akntabgrp.h>
+#include <eikimage.h>
+#include <barsread.h>
+#include <BrCtlDefs.h>
+#include <BrCtlInterface.h>
+#include <BrCtlDefs.h>
+#include <browser.mbg>
+#include <gulicon.h>
+
+
+// ---------------------------------------------------------
+// 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<HBufC*>* 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();
+    
+    // example code...
+    gc.SetPenStyle( CGraphicsContext::ENullPen );
+    gc.SetBrushColor( KRgbWhite );
+    gc.SetBrushStyle( CGraphicsContext::ESolidBrush );
+    gc.DrawRect( aRect );
+        
+    if ( iThumbnail )
+        {
+        // 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
+        gc.BitBlt( TPoint(x,y), iThumbnail->Bitmap() );        
+        // 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