blob: a2866a82fdc1f43188c5183596ef2655d03d4b03 [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_sw.hxx"
#ifdef SW_DLLIMPLEMENTATION
#undef SW_DLLIMPLEMENTATION
#endif
#include <vcl/msgbox.hxx>
#include <vcl/svapp.hxx>
#include <tools/urlobj.hxx>
#include <svl/urihelper.hxx>
#include <unotools/pathoptions.hxx>
#include <svl/mailenum.hxx>
#include <svx/svxdlg.hxx>
#include <svx/dialogs.hrc>
#include <helpid.h>
#include <view.hxx>
#include <docsh.hxx>
#include <IDocumentDeviceAccess.hxx>
#include <wrtsh.hxx>
#include <dbmgr.hxx>
#include <dbui.hxx>
#include <prtopt.hxx>
#include <swmodule.hxx>
#include <modcfg.hxx>
#include <mailmergehelper.hxx>
#include <envelp.hrc>
#include <mailmrge.hrc>
#include <mailmrge.hxx>
#include <sfx2/docfile.hxx>
#include <sfx2/docfilt.hxx>
#include <comphelper/sequenceashashmap.hxx>
#include <com/sun/star/ui/dialogs/XFolderPicker.hpp>
#include <com/sun/star/frame/XDispatchProvider.hpp>
#include <com/sun/star/sdbcx/XColumnsSupplier.hpp>
#include <com/sun/star/sdbcx/XRowLocate.hpp>
#include <com/sun/star/sdb/XResultSetAccess.hpp>
#include <com/sun/star/sdbc/XDataSource.hpp>
#include <toolkit/unohlp.hxx>
#include <comphelper/processfactory.hxx>
#include <com/sun/star/form/runtime/XFormController.hpp>
#include <cppuhelper/implbase1.hxx>
#include <com/sun/star/container/XChild.hpp>
#include <com/sun/star/container/XContainerQuery.hpp>
#include <com/sun/star/container/XEnumeration.hpp>
#include <unomid.h>
#include <algorithm>
using namespace rtl;
using namespace ::com::sun::star;
using namespace ::com::sun::star::container;
using namespace ::com::sun::star::lang;
using namespace ::com::sun::star::sdb;
using namespace ::com::sun::star::sdbc;
using namespace ::com::sun::star::sdbcx;
using namespace ::com::sun::star::beans;
using namespace ::com::sun::star::util;
using namespace ::com::sun::star::uno;
using namespace ::com::sun::star::frame;
using namespace ::com::sun::star::form;
using namespace ::com::sun::star::view;
using namespace ::com::sun::star::ui::dialogs;
/* -----------------------------05.06.01 13:54--------------------------------
---------------------------------------------------------------------------*/
struct SwMailMergeDlg_Impl
{
uno::Reference<runtime::XFormController> xFController;
uno::Reference<XSelectionChangeListener> xChgLstnr;
uno::Reference<XSelectionSupplier> xSelSupp;
};
/* -----------------------------05.06.01 13:47--------------------------------
helper classes
---------------------------------------------------------------------------*/
class SwXSelChgLstnr_Impl : public cppu::WeakImplHelper1
<
view::XSelectionChangeListener
>
{
SwMailMergeDlg& rParent;
public:
SwXSelChgLstnr_Impl(SwMailMergeDlg& rParentDlg);
~SwXSelChgLstnr_Impl();
virtual void SAL_CALL selectionChanged( const EventObject& aEvent ) throw (RuntimeException);
virtual void SAL_CALL disposing( const EventObject& Source ) throw (RuntimeException);
};
/* -----------------------------05.06.01 13:51--------------------------------
---------------------------------------------------------------------------*/
SwXSelChgLstnr_Impl::SwXSelChgLstnr_Impl(SwMailMergeDlg& rParentDlg) :
rParent(rParentDlg)
{}
/* -----------------------------05.06.01 14:06--------------------------------
---------------------------------------------------------------------------*/
SwXSelChgLstnr_Impl::~SwXSelChgLstnr_Impl()
{}
/* -----------------------------05.06.01 14:06--------------------------------
---------------------------------------------------------------------------*/
void SwXSelChgLstnr_Impl::selectionChanged( const EventObject& ) throw (RuntimeException)
{
//call the parent to enable selection mode
Sequence <Any> aSelection;
if(rParent.pImpl->xSelSupp.is())
rParent.pImpl->xSelSupp->getSelection() >>= aSelection;
sal_Bool bEnable = aSelection.getLength() > 0;
rParent.aMarkedRB.Enable(bEnable);
if(bEnable)
rParent.aMarkedRB.Check();
else if(rParent.aMarkedRB.IsChecked())
{
rParent.aAllRB.Check();
rParent.m_aSelection.realloc(0);
}
}
/* -----------------------------05.06.01 14:06--------------------------------
---------------------------------------------------------------------------*/
void SwXSelChgLstnr_Impl::disposing( const EventObject& ) throw (RuntimeException)
{
DBG_ERROR("disposing");
}
/*------------------------------------------------------------------------
Beschreibung:
------------------------------------------------------------------------*/
SwMailMergeDlg::SwMailMergeDlg(Window* pParent, SwWrtShell& rShell,
const String& rSourceName,
const String& rTblName,
sal_Int32 nCommandType,
const uno::Reference< XConnection>& _xConnection,
Sequence< Any >* pSelection) :
SvxStandardDialog(pParent, SW_RES(DLG_MAILMERGE)),
pBeamerWin (new Window(this, SW_RES(WIN_BEAMER))),
aAllRB (this, SW_RES(RB_ALL)),
aMarkedRB (this, SW_RES(RB_MARKED)),
aFromRB (this, SW_RES(RB_FROM)),
aFromNF (this, SW_RES(NF_FROM)),
aBisFT (this, SW_RES(FT_BIS)),
aToNF (this, SW_RES(NF_TO)),
aRecordFL (this, SW_RES(FL_RECORD)),
aSeparatorFL (this, SW_RES(FL_SEPARATOR)),
aPrinterRB (this, SW_RES(RB_PRINTER)),
aMailingRB (this, SW_RES(RB_MAILING)),
aFileRB (this, SW_RES(RB_FILE)),
aSingleJobsCB (this, SW_RES(CB_SINGLE_JOBS)),
aSaveMergedDocumentFL(this, SW_RES( FL_SAVE_MERGED_DOCUMENT)),
aSaveSingleDocRB(this, SW_RES( RB_SAVE_SINGLE_DOC )),
aSaveIndividualRB(this, SW_RES( RB_SAVE_INDIVIDUAL )),
aGenerateFromDataBaseCB(this, SW_RES( RB_GENERATE_FROM_DATABASE )),
aColumnFT (this, SW_RES(FT_COLUMN)),
aColumnLB (this, SW_RES(LB_COLUMN)),
aPathFT (this, SW_RES(FT_PATH)),
aPathED (this, SW_RES(ED_PATH)),
aPathPB (this, SW_RES(PB_PATH)),
aFilterFT (this, SW_RES(FT_FILTER)),
aFilterLB (this, SW_RES(LB_FILTER)),
aAddressFldLB (this, SW_RES(LB_ADDRESSFLD)),
aSubjectFT (this, SW_RES(FT_SUBJECT)),
aSubjectED (this, SW_RES(ED_SUBJECT)),
aFormatFT (this, SW_RES(FT_FORMAT)),
aAttachFT (this, SW_RES(FT_ATTACH)),
aAttachED (this, SW_RES(ED_ATTACH)),
aAttachPB (this, SW_RES(PB_ATTACH)),
aFormatHtmlCB (this, SW_RES(CB_FORMAT_HTML)),
aFormatRtfCB (this, SW_RES(CB_FORMAT_RTF)),
aFormatSwCB (this, SW_RES(CB_FORMAT_SW)),
aDestFL (this, SW_RES(FL_DEST)),
aBottomSeparatorFL(this, SW_RES(FL_BOTTOM_SEPARATOR)),
aOkBTN (this, SW_RES(BTN_OK)),
aCancelBTN (this, SW_RES(BTN_CANCEL)),
aHelpBTN (this, SW_RES(BTN_HELP)),
pImpl (new SwMailMergeDlg_Impl),
rSh (rShell),
rDBName (rSourceName),
rTableName (rTblName),
nMergeType (DBMGR_MERGE_MAILING),
m_aDialogSize( GetSizePixel() )
{
FreeResource();
aSingleJobsCB.Show(sal_False); // not supported in since cws printerpullpages anymore
//task #97066# mailing of form letters is currently not supported
aMailingRB.Show(sal_False);
aSubjectFT.Show(sal_False);
aSubjectED.Show(sal_False);
aFormatFT.Show(sal_False);
aFormatSwCB.Show(sal_False);
aFormatHtmlCB.Show(sal_False);
aFormatRtfCB.Show(sal_False);
aAttachFT.Show(sal_False);
aAttachED.Show(sal_False);
aAttachPB.Show(sal_False);
Point aMailPos = aMailingRB.GetPosPixel();
Point aFilePos = aFileRB.GetPosPixel();
aFilePos.X() -= (aFilePos.X() - aMailPos.X()) /2;
aFileRB.SetPosPixel(aFilePos);
uno::Reference< lang::XMultiServiceFactory > xMSF = comphelper::getProcessServiceFactory();
if(pSelection)
{
m_aSelection = *pSelection;
//move all controls
long nDiff = aRecordFL.GetPosPixel().Y() - pBeamerWin->GetPosPixel().Y();
pBeamerWin->Show(sal_False);
::Size aSize = GetSizePixel();
aSize.Height() -= nDiff;
SetSizePixel(aSize);
Window* aCntrlArr[] = {
&aAllRB ,
&aMarkedRB ,
&aFromRB ,
&aFromNF ,
&aBisFT ,
&aToNF ,
&aRecordFL ,
&aPrinterRB ,
&aMailingRB ,
&aFileRB ,
&aSingleJobsCB,
&aPathFT ,
&aPathED ,
&aPathPB ,
&aFilterFT ,
&aFilterLB ,
&aColumnLB ,
&aAddressFldLB,
&aSubjectFT ,
&aSubjectED ,
&aFormatFT ,
&aAttachFT ,
&aAttachED ,
&aAttachPB ,
&aFormatHtmlCB,
&aFormatRtfCB ,
&aFormatSwCB ,
&aDestFL ,
&aSeparatorFL ,
0};
for( Window** ppW = aCntrlArr; *ppW; ++ppW )
{
::Point aPnt( (*ppW)->GetPosPixel() );
aPnt.Y() -= nDiff;
(*ppW)->SetPosPixel( aPnt );
}
}
else
{
try
{
// create a frame wrapper for myself
uno::Reference< XMultiServiceFactory >
xMgr = comphelper::getProcessServiceFactory();
xFrame = uno::Reference< XFrame >(xMgr->createInstance(C2U("com.sun.star.frame.Frame")), UNO_QUERY);
if(xFrame.is())
{
xFrame->initialize( VCLUnoHelper::GetInterface ( pBeamerWin ) );
}
}
catch (Exception&)
{
xFrame.clear();
}
if(xFrame.is())
{
uno::Reference<XDispatchProvider> xDP(xFrame, UNO_QUERY);
URL aURL;
aURL.Complete = C2U(".component:DB/DataSourceBrowser");
uno::Reference<XDispatch> xD = xDP->queryDispatch(aURL,
C2U(""),
0x0C);
if(xD.is())
{
Sequence<PropertyValue> aProperties(3);
PropertyValue* pProperties = aProperties.getArray();
pProperties[0].Name = C2U("DataSourceName");
pProperties[0].Value <<= OUString(rSourceName);
pProperties[1].Name = C2U("Command");
pProperties[1].Value <<= OUString(rTableName);
pProperties[2].Name = C2U("CommandType");
pProperties[2].Value <<= nCommandType;
xD->dispatch(aURL, aProperties);
pBeamerWin->Show();
}
uno::Reference<XController> xController = xFrame->getController();
pImpl->xFController = uno::Reference<runtime::XFormController>(xController, UNO_QUERY);
if(pImpl->xFController.is())
{
uno::Reference< awt::XControl > xCtrl = pImpl->xFController->getCurrentControl( );
pImpl->xSelSupp = uno::Reference<XSelectionSupplier>(xCtrl, UNO_QUERY);
if(pImpl->xSelSupp.is())
{
pImpl->xChgLstnr = new SwXSelChgLstnr_Impl(*this);
pImpl->xSelSupp->addSelectionChangeListener( pImpl->xChgLstnr );
}
}
}
}
pModOpt = SW_MOD()->GetModuleConfig();
//aSingleJobsCB.Check(pModOpt->IsSinglePrintJob());// not supported in since cws printerpullpages anymore
sal_Int16 nMailingMode(pModOpt->GetMailingFormats());
aFormatSwCB.Check((nMailingMode & TXTFORMAT_OFFICE) != 0);
aFormatHtmlCB.Check((nMailingMode & TXTFORMAT_HTML) != 0);
aFormatRtfCB.Check((nMailingMode & TXTFORMAT_RTF) != 0);
aAllRB.Check(sal_True);
// Handler installieren
Link aLk = LINK(this, SwMailMergeDlg, ButtonHdl);
aOkBTN.SetClickHdl(aLk);
aPathPB.SetClickHdl(LINK(this, SwMailMergeDlg, InsertPathHdl));
aAttachPB.SetClickHdl(LINK(this, SwMailMergeDlg, AttachFileHdl));
aLk = LINK(this, SwMailMergeDlg, OutputTypeHdl);
aPrinterRB.SetClickHdl(aLk);
aMailingRB.SetClickHdl(aLk);
aFileRB.SetClickHdl(aLk);
//#i63267# printing might be disabled
bool bIsPrintable = !Application::GetSettings().GetMiscSettings().GetDisablePrinting();
aPrinterRB.Enable(bIsPrintable);
OutputTypeHdl(bIsPrintable ? &aPrinterRB : &aFileRB);
aLk = LINK(this, SwMailMergeDlg, FilenameHdl);
aGenerateFromDataBaseCB.SetClickHdl( aLk );
sal_Bool bColumn = pModOpt->IsNameFromColumn();
if(bColumn)
aGenerateFromDataBaseCB.Check();
FilenameHdl( &aGenerateFromDataBaseCB );
aLk = LINK(this, SwMailMergeDlg, SaveTypeHdl);
aSaveSingleDocRB.Check( true );
aSaveSingleDocRB.SetClickHdl( aLk );
aSaveIndividualRB.SetClickHdl( aLk );
aLk.Call( &aSaveSingleDocRB );
aLk = LINK(this, SwMailMergeDlg, ModifyHdl);
aFromNF.SetModifyHdl(aLk);
aToNF.SetModifyHdl(aLk);
aFromNF.SetMax(SAL_MAX_INT32);
aToNF.SetMax(SAL_MAX_INT32);
SwNewDBMgr* pNewDBMgr = rSh.GetNewDBMgr();
if(_xConnection.is())
pNewDBMgr->GetColumnNames(&aAddressFldLB, _xConnection, rTableName);
else
pNewDBMgr->GetColumnNames(&aAddressFldLB, rDBName, rTableName);
for(sal_uInt16 nEntry = 0; nEntry < aAddressFldLB.GetEntryCount(); nEntry++)
aColumnLB.InsertEntry(aAddressFldLB.GetEntry(nEntry));
aAddressFldLB.SelectEntry(C2S("EMAIL"));
String sPath(pModOpt->GetMailingPath());
if(!sPath.Len())
{
SvtPathOptions aPathOpt;
sPath = aPathOpt.GetWorkPath();
}
INetURLObject aURL(sPath);
if(aURL.GetProtocol() == INET_PROT_FILE)
aPathED.SetText(aURL.PathToFileName());
else
aPathED.SetText(aURL.GetFull());
if (!bColumn )
{
aColumnLB.SelectEntry(C2S("NAME"));
}
else
aColumnLB.SelectEntry(pModOpt->GetNameFromColumn());
if (aAddressFldLB.GetSelectEntryCount() == 0)
aAddressFldLB.SelectEntryPos(0);
if (aColumnLB.GetSelectEntryCount() == 0)
aColumnLB.SelectEntryPos(0);
const sal_Bool bEnable = m_aSelection.getLength() != 0;
aMarkedRB.Enable(bEnable);
if (bEnable)
aMarkedRB.Check();
else
{
aAllRB.Check();
aMarkedRB.Enable(sal_False);
}
SetMinOutputSizePixel(m_aDialogSize);
try
{
uno::Reference< container::XNameContainer> xFilterFactory(
xMSF->createInstance(C2U("com.sun.star.document.FilterFactory")), UNO_QUERY_THROW);
uno::Reference< container::XContainerQuery > xQuery(xFilterFactory, UNO_QUERY_THROW);
OUString sCommand(C2U("matchByDocumentService=com.sun.star.text.TextDocument:iflags="));
sCommand += String::CreateFromInt32(SFX_FILTER_EXPORT);
sCommand += C2U(":eflags=");
sCommand += String::CreateFromInt32(SFX_FILTER_NOTINFILEDLG);
sCommand += C2U(":default_first");
uno::Reference< container::XEnumeration > xList = xQuery->createSubSetEnumerationByQuery(sCommand);
const ::rtl::OUString sName = OUString::createFromAscii("Name");
const ::rtl::OUString sFlags = OUString::createFromAscii("Flags");
const ::rtl::OUString sUIName = OUString::createFromAscii("UIName");
sal_uInt16 nODT = USHRT_MAX;
while(xList->hasMoreElements())
{
comphelper::SequenceAsHashMap aFilter(xList->nextElement());
OUString sFilter = aFilter.getUnpackedValueOrDefault(sName, OUString());
uno::Any aProps = xFilterFactory->getByName(sFilter);
uno::Sequence< beans::PropertyValue > aFilterProperties;
aProps >>= aFilterProperties;
::rtl::OUString sUIName2;
const beans::PropertyValue* pFilterProperties = aFilterProperties.getConstArray();
for(int nProp = 0; nProp < aFilterProperties.getLength(); nProp++)
{
if(!pFilterProperties[nProp].Name.compareToAscii("UIName"))
{
pFilterProperties[nProp].Value >>= sUIName2;
break;
}
}
if( sUIName2.getLength() )
{
sal_uInt16 nFilter = aFilterLB.InsertEntry( sUIName2 );
if( 0 == sFilter.compareToAscii("writer8") )
nODT = nFilter;
aFilterLB.SetEntryData( nFilter, new ::rtl::OUString( sFilter ) );
}
}
aFilterLB.SelectEntryPos( nODT );
}
catch( const uno::Exception& )
{
}
}
/*------------------------------------------------------------------------
Beschreibung:
------------------------------------------------------------------------*/
SwMailMergeDlg::~SwMailMergeDlg()
{
if(xFrame.is())
{
xFrame->setComponent(NULL, NULL);
xFrame->dispose();
}
else
delete pBeamerWin;
for( sal_uInt16 nFilter = 0; nFilter < aFilterLB.GetEntryCount(); ++nFilter )
{
::rtl::OUString* pData = reinterpret_cast< ::rtl::OUString* >( aFilterLB.GetEntryData(nFilter) );
delete pData;
}
delete pImpl;
}
/*------------------------------------------------------------------------
Beschreibung:
------------------------------------------------------------------------*/
void SwMailMergeDlg::Apply()
{
}
/*-- 01.06.2007 13:06:50---------------------------------------------------
-----------------------------------------------------------------------*/
void lcl_MoveControlY( Window* ppW, long nDiffSize )
{
Point aPos( ppW->GetPosPixel());
aPos.Y() += nDiffSize;
ppW->SetPosPixel( aPos );
}
void lcl_MoveControlX( Window* ppW, long nDiffSize )
{
Point aPos( ppW->GetPosPixel());
aPos.X() += nDiffSize;
ppW->SetPosPixel( aPos );
}
void lcl_ChangeWidth( Window* ppW, long nDiffSize )
{
Size aSize( ppW->GetSizePixel());
aSize.Width() += nDiffSize;
ppW->SetSizePixel( aSize );
}
void SwMailMergeDlg::Resize()
{
//the only controls that profit from the resize is pBeamerWin
// and aPathED, aFilenameED and aColumnLB
Size aCurSize( GetSizePixel() );
//find the difference
Size aDiffSize( aCurSize.Width() - m_aDialogSize.Width(),
aCurSize.Height() - m_aDialogSize.Height() );
m_aDialogSize = aCurSize;
if( pBeamerWin->IsVisible() )
{
Window* aCntrlArr[] = {
&aAllRB ,
&aMarkedRB ,
&aFromRB ,
&aFromNF ,
&aBisFT ,
&aToNF ,
&aRecordFL ,
&aPrinterRB ,
&aMailingRB ,
&aFileRB ,
&aSingleJobsCB,
&aSaveMergedDocumentFL,
&aSaveSingleDocRB,
&aSaveIndividualRB,
&aGenerateFromDataBaseCB,
&aPathFT ,
&aPathED ,
&aPathPB ,
&aColumnFT,
&aColumnLB ,
&aFilterFT ,
&aFilterLB ,
&aAddressFldLB,
&aSubjectFT ,
&aSubjectED ,
&aFormatFT ,
&aAttachFT ,
&aAttachED ,
&aAttachPB ,
&aFormatHtmlCB,
&aFormatRtfCB ,
&aFormatSwCB ,
&aDestFL ,
&aSeparatorFL ,
&aBottomSeparatorFL,
&aOkBTN,
&aCancelBTN,
&aHelpBTN,
0};
for( Window** ppW = aCntrlArr; *ppW; ++ppW )
{
lcl_MoveControlY( *ppW, aDiffSize.Height() );
}
//some controls have to be extended horizontally
lcl_MoveControlX( &aOkBTN, aDiffSize.Width() );
lcl_MoveControlX( &aCancelBTN, aDiffSize.Width() );
lcl_MoveControlX( &aHelpBTN, aDiffSize.Width() );
lcl_MoveControlX( &aPathPB, aDiffSize.Width() );
lcl_MoveControlX( &aFileRB, aDiffSize.Width()/2 );
lcl_ChangeWidth( &aBottomSeparatorFL, aDiffSize.Width() );
lcl_ChangeWidth( &aSaveMergedDocumentFL, aDiffSize.Width() );
lcl_ChangeWidth( &aColumnLB, aDiffSize.Width() );
lcl_ChangeWidth( &aPathED, aDiffSize.Width() );
lcl_ChangeWidth( &aFilterLB, aDiffSize.Width() );
lcl_ChangeWidth( &aDestFL, aDiffSize.Width() );
Size aBeamerSize( pBeamerWin->GetSizePixel() ) ;
aBeamerSize.Width() += aDiffSize.Width();
aBeamerSize.Height() += aDiffSize.Height();
pBeamerWin->SetSizePixel(aBeamerSize);
}
}
/*------------------------------------------------------------------------
Beschreibung:
------------------------------------------------------------------------*/
IMPL_LINK( SwMailMergeDlg, ButtonHdl, Button *, pBtn )
{
if (pBtn == &aOkBTN)
{
if( ExecQryShell() )
EndDialog(RET_OK);
}
return 0;
}
/*------------------------------------------------------------------------
Beschreibung:
------------------------------------------------------------------------*/
IMPL_LINK( SwMailMergeDlg, OutputTypeHdl, RadioButton *, pBtn )
{
sal_Bool bPrint = pBtn == &aPrinterRB;
aSingleJobsCB.Enable(bPrint);
aSaveMergedDocumentFL.Enable( !bPrint );
aSaveSingleDocRB.Enable( !bPrint );
aSaveIndividualRB.Enable( !bPrint );
if( !bPrint )
{
SaveTypeHdl( aSaveSingleDocRB.IsChecked() ? &aSaveSingleDocRB : &aSaveIndividualRB );
}
else
{
aPathFT.Enable(false);
aPathED.Enable(false);
aPathPB.Enable(false);
aColumnFT.Enable(false);
aColumnLB.Enable(false);
aFilterFT.Enable(false);
aFilterLB.Enable(false);
aGenerateFromDataBaseCB.Enable(false);
}
return 0;
}
/*-- 01.06.2007 12:36:43---------------------------------------------------
-----------------------------------------------------------------------*/
IMPL_LINK( SwMailMergeDlg, SaveTypeHdl, RadioButton*, pBtn )
{
bool bIndividual = pBtn == &aSaveIndividualRB;
aGenerateFromDataBaseCB.Enable( bIndividual );
if( bIndividual )
{
FilenameHdl( &aGenerateFromDataBaseCB );
}
else
{
aColumnFT.Enable(false);
aColumnLB.Enable(false);
aPathFT.Enable( false );
aPathED.Enable( false );
aPathPB.Enable( false );
aFilterFT.Enable( false );
aFilterLB.Enable( false );
}
return 0;
}
/*------------------------------------------------------------------------
Beschreibung:
------------------------------------------------------------------------*/
IMPL_LINK( SwMailMergeDlg, FilenameHdl, CheckBox*, pBox )
{
sal_Bool bEnable = pBox->IsChecked();
aColumnFT.Enable( bEnable );
aColumnLB.Enable(bEnable);
aPathFT.Enable( bEnable );
aPathED.Enable(bEnable);
aPathPB.Enable( bEnable );
aFilterFT.Enable( bEnable );
aFilterLB.Enable( bEnable );
return 0;
}
/*------------------------------------------------------------------------
Beschreibung:
------------------------------------------------------------------------*/
IMPL_LINK( SwMailMergeDlg, ModifyHdl, NumericField *, EMPTYARG )
{
aFromRB.Check();
return (0);
}
/*------------------------------------------------------------------------
Beschreibung:
------------------------------------------------------------------------*/
bool SwMailMergeDlg::ExecQryShell()
{
if(pImpl->xSelSupp.is())
{
pImpl->xSelSupp->removeSelectionChangeListener( pImpl->xChgLstnr );
}
SwNewDBMgr* pMgr = rSh.GetNewDBMgr();
if (aPrinterRB.IsChecked())
nMergeType = DBMGR_MERGE_MAILMERGE;
else if (aMailingRB.IsChecked())
{
nMergeType = DBMGR_MERGE_MAILING;
pMgr->SetEMailColumn(aAddressFldLB.GetSelectEntry());
pMgr->SetSubject(aSubjectED.GetText());
pMgr->SetAttachment(aAttachED.GetText());
}
else
{
nMergeType = static_cast< sal_uInt16 >( aSaveSingleDocRB.IsChecked() ?
DBMGR_MERGE_SINGLE_FILE : DBMGR_MERGE_MAILFILES );
SfxMedium* pMedium = rSh.GetView().GetDocShell()->GetMedium();
INetURLObject aAbs;
if( pMedium )
aAbs = pMedium->GetURLObject();
String sPath(
URIHelper::SmartRel2Abs(
aAbs, aPathED.GetText(), URIHelper::GetMaybeFileHdl()));
pModOpt->SetMailingPath(sPath);
String sDelim(INET_PATH_TOKEN);
if (sPath.Len() >= sDelim.Len() &&
sPath.Copy(sPath.Len()-sDelim.Len()).CompareTo(sDelim) != COMPARE_EQUAL)
sPath += sDelim;
pModOpt->SetIsNameFromColumn(aGenerateFromDataBaseCB.IsChecked());
if (aGenerateFromDataBaseCB.IsEnabled() && aGenerateFromDataBaseCB.IsChecked())
{
pMgr->SetEMailColumn(aColumnLB.GetSelectEntry());
pModOpt->SetNameFromColumn(aColumnLB.GetSelectEntry());
if( aFilterLB.GetSelectEntryPos() != LISTBOX_ENTRY_NOTFOUND)
m_sSaveFilter = *static_cast<const ::rtl::OUString*>(aFilterLB.GetEntryData( aFilterLB.GetSelectEntryPos() ));
}
else
{
//#i97667# reset column name - otherwise it's remembered from the last run
pMgr->SetEMailColumn(::rtl::OUString());
//start save as dialog
String sFilter;
sPath = SwMailMergeHelper::CallSaveAsDialog(sFilter);
if(!sPath.Len())
return false;
m_sSaveFilter = sFilter;
}
pMgr->SetSubject(sPath);
}
if (aFromRB.IsChecked()) // Liste Einfuegen
{
// Safe: the maximal value of the fields is limited
sal_Int32 nStart = sal::static_int_cast<sal_Int32>(aFromNF.GetValue());
sal_Int32 nEnd = sal::static_int_cast<sal_Int32>(aToNF.GetValue());
if (nEnd < nStart)
std::swap(nEnd, nStart);
m_aSelection.realloc(nEnd - nStart + 1);
Any* pSelection = m_aSelection.getArray();
for (sal_Int32 i = nStart; i <= nEnd; ++i, ++pSelection)
*pSelection <<= i;
}
else if (aAllRB.IsChecked() )
m_aSelection.realloc(0); // Leere Selektion = Alles einfuegen
else
{
if(pImpl->xSelSupp.is())
{
//update selection
uno::Reference< XRowLocate > xRowLocate(GetResultSet(),UNO_QUERY);
uno::Reference< XResultSet > xRes(xRowLocate,UNO_QUERY);
pImpl->xSelSupp->getSelection() >>= m_aSelection;
if ( xRowLocate.is() )
{
Any* pBegin = m_aSelection.getArray();
Any* pEnd = pBegin + m_aSelection.getLength();
for (;pBegin != pEnd ; ++pBegin)
{
if ( xRowLocate->moveToBookmark(*pBegin) )
*pBegin <<= xRes->getRow();
}
}
}
}
IDocumentDeviceAccess* pIDDA = rSh.getIDocumentDeviceAccess();
SwPrintData aPrtData( pIDDA->getPrintData() );
aPrtData.SetPrintSingleJobs(aSingleJobsCB.IsChecked());
pIDDA->setPrintData(aPrtData);
pModOpt->SetSinglePrintJob(aSingleJobsCB.IsChecked());
sal_uInt8 nMailingMode = 0;
if (aFormatSwCB.IsChecked())
nMailingMode |= TXTFORMAT_OFFICE;
if (aFormatHtmlCB.IsChecked())
nMailingMode |= TXTFORMAT_HTML;
if (aFormatRtfCB.IsChecked())
nMailingMode |= TXTFORMAT_RTF;
pModOpt->SetMailingFormats(nMailingMode);
return true;
}
/*------------------------------------------------------------------------
Beschreibung:
------------------------------------------------------------------------*/
IMPL_LINK( SwMailMergeDlg, InsertPathHdl, PushButton *, EMPTYARG )
{
String sPath( aPathED.GetText() );
if( !sPath.Len() )
{
SvtPathOptions aPathOpt;
sPath = aPathOpt.GetWorkPath();
}
uno::Reference< XMultiServiceFactory > xMgr( ::comphelper::getProcessServiceFactory() );
uno::Reference < XFolderPicker > xFP;
if( xMgr.is() )
{
xFP = uno::Reference< XFolderPicker >(
xMgr->createInstance(
C2U( "com.sun.star.ui.dialogs.FolderPicker" ) ),
UNO_QUERY );
}
// pFileDlg->SetHelpId(HID_FILEDLG_MAILMRGE1);
xFP->setDisplayDirectory(sPath);
if( xFP->execute() == RET_OK )
{
INetURLObject aURL(xFP->getDirectory());
if(aURL.GetProtocol() == INET_PROT_FILE)
aPathED.SetText(aURL.PathToFileName());
else
aPathED.SetText(aURL.GetFull());
}
return 0;
}
/*------------------------------------------------------------------------
Beschreibung:
------------------------------------------------------------------------*/
IMPL_LINK( SwMailMergeDlg, AttachFileHdl, PushButton *, EMPTYARG )
{
SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
if(pFact)
{
AbstractSvxMultiFileDialog* pFileDlg = pFact->CreateSvxMultiFileDialog( this );
DBG_ASSERT(pFileDlg, "Dialogdiet fail!");
pFileDlg->SetFiles(aAttachED.GetText());
pFileDlg->SetHelpId(HID_FILEDLG_MAILMRGE2);
if (pFileDlg->Execute())
aAttachED.SetText(pFileDlg->GetFiles());
delete pFileDlg;
}
return 0;
}
/* -----------------------------05.06.01 14:56--------------------------------
---------------------------------------------------------------------------*/
uno::Reference<XResultSet> SwMailMergeDlg::GetResultSet() const
{
uno::Reference< XResultSet > xResSetClone;
if ( pImpl->xFController.is() )
{
// we create a clone to do the task
uno::Reference< XResultSetAccess > xResultSetAccess( pImpl->xFController->getModel(),UNO_QUERY);
if ( xResultSetAccess.is() )
xResSetClone = xResultSetAccess->createResultSet();
}
return xResSetClone;
}
/*-- 27.11.2002 12:27:33---------------------------------------------------
-----------------------------------------------------------------------*/
SwMailMergeCreateFromDlg::SwMailMergeCreateFromDlg(Window* pParent) :
ModalDialog(pParent, SW_RES(DLG_MERGE_CREATE)),
aCreateFromFL( this, SW_RES( FL_CREATEFROM )),
aThisDocRB( this, SW_RES( RB_THISDOC )),
aUseTemplateRB( this, SW_RES( RB_TEMPLATE )),
aOK( this, SW_RES( BT_OK )),
aCancel( this, SW_RES( BT_CANCEL )),
aHelp( this, SW_RES( BT_HELP ))
{
FreeResource();
}
/*-- 27.11.2002 12:27:33---------------------------------------------------
-----------------------------------------------------------------------*/
SwMailMergeCreateFromDlg::~SwMailMergeCreateFromDlg()
{
}
/* -----------------04.02.2003 13:45-----------------
*
* --------------------------------------------------*/
SwMailMergeFieldConnectionsDlg::SwMailMergeFieldConnectionsDlg(Window* pParent) :
ModalDialog(pParent, SW_RES(DLG_MERGE_FIELD_CONNECTIONS)),
aConnectionsFL( this, SW_RES( FL_CONNECTIONS )),
aUseExistingRB( this, SW_RES( RB_USEEXISTING )),
aCreateNewRB( this, SW_RES( RB_CREATENEW )),
aInfoFI( this, SW_RES( FT_INFO )),
aOK( this, SW_RES( BT_OK )),
aCancel( this, SW_RES( BT_CANCEL )),
aHelp( this, SW_RES( BT_HELP ))
{
FreeResource();
}
/* -----------------04.02.2003 13:45-----------------
*
* --------------------------------------------------*/
SwMailMergeFieldConnectionsDlg::~SwMailMergeFieldConnectionsDlg()
{
}