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 #ifdef SW_DLLIMPLEMENTATION
27 #undef SW_DLLIMPLEMENTATION
28 #endif
29
30
31 #include <vcl/msgbox.hxx>
32 #include <vcl/svapp.hxx>
33 #include <tools/urlobj.hxx>
34 #include <svl/urihelper.hxx>
35 #include <unotools/pathoptions.hxx>
36 #include <svl/mailenum.hxx>
37 #include <svx/svxdlg.hxx>
38 #include <svx/dialogs.hrc>
39 #include <helpid.h>
40 #include <view.hxx>
41 #include <docsh.hxx>
42 #include <IDocumentDeviceAccess.hxx>
43 #include <wrtsh.hxx>
44 #include <dbmgr.hxx>
45 #include <dbui.hxx>
46 #include <prtopt.hxx>
47 #include <swmodule.hxx>
48 #include <modcfg.hxx>
49 #include <mailmergehelper.hxx>
50 #include <envelp.hrc>
51 #include <mailmrge.hrc>
52 #include <mailmrge.hxx>
53 #include <sfx2/docfile.hxx>
54 #include <sfx2/docfilt.hxx>
55 #include <comphelper/sequenceashashmap.hxx>
56 #include <com/sun/star/ui/dialogs/XFolderPicker.hpp>
57 #include <com/sun/star/frame/XDispatchProvider.hpp>
58 #include <com/sun/star/sdbcx/XColumnsSupplier.hpp>
59 #include <com/sun/star/sdbcx/XRowLocate.hpp>
60 #include <com/sun/star/sdb/XResultSetAccess.hpp>
61 #include <com/sun/star/sdbc/XDataSource.hpp>
62 #include <toolkit/helper/vclunohelper.hxx>
63 #include <comphelper/processfactory.hxx>
64 #include <com/sun/star/form/runtime/XFormController.hpp>
65 #include <cppuhelper/implbase1.hxx>
66 #include <com/sun/star/container/XChild.hpp>
67 #include <com/sun/star/container/XContainerQuery.hpp>
68 #include <com/sun/star/container/XEnumeration.hpp>
69
70 #include <unomid.h>
71
72 #include <algorithm>
73
74 using namespace rtl;
75 using namespace ::com::sun::star;
76 using namespace ::com::sun::star::container;
77 using namespace ::com::sun::star::lang;
78 using namespace ::com::sun::star::sdb;
79 using namespace ::com::sun::star::sdbc;
80 using namespace ::com::sun::star::sdbcx;
81 using namespace ::com::sun::star::beans;
82 using namespace ::com::sun::star::util;
83 using namespace ::com::sun::star::uno;
84 using namespace ::com::sun::star::frame;
85 using namespace ::com::sun::star::form;
86 using namespace ::com::sun::star::view;
87 using namespace ::com::sun::star::ui::dialogs;
88
89
90 /* -----------------------------05.06.01 13:54--------------------------------
91
92 ---------------------------------------------------------------------------*/
93 struct SwMailMergeDlg_Impl
94 {
95 uno::Reference<runtime::XFormController> xFController;
96 uno::Reference<XSelectionChangeListener> xChgLstnr;
97 uno::Reference<XSelectionSupplier> xSelSupp;
98 };
99 /* -----------------------------05.06.01 13:47--------------------------------
100 helper classes
101 ---------------------------------------------------------------------------*/
102 class SwXSelChgLstnr_Impl : public cppu::WeakImplHelper1
103 <
104 view::XSelectionChangeListener
105 >
106 {
107 SwMailMergeDlg& rParent;
108 public:
109 SwXSelChgLstnr_Impl(SwMailMergeDlg& rParentDlg);
110 ~SwXSelChgLstnr_Impl();
111
112 virtual void SAL_CALL selectionChanged( const EventObject& aEvent ) throw (RuntimeException);
113 virtual void SAL_CALL disposing( const EventObject& Source ) throw (RuntimeException);
114 };
115 /* -----------------------------05.06.01 13:51--------------------------------
116
117 ---------------------------------------------------------------------------*/
SwXSelChgLstnr_Impl(SwMailMergeDlg & rParentDlg)118 SwXSelChgLstnr_Impl::SwXSelChgLstnr_Impl(SwMailMergeDlg& rParentDlg) :
119 rParent(rParentDlg)
120 {}
121 /* -----------------------------05.06.01 14:06--------------------------------
122
123 ---------------------------------------------------------------------------*/
~SwXSelChgLstnr_Impl()124 SwXSelChgLstnr_Impl::~SwXSelChgLstnr_Impl()
125 {}
126 /* -----------------------------05.06.01 14:06--------------------------------
127
128 ---------------------------------------------------------------------------*/
selectionChanged(const EventObject &)129 void SwXSelChgLstnr_Impl::selectionChanged( const EventObject& ) throw (RuntimeException)
130 {
131 //call the parent to enable selection mode
132 Sequence <Any> aSelection;
133 if(rParent.pImpl->xSelSupp.is())
134 rParent.pImpl->xSelSupp->getSelection() >>= aSelection;
135
136 sal_Bool bEnable = aSelection.getLength() > 0;
137 rParent.aMarkedRB.Enable(bEnable);
138 if(bEnable)
139 rParent.aMarkedRB.Check();
140 else if(rParent.aMarkedRB.IsChecked())
141 {
142 rParent.aAllRB.Check();
143 rParent.m_aSelection.realloc(0);
144 }
145 }
146 /* -----------------------------05.06.01 14:06--------------------------------
147
148 ---------------------------------------------------------------------------*/
disposing(const EventObject &)149 void SwXSelChgLstnr_Impl::disposing( const EventObject& ) throw (RuntimeException)
150 {
151 DBG_ERROR("disposing");
152 }
153 /*------------------------------------------------------------------------
154 Beschreibung:
155 ------------------------------------------------------------------------*/
SwMailMergeDlg(Window * pParent,SwWrtShell & rShell,const String & rSourceName,const String & rTblName,sal_Int32 nCommandType,const uno::Reference<XConnection> & _xConnection,Sequence<Any> * pSelection)156 SwMailMergeDlg::SwMailMergeDlg(Window* pParent, SwWrtShell& rShell,
157 const String& rSourceName,
158 const String& rTblName,
159 sal_Int32 nCommandType,
160 const uno::Reference< XConnection>& _xConnection,
161 Sequence< Any >* pSelection) :
162
163 SvxStandardDialog(pParent, SW_RES(DLG_MAILMERGE)),
164 pBeamerWin (new Window(this, SW_RES(WIN_BEAMER))),
165
166 aAllRB (this, SW_RES(RB_ALL)),
167 aMarkedRB (this, SW_RES(RB_MARKED)),
168 aFromRB (this, SW_RES(RB_FROM)),
169 aFromNF (this, SW_RES(NF_FROM)),
170 aBisFT (this, SW_RES(FT_BIS)),
171 aToNF (this, SW_RES(NF_TO)),
172 aRecordFL (this, SW_RES(FL_RECORD)),
173
174 aSeparatorFL (this, SW_RES(FL_SEPARATOR)),
175
176 aPrinterRB (this, SW_RES(RB_PRINTER)),
177 aMailingRB (this, SW_RES(RB_MAILING)),
178 aFileRB (this, SW_RES(RB_FILE)),
179
180 aSingleJobsCB (this, SW_RES(CB_SINGLE_JOBS)),
181
182 aSaveMergedDocumentFL(this, SW_RES( FL_SAVE_MERGED_DOCUMENT)),
183 aSaveSingleDocRB(this, SW_RES( RB_SAVE_SINGLE_DOC )),
184 aSaveIndividualRB(this, SW_RES( RB_SAVE_INDIVIDUAL )),
185 aGenerateFromDataBaseCB(this, SW_RES( RB_GENERATE_FROM_DATABASE )),
186
187 aColumnFT (this, SW_RES(FT_COLUMN)),
188 aColumnLB (this, SW_RES(LB_COLUMN)),
189
190 aPathFT (this, SW_RES(FT_PATH)),
191 aPathED (this, SW_RES(ED_PATH)),
192 aPathPB (this, SW_RES(PB_PATH)),
193 aFilterFT (this, SW_RES(FT_FILTER)),
194 aFilterLB (this, SW_RES(LB_FILTER)),
195
196 aAddressFldLB (this, SW_RES(LB_ADDRESSFLD)),
197 aSubjectFT (this, SW_RES(FT_SUBJECT)),
198 aSubjectED (this, SW_RES(ED_SUBJECT)),
199 aFormatFT (this, SW_RES(FT_FORMAT)),
200 aAttachFT (this, SW_RES(FT_ATTACH)),
201 aAttachED (this, SW_RES(ED_ATTACH)),
202 aAttachPB (this, SW_RES(PB_ATTACH)),
203 aFormatHtmlCB (this, SW_RES(CB_FORMAT_HTML)),
204 aFormatRtfCB (this, SW_RES(CB_FORMAT_RTF)),
205 aFormatSwCB (this, SW_RES(CB_FORMAT_SW)),
206 aDestFL (this, SW_RES(FL_DEST)),
207
208 aBottomSeparatorFL(this, SW_RES(FL_BOTTOM_SEPARATOR)),
209
210 aOkBTN (this, SW_RES(BTN_OK)),
211 aCancelBTN (this, SW_RES(BTN_CANCEL)),
212 aHelpBTN (this, SW_RES(BTN_HELP)),
213
214 pImpl (new SwMailMergeDlg_Impl),
215
216 rSh (rShell),
217 rDBName (rSourceName),
218 rTableName (rTblName),
219 nMergeType (DBMGR_MERGE_MAILING),
220 m_aDialogSize( GetSizePixel() )
221 {
222 FreeResource();
223 aSingleJobsCB.Show(sal_False); // not supported in since cws printerpullpages anymore
224 //task #97066# mailing of form letters is currently not supported
225 aMailingRB.Show(sal_False);
226 aSubjectFT.Show(sal_False);
227 aSubjectED.Show(sal_False);
228 aFormatFT.Show(sal_False);
229 aFormatSwCB.Show(sal_False);
230 aFormatHtmlCB.Show(sal_False);
231 aFormatRtfCB.Show(sal_False);
232 aAttachFT.Show(sal_False);
233 aAttachED.Show(sal_False);
234 aAttachPB.Show(sal_False);
235
236 Point aMailPos = aMailingRB.GetPosPixel();
237 Point aFilePos = aFileRB.GetPosPixel();
238 aFilePos.X() -= (aFilePos.X() - aMailPos.X()) /2;
239 aFileRB.SetPosPixel(aFilePos);
240 uno::Reference< lang::XMultiServiceFactory > xMSF = comphelper::getProcessServiceFactory();
241 if(pSelection)
242 {
243 m_aSelection = *pSelection;
244 //move all controls
245 long nDiff = aRecordFL.GetPosPixel().Y() - pBeamerWin->GetPosPixel().Y();
246 pBeamerWin->Show(sal_False);
247 ::Size aSize = GetSizePixel();
248 aSize.Height() -= nDiff;
249 SetSizePixel(aSize);
250 Window* aCntrlArr[] = {
251 &aAllRB ,
252 &aMarkedRB ,
253 &aFromRB ,
254 &aFromNF ,
255 &aBisFT ,
256 &aToNF ,
257 &aRecordFL ,
258 &aPrinterRB ,
259 &aMailingRB ,
260 &aFileRB ,
261 &aSingleJobsCB,
262 &aPathFT ,
263 &aPathED ,
264 &aPathPB ,
265 &aFilterFT ,
266 &aFilterLB ,
267 &aColumnLB ,
268 &aAddressFldLB,
269 &aSubjectFT ,
270 &aSubjectED ,
271 &aFormatFT ,
272 &aAttachFT ,
273 &aAttachED ,
274 &aAttachPB ,
275 &aFormatHtmlCB,
276 &aFormatRtfCB ,
277 &aFormatSwCB ,
278 &aDestFL ,
279 &aSeparatorFL ,
280 0};
281
282 for( Window** ppW = aCntrlArr; *ppW; ++ppW )
283 {
284 ::Point aPnt( (*ppW)->GetPosPixel() );
285 aPnt.Y() -= nDiff;
286 (*ppW)->SetPosPixel( aPnt );
287 }
288 }
289 else
290 {
291 try
292 {
293 // create a frame wrapper for myself
294 uno::Reference< XMultiServiceFactory >
295 xMgr = comphelper::getProcessServiceFactory();
296 xFrame = uno::Reference< XFrame >(xMgr->createInstance(C2U("com.sun.star.frame.Frame")), UNO_QUERY);
297 if(xFrame.is())
298 {
299 xFrame->initialize( VCLUnoHelper::GetInterface ( pBeamerWin ) );
300 }
301 }
302 catch (Exception&)
303 {
304 xFrame.clear();
305 }
306 if(xFrame.is())
307 {
308 uno::Reference<XDispatchProvider> xDP(xFrame, UNO_QUERY);
309 URL aURL;
310 aURL.Complete = C2U(".component:DB/DataSourceBrowser");
311 uno::Reference<XDispatch> xD = xDP->queryDispatch(aURL,
312 C2U(""),
313 0x0C);
314 if(xD.is())
315 {
316 Sequence<PropertyValue> aProperties(3);
317 PropertyValue* pProperties = aProperties.getArray();
318 pProperties[0].Name = C2U("DataSourceName");
319 pProperties[0].Value <<= OUString(rSourceName);
320 pProperties[1].Name = C2U("Command");
321 pProperties[1].Value <<= OUString(rTableName);
322 pProperties[2].Name = C2U("CommandType");
323 pProperties[2].Value <<= nCommandType;
324 xD->dispatch(aURL, aProperties);
325 pBeamerWin->Show();
326 }
327 uno::Reference<XController> xController = xFrame->getController();
328 pImpl->xFController = uno::Reference<runtime::XFormController>(xController, UNO_QUERY);
329 if(pImpl->xFController.is())
330 {
331 uno::Reference< awt::XControl > xCtrl = pImpl->xFController->getCurrentControl( );
332 pImpl->xSelSupp = uno::Reference<XSelectionSupplier>(xCtrl, UNO_QUERY);
333 if(pImpl->xSelSupp.is())
334 {
335 pImpl->xChgLstnr = new SwXSelChgLstnr_Impl(*this);
336 pImpl->xSelSupp->addSelectionChangeListener( pImpl->xChgLstnr );
337 }
338 }
339 }
340 }
341
342 pModOpt = SW_MOD()->GetModuleConfig();
343
344 //aSingleJobsCB.Check(pModOpt->IsSinglePrintJob());// not supported in since cws printerpullpages anymore
345
346 sal_Int16 nMailingMode(pModOpt->GetMailingFormats());
347 aFormatSwCB.Check((nMailingMode & TXTFORMAT_OFFICE) != 0);
348 aFormatHtmlCB.Check((nMailingMode & TXTFORMAT_HTML) != 0);
349 aFormatRtfCB.Check((nMailingMode & TXTFORMAT_RTF) != 0);
350
351 aAllRB.Check(sal_True);
352
353 // Handler installieren
354 Link aLk = LINK(this, SwMailMergeDlg, ButtonHdl);
355 aOkBTN.SetClickHdl(aLk);
356
357 aPathPB.SetClickHdl(LINK(this, SwMailMergeDlg, InsertPathHdl));
358 aAttachPB.SetClickHdl(LINK(this, SwMailMergeDlg, AttachFileHdl));
359
360 aLk = LINK(this, SwMailMergeDlg, OutputTypeHdl);
361 aPrinterRB.SetClickHdl(aLk);
362 aMailingRB.SetClickHdl(aLk);
363 aFileRB.SetClickHdl(aLk);
364
365 //#i63267# printing might be disabled
366 bool bIsPrintable = !Application::GetSettings().GetMiscSettings().GetDisablePrinting();
367 aPrinterRB.Enable(bIsPrintable);
368 OutputTypeHdl(bIsPrintable ? &aPrinterRB : &aFileRB);
369
370 aLk = LINK(this, SwMailMergeDlg, FilenameHdl);
371 aGenerateFromDataBaseCB.SetClickHdl( aLk );
372 sal_Bool bColumn = pModOpt->IsNameFromColumn();
373 if(bColumn)
374 aGenerateFromDataBaseCB.Check();
375
376 FilenameHdl( &aGenerateFromDataBaseCB );
377 aLk = LINK(this, SwMailMergeDlg, SaveTypeHdl);
378 aSaveSingleDocRB.Check( true );
379 aSaveSingleDocRB.SetClickHdl( aLk );
380 aSaveIndividualRB.SetClickHdl( aLk );
381 aLk.Call( &aSaveSingleDocRB );
382
383 aLk = LINK(this, SwMailMergeDlg, ModifyHdl);
384 aFromNF.SetModifyHdl(aLk);
385 aToNF.SetModifyHdl(aLk);
386 aFromNF.SetMax(SAL_MAX_INT32);
387 aToNF.SetMax(SAL_MAX_INT32);
388
389 SwNewDBMgr* pNewDBMgr = rSh.GetNewDBMgr();
390 if(_xConnection.is())
391 pNewDBMgr->GetColumnNames(&aAddressFldLB, _xConnection, rTableName);
392 else
393 pNewDBMgr->GetColumnNames(&aAddressFldLB, rDBName, rTableName);
394 for(sal_uInt16 nEntry = 0; nEntry < aAddressFldLB.GetEntryCount(); nEntry++)
395 aColumnLB.InsertEntry(aAddressFldLB.GetEntry(nEntry));
396
397 aAddressFldLB.SelectEntry(C2S("EMAIL"));
398
399 String sPath(pModOpt->GetMailingPath());
400 if(!sPath.Len())
401 {
402 SvtPathOptions aPathOpt;
403 sPath = aPathOpt.GetWorkPath();
404 }
405 INetURLObject aURL(sPath);
406 if(aURL.GetProtocol() == INET_PROT_FILE)
407 aPathED.SetText(aURL.PathToFileName());
408 else
409 aPathED.SetText(aURL.GetFull());
410
411 if (!bColumn )
412 {
413 aColumnLB.SelectEntry(C2S("NAME"));
414 }
415 else
416 aColumnLB.SelectEntry(pModOpt->GetNameFromColumn());
417
418 if (aAddressFldLB.GetSelectEntryCount() == 0)
419 aAddressFldLB.SelectEntryPos(0);
420 if (aColumnLB.GetSelectEntryCount() == 0)
421 aColumnLB.SelectEntryPos(0);
422
423 const sal_Bool bEnable = m_aSelection.getLength() != 0;
424 aMarkedRB.Enable(bEnable);
425 if (bEnable)
426 aMarkedRB.Check();
427 else
428 {
429 aAllRB.Check();
430 aMarkedRB.Enable(sal_False);
431 }
432 SetMinOutputSizePixel(m_aDialogSize);
433 try
434 {
435 uno::Reference< container::XNameContainer> xFilterFactory(
436 xMSF->createInstance(C2U("com.sun.star.document.FilterFactory")), UNO_QUERY_THROW);
437 uno::Reference< container::XContainerQuery > xQuery(xFilterFactory, UNO_QUERY_THROW);
438 OUString sCommand(C2U("matchByDocumentService=com.sun.star.text.TextDocument:iflags="));
439 sCommand += String::CreateFromInt32(SFX_FILTER_EXPORT);
440 sCommand += C2U(":eflags=");
441 sCommand += String::CreateFromInt32(SFX_FILTER_NOTINFILEDLG);
442 sCommand += C2U(":default_first");
443 uno::Reference< container::XEnumeration > xList = xQuery->createSubSetEnumerationByQuery(sCommand);
444 const ::rtl::OUString sName = OUString::createFromAscii("Name");
445 const ::rtl::OUString sFlags = OUString::createFromAscii("Flags");
446 const ::rtl::OUString sUIName = OUString::createFromAscii("UIName");
447 sal_uInt16 nODT = USHRT_MAX;
448 while(xList->hasMoreElements())
449 {
450 comphelper::SequenceAsHashMap aFilter(xList->nextElement());
451 OUString sFilter = aFilter.getUnpackedValueOrDefault(sName, OUString());
452
453 uno::Any aProps = xFilterFactory->getByName(sFilter);
454 uno::Sequence< beans::PropertyValue > aFilterProperties;
455 aProps >>= aFilterProperties;
456 ::rtl::OUString sUIName2;
457 const beans::PropertyValue* pFilterProperties = aFilterProperties.getConstArray();
458 for(int nProp = 0; nProp < aFilterProperties.getLength(); nProp++)
459 {
460 if(!pFilterProperties[nProp].Name.compareToAscii("UIName"))
461 {
462 pFilterProperties[nProp].Value >>= sUIName2;
463 break;
464 }
465 }
466 if( sUIName2.getLength() )
467 {
468 sal_uInt16 nFilter = aFilterLB.InsertEntry( sUIName2 );
469 if( 0 == sFilter.compareToAscii("writer8") )
470 nODT = nFilter;
471 aFilterLB.SetEntryData( nFilter, new ::rtl::OUString( sFilter ) );
472 }
473 }
474 aFilterLB.SelectEntryPos( nODT );
475 }
476 catch( const uno::Exception& )
477 {
478 }
479 }
480
481 /*------------------------------------------------------------------------
482 Beschreibung:
483 ------------------------------------------------------------------------*/
484
~SwMailMergeDlg()485 SwMailMergeDlg::~SwMailMergeDlg()
486 {
487 if(xFrame.is())
488 {
489 xFrame->setComponent(NULL, NULL);
490 xFrame->dispose();
491 }
492 else
493 delete pBeamerWin;
494
495 for( sal_uInt16 nFilter = 0; nFilter < aFilterLB.GetEntryCount(); ++nFilter )
496 {
497 ::rtl::OUString* pData = reinterpret_cast< ::rtl::OUString* >( aFilterLB.GetEntryData(nFilter) );
498 delete pData;
499 }
500 delete pImpl;
501 }
502
503 /*------------------------------------------------------------------------
504 Beschreibung:
505 ------------------------------------------------------------------------*/
506
Apply()507 void SwMailMergeDlg::Apply()
508 {
509 }
510 /*-- 01.06.2007 13:06:50---------------------------------------------------
511
512 -----------------------------------------------------------------------*/
lcl_MoveControlY(Window * ppW,long nDiffSize)513 void lcl_MoveControlY( Window* ppW, long nDiffSize )
514 {
515 Point aPos( ppW->GetPosPixel());
516 aPos.Y() += nDiffSize;
517 ppW->SetPosPixel( aPos );
518 }
lcl_MoveControlX(Window * ppW,long nDiffSize)519 void lcl_MoveControlX( Window* ppW, long nDiffSize )
520 {
521 Point aPos( ppW->GetPosPixel());
522 aPos.X() += nDiffSize;
523 ppW->SetPosPixel( aPos );
524 }
lcl_ChangeWidth(Window * ppW,long nDiffSize)525 void lcl_ChangeWidth( Window* ppW, long nDiffSize )
526 {
527 Size aSize( ppW->GetSizePixel());
528 aSize.Width() += nDiffSize;
529 ppW->SetSizePixel( aSize );
530 }
Resize()531 void SwMailMergeDlg::Resize()
532 {
533 //the only controls that profit from the resize is pBeamerWin
534 // and aPathED, aFilenameED and aColumnLB
535
536 Size aCurSize( GetSizePixel() );
537 //find the difference
538 Size aDiffSize( aCurSize.Width() - m_aDialogSize.Width(),
539 aCurSize.Height() - m_aDialogSize.Height() );
540 m_aDialogSize = aCurSize;
541 if( pBeamerWin->IsVisible() )
542 {
543 Window* aCntrlArr[] = {
544 &aAllRB ,
545 &aMarkedRB ,
546 &aFromRB ,
547 &aFromNF ,
548 &aBisFT ,
549 &aToNF ,
550 &aRecordFL ,
551 &aPrinterRB ,
552 &aMailingRB ,
553 &aFileRB ,
554 &aSingleJobsCB,
555 &aSaveMergedDocumentFL,
556 &aSaveSingleDocRB,
557 &aSaveIndividualRB,
558 &aGenerateFromDataBaseCB,
559 &aPathFT ,
560 &aPathED ,
561 &aPathPB ,
562 &aColumnFT,
563 &aColumnLB ,
564 &aFilterFT ,
565 &aFilterLB ,
566 &aAddressFldLB,
567 &aSubjectFT ,
568 &aSubjectED ,
569 &aFormatFT ,
570 &aAttachFT ,
571 &aAttachED ,
572 &aAttachPB ,
573 &aFormatHtmlCB,
574 &aFormatRtfCB ,
575 &aFormatSwCB ,
576 &aDestFL ,
577 &aSeparatorFL ,
578 &aBottomSeparatorFL,
579 &aOkBTN,
580 &aCancelBTN,
581 &aHelpBTN,
582 0};
583 for( Window** ppW = aCntrlArr; *ppW; ++ppW )
584 {
585 lcl_MoveControlY( *ppW, aDiffSize.Height() );
586 }
587 //some controls have to be extended horizontally
588 lcl_MoveControlX( &aOkBTN, aDiffSize.Width() );
589 lcl_MoveControlX( &aCancelBTN, aDiffSize.Width() );
590 lcl_MoveControlX( &aHelpBTN, aDiffSize.Width() );
591 lcl_MoveControlX( &aPathPB, aDiffSize.Width() );
592 lcl_MoveControlX( &aFileRB, aDiffSize.Width()/2 );
593
594 lcl_ChangeWidth( &aBottomSeparatorFL, aDiffSize.Width() );
595 lcl_ChangeWidth( &aSaveMergedDocumentFL, aDiffSize.Width() );
596 lcl_ChangeWidth( &aColumnLB, aDiffSize.Width() );
597 lcl_ChangeWidth( &aPathED, aDiffSize.Width() );
598 lcl_ChangeWidth( &aFilterLB, aDiffSize.Width() );
599 lcl_ChangeWidth( &aDestFL, aDiffSize.Width() );
600
601 Size aBeamerSize( pBeamerWin->GetSizePixel() ) ;
602 aBeamerSize.Width() += aDiffSize.Width();
603 aBeamerSize.Height() += aDiffSize.Height();
604 pBeamerWin->SetSizePixel(aBeamerSize);
605 }
606 }
607
608 /*------------------------------------------------------------------------
609 Beschreibung:
610 ------------------------------------------------------------------------*/
611
IMPL_LINK(SwMailMergeDlg,ButtonHdl,Button *,pBtn)612 IMPL_LINK( SwMailMergeDlg, ButtonHdl, Button *, pBtn )
613 {
614 if (pBtn == &aOkBTN)
615 {
616 if( ExecQryShell() )
617 EndDialog(RET_OK);
618 }
619 return 0;
620 }
621
622 /*------------------------------------------------------------------------
623 Beschreibung:
624 ------------------------------------------------------------------------*/
625
IMPL_LINK(SwMailMergeDlg,OutputTypeHdl,RadioButton *,pBtn)626 IMPL_LINK( SwMailMergeDlg, OutputTypeHdl, RadioButton *, pBtn )
627 {
628 sal_Bool bPrint = pBtn == &aPrinterRB;
629 aSingleJobsCB.Enable(bPrint);
630
631 aSaveMergedDocumentFL.Enable( !bPrint );
632 aSaveSingleDocRB.Enable( !bPrint );
633 aSaveIndividualRB.Enable( !bPrint );
634
635 if( !bPrint )
636 {
637 SaveTypeHdl( aSaveSingleDocRB.IsChecked() ? &aSaveSingleDocRB : &aSaveIndividualRB );
638 }
639 else
640 {
641 aPathFT.Enable(false);
642 aPathED.Enable(false);
643 aPathPB.Enable(false);
644 aColumnFT.Enable(false);
645 aColumnLB.Enable(false);
646 aFilterFT.Enable(false);
647 aFilterLB.Enable(false);
648 aGenerateFromDataBaseCB.Enable(false);
649 }
650
651 return 0;
652 }
653 /*-- 01.06.2007 12:36:43---------------------------------------------------
654
655 -----------------------------------------------------------------------*/
IMPL_LINK(SwMailMergeDlg,SaveTypeHdl,RadioButton *,pBtn)656 IMPL_LINK( SwMailMergeDlg, SaveTypeHdl, RadioButton*, pBtn )
657 {
658 bool bIndividual = pBtn == &aSaveIndividualRB;
659
660 aGenerateFromDataBaseCB.Enable( bIndividual );
661 if( bIndividual )
662 {
663 FilenameHdl( &aGenerateFromDataBaseCB );
664 }
665 else
666 {
667 aColumnFT.Enable(false);
668 aColumnLB.Enable(false);
669 aPathFT.Enable( false );
670 aPathED.Enable( false );
671 aPathPB.Enable( false );
672 aFilterFT.Enable( false );
673 aFilterLB.Enable( false );
674 }
675 return 0;
676 }
677 /*------------------------------------------------------------------------
678 Beschreibung:
679 ------------------------------------------------------------------------*/
680
IMPL_LINK(SwMailMergeDlg,FilenameHdl,CheckBox *,pBox)681 IMPL_LINK( SwMailMergeDlg, FilenameHdl, CheckBox*, pBox )
682 {
683 sal_Bool bEnable = pBox->IsChecked();
684 aColumnFT.Enable( bEnable );
685 aColumnLB.Enable(bEnable);
686 aPathFT.Enable( bEnable );
687 aPathED.Enable(bEnable);
688 aPathPB.Enable( bEnable );
689 aFilterFT.Enable( bEnable );
690 aFilterLB.Enable( bEnable );
691 return 0;
692 }
693
694 /*------------------------------------------------------------------------
695 Beschreibung:
696 ------------------------------------------------------------------------*/
697
IMPL_LINK(SwMailMergeDlg,ModifyHdl,NumericField *,EMPTYARG)698 IMPL_LINK( SwMailMergeDlg, ModifyHdl, NumericField *, EMPTYARG )
699 {
700 aFromRB.Check();
701 return (0);
702 }
703
704 /*------------------------------------------------------------------------
705 Beschreibung:
706 ------------------------------------------------------------------------*/
707
ExecQryShell()708 bool SwMailMergeDlg::ExecQryShell()
709 {
710 if(pImpl->xSelSupp.is())
711 {
712 pImpl->xSelSupp->removeSelectionChangeListener( pImpl->xChgLstnr );
713 }
714 SwNewDBMgr* pMgr = rSh.GetNewDBMgr();
715
716 if (aPrinterRB.IsChecked())
717 nMergeType = DBMGR_MERGE_MAILMERGE;
718 else if (aMailingRB.IsChecked())
719 {
720 nMergeType = DBMGR_MERGE_MAILING;
721 pMgr->SetEMailColumn(aAddressFldLB.GetSelectEntry());
722 pMgr->SetSubject(aSubjectED.GetText());
723 pMgr->SetAttachment(aAttachED.GetText());
724 }
725 else
726 {
727 nMergeType = static_cast< sal_uInt16 >( aSaveSingleDocRB.IsChecked() ?
728 DBMGR_MERGE_SINGLE_FILE : DBMGR_MERGE_MAILFILES );
729 SfxMedium* pMedium = rSh.GetView().GetDocShell()->GetMedium();
730 INetURLObject aAbs;
731 if( pMedium )
732 aAbs = pMedium->GetURLObject();
733 String sPath(
734 URIHelper::SmartRel2Abs(
735 aAbs, aPathED.GetText(), URIHelper::GetMaybeFileHdl()));
736 pModOpt->SetMailingPath(sPath);
737 String sDelim(INET_PATH_TOKEN);
738
739 if (sPath.Len() >= sDelim.Len() &&
740 sPath.Copy(sPath.Len()-sDelim.Len()).CompareTo(sDelim) != COMPARE_EQUAL)
741 sPath += sDelim;
742
743 pModOpt->SetIsNameFromColumn(aGenerateFromDataBaseCB.IsChecked());
744
745 if (aGenerateFromDataBaseCB.IsEnabled() && aGenerateFromDataBaseCB.IsChecked())
746 {
747 pMgr->SetEMailColumn(aColumnLB.GetSelectEntry());
748 pModOpt->SetNameFromColumn(aColumnLB.GetSelectEntry());
749 if( aFilterLB.GetSelectEntryPos() != LISTBOX_ENTRY_NOTFOUND)
750 m_sSaveFilter = *static_cast<const ::rtl::OUString*>(aFilterLB.GetEntryData( aFilterLB.GetSelectEntryPos() ));
751 }
752 else
753 {
754 //#i97667# reset column name - otherwise it's remembered from the last run
755 pMgr->SetEMailColumn(::rtl::OUString());
756 //start save as dialog
757 String sFilter;
758 sPath = SwMailMergeHelper::CallSaveAsDialog(sFilter);
759 if(!sPath.Len())
760 return false;
761 m_sSaveFilter = sFilter;
762 }
763
764 pMgr->SetSubject(sPath);
765 }
766
767 if (aFromRB.IsChecked()) // Liste Einfuegen
768 {
769 // Safe: the maximal value of the fields is limited
770 sal_Int32 nStart = sal::static_int_cast<sal_Int32>(aFromNF.GetValue());
771 sal_Int32 nEnd = sal::static_int_cast<sal_Int32>(aToNF.GetValue());
772
773 if (nEnd < nStart)
774 std::swap(nEnd, nStart);
775
776 m_aSelection.realloc(nEnd - nStart + 1);
777 Any* pSelection = m_aSelection.getArray();
778 for (sal_Int32 i = nStart; i <= nEnd; ++i, ++pSelection)
779 *pSelection <<= i;
780 }
781 else if (aAllRB.IsChecked() )
782 m_aSelection.realloc(0); // Leere Selektion = Alles einfuegen
783 else
784 {
785 if(pImpl->xSelSupp.is())
786 {
787 //update selection
788 uno::Reference< XRowLocate > xRowLocate(GetResultSet(),UNO_QUERY);
789 uno::Reference< XResultSet > xRes(xRowLocate,UNO_QUERY);
790 pImpl->xSelSupp->getSelection() >>= m_aSelection;
791 if ( xRowLocate.is() )
792 {
793 Any* pBegin = m_aSelection.getArray();
794 Any* pEnd = pBegin + m_aSelection.getLength();
795 for (;pBegin != pEnd ; ++pBegin)
796 {
797 if ( xRowLocate->moveToBookmark(*pBegin) )
798 *pBegin <<= xRes->getRow();
799 }
800 }
801 }
802 }
803 IDocumentDeviceAccess* pIDDA = rSh.getIDocumentDeviceAccess();
804 SwPrintData aPrtData( pIDDA->getPrintData() );
805 aPrtData.SetPrintSingleJobs(aSingleJobsCB.IsChecked());
806 pIDDA->setPrintData(aPrtData);
807
808 pModOpt->SetSinglePrintJob(aSingleJobsCB.IsChecked());
809
810 sal_uInt8 nMailingMode = 0;
811
812 if (aFormatSwCB.IsChecked())
813 nMailingMode |= TXTFORMAT_OFFICE;
814 if (aFormatHtmlCB.IsChecked())
815 nMailingMode |= TXTFORMAT_HTML;
816 if (aFormatRtfCB.IsChecked())
817 nMailingMode |= TXTFORMAT_RTF;
818 pModOpt->SetMailingFormats(nMailingMode);
819 return true;
820 }
821
822 /*------------------------------------------------------------------------
823 Beschreibung:
824 ------------------------------------------------------------------------*/
825
IMPL_LINK(SwMailMergeDlg,InsertPathHdl,PushButton *,EMPTYARG)826 IMPL_LINK( SwMailMergeDlg, InsertPathHdl, PushButton *, EMPTYARG )
827 {
828 String sPath( aPathED.GetText() );
829 if( !sPath.Len() )
830 {
831 SvtPathOptions aPathOpt;
832 sPath = aPathOpt.GetWorkPath();
833 }
834
835 uno::Reference< XMultiServiceFactory > xMgr( ::comphelper::getProcessServiceFactory() );
836 uno::Reference < XFolderPicker > xFP;
837 if( xMgr.is() )
838 {
839 xFP = uno::Reference< XFolderPicker >(
840 xMgr->createInstance(
841 C2U( "com.sun.star.ui.dialogs.FolderPicker" ) ),
842 UNO_QUERY );
843 }
844 // pFileDlg->SetHelpId(HID_FILEDLG_MAILMRGE1);
845 xFP->setDisplayDirectory(sPath);
846 if( xFP->execute() == RET_OK )
847 {
848 INetURLObject aURL(xFP->getDirectory());
849 if(aURL.GetProtocol() == INET_PROT_FILE)
850 aPathED.SetText(aURL.PathToFileName());
851 else
852 aPathED.SetText(aURL.GetFull());
853 }
854 return 0;
855 }
856
857 /*------------------------------------------------------------------------
858 Beschreibung:
859 ------------------------------------------------------------------------*/
860
IMPL_LINK(SwMailMergeDlg,AttachFileHdl,PushButton *,EMPTYARG)861 IMPL_LINK( SwMailMergeDlg, AttachFileHdl, PushButton *, EMPTYARG )
862 {
863 SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
864 if(pFact)
865 {
866 AbstractSvxMultiFileDialog* pFileDlg = pFact->CreateSvxMultiFileDialog( this );
867 DBG_ASSERT(pFileDlg, "Dialogdiet fail!");
868 pFileDlg->SetFiles(aAttachED.GetText());
869 pFileDlg->SetHelpId(HID_FILEDLG_MAILMRGE2);
870
871 if (pFileDlg->Execute())
872 aAttachED.SetText(pFileDlg->GetFiles());
873
874 delete pFileDlg;
875 }
876 return 0;
877 }
878 /* -----------------------------05.06.01 14:56--------------------------------
879
880 ---------------------------------------------------------------------------*/
GetResultSet() const881 uno::Reference<XResultSet> SwMailMergeDlg::GetResultSet() const
882 {
883 uno::Reference< XResultSet > xResSetClone;
884 if ( pImpl->xFController.is() )
885 {
886 // we create a clone to do the task
887 uno::Reference< XResultSetAccess > xResultSetAccess( pImpl->xFController->getModel(),UNO_QUERY);
888 if ( xResultSetAccess.is() )
889 xResSetClone = xResultSetAccess->createResultSet();
890 }
891 return xResSetClone;
892 }
893 /*-- 27.11.2002 12:27:33---------------------------------------------------
894
895 -----------------------------------------------------------------------*/
SwMailMergeCreateFromDlg(Window * pParent)896 SwMailMergeCreateFromDlg::SwMailMergeCreateFromDlg(Window* pParent) :
897 ModalDialog(pParent, SW_RES(DLG_MERGE_CREATE)),
898 aCreateFromFL( this, SW_RES( FL_CREATEFROM )),
899 aThisDocRB( this, SW_RES( RB_THISDOC )),
900 aUseTemplateRB( this, SW_RES( RB_TEMPLATE )),
901 aOK( this, SW_RES( BT_OK )),
902 aCancel( this, SW_RES( BT_CANCEL )),
903 aHelp( this, SW_RES( BT_HELP ))
904 {
905 FreeResource();
906 }
907 /*-- 27.11.2002 12:27:33---------------------------------------------------
908
909 -----------------------------------------------------------------------*/
~SwMailMergeCreateFromDlg()910 SwMailMergeCreateFromDlg::~SwMailMergeCreateFromDlg()
911 {
912 }
913 /* -----------------04.02.2003 13:45-----------------
914 *
915 * --------------------------------------------------*/
SwMailMergeFieldConnectionsDlg(Window * pParent)916 SwMailMergeFieldConnectionsDlg::SwMailMergeFieldConnectionsDlg(Window* pParent) :
917 ModalDialog(pParent, SW_RES(DLG_MERGE_FIELD_CONNECTIONS)),
918 aConnectionsFL( this, SW_RES( FL_CONNECTIONS )),
919 aUseExistingRB( this, SW_RES( RB_USEEXISTING )),
920 aCreateNewRB( this, SW_RES( RB_CREATENEW )),
921 aInfoFI( this, SW_RES( FT_INFO )),
922 aOK( this, SW_RES( BT_OK )),
923 aCancel( this, SW_RES( BT_CANCEL )),
924 aHelp( this, SW_RES( BT_HELP ))
925 {
926 FreeResource();
927 }
928 /* -----------------04.02.2003 13:45-----------------
929 *
930 * --------------------------------------------------*/
~SwMailMergeFieldConnectionsDlg()931 SwMailMergeFieldConnectionsDlg::~SwMailMergeFieldConnectionsDlg()
932 {
933 }
934
935