landmarksui/app/src/CLmkAppUi.cpp
branchRCL_3
changeset 18 870918037e16
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarksui/app/src/CLmkAppUi.cpp	Wed Sep 01 12:31:27 2010 +0100
@@ -0,0 +1,281 @@
+/*
+* 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:    LandmarksUi Content File -    Provides LM UI class methods.
+*
+*/
+
+
+
+
+
+
+
+// INCLUDE FILES
+#include "LmkUID.h"
+#include "CLmkAppUi.h"
+#include "landmarks.hrh"
+#include "CLmkDocument.h"
+#include "CLmkByLmView.h"
+#include "CLmkByCategoryView.h"
+#include "CLmkCategorySettingsView.h"
+#include "CLmkCategoryContentsView.h"
+#include "CLmkSender.h"
+#include "Debug.h"
+#include <AknsUtils.h>
+#include <hlplch.h>
+#include <StringLoader.h>
+#include <aknnotewrappers.h>
+#include <AknQueryDialog.h>
+#include <landmarks.rsg>
+#include <lmkerrors.h>
+
+#if defined(_DEBUG)
+// CONSTANTS
+/// Unnamed namespace for local definitions
+namespace {
+
+_LIT( KPanicMsg, "CLmkAppUi");
+
+void Panic( TPanicCode aReason )
+    {
+    User::Panic( KPanicMsg, aReason );
+    }
+}  // namespace
+#endif
+// ================= MEMBER FUNCTIONS =======================
+
+// ----------------------------------------------------------
+// CLmkAppUi::ConstructL
+// ----------------------------------------------------------
+//
+void CLmkAppUi::ConstructL()
+    {
+    DEBUG( CLmkAppUi::ConstructL entered );
+
+    BaseConstructL( EAknEnableSkin | EAknEnableMSK | EAknSingleClickCompatible);
+
+    TRAPD( err, iLmkSender = CLmkSender::NewL( Document().LmDbL() ));
+    DEBUG1( CLmkAppUi::ConstructL err=%d,err );
+    if(err == KErrLocked)
+    	{
+	    HBufC* noteText = StringLoader::LoadL( R_LMK_ERR_EIKON_GENERAL, iEikonEnv );
+	    CleanupStack::PushL( noteText );
+	    CAknErrorNote* dialog = new(ELeave)CAknErrorNote( ETrue );
+	    dialog->SetTone( CAknNoteDialog::EErrorTone );
+	    dialog->ExecuteLD( *noteText );
+	    CleanupStack::PopAndDestroy( noteText ); //noteText
+	    User::Exit(0);
+    	}
+
+    DEBUG( CLmkAppUi::ConstructL: creating views );
+
+    CLmkBaseView* byLmView = CLmkByLmView::NewLC( *this, *iLmkSender );
+
+    AddViewL( byLmView ); // transfer ownership to CAknViewAppUi
+    CleanupStack::Pop(); // byLmView
+
+    CLmkBaseView* byCategoryView = CLmkByCategoryView::NewLC( *this );
+
+    AddViewL( byCategoryView ); // transfer ownership to CAknViewAppUi
+    CleanupStack::Pop();    // byCategoryView
+
+    CLmkBaseView* categorySettingsView =
+        CLmkCategorySettingsView::NewLC( *this );
+
+
+    AddViewL( categorySettingsView );
+    CleanupStack::Pop();
+
+    CLmkBaseView* categoryContentsView =
+        CLmkCategoryContentsView::NewLC( *this, *iLmkSender );
+
+    AddViewL( categoryContentsView );
+    CleanupStack::Pop();
+
+    SetDefaultViewL( *byLmView );
+
+    DEBUG( CLmkAppUi::ConstructL finished );
+    }
+
+// ----------------------------------------------------
+// CLmkAppUi::~CLmkAppUi
+// Destructor
+// Frees reserved resources
+// ----------------------------------------------------
+//
+CLmkAppUi::~CLmkAppUi()
+    {
+    delete iLmkSender;
+    }
+
+// ----------------------------------------------------
+// CLmkAppUi::HandleCommandL
+// ----------------------------------------------------
+//
+void CLmkAppUi::HandleCommandL( TInt aCommand )
+    {
+    DEBUG1( CLmkAppUi::HandleCommandL entered aCommand=%d, aCommand);
+    switch ( aCommand )
+        {
+        case EAknCmdHelp:
+            {
+            HlpLauncher::LaunchHelpApplicationL( iEikonEnv->WsSession(),
+                                                 AppHelpContextL() );
+            break;
+            }
+        // these all are same: exit
+        case EAknSoftkeyBack:
+        case EAknSoftkeyExit:
+        case EEikCmdExit:
+            {
+            Exit();
+            break;
+            }
+        case ELmkCmdEditCats:
+            {
+            ActivateLocalViewL( TUid::Uid( ELmkCategorySettingsView ) );
+            break;
+            }
+
+        default:
+            break;
+        }
+    DEBUG( CLmkAppUi::HandleCommandL end );
+    }
+
+// ----------------------------------------------------
+// CLmkAppUi::Document
+// ----------------------------------------------------
+//
+CLmkDocument& CLmkAppUi::Document() const
+    {
+    CLmkDocument* document =
+        static_cast<CLmkDocument*>( CEikAppUi::Document() );
+    __ASSERT_DEBUG( document, Panic( KLmkPanicNullMember ) );
+    // Explicit cast: the document must always be of type CLmkDocument
+    return *document;
+    }
+
+// ----------------------------------------------------
+// CLmkAppUi::LmkSender
+// ----------------------------------------------------
+//
+CLmkSender& CLmkAppUi::LmkSender() const
+    {
+    __ASSERT_DEBUG( iLmkSender, Panic( KLmkPanicNullMember ) );
+    return *iLmkSender;
+    }
+
+// ----------------------------------------------------
+// CLmkAppUi::TabChangedL
+// ----------------------------------------------------
+//
+void CLmkAppUi::TabChangedL(TInt aIndex)
+    {
+
+    // Gets a subpane control by ID
+    CAknNavigationControlContainer* naviCtrlContainer =
+        static_cast<CAknNavigationControlContainer*>
+        ( StatusPane()->ControlL( TUid::Uid( EEikStatusPaneUidNavi ) ) );
+    __ASSERT_DEBUG( naviCtrlContainer, Panic( KLmkPanicNullMember ) );
+
+    // Return topmost object from navigation pane's object stack.
+    CAknNavigationDecorator* decorator = naviCtrlContainer->Top();
+    __ASSERT_DEBUG( decorator && decorator->ControlType() ==
+                    CAknNavigationDecorator::ETabGroup,
+                    Panic( KLmkPanicNullMember ) );
+
+    CAknTabGroup* tabGroup =
+        static_cast< CAknTabGroup* > ( decorator->DecoratedControl() );
+    __ASSERT_DEBUG( tabGroup && aIndex >= 0 && aIndex < tabGroup->TabCount(),
+                    Panic( KLmkPanicNullMember ) );
+    ActivateLocalViewL( TUid::Uid( tabGroup->TabIdFromIndex( aIndex ) ) );
+    }
+
+// ----------------------------------------------------
+// CLmkAppUi::ProcessKeyEventL
+// ----------------------------------------------------
+//
+TBool CLmkAppUi::ProcessKeyEventL(
+    const TKeyEvent& /*aKeyEvent*/,
+    TEventCode /*aType*/ )
+    {
+    return EKeyWasNotConsumed;
+    }
+
+// ----------------------------------------------------
+// CLmkAppUi::TabObserver
+// ----------------------------------------------------
+//
+MAknTabObserver* CLmkAppUi::TabObserver()
+    {
+    return this;
+    }
+
+// ----------------------------------------------------
+// CLmkAppUi::HandleViewDeactivation
+// ----------------------------------------------------
+//
+void CLmkAppUi::HandleViewDeactivation(const TVwsViewId &aViewIdToBeDeactivated,
+                                            const TVwsViewId &    aNewlyActivatedViewId  )
+    {
+    // closing all intermediate state events
+	iAvkonEnv->CloseAllIntermediateStates();
+
+    if( aNewlyActivatedViewId.iAppUid ==  TUid::Uid( KLmkAppUID3 ) )
+        {
+        	if ( aNewlyActivatedViewId.iViewUid  == TUid::Uid( ELmkByCategoryView )  && aViewIdToBeDeactivated.iViewUid  == TUid::Uid( ELmkByLmView))
+        	{
+        	    // Gets a subpane control by ID
+        	    CAknNavigationControlContainer* naviCtrlContainer = NULL;
+            TRAP_IGNORE(naviCtrlContainer =
+                static_cast<CAknNavigationControlContainer*>
+                ( StatusPane()->ControlL( TUid::Uid( EEikStatusPaneUidNavi ) ) ));
+
+            // Return topmost object from navigation pane's object stack.
+            CAknNavigationDecorator* decorator = naviCtrlContainer->Top();
+            CAknTabGroup* tabGroup =
+                static_cast< CAknTabGroup* > ( decorator->DecoratedControl() );
+
+        		if(tabGroup)
+        		{
+        			tabGroup->SetActiveTabById(ELmkByCategoryView);
+        			tabGroup->DrawDeferred();
+        			decorator->DrawDeferred();
+        		}
+        	}
+
+        	if( aNewlyActivatedViewId.iViewUid  == TUid::Uid( ELmkByLmView) && aViewIdToBeDeactivated.iViewUid  == TUid::Uid( ELmkByCategoryView) )
+        	{
+        	    // Gets a subpane control by ID
+        		CAknNavigationControlContainer* naviCtrlContainer = NULL;
+            TRAP_IGNORE(naviCtrlContainer =
+                static_cast<CAknNavigationControlContainer*>
+                ( StatusPane()->ControlL( TUid::Uid( EEikStatusPaneUidNavi ) ) ) );
+
+            // Return topmost object from navigation pane's object stack.
+            CAknNavigationDecorator* decorator = naviCtrlContainer->Top();
+            CAknTabGroup* tabGroup =
+                static_cast< CAknTabGroup* > ( decorator->DecoratedControl() );
+        		if(tabGroup)
+        		{
+        			tabGroup->SetActiveTabById(ELmkByLmView);
+        			tabGroup->DrawDeferred();
+        			decorator->DrawDeferred();
+        		}
+        	}
+        }
+    }
+
+// End of File