--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mpxplugins/viewplugins/views/commoncontainer/src/mpxcommoncontaineravkonimp.cpp Thu Dec 17 08:45:05 2009 +0200
@@ -0,0 +1,938 @@
+/*
+* Copyright (c) 2006 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: Implementation of common container for AVKON platform.
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <barsread.h>
+#include <stringloader.h>
+#include <akniconarray.h>
+#include <gulicon.h>
+#include <featmgr.h>
+#include <aknsfld.h>
+#include <aknutils.h>
+#include <aknlists.h>
+#include <aknconsts.h>
+#include <avkon.mbg>
+#include <eikclbd.h>
+#include <eikcmobs.h>
+#include <bautils.h>
+
+#include <data_caging_path_literals.hrh>
+#include <mpxcommoncontainer.rsg>
+#include <mpxlog.h>
+#include <mpxuser.h>
+
+#include "mpxcommonlistboxarraybase.h"
+#include "mpxcommoncontaineravkonimp.h"
+#include "mpxcommoncontainer.hrh"
+#include <mpxlbxextendedfeatures.h>
+
+// CONSTANTS
+const TInt KMPXFindboxTextLimit = 40;
+
+_LIT( KMPXCommonContainerRscPath, "mpxcommoncontainer.rsc" );
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// C++ constructor can NOT contain any code that might leave.
+// ---------------------------------------------------------------------------
+//
+CMPXCommonContainerAvkonImp::CMPXCommonContainerAvkonImp() :
+ iIsFindEnabled( ETrue ),
+ iIsMarkingEnabled( ETrue ),
+ iContainerActive( EFalse )
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CMPXCommonContainerAvkonImp::~CMPXCommonContainerAvkonImp()
+ {
+ MPX_FUNC( "CMPXCommonContainerAvkonImp::~CMPXCommonContainerAvkonImp" );
+
+ FeatureManager::UnInitializeLib();
+
+ if ( iResourceOffset )
+ {
+ iEikonEnv->DeleteResourceFile( iResourceOffset );
+ }
+
+ delete iListBox;
+ delete iFindBox;
+ delete iLbxExtFeat;
+ }
+
+// ---------------------------------------------------------------------------
+// Return Coe Control
+// ---------------------------------------------------------------------------
+//
+CCoeControl* CMPXCommonContainerAvkonImp::CoeControl()
+ {
+ MPX_FUNC( "CMPXCommonContainerAvkonImp::CoeControl" );
+ return this;
+ }
+
+// ---------------------------------------------------------------------------
+// Set View Container
+// ---------------------------------------------------------------------------
+//
+void CMPXCommonContainerAvkonImp::SetViewContainer(
+ MMPXViewContainer* aViewContainer )
+ {
+ MPX_FUNC( "CMPXCommonContainerAvkonImp::SetViewContainer" );
+ iViewContainer = aViewContainer;
+ }
+
+// ---------------------------------------------------------------------------
+// Set command observer for the container
+// ---------------------------------------------------------------------------
+//
+void CMPXCommonContainerAvkonImp::SetCommandObserver(
+ MEikCommandObserver* aCommandObserver )
+ {
+ MPX_FUNC( "CMPXCommonContainerAvkonImp::SetCommandObserver" );
+ iView = aCommandObserver;
+ }
+
+// ---------------------------------------------------------------------------
+// C++ constructor can NOT contain any code that might leave.
+// ---------------------------------------------------------------------------
+//
+void CMPXCommonContainerAvkonImp::SetListBoxObserver(
+ MEikListBoxObserver* aListBoxObserver )
+ {
+ MPX_FUNC( "CMPXCommonContainerAvkonImp::SetListBoxObserver" );
+ iListBoxObserver = aListBoxObserver;
+ }
+
+// ---------------------------------------------------------------------------
+// Set layout for all elements and set sizes for icons.
+// ---------------------------------------------------------------------------
+//
+void CMPXCommonContainerAvkonImp::UpdateLayout()
+ {
+ MPX_FUNC( "CMPXCommonContainerAvkonImp::UpdateLayout" );
+ }
+
+// -----------------------------------------------------------------------------
+// Returns a pointer to the listboxarray
+// -----------------------------------------------------------------------------
+//
+CMPXCommonListBoxArrayBase* CMPXCommonContainerAvkonImp::ListBoxArray() const
+ {
+ ASSERT( iListBoxArray );
+ return iListBoxArray;
+ }
+
+// -----------------------------------------------------------------------------
+// Sets listbox array
+// -----------------------------------------------------------------------------
+//
+void CMPXCommonContainerAvkonImp::SetListBoxArrayL(
+ CMPXCommonListBoxArrayBase* aListBoxArray )
+ {
+ iListBoxArray = aListBoxArray;
+ if ( iListBoxArray )
+ {
+ CTextListBoxModel* listboxModel = iListBox->Model();
+ listboxModel->SetItemTextArray( iListBoxArray );
+ listboxModel->SetOwnershipType( ELbmOwnsItemArray );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// Return number of listbox items shown in the current listbox.
+// -----------------------------------------------------------------------------
+//
+TInt CMPXCommonContainerAvkonImp::CurrentListItemCount() const
+ {
+ MPX_FUNC( "CMPXCommonContainerAvkonImp::CurrentListItemCount" );
+ ASSERT( iFindBoxFilterItems );
+ return iFindBoxFilterItems->FilteredNumberOfItems();
+ }
+
+// -----------------------------------------------------------------------------
+// Return total number of listbox items in the listbox.
+// -----------------------------------------------------------------------------
+//
+TInt CMPXCommonContainerAvkonImp::TotalListItemCount() const
+ {
+ MPX_FUNC( "CMPXCommonContainerAvkonImp::TotalListItemCount" );
+ ASSERT( iFindBoxFilterItems );
+ return iFindBoxFilterItems->NonFilteredNumberOfItems();
+ }
+
+// -----------------------------------------------------------------------------
+// Gets top listbox item index (relative to the original listbox).
+// -----------------------------------------------------------------------------
+//
+TInt CMPXCommonContainerAvkonImp::TopLbxItemIndex() const
+ {
+ MPX_FUNC( "CMPXCommonContainerAvkonImp::TopLbxItemIndex" );
+ ASSERT( iListBox );
+ ASSERT( iFindBoxFilterItems );
+ TInt topItem( iListBox->TopItemIndex() );
+
+ // Make sure there's at least one item in the listbox
+ if ( iFindBoxFilterItems->FilteredNumberOfItems() )
+ {
+ // Get the real listbox index
+ topItem = iFindBoxFilterItems->FilteredItemIndex( topItem );
+ }
+ return topItem;
+ }
+
+// -----------------------------------------------------------------------------
+// Gets bottom listbox item index (relative to the original listbox).
+// -----------------------------------------------------------------------------
+//
+TInt CMPXCommonContainerAvkonImp::BottomLbxItemIndex() const
+ {
+ MPX_FUNC( "CMPXCommonContainerAvkonImp::BottomLbxItemIndex" );
+ ASSERT( iListBox );
+ ASSERT( iFindBoxFilterItems );
+ TInt bottomItem( iListBox->BottomItemIndex() );
+
+ // Make sure there's at least one item in the listbox
+ if ( iFindBoxFilterItems->FilteredNumberOfItems() )
+ {
+ // Get the real listbox index
+ bottomItem = iFindBoxFilterItems->FilteredItemIndex( bottomItem );
+ }
+ return bottomItem;
+ }
+
+// -----------------------------------------------------------------------------
+// Gets current listbox item index (relative to the original listbox).
+// -----------------------------------------------------------------------------
+//
+TInt CMPXCommonContainerAvkonImp::CurrentLbxItemIndex() const
+ {
+ MPX_FUNC( "CMPXCommonContainerAvkonImp::CurrentLbxItemIndex" );
+ ASSERT( iListBox );
+ ASSERT( iFindBoxFilterItems );
+ TInt currentItem( iListBox->CurrentItemIndex() );
+
+ // Make sure there's at least one item in the listbox
+ if ( iFindBoxFilterItems->FilteredNumberOfItems() )
+ {
+ // Get the real listbox index
+ currentItem = iFindBoxFilterItems->FilteredItemIndex( currentItem );
+ }
+ return currentItem;
+ }
+
+// -----------------------------------------------------------------------------
+// Get current selected listbox items indices (relative to the original listbox)
+// -----------------------------------------------------------------------------
+//
+const CArrayFix<TInt>* CMPXCommonContainerAvkonImp::
+ CurrentSelectionIndicesL() const
+ {
+ MPX_FUNC( "CMPXCommonContainerAvkonImp::CurrentSelectionIndicesL" );
+ ASSERT( iListBox );
+ ASSERT( iFindBoxFilterItems );
+ const CArrayFix<TInt>* selectionArray( iListBox->SelectionIndexes() );
+
+ if ( iFindBoxFilterItems->FilteredNumberOfItems() )
+ {
+ // Get the real listbox indices
+ iFindBoxFilterItems->SelectionIndexes()->Reset();
+ iFindBoxFilterItems->UpdateSelectionIndexesL();
+ selectionArray = iFindBoxFilterItems->SelectionIndexes();
+ }
+ return selectionArray;
+ }
+
+// -----------------------------------------------------------------------------
+// Get current selected listbox items indices (relative to the original listbox)
+// -----------------------------------------------------------------------------
+//
+void CMPXCommonContainerAvkonImp::SetCurrentSelectionIndicesL(
+ CArrayFix<TInt>* aIndices ) const
+ {
+ MPX_FUNC( "CMPXCommonContainerAvkonImp::SetCurrentSelectionIndicesL" );
+ ASSERT( iListBox );
+ iListBox->SetSelectionIndexesL( aIndices ); // ownership not transfered
+ }
+
+// -----------------------------------------------------------------------------
+// Set top listbox item index.
+// -----------------------------------------------------------------------------
+//
+void CMPXCommonContainerAvkonImp::SetLbxTopItemIndex( TInt aIndex )
+ {
+ MPX_FUNC( "CMPXCommonContainerAvkonImp::SetLbxTopItemIndex" );
+ ASSERT( iListBox );
+ ASSERT( iFindBoxFilterItems );
+ TInt index( iFindBoxFilterItems->VisibleItemIndex( aIndex ) );
+ if ( index == KErrNotFound )
+ {
+ index = 0;
+ }
+ iListBox->SetTopItemIndex( index );
+ }
+
+// -----------------------------------------------------------------------------
+// Set current listbox item index.
+// -----------------------------------------------------------------------------
+//
+void CMPXCommonContainerAvkonImp::SetLbxCurrentItemIndex( TInt aIndex )
+ {
+ MPX_FUNC( "CMPXCommonContainerAvkonImp::SetLbxCurrentItemIndex" );
+ ASSERT( iListBox );
+ ASSERT( iFindBoxFilterItems );
+ TInt index( iFindBoxFilterItems->VisibleItemIndex( aIndex ) );
+ if ( index == KErrNotFound )
+ {
+ index = 0;
+ }
+ iListBox->SetCurrentItemIndex( index );
+ }
+
+// -----------------------------------------------------------------------------
+// Set current listbox item index and highlight it.
+// -----------------------------------------------------------------------------
+//
+void CMPXCommonContainerAvkonImp::SetLbxCurrentItemIndexAndDraw(
+ TInt aIndex )
+ {
+ MPX_FUNC( "CMPXCommonContainerAvkonImp::SetLbxCurrentItemIndexAndDraw" );
+ ASSERT( iListBox );
+ ASSERT( iFindBoxFilterItems );
+ TInt index( iFindBoxFilterItems->VisibleItemIndex( aIndex ) );
+ if ( index == KErrNotFound )
+ {
+ index = 0;
+ }
+ iListBox->SetCurrentItemIndexAndDraw( index );
+ }
+
+// -----------------------------------------------------------------------------
+// Clear listbox selection.
+// -----------------------------------------------------------------------------
+//
+void CMPXCommonContainerAvkonImp::ClearLbxSelection()
+ {
+ MPX_FUNC( "CMPXCommonContainerAvkonImp::ClearLbxSelection" );
+ ASSERT( iListBox );
+ ASSERT( iFindBoxFilterItems );
+ iListBox->ClearSelection();
+ iFindBoxFilterItems->SelectionIndexes()->Reset();
+ }
+
+// -----------------------------------------------------------------------------
+// Sets the text for an empty list box
+// -----------------------------------------------------------------------------
+//
+void CMPXCommonContainerAvkonImp::SetLbxEmptyTextL( const TDesC& aText )
+ {
+ ASSERT( iListBox );
+ iListBox->View()->SetListEmptyTextL( aText );
+ }
+
+// -----------------------------------------------------------------------------
+// Draws a list box item
+// -----------------------------------------------------------------------------
+//
+void CMPXCommonContainerAvkonImp::DrawLbxItem( TInt aIndex )
+ {
+ ASSERT( iListBox );
+ TInt topIndex( TopLbxItemIndex() );
+ TInt bottomIndex( BottomLbxItemIndex() );
+ if ( aIndex >= topIndex && aIndex <= bottomIndex )
+ {
+ iListBox->DrawItem( aIndex );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// Set Find box's focus.
+// -----------------------------------------------------------------------------
+//
+void CMPXCommonContainerAvkonImp::SetFindBoxFocus( TBool aFocus )
+ {
+ MPX_FUNC( "CMPXCommonContainerAvkonImp::SetFindBoxFocus" );
+ ASSERT( iFindBox );
+ if ( aFocus )
+ {
+ iFindBox->MakeVisible( ETrue );
+ }
+ iFindBox->SetFocus( aFocus );
+ }
+
+// -----------------------------------------------------------------------------
+// Handle listbox item addition.
+// -----------------------------------------------------------------------------
+//
+void CMPXCommonContainerAvkonImp::HandleLbxItemAdditionL()
+ {
+ MPX_FUNC( "CMPXCommonContainerAvkonImp::HandleLbxItemAdditionL" );
+ ASSERT( iListBox );
+ ASSERT( iFindBoxFilterItems );
+ iFindBoxFilterItems->HandleItemArrayChangeL();
+ iListBox->HandleItemAdditionL();
+ }
+
+// -----------------------------------------------------------------------------
+// Handle listbox item addition, preserving the current display index
+// -----------------------------------------------------------------------------
+//
+void CMPXCommonContainerAvkonImp::HandleLbxItemAdditionPreserveIndexL()
+ {
+ MPX_FUNC( "CMPXCommonContainerAvkonImp::HandleLbxItemAdditionPreserveIndexL" );
+ TInt currentItem( CurrentLbxItemIndex() );
+ TInt currentBottomIndex( BottomLbxItemIndex() );
+ TInt topIndex( CalculateTopIndex( currentBottomIndex ) );
+ HandleLbxItemAdditionL();
+ if ( currentItem > 0 )
+ {
+ // only redraw if the selected index is > 0, since
+ // HandleLbxItemAdditionL already redraws it and set index
+ // to 0
+ SetLbxTopItemIndex( topIndex );
+ SetLbxCurrentItemIndexAndDraw( currentItem );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// Handle listbox item removal.
+// -----------------------------------------------------------------------------
+//
+void CMPXCommonContainerAvkonImp::HandleLbxItemRemovalL()
+ {
+ MPX_FUNC( "CMPXCommonContainerAvkonImp::HandleLbxItemRemovalL" );
+ ASSERT( iListBox );
+ iListBox->HandleItemRemovalL();
+ }
+
+// -----------------------------------------------------------------------------
+// Show/hide find box.
+// -----------------------------------------------------------------------------
+//
+void CMPXCommonContainerAvkonImp::SetFindBoxVisibilityL( TBool aIsVisible )
+ {
+ MPX_FUNC( "CMPXCommonContainerAvkonImp::SetFindBoxVisibilityL" );
+ ASSERT( iListBox );
+ ASSERT( iFindBox );
+ if (aIsVisible != iFindBox->IsVisible())
+ {
+ iFindBox->MakeVisible( aIsVisible );
+ iFindBox->SetFocus( aIsVisible );
+ if ( !aIsVisible )
+ {
+ iFindBox->ResetL();
+ iFindBoxFilterItems->HandleOfferkeyEventL();
+ iListBox->SetFocus( ETrue );
+ }
+ SizeChanged();
+ DrawDeferred();
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// Determine find box visibility
+// -----------------------------------------------------------------------------
+//
+TBool CMPXCommonContainerAvkonImp::FindBoxVisibility()
+ {
+ MPX_FUNC( "CMPXCommonContainerAvkonImp::FindBoxVisibility" );
+ ASSERT( iFindBox );
+ return iFindBox->IsVisible();
+ }
+
+// -----------------------------------------------------------------------------
+// Restore the PopupCBA of find box
+// -----------------------------------------------------------------------------
+//
+void CMPXCommonContainerAvkonImp::RestoreFindBoxPopupCBA()
+ {
+ MPX_FUNC( "CMPXCommonContainerAvkonImp::RestoreFindBoxPopupCBA" );
+ ASSERT( iFindBox );
+ iFindBox->SetFocus( ETrue );
+ iFindBox->SetFocus( EFalse );
+ }
+
+// -----------------------------------------------------------------------------
+// Calculate the top index of the visible items
+// -----------------------------------------------------------------------------
+//
+TInt CMPXCommonContainerAvkonImp::CalculateTopIndex( TInt aBottomIndex )
+ {
+ MPX_FUNC( "CMPXCommonContainerAvkonImp::CalculateTopIndex" );
+ ASSERT( iListBox );
+ TInt numItems( iListBox->View()->NumberOfItemsThatFitInRect(
+ iListBox->View()->ViewRect() ) - 1 ); // to make it 0 based
+ return ( ( aBottomIndex > numItems ) ? aBottomIndex - numItems : 0 );
+ }
+
+// ---------------------------------------------------------------------------
+// Symbian 2nd phase constructor can leave.
+// ---------------------------------------------------------------------------
+//
+void CMPXCommonContainerAvkonImp::ConstructContainerL( TMPXCommonContainerCollectionType /*aCollectionType*/ )
+ {
+ MPX_FUNC( "CMPXCommonContainerAvkonImp::ConstructContainerL" );
+
+ CCoeEnv* coeEnv( iEikonEnv );
+ TParse parse;
+ parse.Set( KMPXCommonContainerRscPath, &KDC_APP_RESOURCE_DIR, NULL );
+ TFileName resourceFile( parse.FullName() );
+ User::LeaveIfError( MPXUser::CompleteWithDllPath( resourceFile ) );
+ BaflUtils::NearestLanguageFile( coeEnv->FsSession(), resourceFile );
+ iResourceOffset = coeEnv->AddResourceFileL( resourceFile );
+
+ CreateWindowL();
+
+ CreateListBoxL();
+
+ FeatureManager::InitializeLibL();
+
+ ConstructFindBoxL( ETrue );
+ }
+
+// ---------------------------------------------------------------------------
+// Enable/disable find box
+// ---------------------------------------------------------------------------
+//
+void CMPXCommonContainerAvkonImp::EnableFindBox( TBool aEnable )
+ {
+ MPX_FUNC( "CMPXCommonContainerAvkonImp::EnableFindBox" );
+ iIsFindEnabled = aEnable;
+ if ( !aEnable )
+ {
+ TRAP_IGNORE(SetFindBoxVisibilityL( EFalse ));
+ };
+ }
+
+// ---------------------------------------------------------------------------
+// Enable/disable marking
+// ---------------------------------------------------------------------------
+//
+void CMPXCommonContainerAvkonImp::EnableMarking( TBool aEnable )
+ {
+ MPX_FUNC( "CMPXCommonContainerAvkonImp::EnableMarking" );
+ iIsMarkingEnabled = aEnable;
+ }
+
+// ---------------------------------------------------------------------------
+// Custom handling of commands for markable lists.
+// ---------------------------------------------------------------------------
+//
+void CMPXCommonContainerAvkonImp::HandleMarkableListProcessCommandL( TInt aCommand )
+ {
+ MPX_FUNC( "CMPXCommonContainerAvkonImp::HandleMarkableListProcessCommandL" );
+ ASSERT( iListBox );
+
+ // Handle in helper function
+ AknSelectionService::HandleMarkableListProcessCommandL(
+ aCommand,
+ iListBox );
+ }
+
+// ---------------------------------------------------------------------------
+// Custom handling of menu pane for markable lists
+// ---------------------------------------------------------------------------
+//
+void CMPXCommonContainerAvkonImp::HandleMarkableListDynInitMenuPane(
+ TInt aResourceId,
+ CEikMenuPane* aMenuPane )
+ {
+ MPX_FUNC( "CMPXCommonContainerAvkonImp::HandleMarkableListDynInitMenuPane" );
+ ASSERT( iListBox );
+
+ // Handle in helper function
+ AknSelectionService::HandleMarkableListDynInitMenuPane(
+ aResourceId,
+ aMenuPane,
+ iListBox );
+ }
+
+// ---------------------------------------------------------------------------
+// Handles key events.
+// ---------------------------------------------------------------------------
+//
+TKeyResponse CMPXCommonContainerAvkonImp::HandleKeyEventL(
+ const TKeyEvent& aKeyEvent,
+ TEventCode aType )
+ {
+ ASSERT( iListBox );
+ ASSERT( iFindBox );
+ MPX_DEBUG5( "CMPXCommonContainerAvkonImp::HandleKeyEventL(iCode=%d, iScanCode=%d, iModifiers=0x%x, aType=%d)",
+ aKeyEvent.iCode, aKeyEvent.iScanCode, aKeyEvent.iModifiers, aType );
+
+ TKeyResponse response( EKeyWasNotConsumed );
+
+ // Pass the key event to the common container components
+ if ( iIsFindEnabled &&
+ ( ( iFindBox->IsVisible() ) ||
+ ( aKeyEvent.iCode != EKeyBackspace ) ) )
+ {
+ TBool needRefresh( EFalse );
+
+ if ( aKeyEvent.iCode == EKeyBackspace &&
+ iFindBox->TextLength() == 0 )
+ {
+ // dismiss find box
+ SetFindBoxVisibilityL( EFalse );
+ response = EKeyWasConsumed;
+ }
+ else
+ {
+ // Offers the key event to find box.
+ response = AknFind::HandleFindOfferKeyEventL(
+ aKeyEvent, aType, this, iListBox, iFindBox, iIsFindPopup,
+ needRefresh );
+ }
+
+ if ( response == EKeyWasConsumed )
+ {
+ if ( needRefresh )
+ {
+ SizeChanged();
+ DrawNow();
+ }
+ // If it's consumed by the findbox, there's no need to check
+ // with listbox.
+ return response;
+ }
+ }
+ if ( ( aKeyEvent.iCode != EKeyLeftArrow ) &&
+ ( aKeyEvent.iCode != EKeyRightArrow ) &&
+ ( aKeyEvent.iCode != EKeyBackspace ) )
+ {
+ // now it's iListBox's job to process the key event
+ if ( !iIsMarkingEnabled &&
+ ( aKeyEvent.iCode == EKeyUpArrow ||
+ aKeyEvent.iCode == EKeyDownArrow ||
+ aKeyEvent.iCode == EKeyOK ) )
+ {
+ // if marking is not enabled, check if this is marking command
+ if ( aKeyEvent.iModifiers & EModifierLeftShift ||
+ aKeyEvent.iModifiers & EModifierRightShift ||
+ aKeyEvent.iModifiers & EModifierShift )
+ {
+ // strip the marking command, and let list box handle it
+ TKeyEvent modKeyEvent( aKeyEvent );
+ modKeyEvent.iModifiers &= ~EModifierLeftShift;
+ modKeyEvent.iModifiers &= ~EModifierRightShift;
+ modKeyEvent.iModifiers &= ~EModifierShift;
+ response = iLbxExtFeat->HandleLbxKeyEventL( modKeyEvent, aType );
+ }
+ else
+ {
+ // not marking command
+ response = iLbxExtFeat->HandleLbxKeyEventL( aKeyEvent, aType );
+ }
+ }
+ else // marking is enabled
+ {
+ response = iLbxExtFeat->HandleLbxKeyEventL( aKeyEvent, aType );
+
+#ifdef __ENABLE_MSK
+ // check for marking command
+ if ( ( aKeyEvent.iModifiers & EModifierLeftShift ||
+ aKeyEvent.iModifiers & EModifierRightShift ||
+ aKeyEvent.iModifiers & EModifierShift ||
+ aKeyEvent.iScanCode == EStdKeyDevice3 ||
+ iIsFindPopup ) && aType == EEventKeyUp )
+ {
+ // Update the middle softkey for marking commands
+ iView->ProcessCommandL( EMPXCmdCommonUpdateMiddleSoftKey );
+ }
+#endif // __ENABLE_MSK
+ }
+ }
+
+ if ( response == EKeyWasNotConsumed &&
+ aType == EEventKey &&
+ aKeyEvent.iCode == EKeyBackspace && iView )
+ {
+ iView->ProcessCommandL( EMPXCmdCommonDelete );
+ response = EKeyWasConsumed;
+ }
+
+ return response;
+ }
+
+// ---------------------------------------------------------------------------
+// Activate container
+// ---------------------------------------------------------------------------
+//
+void CMPXCommonContainerAvkonImp::ActivateContainerL()
+ {
+ // Activate the container via Coe Control
+ CCoeControl::ActivateL();
+ iContainerActive = ETrue;
+ }
+
+// ---------------------------------------------------------------------------
+// Deactivate container
+// ---------------------------------------------------------------------------
+//
+void CMPXCommonContainerAvkonImp::DeactivateContainerL()
+ {
+ iContainerActive = EFalse;
+ }
+
+// ---------------------------------------------------------------------------
+// Return container state
+// ---------------------------------------------------------------------------
+//
+TBool CMPXCommonContainerAvkonImp::IsContainerActive()
+ {
+ return iContainerActive;
+ }
+
+// ---------------------------------------------------------------------------
+// From MMPXCommonListBoxArrayObserver
+// Handle listbox array events.
+// ---------------------------------------------------------------------------
+//
+void CMPXCommonContainerAvkonImp::HandleListBoxArrayEventL(
+ MMPXCommonListBoxArrayObserver::TMPXCommonListBoxArrayEvents aEvent )
+ {
+ MPX_FUNC( "CMPXCommonContainerAvkonImp::HandleListBoxArrayEventL" );
+ if ( aEvent == MMPXCommonListBoxArrayObserver::EMPXCommonListBoxArrayEventIconArrayChange )
+ {
+ delete iIconArray;
+ iIconArray = NULL;
+ CreateIconArrayL();
+ static_cast<CEikColumnListBox*>( iListBox )->ItemDrawer()->ColumnData()->
+ SetIconArray( iIconArray );
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// From CCoeControl
+// Responds to changes to the size and position of the contents of this
+// control.
+// ---------------------------------------------------------------------------
+//
+void CMPXCommonContainerAvkonImp::SizeChanged()
+ {
+ MPX_FUNC( "CMPXCommonContainerAvkonImp::SizeChanged" );
+
+ if ( iIsFindPopup )
+ {
+ AknFind::HandlePopupFindSizeChanged(
+ this,
+ static_cast<CAknColumnListBox*>( iListBox ),
+ iFindBox );
+ }
+ else
+ {
+ AknFind::HandleFixedFindSizeChanged(
+ this,
+ static_cast<CAknColumnListBox*>( iListBox ),
+ iFindBox );
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// From CCoeControl
+// Gets the number of controls contained in a compound control.
+// ---------------------------------------------------------------------------
+//
+TInt CMPXCommonContainerAvkonImp::CountComponentControls() const
+ {
+ MPX_FUNC( "CMPXCommonContainerAvkonImp::CountComponentControls" );
+ ASSERT( iListBox );
+ ASSERT( iFindBox );
+ return 2; // number of components
+ }
+
+// ---------------------------------------------------------------------------
+// From CCoeControl
+// Gets an indexed component of a compound control.
+// ---------------------------------------------------------------------------
+//
+CCoeControl* CMPXCommonContainerAvkonImp::ComponentControl( TInt aIndex ) const
+ {
+ MPX_FUNC( "CMPXCommonContainerAvkonImp::ComponentControl" );
+ CCoeControl* control( NULL );
+ switch ( aIndex )
+ {
+ case 0:
+ {
+ control = iListBox; // Returns the pointer to listbox object.
+ break;
+ }
+ case 1:
+ {
+ control = iFindBox; // Returns the pointer to findbox object.
+ break;
+ }
+ default:
+ {
+ MPX_DEBUG1( "CMPXCommonContainerAvkonImp::ComponentControl out of range" );
+ ASSERT( 0 );
+ break;
+ }
+ }
+ return control;
+ }
+
+// ---------------------------------------------------------------------------
+// From CCoeControl
+// Handles key events.
+// ---------------------------------------------------------------------------
+//
+TKeyResponse CMPXCommonContainerAvkonImp::OfferKeyEventL(
+ const TKeyEvent& aKeyEvent,
+ TEventCode aType )
+ {
+ ASSERT( iViewContainer );
+ MPX_DEBUG5( "CMPXCommonContainerAvkonImp::OfferKeyEventL(iCode=%d, iScanCode=%d, iModifiers=0x%x, aType=%d)",
+ aKeyEvent.iCode, aKeyEvent.iScanCode, aKeyEvent.iModifiers, aType );
+
+ // Let the view container handle the key event.
+ return iViewContainer->HandleKeyEventL( aKeyEvent, aType );
+ }
+
+// ---------------------------------------------------------------------------
+// Gets the control's help context.
+// ---------------------------------------------------------------------------
+//
+void CMPXCommonContainerAvkonImp::GetHelpContext(
+ TCoeHelpContext& aContext ) const
+ {
+ ASSERT( iViewContainer );
+ MPX_FUNC( "CMPXCommonContainerAvkonImp::GetHelpContext" );
+ // Let the view container handle the help context retrieval
+ iViewContainer->HandleHelpContext( aContext );
+ }
+
+// ---------------------------------------------------------------------------
+// From CCoeControl
+// Handles a change to the control's resources.
+// ---------------------------------------------------------------------------
+//
+void CMPXCommonContainerAvkonImp::HandleResourceChange( TInt aType )
+ {
+ MPX_FUNC( "CMPXCommonContainerAvkonImp::HandleResourceChange" );
+ CCoeControl::HandleResourceChange( aType );
+
+ TRAP_IGNORE(
+ if ( aType == KAknsMessageSkinChange )
+ {
+ delete iIconArray;
+ iIconArray = NULL;
+ CreateIconArrayL();
+ static_cast<CEikColumnListBox*>( iListBox )->ItemDrawer()->ColumnData()->
+ SetIconArray( iIconArray );
+ }
+ else if ( aType == KEikDynamicLayoutVariantSwitch && iView )
+ {
+ iView->ProcessCommandL( EMPXCmdCommonResourceChange );
+ } );
+ }
+
+// ---------------------------------------------------------------------------
+// Create list box
+// ---------------------------------------------------------------------------
+//
+void CMPXCommonContainerAvkonImp::CreateListBoxL()
+ {
+ MPX_FUNC( "CMPXCommonContainerAvkonImp::CreateListBox" );
+
+ iListBox = new ( ELeave ) CAknSingleGraphicStyleListBox();
+ iListBox->SetContainerWindowL( *this );
+ iListBox->CreateScrollBarFrameL( ETrue );
+ iListBox->ScrollBarFrame()->SetScrollBarVisibilityL(
+ CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto );
+
+ TResourceReader reader;
+ iCoeEnv->CreateResourceReaderLC( reader, R_MPX_COMMON_CONTAINER_LBX );
+ // construct's iListBox from resource file
+ iListBox->ConstructFromResourceL( reader );
+ CleanupStack::PopAndDestroy(); // reader
+
+ // Enable Marquee
+ CEikColumnListBox* eikListbox = static_cast<CEikColumnListBox*>( iListBox );
+ eikListbox->EnableExtendedDrawingL();
+ eikListbox->ItemDrawer()->ColumnData()->EnableMarqueeL( ETrue );
+ eikListbox->ItemDrawer()->ColumnData()->SetMarqueeParams(
+ KMaxTInt, 6, 1000000); // Magic: loop forever, other params as default
+
+ iListBox->SetListBoxObserver( iListBoxObserver );
+
+ // Speed Scrolling
+ delete iLbxExtFeat;
+ iLbxExtFeat = NULL;
+ iLbxExtFeat = CMPXLbxExtendedFeatures::NewL( iListBox, ETrue );
+ iLbxExtFeat->EnableSpeedScrollL( ETrue );
+
+ }
+
+// -----------------------------------------------------------------------------
+// Constructs Find box.
+// -----------------------------------------------------------------------------
+//
+void CMPXCommonContainerAvkonImp::ConstructFindBoxL( TBool aIsFindPopup )
+ {
+ MPX_FUNC( "CMPXCommonContainerAvkonImp::ConstructFindBoxL" );
+ CAknFilteredTextListBoxModel* lbxModel =
+ static_cast<CAknFilteredTextListBoxModel*>( iListBox->Model() );
+
+ iIsFindPopup = aIsFindPopup;
+
+ CAknSearchField::TSearchFieldStyle flag(
+ iIsFindPopup ? CAknSearchField::EPopup : CAknSearchField::ESearch );
+
+ iFindBox = CAknSearchField::NewL(
+ *this, flag, NULL, KMPXFindboxTextLimit );
+ lbxModel->CreateFilterL( iListBox, iFindBox );
+ iFindBoxFilterItems = lbxModel->Filter();
+
+ // Limit Japanese input modes
+ if ( FeatureManager::FeatureSupported( KFeatureIdJapanese ) )
+ {
+ CEikEdwin& findEditor = iFindBox->Editor();
+
+ findEditor.SetAknEditorInputMode( EAknEditorKatakanaInputMode );
+
+ findEditor.SetAknEditorAllowedInputModes(
+ EAknEditorKatakanaInputMode |
+ EAknEditorHalfWidthTextInputMode |
+ EAknEditorNumericInputMode );
+ }
+
+ if ( iIsFindPopup )
+ {
+ SetFindBoxVisibilityL( EFalse );
+ }
+
+ }
+
+// -----------------------------------------------------------------------------
+// Creates icon array, populates iIconArray to be used by listbox
+// -----------------------------------------------------------------------------
+//
+void CMPXCommonContainerAvkonImp::CreateIconArrayL()
+ {
+ if ( iListBoxArray )
+ {
+ iIconArray = iListBoxArray->CreateIconArrayL();
+ }
+ }
+
+// End of File