1 /**************************************************************
2 *
3 * Licensed to the Apache Software Foundation (ASF) under one
4 * or more contributor license agreements. See the NOTICE file
5 * distributed with this work for additional information
6 * regarding copyright ownership. The ASF licenses this file
7 * to you under the Apache License, Version 2.0 (the
8 * "License"); you may not use this file except in compliance
9 * with the License. You may obtain a copy of the License at
10 *
11 * http://www.apache.org/licenses/LICENSE-2.0
12 *
13 * Unless required by applicable law or agreed to in writing,
14 * software distributed under the License is distributed on an
15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16 * KIND, either express or implied. See the License for the
17 * specific language governing permissions and limitations
18 * under the License.
19 *
20 *************************************************************/
21
22
23
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_sw.hxx"
26 #include <mmconfigitem.hxx>
27 #include <swtypes.hxx>
28 #include <tools/debug.hxx>
29 #include <com/sun/star/uno/Any.hxx>
30 #include <com/sun/star/beans/PropertyValue.hpp>
31 #include <com/sun/star/sdb/XCompletedConnection.hpp>
32 #include <com/sun/star/sdbc/XDataSource.hpp>
33 #include <com/sun/star/sdbcx/XColumnsSupplier.hpp>
34 #include "com/sun/star/mail/MailServiceType.hpp"
35 #include "com/sun/star/mail/XMailService.hpp"
36 #include "com/sun/star/mail/MailServiceProvider.hpp"
37 #include <com/sun/star/lang/XMultiServiceFactory.hpp>
38 #include <com/sun/star/beans/XPropertySet.hpp>
39 #include <com/sun/star/sdbc/XRowSet.hpp>
40 #include <comphelper/processfactory.hxx>
41 #include <comphelper/types.hxx>
42 #include <com/sun/star/sdb/CommandType.hpp>
43 #include <unotools/configitem.hxx>
44 #include <mailmergehelper.hxx>
45 #include <swunohelper.hxx>
46 #ifndef _DBMGR_HXX
47 #include <dbmgr.hxx>
48 #endif
49 #ifndef _VIEW_HXX
50 #include <view.hxx>
51 #endif
52 #include <wrtsh.hxx>
53 #include <dbui.hrc>
54 #include <vector>
55
56 #include <unomid.h>
57
58 #define _SVSTDARR_STRINGSDTOR
59 #include <svl/svstdarr.hxx>
60
61 using namespace utl;
62 using ::rtl::OUString;
63 using namespace ::com::sun::star;
64 using namespace ::com::sun::star::uno;
65 using namespace ::com::sun::star::lang;
66 using namespace ::com::sun::star::beans;
67 using namespace ::com::sun::star::sdb;
68 using namespace ::com::sun::star::sdbc;
69 using namespace ::com::sun::star::sdbcx;
70
71 const char* cAddressDataAssignments = "AddressDataAssignments";
72 const char* cDBColumnAssignments = "DBColumnAssignments";
73 const char* cDataSourceName = "DataSource/DataSourceName";
74 const char* cDataTableName = "DataSource/DataTableName" ;
75 const char* cDataCommandType = "DataSource/DataCommandType";
76
77 #define SECURE_PORT 465
78 #define DEFAULT_PORT 25
79 #define POP_PORT 110
80
81 /*-- 16.04.2004 09:41:36---------------------------------------------------
82
83 -----------------------------------------------------------------------*/
84 struct DBAddressDataAssignment
85 {
86 SwDBData aDBData;
87 Sequence< ::rtl::OUString> aDBColumnAssignments;
88 //if loaded the name of the node has to be saved
89 ::rtl::OUString sConfigNodeName;
90 //all created or changed assignments need to be stored
91 bool bColumnAssignmentsChanged;
92
DBAddressDataAssignmentDBAddressDataAssignment93 DBAddressDataAssignment() :
94 bColumnAssignmentsChanged(false)
95 {}
96 };
97
98 /*-- 16.04.2004 09:43:29---------------------------------------------------
99
100 -----------------------------------------------------------------------*/
101 class SwMailMergeConfigItem_Impl : public utl::ConfigItem
102 {
103 friend class SwMailMergeConfigItem;
104 Reference< XDataSource> xSource;
105 SharedConnection xConnection;
106 Reference< XColumnsSupplier> xColumnsSupplier;
107 Reference< XStatement> xStatement;
108 Reference< XResultSet> xResultSet;
109 SwDBData aDBData;
110 ::rtl::OUString sFilter;
111 sal_Int32 nResultSetCursorPos;
112
113 ::std::vector<DBAddressDataAssignment> aAddressDataAssignments;
114 ::std::vector< ::rtl::OUString> aAddressBlocks;
115 sal_Int32 nCurrentAddressBlock;
116 sal_Bool bIsAddressBlock;
117 sal_Bool bIsHideEmptyParagraphs;
118
119 sal_Bool bIsOutputToLetter;
120 sal_Bool bIncludeCountry;
121 ::rtl::OUString sExcludeCountry;
122
123 sal_Bool bIsGreetingLine;
124 sal_Bool bIsIndividualGreetingLine;
125 ::std::vector< ::rtl::OUString> aFemaleGreetingLines;
126 sal_Int32 nCurrentFemaleGreeting;
127 ::std::vector< ::rtl::OUString> aMaleGreetingLines;
128 sal_Int32 nCurrentMaleGreeting;
129 ::std::vector< ::rtl::OUString> aNeutralGreetingLines;
130 sal_Int32 nCurrentNeutralGreeting;
131 ::rtl::OUString sFemaleGenderValue;
132 uno::Sequence< ::rtl::OUString> aSavedDocuments;
133
134 sal_Bool bIsGreetingLineInMail;
135 sal_Bool bIsIndividualGreetingLineInMail;
136
137 //mail settings
138 ::rtl::OUString sMailDisplayName;
139 ::rtl::OUString sMailAddress;
140 ::rtl::OUString sMailReplyTo;
141 ::rtl::OUString sMailServer;
142 ::rtl::OUString sMailUserName;
143 ::rtl::OUString sMailPassword;
144
145 sal_Bool bIsSMPTAfterPOP;
146 ::rtl::OUString sInServerName;
147 sal_Int16 nInServerPort;
148 sal_Bool bInServerPOP;
149 ::rtl::OUString sInServerUserName;
150 ::rtl::OUString sInServerPassword;
151
152 sal_Int16 nMailPort;
153 sal_Bool bIsMailReplyTo;
154 sal_Bool bIsDefaultPort;
155 sal_Bool bIsSecureConnection;
156 sal_Bool bIsAuthentication;
157
158 sal_Bool bIsEMailSupported;
159
160 ResStringArray m_AddressHeaderSA;
161
162 //these addresses are not stored in the configuration
163 ::std::vector< SwDocMergeInfo > aMergeInfos;
164
165 //we do overwrite the usersettings in a special case
166 //than we do remind the usersettings here
167 sal_Bool bUserSettingWereOverwritten;
168 sal_Bool bIsAddressBlock_LastUserSetting;
169 sal_Bool bIsGreetingLineInMail_LastUserSetting;
170 sal_Bool bIsGreetingLine_LastUserSetting;
171
172
173 const Sequence< ::rtl::OUString>& GetPropertyNames();
174
175 public:
176 SwMailMergeConfigItem_Impl();
177 ~SwMailMergeConfigItem_Impl();
178
179 virtual void Commit();
180 virtual void Notify( const ::com::sun::star::uno::Sequence< rtl::OUString >& aPropertyNames );
181 const Sequence< ::rtl::OUString>
182 GetAddressBlocks(sal_Bool bConvertToConfig = sal_False) const;
183 void SetAddressBlocks(
184 const Sequence< ::rtl::OUString>& rBlocks,
185 sal_Bool bConvertFromConfig = sal_False);
186 const uno::Sequence< ::rtl::OUString>
187 GetGreetings(SwMailMergeConfigItem::Gender eType,
188 sal_Bool bConvertToConfig = sal_False) const;
189 void SetGreetings(SwMailMergeConfigItem::Gender eType,
190 const uno::Sequence< ::rtl::OUString>& rBlocks,
191 sal_Bool bConvertFromConfig = sal_False);
192
193 void SetCurrentAddressBlockIndex( sal_Int32 nSet );
GetCurrentAddressBlockIndex() const194 sal_Int32 GetCurrentAddressBlockIndex() const
195 { return nCurrentAddressBlock; }
196 sal_Int32 GetCurrentGreeting(SwMailMergeConfigItem::Gender eType) const;
197 void SetCurrentGreeting(SwMailMergeConfigItem::Gender eType, sal_Int32 nIndex);
198
199 };
200
201 /*-- 06.05.2004 12:51:54---------------------------------------------------
202
203 -----------------------------------------------------------------------*/
SwMailMergeConfigItem_Impl()204 SwMailMergeConfigItem_Impl::SwMailMergeConfigItem_Impl() :
205 ConfigItem(C2U("Office.Writer/MailMergeWizard"), 0),
206 nResultSetCursorPos(-1),
207 nCurrentAddressBlock(0),
208 bIsAddressBlock(sal_True),
209 bIsHideEmptyParagraphs(sal_False),
210 bIsOutputToLetter(sal_True),
211 bIncludeCountry(sal_False),
212 bIsGreetingLine(sal_True),
213 nCurrentFemaleGreeting(0),
214 nCurrentMaleGreeting(0),
215 nCurrentNeutralGreeting(0),
216
217 bIsSMPTAfterPOP(sal_False),
218 nInServerPort( POP_PORT ),
219 bInServerPOP( sal_True ),
220 nMailPort(0),
221 bIsMailReplyTo(sal_False),
222 bIsDefaultPort(sal_False),
223 bIsSecureConnection(sal_False),
224 bIsAuthentication(sal_False),
225
226 bIsEMailSupported(sal_False),
227 m_AddressHeaderSA( SW_RES( SA_ADDRESS_HEADER )),
228 bUserSettingWereOverwritten(sal_False),
229 bIsAddressBlock_LastUserSetting(sal_False),
230 bIsGreetingLineInMail_LastUserSetting(sal_False),
231 bIsGreetingLine_LastUserSetting(sal_False)
232 {
233 const Sequence<OUString>& rNames = GetPropertyNames();
234 Sequence<Any> aValues = GetProperties(rNames);
235 const Any* pValues = aValues.getConstArray();
236 DBG_ASSERT(aValues.getLength() == rNames.getLength(), "GetProperties failed");
237 if(aValues.getLength() == rNames.getLength())
238 {
239 for(int nProp = 0; nProp < rNames.getLength(); nProp++)
240 {
241 switch(nProp)
242 {
243 case 0: pValues[nProp] >>= bIsOutputToLetter; break;
244 case 1: pValues[nProp] >>= bIncludeCountry; break;
245 case 2: pValues[nProp] >>= sExcludeCountry; break;
246 case 3:
247 {
248 Sequence< ::rtl::OUString> aBlocks;
249 pValues[nProp] >>= aBlocks;
250 SetAddressBlocks(aBlocks, sal_True);
251 }
252 break;
253 case 4: pValues[nProp] >>= bIsAddressBlock; break;
254 case 5: pValues[nProp] >>= bIsGreetingLine; break;
255 case 6: pValues[nProp] >>= bIsIndividualGreetingLine; break;
256 case 7 :
257 case 8 :
258 case 9 :
259 {
260 Sequence< ::rtl::OUString> aGreetings;
261 pValues[nProp] >>= aGreetings;
262 SetGreetings(SwMailMergeConfigItem::Gender(
263 SwMailMergeConfigItem::FEMALE + nProp - 7), aGreetings, sal_True);
264 }
265 break;
266
267 case 10: pValues[nProp] >>= nCurrentFemaleGreeting; break;
268 case 11: pValues[nProp] >>= nCurrentMaleGreeting; break;
269 case 12: pValues[nProp] >>= nCurrentNeutralGreeting; break;
270 case 13: pValues[nProp] >>= sFemaleGenderValue; break;
271 case 14: pValues[nProp] >>= sMailDisplayName; break;
272 case 15: pValues[nProp] >>= sMailAddress; break;
273 case 16: pValues[nProp] >>= bIsMailReplyTo; break;
274 case 17: pValues[nProp] >>= sMailReplyTo; break;
275 case 18: pValues[nProp] >>= sMailServer; break;
276 case 19:
277 bIsDefaultPort =
278 (pValues[nProp] >>= nMailPort) ?
279 sal_False : sal_True;
280 break;
281 case 20: pValues[nProp] >>= bIsSecureConnection; break;
282 case 21: pValues[nProp] >>= bIsAuthentication; break;
283 case 22: pValues[nProp] >>= sMailUserName; break;
284 case 23: pValues[nProp] >>= sMailPassword; break;
285 case 24 :pValues[nProp] >>= aDBData.sDataSource; break;
286 case 25 :pValues[nProp] >>= aDBData.sCommand; break;
287 case 26 :
288 {
289 short nTemp = 0;
290 if(pValues[nProp] >>= nTemp)
291 aDBData.nCommandType = nTemp;
292 }
293 break;
294 case 27: pValues[nProp] >>= sFilter; break;
295 case 28: pValues[nProp] >>= aSavedDocuments; break;
296 case 29:
297 pValues[nProp] >>= bIsEMailSupported;
298 break;
299 case 30: pValues[nProp] >>= bIsGreetingLineInMail; break;
300 case 31: pValues[nProp] >>= bIsIndividualGreetingLineInMail; break;
301 case 32: pValues[nProp] >>= bIsSMPTAfterPOP; break;
302 case 33: pValues[nProp] >>= sInServerName; break;
303 case 34: pValues[nProp] >>= nInServerPort; break;
304 case 35: pValues[nProp] >>= bInServerPOP; break;
305 case 36: pValues[nProp] >>= sInServerUserName; break;
306 case 37: pValues[nProp] >>= sInServerPassword; break;
307 case 38: pValues[nProp] >>= bIsHideEmptyParagraphs; break;
308 case 39: pValues[nProp] >>= nCurrentAddressBlock; break;
309 }
310 }
311 }
312 //read the list of data base assignments
313 Sequence<OUString> aAssignments = GetNodeNames(C2U(cAddressDataAssignments));
314 if(aAssignments.getLength())
315 {
316 //create a list of property names to load the URLs of all data bases
317 const OUString* pAssignments = aAssignments.getConstArray();
318 Sequence< ::rtl::OUString > aAssignProperties(4 * aAssignments.getLength());
319 ::rtl::OUString* pAssignProperties = aAssignProperties.getArray();
320 sal_Int32 nAssign;
321 OUString sSlash = C2U("/");
322 for(nAssign = 0; nAssign < aAssignProperties.getLength(); nAssign += 4)
323 {
324 String sAssignPath = C2U(cAddressDataAssignments);
325 sAssignPath += '/';
326 sAssignPath += String(pAssignments[nAssign / 4]);
327 sAssignPath += '/';
328 pAssignProperties[nAssign] = sAssignPath;
329 pAssignProperties[nAssign] += C2U(cDataSourceName);
330 pAssignProperties[nAssign + 1] = sAssignPath;
331 pAssignProperties[nAssign + 1] += C2U(cDataTableName);
332 pAssignProperties[nAssign + 2] = sAssignPath;
333 pAssignProperties[nAssign + 2] += C2U(cDataCommandType);
334 pAssignProperties[nAssign + 3] = sAssignPath;
335 pAssignProperties[nAssign + 3] += C2U(cDBColumnAssignments);
336 }
337 Sequence<Any> aAssignValues = GetProperties(aAssignProperties);
338 const Any* pAssignValues = aAssignValues.getConstArray();
339 for(nAssign = 0; nAssign < aAssignValues.getLength(); nAssign += 4 )
340 {
341 DBAddressDataAssignment aAssignment;
342 pAssignValues[nAssign] >>= aAssignment.aDBData.sDataSource;
343 pAssignValues[nAssign + 1] >>= aAssignment.aDBData.sCommand;
344 pAssignValues[nAssign + 2] >>= aAssignment.aDBData.nCommandType;
345 pAssignValues[nAssign + 3] >>= aAssignment.aDBColumnAssignments;
346 aAssignment.sConfigNodeName = pAssignments[nAssign / 4];
347 aAddressDataAssignments.push_back(aAssignment);
348 }
349 }
350 //check if the saved documents still exist
351 if(aSavedDocuments.getLength())
352 {
353 uno::Sequence< ::rtl::OUString > aTempDocuments(aSavedDocuments.getLength());
354 ::rtl::OUString* pTempDocuments = aTempDocuments.getArray();
355 sal_Int32 nIndex = 0;
356 for(sal_Int32 i = 0; i < aSavedDocuments.getLength(); ++i)
357 {
358 if(SWUnoHelper::UCB_IsFile( aSavedDocuments[i] ))
359 {
360 pTempDocuments[nIndex++] = aSavedDocuments[i];
361 }
362 }
363 if(nIndex < aSavedDocuments.getLength())
364 {
365 aSavedDocuments = aTempDocuments;
366 aSavedDocuments.realloc(nIndex);
367 }
368 }
369
370 }
371 /*-- 06.05.2004 12:51:54---------------------------------------------------
372
373 -----------------------------------------------------------------------*/
~SwMailMergeConfigItem_Impl()374 SwMailMergeConfigItem_Impl::~SwMailMergeConfigItem_Impl()
375 {
376 }
377 /*-- 13.03.2006 12:12:59---------------------------------------------------
378
379 -----------------------------------------------------------------------*/
SetCurrentAddressBlockIndex(sal_Int32 nSet)380 void SwMailMergeConfigItem_Impl::SetCurrentAddressBlockIndex( sal_Int32 nSet )
381 {
382 if(aAddressBlocks.size() >= sal::static_int_cast<sal_uInt32, sal_Int32>(nSet))
383 {
384 nCurrentAddressBlock = nSet;
385 SetModified();
386 }
387 }
388 /*-- 16.04.2004 13:06:07---------------------------------------------------
389
390 -----------------------------------------------------------------------*/
lcl_CreateNodeName(Sequence<OUString> & rAssignments)391 OUString lcl_CreateNodeName(Sequence<OUString>& rAssignments )
392 {
393 const OUString* pNames = rAssignments.getConstArray();
394 sal_Int32 nStart = rAssignments.getLength();
395 OUString sNewName;
396 bool bFound;
397 do
398 {
399 bFound = false;
400 sNewName = C2U("_");
401 sNewName += OUString::valueOf(nStart);
402 //search if the name exists
403 for(sal_Int32 nAssign = 0; nAssign < rAssignments.getLength(); ++nAssign)
404 {
405 if(pNames[nAssign] == sNewName)
406 {
407 bFound = true;
408 ++nStart;
409 break;
410 }
411 }
412 }
413 while(bFound);
414 // add the new name to the array of existing names
415 rAssignments.realloc(rAssignments.getLength() + 1);
416 rAssignments.getArray()[rAssignments.getLength() - 1] = sNewName;
417 return sNewName;
418 }
419 // --------------------------------------------------------------------------------
lcl_ConvertToNumbers(OUString & rBlock,const ResStringArray & rHeaders)420 void lcl_ConvertToNumbers(OUString& rBlock, const ResStringArray& rHeaders )
421 {
422 //convert the strings used for UI to numbers used for the configuration
423 String sBlock(rBlock);
424 sBlock.SearchAndReplaceAllAscii("\n", String::CreateFromAscii("\\n"));
425 for(sal_uInt16 i = 0; i < rHeaders.Count(); ++i)
426 {
427 String sHeader = rHeaders.GetString( i );
428 sHeader.Insert('<', 0);
429 sHeader += '>';
430 String sReplace(C2U("<>"));
431 sReplace.Insert('0' + i, 1);
432 sBlock.SearchAndReplaceAll(sHeader, sReplace);
433 }
434 rBlock = sBlock;
435 }
436 // --------------------------------------------------------------------------------
lcl_ConvertFromNumbers(OUString & rBlock,const ResStringArray & rHeaders)437 void lcl_ConvertFromNumbers(OUString& rBlock, const ResStringArray& rHeaders)
438 {
439 //convert the numbers used for the configuration to strings used for UI to numbers
440 //doesn't use ReplaceAll to prevent expansion of numbers inside of the headers
441 String sBlock(rBlock);
442 sBlock.SearchAndReplaceAllAscii("\\n", '\n');
443 SwAddressIterator aGreetingIter(sBlock);
444 sBlock.Erase();
445 while(aGreetingIter.HasMore())
446 {
447 SwMergeAddressItem aNext = aGreetingIter.Next();
448 if(aNext.bIsColumn)
449 {
450 //the text should be 1 characters long
451 sal_Unicode cChar = aNext.sText.GetChar(0);
452 if(cChar >= '0' && cChar <= 'c')
453 {
454 sBlock += '<';
455 sal_uInt16 nHeader = cChar - '0';
456 if(nHeader < rHeaders.Count())
457 sBlock += rHeaders.GetString( nHeader );
458 sBlock += '>';
459 }
460 else
461 {
462 DBG_ERROR("parse error in address block or greeting line");
463 }
464 }
465 else
466 sBlock += aNext.sText;
467 }
468 rBlock = sBlock;
469 }
470
471 /*--------------------------------------------------------------------
472
473 --------------------------------------------------------------------*/
GetPropertyNames()474 const Sequence<OUString>& SwMailMergeConfigItem_Impl::GetPropertyNames()
475 {
476 static Sequence<OUString> aNames;
477 if(!aNames.getLength())
478 {
479 static const char* aPropNames[] =
480 {
481 "OutputToLetter", // 0
482 "IncludeCountry", // 1
483 "ExcludeCountry", // 2
484 "AddressBlockSettings", // 3
485 "IsAddressBlock", // 4
486 "IsGreetingLine", // 5
487 "IsIndividualGreetingLine", // 6
488 "FemaleGreetingLines", // 7
489 "MaleGreetingLines", // 8
490 "NeutralGreetingLines", // 9
491 "CurrentFemaleGreeting", // 10
492 "CurrentMaleGreeting", // 11
493 "CurrentNeutralGreeting", // 12
494 "FemaleGenderValue", // 13
495 "MailDisplayName", // 14
496 "MailAddress", // 15
497 "IsMailReplyTo", // 16
498 "MailReplyTo", // 17
499 "MailServer", // 18
500 "MailPort", // 19
501 "IsSecureConnection", // 20
502 "IsAuthentication", // 21
503 "MailUserName", // 22
504 "MailPassword", // 23
505 "DataSource/DataSourceName",// 24
506 "DataSource/DataTableName", // 25
507 "DataSource/DataCommandType",// 26
508 "Filter", // 27
509 "SavedDocuments", // 28
510 "EMailSupported", // 29
511 "IsEMailGreetingLine", //30
512 "IsEMailIndividualGreetingLine", //31
513 "IsSMPTAfterPOP", //32
514 "InServerName", //33
515 "InServerPort", //34
516 "InServerIsPOP", //35
517 "InServerUserName", //36
518 "InServerPassword", //37
519 "IsHideEmptyParagraphs", //38
520 "CurrentAddressBlock" //39
521
522 };
523 const int nCount = sizeof(aPropNames)/sizeof(const char*);
524 aNames.realloc(nCount);
525 OUString* pNames = aNames.getArray();
526 for(int i = 0; i < nCount; i++)
527 pNames[i] = OUString::createFromAscii(aPropNames[i]);
528 }
529 return aNames;
530 }
531 /*-- 15.04.2004 08:48:39---------------------------------------------------
532
533 -----------------------------------------------------------------------*/
Notify(const::com::sun::star::uno::Sequence<rtl::OUString> &)534 void SwMailMergeConfigItem_Impl::Notify( const ::com::sun::star::uno::Sequence< rtl::OUString >& ) {}
535
Commit()536 void SwMailMergeConfigItem_Impl::Commit()
537 {
538 Sequence<OUString> aNames = GetPropertyNames();
539 Sequence<Any> aValues(aNames.getLength());
540 Any* pValues = aValues.getArray();
541
542 for(int nProp = 0; nProp < aNames.getLength(); nProp++)
543 {
544 switch(nProp)
545 {
546 case 0: pValues[nProp] <<= bIsOutputToLetter; break;//
547 case 1: pValues[nProp] <<= bIncludeCountry; break;
548 case 2: pValues[nProp] <<= sExcludeCountry; break;
549 case 3: pValues[nProp] <<= GetAddressBlocks(sal_True); break;
550 case 4:
551 {
552 if( bUserSettingWereOverwritten == sal_True )
553 pValues[nProp] <<= bIsAddressBlock_LastUserSetting;
554 else
555 pValues[nProp] <<= bIsAddressBlock;
556 break;
557 }
558 case 5:
559 {
560 if( bUserSettingWereOverwritten == sal_True )
561 pValues[nProp] <<= bIsGreetingLine_LastUserSetting;
562 else
563 pValues[nProp] <<= bIsGreetingLine;
564 break;
565 }
566 case 6: pValues[nProp] <<= bIsIndividualGreetingLine; break;
567 case 7:
568 case 8:
569 case 9:
570 pValues[nProp] <<= GetGreetings(
571 SwMailMergeConfigItem::Gender(
572 SwMailMergeConfigItem::FEMALE + nProp - 7), sal_True);
573 break;
574 case 10: pValues[nProp] <<= nCurrentFemaleGreeting; break;
575 case 11: pValues[nProp] <<= nCurrentMaleGreeting; break;
576 case 12: pValues[nProp] <<= nCurrentNeutralGreeting; break;
577 case 13: pValues[nProp] <<= sFemaleGenderValue; break;
578 case 14: pValues[nProp] <<= sMailDisplayName; break;
579 case 15: pValues[nProp] <<= sMailAddress; break;
580 case 16: pValues[nProp] <<= bIsMailReplyTo; break;
581 case 17: pValues[nProp] <<= sMailReplyTo; break;
582 case 18: pValues[nProp] <<= sMailServer; break;
583 case 19: if(!bIsDefaultPort)
584 pValues[nProp] <<= nMailPort;
585 break;
586 case 20: pValues[nProp] <<= bIsSecureConnection; break;
587 case 21: pValues[nProp] <<= bIsAuthentication; break;
588 case 22: pValues[nProp] <<= sMailUserName; break;
589 case 23: pValues[nProp] <<= sMailPassword; break;
590 case 24 :pValues[nProp] <<= aDBData.sDataSource; break;
591 case 25 :pValues[nProp] <<= aDBData.sCommand; break;
592 case 26 :pValues[nProp] <<= (short)aDBData.nCommandType; break;
593 case 27 :pValues[nProp] <<= sFilter; break;
594 case 28 :pValues[nProp] <<= aSavedDocuments; break;
595 case 29: pValues[nProp] <<= bIsEMailSupported; break;
596 case 30:
597 {
598 if( bUserSettingWereOverwritten == sal_True )
599 pValues[nProp] <<= bIsGreetingLineInMail_LastUserSetting;
600 else
601 pValues[nProp] <<= bIsGreetingLineInMail;
602 break;
603 }
604 case 31: pValues[nProp] <<= bIsIndividualGreetingLineInMail; break;
605 case 32: pValues[nProp] <<= bIsSMPTAfterPOP; break;
606 case 33: pValues[nProp] <<= sInServerName; break;
607 case 34: pValues[nProp] <<= nInServerPort; break;
608 case 35: pValues[nProp] <<= bInServerPOP; break;
609 case 36: pValues[nProp] <<= sInServerUserName; break;
610 case 37: pValues[nProp] <<= sInServerPassword; break;
611 case 38: pValues[nProp] <<= bIsHideEmptyParagraphs; break;
612 case 39: pValues[nProp] <<= nCurrentAddressBlock; break;
613 }
614 }
615 PutProperties(aNames, aValues);
616 //store the changed / new assignments
617
618 //load the existing node names to find new names
619 Sequence<OUString> aAssignments = GetNodeNames(C2U(cAddressDataAssignments));
620
621 ::std::vector<DBAddressDataAssignment>::iterator aAssignIter;
622 for(aAssignIter = aAddressDataAssignments.begin();
623 aAssignIter != aAddressDataAssignments.end(); aAssignIter++)
624 {
625 if(aAssignIter->bColumnAssignmentsChanged)
626 {
627 //create a new node name
628 OUString sNewNode = aAssignIter->sConfigNodeName.getLength() ?
629 aAssignIter->sConfigNodeName :
630 lcl_CreateNodeName(aAssignments);
631 OUString sSlash = C2U("/");
632 OUString sNodePath = C2U(cAddressDataAssignments);
633 sNodePath += sSlash;
634 sNodePath += sNewNode;
635 sNodePath += sSlash;
636 //only one new entry is written
637 Sequence< PropertyValue > aNewValues(4);
638 PropertyValue* pNewValues = aNewValues.getArray();
639 pNewValues[0].Name = sNodePath;
640 pNewValues[0].Name += C2U(cDataSourceName);
641 pNewValues[0].Value <<= aAssignIter->aDBData.sDataSource;
642 pNewValues[1].Name = sNodePath;
643 pNewValues[1].Name += C2U(cDataTableName);
644 pNewValues[1].Value <<= aAssignIter->aDBData.sCommand;
645 pNewValues[2].Name = sNodePath;
646 pNewValues[2].Name += C2U(cDataCommandType);
647 pNewValues[2].Value <<= aAssignIter->aDBData.nCommandType;
648 pNewValues[3].Name = sNodePath;
649 pNewValues[3].Name += C2U(cDBColumnAssignments);
650 pNewValues[3].Value <<= aAssignIter->aDBColumnAssignments;
651
652 SetSetProperties(C2U(cAddressDataAssignments), aNewValues);
653 }
654 }
655
656 bUserSettingWereOverwritten = sal_False;
657 }
658 /*-- 06.05.2004 13:04:36---------------------------------------------------
659
660 -----------------------------------------------------------------------*/
GetAddressBlocks(sal_Bool bConvertToConfig) const661 const Sequence< ::rtl::OUString> SwMailMergeConfigItem_Impl::GetAddressBlocks(
662 sal_Bool bConvertToConfig) const
663 {
664 Sequence< ::rtl::OUString> aRet(aAddressBlocks.size());
665 ::rtl::OUString* pRet = aRet.getArray();
666 for(sal_uInt32 nBlock = 0; nBlock < aAddressBlocks.size(); nBlock++)
667 {
668 pRet[nBlock] = aAddressBlocks[nBlock];
669 if(bConvertToConfig)
670 lcl_ConvertToNumbers(pRet[nBlock], m_AddressHeaderSA);
671 }
672 return aRet;
673 }
674 /*-- 06.05.2004 13:04:36---------------------------------------------------
675
676 -----------------------------------------------------------------------*/
SetAddressBlocks(const Sequence<::rtl::OUString> & rBlocks,sal_Bool bConvertFromConfig)677 void SwMailMergeConfigItem_Impl::SetAddressBlocks(
678 const Sequence< ::rtl::OUString>& rBlocks,
679 sal_Bool bConvertFromConfig)
680 {
681 aAddressBlocks.clear();
682 for(sal_Int32 nBlock = 0; nBlock < rBlocks.getLength(); nBlock++)
683 {
684 OUString sBlock = rBlocks[nBlock];
685 if(bConvertFromConfig)
686 lcl_ConvertFromNumbers(sBlock, m_AddressHeaderSA);
687 aAddressBlocks.push_back(sBlock);
688 }
689 nCurrentAddressBlock = 0;
690 SetModified();
691 }
692 /*-- 30.04.2004 11:04:52---------------------------------------------------
693
694 -----------------------------------------------------------------------*/
GetGreetings(SwMailMergeConfigItem::Gender eType,sal_Bool bConvertToConfig) const695 const Sequence< ::rtl::OUString> SwMailMergeConfigItem_Impl::GetGreetings(
696 SwMailMergeConfigItem::Gender eType, sal_Bool bConvertToConfig) const
697 {
698 const ::std::vector< ::rtl::OUString>& rGreetings =
699 eType == SwMailMergeConfigItem::FEMALE ? aFemaleGreetingLines :
700 eType == SwMailMergeConfigItem::MALE ? aMaleGreetingLines :
701 aNeutralGreetingLines;
702 Sequence< ::rtl::OUString> aRet(rGreetings.size());
703 ::rtl::OUString* pRet = aRet.getArray();
704 for(sal_uInt32 nGreeting = 0; nGreeting < rGreetings.size(); nGreeting++)
705 {
706 pRet[nGreeting] = rGreetings[nGreeting];
707 if(bConvertToConfig)
708 lcl_ConvertToNumbers(pRet[nGreeting], m_AddressHeaderSA);
709 }
710 return aRet;
711 }
712 /*-- 30.04.2004 11:04:52---------------------------------------------------
713
714 -----------------------------------------------------------------------*/
SetGreetings(SwMailMergeConfigItem::Gender eType,const Sequence<::rtl::OUString> & rSetGreetings,sal_Bool bConvertFromConfig)715 void SwMailMergeConfigItem_Impl::SetGreetings(
716 SwMailMergeConfigItem::Gender eType,
717 const Sequence< ::rtl::OUString>& rSetGreetings,
718 sal_Bool bConvertFromConfig)
719 {
720 ::std::vector< ::rtl::OUString>& rGreetings =
721 eType == SwMailMergeConfigItem::FEMALE ? aFemaleGreetingLines :
722 eType == SwMailMergeConfigItem::MALE ? aMaleGreetingLines :
723 aNeutralGreetingLines;
724
725 rGreetings.clear();
726 for(sal_Int32 nGreeting = 0; nGreeting < rSetGreetings.getLength(); nGreeting++)
727 {
728 OUString sGreeting = rSetGreetings[nGreeting];
729 if(bConvertFromConfig)
730 lcl_ConvertFromNumbers(sGreeting, m_AddressHeaderSA);
731 rGreetings.push_back(sGreeting);
732 }
733 SetModified();
734 }
735 /*-- 11.05.2004 13:13:54---------------------------------------------------
736
737 -----------------------------------------------------------------------*/
GetCurrentGreeting(SwMailMergeConfigItem::Gender eType) const738 sal_Int32 SwMailMergeConfigItem_Impl::GetCurrentGreeting(
739 SwMailMergeConfigItem::Gender eType) const
740 {
741 sal_Int32 nRet;
742 switch(eType)
743 {
744 case SwMailMergeConfigItem::FEMALE: nRet = nCurrentFemaleGreeting ; break;
745 case SwMailMergeConfigItem::MALE: nRet = nCurrentMaleGreeting ; break;
746 default: nRet = nCurrentNeutralGreeting; break;
747 }
748 return nRet;
749 }
750 /*-- 11.05.2004 13:13:54---------------------------------------------------
751
752 -----------------------------------------------------------------------*/
SetCurrentGreeting(SwMailMergeConfigItem::Gender eType,sal_Int32 nIndex)753 void SwMailMergeConfigItem_Impl::SetCurrentGreeting(
754 SwMailMergeConfigItem::Gender eType, sal_Int32 nIndex)
755 {
756 bool bChanged = false;
757 switch(eType)
758 {
759 case SwMailMergeConfigItem::FEMALE:
760 bChanged = nCurrentFemaleGreeting != nIndex;
761 nCurrentFemaleGreeting = nIndex;
762 break;
763 case SwMailMergeConfigItem::MALE:
764 bChanged = nCurrentMaleGreeting != nIndex;
765 nCurrentMaleGreeting = nIndex;
766 break;
767 default:
768 bChanged = nCurrentNeutralGreeting != nIndex;
769 nCurrentNeutralGreeting = nIndex;
770 }
771 if(bChanged)
772 SetModified();
773 }
774
775 static SwMailMergeConfigItem_Impl* pOptions = NULL;
776 static sal_Int32 nRefCount = 0;
777 static ::osl::Mutex aMutex;
778 /*-- 15.04.2004 08:42:43---------------------------------------------------
779
780 -----------------------------------------------------------------------*/
SwMailMergeConfigItem()781 SwMailMergeConfigItem::SwMailMergeConfigItem() :
782 m_bAddressInserted(false),
783 m_bMergeDone(false),
784 m_bGreetingInserted(false),
785 m_nGreetingMoves(0),
786 m_nStartPrint(0),
787 m_nEndPrint(0),
788 m_pSourceView(0),
789 m_pTargetView(0)
790 {
791 // Global access, must be guarded (multithreading)
792 ::osl::MutexGuard aGuard( aMutex );
793 if ( !pOptions )
794 pOptions = new SwMailMergeConfigItem_Impl;
795 ++nRefCount;
796 m_pImpl = pOptions;
797 }
798 /*-- 15.04.2004 08:43:36---------------------------------------------------
799
800 -----------------------------------------------------------------------*/
~SwMailMergeConfigItem()801 SwMailMergeConfigItem::~SwMailMergeConfigItem()
802 {
803 // Global access, must be guarded (multithreading)
804 ::osl::MutexGuard aGuard( aMutex );
805 if ( !--nRefCount )
806 {
807 DELETEZ( pOptions );
808 }
809 }
810 /*-- 06.05.2004 14:18:10---------------------------------------------------
811
812 -----------------------------------------------------------------------*/
Commit()813 void SwMailMergeConfigItem::Commit()
814 {
815 if(m_pImpl->IsModified())
816 m_pImpl->Commit();
817 }
818 /*-- 06.05.2004 12:59:50---------------------------------------------------
819
820 -----------------------------------------------------------------------*/
GetDefaultAddressHeaders() const821 const ResStringArray& SwMailMergeConfigItem::GetDefaultAddressHeaders() const
822 {
823 return m_pImpl->m_AddressHeaderSA;
824 }
825 /*-- 27.04.2004 14:34:16---------------------------------------------------
826
827 -----------------------------------------------------------------------*/
SetAddressBlocks(const Sequence<::rtl::OUString> & rBlocks)828 void SwMailMergeConfigItem::SetAddressBlocks(
829 const Sequence< ::rtl::OUString>& rBlocks)
830 {
831 m_pImpl->SetAddressBlocks(rBlocks);
832 }
833 /*-- 27.04.2004 14:34:16---------------------------------------------------
834
835 -----------------------------------------------------------------------*/
GetAddressBlocks() const836 const Sequence< ::rtl::OUString> SwMailMergeConfigItem::GetAddressBlocks() const
837 {
838 return m_pImpl->GetAddressBlocks();
839 }
840 /*-- 11.05.2004 17:08:45---------------------------------------------------
841
842 -----------------------------------------------------------------------*/
IsAddressBlock() const843 sal_Bool SwMailMergeConfigItem::IsAddressBlock()const
844 {
845 return m_pImpl->bIsAddressBlock && IsOutputToLetter();
846 }
847 /*-- 11.05.2004 17:08:46---------------------------------------------------
848
849 -----------------------------------------------------------------------*/
SetAddressBlock(sal_Bool bSet)850 void SwMailMergeConfigItem::SetAddressBlock(sal_Bool bSet)
851 {
852 m_pImpl->bUserSettingWereOverwritten = sal_False;
853 if(m_pImpl->bIsAddressBlock != bSet)
854 {
855 m_pImpl->bIsAddressBlock = bSet;
856 m_pImpl->SetModified();
857 }
858 }
859
860 /*-- 30.08.2005 15:09:46---------------------------------------------------
861
862 -----------------------------------------------------------------------*/
IsHideEmptyParagraphs() const863 sal_Bool SwMailMergeConfigItem::IsHideEmptyParagraphs() const
864 {
865 return m_pImpl->bIsHideEmptyParagraphs;
866 }
867 /*-- 30.08.2005 15:09:47---------------------------------------------------
868
869 -----------------------------------------------------------------------*/
SetHideEmptyParagraphs(sal_Bool bSet)870 void SwMailMergeConfigItem::SetHideEmptyParagraphs(sal_Bool bSet)
871 {
872 if(m_pImpl->bIsHideEmptyParagraphs != bSet)
873 {
874 m_pImpl->bIsHideEmptyParagraphs = bSet;
875 m_pImpl->SetModified();
876 }
877 }
878 /*-- 28.04.2004 13:00:02---------------------------------------------------
879
880 -----------------------------------------------------------------------*/
IsIncludeCountry() const881 sal_Bool SwMailMergeConfigItem::IsIncludeCountry() const
882 {
883 return m_pImpl->bIncludeCountry;
884 }
885 /*-- 28.04.2004 13:00:02---------------------------------------------------
886
887 -----------------------------------------------------------------------*/
GetExcludeCountry() const888 rtl::OUString& SwMailMergeConfigItem::GetExcludeCountry() const
889 {
890 return m_pImpl->sExcludeCountry;
891 }
892 /*-- 28.04.2004 13:00:02---------------------------------------------------
893
894 -----------------------------------------------------------------------*/
SetCountrySettings(sal_Bool bSet,const rtl::OUString & rCountry)895 void SwMailMergeConfigItem::SetCountrySettings(sal_Bool bSet, const rtl::OUString& rCountry)
896 {
897 if(m_pImpl->sExcludeCountry != rCountry ||
898 m_pImpl->bIncludeCountry != bSet)
899 {
900 m_pImpl->bIncludeCountry = bSet;
901 m_pImpl->sExcludeCountry = bSet ? rCountry : OUString();
902 m_pImpl->SetModified();
903 }
904 }
905
906 /*-- 28.04.2004 15:35:16---------------------------------------------------
907
908 -----------------------------------------------------------------------*/
SetCurrentConnection(Reference<XDataSource> xSource,SharedConnection xConnection,Reference<XColumnsSupplier> xColumnsSupplier,const SwDBData & rDBData)909 void SwMailMergeConfigItem::SetCurrentConnection(
910 Reference< XDataSource> xSource,
911 SharedConnection xConnection,
912 Reference< XColumnsSupplier> xColumnsSupplier,
913 const SwDBData& rDBData)
914 {
915 m_pImpl->xSource = xSource ;
916 m_pImpl->xConnection = xConnection ;
917 m_pImpl->xColumnsSupplier = xColumnsSupplier;
918 m_pImpl->aDBData = rDBData;
919 m_pImpl->xResultSet = 0;
920 m_pImpl->nResultSetCursorPos = 0;
921 m_pImpl->SetModified();
922 }
923 /*-- 28.04.2004 15:38:11---------------------------------------------------
924
925 -----------------------------------------------------------------------*/
GetSource()926 Reference< XDataSource> SwMailMergeConfigItem::GetSource()
927 {
928 return m_pImpl->xSource;
929 }
930 /*-- 28.04.2004 15:38:11---------------------------------------------------
931
932 -----------------------------------------------------------------------*/
GetConnection()933 SharedConnection SwMailMergeConfigItem::GetConnection()
934 {
935 return m_pImpl->xConnection;
936 }
937 /*-- 28.04.2004 15:38:11---------------------------------------------------
938
939 -----------------------------------------------------------------------*/
GetColumnsSupplier()940 Reference< XColumnsSupplier> SwMailMergeConfigItem::GetColumnsSupplier()
941 {
942 if(!m_pImpl->xColumnsSupplier.is() && m_pImpl->xConnection.is())
943 {
944 m_pImpl->xColumnsSupplier = SwNewDBMgr::GetColumnSupplier(m_pImpl->xConnection,
945 m_pImpl->aDBData.sCommand,
946 m_pImpl->aDBData.nCommandType == CommandType::TABLE ?
947 SW_DB_SELECT_TABLE : SW_DB_SELECT_QUERY );
948 }
949 return m_pImpl->xColumnsSupplier;
950 }
951 /*-- 30.04.2004 14:30:55---------------------------------------------------
952
953 -----------------------------------------------------------------------*/
GetCurrentDBData() const954 const SwDBData& SwMailMergeConfigItem::GetCurrentDBData() const
955 {
956 return m_pImpl->aDBData;
957 }
958
959 /*-- 17.06.2004 13:18:47---------------------------------------------------
960
961 -----------------------------------------------------------------------*/
SetCurrentDBData(const SwDBData & rDBData)962 void SwMailMergeConfigItem::SetCurrentDBData( const SwDBData& rDBData)
963 {
964 if(m_pImpl->aDBData != rDBData)
965 {
966 m_pImpl->aDBData = rDBData;
967 m_pImpl->xConnection.clear();
968 m_pImpl->xSource = 0;
969 m_pImpl->xColumnsSupplier = 0;
970 m_pImpl->SetModified();
971 }
972 }
973 /*-- 29.04.2004 11:34:36---------------------------------------------------
974
975 -----------------------------------------------------------------------*/
GetResultSet() const976 Reference< XResultSet> SwMailMergeConfigItem::GetResultSet() const
977 {
978 if(!m_pImpl->xConnection.is() && m_pImpl->aDBData.sDataSource.getLength())
979 {
980 m_pImpl->xConnection.reset(
981 SwNewDBMgr::GetConnection( m_pImpl->aDBData.sDataSource, m_pImpl->xSource ),
982 SharedConnection::TakeOwnership
983 );
984 }
985 if(!m_pImpl->xResultSet.is() && m_pImpl->xConnection.is())
986 {
987 try
988 {
989 Reference< XMultiServiceFactory > xMgr( ::comphelper::getProcessServiceFactory() );
990 if( xMgr.is() )
991 {
992 Reference<XRowSet> xRowSet(
993 xMgr->createInstance(C2U("com.sun.star.sdb.RowSet")), UNO_QUERY);
994 Reference<XPropertySet> xRowProperties(xRowSet, UNO_QUERY);
995 xRowProperties->setPropertyValue(C2U("DataSourceName"), makeAny(m_pImpl->aDBData.sDataSource));
996 xRowProperties->setPropertyValue(C2U("Command"), makeAny(m_pImpl->aDBData.sCommand));
997 xRowProperties->setPropertyValue(C2U("CommandType"), makeAny(m_pImpl->aDBData.nCommandType));
998 xRowProperties->setPropertyValue(C2U("FetchSize"), makeAny((sal_Int32)10));
999 xRowProperties->setPropertyValue(C2U("ActiveConnection"), makeAny(m_pImpl->xConnection.getTyped()));
1000 try
1001 {
1002 xRowProperties->setPropertyValue(C2U("ApplyFilter"), makeAny(m_pImpl->sFilter.getLength()>0));
1003 xRowProperties->setPropertyValue(C2U("Filter"), makeAny(m_pImpl->sFilter));
1004 }
1005 catch(Exception&)
1006 {
1007 DBG_ERROR("exception caught in xResultSet->SetFilter()");
1008 }
1009 xRowSet->execute();
1010 m_pImpl->xResultSet = xRowSet.get();
1011 m_pImpl->xResultSet->first();
1012 m_pImpl->nResultSetCursorPos = 1;
1013 }
1014 }
1015 catch(Exception& )
1016 {
1017 DBG_ERROR("exception caught in: SwMailMergeConfigItem::GetResultSet() ");
1018 }
1019 }
1020 return m_pImpl->xResultSet;
1021 }
1022 /*-- 13.08.2004 11:49:46---------------------------------------------------
1023
1024 -----------------------------------------------------------------------*/
DisposeResultSet()1025 void SwMailMergeConfigItem::DisposeResultSet()
1026 {
1027 m_pImpl->xConnection.clear();
1028 if(m_pImpl->xResultSet.is())
1029 {
1030 ::comphelper::disposeComponent( m_pImpl->xResultSet );
1031 }
1032 }
1033 /*-- 14.05.2004 15:07:55---------------------------------------------------
1034
1035 -----------------------------------------------------------------------*/
GetFilter() const1036 ::rtl::OUString& SwMailMergeConfigItem::GetFilter() const
1037 {
1038 return m_pImpl->sFilter;
1039 }
1040 /*-- 14.05.2004 15:07:55---------------------------------------------------
1041
1042 -----------------------------------------------------------------------*/
SetFilter(::rtl::OUString & rFilter)1043 void SwMailMergeConfigItem::SetFilter(::rtl::OUString& rFilter)
1044 {
1045 if(m_pImpl->sFilter != rFilter)
1046 {
1047 m_pImpl->sFilter = rFilter;
1048 m_pImpl->SetModified();
1049 Reference<XPropertySet> xRowProperties(m_pImpl->xResultSet, UNO_QUERY);
1050 if(xRowProperties.is())
1051 {
1052 try
1053 {
1054 xRowProperties->setPropertyValue(C2U("ApplyFilter"), makeAny(m_pImpl->sFilter.getLength()>0));
1055 xRowProperties->setPropertyValue(C2U("Filter"), makeAny(m_pImpl->sFilter));
1056 uno::Reference<XRowSet> xRowSet( m_pImpl->xResultSet, UNO_QUERY_THROW );
1057 xRowSet->execute();
1058 }
1059 catch(Exception&)
1060 {
1061 DBG_ERROR("exception caught in SwMailMergeConfigItem::SetFilter()");
1062 }
1063 }
1064 }
1065 }
1066 /*-- 29.04.2004 11:55:38---------------------------------------------------
1067
1068 -----------------------------------------------------------------------*/
MoveResultSet(sal_Int32 nTarget)1069 sal_Int32 SwMailMergeConfigItem::MoveResultSet(sal_Int32 nTarget)
1070 {
1071 if(!m_pImpl->xResultSet.is())
1072 GetResultSet();
1073 if(m_pImpl->xResultSet.is())
1074 {
1075 try
1076 {
1077 //no action if the resultset is already at the right position
1078 if(m_pImpl->xResultSet->getRow() != nTarget)
1079 {
1080 if(nTarget > 0)
1081 {
1082 sal_Bool bMoved = m_pImpl->xResultSet->absolute(nTarget);
1083 if(!bMoved)
1084 {
1085 if(nTarget > 1)
1086 m_pImpl->xResultSet->last();
1087 else if(nTarget == 1)
1088 m_pImpl->xResultSet->first();
1089 }
1090 }
1091 else if(nTarget == -1)
1092 m_pImpl->xResultSet->last();
1093 m_pImpl->nResultSetCursorPos = m_pImpl->xResultSet->getRow();
1094 }
1095 }
1096 catch(Exception&)
1097 {
1098 }
1099 }
1100 return m_pImpl->nResultSetCursorPos;
1101 }
1102
1103 /*-- 27.05.2004 13:56:18---------------------------------------------------
1104
1105 -----------------------------------------------------------------------*/
IsResultSetFirstLast(bool & bIsFirst,bool & bIsLast)1106 bool SwMailMergeConfigItem::IsResultSetFirstLast(bool& bIsFirst, bool& bIsLast)
1107 {
1108 bool bRet = false;
1109 if(!m_pImpl->xResultSet.is())
1110 GetResultSet();
1111 if(m_pImpl->xResultSet.is())
1112 {
1113 try
1114 {
1115 bIsFirst = m_pImpl->xResultSet->isFirst();
1116 bIsLast = m_pImpl->xResultSet->isLast();
1117 bRet = true;
1118 }
1119 catch(Exception&)
1120 {
1121 }
1122 }
1123 return bRet;
1124 }
1125 /*-- 29.04.2004 11:55:38---------------------------------------------------
1126
1127 -----------------------------------------------------------------------*/
GetResultSetPosition() const1128 sal_Int32 SwMailMergeConfigItem::GetResultSetPosition() const
1129 {
1130 return m_pImpl->nResultSetCursorPos;
1131 }
1132 /*-- 27.05.2004 14:49:53---------------------------------------------------
1133
1134 -----------------------------------------------------------------------*/
IsRecordExcluded(sal_Int32 nRecord)1135 bool SwMailMergeConfigItem::IsRecordExcluded(sal_Int32 nRecord)
1136 {
1137 bool bRet = false;
1138 if(nRecord > 0 && nRecord < m_aSelection.getLength())
1139 {
1140 sal_Int32 nTemp = 0;
1141 m_aSelection[nRecord - 1] >>= nTemp;
1142 bRet = nTemp < 1;
1143 }
1144 return bRet;
1145 }
1146 /*-- 27.05.2004 14:49:53---------------------------------------------------
1147
1148 -----------------------------------------------------------------------*/
ExcludeRecord(sal_Int32 nRecord,bool bExclude)1149 void SwMailMergeConfigItem::ExcludeRecord(sal_Int32 nRecord, bool bExclude)
1150 {
1151 //nRecord is based on 1
1152 //the selection array contains Anys for all records
1153 //excluded records contain a '-1'
1154 if(!m_aSelection.getLength() || nRecord > m_aSelection.getLength())
1155 {
1156 if(bExclude)
1157 {
1158 //if no selection array is available we need to create one containing the
1159 //entries for all available records
1160 if(!m_pImpl->xResultSet.is())
1161 GetResultSet();
1162 if(m_pImpl->xResultSet.is())
1163 {
1164 m_pImpl->xResultSet->last();
1165 sal_Int32 nEnd = m_pImpl->xResultSet->getRow();
1166 sal_Int32 nStart = m_aSelection.getLength();
1167 m_aSelection.realloc(nEnd);
1168 Any* pSelection = m_aSelection.getArray();
1169 for(sal_Int32 nIndex = nStart; nIndex < nEnd; ++nIndex)
1170 {
1171 if((nRecord - 1) != nIndex)
1172 pSelection[nIndex] <<= nIndex + 1;
1173 else
1174 pSelection[nIndex] <<= (sal_Int32) -1;
1175 }
1176 }
1177 }
1178 }
1179 else
1180 {
1181 if(nRecord > 0 && m_aSelection.getLength() > nRecord)
1182 {
1183 m_aSelection[nRecord - 1] <<= bExclude ? -1 : nRecord;
1184 }
1185 }
1186 }
1187 /*-- 27.05.2004 15:08:35---------------------------------------------------
1188
1189 -----------------------------------------------------------------------*/
GetSelection() const1190 Sequence< Any > SwMailMergeConfigItem::GetSelection() const
1191 {
1192 Sequence< Any > aRet(m_aSelection.getLength());
1193 sal_Int32 nRetIndex = 0;
1194 sal_Int32 nRet;
1195 for(sal_Int32 nIndex = 0; nIndex < m_aSelection.getLength(); ++nIndex)
1196 {
1197 m_aSelection[nIndex] >>= nRet;
1198 if(nRet > 0)
1199 {
1200 aRet[nRetIndex] <<= nRet;
1201 ++nRetIndex;
1202 }
1203 }
1204 aRet.realloc(nRetIndex);
1205 return aRet;
1206 }
1207 /*-- 16.06.2004 15:15:56---------------------------------------------------
1208
1209 -----------------------------------------------------------------------*/
1210 const uno::Sequence< ::rtl::OUString>&
GetSavedDocuments() const1211 SwMailMergeConfigItem::GetSavedDocuments() const
1212 {
1213 return m_pImpl->aSavedDocuments;
1214 }
1215 /*-- 16.06.2004 15:15:56---------------------------------------------------
1216
1217 -----------------------------------------------------------------------*/
AddSavedDocument(::rtl::OUString rName)1218 void SwMailMergeConfigItem::AddSavedDocument(::rtl::OUString rName)
1219 {
1220 const ::rtl::OUString* pDocs = m_pImpl->aSavedDocuments.getConstArray();
1221 bool bFound = false;
1222 for(sal_Int32 nDoc = 0; nDoc < m_pImpl->aSavedDocuments.getLength(); ++nDoc)
1223 {
1224 if(pDocs[nDoc] == rName)
1225 {
1226 bFound = true;
1227 break;
1228 }
1229 }
1230 if(!bFound)
1231 {
1232 m_pImpl->aSavedDocuments.realloc(m_pImpl->aSavedDocuments.getLength() + 1);
1233 m_pImpl->aSavedDocuments[m_pImpl->aSavedDocuments.getLength() - 1] = rName;
1234 }
1235 }
1236 /*-- 28.04.2004 16:15:16---------------------------------------------------
1237
1238 -----------------------------------------------------------------------*/
IsOutputToLetter() const1239 sal_Bool SwMailMergeConfigItem::IsOutputToLetter()const
1240 {
1241 return m_pImpl->bIsOutputToLetter || !IsMailAvailable();
1242 }
1243 /*-- 28.04.2004 16:15:16---------------------------------------------------
1244
1245 -----------------------------------------------------------------------*/
SetOutputToLetter(sal_Bool bSet)1246 void SwMailMergeConfigItem::SetOutputToLetter(sal_Bool bSet)
1247 {
1248 if(m_pImpl->bIsOutputToLetter != bSet)
1249 {
1250 m_pImpl->bIsOutputToLetter = bSet;
1251 m_pImpl->SetModified();
1252 }
1253 }
1254 /*-- 30.04.2004 10:51:10---------------------------------------------------
1255
1256 -----------------------------------------------------------------------*/
IsIndividualGreeting(sal_Bool bInEMail) const1257 sal_Bool SwMailMergeConfigItem::IsIndividualGreeting(sal_Bool bInEMail) const
1258 {
1259 return bInEMail ?
1260 m_pImpl->bIsIndividualGreetingLineInMail :
1261 m_pImpl->bIsIndividualGreetingLine;
1262 }
1263 /*-- 30.04.2004 10:51:10---------------------------------------------------
1264
1265 -----------------------------------------------------------------------*/
SetIndividualGreeting(sal_Bool bSet,sal_Bool bInEMail)1266 void SwMailMergeConfigItem::SetIndividualGreeting(
1267 sal_Bool bSet, sal_Bool bInEMail)
1268 {
1269 if(bInEMail)
1270 {
1271 if(m_pImpl->bIsIndividualGreetingLineInMail != bSet)
1272 {
1273 m_pImpl->bIsIndividualGreetingLineInMail = bSet;
1274 m_pImpl->SetModified();
1275 }
1276 }
1277 else
1278 {
1279 if(m_pImpl->bIsIndividualGreetingLine != bSet)
1280 {
1281 m_pImpl->bIsIndividualGreetingLine = bSet;
1282 m_pImpl->SetModified();
1283 }
1284 }
1285 }
1286 /*-- 30.04.2004 10:51:10---------------------------------------------------
1287
1288 -----------------------------------------------------------------------*/
IsGreetingLine(sal_Bool bInEMail) const1289 sal_Bool SwMailMergeConfigItem::IsGreetingLine(sal_Bool bInEMail) const
1290 {
1291 return bInEMail ? m_pImpl->bIsGreetingLineInMail : m_pImpl->bIsGreetingLine;
1292 }
1293 /*-- 30.04.2004 10:51:10---------------------------------------------------
1294
1295 -----------------------------------------------------------------------*/
SetGreetingLine(sal_Bool bSet,sal_Bool bInEMail)1296 void SwMailMergeConfigItem::SetGreetingLine(sal_Bool bSet, sal_Bool bInEMail)
1297 {
1298 m_pImpl->bUserSettingWereOverwritten = sal_False;
1299 if(bInEMail)
1300 {
1301 if(m_pImpl->bIsGreetingLineInMail != bSet)
1302 {
1303 m_pImpl->bIsGreetingLineInMail = bSet;
1304 m_pImpl->SetModified();
1305 }
1306 }
1307 else
1308 {
1309 if(m_pImpl->bIsGreetingLine != bSet)
1310 {
1311 m_pImpl->bIsGreetingLine = bSet;
1312 m_pImpl->SetModified();
1313 }
1314 }
1315 }
1316 /*-- 30.04.2004 11:04:52---------------------------------------------------
1317
1318 -----------------------------------------------------------------------*/
GetGreetings(Gender eType) const1319 const Sequence< ::rtl::OUString> SwMailMergeConfigItem::GetGreetings(
1320 Gender eType ) const
1321 {
1322 return m_pImpl->GetGreetings(eType);
1323 }
1324 /*-- 30.04.2004 11:04:52---------------------------------------------------
1325
1326 -----------------------------------------------------------------------*/
SetGreetings(Gender eType,const Sequence<::rtl::OUString> & rSetGreetings)1327 void SwMailMergeConfigItem::SetGreetings(
1328 Gender eType, const Sequence< ::rtl::OUString>& rSetGreetings)
1329 {
1330 m_pImpl->SetGreetings( eType, rSetGreetings);
1331 }
1332
1333 /*-- 11.05.2004 13:10:54---------------------------------------------------
1334
1335 -----------------------------------------------------------------------*/
GetCurrentGreeting(SwMailMergeConfigItem::Gender eType) const1336 sal_Int32 SwMailMergeConfigItem::GetCurrentGreeting(
1337 SwMailMergeConfigItem::Gender eType) const
1338 {
1339 return m_pImpl->GetCurrentGreeting(eType);
1340 }
1341 /*-- 11.05.2004 13:10:55---------------------------------------------------
1342
1343 -----------------------------------------------------------------------*/
SetCurrentGreeting(Gender eType,sal_Int32 nIndex)1344 void SwMailMergeConfigItem::SetCurrentGreeting(Gender eType, sal_Int32 nIndex)
1345 {
1346 m_pImpl->SetCurrentGreeting(eType, nIndex);
1347 }
1348 /*-- 12.05.2004 12:29:59---------------------------------------------------
1349
1350 -----------------------------------------------------------------------*/
GetFemaleGenderValue() const1351 const ::rtl::OUString& SwMailMergeConfigItem::GetFemaleGenderValue() const
1352 {
1353 return m_pImpl->sFemaleGenderValue;
1354 }
1355 /*-- 12.05.2004 12:29:59---------------------------------------------------
1356
1357 -----------------------------------------------------------------------*/
SetFemaleGenderValue(const::rtl::OUString rValue)1358 void SwMailMergeConfigItem::SetFemaleGenderValue(const ::rtl::OUString rValue)
1359 {
1360 if( m_pImpl->sFemaleGenderValue != rValue )
1361 {
1362 m_pImpl->sFemaleGenderValue = rValue;
1363 m_pImpl->SetModified();
1364 }
1365 }
1366
1367 /*-- 30.04.2004 13:25:41---------------------------------------------------
1368
1369 -----------------------------------------------------------------------*/
GetColumnAssignment(const SwDBData & rDBData) const1370 Sequence< ::rtl::OUString> SwMailMergeConfigItem::GetColumnAssignment(
1371 const SwDBData& rDBData ) const
1372 {
1373 Sequence< ::rtl::OUString> aRet;
1374 ::std::vector<DBAddressDataAssignment>::iterator aAssignIter;
1375 for(aAssignIter = m_pImpl->aAddressDataAssignments.begin();
1376 aAssignIter != m_pImpl->aAddressDataAssignments.end(); aAssignIter++)
1377 {
1378 if(aAssignIter->aDBData == rDBData)
1379 {
1380 aRet = aAssignIter->aDBColumnAssignments;
1381 break;
1382 }
1383 }
1384 return aRet;
1385 }
1386 /*-- 21.05.2004 12:31:31---------------------------------------------------
1387 returns the name that is assigned as e-mail column of the current data base
1388 -----------------------------------------------------------------------*/
GetAssignedColumn(sal_uInt32 nColumn) const1389 ::rtl::OUString SwMailMergeConfigItem::GetAssignedColumn(sal_uInt32 nColumn) const
1390 {
1391 ::rtl::OUString sRet;
1392 Sequence< ::rtl::OUString> aAssignment = GetColumnAssignment( m_pImpl->aDBData );
1393 if(aAssignment.getLength() > sal::static_int_cast< sal_Int32, sal_uInt32>(nColumn) && aAssignment[nColumn].getLength())
1394 sRet = aAssignment[nColumn];
1395 else if(nColumn < m_pImpl->m_AddressHeaderSA.Count())
1396 sRet = m_pImpl->m_AddressHeaderSA.GetString(nColumn);
1397 return sRet;
1398 }
1399 /*-- 30.04.2004 13:25:41---------------------------------------------------
1400
1401 -----------------------------------------------------------------------*/
SetColumnAssignment(const SwDBData & rDBData,const Sequence<::rtl::OUString> & rList)1402 void SwMailMergeConfigItem::SetColumnAssignment( const SwDBData& rDBData,
1403 const Sequence< ::rtl::OUString>& rList)
1404 {
1405 ::std::vector<DBAddressDataAssignment>::iterator aAssignIter;
1406 sal_Bool bFound = sal_False;
1407 for(aAssignIter = m_pImpl->aAddressDataAssignments.begin();
1408 aAssignIter != m_pImpl->aAddressDataAssignments.end(); aAssignIter++)
1409 {
1410 if(aAssignIter->aDBData == rDBData)
1411 {
1412 if(aAssignIter->aDBColumnAssignments != rList)
1413 {
1414 aAssignIter->aDBColumnAssignments = rList;
1415 aAssignIter->bColumnAssignmentsChanged = true;
1416 }
1417 bFound = sal_True;
1418 break;
1419 }
1420 }
1421 if(!bFound)
1422 {
1423 DBAddressDataAssignment aAssignment;
1424 aAssignment.aDBData = rDBData;
1425 aAssignment.aDBColumnAssignments = rList;
1426 aAssignment.bColumnAssignmentsChanged = true;
1427 m_pImpl->aAddressDataAssignments.push_back(aAssignment);
1428 }
1429 m_pImpl->SetModified();
1430 }
1431
1432 /*-- 07.09.2005 11:50:27---------------------------------------------------
1433
1434 -----------------------------------------------------------------------*/
IsAddressFieldsAssigned() const1435 bool SwMailMergeConfigItem::IsAddressFieldsAssigned() const
1436 {
1437 bool bResult = true;
1438 Reference< XResultSet> xResultSet = GetResultSet();
1439 uno::Reference< XColumnsSupplier > xColsSupp( xResultSet, UNO_QUERY );
1440 if(!xColsSupp.is())
1441 return false;
1442 uno::Reference<container::XNameAccess> xCols = xColsSupp->getColumns();
1443
1444 const ResStringArray& rHeaders = GetDefaultAddressHeaders();
1445 Sequence< ::rtl::OUString> aAssignment =
1446 GetColumnAssignment( GetCurrentDBData() );
1447 const ::rtl::OUString* pAssignment = aAssignment.getConstArray();
1448 const Sequence< ::rtl::OUString> aBlocks = GetAddressBlocks();
1449
1450 if(aBlocks.getLength() <= m_pImpl->GetCurrentAddressBlockIndex())
1451 return false;
1452 SwAddressIterator aIter(aBlocks[m_pImpl->GetCurrentAddressBlockIndex()]);
1453 while(aIter.HasMore())
1454 {
1455 SwMergeAddressItem aItem = aIter.Next();
1456 if(aItem.bIsColumn)
1457 {
1458 String sConvertedColumn = aItem.sText;
1459 for(sal_uInt16 nColumn = 0;
1460 nColumn < rHeaders.Count() && nColumn < aAssignment.getLength();
1461 ++nColumn)
1462 {
1463 if(rHeaders.GetString(nColumn) == aItem.sText &&
1464 pAssignment[nColumn].getLength())
1465 {
1466 sConvertedColumn = pAssignment[nColumn];
1467 break;
1468 }
1469 }
1470 //find out if the column exists in the data base
1471 if(!xCols->hasByName(sConvertedColumn))
1472 {
1473 bResult = false;
1474 break;
1475 }
1476 }
1477 }
1478 return bResult;
1479 }
1480 /*-- 07.09.2005 11:50:27---------------------------------------------------
1481
1482 -----------------------------------------------------------------------*/
IsGreetingFieldsAssigned() const1483 bool SwMailMergeConfigItem::IsGreetingFieldsAssigned() const
1484 {
1485 bool bResult = true;
1486
1487 if(!IsIndividualGreeting(sal_False))
1488 return true;
1489
1490 Reference< XResultSet> xResultSet = GetResultSet();
1491 uno::Reference< XColumnsSupplier > xColsSupp( xResultSet, UNO_QUERY );
1492 if(!xColsSupp.is())
1493 return false;
1494 const ResStringArray& rHeaders = GetDefaultAddressHeaders();
1495 uno::Reference<container::XNameAccess> xCols = xColsSupp->getColumns();
1496
1497 Sequence< ::rtl::OUString> aAssignment =
1498 GetColumnAssignment( GetCurrentDBData() );
1499 const ::rtl::OUString* pAssignment = aAssignment.getConstArray();
1500
1501 const Sequence< ::rtl::OUString> rFemaleEntries = GetGreetings(SwMailMergeConfigItem::FEMALE);
1502 sal_Int32 nCurrentFemale = GetCurrentGreeting(SwMailMergeConfigItem::FEMALE);
1503 const Sequence< ::rtl::OUString> rMaleEntries = GetGreetings(SwMailMergeConfigItem::MALE);
1504 sal_Int32 nCurrentMale = GetCurrentGreeting(SwMailMergeConfigItem::MALE);
1505 ::rtl::OUString sMale, sFemale;
1506 if(rFemaleEntries.getLength() > nCurrentFemale)
1507 sFemale = rFemaleEntries[nCurrentFemale];
1508 if(rMaleEntries.getLength() > nCurrentMale)
1509 sMale = rMaleEntries[nCurrentMale];
1510
1511 ::rtl::OUString sAddress( sFemale );
1512 sAddress += sMale;
1513 SwAddressIterator aIter(sAddress);
1514 while(aIter.HasMore())
1515 {
1516 SwMergeAddressItem aItem = aIter.Next();
1517 if(aItem.bIsColumn)
1518 {
1519 String sConvertedColumn = aItem.sText;
1520 for(sal_uInt16 nColumn = 0;
1521 nColumn < rHeaders.Count() && nColumn < aAssignment.getLength();
1522 ++nColumn)
1523 {
1524 if(rHeaders.GetString(nColumn) == aItem.sText &&
1525 pAssignment[nColumn].getLength())
1526 {
1527 sConvertedColumn = pAssignment[nColumn];
1528 break;
1529 }
1530 }
1531 //find out if the column exists in the data base
1532 if(!xCols->hasByName(sConvertedColumn))
1533 {
1534 bResult = false;
1535 break;
1536 }
1537 }
1538 }
1539 return bResult;
1540 }
1541 /*-- 05.05.2004 16:10:07---------------------------------------------------
1542
1543 -----------------------------------------------------------------------*/
GetMailDisplayName() const1544 ::rtl::OUString SwMailMergeConfigItem::GetMailDisplayName() const
1545 {
1546 return m_pImpl->sMailDisplayName;
1547 }
1548 /*-- 05.05.2004 16:10:08---------------------------------------------------
1549
1550 -----------------------------------------------------------------------*/
SetMailDisplayName(const::rtl::OUString & rName)1551 void SwMailMergeConfigItem::SetMailDisplayName(const ::rtl::OUString& rName)
1552 {
1553 if(m_pImpl->sMailDisplayName != rName)
1554 {
1555 m_pImpl->sMailDisplayName = rName;
1556 m_pImpl->SetModified();
1557 }
1558 }
1559 /*-- 05.05.2004 16:10:09---------------------------------------------------
1560
1561 -----------------------------------------------------------------------*/
GetMailAddress() const1562 ::rtl::OUString SwMailMergeConfigItem::GetMailAddress() const
1563 {
1564 return m_pImpl->sMailAddress;
1565 }
1566 /*-- 05.05.2004 16:10:09---------------------------------------------------
1567
1568 -----------------------------------------------------------------------*/
SetMailAddress(const::rtl::OUString & rAddress)1569 void SwMailMergeConfigItem::SetMailAddress(const ::rtl::OUString& rAddress)
1570 {
1571 if(m_pImpl->sMailAddress != rAddress )
1572 {
1573 m_pImpl->sMailAddress = rAddress;
1574 m_pImpl->SetModified();
1575 }
1576 }
1577
1578 /*-- 07.05.2004 12:40:59---------------------------------------------------
1579
1580 -----------------------------------------------------------------------*/
IsMailReplyTo() const1581 sal_Bool SwMailMergeConfigItem::IsMailReplyTo() const
1582 {
1583 return m_pImpl->bIsMailReplyTo;
1584 }
1585 /*-- 07.05.2004 12:40:59---------------------------------------------------
1586
1587 -----------------------------------------------------------------------*/
SetMailReplyTo(sal_Bool bSet)1588 void SwMailMergeConfigItem::SetMailReplyTo(sal_Bool bSet)
1589 {
1590 if(m_pImpl->bIsMailReplyTo != bSet)
1591 {
1592 m_pImpl->bIsMailReplyTo = bSet;
1593 m_pImpl->SetModified();
1594 }
1595 }
1596 /*-- 05.05.2004 16:10:09---------------------------------------------------
1597
1598 -----------------------------------------------------------------------*/
GetMailReplyTo() const1599 ::rtl::OUString SwMailMergeConfigItem::GetMailReplyTo() const
1600 {
1601 return m_pImpl->sMailReplyTo;
1602 }
1603 /*-- 05.05.2004 16:10:09---------------------------------------------------
1604
1605 -----------------------------------------------------------------------*/
SetMailReplyTo(const::rtl::OUString & rReplyTo)1606 void SwMailMergeConfigItem::SetMailReplyTo(const ::rtl::OUString& rReplyTo)
1607 {
1608 if(m_pImpl->sMailReplyTo != rReplyTo)
1609 {
1610 m_pImpl->sMailReplyTo = rReplyTo;
1611 m_pImpl->SetModified();
1612 }
1613 }
1614 /*-- 05.05.2004 16:10:09---------------------------------------------------
1615
1616 -----------------------------------------------------------------------*/
GetMailServer() const1617 ::rtl::OUString SwMailMergeConfigItem::GetMailServer() const
1618 {
1619 return m_pImpl->sMailServer;
1620 }
1621 /*-- 05.05.2004 16:10:10---------------------------------------------------
1622
1623 -----------------------------------------------------------------------*/
SetMailServer(const::rtl::OUString & rAddress)1624 void SwMailMergeConfigItem::SetMailServer(const ::rtl::OUString& rAddress)
1625 {
1626 if(m_pImpl->sMailServer != rAddress)
1627 {
1628 m_pImpl->sMailServer = rAddress;
1629 m_pImpl->SetModified();
1630 }
1631 }
1632 /*-- 05.05.2004 16:10:10---------------------------------------------------
1633
1634 -----------------------------------------------------------------------*/
GetMailPort() const1635 sal_Int16 SwMailMergeConfigItem::GetMailPort() const
1636 {
1637 return m_pImpl->bIsDefaultPort ?
1638 (m_pImpl->bIsSecureConnection ? SECURE_PORT : DEFAULT_PORT) :
1639 m_pImpl->nMailPort;
1640 }
1641 /*-- 05.05.2004 16:10:10---------------------------------------------------
1642
1643 -----------------------------------------------------------------------*/
SetMailPort(sal_Int16 nSet)1644 void SwMailMergeConfigItem::SetMailPort(sal_Int16 nSet)
1645 {
1646 if(m_pImpl->nMailPort != nSet || m_pImpl->bIsDefaultPort)
1647 {
1648 m_pImpl->nMailPort = nSet;
1649 m_pImpl->bIsDefaultPort = sal_False;
1650 m_pImpl->SetModified();
1651 }
1652 }
1653 /*-- 05.05.2004 16:10:11---------------------------------------------------
1654
1655 -----------------------------------------------------------------------*/
IsSecureConnection() const1656 sal_Bool SwMailMergeConfigItem::IsSecureConnection() const
1657 {
1658 return m_pImpl->bIsSecureConnection;
1659 }
1660 /*-- 05.05.2004 16:10:12---------------------------------------------------
1661
1662 -----------------------------------------------------------------------*/
SetSecureConnection(sal_Bool bSet)1663 void SwMailMergeConfigItem::SetSecureConnection(sal_Bool bSet)
1664 {
1665 if(m_pImpl->bIsSecureConnection != bSet)
1666 {
1667 m_pImpl->bIsSecureConnection = bSet;
1668 m_pImpl->SetModified();
1669 }
1670 }
1671 /*-- 05.05.2004 16:10:12---------------------------------------------------
1672
1673 -----------------------------------------------------------------------*/
IsAuthentication() const1674 sal_Bool SwMailMergeConfigItem::IsAuthentication() const
1675 {
1676 return m_pImpl->bIsAuthentication;
1677 }
1678 /*-- 05.05.2004 16:10:13---------------------------------------------------
1679
1680 -----------------------------------------------------------------------*/
SetAuthentication(sal_Bool bSet)1681 void SwMailMergeConfigItem::SetAuthentication(sal_Bool bSet)
1682 {
1683 if(m_pImpl->bIsAuthentication != bSet)
1684 {
1685 m_pImpl->bIsAuthentication = bSet;
1686 m_pImpl->SetModified();
1687 }
1688 }
1689 /*-- 05.05.2004 16:10:13---------------------------------------------------
1690
1691 -----------------------------------------------------------------------*/
GetMailUserName() const1692 ::rtl::OUString SwMailMergeConfigItem::GetMailUserName() const
1693 {
1694 return m_pImpl->sMailUserName;
1695 }
1696 /*-- 05.05.2004 16:10:13---------------------------------------------------
1697
1698 -----------------------------------------------------------------------*/
SetMailUserName(const::rtl::OUString & rName)1699 void SwMailMergeConfigItem::SetMailUserName(const ::rtl::OUString& rName)
1700 {
1701 if(m_pImpl->sMailUserName != rName)
1702 {
1703 m_pImpl->sMailUserName = rName;
1704 m_pImpl->SetModified();
1705 }
1706 }
1707 /*-- 05.05.2004 16:10:14---------------------------------------------------
1708
1709 -----------------------------------------------------------------------*/
GetMailPassword() const1710 ::rtl::OUString SwMailMergeConfigItem::GetMailPassword() const
1711 {
1712 return m_pImpl->sMailPassword;
1713 }
1714 /*-- 05.05.2004 16:10:14---------------------------------------------------
1715
1716 -----------------------------------------------------------------------*/
SetMailPassword(const::rtl::OUString & rPassword)1717 void SwMailMergeConfigItem::SetMailPassword(const ::rtl::OUString& rPassword)
1718 {
1719 if(m_pImpl->sMailPassword != rPassword)
1720 {
1721 m_pImpl->sMailPassword = rPassword;
1722 m_pImpl->SetModified();
1723 }
1724 }
1725 /*-- 19.08.2004 14:44:57---------------------------------------------------
1726
1727 -----------------------------------------------------------------------*/
IsSMTPAfterPOP() const1728 sal_Bool SwMailMergeConfigItem::IsSMTPAfterPOP() const
1729 {
1730 return m_pImpl->bIsSMPTAfterPOP;
1731 }
1732 /*-- 19.08.2004 14:44:57---------------------------------------------------
1733
1734 -----------------------------------------------------------------------*/
SetSMTPAfterPOP(sal_Bool bSet)1735 void SwMailMergeConfigItem::SetSMTPAfterPOP(sal_Bool bSet)
1736 {
1737 if( m_pImpl->bIsSMPTAfterPOP != bSet)
1738 {
1739 m_pImpl->bIsSMPTAfterPOP = bSet;
1740 m_pImpl->SetModified();
1741 }
1742 }
1743 /*-- 19.08.2004 14:44:57---------------------------------------------------
1744
1745 -----------------------------------------------------------------------*/
GetInServerName() const1746 ::rtl::OUString SwMailMergeConfigItem::GetInServerName() const
1747 {
1748 return m_pImpl->sInServerName;
1749 }
1750 /*-- 19.08.2004 14:44:57---------------------------------------------------
1751
1752 -----------------------------------------------------------------------*/
SetInServerName(const::rtl::OUString & rServer)1753 void SwMailMergeConfigItem::SetInServerName(const ::rtl::OUString& rServer)
1754 {
1755 if(m_pImpl->sInServerName != rServer)
1756 {
1757 m_pImpl->sInServerName = rServer;
1758 m_pImpl->SetModified();
1759 }
1760 }
1761 /*-- 19.08.2004 14:44:58---------------------------------------------------
1762
1763 -----------------------------------------------------------------------*/
GetInServerPort() const1764 sal_Int16 SwMailMergeConfigItem::GetInServerPort() const
1765 {
1766 return m_pImpl->nInServerPort;
1767 }
1768 /*-- 19.08.2004 14:44:58---------------------------------------------------
1769
1770 -----------------------------------------------------------------------*/
SetInServerPort(sal_Int16 nSet)1771 void SwMailMergeConfigItem::SetInServerPort(sal_Int16 nSet)
1772 {
1773 if( m_pImpl->nInServerPort != nSet)
1774 {
1775 m_pImpl->nInServerPort = nSet;
1776 m_pImpl->SetModified();
1777 }
1778 }
1779 /*-- 20.08.2004 08:52:48---------------------------------------------------
1780
1781 -----------------------------------------------------------------------*/
IsInServerPOP() const1782 sal_Bool SwMailMergeConfigItem::IsInServerPOP() const
1783 {
1784 return m_pImpl->bInServerPOP;
1785 }
1786 /*-- 20.08.2004 08:52:49---------------------------------------------------
1787
1788 -----------------------------------------------------------------------*/
SetInServerPOP(sal_Bool bSet)1789 void SwMailMergeConfigItem::SetInServerPOP(sal_Bool bSet)
1790 {
1791 if( m_pImpl->bInServerPOP != bSet)
1792 {
1793 m_pImpl->bInServerPOP = bSet;
1794 m_pImpl->SetModified();
1795 }
1796 }
1797 /*-- 19.08.2004 14:44:58---------------------------------------------------
1798
1799 -----------------------------------------------------------------------*/
GetInServerUserName() const1800 ::rtl::OUString SwMailMergeConfigItem::GetInServerUserName() const
1801 {
1802 return m_pImpl->sInServerUserName;
1803 }
1804 /*-- 19.08.2004 14:44:58---------------------------------------------------
1805
1806 -----------------------------------------------------------------------*/
SetInServerUserName(const::rtl::OUString & rName)1807 void SwMailMergeConfigItem::SetInServerUserName(const ::rtl::OUString& rName)
1808 {
1809 if( m_pImpl->sInServerUserName != rName)
1810 {
1811 m_pImpl->sInServerUserName = rName;
1812 m_pImpl->SetModified();
1813 }
1814 }
1815 /*-- 19.08.2004 14:44:59---------------------------------------------------
1816
1817 -----------------------------------------------------------------------*/
GetInServerPassword() const1818 ::rtl::OUString SwMailMergeConfigItem::GetInServerPassword() const
1819 {
1820 return m_pImpl->sInServerPassword;
1821 }
1822 /*-- 19.08.2004 14:45:00---------------------------------------------------
1823
1824 -----------------------------------------------------------------------*/
SetInServerPassword(const::rtl::OUString & rPassword)1825 void SwMailMergeConfigItem::SetInServerPassword(const ::rtl::OUString& rPassword)
1826 {
1827 if(m_pImpl->sInServerPassword != rPassword)
1828 {
1829 m_pImpl->sInServerPassword = rPassword;
1830 m_pImpl->SetModified();
1831 }
1832 }
1833
1834 /*-- 02.09.2004 14:43:27---------------------------------------------------
1835
1836 -----------------------------------------------------------------------*/
DocumentReloaded()1837 void SwMailMergeConfigItem::DocumentReloaded()
1838 {
1839 m_bMergeDone = false;
1840 m_bGreetingInserted = false;
1841 m_bAddressInserted = false;
1842 m_rAddressBlockFrame = ::rtl::OUString();
1843 }
1844 /*-- 16.06.2004 12:24:18---------------------------------------------------
1845
1846 -----------------------------------------------------------------------*/
IsMailAvailable() const1847 bool SwMailMergeConfigItem::IsMailAvailable() const
1848 {
1849 return m_pImpl->bIsEMailSupported;
1850 }
1851 /*-- 21.05.2004 12:20:05---------------------------------------------------
1852
1853 -----------------------------------------------------------------------*/
AddMergedDocument(SwDocMergeInfo & rInfo)1854 void SwMailMergeConfigItem::AddMergedDocument(SwDocMergeInfo& rInfo)
1855 {
1856 m_pImpl->aMergeInfos.push_back(rInfo);
1857 }
1858 /*-- 21.05.2004 12:20:05---------------------------------------------------
1859
1860 -----------------------------------------------------------------------*/
GetDocumentMergeInfo(sal_uInt32 nDocument)1861 SwDocMergeInfo& SwMailMergeConfigItem::GetDocumentMergeInfo(sal_uInt32 nDocument)
1862 {
1863 DBG_ASSERT(m_pImpl->aMergeInfos.size() > nDocument,"invalid document index");
1864 return m_pImpl->aMergeInfos[nDocument];
1865 }
1866 /*-- 14.06.2004 11:46:26---------------------------------------------------
1867
1868 -----------------------------------------------------------------------*/
GetMergedDocumentCount() const1869 sal_uInt32 SwMailMergeConfigItem::GetMergedDocumentCount() const
1870 {
1871 return m_pImpl->aMergeInfos.size();
1872 }
1873 /*-- 11.06.2004 10:38:39---------------------------------------------------
1874
1875 -----------------------------------------------------------------------*/
lcl_ExistsView(SwView * pView)1876 SwView* lcl_ExistsView(SwView* pView)
1877 {
1878 const TypeId aType(TYPE(SwView));
1879 SfxViewShell* pViewShell = SfxViewShell::GetFirst( &aType, sal_False );
1880 while(pViewShell)
1881 {
1882 if(pViewShell == pView)
1883 return pView;
1884
1885 pViewShell = SfxViewShell::GetNext( *pViewShell, &aType, sal_False );
1886 }
1887 return 0;
1888 }
1889 /*-- 16.06.2004 15:02:35---------------------------------------------------
1890
1891 -----------------------------------------------------------------------*/
GetTargetView()1892 SwView* SwMailMergeConfigItem::GetTargetView()
1893 {
1894 //make sure that the pointer is really valid - the document may have been closed manually
1895 if(m_pTargetView)
1896 {
1897 m_pTargetView = lcl_ExistsView(m_pTargetView);
1898 }
1899 return m_pTargetView;
1900 }
1901 /*-- 02.09.2004 17:04:11---------------------------------------------------
1902
1903 -----------------------------------------------------------------------*/
SetTargetView(SwView * pView)1904 void SwMailMergeConfigItem::SetTargetView(SwView* pView)
1905 {
1906 m_pTargetView = pView;
1907 //reset the document merge counter
1908 if(!m_pTargetView)
1909 {
1910 m_pImpl->aMergeInfos.clear();
1911 }
1912 }
1913 /*-- 16.06.2004 15:02:35---------------------------------------------------
1914
1915 -----------------------------------------------------------------------*/
GetSourceView()1916 SwView* SwMailMergeConfigItem::GetSourceView()
1917 {
1918 m_pSourceView = lcl_ExistsView(m_pSourceView);
1919 return m_pSourceView;
1920 }
1921
1922 /*-- 04.11.2004 19:53 ---------------------------------------------------
1923 -----------------------------------------------------------------------*/
SetSourceView(SwView * pView)1924 void SwMailMergeConfigItem::SetSourceView(SwView* pView)
1925 {
1926 m_pSourceView = pView;
1927
1928 if(pView)
1929 {
1930 SvStringsDtor aDBNameList(5, 1);
1931 SvStringsDtor aAllDBNames(5, 5);
1932 pView->GetWrtShell().GetAllUsedDB( aDBNameList, &aAllDBNames );
1933 if(aDBNameList.Count())
1934 {
1935 // if fields are available there is usually no need of an addressblock and greeting
1936 if(!m_pImpl->bUserSettingWereOverwritten)
1937 {
1938 if( m_pImpl->bIsAddressBlock == sal_True
1939 || m_pImpl->bIsGreetingLineInMail == sal_True
1940 || m_pImpl->bIsGreetingLine == sal_True )
1941 {
1942 //store user settings
1943 m_pImpl->bUserSettingWereOverwritten = sal_True;
1944 m_pImpl->bIsAddressBlock_LastUserSetting = m_pImpl->bIsAddressBlock;
1945 m_pImpl->bIsGreetingLineInMail_LastUserSetting = m_pImpl->bIsGreetingLineInMail;
1946 m_pImpl->bIsGreetingLine_LastUserSetting = m_pImpl->bIsGreetingLine;
1947
1948 //set all to false
1949 m_pImpl->bIsAddressBlock = sal_False;
1950 m_pImpl->bIsGreetingLineInMail = sal_False;
1951 m_pImpl->bIsGreetingLine = sal_False;
1952
1953 m_pImpl->SetModified();
1954 }
1955 }
1956 }
1957 else if( m_pImpl->bUserSettingWereOverwritten )
1958 {
1959 //restore last user settings:
1960 m_pImpl->bIsAddressBlock = m_pImpl->bIsAddressBlock_LastUserSetting;
1961 m_pImpl->bIsGreetingLineInMail = m_pImpl->bIsGreetingLineInMail_LastUserSetting;
1962 m_pImpl->bIsGreetingLine = m_pImpl->bIsGreetingLine_LastUserSetting;
1963
1964 m_pImpl->bUserSettingWereOverwritten = sal_False;
1965 }
1966 }
1967 }
1968
1969 /*-- 13.03.2006 12:15:06---------------------------------------------------
1970
1971 -----------------------------------------------------------------------*/
SetCurrentAddressBlockIndex(sal_Int32 nSet)1972 void SwMailMergeConfigItem::SetCurrentAddressBlockIndex( sal_Int32 nSet )
1973 {
1974 m_pImpl->SetCurrentAddressBlockIndex( nSet );
1975 }
1976 /*-- 13.03.2006 12:15:07---------------------------------------------------
1977
1978 -----------------------------------------------------------------------*/
GetCurrentAddressBlockIndex() const1979 sal_Int32 SwMailMergeConfigItem::GetCurrentAddressBlockIndex() const
1980 {
1981 return m_pImpl->GetCurrentAddressBlockIndex();
1982 }
1983