Handling new touch-related MEikListBoxObserver events
| Line 1: | Line 1: | ||
__NOTOC__ | __NOTOC__ | ||
__NOEDITSECTION__ | __NOEDITSECTION__ | ||
| − | + | {{KBCS}} | |
| − | {| | + | {{CodeSnippet |
| − | | | + | |id=CS001148 |
| − | + | |platform=S60 5th Edition | |
| − | + | |devices=Nokia 5800 XpressMusic | |
| − | + | |category=Symbian C++ | |
| − | + | |subcategory=Touch UI | |
| − | | | + | |creationdate=October 14, 2008 |
| − | | | + | |keywords=MEikListBoxObserver::HandleListBoxEventL() |
| − | + | }} | |
| − | | | + | |
| − | | | + | |
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
==Overview== | ==Overview== | ||
| − | S60 5th Edition supports touch events. All AVKON | + | S60 5th Edition supports touch events. All AVKON UI controls handle touch UI events and |
| − | you do not need to implement | + | you do not need to implement anything new. |
| − | If your | + | If your UI control has a listbox and it is listening for listbox events using <tt>MEikListBoxObserver</tt>, you need to handle a few new events related to touch UI: |
| − | + | ||
* EEventItemClicked // Item single-tap event | * EEventItemClicked // Item single-tap event | ||
* EEventItemDoubleClicked // Item two-taps event | * EEventItemDoubleClicked // Item two-taps event | ||
| Line 32: | Line 23: | ||
* EEventItemDraggingActioned // Pen is dragged from item to another | * EEventItemDraggingActioned // Pen is dragged from item to another | ||
| − | Note that CAknSingleStyleListBox | + | Note that <tt>CAknSingleStyleListBox</tt> already handles its touch UI pointer events in |
| − | its AVKON base class CAknColumnListBox::HandlePointerEventL(). Do not override this implementation. | + | its AVKON base class <tt>CAknColumnListBox::HandlePointerEventL()</tt>. Do not override this implementation. |
| Line 56: | Line 47: | ||
==Source file== | ==Source file== | ||
| − | + | <tt>CAknSingleStyleListBox</tt> is inside the control and it is created in <tt>ConstructL()</tt>. | |
<code cpp> | <code cpp> | ||
void CMyContainer::ConstructL(const TRect& aRect) | void CMyContainer::ConstructL(const TRect& aRect) | ||
| Line 90: | Line 81: | ||
</code> | </code> | ||
| − | + | Listbox event listening is implemented below. Note the new <tt>EEventItemDoubleClicked</tt> event related to touch UI. The <tt>EEventEnterKeyPressed</tt> event is the old selection key event (from S60 3rd Edition). | |
| − | EEventEnterKeyPressed event is old selection key event (from S60 3rd Edition). | + | |
<code cpp> | <code cpp> | ||
void CMyContainer::HandleListBoxEventL(CEikListBox* aListBox, TListBoxEvent aEventType) | void CMyContainer::HandleListBoxEventL(CEikListBox* aListBox, TListBoxEvent aEventType) | ||
| Line 106: | Line 96: | ||
==Postconditions== | ==Postconditions== | ||
| − | + | The application handles listbox pointer events. | |
==See also== | ==See also== | ||
| − | + | [http://www.forum.nokia.com/info/sw.nokia.com/id/a856c0b7-2b71-480e-810e-99acedb24b77/S60_Platform_Calendar_Interim_API_Example.html S60 Platform: Calendar Interim API Example] | |
[[Category:Symbian C++]][[Category:Code Examples]][[Category:Touch UI]] | [[Category:Symbian C++]][[Category:Code Examples]][[Category:Touch UI]] | ||
Revision as of 13:32, 14 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.

