Handling new touch-related MEikListBoxObserver events
m |
|||
| Line 102: | Line 102: | ||
| − | [[Category:Symbian C++]][[Category:Code Examples]][[Category:Touch UI]] | + | [[Category:Symbian C++]][[Category:Code Examples]][[Category:UI]][[Category:Touch UI]] |
Revision as of 16:18, 26 October 2008
Article Metadata
Tested with
Compatibility
Article
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.

