logsui/AppSrc/CLogsNaviDecoratorWrapper.cpp
changeset 0 e686773b3f54
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/logsui/AppSrc/CLogsNaviDecoratorWrapper.cpp	Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,128 @@
+/*
+* 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 "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: 
+*      A singleton wrapper for Logs views CAknNavigationDecorator objects (Tab groups). 
+*      Each unique Tab group is only created if it doesn't already exist. This fixes 
+*      error MVHA-6TJDMJ.
+*
+*
+*/
+
+
+// INCLUDE FILES
+#include "CLogsNaviDecoratorWrapper.h"
+#include <AknTabObserver.h>
+#include <aknnavide.h>
+#include <aknnavi.h>
+
+#include <barsread.h>   // resource reader
+
+#include "LogsUID.h"
+
+
+
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ----------------------------------------------------------------------------
+// CLogsNaviDecoratorWrapper::CLogsNaviDecmioratorWrapper
+// ----------------------------------------------------------------------------
+//
+CLogsNaviDecoratorWrapper::CLogsNaviDecoratorWrapper() : CCoeStatic( TUid::Uid( KLogsAppUID3 )), iNaviDecorator( NULL ), iCurrentNaviResource (0)
+    {
+    }
+    
+// ----------------------------------------------------------------------------
+// CLogsNaviDecoratorWrapper::NewLC
+// ----------------------------------------------------------------------------
+//
+CLogsNaviDecoratorWrapper* CLogsNaviDecoratorWrapper::NewLC()
+    {  
+    CLogsNaviDecoratorWrapper* self = new (ELeave) CLogsNaviDecoratorWrapper;
+    CleanupStack::PushL(self);
+    return self; 
+    }
+
+
+// ----------------------------------------------------------------------------
+// CLogsNaviDecoratorWrapper::GetNaviDecorator
+// 
+// Getter for the iNaviDecorator member. 
+// ----------------------------------------------------------------------------
+//  
+CAknNavigationDecorator* CLogsNaviDecoratorWrapper::GetNaviDecoratorL(CAknNavigationControlContainer* aNaviPane,
+                                                                     MAknTabObserver* aTabObserver,
+                                                                     TInt aResource)
+    {   
+    // If the iNaviDecorator is not yet created, or it is of wrong type
+    // we need to create a new.
+    if (iNaviDecorator == NULL || iCurrentNaviResource != aResource)
+        {     
+        TResourceReader reader;
+        CCoeEnv::Static()->CreateResourceReaderLC( reader, aResource );
+        
+        if (iNaviDecorator != NULL )
+            {
+            // deleting the old navidecorator also Pops it from the Navi Panes's control stack
+            delete iNaviDecorator;
+            iNaviDecorator = NULL;
+            }
+        
+        iNaviDecorator = aNaviPane->CreateTabGroupL( reader, aTabObserver );
+        
+        CleanupStack::PopAndDestroy(); // reader
+        
+        // Store the current iNaviDecorator's resource id 
+        iCurrentNaviResource = aResource;
+        }
+        
+    // Push the naviDecorator to the Navi Pane's control stack 
+    aNaviPane->PushL( *( iNaviDecorator ) ); 
+    return iNaviDecorator;
+    }
+    
+    
+// ----------------------------------------------------------------------------
+// CLogsNaviDecoratorWrapper::GetNaviDecorator
+// 
+// Static Getter for the singleton instance of CLogsNaviDecoratorWrapper class. 
+// ----------------------------------------------------------------------------
+//       
+CLogsNaviDecoratorWrapper* CLogsNaviDecoratorWrapper::InstanceL()
+    {
+    CLogsNaviDecoratorWrapper* singleton = static_cast<CLogsNaviDecoratorWrapper*>
+                    ( CCoeEnv::Static( TUid::Uid(KLogsAppUID3 ) ));
+    if ( !singleton )
+        {
+        singleton = CLogsNaviDecoratorWrapper::NewLC();
+        CleanupStack::Pop(singleton);
+        }
+    return singleton;
+    
+    }
+   
+
+// ----------------------------------------------------------------------------
+// CLogsNaviDecoratorWrapper::~CLogsNaviDecoratorWrapper
+//
+// CCoeEnv handles the cleanup. Destructor called from CCoeEnv::DestroyEnvironmentStatic
+// ----------------------------------------------------------------------------
+//   
+CLogsNaviDecoratorWrapper::~CLogsNaviDecoratorWrapper()
+    {
+    delete iNaviDecorator;
+    }
+
+
+// End of File