diff -r 000000000000 -r 5e5d6b214f4f uiservicetab/vimpstui/src/cvimpstuisearchquerydialog.cpp --- /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 + +// System includes +#include +#include +#include +#include +#include +#include +#include + + + +// -------------------------------------------------------------------------- +// 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 + ( 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 + (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