| ID | TSS000458 | Creation date | October 19, 2006 |
| Platform | S60 3rd Edition | Devices | |
| Category | Symbian C++ | Subcategory |
| Keywords (APIs, classes, methods, functions): |
Inserting text or an icon on the navi pane of an application
S60 applications can set custom icons or texts to be displayed on the navi pane while their application is in foreground.
First, a reference to the status pane is retrieved. Next, the reference of the navi pane is obtained from the status pane. The application then has to create a text-based Navi decorator object using the CAknNavigationDecorator class. Finally, the decorator object needs to be pushed onto the navi pane so that it becomes visible.
//------------------------------------------------------------------------------
CAknNavigationControlContainer* iNaviPane = 0;
CAknNavigationDecorator* iNaviDecorator = 0;
//Get the reference of the status pane
CEikStatusPane *statusPane = iEikonEnv->AppUiFactory()->StatusPane();
if ( statusPane )
{
//Get the reference of the navi pane
iNaviPane=static_cast<CAknNavigationControlContainer*>(statusPane->ControlL(
TUid::Uid(EEikStatusPaneUidNavi)) );
//Create a Navi decorator object
iNaviDecorator= iNaviPane->CreateEditorIndicatorContainerL();
//Get the reference of the indicator container inside the NaviDecorator
CAknIndicatorContainer* indiContainer =
static_cast<CAknIndicatorContainer*>(iNaviDecorator->DecoratedControl());
if ( indiContainer && CEikStatusPaneBase::Current() )
{
TBuf<32> msgSize;
msgSize.Append(_L("Test")); // Text to be displayed
indiContainer->SetIndicatorValueL(
TUid::Uid( EAknNaviPaneEditorIndicatorMessageLength ), msgSize );
indiContainer->SetIndicatorState(
TUid::Uid( EAknNaviPaneEditorIndicatorMessageLength ),
EAknIndicatorStateOn);
}
//Push the object onto the navi pane.
iNaviPane->PushL( *iNaviDecorator );
}
//------------------------------------------------------------------------------
Similarly, the code snippet to display an icon on the navi pane is as follows:
//------------------------------------------------------------------------------
CFbsBitmap* bitmap = NULL;
CFbsBitmap* mask = NULL;
CEikStatusPane* statusPane = iEikonEnv->AppUiFactory()->StatusPane();
CAknNavigationControlContainer* naviPane =
(CAknNavigationControlContainer*)statusPane->ControlL(
TUid::Uid(EEikStatusPaneUidNavi));
// Create an icon
AknIconUtils::CreateIconLC (bitmap, mask, KIconFile,
EMbmCarsvgCircle, EMbmCarsvgCircle_mask); //KIconFile is the .mif file
TSize size(30,30);
AknIconUtils::SetSize(bitmap, size); // Sets the size of the extracted image
//Create a Navi Decorator encapsulation for the image.
CAknNavigationDecorator* naviDecorator =
naviPane->CreateNavigationImageL(bitmap, mask);
//Push the image onto the navi pane.
naviPane->PushL(*naviDecorator);
//------------------------------------------------------------------------------
Required include files and libraries:
#include <aknnavi.h> // for CAknNavigationControlContainer
#include <eikspane.h> // for CEikStatusPane
#include <aknnavide.h> // for CAknNavigationDecorator
#include <akniconutils.h> // for AknIconUtils
#include <aknindicatorcontainer.h> // for CAknIndicatorContainer
LIBRARY aknicon.lib
LIBRARY fbscli.lib
LIBRARY avkon.lib
Note:
The icons or text stay on the navi pane as long as the application is in foreground but they do not affect the idle screen of the device.