--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarksui/uicontrols/src/CLmkMultiSelectorDialog.cpp Tue Feb 02 00:16:03 2010 +0200
@@ -0,0 +1,388 @@
+/*
+* 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 -
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <featmgr.h>
+#include <sendnorm.rsg> // R_SENDUI_MENU
+#include <aknsfld.h>
+#include <StringLoader.h>
+#include <lmkui.rsg>
+#include <lmkerrors.h>
+
+#include "CLmkMultiSelectorDialog.h"
+#include "MLmkDlgMenuObserver.h"
+#include "MLmkNavigationObserver.h"
+#include "LmkConsts.h"
+#include "landmarks.hrh"
+#include "CLmkSender.h"
+
+
+// CONSTANTS
+/// Unnamed namespace for local definitions
+namespace {
+
+#if defined(_DEBUG)
+
+_LIT( KPanicMsg, "CLmkMultiSelectorDialog" );
+
+void Panic( TPanicCode aReason )
+ {
+ User::Panic( KPanicMsg, aReason );
+ }
+#endif
+} // namespace
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CLmkMultiSelectorDialog::CLmkMultiSelectorDialog
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CLmkMultiSelectorDialog::CLmkMultiSelectorDialog(
+ TInt& aOpenedItemIndex,
+ CArrayFix<TInt>* aSelectionIndexArray,
+ MDesCArray* aLbModel,
+ TInt aMenuBarResourceId,
+ TInt aOkOptionsMenuResourceId,
+ MEikCommandObserver* aCmdObserver,
+ MLmkDlgMenuObserver* aMenuObserver,
+ MLmkListMemento* aMemento )
+ : CLmkSelectorDialog( aOpenedItemIndex, aLbModel, aCmdObserver,aMemento ),
+ iMenuBarResourceId( aMenuBarResourceId ),
+ iOkOptionsMenuResourceId( aOkOptionsMenuResourceId ),
+ iSendUiMenuPaneResourceId( KZeroResourceId ),
+ iSelectionIndexArray( aSelectionIndexArray ),
+ iMenuObserver( aMenuObserver )
+ {
+ iExited = EFalse;
+ iIsToClearSelection = EFalse;
+ }
+
+// -----------------------------------------------------------------------------
+// CLmkMultiSelectorDialog::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CLmkMultiSelectorDialog* CLmkMultiSelectorDialog::NewL(
+ TInt& aOpenedItemIndex,
+ CArrayFix<TInt>* aSelectionIndexArray,
+ MDesCArray* aLbModel,
+ TInt aMenuBarResourceId,
+ TInt aOkOptionsMenuResourceId,
+ MEikCommandObserver* aCmdObserver,
+ MLmkDlgMenuObserver* aMenuObserver,
+ MLmkListMemento* aMemento )
+ {
+ CLmkMultiSelectorDialog* self =
+ new( ELeave ) CLmkMultiSelectorDialog( aOpenedItemIndex,
+ aSelectionIndexArray,
+ aLbModel,
+ aMenuBarResourceId,
+ aOkOptionsMenuResourceId,
+ aCmdObserver,
+ aMenuObserver,
+ aMemento );
+
+ CleanupStack::PushL( self );
+ self->ConstructL( aMenuBarResourceId );
+ CleanupStack::Pop();
+
+ return self;
+ }
+
+// ----------------------------------------------------
+// CLmkMultiSelectorDialog::ConstructL
+// ----------------------------------------------------
+//
+void CLmkMultiSelectorDialog::ConstructL(TInt aMenuBarResourceId)
+ {
+ CAknSelectionListDialog::ConstructL( aMenuBarResourceId );
+ }
+
+// ----------------------------------------------------
+// CLmkMultiSelectorDialog::~CLmkMultiSelectorDialog
+// ----------------------------------------------------
+//
+CLmkMultiSelectorDialog::~CLmkMultiSelectorDialog()
+ {
+ }
+
+// ----------------------------------------------------
+// CLmkMultiSelectorDialog::SetupSendMenu
+// ----------------------------------------------------
+//
+void CLmkMultiSelectorDialog::SetupSendMenu(
+ CLmkSender& aSender,
+ TInt aSendUiMenuPaneResource,
+ TInt aMenuTextResource )
+ {
+ iLmkSender = &aSender;
+ iSendUiMenuPaneResourceId = aSendUiMenuPaneResource;
+ iMenuTextResourceId = aMenuTextResource;
+ }
+
+// ----------------------------------------------------
+// CLmkMultiSelectorDialog::HandleListBoxEventL
+// ----------------------------------------------------
+//
+void CLmkMultiSelectorDialog::HandleListBoxEventL(
+ CEikListBox* /*aListBox*/,
+ TListBoxEvent aEventType )
+ {
+ switch( aEventType )
+ {
+ case EEventEnterKeyPressed:
+ case EEventItemDoubleClicked:
+ {
+ // Do nothing -- offerkeyevent handles this
+ }
+ break;
+ #ifdef RD_SCALABLE_UI_V2
+ case EEventItemClicked:
+ {
+ UpdateMskL();
+ break;
+ }
+ #endif//RD_SCALABLE_UI_V2
+ default:
+ {
+ break;
+ }
+ };
+ }
+
+
+// ----------------------------------------------------
+// CLmkMultiSelectorDialog::SelectionListProcessCommandL
+// ----------------------------------------------------
+//
+void CLmkMultiSelectorDialog::SelectionListProcessCommandL( TInt aCommand )
+ {
+ AknSelectionService::HandleMarkableListProcessCommandL( aCommand,
+ ListBox() );
+ }
+
+// -----------------------------------------------------------------------------
+// CLmkMultiSelectorDialog::OfferKeyEventL
+// ?implementation_description
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TKeyResponse CLmkMultiSelectorDialog::OfferKeyEventL(
+ const TKeyEvent& aKeyEvent,
+ TEventCode aType )
+ {
+ // Do not process navigation handling till UI gets from engine
+ if (!ListBox())
+ {
+ return EKeyWasConsumed;
+ }
+ if (aType == EEventKey &&
+ (aKeyEvent.iCode == EKeyOK || aKeyEvent.iCode == EKeyEnter || aKeyEvent.iScanCode == EStdKeyEnter) )
+ {
+ ListBox()->View()->ToggleItemL(ListBox()->CurrentItemIndex());
+ return EKeyWasConsumed;
+ }
+ if (aKeyEvent.iRepeats == 0)
+ {
+ if (KeyEventForNavigationL(aKeyEvent, aType) == EKeyWasConsumed)
+ {
+ iIsToClearSelection = ETrue;
+ TryExitL(EAknSoftkeyOk);
+ return EKeyWasConsumed;
+ }
+ CAknSearchField* findBox = FindBox();
+ if (findBox && !(findBox->IsVisible()))
+ {
+ return EKeyWasConsumed;
+ }
+ }
+
+ TKeyResponse keyResponce;
+ keyResponce = CAknSelectionListDialog::OfferKeyEventL(aKeyEvent, aType);
+ //CEikButtonGroupContainer &buttonContainer = *(CEikButtonGroupContainer::Current());//ButtonGroupContainer();
+ if(!iExited)
+ {
+ UpdateMskL();
+ }
+ return keyResponce;
+ }
+
+// ----------------------------------------------------
+// CLmkMultiSelectorDialog::PreLayoutDynInitL
+// ----------------------------------------------------
+//
+void CLmkMultiSelectorDialog::PreLayoutDynInitL()
+ {
+ CLmkSelectorDialog::PreLayoutDynInitL();
+ __ASSERT_DEBUG( iSelectionIndexArray, Panic( KLmkPanicNullMember ) );
+ ListBox()->SetSelectionIndexesL( iSelectionIndexArray );
+ }
+// ----------------------------------------------------
+// CLmkMultiSelectorDialog::PostLayoutDynInitL
+// ----------------------------------------------------
+
+void CLmkMultiSelectorDialog::PostLayoutDynInitL()
+ {
+ CLmkSelectorDialog::PostLayoutDynInitL();
+ UpdateMskL();
+
+ }
+// -----------------------------------------------------------------------------
+// CLmkMultiSelectorDialog::OkToExitL
+// ?implementation_description
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TBool CLmkMultiSelectorDialog::OkToExitL( TInt aButtonId )
+ {
+ TBool b = CAknSelectionListDialog::OkToExitL( aButtonId );
+ if ( iSelectionIndexArray )
+ {
+ const CArrayFix<TInt>* array = ListBox()->SelectionIndexes();
+ if ( FindBox() )
+ {
+ CAknFilteredTextListBoxModel* model =
+ static_cast<CAknFilteredTextListBoxModel*>( ListBox()->Model() );
+ model->Filter()->UpdateSelectionIndexesL();
+ array = model->Filter()->SelectionIndexes();
+ }
+ TInt numberOfItems( array->Count() );
+ iSelectionIndexArray->Reset();
+ for ( TInt i( 0 ); i < numberOfItems; ++i )
+ {
+ iSelectionIndexArray->AppendL( array->At( i ) );
+ }
+ }
+ if(iIsToClearSelection && iSelectionIndexArray)
+ {
+ iSelectionIndexArray->Reset();
+ }
+ if ( b && iNavigationObserver )
+ {
+ iNavigationObserver->HandleClosingEventL();
+ }
+
+ iExited = b;
+ return b;
+ }
+
+// ----------------------------------------------------
+// CLmkMultiSelectorDialog::DynInitMenuPaneL
+// ----------------------------------------------------
+//
+void CLmkMultiSelectorDialog::DynInitMenuPaneL(
+ TInt aResourceId,
+ CEikMenuPane* aMenuPane )
+ {
+ AknSelectionService::HandleMarkableListDynInitMenuPane( aResourceId,
+ aMenuPane, ListBox() );
+
+ if ( iMenuObserver )
+ {
+ iMenuObserver->DynInitDlgMenuPaneL( aResourceId, aMenuPane );
+ }
+
+ TInt visibleCount = ListBox()->Model()->NumberOfItems();
+
+ if ( aResourceId == iSendUiMenuPaneResourceId )
+ {
+ if ( iLmkSender )
+ {
+ // Send menu is handled by iLmkSender:
+ if ( FeatureManager::FeatureSupported( KFeatureIdLandmarksConverter ) )
+ {
+ aMenuPane->SetItemDimmed(ELmkCmdSendDummy, EFalse);
+ }
+ else
+ {
+ aMenuPane->SetItemDimmed(ELmkCmdSendDummy, ETrue);
+ }
+ }
+ }
+ else if ( aResourceId == R_SENDUI_MENU )
+ { // Dynamically created send ui menu
+ // Sender always exists if R_SENDUI_MENU exists:
+ __ASSERT_DEBUG( iLmkSender, Panic( KLmkPanicSenderNotExist ) );
+
+ if ( FeatureManager::FeatureSupported( KFeatureIdLandmarksConverter ) )
+ {
+ iLmkSender->DisplaySendCascadeMenuL( *aMenuPane );
+ }
+ }
+
+ CAknSelectionListDialog::DynInitMenuPaneL( aResourceId, aMenuPane );
+ }
+
+
+// ----------------------------------------------------
+// CLmkMultiSelectorDialog::UpdateMskL
+// ----------------------------------------------------
+//
+ void CLmkMultiSelectorDialog::UpdateMskL()
+ {
+
+ CEikButtonGroupContainer* cba = CEikButtonGroupContainer::Current();
+ HBufC* mskTxt = NULL;
+ if (ListBox()->Model()->NumberOfItems() > 0)
+ {
+ cba->MakeCommandVisibleByPosition(CEikButtonGroupContainer::EMiddleSoftkeyPosition,ETrue);
+ cba->MakeCommandVisible(EAknSoftkeyDone, ETrue);
+ cba->MakeCommandVisible(EAknSoftkeyOk, ETrue);
+ if(IsCurrentItemMarked())
+ {
+ mskTxt = StringLoader::LoadLC( R_LM_MSK_UNMARK, iEikonEnv );
+ cba->AddCommandToStackL(KMskCommandPos,EAknSoftkeyUnmark,mskTxt->Des());
+ CleanupStack::PopAndDestroy(mskTxt);
+
+ }
+ else
+ {
+ mskTxt = StringLoader::LoadLC( R_LM_MSK_MARK, iEikonEnv );
+ cba->AddCommandToStackL(KMskCommandPos,EAknSoftkeyMark,mskTxt->Des());
+ CleanupStack::PopAndDestroy(mskTxt);
+ }
+ }
+ else
+ {
+ cba->MakeCommandVisible(EAknSoftkeyDone, EFalse);
+ cba->MakeCommandVisible(EAknSoftkeyOk, EFalse);
+ cba->MakeCommandVisibleByPosition(CEikButtonGroupContainer::EMiddleSoftkeyPosition,EFalse);
+ }
+ cba->DrawDeferred();
+ }
+
+
+// ----------------------------------------------------
+// CLmkMultiSelectorDialog::IsCurrentItemMarked
+// ----------------------------------------------------
+//
+TBool CLmkMultiSelectorDialog::IsCurrentItemMarked()
+ {
+ TBool ret(EFalse);
+ TInt itemIndex = ListBox()->View()->CurrentItemIndex();
+ if (itemIndex != KErrNotFound)
+ {
+ ret = ListBox()->View()->ItemIsSelected(itemIndex);
+ }
+ return ret;
+ }
+// End of File