landmarksui/app/src/CLmkAppUi.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 19 Aug 2010 09:48:36 +0300
branchRCL_3
changeset 16 8173571d354e
parent 0 522cd55cc3d7
permissions -rw-r--r--
Revision: 201030 Kit: 201033

/*
* 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