diff -r 000000000000 -r 5e5d6b214f4f uiservicetab/vimpstui/src/cvimpstuiextensionservice.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/uiservicetab/vimpstui/src/cvimpstuiextensionservice.cpp Tue Feb 02 10:12:18 2010 +0200 @@ -0,0 +1,624 @@ +/* +* 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: Extension service for CVIMPSTUI +* +*/ + + +// INCLUDE FILES +#include "cvimpstuiextensionservice.h" + +#include + +// Edit view +#include +#include +#include + +#include "cvimpstuisearchfieldaray.h" +#include "mvimpstuisearchfield.h" +#include "cvimpstuisearchquerydialog.h" + +#include "cvimpstuitabbedview.h" +#include "cvimpstuisearchview.h" +#include "cvimpstuiextensionviewinfo.h" +#include "cvimpstcmdhandler.h" + +#include "mvimpstengine.h" +#include "vimpstutils.h" + +#include "cvimpstuibranddata.h" +#include "tvimpstconsts.h" +#include "cvimpstuiblockview.h" +#include +#include +#include +#include +#include "cvimpstuimenuextension.h" + +const TInt KDefaultIconId = EMbmVimpstuiExample_msn_tab; +const TInt KDefaultMaskId = EMbmVimpstuiExample_msn_tab_mask; + +const TInt KBrandTabIconId = EMbmVimpst_servicetab_defaultQgn_prop_im_imsg ; +const TInt KBrandTabMaskId = EMbmVimpst_servicetab_defaultQgn_prop_im_imsg_mask; + +_LIT(KDefaultFileLocation,"\\resource\\"); +_LIT(KBrandFileLocation,"C:\\resource\\"); +_LIT(KBrandFileNameDefault_C,"C:\\resource\\vimpst_servicetab_default.mif"); +_LIT(KBrandFileNameDefault_Z,"Z:\\resource\\apps\\vimpst_servicetab_default.mif"); +_LIT(KBrandFileNameHalf, "vimpst_servicetab_"); +_LIT(KBrandFileNameExt, ".mif"); +_LIT(KDefaultFileName, "vimpst_servicetab_default.mif"); +// ================= MEMBER FUNCTIONS ======================= + +// --------------------------------------------------------------------------- +// CVIMPSTUIExtensionService::CVIMPSTUIExtensionService +// --------------------------------------------------------------------------- +// +CVIMPSTUIExtensionService::CVIMPSTUIExtensionService( + TUint aServiceId, + TInt aTabbedViewId, + TInt aSearchViewId, + TInt aBlockedViewId, + CVIMPSTUIMenuExtension& aMenuExtension, + MVIMPSTEngine& aEngine ): + iServiceId( aServiceId ), + iTabbedViewId( aTabbedViewId ), + iSearchViewId( aSearchViewId ), + iBlockedViewId( aBlockedViewId ), + iMenuExtension(aMenuExtension), + iEngine( aEngine ) + { + } + +// --------------------------------------------------------------------------- +// CVIMPSTUIExtensionService::ConstructL +// --------------------------------------------------------------------------- +// +void CVIMPSTUIExtensionService::ConstructL(const TDesC& aServiceName) + { + TFileName path; + Dll::FileName(path); //get the location of the dll + + TDriveName drive( TParsePtrC( path ).Drive( ) ); // solve drive + TBuf serviceName(iEngine.ServiceName()); + HBufC* brandFileName = HBufC::NewLC( KMaxResourcePathLength ); + TPtr brandFileNamePtr( brandFileName->Des() ); + brandFileNamePtr.Append( KBrandFileNameHalf() ); + brandFileNamePtr.Append( serviceName ); + brandFileNamePtr.Append( KBrandFileNameExt() ); + + RFs& session = CEikonEnv::Static()->FsSession(); + session.AddFileSystem( brandFileNamePtr ); + TFindFile file_finder(session); + CDir* file_list; + path.Zero(); + TInt err = file_finder.FindWildByDir( brandFileNamePtr,KBrandFileLocation(),file_list); + if( err == KErrNone ) + { + brandFileNamePtr.Insert( 0, KBrandFileLocation()); + } + else + { + err = file_finder.FindWildByDir( KDefaultFileName(), KDefaultFileLocation(), file_list ); + brandFileNamePtr.Zero(); + if( err == KErrNone ) + { + brandFileNamePtr.Insert( 0, KBrandFileNameDefault_C()); + } + else + { + brandFileNamePtr.Insert( 0, KBrandFileNameDefault_Z()); + } + } + path.Append( brandFileNamePtr ); + iServiceName = aServiceName.AllocL(); + // View info's must be created in initial contruct phase + iTabbedViewInfo = CVIMPSTUIExtensionViewInfo::NewL( + iTabbedViewId, ETrue, path, KBrandTabIconId, KBrandTabMaskId, *iServiceName ); + HBufC* resourceFilePath = HBufC::NewLC( KMaxResourcePathLength ); + TPtr ptr( resourceFilePath->Des() ); + ptr.Append( KDefaultIconFile() ); // without drive + ptr.Insert( 0, drive ); // insert drive + + // NearestLanguageFile takes only TFileName + path.Zero(); + path.Append( *resourceFilePath ); + + + + + iSearchViewInfo = CVIMPSTUIExtensionViewInfo::NewL( + iSearchViewId, EFalse, path, KDefaultIconId, + KDefaultMaskId, *iServiceName ); + + iBlockViewInfo = CVIMPSTUIExtensionViewInfo::NewL( + iBlockedViewId, EFalse, path, KDefaultIconId, + KDefaultMaskId, *iServiceName ); + + iCommandHandler = CVIMPSTCmdHandler::NewL(iEngine); + + iUiFieldsArray = CVIMPSTUiSearchFieldArray::NewL(); + CleanupStack::PopAndDestroy(2,brandFileName); //resourceFilePath,brandTabIconFilePath + delete file_list; + } + +// --------------------------------------------------------------------------- +// CVIMPSTUIExtensionService::NewL +// --------------------------------------------------------------------------- +// +CVIMPSTUIExtensionService* CVIMPSTUIExtensionService::NewL( + TUint aServiceId, + TInt aTabbedViewId, + TInt aSearchViewId, + TInt aBlockedViewId, + const TDesC& aServiceName, + CVIMPSTUIMenuExtension& aMenuExtension, + MVIMPSTEngine& aEngine ) + { + CVIMPSTUIExtensionService* self = NewLC( + aServiceId, aTabbedViewId, aSearchViewId, aBlockedViewId, aServiceName, aMenuExtension, aEngine ); + CleanupStack::Pop(self); + return self; + } + +// --------------------------------------------------------------------------- +// CVIMPSTUIExtensionService::NewLC +// --------------------------------------------------------------------------- +// +CVIMPSTUIExtensionService* CVIMPSTUIExtensionService::NewLC( + TUint aServiceId, + TInt aTabbedViewId, + TInt aSearchViewId, + TInt aBlockedViewId, + const TDesC& aServiceName, + CVIMPSTUIMenuExtension& aMenuExtension, + MVIMPSTEngine& aEngine ) + { + CVIMPSTUIExtensionService* self = + new (ELeave) CVIMPSTUIExtensionService( + aServiceId, aTabbedViewId, aSearchViewId, aBlockedViewId, aMenuExtension, aEngine ); + CleanupStack::PushL(self); + self->ConstructL(aServiceName); + return self; + } + +// --------------------------------------------------------------------------- +// CVIMPSTUIExtensionService::~CVIMPSTUIExtensionService +// --------------------------------------------------------------------------- +// +CVIMPSTUIExtensionService::~CVIMPSTUIExtensionService() + { + delete iUiFieldsArray; + + delete iCommandHandler; + iCommandHandler = NULL; + + delete iServiceName; + iServiceName = NULL; + + delete iSearchString; + iSearchString = NULL; + + //delete iBrandHandler; + + delete iTabbedViewInfo; + iTabbedViewInfo = NULL; + delete iSearchViewInfo; + iSearchViewInfo = NULL; + + delete iBlockViewInfo; + iBlockViewInfo = NULL; + } + + +// --------------------------------------------------------------------------- +// CVIMPSTUIExtensionService::TabbedViewL +// --------------------------------------------------------------------------- +// +CVIMPSTUiTabbedView* + CVIMPSTUIExtensionService::TabbedViewL( + MxSPViewMapper& aMapper, + MxSPContactManager& aContactManager, + CPbk2UIExtensionView& aView, + TInt aTabbedViewId, + TUid aId, + MVIMPSTEngine& aEngine ) + { + if ( !iTabbedView ) + { + iTabbedView = CVIMPSTUiTabbedView::NewL( + aMapper, + aContactManager, + aTabbedViewId, + iServiceId, + aView, + aId, + *this, + aEngine, + *iCommandHandler, + iMenuExtension); + } + return iTabbedView; + } + +// --------------------------------------------------------------------------- +// CVIMPSTUIExtensionService::BlockViewL +// --------------------------------------------------------------------------- +// +CVIMPSTUiBlockView* + CVIMPSTUIExtensionService::BlockViewL( + MxSPViewMapper& aMapper, + MxSPContactManager& aContactManager, + CPbk2UIExtensionView& aView, + TInt aBlockedViewId, + MVIMPSTEngine& aEngine ) + { + if ( !iBlockedView ) + { + iBlockedView = CVIMPSTUiBlockView::NewL( + aMapper, + aContactManager, + aBlockedViewId, + aView, + *this , + aEngine, + *iCommandHandler ); + } + return iBlockedView; + } + +// --------------------------------------------------------------------------- +// CVIMPSTUIExtensionService::SearchViewL +// --------------------------------------------------------------------------- +// +CVIMPSTUiSearchView* + CVIMPSTUIExtensionService::SearchViewL( + MxSPViewMapper& aMapper, + MxSPContactManager& aContactManager, + CPbk2UIExtensionView& aView, + TInt aSearchViewId, + TUid aId, + MVIMPSTEngine& aEngine ) + { + if ( !iSearchView ) + { + iSearchView = CVIMPSTUiSearchView::NewL( + aMapper, + aContactManager, + aSearchViewId, + iServiceId, + aView, + aId, + *this, + aEngine, + *iCommandHandler ); + } + return iSearchView; + } + +// --------------------------------------------------------------------------- +// CVIMPSTUIExtensionService::TabbedViewId +// --------------------------------------------------------------------------- +// +TInt CVIMPSTUIExtensionService::TabbedViewId() + { + return iTabbedViewId; + } +// --------------------------------------------------------------------------- +// CVIMPSTUIExtensionService::SearchViewId +// --------------------------------------------------------------------------- +// +TInt CVIMPSTUIExtensionService::SearchViewId() + { + return iSearchViewId; + } + +// --------------------------------------------------------------------------- +// CVIMPSTUIExtensionService::BlockViewId +// --------------------------------------------------------------------------- +// +TInt CVIMPSTUIExtensionService::BlockViewId() + { + return iBlockedViewId; + } + +// --------------------------------------------------------------------------- +// CVIMPSTUIExtensionService::ServiceId +// --------------------------------------------------------------------------- +// +TUint32 CVIMPSTUIExtensionService::ServiceId() + { + return iServiceId; + } + + +// --------------------------------------------------------------------------- +// CVIMPSTUIExtensionService::ServiceName +// --------------------------------------------------------------------------- +// +const TDesC& CVIMPSTUIExtensionService::ServiceName() + { + return *iServiceName; + } + +// --------------------------------------------------------------------------- +// CVIMPSTUIExtensionService::SearchString +// --------------------------------------------------------------------------- +// +const TDesC& CVIMPSTUIExtensionService::SearchString() + { + return *iSearchString; + } + + +// --------------------------------------------------------------------------- +// CVIMPSTUIExtensionService::SetSearchStringL +// --------------------------------------------------------------------------- +// +void CVIMPSTUIExtensionService::SetSearchStringL( const TDesC& aSearchString ) + { + if( iSearchString ) + { + delete iSearchString; + iSearchString = NULL; + } + iSearchString = aSearchString.AllocL(); + } + +// --------------------------------------------------------------------------- +// CVIMPSTUIExtensionService::TabbedViewInfoL +// --------------------------------------------------------------------------- +// +CVIMPSTUIExtensionViewInfo* + CVIMPSTUIExtensionService::TabbedViewInfoL() + { + return iTabbedViewInfo; + } + +// --------------------------------------------------------------------------- +// CVIMPSTUIExtensionService::SearchViewInfo +// --------------------------------------------------------------------------- +// +CVIMPSTUIExtensionViewInfo* + CVIMPSTUIExtensionService::SearchViewInfo() + { + return iSearchViewInfo; + } + +// --------------------------------------------------------------------------- +// CVIMPSTUIExtensionService::BlockedViewInfo +// --------------------------------------------------------------------------- +// +CVIMPSTUIExtensionViewInfo* + CVIMPSTUIExtensionService::BlockedViewInfo() + { + return iBlockViewInfo; + } + +// --------------------------------------------------------------------------- +// CVIMPSTUIExtensionService::HasViewId() +// --------------------------------------------------------------------------- +// +TBool CVIMPSTUIExtensionService::HasViewId( TInt aViewId ) + { + return ( iTabbedViewId == aViewId || iSearchViewId == aViewId ||iBlockedViewId == aViewId ); + } + + +// --------------------------------------------------------------------------- +// CVIMPSTUIExtensionService::ServiceEngine() +// --------------------------------------------------------------------------- +// + +MVIMPSTEngine& CVIMPSTUIExtensionService::ServiceEngine () + { + return iEngine; + } + +// --------------------------------------------------------------------------- +// CVIMPSTUIExtensionService::SetSearchFieldsDataL +// --------------------------------------------------------------------------- +// +void CVIMPSTUIExtensionService::SetSearchFieldsDataL( RArray& aEnumKeysArray, RPointerArray& aLebelKeysArray ) + { + // reset all old fields and create new fields + if( iUiFieldsArray ) + { + delete iUiFieldsArray; + iUiFieldsArray = NULL; + } + iUiFieldsArray = CVIMPSTUiSearchFieldArray::NewL(); + + TInt enumCount = aEnumKeysArray.Count(); + TInt labelCount = aLebelKeysArray.Count(); + + TBool isBasicField = EFalse ; + TInt basicFieldIndex = 0; + + if( !enumCount && !labelCount ) + { + return; + } + for( TInt i =0; i< enumCount; i++ ) + { + TVIMPSTEnums::TVIMPSTSearchKey enumKey = static_cast( aEnumKeysArray[i] ); + // get the data associaed with key , + // also check if basic field + HBufC* akeyValue = GetSearchKeyLabelL( enumKey, isBasicField ); + if( akeyValue ) + { + if( isBasicField ) + { + if( enumKey == TVIMPSTEnums::EVIMPSTFirstName ) + { + basicFieldIndex = 0 ; // always on top 1st element + } + + iUiFieldsArray->InsertFieldsL(basicFieldIndex , *akeyValue, EVIMPSTEdwinText,EIMBasicSearch ,enumKey); + + basicFieldIndex++ ; + + } + else + { + iUiFieldsArray->CreateFieldsL( *akeyValue, EVIMPSTEdwinText ,EIMAdvancedSearch, enumKey); + } + delete akeyValue; + akeyValue = NULL; + } + + } + + for( TInt i =0; i< labelCount; i++ ) + { + // not owns akeyValue + HBufC* akeyValue = aLebelKeysArray[i]; + if( akeyValue ) + { + iUiFieldsArray->CreateFieldsL( *akeyValue, EVIMPSTEdwinText ); + } + + } + // this will sort only basic fields + SortBasicFields(); + } +// --------------------------------------------------------------------------- +// CVIMPSTUIExtensionService::SetSearchFieldsDataL +// --------------------------------------------------------------------------- +// +CVIMPSTUiSearchFieldArray& CVIMPSTUIExtensionService::GetSearchFieldArray() + { + return *iUiFieldsArray; + } + +// --------------------------------------------------------------------------- +// CVIMPSTUIExtensionService::GetSearchKeyLabelL +// --------------------------------------------------------------------------- +// +HBufC* CVIMPSTUIExtensionService::GetSearchKeyLabelL(TVIMPSTEnums::TVIMPSTSearchKey aSearchKey ,TBool& aBasicField ) + { + + HBufC* keyText = NULL; + aBasicField = EFalse; + + switch( aSearchKey ) + { + case TVIMPSTEnums::EVIMPSTMiddleName : + { + keyText = VIMPSTUtils::LoadResourceL( R_QTN_SERVTAB_SEARCH_MIDDLENAME ); + break; + } + case TVIMPSTEnums::EVIMPSTLastName : + { + keyText = VIMPSTUtils::LoadResourceL( R_QTN_SERVTAB_SEARCH_LASTNAME ); + aBasicField = ETrue; + break; + } + case TVIMPSTEnums::EVIMPSTFullName : + { + keyText = VIMPSTUtils::LoadResourceL( R_QTN_SERVTAB_SEARCH_FULLNAME ); + break; + } + case TVIMPSTEnums::EVIMPSTCountry : + { + keyText = VIMPSTUtils::LoadResourceL( R_QTN_SERVTAB_SEARCH_COUNTRY ); + break; + } + case TVIMPSTEnums::EVIMPSTCity : + { + keyText = VIMPSTUtils::LoadResourceL( R_QTN_SERVTAB_SEARCH_CITY ); + break; + } + + case TVIMPSTEnums::EVIMPSTNickName : + { + keyText = VIMPSTUtils::LoadResourceL( R_QTN_SERVTAB_SEARCH_NICKNAME ); + break; + } + case TVIMPSTEnums::EVIMPSTState : + { + keyText = VIMPSTUtils::LoadResourceL( R_QTN_SERVTAB_SEARCH_STATE ); + break; + } + case TVIMPSTEnums::EVIMPSTOrganisationUnit : + { + keyText = VIMPSTUtils::LoadResourceL( R_QTN_SERVTAB_SEARCH_ORGUNIT ); + break; + } + case TVIMPSTEnums::EVIMPSTBirthday : + { + keyText = VIMPSTUtils::LoadResourceL( R_QTN_SERVTAB_SEARCH_BIRTHDAY ); + break; + } + + case TVIMPSTEnums::EVIMPSTEmailAddress : + { + keyText = VIMPSTUtils::LoadResourceL( R_QTN_SERVTAB_SEARCH_EMAIL ); + break; + } + case TVIMPSTEnums::EVIMPSTUser : + { + aBasicField = ETrue; + keyText = VIMPSTUtils::LoadResourceL( R_QTN_SERVTAB_SEARCH_USER ); + break; + } + case TVIMPSTEnums::EVIMPSTOrganisation : + { + keyText = VIMPSTUtils::LoadResourceL( R_QTN_SERVTAB_SEARCH_ORG ); + break; + } + case TVIMPSTEnums::EVIMPSTFirstName: + default: + { + aBasicField = ETrue; + keyText = VIMPSTUtils::LoadResourceL( R_QTN_SERVTAB_SEARCH_FIRSTNAME ); + break; + } + } + + return keyText; + + } + + // --------------------------------------------------------------------------- +// CVIMPSTUIExtensionService::SortBasicFields +// --------------------------------------------------------------------------- +// +void CVIMPSTUIExtensionService::SortBasicFields() + { + TInt count = iUiFieldsArray->Count(); + TInt index = 0; + if( count >2 ) // atleast there has to be 3 item for sort , first name is already on top + { + MVIMPSTUiSearchField& field = iUiFieldsArray->At(1); + if( field.GetSearchKey() != TVIMPSTEnums::EVIMPSTLastName ) + { + for(index =2; index < count; index++ ) + { + field = iUiFieldsArray->At(index); + if( field.GetSearchKey() == TVIMPSTEnums::EVIMPSTLastName ) + { + iUiFieldsArray->RemoveField(index); + iUiFieldsArray->InsertField(&field, 1); // insert at 1st number; + return; + } + } + + } + } + + } + +// End of file