browserui/browser/BrowserAppSrc/BrowserAppViewBase.cpp
changeset 0 84ad3b177aa3
child 1 57d5b8e231c4
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppSrc/BrowserAppViewBase.cpp	Mon Mar 30 12:49:49 2009 +0300
@@ -0,0 +1,283 @@
+/*
+* Copyright (c) 2002 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: 
+*      Declaration of class CBrowserAppViewBase.
+*
+*
+*/
+
+
+#include "BrowserAppViewBase.h"
+#include "BrowserAppUi.h"
+#include "ApiProvider.h"
+#include <BrowserNG.rsg>
+#include "CommonConstants.h"
+#include <aknviewappui.h>
+#include <eikbtgpc.h>
+#include <avkon.rsg>
+#include <LayoutMetaData.cdl.h> // check landscape/portrait modes
+#include <aknenv.h>
+#include <AknSgcc.h>
+#include <StringLoader.h>
+
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// TSKPair::TSKPair
+// ---------------------------------------------------------
+//
+TSKPair::TSKPair():
+	iCmdId(EWmlNoCmd),iQtnRsc(R_BROWSER_DYN_SK_NULL)
+{
+}	
+
+// ---------------------------------------------------------
+// TSKPair::TSKPair
+// ---------------------------------------------------------
+//
+TSKPair::TSKPair(TInt aId,TInt aRsc):
+	iCmdId(aId),iQtnRsc(aRsc)
+{
+}	
+
+// ---------------------------------------------------------
+// TSKPair::IsNotDefault
+// ---------------------------------------------------------
+//
+TBool TSKPair::IsAssigned()
+{
+	return ( (iCmdId != EWmlNoCmd) && (iQtnRsc != R_BROWSER_DYN_SK_NULL) );
+}
+
+// ---------------------------------------------------------
+// TSKPair::operator==
+// ---------------------------------------------------------
+//
+TBool TSKPair::operator==(TSKPair aSkPair)
+{
+	return( (iCmdId == aSkPair.id()) && (iQtnRsc == aSkPair.qtn()) );
+}
+
+// ---------------------------------------------------------
+// TSKPair::operator=
+// ---------------------------------------------------------
+//
+void TSKPair::operator=(TSKPair aSKPair)
+{
+	iCmdId = aSKPair.id();
+	iQtnRsc = aSKPair.qtn();
+}
+
+// ---------------------------------------------------------
+// TSKPair::set
+// ---------------------------------------------------------
+//
+void TSKPair::setPair(TInt aId, TInt aRsc)
+{
+	iCmdId = aId;
+	iQtnRsc = aRsc;
+}
+
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CBrowserViewBase::CBrowserViewBase
+// ---------------------------------------------------------
+//
+CBrowserViewBase::CBrowserViewBase( MApiProvider& aApiProvider ):
+    iApiProvider( aApiProvider ),
+    iLastCommandSet( R_BROWSER_BUTTONS_CBA_NULL )
+    {
+    }
+
+// ---------------------------------------------------------
+// CBrowserViewBase::ApiProvider
+// ---------------------------------------------------------
+//
+MApiProvider& CBrowserViewBase::ApiProvider()
+    {
+    return iApiProvider;
+    }
+
+// ---------------------------------------------------------
+// CBrowserViewBase::UpdateCbaL
+// ---------------------------------------------------------
+//
+void CBrowserViewBase::UpdateCbaL()
+{
+    if ( !iApiProvider.ExitInProgress() )
+        {
+        TInt commandSet = CommandSetResourceIdL();
+        TUid currViewId = Id();
+
+		// Ask BrowserAppUi which view we were in when we last updated the CBA
+		// this will help decide if we should do it again
+        TUid previousCBAUpdateViewId = iApiProvider.GetLastCBAUpdateView();
+
+        if ( commandSet )
+        	{
+        	// Don't perform updates to the CBA when
+        	//
+        	// - We're still in the same view we were just in AND
+        	// - We're not dynamically setting CBA (do more checking below) AND
+        	// - The command set is the same as the one we just set last time
+        	//   this was called
+        	// - We're currently in the content view (the update-cba is more complex here
+        	//   and we should just do it when asked by ContentView class)
+        	//
+        	// NOTE that we rely on CommandSetResource to set the commandSet to
+        	//  R_BROWSER_BUTTONS_CBA_DYNAMIC to signal a desire to update the keys
+        	//  dynamically. 
+			if(	currViewId == iPreviousViewID &&
+				commandSet != R_BROWSER_BUTTONS_CBA_DYNAMIC &&
+				currViewId == previousCBAUpdateViewId &&
+				currViewId != KUidBrowserContentViewId)
+				{
+				return;
+				}
+        	
+        	// If command set is our special dynamic cba set,
+        	// now ask derived class for the resources dynamically.        	
+        	if(commandSet == R_BROWSER_BUTTONS_CBA_DYNAMIC)
+            	{
+				TSKPair lsk,rsk,msk;					
+				CommandSetResourceDynL(lsk,rsk,msk);
+
+				// Similar exclusion as above:
+				// Don't update the LSK, RSK, MSK dynamic assignments if:
+				//
+				// - We're still in the same view we were just in
+				// - The lsk, rsk, msk are all the same settings we set last time
+				if(currViewId == previousCBAUpdateViewId &&
+					lsk == iLastLSK && 
+					rsk == iLastRSK &&
+					msk == iLastMSK)
+				{
+					return;
+				}				
+				
+				// Save the settings
+				iLastLSK = lsk;
+				iLastRSK = rsk;
+				iLastMSK = msk;
+				
+				//
+				// Update each softkey in turn
+				// 
+				// If the CommandSetResourceDynL command assigned something to the key
+				// (in other words, it changed the key assignment from its default - it does have the option not to do so), 
+				// 
+				// Update each key now.
+				//
+				// Each derived-class view should update them as a general rule, even if it is to some default value
+				//	
+				if( lsk.IsAssigned() )
+					{
+					HBufC* txt = StringLoader::LoadLC( lsk.qtn() );
+            		Cba()->SetCommandL(CEikButtonGroupContainer::ELeftSoftkeyPosition, lsk.id(), *txt);
+					CleanupStack::PopAndDestroy();  // txt
+					}
+				if( rsk.IsAssigned() )
+					{
+					HBufC* txt = StringLoader::LoadLC( rsk.qtn() );
+            		Cba()->SetCommandL(CEikButtonGroupContainer::ERightSoftkeyPosition, rsk.id(), *txt);
+					CleanupStack::PopAndDestroy();  // txt
+					}
+				if( msk.IsAssigned() )
+					{
+					HBufC* txt = StringLoader::LoadLC( msk.qtn() );
+            		Cba()->SetCommandL(CEikButtonGroupContainer::EMiddleSoftkeyPosition, msk.id(), *txt);
+					CleanupStack::PopAndDestroy();  // txt
+					}
+				}
+			else // Else - the exisiting case: set the softkeys as a block by assigning a pre-defined resource id
+				{
+	        	// The usual case is to set the command set to 
+    	    	// whatever CommandSetResourceIdL has said
+	    	  	Cba()->SetCommandSetL( commandSet );				
+				}				
+ 			
+ 			// Save the last command set and set view id
+ 			iLastCommandSet = commandSet;
+ 			iApiProvider.SetLastCBAUpdateView(currViewId);
+ 			
+	   		// DrawNow() doesn't refresh MSK properly
+           	Cba()->DrawDeferred();
+			}
+        }    
+}
+
+
+
+
+
+
+
+
+// ---------------------------------------------------------
+// CBrowserViewBase::MakeCbaVisible
+// ---------------------------------------------------------
+//
+void CBrowserViewBase::MakeCbaVisible(TBool aVisible)
+    {
+    // don't turn off the cba in landscape mode since it will still be visible and
+    // calling MakeVisible(EFalse) will just make it not update correctly
+
+    TBool vis = aVisible;
+    if (!vis)
+        {
+        CEikStatusPaneBase* statusPane = CEikStatusPaneBase::Current();
+        TInt currentStatusPaneLayoutResId = 0;
+        if (statusPane)
+            {
+            currentStatusPaneLayoutResId = statusPane->CurrentLayoutResId();
+            }
+        else
+            {
+            // If this CBA:s owner does not have statuspane, then we ask the layout from AknCapServer.
+            currentStatusPaneLayoutResId = AVKONENV->StatusPaneResIdForCurrentLayout(CAknSgcClient::CurrentStatuspaneResource());
+            }
+
+        TBool staconPane = ((currentStatusPaneLayoutResId == R_AVKON_STACON_PANE_LAYOUT_USUAL_SOFTKEYS_RIGHT) ||
+                      (currentStatusPaneLayoutResId == R_AVKON_STACON_PANE_LAYOUT_USUAL_SOFTKEYS_LEFT)  ||
+                      (currentStatusPaneLayoutResId == R_AVKON_STACON_PANE_LAYOUT_EMPTY_SOFTKEYS_RIGHT) ||
+                      (currentStatusPaneLayoutResId == R_AVKON_STACON_PANE_LAYOUT_EMPTY_SOFTKEYS_LEFT)  ||
+                      (currentStatusPaneLayoutResId == R_AVKON_STACON_PANE_LAYOUT_IDLE_SOFTKEYS_RIGHT) ||
+                      (currentStatusPaneLayoutResId == R_AVKON_STACON_PANE_LAYOUT_IDLE_SOFTKEYS_LEFT));
+        vis = staconPane;
+        }
+    Cba()->MakeVisible( vis );
+    }
+
+// ---------------------------------------------------------
+// CBrowserViewBase::UpdateGotoPaneL
+// ---------------------------------------------------------
+//
+void CBrowserViewBase::UpdateGotoPaneL()
+    {
+    }
+
+// ---------------------------------------------------------
+// CBrowserViewBase::ClearCbaL
+// ---------------------------------------------------------
+//
+void CBrowserViewBase::ClearCbaL()
+    {
+    TInt commandSet = R_AVKON_SOFTKEYS_EMPTY;
+    Cba()->SetCommandSetL( commandSet );
+    Cba()->DrawNow();
+    }
+// End of File