summaryrefslogtreecommitdiff
path: root/sw/source/ui/dbui/mailmergechildwindow.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'sw/source/ui/dbui/mailmergechildwindow.cxx')
-rw-r--r--sw/source/ui/dbui/mailmergechildwindow.cxx796
1 files changed, 796 insertions, 0 deletions
diff --git a/sw/source/ui/dbui/mailmergechildwindow.cxx b/sw/source/ui/dbui/mailmergechildwindow.cxx
new file mode 100644
index 000000000000..276f7850f91e
--- /dev/null
+++ b/sw/source/ui/dbui/mailmergechildwindow.cxx
@@ -0,0 +1,796 @@
+/*************************************************************************
+ *
+ * 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"
+
+
+#include <sfx2/viewfrm.hxx>
+#include <sfx2/dispatch.hxx>
+
+#include <cmdid.h>
+#include <swmodule.hxx>
+#include <view.hxx>
+#include <edtwin.hxx>
+#include <vcl/svapp.hxx>
+#include <mailmergechildwindow.hxx>
+#include <mmoutputpage.hxx>
+#include <mmconfigitem.hxx>
+#include <comphelper/processfactory.hxx>
+#include "com/sun/star/mail/XSmtpService.hpp"
+#include "com/sun/star/mail/MailServiceType.hpp"
+#include <rtl/ref.hxx>
+#include <maildispatcher.hxx>
+#include <imaildsplistener.hxx>
+#include <swunohelper.hxx>
+#include <svtools/svmedit.hxx>
+#include <vcl/msgbox.hxx>
+#include <vcl/image.hxx>
+#include <mailmergechildwindow.hrc>
+#include <dbui.hrc>
+#include <helpid.h>
+
+using namespace ::com::sun::star;
+
+SFX_IMPL_FLOATINGWINDOW( SwMailMergeChildWindow, FN_MAILMERGE_CHILDWINDOW )
+//SFX_IMPL_FLOATINGWINDOW( SwSendMailChildWindow, FN_MAILMERGE_SENDMAIL_CHILDWINDOW )
+
+/*------------------------------------------------------------------------
+ Beschreibung:
+------------------------------------------------------------------------*/
+
+SwMailMergeChildWindow::SwMailMergeChildWindow( Window* _pParent,
+ sal_uInt16 nId,
+ SfxBindings* pBindings,
+ SfxChildWinInfo* pInfo ) :
+ SfxChildWindow( _pParent, nId )
+{
+ pWindow = new SwMailMergeChildWin( pBindings, this, _pParent);
+
+ if (!pInfo->aSize.Width() || !pInfo->aSize.Height())
+ {
+ SwView* pActiveView = ::GetActiveView();
+ if(pActiveView)
+ {
+ const SwEditWin &rEditWin = pActiveView->GetEditWin();
+ pWindow->SetPosPixel(rEditWin.OutputToScreenPixel(Point(0, 0)));
+ }
+ else
+ pWindow->SetPosPixel(_pParent->OutputToScreenPixel(Point(0, 0)));
+ pInfo->aPos = pWindow->GetPosPixel();
+ pInfo->aSize = pWindow->GetSizePixel();
+ }
+
+ ((SwMailMergeChildWin *)pWindow)->Initialize(pInfo);
+ pWindow->Show();
+}
+
+/*------------------------------------------------------------------------
+ Beschreibung:
+------------------------------------------------------------------------*/
+
+SwMailMergeChildWin::SwMailMergeChildWin( SfxBindings* _pBindings,
+ SfxChildWindow* pChild,
+ Window *pParent) :
+ SfxFloatingWindow(_pBindings, pChild, pParent, SW_RES(DLG_MAILMERGECHILD)),
+ m_aBackTB(this, SW_RES( TB_BACK ))
+{
+ m_aBackTB.SetSelectHdl(LINK(this, SwMailMergeChildWin, BackHdl));
+ sal_uInt16 nIResId = GetSettings().GetStyleSettings().GetHighContrastMode() ?
+ ILIST_TBX_HC : ILIST_TBX;
+ ResId aResId( nIResId, *pSwResMgr );
+ ImageList aIList(aResId);
+ FreeResource();
+
+ m_aBackTB.SetItemImage( 1, aIList.GetImage(FN_SHOW_ROOT) );
+ m_aBackTB.SetButtonType( BUTTON_SYMBOLTEXT );
+ Size aSz = m_aBackTB.CalcWindowSizePixel(1);
+ m_aBackTB.SetPosSizePixel( Point(), aSz );
+ SetOutputSizePixel(aSz);
+ m_aBackTB.Show();
+}
+
+/*------------------------------------------------------------------------
+ Beschreibung:
+------------------------------------------------------------------------*/
+
+SwMailMergeChildWin::~SwMailMergeChildWin()
+{
+}
+
+/*--------------------------------------------------------------------
+ Beschreibung:
+ --------------------------------------------------------------------*/
+
+IMPL_LINK( SwMailMergeChildWin, BackHdl, ToolBox *, EMPTYARG )
+{
+ GetBindings().GetDispatcher()->Execute(FN_MAILMERGE_WIZARD, SFX_CALLMODE_ASYNCHRON);
+ return 0;
+}
+
+/*-- 26.05.2004 10:12:44---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void SwMailMergeChildWin::FillInfo(SfxChildWinInfo& rInfo) const
+{
+ SfxFloatingWindow::FillInfo(rInfo);
+ rInfo.aWinState.Erase();
+ rInfo.bVisible = sal_False;
+}
+/*-- 21.05.2004 14:07:37---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+struct SwSendMailDialog_Impl
+{
+ friend class SwSendMailDialog;
+ ::osl::Mutex aDescriptorMutex;
+
+ ::std::vector< SwMailDescriptor > aDescriptors;
+ sal_uInt32 nCurrentDescriptor;
+ sal_uInt32 nDocumentCount;
+ ::rtl::Reference< MailDispatcher > xMailDispatcher;
+ ::rtl::Reference< IMailDispatcherListener> xMailListener;
+ uno::Reference< mail::XMailService > xConnectedMailService;
+ uno::Reference< mail::XMailService > xConnectedInMailService;
+ Timer aRemoveTimer;
+
+
+ SwSendMailDialog_Impl() :
+ nCurrentDescriptor(0),
+ nDocumentCount(0)
+ {
+ aRemoveTimer.SetTimeout(500);
+ }
+
+ ~SwSendMailDialog_Impl()
+ {
+ // Shutdown must be called when the last reference to the
+ // mail dispatcher will be released in order to force a
+ // shutdown of the mail dispatcher thread.
+ // 'join' with the mail dispatcher thread leads to a
+ // deadlock (SolarMutex).
+ if( xMailDispatcher.is() && !xMailDispatcher->isShutdownRequested() )
+ xMailDispatcher->shutdown();
+ }
+ const SwMailDescriptor* GetNextDescriptor();
+};
+
+const SwMailDescriptor* SwSendMailDialog_Impl::GetNextDescriptor()
+{
+ ::osl::MutexGuard aGuard(aDescriptorMutex);
+ if(nCurrentDescriptor < aDescriptors.size())
+ {
+ ++nCurrentDescriptor;
+ return &aDescriptors[nCurrentDescriptor - 1];
+ }
+ return 0;
+}
+
+/*-- 23.06.2004 10:19:55---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+class SwMailDispatcherListener_Impl : public IMailDispatcherListener
+{
+ SwSendMailDialog* m_pSendMailDialog;
+
+public:
+ SwMailDispatcherListener_Impl(SwSendMailDialog& rParentDlg);
+ ~SwMailDispatcherListener_Impl();
+
+ virtual void started(::rtl::Reference<MailDispatcher> xMailDispatcher);
+ virtual void stopped(::rtl::Reference<MailDispatcher> xMailDispatcher);
+ virtual void idle(::rtl::Reference<MailDispatcher> xMailDispatcher);
+ virtual void mailDelivered(::rtl::Reference<MailDispatcher> xMailDispatcher,
+ uno::Reference< mail::XMailMessage> xMailMessage);
+ virtual void mailDeliveryError(::rtl::Reference<MailDispatcher> xMailDispatcher,
+ uno::Reference< mail::XMailMessage> xMailMessage, const rtl::OUString& sErrorMessage);
+
+ static void DeleteAttachments( uno::Reference< mail::XMailMessage >& xMessage );
+};
+
+/*-- 23.06.2004 10:04:48---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+SwMailDispatcherListener_Impl::SwMailDispatcherListener_Impl(SwSendMailDialog& rParentDlg) :
+ m_pSendMailDialog(&rParentDlg)
+{
+}
+/*-- 23.06.2004 10:04:48---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+SwMailDispatcherListener_Impl::~SwMailDispatcherListener_Impl()
+{
+}
+/*-- 23.06.2004 10:04:49---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void SwMailDispatcherListener_Impl::started(::rtl::Reference<MailDispatcher> /*xMailDispatcher*/)
+{
+}
+/*-- 23.06.2004 10:04:49---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void SwMailDispatcherListener_Impl::stopped(
+ ::rtl::Reference<MailDispatcher> /*xMailDispatcher*/)
+{
+}
+/*-- 23.06.2004 10:04:49---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void SwMailDispatcherListener_Impl::idle(::rtl::Reference<MailDispatcher> /*xMailDispatcher*/)
+{
+ vos::OGuard aGuard(Application::GetSolarMutex());
+ m_pSendMailDialog->AllMailsSent();
+}
+/*-- 23.06.2004 10:04:50---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void SwMailDispatcherListener_Impl::mailDelivered(
+ ::rtl::Reference<MailDispatcher> /*xMailDispatcher*/,
+ uno::Reference< mail::XMailMessage> xMailMessage)
+{
+ vos::OGuard aGuard(Application::GetSolarMutex());
+ m_pSendMailDialog->DocumentSent( xMailMessage, true, 0 );
+ DeleteAttachments( xMailMessage );
+}
+/*-- 23.06.2004 10:04:51---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void SwMailDispatcherListener_Impl::mailDeliveryError(
+ ::rtl::Reference<MailDispatcher> /*xMailDispatcher*/,
+ uno::Reference< mail::XMailMessage> xMailMessage,
+ const rtl::OUString& sErrorMessage)
+{
+ vos::OGuard aGuard(Application::GetSolarMutex());
+ m_pSendMailDialog->DocumentSent( xMailMessage, false, &sErrorMessage );
+ DeleteAttachments( xMailMessage );
+}
+/*-- 23.06.2004 12:30:39---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void SwMailDispatcherListener_Impl::DeleteAttachments( uno::Reference< mail::XMailMessage >& xMessage )
+{
+ uno::Sequence< mail::MailAttachment > aAttachments = xMessage->getAttachments();
+
+ for(sal_Int32 nFile = 0; nFile < aAttachments.getLength(); ++nFile)
+ {
+ try
+ {
+ uno::Reference< beans::XPropertySet > xTransferableProperties( aAttachments[nFile].Data, uno::UNO_QUERY_THROW);
+ if( xTransferableProperties.is() )
+ {
+ ::rtl::OUString sURL;
+ xTransferableProperties->getPropertyValue( ::rtl::OUString::createFromAscii("URL") ) >>= sURL;
+ if(sURL.getLength())
+ SWUnoHelper::UCB_DeleteFile( sURL );
+ }
+ }
+ catch( const uno::Exception& rEx )
+ {
+ (void)rEx;
+ }
+ }
+}
+/*-- 07.07.2004 13:45:51---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+class SwSendWarningBox_Impl : public ModalDialog
+{
+ FixedImage aWarningImageIM;
+ FixedInfo aWarningFI;
+ FixedText aDetailFT;
+ MultiLineEdit aDetailED;
+ FixedLine aSeparatorFL;
+ OKButton aOKPB;
+
+public:
+ SwSendWarningBox_Impl(Window* pParent, const String& rDetails);
+ ~SwSendWarningBox_Impl();
+};
+/*-- 07.07.2004 13:52:41---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+SwSendWarningBox_Impl::SwSendWarningBox_Impl(Window* pParent, const String& rDetails) :
+ ModalDialog(pParent, SW_RES( DLG_MM_SENDWARNING )),
+ aWarningImageIM(this, SW_RES( IM_WARNING )),
+ aWarningFI( this, SW_RES( FI_WARNING )),
+ aDetailFT( this, SW_RES( FT_DETAILS )),
+ aDetailED( this, SW_RES( ED_DETAILS )),
+ aSeparatorFL( this, SW_RES( FL_SEPARATOR )),
+ aOKPB( this, SW_RES(PB_OK))
+{
+ FreeResource();
+ aWarningImageIM.SetImage(WarningBox::GetStandardImage());
+ aDetailED.SetText(rDetails);
+}
+/*-- 07.07.2004 13:52:41---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+SwSendWarningBox_Impl::~SwSendWarningBox_Impl()
+{
+}
+
+/*-- 21.05.2004 14:10:39---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+#define ITEMID_TASK 1
+#define ITEMID_STATUS 2
+
+SwSendMailDialog::SwSendMailDialog(Window *pParent, SwMailMergeConfigItem& rConfigItem) :
+ ModelessDialog /*SfxModalDialog*/(pParent, SW_RES(DLG_MM_SENDMAILS)),
+#ifdef MSC
+#pragma warning (disable : 4355)
+#endif
+ m_aStatusFL( this, SW_RES( FL_STATUS )),
+ m_aStatusFT( this, SW_RES( FT_STATUS1 )),
+ m_aTransferStatusFL( this, SW_RES( FL_TRANSFERSTATUS )),
+ m_aTransferStatusFT( this, SW_RES( FT_TRANSFERSTATUS )),
+ m_PausedFI(this, SW_RES( FI_PAUSED )),
+ m_aProgressBar( this, SW_RES( PB_PROGRESS )),
+ m_aErrorStatusFT( this, SW_RES( FT_ERRORSTATUS )),
+ m_aDetailsPB( this, SW_RES( PB_DETAILS )),
+ m_aStatusHB( this, WB_BUTTONSTYLE | WB_BOTTOMBORDER ),
+ m_aStatusLB( this, SW_RES( LB_STATUS )),
+ m_aSeparatorFL( this, SW_RES( FL_SEPARATOR )),
+ m_aStopPB( this, SW_RES( PB_STOP )),
+ m_aClosePB( this, SW_RES( PB_CLOSE )),
+#ifdef MSC
+#pragma warning (default : 4355)
+#endif
+ m_sMore(m_aDetailsPB.GetText()),
+ m_sLess(SW_RES(ST_LESS)),
+ m_sContinue(SW_RES( ST_CONTINUE )),
+ m_sStop(m_aStopPB.GetText()),
+ m_sSend(SW_RES(ST_SEND)),
+ m_sTransferStatus(m_aTransferStatusFT.GetText()),
+ m_sErrorStatus( m_aErrorStatusFT.GetText()),
+ m_sSendingTo( SW_RES(ST_SENDINGTO )),
+ m_sCompleted( SW_RES(ST_COMPLETED )),
+ m_sFailed( SW_RES(ST_FAILED )),
+ m_sTerminateQuery( SW_RES( ST_TERMINATEQUERY )),
+ m_bCancel(false),
+ m_bDesctructionEnabled(false),
+ m_aImageList( SW_RES( ILIST ) ),
+ m_aImageListHC( SW_RES( ILIST_HC ) ),
+ m_pImpl(new SwSendMailDialog_Impl),
+ m_pConfigItem(&rConfigItem),
+ m_nSendCount(0),
+ m_nErrorCount(0)
+{
+ m_nStatusHeight = m_aSeparatorFL.GetPosPixel().Y() - m_aStatusLB.GetPosPixel().Y();
+ String sTask(SW_RES(ST_TASK));
+ String sStatus(SW_RES(ST_STATUS));
+ m_aStatusLB.SetHelpId(HID_MM_SENDMAILS_STATUSLB);
+
+ FreeResource();
+
+ m_aDetailsPB.SetClickHdl(LINK( this, SwSendMailDialog, DetailsHdl_Impl));
+ m_aStopPB.SetClickHdl(LINK( this, SwSendMailDialog, StopHdl_Impl));
+ m_aClosePB.SetClickHdl(LINK( this, SwSendMailDialog, CloseHdl_Impl));
+
+
+ Size aLBSize(m_aStatusLB.GetSizePixel());
+ m_aStatusHB.SetSizePixel(aLBSize);
+ Size aHeadSize(m_aStatusHB.CalcWindowSizePixel());
+ aHeadSize.Width() = aLBSize.Width();
+ m_aStatusHB.SetSizePixel(aHeadSize);
+ Point aLBPos(m_aStatusLB.GetPosPixel());
+ m_aStatusHB.SetPosPixel(aLBPos);
+ aLBPos.Y() += aHeadSize.Height();
+ aLBSize.Height() -= aHeadSize.Height();
+ m_aStatusLB.SetPosSizePixel(aLBPos, aLBSize);
+
+ Size aSz(m_aStatusHB.GetOutputSizePixel());
+ long nPos1 = aSz.Width()/3 * 2;
+ long nPos2 = aSz.Width()/3;
+ m_aStatusHB.InsertItem( ITEMID_TASK, sTask,
+ nPos1,
+ HIB_LEFT | HIB_VCENTER );
+ m_aStatusHB.InsertItem( ITEMID_STATUS, sStatus,
+ nPos2,
+ HIB_LEFT | HIB_VCENTER );
+ m_aStatusHB.SetHelpId(HID_MM_ADDRESSLIST_HB );
+ m_aStatusHB.Show();
+
+ m_aStatusLB.SetHelpId(HID_MM_MAILSTATUS_TLB);
+ static long nTabs[] = {3, 0, nPos1, aSz.Width() };
+ m_aStatusLB.SetStyle( m_aStatusLB.GetStyle() | WB_SORT | WB_HSCROLL | WB_CLIPCHILDREN | WB_TABSTOP );
+ m_aStatusLB.SetSelectionMode( SINGLE_SELECTION );
+ m_aStatusLB.SetTabs(&nTabs[0], MAP_PIXEL);
+ m_aStatusLB.SetSpaceBetweenEntries(3);
+
+ DetailsHdl_Impl( &m_aDetailsPB );
+ UpdateTransferStatus();
+}
+/*-- 21.05.2004 14:10:39---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+SwSendMailDialog::~SwSendMailDialog()
+{
+ if(m_pImpl->xMailDispatcher.is())
+ {
+ try
+ {
+ if(m_pImpl->xMailDispatcher->isStarted())
+ m_pImpl->xMailDispatcher->stop();
+ if(m_pImpl->xConnectedMailService.is() && m_pImpl->xConnectedMailService->isConnected())
+ m_pImpl->xConnectedMailService->disconnect();
+ if(m_pImpl->xConnectedInMailService.is() && m_pImpl->xConnectedInMailService->isConnected())
+ m_pImpl->xConnectedInMailService->disconnect();
+
+ uno::Reference<mail::XMailMessage> xMessage =
+ m_pImpl->xMailDispatcher->dequeueMailMessage();
+ while(xMessage.is())
+ {
+ SwMailDispatcherListener_Impl::DeleteAttachments( xMessage );
+ xMessage = m_pImpl->xMailDispatcher->dequeueMailMessage();
+ }
+ }
+ catch(const uno::Exception&)
+ {
+ }
+ }
+ delete m_pImpl;
+}
+/*-- 21.05.2004 14:10:40---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void SwSendMailDialog::AddDocument( SwMailDescriptor& rDesc )
+{
+ ::osl::MutexGuard aGuard(m_pImpl->aDescriptorMutex);
+ m_pImpl->aDescriptors.push_back(rDesc);
+ // if the dialog is already running then continue sending of documents
+ if(m_pImpl->xMailDispatcher.is())
+ {
+ IterateMails();
+ }
+
+}
+/*-- 31.01.2005 08:59:35---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void SwSendMailDialog::SetDocumentCount( sal_Int32 nAllDocuments )
+{
+ m_pImpl->nDocumentCount = nAllDocuments;
+ UpdateTransferStatus();
+}
+/*-- 21.05.2004 14:10:40---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void lcl_Move(Control& rCtrl, long nYOffset)
+{
+ Point aPos(rCtrl.GetPosPixel());
+ aPos.Y() += nYOffset;
+ rCtrl.SetPosPixel(aPos);
+}
+/*-- 21.05.2004 14:10:40---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+IMPL_LINK( SwSendMailDialog, DetailsHdl_Impl, PushButton*, EMPTYARG )
+{
+ long nMove = 0;
+ if(m_aStatusLB.IsVisible())
+ {
+ m_aStatusLB.Hide();
+ m_aStatusHB.Hide();
+ nMove = - m_nStatusHeight;
+ m_aDetailsPB.SetText(m_sMore);
+ }
+ else
+ {
+ m_aStatusLB.Show();
+ m_aStatusHB.Show();
+ nMove = m_nStatusHeight;
+ m_aDetailsPB.SetText(m_sLess);
+ }
+ lcl_Move(m_aSeparatorFL, nMove);
+ lcl_Move(m_aStopPB, nMove);
+ lcl_Move(m_aClosePB, nMove);
+ Size aDlgSize = GetSizePixel(); aDlgSize.Height() += nMove; SetSizePixel(aDlgSize);
+
+ return 0;
+}
+/*-- 21.05.2004 14:10:40---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+IMPL_LINK( SwSendMailDialog, StopHdl_Impl, PushButton*, pButton )
+{
+ m_bCancel = true;
+ if(m_pImpl->xMailDispatcher.is())
+ {
+ if(m_pImpl->xMailDispatcher->isStarted())
+ {
+ m_pImpl->xMailDispatcher->stop();
+ pButton->SetText(m_sContinue);
+ m_PausedFI.Show();
+ }
+ else
+ {
+ m_pImpl->xMailDispatcher->start();
+ pButton->SetText(m_sStop);
+ m_PausedFI.Show(sal_False);
+ }
+ }
+ return 0;
+}
+/*-- 21.05.2004 14:10:40---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+IMPL_LINK( SwSendMailDialog, CloseHdl_Impl, PushButton*, EMPTYARG )
+{
+ ModelessDialog::Show( sal_False );
+ return 0;
+}
+/*-- 14.06.2004 09:48:30---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+IMPL_STATIC_LINK_NOINSTANCE( SwSendMailDialog, StartSendMails, SwSendMailDialog*, pDialog )
+{
+ pDialog->SendMails();
+ return 0;
+}
+/*-- 14.06.2004 09:48:30---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+IMPL_STATIC_LINK( SwSendMailDialog, RemoveThis, Timer*, pTimer )
+{
+ if( pThis->m_pImpl->xMailDispatcher.is() )
+ {
+ if(pThis->m_pImpl->xMailDispatcher->isStarted())
+ pThis->m_pImpl->xMailDispatcher->stop();
+ if(!pThis->m_pImpl->xMailDispatcher->isShutdownRequested())
+ pThis->m_pImpl->xMailDispatcher->shutdown();
+ }
+
+ if( pThis->m_bDesctructionEnabled &&
+ (!pThis->m_pImpl->xMailDispatcher.is() ||
+ !pThis->m_pImpl->xMailDispatcher->isRunning()))
+ {
+ delete pThis;
+ }
+ else
+ {
+ pTimer->Start();
+ }
+ return 0;
+}
+/*-- 07.07.2004 14:34:05---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+IMPL_STATIC_LINK_NOINSTANCE( SwSendMailDialog, StopSendMails, SwSendMailDialog*, pDialog )
+{
+ if(pDialog->m_pImpl->xMailDispatcher.is() &&
+ pDialog->m_pImpl->xMailDispatcher->isStarted())
+ {
+ pDialog->m_pImpl->xMailDispatcher->stop();
+ pDialog->m_aStopPB.SetText(pDialog->m_sContinue);
+ pDialog->m_PausedFI.Show();
+ }
+ return 0;
+}
+/*-- 14.06.2004 10:38:04---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void SwSendMailDialog::SendMails()
+{
+ if(!m_pConfigItem)
+ {
+ DBG_ERROR("config item not set");
+ return;
+ }
+ String sErrorMessage;
+ bool bIsLoggedIn = false;
+ EnterWait();
+ //get a mail server connection
+ uno::Reference< mail::XSmtpService > xSmtpServer =
+ SwMailMergeHelper::ConnectToSmtpServer( *m_pConfigItem,
+ m_pImpl->xConnectedInMailService,
+ aEmptyStr, aEmptyStr, this );
+ bIsLoggedIn = xSmtpServer.is() && xSmtpServer->isConnected();
+ LeaveWait();
+ if(!bIsLoggedIn)
+ {
+ DBG_ERROR("create error message");
+ return;
+ }
+ m_pImpl->xMailDispatcher.set( new MailDispatcher(xSmtpServer));
+ IterateMails();
+ m_pImpl->xMailListener = new SwMailDispatcherListener_Impl(*this);
+ m_pImpl->xMailDispatcher->addListener(m_pImpl->xMailListener);
+ if(!m_bCancel)
+ {
+ m_pImpl->xMailDispatcher->start();
+ }
+}
+/* -----------------28.01.2005 10:17-----------------
+
+ --------------------------------------------------*/
+void SwSendMailDialog::IterateMails()
+{
+ const SwMailDescriptor* pCurrentMailDescriptor = m_pImpl->GetNextDescriptor();
+ while( pCurrentMailDescriptor )
+ {
+ if(!SwMailMergeHelper::CheckMailAddress( pCurrentMailDescriptor->sEMail ))
+ {
+ ImageList& rImgLst = GetSettings().GetStyleSettings().GetHighContrastMode() ?
+ m_aImageListHC : m_aImageList;
+ Image aInsertImg = rImgLst.GetImage( FN_FORMULA_CANCEL );
+
+ String sMessage = m_sSendingTo;
+ String sTmp(pCurrentMailDescriptor->sEMail);
+ sTmp += '\t';
+ sTmp += m_sFailed;
+ sMessage.SearchAndReplaceAscii("%1", sTmp);
+ m_aStatusLB.InsertEntry( sMessage, aInsertImg, aInsertImg);
+ ++m_nSendCount;
+ ++m_nErrorCount;
+ UpdateTransferStatus( );
+ pCurrentMailDescriptor = m_pImpl->GetNextDescriptor();
+ continue;
+ }
+ SwMailMessage* pMessage = 0;
+ uno::Reference< mail::XMailMessage > xMessage = pMessage = new SwMailMessage;
+ if(m_pConfigItem->IsMailReplyTo())
+ pMessage->setReplyToAddress(m_pConfigItem->GetMailReplyTo());
+ pMessage->addRecipient( pCurrentMailDescriptor->sEMail );
+ pMessage->SetSenderName( m_pConfigItem->GetMailDisplayName() );
+ pMessage->SetSenderAddress( m_pConfigItem->GetMailAddress() );
+ if(pCurrentMailDescriptor->sAttachmentURL.getLength())
+ {
+ mail::MailAttachment aAttach;
+ aAttach.Data =
+ new SwMailTransferable(
+ pCurrentMailDescriptor->sAttachmentURL,
+ pCurrentMailDescriptor->sAttachmentName,
+ pCurrentMailDescriptor->sMimeType );
+ aAttach.ReadableName = pCurrentMailDescriptor->sAttachmentName;
+ pMessage->addAttachment( aAttach );
+ }
+ pMessage->setSubject( pCurrentMailDescriptor->sSubject );
+ uno::Reference< datatransfer::XTransferable> xBody =
+ new SwMailTransferable(
+ pCurrentMailDescriptor->sBodyContent,
+ pCurrentMailDescriptor->sBodyMimeType);
+ pMessage->setBody( xBody );
+
+ //CC and BCC are tokenized by ';'
+ if(pCurrentMailDescriptor->sCC.getLength())
+ {
+ String sTokens( pCurrentMailDescriptor->sCC );
+ sal_uInt16 nTokens = sTokens.GetTokenCount( ';' );
+ xub_StrLen nPos = 0;
+ for( sal_uInt16 nToken = 0; nToken < nTokens; ++nToken)
+ {
+ String sTmp = sTokens.GetToken( 0, ';', nPos);
+ if( sTmp.Len() )
+ pMessage->addCcRecipient( sTmp );
+ }
+ }
+ if(pCurrentMailDescriptor->sBCC.getLength())
+ {
+ String sTokens( pCurrentMailDescriptor->sBCC );
+ sal_uInt16 nTokens = sTokens.GetTokenCount( ';' );
+ xub_StrLen nPos = 0;
+ for( sal_uInt16 nToken = 0; nToken < nTokens; ++nToken)
+ {
+ String sTmp = sTokens.GetToken( 0, ';', nPos);
+ if( sTmp.Len() )
+ pMessage->addBccRecipient( sTmp );
+ }
+ }
+ m_pImpl->xMailDispatcher->enqueueMailMessage( xMessage );
+ pCurrentMailDescriptor = m_pImpl->GetNextDescriptor();
+ }
+ UpdateTransferStatus();
+}
+/*-- 27.08.2004 10:50:17---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void SwSendMailDialog::ShowDialog()
+{
+ Application::PostUserEvent( STATIC_LINK( this, SwSendMailDialog,
+ StartSendMails ), this );
+ ModelessDialog::Show();
+}
+/*-- 27.08.2004 10:50:17---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void SwSendMailDialog::StateChanged( StateChangedType nStateChange )
+{
+ ModelessDialog::StateChanged( nStateChange );
+ if(STATE_CHANGE_VISIBLE == nStateChange && !IsVisible())
+ {
+ m_pImpl->aRemoveTimer.SetTimeoutHdl( STATIC_LINK( this, SwSendMailDialog,
+ RemoveThis ) );
+ m_pImpl->aRemoveTimer.Start();
+ }
+}
+
+/*-- 23.06.2004 10:14:22---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void SwSendMailDialog::DocumentSent( uno::Reference< mail::XMailMessage> xMessage,
+ bool bResult,
+ const ::rtl::OUString* pError )
+{
+ //sending should stop on send errors
+ if(pError &&
+ m_pImpl->xMailDispatcher.is() && m_pImpl->xMailDispatcher->isStarted())
+ {
+ Application::PostUserEvent( STATIC_LINK( this, SwSendMailDialog,
+ StopSendMails ), this );
+ }
+ ImageList& rImgLst = GetSettings().GetStyleSettings().GetHighContrastMode() ?
+ m_aImageListHC : m_aImageList;
+ Image aInsertImg = rImgLst.GetImage( bResult ? FN_FORMULA_APPLY : FN_FORMULA_CANCEL );
+
+ String sMessage = m_sSendingTo;
+ String sTmp(xMessage->getRecipients()[0]);
+ sTmp += '\t';
+ sTmp += bResult ? m_sCompleted : m_sFailed;
+ sMessage.SearchAndReplaceAscii("%1", sTmp);
+ m_aStatusLB.InsertEntry( sMessage, aInsertImg, aInsertImg);
+ ++m_nSendCount;
+ if(!bResult)
+ ++m_nErrorCount;
+
+ UpdateTransferStatus( );
+ if(pError)
+ {
+ SwSendWarningBox_Impl* pDlg = new SwSendWarningBox_Impl(0, *pError);
+ pDlg->Execute();
+ delete pDlg;
+ }
+}
+/*-- 23.06.2004 11:25:31---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void SwSendMailDialog::UpdateTransferStatus()
+{
+ String sStatus( m_sTransferStatus );
+ sStatus.SearchAndReplaceAscii("%1", String::CreateFromInt32(m_nSendCount) );
+ sStatus.SearchAndReplaceAscii("%2", String::CreateFromInt32(m_pImpl->nDocumentCount));
+ m_aTransferStatusFT.SetText(sStatus);
+
+ sStatus = m_sErrorStatus;
+ sStatus.SearchAndReplaceAscii("%1", String::CreateFromInt32(m_nErrorCount) );
+ m_aErrorStatusFT.SetText(sStatus);
+
+ if(m_pImpl->aDescriptors.size())
+ m_aProgressBar.SetValue((sal_uInt16)(m_nSendCount * 100 / m_pImpl->aDescriptors.size()));
+ else
+ m_aProgressBar.SetValue(0);
+}
+/*-- 23.06.2004 11:18:50---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void SwSendMailDialog::AllMailsSent()
+{
+ m_aStopPB.Enable(sal_False);
+}
+
+