The application framework offers key events to UI controls on the control stack by calling CCoeControl::OfferKeyEventL() for each UI control until the key event is consumed or until there are no more UI controls on the control stack. To handle an event in a UI control, you must override CCoeControl::OfferKeyEventL() . If a UI control is a compound control, then forward key events to other controls within the compound control. The control that consumes the event must be a window-owning control . An example of an implementation is as follows:
KeyResponse CMyAppView::OfferKeyEventL(const TKeyEvent& aKeyEvent, TEventCode aType) { TKeyResponse response = EKeyWasNotConsumed; //Check first that event type is EEventKey. It could be also //EEventKeyUp or EEventKeyDown which just inform that some key // is pressed or released. if( aType == EEventKey ) { // Take out the code of the key TInt code = aKeyEvent.iCode; TBuf< KMessageLength > buf; buf.AppendNum( code ); // Show the code iEikonEnv->InfoMsg(buf); // Forward the key event to the focused control if( iListBox->IsFocused() ) { response = iListBox->OfferKeyEventL( aKeyEvent, aType ); } else if( iEditView->IsFocused() ) { response = iEditView->OfferKeyEventL( aKeyEvent, aType ); } } // Return the key consumption status return response; }
CMyAppView is a window-owning compound control and iListBox and iEditView are controls inside CMyAppView . Key events are offered to controls depending on the focus.
If your implementation consumes the event handed to it, you must return EKeyWasConsumed . If your implementation does not process the event, your code must return EKeyWasNotConsumed . The application framework continues to offer the event to controls registered with the control stack from top to bottom until the event is consumed or until there are no more controls, in which case the event is handed to the UI controller by calling CCoeAppUI::HandleKeyEventL() for the UI controller.
Handle key events in your UI controller by overriding CCoeAppUI::HandleKeyEventL() . An example of an implementation is as follows:
TKeyResponse CMyViewAppUi::HandleKeyEventL( const TKeyEvent& aKeyEvent,TEventCode /*aType*/) { if( iTabGroup == NULL ) { return EKeyWasNotConsumed; } TInt active = iTabGroup->ActiveTabIndex(); TInt count = iTabGroup->TabCount(); switch( aKeyEvent.iCode ) { case EKeyLeftArrow: if ( active > 0 ) { active--; iTabGroup->SetActiveTabByIndex( active ); // ActivateLocalViewL() is used to change the view. // To change view from another application we would use ActivateViewL() // Send an empty message ActivateLocalViewL( TUid::Uid( iTabGroup->TabIdFromIndex( active ) ) ); } break; case EKeyRightArrow: if( ( active + 1 ) < count ) { active++; iTabGroup->SetActiveTabByIndex( active ); // ActivateLocalViewL() is used to change the view. // To change view from another application we would use ActivateViewL() ActivateLocalViewL( TUid::Uid( iTabGroup->TabIdFromIndex( active ) ) ); } break; default: return EKeyWasNotConsumed; break; } return EKeyWasConsumed; }
CMyAppView is a UI controller that is using key events from the selection key of a device to switch between two CAknView -derived views. EKeyLeftArrow and EKeyRightArrow are codes enumerated in TKeyCode and are contained in KeyEvent.iCode .
The above code snippet was taken from the MyView example application provided in the Platform Application Views package available from Forum Nokia .
See TKeyCode for more information.
Copyright ©2010 Nokia Corporation and/or its subsidiary(-ies).
All rights
reserved. Unless otherwise stated, these materials are provided under the terms of the Eclipse Public License
v1.0.