uiservicetab/vimpstui/src/cvimpstuisearchquerydialog.cpp
branchRCL_3
changeset 28 3104fc151679
parent 27 2b7283837edb
child 29 9a48e301e94b
equal deleted inserted replaced
27:2b7283837edb 28:3104fc151679
     1 /*
       
     2 * Copyright (c) 2008 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:  search fields editor implementation 
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 // INCLUDE FILES
       
    20 #include "cvimpstuisearchquerydialog.h"
       
    21 
       
    22 #include "cvimpstuisearchfieldaray.h"
       
    23 #include "vimpstui.hrh"
       
    24 #include "vimpstutils.h"
       
    25 // resource
       
    26 #include <vimpstuires.rsg>
       
    27 
       
    28 // System includes
       
    29 #include <akntitle.h>
       
    30 #include <aknnavi.h>
       
    31 #include <StringLoader.h>
       
    32 #include <eikcapc.h>
       
    33 #include <barsread.h>
       
    34 #include <aknnotewrappers.h>
       
    35 #include <hlplch.h>
       
    36 #include "uiservicetabtracer.h"
       
    37 
       
    38 
       
    39 
       
    40 // --------------------------------------------------------------------------
       
    41 // CVIMPSTUiSearchQueryDialog::CVIMPSTUiSearchQueryDialog
       
    42 // --------------------------------------------------------------------------
       
    43 //
       
    44 CVIMPSTUiSearchQueryDialog::CVIMPSTUiSearchQueryDialog(CVIMPSTUiSearchFieldArray& aUiFieldArray )
       
    45 	: iUiFieldArray( aUiFieldArray )
       
    46     {
       
    47     }
       
    48 
       
    49 // --------------------------------------------------------------------------
       
    50 // CVIMPSTUiSearchQueryDialog::~CVIMPSTUiSearchQueryDialog
       
    51 // --------------------------------------------------------------------------
       
    52 //
       
    53 CVIMPSTUiSearchQueryDialog::~CVIMPSTUiSearchQueryDialog()
       
    54 	{
       
    55 	// Restore the titlepane text
       
    56 	if (iTitlePane && iStoredTitlePaneText)
       
    57 		{
       
    58 		// iTitlePane takes ownership of iStoredTitlePaneText
       
    59 		TRAP_IGNORE( iTitlePane->SetTextL( iStoredTitlePaneText->Des() ) );
       
    60 		delete iStoredTitlePaneText;
       
    61 		}
       
    62 	 // Remove empty status pane
       
    63     if (iNaviContainer)
       
    64         {
       
    65         iNaviContainer->Pop();
       
    66         }
       
    67 
       
    68 	}
       
    69 
       
    70 
       
    71 // --------------------------------------------------------------------------
       
    72 // CVIMPSTUiSearchQueryDialog::NewL
       
    73 // --------------------------------------------------------------------------
       
    74 //
       
    75 CVIMPSTUiSearchQueryDialog* CVIMPSTUiSearchQueryDialog::NewL(CVIMPSTUiSearchFieldArray& aUiFieldArray )
       
    76     {
       
    77     CVIMPSTUiSearchQueryDialog* self =
       
    78         new ( ELeave ) CVIMPSTUiSearchQueryDialog(aUiFieldArray);
       
    79     CleanupStack::PushL(self);
       
    80     self->ConstructL();
       
    81     CleanupStack::Pop(self);
       
    82     return self;
       
    83     }
       
    84 
       
    85 
       
    86 // --------------------------------------------------------------------------
       
    87 // CVIMPSTUiSearchQueryDialog::ConstructL
       
    88 // --------------------------------------------------------------------------
       
    89 //
       
    90 void CVIMPSTUiSearchQueryDialog::ConstructL()
       
    91     {
       
    92 	TRACER_AUTO;
       
    93     CAknDialog::ConstructL(R_SEARCH_EDITOR_MENUBAR);
       
    94     
       
    95     StoreTitlePaneTextL();
       
    96    
       
    97     ConstructNaviPaneL();
       
    98     
       
    99     iSearchType = iUiFieldArray.GetSearchType();
       
   100   
       
   101   	if( !IsBasicFieldAvailableL() )
       
   102 	  	{
       
   103 	  	iSearchType = EIMAdvancedSearch ;
       
   104 	  	iUiFieldArray.SetSearchType( EIMAdvancedSearch );	
       
   105 	  	}
       
   106 	}
       
   107 
       
   108 // --------------------------------------------------------------------------
       
   109 // CVIMPSTUiSearchQueryDialog::ExecuteLD
       
   110 // --------------------------------------------------------------------------
       
   111 //
       
   112 void CVIMPSTUiSearchQueryDialog::ExecuteLD()
       
   113     {
       
   114 	TRACER_AUTO;
       
   115     CleanupStack::PushL( this );
       
   116 
       
   117     // Set status pane layout to the Phonebook 2 one
       
   118     CEikStatusPane* statusPane = iAvkonAppUi->StatusPane();
       
   119     if (statusPane)
       
   120         {
       
   121         statusPane->SwitchLayoutL(R_AVKON_STATUS_PANE_LAYOUT_USUAL);
       
   122         }
       
   123     CleanupStack::Pop( this );
       
   124 
       
   125     CAknForm::ExecuteLD(R_SEARCH_ENTRY_DIALOG);
       
   126     }
       
   127 
       
   128 // --------------------------------------------------------------------------
       
   129 // CVIMPSTUiSearchQueryDialog::OfferKeyEventL
       
   130 // --------------------------------------------------------------------------
       
   131 //
       
   132 TKeyResponse CVIMPSTUiSearchQueryDialog::OfferKeyEventL
       
   133         ( const TKeyEvent& aKeyEvent, TEventCode aType )
       
   134     {
       
   135 	TRACER_AUTO;
       
   136     TKeyResponse ret(EKeyWasNotConsumed);
       
   137  
       
   138     ret = CAknForm::OfferKeyEventL( aKeyEvent, aType );
       
   139     isEndKeyPressed = ETrue;
       
   140     if ( ret == EKeyWasConsumed && aKeyEvent.iCode != EKeyEscape )
       
   141         {
       
   142         isEndKeyPressed = EFalse;
       
   143         UpdateCbasL();
       
   144         }
       
   145     return ret;
       
   146     }
       
   147 
       
   148 
       
   149 // --------------------------------------------------------------------------
       
   150 // CVIMPSTUiSearchQueryDialog::PreLayoutDynInitL
       
   151 // --------------------------------------------------------------------------
       
   152 //
       
   153 void CVIMPSTUiSearchQueryDialog::PreLayoutDynInitL()
       
   154     {
       
   155     SetEditableL(ETrue);
       
   156 
       
   157     iUiFieldArray.CreateUiFieldsFromArrayL( *this );
       
   158     
       
   159     ShowSearchUiFieldsL();
       
   160     
       
   161     }
       
   162 
       
   163 // --------------------------------------------------------------------------
       
   164 // CVIMPSTUiSearchQueryDialog::PostLayoutDynInitL
       
   165 // --------------------------------------------------------------------------
       
   166 //
       
   167 void CVIMPSTUiSearchQueryDialog::PostLayoutDynInitL()
       
   168     {
       
   169     UpdateTitleL();
       
   170     }
       
   171 // --------------------------------------------------------------------------
       
   172 // CVIMPSTUiSearchQueryDialog::SetInitialCurrentLineL
       
   173 // --------------------------------------------------------------------------
       
   174 //
       
   175 void CVIMPSTUiSearchQueryDialog::SetInitialCurrentLineL()
       
   176     {
       
   177    	ActivateFirstPageL();
       
   178   
       
   179     CAknForm::SetInitialCurrentLine();
       
   180     
       
   181     iUiFieldArray.SetFocusL(0);
       
   182        
       
   183     }
       
   184 
       
   185 // --------------------------------------------------------------------------
       
   186 // CVIMPSTUiSearchQueryDialog::OkToExitL
       
   187 // --------------------------------------------------------------------------
       
   188 //
       
   189 TBool CVIMPSTUiSearchQueryDialog::OkToExitL( TInt aKeycode )
       
   190     {
       
   191 	TRACER_AUTO;
       
   192    TBool ret = EFalse;
       
   193    switch( aKeycode )
       
   194 	   {
       
   195 	   	case EAknSoftkeyEmpty :
       
   196 		   	{
       
   197 		   	ret = EFalse; 
       
   198 		   	break;	
       
   199 		   	}
       
   200 	   	case EEikCmdExit :
       
   201 	   	case EAknSoftkeyExit :
       
   202 	   	case EAknSoftkeyCancel :
       
   203 		   	{
       
   204 		   	ret = ETrue; 
       
   205 		   	break;	
       
   206 		   	}
       
   207 		case EAknSoftkeyDone :
       
   208 	   	case EAknSoftkeyOk :
       
   209 		   	{
       
   210 		   	CmdDoneL( );
       
   211 			ret = ETrue; 
       
   212 		   	break;	
       
   213 		   	}
       
   214 		   	
       
   215 		case EBasicSearch :
       
   216 		   	{
       
   217 		   	iSearchType = EIMBasicSearch;
       
   218 		   	ShowSearchUiFieldsL();
       
   219 		   	UpdateTitleL();
       
   220 		   	ret = EFalse; 
       
   221 		   	break;	
       
   222 		   	}
       
   223 		case EAdvancedSearch :
       
   224 		   	{
       
   225 		   	iSearchType = EIMAdvancedSearch ;
       
   226 		   	ShowSearchUiFieldsL();
       
   227 		   	UpdateTitleL();
       
   228 		   	ret = EFalse; 
       
   229 		   	break;	
       
   230 		   	}
       
   231 	   	default :
       
   232 		   	{
       
   233 		   	ret = CAknForm::OkToExitL( aKeycode ) ;	
       
   234 		   	}
       
   235 	   }
       
   236 	iUiFieldArray.SetSearchType( iSearchType );
       
   237     UpdateCbasL();
       
   238     return ret;
       
   239     }
       
   240 
       
   241 // --------------------------------------------------------------------------
       
   242 // CVIMPSTUiSearchQueryDialog::CreateLineL
       
   243 // --------------------------------------------------------------------------
       
   244 //
       
   245 CCoeControl* CVIMPSTUiSearchQueryDialog::CreateLineL
       
   246         ( const TDesC& aCaption, TInt aControlId, TInt aControlType )
       
   247     {
       
   248     return CreateLineByTypeL( aCaption, aControlId, aControlType, NULL );
       
   249     }
       
   250 
       
   251    
       
   252 // --------------------------------------------------------------------------
       
   253 // CVIMPSTUiSearchQueryDialog::LineControl
       
   254 // --------------------------------------------------------------------------
       
   255 //
       
   256 CEikCaptionedControl* CVIMPSTUiSearchQueryDialog::LineControl
       
   257         ( TInt aControlId ) const
       
   258     {
       
   259     return Line( aControlId );
       
   260     }
       
   261 
       
   262 // --------------------------------------------------------------------------
       
   263 // CVIMPSTUiSearchQueryDialog::SetEditableL
       
   264 // --------------------------------------------------------------------------
       
   265 //
       
   266 void CVIMPSTUiSearchQueryDialog::SetEditableL( TBool aState )
       
   267     {
       
   268     CAknForm::SetEditableL( aState );
       
   269     }
       
   270 
       
   271 // --------------------------------------------------------------------------
       
   272 // CVIMPSTUiSearchQueryDialog::AreAllControlsEmptyL
       
   273 // --------------------------------------------------------------------------
       
   274 //
       
   275 TBool CVIMPSTUiSearchQueryDialog::AreAllControlsEmptyL() const
       
   276     {
       
   277     // before saving entered data 
       
   278     return iUiFieldArray.AreAllUiControlsEmptyL();
       
   279     }
       
   280 
       
   281 // --------------------------------------------------------------------------
       
   282 // CVIMPSTUiSearchQueryDialog::ConstructContextMenuL
       
   283 // --------------------------------------------------------------------------
       
   284 //
       
   285 inline void CVIMPSTUiSearchQueryDialog::ConstructContextMenuL()
       
   286     {
       
   287 	TRACER_AUTO;
       
   288     CEikMenuBar* newMenuBar = new ( ELeave ) CEikMenuBar();
       
   289     CleanupStack::PushL( newMenuBar );
       
   290     newMenuBar->ConstructL
       
   291         ( this, NULL, R_SEARCH_EDITOR_CONTEXT_MENUBAR );
       
   292     iEikonEnv->EikAppUi()->AddToStackL( newMenuBar, ECoeStackPriorityMenu,
       
   293         ECoeStackFlagRefusesFocus );
       
   294     iContextMenuBar = newMenuBar;
       
   295     CleanupStack::Pop( newMenuBar );
       
   296     }
       
   297 
       
   298 // --------------------------------------------------------------------------
       
   299 // CVIMPSTUiSearchQueryDialog::ConstructNaviPaneL
       
   300 // --------------------------------------------------------------------------
       
   301 //
       
   302 inline void CVIMPSTUiSearchQueryDialog::ConstructNaviPaneL()
       
   303     {
       
   304 	TRACER_AUTO;
       
   305     CEikStatusPane* statusPane = iEikonEnv->AppUiFactory()->StatusPane();
       
   306     if (statusPane && statusPane->PaneCapabilities
       
   307             ( TUid::Uid( EEikStatusPaneUidNavi ) ).IsPresent() )
       
   308         {
       
   309         // Create a default empty status pane, otherwise sync field will show
       
   310         iNaviContainer = static_cast<CAknNavigationControlContainer *>
       
   311             ( statusPane->ControlL( TUid::Uid( EEikStatusPaneUidNavi ) ) );
       
   312         iNaviContainer->PushDefaultL();
       
   313         }
       
   314     }
       
   315 
       
   316 // --------------------------------------------------------------------------
       
   317 // CVIMPSTUiSearchQueryDialog::UpdateTitleL
       
   318 // --------------------------------------------------------------------------
       
   319 //
       
   320 void CVIMPSTUiSearchQueryDialog::UpdateTitleL()
       
   321 	{
       
   322 	if (iTitlePane)
       
   323 		{ 
       
   324 		HBufC* titleText = NULL;
       
   325 		if( iSearchType == EIMBasicSearch )
       
   326 			{
       
   327 		    titleText =  VIMPSTUtils::LoadResourceL( R_QTN_SERVTAB_SEARCH_BASIC ); 		
       
   328 			iTitlePane->SetTextL( *titleText );
       
   329 			}
       
   330 		else
       
   331 			{
       
   332 			titleText =  VIMPSTUtils::LoadResourceL( R_QTN_SERVTAB_SEARCH_ADVANCED ); 
       
   333 			iTitlePane->SetTextL( *titleText);
       
   334 			}
       
   335 		delete titleText;
       
   336 		DrawNow();
       
   337 		}
       
   338 
       
   339 	}
       
   340 
       
   341 // --------------------------------------------------------------------------
       
   342 // CVIMPSTUiSearchQueryDialog::CmdDoneL
       
   343 // --------------------------------------------------------------------------
       
   344 //
       
   345 void CVIMPSTUiSearchQueryDialog::CmdDoneL( )
       
   346     {
       
   347     TInt count = iUiFieldArray.Count();
       
   348     for( TInt i = 0; i< count ; i++ )
       
   349 	    {
       
   350 	    HBufC* data = iUiFieldArray.At(i).ControlTextL() ;	
       
   351 	    if(data)
       
   352 		    {
       
   353 		    iUiFieldArray.At(i).SetFieldDataL( *data )	;
       
   354 		    delete data;
       
   355 		    }
       
   356 	    }
       
   357     }
       
   358 
       
   359 // --------------------------------------------------------------------------
       
   360 // CVIMPSTUiSearchQueryDialog::TryChangeFocusL
       
   361 // --------------------------------------------------------------------------
       
   362 //    
       
   363 void CVIMPSTUiSearchQueryDialog::TryChangeFocusL(
       
   364     TInt aControlId )
       
   365 	{
       
   366 	if ( ControlOrNull( aControlId ) )
       
   367         {
       
   368         TryChangeFocusToL( aControlId );
       
   369         }	
       
   370 	}
       
   371 // --------------------------------------------------------------------------
       
   372 // CVIMPSTUiSearchQueryDialog::SetCurrentLineCaptionL
       
   373 // --------------------------------------------------------------------------
       
   374 //    
       
   375 void CVIMPSTUiSearchQueryDialog::SetCurrentLineCaptionL(
       
   376     const TDesC& aText )
       
   377 	{
       
   378 	SetControlCaptionL(IdOfFocusControl(), aText);	
       
   379 	}
       
   380 // --------------------------------------------------------------------------
       
   381 // CVIMPSTUiSearchQueryDialog::Control
       
   382 // --------------------------------------------------------------------------
       
   383 //    
       
   384 CCoeControl* CVIMPSTUiSearchQueryDialog::Control(
       
   385     TInt aControlId ) const
       
   386 	    {
       
   387 	    return ControlOrNull(aControlId);	
       
   388 	    }
       
   389 // --------------------------------------------------------------------------
       
   390 // CVIMPSTUiSearchQueryDialog::StoreTitlePaneTextL
       
   391 // --------------------------------------------------------------------------
       
   392 //
       
   393 inline void CVIMPSTUiSearchQueryDialog::StoreTitlePaneTextL()
       
   394     {
       
   395     CEikStatusPane* statusPane = iEikonEnv->AppUiFactory()->StatusPane();
       
   396     if (statusPane && statusPane->PaneCapabilities(
       
   397         TUid::Uid(EEikStatusPaneUidTitle)).IsPresent())
       
   398         {
       
   399         iTitlePane = static_cast<CAknTitlePane*>
       
   400             (statusPane->ControlL(TUid::Uid(EEikStatusPaneUidTitle)));
       
   401         if (iTitlePane->Text())
       
   402             {
       
   403             iStoredTitlePaneText = iTitlePane->Text()->AllocL();
       
   404             }
       
   405         }
       
   406     }
       
   407     
       
   408 
       
   409 // --------------------------------------------------------------------------
       
   410 // CVIMPSTUiSearchQueryDialog::UpdateCbasL
       
   411 // --------------------------------------------------------------------------
       
   412 //    
       
   413 void CVIMPSTUiSearchQueryDialog::UpdateCbasL()
       
   414     {
       
   415 	TRACER_AUTO;
       
   416     if ( !AreAllControlsEmptyL() )
       
   417         {
       
   418         if ( iCbaCommandSet != R_AVKON_SOFTKEYS_OK_CANCEL__OK )
       
   419             {
       
   420             SetCbaCommandSetL( R_AVKON_SOFTKEYS_OK_CANCEL__OK  );   
       
   421             } 
       
   422          }
       
   423      else 
       
   424         {
       
   425         if( iSearchType == EIMBasicSearch && iCbaCommandSet != R_SEARCH_SOFTKEYS_ADVANCED_CANCEL__EDIT )
       
   426 			{
       
   427 			SetCbaCommandSetL( R_SEARCH_SOFTKEYS_ADVANCED_CANCEL__EDIT  );   
       
   428 			}    	
       
   429         else if( iSearchType == EIMAdvancedSearch && iCbaCommandSet != R_SEARCH_SOFTKEYS_BASIC_CANCEL__EDIT )
       
   430 	        {
       
   431 	        SetCbaCommandSetL( R_SEARCH_SOFTKEYS_BASIC_CANCEL__EDIT  ); 	
       
   432 	        }  
       
   433         }
       
   434    
       
   435     }
       
   436 
       
   437 // --------------------------------------------------------------------------
       
   438 // CVIMPSTUiSearchQueryDialog::SetCbaCommandSetL
       
   439 // --------------------------------------------------------------------------
       
   440 //    
       
   441 void CVIMPSTUiSearchQueryDialog::SetCbaCommandSetL( TInt aResourceId )
       
   442     {
       
   443 	TRACER_AUTO;
       
   444     CEikButtonGroupContainer& cba = ButtonGroupContainer();
       
   445     cba.SetCommandSetL( aResourceId );
       
   446     iCbaCommandSet = aResourceId;
       
   447     cba.DrawDeferred();
       
   448     }  
       
   449 // --------------------------------------------------------------------------
       
   450 // CVIMPSTUiSearchQueryDialog::SetLineDimmed
       
   451 // --------------------------------------------------------------------------
       
   452 //    
       
   453 void CVIMPSTUiSearchQueryDialog::SetLineDimmed(
       
   454     				TInt aControlId , TBool aDimmed) 
       
   455     {
       
   456     SetLineDimmedNow(aControlId, aDimmed);	
       
   457     }
       
   458 // --------------------------------------------------------------------------
       
   459 // CVIMPSTUiSearchQueryDialog::ShowSearchUiFieldsL
       
   460 // --------------------------------------------------------------------------
       
   461 //
       
   462 void CVIMPSTUiSearchQueryDialog::ShowSearchUiFieldsL()
       
   463     {
       
   464 	TRACER_AUTO;
       
   465     TInt count = iUiFieldArray.Count();
       
   466     for( TInt i = 0; i< count; i++ )
       
   467 	    {
       
   468 	    MVIMPSTUiSearchField& field = iUiFieldArray.At(i);
       
   469 	    if( iSearchType == EIMBasicSearch )
       
   470 		    {
       
   471 		    if( !field.IsBasicField() )
       
   472 			    {
       
   473 			    SetLineDimmed( field.ControlId(), ETrue );	
       
   474 			    }
       
   475 		    }
       
   476 		else 
       
   477 			{
       
   478 			 SetLineDimmed( field.ControlId(), EFalse );	
       
   479 			}
       
   480 	    }
       
   481 	SetInitialCurrentLineL();
       
   482     UpdateCbasL();
       
   483     }
       
   484    
       
   485 // --------------------------------------------------------------------------
       
   486 // CVIMPSTUiSearchQueryDialog::IsBasicFieldAvailableL
       
   487 // --------------------------------------------------------------------------
       
   488 //
       
   489 TBool CVIMPSTUiSearchQueryDialog::IsBasicFieldAvailableL()
       
   490     {
       
   491 	TRACER_AUTO;
       
   492     TInt count = iUiFieldArray.Count();
       
   493     for( TInt i = 0; i< count; i++ )
       
   494 	    {
       
   495 	    MVIMPSTUiSearchField& field = iUiFieldArray.At(i);
       
   496 	    if( field.IsBasicField() )
       
   497 		    {
       
   498 		    return ETrue;	
       
   499 		    }
       
   500 	    }
       
   501 	return EFalse;
       
   502     } 
       
   503 
       
   504 // --------------------------------------------------------------------------
       
   505 // CVIMPSTUiSearchQueryDialog::IsEndKeyPressed()
       
   506 // --------------------------------------------------------------------------
       
   507 //
       
   508 TBool CVIMPSTUiSearchQueryDialog::IsEndKeyPressed()
       
   509     {
       
   510     return isEndKeyPressed;
       
   511     } 
       
   512 // End of File