fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepIndicatorAvkon.cpp
changeset 40 2cb9bae34d17
parent 31 f1bdd6b078d1
child 49 37f5d84451bd
equal deleted inserted replaced
31:f1bdd6b078d1 40:2cb9bae34d17
     1 /*
       
     2 * Copyright (c) 2002-2004 Nokia Corporation and/or its subsidiary(-ies). 
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0""
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:           
       
    15 *       Provides the CAknFepIndicator methods.
       
    16 *
       
    17 */
       
    18 
       
    19 
       
    20 
       
    21 
       
    22 
       
    23 
       
    24 
       
    25 
       
    26 
       
    27 
       
    28 
       
    29 
       
    30 #include <eikenv.h>         //CEikEnv
       
    31 #include <eikspane.h>       //CEikStatusPane
       
    32 #include <avkon.hrh>
       
    33 #include <aknnavi.h>        //CAknNavigationControlContainer
       
    34 #include <aknnavide.h>      //CAknNavigationDecorator
       
    35 #include <AknIndicatorContainer.h>  //CAknIndicatorContainer
       
    36 #include <aknEditStateIndicator.h>
       
    37 #include <AknUtils.h>
       
    38 #include "AknFepIndicatorAvkon.h"
       
    39 
       
    40 #include "AknFepGlobalEnums.h"
       
    41 
       
    42 /**
       
    43  *
       
    44  */ 
       
    45 CAknFepIndicator* CAknFepIndicatorAvkon::NewL()
       
    46     {
       
    47     CAknFepIndicatorAvkon* self = new(ELeave)CAknFepIndicatorAvkon();
       
    48     return self;
       
    49     }
       
    50 
       
    51 /**
       
    52  *
       
    53  */
       
    54 CAknFepIndicatorAvkon::~CAknFepIndicatorAvkon()
       
    55     {
       
    56     RemoveContainer();
       
    57     }
       
    58 
       
    59  TBool CAknFepIndicatorAvkon::QueryPredictiveState(TAknEditingState aState)
       
    60  {
       
    61     return  (( aState == EIndicatorStatePinyin) ||
       
    62              ( aState == EIndicatorStatePinyinPhrase) ||
       
    63              ( aState == EIndicatorStateZhuyin) ||
       
    64              ( aState == EIndicatorStateZhuyinPhrase) ||
       
    65              ( aState == EIndicatorStateZhuyinFind) ||
       
    66              ( aState == EIndicatorStateStrokeFind) ||
       
    67              ( aState == EIndicatorStateStroke) || 
       
    68              ( aState == EIndicatorStateStrokePhrase) ||
       
    69 			 ( aState == EIndicatorStateCangJie) ||
       
    70              ( aState == EIndicatorStateStrokeTrad) || 
       
    71              ( aState == EIndicatorStateStrokeTradPhrase) ||
       
    72              ( aState == ET9Upper) ||
       
    73              ( aState == ET9Shifted) ||
       
    74              ( aState == ET9Lower) ||
       
    75              ( aState == ET9Arabic) ||
       
    76              ( aState == ET9Hebrew) ||
       
    77              ( aState == ET9FarsiAndUrdu) ||
       
    78              ( aState == ET9Thai) ||
       
    79              ( aState == EIndicatorStatePredictiveHindi) ||
       
    80 #ifdef RD_MARATHI
       
    81              ( aState == EIndicatorStatePredictiveMarathi) ||
       
    82 #endif // RD_MARATHI
       
    83              ( aState == EIndicatorStateJapanesePredictive) ||
       
    84              ( aState == ET9UpperVietnamese) ||
       
    85              ( aState == ET9LowerVietnamese) ||
       
    86              ( aState == ET9ShiftedVietnamese) ||
       
    87              ( aState == ET9UpperGreek) ||
       
    88              ( aState == ET9LowerGreek) ||
       
    89              ( aState == ET9ShiftedGreek) ||
       
    90              ( aState == ET9UpperCyrillic) ||
       
    91              ( aState == ET9LowerCyrillic) ||
       
    92              ( aState == ET9ShiftedCyrillic) ); 
       
    93  }
       
    94  
       
    95   
       
    96 #ifndef RD_INTELLIGENT_TEXT_INPUT
       
    97  TBool CAknFepIndicatorAvkon::QueryPredictiveAutoCompleteState(TAknEditingState aState)
       
    98  {
       
    99  	 	        
       
   100     return (( aState == EAutoCompleteUpper ) ||  
       
   101      		( aState == EAutoCompleteShifted )  ||
       
   102      		( aState == EAutoCompleteLower ) || 
       
   103      		( aState == EAutoCompleteHindi ) ||
       
   104      		( aState == EAutoCompleteArabic ) ||
       
   105      		( aState == EAutoCompleteHebrew ) ||
       
   106      		( aState == EAutoCompleteFarsiAndUrdu ) ||
       
   107      		( aState == EAutoCompleteThai ) ||
       
   108      		( aState == EAutoCompleteUpperVietnamese ) ||
       
   109      		( aState == EAutoCompleteLowerVietnamese ) ||
       
   110      		( aState == EAutoCompleteShiftedVietnamese ));
       
   111  }
       
   112 
       
   113 #endif
       
   114 TInt CAknFepIndicatorAvkon::EvaluateState(TAknEditingState aState)
       
   115 {
       
   116 	TInt result = 0;
       
   117 	switch(aState)
       
   118 	{
       
   119 		case EArabicIndicNumeric:
       
   120   			 result = EAknNaviPaneEditorIndicatorArabicIndicNumberCase;
       
   121   			 break;
       
   122   			 
       
   123 		case ET9Thai:
       
   124 		case EMultitapThai:
       
   125 #ifndef RD_INTELLIGENT_TEXT_INPUT
       
   126 		case EAutoCompleteThai:
       
   127 #endif
       
   128 			result = EAknNaviPaneEditorIndicatorThai;
       
   129 			break;				
       
   130 			
       
   131 		case EIndicatorStatePredictiveHindi:
       
   132 		case EIndicatorStateMultitapHindi:
       
   133 #ifndef RD_INTELLIGENT_TEXT_INPUT
       
   134 		case EAutoCompleteHindi:
       
   135 #endif
       
   136 #ifdef RD_MARATHI
       
   137 		case EIndicatorStateMultitapMarathi:
       
   138 		case EIndicatorStatePredictiveMarathi:
       
   139 #endif // RD_MARATHI
       
   140 			result = EAknNaviPaneEditorIndicatorDevanagariCase;
       
   141 			break;	
       
   142 			
       
   143 		case ET9Arabic:
       
   144 		case EMultitapArabic:
       
   145 #ifndef RD_INTELLIGENT_TEXT_INPUT
       
   146 		case EAutoCompleteArabic:
       
   147 #endif
       
   148 			result = EAknNaviPaneEditorIndicatorArabicCase;
       
   149 			break;	
       
   150 
       
   151 		case ET9Hebrew:
       
   152 		case EMultitapHebrew:
       
   153 #ifndef RD_INTELLIGENT_TEXT_INPUT
       
   154 		case EAutoCompleteHebrew:
       
   155 #endif
       
   156 			result = EAknNaviPaneEditorIndicatorHebrewCase;
       
   157 			break;	
       
   158 			
       
   159 		case ET9FarsiAndUrdu:
       
   160 		case EMultitapFarsiAndUrdu:
       
   161 #ifndef RD_INTELLIGENT_TEXT_INPUT
       
   162 		case EAutoCompleteFarsiAndUrdu:
       
   163 #endif
       
   164 			result = EAknNaviPaneEditorIndicatorFarsiAndUrduCase;
       
   165 			break;					
       
   166 
       
   167 
       
   168 		case ET9Upper:
       
   169 		case EMultitapUpper:
       
   170 #ifndef RD_INTELLIGENT_TEXT_INPUT
       
   171 		case EAutoCompleteUpper:
       
   172 #endif
       
   173 				if(iCopyMode)
       
   174 					{
       
   175 					result = EAknNaviPaneEditorIndicatorUpperCaseSelect;		
       
   176 					}
       
   177 				else
       
   178 					{
       
   179 					result = EAknNaviPaneEditorIndicatorUpperCase;	
       
   180 					}
       
   181 			
       
   182 			break;
       
   183 
       
   184 		case ET9Lower:
       
   185 		case EMultitapLower:
       
   186 #ifndef RD_INTELLIGENT_TEXT_INPUT
       
   187 		case EAutoCompleteLower:
       
   188 #endif
       
   189 				if(iCopyMode)
       
   190 					{
       
   191 					result = EAknNaviPaneEditorIndicatorLowerCaseSelect;		
       
   192 					}
       
   193 				else
       
   194 					{
       
   195 					result = EAknNaviPaneEditorIndicatorLowerCase;	
       
   196 					}		
       
   197 			break;
       
   198 
       
   199 		case ET9Shifted:
       
   200 		case EMultitapShifted:
       
   201 #ifndef RD_INTELLIGENT_TEXT_INPUT
       
   202 		case EAutoCompleteShifted:
       
   203 #endif
       
   204 				if(iCopyMode)
       
   205 					{
       
   206 					result = EAknNaviPaneEditorIndicatorTextCaseSelect;		
       
   207 					}
       
   208 				else
       
   209 					{
       
   210 					result = EAknNaviPaneEditorIndicatorTextCase;	
       
   211 					}		
       
   212 			break;
       
   213 			
       
   214 		case ENumeric:
       
   215 				if(iCopyMode)
       
   216 					{
       
   217 					result = EAknNaviPaneEditorIndicatorNumberCaseSelect;		
       
   218 					}
       
   219 				else
       
   220 					{
       
   221 					result = EAknNaviPaneEditorIndicatorNumberCase;	
       
   222 					}		
       
   223 			break;		
       
   224   			 
       
   225   			 	
       
   226 		case EIndicatorStatePinyin:
       
   227 			result = EAknNaviPaneEditorIndicatorPinyin;
       
   228 			break;
       
   229 		case EIndicatorStatePinyinPhrase:
       
   230 			result = EAknNaviPaneEditorIndicatorPinyinPhrase;
       
   231 			break;
       
   232 			
       
   233 		case EIndicatorStateZhuyin:
       
   234 			 result = EAknNaviPaneEditorIndicatorZhuyin;
       
   235 			break;
       
   236 		case EIndicatorStateZhuyinPhrase:
       
   237 			 result = EAknNaviPaneEditorIndicatorZhuyinPhrase;
       
   238 			break;
       
   239 
       
   240 		case EIndicatorStateZhuyinFind:
       
   241 			result = EAknNaviPaneEditorIndicatorZhuyinFind;
       
   242 			break;
       
   243 
       
   244 		case EDevanagariIndicNumeric :
       
   245 			result = EAknNaviPaneEditorIndicatorDevanagariIndicNumberCase;
       
   246 			break;
       
   247 		
       
   248 		case EIndicatorStateHiraganaKanji:
       
   249 		case EIndicatorStateJapanesePredictive:
       
   250 			result = EAknNaviPaneEditorIndicatorJapaneseHiraganaKanji;
       
   251 			break;
       
   252 
       
   253 		case EIndicatorStateFullKatakana:
       
   254 			result = EAknNaviPaneEditorIndicatorJapaneseFullKatakana;
       
   255 			break;
       
   256 
       
   257 		case EIndicatorStateHalfKatakana:
       
   258 			result = EAknNaviPaneEditorIndicatorJapaneseHalfKatakana;
       
   259 			break;
       
   260 
       
   261 		case EIndicatorStateFullLatinText:
       
   262 			result = EAknNaviPaneEditorIndicatorJapaneseFullTextAlphabet;
       
   263 			break;
       
   264 
       
   265 		case EIndicatorStateFullLatinUpper:
       
   266 			result = EAknNaviPaneEditorIndicatorJapaneseFullUpperAlphabet;
       
   267 			break; 
       
   268 
       
   269 		case EIndicatorStateFullLatinLower:
       
   270 			result = EAknNaviPaneEditorIndicatorJapaneseFullLowerAlphabet;
       
   271 			break;
       
   272 
       
   273 		case EIndicatorStateFullNumeric:
       
   274 			result = EAknNaviPaneEditorIndicatorJapaneseFullNumeric;
       
   275 			break;
       
   276 
       
   277 		case EIndicatorStateHiragana:
       
   278 			result = EAknNaviPaneEditorIndicatorJapaneseHiragana;
       
   279 			break;
       
   280 
       
   281 		case EIndicatorStateStroke:
       
   282 			result = EAknNaviPaneEditorIndicatorStroke;
       
   283 			break;
       
   284 		case EIndicatorStateStrokePhrase:
       
   285 			result = EAknNaviPaneEditorIndicatorStrokePhrase;
       
   286 			break;
       
   287 
       
   288 		case EIndicatorStateStrokeTrad:
       
   289 			result = EAknNaviPaneEditorIndicatorStrokeTrad;
       
   290 			break;
       
   291 		case EIndicatorStateStrokeTradPhrase:
       
   292 			result = EAknNaviPaneEditorIndicatorStrokeTradPhrase;
       
   293 			break;
       
   294 
       
   295 		case EQwertyShift:
       
   296 			result = EAknNaviPaneEditorIndicatorQwertyShift;
       
   297 			break;
       
   298 
       
   299 		case EIndicatorStateStrokeFind:
       
   300 			result = EAknNaviPaneEditorIndicatorStrokeFind;
       
   301 			break;
       
   302 
       
   303 		case EIndicatorStateCangJie:
       
   304 			result = EAknNaviPaneEditorIndicatorCangJie;
       
   305 			break;
       
   306 			
       
   307 		case EIndicatorStateHangul:
       
   308 			if(iCopyMode)
       
   309 					{
       
   310 					result = EAknNaviPaneEditorIndicatorKoreanHangulSelect;		
       
   311 					}
       
   312 				else
       
   313 					{
       
   314 					result = EAknNaviPaneEditorIndicatorKoreanHangul;	
       
   315 					}
       
   316 			break;
       
   317 		
       
   318 		case ET9UpperVietnamese:
       
   319 		case EMultitapUpperVietnamese:
       
   320 #ifndef RD_INTELLIGENT_TEXT_INPUT
       
   321 		case EAutoCompleteUpperVietnamese:
       
   322 #endif
       
   323 			result = EAknNaviPaneEditorIndicatorVietnameseUpperCase;
       
   324 			break;			
       
   325 			
       
   326 		case ET9LowerVietnamese:
       
   327 		case EMultitapLowerVietnamese:
       
   328 #ifndef RD_INTELLIGENT_TEXT_INPUT
       
   329 		case EAutoCompleteLowerVietnamese:
       
   330 #endif
       
   331 			result = EAknNaviPaneEditorIndicatorVietnameseLowerCase;
       
   332 			break;	
       
   333 			
       
   334 		case ET9ShiftedVietnamese:
       
   335 		case EMultitapShiftedVietnamese:
       
   336 #ifndef RD_INTELLIGENT_TEXT_INPUT
       
   337 		case EAutoCompleteShiftedVietnamese:
       
   338 #endif
       
   339 			result = EAknNaviPaneEditorIndicatorVietnameseTextCase;
       
   340 			break;
       
   341 #ifdef RD_HINDI_PHONETIC_INPUT	
       
   342 		case EIndicatorStateHindiPhoneticUpper:
       
   343 			result = EAknNaviPaneEditorIndicatorDevanagariPhoneticUpperCase;
       
   344 			break;
       
   345 		case EIndicatorStateHindiPhoneticLower:
       
   346 			result = EAknNaviPaneEditorIndicatorDevanagariPhoneticLowerCase;
       
   347 			break;
       
   348 #endif
       
   349 #ifdef RD_INTELLIGENT_TEXT_INPUT
       
   350               case EFnKeyPressed:
       
   351 			result = EAknNaviPaneEditorIndicatorFnKeyPressed;
       
   352 			break;
       
   353               case EFnKeyLocked:
       
   354 			result = EAknNaviPaneEditorIndicatorFnKeyLocked;
       
   355 			break;
       
   356 #endif
       
   357         case ET9UpperGreek:
       
   358         case EMultitapUpperGreek:
       
   359             result = EAknNaviPaneEditorIndicatorGreekUpperCase;
       
   360             break;
       
   361             
       
   362         case ET9LowerGreek:
       
   363         case EMultitapLowerGreek:
       
   364             result = EAknNaviPaneEditorIndicatorGreekLowerCase;
       
   365             break;
       
   366         
       
   367         case ET9ShiftedGreek:
       
   368         case EMultitapShiftedGreek:
       
   369             result = EAknNaviPaneEditorIndicatorGreekTextCase;
       
   370             break;
       
   371             
       
   372         case ET9UpperCyrillic:
       
   373         case EMultitapUpperCyrillic:
       
   374             result = EAknNaviPaneEditorIndicatorCyrillicUpperCase;
       
   375             break;
       
   376             
       
   377         case ET9LowerCyrillic:
       
   378         case EMultitapLowerCyrillic:
       
   379             result = EAknNaviPaneEditorIndicatorCyrillicLowerCase;
       
   380             break;
       
   381         
       
   382         case ET9ShiftedCyrillic:
       
   383         case EMultitapShiftedCyrillic:
       
   384             result = EAknNaviPaneEditorIndicatorCyrillicTextCase;
       
   385             break;
       
   386 	}
       
   387 	return result;
       
   388 }
       
   389 /**
       
   390  *
       
   391  */
       
   392 void CAknFepIndicatorAvkon::SetState(TAknEditingState aState)
       
   393     {
       
   394     CAknNavigationControlContainer* naviPane = 0;
       
   395     TRAPD(err, naviPane = NaviPaneL());
       
   396 
       
   397     // If the navi pane has been changed, clean up and start again.
       
   398     if (iNaviPane != naviPane)
       
   399         {
       
   400         RemoveContainer();
       
   401         iNaviPane = naviPane;
       
   402         iNaviPaneChanged = ETrue;
       
   403         }
       
   404     
       
   405     if ( (iPreviousState == aState) && !iNaviPaneChanged  && !iCopyModeChanged)
       
   406         {
       
   407         // The required state already exists and navi pane has not been changed 
       
   408         // by launching embedded application. Leave the contents alone.
       
   409         return;
       
   410         }
       
   411     iCopyModeChanged = EFalse;    
       
   412         
       
   413     if (aState == EStateNone) 
       
   414         {
       
   415         if ( iNaviDecorator && naviPane )
       
   416             {
       
   417             CCoeControl* decoratedControl = iNaviDecorator->DecoratedControl();
       
   418             if ( decoratedControl )
       
   419                 {
       
   420                 decoratedControl->MakeVisible(EFalse);
       
   421                 }
       
   422             naviPane->Pop(iNaviDecorator);
       
   423             }
       
   424         if(iPreviousState && (iPreviousState != EStateNone))
       
   425     	    {
       
   426 	   		SetIndicator(EvaluateState(iPreviousState), EAknIndicatorStateOff, EFalse); 	   	
       
   427 	   		// Also set off predictive / query (pen) indicator.
       
   428 	   		SetIndicator(EAknNaviPaneEditorIndicatorQuery, EAknIndicatorStateOff, EFalse); 	   			   		
       
   429 	   		SetIndicator(EAknNaviPaneEditorIndicatorT9, EAknIndicatorStateOff, EFalse); 	   			   		
       
   430         	}
       
   431         iPreviousState = aState;
       
   432         iNaviPaneChanged = EFalse;
       
   433         return;
       
   434         }
       
   435     
       
   436     if ( err == KErrNone )
       
   437         {
       
   438         iNaviPaneChanged = EFalse;
       
   439         TRAP(err,AddContainerL(naviPane));
       
   440         
       
   441 
       
   442         // selection indicator
       
   443         
       
   444         SetIndicator(EvaluateState(iPreviousState), EAknIndicatorStateOff, EFalse); 
       
   445         
       
   446         // selection indicator
       
   447         if (iCopyMode)
       
   448             {
       
   449             // clear normal indicators first
       
   450             SetIndicator(EAknNaviPaneEditorIndicatorTextCase, EAknIndicatorStateOff,  ETrue);
       
   451             SetIndicator(EAknNaviPaneEditorIndicatorLowerCase, EAknIndicatorStateOff, ETrue);
       
   452             SetIndicator(EAknNaviPaneEditorIndicatorUpperCase, EAknIndicatorStateOff, ETrue);
       
   453             SetIndicator(EAknNaviPaneEditorIndicatorNumberCase,EAknIndicatorStateOff, ETrue);       
       
   454             SetIndicator(EAknNaviPaneEditorIndicatorKoreanHangul,EAknIndicatorStateOff, ETrue); 
       
   455             }
       
   456 	    else
       
   457             {
       
   458             // clear selection indicators first
       
   459             SetIndicator(EAknNaviPaneEditorIndicatorTextCaseSelect, EAknIndicatorStateOff,  ETrue);
       
   460             SetIndicator(EAknNaviPaneEditorIndicatorLowerCaseSelect, EAknIndicatorStateOff, ETrue);
       
   461             SetIndicator(EAknNaviPaneEditorIndicatorUpperCaseSelect, EAknIndicatorStateOff, ETrue);
       
   462             SetIndicator(EAknNaviPaneEditorIndicatorNumberCaseSelect,EAknIndicatorStateOff, ETrue);       
       
   463             SetIndicator(EAknNaviPaneEditorIndicatorKoreanHangulSelect,EAknIndicatorStateOff, ETrue);  
       
   464             }
       
   465              
       
   466   		TBool predictiveMode = QueryPredictiveState(aState);
       
   467 #ifndef RD_INTELLIGENT_TEXT_INPUT
       
   468   		TBool predictiveAutoCompleteMode = EFalse;
       
   469   		if(!predictiveMode)
       
   470   			{
       
   471   			predictiveAutoCompleteMode = QueryPredictiveAutoCompleteState(aState);		
       
   472   			}
       
   473 #endif
       
   474         
       
   475         SetIndicator(EAknNaviPaneEditorIndicatorQuery, 
       
   476             ( predictiveMode || aState == EStateNone  
       
   477 #ifndef RD_INTELLIGENT_TEXT_INPUT
       
   478 			|| predictiveAutoCompleteMode
       
   479 #endif
       
   480             )? EAknIndicatorStateOff : EAknIndicatorStateOn, EFalse);
       
   481         SetIndicator(EAknNaviPaneEditorIndicatorT9, predictiveMode 
       
   482             ? EAknIndicatorStateOn : EAknIndicatorStateOff, EFalse);
       
   483 #ifndef RD_INTELLIGENT_TEXT_INPUT
       
   484         // Indicator for Auto Word Completion Mode
       
   485      	SetIndicator(EAknNaviPaneEditorIndicatorAutoComplete, predictiveAutoCompleteMode 
       
   486             ? EAknIndicatorStateOn : EAknIndicatorStateOff, EFalse);
       
   487 #endif
       
   488        
       
   489       SetIndicator(EvaluateState(aState), EAknIndicatorStateOn, EFalse);
       
   490 
       
   491         // Push the state to the navi-pane
       
   492         if (naviPane && iNaviDecorator)
       
   493             {
       
   494             CCoeControl* decoratedControl = iNaviDecorator->DecoratedControl();
       
   495             if ( decoratedControl )
       
   496                 {
       
   497                 decoratedControl->MakeVisible(ETrue);
       
   498                 }
       
   499             TRAP_IGNORE(naviPane->PushL(*iNaviDecorator));
       
   500             }        
       
   501         }
       
   502     iPreviousState = aState;    
       
   503     }
       
   504 
       
   505 /**
       
   506  *
       
   507  */
       
   508 CAknIndicatorContainer* CAknFepIndicatorAvkon::IndicatorContainer()
       
   509     {
       
   510     CAknNavigationControlContainer* naviPane = 0;
       
   511     TRAPD(err, naviPane = NaviPaneL());
       
   512 
       
   513     // If the navi pane have changed, clean up and start again
       
   514     if ( naviPane != iNaviPane )
       
   515         {
       
   516         RemoveContainer();
       
   517         iNaviPane = naviPane;
       
   518         iNaviPaneChanged = ETrue;
       
   519         }
       
   520     if ( !iIndicatorContainer )
       
   521         {
       
   522         TRAP(err, AddContainerL(naviPane));        
       
   523         }
       
   524     return iIndicatorContainer;
       
   525     }
       
   526 
       
   527 /**
       
   528  *
       
   529  */
       
   530 CAknFepIndicatorAvkon::CAknFepIndicatorAvkon()
       
   531     :iPreviousState(EStateNone), iEikEnv(*CEikonEnv::Static())
       
   532     {
       
   533     }
       
   534 
       
   535 /**
       
   536  *  Create a new indicator container and push it to the navi-pane
       
   537  */
       
   538 void CAknFepIndicatorAvkon::AddContainerL(CAknNavigationControlContainer* aNaviPane)
       
   539     {
       
   540     // Create a new indicator container and push it to the navi-pane
       
   541     if (!iIndicatorContainer && aNaviPane)
       
   542         {
       
   543         iNaviDecorator = aNaviPane->CreateEditorIndicatorContainerL();
       
   544         iIndicatorContainer = STATIC_CAST(CAknIndicatorContainer*, iNaviDecorator->DecoratedControl());
       
   545         }
       
   546     }
       
   547 
       
   548 /**
       
   549  * Pop the indicator container from the navi-pane
       
   550  */
       
   551 void CAknFepIndicatorAvkon::RemoveContainer()
       
   552     {
       
   553     // Pop the indicator container from the navi-pane
       
   554     if (iIndicatorContainer)
       
   555         {
       
   556         delete iNaviDecorator;
       
   557         iNaviDecorator = NULL;
       
   558         iIndicatorContainer = NULL;
       
   559         }
       
   560     }
       
   561 
       
   562 /**
       
   563  *
       
   564  */
       
   565 void CAknFepIndicatorAvkon::SetIndicator(TInt aIndicator, TInt aMode, TBool aDrawNow)
       
   566     {
       
   567     if ( iIndicatorContainer )
       
   568         {
       
   569         iIndicatorContainer->SetIndicatorState(TUid::Uid(aIndicator), aMode, aDrawNow);
       
   570         }
       
   571     }
       
   572 
       
   573 /**
       
   574  *  get a handle to the Navi Pane
       
   575  */
       
   576 CAknNavigationControlContainer* CAknFepIndicatorAvkon::NaviPaneL()
       
   577     {
       
   578     CEikStatusPane *sp = iEikEnv.AppUiFactory()->StatusPane();
       
   579     User::LeaveIfNull(sp);
       
   580     // Fetch pointer to the default navi pane control
       
   581     return (CAknNavigationControlContainer *)sp->ControlL(TUid::Uid(EEikStatusPaneUidNavi));
       
   582     }
       
   583 
       
   584 // End of file