Branch data Line data Source code
1 : : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : : /*************************************************************************
3 : : *
4 : : * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 : : *
6 : : * Copyright 2000, 2010 Oracle and/or its affiliates.
7 : : *
8 : : * OpenOffice.org - a multi-platform office productivity suite
9 : : *
10 : : * This file is part of OpenOffice.org.
11 : : *
12 : : * OpenOffice.org is free software: you can redistribute it and/or modify
13 : : * it under the terms of the GNU Lesser General Public License version 3
14 : : * only, as published by the Free Software Foundation.
15 : : *
16 : : * OpenOffice.org is distributed in the hope that it will be useful,
17 : : * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 : : * GNU Lesser General Public License version 3 for more details
20 : : * (a copy is included in the LICENSE file that accompanied this code).
21 : : *
22 : : * You should have received a copy of the GNU Lesser General Public License
23 : : * version 3 along with OpenOffice.org. If not, see
24 : : * <http://www.openoffice.org/license.html>
25 : : * for a copy of the LGPLv3 License.
26 : : *
27 : : ************************************************************************/
28 : :
29 : : #include <mmoutputpage.hxx>
30 : : #include <mailmergewizard.hxx>
31 : : #include <mmconfigitem.hxx>
32 : : #include <mailmergechildwindow.hxx>
33 : : #include <mailconfigpage.hxx>
34 : : #include <cmdid.h>
35 : : #include <swtypes.hxx>
36 : : #include <view.hxx>
37 : : #include <wrtsh.hxx>
38 : : #include <docsh.hxx>
39 : : #include <IDocumentDeviceAccess.hxx>
40 : : #include <hintids.hxx>
41 : : #include <editeng/scripttypeitem.hxx>
42 : : #include <editeng/langitem.hxx>
43 : : #include <svl/itemset.hxx>
44 : : #include <svl/stritem.hxx>
45 : : #include <svtools/ehdl.hxx>
46 : : #include <svtools/sfxecode.hxx>
47 : : #include <vcl/msgbox.hxx>
48 : : #include <sfx2/dinfdlg.hxx>
49 : : #include <sfx2/printer.hxx>
50 : : #include <sfx2/fcontnr.hxx>
51 : : #include <sfx2/viewfrm.hxx>
52 : : #include <sfx2/dispatch.hxx>
53 : : #include <sfx2/docfile.hxx>
54 : : #include <tools/urlobj.hxx>
55 : : #include <svl/urihelper.hxx>
56 : : #include <vcl/print.hxx>
57 : : #include <unotools/tempfile.hxx>
58 : : #include <osl/file.hxx>
59 : : #include <mmgreetingspage.hxx>
60 : : #include <com/sun/star/frame/XStorable.hpp>
61 : : #include <com/sun/star/sdbcx/XColumnsSupplier.hpp>
62 : : #include <com/sun/star/sdb/XColumn.hpp>
63 : : #include <dbmgr.hxx>
64 : : #include <swunohelper.hxx>
65 : : #include <osl/mutex.hxx>
66 : : #include <shellio.hxx>
67 : : #include <svtools/htmlcfg.hxx>
68 : : #include <sfx2/event.hxx>
69 : : #include <swevent.hxx>
70 : : #include <mmoutputpage.hrc>
71 : : #include <dbui.hxx>
72 : : #include <dbui.hrc>
73 : : #include <helpid.h>
74 : : #include <sfx2/app.hxx>
75 : : #include <statstr.hrc>
76 : : #include <unomid.h>
77 : : #include <comphelper/string.hxx>
78 : :
79 : : using namespace svt;
80 : : using namespace ::com::sun::star;
81 : : using namespace ::com::sun::star::uno;
82 : :
83 : 0 : String lcl_GetExtensionForDocType(sal_uLong nDocType)
84 : : {
85 : 0 : rtl::OUString sExtension;
86 : 0 : switch( nDocType )
87 : : {
88 : 0 : case MM_DOCTYPE_OOO : sExtension = rtl::OUString( "odt" ); break;
89 : 0 : case MM_DOCTYPE_PDF : sExtension = rtl::OUString( "pdf" ); break;
90 : 0 : case MM_DOCTYPE_WORD: sExtension = rtl::OUString( "doc" ); break;
91 : 0 : case MM_DOCTYPE_HTML: sExtension = rtl::OUString( "html" ); break;
92 : 0 : case MM_DOCTYPE_TEXT: sExtension = rtl::OUString( "txt" ); break;
93 : : }
94 : 0 : return sExtension;
95 : : }
96 : :
97 : 0 : ::rtl::OUString lcl_GetColumnValueOf(const ::rtl::OUString& rColumn, Reference < container::XNameAccess>& rxColAccess )
98 : : {
99 : 0 : ::rtl::OUString sRet;
100 : : try
101 : : {
102 : 0 : if (rxColAccess->hasByName(rColumn))
103 : : {
104 : 0 : Any aCol = rxColAccess->getByName(rColumn);
105 : 0 : Reference< sdb::XColumn > xColumn;
106 : 0 : aCol >>= xColumn;
107 : 0 : if(xColumn.is())
108 : 0 : sRet = xColumn->getString();
109 : : }
110 : : }
111 : 0 : catch (const uno::Exception&)
112 : : {
113 : : }
114 : 0 : return sRet;
115 : : }
116 : :
117 : : class SwSaveWarningBox_Impl : public ModalDialog
118 : : {
119 : : FixedImage aWarningImageIM;
120 : : FixedInfo aWarningFI;
121 : :
122 : : FixedText aFileNameFT;
123 : : Edit aFileNameED;
124 : :
125 : : FixedLine aSeparatorFL;
126 : : OKButton aOKPB;
127 : : CancelButton aCancelPB;
128 : :
129 : : DECL_LINK( ModifyHdl, Edit*);
130 : : public:
131 : : SwSaveWarningBox_Impl(Window* pParent, const String& rFileName);
132 : : ~SwSaveWarningBox_Impl();
133 : :
134 : 0 : String GetFileName() const {return aFileNameED.GetText();}
135 : : };
136 : :
137 : : class SwSendQueryBox_Impl : public ModalDialog
138 : : {
139 : : FixedImage aQueryImageIM;
140 : : FixedInfo aQueryFI;
141 : :
142 : : Edit aTextED;
143 : :
144 : : FixedLine aSeparatorFL;
145 : : OKButton aOKPB;
146 : : CancelButton aCancelPB;
147 : :
148 : : bool bIsEmptyAllowed;
149 : : DECL_LINK( ModifyHdl, Edit*);
150 : : public:
151 : : SwSendQueryBox_Impl(Window* pParent, const String& rQueryText);
152 : : ~SwSendQueryBox_Impl();
153 : :
154 : 0 : void SetValue(const String& rSet)
155 : : {
156 : 0 : aTextED.SetText(rSet);
157 : 0 : ModifyHdl( &aTextED );
158 : 0 : }
159 : 0 : String GetValue() const {return aTextED.GetText();}
160 : :
161 : 0 : void SetIsEmptyTextAllowed(bool bSet)
162 : : {
163 : 0 : bIsEmptyAllowed = bSet;
164 : 0 : ModifyHdl( &aTextED );
165 : 0 : }
166 : : };
167 : :
168 : 0 : SwSaveWarningBox_Impl::SwSaveWarningBox_Impl(Window* pParent, const String& rFileName) :
169 : : ModalDialog(pParent, SW_RES( DLG_MM_SAVEWARNING )),
170 : : aWarningImageIM(this, SW_RES( IM_WARNING )),
171 : : aWarningFI(this, SW_RES( FI_WARNING )),
172 : : aFileNameFT(this, SW_RES( FT_FILENAME )),
173 : : aFileNameED(this, SW_RES( ED_FILENAME )),
174 : : aSeparatorFL(this, SW_RES( FL_SEPARATOR )),
175 : : aOKPB(this, SW_RES( PB_OK )),
176 : 0 : aCancelPB(this, SW_RES( PB_CANCEL ))
177 : : {
178 : 0 : FreeResource();
179 : 0 : aWarningImageIM.SetImage(WarningBox::GetStandardImage());
180 : 0 : aFileNameED.SetText(rFileName);
181 : 0 : aFileNameED.SetModifyHdl(LINK(this, SwSaveWarningBox_Impl, ModifyHdl));
182 : 0 : ModifyHdl( &aFileNameED );
183 : 0 : }
184 : :
185 : 0 : SwSaveWarningBox_Impl::~SwSaveWarningBox_Impl()
186 : : {
187 : 0 : }
188 : :
189 : 0 : IMPL_LINK( SwSaveWarningBox_Impl, ModifyHdl, Edit*, pEdit)
190 : : {
191 : 0 : aOKPB.Enable(pEdit->GetText().Len() > 0);
192 : 0 : return 0;
193 : : }
194 : :
195 : 0 : SwSendQueryBox_Impl::SwSendQueryBox_Impl(Window* pParent, const String& rText) :
196 : : ModalDialog(pParent, SW_RES( DLG_MM_QUERY )),
197 : : aQueryImageIM( this, SW_RES( IM_QUERY )),
198 : : aQueryFI( this, SW_RES( FI_QUERY )),
199 : : aTextED( this, SW_RES( ED_TEXT )),
200 : : aSeparatorFL(this, SW_RES( FL_SEPARATOR )),
201 : : aOKPB(this, SW_RES( PB_OK )),
202 : : aCancelPB(this, SW_RES( PB_CANCEL )),
203 : 0 : bIsEmptyAllowed(true)
204 : : {
205 : 0 : FreeResource();
206 : 0 : aQueryFI.SetText(rText);
207 : 0 : aQueryImageIM.SetImage(QueryBox::GetStandardImage());
208 : 0 : aTextED.SetModifyHdl(LINK(this, SwSendQueryBox_Impl, ModifyHdl));
209 : 0 : ModifyHdl( &aTextED );
210 : 0 : }
211 : :
212 : 0 : SwSendQueryBox_Impl::~SwSendQueryBox_Impl()
213 : : {
214 : 0 : }
215 : :
216 : 0 : IMPL_LINK( SwSendQueryBox_Impl, ModifyHdl, Edit*, pEdit)
217 : : {
218 : 0 : aOKPB.Enable(bIsEmptyAllowed || (pEdit->GetText().Len() > 0));
219 : 0 : return 0;
220 : : }
221 : :
222 : : class SwCopyToDialog : public SfxModalDialog
223 : : {
224 : : FixedInfo m_aDescriptionFI;
225 : : FixedText m_aCCFT;
226 : : Edit m_aCCED;
227 : : FixedText m_aBCCFT;
228 : : Edit m_aBCCED;
229 : :
230 : : FixedInfo m_aNoteFI;
231 : : FixedLine m_aSeparatorFL;
232 : :
233 : : OKButton m_aOK;
234 : : CancelButton m_aCancel;
235 : : HelpButton m_aHelp;
236 : :
237 : : public:
238 : : SwCopyToDialog(Window* pParent);
239 : : ~SwCopyToDialog();
240 : :
241 : 0 : String GetCC() {return m_aCCED.GetText();}
242 : 0 : void SetCC(const String& rSet) {m_aCCED.SetText(rSet);}
243 : :
244 : 0 : String GetBCC() {return m_aBCCED.GetText();}
245 : 0 : void SetBCC(const String& rSet) {m_aBCCED.SetText(rSet);}
246 : : };
247 : :
248 : 0 : SwCopyToDialog::SwCopyToDialog(Window* pParent) :
249 : : SfxModalDialog(pParent, SW_RES(DLG_MM_COPYTO)),
250 : : #ifdef MSC
251 : : #pragma warning (disable : 4355)
252 : : #endif
253 : : m_aDescriptionFI( this, SW_RES( FI_DESCRIPTION )),
254 : : m_aCCFT( this, SW_RES( FT_CC )),
255 : : m_aCCED( this, SW_RES( ED_CC )),
256 : : m_aBCCFT( this, SW_RES( FT_BCC )),
257 : : m_aBCCED( this, SW_RES( ED_BCC )),
258 : : m_aNoteFI( this, SW_RES( FI_NOTE )),
259 : : m_aSeparatorFL( this, SW_RES( FL_SEPARATOR )),
260 : : m_aOK( this, SW_RES( PB_OK )),
261 : : m_aCancel( this, SW_RES( PB_CANCEL )),
262 : 0 : m_aHelp( this, SW_RES( PB_HELP ))
263 : : #ifdef MSC
264 : : #pragma warning (default : 4355)
265 : : #endif
266 : : {
267 : 0 : FreeResource();
268 : 0 : }
269 : :
270 : 0 : SwCopyToDialog::~SwCopyToDialog()
271 : : {
272 : 0 : }
273 : :
274 : 0 : SwMailMergeOutputPage::SwMailMergeOutputPage( SwMailMergeWizard* _pParent) :
275 : : svt::OWizardPage( _pParent, SW_RES(DLG_MM_OUTPUT_PAGE)),
276 : : #ifdef MSC
277 : : #pragma warning (disable : 4355)
278 : : #endif
279 : : m_aHeaderFI(this, SW_RES( FI_HEADER ) ),
280 : : m_aOptionsFI(this, SW_RES( FI_OPTIONS ) ),
281 : : m_aSaveStartDocRB(this, SW_RES( RB_SAVESTARTDOC ) ),
282 : : m_aSaveMergedDocRB(this, SW_RES( RB_SAVEMERGEDDOC ) ),
283 : : m_aPrintRB(this, SW_RES( RB_PRINT ) ),
284 : : m_aSendMailRB(this, SW_RES( RB_SENDMAIL ) ),
285 : :
286 : : m_aSeparatorFL(this, SW_RES( FL_SEPARATOR ) ),
287 : :
288 : : m_aSaveStartDocPB(this, SW_RES( PB_SAVESTARTDOC ) ),
289 : :
290 : : m_aSaveAsOneRB(this, SW_RES( RB_SAVEASONE ) ),
291 : : m_aSaveIndividualRB(this, SW_RES( RB_SAVEINDIVIDUAL ) ),
292 : : m_aPrintAllRB(this, SW_RES( RB_PRINTALL ) ),
293 : : m_aSendAllRB( this, SW_RES( RB_SENDALL ) ),
294 : :
295 : : m_aFromRB(this, SW_RES( RB_FROM ) ),
296 : : m_aFromNF(this, SW_RES( NF_FROM ) ),
297 : : m_aToFT(this, SW_RES( FT_TO ) ),
298 : : m_aToNF(this, SW_RES( NF_TO ) ),
299 : : m_aSaveNowPB(this, SW_RES( PB_SAVENOW ) ),
300 : :
301 : : m_aPrinterFT(this, SW_RES( FT_PRINT ) ),
302 : : m_aPrinterLB(this, SW_RES( LB_PRINT ) ),
303 : : m_aPrinterSettingsPB(this, SW_RES( PB_PRINTERSETTINGS ) ),
304 : : m_aPrintNowPB(this, SW_RES( PB_PRINTNOW ) ),
305 : :
306 : : m_aMailToFT( this, SW_RES( FT_MAILTO ) ),
307 : : m_aMailToLB( this, SW_RES( LB_MAILTO ) ),
308 : : m_aCopyToPB( this, SW_RES( PB_COPYTO ) ),
309 : : m_aSubjectFT( this, SW_RES( FT_SUBJECT ) ),
310 : : m_aSubjectED( this, SW_RES( ED_SUBJECT ) ),
311 : : m_aSendAsFT( this, SW_RES( FT_SENDAS ) ),
312 : : m_aSendAsLB( this, SW_RES( LB_SENDAS ) ),
313 : : m_aAttachmentFT( this, SW_RES( FT_ATTACHMENT ) ),
314 : : m_aAttachmentED( this, SW_RES( ED_ATTACHMENT ) ),
315 : : m_aSendAsPB( this, SW_RES( PB_SENDAS ) ),
316 : : m_aSendDocumentsPB( this, SW_RES( PB_SENDDOCUMENTS ) ),
317 : :
318 : : m_sSaveStartST(SW_RES( ST_SAVESTART ) ),
319 : : m_sSaveMergedST(SW_RES( ST_SAVEMERGED ) ),
320 : : m_sPrintST(SW_RES( ST_PRINT ) ),
321 : : m_sSendMailST(SW_RES( ST_SENDMAIL ) ),
322 : :
323 : : m_sDefaultAttachmentST(SW_RES( ST_DEFAULTATTACHMENT )),
324 : : m_sNoSubjectQueryST(SW_RES( ST_SUBJECTQUERY )),
325 : : m_sNoSubjectST(SW_RES( ST_NOSUBJECT )),
326 : : m_sNoAttachmentNameST(SW_RES( ST_NOATTACHMENTNAME )),
327 : : m_sConfigureMail(SW_RES( ST_CONFIGUREMAIL)),
328 : : #ifdef MSC
329 : : #pragma warning (default : 4355)
330 : : #endif
331 : : m_bCancelSaving( false ),
332 : : m_pWizard(_pParent),
333 : : m_pTempPrinter( 0 ),
334 : 0 : m_pDocumentPrinterCopy(0)
335 : : {
336 : 0 : FreeResource();
337 : :
338 : 0 : SwMailMergeConfigItem& rConfigItem = m_pWizard->GetConfigItem();
339 : : // #i51949# hide e-Mail option if e-Mail is not supported
340 : 0 : if(!rConfigItem.IsMailAvailable())
341 : 0 : m_aSendMailRB.Hide();
342 : :
343 : 0 : Link aLink = LINK(this, SwMailMergeOutputPage, OutputTypeHdl_Impl);
344 : 0 : m_aSaveStartDocRB.SetClickHdl(aLink);
345 : 0 : m_aSaveMergedDocRB.SetClickHdl(aLink);
346 : 0 : m_aPrintRB.SetClickHdl(aLink);
347 : 0 : m_aSendMailRB.SetClickHdl(aLink);
348 : 0 : m_aSaveStartDocRB.Check();
349 : 0 : m_aPrintAllRB.Check();
350 : 0 : m_aSaveAsOneRB.Check();
351 : 0 : m_aSendAllRB.Check();
352 : :
353 : 0 : m_aSaveStartDocPB.SetClickHdl(LINK(this, SwMailMergeOutputPage, SaveStartHdl_Impl));
354 : 0 : m_aSaveNowPB.SetClickHdl(LINK(this, SwMailMergeOutputPage, SaveOutputHdl_Impl));
355 : 0 : m_aPrinterLB.SetSelectHdl(LINK(this, SwMailMergeOutputPage, PrinterChangeHdl_Impl));
356 : 0 : m_aPrintNowPB.SetClickHdl(LINK(this, SwMailMergeOutputPage, PrintHdl_Impl));
357 : 0 : m_aPrinterSettingsPB.SetClickHdl(LINK(this, SwMailMergeOutputPage, PrinterSetupHdl_Impl));
358 : :
359 : 0 : m_aSendAsPB.SetClickHdl(LINK(this, SwMailMergeOutputPage, SendAsHdl_Impl)),
360 : 0 : m_aSendDocumentsPB.SetClickHdl(LINK(this, SwMailMergeOutputPage, SendDocumentsHdl_Impl)),
361 : 0 : m_aSendAsLB.SetSelectHdl(LINK(this, SwMailMergeOutputPage, SendTypeHdl_Impl));
362 : :
363 : 0 : m_nFromToRBPos = m_aFromRB.GetPosPixel().Y();
364 : 0 : m_nFromToFTPos = m_aToFT.GetPosPixel().Y();
365 : 0 : m_nFromToNFPos = m_aFromNF.GetPosPixel().Y();
366 : :
367 : 0 : m_nRBOffset = m_nFromToRBPos - m_aSaveIndividualRB.GetPosPixel().Y();
368 : :
369 : 0 : OutputTypeHdl_Impl(&m_aSaveStartDocRB);
370 : :
371 : 0 : m_aCopyToPB.SetClickHdl(LINK(this, SwMailMergeOutputPage, CopyToHdl_Impl));
372 : :
373 : 0 : m_aSaveAsOneRB.SetClickHdl(LINK(this, SwMailMergeOutputPage, DocumentSelectionHdl_Impl));
374 : 0 : m_aSaveIndividualRB.SetClickHdl(LINK(this, SwMailMergeOutputPage, DocumentSelectionHdl_Impl));
375 : 0 : m_aPrintAllRB.SetClickHdl(LINK(this, SwMailMergeOutputPage, DocumentSelectionHdl_Impl));
376 : 0 : m_aSendAllRB.SetClickHdl(LINK(this, SwMailMergeOutputPage, DocumentSelectionHdl_Impl));
377 : :
378 : 0 : m_aFromRB.SetClickHdl(LINK(this, SwMailMergeOutputPage, DocumentSelectionHdl_Impl));
379 : : //#i63267# printing might be disabled
380 : 0 : m_aPrintRB.Enable(!Application::GetSettings().GetMiscSettings().GetDisablePrinting());
381 : 0 : }
382 : :
383 : 0 : SwMailMergeOutputPage::~SwMailMergeOutputPage()
384 : : {
385 : 0 : delete m_pTempPrinter;
386 : 0 : delete m_pDocumentPrinterCopy;
387 : 0 : }
388 : :
389 : 0 : void SwMailMergeOutputPage::ActivatePage()
390 : : {
391 : : //fill printer ListBox
392 : 0 : const std::vector<rtl::OUString>& rPrinters = Printer::GetPrinterQueues();
393 : 0 : unsigned int nCount = rPrinters.size();
394 : 0 : if ( nCount )
395 : : {
396 : 0 : for( unsigned int i = 0; i < nCount; i++ )
397 : : {
398 : 0 : m_aPrinterLB.InsertEntry( rPrinters[i] );
399 : : }
400 : :
401 : : }
402 : 0 : SwMailMergeConfigItem& rConfigItem = m_pWizard->GetConfigItem();
403 : :
404 : 0 : SwView* pTargetView = rConfigItem.GetTargetView();
405 : : OSL_ENSURE(pTargetView, "no target view exists");
406 : 0 : if(pTargetView)
407 : : {
408 : 0 : SfxPrinter* pPrinter = pTargetView->GetWrtShell().getIDocumentDeviceAccess()->getPrinter( true );
409 : 0 : m_aPrinterLB.SelectEntry( pPrinter->GetName() );
410 : 0 : m_aToNF.SetValue( rConfigItem.GetMergedDocumentCount() );
411 : 0 : m_aToNF.SetMax( rConfigItem.GetMergedDocumentCount() );
412 : 0 : m_pDocumentPrinterCopy = pTargetView->GetWrtShell().getIDocumentDeviceAccess()->getPrinter( true )->Clone();
413 : : }
414 : 0 : m_aPrinterLB.SelectEntry( rConfigItem.GetSelectedPrinter() );
415 : :
416 : 0 : SwView* pSourceView = rConfigItem.GetSourceView();
417 : : OSL_ENSURE(pSourceView, "no source view exists");
418 : 0 : if(pSourceView)
419 : : {
420 : 0 : SwDocShell* pDocShell = pSourceView->GetDocShell();
421 : 0 : if ( pDocShell->HasName() )
422 : : {
423 : 0 : INetURLObject aTmp( pDocShell->GetMedium()->GetName() );
424 : : m_aAttachmentED.SetText(aTmp.getName(
425 : 0 : INetURLObject::LAST_SEGMENT, true, INetURLObject::DECODE_WITH_CHARSET ));
426 : : }
427 : : }
428 : 0 : }
429 : :
430 : 0 : bool SwMailMergeOutputPage::canAdvance() const
431 : : {
432 : 0 : return false;
433 : : }
434 : :
435 : 0 : IMPL_LINK(SwMailMergeOutputPage, OutputTypeHdl_Impl, RadioButton*, pButton)
436 : : {
437 : : Control* aControls[] =
438 : : {
439 : : &m_aSaveStartDocPB,
440 : : &m_aSaveAsOneRB, &m_aSaveIndividualRB,
441 : : &m_aFromRB, &m_aFromNF, &m_aToFT, &m_aToNF,
442 : : &m_aSaveNowPB,
443 : : &m_aPrinterFT, &m_aPrinterLB, &m_aPrinterSettingsPB, &m_aPrintAllRB,
444 : : &m_aPrintNowPB,
445 : : &m_aMailToFT, &m_aMailToLB, &m_aCopyToPB,
446 : : &m_aSubjectFT, &m_aSubjectED,
447 : : &m_aSendAsFT, &m_aSendAsLB, &m_aSendAsPB,
448 : : &m_aAttachmentFT, &m_aAttachmentED,
449 : : &m_aSendAllRB, &m_aSendDocumentsPB,
450 : : 0
451 : 0 : };
452 : 0 : SetUpdateMode(sal_True);
453 : 0 : Control** pControl = aControls;
454 : 0 : do
455 : : {
456 : 0 : (*pControl)->Show(sal_False);
457 : :
458 : : } while(*(++pControl));
459 : :
460 : 0 : if(&m_aSaveStartDocRB == pButton)
461 : : {
462 : 0 : m_aSaveStartDocPB.Show();
463 : 0 : m_aSeparatorFL.SetText(m_sSaveStartST);
464 : :
465 : : }
466 : 0 : else if(&m_aSaveMergedDocRB == pButton)
467 : : {
468 : : Control* aSaveMergedControls[] =
469 : : {
470 : : &m_aSaveAsOneRB, &m_aSaveIndividualRB,
471 : : &m_aFromRB, &m_aFromNF, &m_aToFT, &m_aToNF,
472 : : &m_aSaveNowPB,
473 : : 0
474 : 0 : };
475 : 0 : Control** pSaveMergeControl = aSaveMergedControls;
476 : 0 : do
477 : : {
478 : 0 : (*pSaveMergeControl)->Show(sal_True);
479 : :
480 : : } while(*(++pSaveMergeControl));
481 : 0 : if(!m_aFromRB.IsChecked() && !m_aSaveAsOneRB.IsChecked())
482 : : {
483 : 0 : m_aSaveIndividualRB.Check();
484 : : }
485 : 0 : m_aSeparatorFL.SetText(m_sSaveMergedST);
486 : : //reposition the from/to line
487 : 0 : if(m_aFromRB.GetPosPixel().Y() != m_nFromToRBPos)
488 : : {
489 : 0 : Point aPos(m_aFromRB.GetPosPixel()); aPos.Y() = m_nFromToRBPos; m_aFromRB.SetPosPixel(aPos);
490 : 0 : aPos = m_aToFT.GetPosPixel(); aPos.Y() = m_nFromToFTPos; m_aToFT.SetPosPixel(aPos);
491 : 0 : aPos = m_aFromNF.GetPosPixel(); aPos.Y() = m_nFromToNFPos; m_aFromNF.SetPosPixel(aPos);
492 : 0 : aPos = m_aToNF.GetPosPixel(); aPos.Y() = m_nFromToNFPos; m_aToNF.SetPosPixel(aPos);
493 : : }
494 : : }
495 : 0 : else if(&m_aPrintRB == pButton)
496 : : {
497 : : Control* aPrintControls[] =
498 : : {
499 : : &m_aFromRB, &m_aFromNF, &m_aToFT, &m_aToNF,
500 : : &m_aPrinterFT, &m_aPrinterLB, &m_aPrinterSettingsPB, &m_aPrintAllRB,
501 : : &m_aPrintNowPB,
502 : : 0
503 : 0 : };
504 : 0 : Control** pPrinterControl = aPrintControls;
505 : 0 : do
506 : : {
507 : 0 : (*pPrinterControl)->Show(sal_True);
508 : :
509 : : } while(*(++pPrinterControl));
510 : 0 : if(!m_aFromRB.IsChecked())
511 : 0 : m_aPrintAllRB.Check();
512 : :
513 : 0 : m_aSeparatorFL.SetText(m_sPrintST);
514 : : //reposition the from/to line
515 : 0 : long nRB_FT_Offset = m_nFromToRBPos - m_nFromToFTPos;
516 : 0 : long nNewRBXPos = m_aPrintAllRB.GetPosPixel().Y() + m_nRBOffset;
517 : :
518 : 0 : Point aPos(m_aFromRB.GetPosPixel());aPos.Y() = nNewRBXPos; m_aFromRB.SetPosPixel(aPos);
519 : 0 : aPos = m_aToFT.GetPosPixel(); aPos.Y() = nNewRBXPos + nRB_FT_Offset; m_aToFT.SetPosPixel(aPos);
520 : 0 : aPos = m_aFromNF.GetPosPixel(); aPos.Y() = nNewRBXPos + nRB_FT_Offset; m_aFromNF.SetPosPixel(aPos);
521 : 0 : aPos = m_aToNF.GetPosPixel(); aPos.Y() = nNewRBXPos + nRB_FT_Offset; m_aToNF.SetPosPixel(aPos);
522 : : }
523 : : else
524 : : {
525 : : Control* aMailControls[] =
526 : : {
527 : : &m_aFromRB, &m_aFromNF, &m_aToFT, &m_aToNF,
528 : : &m_aMailToFT, &m_aMailToLB, &m_aCopyToPB,
529 : : &m_aSubjectFT, &m_aSubjectED,
530 : : &m_aSendAsFT, &m_aSendAsLB, &m_aSendAsPB,
531 : : &m_aAttachmentFT, &m_aAttachmentED,
532 : : &m_aSendAllRB, &m_aSendDocumentsPB, 0
533 : 0 : };
534 : 0 : Control** pMailControl = aMailControls;
535 : 0 : do
536 : : {
537 : 0 : (*pMailControl)->Show(sal_True);
538 : :
539 : : } while(*(++pMailControl));
540 : :
541 : 0 : if(!m_aFromRB.IsChecked())
542 : 0 : m_aSendAllRB.Check();
543 : 0 : if(!m_aAttachmentED.GetText().Len())
544 : : {
545 : 0 : String sAttach( m_sDefaultAttachmentST );
546 : 0 : sAttach += '.';
547 : : sAttach += lcl_GetExtensionForDocType(
548 : 0 : (sal_uLong)m_aSendAsLB.GetEntryData(m_aSendAsLB.GetSelectEntryPos()));
549 : 0 : m_aAttachmentED.SetText( sAttach );
550 : :
551 : : }
552 : 0 : m_aSeparatorFL.SetText(m_sSendMailST);
553 : : //fill mail address ListBox
554 : 0 : if(!m_aMailToLB.GetEntryCount())
555 : : {
556 : 0 : SwMailMergeConfigItem& rConfigItem = m_pWizard->GetConfigItem();
557 : : //select first column
558 : 0 : uno::Reference< sdbcx::XColumnsSupplier > xColsSupp( rConfigItem.GetResultSet(), uno::UNO_QUERY);
559 : : //get the name of the actual columns
560 : 0 : uno::Reference < container::XNameAccess> xColAccess = xColsSupp.is() ? xColsSupp->getColumns() : 0;
561 : 0 : uno::Sequence< ::rtl::OUString > aFields;
562 : 0 : if(xColAccess.is())
563 : 0 : aFields = xColAccess->getElementNames();
564 : 0 : const ::rtl::OUString* pFields = aFields.getConstArray();
565 : 0 : for(sal_Int32 nField = 0; nField < aFields.getLength(); ++nField)
566 : 0 : m_aMailToLB.InsertEntry(pFields[nField]);
567 : :
568 : 0 : m_aMailToLB.SelectEntryPos(0);
569 : : // then select the right one - may not be available
570 : 0 : const ResStringArray& rHeaders = rConfigItem.GetDefaultAddressHeaders();
571 : 0 : String sEMailColumn = rHeaders.GetString( MM_PART_E_MAIL );
572 : : Sequence< ::rtl::OUString> aAssignment =
573 : 0 : rConfigItem.GetColumnAssignment( rConfigItem.GetCurrentDBData() );
574 : 0 : if(aAssignment.getLength() > MM_PART_E_MAIL && !aAssignment[MM_PART_E_MAIL].isEmpty())
575 : 0 : sEMailColumn = aAssignment[MM_PART_E_MAIL];
576 : 0 : m_aMailToLB.SelectEntry(sEMailColumn);
577 : : // HTML format pre-selected
578 : 0 : m_aSendAsLB.SelectEntryPos(3);
579 : 0 : SendTypeHdl_Impl(&m_aSendAsLB);
580 : : }
581 : 0 : if(m_aSendAllRB.GetPosPixel().Y() + m_nRBOffset != m_aFromRB.GetPosPixel().Y())
582 : : {
583 : 0 : long nRB_FT_Offset = m_nFromToRBPos - m_nFromToFTPos;
584 : 0 : long nNewRBXPos = m_aSendAllRB.GetPosPixel().Y() + m_nRBOffset;
585 : :
586 : 0 : Point aPos(m_aFromRB.GetPosPixel());aPos.Y() = nNewRBXPos; m_aFromRB.SetPosPixel(aPos);
587 : 0 : aPos = m_aToFT.GetPosPixel(); aPos.Y() = nNewRBXPos + nRB_FT_Offset; m_aToFT.SetPosPixel(aPos);
588 : 0 : aPos = m_aFromNF.GetPosPixel(); aPos.Y() = nNewRBXPos + nRB_FT_Offset; m_aFromNF.SetPosPixel(aPos);
589 : 0 : aPos = m_aToNF.GetPosPixel(); aPos.Y() = nNewRBXPos + nRB_FT_Offset; m_aToNF.SetPosPixel(aPos);
590 : : }
591 : : }
592 : 0 : m_aFromRB.GetClickHdl().Call(m_aFromRB.IsChecked() ? &m_aFromRB : 0);
593 : :
594 : 0 : SetUpdateMode(sal_False);
595 : 0 : return 0;
596 : : }
597 : :
598 : 0 : IMPL_LINK(SwMailMergeOutputPage, DocumentSelectionHdl_Impl, RadioButton*, pButton)
599 : : {
600 : 0 : sal_Bool bEnableFromTo = pButton == &m_aFromRB;
601 : 0 : m_aFromNF.Enable(bEnableFromTo);
602 : 0 : m_aToFT.Enable(bEnableFromTo);
603 : 0 : m_aToNF.Enable(bEnableFromTo);
604 : 0 : return 0;
605 : : }
606 : :
607 : 0 : IMPL_LINK(SwMailMergeOutputPage, CopyToHdl_Impl, PushButton*, pButton)
608 : : {
609 : 0 : SwCopyToDialog* pDlg = new SwCopyToDialog(pButton);
610 : 0 : pDlg->SetCC(m_sCC );
611 : 0 : pDlg->SetBCC(m_sBCC);
612 : 0 : if(RET_OK == pDlg->Execute())
613 : : {
614 : 0 : m_sCC = pDlg->GetCC() ;
615 : 0 : m_sBCC = pDlg->GetBCC();
616 : : }
617 : 0 : delete pDlg;
618 : 0 : return 0;
619 : : }
620 : :
621 : 0 : IMPL_LINK(SwMailMergeOutputPage, SaveStartHdl_Impl, PushButton*, pButton)
622 : : {
623 : 0 : SwMailMergeConfigItem& rConfigItem = m_pWizard->GetConfigItem();
624 : 0 : SwView* pSourceView = rConfigItem.GetSourceView();
625 : : OSL_ENSURE( pSourceView, "source view missing");
626 : 0 : if(pSourceView)
627 : : {
628 : 0 : SfxViewFrame* pSourceViewFrm = pSourceView->GetViewFrame();
629 : : uno::Reference< frame::XFrame > xFrame =
630 : 0 : pSourceViewFrm->GetFrame().GetFrameInterface();
631 : 0 : xFrame->getContainerWindow()->setVisible(sal_True);
632 : 0 : pSourceViewFrm->GetDispatcher()->Execute(SID_SAVEDOC, SFX_CALLMODE_SYNCHRON);
633 : 0 : xFrame->getContainerWindow()->setVisible(sal_False);
634 : 0 : SwDocShell* pDocShell = pSourceView->GetDocShell();
635 : : //if the document has been saved it's URL has to be stored for
636 : : // later use and it can be closed now
637 : 0 : if(pDocShell->HasName() && !pDocShell->IsModified())
638 : : {
639 : 0 : INetURLObject aURL = pDocShell->GetMedium()->GetURLObject();
640 : : //update the attachment name
641 : 0 : if(!m_aAttachmentED.GetText().Len())
642 : : {
643 : 0 : if ( pDocShell->HasName() )
644 : : {
645 : : m_aAttachmentED.SetText(aURL.getName(
646 : 0 : INetURLObject::LAST_SEGMENT, true, INetURLObject::DECODE_WITH_CHARSET ));
647 : : }
648 : : }
649 : :
650 : : rConfigItem.AddSavedDocument(
651 : 0 : aURL.GetMainURL(INetURLObject::DECODE_TO_IURI));
652 : 0 : pButton->Enable(sal_False);
653 : 0 : m_pWizard->enableButtons(WZB_FINISH, sal_True);
654 : 0 : pButton->Enable(sal_False);
655 : :
656 : 0 : }
657 : : }
658 : 0 : return 0;
659 : : }
660 : :
661 : 0 : IMPL_LINK_NOARG(SwMailMergeOutputPage, SaveCancelHdl_Impl)
662 : : {
663 : 0 : m_bCancelSaving = true;
664 : 0 : return 0;
665 : : }
666 : :
667 : 0 : IMPL_LINK(SwMailMergeOutputPage, SaveOutputHdl_Impl, PushButton*, pButton)
668 : : {
669 : 0 : SwMailMergeConfigItem& rConfigItem = m_pWizard->GetConfigItem();
670 : 0 : SwView* pTargetView = rConfigItem.GetTargetView();
671 : : OSL_ENSURE(pTargetView, "no target view exists");
672 : 0 : if(!pTargetView)
673 : 0 : return 0;
674 : :
675 : 0 : if(m_aSaveAsOneRB.IsChecked())
676 : : {
677 : 0 : String sFilter;
678 : 0 : String sPath = SwMailMergeHelper::CallSaveAsDialog(sFilter);
679 : 0 : if(!sPath.Len())
680 : 0 : return 0;
681 : 0 : uno::Sequence< beans::PropertyValue > aValues(1);
682 : 0 : beans::PropertyValue* pValues = aValues.getArray();
683 : 0 : pValues[0].Name = C2U("FilterName");
684 : 0 : pValues[0].Value <<= ::rtl::OUString(sFilter);
685 : :
686 : 0 : uno::Reference< frame::XStorable > xStore( pTargetView->GetDocShell()->GetModel(), uno::UNO_QUERY);
687 : 0 : sal_uInt32 nErrorCode = ERRCODE_NONE;
688 : : try
689 : : {
690 : 0 : xStore->storeToURL( sPath, aValues );
691 : : }
692 : 0 : catch (const task::ErrorCodeIOException& rErrorEx)
693 : : {
694 : 0 : nErrorCode = (sal_uInt32)rErrorEx.ErrCode;
695 : : }
696 : 0 : catch (const Exception&)
697 : : {
698 : 0 : nErrorCode = ERRCODE_IO_GENERAL;
699 : : }
700 : 0 : if( nErrorCode != ERRCODE_NONE )
701 : : {
702 : 0 : SfxErrorContext aEc(ERRCTX_SFX_SAVEASDOC, pTargetView->GetDocShell()->GetTitle());
703 : 0 : ErrorHandler::HandleError( nErrorCode );
704 : 0 : }
705 : : }
706 : : else
707 : : {
708 : 0 : sal_uInt32 nBegin = 0;
709 : 0 : sal_uInt32 nEnd = 0;
710 : 0 : if(m_aSaveIndividualRB.IsChecked())
711 : : {
712 : 0 : nBegin = 0;
713 : 0 : nEnd = rConfigItem.GetMergedDocumentCount();
714 : : }
715 : : else
716 : : {
717 : 0 : nBegin = static_cast< sal_Int32 >(m_aFromNF.GetValue() - 1);
718 : 0 : nEnd = static_cast< sal_Int32 >(m_aToNF.GetValue());
719 : 0 : if(nEnd > rConfigItem.GetMergedDocumentCount())
720 : 0 : nEnd = rConfigItem.GetMergedDocumentCount();
721 : : }
722 : 0 : String sFilter;
723 : 0 : String sPath = SwMailMergeHelper::CallSaveAsDialog(sFilter);
724 : 0 : if(!sPath.Len())
725 : 0 : return 0;
726 : : String sTargetTempURL = URIHelper::SmartRel2Abs(
727 : : INetURLObject(), utl::TempFile::CreateTempName(),
728 : 0 : URIHelper::GetMaybeFileHdl());
729 : : const SfxFilter *pSfxFlt = SwIoSystem::GetFilterOfFormat(
730 : : rtl::OUString( FILTER_XML ),
731 : 0 : SwDocShell::Factory().GetFilterContainer() );
732 : :
733 : 0 : uno::Sequence< beans::PropertyValue > aValues(1);
734 : 0 : beans::PropertyValue* pValues = aValues.getArray();
735 : 0 : pValues[0].Name = C2U("FilterName");
736 : 0 : pValues[0].Value <<= ::rtl::OUString(pSfxFlt->GetFilterName());
737 : :
738 : 0 : uno::Reference< frame::XStorable > xStore( pTargetView->GetDocShell()->GetModel(), uno::UNO_QUERY);
739 : 0 : sal_uInt32 nErrorCode = ERRCODE_NONE;
740 : : try
741 : : {
742 : 0 : xStore->storeToURL( sTargetTempURL, aValues );
743 : : }
744 : 0 : catch (const task::ErrorCodeIOException& rErrorEx)
745 : : {
746 : 0 : nErrorCode = (sal_uInt32)rErrorEx.ErrCode;
747 : : }
748 : 0 : catch (const Exception&)
749 : : {
750 : 0 : nErrorCode = ERRCODE_IO_GENERAL;
751 : : }
752 : 0 : if( nErrorCode != ERRCODE_NONE )
753 : : {
754 : 0 : SfxErrorContext aEc(ERRCTX_SFX_SAVEASDOC, pTargetView->GetDocShell()->GetTitle());
755 : 0 : ErrorHandler::HandleError( nErrorCode );
756 : : }
757 : :
758 : 0 : SwView* pSourceView = rConfigItem.GetSourceView();
759 : 0 : PrintMonitor aSaveMonitor(this, PrintMonitor::MONITOR_TYPE_SAVE);
760 : 0 : aSaveMonitor.aDocName.SetText(pSourceView->GetDocShell()->GetTitle(22));
761 : 0 : aSaveMonitor.aCancel.SetClickHdl(LINK(this, SwMailMergeOutputPage, SaveCancelHdl_Impl));
762 : 0 : aSaveMonitor.aPrinter.SetText( INetURLObject( sPath ).getFSysPath( INetURLObject::FSYS_DETECT ) );
763 : 0 : aSaveMonitor.ResizeControls();
764 : :
765 : 0 : m_bCancelSaving = false;
766 : 0 : aSaveMonitor.Show();
767 : 0 : m_pWizard->enableButtons(WZB_CANCEL, sal_False);
768 : :
769 : 0 : for(sal_uInt32 nDoc = nBegin; nDoc < nEnd && !m_bCancelSaving; ++nDoc)
770 : : {
771 : 0 : SwDocMergeInfo& rInfo = rConfigItem.GetDocumentMergeInfo(nDoc);
772 : 0 : INetURLObject aURL(sPath);
773 : 0 : String sFile = aURL.GetBase();
774 : 0 : String sExtension = aURL.getExtension();
775 : 0 : if(!sExtension.Len())
776 : : {
777 : 0 : sExtension = comphelper::string::getToken(pSfxFlt->GetWildcard().getGlob(), 1, '.');
778 : 0 : sPath += '.';
779 : 0 : sPath += sExtension;
780 : : }
781 : 0 : String sStat(SW_RES(STR_STATSTR_LETTER));
782 : 0 : sStat += ' ';
783 : 0 : sStat += String::CreateFromInt32( nDoc );
784 : 0 : aSaveMonitor.aPrintInfo.SetText(sStat);
785 : :
786 : : //now extract a document from the target document
787 : : // the shell will be closed at the end, but it is more safe to use SfxObjectShellLock here
788 : 0 : SfxObjectShellLock xTempDocShell( new SwDocShell( SFX_CREATE_MODE_STANDARD ) );
789 : 0 : xTempDocShell->DoInitNew( 0 );
790 : 0 : SfxViewFrame* pTempFrame = SfxViewFrame::LoadHiddenDocument( *xTempDocShell, 0 );
791 : 0 : SwView* pTempView = static_cast<SwView*>( pTempFrame->GetViewShell() );
792 : 0 : pTargetView->GetWrtShell().StartAction();
793 : 0 : SwgReaderOption aOpt;
794 : 0 : aOpt.SetTxtFmts( sal_True );
795 : 0 : aOpt.SetFrmFmts( sal_True );
796 : 0 : aOpt.SetPageDescs( sal_True );
797 : 0 : aOpt.SetNumRules( sal_True );
798 : 0 : aOpt.SetMerge( sal_False );
799 : : pTempView->GetDocShell()->LoadStylesFromFile(
800 : 0 : sTargetTempURL, aOpt, sal_True );
801 : :
802 : 0 : pTargetView->GetWrtShell().PastePages(pTempView->GetWrtShell(),
803 : 0 : (sal_uInt16)rInfo.nStartPageInTarget, (sal_uInt16)rInfo.nEndPageInTarget );
804 : 0 : pTargetView->GetWrtShell().EndAction();
805 : : //then save it
806 : 0 : String sOutPath = aURL.GetMainURL(INetURLObject::DECODE_TO_IURI);
807 : 0 : String sCounter = rtl::OUString('_');
808 : 0 : sCounter += String::CreateFromInt32(nDoc);
809 : 0 : sOutPath.Insert(sCounter, sOutPath.Len() - sExtension.Len() - 1);
810 : :
811 : 0 : while(true)
812 : : {
813 : : //time for other slots is needed
814 : 0 : for(sal_Int16 r = 0; r < 10; ++r)
815 : 0 : Application::Reschedule();
816 : 0 : bool bFailed = false;
817 : : try
818 : : {
819 : 0 : pValues[0].Value <<= ::rtl::OUString(sFilter);
820 : 0 : uno::Reference< frame::XStorable > xTempStore( xTempDocShell->GetModel(), uno::UNO_QUERY);
821 : 0 : xTempStore->storeToURL( sOutPath, aValues );
822 : : }
823 : 0 : catch (const uno::Exception&)
824 : : {
825 : 0 : bFailed = true;
826 : : }
827 : :
828 : 0 : if(bFailed)
829 : : {
830 : 0 : SwSaveWarningBox_Impl aWarning( pButton, sOutPath );
831 : 0 : if(RET_OK == aWarning.Execute())
832 : 0 : sOutPath = aWarning.GetFileName();
833 : : else
834 : : {
835 : 0 : xTempDocShell->DoClose();
836 : 0 : return 0;
837 : 0 : }
838 : : }
839 : : else
840 : : {
841 : 0 : xTempDocShell->DoClose();
842 : 0 : break;
843 : : }
844 : : }
845 : 0 : }
846 : 0 : ::osl::File::remove( sTargetTempURL );
847 : : }
848 : 0 : m_pWizard->enableButtons(WZB_CANCEL, sal_True);
849 : 0 : m_pWizard->enableButtons(WZB_FINISH, sal_True);
850 : 0 : return 0;
851 : : }
852 : :
853 : 0 : IMPL_LINK(SwMailMergeOutputPage, PrinterChangeHdl_Impl, ListBox*, pBox)
854 : : {
855 : 0 : if( m_pDocumentPrinterCopy && pBox->GetSelectEntryPos() != LISTBOX_ENTRY_NOTFOUND )
856 : : {
857 : 0 : const QueueInfo* pInfo = Printer::GetQueueInfo( pBox->GetSelectEntry(), false );
858 : :
859 : 0 : if( pInfo )
860 : : {
861 : 0 : if ( !m_pTempPrinter )
862 : : {
863 : 0 : if( (m_pDocumentPrinterCopy->GetName() == pInfo->GetPrinterName()) &&
864 : 0 : (m_pDocumentPrinterCopy->GetDriverName() == pInfo->GetDriver()) )
865 : 0 : m_pTempPrinter = new Printer( m_pDocumentPrinterCopy->GetJobSetup() );
866 : : else
867 : 0 : m_pTempPrinter = new Printer( *pInfo );
868 : : }
869 : : else
870 : : {
871 : 0 : if( (m_pTempPrinter->GetName() != pInfo->GetPrinterName()) ||
872 : 0 : (m_pTempPrinter->GetDriverName() != pInfo->GetDriver()) )
873 : : {
874 : 0 : delete m_pTempPrinter;
875 : 0 : m_pTempPrinter = new Printer( *pInfo );
876 : : }
877 : : }
878 : : }
879 : 0 : else if( ! m_pTempPrinter )
880 : 0 : m_pTempPrinter = new Printer();
881 : :
882 : 0 : m_aPrinterSettingsPB.Enable( m_pTempPrinter->HasSupport( SUPPORT_SETUPDIALOG ) );
883 : : }
884 : : else
885 : 0 : m_aPrinterSettingsPB.Disable();
886 : 0 : m_pWizard->GetConfigItem().SetSelectedPrinter( pBox->GetSelectEntry() );
887 : :
888 : 0 : return 0;
889 : : }
890 : :
891 : 0 : IMPL_LINK_NOARG(SwMailMergeOutputPage, PrintHdl_Impl)
892 : : {
893 : 0 : SwView* pTargetView = m_pWizard->GetConfigItem().GetTargetView();
894 : : OSL_ENSURE(pTargetView, "no target view exists");
895 : 0 : if(!pTargetView)
896 : 0 : return 0;
897 : :
898 : 0 : sal_uInt32 nBegin = 0;
899 : 0 : sal_uInt32 nEnd = 0;
900 : 0 : SwMailMergeConfigItem& rConfigItem = m_pWizard->GetConfigItem();
901 : 0 : if(m_aPrintAllRB.IsChecked())
902 : : {
903 : 0 : nBegin = 0;
904 : 0 : nEnd = rConfigItem.GetMergedDocumentCount();
905 : : }
906 : : else
907 : : {
908 : 0 : nBegin = static_cast< sal_Int32 >(m_aFromNF.GetValue() - 1);
909 : 0 : nEnd = static_cast< sal_Int32 >(m_aToNF.GetValue());
910 : 0 : if(nEnd > rConfigItem.GetMergedDocumentCount())
911 : 0 : nEnd = rConfigItem.GetMergedDocumentCount();
912 : : }
913 : 0 : rConfigItem.SetPrintRange( (sal_uInt16)nBegin, (sal_uInt16)nEnd );
914 : 0 : SwDocMergeInfo& rStartInfo = rConfigItem.GetDocumentMergeInfo(nBegin);
915 : 0 : SwDocMergeInfo& rEndInfo = rConfigItem.GetDocumentMergeInfo(nEnd - 1);
916 : :
917 : 0 : rtl::OUString sPages(rtl::OUString::valueOf( rStartInfo.nStartPageInTarget ));
918 : 0 : sPages += rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(" - "));
919 : 0 : sPages += rtl::OUString::valueOf( rEndInfo.nEndPageInTarget );
920 : :
921 : 0 : SwWrtShell& rSh = pTargetView->GetWrtShell();
922 : 0 : pTargetView->SetMailMergeConfigItem(&rConfigItem, 0, sal_False);
923 : 0 : if(m_pTempPrinter)
924 : : {
925 : 0 : m_pDocumentPrinterCopy->SetPrinterProps(m_pTempPrinter);
926 : 0 : pTargetView->SetPrinter(m_pDocumentPrinterCopy->Clone());
927 : : }
928 : :
929 : 0 : SfxObjectShell* pObjSh = pTargetView->GetViewFrame()->GetObjectShell();
930 : 0 : SFX_APP()->NotifyEvent(SfxEventHint(SW_EVENT_MAIL_MERGE, SwDocShell::GetEventName(STR_SW_EVENT_MAIL_MERGE), pObjSh));
931 : 0 : rSh.GetNewDBMgr()->SetMergeType( DBMGR_MERGE_DOCUMENTS );
932 : 0 : SfxBoolItem aMergeSilent(SID_SILENT, sal_False);
933 : 0 : m_pWizard->enableButtons(WZB_CANCEL, sal_False);
934 : :
935 : 0 : uno::Sequence < beans::PropertyValue > aProps( 2 );
936 : 0 : aProps[0]. Name = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("MonitorVisible"));
937 : 0 : aProps[0].Value <<= sal_True;
938 : 0 : aProps[1]. Name = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Pages"));
939 : 0 : aProps[1]. Value <<= sPages;
940 : :
941 : 0 : pTargetView->ExecPrint( aProps, false, true );
942 : 0 : SFX_APP()->NotifyEvent(SfxEventHint(SW_EVENT_MAIL_MERGE_END, SwDocShell::GetEventName(STR_SW_EVENT_MAIL_MERGE_END), pObjSh));
943 : :
944 : 0 : pTargetView->SetMailMergeConfigItem(0, 0, sal_False);
945 : 0 : m_pWizard->enableButtons(WZB_CANCEL, sal_True);
946 : 0 : m_pWizard->enableButtons(WZB_FINISH, sal_True);
947 : 0 : return 0;
948 : : }
949 : :
950 : 0 : IMPL_LINK(SwMailMergeOutputPage, PrinterSetupHdl_Impl, PushButton*, pButton)
951 : : {
952 : 0 : if( !m_pTempPrinter )
953 : 0 : PrinterChangeHdl_Impl(&m_aPrinterLB);
954 : 0 : if(m_pTempPrinter)
955 : 0 : m_pTempPrinter->Setup(pButton);
956 : 0 : return 0;
957 : : }
958 : :
959 : 0 : IMPL_LINK(SwMailMergeOutputPage, SendTypeHdl_Impl, ListBox*, pBox)
960 : : {
961 : 0 : sal_uLong nDocType = (sal_uLong)pBox->GetEntryData(pBox->GetSelectEntryPos());
962 : 0 : sal_Bool bEnable = MM_DOCTYPE_HTML != nDocType && MM_DOCTYPE_TEXT != nDocType;
963 : 0 : m_aSendAsPB.Enable( bEnable );
964 : 0 : m_aAttachmentFT.Enable( bEnable );
965 : 0 : m_aAttachmentED.Enable( bEnable );
966 : 0 : if(bEnable)
967 : : {
968 : : //add the correct extension
969 : 0 : String sAttach(m_aAttachmentED.GetText());
970 : : //do nothing if the user has removed the name - the warning will come early enough
971 : 0 : if(sAttach.Len())
972 : : {
973 : 0 : xub_StrLen nTokenCount = comphelper::string::getTokenCount(sAttach, '.');
974 : 0 : if( 2 > nTokenCount)
975 : : {
976 : 0 : sAttach += '.';
977 : 0 : ++nTokenCount;
978 : : }
979 : 0 : sAttach.SetToken( nTokenCount - 1, '.', lcl_GetExtensionForDocType( nDocType ));
980 : 0 : m_aAttachmentED.SetText(sAttach);
981 : 0 : }
982 : : }
983 : 0 : return 0;
984 : : }
985 : :
986 : 0 : IMPL_LINK(SwMailMergeOutputPage, SendAsHdl_Impl, PushButton*, pButton)
987 : : {
988 : 0 : SwMailBodyDialog* pDlg = new SwMailBodyDialog(pButton, m_pWizard);
989 : 0 : pDlg->SetBody(m_sBody);
990 : 0 : if(RET_OK == pDlg->Execute())
991 : : {
992 : 0 : m_sBody = pDlg->GetBody();
993 : : }
994 : 0 : return 0;
995 : : }
996 : :
997 : : /*-------------------------------------------------------------------------
998 : : Send documents as e-mail
999 : : -----------------------------------------------------------------------*/
1000 : 0 : IMPL_LINK(SwMailMergeOutputPage, SendDocumentsHdl_Impl, PushButton*, pButton)
1001 : : {
1002 : 0 : SwMailMergeConfigItem& rConfigItem = m_pWizard->GetConfigItem();
1003 : :
1004 : : //get the composed document
1005 : 0 : SwView* pTargetView = rConfigItem.GetTargetView();
1006 : : OSL_ENSURE(pTargetView, "no target view exists");
1007 : 0 : if(!pTargetView)
1008 : 0 : return 0;
1009 : :
1010 : 0 : if(rConfigItem.GetMailServer().isEmpty() ||
1011 : 0 : !SwMailMergeHelper::CheckMailAddress(rConfigItem.GetMailAddress()) )
1012 : : {
1013 : 0 : QueryBox aQuery(pButton, WB_YES_NO_CANCEL, m_sConfigureMail);
1014 : 0 : sal_uInt16 nRet = aQuery.Execute();
1015 : 0 : if(RET_YES == nRet )
1016 : : {
1017 : 0 : SfxAllItemSet aSet(pTargetView->GetPool());
1018 : 0 : SwMailConfigDlg* pDlg = new SwMailConfigDlg(pButton, aSet);
1019 : 0 : nRet = pDlg->Execute();
1020 : 0 : delete pDlg;
1021 : : }
1022 : :
1023 : 0 : if(nRet != RET_OK && nRet != RET_YES)
1024 : 0 : return 0;
1025 : : }
1026 : : //add the documents
1027 : 0 : sal_uInt32 nBegin = 0;
1028 : 0 : sal_uInt32 nEnd = 0;
1029 : 0 : if(m_aSendAllRB.IsChecked())
1030 : : {
1031 : 0 : nBegin = 0;
1032 : 0 : nEnd = rConfigItem.GetMergedDocumentCount();
1033 : : }
1034 : : else
1035 : : {
1036 : 0 : nBegin = static_cast< sal_Int32 >(m_aFromNF.GetValue() - 1);
1037 : 0 : nEnd = static_cast< sal_Int32 >(m_aToNF.GetValue());
1038 : 0 : if(nEnd > rConfigItem.GetMergedDocumentCount())
1039 : 0 : nEnd = rConfigItem.GetMergedDocumentCount();
1040 : : }
1041 : 0 : bool bAsBody = false;
1042 : 0 : rtl_TextEncoding eEncoding = ::osl_getThreadTextEncoding();
1043 : 0 : SfxFilterContainer* pFilterContainer = SwDocShell::Factory().GetFilterContainer();
1044 : 0 : const SfxFilter *pSfxFlt = 0;
1045 : 0 : sal_uLong nDocType = (sal_uLong)m_aSendAsLB.GetEntryData(m_aSendAsLB.GetSelectEntryPos());
1046 : 0 : String sExtension = lcl_GetExtensionForDocType(nDocType);
1047 : 0 : switch( nDocType )
1048 : : {
1049 : : case MM_DOCTYPE_OOO:
1050 : : {
1051 : : //Make sure we don't pick e.g. the flat xml filter
1052 : : //for this format
1053 : : pSfxFlt = SwIoSystem::GetFilterOfFormat(
1054 : : rtl::OUString( FILTER_XML ),
1055 : 0 : SwDocShell::Factory().GetFilterContainer() );
1056 : : }
1057 : 0 : break;
1058 : : case MM_DOCTYPE_PDF:
1059 : : {
1060 : : pSfxFlt = pFilterContainer->GetFilter4FilterName(
1061 : : ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("writer_pdf_Export")),
1062 : 0 : SFX_FILTER_EXPORT);
1063 : : }
1064 : 0 : break;
1065 : : case MM_DOCTYPE_WORD:
1066 : : {
1067 : : //the method SwIOSystemGetFilterOfFormat( ) returns the template filter
1068 : : //because it uses the same user data :-(
1069 : 0 : SfxFilterMatcher aMatcher( pFilterContainer->GetName() );
1070 : 0 : SfxFilterMatcherIter aIter( aMatcher );
1071 : 0 : const SfxFilter* pFilter = aIter.First();
1072 : 0 : while ( pFilter )
1073 : : {
1074 : 0 : if( pFilter->GetUserData() == FILTER_WW8 && pFilter->CanExport() )
1075 : : {
1076 : 0 : pSfxFlt = pFilter;
1077 : 0 : break;
1078 : : }
1079 : 0 : pFilter = aIter.Next();
1080 : 0 : }
1081 : :
1082 : : }
1083 : 0 : break;
1084 : : case MM_DOCTYPE_HTML:
1085 : : {
1086 : 0 : bAsBody = true;
1087 : 0 : SvxHtmlOptions& rHtmlOptions = SvxHtmlOptions::Get();
1088 : 0 : eEncoding = rHtmlOptions.GetTextEncoding();
1089 : : }
1090 : 0 : break;
1091 : : case MM_DOCTYPE_TEXT:
1092 : 0 : bAsBody = true;
1093 : 0 : break;
1094 : : }
1095 : 0 : if(!pSfxFlt)
1096 : 0 : pSfxFlt = pFilterContainer->GetFilter4Extension(sExtension, SFX_FILTER_EXPORT);
1097 : :
1098 : 0 : if(!pSfxFlt)
1099 : 0 : return 0;
1100 : 0 : ::rtl::OUString sMimeType = pSfxFlt->GetMimeType();
1101 : :
1102 : 0 : if(!m_aSubjectED.GetText().Len())
1103 : : {
1104 : 0 : SwSendQueryBox_Impl aQuery(pButton, m_sNoSubjectQueryST);
1105 : 0 : aQuery.SetIsEmptyTextAllowed(true);
1106 : 0 : aQuery.SetValue(m_sNoSubjectST);
1107 : 0 : if(RET_OK == aQuery.Execute())
1108 : : {
1109 : 0 : if(aQuery.GetValue() != m_sNoSubjectST)
1110 : 0 : m_aSubjectED.SetText(aQuery.GetValue());
1111 : : }
1112 : : else
1113 : 0 : return 0;
1114 : : }
1115 : 0 : if(!bAsBody && !m_aAttachmentED.GetText().Len())
1116 : : {
1117 : 0 : SwSendQueryBox_Impl aQuery(pButton, m_sNoAttachmentNameST);
1118 : 0 : aQuery.SetIsEmptyTextAllowed(false);
1119 : 0 : if(RET_OK == aQuery.Execute())
1120 : : {
1121 : 0 : String sAttach(aQuery.GetValue());
1122 : 0 : xub_StrLen nTokenCount = comphelper::string::getTokenCount(sAttach, '.');
1123 : 0 : if( 2 > nTokenCount)
1124 : : {
1125 : 0 : sAttach += '.';
1126 : 0 : ++nTokenCount;
1127 : : }
1128 : : sAttach.SetToken( nTokenCount - 1, '.', lcl_GetExtensionForDocType(
1129 : 0 : (sal_uLong)m_aSendAsLB.GetEntryData(m_aSendAsLB.GetSelectEntryPos())));
1130 : 0 : m_aAttachmentED.SetText(sAttach);
1131 : : }
1132 : : else
1133 : 0 : return 0;
1134 : : }
1135 : 0 : SfxStringItem aFilterName( SID_FILTER_NAME, pSfxFlt->GetFilterName() );
1136 : 0 : String sEMailColumn = m_aMailToLB.GetSelectEntry();
1137 : : OSL_ENSURE( sEMailColumn.Len(), "No email column selected");
1138 : 0 : Reference< sdbcx::XColumnsSupplier > xColsSupp( rConfigItem.GetResultSet(), UNO_QUERY);
1139 : 0 : Reference < container::XNameAccess> xColAccess = xColsSupp.is() ? xColsSupp->getColumns() : 0;
1140 : 0 : if(!sEMailColumn.Len() || !xColAccess.is() || !xColAccess->hasByName(sEMailColumn))
1141 : 0 : return 0;
1142 : :
1143 : 0 : String sFilterOptions;
1144 : 0 : if(MM_DOCTYPE_TEXT == nDocType)
1145 : : {
1146 : 0 : SwAsciiOptions aOpt;
1147 : 0 : sal_uInt16 nAppScriptType = GetI18NScriptTypeOfLanguage( (sal_uInt16)GetAppLanguage() );
1148 : 0 : sal_uInt16 nWhich = GetWhichOfScript( RES_CHRATR_LANGUAGE, nAppScriptType);
1149 : 0 : aOpt.SetLanguage( ((SvxLanguageItem&)pTargetView->GetWrtShell().
1150 : 0 : GetDefault( nWhich )).GetLanguage());
1151 : 0 : aOpt.SetParaFlags( LINEEND_CR );
1152 : 0 : aOpt.WriteUserData( sFilterOptions );
1153 : : }
1154 : : String sTargetTempURL = URIHelper::SmartRel2Abs(
1155 : : INetURLObject(), utl::TempFile::CreateTempName(),
1156 : 0 : URIHelper::GetMaybeFileHdl());
1157 : : const SfxFilter *pTargetSfxFlt = SwIoSystem::GetFilterOfFormat(
1158 : : rtl::OUString( FILTER_XML ),
1159 : 0 : SwDocShell::Factory().GetFilterContainer() );
1160 : :
1161 : 0 : uno::Sequence< beans::PropertyValue > aValues(1);
1162 : 0 : beans::PropertyValue* pValues = aValues.getArray();
1163 : 0 : pValues[0].Name = C2U("FilterName");
1164 : 0 : pValues[0].Value <<= ::rtl::OUString(pTargetSfxFlt->GetFilterName());
1165 : :
1166 : 0 : uno::Reference< frame::XStorable > xStore( pTargetView->GetDocShell()->GetModel(), uno::UNO_QUERY);
1167 : 0 : xStore->storeToURL( sTargetTempURL, aValues );
1168 : :
1169 : : //create the send dialog
1170 : 0 : SwSendMailDialog* pDlg = new SwSendMailDialog( pButton, rConfigItem );
1171 : 0 : pDlg->SetDocumentCount( nEnd );
1172 : 0 : pDlg->ShowDialog();
1173 : : //help to force painting the dialog
1174 : : //TODO/CLEANUP
1175 : : //predetermined breaking point
1176 : 0 : for ( sal_Int16 i = 0; i < 25; i++)
1177 : 0 : Application::Reschedule();
1178 : 0 : for(sal_uInt32 nDoc = nBegin; nDoc < nEnd; ++nDoc)
1179 : : {
1180 : 0 : m_pWizard->EnterWait();
1181 : 0 : SwDocMergeInfo& rInfo = rConfigItem.GetDocumentMergeInfo(nDoc);
1182 : :
1183 : : //now extract a document from the target document
1184 : : // the shell will be closed at the end, but it is more safe to use SfxObjectShellLock here
1185 : 0 : SfxObjectShellLock xTempDocShell( new SwDocShell( SFX_CREATE_MODE_STANDARD ) );
1186 : 0 : xTempDocShell->DoInitNew( 0 );
1187 : 0 : SfxViewFrame* pTempFrame = SfxViewFrame::LoadHiddenDocument( *xTempDocShell, 0 );
1188 : 0 : SwView* pTempView = static_cast<SwView*>( pTempFrame->GetViewShell() );
1189 : 0 : pTargetView->GetWrtShell().StartAction();
1190 : 0 : SwgReaderOption aOpt;
1191 : 0 : aOpt.SetTxtFmts( sal_True );
1192 : 0 : aOpt.SetFrmFmts( sal_True );
1193 : 0 : aOpt.SetPageDescs( sal_True );
1194 : 0 : aOpt.SetNumRules( sal_True );
1195 : 0 : aOpt.SetMerge( sal_False );
1196 : : pTempView->GetDocShell()->LoadStylesFromFile(
1197 : 0 : sTargetTempURL, aOpt, sal_True );
1198 : 0 : pTargetView->GetWrtShell().PastePages(pTempView->GetWrtShell(),
1199 : 0 : (sal_uInt16)rInfo.nStartPageInTarget, (sal_uInt16)rInfo.nEndPageInTarget );
1200 : 0 : pTargetView->GetWrtShell().EndAction();
1201 : :
1202 : : //then save it
1203 : : SfxStringItem aName(SID_FILE_NAME,
1204 : : URIHelper::SmartRel2Abs(
1205 : : INetURLObject(), utl::TempFile::CreateTempName(0),
1206 : 0 : URIHelper::GetMaybeFileHdl()) );
1207 : :
1208 : : {
1209 : 0 : uno::Sequence< beans::PropertyValue > aFilterValues(MM_DOCTYPE_TEXT == nDocType ? 2 : 1);
1210 : 0 : beans::PropertyValue* pFilterValues = aFilterValues.getArray();
1211 : 0 : pFilterValues[0].Name = C2U("FilterName");
1212 : 0 : pFilterValues[0].Value <<= ::rtl::OUString(pSfxFlt->GetFilterName());
1213 : 0 : if(MM_DOCTYPE_TEXT == nDocType)
1214 : : {
1215 : 0 : pFilterValues[1].Name = C2U("FilterOptions");
1216 : 0 : pFilterValues[1].Value <<= ::rtl::OUString(sFilterOptions);
1217 : : }
1218 : :
1219 : 0 : uno::Reference< frame::XStorable > xTempStore( pTempView->GetDocShell()->GetModel(), uno::UNO_QUERY);
1220 : 0 : xTempStore->storeToURL( aName.GetValue(), aFilterValues );
1221 : : }
1222 : 0 : xTempDocShell->DoClose();
1223 : :
1224 : 0 : sal_Int32 nTarget = rConfigItem.MoveResultSet(rInfo.nDBRow);
1225 : : OSL_ENSURE( nTarget == rInfo.nDBRow, "row of current document could not be selected");
1226 : : (void)nTarget;
1227 : : OSL_ENSURE( sEMailColumn.Len(), "No email column selected");
1228 : 0 : ::rtl::OUString sEMail = lcl_GetColumnValueOf(sEMailColumn, xColAccess);
1229 : 0 : SwMailDescriptor aDesc;
1230 : 0 : aDesc.sEMail = sEMail;
1231 : 0 : rtl::OUString sBody;
1232 : 0 : if(bAsBody)
1233 : : {
1234 : : {
1235 : : //read in the temporary file and use it as mail body
1236 : 0 : SfxMedium aMedium( aName.GetValue(), STREAM_READ);
1237 : 0 : SvStream* pInStream = aMedium.GetInStream();
1238 : 0 : if(pInStream)
1239 : 0 : pInStream->SetStreamCharSet( eEncoding );
1240 : : else
1241 : : {
1242 : : OSL_FAIL("no output file created?");
1243 : 0 : continue;
1244 : : }
1245 : 0 : rtl::OString sLine;
1246 : 0 : sal_Bool bDone = pInStream->ReadLine( sLine );
1247 : 0 : while ( bDone )
1248 : : {
1249 : 0 : sBody += rtl::OStringToOUString(sLine, eEncoding);
1250 : 0 : sBody += rtl::OUString('\n');
1251 : 0 : bDone = pInStream->ReadLine( sLine );
1252 : 0 : }
1253 : : }
1254 : : //remove the temporary file
1255 : 0 : SWUnoHelper::UCB_DeleteFile( aName.GetValue() );
1256 : : }
1257 : : else
1258 : : {
1259 : 0 : sBody = m_sBody;
1260 : 0 : aDesc.sAttachmentURL = aName.GetValue();
1261 : 0 : String sAttachment(m_aAttachmentED.GetText());
1262 : 0 : xub_StrLen nTokenCount = comphelper::string::getTokenCount(sAttachment, '.');
1263 : 0 : if( 2 > nTokenCount)
1264 : : {
1265 : 0 : sAttachment += '.';
1266 : 0 : sAttachment.SetToken( nTokenCount, '.', sExtension);
1267 : : }
1268 : 0 : else if(sAttachment.GetToken( nTokenCount - 1, '.') != sExtension)
1269 : 0 : sAttachment += sExtension;
1270 : 0 : aDesc.sAttachmentName = sAttachment;
1271 : 0 : aDesc.sMimeType = sMimeType;
1272 : :
1273 : 0 : if(rConfigItem.IsGreetingLine(sal_True))
1274 : : {
1275 : 0 : ::rtl::OUString sNameColumn = rConfigItem.GetAssignedColumn(MM_PART_LASTNAME);
1276 : 0 : ::rtl::OUString sName = lcl_GetColumnValueOf(sNameColumn, xColAccess);
1277 : 0 : String sGreeting;
1278 : 0 : if(!sName.isEmpty() && rConfigItem.IsIndividualGreeting(sal_True))
1279 : : {
1280 : 0 : ::rtl::OUString sGenderColumn = rConfigItem.GetAssignedColumn(MM_PART_GENDER);
1281 : 0 : const ::rtl::OUString& sFemaleValue = rConfigItem.GetFemaleGenderValue();
1282 : 0 : ::rtl::OUString sGenderValue = lcl_GetColumnValueOf(sGenderColumn, xColAccess);
1283 : 0 : SwMailMergeConfigItem::Gender eGenderType = sGenderValue == sFemaleValue ?
1284 : : SwMailMergeConfigItem::FEMALE :
1285 : 0 : SwMailMergeConfigItem::MALE;
1286 : :
1287 : : sGreeting = SwAddressPreview::FillData(
1288 : : rConfigItem.GetGreetings(eGenderType)
1289 : 0 : [rConfigItem.GetCurrentGreeting(eGenderType)],
1290 : 0 : rConfigItem);
1291 : : }
1292 : : else
1293 : : {
1294 : : sGreeting =
1295 : : rConfigItem.GetGreetings(SwMailMergeConfigItem::NEUTRAL)
1296 : 0 : [rConfigItem.GetCurrentGreeting(SwMailMergeConfigItem::NEUTRAL)];
1297 : :
1298 : : }
1299 : 0 : sGreeting += '\n';
1300 : 0 : ::rtl::OUString sTemp( sGreeting );
1301 : 0 : sTemp += sBody;
1302 : 0 : sBody = sTemp;
1303 : 0 : }
1304 : : }
1305 : 0 : aDesc.sBodyContent = sBody;
1306 : 0 : if(MM_DOCTYPE_HTML == nDocType)
1307 : : {
1308 : 0 : aDesc.sBodyMimeType = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("text/html; charset="));
1309 : : aDesc.sBodyMimeType += ::rtl::OUString::createFromAscii(
1310 : 0 : rtl_getBestMimeCharsetFromTextEncoding( eEncoding ));
1311 : : }
1312 : : else
1313 : : aDesc.sBodyMimeType =
1314 : 0 : ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("text/plain; charset=UTF-8; format=flowed"));
1315 : :
1316 : 0 : aDesc.sSubject = m_aSubjectED.GetText();
1317 : 0 : aDesc.sCC = m_sCC;
1318 : 0 : aDesc.sBCC = m_sBCC;
1319 : 0 : pDlg->AddDocument( aDesc );
1320 : : //help to force painting the dialog
1321 : 0 : for ( sal_Int16 i = 0; i < 25; i++)
1322 : 0 : Application::Reschedule();
1323 : : //stop creating of data when dialog has been closed
1324 : 0 : if(!pDlg->IsVisible())
1325 : : {
1326 : 0 : m_pWizard->LeaveWait();
1327 : : break;
1328 : : }
1329 : 0 : m_pWizard->LeaveWait();
1330 : 0 : }
1331 : 0 : pDlg->EnableDesctruction();
1332 : 0 : ::osl::File::remove( sTargetTempURL );
1333 : :
1334 : 0 : m_pWizard->enableButtons(WZB_FINISH, sal_True);
1335 : : //the dialog deletes itself
1336 : : //delete pDlg;
1337 : 0 : return 0;
1338 : : }
1339 : :
1340 : : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|