diff options
Diffstat (limited to 'sw/source/ui/dbui/dbmgr.cxx')
-rw-r--r-- | sw/source/ui/dbui/dbmgr.cxx | 347 |
1 files changed, 193 insertions, 154 deletions
diff --git a/sw/source/ui/dbui/dbmgr.cxx b/sw/source/ui/dbui/dbmgr.cxx index f23f6b50bc..60a7aad83e 100644 --- a/sw/source/ui/dbui/dbmgr.cxx +++ b/sw/source/ui/dbui/dbmgr.cxx @@ -61,10 +61,8 @@ #include <unotools/tempfile.hxx> #include <unotools/pathoptions.hxx> #include <svl/urihelper.hxx> -#ifndef _SVSTDARR_HXX #define _SVSTDARR_STRINGSDTOR #include <svl/svstdarr.hxx> -#endif #include <svl/zforlist.hxx> #include <svl/zformat.hxx> #include <svl/stritem.hxx> @@ -85,7 +83,6 @@ #include <swundo.hxx> #include <flddat.hxx> #include <modcfg.hxx> -#include <swprtopt.hxx> #include <shellio.hxx> #include <dbui.hxx> #include <dbmgr.hxx> @@ -135,6 +132,7 @@ #include <memory> #include <vector> #include <unomid.h> +#include <section.hxx> using namespace ::osl; using namespace ::svx; @@ -270,9 +268,9 @@ void lcl_InitNumberFormatter(SwDSParam& rParam, uno::Reference<XDataSource> xSou } } -BOOL lcl_MoveAbsolute(SwDSParam* pParam, long nAbsPos) +sal_Bool lcl_MoveAbsolute(SwDSParam* pParam, long nAbsPos) { - BOOL bRet = FALSE; + sal_Bool bRet = sal_False; try { if(pParam->bScrollable) @@ -290,7 +288,7 @@ BOOL lcl_MoveAbsolute(SwDSParam* pParam, long nAbsPos) return bRet; } -BOOL lcl_GetColumnCnt(SwDSParam* pParam, +sal_Bool lcl_GetColumnCnt(SwDSParam* pParam, const String& rColumnName, long nLanguage, String& rResult, double* pNumber) { uno::Reference< XColumnsSupplier > xColsSupp( pParam->xResultSet, UNO_QUERY ); @@ -303,7 +301,7 @@ BOOL lcl_GetColumnCnt(SwDSParam* pParam, { } if(!xCols.is() || !xCols->hasByName(rColumnName)) - return FALSE; + return sal_False; Any aCol = xCols->getByName(rColumnName); uno::Reference< XPropertySet > xColumnProps; aCol >>= xColumnProps; @@ -321,13 +319,13 @@ BOOL lcl_GetColumnCnt(SwDSParam* pParam, MsLangId::convertLanguageToLocale( (LanguageType)nLanguage, aFormatData.aLocale ); rResult = SwNewDBMgr::GetDBField( xColumnProps, aFormatData, pNumber); - return TRUE; + return sal_True; }; /*-------------------------------------------------------------------- Description: import data --------------------------------------------------------------------*/ -BOOL SwNewDBMgr::MergeNew(const SwMergeDescriptor& rMergeDesc ) +sal_Bool SwNewDBMgr::MergeNew(const SwMergeDescriptor& rMergeDesc ) { SetMergeType( rMergeDesc.nMergeType ); @@ -352,11 +350,11 @@ BOOL SwNewDBMgr::MergeNew(const SwMergeDescriptor& rMergeDesc ) if(!aData.sDataSource.getLength() || !aData.sCommand.getLength() || !xResSet.is()) { - return FALSE; + return sal_False; } pImpl->pMergeData = new SwDSParam(aData, xResSet, aSelection); - SwDSParam* pTemp = FindDSData(aData, FALSE); + SwDSParam* pTemp = FindDSData(aData, sal_False); if(pTemp) *pTemp = *pImpl->pMergeData; else @@ -366,7 +364,7 @@ BOOL SwNewDBMgr::MergeNew(const SwMergeDescriptor& rMergeDesc ) //DSData and set the correct CommandType SwDBData aTempData(aData); aData.nCommandType = -1; - pTemp = FindDSData(aData, FALSE); + pTemp = FindDSData(aData, sal_False); if(pTemp) *pTemp = *pImpl->pMergeData; else @@ -397,7 +395,7 @@ BOOL SwNewDBMgr::MergeNew(const SwMergeDescriptor& rMergeDesc ) pImpl->pMergeData->bEndOfDB = !pImpl->pMergeData->xResultSet->absolute( nPos ); pImpl->pMergeData->CheckEndOfDB(); if(pImpl->pMergeData->nSelectionIndex >= pImpl->pMergeData->aSelection.getLength()) - pImpl->pMergeData->bEndOfDB = TRUE; + pImpl->pMergeData->bEndOfDB = sal_True; } else { @@ -407,7 +405,7 @@ BOOL SwNewDBMgr::MergeNew(const SwMergeDescriptor& rMergeDesc ) } catch(Exception&) { - pImpl->pMergeData->bEndOfDB = TRUE; + pImpl->pMergeData->bEndOfDB = sal_True; pImpl->pMergeData->CheckEndOfDB(); OSL_ENSURE(false, "exception in MergeNew()"); } @@ -417,7 +415,7 @@ BOOL SwNewDBMgr::MergeNew(const SwMergeDescriptor& rMergeDesc ) lcl_InitNumberFormatter(*pImpl->pMergeData, xSource); rMergeDesc.rSh.ChgDBData(aData); - bInMerge = TRUE; + bInMerge = sal_True; if (IsInitDBFields()) { @@ -431,10 +429,10 @@ BOOL SwNewDBMgr::MergeNew(const SwMergeDescriptor& rMergeDesc ) sDBName += DB_DELIM; sDBName += String::CreateFromInt32(aInsertData.nCommandType); rMergeDesc.rSh.ChangeDBFields( aDBNames, sDBName); - SetInitDBFields(FALSE); + SetInitDBFields(sal_False); } - BOOL bRet = TRUE; + sal_Bool bRet = sal_True; switch(rMergeDesc.nMergeType) { case DBMGR_MERGE: @@ -464,16 +462,16 @@ BOOL SwNewDBMgr::MergeNew(const SwMergeDescriptor& rMergeDesc ) /*-------------------------------------------------------------------- Description: import data --------------------------------------------------------------------*/ -BOOL SwNewDBMgr::Merge(SwWrtShell* pSh) +sal_Bool SwNewDBMgr::Merge(SwWrtShell* pSh) { pSh->StartAllAction(); - pSh->ViewShell::UpdateFlds(TRUE); + pSh->ViewShell::UpdateFlds(sal_True); pSh->SetModified(); pSh->EndAllAction(); - return TRUE; + return sal_True; } void SwNewDBMgr::ImportFromConnection( SwWrtShell* pSh ) @@ -483,8 +481,8 @@ void SwNewDBMgr::ImportFromConnection( SwWrtShell* pSh ) { pSh->StartAllAction(); pSh->StartUndo(UNDO_EMPTY); - BOOL bGroupUndo(pSh->DoesGroupUndo()); - pSh->DoGroupUndo(FALSE); + sal_Bool bGroupUndo(pSh->DoesGroupUndo()); + pSh->DoGroupUndo(sal_False); if( pSh->HasSelection() ) pSh->DelRight(); @@ -492,12 +490,12 @@ void SwNewDBMgr::ImportFromConnection( SwWrtShell* pSh ) SwWait *pWait = 0; { - ULONG i = 0; + sal_uLong i = 0; do { ImportDBEntry(pSh); if( 10 == ++i ) - pWait = new SwWait( *pSh->GetView().GetDocShell(), TRUE); + pWait = new SwWait( *pSh->GetView().GetDocShell(), sal_True); } while(ToNextMergeRecord()); } @@ -510,10 +508,10 @@ void SwNewDBMgr::ImportFromConnection( SwWrtShell* pSh ) } } -String lcl_FindColumn(const String& sFormatStr,USHORT &nUsedPos, BYTE &nSeparator) +String lcl_FindColumn(const String& sFormatStr,sal_uInt16 &nUsedPos, sal_uInt8 &nSeparator) { String sReturn; - USHORT nLen = sFormatStr.Len(); + sal_uInt16 nLen = sFormatStr.Len(); nSeparator = 0xff; while(nUsedPos < nLen && nSeparator == 0xff) { @@ -548,13 +546,13 @@ void SwNewDBMgr::ImportDBEntry(SwWrtShell* pSh) uno::Reference< XColumnsSupplier > xColsSupp( pImpl->pMergeData->xResultSet, UNO_QUERY ); uno::Reference<XNameAccess> xCols = xColsSupp->getColumns(); String sFormatStr; - USHORT nFmtLen = sFormatStr.Len(); + sal_uInt16 nFmtLen = sFormatStr.Len(); if( nFmtLen ) { const char cSpace = ' '; const char cTab = '\t'; - USHORT nUsedPos = 0; - BYTE nSeparator; + sal_uInt16 nUsedPos = 0; + sal_uInt8 nSeparator; String sColumn = lcl_FindColumn(sFormatStr, nUsedPos, nSeparator); while( sColumn.Len() ) { @@ -614,19 +612,20 @@ void SwNewDBMgr::ImportDBEntry(SwWrtShell* pSh) /*-------------------------------------------------------------------- Description: fill Listbox with tablelist --------------------------------------------------------------------*/ -BOOL SwNewDBMgr::GetTableNames(ListBox* pListBox, const String& rDBName) +sal_Bool SwNewDBMgr::GetTableNames(ListBox* pListBox, const String& rDBName) { - BOOL bRet = FALSE; + sal_Bool bRet = sal_False; String sOldTableName(pListBox->GetSelectEntry()); pListBox->Clear(); - SwDSParam* pParam = FindDSConnection(rDBName, FALSE); + SwDSParam* pParam = FindDSConnection(rDBName, sal_False); uno::Reference< XConnection> xConnection; if(pParam && pParam->xConnection.is()) xConnection = pParam->xConnection; else { rtl::OUString sDBName(rDBName); - xConnection = RegisterConnection( sDBName ); + if ( sDBName.getLength() ) + xConnection = RegisterConnection( sDBName ); } if(xConnection.is()) { @@ -638,7 +637,7 @@ BOOL SwNewDBMgr::GetTableNames(ListBox* pListBox, const String& rDBName) const rtl::OUString* pTbls = aTbls.getConstArray(); for(long i = 0; i < aTbls.getLength(); i++) { - USHORT nEntry = pListBox->InsertEntry(pTbls[i]); + sal_uInt16 nEntry = pListBox->InsertEntry(pTbls[i]); pListBox->SetEntryData(nEntry, (void*)0); } } @@ -650,13 +649,13 @@ BOOL SwNewDBMgr::GetTableNames(ListBox* pListBox, const String& rDBName) const rtl::OUString* pQueries = aQueries.getConstArray(); for(long i = 0; i < aQueries.getLength(); i++) { - USHORT nEntry = pListBox->InsertEntry(pQueries[i]); + sal_uInt16 nEntry = pListBox->InsertEntry(pQueries[i]); pListBox->SetEntryData(nEntry, (void*)1); } } if (sOldTableName.Len()) pListBox->SelectEntry(sOldTableName); - bRet = TRUE; + bRet = sal_True; } return bRet; } @@ -664,8 +663,8 @@ BOOL SwNewDBMgr::GetTableNames(ListBox* pListBox, const String& rDBName) /*-------------------------------------------------------------------- Description: fill Listbox with column names of a database --------------------------------------------------------------------*/ -BOOL SwNewDBMgr::GetColumnNames(ListBox* pListBox, - const String& rDBName, const String& rTableName, BOOL bAppend) +sal_Bool SwNewDBMgr::GetColumnNames(ListBox* pListBox, + const String& rDBName, const String& rTableName, sal_Bool bAppend) { if (!bAppend) pListBox->Clear(); @@ -673,7 +672,7 @@ BOOL SwNewDBMgr::GetColumnNames(ListBox* pListBox, aData.sDataSource = rDBName; aData.sCommand = rTableName; aData.nCommandType = -1; - SwDSParam* pParam = FindDSData(aData, FALSE); + SwDSParam* pParam = FindDSData(aData, sal_False); uno::Reference< XConnection> xConnection; if(pParam && pParam->xConnection.is()) xConnection = pParam->xConnection; @@ -694,12 +693,12 @@ BOOL SwNewDBMgr::GetColumnNames(ListBox* pListBox, } ::comphelper::disposeComponent( xColsSupp ); } - return(TRUE); + return(sal_True); } -BOOL SwNewDBMgr::GetColumnNames(ListBox* pListBox, +sal_Bool SwNewDBMgr::GetColumnNames(ListBox* pListBox, uno::Reference< XConnection> xConnection, - const String& rTableName, BOOL bAppend) + const String& rTableName, sal_Bool bAppend) { if (!bAppend) pListBox->Clear(); @@ -715,7 +714,7 @@ BOOL SwNewDBMgr::GetColumnNames(ListBox* pListBox, } ::comphelper::disposeComponent( xColsSupp ); } - return(TRUE); + return(sal_True); } /*-------------------------------------------------------------------- @@ -723,10 +722,10 @@ BOOL SwNewDBMgr::GetColumnNames(ListBox* pListBox, --------------------------------------------------------------------*/ SwNewDBMgr::SwNewDBMgr() : nMergeType(DBMGR_INSERT), - bInitDBFields(FALSE), - bInMerge(FALSE), - bMergeSilent(FALSE), - bMergeLock(FALSE), + bInitDBFields(sal_False), + bInMerge(sal_False), + bMergeSilent(sal_False), + bMergeLock(sal_False), pImpl(new SwNewDBMgr_Impl(*this)), pMergeEvtSrc(NULL) { @@ -734,7 +733,7 @@ SwNewDBMgr::SwNewDBMgr() : SwNewDBMgr::~SwNewDBMgr() { - for(USHORT nPos = 0; nPos < aDataSourceParams.Count(); nPos++) + for(sal_uInt16 nPos = 0; nPos < aDataSourceParams.Count(); nPos++) { SwDSParam* pParam = aDataSourceParams[nPos]; if(pParam->xConnection.is()) @@ -757,7 +756,7 @@ SwNewDBMgr::~SwNewDBMgr() /*-------------------------------------------------------------------- Description: save bulk letters as single documents --------------------------------------------------------------------*/ -String lcl_FindUniqueName(SwWrtShell* pTargetShell, const String& rStartingPageDesc, ULONG nDocNo ) +String lcl_FindUniqueName(SwWrtShell* pTargetShell, const String& rStartingPageDesc, sal_uLong nDocNo ) { do { @@ -771,7 +770,7 @@ String lcl_FindUniqueName(SwWrtShell* pTargetShell, const String& rStartingPageD void lcl_CopyDynamicDefaults( const SwDoc& rSource, SwDoc& rTarget ) { - USHORT aRangeOfDefaults[] = { + sal_uInt16 aRangeOfDefaults[] = { RES_FRMATR_BEGIN, RES_FRMATR_END-1, RES_CHRATR_BEGIN, RES_CHRATR_END-1, RES_PARATR_BEGIN, RES_PARATR_END-1, @@ -782,8 +781,8 @@ void lcl_CopyDynamicDefaults( const SwDoc& rSource, SwDoc& rTarget ) SfxItemSet aNewDefaults( rTarget.GetAttrPool(), aRangeOfDefaults ); - USHORT nWhich; - USHORT nRange = 0; + sal_uInt16 nWhich; + sal_uInt16 nRange = 0; while( aRangeOfDefaults[nRange] != 0) { for( nWhich = aRangeOfDefaults[nRange]; nWhich < aRangeOfDefaults[nRange + 1]; ++nWhich ) @@ -802,7 +801,7 @@ void lcl_CopyFollowPageDesc( SwWrtShell& rTargetShell, const SwPageDesc& rSourcePageDesc, const SwPageDesc& rTargetPageDesc, - const ULONG nDocNo ) + const sal_uLong nDocNo ) { //now copy the follow page desc, too const SwPageDesc* pFollowPageDesc = rSourcePageDesc.GetFollow(); @@ -821,13 +820,30 @@ void lcl_CopyFollowPageDesc( } } -BOOL SwNewDBMgr::MergeMailFiles(SwWrtShell* pSourceShell, +void lcl_RemoveSectionLinks( SwWrtShell& rWorkShell ) +{ + //reset all links of the sections of synchronized labels + sal_uInt16 nSections = rWorkShell.GetSectionFmtCount(); + for( sal_uInt16 nSection = 0; nSection < nSections; ++nSection ) + { + SwSectionData aSectionData( *rWorkShell.GetSectionFmt( nSection ).GetSection() ); + if( aSectionData.GetType() == FILE_LINK_SECTION ) + { + aSectionData.SetType( CONTENT_SECTION ); + aSectionData.SetLinkFileName( String() ); + rWorkShell.UpdateSection( nSection, aSectionData ); + } + } + rWorkShell.SetLabelDoc( sal_False ); +} + +sal_Bool SwNewDBMgr::MergeMailFiles(SwWrtShell* pSourceShell, const SwMergeDescriptor& rMergeDescriptor) { //check if the doc is synchronized and contains at least one linked section - BOOL bSynchronizedDoc = pSourceShell->IsLabelDoc() && pSourceShell->GetSectionFmtCount() > 1; - BOOL bLoop = TRUE; - BOOL bEMail = rMergeDescriptor.nMergeType == DBMGR_MERGE_MAILING; + sal_Bool bSynchronizedDoc = pSourceShell->IsLabelDoc() && pSourceShell->GetSectionFmtCount() > 1; + sal_Bool bLoop = sal_True; + sal_Bool bEMail = rMergeDescriptor.nMergeType == DBMGR_MERGE_MAILING; const bool bAsSingleFile = rMergeDescriptor.nMergeType == DBMGR_MERGE_SINGLE_FILE; ::rtl::Reference< MailDispatcher > xMailDispatcher; @@ -852,14 +868,14 @@ BOOL SwNewDBMgr::MergeMailFiles(SwWrtShell* pSourceShell, uno::Reference< XPropertySet > xColumnProp; { - BOOL bColumnName = sEMailAddrFld.Len() > 0; + sal_Bool bColumnName = sEMailAddrFld.Len() > 0; if (bColumnName) { uno::Reference< XColumnsSupplier > xColsSupp( pImpl->pMergeData->xResultSet, UNO_QUERY ); uno::Reference<XNameAccess> xCols = xColsSupp->getColumns(); if(!xCols->hasByName(sEMailAddrFld)) - return FALSE; + return sal_False; Any aCol = xCols->getByName(sEMailAddrFld); aCol >>= xColumnProp; } @@ -895,16 +911,20 @@ BOOL SwNewDBMgr::MergeMailFiles(SwWrtShell* pSourceShell, pStoreToFilterOptions = &rMergeDescriptor.sSaveToFilterOptions; } } - bCancel = FALSE; + bCancel = sal_False; // in case of creating a single resulting file this has to be created here SwWrtShell* pTargetShell = 0; - SfxObjectShellRef xTargetDocShell; + + // the shell will be explicitly closed at the end of the method, but it is + // still more safe to use SfxObjectShellLock here + SfxObjectShellLock xTargetDocShell; + SwView* pTargetView = 0; std::auto_ptr< utl::TempFile > aTempFile; String sModifiedStartingPageDesc; String sStartingPageDesc; - USHORT nStartingPageNo = 0; + sal_uInt16 nStartingPageNo = 0; bool bPageStylesWithHeaderFooter = false; if(bAsSingleFile || rMergeDescriptor.bCreateSingleFile) { @@ -928,7 +948,7 @@ BOOL SwNewDBMgr::MergeMailFiles(SwWrtShell* pSourceShell, pTargetView->GetDocShell()->LoadStylesFromFile( sSourceDocumentURL, aOpt, sal_True ); //determine the page style and number used at the start of the source document - pSourceShell->SttEndDoc(TRUE); + pSourceShell->SttEndDoc(sal_True); nStartingPageNo = pSourceShell->GetVirtPageNum(); sStartingPageDesc = sModifiedStartingPageDesc = pSourceShell->GetPageDesc( pSourceShell->GetCurPageDesc()).GetName(); @@ -958,10 +978,10 @@ BOOL SwNewDBMgr::MergeMailFiles(SwWrtShell* pSourceShell, SfxViewFrame* pViewFrm = SfxViewFrame::GetFirst(pSourrceDocSh); while (pViewFrm) { - pViewFrm->GetDispatcher()->Lock(TRUE); + pViewFrm->GetDispatcher()->Lock(sal_True); pViewFrm = SfxViewFrame::GetNext(*pViewFrm, pSourrceDocSh); } - ULONG nDocNo = 1; + sal_uLong nDocNo = 1; long nStartRow, nEndRow; // collect temporary files @@ -1007,8 +1027,8 @@ BOOL SwNewDBMgr::MergeMailFiles(SwWrtShell* pSourceShell, if( !aTempFile->IsValid() ) { ErrorHandler::HandleError( ERRCODE_IO_NOTSUPPORTED ); - bLoop = FALSE; - bCancel = TRUE; + bLoop = sal_False; + bCancel = sal_True; } else { @@ -1020,12 +1040,13 @@ BOOL SwNewDBMgr::MergeMailFiles(SwWrtShell* pSourceShell, aPrtMonDlg.aPrintInfo.SetText(sStat); // computation time for Save-Monitor: - for (USHORT i = 0; i < 10; i++) + for (sal_uInt16 i = 0; i < 10; i++) Application::Reschedule(); - // create and save new document - SfxObjectShellRef xWorkDocSh( new SwDocShell( SFX_CREATE_MODE_INTERNAL )); - SfxMedium* pWorkMed = new SfxMedium( sSourceDocumentURL, STREAM_STD_READ, TRUE ); + // Create and save new document + // The SfxObjectShell will be closed explicitly later but it is more safe to use SfxObjectShellLock here + SfxObjectShellLock xWorkDocSh( new SwDocShell( SFX_CREATE_MODE_INTERNAL )); + SfxMedium* pWorkMed = new SfxMedium( sSourceDocumentURL, STREAM_STD_READ, sal_True ); pWorkMed->SetFilter( pSfxFlt ); if (xWorkDocSh->DoLoad(pWorkMed)) @@ -1060,12 +1081,16 @@ BOOL SwNewDBMgr::MergeMailFiles(SwWrtShell* pSourceShell, // copy created file into the target document rWorkShell.ConvertFieldsToText(); rWorkShell.SetNumberingRestart(); + if( bSynchronizedDoc ) + { + lcl_RemoveSectionLinks( rWorkShell ); + } // insert the document into the target document - rWorkShell.SttEndDoc(FALSE); - rWorkShell.SttEndDoc(TRUE); + rWorkShell.SttEndDoc(sal_False); + rWorkShell.SttEndDoc(sal_True); rWorkShell.SelAll(); - pTargetShell->SwCrsrShell::SttEndDoc( FALSE ); + pTargetShell->SwCrsrShell::SttEndDoc( sal_False ); //#i72517# the headers and footers are still those from the source - update in case of fields inside header/footer if( !nDocNo && bPageStylesWithHeaderFooter ) pTargetShell->GetView().GetDocShell()->_LoadStyles( *rWorkShell.GetView().GetDocShell(), sal_True ); @@ -1119,7 +1144,7 @@ BOOL SwNewDBMgr::MergeMailFiles(SwWrtShell* pSourceShell, String sFileURL = aTempFileURL.GetMainURL( INetURLObject::NO_DECODE ); SfxMedium* pDstMed = new SfxMedium( sFileURL, - STREAM_STD_READWRITE, TRUE ); + STREAM_STD_READWRITE, sal_True ); pDstMed->SetFilter( pStoreToFilter ); if(pDstMed->GetItemSet()) { @@ -1139,8 +1164,8 @@ BOOL SwNewDBMgr::MergeMailFiles(SwWrtShell* pSourceShell, { // error message ?? ErrorHandler::HandleError( xWorkDocSh->GetError() ); - bCancel = TRUE; - bLoop = FALSE; + bCancel = sal_True; + bLoop = sal_False; } if( bEMail ) { @@ -1176,7 +1201,7 @@ BOOL SwNewDBMgr::MergeMailFiles(SwWrtShell* pSourceShell, { { //read in the temporary file and use it as mail body - SfxMedium aMedium( sFileURL, STREAM_READ, TRUE); + SfxMedium aMedium( sFileURL, STREAM_READ, sal_True); SvStream* pInStream = aMedium.GetInStream(); OSL_ENSURE(pInStream, "no output file created?"); if(pInStream) @@ -1230,7 +1255,7 @@ BOOL SwNewDBMgr::MergeMailFiles(SwWrtShell* pSourceShell, } while( !bCancel && (bSynchronizedDoc && (nStartRow != nEndRow)? ExistsNextRecord() : ToNextMergeRecord())); - aPrtMonDlg.Show( FALSE ); + aPrtMonDlg.Show( sal_False ); // save the single output document if(rMergeDescriptor.bCreateSingleFile || bAsSingleFile) @@ -1241,7 +1266,7 @@ BOOL SwNewDBMgr::MergeMailFiles(SwWrtShell* pSourceShell, INetURLObject aTempFileURL(bAsSingleFile ? sSubject : aTempFile->GetURL()); SfxMedium* pDstMed = new SfxMedium( aTempFileURL.GetMainURL( INetURLObject::NO_DECODE ), - STREAM_STD_READWRITE, TRUE ); + STREAM_STD_READWRITE, sal_True ); pDstMed->SetFilter( pStoreToFilter ); if(pDstMed->GetItemSet()) { @@ -1257,7 +1282,7 @@ BOOL SwNewDBMgr::MergeMailFiles(SwWrtShell* pSourceShell, { // error message ?? ErrorHandler::HandleError( xTargetDocShell->GetError() ); - bLoop = FALSE; + bLoop = sal_False; } } else if( pTargetView ) // must be available! @@ -1315,7 +1340,7 @@ BOOL SwNewDBMgr::MergeMailFiles(SwWrtShell* pSourceShell, pViewFrm = SfxViewFrame::GetFirst(pSourrceDocSh); while (pViewFrm) { - pViewFrm->GetDispatcher()->Lock(FALSE); + pViewFrm->GetDispatcher()->Lock(sal_False); pViewFrm = SfxViewFrame::GetNext(*pViewFrm, pSourrceDocSh); } @@ -1338,7 +1363,7 @@ BOOL SwNewDBMgr::MergeMailFiles(SwWrtShell* pSourceShell, IMPL_LINK_INLINE_START( SwNewDBMgr, PrtCancelHdl, Button *, pButton ) { pButton->GetParent()->Hide(); - bCancel = TRUE; + bCancel = sal_True; return 0; } IMPL_LINK_INLINE_END( SwNewDBMgr, PrtCancelHdl, Button *, pButton ) @@ -1347,13 +1372,13 @@ IMPL_LINK_INLINE_END( SwNewDBMgr, PrtCancelHdl, Button *, pButton ) Description: determine the column's Numberformat and transfer to the forwarded Formatter, if applicable. --------------------------------------------------------------------*/ -ULONG SwNewDBMgr::GetColumnFmt( const String& rDBName, +sal_uLong SwNewDBMgr::GetColumnFmt( const String& rDBName, const String& rTableName, const String& rColNm, SvNumberFormatter* pNFmtr, long nLanguage ) { - ULONG nRet = 0; + sal_uLong nRet = 0; if(pNFmtr) { uno::Reference< XDataSource> xSource; @@ -1375,7 +1400,7 @@ ULONG SwNewDBMgr::GetColumnFmt( const String& rDBName, aData.sDataSource = rDBName; aData.sCommand = rTableName; aData.nCommandType = -1; - SwDSParam* pParam = FindDSData(aData, FALSE); + SwDSParam* pParam = FindDSData(aData, sal_False); if(pParam && pParam->xConnection.is()) { xConnection = pParam->xConnection; @@ -1427,19 +1452,20 @@ ULONG SwNewDBMgr::GetColumnFmt( const String& rDBName, return nRet; } -ULONG SwNewDBMgr::GetColumnFmt( uno::Reference< XDataSource> xSource, +sal_uLong SwNewDBMgr::GetColumnFmt( uno::Reference< XDataSource> xSource, uno::Reference< XConnection> xConnection, uno::Reference< XPropertySet> xColumn, SvNumberFormatter* pNFmtr, long nLanguage ) { // set the NumberFormat in the doc if applicable - ULONG nRet = 0; + sal_uLong nRet = 0; if(!xSource.is()) { uno::Reference<XChild> xChild(xConnection, UNO_QUERY); - xSource = uno::Reference<XDataSource>(xChild->getParent(), UNO_QUERY); + if ( xChild.is() ) + xSource = uno::Reference<XDataSource>(xChild->getParent(), UNO_QUERY); } if(xSource.is() && xConnection.is() && xColumn.is() && pNFmtr) { @@ -1517,7 +1543,7 @@ sal_Int32 SwNewDBMgr::GetColumnType( const String& rDBName, aData.sDataSource = rDBName; aData.sCommand = rTableName; aData.nCommandType = -1; - SwDSParam* pParam = FindDSData(aData, FALSE); + SwDSParam* pParam = FindDSData(aData, sal_False); uno::Reference< XConnection> xConnection; uno::Reference< XColumnsSupplier > xColsSupp; bool bDispose = false; @@ -1576,7 +1602,7 @@ uno::Reference< sdbc::XConnection> SwNewDBMgr::GetConnection(const String& rData uno::Reference< sdbcx::XColumnsSupplier> SwNewDBMgr::GetColumnSupplier(uno::Reference<sdbc::XConnection> xConnection, const String& rTableOrQuery, - BYTE eTableOrQuery) + sal_uInt8 eTableOrQuery) { Reference< sdbcx::XColumnsSupplier> xRet; try @@ -1668,7 +1694,7 @@ String SwNewDBMgr::GetDBField(uno::Reference<XPropertySet> xColumnProps, try { SwDbtoolsClient& aClient = SwNewDBMgr::GetDbtoolsClient(); - sRet = aClient.getValue( + sRet = aClient.getFormattedValue( xColumnProps, rDBFormatData.xFormatter, rDBFormatData.aLocale, @@ -1698,13 +1724,13 @@ String SwNewDBMgr::GetDBField(uno::Reference<XPropertySet> xColumnProps, void SwNewDBMgr::EndMerge() { OSL_ENSURE(bInMerge, "merge is not active"); - bInMerge = FALSE; + bInMerge = sal_False; delete pImpl->pMergeData; pImpl->pMergeData = 0; } // checks if a desired data source table or query is open -BOOL SwNewDBMgr::IsDataSourceOpen(const String& rDataSource, +sal_Bool SwNewDBMgr::IsDataSourceOpen(const String& rDataSource, const String& rTableOrQuery, sal_Bool bMergeOnly) { if(pImpl->pMergeData) @@ -1722,19 +1748,19 @@ BOOL SwNewDBMgr::IsDataSourceOpen(const String& rDataSource, aData.sDataSource = rDataSource; aData.sCommand = rTableOrQuery; aData.nCommandType = -1; - SwDSParam* pFound = FindDSData(aData, FALSE); + SwDSParam* pFound = FindDSData(aData, sal_False); return (pFound && pFound->xResultSet.is()); } return sal_False; } // read column data at a specified position -BOOL SwNewDBMgr::GetColumnCnt(const String& rSourceName, const String& rTableName, +sal_Bool SwNewDBMgr::GetColumnCnt(const String& rSourceName, const String& rTableName, const String& rColumnName, sal_uInt32 nAbsRecordId, long nLanguage, String& rResult, double* pNumber) { - BOOL bRet = FALSE; + sal_Bool bRet = sal_False; SwDSParam* pFound = 0; //check if it's the merge data source if(pImpl->pMergeData && @@ -1749,7 +1775,7 @@ BOOL SwNewDBMgr::GetColumnCnt(const String& rSourceName, const String& rTableNam aData.sDataSource = rSourceName; aData.sCommand = rTableName; aData.nCommandType = -1; - pFound = FindDSData(aData, FALSE); + pFound = FindDSData(aData, sal_False); } //check validity of supplied record Id if(pFound->aSelection.getLength()) @@ -1765,7 +1791,7 @@ BOOL SwNewDBMgr::GetColumnCnt(const String& rSourceName, const String& rTableNam bFound = sal_True; } if(!bFound) - return FALSE; + return sal_False; } if(pFound && pFound->xResultSet.is() && !pFound->bAfterSelection) { @@ -1776,10 +1802,10 @@ BOOL SwNewDBMgr::GetColumnCnt(const String& rSourceName, const String& rTableNam } catch(const Exception& ) { - return FALSE; + return sal_False; } //position to the desired index - BOOL bMove = TRUE; + sal_Bool bMove = sal_True; if ( nOldRow != static_cast<sal_Int32>(nAbsRecordId) ) bMove = lcl_MoveAbsolute(pFound, nAbsRecordId); if(bMove) @@ -1794,26 +1820,26 @@ BOOL SwNewDBMgr::GetColumnCnt(const String& rSourceName, const String& rTableNam // reads the column data at the current position -BOOL SwNewDBMgr::GetMergeColumnCnt(const String& rColumnName, USHORT nLanguage, +sal_Bool SwNewDBMgr::GetMergeColumnCnt(const String& rColumnName, sal_uInt16 nLanguage, String &rResult, double *pNumber, sal_uInt32 * /*pFormat*/) { if(!pImpl->pMergeData || !pImpl->pMergeData->xResultSet.is() || pImpl->pMergeData->bAfterSelection ) { rResult.Erase(); - return FALSE; + return sal_False; } - BOOL bRet = lcl_GetColumnCnt(pImpl->pMergeData, rColumnName, nLanguage, rResult, pNumber); + sal_Bool bRet = lcl_GetColumnCnt(pImpl->pMergeData, rColumnName, nLanguage, rResult, pNumber); return bRet; } -BOOL SwNewDBMgr::ToNextMergeRecord() +sal_Bool SwNewDBMgr::ToNextMergeRecord() { OSL_ENSURE(pImpl->pMergeData && pImpl->pMergeData->xResultSet.is(), "no data source in merge"); return ToNextRecord(pImpl->pMergeData); } -BOOL SwNewDBMgr::ToNextRecord( +sal_Bool SwNewDBMgr::ToNextRecord( const String& rDataSource, const String& rCommand, sal_Int32 /*nCommandType*/) { SwDSParam* pFound = 0; @@ -1827,20 +1853,20 @@ BOOL SwNewDBMgr::ToNextRecord( aData.sDataSource = rDataSource; aData.sCommand = rCommand; aData.nCommandType = -1; - pFound = FindDSData(aData, FALSE); + pFound = FindDSData(aData, sal_False); } return ToNextRecord(pFound); } -BOOL SwNewDBMgr::ToNextRecord(SwDSParam* pParam) +sal_Bool SwNewDBMgr::ToNextRecord(SwDSParam* pParam) { - BOOL bRet = TRUE; + sal_Bool bRet = sal_True; if(!pParam || !pParam->xResultSet.is() || pParam->bEndOfDB || (pParam->aSelection.getLength() && pParam->aSelection.getLength() <= pParam->nSelectionIndex)) { if(pParam) pParam->CheckEndOfDB(); - return FALSE; + return sal_False; } try { @@ -1852,7 +1878,7 @@ BOOL SwNewDBMgr::ToNextRecord(SwDSParam* pParam) pParam->CheckEndOfDB(); bRet = !pParam->bEndOfDB; if(pParam->nSelectionIndex >= pParam->aSelection.getLength()) - pParam->bEndOfDB = TRUE; + pParam->bEndOfDB = sal_True; } else { @@ -1880,7 +1906,7 @@ BOOL SwNewDBMgr::ToNextRecord(SwDSParam* pParam) to assure that the next page can be created in mail merge the cursor position must be validated ---------------------------------------------------------------------------*/ -BOOL SwNewDBMgr::ExistsNextRecord() const +sal_Bool SwNewDBMgr::ExistsNextRecord() const { return pImpl->pMergeData && !pImpl->pMergeData->bEndOfDB; } @@ -1890,7 +1916,7 @@ sal_uInt32 SwNewDBMgr::GetSelectedRecordId() sal_uInt32 nRet = 0; OSL_ENSURE(pImpl->pMergeData && pImpl->pMergeData->xResultSet.is(), "no data source in merge"); if(!pImpl->pMergeData || !pImpl->pMergeData->xResultSet.is()) - return FALSE; + return sal_False; try { nRet = pImpl->pMergeData->xResultSet->getRow(); @@ -1905,8 +1931,8 @@ sal_Bool SwNewDBMgr::ToRecordId(sal_Int32 nSet) { OSL_ENSURE(pImpl->pMergeData && pImpl->pMergeData->xResultSet.is(), "no data source in merge"); if(!pImpl->pMergeData || !pImpl->pMergeData->xResultSet.is()|| nSet < 0) - return FALSE; - sal_Bool bRet = FALSE; + return sal_False; + sal_Bool bRet = sal_False; sal_Int32 nAbsPos = nSet; if(nAbsPos >= 0) @@ -1918,7 +1944,7 @@ sal_Bool SwNewDBMgr::ToRecordId(sal_Int32 nSet) return bRet; } -BOOL SwNewDBMgr::OpenDataSource(const String& rDataSource, const String& rTableOrQuery, +sal_Bool SwNewDBMgr::OpenDataSource(const String& rDataSource, const String& rTableOrQuery, sal_Int32 nCommandType, bool bCreate) { SwDBData aData; @@ -1926,11 +1952,11 @@ BOOL SwNewDBMgr::OpenDataSource(const String& rDataSource, const String& rTableO aData.sCommand = rTableOrQuery; aData.nCommandType = nCommandType; - SwDSParam* pFound = FindDSData(aData, TRUE); + SwDSParam* pFound = FindDSData(aData, sal_True); uno::Reference< XDataSource> xSource; if(pFound->xResultSet.is()) - return TRUE; - SwDSParam* pParam = FindDSConnection(rDataSource, FALSE); + return sal_True; + SwDSParam* pParam = FindDSConnection(rDataSource, sal_False); uno::Reference< XConnection> xConnection; if(pParam && pParam->xConnection.is()) pFound->xConnection = pParam->xConnection; @@ -1952,7 +1978,7 @@ BOOL SwNewDBMgr::OpenDataSource(const String& rDataSource, const String& rTableO catch(Exception&) { // DB driver may not be ODBC 3.0 compliant - pFound->bScrollable = TRUE; + pFound->bScrollable = sal_True; } pFound->xStatement = pFound->xConnection->createStatement(); rtl::OUString aQuoteChar = xMetaData->getIdentifierQuoteString(); @@ -1981,7 +2007,7 @@ BOOL SwNewDBMgr::OpenDataSource(const String& rDataSource, const String& rTableO uno::Reference< XConnection> SwNewDBMgr::RegisterConnection(rtl::OUString& rDataSource) { - SwDSParam* pFound = SwNewDBMgr::FindDSConnection(rDataSource, TRUE); + SwDSParam* pFound = SwNewDBMgr::FindDSConnection(rDataSource, sal_True); uno::Reference< XDataSource> xSource; if(!pFound->xConnection.is()) { @@ -2015,7 +2041,7 @@ sal_uInt32 SwNewDBMgr::GetSelectedRecordId( aData.sDataSource = rDataSource; aData.sCommand = rTableOrQuery; aData.nCommandType = nCommandType; - SwDSParam* pFound = FindDSData(aData, FALSE); + SwDSParam* pFound = FindDSData(aData, sal_False); if(pFound && pFound->xResultSet.is()) { try @@ -2039,11 +2065,11 @@ sal_uInt32 SwNewDBMgr::GetSelectedRecordId( // close all data sources - after fields were updated -void SwNewDBMgr::CloseAll(BOOL bIncludingMerge) +void SwNewDBMgr::CloseAll(sal_Bool bIncludingMerge) { //the only thing done here is to reset the selection index //all connections stay open - for(USHORT nPos = 0; nPos < aDataSourceParams.Count(); nPos++) + for(sal_uInt16 nPos = 0; nPos < aDataSourceParams.Count(); nPos++) { SwDSParam* pParam = aDataSourceParams[nPos]; if(bIncludingMerge || pParam != pImpl->pMergeData) @@ -2062,7 +2088,7 @@ void SwNewDBMgr::CloseAll(BOOL bIncludingMerge) } } -SwDSParam* SwNewDBMgr::FindDSData(const SwDBData& rData, BOOL bCreate) +SwDSParam* SwNewDBMgr::FindDSData(const SwDBData& rData, sal_Bool bCreate) { //prefer merge data if available if(pImpl->pMergeData && rData.sDataSource == pImpl->pMergeData->sDataSource && @@ -2074,7 +2100,7 @@ SwDSParam* SwNewDBMgr::FindDSData(const SwDBData& rData, BOOL bCreate) } SwDSParam* pFound = 0; - for(USHORT nPos = aDataSourceParams.Count(); nPos; nPos--) + for(sal_uInt16 nPos = aDataSourceParams.Count(); nPos; nPos--) { SwDSParam* pParam = aDataSourceParams[nPos - 1]; if(rData.sDataSource == pParam->sDataSource && @@ -2111,7 +2137,7 @@ SwDSParam* SwNewDBMgr::FindDSData(const SwDBData& rData, BOOL bCreate) return pFound; } -SwDSParam* SwNewDBMgr::FindDSConnection(const rtl::OUString& rDataSource, BOOL bCreate) +SwDSParam* SwNewDBMgr::FindDSConnection(const rtl::OUString& rDataSource, sal_Bool bCreate) { //prefer merge data if available if(pImpl->pMergeData && rDataSource == pImpl->pMergeData->sDataSource ) @@ -2119,7 +2145,7 @@ SwDSParam* SwNewDBMgr::FindDSConnection(const rtl::OUString& rDataSource, BOOL return pImpl->pMergeData; } SwDSParam* pFound = 0; - for(USHORT nPos = 0; nPos < aDataSourceParams.Count(); nPos++) + for(sal_uInt16 nPos = 0; nPos < aDataSourceParams.Count(); nPos++) { SwDSParam* pParam = aDataSourceParams[nPos]; if(rDataSource == pParam->sDataSource) @@ -2361,7 +2387,7 @@ String SwNewDBMgr::LoadAndRegisterDataSource() void SwNewDBMgr::ExecuteFormLetter( SwWrtShell& rSh, const Sequence<PropertyValue>& rProperties, - BOOL bWithDataSourceBrowser) + sal_Bool bWithDataSourceBrowser) { //prevent second call if(pImpl->pMergeDialog) @@ -2393,7 +2419,7 @@ void SwNewDBMgr::ExecuteFormLetter( SwWrtShell& rSh, if(!xConnection.is()) { xConnection = SwNewDBMgr::RegisterConnection(sDataSource); - pFound = FindDSConnection(sDataSource, TRUE); + pFound = FindDSConnection(sDataSource, sal_True); } SwAbstractDialogFactory* pFact = SwAbstractDialogFactory::Create(); OSL_ENSURE(pFact, "Dialogdiet fail!"); @@ -2413,6 +2439,7 @@ void SwNewDBMgr::ExecuteFormLetter( SwWrtShell& rSh, if(xResSet.is()) aDescriptor[daCursor] <<= xResSet; + // SfxObjectShellRef is ok, since there should be no control over the document lifetime here SfxObjectShellRef xDocShell = rSh.GetView().GetViewFrame()->GetObjectShell(); SFX_APP()->NotifyEvent(SfxEventHint(SW_EVENT_MAIL_MERGE, SwDocShell::GetEventName(STR_SW_EVENT_MAIL_MERGE), xDocShell)); { @@ -2443,8 +2470,10 @@ void SwNewDBMgr::ExecuteFormLetter( SwWrtShell& rSh, } else { - SfxObjectShellRef xWorkDocSh( new SwDocShell( SFX_CREATE_MODE_INTERNAL )); - SfxMedium* pWorkMed = new SfxMedium( sTempURL, STREAM_STD_READ, TRUE ); + // the shell will be explicitly closed, but it is more safe to use SfxObjectShellLock here + // especially for the case that the loading has failed + SfxObjectShellLock xWorkDocSh( new SwDocShell( SFX_CREATE_MODE_INTERNAL )); + SfxMedium* pWorkMed = new SfxMedium( sTempURL, STREAM_STD_READ, sal_True ); pWorkMed->SetFilter( pSfxFlt ); if( xWorkDocSh->DoLoad(pWorkMed) ) { @@ -2489,7 +2518,7 @@ void SwNewDBMgr::ExecuteFormLetter( SwWrtShell& rSh, } if(pFound) { - for(USHORT nPos = 0; nPos < aDataSourceParams.Count(); nPos++) + for(sal_uInt16 nPos = 0; nPos < aDataSourceParams.Count(); nPos++) { SwDSParam* pParam = aDataSourceParams[nPos]; if(pParam == pFound) @@ -2664,7 +2693,7 @@ sal_Int32 SwNewDBMgr::MergeDocuments( SwMailMergeConfigItem& rMMConfig, uno::Reference< XResultSet> xResultSet = rMMConfig.GetResultSet(); if(!xResultSet.is()) return false; - bInMerge = TRUE; + bInMerge = sal_True; sal_Int32 nRet = 0; pImpl->pMergeData = new SwDSParam( rMMConfig.GetCurrentDBData(), xResultSet, rMMConfig.GetSelection()); @@ -2678,7 +2707,7 @@ sal_Int32 SwNewDBMgr::MergeDocuments( SwMailMergeConfigItem& rMMConfig, pImpl->pMergeData->bEndOfDB = !pImpl->pMergeData->xResultSet->absolute( nPos ); pImpl->pMergeData->CheckEndOfDB(); if(pImpl->pMergeData->nSelectionIndex >= pImpl->pMergeData->aSelection.getLength()) - pImpl->pMergeData->bEndOfDB = TRUE; + pImpl->pMergeData->bEndOfDB = sal_True; } else { @@ -2688,13 +2717,13 @@ sal_Int32 SwNewDBMgr::MergeDocuments( SwMailMergeConfigItem& rMMConfig, } catch(Exception&) { - pImpl->pMergeData->bEndOfDB = TRUE; + pImpl->pMergeData->bEndOfDB = sal_True; pImpl->pMergeData->CheckEndOfDB(); OSL_ENSURE(false, "exception in MergeNew()"); } //bCancel is set from the PrintMonitor - bCancel = FALSE; + bCancel = sal_False; CreateMonitor aMonitorDlg(&rSourceView.GetEditWin()); aMonitorDlg.SetCancelHdl(LINK(this, SwNewDBMgr, PrtCancelHdl)); @@ -2704,15 +2733,15 @@ sal_Int32 SwNewDBMgr::MergeDocuments( SwMailMergeConfigItem& rMMConfig, aMonitorDlg.Invalidate(); aMonitorDlg.Update(); // the print monitor needs some time to act - for( USHORT i = 0; i < 25; i++) + for( sal_uInt16 i = 0; i < 25; i++) Application::Reschedule(); } SwWrtShell& rSourceShell = rSourceView.GetWrtShell(); - BOOL bSynchronizedDoc = rSourceShell.IsLabelDoc() && rSourceShell.GetSectionFmtCount() > 1; + sal_Bool bSynchronizedDoc = rSourceShell.IsLabelDoc() && rSourceShell.GetSectionFmtCount() > 1; //save the settings of the first - rSourceShell.SttEndDoc(TRUE); - USHORT nStartingPageNo = rSourceShell.GetVirtPageNum(); + rSourceShell.SttEndDoc(sal_True); + sal_uInt16 nStartingPageNo = rSourceShell.GetVirtPageNum(); String sModifiedStartingPageDesc; String sStartingPageDesc = sModifiedStartingPageDesc = rSourceShell.GetPageDesc( rSourceShell.GetCurPageDesc()).GetName(); @@ -2748,7 +2777,7 @@ sal_Int32 SwNewDBMgr::MergeDocuments( SwMailMergeConfigItem& rMMConfig, long nStartRow, nEndRow; - ULONG nDocNo = 1; + sal_uLong nDocNo = 1; sal_Int32 nDocCount = 0; if( !IsMergeSilent() && lcl_getCountFromResultSet( nDocCount, pImpl->pMergeData->xResultSet ) ) aMonitorDlg.SetTotalCount( nDocCount ); @@ -2762,12 +2791,13 @@ sal_Int32 SwNewDBMgr::MergeDocuments( SwMailMergeConfigItem& rMMConfig, aMonitorDlg.Invalidate(); aMonitorDlg.Update(); // the print monitor needs some time to act - for( USHORT i = 0; i < 25; i++) + for( sal_uInt16 i = 0; i < 25; i++) Application::Reschedule(); } // copy the source document - SfxObjectShellRef xWorkDocSh; + // the copy will be closed later, but it is more safe to use SfxObjectShellLock here + SfxObjectShellLock xWorkDocSh; if(nDocNo == 1 ) { uno::Reference< util::XCloneable > xClone( rSourceView.GetDocShell()->GetModel(), uno::UNO_QUERY); @@ -2789,8 +2819,14 @@ sal_Int32 SwNewDBMgr::MergeDocuments( SwMailMergeConfigItem& rMMConfig, SwNewDBMgr* pWorkDBMgr = pWorkDoc->GetNewDBMgr(); pWorkDoc->SetNewDBMgr( this ); pWorkDoc->EmbedAllLinks(); - if(UNDO_UI_DELETE_INVISIBLECNTNT == rWorkShell.GetUndoIds()) - rWorkShell.Undo(); + SwUndoId nLastUndoId(UNDO_EMPTY); + if (rWorkShell.GetLastUndoInfo(0, & nLastUndoId)) + { + if (UNDO_UI_DELETE_INVISIBLECNTNT == nLastUndoId) + { + rWorkShell.Undo(); + } + } // #i69485# lock fields to prevent access to the result set while calculating layout rWorkShell.LockExpFlds(); // create a layout @@ -2804,13 +2840,16 @@ sal_Int32 SwNewDBMgr::MergeDocuments( SwMailMergeConfigItem& rMMConfig, rWorkShell.RemoveInvisibleContent(); rWorkShell.ConvertFieldsToText(); rWorkShell.SetNumberingRestart(); - + if( bSynchronizedDoc ) + { + lcl_RemoveSectionLinks( rWorkShell ); + } // insert the document into the target document - rWorkShell.SttEndDoc(FALSE); - rWorkShell.SttEndDoc(TRUE); + rWorkShell.SttEndDoc(sal_False); + rWorkShell.SttEndDoc(sal_True); rWorkShell.SelAll(); - pTargetShell->SttEndDoc(FALSE); + pTargetShell->SttEndDoc(sal_False); //#i63806# put the styles to the target document //if the source uses headers or footers each new copy need to copy a new page styles @@ -2844,7 +2883,7 @@ sal_Int32 SwNewDBMgr::MergeDocuments( SwMailMergeConfigItem& rMMConfig, { pTargetShell->SetPageStyle(sModifiedStartingPageDesc); } - USHORT nPageCountBefore = pTargetShell->GetPageCnt(); + sal_uInt16 nPageCountBefore = pTargetShell->GetPageCnt(); OSL_ENSURE(!pTargetShell->GetTableFmt(),"target document ends with a table - paragraph should be appended"); //#i51359# add a second paragraph in case there's only one { @@ -2875,7 +2914,7 @@ sal_Int32 SwNewDBMgr::MergeDocuments( SwMailMergeConfigItem& rMMConfig, ++nRet; // the print monitor needs some time to act - for( USHORT i = 0; i < 25; i++) + for( sal_uInt16 i = 0; i < 25; i++) Application::Reschedule(); //restore the ole DBMgr @@ -2906,7 +2945,7 @@ sal_Int32 SwNewDBMgr::MergeDocuments( SwMailMergeConfigItem& rMMConfig, OSL_ENSURE(false, "exception caught in SwNewDBMgr::MergeDocuments"); } DELETEZ(pImpl->pMergeData); - bInMerge = FALSE; + bInMerge = sal_False; return nRet; } @@ -2924,7 +2963,7 @@ void SwConnectionDisposedListener_Impl::disposing( const EventObject& rSource ) { ::SolarMutexGuard aGuard; uno::Reference<XConnection> xSource(rSource.Source, UNO_QUERY); - for(USHORT nPos = rDBMgr.aDataSourceParams.Count(); nPos; nPos--) + for(sal_uInt16 nPos = rDBMgr.aDataSourceParams.Count(); nPos; nPos--) { SwDSParam* pParam = rDBMgr.aDataSourceParams[nPos - 1]; if(pParam->xConnection.is() && |