LCOV - code coverage report
Current view: top level - sw/source/ui/dbui - mmoutputpage.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 0 653 0.0 %
Date: 2012-08-25 Functions: 0 52 0.0 %
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 0 0 -

           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: */

Generated by: LCOV version 1.10