uifw/AvKon/src/AknStatuspaneUtils.cpp
changeset 0 2f259fa3e83a
child 4 8ca85d2f0db7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/uifw/AvKon/src/AknStatuspaneUtils.cpp	Tue Feb 02 01:00:49 2010 +0200
@@ -0,0 +1,285 @@
+/*
+* Copyright (c) 2004-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:  Statuspane related utilities.
+*
+*/
+
+
+#include <avkon.rsg>
+#include <AknLayout.lag>
+#include <eikspane.h>
+#include <AknSgcc.h>
+#include <layoutmetadata.cdl.h>
+#include <eikappui.h>
+#include <eikapp.h>
+
+#include "AknStatuspaneUtils.h"
+#include "aknenv.h"
+
+EXPORT_C TBool AknStatuspaneUtils::IdleLayoutActive()
+    {
+    TBool retVal = EFalse;
+    
+    TInt currentStatusPaneLayoutResId = CurrentStatusPaneLayoutResId();
+        
+    retVal = ( currentStatusPaneLayoutResId == R_AVKON_STATUS_PANE_LAYOUT_IDLE ||
+               currentStatusPaneLayoutResId == R_AVKON_STATUS_PANE_LAYOUT_IDLE_EXT ||
+               currentStatusPaneLayoutResId == R_AVKON_STATUS_PANE_LAYOUT_IDLE_FLAT ||
+               currentStatusPaneLayoutResId == R_AVKON_STATUS_PANE_LAYOUT_IDLE_MIRRORED || 
+               currentStatusPaneLayoutResId == R_AVKON_STATUS_PANE_LAYOUT_VT ||
+               currentStatusPaneLayoutResId == R_AVKON_STATUS_PANE_LAYOUT_VT_MIRRORED ||
+               currentStatusPaneLayoutResId == R_AVKON_STACON_PANE_LAYOUT_IDLE_SOFTKEYS_RIGHT ||
+               currentStatusPaneLayoutResId == R_AVKON_STACON_PANE_LAYOUT_IDLE_SOFTKEYS_LEFT ||
+               currentStatusPaneLayoutResId == R_AVKON_WIDESCREEN_PANE_LAYOUT_IDLE ||
+               currentStatusPaneLayoutResId == R_AVKON_WIDESCREEN_PANE_LAYOUT_IDLE_FLAT ||
+               currentStatusPaneLayoutResId == R_AVKON_WIDESCREEN_PANE_LAYOUT_IDLE_FLAT_NO_SOFTKEYS );
+        
+    return retVal;
+    }
+
+EXPORT_C TBool AknStatuspaneUtils::UsualLayoutActive()
+    {
+    TBool retVal = EFalse;
+
+    TInt currentStatusPaneLayoutResId = CurrentStatusPaneLayoutResId();
+
+    retVal = ( currentStatusPaneLayoutResId == R_AVKON_STATUS_PANE_LAYOUT_USUAL ||
+               currentStatusPaneLayoutResId == R_AVKON_STATUS_PANE_LAYOUT_USUAL_EXT ||
+               currentStatusPaneLayoutResId == R_AVKON_STATUS_PANE_LAYOUT_USUAL_FLAT ||
+               currentStatusPaneLayoutResId == R_AVKON_STATUS_PANE_LAYOUT_USUAL_MIRRORED ||
+               currentStatusPaneLayoutResId == R_AVKON_STACON_PANE_LAYOUT_USUAL_SOFTKEYS_RIGHT ||
+               currentStatusPaneLayoutResId == R_AVKON_STACON_PANE_LAYOUT_USUAL_SOFTKEYS_LEFT ||
+               currentStatusPaneLayoutResId == R_AVKON_WIDESCREEN_PANE_LAYOUT_USUAL ||
+               currentStatusPaneLayoutResId == R_AVKON_WIDESCREEN_PANE_LAYOUT_USUAL_FLAT ||
+               currentStatusPaneLayoutResId == R_AVKON_WIDESCREEN_PANE_LAYOUT_USUAL_FLAT_NO_SOFTKEYS );
+
+    return retVal;
+    }
+
+
+EXPORT_C TBool AknStatuspaneUtils::SmallLayoutActive()
+    {
+    TBool retVal = EFalse;
+
+    TInt currentStatusPaneLayoutResId = CurrentStatusPaneLayoutResId();
+        
+    retVal = ( currentStatusPaneLayoutResId == R_AVKON_STATUS_PANE_LAYOUT_SMALL_WITH_SIGNAL_PANE ||
+               currentStatusPaneLayoutResId == R_AVKON_STATUS_PANE_LAYOUT_SMALL_WITH_SIGNAL_PANE_MIRRORED ||
+               currentStatusPaneLayoutResId == R_AVKON_STATUS_PANE_LAYOUT_SMALL );
+    
+    return retVal;
+    }
+
+EXPORT_C TBool AknStatuspaneUtils::StaconPaneActive()
+    {
+    TBool retVal = EFalse;
+
+    TInt currentStatusPaneLayoutResId = CurrentStatusPaneLayoutResId();
+
+    retVal = ( 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 );
+                 
+    return retVal;
+    }
+
+
+EXPORT_C TBool AknStatuspaneUtils::StaconSoftKeysLeft()
+    {
+    TBool retVal = EFalse;
+
+    TInt currentStatusPaneLayoutResId = CurrentStatusPaneLayoutResId();
+        
+    retVal = ( currentStatusPaneLayoutResId == R_AVKON_STACON_PANE_LAYOUT_USUAL_SOFTKEYS_LEFT ||
+               currentStatusPaneLayoutResId == R_AVKON_STACON_PANE_LAYOUT_EMPTY_SOFTKEYS_LEFT ||
+               currentStatusPaneLayoutResId == R_AVKON_STACON_PANE_LAYOUT_IDLE_SOFTKEYS_LEFT );
+    
+    return retVal;
+    }
+
+EXPORT_C TBool AknStatuspaneUtils::StaconSoftKeysRight()
+    {
+    TBool retVal = EFalse;
+
+    TInt currentStatusPaneLayoutResId = CurrentStatusPaneLayoutResId();
+        
+    retVal = ( currentStatusPaneLayoutResId == R_AVKON_STACON_PANE_LAYOUT_USUAL_SOFTKEYS_RIGHT ||
+               currentStatusPaneLayoutResId == R_AVKON_STACON_PANE_LAYOUT_EMPTY_SOFTKEYS_RIGHT ||
+               currentStatusPaneLayoutResId == R_AVKON_STACON_PANE_LAYOUT_IDLE_SOFTKEYS_RIGHT ) ||
+		( HDLayoutActive() && currentStatusPaneLayoutResId != R_AVKON_WIDESCREEN_PANE_LAYOUT_IDLE_FLAT_NO_SOFTKEYS );
+    
+    return retVal;
+    }
+
+EXPORT_C TBool AknStatuspaneUtils::FlatLayoutActive()
+    {
+    TBool retVal = EFalse;
+
+    TInt currentStatusPaneLayoutResId = CurrentStatusPaneLayoutResId();
+
+    retVal = ( currentStatusPaneLayoutResId == R_AVKON_STATUS_PANE_LAYOUT_USUAL_FLAT || 
+               currentStatusPaneLayoutResId == R_AVKON_STATUS_PANE_LAYOUT_IDLE_FLAT ||
+               currentStatusPaneLayoutResId == R_AVKON_WIDESCREEN_PANE_LAYOUT_USUAL_FLAT ||
+               currentStatusPaneLayoutResId == R_AVKON_WIDESCREEN_PANE_LAYOUT_IDLE_FLAT ||
+               currentStatusPaneLayoutResId == R_AVKON_WIDESCREEN_PANE_LAYOUT_USUAL_FLAT_NO_SOFTKEYS ||
+               currentStatusPaneLayoutResId == R_AVKON_WIDESCREEN_PANE_LAYOUT_IDLE_FLAT_NO_SOFTKEYS );
+
+    return retVal;
+    }
+
+EXPORT_C TBool AknStatuspaneUtils::TouchPaneCompatibleLayoutActive()
+    {
+    TBool retVal = EFalse;
+    
+    TInt currentStatusPaneLayoutResId = CurrentStatusPaneLayoutResId();
+
+    retVal = ( currentStatusPaneLayoutResId != R_AVKON_STATUS_PANE_LAYOUT_EMPTY && 
+               currentStatusPaneLayoutResId != R_AVKON_STATUS_PANE_LAYOUT_POWER_OFF_RECHARGE && 
+               currentStatusPaneLayoutResId != R_AVKON_STACON_PANE_LAYOUT_EMPTY_SOFTKEYS_LEFT && 
+               currentStatusPaneLayoutResId != R_AVKON_STACON_PANE_LAYOUT_EMPTY_SOFTKEYS_RIGHT );
+
+    return retVal;
+    }
+
+EXPORT_C TBool AknStatuspaneUtils::ExtendedLayoutActive()
+    {
+    TBool retVal = EFalse;
+
+    TInt currentStatusPaneLayoutResId = CurrentStatusPaneLayoutResId();
+
+    retVal = ( currentStatusPaneLayoutResId == R_AVKON_STATUS_PANE_LAYOUT_USUAL_EXT ||
+    		   currentStatusPaneLayoutResId == R_AVKON_STATUS_PANE_LAYOUT_IDLE_EXT ||
+               currentStatusPaneLayoutResId == R_AVKON_WIDESCREEN_PANE_LAYOUT_USUAL ||
+               currentStatusPaneLayoutResId == R_AVKON_WIDESCREEN_PANE_LAYOUT_IDLE );
+
+    return retVal;
+    
+    }
+
+
+TBool AknStatuspaneUtils::HDLayoutActive()
+    {
+    TBool retVal = EFalse;
+    
+    if ( Layout_Meta_Data::IsLandscapeOrientation() )
+        {
+        // Can be widescreen only in landscape orientation.
+        TInt currentStatusPaneLayoutResId = CurrentStatusPaneLayoutResId();
+        
+        retVal = ( currentStatusPaneLayoutResId == R_AVKON_WIDESCREEN_PANE_LAYOUT_USUAL ||
+                   currentStatusPaneLayoutResId == R_AVKON_WIDESCREEN_PANE_LAYOUT_IDLE ||
+                   currentStatusPaneLayoutResId == R_AVKON_WIDESCREEN_PANE_LAYOUT_USUAL_FLAT ||
+                   currentStatusPaneLayoutResId == R_AVKON_WIDESCREEN_PANE_LAYOUT_IDLE_FLAT ||
+                   currentStatusPaneLayoutResId == R_AVKON_WIDESCREEN_PANE_LAYOUT_USUAL_FLAT_NO_SOFTKEYS ||
+                   currentStatusPaneLayoutResId == R_AVKON_WIDESCREEN_PANE_LAYOUT_IDLE_FLAT_NO_SOFTKEYS );
+        }
+    
+    return retVal;
+    }
+
+
+EXPORT_C TBool AknStatuspaneUtils::ExtendedStaconPaneActive()
+    {
+	if ( AknStatuspaneUtils::StaconPaneActive() )
+		{
+        TBool smallDigitalClockShownInStacon = ETrue;
+            
+        // Check for small digital clock if app has no status pane. Status pane clock
+        // is shown only in resolutions having aspect ratio equal or wider than qvga
+        // because otherwise there is no space for it.
+        TAknWindowLineLayout screenLayout =
+            AknLayout::screen();
+        TRect screenRect = screenLayout.Rect(); 
+
+       	TReal aspectRatio = TReal(screenRect.Width()) / TReal(screenRect.Height());
+       	if ( aspectRatio <= 1.33 )
+       	    {
+			smallDigitalClockShownInStacon = EFalse;
+      	    }
+    	
+	    return smallDigitalClockShownInStacon;				
+		}
+	else
+		{
+		return EFalse;	
+		}			
+	}
+
+EXPORT_C TBool AknStatuspaneUtils::ExtendedFlatLayoutActive()
+	{
+	if ( FlatLayoutActive() &&
+	     Layout_Meta_Data::IsLandscapeOrientation() &&
+	     !HDLayoutActive() )
+		{
+        TBool smallDigitalClockShown = EFalse;
+        
+	    CEikStatusPaneBase* statusPane = CEikStatusPaneBase::Current();
+            
+	   	if (statusPane && statusPane->PaneCapabilities(TUid::Uid(EEikStatusPaneUidDigitalClock)).IsInCurrentLayout())
+	   		{
+	        // Final check for small digital clock, shown only in resolutions having aspect 
+	        // ratio equal or wider than qvga because otherwise there is no space for it.
+	        TAknWindowLineLayout screenLayout =
+	            AknLayout::screen();
+	        TRect screenRect = screenLayout.Rect(); 
+
+	       	TReal aspectRatio = TReal(screenRect.Width()) / TReal(screenRect.Height());
+	       	if ( aspectRatio > 1.33 )
+	       	    {
+				smallDigitalClockShown = ETrue;
+	       	    }
+	    	}
+	    return smallDigitalClockShown;				
+		}
+	else
+		{
+		return EFalse;	
+		}			
+	}
+	
+EXPORT_C TInt AknStatuspaneUtils::CurrentStatusPaneLayoutResId()
+    {
+    TInt resourceId = 0;
+    CEikStatusPaneBase* statusPane = CEikStatusPaneBase::Current();
+    
+    if ( statusPane ) // Return the resource ID of app statuspane if it exists.
+        {
+        resourceId = statusPane->CurrentLayoutResId();
+        }
+    else // If this app does not have statuspane, then we ask the layout from AknCapServer.
+        {
+        resourceId = CAknSgcClient::CurrentStatuspaneResource();
+        }
+        
+    return resourceId;
+    }
+
+TBool AknStatuspaneUtils::IsActiveIdle()
+    {
+    TBool isAcIdle = EFalse;
+    
+    const TUid KActiveIdle2Uid = {0x102750F0};
+    CEikApplication* app = CEikonEnv::Static()->EikAppUi()->Application();
+    
+    if ( app && app->AppDllUid() == KActiveIdle2Uid )
+        {
+        isAcIdle = ETrue;
+        }
+    
+    return isAcIdle;
+    }
+