diff -r 1fc85118c3ae -r 870918037e16 landmarksui/app/src/CLmkAppUi.cpp --- /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 +#include +#include +#include +#include +#include +#include + +#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( 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 + ( 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 + ( 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 + ( 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