Handling new touch-related MEikListBoxObserver events
Article Metadata
Tested with
Compatibility
Article
Contents |
Overview
S60 5th Edition supports touch events. All AVKON UI controls handle touch UI events and you do not need to implement anything new.
If your UI control has a listbox and it is listening for listbox events using MEikListBoxObserver, you need to handle a few new events related to touch UI:
* EEventItemClicked // Item single-tap event * EEventItemDoubleClicked // Item two-taps event * EEventPenDownOnItem // Pen is down and over an item * EEventItemDraggingActioned // Pen is dragged from item to another
Note that CAknSingleStyleListBox already handles its touch UI pointer events in its AVKON base class CAknColumnListBox::HandlePointerEventL(). Do not override this implementation.
MMP file
The following libraries are required:
LIBRARY avkon.lib
LIBRARY eikcoctl.lib
LIBRARY eikctl.lib
Header file
#include <aknlists.h> // CAknSingleStyleListBox
#include <eiklbo.h> // MEikListBoxObserver
Source file
CAknSingleStyleListBox is inside the control and it is created in ConstructL().
void CMyContainer::ConstructL(const TRect& aRect)
{
CreateWindowL();
// Initialize component array
InitComponentArrayL();
// Create listbox
iSearchListBox = new (ELeave) CAknSingleStyleListBox;
iSearchListBox->SetContainerWindowL(*this);
TResourceReader reader;
CEikonEnv::Static()->CreateResourceReaderLC(reader, R_MY_LISTBOX);
iSearchListBox->ConstructFromResourceL(reader);
CleanupStack::PopAndDestroy(); //reader
// --> Start event listening
iSearchListBox->SetListBoxObserver(this);
// Enable scrollbars
iSearchListBox->CreateScrollBarFrameL(ETrue);
iSearchListBox->ScrollBarFrame()
->SetScrollBarVisibilityL( CEikScrollBarFrame::EOff,
CEikScrollBarFrame::EAuto);
Components().AppendLC(iSearchListBox,1);
CleanupStack::Pop( iSearchListBox );
SetRect(aRect);
ActivateL();
}
Listbox event listening is implemented below. Note the new EEventItemDoubleClicked event related to touch UI. The EEventEnterKeyPressed event is the old selection key event (from S60 3rd Edition).
void CMyContainer::HandleListBoxEventL(CEikListBox* aListBox, TListBoxEvent aEventType)
{
if (aEventType == EEventEnterKeyPressed || aEventType == EEventItemDoubleClicked)
{
// TODO: Listbox got double click, what to do?
// From CEikListBox::CurrentItemIndex() you could get the selected row...
}
}
Postconditions
The application handles listbox pointer events.

