/************************************************************** * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * *************************************************************/ // MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_sw.hxx" #include #include #include #include #include #include #include #include #include "com/sun/star/mail/MailServiceType.hpp" #include "com/sun/star/mail/XMailService.hpp" #include "com/sun/star/mail/MailServiceProvider.hpp" #include #include #include #include #include #include #include #include #include #ifndef _DBMGR_HXX #include #endif #ifndef _VIEW_HXX #include #endif #include #include #include #include #define _SVSTDARR_STRINGSDTOR #include using namespace utl; using ::rtl::OUString; using namespace ::com::sun::star; using namespace ::com::sun::star::uno; using namespace ::com::sun::star::lang; using namespace ::com::sun::star::beans; using namespace ::com::sun::star::sdb; using namespace ::com::sun::star::sdbc; using namespace ::com::sun::star::sdbcx; const char* cAddressDataAssignments = "AddressDataAssignments"; const char* cDBColumnAssignments = "DBColumnAssignments"; const char* cDataSourceName = "DataSource/DataSourceName"; const char* cDataTableName = "DataSource/DataTableName" ; const char* cDataCommandType = "DataSource/DataCommandType"; #define SECURE_PORT 465 #define DEFAULT_PORT 25 #define POP_PORT 110 /*-- 16.04.2004 09:41:36--------------------------------------------------- -----------------------------------------------------------------------*/ struct DBAddressDataAssignment { SwDBData aDBData; Sequence< ::rtl::OUString> aDBColumnAssignments; //if loaded the name of the node has to be saved ::rtl::OUString sConfigNodeName; //all created or changed assignments need to be stored bool bColumnAssignmentsChanged; DBAddressDataAssignment() : bColumnAssignmentsChanged(false) {} }; /*-- 16.04.2004 09:43:29--------------------------------------------------- -----------------------------------------------------------------------*/ class SwMailMergeConfigItem_Impl : public utl::ConfigItem { friend class SwMailMergeConfigItem; Reference< XDataSource> xSource; SharedConnection xConnection; Reference< XColumnsSupplier> xColumnsSupplier; Reference< XStatement> xStatement; Reference< XResultSet> xResultSet; SwDBData aDBData; ::rtl::OUString sFilter; sal_Int32 nResultSetCursorPos; ::std::vector aAddressDataAssignments; ::std::vector< ::rtl::OUString> aAddressBlocks; sal_Int32 nCurrentAddressBlock; sal_Bool bIsAddressBlock; sal_Bool bIsHideEmptyParagraphs; sal_Bool bIsOutputToLetter; sal_Bool bIncludeCountry; ::rtl::OUString sExcludeCountry; sal_Bool bIsGreetingLine; sal_Bool bIsIndividualGreetingLine; ::std::vector< ::rtl::OUString> aFemaleGreetingLines; sal_Int32 nCurrentFemaleGreeting; ::std::vector< ::rtl::OUString> aMaleGreetingLines; sal_Int32 nCurrentMaleGreeting; ::std::vector< ::rtl::OUString> aNeutralGreetingLines; sal_Int32 nCurrentNeutralGreeting; ::rtl::OUString sFemaleGenderValue; uno::Sequence< ::rtl::OUString> aSavedDocuments; sal_Bool bIsGreetingLineInMail; sal_Bool bIsIndividualGreetingLineInMail; //mail settings ::rtl::OUString sMailDisplayName; ::rtl::OUString sMailAddress; ::rtl::OUString sMailReplyTo; ::rtl::OUString sMailServer; ::rtl::OUString sMailUserName; ::rtl::OUString sMailPassword; sal_Bool bIsSMPTAfterPOP; ::rtl::OUString sInServerName; sal_Int16 nInServerPort; sal_Bool bInServerPOP; ::rtl::OUString sInServerUserName; ::rtl::OUString sInServerPassword; sal_Int16 nMailPort; sal_Bool bIsMailReplyTo; sal_Bool bIsDefaultPort; sal_Bool bIsSecureConnection; sal_Bool bIsAuthentication; sal_Bool bIsEMailSupported; ResStringArray m_AddressHeaderSA; //these addresses are not stored in the configuration ::std::vector< SwDocMergeInfo > aMergeInfos; //we do overwrite the usersettings in a special case //than we do remind the usersettings here sal_Bool bUserSettingWereOverwritten; sal_Bool bIsAddressBlock_LastUserSetting; sal_Bool bIsGreetingLineInMail_LastUserSetting; sal_Bool bIsGreetingLine_LastUserSetting; const Sequence< ::rtl::OUString>& GetPropertyNames(); public: SwMailMergeConfigItem_Impl(); ~SwMailMergeConfigItem_Impl(); virtual void Commit(); virtual void Notify( const ::com::sun::star::uno::Sequence< rtl::OUString >& aPropertyNames ); const Sequence< ::rtl::OUString> GetAddressBlocks(sal_Bool bConvertToConfig = sal_False) const; void SetAddressBlocks( const Sequence< ::rtl::OUString>& rBlocks, sal_Bool bConvertFromConfig = sal_False); const uno::Sequence< ::rtl::OUString> GetGreetings(SwMailMergeConfigItem::Gender eType, sal_Bool bConvertToConfig = sal_False) const; void SetGreetings(SwMailMergeConfigItem::Gender eType, const uno::Sequence< ::rtl::OUString>& rBlocks, sal_Bool bConvertFromConfig = sal_False); void SetCurrentAddressBlockIndex( sal_Int32 nSet ); sal_Int32 GetCurrentAddressBlockIndex() const { return nCurrentAddressBlock; } sal_Int32 GetCurrentGreeting(SwMailMergeConfigItem::Gender eType) const; void SetCurrentGreeting(SwMailMergeConfigItem::Gender eType, sal_Int32 nIndex); }; /*-- 06.05.2004 12:51:54--------------------------------------------------- -----------------------------------------------------------------------*/ SwMailMergeConfigItem_Impl::SwMailMergeConfigItem_Impl() : ConfigItem(C2U("Office.Writer/MailMergeWizard"), 0), nResultSetCursorPos(-1), nCurrentAddressBlock(0), bIsAddressBlock(sal_True), bIsHideEmptyParagraphs(sal_False), bIsOutputToLetter(sal_True), bIncludeCountry(sal_False), bIsGreetingLine(sal_True), nCurrentFemaleGreeting(0), nCurrentMaleGreeting(0), nCurrentNeutralGreeting(0), bIsSMPTAfterPOP(sal_False), nInServerPort( POP_PORT ), bInServerPOP( sal_True ), nMailPort(0), bIsMailReplyTo(sal_False), bIsDefaultPort(sal_False), bIsSecureConnection(sal_False), bIsAuthentication(sal_False), bIsEMailSupported(sal_False), m_AddressHeaderSA( SW_RES( SA_ADDRESS_HEADER )), bUserSettingWereOverwritten(sal_False), bIsAddressBlock_LastUserSetting(sal_False), bIsGreetingLineInMail_LastUserSetting(sal_False), bIsGreetingLine_LastUserSetting(sal_False) { const Sequence& rNames = GetPropertyNames(); Sequence aValues = GetProperties(rNames); const Any* pValues = aValues.getConstArray(); DBG_ASSERT(aValues.getLength() == rNames.getLength(), "GetProperties failed"); if(aValues.getLength() == rNames.getLength()) { for(int nProp = 0; nProp < rNames.getLength(); nProp++) { switch(nProp) { case 0: pValues[nProp] >>= bIsOutputToLetter; break; case 1: pValues[nProp] >>= bIncludeCountry; break; case 2: pValues[nProp] >>= sExcludeCountry; break; case 3: { Sequence< ::rtl::OUString> aBlocks; pValues[nProp] >>= aBlocks; SetAddressBlocks(aBlocks, sal_True); } break; case 4: pValues[nProp] >>= bIsAddressBlock; break; case 5: pValues[nProp] >>= bIsGreetingLine; break; case 6: pValues[nProp] >>= bIsIndividualGreetingLine; break; case 7 : case 8 : case 9 : { Sequence< ::rtl::OUString> aGreetings; pValues[nProp] >>= aGreetings; SetGreetings(SwMailMergeConfigItem::Gender( SwMailMergeConfigItem::FEMALE + nProp - 7), aGreetings, sal_True); } break; case 10: pValues[nProp] >>= nCurrentFemaleGreeting; break; case 11: pValues[nProp] >>= nCurrentMaleGreeting; break; case 12: pValues[nProp] >>= nCurrentNeutralGreeting; break; case 13: pValues[nProp] >>= sFemaleGenderValue; break; case 14: pValues[nProp] >>= sMailDisplayName; break; case 15: pValues[nProp] >>= sMailAddress; break; case 16: pValues[nProp] >>= bIsMailReplyTo; break; case 17: pValues[nProp] >>= sMailReplyTo; break; case 18: pValues[nProp] >>= sMailServer; break; case 19: bIsDefaultPort = (pValues[nProp] >>= nMailPort) ? sal_False : sal_True; break; case 20: pValues[nProp] >>= bIsSecureConnection; break; case 21: pValues[nProp] >>= bIsAuthentication; break; case 22: pValues[nProp] >>= sMailUserName; break; case 23: pValues[nProp] >>= sMailPassword; break; case 24 :pValues[nProp] >>= aDBData.sDataSource; break; case 25 :pValues[nProp] >>= aDBData.sCommand; break; case 26 : { short nTemp = 0; if(pValues[nProp] >>= nTemp) aDBData.nCommandType = nTemp; } break; case 27: pValues[nProp] >>= sFilter; break; case 28: pValues[nProp] >>= aSavedDocuments; break; case 29: pValues[nProp] >>= bIsEMailSupported; break; case 30: pValues[nProp] >>= bIsGreetingLineInMail; break; case 31: pValues[nProp] >>= bIsIndividualGreetingLineInMail; break; case 32: pValues[nProp] >>= bIsSMPTAfterPOP; break; case 33: pValues[nProp] >>= sInServerName; break; case 34: pValues[nProp] >>= nInServerPort; break; case 35: pValues[nProp] >>= bInServerPOP; break; case 36: pValues[nProp] >>= sInServerUserName; break; case 37: pValues[nProp] >>= sInServerPassword; break; case 38: pValues[nProp] >>= bIsHideEmptyParagraphs; break; case 39: pValues[nProp] >>= nCurrentAddressBlock; break; } } } //read the list of data base assignments Sequence aAssignments = GetNodeNames(C2U(cAddressDataAssignments)); if(aAssignments.getLength()) { //create a list of property names to load the URLs of all data bases const OUString* pAssignments = aAssignments.getConstArray(); Sequence< ::rtl::OUString > aAssignProperties(4 * aAssignments.getLength()); ::rtl::OUString* pAssignProperties = aAssignProperties.getArray(); sal_Int32 nAssign; OUString sSlash = C2U("/"); for(nAssign = 0; nAssign < aAssignProperties.getLength(); nAssign += 4) { String sAssignPath = C2U(cAddressDataAssignments); sAssignPath += '/'; sAssignPath += String(pAssignments[nAssign / 4]); sAssignPath += '/'; pAssignProperties[nAssign] = sAssignPath; pAssignProperties[nAssign] += C2U(cDataSourceName); pAssignProperties[nAssign + 1] = sAssignPath; pAssignProperties[nAssign + 1] += C2U(cDataTableName); pAssignProperties[nAssign + 2] = sAssignPath; pAssignProperties[nAssign + 2] += C2U(cDataCommandType); pAssignProperties[nAssign + 3] = sAssignPath; pAssignProperties[nAssign + 3] += C2U(cDBColumnAssignments); } Sequence aAssignValues = GetProperties(aAssignProperties); const Any* pAssignValues = aAssignValues.getConstArray(); for(nAssign = 0; nAssign < aAssignValues.getLength(); nAssign += 4 ) { DBAddressDataAssignment aAssignment; pAssignValues[nAssign] >>= aAssignment.aDBData.sDataSource; pAssignValues[nAssign + 1] >>= aAssignment.aDBData.sCommand; pAssignValues[nAssign + 2] >>= aAssignment.aDBData.nCommandType; pAssignValues[nAssign + 3] >>= aAssignment.aDBColumnAssignments; aAssignment.sConfigNodeName = pAssignments[nAssign / 4]; aAddressDataAssignments.push_back(aAssignment); } } //check if the saved documents still exist if(aSavedDocuments.getLength()) { uno::Sequence< ::rtl::OUString > aTempDocuments(aSavedDocuments.getLength()); ::rtl::OUString* pTempDocuments = aTempDocuments.getArray(); sal_Int32 nIndex = 0; for(sal_Int32 i = 0; i < aSavedDocuments.getLength(); ++i) { if(SWUnoHelper::UCB_IsFile( aSavedDocuments[i] )) { pTempDocuments[nIndex++] = aSavedDocuments[i]; } } if(nIndex < aSavedDocuments.getLength()) { aSavedDocuments = aTempDocuments; aSavedDocuments.realloc(nIndex); } } } /*-- 06.05.2004 12:51:54--------------------------------------------------- -----------------------------------------------------------------------*/ SwMailMergeConfigItem_Impl::~SwMailMergeConfigItem_Impl() { } /*-- 13.03.2006 12:12:59--------------------------------------------------- -----------------------------------------------------------------------*/ void SwMailMergeConfigItem_Impl::SetCurrentAddressBlockIndex( sal_Int32 nSet ) { if(aAddressBlocks.size() >= sal::static_int_cast(nSet)) { nCurrentAddressBlock = nSet; SetModified(); } } /*-- 16.04.2004 13:06:07--------------------------------------------------- -----------------------------------------------------------------------*/ OUString lcl_CreateNodeName(Sequence& rAssignments ) { const OUString* pNames = rAssignments.getConstArray(); sal_Int32 nStart = rAssignments.getLength(); OUString sNewName; bool bFound; do { bFound = false; sNewName = C2U("_"); sNewName += OUString::valueOf(nStart); //search if the name exists for(sal_Int32 nAssign = 0; nAssign < rAssignments.getLength(); ++nAssign) { if(pNames[nAssign] == sNewName) { bFound = true; ++nStart; break; } } } while(bFound); // add the new name to the array of existing names rAssignments.realloc(rAssignments.getLength() + 1); rAssignments.getArray()[rAssignments.getLength() - 1] = sNewName; return sNewName; } // -------------------------------------------------------------------------------- void lcl_ConvertToNumbers(OUString& rBlock, const ResStringArray& rHeaders ) { //convert the strings used for UI to numbers used for the configuration String sBlock(rBlock); sBlock.SearchAndReplaceAllAscii("\n", String::CreateFromAscii("\\n")); for(sal_uInt16 i = 0; i < rHeaders.Count(); ++i) { String sHeader = rHeaders.GetString( i ); sHeader.Insert('<', 0); sHeader += '>'; String sReplace(C2U("<>")); sReplace.Insert('0' + i, 1); sBlock.SearchAndReplaceAll(sHeader, sReplace); } rBlock = sBlock; } // -------------------------------------------------------------------------------- void lcl_ConvertFromNumbers(OUString& rBlock, const ResStringArray& rHeaders) { //convert the numbers used for the configuration to strings used for UI to numbers //doesn't use ReplaceAll to prevent expansion of numbers inside of the headers String sBlock(rBlock); sBlock.SearchAndReplaceAllAscii("\\n", '\n'); SwAddressIterator aGreetingIter(sBlock); sBlock.Erase(); while(aGreetingIter.HasMore()) { SwMergeAddressItem aNext = aGreetingIter.Next(); if(aNext.bIsColumn) { //the text should be 1 characters long sal_Unicode cChar = aNext.sText.GetChar(0); if(cChar >= '0' && cChar <= 'c') { sBlock += '<'; sal_uInt16 nHeader = cChar - '0'; if(nHeader < rHeaders.Count()) sBlock += rHeaders.GetString( nHeader ); sBlock += '>'; } else { DBG_ERROR("parse error in address block or greeting line"); } } else sBlock += aNext.sText; } rBlock = sBlock; } /*-------------------------------------------------------------------- --------------------------------------------------------------------*/ const Sequence& SwMailMergeConfigItem_Impl::GetPropertyNames() { static Sequence aNames; if(!aNames.getLength()) { static const char* aPropNames[] = { "OutputToLetter", // 0 "IncludeCountry", // 1 "ExcludeCountry", // 2 "AddressBlockSettings", // 3 "IsAddressBlock", // 4 "IsGreetingLine", // 5 "IsIndividualGreetingLine", // 6 "FemaleGreetingLines", // 7 "MaleGreetingLines", // 8 "NeutralGreetingLines", // 9 "CurrentFemaleGreeting", // 10 "CurrentMaleGreeting", // 11 "CurrentNeutralGreeting", // 12 "FemaleGenderValue", // 13 "MailDisplayName", // 14 "MailAddress", // 15 "IsMailReplyTo", // 16 "MailReplyTo", // 17 "MailServer", // 18 "MailPort", // 19 "IsSecureConnection", // 20 "IsAuthentication", // 21 "MailUserName", // 22 "MailPassword", // 23 "DataSource/DataSourceName",// 24 "DataSource/DataTableName", // 25 "DataSource/DataCommandType",// 26 "Filter", // 27 "SavedDocuments", // 28 "EMailSupported", // 29 "IsEMailGreetingLine", //30 "IsEMailIndividualGreetingLine", //31 "IsSMPTAfterPOP", //32 "InServerName", //33 "InServerPort", //34 "InServerIsPOP", //35 "InServerUserName", //36 "InServerPassword", //37 "IsHideEmptyParagraphs", //38 "CurrentAddressBlock" //39 }; const int nCount = sizeof(aPropNames)/sizeof(const char*); aNames.realloc(nCount); OUString* pNames = aNames.getArray(); for(int i = 0; i < nCount; i++) pNames[i] = OUString::createFromAscii(aPropNames[i]); } return aNames; } /*-- 15.04.2004 08:48:39--------------------------------------------------- -----------------------------------------------------------------------*/ void SwMailMergeConfigItem_Impl::Notify( const ::com::sun::star::uno::Sequence< rtl::OUString >& ) {} void SwMailMergeConfigItem_Impl::Commit() { Sequence aNames = GetPropertyNames(); Sequence aValues(aNames.getLength()); Any* pValues = aValues.getArray(); for(int nProp = 0; nProp < aNames.getLength(); nProp++) { switch(nProp) { case 0: pValues[nProp] <<= bIsOutputToLetter; break;// case 1: pValues[nProp] <<= bIncludeCountry; break; case 2: pValues[nProp] <<= sExcludeCountry; break; case 3: pValues[nProp] <<= GetAddressBlocks(sal_True); break; case 4: { if( bUserSettingWereOverwritten == sal_True ) pValues[nProp] <<= bIsAddressBlock_LastUserSetting; else pValues[nProp] <<= bIsAddressBlock; break; } case 5: { if( bUserSettingWereOverwritten == sal_True ) pValues[nProp] <<= bIsGreetingLine_LastUserSetting; else pValues[nProp] <<= bIsGreetingLine; break; } case 6: pValues[nProp] <<= bIsIndividualGreetingLine; break; case 7: case 8: case 9: pValues[nProp] <<= GetGreetings( SwMailMergeConfigItem::Gender( SwMailMergeConfigItem::FEMALE + nProp - 7), sal_True); break; case 10: pValues[nProp] <<= nCurrentFemaleGreeting; break; case 11: pValues[nProp] <<= nCurrentMaleGreeting; break; case 12: pValues[nProp] <<= nCurrentNeutralGreeting; break; case 13: pValues[nProp] <<= sFemaleGenderValue; break; case 14: pValues[nProp] <<= sMailDisplayName; break; case 15: pValues[nProp] <<= sMailAddress; break; case 16: pValues[nProp] <<= bIsMailReplyTo; break; case 17: pValues[nProp] <<= sMailReplyTo; break; case 18: pValues[nProp] <<= sMailServer; break; case 19: if(!bIsDefaultPort) pValues[nProp] <<= nMailPort; break; case 20: pValues[nProp] <<= bIsSecureConnection; break; case 21: pValues[nProp] <<= bIsAuthentication; break; case 22: pValues[nProp] <<= sMailUserName; break; case 23: pValues[nProp] <<= sMailPassword; break; case 24 :pValues[nProp] <<= aDBData.sDataSource; break; case 25 :pValues[nProp] <<= aDBData.sCommand; break; case 26 :pValues[nProp] <<= (short)aDBData.nCommandType; break; case 27 :pValues[nProp] <<= sFilter; break; case 28 :pValues[nProp] <<= aSavedDocuments; break; case 29: pValues[nProp] <<= bIsEMailSupported; break; case 30: { if( bUserSettingWereOverwritten == sal_True ) pValues[nProp] <<= bIsGreetingLineInMail_LastUserSetting; else pValues[nProp] <<= bIsGreetingLineInMail; break; } case 31: pValues[nProp] <<= bIsIndividualGreetingLineInMail; break; case 32: pValues[nProp] <<= bIsSMPTAfterPOP; break; case 33: pValues[nProp] <<= sInServerName; break; case 34: pValues[nProp] <<= nInServerPort; break; case 35: pValues[nProp] <<= bInServerPOP; break; case 36: pValues[nProp] <<= sInServerUserName; break; case 37: pValues[nProp] <<= sInServerPassword; break; case 38: pValues[nProp] <<= bIsHideEmptyParagraphs; break; case 39: pValues[nProp] <<= nCurrentAddressBlock; break; } } PutProperties(aNames, aValues); //store the changed / new assignments //load the existing node names to find new names Sequence aAssignments = GetNodeNames(C2U(cAddressDataAssignments)); ::std::vector::iterator aAssignIter; for(aAssignIter = aAddressDataAssignments.begin(); aAssignIter != aAddressDataAssignments.end(); aAssignIter++) { if(aAssignIter->bColumnAssignmentsChanged) { //create a new node name OUString sNewNode = aAssignIter->sConfigNodeName.getLength() ? aAssignIter->sConfigNodeName : lcl_CreateNodeName(aAssignments); OUString sSlash = C2U("/"); OUString sNodePath = C2U(cAddressDataAssignments); sNodePath += sSlash; sNodePath += sNewNode; sNodePath += sSlash; //only one new entry is written Sequence< PropertyValue > aNewValues(4); PropertyValue* pNewValues = aNewValues.getArray(); pNewValues[0].Name = sNodePath; pNewValues[0].Name += C2U(cDataSourceName); pNewValues[0].Value <<= aAssignIter->aDBData.sDataSource; pNewValues[1].Name = sNodePath; pNewValues[1].Name += C2U(cDataTableName); pNewValues[1].Value <<= aAssignIter->aDBData.sCommand; pNewValues[2].Name = sNodePath; pNewValues[2].Name += C2U(cDataCommandType); pNewValues[2].Value <<= aAssignIter->aDBData.nCommandType; pNewValues[3].Name = sNodePath; pNewValues[3].Name += C2U(cDBColumnAssignments); pNewValues[3].Value <<= aAssignIter->aDBColumnAssignments; SetSetProperties(C2U(cAddressDataAssignments), aNewValues); } } bUserSettingWereOverwritten = sal_False; } /*-- 06.05.2004 13:04:36--------------------------------------------------- -----------------------------------------------------------------------*/ const Sequence< ::rtl::OUString> SwMailMergeConfigItem_Impl::GetAddressBlocks( sal_Bool bConvertToConfig) const { Sequence< ::rtl::OUString> aRet(aAddressBlocks.size()); ::rtl::OUString* pRet = aRet.getArray(); for(sal_uInt32 nBlock = 0; nBlock < aAddressBlocks.size(); nBlock++) { pRet[nBlock] = aAddressBlocks[nBlock]; if(bConvertToConfig) lcl_ConvertToNumbers(pRet[nBlock], m_AddressHeaderSA); } return aRet; } /*-- 06.05.2004 13:04:36--------------------------------------------------- -----------------------------------------------------------------------*/ void SwMailMergeConfigItem_Impl::SetAddressBlocks( const Sequence< ::rtl::OUString>& rBlocks, sal_Bool bConvertFromConfig) { aAddressBlocks.clear(); for(sal_Int32 nBlock = 0; nBlock < rBlocks.getLength(); nBlock++) { OUString sBlock = rBlocks[nBlock]; if(bConvertFromConfig) lcl_ConvertFromNumbers(sBlock, m_AddressHeaderSA); aAddressBlocks.push_back(sBlock); } nCurrentAddressBlock = 0; SetModified(); } /*-- 30.04.2004 11:04:52--------------------------------------------------- -----------------------------------------------------------------------*/ const Sequence< ::rtl::OUString> SwMailMergeConfigItem_Impl::GetGreetings( SwMailMergeConfigItem::Gender eType, sal_Bool bConvertToConfig) const { const ::std::vector< ::rtl::OUString>& rGreetings = eType == SwMailMergeConfigItem::FEMALE ? aFemaleGreetingLines : eType == SwMailMergeConfigItem::MALE ? aMaleGreetingLines : aNeutralGreetingLines; Sequence< ::rtl::OUString> aRet(rGreetings.size()); ::rtl::OUString* pRet = aRet.getArray(); for(sal_uInt32 nGreeting = 0; nGreeting < rGreetings.size(); nGreeting++) { pRet[nGreeting] = rGreetings[nGreeting]; if(bConvertToConfig) lcl_ConvertToNumbers(pRet[nGreeting], m_AddressHeaderSA); } return aRet; } /*-- 30.04.2004 11:04:52--------------------------------------------------- -----------------------------------------------------------------------*/ void SwMailMergeConfigItem_Impl::SetGreetings( SwMailMergeConfigItem::Gender eType, const Sequence< ::rtl::OUString>& rSetGreetings, sal_Bool bConvertFromConfig) { ::std::vector< ::rtl::OUString>& rGreetings = eType == SwMailMergeConfigItem::FEMALE ? aFemaleGreetingLines : eType == SwMailMergeConfigItem::MALE ? aMaleGreetingLines : aNeutralGreetingLines; rGreetings.clear(); for(sal_Int32 nGreeting = 0; nGreeting < rSetGreetings.getLength(); nGreeting++) { OUString sGreeting = rSetGreetings[nGreeting]; if(bConvertFromConfig) lcl_ConvertFromNumbers(sGreeting, m_AddressHeaderSA); rGreetings.push_back(sGreeting); } SetModified(); } /*-- 11.05.2004 13:13:54--------------------------------------------------- -----------------------------------------------------------------------*/ sal_Int32 SwMailMergeConfigItem_Impl::GetCurrentGreeting( SwMailMergeConfigItem::Gender eType) const { sal_Int32 nRet; switch(eType) { case SwMailMergeConfigItem::FEMALE: nRet = nCurrentFemaleGreeting ; break; case SwMailMergeConfigItem::MALE: nRet = nCurrentMaleGreeting ; break; default: nRet = nCurrentNeutralGreeting; break; } return nRet; } /*-- 11.05.2004 13:13:54--------------------------------------------------- -----------------------------------------------------------------------*/ void SwMailMergeConfigItem_Impl::SetCurrentGreeting( SwMailMergeConfigItem::Gender eType, sal_Int32 nIndex) { bool bChanged = false; switch(eType) { case SwMailMergeConfigItem::FEMALE: bChanged = nCurrentFemaleGreeting != nIndex; nCurrentFemaleGreeting = nIndex; break; case SwMailMergeConfigItem::MALE: bChanged = nCurrentMaleGreeting != nIndex; nCurrentMaleGreeting = nIndex; break; default: bChanged = nCurrentNeutralGreeting != nIndex; nCurrentNeutralGreeting = nIndex; } if(bChanged) SetModified(); } static SwMailMergeConfigItem_Impl* pOptions = NULL; static sal_Int32 nRefCount = 0; static ::osl::Mutex aMutex; /*-- 15.04.2004 08:42:43--------------------------------------------------- -----------------------------------------------------------------------*/ SwMailMergeConfigItem::SwMailMergeConfigItem() : m_bAddressInserted(false), m_bMergeDone(false), m_bGreetingInserted(false), m_nGreetingMoves(0), m_nStartPrint(0), m_nEndPrint(0), m_pSourceView(0), m_pTargetView(0) { // Global access, must be guarded (multithreading) ::osl::MutexGuard aGuard( aMutex ); if ( !pOptions ) pOptions = new SwMailMergeConfigItem_Impl; ++nRefCount; m_pImpl = pOptions; } /*-- 15.04.2004 08:43:36--------------------------------------------------- -----------------------------------------------------------------------*/ SwMailMergeConfigItem::~SwMailMergeConfigItem() { // Global access, must be guarded (multithreading) ::osl::MutexGuard aGuard( aMutex ); if ( !--nRefCount ) { DELETEZ( pOptions ); } } /*-- 06.05.2004 14:18:10--------------------------------------------------- -----------------------------------------------------------------------*/ void SwMailMergeConfigItem::Commit() { if(m_pImpl->IsModified()) m_pImpl->Commit(); } /*-- 06.05.2004 12:59:50--------------------------------------------------- -----------------------------------------------------------------------*/ const ResStringArray& SwMailMergeConfigItem::GetDefaultAddressHeaders() const { return m_pImpl->m_AddressHeaderSA; } /*-- 27.04.2004 14:34:16--------------------------------------------------- -----------------------------------------------------------------------*/ void SwMailMergeConfigItem::SetAddressBlocks( const Sequence< ::rtl::OUString>& rBlocks) { m_pImpl->SetAddressBlocks(rBlocks); } /*-- 27.04.2004 14:34:16--------------------------------------------------- -----------------------------------------------------------------------*/ const Sequence< ::rtl::OUString> SwMailMergeConfigItem::GetAddressBlocks() const { return m_pImpl->GetAddressBlocks(); } /*-- 11.05.2004 17:08:45--------------------------------------------------- -----------------------------------------------------------------------*/ sal_Bool SwMailMergeConfigItem::IsAddressBlock()const { return m_pImpl->bIsAddressBlock && IsOutputToLetter(); } /*-- 11.05.2004 17:08:46--------------------------------------------------- -----------------------------------------------------------------------*/ void SwMailMergeConfigItem::SetAddressBlock(sal_Bool bSet) { m_pImpl->bUserSettingWereOverwritten = sal_False; if(m_pImpl->bIsAddressBlock != bSet) { m_pImpl->bIsAddressBlock = bSet; m_pImpl->SetModified(); } } /*-- 30.08.2005 15:09:46--------------------------------------------------- -----------------------------------------------------------------------*/ sal_Bool SwMailMergeConfigItem::IsHideEmptyParagraphs() const { return m_pImpl->bIsHideEmptyParagraphs; } /*-- 30.08.2005 15:09:47--------------------------------------------------- -----------------------------------------------------------------------*/ void SwMailMergeConfigItem::SetHideEmptyParagraphs(sal_Bool bSet) { if(m_pImpl->bIsHideEmptyParagraphs != bSet) { m_pImpl->bIsHideEmptyParagraphs = bSet; m_pImpl->SetModified(); } } /*-- 28.04.2004 13:00:02--------------------------------------------------- -----------------------------------------------------------------------*/ sal_Bool SwMailMergeConfigItem::IsIncludeCountry() const { return m_pImpl->bIncludeCountry; } /*-- 28.04.2004 13:00:02--------------------------------------------------- -----------------------------------------------------------------------*/ rtl::OUString& SwMailMergeConfigItem::GetExcludeCountry() const { return m_pImpl->sExcludeCountry; } /*-- 28.04.2004 13:00:02--------------------------------------------------- -----------------------------------------------------------------------*/ void SwMailMergeConfigItem::SetCountrySettings(sal_Bool bSet, const rtl::OUString& rCountry) { if(m_pImpl->sExcludeCountry != rCountry || m_pImpl->bIncludeCountry != bSet) { m_pImpl->bIncludeCountry = bSet; m_pImpl->sExcludeCountry = bSet ? rCountry : OUString(); m_pImpl->SetModified(); } } /*-- 28.04.2004 15:35:16--------------------------------------------------- -----------------------------------------------------------------------*/ void SwMailMergeConfigItem::SetCurrentConnection( Reference< XDataSource> xSource, SharedConnection xConnection, Reference< XColumnsSupplier> xColumnsSupplier, const SwDBData& rDBData) { m_pImpl->xSource = xSource ; m_pImpl->xConnection = xConnection ; m_pImpl->xColumnsSupplier = xColumnsSupplier; m_pImpl->aDBData = rDBData; m_pImpl->xResultSet = 0; m_pImpl->nResultSetCursorPos = 0; m_pImpl->SetModified(); } /*-- 28.04.2004 15:38:11--------------------------------------------------- -----------------------------------------------------------------------*/ Reference< XDataSource> SwMailMergeConfigItem::GetSource() { return m_pImpl->xSource; } /*-- 28.04.2004 15:38:11--------------------------------------------------- -----------------------------------------------------------------------*/ SharedConnection SwMailMergeConfigItem::GetConnection() { return m_pImpl->xConnection; } /*-- 28.04.2004 15:38:11--------------------------------------------------- -----------------------------------------------------------------------*/ Reference< XColumnsSupplier> SwMailMergeConfigItem::GetColumnsSupplier() { if(!m_pImpl->xColumnsSupplier.is() && m_pImpl->xConnection.is()) { m_pImpl->xColumnsSupplier = SwNewDBMgr::GetColumnSupplier(m_pImpl->xConnection, m_pImpl->aDBData.sCommand, m_pImpl->aDBData.nCommandType == CommandType::TABLE ? SW_DB_SELECT_TABLE : SW_DB_SELECT_QUERY ); } return m_pImpl->xColumnsSupplier; } /*-- 30.04.2004 14:30:55--------------------------------------------------- -----------------------------------------------------------------------*/ const SwDBData& SwMailMergeConfigItem::GetCurrentDBData() const { return m_pImpl->aDBData; } /*-- 17.06.2004 13:18:47--------------------------------------------------- -----------------------------------------------------------------------*/ void SwMailMergeConfigItem::SetCurrentDBData( const SwDBData& rDBData) { if(m_pImpl->aDBData != rDBData) { m_pImpl->aDBData = rDBData; m_pImpl->xConnection.clear(); m_pImpl->xSource = 0; m_pImpl->xColumnsSupplier = 0; m_pImpl->SetModified(); } } /*-- 29.04.2004 11:34:36--------------------------------------------------- -----------------------------------------------------------------------*/ Reference< XResultSet> SwMailMergeConfigItem::GetResultSet() const { if(!m_pImpl->xConnection.is() && m_pImpl->aDBData.sDataSource.getLength()) { m_pImpl->xConnection.reset( SwNewDBMgr::GetConnection( m_pImpl->aDBData.sDataSource, m_pImpl->xSource ), SharedConnection::TakeOwnership ); } if(!m_pImpl->xResultSet.is() && m_pImpl->xConnection.is()) { try { Reference< XMultiServiceFactory > xMgr( ::comphelper::getProcessServiceFactory() ); if( xMgr.is() ) { Reference xRowSet( xMgr->createInstance(C2U("com.sun.star.sdb.RowSet")), UNO_QUERY); Reference xRowProperties(xRowSet, UNO_QUERY); xRowProperties->setPropertyValue(C2U("DataSourceName"), makeAny(m_pImpl->aDBData.sDataSource)); xRowProperties->setPropertyValue(C2U("Command"), makeAny(m_pImpl->aDBData.sCommand)); xRowProperties->setPropertyValue(C2U("CommandType"), makeAny(m_pImpl->aDBData.nCommandType)); xRowProperties->setPropertyValue(C2U("FetchSize"), makeAny((sal_Int32)10)); xRowProperties->setPropertyValue(C2U("ActiveConnection"), makeAny(m_pImpl->xConnection.getTyped())); try { xRowProperties->setPropertyValue(C2U("ApplyFilter"), makeAny(m_pImpl->sFilter.getLength()>0)); xRowProperties->setPropertyValue(C2U("Filter"), makeAny(m_pImpl->sFilter)); } catch(Exception&) { DBG_ERROR("exception caught in xResultSet->SetFilter()"); } xRowSet->execute(); m_pImpl->xResultSet = xRowSet.get(); m_pImpl->xResultSet->first(); m_pImpl->nResultSetCursorPos = 1; } } catch(Exception& ) { DBG_ERROR("exception caught in: SwMailMergeConfigItem::GetResultSet() "); } } return m_pImpl->xResultSet; } /*-- 13.08.2004 11:49:46--------------------------------------------------- -----------------------------------------------------------------------*/ void SwMailMergeConfigItem::DisposeResultSet() { m_pImpl->xConnection.clear(); if(m_pImpl->xResultSet.is()) { ::comphelper::disposeComponent( m_pImpl->xResultSet ); } } /*-- 14.05.2004 15:07:55--------------------------------------------------- -----------------------------------------------------------------------*/ ::rtl::OUString& SwMailMergeConfigItem::GetFilter() const { return m_pImpl->sFilter; } /*-- 14.05.2004 15:07:55--------------------------------------------------- -----------------------------------------------------------------------*/ void SwMailMergeConfigItem::SetFilter(::rtl::OUString& rFilter) { if(m_pImpl->sFilter != rFilter) { m_pImpl->sFilter = rFilter; m_pImpl->SetModified(); Reference xRowProperties(m_pImpl->xResultSet, UNO_QUERY); if(xRowProperties.is()) { try { xRowProperties->setPropertyValue(C2U("ApplyFilter"), makeAny(m_pImpl->sFilter.getLength()>0)); xRowProperties->setPropertyValue(C2U("Filter"), makeAny(m_pImpl->sFilter)); uno::Reference xRowSet( m_pImpl->xResultSet, UNO_QUERY_THROW ); xRowSet->execute(); } catch(Exception&) { DBG_ERROR("exception caught in SwMailMergeConfigItem::SetFilter()"); } } } } /*-- 29.04.2004 11:55:38--------------------------------------------------- -----------------------------------------------------------------------*/ sal_Int32 SwMailMergeConfigItem::MoveResultSet(sal_Int32 nTarget) { if(!m_pImpl->xResultSet.is()) GetResultSet(); if(m_pImpl->xResultSet.is()) { try { //no action if the resultset is already at the right position if(m_pImpl->xResultSet->getRow() != nTarget) { if(nTarget > 0) { sal_Bool bMoved = m_pImpl->xResultSet->absolute(nTarget); if(!bMoved) { if(nTarget > 1) m_pImpl->xResultSet->last(); else if(nTarget == 1) m_pImpl->xResultSet->first(); } } else if(nTarget == -1) m_pImpl->xResultSet->last(); m_pImpl->nResultSetCursorPos = m_pImpl->xResultSet->getRow(); } } catch(Exception&) { } } return m_pImpl->nResultSetCursorPos; } /*-- 27.05.2004 13:56:18--------------------------------------------------- -----------------------------------------------------------------------*/ bool SwMailMergeConfigItem::IsResultSetFirstLast(bool& bIsFirst, bool& bIsLast) { bool bRet = false; if(!m_pImpl->xResultSet.is()) GetResultSet(); if(m_pImpl->xResultSet.is()) { try { bIsFirst = m_pImpl->xResultSet->isFirst(); bIsLast = m_pImpl->xResultSet->isLast(); bRet = true; } catch(Exception&) { } } return bRet; } /*-- 29.04.2004 11:55:38--------------------------------------------------- -----------------------------------------------------------------------*/ sal_Int32 SwMailMergeConfigItem::GetResultSetPosition() const { return m_pImpl->nResultSetCursorPos; } /*-- 27.05.2004 14:49:53--------------------------------------------------- -----------------------------------------------------------------------*/ bool SwMailMergeConfigItem::IsRecordExcluded(sal_Int32 nRecord) { bool bRet = false; if(nRecord > 0 && nRecord < m_aSelection.getLength()) { sal_Int32 nTemp = 0; m_aSelection[nRecord - 1] >>= nTemp; bRet = nTemp < 1; } return bRet; } /*-- 27.05.2004 14:49:53--------------------------------------------------- -----------------------------------------------------------------------*/ void SwMailMergeConfigItem::ExcludeRecord(sal_Int32 nRecord, bool bExclude) { //nRecord is based on 1 //the selection array contains Anys for all records //excluded records contain a '-1' if(!m_aSelection.getLength() || nRecord > m_aSelection.getLength()) { if(bExclude) { //if no selection array is available we need to create one containing the //entries for all available records if(!m_pImpl->xResultSet.is()) GetResultSet(); if(m_pImpl->xResultSet.is()) { m_pImpl->xResultSet->last(); sal_Int32 nEnd = m_pImpl->xResultSet->getRow(); sal_Int32 nStart = m_aSelection.getLength(); m_aSelection.realloc(nEnd); Any* pSelection = m_aSelection.getArray(); for(sal_Int32 nIndex = nStart; nIndex < nEnd; ++nIndex) { if((nRecord - 1) != nIndex) pSelection[nIndex] <<= nIndex + 1; else pSelection[nIndex] <<= (sal_Int32) -1; } } } } else { if(nRecord > 0 && m_aSelection.getLength() > nRecord) { m_aSelection[nRecord - 1] <<= bExclude ? -1 : nRecord; } } } /*-- 27.05.2004 15:08:35--------------------------------------------------- -----------------------------------------------------------------------*/ Sequence< Any > SwMailMergeConfigItem::GetSelection() const { Sequence< Any > aRet(m_aSelection.getLength()); sal_Int32 nRetIndex = 0; sal_Int32 nRet; for(sal_Int32 nIndex = 0; nIndex < m_aSelection.getLength(); ++nIndex) { m_aSelection[nIndex] >>= nRet; if(nRet > 0) { aRet[nRetIndex] <<= nRet; ++nRetIndex; } } aRet.realloc(nRetIndex); return aRet; } /*-- 16.06.2004 15:15:56--------------------------------------------------- -----------------------------------------------------------------------*/ const uno::Sequence< ::rtl::OUString>& SwMailMergeConfigItem::GetSavedDocuments() const { return m_pImpl->aSavedDocuments; } /*-- 16.06.2004 15:15:56--------------------------------------------------- -----------------------------------------------------------------------*/ void SwMailMergeConfigItem::AddSavedDocument(::rtl::OUString rName) { const ::rtl::OUString* pDocs = m_pImpl->aSavedDocuments.getConstArray(); bool bFound = false; for(sal_Int32 nDoc = 0; nDoc < m_pImpl->aSavedDocuments.getLength(); ++nDoc) { if(pDocs[nDoc] == rName) { bFound = true; break; } } if(!bFound) { m_pImpl->aSavedDocuments.realloc(m_pImpl->aSavedDocuments.getLength() + 1); m_pImpl->aSavedDocuments[m_pImpl->aSavedDocuments.getLength() - 1] = rName; } } /*-- 28.04.2004 16:15:16--------------------------------------------------- -----------------------------------------------------------------------*/ sal_Bool SwMailMergeConfigItem::IsOutputToLetter()const { return m_pImpl->bIsOutputToLetter || !IsMailAvailable(); } /*-- 28.04.2004 16:15:16--------------------------------------------------- -----------------------------------------------------------------------*/ void SwMailMergeConfigItem::SetOutputToLetter(sal_Bool bSet) { if(m_pImpl->bIsOutputToLetter != bSet) { m_pImpl->bIsOutputToLetter = bSet; m_pImpl->SetModified(); } } /*-- 30.04.2004 10:51:10--------------------------------------------------- -----------------------------------------------------------------------*/ sal_Bool SwMailMergeConfigItem::IsIndividualGreeting(sal_Bool bInEMail) const { return bInEMail ? m_pImpl->bIsIndividualGreetingLineInMail : m_pImpl->bIsIndividualGreetingLine; } /*-- 30.04.2004 10:51:10--------------------------------------------------- -----------------------------------------------------------------------*/ void SwMailMergeConfigItem::SetIndividualGreeting( sal_Bool bSet, sal_Bool bInEMail) { if(bInEMail) { if(m_pImpl->bIsIndividualGreetingLineInMail != bSet) { m_pImpl->bIsIndividualGreetingLineInMail = bSet; m_pImpl->SetModified(); } } else { if(m_pImpl->bIsIndividualGreetingLine != bSet) { m_pImpl->bIsIndividualGreetingLine = bSet; m_pImpl->SetModified(); } } } /*-- 30.04.2004 10:51:10--------------------------------------------------- -----------------------------------------------------------------------*/ sal_Bool SwMailMergeConfigItem::IsGreetingLine(sal_Bool bInEMail) const { return bInEMail ? m_pImpl->bIsGreetingLineInMail : m_pImpl->bIsGreetingLine; } /*-- 30.04.2004 10:51:10--------------------------------------------------- -----------------------------------------------------------------------*/ void SwMailMergeConfigItem::SetGreetingLine(sal_Bool bSet, sal_Bool bInEMail) { m_pImpl->bUserSettingWereOverwritten = sal_False; if(bInEMail) { if(m_pImpl->bIsGreetingLineInMail != bSet) { m_pImpl->bIsGreetingLineInMail = bSet; m_pImpl->SetModified(); } } else { if(m_pImpl->bIsGreetingLine != bSet) { m_pImpl->bIsGreetingLine = bSet; m_pImpl->SetModified(); } } } /*-- 30.04.2004 11:04:52--------------------------------------------------- -----------------------------------------------------------------------*/ const Sequence< ::rtl::OUString> SwMailMergeConfigItem::GetGreetings( Gender eType ) const { return m_pImpl->GetGreetings(eType); } /*-- 30.04.2004 11:04:52--------------------------------------------------- -----------------------------------------------------------------------*/ void SwMailMergeConfigItem::SetGreetings( Gender eType, const Sequence< ::rtl::OUString>& rSetGreetings) { m_pImpl->SetGreetings( eType, rSetGreetings); } /*-- 11.05.2004 13:10:54--------------------------------------------------- -----------------------------------------------------------------------*/ sal_Int32 SwMailMergeConfigItem::GetCurrentGreeting( SwMailMergeConfigItem::Gender eType) const { return m_pImpl->GetCurrentGreeting(eType); } /*-- 11.05.2004 13:10:55--------------------------------------------------- -----------------------------------------------------------------------*/ void SwMailMergeConfigItem::SetCurrentGreeting(Gender eType, sal_Int32 nIndex) { m_pImpl->SetCurrentGreeting(eType, nIndex); } /*-- 12.05.2004 12:29:59--------------------------------------------------- -----------------------------------------------------------------------*/ const ::rtl::OUString& SwMailMergeConfigItem::GetFemaleGenderValue() const { return m_pImpl->sFemaleGenderValue; } /*-- 12.05.2004 12:29:59--------------------------------------------------- -----------------------------------------------------------------------*/ void SwMailMergeConfigItem::SetFemaleGenderValue(const ::rtl::OUString rValue) { if( m_pImpl->sFemaleGenderValue != rValue ) { m_pImpl->sFemaleGenderValue = rValue; m_pImpl->SetModified(); } } /*-- 30.04.2004 13:25:41--------------------------------------------------- -----------------------------------------------------------------------*/ Sequence< ::rtl::OUString> SwMailMergeConfigItem::GetColumnAssignment( const SwDBData& rDBData ) const { Sequence< ::rtl::OUString> aRet; ::std::vector::iterator aAssignIter; for(aAssignIter = m_pImpl->aAddressDataAssignments.begin(); aAssignIter != m_pImpl->aAddressDataAssignments.end(); aAssignIter++) { if(aAssignIter->aDBData == rDBData) { aRet = aAssignIter->aDBColumnAssignments; break; } } return aRet; } /*-- 21.05.2004 12:31:31--------------------------------------------------- returns the name that is assigned as e-mail column of the current data base -----------------------------------------------------------------------*/ ::rtl::OUString SwMailMergeConfigItem::GetAssignedColumn(sal_uInt32 nColumn) const { ::rtl::OUString sRet; Sequence< ::rtl::OUString> aAssignment = GetColumnAssignment( m_pImpl->aDBData ); if(aAssignment.getLength() > sal::static_int_cast< sal_Int32, sal_uInt32>(nColumn) && aAssignment[nColumn].getLength()) sRet = aAssignment[nColumn]; else if(nColumn < m_pImpl->m_AddressHeaderSA.Count()) sRet = m_pImpl->m_AddressHeaderSA.GetString(nColumn); return sRet; } /*-- 30.04.2004 13:25:41--------------------------------------------------- -----------------------------------------------------------------------*/ void SwMailMergeConfigItem::SetColumnAssignment( const SwDBData& rDBData, const Sequence< ::rtl::OUString>& rList) { ::std::vector::iterator aAssignIter; sal_Bool bFound = sal_False; for(aAssignIter = m_pImpl->aAddressDataAssignments.begin(); aAssignIter != m_pImpl->aAddressDataAssignments.end(); aAssignIter++) { if(aAssignIter->aDBData == rDBData) { if(aAssignIter->aDBColumnAssignments != rList) { aAssignIter->aDBColumnAssignments = rList; aAssignIter->bColumnAssignmentsChanged = true; } bFound = sal_True; break; } } if(!bFound) { DBAddressDataAssignment aAssignment; aAssignment.aDBData = rDBData; aAssignment.aDBColumnAssignments = rList; aAssignment.bColumnAssignmentsChanged = true; m_pImpl->aAddressDataAssignments.push_back(aAssignment); } m_pImpl->SetModified(); } /*-- 07.09.2005 11:50:27--------------------------------------------------- -----------------------------------------------------------------------*/ bool SwMailMergeConfigItem::IsAddressFieldsAssigned() const { bool bResult = true; Reference< XResultSet> xResultSet = GetResultSet(); uno::Reference< XColumnsSupplier > xColsSupp( xResultSet, UNO_QUERY ); if(!xColsSupp.is()) return false; uno::Reference xCols = xColsSupp->getColumns(); const ResStringArray& rHeaders = GetDefaultAddressHeaders(); Sequence< ::rtl::OUString> aAssignment = GetColumnAssignment( GetCurrentDBData() ); const ::rtl::OUString* pAssignment = aAssignment.getConstArray(); const Sequence< ::rtl::OUString> aBlocks = GetAddressBlocks(); if(aBlocks.getLength() <= m_pImpl->GetCurrentAddressBlockIndex()) return false; SwAddressIterator aIter(aBlocks[m_pImpl->GetCurrentAddressBlockIndex()]); while(aIter.HasMore()) { SwMergeAddressItem aItem = aIter.Next(); if(aItem.bIsColumn) { String sConvertedColumn = aItem.sText; for(sal_uInt16 nColumn = 0; nColumn < rHeaders.Count() && nColumn < aAssignment.getLength(); ++nColumn) { if(rHeaders.GetString(nColumn) == aItem.sText && pAssignment[nColumn].getLength()) { sConvertedColumn = pAssignment[nColumn]; break; } } //find out if the column exists in the data base if(!xCols->hasByName(sConvertedColumn)) { bResult = false; break; } } } return bResult; } /*-- 07.09.2005 11:50:27--------------------------------------------------- -----------------------------------------------------------------------*/ bool SwMailMergeConfigItem::IsGreetingFieldsAssigned() const { bool bResult = true; if(!IsIndividualGreeting(sal_False)) return true; Reference< XResultSet> xResultSet = GetResultSet(); uno::Reference< XColumnsSupplier > xColsSupp( xResultSet, UNO_QUERY ); if(!xColsSupp.is()) return false; const ResStringArray& rHeaders = GetDefaultAddressHeaders(); uno::Reference xCols = xColsSupp->getColumns(); Sequence< ::rtl::OUString> aAssignment = GetColumnAssignment( GetCurrentDBData() ); const ::rtl::OUString* pAssignment = aAssignment.getConstArray(); const Sequence< ::rtl::OUString> rFemaleEntries = GetGreetings(SwMailMergeConfigItem::FEMALE); sal_Int32 nCurrentFemale = GetCurrentGreeting(SwMailMergeConfigItem::FEMALE); const Sequence< ::rtl::OUString> rMaleEntries = GetGreetings(SwMailMergeConfigItem::MALE); sal_Int32 nCurrentMale = GetCurrentGreeting(SwMailMergeConfigItem::MALE); ::rtl::OUString sMale, sFemale; if(rFemaleEntries.getLength() > nCurrentFemale) sFemale = rFemaleEntries[nCurrentFemale]; if(rMaleEntries.getLength() > nCurrentMale) sMale = rMaleEntries[nCurrentMale]; ::rtl::OUString sAddress( sFemale ); sAddress += sMale; SwAddressIterator aIter(sAddress); while(aIter.HasMore()) { SwMergeAddressItem aItem = aIter.Next(); if(aItem.bIsColumn) { String sConvertedColumn = aItem.sText; for(sal_uInt16 nColumn = 0; nColumn < rHeaders.Count() && nColumn < aAssignment.getLength(); ++nColumn) { if(rHeaders.GetString(nColumn) == aItem.sText && pAssignment[nColumn].getLength()) { sConvertedColumn = pAssignment[nColumn]; break; } } //find out if the column exists in the data base if(!xCols->hasByName(sConvertedColumn)) { bResult = false; break; } } } return bResult; } /*-- 05.05.2004 16:10:07--------------------------------------------------- -----------------------------------------------------------------------*/ ::rtl::OUString SwMailMergeConfigItem::GetMailDisplayName() const { return m_pImpl->sMailDisplayName; } /*-- 05.05.2004 16:10:08--------------------------------------------------- -----------------------------------------------------------------------*/ void SwMailMergeConfigItem::SetMailDisplayName(const ::rtl::OUString& rName) { if(m_pImpl->sMailDisplayName != rName) { m_pImpl->sMailDisplayName = rName; m_pImpl->SetModified(); } } /*-- 05.05.2004 16:10:09--------------------------------------------------- -----------------------------------------------------------------------*/ ::rtl::OUString SwMailMergeConfigItem::GetMailAddress() const { return m_pImpl->sMailAddress; } /*-- 05.05.2004 16:10:09--------------------------------------------------- -----------------------------------------------------------------------*/ void SwMailMergeConfigItem::SetMailAddress(const ::rtl::OUString& rAddress) { if(m_pImpl->sMailAddress != rAddress ) { m_pImpl->sMailAddress = rAddress; m_pImpl->SetModified(); } } /*-- 07.05.2004 12:40:59--------------------------------------------------- -----------------------------------------------------------------------*/ sal_Bool SwMailMergeConfigItem::IsMailReplyTo() const { return m_pImpl->bIsMailReplyTo; } /*-- 07.05.2004 12:40:59--------------------------------------------------- -----------------------------------------------------------------------*/ void SwMailMergeConfigItem::SetMailReplyTo(sal_Bool bSet) { if(m_pImpl->bIsMailReplyTo != bSet) { m_pImpl->bIsMailReplyTo = bSet; m_pImpl->SetModified(); } } /*-- 05.05.2004 16:10:09--------------------------------------------------- -----------------------------------------------------------------------*/ ::rtl::OUString SwMailMergeConfigItem::GetMailReplyTo() const { return m_pImpl->sMailReplyTo; } /*-- 05.05.2004 16:10:09--------------------------------------------------- -----------------------------------------------------------------------*/ void SwMailMergeConfigItem::SetMailReplyTo(const ::rtl::OUString& rReplyTo) { if(m_pImpl->sMailReplyTo != rReplyTo) { m_pImpl->sMailReplyTo = rReplyTo; m_pImpl->SetModified(); } } /*-- 05.05.2004 16:10:09--------------------------------------------------- -----------------------------------------------------------------------*/ ::rtl::OUString SwMailMergeConfigItem::GetMailServer() const { return m_pImpl->sMailServer; } /*-- 05.05.2004 16:10:10--------------------------------------------------- -----------------------------------------------------------------------*/ void SwMailMergeConfigItem::SetMailServer(const ::rtl::OUString& rAddress) { if(m_pImpl->sMailServer != rAddress) { m_pImpl->sMailServer = rAddress; m_pImpl->SetModified(); } } /*-- 05.05.2004 16:10:10--------------------------------------------------- -----------------------------------------------------------------------*/ sal_Int16 SwMailMergeConfigItem::GetMailPort() const { return m_pImpl->bIsDefaultPort ? (m_pImpl->bIsSecureConnection ? SECURE_PORT : DEFAULT_PORT) : m_pImpl->nMailPort; } /*-- 05.05.2004 16:10:10--------------------------------------------------- -----------------------------------------------------------------------*/ void SwMailMergeConfigItem::SetMailPort(sal_Int16 nSet) { if(m_pImpl->nMailPort != nSet || m_pImpl->bIsDefaultPort) { m_pImpl->nMailPort = nSet; m_pImpl->bIsDefaultPort = sal_False; m_pImpl->SetModified(); } } /*-- 05.05.2004 16:10:11--------------------------------------------------- -----------------------------------------------------------------------*/ sal_Bool SwMailMergeConfigItem::IsSecureConnection() const { return m_pImpl->bIsSecureConnection; } /*-- 05.05.2004 16:10:12--------------------------------------------------- -----------------------------------------------------------------------*/ void SwMailMergeConfigItem::SetSecureConnection(sal_Bool bSet) { if(m_pImpl->bIsSecureConnection != bSet) { m_pImpl->bIsSecureConnection = bSet; m_pImpl->SetModified(); } } /*-- 05.05.2004 16:10:12--------------------------------------------------- -----------------------------------------------------------------------*/ sal_Bool SwMailMergeConfigItem::IsAuthentication() const { return m_pImpl->bIsAuthentication; } /*-- 05.05.2004 16:10:13--------------------------------------------------- -----------------------------------------------------------------------*/ void SwMailMergeConfigItem::SetAuthentication(sal_Bool bSet) { if(m_pImpl->bIsAuthentication != bSet) { m_pImpl->bIsAuthentication = bSet; m_pImpl->SetModified(); } } /*-- 05.05.2004 16:10:13--------------------------------------------------- -----------------------------------------------------------------------*/ ::rtl::OUString SwMailMergeConfigItem::GetMailUserName() const { return m_pImpl->sMailUserName; } /*-- 05.05.2004 16:10:13--------------------------------------------------- -----------------------------------------------------------------------*/ void SwMailMergeConfigItem::SetMailUserName(const ::rtl::OUString& rName) { if(m_pImpl->sMailUserName != rName) { m_pImpl->sMailUserName = rName; m_pImpl->SetModified(); } } /*-- 05.05.2004 16:10:14--------------------------------------------------- -----------------------------------------------------------------------*/ ::rtl::OUString SwMailMergeConfigItem::GetMailPassword() const { return m_pImpl->sMailPassword; } /*-- 05.05.2004 16:10:14--------------------------------------------------- -----------------------------------------------------------------------*/ void SwMailMergeConfigItem::SetMailPassword(const ::rtl::OUString& rPassword) { if(m_pImpl->sMailPassword != rPassword) { m_pImpl->sMailPassword = rPassword; m_pImpl->SetModified(); } } /*-- 19.08.2004 14:44:57--------------------------------------------------- -----------------------------------------------------------------------*/ sal_Bool SwMailMergeConfigItem::IsSMTPAfterPOP() const { return m_pImpl->bIsSMPTAfterPOP; } /*-- 19.08.2004 14:44:57--------------------------------------------------- -----------------------------------------------------------------------*/ void SwMailMergeConfigItem::SetSMTPAfterPOP(sal_Bool bSet) { if( m_pImpl->bIsSMPTAfterPOP != bSet) { m_pImpl->bIsSMPTAfterPOP = bSet; m_pImpl->SetModified(); } } /*-- 19.08.2004 14:44:57--------------------------------------------------- -----------------------------------------------------------------------*/ ::rtl::OUString SwMailMergeConfigItem::GetInServerName() const { return m_pImpl->sInServerName; } /*-- 19.08.2004 14:44:57--------------------------------------------------- -----------------------------------------------------------------------*/ void SwMailMergeConfigItem::SetInServerName(const ::rtl::OUString& rServer) { if(m_pImpl->sInServerName != rServer) { m_pImpl->sInServerName = rServer; m_pImpl->SetModified(); } } /*-- 19.08.2004 14:44:58--------------------------------------------------- -----------------------------------------------------------------------*/ sal_Int16 SwMailMergeConfigItem::GetInServerPort() const { return m_pImpl->nInServerPort; } /*-- 19.08.2004 14:44:58--------------------------------------------------- -----------------------------------------------------------------------*/ void SwMailMergeConfigItem::SetInServerPort(sal_Int16 nSet) { if( m_pImpl->nInServerPort != nSet) { m_pImpl->nInServerPort = nSet; m_pImpl->SetModified(); } } /*-- 20.08.2004 08:52:48--------------------------------------------------- -----------------------------------------------------------------------*/ sal_Bool SwMailMergeConfigItem::IsInServerPOP() const { return m_pImpl->bInServerPOP; } /*-- 20.08.2004 08:52:49--------------------------------------------------- -----------------------------------------------------------------------*/ void SwMailMergeConfigItem::SetInServerPOP(sal_Bool bSet) { if( m_pImpl->bInServerPOP != bSet) { m_pImpl->bInServerPOP = bSet; m_pImpl->SetModified(); } } /*-- 19.08.2004 14:44:58--------------------------------------------------- -----------------------------------------------------------------------*/ ::rtl::OUString SwMailMergeConfigItem::GetInServerUserName() const { return m_pImpl->sInServerUserName; } /*-- 19.08.2004 14:44:58--------------------------------------------------- -----------------------------------------------------------------------*/ void SwMailMergeConfigItem::SetInServerUserName(const ::rtl::OUString& rName) { if( m_pImpl->sInServerUserName != rName) { m_pImpl->sInServerUserName = rName; m_pImpl->SetModified(); } } /*-- 19.08.2004 14:44:59--------------------------------------------------- -----------------------------------------------------------------------*/ ::rtl::OUString SwMailMergeConfigItem::GetInServerPassword() const { return m_pImpl->sInServerPassword; } /*-- 19.08.2004 14:45:00--------------------------------------------------- -----------------------------------------------------------------------*/ void SwMailMergeConfigItem::SetInServerPassword(const ::rtl::OUString& rPassword) { if(m_pImpl->sInServerPassword != rPassword) { m_pImpl->sInServerPassword = rPassword; m_pImpl->SetModified(); } } /*-- 02.09.2004 14:43:27--------------------------------------------------- -----------------------------------------------------------------------*/ void SwMailMergeConfigItem::DocumentReloaded() { m_bMergeDone = false; m_bGreetingInserted = false; m_bAddressInserted = false; m_rAddressBlockFrame = ::rtl::OUString(); } /*-- 16.06.2004 12:24:18--------------------------------------------------- -----------------------------------------------------------------------*/ bool SwMailMergeConfigItem::IsMailAvailable() const { return m_pImpl->bIsEMailSupported; } /*-- 21.05.2004 12:20:05--------------------------------------------------- -----------------------------------------------------------------------*/ void SwMailMergeConfigItem::AddMergedDocument(SwDocMergeInfo& rInfo) { m_pImpl->aMergeInfos.push_back(rInfo); } /*-- 21.05.2004 12:20:05--------------------------------------------------- -----------------------------------------------------------------------*/ SwDocMergeInfo& SwMailMergeConfigItem::GetDocumentMergeInfo(sal_uInt32 nDocument) { DBG_ASSERT(m_pImpl->aMergeInfos.size() > nDocument,"invalid document index"); return m_pImpl->aMergeInfos[nDocument]; } /*-- 14.06.2004 11:46:26--------------------------------------------------- -----------------------------------------------------------------------*/ sal_uInt32 SwMailMergeConfigItem::GetMergedDocumentCount() const { return m_pImpl->aMergeInfos.size(); } /*-- 11.06.2004 10:38:39--------------------------------------------------- -----------------------------------------------------------------------*/ SwView* lcl_ExistsView(SwView* pView) { const TypeId aType(TYPE(SwView)); SfxViewShell* pViewShell = SfxViewShell::GetFirst( &aType, sal_False ); while(pViewShell) { if(pViewShell == pView) return pView; pViewShell = SfxViewShell::GetNext( *pViewShell, &aType, sal_False ); } return 0; } /*-- 16.06.2004 15:02:35--------------------------------------------------- -----------------------------------------------------------------------*/ SwView* SwMailMergeConfigItem::GetTargetView() { //make sure that the pointer is really valid - the document may have been closed manually if(m_pTargetView) { m_pTargetView = lcl_ExistsView(m_pTargetView); } return m_pTargetView; } /*-- 02.09.2004 17:04:11--------------------------------------------------- -----------------------------------------------------------------------*/ void SwMailMergeConfigItem::SetTargetView(SwView* pView) { m_pTargetView = pView; //reset the document merge counter if(!m_pTargetView) { m_pImpl->aMergeInfos.clear(); } } /*-- 16.06.2004 15:02:35--------------------------------------------------- -----------------------------------------------------------------------*/ SwView* SwMailMergeConfigItem::GetSourceView() { m_pSourceView = lcl_ExistsView(m_pSourceView); return m_pSourceView; } /*-- 04.11.2004 19:53 --------------------------------------------------- -----------------------------------------------------------------------*/ void SwMailMergeConfigItem::SetSourceView(SwView* pView) { m_pSourceView = pView; if(pView) { SvStringsDtor aDBNameList(5, 1); SvStringsDtor aAllDBNames(5, 5); pView->GetWrtShell().GetAllUsedDB( aDBNameList, &aAllDBNames ); if(aDBNameList.Count()) { // if fields are available there is usually no need of an addressblock and greeting if(!m_pImpl->bUserSettingWereOverwritten) { if( m_pImpl->bIsAddressBlock == sal_True || m_pImpl->bIsGreetingLineInMail == sal_True || m_pImpl->bIsGreetingLine == sal_True ) { //store user settings m_pImpl->bUserSettingWereOverwritten = sal_True; m_pImpl->bIsAddressBlock_LastUserSetting = m_pImpl->bIsAddressBlock; m_pImpl->bIsGreetingLineInMail_LastUserSetting = m_pImpl->bIsGreetingLineInMail; m_pImpl->bIsGreetingLine_LastUserSetting = m_pImpl->bIsGreetingLine; //set all to false m_pImpl->bIsAddressBlock = sal_False; m_pImpl->bIsGreetingLineInMail = sal_False; m_pImpl->bIsGreetingLine = sal_False; m_pImpl->SetModified(); } } } else if( m_pImpl->bUserSettingWereOverwritten ) { //restore last user settings: m_pImpl->bIsAddressBlock = m_pImpl->bIsAddressBlock_LastUserSetting; m_pImpl->bIsGreetingLineInMail = m_pImpl->bIsGreetingLineInMail_LastUserSetting; m_pImpl->bIsGreetingLine = m_pImpl->bIsGreetingLine_LastUserSetting; m_pImpl->bUserSettingWereOverwritten = sal_False; } } } /*-- 13.03.2006 12:15:06--------------------------------------------------- -----------------------------------------------------------------------*/ void SwMailMergeConfigItem::SetCurrentAddressBlockIndex( sal_Int32 nSet ) { m_pImpl->SetCurrentAddressBlockIndex( nSet ); } /*-- 13.03.2006 12:15:07--------------------------------------------------- -----------------------------------------------------------------------*/ sal_Int32 SwMailMergeConfigItem::GetCurrentAddressBlockIndex() const { return m_pImpl->GetCurrentAddressBlockIndex(); }