[Libreoffice-commits] core.git: Branch 'aoo/trunk' - sw/inc sw/source xmloff/source
Oliver-Rainer Wittmann
orw at apache.org
Wed Jan 8 08:07:49 PST 2014
sw/inc/IDocumentMarkAccess.hxx | 2
sw/inc/doc.hxx | 38 ++++++++---
sw/source/core/crsr/annotationmark.cxx | 1
sw/source/core/doc/docbm.cxx | 106 ++++++++++++++++++++-------------
sw/source/core/doc/doccorr.cxx | 20 +++---
sw/source/core/undo/undobj.cxx | 13 +++-
sw/source/core/unocore/unoobj.cxx | 72 +++++++++++++---------
sw/source/ui/docvw/SidebarWin.cxx | 25 ++++++-
sw/source/ui/shells/textfld.cxx | 3
sw/source/ui/wrtsh/wrtsh2.cxx | 21 +++++-
xmloff/source/text/txtfldi.cxx | 4 -
11 files changed, 200 insertions(+), 105 deletions(-)
New commits:
commit c25523dd3a302d1bd36297a817a869afb3605d1f
Author: Oliver-Rainer Wittmann <orw at apache.org>
Date: Wed Jan 8 14:20:43 2014 +0000
123792: correction for comments/annotations on table cell ranges
diff --git a/sw/inc/IDocumentMarkAccess.hxx b/sw/inc/IDocumentMarkAccess.hxx
index d263d0e..7cde48a 100644
--- a/sw/inc/IDocumentMarkAccess.hxx
+++ b/sw/inc/IDocumentMarkAccess.hxx
@@ -260,7 +260,7 @@ class IDocumentMarkAccess
virtual const_iterator_t findAnnotationMark( const ::rtl::OUString& rName ) const = 0;
// Returns the MarkType used to create the mark
- static MarkType SAL_DLLPUBLIC_EXPORT GetType(const ::sw::mark::IMark& rMark);
+ static SAL_DLLPUBLIC_EXPORT MarkType GetType(const ::sw::mark::IMark& rMark);
static SAL_DLLPUBLIC_EXPORT const ::rtl::OUString& GetCrossRefHeadingBookmarkNamePrefix();
static SAL_DLLPUBLIC_EXPORT bool IsLegalPaMForCrossRefHeadingBookmark( const SwPaM& );
diff --git a/sw/inc/doc.hxx b/sw/inc/doc.hxx
index 3f67f86..d18e58b 100644
--- a/sw/inc/doc.hxx
+++ b/sw/inc/doc.hxx
@@ -1491,18 +1491,32 @@ public:
// wie z.B. die ::com::sun::star::text::Bookmarks oder die Verzeichnisse.
// JP 22.06.95: ist bMoveCrsr gesetzt, verschiebe auch die Crsr
- // Setzt alles in rOldNode auf rNewPos + Offset
- void CorrAbs( const SwNodeIndex& rOldNode, const SwPosition& rNewPos,
- const xub_StrLen nOffset = 0, sal_Bool bMoveCrsr = sal_False );
- // Setzt alles im Bereich von [rStartNode, rEndNode] nach rNewPos
- void CorrAbs( const SwNodeIndex& rStartNode, const SwNodeIndex& rEndNode,
- const SwPosition& rNewPos, sal_Bool bMoveCrsr = sal_False );
- // Setzt alles im Bereich von rRange nach rNewPos
- void CorrAbs( const SwPaM& rRange, const SwPosition& rNewPos,
- sal_Bool bMoveCrsr = sal_False );
- // Setzt alles in rOldNode auf relative Pos
- void CorrRel( const SwNodeIndex& rOldNode, const SwPosition& rNewPos,
- const xub_StrLen nOffset = 0, sal_Bool bMoveCrsr = sal_False );
+ // Setzt alles in rOldNode auf rNewPos + Offset
+ void CorrAbs(
+ const SwNodeIndex& rOldNode,
+ const SwPosition& rNewPos,
+ const xub_StrLen nOffset = 0,
+ sal_Bool bMoveCrsr = sal_False );
+
+ // Setzt alles im Bereich von [rStartNode, rEndNode] nach rNewPos
+ void CorrAbs(
+ const SwNodeIndex& rStartNode,
+ const SwNodeIndex& rEndNode,
+ const SwPosition& rNewPos,
+ sal_Bool bMoveCrsr = sal_False );
+
+ // Setzt alles im Bereich von rRange nach rNewPos
+ void CorrAbs(
+ const SwPaM& rRange,
+ const SwPosition& rNewPos,
+ sal_Bool bMoveCrsr = sal_False );
+
+ // Setzt alles in rOldNode auf relative Pos
+ void CorrRel(
+ const SwNodeIndex& rOldNode,
+ const SwPosition& rNewPos,
+ const xub_StrLen nOffset = 0,
+ sal_Bool bMoveCrsr = sal_False );
// GliederungsRegeln erfragen / setzen
// --> OD 2005-11-02 #i51089 - TUNING#
diff --git a/sw/source/core/crsr/annotationmark.cxx b/sw/source/core/crsr/annotationmark.cxx
index 1c81537..47a92d0 100755
--- a/sw/source/core/crsr/annotationmark.cxx
+++ b/sw/source/core/crsr/annotationmark.cxx
@@ -60,6 +60,7 @@ namespace sw { namespace mark
SwTxtFld* pTxtFld =
GetMarkEnd().nNode.GetNode().GetTxtNode()->GetFldTxtAttrAt(
GetMarkEnd().nContent.GetIndex()-1, true );
+ ASSERT( pTxtFld != NULL, "<AnnotationMark::InitDoc(..)> - missing text attribute for annotation field!" );
if ( pTxtFld != NULL )
{
const SwPostItField* pPostItField = dynamic_cast< const SwPostItField* >(pTxtFld->GetFmtFld().GetField());
diff --git a/sw/source/core/doc/docbm.cxx b/sw/source/core/doc/docbm.cxx
index fc091af..07890d6 100644
--- a/sw/source/core/doc/docbm.cxx
+++ b/sw/source/core/doc/docbm.cxx
@@ -161,18 +161,34 @@ namespace
return max_element(vCandidates.begin(), vCandidates.end(), &lcl_MarkOrderingByEnd)->get();
}
- static bool lcl_FixCorrectedMark(bool bChangedPos, bool bChangedOPos, MarkBase* io_pMark)
+ static bool lcl_FixCorrectedMark(
+ const bool bChangedPos,
+ const bool bChangedOPos,
+ MarkBase* io_pMark )
{
- if( (bChangedPos || bChangedOPos) && io_pMark->IsExpanded() &&
- io_pMark->GetOtherMarkPos().nNode.GetNode().FindTableBoxStartNode() !=
- io_pMark->GetMarkPos().nNode.GetNode().FindTableBoxStartNode() )
+ if ( IDocumentMarkAccess::GetType(*io_pMark) == IDocumentMarkAccess::ANNOTATIONMARK )
{
- if(!bChangedOPos)
- io_pMark->SetMarkPos(io_pMark->GetOtherMarkPos());
+ // annotation marks are allowed to span a table cell range.
+ // but trigger sorting to be save
+ return true;
+ }
+
+ if ( ( bChangedPos || bChangedOPos )
+ && io_pMark->IsExpanded()
+ && io_pMark->GetOtherMarkPos().nNode.GetNode().FindTableBoxStartNode() !=
+ io_pMark->GetMarkPos().nNode.GetNode().FindTableBoxStartNode() )
+ {
+ if ( !bChangedOPos )
+ {
+ io_pMark->SetMarkPos( io_pMark->GetOtherMarkPos() );
+ }
io_pMark->ClearOtherMarkPos();
DdeBookmark * const pDdeBkmk = dynamic_cast< DdeBookmark*>(io_pMark);
- if(pDdeBkmk && pDdeBkmk->IsServer())
+ if ( pDdeBkmk != NULL
+ && pDdeBkmk->IsServer() )
+ {
pDdeBkmk->SetRefObject(NULL);
+ }
return true;
}
return false;
@@ -645,14 +661,14 @@ namespace sw { namespace mark
lcl_GreaterThan(pMark->GetOtherMarkPos(), rStt, pSttIdx) &&
lcl_Lower(pMark->GetOtherMarkPos(), rEnd, pEndIdx));
// special case: completely in range, touching the end?
- if(pEndIdx &&
- ((isOtherPosInRange
- && pMark->GetMarkPos().nNode == rEnd
- && pMark->GetMarkPos().nContent == *pEndIdx)
- || (isPosInRange
- && pMark->IsExpanded()
- && pMark->GetOtherMarkPos().nNode == rEnd
- && pMark->GetOtherMarkPos().nContent == *pEndIdx)))
+ if ( pEndIdx != NULL
+ && ( ( isOtherPosInRange
+ && pMark->GetMarkPos().nNode == rEnd
+ && pMark->GetMarkPos().nContent == *pEndIdx )
+ || ( isPosInRange
+ && pMark->IsExpanded()
+ && pMark->GetOtherMarkPos().nNode == rEnd
+ && pMark->GetOtherMarkPos().nContent == *pEndIdx ) ) )
{
isPosInRange = true, isOtherPosInRange = true;
}
@@ -679,39 +695,51 @@ namespace sw { namespace mark
vMarksToDelete.push_back(ppMark);
}
}
- else if(isPosInRange ^ isOtherPosInRange)
+ else if ( isPosInRange ^ isOtherPosInRange )
{
// the bookmark is partitially in the range
// move position of that is in the range out of it
- auto_ptr<SwPosition> pNewPos;
- if(pEndIdx)
- pNewPos = auto_ptr<SwPosition>(new SwPosition(
- rEnd,
- *pEndIdx));
- else
- pNewPos = lcl_FindExpelPosition(
- rStt,
- rEnd,
- isPosInRange ? pMark->GetOtherMarkPos() : pMark->GetMarkPos());
-
- // --> OD 2009-08-06 #i92125#
- // no move of position for cross-reference bookmarks,
- // if move occurs inside a certain node
- if ( ( IDocumentMarkAccess::GetType(*pMark) !=
- IDocumentMarkAccess::CROSSREF_HEADING_BOOKMARK &&
- IDocumentMarkAccess::GetType(*pMark) !=
- IDocumentMarkAccess::CROSSREF_NUMITEM_BOOKMARK ) ||
- pMark->GetMarkPos().nNode != pNewPos->nNode )
+
+ auto_ptr< SwPosition > pNewPos;
+ {
+ if ( pEndIdx != NULL )
+ {
+ pNewPos = auto_ptr< SwPosition >( new SwPosition( rEnd, *pEndIdx ) );
+ }
+ else
+ {
+ pNewPos = lcl_FindExpelPosition( rStt, rEnd, isPosInRange ? pMark->GetOtherMarkPos() : pMark->GetMarkPos() );
+ }
+ }
+
+ bool bMoveMark = true;
+ {
+ switch ( IDocumentMarkAccess::GetType( *pMark ) )
+ {
+ case IDocumentMarkAccess::CROSSREF_HEADING_BOOKMARK:
+ case IDocumentMarkAccess::CROSSREF_NUMITEM_BOOKMARK:
+ // no move of cross-reference bookmarks, if move occurs inside a certain node
+ bMoveMark = pMark->GetMarkPos().nNode != pNewPos->nNode;
+ break;
+ case IDocumentMarkAccess::ANNOTATIONMARK:
+ // no move of annotation marks, if method is called to collect deleted marks
+ bMoveMark = pSaveBkmk == NULL;
+ break;
+ default:
+ bMoveMark = true;
+ break;
+ }
+ }
+ if ( bMoveMark )
{
- if(isPosInRange)
+ if ( isPosInRange )
pMark->SetMarkPos(*pNewPos);
else
pMark->SetOtherMarkPos(*pNewPos);
// illegal selection? collapse the mark and restore sorting later
- isSortingNeeded |= lcl_FixCorrectedMark(isPosInRange, isOtherPosInRange, pMark);
+ isSortingNeeded |= lcl_FixCorrectedMark( isPosInRange, isOtherPosInRange, pMark );
}
- // <--
}
}
@@ -827,7 +855,7 @@ namespace sw { namespace mark
find_if(
pMarkLow,
pMarkHigh,
- bind(equal_to<const IMark*>(), bind(&boost::shared_ptr<IMark>::get, _1), pMark) );
+ bind( equal_to<const IMark*>(), bind(&boost::shared_ptr<IMark>::get, _1), pMark) );
if(pMarkFound != pMarkHigh)
deleteMark(pMarkFound);
}
diff --git a/sw/source/core/doc/doccorr.cxx b/sw/source/core/doc/doccorr.cxx
index 16f3455..483a8ad 100644
--- a/sw/source/core/doc/doccorr.cxx
+++ b/sw/source/core/doc/doccorr.cxx
@@ -233,26 +233,28 @@ void SwDoc::CorrAbs(const SwNodeIndex& rOldNode,
}
}
-void SwDoc::CorrAbs(const SwPaM& rRange,
+void SwDoc::CorrAbs(
+ const SwPaM& rRange,
const SwPosition& rNewPos,
- sal_Bool bMoveCrsr)
+ sal_Bool bMoveCrsr )
{
SwPosition aStart(*rRange.Start());
SwPosition aEnd(*rRange.End());
SwPosition aNewPos(rNewPos);
- _DelBookmarks(aStart.nNode, aEnd.nNode, NULL,
- &aStart.nContent, &aEnd.nContent);
+ _DelBookmarks( aStart.nNode, aEnd.nNode, NULL, &aStart.nContent, &aEnd.nContent );
+
if(bMoveCrsr)
::PaMCorrAbs(rRange, rNewPos);
}
-void SwDoc::CorrAbs(const SwNodeIndex& rStartNode,
- const SwNodeIndex& rEndNode,
- const SwPosition& rNewPos,
- sal_Bool bMoveCrsr)
+void SwDoc::CorrAbs(
+ const SwNodeIndex& rStartNode,
+ const SwNodeIndex& rEndNode,
+ const SwPosition& rNewPos,
+ sal_Bool bMoveCrsr )
{
- _DelBookmarks(rStartNode, rEndNode);
+ _DelBookmarks( rStartNode, rEndNode );
if(bMoveCrsr)
{
diff --git a/sw/source/core/undo/undobj.cxx b/sw/source/core/undo/undobj.cxx
index 280f550..b6b4075 100644
--- a/sw/source/core/undo/undobj.cxx
+++ b/sw/source/core/undo/undobj.cxx
@@ -907,12 +907,21 @@ void SwUndoSaveSection::SaveSection( SwDoc* pDoc, const SwNodeIndex& rSttIdx )
}
-void SwUndoSaveSection::SaveSection( SwDoc* , const SwNodeRange& rRange )
+void SwUndoSaveSection::SaveSection(
+ SwDoc* pDoc,
+ const SwNodeRange& rRange )
{
SwPaM aPam( rRange.aStart, rRange.aEnd );
- // loesche alle Fussnoten / FlyFrames / Bookmarks / Verzeichnisse
+ // delete all footnotes, fly frames, bookmarks and indexes
DelCntntIndex( *aPam.GetMark(), *aPam.GetPoint() );
+ {
+ // move certain indexes out of deleted range
+ SwNodeIndex aSttIdx( aPam.Start()->nNode.GetNode() );
+ SwNodeIndex aEndIdx( aPam.End()->nNode.GetNode() );
+ SwNodeIndex aMvStt( aEndIdx, 1 );
+ pDoc->CorrAbs( aSttIdx, aEndIdx, SwPosition( aMvStt ), sal_True );
+ }
pRedlSaveData = new SwRedlineSaveDatas;
if( !SwUndo::FillSaveData( aPam, *pRedlSaveData, sal_True, sal_True ))
diff --git a/sw/source/core/unocore/unoobj.cxx b/sw/source/core/unocore/unoobj.cxx
index fbfc76b..c23d9fe 100644
--- a/sw/source/core/unocore/unoobj.cxx
+++ b/sw/source/core/unocore/unoobj.cxx
@@ -1300,22 +1300,6 @@ throw (uno::RuntimeException)
throw uno::RuntimeException();
}
- SwStartNodeType eSearchNodeType = SwNormalStartNode;
- switch (m_pImpl->m_eType)
- {
- case CURSOR_FRAME: eSearchNodeType = SwFlyStartNode; break;
- case CURSOR_TBLTEXT: eSearchNodeType = SwTableBoxStartNode; break;
- case CURSOR_FOOTNOTE: eSearchNodeType = SwFootnoteStartNode; break;
- case CURSOR_HEADER: eSearchNodeType = SwHeaderStartNode; break;
- case CURSOR_FOOTER: eSearchNodeType = SwFooterStartNode; break;
- //case CURSOR_INVALID:
- //case CURSOR_BODY:
- default:
- ;
- }
- const SwStartNode* pOwnStartNode =
- rOwnCursor.GetNode()->FindSttNodeByType(eSearchNodeType);
-
SwPaM aPam(GetDoc()->GetNodes());
const SwPaM * pPam(0);
if (pCursor)
@@ -1334,21 +1318,51 @@ throw (uno::RuntimeException)
{
throw uno::RuntimeException();
}
- const SwStartNode* pTmp =
- pPam->GetNode()->FindSttNodeByType(eSearchNodeType);
- //SectionNodes ueberspringen
- while(pTmp && pTmp->IsSectionNode())
{
- pTmp = pTmp->StartOfSectionNode();
- }
- while(pOwnStartNode && pOwnStartNode->IsSectionNode())
- {
- pOwnStartNode = pOwnStartNode->StartOfSectionNode();
- }
- if(pOwnStartNode != pTmp)
- {
- throw uno::RuntimeException();
+ SwStartNodeType eSearchNodeType = SwNormalStartNode;
+ switch (m_pImpl->m_eType)
+ {
+ case CURSOR_FRAME: eSearchNodeType = SwFlyStartNode; break;
+ case CURSOR_TBLTEXT: eSearchNodeType = SwTableBoxStartNode; break;
+ case CURSOR_FOOTNOTE: eSearchNodeType = SwFootnoteStartNode; break;
+ case CURSOR_HEADER: eSearchNodeType = SwHeaderStartNode; break;
+ case CURSOR_FOOTER: eSearchNodeType = SwFooterStartNode; break;
+ //case CURSOR_INVALID:
+ //case CURSOR_BODY:
+ default:
+ ;
+ }
+
+ const SwStartNode* pOwnStartNode = rOwnCursor.GetNode()->FindSttNodeByType(eSearchNodeType);
+ while ( pOwnStartNode != NULL
+ && pOwnStartNode->IsSectionNode())
+ {
+ pOwnStartNode = pOwnStartNode->StartOfSectionNode();
+ }
+
+ const SwStartNode* pTmp =
+ pPam->GetNode()->FindSttNodeByType(eSearchNodeType);
+ while ( pTmp != NULL
+ && pTmp->IsSectionNode() )
+ {
+ pTmp = pTmp->StartOfSectionNode();
+ }
+
+ if ( eSearchNodeType == SwTableBoxStartNode )
+ {
+ if ( pOwnStartNode->FindTableNode() != pTmp->FindTableNode() )
+ {
+ throw uno::RuntimeException();
+ }
+ }
+ else
+ {
+ if ( pOwnStartNode != pTmp )
+ {
+ throw uno::RuntimeException();
+ }
+ }
}
if (CURSOR_META == m_pImpl->m_eType)
diff --git a/sw/source/ui/docvw/SidebarWin.cxx b/sw/source/ui/docvw/SidebarWin.cxx
index 2967698..cdcbcb7 100644
--- a/sw/source/ui/docvw/SidebarWin.cxx
+++ b/sw/source/ui/docvw/SidebarWin.cxx
@@ -593,11 +593,26 @@ void SwSidebarWin::SetPosAndSize()
SwNodes& rNds = pTxtNode->GetDoc()->GetNodes();
SwCntntNode* const pCntntNd = rNds[mrSidebarItem.maLayoutInfo.mnStartNodeIdx]->GetCntntNode();
SwPosition aStartPos( *pCntntNd, mrSidebarItem.maLayoutInfo.mnStartContent );
- ::boost::scoped_ptr<SwShellCrsr> pTmpCrsrForAnnotationTextRange(
- new SwShellCrsr( DocView().GetWrtShell(), aStartPos ) );
- pTmpCrsrForAnnotationTextRange->SetMark();
- pTmpCrsrForAnnotationTextRange->GetMark()->nNode = *pTxtNode;
- pTmpCrsrForAnnotationTextRange->GetMark()->nContent.Assign( pTxtNode, *(pTxtAnnotationFld->GetStart())+1 );
+ SwShellCrsr* pTmpCrsr = NULL;
+ const bool bTableCrsrNeeded = pTxtNode->FindTableBoxStartNode() != pCntntNd->FindTableBoxStartNode();
+ if ( bTableCrsrNeeded )
+ {
+ SwShellTableCrsr* pTableCrsr = new SwShellTableCrsr( DocView().GetWrtShell(), aStartPos );
+ pTableCrsr->SetMark();
+ pTableCrsr->GetMark()->nNode = *pTxtNode;
+ pTableCrsr->GetMark()->nContent.Assign( pTxtNode, *(pTxtAnnotationFld->GetStart())+1 );
+ pTableCrsr->NewTableSelection();
+ pTmpCrsr = pTableCrsr;
+ }
+ else
+ {
+ SwShellCrsr* pCrsr = new SwShellCrsr( DocView().GetWrtShell(), aStartPos );
+ pCrsr->SetMark();
+ pCrsr->GetMark()->nNode = *pTxtNode;
+ pCrsr->GetMark()->nContent.Assign( pTxtNode, *(pTxtAnnotationFld->GetStart())+1 );
+ pTmpCrsr = pCrsr;
+ }
+ ::boost::scoped_ptr<SwShellCrsr> pTmpCrsrForAnnotationTextRange( pTmpCrsr );
pTmpCrsrForAnnotationTextRange->FillRects();
diff --git a/sw/source/ui/shells/textfld.cxx b/sw/source/ui/shells/textfld.cxx
index 7f8368b..486feaa 100644
--- a/sw/source/ui/shells/textfld.cxx
+++ b/sw/source/ui/shells/textfld.cxx
@@ -367,9 +367,8 @@ void SwTextShell::ExecField(SfxRequest &rReq)
if( !(sAuthor = aUserOpt.GetID()).Len() )
sAuthor = String( SW_RES( STR_REDLINE_UNKNOWN_AUTHOR ));
- if( rSh.HasSelection() )
+ if ( rSh.HasSelection() && !rSh.IsTableMode() )
{
- rSh.NormalizePam( sal_False );
rSh.KillPams();
}
diff --git a/sw/source/ui/wrtsh/wrtsh2.cxx b/sw/source/ui/wrtsh/wrtsh2.cxx
index 098180e..77d16e5 100644
--- a/sw/source/ui/wrtsh/wrtsh2.cxx
+++ b/sw/source/ui/wrtsh/wrtsh2.cxx
@@ -94,10 +94,23 @@ void SwWrtShell::Insert( SwField& rFld )
{
// for annotation fields:
// - keep the current selection in order to create a corresponding annotation mark
- // - collapse cursur to its point
- const SwPaM& rCurrPaM = GetCurrentShellCursor();
- pAnnotationTextRange = new SwPaM( *rCurrPaM.GetPoint(), *rCurrPaM.GetMark() );
- ClearMark();
+ // - collapse cursor to its end
+ if ( IsTableMode() )
+ {
+ GetTblCrs()->Normalize( sal_False );
+ const SwPosition rStartPos( *(GetTblCrs()->GetMark()->nNode.GetNode().GetCntntNode()), 0 );
+ KillPams();
+ EndPara();
+ const SwPosition rEndPos( *GetCurrentShellCursor().GetPoint() );
+ pAnnotationTextRange = new SwPaM( rStartPos, rEndPos );
+ }
+ else
+ {
+ NormalizePam( sal_False );
+ const SwPaM& rCurrPaM = GetCurrentShellCursor();
+ pAnnotationTextRange = new SwPaM( *rCurrPaM.GetPoint(), *rCurrPaM.GetMark() );
+ ClearMark();
+ }
}
else
{
diff --git a/xmloff/source/text/txtfldi.cxx b/xmloff/source/text/txtfldi.cxx
index f801d65..3e506fc 100644
--- a/xmloff/source/text/txtfldi.cxx
+++ b/xmloff/source/text/txtfldi.cxx
@@ -3776,8 +3776,8 @@ void XMLAnnotationImportContext::EndElement()
// let's create a text range covering the start and the current position.
uno::Reference< text::XText > xText = GetImportHelper().GetText();
uno::Reference< text::XTextCursor > xCursor =
- xText->createTextCursorByRange( xPrevField->getAnchor() );
- xCursor->gotoRange( GetImportHelper().GetCursorAsRange(), true );
+ xText->createTextCursorByRange( GetImportHelper().GetCursorAsRange() );
+ xCursor->gotoRange( xPrevField->getAnchor(), true );
uno::Reference< text::XTextRange > xTextRange( xCursor, uno::UNO_QUERY );
xText->insertTextContent( xTextRange, xPrevField, !xCursor->isCollapsed() );
More information about the Libreoffice-commits
mailing list