diff -r 1fc85118c3ae -r 870918037e16 landmarksui/app/src/CLmkBaseContainer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/landmarksui/app/src/CLmkBaseContainer.cpp Wed Sep 01 12:31:27 2010 +0100 @@ -0,0 +1,406 @@ +/* +* 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 request container class methods. +* +*/ + + + + + + + +// INCLUDE FILES +#include "CLmkBaseContainer.h" +#include "MLmkKeyProcessor.h" +#include "LmkUID.h" +#include "LmkConsts.h" +#include +#include +#include +#include +#include +#include "landmarks.hrh" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "CLmkAppSelectorImplBase.h" +#include +#include "Debug.h" + +#if defined(_DEBUG) +// CONSTANTS +namespace { +_LIT( KPanicText, "CLmkBaseContainer" ); + +void Panic( TPanicCode aReason ) + { + User::Panic( KPanicText, aReason ); + } +} // namespace +#endif + +// ================= MEMBER FUNCTIONS ======================= +// ---------------------------------------------------- +// CLmkBaseContainer::CLmkBaseContainer +// ---------------------------------------------------- +// +CLmkBaseContainer::CLmkBaseContainer( + MLmkKeyProcessor& aKeyProcessor, + const TDesC& aHelpContext ) + :iKeyProcessor( aKeyProcessor ), + iContextName( aHelpContext ) + { + } + +// ---------------------------------------------------- +// CLmkBaseContainer::BaseConstructL +// ---------------------------------------------------- +// +void CLmkBaseContainer::BaseConstructL() + { + CEikStatusPane* sp = StatusPane(); + // Fetch pointer to the default navi pane control + iNaviPane = static_cast + ( sp->ControlL( TUid::Uid( EEikStatusPaneUidNavi ) ) ); + } +// ---------------------------------------------------- +// CLmkBaseContainer::~CLmkBaseContainer +// ---------------------------------------------------- +// +CLmkBaseContainer::~CLmkBaseContainer() + { + delete iSelector; + } + +// ---------------------------------------------------------------------------- +// CLmkBaseContainer::SelectorImpl() +// ---------------------------------------------------------------------------- +// +CLmkAppSelectorImplBase& CLmkBaseContainer::SelectorImpl() + { + __ASSERT_DEBUG( iSelector, Panic( KLmkPanicNullMember ) ); + return *iSelector; + } +// ---------------------------------------------------- +// CLmkBaseContainer::ActivateTabL +// ---------------------------------------------------- +// +void CLmkBaseContainer::ActivateTabL( + CAknNavigationDecorator& aNaviDecorator, + TInt aTabId ) + { + CEikStatusPane* sp = iEikonEnv->AppUiFactory()->StatusPane(); + CAknNavigationControlContainer* naviPane = + static_cast( + sp->ControlL(TUid::Uid(EEikStatusPaneUidNavi))); + CAknTabGroup* tabGroup = static_cast( + aNaviDecorator.DecoratedControl() ); + tabGroup->SetActiveTabById( aTabId ); + naviPane->PushL( aNaviDecorator ); + } + +// ---------------------------------------------------- +// CLmkBaseContainer::GetHelpContext +// ---------------------------------------------------- +// +void CLmkBaseContainer::GetHelpContext( TCoeHelpContext& aContext ) const + { + aContext.iContext = iContextName; + aContext.iMajor = TUid::Uid( KLmkAppUID3 ); + } + +// ---------------------------------------------------- +// CLmkBaseContainer::OfferKeyEventL +// ---------------------------------------------------- +// +TKeyResponse CLmkBaseContainer::OfferKeyEventL( + const TKeyEvent& aKeyEvent, + TEventCode aType ) + { + DEBUG( CLmkBaseContainer::OfferKeyEventL entered ); + + CAknNavigationDecorator* naviDecorator = NaviPane().Top(); + + // Check if navigation pane controls exists, because decorator does + // not exist in every cases. + if ( naviDecorator && naviDecorator->ControlType() == + CAknNavigationDecorator::ETabGroup ) + { + if(aKeyEvent.iRepeats == 0) + { + if ( naviDecorator->DecoratedControl()->OfferKeyEventL( + aKeyEvent, aType ) == EKeyWasConsumed ) + { + return EKeyWasConsumed; + } + } + } + + if ( iKeyProcessor.ProcessKeyEventL( aKeyEvent, aType ) == + EKeyWasConsumed ) + { + return EKeyWasConsumed; + } + + if ( aType == EEventKey ) + { + TBool shiftKeyPressed = (aKeyEvent.iModifiers & EModifierShift) || + (aKeyEvent.iModifiers & EModifierLeftShift) || + (aKeyEvent.iModifiers & EModifierRightShift); + + if ( aKeyEvent.iCode == EKeyOK && !shiftKeyPressed && ContextSpecificMenuBar() ) + { + DEBUG( CLmkBaseContainer::OfferKeyEventL aKeyEvent.iCode == EKeyOK entered ); + CEikMenuBar* menubar = MenuBar(); + if ( menubar ) + { + menubar->SetMenuTitleResourceId( ContextSpecificMenuBar() ); + menubar->StopDisplayingMenuBar(); + TRAPD( err, menubar->TryDisplayMenuBarL() ); + // set ordinary menubar back even in case of error + menubar->SetMenuTitleResourceId( OptionsMenuBar() ); + User::LeaveIfError( err ); + } + return EKeyWasConsumed; + } + if ( aKeyEvent.iCode == EKeyEnter || aKeyEvent.iScanCode == EStdKeyEnter ) + { + TKeyEvent enterKeyEvent( aKeyEvent ); + enterKeyEvent.iCode = EKeyOK; + CEikButtonGroupContainer* cba = CEikButtonGroupContainer::Current(); + return cba->OfferKeyEventL( enterKeyEvent, aType ); + } + } + + for ( TInt i( 0 ); i < CountComponentControls(); ++i ) + { + if ( ComponentControl(i)->OfferKeyEventL( aKeyEvent, aType ) == + EKeyWasConsumed ) + { + return EKeyWasConsumed; + } + } + DEBUG( CLmkBaseContainer::OfferKeyEventL end ); + return EKeyWasNotConsumed; + } + +// ---------------------------------------------------- +// CLmkBaseContainer::LmkAppUi +// ---------------------------------------------------- +// +CAknViewAppUi* CLmkBaseContainer::ViewAppUi() + { + return static_cast( iAvkonAppUi ); + } + +// ---------------------------------------------------- +// CLmkBaseContainer::NaviPane +// ---------------------------------------------------- +// +CAknNavigationControlContainer& CLmkBaseContainer::NaviPane() + { + // default navi pane should always exist: + __ASSERT_DEBUG( iNaviPane, Panic( KLmkPanicNullNaviPane ) ); + return *iNaviPane; + } + +// ---------------------------------------------------- +// CLmkBaseContainer::CreateNaviPaneL +// ---------------------------------------------------- +// +CAknNavigationDecorator* CLmkBaseContainer::CreateNaviPaneL( + TInt aResource ) + { + CEikStatusPane* sp = iEikonEnv->AppUiFactory()->StatusPane(); + // Fetch pointer to the default navi pane control + CAknNavigationControlContainer* naviPane = + static_cast(sp->ControlL( + TUid::Uid(EEikStatusPaneUidNavi))); + + CAknNavigationDecorator* decorator = NULL; + if ( aResource == KZeroResourceId ) // dummy tab + { + naviPane->PushDefaultL( EFalse ); + } + else + { + decorator = naviPane->CreateTabGroupL(iKeyProcessor.TabObserver()); + decorator->SetControlType( CAknNavigationDecorator::ETabGroup ); + CAknTabGroup* tabGroup = + static_cast< CAknTabGroup* > ( decorator->DecoratedControl() ); + AddTabsL( *tabGroup ); + } + return decorator; + } + +// ---------------------------------------------------- +// CLmkBaseContainer::StatusPane +// ---------------------------------------------------- +// +CEikStatusPane* CLmkBaseContainer::StatusPane() + { + return iEikonEnv->AppUiFactory()->StatusPane(); + } + +// --------------------------------------------------------- +// CLmkBaseContainer::MenuBar +// --------------------------------------------------------- +// +CEikMenuBar* CLmkBaseContainer::MenuBar() + { + return NULL; + } + +// --------------------------------------------------------- +// CLmkBaseContainer::ContextSpecificMenuBar +// --------------------------------------------------------- +// +TInt CLmkBaseContainer::ContextSpecificMenuBar() + { + return 0; + } + +// --------------------------------------------------------- +// CLmkBaseContainer::OptionsMenuBar +// --------------------------------------------------------- +// +TInt CLmkBaseContainer::OptionsMenuBar() + { + return 0; + } + +// Code added by gaurav fro Tab Icons -start- +// ---------------------------------------------------- +// CLmkBaseContainer::AddTabsL +// ---------------------------------------------------- +// +void CLmkBaseContainer::AddTabsL(CAknTabGroup& aTabGroup) + { + aTabGroup.SetTabFixedWidthL(EAknTabWidthWithTwoTabs); + + MAknsSkinInstance* skin = AknsUtils::SkinInstance(); + HBufC* filename = GetBitmapFilenameLC(); + CFbsBitmap* bitmap = NULL; + CFbsBitmap* bitmapMask = NULL; + + //Add tab icon 1 + AknsUtils::CreateIconLC( skin, + KAknsIIDQgnPropLmNamesTab2, + bitmap, + bitmapMask, + *filename, + EMbmLandmarksQgn_prop_lm_names_tab2, + EMbmLandmarksQgn_prop_lm_names_tab2_mask ); + aTabGroup.AddTabL( ELmkByLmView, bitmap, bitmapMask ); //ELmkByLmView + CleanupStack::Pop(2); //bitmap, bitmapmask + + + //Add tab icon 2 + AknsUtils::CreateIconLC( skin, + KAknsIIDQgnPropLmCategoriesTab2, + bitmap, + bitmapMask, + *filename, + EMbmLandmarksQgn_prop_lm_categories_tab2, + EMbmLandmarksQgn_prop_lm_categories_tab2_mask ); + aTabGroup.AddTabL(ELmkByCategoryView, bitmap, bitmapMask ); // ELmkByCategoryView + CleanupStack::Pop(2); //bitmap, bitmapmask + + CleanupStack::PopAndDestroy(); //filename + } + +// ---------------------------------------------------------------------------- +// CLmkBaseContainer::GetBitmapFilenameL +// ---------------------------------------------------------------------------- +// +HBufC* CLmkBaseContainer::GetBitmapFilenameLC() + { + + TBuf<2> aApp; + CEikAppUi *appUi = (CEikAppUi *)(iCoeEnv->AppUi()); + TFileName* full = new( ELeave ) TFileName; + CleanupStack::PushL( full ); + *full = appUi->Application()->AppFullName(); + TParsePtr ptr(*full); + aApp.Copy(ptr.Drive()); + + // Path and file name: + TFileName* file = new( ELeave ) TFileName; + CleanupStack::PushL( file ); + file->Append( KLmkSystemMbmPath ); // always safe + file->Append( KLandmarksIconFileName ); // always safe + + // Add drive to path & file name: + TParse* parse = new(ELeave) TParse; + CleanupStack::PushL( parse ); + User::LeaveIfError( parse->Set( *file, &aApp, NULL ) ); + HBufC* retFileName = parse->FullName().AllocLC(); + CleanupStack::Pop();//retFileName + CleanupStack::PopAndDestroy(3); + CleanupStack::PushL( retFileName ); + return retFileName; + } + +// --------------------------------------------------------- +// CLmkBaseContainer::ResolveMskDisplayItem() +// --------------------------------------------------------- +// +TLmkMskDispItem CLmkBaseContainer::ResolveMskDisplayItem() + { + TLmkMskDispItem dispItem = ELabel; + if (iSearchInitiated && (!SelectorImpl().ListVisibleItemCount())) + { + dispItem = ENoMsk; + } + else + { + const CArrayFix* markedIndexes = NULL; + markedIndexes = SelectorImpl().MarkedIndexes(); + if(markedIndexes->Count() > 0 || + !SelectorImpl().ListVisibleItemCount()) + { + dispItem = EContextMenu; + } + } + + return dispItem; + } + +#ifdef RD_SCALABLE_UI_V2 +// --------------------------------------------------------- +// CLmkBaseContainer::SetListBoxObserver() +// --------------------------------------------------------- +// +void CLmkBaseContainer::SetListBoxObserver(MEikListBoxObserver* /*aObserver*/) + { + //Since CLmkCategorySettingsContainer is directly derived from + // CLmkBaseContainer, is the reason this function is made virtual + //in this class. Most of the other container classes are derived + //from CLmkLbWithFilterContainer, which is derived from CLmkBaseContainer, + //hence there will be two overriding of this function, + //1. In CLmkCategorySettingsContainer + //2. In CLmkLbWithFilterContainer + //since both the above classes holds the CEikListBox member, where the + //observer needs to be set. + } +#endif//RD_SCALABLE_UI_V2 +// End of File