uiservicetab/vimpstui/src/cvimpstuisearchquerydialog.cpp
changeset 0 5e5d6b214f4f
child 9 9fdee5e1da30
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/uiservicetab/vimpstui/src/cvimpstuisearchquerydialog.cpp	Tue Feb 02 10:12:18 2010 +0200
@@ -0,0 +1,501 @@
+/*
+* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  search fields editor implementation 
+*
+*/
+
+
+// INCLUDE FILES
+#include "cvimpstuisearchquerydialog.h"
+
+#include "cvimpstuisearchfieldaray.h"
+#include "vimpstui.hrh"
+#include "vimpstutils.h"
+// resource
+#include <vimpstuires.rsg>
+
+// System includes
+#include <akntitle.h>
+#include <aknnavi.h>
+#include <StringLoader.h>
+#include <eikcapc.h>
+#include <barsread.h>
+#include <aknnotewrappers.h>
+#include <hlplch.h>
+
+
+
+// --------------------------------------------------------------------------
+// CVIMPSTUiSearchQueryDialog::CVIMPSTUiSearchQueryDialog
+// --------------------------------------------------------------------------
+//
+CVIMPSTUiSearchQueryDialog::CVIMPSTUiSearchQueryDialog(CVIMPSTUiSearchFieldArray& aUiFieldArray )
+	: iUiFieldArray( aUiFieldArray )
+    {
+    }
+
+// --------------------------------------------------------------------------
+// CVIMPSTUiSearchQueryDialog::~CVIMPSTUiSearchQueryDialog
+// --------------------------------------------------------------------------
+//
+CVIMPSTUiSearchQueryDialog::~CVIMPSTUiSearchQueryDialog()
+	{
+	// Restore the titlepane text
+	if (iTitlePane && iStoredTitlePaneText)
+		{
+		// iTitlePane takes ownership of iStoredTitlePaneText
+		TRAP_IGNORE( iTitlePane->SetTextL( iStoredTitlePaneText->Des() ) );
+		delete iStoredTitlePaneText;
+		}
+	 // Remove empty status pane
+    if (iNaviContainer)
+        {
+        iNaviContainer->Pop();
+        }
+
+	}
+
+
+// --------------------------------------------------------------------------
+// CVIMPSTUiSearchQueryDialog::NewL
+// --------------------------------------------------------------------------
+//
+CVIMPSTUiSearchQueryDialog* CVIMPSTUiSearchQueryDialog::NewL(CVIMPSTUiSearchFieldArray& aUiFieldArray )
+    {
+    CVIMPSTUiSearchQueryDialog* self =
+        new ( ELeave ) CVIMPSTUiSearchQueryDialog(aUiFieldArray);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+
+// --------------------------------------------------------------------------
+// CVIMPSTUiSearchQueryDialog::ConstructL
+// --------------------------------------------------------------------------
+//
+void CVIMPSTUiSearchQueryDialog::ConstructL()
+    {
+    CAknDialog::ConstructL(R_SEARCH_EDITOR_MENUBAR);
+    
+    StoreTitlePaneTextL();
+   
+    ConstructNaviPaneL();
+    
+    iSearchType = iUiFieldArray.GetSearchType();
+  
+  	if( !IsBasicFieldAvailableL() )
+	  	{
+	  	iSearchType = EIMAdvancedSearch ;
+	  	iUiFieldArray.SetSearchType( EIMAdvancedSearch );	
+	  	}
+	}
+
+// --------------------------------------------------------------------------
+// CVIMPSTUiSearchQueryDialog::ExecuteLD
+// --------------------------------------------------------------------------
+//
+void CVIMPSTUiSearchQueryDialog::ExecuteLD()
+    {
+    CleanupStack::PushL( this );
+
+    // Set status pane layout to the Phonebook 2 one
+    CEikStatusPane* statusPane = iAvkonAppUi->StatusPane();
+    if (statusPane)
+        {
+        statusPane->SwitchLayoutL(R_AVKON_STATUS_PANE_LAYOUT_USUAL);
+        }
+    CleanupStack::Pop( this );
+
+    CAknForm::ExecuteLD(R_SEARCH_ENTRY_DIALOG);
+    }
+
+// --------------------------------------------------------------------------
+// CVIMPSTUiSearchQueryDialog::OfferKeyEventL
+// --------------------------------------------------------------------------
+//
+TKeyResponse CVIMPSTUiSearchQueryDialog::OfferKeyEventL
+        ( const TKeyEvent& aKeyEvent, TEventCode aType )
+    {
+    TKeyResponse ret(EKeyWasNotConsumed);
+ 
+    ret = CAknForm::OfferKeyEventL( aKeyEvent, aType );
+    isEndKeyPressed = ETrue;
+    if ( ret == EKeyWasConsumed && aKeyEvent.iCode != EKeyEscape )
+        {
+        isEndKeyPressed = EFalse;
+        UpdateCbasL();
+        }
+    return ret;
+    }
+
+
+// --------------------------------------------------------------------------
+// CVIMPSTUiSearchQueryDialog::PreLayoutDynInitL
+// --------------------------------------------------------------------------
+//
+void CVIMPSTUiSearchQueryDialog::PreLayoutDynInitL()
+    {
+    SetEditableL(ETrue);
+
+    iUiFieldArray.CreateUiFieldsFromArrayL( *this );
+    
+    ShowSearchUiFieldsL();
+    
+    }
+
+// --------------------------------------------------------------------------
+// CVIMPSTUiSearchQueryDialog::PostLayoutDynInitL
+// --------------------------------------------------------------------------
+//
+void CVIMPSTUiSearchQueryDialog::PostLayoutDynInitL()
+    {
+    UpdateTitleL();
+    }
+// --------------------------------------------------------------------------
+// CVIMPSTUiSearchQueryDialog::SetInitialCurrentLineL
+// --------------------------------------------------------------------------
+//
+void CVIMPSTUiSearchQueryDialog::SetInitialCurrentLineL()
+    {
+   	ActivateFirstPageL();
+  
+    CAknForm::SetInitialCurrentLine();
+    
+    iUiFieldArray.SetFocusL(0);
+       
+    }
+
+// --------------------------------------------------------------------------
+// CVIMPSTUiSearchQueryDialog::OkToExitL
+// --------------------------------------------------------------------------
+//
+TBool CVIMPSTUiSearchQueryDialog::OkToExitL( TInt aKeycode )
+    {
+   TBool ret = EFalse;
+   switch( aKeycode )
+	   {
+	   	case EAknSoftkeyEmpty :
+		   	{
+		   	ret = EFalse; 
+		   	break;	
+		   	}
+	   	case EEikCmdExit :
+	   	case EAknSoftkeyExit :
+	   	case EAknSoftkeyCancel :
+		   	{
+		   	ret = ETrue; 
+		   	break;	
+		   	}
+		case EAknSoftkeyDone :
+	   	case EAknSoftkeyOk :
+		   	{
+		   	CmdDoneL( );
+			ret = ETrue; 
+		   	break;	
+		   	}
+		   	
+		case EBasicSearch :
+		   	{
+		   	iSearchType = EIMBasicSearch;
+		   	ShowSearchUiFieldsL();
+		   	UpdateTitleL();
+		   	ret = EFalse; 
+		   	break;	
+		   	}
+		case EAdvancedSearch :
+		   	{
+		   	iSearchType = EIMAdvancedSearch ;
+		   	ShowSearchUiFieldsL();
+		   	UpdateTitleL();
+		   	ret = EFalse; 
+		   	break;	
+		   	}
+	   	default :
+		   	{
+		   	ret = CAknForm::OkToExitL( aKeycode ) ;	
+		   	}
+	   }
+	iUiFieldArray.SetSearchType( iSearchType );
+    UpdateCbasL();
+    return ret;
+    }
+
+// --------------------------------------------------------------------------
+// CVIMPSTUiSearchQueryDialog::CreateLineL
+// --------------------------------------------------------------------------
+//
+CCoeControl* CVIMPSTUiSearchQueryDialog::CreateLineL
+        ( const TDesC& aCaption, TInt aControlId, TInt aControlType )
+    {
+    return CreateLineByTypeL( aCaption, aControlId, aControlType, NULL );
+    }
+
+   
+// --------------------------------------------------------------------------
+// CVIMPSTUiSearchQueryDialog::LineControl
+// --------------------------------------------------------------------------
+//
+CEikCaptionedControl* CVIMPSTUiSearchQueryDialog::LineControl
+        ( TInt aControlId ) const
+    {
+    return Line( aControlId );
+    }
+
+// --------------------------------------------------------------------------
+// CVIMPSTUiSearchQueryDialog::SetEditableL
+// --------------------------------------------------------------------------
+//
+void CVIMPSTUiSearchQueryDialog::SetEditableL( TBool aState )
+    {
+    CAknForm::SetEditableL( aState );
+    }
+
+// --------------------------------------------------------------------------
+// CVIMPSTUiSearchQueryDialog::AreAllControlsEmptyL
+// --------------------------------------------------------------------------
+//
+TBool CVIMPSTUiSearchQueryDialog::AreAllControlsEmptyL() const
+    {
+    // before saving entered data 
+    return iUiFieldArray.AreAllUiControlsEmptyL();
+    }
+
+// --------------------------------------------------------------------------
+// CVIMPSTUiSearchQueryDialog::ConstructContextMenuL
+// --------------------------------------------------------------------------
+//
+inline void CVIMPSTUiSearchQueryDialog::ConstructContextMenuL()
+    {
+    CEikMenuBar* newMenuBar = new ( ELeave ) CEikMenuBar();
+    CleanupStack::PushL( newMenuBar );
+    newMenuBar->ConstructL
+        ( this, NULL, R_SEARCH_EDITOR_CONTEXT_MENUBAR );
+    iEikonEnv->EikAppUi()->AddToStackL( newMenuBar, ECoeStackPriorityMenu,
+        ECoeStackFlagRefusesFocus );
+    iContextMenuBar = newMenuBar;
+    CleanupStack::Pop( newMenuBar );
+    }
+
+// --------------------------------------------------------------------------
+// CVIMPSTUiSearchQueryDialog::ConstructNaviPaneL
+// --------------------------------------------------------------------------
+//
+inline void CVIMPSTUiSearchQueryDialog::ConstructNaviPaneL()
+    {
+    CEikStatusPane* statusPane = iEikonEnv->AppUiFactory()->StatusPane();
+    if (statusPane && statusPane->PaneCapabilities
+            ( TUid::Uid( EEikStatusPaneUidNavi ) ).IsPresent() )
+        {
+        // Create a default empty status pane, otherwise sync field will show
+        iNaviContainer = static_cast<CAknNavigationControlContainer *>
+            ( statusPane->ControlL( TUid::Uid( EEikStatusPaneUidNavi ) ) );
+        iNaviContainer->PushDefaultL();
+        }
+    }
+
+// --------------------------------------------------------------------------
+// CVIMPSTUiSearchQueryDialog::UpdateTitleL
+// --------------------------------------------------------------------------
+//
+void CVIMPSTUiSearchQueryDialog::UpdateTitleL()
+	{
+	if (iTitlePane)
+		{ 
+		HBufC* titleText = NULL;
+		if( iSearchType == EIMBasicSearch )
+			{
+		    titleText =  VIMPSTUtils::LoadResourceL( R_QTN_SERVTAB_SEARCH_BASIC ); 		
+			iTitlePane->SetTextL( *titleText );
+			}
+		else
+			{
+			titleText =  VIMPSTUtils::LoadResourceL( R_QTN_SERVTAB_SEARCH_ADVANCED ); 
+			iTitlePane->SetTextL( *titleText);
+			}
+		delete titleText;
+		DrawNow();
+		}
+
+	}
+
+// --------------------------------------------------------------------------
+// CVIMPSTUiSearchQueryDialog::CmdDoneL
+// --------------------------------------------------------------------------
+//
+void CVIMPSTUiSearchQueryDialog::CmdDoneL( )
+    {
+    TInt count = iUiFieldArray.Count();
+    for( TInt i = 0; i< count ; i++ )
+	    {
+	    HBufC* data = iUiFieldArray.At(i).ControlTextL() ;	
+	    if(data)
+		    {
+		    iUiFieldArray.At(i).SetFieldDataL( *data )	;
+		    delete data;
+		    }
+	    }
+    }
+
+// --------------------------------------------------------------------------
+// CVIMPSTUiSearchQueryDialog::TryChangeFocusL
+// --------------------------------------------------------------------------
+//    
+void CVIMPSTUiSearchQueryDialog::TryChangeFocusL(
+    TInt aControlId )
+	{
+	if ( ControlOrNull( aControlId ) )
+        {
+        TryChangeFocusToL( aControlId );
+        }	
+	}
+// --------------------------------------------------------------------------
+// CVIMPSTUiSearchQueryDialog::SetCurrentLineCaptionL
+// --------------------------------------------------------------------------
+//    
+void CVIMPSTUiSearchQueryDialog::SetCurrentLineCaptionL(
+    const TDesC& aText )
+	{
+	SetControlCaptionL(IdOfFocusControl(), aText);	
+	}
+// --------------------------------------------------------------------------
+// CVIMPSTUiSearchQueryDialog::Control
+// --------------------------------------------------------------------------
+//    
+CCoeControl* CVIMPSTUiSearchQueryDialog::Control(
+    TInt aControlId ) const
+	    {
+	    return ControlOrNull(aControlId);	
+	    }
+// --------------------------------------------------------------------------
+// CVIMPSTUiSearchQueryDialog::StoreTitlePaneTextL
+// --------------------------------------------------------------------------
+//
+inline void CVIMPSTUiSearchQueryDialog::StoreTitlePaneTextL()
+    {
+    CEikStatusPane* statusPane = iEikonEnv->AppUiFactory()->StatusPane();
+    if (statusPane && statusPane->PaneCapabilities(
+        TUid::Uid(EEikStatusPaneUidTitle)).IsPresent())
+        {
+        iTitlePane = static_cast<CAknTitlePane*>
+            (statusPane->ControlL(TUid::Uid(EEikStatusPaneUidTitle)));
+        if (iTitlePane->Text())
+            {
+            iStoredTitlePaneText = iTitlePane->Text()->AllocL();
+            }
+        }
+    }
+    
+
+// --------------------------------------------------------------------------
+// CVIMPSTUiSearchQueryDialog::UpdateCbasL
+// --------------------------------------------------------------------------
+//    
+void CVIMPSTUiSearchQueryDialog::UpdateCbasL()
+    {
+    if ( !AreAllControlsEmptyL() )
+        {
+        if ( iCbaCommandSet != R_AVKON_SOFTKEYS_OK_CANCEL__OK )
+            {
+            SetCbaCommandSetL( R_AVKON_SOFTKEYS_OK_CANCEL__OK  );   
+            } 
+         }
+     else 
+        {
+        if( iSearchType == EIMBasicSearch && iCbaCommandSet != R_SEARCH_SOFTKEYS_ADVANCED_CANCEL__EDIT )
+			{
+			SetCbaCommandSetL( R_SEARCH_SOFTKEYS_ADVANCED_CANCEL__EDIT  );   
+			}    	
+        else if( iSearchType == EIMAdvancedSearch && iCbaCommandSet != R_SEARCH_SOFTKEYS_BASIC_CANCEL__EDIT )
+	        {
+	        SetCbaCommandSetL( R_SEARCH_SOFTKEYS_BASIC_CANCEL__EDIT  ); 	
+	        }  
+        }
+   
+    }
+
+// --------------------------------------------------------------------------
+// CVIMPSTUiSearchQueryDialog::SetCbaCommandSetL
+// --------------------------------------------------------------------------
+//    
+void CVIMPSTUiSearchQueryDialog::SetCbaCommandSetL( TInt aResourceId )
+    {
+    CEikButtonGroupContainer& cba = ButtonGroupContainer();
+    cba.SetCommandSetL( aResourceId );
+    iCbaCommandSet = aResourceId;
+    cba.DrawDeferred();
+    }  
+// --------------------------------------------------------------------------
+// CVIMPSTUiSearchQueryDialog::SetLineDimmed
+// --------------------------------------------------------------------------
+//    
+void CVIMPSTUiSearchQueryDialog::SetLineDimmed(
+    				TInt aControlId , TBool aDimmed) 
+    {
+    SetLineDimmedNow(aControlId, aDimmed);	
+    }
+// --------------------------------------------------------------------------
+// CVIMPSTUiSearchQueryDialog::ShowSearchUiFieldsL
+// --------------------------------------------------------------------------
+//
+void CVIMPSTUiSearchQueryDialog::ShowSearchUiFieldsL()
+    {
+    TInt count = iUiFieldArray.Count();
+    for( TInt i = 0; i< count; i++ )
+	    {
+	    MVIMPSTUiSearchField& field = iUiFieldArray.At(i);
+	    if( iSearchType == EIMBasicSearch )
+		    {
+		    if( !field.IsBasicField() )
+			    {
+			    SetLineDimmed( field.ControlId(), ETrue );	
+			    }
+		    }
+		else 
+			{
+			 SetLineDimmed( field.ControlId(), EFalse );	
+			}
+	    }
+	SetInitialCurrentLineL();
+    UpdateCbasL();
+    }
+   
+// --------------------------------------------------------------------------
+// CVIMPSTUiSearchQueryDialog::IsBasicFieldAvailableL
+// --------------------------------------------------------------------------
+//
+TBool CVIMPSTUiSearchQueryDialog::IsBasicFieldAvailableL()
+    {
+    TInt count = iUiFieldArray.Count();
+    for( TInt i = 0; i< count; i++ )
+	    {
+	    MVIMPSTUiSearchField& field = iUiFieldArray.At(i);
+	    if( field.IsBasicField() )
+		    {
+		    return ETrue;	
+		    }
+	    }
+	return EFalse;
+    } 
+
+// --------------------------------------------------------------------------
+// CVIMPSTUiSearchQueryDialog::IsEndKeyPressed()
+// --------------------------------------------------------------------------
+//
+TBool CVIMPSTUiSearchQueryDialog::IsEndKeyPressed()
+    {
+    return isEndKeyPressed;
+    } 
+// End of File