diff options
Diffstat (limited to 'sw/source/ui/dbui/mmoutputpage.cxx')
-rw-r--r-- | sw/source/ui/dbui/mmoutputpage.cxx | 1419 |
1 files changed, 1419 insertions, 0 deletions
diff --git a/sw/source/ui/dbui/mmoutputpage.cxx b/sw/source/ui/dbui/mmoutputpage.cxx new file mode 100644 index 000000000000..a9d1b4a0e2ae --- /dev/null +++ b/sw/source/ui/dbui/mmoutputpage.cxx @@ -0,0 +1,1419 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +// MARKER(update_precomp.py): autogen include statement, do not remove +#include "precompiled_sw.hxx" +#ifdef SW_DLLIMPLEMENTATION +#undef SW_DLLIMPLEMENTATION +#endif +#include <mmoutputpage.hxx> +#include <mailmergewizard.hxx> +#include <mmconfigitem.hxx> +#include <mailmergechildwindow.hxx> +#include <mailconfigpage.hxx> +#include <cmdid.h> +#include <swtypes.hxx> +#ifndef _VIEW_HXX +#include <view.hxx> +#endif +#include <wrtsh.hxx> +#ifndef _DOCSH_HXX +#include <docsh.hxx> +#endif +#ifndef IDOCUMENTDEVICEACCESS_HXX_INCLUDED +#include <IDocumentDeviceAccess.hxx> +#endif +#include <hintids.hxx> +#include <editeng/scripttypeitem.hxx> +#include <editeng/langitem.hxx> +#include <svl/itemset.hxx> +#include <svl/stritem.hxx> +#include <svtools/ehdl.hxx> +#include <svtools/sfxecode.hxx> +#include <vcl/msgbox.hxx> +#include <sfx2/dinfdlg.hxx> +#include <sfx2/printer.hxx> +#include <sfx2/fcontnr.hxx> +#include <sfx2/viewfrm.hxx> +#include <sfx2/dispatch.hxx> +#include <sfx2/docfile.hxx> +//#ifndef _SFX_DOCFILT_HACK_HXX +//#include <sfx2/docfilt.hxx> +//#endif +#include <tools/urlobj.hxx> +#include <svl/urihelper.hxx> +#ifndef _VCL_PRINT_HXX +#include <vcl/print.hxx> +#endif +#include <unotools/tempfile.hxx> +#include <osl/file.hxx> +#include <mmgreetingspage.hxx> +#include <com/sun/star/frame/XStorable.hpp> +#include <com/sun/star/sdbcx/XColumnsSupplier.hpp> +#include <com/sun/star/sdb/XColumn.hpp> +//#ifndef _COM_SUN_STAR_BEANS_PROPERTYVALUE_HPP_ +//#include <com/sun/star/beans/PropertyValue.hpp> +//#endif +//#ifndef _BASEDLGS_HXX +//#include <sfx2/basedlgs.hxx> +//#endif +#ifndef _DBMGR_HXX +#include <dbmgr.hxx> +#endif +#include <swunohelper.hxx> +#include <vos/mutex.hxx> +#include <shellio.hxx> +#include <svtools/htmlcfg.hxx> +#include <sfx2/event.hxx> +#include <swevent.hxx> +#include <mmoutputpage.hrc> +#include <dbui.hxx> +#include <dbui.hrc> +#include <helpid.h> +#include <sfx2/app.hxx> +#include <statstr.hrc> +#include <unomid.h> + +using namespace svt; +using namespace ::com::sun::star; +using namespace ::com::sun::star::uno; + +/*-- 01.07.2004 16:47:49--------------------------------------------------- + + -----------------------------------------------------------------------*/ +String lcl_GetExtensionForDocType(ULONG nDocType) +{ + String sExtension; + switch( nDocType ) + { + case MM_DOCTYPE_OOO : sExtension = String::CreateFromAscii( "odt" ); break; + case MM_DOCTYPE_PDF : sExtension = String::CreateFromAscii( "pdf" ); break; + case MM_DOCTYPE_WORD: sExtension = String::CreateFromAscii( "doc" ); break; + case MM_DOCTYPE_HTML: sExtension = String::CreateFromAscii( "html" ); break; + case MM_DOCTYPE_TEXT: sExtension = String::CreateFromAscii( "txt" ); break; + } + return sExtension; +} +/*-- 28.06.2004 11:49:21--------------------------------------------------- + + -----------------------------------------------------------------------*/ +::rtl::OUString lcl_GetColumnValueOf(const ::rtl::OUString& rColumn, Reference < container::XNameAccess>& rxColAccess ) +{ + ::rtl::OUString sRet; + if(rxColAccess->hasByName(rColumn)) + { + Any aCol = rxColAccess->getByName(rColumn); + Reference< sdb::XColumn > xColumn; + aCol >>= xColumn; + if(xColumn.is()) + sRet = xColumn->getString(); + } + return sRet; +} +/*-- 21.06.2004 14:01:13--------------------------------------------------- + + -----------------------------------------------------------------------*/ +class SwSaveWarningBox_Impl : public ModalDialog +{ + FixedImage aWarningImageIM; + FixedInfo aWarningFI; + + FixedText aFileNameFT; + Edit aFileNameED; + + FixedLine aSeparatorFL; + OKButton aOKPB; + CancelButton aCancelPB; + + DECL_LINK( ModifyHdl, Edit*); +public: + SwSaveWarningBox_Impl(Window* pParent, const String& rFileName); + ~SwSaveWarningBox_Impl(); + + String GetFileName() const {return aFileNameED.GetText();} +}; +/*-- 02.07.2004 08:54:42--------------------------------------------------- + + -----------------------------------------------------------------------*/ +class SwSendQueryBox_Impl : public ModalDialog +{ + FixedImage aQueryImageIM; + FixedInfo aQueryFI; + + Edit aTextED; + + FixedLine aSeparatorFL; + OKButton aOKPB; + CancelButton aCancelPB; + + bool bIsEmptyAllowed; + DECL_LINK( ModifyHdl, Edit*); +public: + SwSendQueryBox_Impl(Window* pParent, const String& rQueryText); + ~SwSendQueryBox_Impl(); + + void SetValue(const String& rSet) + { + aTextED.SetText(rSet); + ModifyHdl( &aTextED ); + } + String GetValue() const {return aTextED.GetText();} + + void SetIsEmptyTextAllowed(bool bSet) + { + bIsEmptyAllowed = bSet; + ModifyHdl( &aTextED ); + } +}; + +/*-- 21.06.2004 14:11:58--------------------------------------------------- + + -----------------------------------------------------------------------*/ +SwSaveWarningBox_Impl::SwSaveWarningBox_Impl(Window* pParent, const String& rFileName) : + ModalDialog(pParent, SW_RES( DLG_MM_SAVEWARNING )), + aWarningImageIM(this, SW_RES( IM_WARNING )), + aWarningFI(this, SW_RES( FI_WARNING )), + aFileNameFT(this, SW_RES( FT_FILENAME )), + aFileNameED(this, SW_RES( ED_FILENAME )), + aSeparatorFL(this, SW_RES( FL_SEPARATOR )), + aOKPB(this, SW_RES( PB_OK )), + aCancelPB(this, SW_RES( PB_CANCEL )) +{ + FreeResource(); + aWarningImageIM.SetImage(WarningBox::GetStandardImage()); + aFileNameED.SetText(rFileName); + aFileNameED.SetModifyHdl(LINK(this, SwSaveWarningBox_Impl, ModifyHdl)); + ModifyHdl( &aFileNameED ); +} +/*-- 21.06.2004 14:11:58--------------------------------------------------- + + -----------------------------------------------------------------------*/ +SwSaveWarningBox_Impl::~SwSaveWarningBox_Impl() +{ +} +/*-- 21.06.2004 14:11:58--------------------------------------------------- + + -----------------------------------------------------------------------*/ +IMPL_LINK( SwSaveWarningBox_Impl, ModifyHdl, Edit*, pEdit) +{ + aOKPB.Enable(pEdit->GetText().Len() > 0); + return 0; +} +/*-- 02.07.2004 09:02:53--------------------------------------------------- + + -----------------------------------------------------------------------*/ +SwSendQueryBox_Impl::SwSendQueryBox_Impl(Window* pParent, const String& rText) : + ModalDialog(pParent, SW_RES( DLG_MM_QUERY )), + aQueryImageIM( this, SW_RES( IM_QUERY )), + aQueryFI( this, SW_RES( FI_QUERY )), + aTextED( this, SW_RES( ED_TEXT )), + aSeparatorFL(this, SW_RES( FL_SEPARATOR )), + aOKPB(this, SW_RES( PB_OK )), + aCancelPB(this, SW_RES( PB_CANCEL )), + bIsEmptyAllowed(true) +{ + FreeResource(); + aQueryFI.SetText(rText); + aQueryImageIM.SetImage(QueryBox::GetStandardImage()); + aTextED.SetModifyHdl(LINK(this, SwSendQueryBox_Impl, ModifyHdl)); + ModifyHdl( &aTextED ); +} +/*-- 02.07.2004 08:58:45--------------------------------------------------- + + -----------------------------------------------------------------------*/ +SwSendQueryBox_Impl::~SwSendQueryBox_Impl() +{ +} +/*-- 02.07.2004 08:58:25--------------------------------------------------- + + -----------------------------------------------------------------------*/ +IMPL_LINK( SwSendQueryBox_Impl, ModifyHdl, Edit*, pEdit) +{ + aOKPB.Enable(bIsEmptyAllowed || (pEdit->GetText().Len() > 0)); + return 0; +} + +/*-- 16.04.2004 16:34:48--------------------------------------------------- + + -----------------------------------------------------------------------*/ +class SwCopyToDialog : public SfxModalDialog +{ + FixedInfo m_aDescriptionFI; + FixedText m_aCCFT; + Edit m_aCCED; + FixedText m_aBCCFT; + Edit m_aBCCED; + + FixedInfo m_aNoteFI; + FixedLine m_aSeparatorFL; + + OKButton m_aOK; + CancelButton m_aCancel; + HelpButton m_aHelp; + +public: + SwCopyToDialog(Window* pParent); + ~SwCopyToDialog(); + + String GetCC() {return m_aCCED.GetText();} + void SetCC(const String& rSet) {m_aCCED.SetText(rSet);} + + String GetBCC() {return m_aBCCED.GetText();} + void SetBCC(const String& rSet) {m_aBCCED.SetText(rSet);} +}; + +/*-- 16.04.2004 16:43:18--------------------------------------------------- + + -----------------------------------------------------------------------*/ +SwCopyToDialog::SwCopyToDialog(Window* pParent) : + SfxModalDialog(pParent, SW_RES(DLG_MM_COPYTO)), +#ifdef MSC +#pragma warning (disable : 4355) +#endif + m_aDescriptionFI( this, SW_RES( FI_DESCRIPTION )), + m_aCCFT( this, SW_RES( FT_CC )), + m_aCCED( this, SW_RES( ED_CC )), + m_aBCCFT( this, SW_RES( FT_BCC )), + m_aBCCED( this, SW_RES( ED_BCC )), + m_aNoteFI( this, SW_RES( FI_NOTE )), + m_aSeparatorFL( this, SW_RES( FL_SEPARATOR )), + m_aOK( this, SW_RES( PB_OK )), + m_aCancel( this, SW_RES( PB_CANCEL )), + m_aHelp( this, SW_RES( PB_HELP )) +#ifdef MSC +#pragma warning (default : 4355) +#endif +{ + FreeResource(); +} +/*-- 16.04.2004 16:43:10--------------------------------------------------- + + -----------------------------------------------------------------------*/ +SwCopyToDialog::~SwCopyToDialog() +{ +} + +/*-- 02.04.2004 13:15:54--------------------------------------------------- + + -----------------------------------------------------------------------*/ +SwMailMergeOutputPage::SwMailMergeOutputPage( SwMailMergeWizard* _pParent) : + svt::OWizardPage( _pParent, SW_RES(DLG_MM_OUTPUT_PAGE)), +#ifdef MSC +#pragma warning (disable : 4355) +#endif + m_aHeaderFI(this, SW_RES( FI_HEADER ) ), + m_aOptionsFI(this, SW_RES( FI_OPTIONS ) ), + m_aSaveStartDocRB(this, SW_RES( RB_SAVESTARTDOC ) ), + m_aSaveMergedDocRB(this, SW_RES( RB_SAVEMERGEDDOC ) ), + m_aPrintRB(this, SW_RES( RB_PRINT ) ), + m_aSendMailRB(this, SW_RES( RB_SENDMAIL ) ), + + m_aSeparatorFL(this, SW_RES( FL_SEPARATOR ) ), + + m_aSaveStartDocPB(this, SW_RES( PB_SAVESTARTDOC ) ), + + m_aSaveAsOneRB(this, SW_RES( RB_SAVEASONE ) ), + m_aSaveIndividualRB(this, SW_RES( RB_SAVEINDIVIDUAL ) ), + m_aPrintAllRB(this, SW_RES( RB_PRINTALL ) ), + m_aSendAllRB( this, SW_RES( RB_SENDALL ) ), + + m_aFromRB(this, SW_RES( RB_FROM ) ), + m_aFromNF(this, SW_RES( NF_FROM ) ), + m_aToFT(this, SW_RES( FT_TO ) ), + m_aToNF(this, SW_RES( NF_TO ) ), + m_aSaveNowPB(this, SW_RES( PB_SAVENOW ) ), + + m_aPrinterFT(this, SW_RES( FT_PRINT ) ), + m_aPrinterLB(this, SW_RES( LB_PRINT ) ), + m_aPrinterSettingsPB(this, SW_RES( PB_PRINTERSETTINGS ) ), + m_aPrintNowPB(this, SW_RES( PB_PRINTNOW ) ), + + m_aMailToFT( this, SW_RES( FT_MAILTO ) ), + m_aMailToLB( this, SW_RES( LB_MAILTO ) ), + m_aCopyToPB( this, SW_RES( PB_COPYTO ) ), + m_aSubjectFT( this, SW_RES( FT_SUBJECT ) ), + m_aSubjectED( this, SW_RES( ED_SUBJECT ) ), + m_aSendAsFT( this, SW_RES( FT_SENDAS ) ), + m_aSendAsLB( this, SW_RES( LB_SENDAS ) ), + m_aAttachmentFT( this, SW_RES( FT_ATTACHMENT ) ), + m_aAttachmentED( this, SW_RES( ED_ATTACHMENT ) ), + m_aSendAsPB( this, SW_RES( PB_SENDAS ) ), + m_aSendDocumentsPB( this, SW_RES( PB_SENDDOCUMENTS ) ), + + m_sSaveStartST(SW_RES( ST_SAVESTART ) ), + m_sSaveMergedST(SW_RES( ST_SAVEMERGED ) ), + m_sPrintST(SW_RES( ST_PRINT ) ), + m_sSendMailST(SW_RES( ST_SENDMAIL ) ), + + m_sDefaultAttachmentST(SW_RES( ST_DEFAULTATTACHMENT )), + m_sNoSubjectQueryST(SW_RES( ST_SUBJECTQUERY )), + m_sNoSubjectST(SW_RES( ST_NOSUBJECT )), + m_sNoAttachmentNameST(SW_RES( ST_NOATTACHMENTNAME )), + m_sConfigureMail(SW_RES( ST_CONFIGUREMAIL)), +#ifdef MSC +#pragma warning (default : 4355) +#endif + m_bCancelSaving( false ), + m_pWizard(_pParent), + m_pTempPrinter( 0 ), + m_pDocumentPrinterCopy(0) +{ + FreeResource(); + + SwMailMergeConfigItem& rConfigItem = m_pWizard->GetConfigItem(); + // #i51949# hide e-Mail option if e-Mail is not supported + if(!rConfigItem.IsMailAvailable()) + m_aSendMailRB.Hide(); + + Link aLink = LINK(this, SwMailMergeOutputPage, OutputTypeHdl_Impl); + m_aSaveStartDocRB.SetClickHdl(aLink); + m_aSaveMergedDocRB.SetClickHdl(aLink); + m_aPrintRB.SetClickHdl(aLink); + m_aSendMailRB.SetClickHdl(aLink); + m_aSaveStartDocRB.Check(); + m_aPrintAllRB.Check(); + m_aSaveAsOneRB.Check(); + m_aSendAllRB.Check(); + + m_aSaveStartDocPB.SetClickHdl(LINK(this, SwMailMergeOutputPage, SaveStartHdl_Impl)); + m_aSaveNowPB.SetClickHdl(LINK(this, SwMailMergeOutputPage, SaveOutputHdl_Impl)); + m_aPrinterLB.SetSelectHdl(LINK(this, SwMailMergeOutputPage, PrinterChangeHdl_Impl)); + m_aPrintNowPB.SetClickHdl(LINK(this, SwMailMergeOutputPage, PrintHdl_Impl)); + m_aPrinterSettingsPB.SetClickHdl(LINK(this, SwMailMergeOutputPage, PrinterSetupHdl_Impl)); + + m_aSendAsPB.SetClickHdl(LINK(this, SwMailMergeOutputPage, SendAsHdl_Impl)), + m_aSendDocumentsPB.SetClickHdl(LINK(this, SwMailMergeOutputPage, SendDocumentsHdl_Impl)), + m_aSendAsLB.SetSelectHdl(LINK(this, SwMailMergeOutputPage, SendTypeHdl_Impl)); + + m_nFromToRBPos = m_aFromRB.GetPosPixel().Y(); + m_nFromToFTPos = m_aToFT.GetPosPixel().Y(); + m_nFromToNFPos = m_aFromNF.GetPosPixel().Y(); + + m_nRBOffset = m_nFromToRBPos - m_aSaveIndividualRB.GetPosPixel().Y(); + + OutputTypeHdl_Impl(&m_aSaveStartDocRB); + + m_aCopyToPB.SetClickHdl(LINK(this, SwMailMergeOutputPage, CopyToHdl_Impl)); + + m_aSaveAsOneRB.SetClickHdl(LINK(this, SwMailMergeOutputPage, DocumentSelectionHdl_Impl)); + m_aSaveIndividualRB.SetClickHdl(LINK(this, SwMailMergeOutputPage, DocumentSelectionHdl_Impl)); + m_aPrintAllRB.SetClickHdl(LINK(this, SwMailMergeOutputPage, DocumentSelectionHdl_Impl)); + m_aSendAllRB.SetClickHdl(LINK(this, SwMailMergeOutputPage, DocumentSelectionHdl_Impl)); + + m_aFromRB.SetClickHdl(LINK(this, SwMailMergeOutputPage, DocumentSelectionHdl_Impl)); + //#i63267# printing might be disabled + m_aPrintRB.Enable(!Application::GetSettings().GetMiscSettings().GetDisablePrinting()); +} + +/*-- 02.04.2004 13:15:44--------------------------------------------------- + + -----------------------------------------------------------------------*/ +SwMailMergeOutputPage::~SwMailMergeOutputPage() +{ + delete m_pTempPrinter; + delete m_pDocumentPrinterCopy; +} +/*-- 31.01.2005 08:38:14--------------------------------------------------- + + -----------------------------------------------------------------------*/ +void SwMailMergeOutputPage::ActivatePage() +{ + //fill printer ListBox + const std::vector<rtl::OUString>& rPrinters = Printer::GetPrinterQueues(); + unsigned int nCount = rPrinters.size(); + if ( nCount ) + { + for( unsigned int i = 0; i < nCount; i++ ) + { + m_aPrinterLB.InsertEntry( rPrinters[i] ); + } + + } + SwMailMergeConfigItem& rConfigItem = m_pWizard->GetConfigItem(); + + SwView* pTargetView = rConfigItem.GetTargetView(); + DBG_ASSERT(pTargetView, "no target view exists"); + if(pTargetView) + { + SfxPrinter* pPrinter = pTargetView->GetWrtShell().getIDocumentDeviceAccess()->getPrinter( true ); + m_aPrinterLB.SelectEntry( pPrinter->GetName() ); + m_aToNF.SetValue( rConfigItem.GetMergedDocumentCount() ); + m_aToNF.SetMax( rConfigItem.GetMergedDocumentCount() ); + m_pDocumentPrinterCopy = pTargetView->GetWrtShell().getIDocumentDeviceAccess()->getPrinter( true )->Clone(); + } + m_aPrinterLB.SelectEntry( rConfigItem.GetSelectedPrinter() ); + + SwView* pSourceView = rConfigItem.GetSourceView(); + DBG_ASSERT(pSourceView, "no source view exists"); + if(pSourceView) + { + SwDocShell* pDocShell = pSourceView->GetDocShell(); + if ( pDocShell->HasName() ) + { + INetURLObject aTmp( pDocShell->GetMedium()->GetName() ); + m_aAttachmentED.SetText(aTmp.getName( + INetURLObject::LAST_SEGMENT, true, INetURLObject::DECODE_WITH_CHARSET )); + } + } +} +/*-- 05.07.2004 13:54:11--------------------------------------------------- + + -----------------------------------------------------------------------*/ +bool SwMailMergeOutputPage::canAdvance() const +{ + return false; +} +/*-- 02.04.2004 13:15:44--------------------------------------------------- + + -----------------------------------------------------------------------*/ +IMPL_LINK(SwMailMergeOutputPage, OutputTypeHdl_Impl, RadioButton*, pButton) +{ + Control* aControls[] = + { + &m_aSaveStartDocPB, + &m_aSaveAsOneRB, &m_aSaveIndividualRB, + &m_aFromRB, &m_aFromNF, &m_aToFT, &m_aToNF, + &m_aSaveNowPB, + &m_aPrinterFT, &m_aPrinterLB, &m_aPrinterSettingsPB, &m_aPrintAllRB, + &m_aPrintNowPB, + &m_aMailToFT, &m_aMailToLB, &m_aCopyToPB, + &m_aSubjectFT, &m_aSubjectED, + &m_aSendAsFT, &m_aSendAsLB, &m_aSendAsPB, + &m_aAttachmentFT, &m_aAttachmentED, + &m_aSendAllRB, &m_aSendDocumentsPB, + 0 + }; + SetUpdateMode(TRUE); + Control** pControl = aControls; + do + { + (*pControl)->Show(sal_False); + + } while(*(++pControl)); + + if(&m_aSaveStartDocRB == pButton) + { + m_aSaveStartDocPB.Show(); + m_aSeparatorFL.SetText(m_sSaveStartST); + + } + else if(&m_aSaveMergedDocRB == pButton) + { + Control* aSaveMergedControls[] = + { + &m_aSaveAsOneRB, &m_aSaveIndividualRB, + &m_aFromRB, &m_aFromNF, &m_aToFT, &m_aToNF, + &m_aSaveNowPB, + 0 + }; + Control** pSaveMergeControl = aSaveMergedControls; + do + { + (*pSaveMergeControl)->Show(sal_True); + + } while(*(++pSaveMergeControl)); + if(!m_aFromRB.IsChecked() && !m_aSaveAsOneRB.IsChecked()) + { + m_aSaveIndividualRB.Check(); + } + m_aSeparatorFL.SetText(m_sSaveMergedST); + //reposition the from/to line + if(m_aFromRB.GetPosPixel().Y() != m_nFromToRBPos) + { + Point aPos(m_aFromRB.GetPosPixel()); aPos.Y() = m_nFromToRBPos; m_aFromRB.SetPosPixel(aPos); + aPos = m_aToFT.GetPosPixel(); aPos.Y() = m_nFromToFTPos; m_aToFT.SetPosPixel(aPos); + aPos = m_aFromNF.GetPosPixel(); aPos.Y() = m_nFromToNFPos; m_aFromNF.SetPosPixel(aPos); + aPos = m_aToNF.GetPosPixel(); aPos.Y() = m_nFromToNFPos; m_aToNF.SetPosPixel(aPos); + } + } + else if(&m_aPrintRB == pButton) + { + Control* aPrintControls[] = + { + &m_aFromRB, &m_aFromNF, &m_aToFT, &m_aToNF, + &m_aPrinterFT, &m_aPrinterLB, &m_aPrinterSettingsPB, &m_aPrintAllRB, + &m_aPrintNowPB, + 0 + }; + Control** pPrinterControl = aPrintControls; + do + { + (*pPrinterControl)->Show(sal_True); + + } while(*(++pPrinterControl)); + if(!m_aFromRB.IsChecked()) + m_aPrintAllRB.Check(); + + m_aSeparatorFL.SetText(m_sPrintST); + //reposition the from/to line + long nRB_FT_Offset = m_nFromToRBPos - m_nFromToFTPos; + long nNewRBXPos = m_aPrintAllRB.GetPosPixel().Y() + m_nRBOffset; + + Point aPos(m_aFromRB.GetPosPixel());aPos.Y() = nNewRBXPos; m_aFromRB.SetPosPixel(aPos); + aPos = m_aToFT.GetPosPixel(); aPos.Y() = nNewRBXPos + nRB_FT_Offset; m_aToFT.SetPosPixel(aPos); + aPos = m_aFromNF.GetPosPixel(); aPos.Y() = nNewRBXPos + nRB_FT_Offset; m_aFromNF.SetPosPixel(aPos); + aPos = m_aToNF.GetPosPixel(); aPos.Y() = nNewRBXPos + nRB_FT_Offset; m_aToNF.SetPosPixel(aPos); + } + else /*if(&m_aSendMailRB == pButton)*/ + { + Control* aMailControls[] = + { + &m_aFromRB, &m_aFromNF, &m_aToFT, &m_aToNF, + &m_aMailToFT, &m_aMailToLB, &m_aCopyToPB, + &m_aSubjectFT, &m_aSubjectED, + &m_aSendAsFT, &m_aSendAsLB, &m_aSendAsPB, + &m_aAttachmentFT, &m_aAttachmentED, + &m_aSendAllRB, &m_aSendDocumentsPB, 0 + }; + Control** pMailControl = aMailControls; + do + { + (*pMailControl)->Show(sal_True); + + } while(*(++pMailControl)); + + if(!m_aFromRB.IsChecked()) + m_aSendAllRB.Check(); + if(!m_aAttachmentED.GetText().Len()) + { + String sAttach( m_sDefaultAttachmentST ); + sAttach += '.'; + sAttach += lcl_GetExtensionForDocType( + (ULONG)m_aSendAsLB.GetEntryData(m_aSendAsLB.GetSelectEntryPos())); + m_aAttachmentED.SetText( sAttach ); + + } + m_aSeparatorFL.SetText(m_sSendMailST); + //fill mail address ListBox + if(!m_aMailToLB.GetEntryCount()) + { + SwMailMergeConfigItem& rConfigItem = m_pWizard->GetConfigItem(); + //select first column + uno::Reference< sdbcx::XColumnsSupplier > xColsSupp( rConfigItem.GetResultSet(), uno::UNO_QUERY); + //get the name of the actual columns + uno::Reference < container::XNameAccess> xColAccess = xColsSupp.is() ? xColsSupp->getColumns() : 0; + uno::Sequence< ::rtl::OUString > aFields; + if(xColAccess.is()) + aFields = xColAccess->getElementNames(); + const ::rtl::OUString* pFields = aFields.getConstArray(); + for(sal_Int32 nField = 0; nField < aFields.getLength(); ++nField) + m_aMailToLB.InsertEntry(pFields[nField]); + + m_aMailToLB.SelectEntryPos(0); + // then select the right one - may not be available + const ResStringArray& rHeaders = rConfigItem.GetDefaultAddressHeaders(); + String sEMailColumn = rHeaders.GetString( MM_PART_E_MAIL ); + Sequence< ::rtl::OUString> aAssignment = + rConfigItem.GetColumnAssignment( rConfigItem.GetCurrentDBData() ); + if(aAssignment.getLength() > MM_PART_E_MAIL && aAssignment[MM_PART_E_MAIL].getLength()) + sEMailColumn = aAssignment[MM_PART_E_MAIL]; + m_aMailToLB.SelectEntry(sEMailColumn); + // HTML format pre-selected + m_aSendAsLB.SelectEntryPos(3); + SendTypeHdl_Impl(&m_aSendAsLB); + } + if(m_aSendAllRB.GetPosPixel().Y() + m_nRBOffset != m_aFromRB.GetPosPixel().Y()) + { + long nRB_FT_Offset = m_nFromToRBPos - m_nFromToFTPos; + long nNewRBXPos = m_aSendAllRB.GetPosPixel().Y() + m_nRBOffset; + + Point aPos(m_aFromRB.GetPosPixel());aPos.Y() = nNewRBXPos; m_aFromRB.SetPosPixel(aPos); + aPos = m_aToFT.GetPosPixel(); aPos.Y() = nNewRBXPos + nRB_FT_Offset; m_aToFT.SetPosPixel(aPos); + aPos = m_aFromNF.GetPosPixel(); aPos.Y() = nNewRBXPos + nRB_FT_Offset; m_aFromNF.SetPosPixel(aPos); + aPos = m_aToNF.GetPosPixel(); aPos.Y() = nNewRBXPos + nRB_FT_Offset; m_aToNF.SetPosPixel(aPos); + } + } + m_aFromRB.GetClickHdl().Call(m_aFromRB.IsChecked() ? &m_aFromRB : 0); + + SetUpdateMode(FALSE); + return 0; +} +/*-- 22.08.2005 12:15:10--------------------------------------------------- + + -----------------------------------------------------------------------*/ +IMPL_LINK(SwMailMergeOutputPage, DocumentSelectionHdl_Impl, RadioButton*, pButton) +{ + sal_Bool bEnableFromTo = pButton == &m_aFromRB; + m_aFromNF.Enable(bEnableFromTo); + m_aToFT.Enable(bEnableFromTo); + m_aToNF.Enable(bEnableFromTo); + return 0; +} + +/*-- 16.04.2004 16:45:10--------------------------------------------------- + + -----------------------------------------------------------------------*/ +IMPL_LINK(SwMailMergeOutputPage, CopyToHdl_Impl, PushButton*, pButton) +{ + SwCopyToDialog* pDlg = new SwCopyToDialog(pButton); + pDlg->SetCC(m_sCC ); + pDlg->SetBCC(m_sBCC); + if(RET_OK == pDlg->Execute()) + { + m_sCC = pDlg->GetCC() ; + m_sBCC = pDlg->GetBCC(); + } + delete pDlg; + return 0; +} +/*-- 17.05.2004 13:51:02--------------------------------------------------- + + -----------------------------------------------------------------------*/ +IMPL_LINK(SwMailMergeOutputPage, SaveStartHdl_Impl, PushButton*, pButton) +{ + SwMailMergeConfigItem& rConfigItem = m_pWizard->GetConfigItem(); + SwView* pSourceView = rConfigItem.GetSourceView(); + DBG_ASSERT( pSourceView, "source view missing"); + if(pSourceView) + { + SfxViewFrame* pSourceViewFrm = pSourceView->GetViewFrame(); + uno::Reference< frame::XFrame > xFrame = + pSourceViewFrm->GetFrame()->GetFrameInterface(); + xFrame->getContainerWindow()->setVisible(sal_True); + pSourceViewFrm->GetDispatcher()->Execute(SID_SAVEDOC, SFX_CALLMODE_SYNCHRON); + xFrame->getContainerWindow()->setVisible(sal_False); + SwDocShell* pDocShell = pSourceView->GetDocShell(); + //if the document has been saved it's URL has to be stored for + // later use and it can be closed now + if(pDocShell->HasName() && !pDocShell->IsModified()) + { + INetURLObject aURL = pDocShell->GetMedium()->GetURLObject(); + //update the attachment name + if(!m_aAttachmentED.GetText().Len()) + { + if ( pDocShell->HasName() ) + { + m_aAttachmentED.SetText(aURL.getName( + INetURLObject::LAST_SEGMENT, true, INetURLObject::DECODE_WITH_CHARSET )); + } + } + + rConfigItem.AddSavedDocument( + aURL.GetMainURL(INetURLObject::DECODE_TO_IURI)); + pButton->Enable(FALSE); + m_pWizard->enableButtons(WZB_FINISH, sal_True); + pButton->Enable(FALSE); + + } + } + return 0; +} +/*-- 17.07.2008 08:09:06--------------------------------------------------- + + -----------------------------------------------------------------------*/ +IMPL_LINK(SwMailMergeOutputPage, SaveCancelHdl_Impl, Button*, EMPTYARG ) +{ + m_bCancelSaving = true; + return 0; +} +/*-- 17.05.2004 13:51:02--------------------------------------------------- + + -----------------------------------------------------------------------*/ +IMPL_LINK(SwMailMergeOutputPage, SaveOutputHdl_Impl, PushButton*, pButton) +{ + SwMailMergeConfigItem& rConfigItem = m_pWizard->GetConfigItem(); + SwView* pTargetView = rConfigItem.GetTargetView(); + DBG_ASSERT(pTargetView, "no target view exists"); + if(!pTargetView) + return 0; + + if(m_aSaveAsOneRB.IsChecked()) + { + String sFilter; + String sPath = SwMailMergeHelper::CallSaveAsDialog(sFilter); + if(!sPath.Len()) + return 0; + uno::Sequence< beans::PropertyValue > aValues(1); + beans::PropertyValue* pValues = aValues.getArray(); + pValues[0].Name = C2U("FilterName"); + pValues[0].Value <<= ::rtl::OUString(sFilter); + + uno::Reference< frame::XStorable > xStore( pTargetView->GetDocShell()->GetModel(), uno::UNO_QUERY); + sal_uInt32 nErrorCode = ERRCODE_NONE; + try + { + xStore->storeToURL( sPath, aValues ); + } + catch( task::ErrorCodeIOException& aErrorEx ) + { + nErrorCode = (sal_uInt32)aErrorEx.ErrCode; + } + catch( Exception& ) + { + nErrorCode = ERRCODE_IO_GENERAL; + } + if( nErrorCode != ERRCODE_NONE ) + { + SfxErrorContext aEc(ERRCTX_SFX_SAVEASDOC, pTargetView->GetDocShell()->GetTitle()); + ErrorHandler::HandleError( nErrorCode ); + } + } + else + { + sal_uInt32 nBegin = 0; + sal_uInt32 nEnd = 0; + if(m_aSaveIndividualRB.IsChecked()) + { + nBegin = 0; + nEnd = rConfigItem.GetMergedDocumentCount(); + } + else + { + nBegin = static_cast< sal_Int32 >(m_aFromNF.GetValue() - 1); + nEnd = static_cast< sal_Int32 >(m_aToNF.GetValue()); + if(nEnd > rConfigItem.GetMergedDocumentCount()) + nEnd = rConfigItem.GetMergedDocumentCount(); + } + String sFilter; + String sPath = SwMailMergeHelper::CallSaveAsDialog(sFilter); + if(!sPath.Len()) + return 0; + String sTargetTempURL = URIHelper::SmartRel2Abs( + INetURLObject(), utl::TempFile::CreateTempName(), + URIHelper::GetMaybeFileHdl()); + const SfxFilter *pSfxFlt = SwIoSystem::GetFilterOfFormat( + String::CreateFromAscii( FILTER_XML ), + SwDocShell::Factory().GetFilterContainer() ); + + uno::Sequence< beans::PropertyValue > aValues(1); + beans::PropertyValue* pValues = aValues.getArray(); + pValues[0].Name = C2U("FilterName"); + pValues[0].Value <<= ::rtl::OUString(pSfxFlt->GetFilterName()); + + uno::Reference< frame::XStorable > xStore( pTargetView->GetDocShell()->GetModel(), uno::UNO_QUERY); + sal_uInt32 nErrorCode = ERRCODE_NONE; + try + { + xStore->storeToURL( sTargetTempURL, aValues ); + } + catch( task::ErrorCodeIOException& aErrorEx ) + { + nErrorCode = (sal_uInt32)aErrorEx.ErrCode; + } + catch( Exception& ) + { + nErrorCode = ERRCODE_IO_GENERAL; + } + if( nErrorCode != ERRCODE_NONE ) + { + SfxErrorContext aEc(ERRCTX_SFX_SAVEASDOC, pTargetView->GetDocShell()->GetTitle()); + ErrorHandler::HandleError( nErrorCode ); + } + + SwView* pSourceView = rConfigItem.GetSourceView(); + PrintMonitor aSaveMonitor(this, PrintMonitor::MONITOR_TYPE_SAVE); + aSaveMonitor.aDocName.SetText(pSourceView->GetDocShell()->GetTitle(22)); + aSaveMonitor.aCancel.SetClickHdl(LINK(this, SwMailMergeOutputPage, SaveCancelHdl_Impl)); + aSaveMonitor.aPrinter.SetText( INetURLObject( sPath ).getFSysPath( INetURLObject::FSYS_DETECT ) ); + aSaveMonitor.ResizeControls(); + + m_bCancelSaving = false; + aSaveMonitor.Show(); + m_pWizard->enableButtons(WZB_CANCEL, sal_False); + + for(sal_uInt32 nDoc = nBegin; nDoc < nEnd && !m_bCancelSaving; ++nDoc) + { + SwDocMergeInfo& rInfo = rConfigItem.GetDocumentMergeInfo(nDoc); + INetURLObject aURL(sPath); + String sFile = aURL.GetBase(); + String sExtension = aURL.getExtension(); + if(!sExtension.Len()) + { + sExtension = pSfxFlt->GetWildcard()().GetToken(1, '.'); + sPath += '.'; + sPath += sExtension; + } + String sStat(SW_RES(STR_STATSTR_LETTER)); + sStat += ' '; + sStat += String::CreateFromInt32( nDoc ); + aSaveMonitor.aPrintInfo.SetText(sStat); + + //now extract a document from the target document + SfxObjectShellRef xTempDocShell( new SwDocShell( SFX_CREATE_MODE_STANDARD ) ); + xTempDocShell->DoInitNew( 0 ); + SfxViewFrame* pTempFrame = SfxViewFrame::CreateViewFrame( *xTempDocShell, 0, TRUE ); +// pTempFrame->GetFrame()->Appear(); + SwView* pTempView = static_cast<SwView*>( pTempFrame->GetViewShell() ); + pTargetView->GetWrtShell().StartAction(); + SwgReaderOption aOpt; + aOpt.SetTxtFmts( sal_True ); + aOpt.SetFrmFmts( sal_True ); + aOpt.SetPageDescs( sal_True ); + aOpt.SetNumRules( sal_True ); + aOpt.SetMerge( sal_False ); + pTempView->GetDocShell()->LoadStylesFromFile( + sTargetTempURL, aOpt, sal_True ); + + pTargetView->GetWrtShell().PastePages(pTempView->GetWrtShell(), + (USHORT)rInfo.nStartPageInTarget, (USHORT)rInfo.nEndPageInTarget ); + pTargetView->GetWrtShell().EndAction(); + //then save it + String sOutPath = aURL.GetMainURL(INetURLObject::DECODE_TO_IURI); + String sCounter('_'); + sCounter += String::CreateFromInt32(nDoc); + sOutPath.Insert(sCounter, sOutPath.Len() - sExtension.Len() - 1); + //SfxStringItem aName(SID_FILE_NAME, sOutPath); + //SfxStringItem aFilter(SID_FILTER_NAME, sFilter); + + while(true) + { + //time for other slots is needed + for(sal_Int16 r = 0; r < 10; ++r) + Application::Reschedule(); + bool bFailed = false; + try + { + pValues[0].Value <<= ::rtl::OUString(sFilter); + uno::Reference< frame::XStorable > xTempStore( xTempDocShell->GetModel(), uno::UNO_QUERY); + xTempStore->storeToURL( sOutPath, aValues ); + } + catch( const uno::Exception& ) + { + bFailed = true; + } + + if(bFailed) + { + SwSaveWarningBox_Impl aWarning( pButton, sOutPath ); + if(RET_OK == aWarning.Execute()) + sOutPath = aWarning.GetFileName(); + else + { + xTempDocShell->DoClose(); + return 0; + } + } + else + { + xTempDocShell->DoClose(); + break; + } + } + } + ::osl::File::remove( sTargetTempURL ); + } + m_pWizard->enableButtons(WZB_CANCEL, sal_True); + m_pWizard->enableButtons(WZB_FINISH, sal_True); + return 0; +} +/*-- 22.06.2004 11:51:30--------------------------------------------------- + + -----------------------------------------------------------------------*/ +IMPL_LINK(SwMailMergeOutputPage, PrinterChangeHdl_Impl, ListBox*, pBox) +{ + if( m_pDocumentPrinterCopy && pBox->GetSelectEntryPos() != LISTBOX_ENTRY_NOTFOUND ) + { + const QueueInfo* pInfo = Printer::GetQueueInfo( pBox->GetSelectEntry(), false ); + + if( pInfo ) + { + if ( !m_pTempPrinter ) + { + if( (m_pDocumentPrinterCopy->GetName() == pInfo->GetPrinterName()) && + (m_pDocumentPrinterCopy->GetDriverName() == pInfo->GetDriver()) ) + m_pTempPrinter = new Printer( m_pDocumentPrinterCopy->GetJobSetup() ); + else + m_pTempPrinter = new Printer( *pInfo ); + } + else + { + if( (m_pTempPrinter->GetName() != pInfo->GetPrinterName()) || + (m_pTempPrinter->GetDriverName() != pInfo->GetDriver()) ) + { + delete m_pTempPrinter; + m_pTempPrinter = new Printer( *pInfo ); + } + } + } + else if( ! m_pTempPrinter ) + m_pTempPrinter = new Printer(); + + m_aPrinterSettingsPB.Enable( m_pTempPrinter->HasSupport( SUPPORT_SETUPDIALOG ) ); + } + else + m_aPrinterSettingsPB.Disable(); + m_pWizard->GetConfigItem().SetSelectedPrinter( pBox->GetSelectEntry() ); + +// return m_pTempPrinter; + return 0; +} + +/*-- 17.05.2004 13:51:02--------------------------------------------------- + + -----------------------------------------------------------------------*/ +IMPL_LINK(SwMailMergeOutputPage, PrintHdl_Impl, PushButton*, EMPTYARG) +{ + SwView* pTargetView = m_pWizard->GetConfigItem().GetTargetView(); + DBG_ASSERT(pTargetView, "no target view exists"); + if(!pTargetView) + return 0; + + sal_uInt32 nBegin = 0; + sal_uInt32 nEnd = 0; + SwMailMergeConfigItem& rConfigItem = m_pWizard->GetConfigItem(); + if(m_aPrintAllRB.IsChecked()) + { + nBegin = 0; + nEnd = rConfigItem.GetMergedDocumentCount(); + } + else + { + nBegin = static_cast< sal_Int32 >(m_aFromNF.GetValue() - 1); + nEnd = static_cast< sal_Int32 >(m_aToNF.GetValue()); + if(nEnd > rConfigItem.GetMergedDocumentCount()) + nEnd = rConfigItem.GetMergedDocumentCount(); + } + rConfigItem.SetPrintRange( (USHORT)nBegin, (USHORT)nEnd ); + SwDocMergeInfo& rStartInfo = rConfigItem.GetDocumentMergeInfo(nBegin); + SwDocMergeInfo& rEndInfo = rConfigItem.GetDocumentMergeInfo(nEnd - 1); + + rtl::OUString sPages(rtl::OUString::valueOf( rStartInfo.nStartPageInTarget )); + sPages += rtl::OUString::createFromAscii( " - "); + sPages += rtl::OUString::valueOf( rEndInfo.nEndPageInTarget ); + + SwWrtShell& rSh = pTargetView->GetWrtShell(); + pTargetView->SetMailMergeConfigItem(&rConfigItem, 0, sal_False); + if(m_pTempPrinter) + { + m_pDocumentPrinterCopy->SetPrinterProps(m_pTempPrinter); + pTargetView->SetPrinter(m_pDocumentPrinterCopy->Clone()); + } + + SfxObjectShell* pObjSh = pTargetView->GetViewFrame()->GetObjectShell(); + SFX_APP()->NotifyEvent(SfxEventHint(SW_EVENT_MAIL_MERGE, SwDocShell::GetEventName(STR_SW_EVENT_MAIL_MERGE), pObjSh)); + rSh.GetNewDBMgr()->SetMergeType( DBMGR_MERGE_DOCUMENTS ); + //SfxDispatcher *pDis = pTargetView->GetViewFrame()->GetDispatcher(); + SfxBoolItem aMergeSilent(SID_SILENT, sal_False); + m_pWizard->enableButtons(WZB_CANCEL, sal_False); + + uno::Sequence < beans::PropertyValue > aProps( 2 ); + aProps[0]. Name = rtl::OUString::createFromAscii("MonitorVisible"); + aProps[0].Value <<= sal_True; + aProps[1]. Name = rtl::OUString::createFromAscii("Pages"); + aProps[1]. Value <<= sPages; + + pTargetView->ExecPrint( aProps, false, true ); + SFX_APP()->NotifyEvent(SfxEventHint(SW_EVENT_MAIL_MERGE_END, SwDocShell::GetEventName(STR_SW_EVENT_MAIL_MERGE_END), pObjSh)); + + pTargetView->SetMailMergeConfigItem(0, 0, sal_False); + m_pWizard->enableButtons(WZB_CANCEL, sal_True); + m_pWizard->enableButtons(WZB_FINISH, sal_True); + return 0; +} +/*-- 17.05.2004 13:51:02--------------------------------------------------- + + -----------------------------------------------------------------------*/ +IMPL_LINK(SwMailMergeOutputPage, PrinterSetupHdl_Impl, PushButton*, pButton) +{ + if( !m_pTempPrinter ) + PrinterChangeHdl_Impl(&m_aPrinterLB); + if(m_pTempPrinter) + m_pTempPrinter->Setup(pButton); + return 0; +} +/*-- 14.06.2004 09:34:01--------------------------------------------------- + + -----------------------------------------------------------------------*/ +IMPL_LINK(SwMailMergeOutputPage, SendTypeHdl_Impl, ListBox*, pBox) +{ + ULONG nDocType = (ULONG)pBox->GetEntryData(pBox->GetSelectEntryPos()); + sal_Bool bEnable = MM_DOCTYPE_HTML != nDocType && MM_DOCTYPE_TEXT != nDocType; + m_aSendAsPB.Enable( bEnable ); + m_aAttachmentFT.Enable( bEnable ); + m_aAttachmentED.Enable( bEnable ); + if(bEnable) + { + //add the correct extension + String sAttach(m_aAttachmentED.GetText()); + //do nothing if the user has removed the name - the warning will come early enough + if(sAttach.Len()) + { + xub_StrLen nTokenCount = sAttach.GetTokenCount( '.' ); + if( 2 > nTokenCount) + { + sAttach += '.'; + ++nTokenCount; + } + sAttach.SetToken( nTokenCount - 1, '.', lcl_GetExtensionForDocType( nDocType )); + m_aAttachmentED.SetText(sAttach); + } + } + return 0; +} +/*-- 17.05.2004 13:51:02--------------------------------------------------- + + -----------------------------------------------------------------------*/ +IMPL_LINK(SwMailMergeOutputPage, SendAsHdl_Impl, PushButton*, pButton) +{ + SwMailBodyDialog* pDlg = new SwMailBodyDialog(pButton, m_pWizard); + pDlg->SetBody(m_sBody); + if(RET_OK == pDlg->Execute()) + { + m_sBody = pDlg->GetBody(); + } + return 0; +} +/*-- 21.05.2004 12:03:25--------------------------------------------------- + Send documents as e-mail + -----------------------------------------------------------------------*/ +IMPL_LINK(SwMailMergeOutputPage, SendDocumentsHdl_Impl, PushButton*, pButton) +{ + SwMailMergeConfigItem& rConfigItem = m_pWizard->GetConfigItem(); + + //get the composed document + SwView* pTargetView = rConfigItem.GetTargetView(); + DBG_ASSERT(pTargetView, "no target view exists"); + if(!pTargetView) + return 0; + + if(!rConfigItem.GetMailServer().getLength() || + !SwMailMergeHelper::CheckMailAddress(rConfigItem.GetMailAddress()) ) + { + QueryBox aQuery(pButton, WB_YES_NO_CANCEL, m_sConfigureMail); + USHORT nRet = aQuery.Execute(); + if(RET_YES == nRet ) + { + SfxAllItemSet aSet(pTargetView->GetPool()); + SwMailConfigDlg* pDlg = new SwMailConfigDlg(pButton, aSet); + nRet = pDlg->Execute(); + delete pDlg; + } + + if(nRet != RET_OK && nRet != RET_YES) + return 0; + } + //create the send dialog + SwSendMailDialog* pDlg = new SwSendMailDialog( pButton, rConfigItem ); + //add the documents + sal_uInt32 nBegin = 0; + sal_uInt32 nEnd = 0; + if(m_aSendAllRB.IsChecked()) + { + nBegin = 0; + nEnd = rConfigItem.GetMergedDocumentCount(); + } + else + { + nBegin = static_cast< sal_Int32 >(m_aFromNF.GetValue() - 1); + nEnd = static_cast< sal_Int32 >(m_aToNF.GetValue()); + if(nEnd > rConfigItem.GetMergedDocumentCount()) + nEnd = rConfigItem.GetMergedDocumentCount(); + } + bool bAsBody = false; + bool bIsPDF = false; + rtl_TextEncoding eEncoding = ::gsl_getSystemTextEncoding(); + SfxFilterContainer* pFilterContainer = SwDocShell::Factory().GetFilterContainer(); + const SfxFilter *pSfxFlt = 0; + ULONG nDocType = (ULONG)m_aSendAsLB.GetEntryData(m_aSendAsLB.GetSelectEntryPos()); + String sExtension = lcl_GetExtensionForDocType(nDocType); + switch( nDocType ) + { + case MM_DOCTYPE_OOO : break; + case MM_DOCTYPE_PDF : bIsPDF = true; break; + case MM_DOCTYPE_WORD: + { + //the method SwIOSystemGetFilterOfFormat( ) returns the template filter + //because it uses the same user data :-( + SfxFilterMatcher aMatcher( pFilterContainer->GetName() ); + SfxFilterMatcherIter aIter( &aMatcher ); + const SfxFilter* pFilter = aIter.First(); + String sFilterUserData( String::CreateFromAscii( FILTER_WW8 )); + while ( pFilter ) + { + if( pFilter->GetUserData() == sFilterUserData && pFilter->CanExport() ) + { + pSfxFlt = pFilter; + break; + } + pFilter = aIter.Next(); + } + + } + break; + case MM_DOCTYPE_HTML: + { + bAsBody = true; + SvxHtmlOptions* pHtmlOptions = SvxHtmlOptions::Get(); + eEncoding = pHtmlOptions->GetTextEncoding(); + } + break; + case MM_DOCTYPE_TEXT: + bAsBody = true; + break; + } + if(!pSfxFlt) + pSfxFlt = pFilterContainer->GetFilter4Extension(sExtension, SFX_FILTER_EXPORT); + + if(!pSfxFlt) + return 0; + String sMimeType = pSfxFlt->GetMimeType(); + + if(!m_aSubjectED.GetText().Len()) + { + SwSendQueryBox_Impl aQuery(pButton, m_sNoSubjectQueryST); + aQuery.SetIsEmptyTextAllowed(true); + aQuery.SetValue(m_sNoSubjectST); + if(RET_OK == aQuery.Execute()) + { + if(aQuery.GetValue() != m_sNoSubjectST) + m_aSubjectED.SetText(aQuery.GetValue()); + } + else + return 0; + } + if(!bAsBody && !m_aAttachmentED.GetText().Len()) + { + SwSendQueryBox_Impl aQuery(pButton, m_sNoAttachmentNameST); + aQuery.SetIsEmptyTextAllowed(false); + if(RET_OK == aQuery.Execute()) + { + String sAttach(aQuery.GetValue()); + xub_StrLen nTokenCount = sAttach.GetTokenCount( '.' ); + if( 2 > nTokenCount) + { + sAttach += '.'; + ++nTokenCount; + } + sAttach.SetToken( nTokenCount - 1, '.', lcl_GetExtensionForDocType( + (ULONG)m_aSendAsLB.GetEntryData(m_aSendAsLB.GetSelectEntryPos()))); + m_aAttachmentED.SetText(sAttach); + } + else + return 0; + } + SfxStringItem aFilterName( SID_FILTER_NAME, pSfxFlt->GetFilterName() ); + String sEMailColumn = m_aMailToLB.GetSelectEntry(); + DBG_ASSERT( sEMailColumn.Len(), "No email column selected"); + Reference< sdbcx::XColumnsSupplier > xColsSupp( rConfigItem.GetResultSet(), UNO_QUERY); + Reference < container::XNameAccess> xColAccess = xColsSupp.is() ? xColsSupp->getColumns() : 0; + if(!sEMailColumn.Len() || !xColAccess.is() || !xColAccess->hasByName(sEMailColumn)) + return 0; + + String sFilterOptions; + if(MM_DOCTYPE_TEXT == nDocType) + { + SwAsciiOptions aOpt; + USHORT nAppScriptType = GetI18NScriptTypeOfLanguage( (USHORT)GetAppLanguage() ); + USHORT nWhich = GetWhichOfScript( RES_CHRATR_LANGUAGE, nAppScriptType); + aOpt.SetLanguage( ((SvxLanguageItem&)pTargetView->GetWrtShell(). + GetDefault( nWhich )).GetLanguage()); + aOpt.SetParaFlags( LINEEND_CR ); + aOpt.WriteUserData( sFilterOptions ); + } + String sTargetTempURL = URIHelper::SmartRel2Abs( + INetURLObject(), utl::TempFile::CreateTempName(), + URIHelper::GetMaybeFileHdl()); + const SfxFilter *pTargetSfxFlt = SwIoSystem::GetFilterOfFormat( + String::CreateFromAscii( FILTER_XML ), + SwDocShell::Factory().GetFilterContainer() ); + + uno::Sequence< beans::PropertyValue > aValues(1); + beans::PropertyValue* pValues = aValues.getArray(); + pValues[0].Name = C2U("FilterName"); + pValues[0].Value <<= ::rtl::OUString(pTargetSfxFlt->GetFilterName()); + + uno::Reference< frame::XStorable > xStore( pTargetView->GetDocShell()->GetModel(), uno::UNO_QUERY); + xStore->storeToURL( sTargetTempURL, aValues ); + + pDlg->SetDocumentCount( nEnd ); + pDlg->ShowDialog(); + //help to force painting the dialog + //TODO/CLEANUP + //Sollbruchstelle + for ( sal_Int16 i = 0; i < 25; i++) + Application::Reschedule(); + for(sal_uInt32 nDoc = nBegin; nDoc < nEnd; ++nDoc) + { + m_pWizard->EnterWait(); + SwDocMergeInfo& rInfo = rConfigItem.GetDocumentMergeInfo(nDoc); + + //now extract a document from the target document + SfxObjectShellRef xTempDocShell( new SwDocShell( SFX_CREATE_MODE_STANDARD ) ); + xTempDocShell->DoInitNew( 0 ); + SfxViewFrame* pTempFrame = SfxViewFrame::CreateViewFrame( *xTempDocShell, 0, TRUE ); +// pTempFrame->GetFrame()->Appear(); + SwView* pTempView = static_cast<SwView*>( pTempFrame->GetViewShell() ); + pTargetView->GetWrtShell().StartAction(); + SwgReaderOption aOpt; + aOpt.SetTxtFmts( sal_True ); + aOpt.SetFrmFmts( sal_True ); + aOpt.SetPageDescs( sal_True ); + aOpt.SetNumRules( sal_True ); + aOpt.SetMerge( sal_False ); + pTempView->GetDocShell()->LoadStylesFromFile( + sTargetTempURL, aOpt, sal_True ); + pTargetView->GetWrtShell().PastePages(pTempView->GetWrtShell(), + (USHORT)rInfo.nStartPageInTarget, (USHORT)rInfo.nEndPageInTarget ); + pTargetView->GetWrtShell().EndAction(); + + //then save it + SfxStringItem aName(SID_FILE_NAME, + URIHelper::SmartRel2Abs( + INetURLObject(), utl::TempFile::CreateTempName(0), + URIHelper::GetMaybeFileHdl()) ); + +/* if(bIsPDF) + { + SfxDispatcher* pSfxDispatcher = pTempView->GetViewFrame()->GetDispatcher(); + pSfxDispatcher->Execute( + SID_DIRECTEXPORTDOCASPDF, + SFX_CALLMODE_SYNCHRON, &aName, &aFilterName, 0L ); + } + else*/ + { + uno::Sequence< beans::PropertyValue > aFilterValues(MM_DOCTYPE_TEXT == nDocType ? 2 : 1); + beans::PropertyValue* pFilterValues = aFilterValues.getArray(); + pFilterValues[0].Name = C2U("FilterName"); + pFilterValues[0].Value <<= ::rtl::OUString(pSfxFlt->GetFilterName()); + if(MM_DOCTYPE_TEXT == nDocType) + { + pFilterValues[1].Name = C2U("FilterOptions"); + pFilterValues[1].Value <<= ::rtl::OUString(sFilterOptions); + } + + uno::Reference< frame::XStorable > xTempStore( pTempView->GetDocShell()->GetModel(), uno::UNO_QUERY); + xTempStore->storeToURL( aName.GetValue(), aFilterValues ); + } + xTempDocShell->DoClose(); + +#ifdef DBG_UTIL + sal_Int32 nTarget = +#endif + rConfigItem.MoveResultSet(rInfo.nDBRow); + DBG_ASSERT( nTarget == rInfo.nDBRow, "row of current document could not be selected"); + DBG_ASSERT( sEMailColumn.Len(), "No email column selected"); + ::rtl::OUString sEMail = lcl_GetColumnValueOf(sEMailColumn, xColAccess); + SwMailDescriptor aDesc; + aDesc.sEMail = sEMail; + rtl::OUString sBody; + if(bAsBody) + { + { + //read in the temporary file and use it as mail body + SfxMedium aMedium( aName.GetValue(), STREAM_READ, TRUE); + SvStream* pInStream = aMedium.GetInStream(); + if(pInStream) + pInStream->SetStreamCharSet( eEncoding ); + else + { + DBG_ERROR("no output file created?"); + continue; + } + ByteString sLine; + sal_Bool bDone = pInStream->ReadLine( sLine ); + while ( bDone ) + { + sBody += rtl::OUString(String(sLine, eEncoding)); + sBody += rtl::OUString('\n'); + bDone = pInStream->ReadLine( sLine ); + } + } + //remove the temporary file + SWUnoHelper::UCB_DeleteFile( aName.GetValue() ); + } + else + { + sBody = m_sBody; + aDesc.sAttachmentURL = aName.GetValue(); + String sAttachment(m_aAttachmentED.GetText()); + xub_StrLen nTokenCount = sAttachment.GetTokenCount( '.' ); + if( 2 > nTokenCount) + { + sAttachment += '.'; + sAttachment.SetToken( nTokenCount, '.', sExtension); + } + else if(sAttachment.GetToken( nTokenCount - 1, '.') != sExtension) + sAttachment += sExtension; + aDesc.sAttachmentName = sAttachment; + aDesc.sMimeType = sMimeType; + + if(rConfigItem.IsGreetingLine(sal_True)) + { + ::rtl::OUString sNameColumn = rConfigItem.GetAssignedColumn(MM_PART_LASTNAME); + ::rtl::OUString sName = lcl_GetColumnValueOf(sNameColumn, xColAccess); + String sGreeting; + if(sName.getLength() && rConfigItem.IsIndividualGreeting(sal_True)) + { + ::rtl::OUString sGenderColumn = rConfigItem.GetAssignedColumn(MM_PART_GENDER); + const ::rtl::OUString& sFemaleValue = rConfigItem.GetFemaleGenderValue(); + ::rtl::OUString sGenderValue = lcl_GetColumnValueOf(sGenderColumn, xColAccess); + SwMailMergeConfigItem::Gender eGenderType = sGenderValue == sFemaleValue ? + SwMailMergeConfigItem::FEMALE : + SwMailMergeConfigItem::MALE; + + sGreeting = SwAddressPreview::FillData( + rConfigItem.GetGreetings(eGenderType) + [rConfigItem.GetCurrentGreeting(eGenderType)], + rConfigItem); + } + else + { + sGreeting = + rConfigItem.GetGreetings(SwMailMergeConfigItem::NEUTRAL) + [rConfigItem.GetCurrentGreeting(SwMailMergeConfigItem::NEUTRAL)]; + + } + sGreeting += '\n'; + ::rtl::OUString sTemp( sGreeting ); + sTemp += sBody; + sBody = sTemp; + } + } + aDesc.sBodyContent = sBody; + if(MM_DOCTYPE_HTML == nDocType) + { + aDesc.sBodyMimeType = ::rtl::OUString::createFromAscii("text/html; charset="); + aDesc.sBodyMimeType += ::rtl::OUString::createFromAscii( + rtl_getBestMimeCharsetFromTextEncoding( eEncoding )); + } + else + aDesc.sBodyMimeType = + ::rtl::OUString::createFromAscii("text/plain; charset=UTF-8; format=flowed"); + + aDesc.sSubject = m_aSubjectED.GetText(); + aDesc.sCC = m_sCC; + aDesc.sBCC = m_sBCC; + pDlg->AddDocument( aDesc ); + //help to force painting the dialog + for ( sal_Int16 i = 0; i < 25; i++) + Application::Reschedule(); + //stop creating of data when dialog has been closed + if(!pDlg->IsVisible()) + { + m_pWizard->LeaveWait(); + break; + } + m_pWizard->LeaveWait(); + } + pDlg->EnableDesctruction(); + ::osl::File::remove( sTargetTempURL ); + + m_pWizard->enableButtons(WZB_FINISH, sal_True); + //the dialog deletes itself + //delete pDlg; + return 0; +} |