--- a/landmarksui/uicontrols/src/CLmkSelectorDialog.cpp Thu Aug 19 09:48:36 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,619 +0,0 @@
-/*
- * Copyright (c) 2002-2010 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 -
- *
- */
-// INCLUDE FILES
-#include <StringLoader.h>
-#include <lmkui.rsg>
-#include <aknsfld.h>
-#include <aknlists.h>
-#include "CLmkSelectorDialog.h"
-#include "MLmkNavigationObserver.h"
-#include "CLmkLmItemListMemento.h"
-#include "LmkConsts.h"
-#include "CLmkListProviderBase.h"
-#include <landmarks.rsg>
-#include <eikclbd.h>
-
-_LIT(KWildCard, "*");
-
-// ============================ MEMBER FUNCTIONS ===============================
-
-// -----------------------------------------------------------------------------
-// CLmkSelectorDialog::CLmkSelectorDialog
-// C++ default constructor can NOT contain any code, that
-// might leave.
-// -----------------------------------------------------------------------------
-//
-CLmkSelectorDialog::CLmkSelectorDialog(
- TInt& aOpenedItemIndex,
- MDesCArray* aLbModel,
- MEikCommandObserver* aCmdObserver,
- MLmkListMemento* aMemento, CLmkListProviderBase* aListProvider)
- : CAknSelectionListDialog( aOpenedItemIndex, aLbModel, aCmdObserver )
- {
- iMemento = aMemento;
- iExited = EFalse;
- iListProvider = aListProvider;
- }
-
-// -----------------------------------------------------------------------------
-// CLmkSelectorDialog::NewL
-// Two-phased constructor.
-// -----------------------------------------------------------------------------
-//
-CLmkSelectorDialog* CLmkSelectorDialog::NewL(
- TInt& aOpenedItemIndex,
- MDesCArray* aLbModel,
- TInt aMenuBarResourceId,
- MEikCommandObserver* aCmdObserver,
- MLmkListMemento* aMemento,
- CLmkListProviderBase* aListProvider)
- {
- CLmkSelectorDialog* self =
- new( ELeave ) CLmkSelectorDialog( aOpenedItemIndex, aLbModel,
- aCmdObserver, aMemento, aListProvider );
-
- CleanupStack::PushL( self );
- self->ConstructL( aMenuBarResourceId );
- CleanupStack::Pop();
-
- return self;
- }
-
-// ----------------------------------------------------
-// CLmkSelectorDialog::ConstructL
-// ----------------------------------------------------
-//
-void CLmkSelectorDialog::ConstructL( TInt aMenuBarResourceId )
- {
- CAknSelectionListDialog::ConstructL( aMenuBarResourceId );
- }
-// ----------------------------------------------------
-// CLmkSelectorDialog::~CLmkSelectorDialog
-// ----------------------------------------------------
-//
-CLmkSelectorDialog::~CLmkSelectorDialog()
- {
- }
-
-// ----------------------------------------------------
-// CLmkSelectorDialog::HasFindBox
-// ----------------------------------------------------
-//
-TBool CLmkSelectorDialog::HasFindBox() const
- {
- if ( FindBox() )
- {
- return ETrue;
- }
- else
- {
- return EFalse;
- }
- }
-
-// -----------------------------------------------------------------------------
-// CLmkSelectorDialog::NumberOfItems
-// -----------------------------------------------------------------------------
-//
-TInt CLmkSelectorDialog::NumberOfItems() const
- {
- return ListBox()->Model()->NumberOfItems();
- }
-
-// -----------------------------------------------------------------------------
-// CLmkSelectorDialog::CurrentItemIndex
-// -----------------------------------------------------------------------------
-//
-TInt CLmkSelectorDialog::CurrentItemIndex() const
- {
- return ListBox()->CurrentItemIndex();
- }
-
-// -----------------------------------------------------------------------------
-// CLmkSelectorDialog::SelectionIndexes
-// -----------------------------------------------------------------------------
-//
-const CArrayFix<TInt>* CLmkSelectorDialog::SelectionIndexes() const
- {
- return ListBox()->SelectionIndexes();
- }
-
-// -----------------------------------------------------------------------------
-// CLmkSelectorDialog::SetHelpContext
-// -----------------------------------------------------------------------------
-//
-void CLmkSelectorDialog::SetHelpContext( TCoeHelpContext aContext )
- {
- iHelpContext = aContext;
- }
-
-// ----------------------------------------------------
-// CLmkSelectorDialog::ListBox
-// ----------------------------------------------------
-//
-CEikListBox* CLmkSelectorDialog::ListBox() const
- {
- return CAknSelectionListDialog::ListBox();
- }
-
-// ----------------------------------------------------
-// CLmkSelectorDialog::SetNavigationObserver
-// ----------------------------------------------------
-//
-void CLmkSelectorDialog::SetNavigationObserver(
- MLmkNavigationObserver& aObserver )
- {
- iNavigationObserver = &aObserver;
- }
-
-// ----------------------------------------------------
-// CLmkSelectorDialog::HandleListProviderEvent
-// ----------------------------------------------------
-//
-void CLmkSelectorDialog::HandleListProviderEvent(
- TLmkListProviderEventType aEvent )
- {
- CEikListBox* listbox = ListBox();
- if ( listbox && ( aEvent == ELmkEventListReady || aEvent == ELmkEventItemAdditionComplete || aEvent == ELmkEventFindListReady ) )
- {
- TRAPD( error, listbox->HandleItemAdditionL() );
- if ( error != KErrNone )
- {
- listbox->Reset();
- listbox->DrawNow();
- }
- }
- if (ListBox()->Model()->NumberOfItems()== 0)
- {
- if (aEvent == ELmkEventFindListReady)
- {
- TRAP_IGNORE(MakeEmptyTextListBoxL(iDlgEmptyLabelPrimResource,iDlgEmptyLabelSecResource, ETrue));
- }
- else
- {
- TRAP_IGNORE(MakeEmptyTextListBoxL(iDlgEmptyLabelPrimResource,iDlgEmptyLabelSecResource));
- }
- }
- else
- {
- ShowFindBox(ETrue);
- }
- }
-
-// ----------------------------------------------------
-// CLmkSelectorDialog::HandleListProviderError
-// ----------------------------------------------------
-//
-void CLmkSelectorDialog::HandleListProviderError( TInt /*aError*/ )
- {
- CEikListBox* listbox = ListBox();
- if ( listbox )
- {
- listbox->Reset();
- listbox->DrawNow();
- }
- }
-
-// -----------------------------------------------------------------------------
-// CLmkSelectorDialog::GetHelpContext
-// -----------------------------------------------------------------------------
-//
-void CLmkSelectorDialog::GetHelpContext( TCoeHelpContext& aContext ) const
- {
- aContext.iContext = iHelpContext.iContext;
- aContext.iMajor = iHelpContext.iMajor;
- }
-
-// -----------------------------------------------------------------------------
-// CLmkSelectorDialog::OfferKeyEventL
-// -----------------------------------------------------------------------------
-//
-TKeyResponse CLmkSelectorDialog::OfferKeyEventL( const TKeyEvent& aKeyEvent,
- TEventCode aType )
- {
- // Do not process navigation handling till UI gets from engine
- if (!ListBox())
- {
- return EKeyWasConsumed;
- }
- if (aKeyEvent.iRepeats == 0 || aKeyEvent.iCode == EKeyLeftArrow || aKeyEvent.iCode == EKeyRightArrow )
- {
- if (KeyEventForNavigationL(aKeyEvent, aType) == EKeyWasConsumed)
- {
- TryExitL(EAknSoftkeyCancel);
- return EKeyWasConsumed;
- }
- if (!FindBox()->IsVisible())
- {
- return EKeyWasConsumed;
- }
-
- }
- TKeyResponse keyResponce;
- keyResponce = CAknSelectionListDialog::OfferKeyEventL(aKeyEvent, aType);
- CEikButtonGroupContainer &buttonContainer = ButtonGroupContainer();
- if(!iExited)
- {
- UpdateMskL();
- }
- return keyResponce;
- }
-
-// -----------------------------------------------------------------------------
-// CLmkSelectorDialog::PreLayoutDynInitL
-// -----------------------------------------------------------------------------
-//
-void CLmkSelectorDialog::PreLayoutDynInitL()
- {
- CAknSelectionListDialog::PreLayoutDynInitL();
- if ( iNavigationObserver )
- {
- iNavigationObserver->HandleLaunchingEventL();
- }
- ((CEikColumnListBox*)ListBox())->ItemDrawer()->ColumnData()->EnableMarqueeL( ETrue );
- }
-// -----------------------------------------------------------------------------
-// CLmkSelectorDialog::PostLayoutDynInitL
-// -----------------------------------------------------------------------------
-void CLmkSelectorDialog::PostLayoutDynInitL()
- {
- CAknSelectionListDialog::PostLayoutDynInitL();
- ShowFindBox(EFalse);
- if (iMemento)
- {
- EnableLeftSoftKey(EFalse);
- CLmkLmItemListMemento* memento =
- static_cast<CLmkLmItemListMemento*>(iMemento);
- /*
- When launching any application which uses selector dialog,
- initially, the find box is updated from the HandleListProviderEvent
- of the CLmkDlgSelectorImplBase class,but once the selector's model is updated
- dialog has to update the findbox by itself.
- the
- */
- if(memento->IsModelAvailable())
- {
- iListProvider->StartSearchingLandmarksL(KWildCard,EFalse);
- if(ListBox()->Model()->NumberOfItems()== 0)
- {
- // Disable the find box
- ShowFindBox(EFalse);
- MakeEmptyTextListBoxL(iDlgEmptyLabelPrimResource ,iDlgEmptyLabelSecResource);
- }
- else
- {
- ShowFindBox(ETrue);
- }
- UpdateMskL();
- }
- }
- }
-
-// -----------------------------------------------------------------------------
-// CLmkSelectorDialog::OkToExitL
-// -----------------------------------------------------------------------------
-//
-TBool CLmkSelectorDialog::OkToExitL( TInt aButtonId )
- {
- if (!ListBox())
- {
- return EFalse;
- }
-
- if (NumberOfItems() <= 0 && aButtonId == EAknSoftkeyOk)
- {
- return EFalse;
- }
- TBool b = CAknSelectionListDialog::OkToExitL( aButtonId );
- if ( b && iNavigationObserver )
- {
- iNavigationObserver->HandleClosingEventL();
- }
- iExited = b;
- return b;
- }
-// ----------------------------------------------------
-// CLmkSelectorDialog::KeyEventForNavigationL
-// ----------------------------------------------------
-//
-TKeyResponse CLmkSelectorDialog::KeyEventForNavigationL(
- const TKeyEvent& aKeyEvent,
- TEventCode aType )
- {
- if ( iNavigationObserver && ( aType == EEventKey ) &&
- ( aKeyEvent.iCode == EKeyLeftArrow ||
- aKeyEvent.iCode == EKeyRightArrow ) )
- {
- return iNavigationObserver->HandleNavigationEventL( aKeyEvent );
- }
- return EKeyWasNotConsumed;
- }
-
-// ----------------------------------------------------
-// CLmkSelectorDialog::FindBox()
-// ----------------------------------------------------
-//
-CAknSearchField* CLmkSelectorDialog::FindBox() const
- {
- return CAknSelectionListDialog::FindBox();
- }
-
-// ----------------------------------------------------
-// CLmkSelectorDialog::ShowFindBox()
-// ----------------------------------------------------
-//
-void CLmkSelectorDialog::ShowFindBox(TBool aVisible)
- {
-
- CEikListBox* iListBox = ListBox();
- CAknSearchField* iSearchBox = FindBox();
- const TRect rect(Rect());
- if (iSearchBox)
- {
- iSearchBox->SetFocus(aVisible);
- iSearchBox->MakeVisible(aVisible);
-#ifdef RD_SCALABLE_UI_V2
- CAknFilteredTextListBoxModel* model =
- static_cast<CAknFilteredTextListBoxModel*> ( iListBox->Model() );
-
- iFilter = model->Filter();
- iSearchBox->SetObserver(this);
-#endif// RD_SCALABLE_UI_V2
- static_cast<CAknColumnListBoxView*>
- (iListBox->View())->SetFindEmptyListState(aVisible);
-
- if (iListBox && iSearchBox)
- {
- AknLayoutUtils::LayoutControl(iListBox, rect,
- AKN_LAYOUT_WINDOW_list_gen_pane(1));
- AknLayoutUtils::LayoutControl(iSearchBox, rect,
- AKN_LAYOUT_WINDOW_find_pane);
- if (iSearchBox->IsVisible() && iListBox->IsVisible())
- {
- // The correct line position to use is 2, which corresponds
- // EABColumn in Avkon (not a public enumeration,
- // hence hard-coding used here)
- const TInt KSeparatorLinePos = 2;
- iSearchBox->SetLinePos(KSeparatorLinePos);
- }
- }
- else if (iListBox)
- {
- AknLayoutUtils::LayoutControl(iListBox, rect,
- AKN_LAYOUT_WINDOW_list_gen_pane(0));
- }
- }
-
- if ( !aVisible )
- {
- iListBox->SetRect(rect);
- iListBox->DrawDeferred();
- }
- }
-// ----------------------------------------------------
-// CLmkSelectorDialog::MakeEmptyTextListBoxL
-// ----------------------------------------------------
-//
-void CLmkSelectorDialog::MakeEmptyTextListBoxL( TInt aResourcePrimText,TInt aResourceSecText, TBool aRequestFromFindBox ) const
- {
- if (aRequestFromFindBox)
- {
- HBufC* text1 = StringLoader::LoadLC( R_LMK_EMPTY_NO_MATCH, iCoeEnv );
- TPtr ptr1 = text1->Des();
- ListBox()->View()->SetListEmptyTextL( ptr1 );
- CleanupStack::PopAndDestroy(text1);
- }
- else if (aResourcePrimText && aResourceSecText)
- {
- _LIT(KNChar,"\n");
- HBufC* text1 = StringLoader::LoadLC( aResourcePrimText, iCoeEnv );
- HBufC* text2 = StringLoader::LoadLC( aResourceSecText, iCoeEnv );
- TPtr ptr1 = text1->Des();
- TPtr ptr2 = text2->Des();
-
- HBufC* buffer = HBufC::NewLC(text1->Length() + text2->Length() + 2);
- TPtr textFromResourceFile = buffer->Des();
- textFromResourceFile.Copy(ptr1);
- textFromResourceFile.Append(KNChar);
- textFromResourceFile.Append(ptr2);
-
- ListBox()->View()->SetListEmptyTextL( textFromResourceFile );
- CleanupStack::PopAndDestroy(3);//buffer,text2,text1
- }
- }
-
-// -----------------------------------------------------------------------------
-// CLmkSelectorDialog::HandleResourceChange()
-// -----------------------------------------------------------------------------
-//
-void CLmkSelectorDialog::HandleResourceChange (TInt aType)
- {
- if(aType==KEikDynamicLayoutVariantSwitch)
- {
- CAknSelectionListDialog::HandleResourceChange(aType);
- if (iMemento)
- {
- CLmkLmItemListMemento* memento =
- static_cast<CLmkLmItemListMemento*>(iMemento);
- if(memento->IsModelAvailable())
- {
- if(ListBox()->Model()->NumberOfItems()== 0 && FindBox()->TextLength() <= 0 )
- {
- ShowFindBox(EFalse);
- }
- }
- }
- }
- else if (aType == KAknsMessageSkinChange )
- {
- CAknSelectionListDialog::HandleResourceChange(aType);
- }
- }
-
-
-// -----------------------------------------------------------------------------
-// CLmkSelectorDialog::UpdateMskL()
-// -----------------------------------------------------------------------------
-//
-void CLmkSelectorDialog::UpdateMskL()
- {
- CEikButtonGroupContainer* cba = CEikButtonGroupContainer::Current();
- if (ListBox()->Model()->NumberOfItems()== 0)
- {
- cba->MakeCommandVisible(EAknSoftkeyOk, EFalse);
- cba->MakeCommandVisibleByPosition(CEikButtonGroupContainer::EMiddleSoftkeyPosition,EFalse);
- }
- else
- {
- cba->SetCommandSetL(iCbaResourceId);
- cba->MakeCommandVisible(EAknSoftkeyOk, ETrue);
- cba->MakeCommandVisibleByPosition(CEikButtonGroupContainer::EMiddleSoftkeyPosition,ETrue);
- }
- cba->DrawDeferred();
- }
-// -----------------------------------------------------------------------------
-// CLmkSelectorDialog::PrepareLC()
-// -----------------------------------------------------------------------------
-//
-void CLmkSelectorDialog::PrepareLC(TInt aDlgResourceId)
- {
- CAknSelectionListDialog::PrepareLC(aDlgResourceId);
- SetCbaResourceAndCommandId(aDlgResourceId);
- }
-
-// -----------------------------------------------------------------------------
-// CLmkSelectorDialog::SetCbaResourceAndCommandId()
-// -----------------------------------------------------------------------------
-//
-void CLmkSelectorDialog::SetCbaResourceAndCommandId(TInt aaDlgResourceId)
- {
- switch (aaDlgResourceId)
- {
- case R_LMK_SELECTOR_OK_BACK_DLG:
- case R_LMK_SELECTOR_OK_BACK_MULTI_DLG:
- {
- iCbaResourceId = R_AVKON_SOFTKEYS_BACK;
- iMskCmdId = EAknSoftkeyOk;
- break;
- }
- case R_LMK_CATEGORY_SELECTOR_OK_CANCEL_MULTI_DLG:
- {
- iCbaResourceId = R_AVKON_SOFTKEYS_CANCEL;
- iMskCmdId = EAknSoftkeyDone;
- break;
- }
- case R_LMK_SELECTOR_OPEN_CANCEL_DLG:
- {
- iCbaResourceId = R_AVKON_SOFTKEYS_CANCEL;
- iMskCmdId = EAknSoftkeyOk;
- break;
- }
- case R_LMK_SELECTOR_OK_CANCEL_DLG:
- case R_LMK_SELECTOR_OK_CANCEL_MULTI_DLG:
- iCbaResourceId = R_AVKON_SOFTKEYS_CANCEL;
- iMskCmdId = EAknSoftkeyOk;
- default:
- break;
- }
- }
-
-// -----------------------------------------------------------------------------
-// CLmkSelectorDialog::SetDlgEmptyResource()
-// -----------------------------------------------------------------------------
-//
-void CLmkSelectorDialog::SetDlgEmptyResource(TInt aEmptyPrimLabel ,TInt aEmptySecLabel)
- {
- iDlgEmptyLabelPrimResource = aEmptyPrimLabel;
- iDlgEmptyLabelSecResource = aEmptySecLabel;
- }
-
-// -----------------------------------------------------------------------------
-// CLmkSelectorDialog::EnableLeftSoftKey()
-// -----------------------------------------------------------------------------
-//
-void CLmkSelectorDialog::EnableLeftSoftKey(TBool aEnable)
- {
- CEikButtonGroupContainer &pButtonContainer = ButtonGroupContainer();
- TInt id = pButtonContainer.ButtonGroup()->CommandId(0);
- pButtonContainer.MakeCommandVisible(id,aEnable);
- }
-
-#ifdef RD_SCALABLE_UI_V2
-// -----------------------------------------------------------------------------
-// CLmkSelectorDialog::HandleControlEventL()
-// -----------------------------------------------------------------------------
-//
-void CLmkSelectorDialog::HandleControlEventL( CCoeControl* aControl,TCoeEvent aEventType )
- {
- //Update the listbox as per the search criteria
- if (!iListProvider)
- {
- if( iFilter )
- {
- iFilter->HandleControlEventL(aControl, aEventType);
- UpdateMskL();
- }
- return;
- }
-
- CEikButtonGroupContainer &buttonContainer = ButtonGroupContainer();
- //Update the msk depending upon the search results while using the virtual keyboard.
- if( aEventType == EEventStateChanged)
- {
- if ( aControl == FindBox() )
- {
- if(FindBox()->IsVisible())
- {
- if( NumberOfItems() == 0 )
- {
- buttonContainer.MakeCommandVisible(EAknSoftkeyOk, EFalse);
- }
- else
- {
- buttonContainer.MakeCommandVisible(EAknSoftkeyOk, ETrue);
- }
- UpdateMskL();
-
- // Fetch filter from search field
- TInt searchTextLength = FindBox()->TextLength();
- HBufC* filterBuf = HBufC::NewLC(searchTextLength+1);
- TPtr filter = filterBuf->Des();
- FindBox()->GetSearchText(filter);
-
- // If filter has changed repopulate list box. (It is necessary to check
- // if filter has changed since each filter change generates several
- // EEventStateChanged events for find box)
-
- if (iListProvider)
- {
- filter.Append(KWildCard);
- if ( iListProvider->StartSearchingLandmarksL(filter,EFalse) == EFalse)
- {
- //Update the listbox as per the search criteria
- if( iFilter )
- {
- iFilter->HandleControlEventL(aControl, aEventType);
- }
- }
- }
- CleanupStack::PopAndDestroy(filterBuf);
- }
- }
- }
- }
-#endif //RD_SCALABLE_UI_V2
-// End of File