uifw/AvKon/src/AknAdaptiveSearch.cpp
changeset 0 2f259fa3e83a
child 10 9f56a4e1b8ab
child 14 3320e4e6e8bb
equal deleted inserted replaced
-1:000000000000 0:2f259fa3e83a
       
     1 /*
       
     2 * Copyright (c) 2006 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 *
       
    16 */
       
    17 
       
    18 
       
    19 // INCLUDE FILES
       
    20 #include "AknAdaptiveSearch.h"
       
    21 #include <aknsfld.h>
       
    22 #include <centralrepository.h>      // CenRep for AS
       
    23 #include <AvkonInternalCRKeys.h>    // CenRep for AS
       
    24 #include <akntrace.h>               //for trace
       
    25 
       
    26 
       
    27 // CONSTANTS
       
    28 const TInt KAknStringBufferSize = 256;
       
    29 const TInt KLitHyphen('-');
       
    30 
       
    31 // ============================ MEMBER FUNCTIONS ===============================
       
    32 
       
    33 // -----------------------------------------------------------------------------
       
    34 // CAknAdaptiveSearch::NewL
       
    35 // Two-phased constructor.
       
    36 // -----------------------------------------------------------------------------
       
    37 //
       
    38 CAknAdaptiveSearch* CAknAdaptiveSearch::NewL( const TInt aTextLimit, TInt aFieldStyle )
       
    39     {
       
    40     CAknAdaptiveSearch* self = CAknAdaptiveSearch::NewLC( aTextLimit, aFieldStyle);
       
    41     CleanupStack::Pop( self );
       
    42     return self;
       
    43     }
       
    44 
       
    45 // -----------------------------------------------------------------------------
       
    46 // CAknAdaptiveSearch::NewLC
       
    47 // Two-phased constructor.
       
    48 // -----------------------------------------------------------------------------
       
    49 //
       
    50 CAknAdaptiveSearch* CAknAdaptiveSearch::NewLC( const TInt aTextLimit, TInt aFieldStyle )
       
    51     {
       
    52     CAknAdaptiveSearch* self = new ( ELeave ) CAknAdaptiveSearch ();
       
    53     CleanupStack::PushL( self );
       
    54     self->ConstructL( aTextLimit, aFieldStyle );
       
    55     return self;
       
    56     }
       
    57 
       
    58 // -----------------------------------------------------------------------------
       
    59 // CAknAdaptiveSearch::CAknAdaptiveSearch
       
    60 // C++ default constructor.
       
    61 // -----------------------------------------------------------------------------
       
    62 //
       
    63 CAknAdaptiveSearch::CAknAdaptiveSearch()     
       
    64     : iBlockFlag( EFalse )      
       
    65     {    
       
    66     }     
       
    67 
       
    68 // -----------------------------------------------------------------------------
       
    69 // CAknAdaptiveSearch::~CAknAdaptiveSearch
       
    70 // Destructor.
       
    71 // -----------------------------------------------------------------------------
       
    72 //
       
    73 CAknAdaptiveSearch::~CAknAdaptiveSearch()
       
    74     {  
       
    75     _AKNTRACE_FUNC_ENTER;
       
    76     if ( iAdaptiveSearchGrid )
       
    77 	    {
       
    78 	    delete iAdaptiveSearchGrid;	
       
    79 	    }
       
    80 	if( iGridChars )
       
    81 		{
       
    82 		delete iGridChars;
       
    83 		iGridChars = NULL;
       
    84 		}
       
    85 	iAdaptiveSearchTextObserver = NULL;	
       
    86 	// Stop listening CenRep.
       
    87     if ( iCenRepNotifyHandlerChinese )
       
    88     	{
       
    89     	iCenRepNotifyHandlerChinese->StopListening();
       
    90     	}
       
    91     delete iCenRepNotifyHandlerChinese;
       
    92     if ( iCenRepNotifyHandlerPRC )
       
    93     	{
       
    94     	iCenRepNotifyHandlerPRC->StopListening();
       
    95     	}
       
    96     delete iCenRepNotifyHandlerPRC;
       
    97     if ( iCenRepNotifyHandlerTW )
       
    98     	{
       
    99     	iCenRepNotifyHandlerTW->StopListening();
       
   100     	}
       
   101     delete iCenRepNotifyHandlerTW;
       
   102     if ( iCenRepNotifyHandlerHongkong )
       
   103     	{
       
   104     	iCenRepNotifyHandlerHongkong->StopListening();
       
   105     	}
       
   106     delete iCenRepNotifyHandlerHongkong;
       
   107     delete iCenRep;    
       
   108     _AKNTRACE_FUNC_EXIT;
       
   109     }
       
   110 
       
   111 // -----------------------------------------------------------------------------
       
   112 // CAknAdaptiveSearch::ConstructL
       
   113 // Symbian 2nd phase constructor.
       
   114 // -----------------------------------------------------------------------------
       
   115 //
       
   116 void CAknAdaptiveSearch::ConstructL( const TInt aTextLimit, TInt aSearchField )
       
   117     {
       
   118     _AKNTRACE_FUNC_ENTER;
       
   119     iAdaptiveSearchGrid = CAknAdaptiveSearchGrid::NewL( aTextLimit, aSearchField );  
       
   120     iAdaptiveSearchGrid->SetAdaptiveSearchGridObserver( this );
       
   121     iGridChars = NULL;
       
   122     iTextLimit = aTextLimit;
       
   123     iAdaptiveSearchTextObserver = NULL;  
       
   124     
       
   125     // Start listening a CenRep key indicating input language 
       
   126     TRAPD( err, iCenRep = CRepository::NewL( KCRUidAvkon ) );
       
   127     if ( err == KErrNone )
       
   128         {
       
   129         iCenRepNotifyHandlerChinese = CCenRepNotifyHandler::NewL( *this, *iCenRep,
       
   130                                       CCenRepNotifyHandler::EIntKey,
       
   131                                       KAknAdaptiveSearchLastChinese );
       
   132         iCenRepNotifyHandlerChinese->StartListeningL(); 
       
   133         
       
   134         iCenRepNotifyHandlerPRC = CCenRepNotifyHandler::NewL( *this, *iCenRep,
       
   135                                   CCenRepNotifyHandler::EIntKey,
       
   136                                   KAknAdaptiveSearchChinesePRC );
       
   137         iCenRepNotifyHandlerPRC->StartListeningL(); 
       
   138         
       
   139         iCenRepNotifyHandlerTW = CCenRepNotifyHandler::NewL( *this, *iCenRep,
       
   140                                  CCenRepNotifyHandler::EIntKey,
       
   141                                  KAknAdaptiveSearchChineseTW);
       
   142         iCenRepNotifyHandlerTW->StartListeningL();
       
   143         
       
   144         iCenRepNotifyHandlerHongkong = CCenRepNotifyHandler::NewL( *this, *iCenRep,
       
   145                                        CCenRepNotifyHandler::EIntKey,
       
   146                                        KAknAdaptiveSearchChineseHongkong );
       
   147         iCenRepNotifyHandlerHongkong->StartListeningL(); 
       
   148         }  
       
   149     _AKNTRACE_FUNC_EXIT;
       
   150     }
       
   151            
       
   152 // -----------------------------------------------------------------------------
       
   153 // CAknAdaptiveSearch::HandleControlEventL
       
   154 // -----------------------------------------------------------------------------
       
   155 //
       
   156 void CAknAdaptiveSearch::HandleControlEventL( CCoeControl */*aControl*/, 
       
   157                                               TCoeEvent /*aEventType*/ )
       
   158 	{	
       
   159 	}
       
   160 	
       
   161 // -----------------------------------------------------------------------------
       
   162 // For Devanagari AS
       
   163 // Checks if the last character entered is a Indic halant character.
       
   164 // @param aCh - character to be checked  
       
   165 // @return ETrue if this is a halant character EFalse otherwise.                        
       
   166 // -----------------------------------------------------------------------------
       
   167 inline TBool IsIndicHalantChar( const TChar aCh )
       
   168     {
       
   169     //Devanagari halant character check:
       
   170     return ( aCh == 0x094D );
       
   171     }	
       
   172 
       
   173 // -----------------------------------------------------------------------------
       
   174 // CAknAdaptiveSearch::SetButtonCharsL
       
   175 // -----------------------------------------------------------------------------
       
   176 //
       
   177 void CAknAdaptiveSearch::SetButtonCharsL( const TDesC& aGridChars )
       
   178     {  
       
   179     _AKNTRACE_FUNC_ENTER;
       
   180     _AKNDEBUG(
       
   181             _LIT( KClassName, "CAknAdaptiveSearch" );
       
   182             _LIT( KFunctionName, "SetButtonCharsL" );
       
   183             _LIT( KFormat, "[%S][%S] The text is: %S");
       
   184             _AKNTRACE( KFormat, 
       
   185             &KClassName, &KFunctionName, &aGridChars );
       
   186             );
       
   187 	if( iGridChars )
       
   188 		{
       
   189 		delete iGridChars;
       
   190 		iGridChars = NULL;
       
   191 		}   
       
   192 
       
   193     TBuf<KAknStringBufferSize> criteria;
       
   194     iSearchField->GetSearchText( criteria );
       
   195     TInt length = criteria.Length();   
       
   196 	if( !iTextLimit || length < iTextLimit )
       
   197 	    {
       
   198 	    iGridChars = HBufC::NewL( aGridChars.Length() );
       
   199 	    iGridChars->Des().Copy( aGridChars );	
       
   200 	    iAdaptiveSearchGrid->SetButtonGridChars( aGridChars );	
       
   201 					
       
   202         // To do lower case for search pane
       
   203         iGridChars->Des().LowerCase();          
       
   204         iBlockFlag = EFalse;   	
       
   205 	    }
       
   206 	else
       
   207 	    {	    
       
   208 	    TPtrC nullText( KNullDesC );
       
   209 	    iAdaptiveSearchGrid->SetButtonGridChars( nullText );
       
   210 	    iBlockFlag = EFalse;   		
       
   211 	    }
       
   212 	_AKNTRACE_FUNC_EXIT;
       
   213    	}
       
   214 	    	    	
       
   215 // -----------------------------------------------------------------------------
       
   216 // For Devanagari AS
       
   217 // Checks if the last character entered is a Indic independent character.
       
   218 // @param aCh      - character to be checked  
       
   219 // @return ETrue if this is an independent character EFalse otherwise                        
       
   220 // -----------------------------------------------------------------------------
       
   221 inline TBool IsIndicIndependentChar( const TChar aCh )
       
   222 	{
       
   223 	if (( aCh >= 0x0905 && aCh <= 0x0939 ) || ( aCh >= 0x0958 && aCh <= 0x0961 ))
       
   224         {
       
   225         return ETrue;
       
   226         }
       
   227     else
       
   228         {
       
   229         return EFalse;
       
   230         }
       
   231 	}
       
   232 
       
   233 
       
   234 
       
   235 // -----------------------------------------------------------------------------
       
   236 // CAknAdaptiveSearch::ProcessCommandL
       
   237 // -----------------------------------------------------------------------------
       
   238 //
       
   239 void CAknAdaptiveSearch::ProcessCommandL( TInt aCommand )
       
   240 	{
       
   241 	_AKNTRACE_FUNC_ENTER;
       
   242 	 _AKNTRACE( "[%s][%s] Command ID: %d", "CAknAdaptiveSearch",
       
   243 	         __FUNCTION__, aCommand);
       
   244 	if( aCommand == CAknAdaptiveSearchGrid::ECloseGridPressed )
       
   245 		{
       
   246 		//hide grid
       
   247         HideAdaptiveSearchGridL();
       
   248 		iSearchField->MakeVisible( ETrue );	
       
   249 		iSearchField->SetFocus( ETrue );	
       
   250 	
       
   251 		}
       
   252     else if( aCommand == CAknAdaptiveSearchGrid::EDeleteLastCharPressed )
       
   253 		{
       
   254 		//do search text update
       
   255 		if( iSearchField )
       
   256 			{
       
   257 			TBuf<KAknStringBufferSize> criteria;
       
   258             if ( iSearchField->Editor().SelectionLength() > 0 )
       
   259                 {
       
   260                 iAdaptiveSearchGrid->SetSearchTextToFindPane( criteria );
       
   261                 iSearchField->SetSearchTextL( criteria );
       
   262                 iSearchField->HandleControlEventL( iSearchField, EEventStateChanged );
       
   263                 }
       
   264             else
       
   265                 {
       
   266                 iSearchField->GetSearchText( criteria );
       
   267                 }
       
   268 			TInt length = criteria.Length();
       
   269 			if( length > 0 )
       
   270 				{
       
   271 				// If Devanagari
       
   272 				if ( (criteria[length-1] == KLitHyphen) && length>1 && IsIndicIndependentChar(criteria[length-2]) )
       
   273 					{						
       
   274 					// First check if this is one of the four special ligatures, in which
       
   275 					// case, there will be a halant prior to 'criteria[length-2]'			
       
   276 					if ( (length > 3) && IsIndicHalantChar(criteria[length-3]) )
       
   277 					    {
       
   278 					    // hyphen should be removed along with the preceding 3 characters 
       
   279 					    criteria = criteria.Mid( 0, (length-4) ); 
       
   280 					    }
       
   281 					else
       
   282 					    {
       
   283 					    // normal Indic character - remove the preceding character.
       
   284 					    criteria = criteria.Mid( 0, (length-2) );
       
   285 					    }
       
   286 					}
       
   287 				else
       
   288 					{
       
   289 					criteria = criteria.Mid( 0, (length-1) );		
       
   290 					}					
       
   291 				// Update the AS search field first to be ready for redraw
       
   292 				iAdaptiveSearchGrid->SetSearchTextToFindPane( criteria );				
       
   293                 iSearchField->SetSearchTextL( criteria );   
       
   294                 iSearchField->HandleControlEventL( iSearchField, EEventStateChanged );      
       
   295 				iSearchField->SetFocus( EFalse );		        			
       
   296 				iSearchField->MakeVisible ( EFalse );
       
   297 				iAdaptiveSearchGrid->SetSearchTextToFindPane( criteria );	
       
   298 				iSearchField->DrawNow();
       
   299 				if( iAdaptiveSearchTextObserver )
       
   300 					{
       
   301 					iSearchField->SetLanguageChangedFlag( EFalse );
       
   302 					iAdaptiveSearchTextObserver->AdaptiveSearchTextChanged( iSearchField );		
       
   303 					}						
       
   304 				}
       
   305 			}
       
   306 		}
       
   307 	else if ( iBlockFlag == EFalse )
       
   308 	    {
       
   309 	    iBlockFlag = ETrue; 	       
       
   310         TBuf<KAknStringBufferSize> criteria;
       
   311         if ( iSearchField->Editor().SelectionLength() == 0 )
       
   312             {
       
   313             iSearchField->GetSearchText( criteria );            
       
   314             }
       
   315         // Check if Devanagari 
       
   316         TInt indicHalantPos( KErrNotFound );
       
   317         TInt gridCharsLength = iGridChars->Length();
       
   318         // Search for the first appearing halant character. 
       
   319         for ( TInt index = 1; index < gridCharsLength ; ++index )
       
   320             {
       
   321             if ( IsIndicHalantChar((*iGridChars)[index]) )
       
   322                 {
       
   323                 indicHalantPos = index;
       
   324                 break;
       
   325                 }
       
   326             }
       
   327         if ( indicHalantPos < 0 || aCommand < (indicHalantPos-1) )
       
   328             {
       
   329             // Western search
       
   330             criteria.Append( iGridChars->Mid(aCommand,1) );
       
   331             }
       
   332         else
       
   333             {
       
   334             // Devanagari search
       
   335             for ( TInt index = (indicHalantPos-1); index < gridCharsLength ; ++index )
       
   336                 {
       
   337                 if ( aCommand == index )
       
   338                     {
       
   339                     // check if this is an Indic special ligature
       
   340                     if ( index+1 < gridCharsLength && IsIndicHalantChar((*iGridChars)[index+1]) )
       
   341                         {
       
   342                         // append the next 2 characters as well to the search criteria
       
   343                         criteria.Append( iGridChars->Mid(index,3) );
       
   344                         }
       
   345                     else
       
   346                         {
       
   347                         // send just the one character
       
   348                         criteria.Append( iGridChars->Mid(index,1) );
       
   349                         }
       
   350                     break;
       
   351                     }
       
   352                 } // for
       
   353              }            
       
   354         TInt length = criteria.Length();  
       
   355         // If Devanagri Append the placeholder for dependent vowels 
       
   356     	if ( IsIndicIndependentChar( criteria[length-1] ) )
       
   357         	criteria.Append( KLitHyphen );
       
   358         	
       
   359       	// Update the AS search field first to be ready for redraw
       
   360         iAdaptiveSearchGrid->SetSearchTextToFindPane( criteria );       
       
   361         iSearchField->SetSearchTextL( criteria );   
       
   362         iSearchField->HandleControlEventL( iSearchField, EEventStateChanged );      
       
   363     	iSearchField->SetFocus( EFalse );    	
       
   364     	iSearchField->MakeVisible ( EFalse );
       
   365         iSearchField->DrawNow();
       
   366         if( iAdaptiveSearchTextObserver )
       
   367         	{
       
   368         	iSearchField->SetLanguageChangedFlag( EFalse );
       
   369         	iAdaptiveSearchTextObserver->AdaptiveSearchTextChanged( iSearchField );	
       
   370 	        }
       
   371 	    }
       
   372 	_AKNTRACE_FUNC_EXIT;
       
   373 	}
       
   374 	
       
   375 // -----------------------------------------------------------------------------
       
   376 // CAknAdaptiveSearch::SetSearchField
       
   377 // -----------------------------------------------------------------------------
       
   378 //	
       
   379 void CAknAdaptiveSearch::SetSearchField( CAknSearchField* aSearchField )
       
   380 	{
       
   381 	iSearchField = aSearchField; 
       
   382     iAdaptiveSearchGrid->SetMopParent( aSearchField );
       
   383 	}
       
   384 
       
   385 // -----------------------------------------------------------------------------
       
   386 // CAknAdaptiveSearch::ShowAdaptiveSearchGridL
       
   387 // Shows adaptive search grid.
       
   388 // -----------------------------------------------------------------------------
       
   389 //
       
   390 void CAknAdaptiveSearch::ShowAdaptiveSearchGridL()
       
   391 	{
       
   392 	if( !iAdaptiveSearchGrid->IsShown() )
       
   393         {
       
   394         iAdaptiveSearchGrid->ShowL();
       
   395         }
       
   396 	}
       
   397 
       
   398 // ----------------------------------------------------------------------------- 
       
   399 // CAknAdaptiveSearch::HandleNotifyInt
       
   400 // Check adaptive search availability from cenrep
       
   401 // -----------------------------------------------------------------------------
       
   402 //
       
   403 void CAknAdaptiveSearch::HandleNotifyInt( TUint32 aId, TInt /*aNewValue*/ )
       
   404     {
       
   405     _AKNTRACE( "[%s][%s] The input method for adaptive search: %d", 
       
   406                                "CAknAdaptiveSearch", __FUNCTION__, aId );
       
   407     if ( aId == KAknAdaptiveSearchLastChinese )
       
   408         {
       
   409         TRAP_IGNORE( iSearchField->HandleControlEventL(iSearchField, EEventStateChanged) );          	
       
   410         }
       
   411     if ( aId == KAknAdaptiveSearchChinesePRC )
       
   412         {
       
   413         TRAP_IGNORE( iSearchField->HandleControlEventL(iSearchField, EEventStateChanged) );  
       
   414         }   
       
   415     if ( aId == KAknAdaptiveSearchChineseTW )
       
   416         {
       
   417         TRAP_IGNORE( iSearchField->HandleControlEventL(iSearchField, EEventStateChanged) );  	
       
   418         }
       
   419     if ( aId == KAknAdaptiveSearchChineseHongkong )
       
   420        {
       
   421        TRAP_IGNORE( iSearchField->HandleControlEventL(iSearchField, EEventStateChanged) );  	
       
   422        }       
       
   423     if( iAdaptiveSearchTextObserver )
       
   424        {
       
   425        iSearchField->SetLanguageChangedFlag( ETrue ); 
       
   426        iAdaptiveSearchTextObserver->AdaptiveSearchTextChanged( iSearchField );
       
   427        }    
       
   428     }
       
   429     
       
   430 // -----------------------------------------------------------------------------
       
   431 // CAknAdaptiveSearch::HideAdaptiveSearchGrid
       
   432 // Hides adaptive search grid.
       
   433 // -----------------------------------------------------------------------------
       
   434 //
       
   435 void CAknAdaptiveSearch::HideAdaptiveSearchGridL()
       
   436 	{
       
   437 	_AKNTRACE_FUNC_ENTER;
       
   438 	if( iAdaptiveSearchGrid->IsShown() )
       
   439 	    {
       
   440         iAdaptiveSearchGrid->HideL();      
       
   441 	    }	
       
   442 	 _AKNTRACE_FUNC_EXIT;
       
   443 	}
       
   444 	
       
   445 // -----------------------------------------------------------------------------
       
   446 // CAknAdaptiveSearch::InvertAdaptiveSearchGridVisibility
       
   447 // Hides adaptive search grid if it shown, and shows if it is hide.
       
   448 // -----------------------------------------------------------------------------
       
   449 //	
       
   450 void CAknAdaptiveSearch::InvertAdaptiveSearchGridVisibilityL( TBool aSelectAll )
       
   451 	{
       
   452 	 _AKNTRACE_FUNC_ENTER;
       
   453 	// update the search text here if showing
       
   454 	TInt textLength = 0;
       
   455 	if( !iAdaptiveSearchGrid->IsShown() && &(iSearchField->Editor()) )
       
   456 	    {
       
   457 	    textLength = iSearchField->Editor().TextLength();
       
   458 	    HBufC* searchText = NULL;
       
   459 	    TPtrC finalText( KNullDesC );
       
   460 	    if( textLength > 0 )
       
   461 	        {
       
   462 	        TRAP_IGNORE( searchText = iSearchField->Editor().GetTextInHBufL() );
       
   463     	    if( searchText )
       
   464     	        {
       
   465     	        finalText.Set( *searchText ); // set the value
       
   466     	           _AKNDEBUG(
       
   467     	                    _LIT( KClassName, "CAknAdaptiveSearch" );
       
   468     	                    _LIT( KFunctionName, "InvertAdaptiveSearchGridVisibilityL" );
       
   469     	                    _LIT( KFormat, "[%S][%S] Final text is: %S");
       
   470     	                    _AKNTRACE( KFormat, 
       
   471     	                    &KClassName, &KFunctionName, &finalText );
       
   472     	                    );
       
   473     	        }
       
   474 	        }	    
       
   475     	iAdaptiveSearchGrid->SetSearchTextToFindPane( finalText );    
       
   476     	if( searchText )
       
   477     	    {
       
   478     	    delete searchText;
       
   479     	    searchText = NULL;
       
   480     	    }
       
   481 	    }
       
   482 	TBool shown( !(iAdaptiveSearchGrid->IsShown()) );
       
   483 	if ( shown )
       
   484 	    {
       
   485 	    iSearchField->SetFocus( EFalse );	 
       
   486 	    iSearchField->MakeVisible( EFalse );   
       
   487 	    }
       
   488 	else
       
   489 	    {
       
   490 	    iSearchField->Editor().RemoveFlagFromUserFlags( CEikEdwin::EAvkonDisableVKB );
       
   491 	    iSearchField->MakeVisible( ETrue );      
       
   492 	    iSearchField->SetFocus( ETrue );	         
       
   493 	    }
       
   494     iAdaptiveSearchGrid->SetVisibilityL( shown, aSelectAll );
       
   495     _AKNTRACE_FUNC_EXIT;
       
   496 	}
       
   497 
       
   498 // -----------------------------------------------------------------------------
       
   499 // CAknAdaptiveSearch::AddAdaptiveSearchTextObserverL
       
   500 // Adds an adaptive search text observer.
       
   501 // -----------------------------------------------------------------------------
       
   502 // 
       
   503 void CAknAdaptiveSearch::AddAdaptiveSearchTextObserverL( MAdaptiveSearchTextObserver* aObserver )
       
   504 	{
       
   505 	iAdaptiveSearchTextObserver = aObserver;  	
       
   506 	}
       
   507 
       
   508 // -----------------------------------------------------------------------------
       
   509 // CAknAdaptiveSearch::RemoveAdaptiveSearchTextObserver
       
   510 // Removes an adaptive search text observer. 
       
   511 // -----------------------------------------------------------------------------
       
   512 //
       
   513 TBool CAknAdaptiveSearch::RemoveAdaptiveSearchTextObserver( MAdaptiveSearchTextObserver* aObserver )
       
   514 	{
       
   515 	if( iAdaptiveSearchTextObserver == aObserver )
       
   516 		{
       
   517 		iAdaptiveSearchTextObserver = NULL;
       
   518 		return ETrue;
       
   519 		}
       
   520 	else
       
   521 		{
       
   522 		return EFalse;
       
   523 		}
       
   524 	}
       
   525 
       
   526 // -----------------------------------------------------------------------------
       
   527 // CAknAdaptiveSearch::UpdateGridSkinL()
       
   528 // Update adaptive search grid skin, since it can't recieve any messages
       
   529 // if it is hidden.
       
   530 // -----------------------------------------------------------------------------
       
   531 //
       
   532 void CAknAdaptiveSearch::UpdateGridSkinL()
       
   533 	{
       
   534 	// only update its skin when it is hidden.
       
   535 	if (iAdaptiveSearchGrid && !iAdaptiveSearchGrid->IsShown())
       
   536 		{
       
   537 		iAdaptiveSearchGrid->HandleResourceChange(KAknsMessageSkinChange);
       
   538 		}
       
   539 	}
       
   540 
       
   541 
       
   542 // -----------------------------------------------------------------------------
       
   543 // CCAknAdaptiveSearch::SaveFindPaneRect()
       
   544 // When the rect of find pane is set, this functions will be notified
       
   545 // to record the size of it.
       
   546 // -----------------------------------------------------------------------------
       
   547 //
       
   548 void CAknAdaptiveSearch::SaveFindPaneRect( const TRect &aRect )
       
   549     {
       
   550     iAdaptiveSearchGrid->SaveFindPaneRect( aRect );
       
   551     }
       
   552 
       
   553 // End of File
       
   554