[Libreoffice-commits] core.git: Branch 'libreoffice-4-4' - include/vcl vcl/source

Caolán McNamara caolanm at redhat.com
Fri Dec 19 01:50:06 PST 2014


 include/vcl/textdata.hxx     |   15 +++++++
 vcl/source/edit/textdoc.cxx  |   80 ++++++++++++++++++++-----------------
 vcl/source/edit/textdoc.hxx  |   16 ++-----
 vcl/source/edit/texteng.cxx  |   92 +++++++++++++++++++++----------------------
 vcl/source/edit/textundo.cxx |    8 +--
 vcl/source/edit/textview.cxx |   44 ++++++++++----------
 6 files changed, 136 insertions(+), 119 deletions(-)

New commits:
commit d584db0f8972fe7d4593b3f1538a967798e0f0d5
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Thu Dec 18 17:39:07 2014 +0000

    Resolves: fdo#86552 undo want to take ownership of nodes, but can't
    
    Revert "fdo#75757 remove inheritance from std::vector"
    
    This reverts commit 63d8977f9fb0618d36dc8e0ee2f8068b1af92fe6.
    
    Change-Id: Idc9902a77ee2c1cb21b9e3b477b2d960772a022e
    (cherry picked from commit 68d87e98951ae3ed5f7b863954667bfdd9805985)

diff --git a/include/vcl/textdata.hxx b/include/vcl/textdata.hxx
index fe37fbd..6af42ee 100644
--- a/include/vcl/textdata.hxx
+++ b/include/vcl/textdata.hxx
@@ -150,6 +150,21 @@ struct TEIMEInfos
     void DestroyAttribs();
 };
 
+// -----------------  Wrapper for old Tools List -------------------
+
+#include <vector>
+#include <algorithm>
+
+template <class T> class ToolsList : public ::std::vector< T >
+{
+public:
+    size_t Count() const { return ::std::vector< T >::size(); }
+    size_t GetPos( T pObject ) const { return ( ::std::find( this->begin(), this->end(), pObject ) ) - this->begin(); }
+    T      GetObject( size_t nIndex ) const { return (*this)[nIndex]; }
+    void   Insert( T pObject, size_t nPos ) { ::std::vector< T >::insert( this->begin()+nPos, pObject ); }
+    void   Remove( size_t nPos ) { ::std::vector< T >::erase( this->begin()+nPos ); }
+};
+
 #endif // INCLUDED_VCL_TEXTDATA_HXX
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/source/edit/textdoc.cxx b/vcl/source/edit/textdoc.cxx
index 324d81b..560284c 100644
--- a/vcl/source/edit/textdoc.cxx
+++ b/vcl/source/edit/textdoc.cxx
@@ -407,33 +407,38 @@ void TextNode::Append( const TextNode& rNode )
     }
 }
 
-bool TextNode::operator==(TextNode const& other) const
-{
-   return maText == other.maText && &maCharAttribs == &other.maCharAttribs;
-}
-
-
-
 TextDoc::TextDoc()
 {
     mnLeftMargin = 0;
 };
 
+TextDoc::~TextDoc()
+{
+    DestroyTextNodes();
+}
+
 void TextDoc::Clear()
 {
+    DestroyTextNodes();
+}
+
+void TextDoc::DestroyTextNodes()
+{
+    for ( sal_uLong nNode = 0; nNode < maTextNodes.Count(); nNode++ )
+        delete maTextNodes.GetObject( nNode );
     maTextNodes.clear();
 }
 
 OUString TextDoc::GetText( const sal_Unicode* pSep ) const
 {
-    sal_uLong nNodes = maTextNodes.size();
+    sal_uLong nNodes = maTextNodes.Count();
 
     OUString aASCIIText;
     sal_uLong nLastNode = nNodes-1;
     for ( sal_uLong nNode = 0; nNode < nNodes; nNode++ )
     {
-        const TextNode& pNode = maTextNodes[ nNode ];
-        OUString aTmp( pNode.GetText() );
+        TextNode* pNode = maTextNodes.GetObject( nNode );
+        OUString aTmp( pNode->GetText() );
         aASCIIText += aTmp;
         if ( pSep && ( nNode != nLastNode ) )
             aASCIIText += pSep;
@@ -446,8 +451,9 @@ OUString TextDoc::GetText( sal_uLong nPara ) const
 {
     OUString aText;
 
-    if ( nPara < maTextNodes.size() )
-        aText = maTextNodes[ nPara ].GetText();
+    TextNode* pNode = ( nPara < maTextNodes.Count() ) ? maTextNodes.GetObject( nPara ) : 0;
+    if ( pNode )
+        aText = pNode->GetText();
 
     return aText;
 }
@@ -455,7 +461,7 @@ OUString TextDoc::GetText( sal_uLong nPara ) const
 sal_uLong TextDoc::GetTextLen( const sal_Unicode* pSep, const TextSelection* pSel ) const
 {
     sal_uLong nLen = 0;
-    sal_uLong nNodes = maTextNodes.size();
+    sal_uLong nNodes = maTextNodes.Count();
     if ( nNodes )
     {
         sal_uLong nStartNode = 0;
@@ -468,10 +474,10 @@ sal_uLong TextDoc::GetTextLen( const sal_Unicode* pSep, const TextSelection* pSe
 
         for ( sal_uLong nNode = nStartNode; nNode <= nEndNode; nNode++ )
         {
-            const TextNode& pNode = maTextNodes[ nNode ];
+            TextNode* pNode = maTextNodes.GetObject( nNode );
 
             sal_uInt16 nS = 0;
-            sal_Int32 nE = pNode.GetText().getLength();
+            sal_Int32 nE = pNode->GetText().getLength();
             if ( pSel && ( nNode == pSel->GetStart().GetPara() ) )
                 nS = pSel->GetStart().GetIndex();
             if ( pSel && ( nNode == pSel->GetEnd().GetPara() ) )
@@ -489,11 +495,11 @@ sal_uLong TextDoc::GetTextLen( const sal_Unicode* pSep, const TextSelection* pSe
 
 TextPaM TextDoc::InsertText( const TextPaM& rPaM, sal_Unicode c )
 {
-    DBG_ASSERT( c != 0x0A, "TextDoc::InsertText: Newline not allowed in paragraph!" );
-    DBG_ASSERT( c != 0x0D, "TextDoc::InsertText: Newline not allowed in paragraph!" );
+    DBG_ASSERT( c != 0x0A, "TextDoc::InsertText: Zeilentrenner in Absatz nicht erlaubt!" );
+    DBG_ASSERT( c != 0x0D, "TextDoc::InsertText: Zeilentrenner in Absatz nicht erlaubt!" );
 
-    TextNode& pNode = maTextNodes[ rPaM.GetPara() ];
-    pNode.InsertText( rPaM.GetIndex(), c );
+    TextNode* pNode = maTextNodes.GetObject( rPaM.GetPara() );
+    pNode->InsertText( rPaM.GetIndex(), c );
 
     TextPaM aPaM( rPaM.GetPara(), rPaM.GetIndex()+1 );
     return aPaM;
@@ -501,11 +507,11 @@ TextPaM TextDoc::InsertText( const TextPaM& rPaM, sal_Unicode c )
 
 TextPaM TextDoc::InsertText( const TextPaM& rPaM, const OUString& rStr )
 {
-    DBG_ASSERT( rStr.indexOf( 0x0A ) == -1, "TextDoc::InsertText: Newline not allowed in paragraph!" );
-    DBG_ASSERT( rStr.indexOf( 0x0D ) == -1, "TextDoc::InsertText: Newline not allowed in paragraph!" );
+    DBG_ASSERT( rStr.indexOf( 0x0A ) == -1, "TextDoc::InsertText: Zeilentrenner in Absatz nicht erlaubt!" );
+    DBG_ASSERT( rStr.indexOf( 0x0D ) == -1, "TextDoc::InsertText: Zeilentrenner in Absatz nicht erlaubt!" );
 
-    TextNode& pNode = maTextNodes[ rPaM.GetPara() ];
-    pNode.InsertText( rPaM.GetIndex(), rStr );
+    TextNode* pNode = maTextNodes.GetObject( rPaM.GetPara() );
+    pNode->InsertText( rPaM.GetIndex(), rStr );
 
     TextPaM aPaM( rPaM.GetPara(), rPaM.GetIndex()+rStr.getLength() );
     return aPaM;
@@ -513,45 +519,47 @@ TextPaM TextDoc::InsertText( const TextPaM& rPaM, const OUString& rStr )
 
 TextPaM TextDoc::InsertParaBreak( const TextPaM& rPaM, bool bKeepEndingAttribs )
 {
-    TextNode& pNode = maTextNodes[ rPaM.GetPara() ];
-    TextNode* pNew = pNode.Split( rPaM.GetIndex(), bKeepEndingAttribs );
+    TextNode* pNode = maTextNodes.GetObject( rPaM.GetPara() );
+    TextNode* pNew = pNode->Split( rPaM.GetIndex(), bKeepEndingAttribs );
 
-    maTextNodes.insert( maTextNodes.begin()+rPaM.GetPara()+1, pNew );
+    maTextNodes.Insert( pNew, rPaM.GetPara()+1 );
 
     TextPaM aPaM( rPaM.GetPara()+1, 0 );
     return aPaM;
 }
 
-TextPaM TextDoc::ConnectParagraphs( TextNode& pLeft, const TextNode& pRight )
+TextPaM TextDoc::ConnectParagraphs( TextNode* pLeft, TextNode* pRight )
 {
-    sal_Int32 nPrevLen = pLeft.GetText().getLength();
-    pLeft.Append( pRight );
+    sal_Int32 nPrevLen = pLeft->GetText().getLength();
+    pLeft->Append( *pRight );
 
     // the paragraph on the right vanishes
-    RemoveNode( ::std::find( maTextNodes.cbegin(), maTextNodes.cend(), pRight ) - maTextNodes.cbegin() );
+    sal_uLong nRight = maTextNodes.GetPos( pRight );
+    maTextNodes.Remove( nRight );
+    delete pRight;
 
-    sal_uLong nLeft = std::find( maTextNodes.begin(), maTextNodes.end(), pLeft ) - maTextNodes.begin();
+    sal_uLong nLeft = maTextNodes.GetPos( pLeft );
     TextPaM aPaM( nLeft, nPrevLen );
     return aPaM;
 }
 
 TextPaM TextDoc::RemoveChars( const TextPaM& rPaM, sal_uInt16 nChars )
 {
-    TextNode& pNode = maTextNodes[ rPaM.GetPara() ];
-    pNode.RemoveText( rPaM.GetIndex(), nChars );
+    TextNode* pNode = maTextNodes.GetObject( rPaM.GetPara() );
+    pNode->RemoveText( rPaM.GetIndex(), nChars );
 
     return rPaM;
 }
 
 bool TextDoc::IsValidPaM( const TextPaM& rPaM )
 {
-    if ( rPaM.GetPara() >= maTextNodes.size() )
+    if ( rPaM.GetPara() >= maTextNodes.Count() )
     {
         OSL_FAIL( "PaM: Para out of range" );
         return false;
     }
-    TextNode& pNode = maTextNodes[ rPaM.GetPara() ];
-    if ( rPaM.GetIndex() > pNode.GetText().getLength() )
+    TextNode * pNode = maTextNodes.GetObject( rPaM.GetPara() );
+    if ( rPaM.GetIndex() > pNode->GetText().getLength() )
     {
         OSL_FAIL( "PaM: Index out of range" );
         return false;
diff --git a/vcl/source/edit/textdoc.hxx b/vcl/source/edit/textdoc.hxx
index 8fa194b..739de18 100644
--- a/vcl/source/edit/textdoc.hxx
+++ b/vcl/source/edit/textdoc.hxx
@@ -85,15 +85,12 @@ public:
 
     TextNode*           Split( sal_uInt16 nPos, bool bKeepEndigAttribs );
     void                Append( const TextNode& rNode );
-
-    bool operator ==(TextNode const& other) const;
 };
 
 class TextDoc
 {
 private:
-    typedef boost::ptr_vector<TextNode> TextNodes;
-    TextNodes maTextNodes;
+    ToolsList<TextNode*> maTextNodes;
     sal_uInt16              mnLeftMargin;
 
 protected:
@@ -101,22 +98,19 @@ protected:
 
 public:
                         TextDoc();
-                        ~TextDoc() {};
+                        ~TextDoc();
 
     void                Clear();
 
-    const TextNode&     GetNode(sal_uInt16 pos) const { return maTextNodes[pos]; }
-    TextNode*           GetNode(sal_uInt16 pos)       { return &maTextNodes[pos]; }
-    size_t              CountNodes() { return maTextNodes.size(); }
-    void                InsertNode( TextNode* node, size_t nPos ) { maTextNodes.insert( maTextNodes.begin() + nPos, node ); }
-    void                RemoveNode( size_t nPos ) { maTextNodes.erase( maTextNodes.begin()+nPos ); }
+    ToolsList<TextNode*>&       GetNodes()              { return maTextNodes; }
+    const ToolsList<TextNode*>& GetNodes() const        { return maTextNodes; }
 
     TextPaM             RemoveChars( const TextPaM& rPaM, sal_uInt16 nChars );
     TextPaM             InsertText( const TextPaM& rPaM, sal_Unicode c );
     TextPaM             InsertText( const TextPaM& rPaM, const OUString& rStr );
 
     TextPaM             InsertParaBreak( const TextPaM& rPaM, bool bKeepEndingAttribs );
-    TextPaM             ConnectParagraphs( TextNode& pLeft, const TextNode& pRight );
+    TextPaM             ConnectParagraphs( TextNode* pLeft, TextNode* pRight );
 
     sal_uLong           GetTextLen( const sal_Unicode* pSep, const TextSelection* pSel = NULL ) const;
     OUString            GetText( const sal_Unicode* pSep ) const;
diff --git a/vcl/source/edit/texteng.cxx b/vcl/source/edit/texteng.cxx
index 0202a50..e4e06a6 100644
--- a/vcl/source/edit/texteng.cxx
+++ b/vcl/source/edit/texteng.cxx
@@ -299,7 +299,7 @@ sal_uLong TextEngine::GetTextLen( const TextSelection& rSel, LineEnd aSeparator
 
 sal_uInt16 TextEngine::GetTextLen( sal_uLong nPara ) const
 {
-    return mpDoc->GetNode( nPara )->GetText().getLength();
+    return mpDoc->GetNodes().GetObject( nPara )->GetText().getLength();
 }
 
 void TextEngine::SetUpdateMode( bool bUpdate )
@@ -383,7 +383,7 @@ void TextEngine::ImpInitDoc()
     mpTEParaPortions = new TEParaPortions;
 
     TextNode* pNode = new TextNode( OUString() );
-    mpDoc->InsertNode( pNode, 0 );
+    mpDoc->GetNodes().Insert( pNode, 0 );
 
     TEParaPortion* pIniPortion = new TEParaPortion( pNode );
     mpTEParaPortions->Insert( pIniPortion, (sal_uLong)0 );
@@ -409,7 +409,7 @@ OUString TextEngine::GetText( const TextSelection& rSel, LineEnd aSeparator ) co
     const sal_Unicode* pSep = static_getLineEndText( aSeparator );
     for ( sal_uLong nNode = aSel.GetStart().GetPara(); nNode <= nEndPara; nNode++ )
     {
-        TextNode* pNode = mpDoc->GetNode( nNode );
+        TextNode* pNode = mpDoc->GetNodes().GetObject( nNode );
 
         sal_uInt16 nStartPos = 0;
         sal_Int32 nEndPos = pNode->GetText().getLength();
@@ -476,7 +476,7 @@ void TextEngine::SetText( const OUString& rText )
 void TextEngine::CursorMoved( sal_uLong nNode )
 {
     // delete empty attribute; but only if paragraph is not empty!
-    TextNode* pNode = mpDoc->GetNode( nNode );
+    TextNode* pNode = mpDoc->GetNodes().GetObject( nNode );
     if ( pNode && pNode->GetCharAttribs().HasEmptyAttribs() && !pNode->GetText().isEmpty() )
         pNode->GetCharAttribs().DeleteEmptyAttribs();
 }
@@ -487,7 +487,7 @@ void TextEngine::ImpRemoveChars( const TextPaM& rPaM, sal_uInt16 nChars, SfxUndo
     if ( IsUndoEnabled() && !IsInUndo() )
     {
         // attributes have to be saved for UNDO before RemoveChars!
-        TextNode* pNode = mpDoc->GetNode( rPaM.GetPara() );
+        TextNode* pNode = mpDoc->GetNodes().GetObject( rPaM.GetPara() );
         OUString aStr( pNode->GetText().copy( rPaM.GetIndex(), nChars ) );
 
         // check if attributes are being deleted or changed
@@ -512,8 +512,8 @@ TextPaM TextEngine::ImpConnectParagraphs( sal_uLong nLeft, sal_uLong nRight )
 {
     DBG_ASSERT( nLeft != nRight, "ImpConnectParagraphs: connect the very same paragraph ?" );
 
-    TextNode* pLeft = mpDoc->GetNode( nLeft );
-    TextNode* pRight = mpDoc->GetNode( nRight );
+    TextNode* pLeft = mpDoc->GetNodes().GetObject( nLeft );
+    TextNode* pRight = mpDoc->GetNodes().GetObject( nRight );
 
     if ( IsUndoEnabled() && !IsInUndo() )
         InsertUndo( new TextUndoConnectParas( this, nLeft, pLeft->GetText().getLength() ) );
@@ -524,7 +524,7 @@ TextPaM TextEngine::ImpConnectParagraphs( sal_uLong nLeft, sal_uLong nRight )
     DBG_ASSERT( pLeft && pLeftPortion, "ImpConnectParagraphs(1): Hidden Portion" );
     DBG_ASSERT( pRight && pRightPortion, "ImpConnectParagraphs(2): Hidden Portion" );
 
-    TextPaM aPaM = mpDoc->ConnectParagraphs( *pLeft, *pRight );
+    TextPaM aPaM = mpDoc->ConnectParagraphs( pLeft, pRight );
     ImpParagraphRemoved( nRight );
 
     pLeftPortion->MarkSelectionInvalid( aPaM.GetIndex(), pLeft->GetText().getLength() );
@@ -565,7 +565,7 @@ TextPaM TextEngine::ImpDeleteText( const TextSelection& rSel )
     if ( nStartNode != nEndNode )
     {
         // the remainder of StartNodes...
-        TextNode* pLeft = mpDoc->GetNode( nStartNode );
+        TextNode* pLeft = mpDoc->GetNodes().GetObject( nStartNode );
         sal_Int32 nChars = pLeft->GetText().getLength() - aStartPaM.GetIndex();
         if ( nChars )
         {
@@ -608,11 +608,11 @@ TextPaM TextEngine::ImpDeleteText( const TextSelection& rSel )
 
 void TextEngine::ImpRemoveParagraph( sal_uLong nPara )
 {
-    TextNode* pNode = mpDoc->GetNode( nPara );
+    TextNode* pNode = mpDoc->GetNodes().GetObject( nPara );
     boost::scoped_ptr<TEParaPortion> pPortion(mpTEParaPortions->GetObject( nPara ));
 
     // the Node is handled by Undo and is deleted if appropriate
-    mpDoc->RemoveNode( nPara );
+    mpDoc->GetNodes().Remove( nPara );
     if ( IsUndoEnabled() && !IsInUndo() )
         InsertUndo( new TextUndoDelPara( this, pNode, nPara ) );
     else
@@ -669,7 +669,7 @@ TextPaM TextEngine::ImpInsertText( sal_Unicode c, const TextSelection& rCurSel,
     DBG_ASSERT( c != '\r', "InsertText: NewLine!" );
 
     TextPaM aPaM( rCurSel.GetStart() );
-    TextNode* pNode = mpDoc->GetNode( aPaM.GetPara() );
+    TextNode* pNode = mpDoc->GetNodes().GetObject( aPaM.GetPara() );
 
     bool bDoOverwrite = ( bOverwrite &&
             ( aPaM.GetIndex() < pNode->GetText().getLength() ) );
@@ -831,7 +831,7 @@ TextPaM TextEngine::ImpInsertParaBreak( const TextPaM& rPaM, bool bKeepEndingAtt
     if ( IsUndoEnabled() && !IsInUndo() )
         InsertUndo( new TextUndoSplitPara( this, rPaM.GetPara(), rPaM.GetIndex() ) );
 
-    TextNode* pNode = mpDoc->GetNode( rPaM.GetPara() );
+    TextNode* pNode = mpDoc->GetNodes().GetObject( rPaM.GetPara() );
     bool bFirstParaContentChanged = rPaM.GetIndex() < pNode->GetText().getLength();
 
     TextPaM aPaM( mpDoc->InsertParaBreak( rPaM, bKeepEndingAttribs ) );
@@ -840,7 +840,7 @@ TextPaM TextEngine::ImpInsertParaBreak( const TextPaM& rPaM, bool bKeepEndingAtt
     DBG_ASSERT( pPortion, "ImpInsertParaBreak: Hidden Portion" );
     pPortion->MarkInvalid( rPaM.GetIndex(), 0 );
 
-    TextNode* pNewNode = mpDoc->GetNode( aPaM.GetPara() );
+    TextNode* pNewNode = mpDoc->GetNodes().GetObject( aPaM.GetPara() );
     TEParaPortion* pNewPortion = new TEParaPortion( pNewNode );
     mpTEParaPortions->Insert( pNewPortion, aPaM.GetPara() );
     ImpParagraphInserted( aPaM.GetPara() );
@@ -1026,7 +1026,7 @@ const TextAttrib* TextEngine::FindAttrib( const TextPaM& rPaM, sal_uInt16 nWhich
 const TextCharAttrib* TextEngine::FindCharAttrib( const TextPaM& rPaM, sal_uInt16 nWhich ) const
 {
     const TextCharAttrib* pAttr = NULL;
-    TextNode* pNode = mpDoc->GetNode( rPaM.GetPara() );
+    TextNode* pNode = mpDoc->GetNodes().GetObject( rPaM.GetPara() );
     if ( pNode && ( rPaM.GetIndex() < pNode->GetText().getLength() ) )
         pAttr = pNode->GetCharAttribs().FindAttrib( nWhich, rPaM.GetIndex() );
     return pAttr;
@@ -1035,9 +1035,9 @@ const TextCharAttrib* TextEngine::FindCharAttrib( const TextPaM& rPaM, sal_uInt1
 bool TextEngine::HasAttrib( sal_uInt16 nWhich ) const
 {
     bool bAttr = false;
-    for ( sal_uLong n = mpDoc->CountNodes(); --n && !bAttr; )
+    for ( sal_uLong n = mpDoc->GetNodes().Count(); --n && !bAttr; )
     {
-        TextNode* pNode = mpDoc->GetNode( n );
+        TextNode* pNode = mpDoc->GetNodes().GetObject( n );
         bAttr = pNode->GetCharAttribs().HasAttrib( nWhich );
     }
     return bAttr;
@@ -1066,8 +1066,8 @@ TextPaM TextEngine::GetPaM( const Point& rDocPos, bool bSmart )
     }
 
     // not found - go to last visible
-    sal_uLong nLastNode = mpDoc->CountNodes() - 1;
-    TextNode* pLast = mpDoc->GetNode( nLastNode );
+    sal_uLong nLastNode = mpDoc->GetNodes().Count() - 1;
+    TextNode* pLast = mpDoc->GetNodes().GetObject( nLastNode );
     return TextPaM( nLastNode, pLast->GetText().getLength() );
 }
 
@@ -1216,7 +1216,7 @@ sal_uLong TextEngine::CalcTextWidth( sal_uLong nPara, sal_uInt16 nPortionStart,
 {
 #ifdef DBG_UTIL
     // within the text there must not be a Portion change (attribute/tab)!
-    sal_Int32 nTabPos = mpDoc->GetNode( nPara )->GetText().indexOf( '\t', nPortionStart );
+    sal_Int32 nTabPos = mpDoc->GetNodes().GetObject( nPara )->GetText().indexOf( '\t', nPortionStart );
     DBG_ASSERT( nTabPos == -1 || nTabPos >= (nPortionStart+nLen), "CalcTextWidth: Tab!" );
 #endif
 
@@ -1238,7 +1238,7 @@ sal_uLong TextEngine::CalcTextWidth( sal_uLong nPara, sal_uInt16 nPortionStart,
             SeekCursor( nPara, nPortionStart+1, aFont, NULL );
             mpRefDev->SetFont( aFont );
         }
-        TextNode* pNode = mpDoc->GetNode( nPara );
+        TextNode* pNode = mpDoc->GetNodes().GetObject( nPara );
         nWidth = (sal_uLong)mpRefDev->GetTextWidth( pNode->GetText(), nPortionStart, nLen );
 
     }
@@ -1316,7 +1316,7 @@ Range TextEngine::GetInvalidYOffsets( sal_uLong nPortion )
 
 sal_uLong TextEngine::GetParagraphCount() const
 {
-    return mpDoc->CountNodes();
+    return mpDoc->GetNodes().Count();
 }
 
 void TextEngine::EnableUndo( bool bEnable )
@@ -1368,14 +1368,14 @@ void TextEngine::InsertContent( TextNode* pNode, sal_uLong nPara )
     DBG_ASSERT( IsInUndo(), "InsertContent: only in Undo()!" );
     TEParaPortion* pNew = new TEParaPortion( pNode );
     mpTEParaPortions->Insert( pNew, nPara );
-    mpDoc->InsertNode( pNode, nPara );
+    mpDoc->GetNodes().Insert( pNode, nPara );
     ImpParagraphInserted( nPara );
 }
 
 TextPaM TextEngine::SplitContent( sal_uLong nNode, sal_uInt16 nSepPos )
 {
     #ifdef DBG_UTIL
-    TextNode* pNode = mpDoc->GetNode( nNode );
+    TextNode* pNode = mpDoc->GetNodes().GetObject( nNode );
     DBG_ASSERT( pNode, "SplitContent: Invalid Node!" );
     DBG_ASSERT( IsInUndo(), "SplitContent: only in Undo()!" );
     DBG_ASSERT( nSepPos <= pNode->GetText().getLength(), "SplitContent: Bad index" );
@@ -1396,7 +1396,7 @@ void TextEngine::SeekCursor( sal_uLong nPara, sal_uInt16 nPos, vcl::Font& rFont,
     if ( pOutDev )
         pOutDev->SetTextColor( maTextColor );
 
-    TextNode* pNode = mpDoc->GetNode( nPara );
+    TextNode* pNode = mpDoc->GetNodes().GetObject( nPara );
     sal_uInt16 nAttribs = pNode->GetCharAttribs().Count();
     for ( sal_uInt16 nAttr = 0; nAttr < nAttribs; nAttr++ )
     {
@@ -1634,7 +1634,7 @@ void TextEngine::FormatDoc()
 
 void TextEngine::CreateAndInsertEmptyLine( sal_uLong nPara )
 {
-    TextNode* pNode = mpDoc->GetNode( nPara );
+    TextNode* pNode = mpDoc->GetNodes().GetObject( nPara );
     TEParaPortion* pTEParaPortion = mpTEParaPortions->GetObject( nPara );
 
     TextLine* pTmpLine = new TextLine;
@@ -1666,7 +1666,7 @@ void TextEngine::CreateAndInsertEmptyLine( sal_uLong nPara )
 
 void TextEngine::ImpBreakLine( sal_uLong nPara, TextLine* pLine, TETextPortion*, sal_uInt16 nPortionStart, long nRemainingWidth )
 {
-    TextNode* pNode = mpDoc->GetNode( nPara );
+    TextNode* pNode = mpDoc->GetNodes().GetObject( nPara );
 
     // Font still should be adjusted
     sal_Int32 nMaxBreakPos = mpRefDev->GetTextBreak( pNode->GetText(), nRemainingWidth, nPortionStart );
@@ -2143,7 +2143,7 @@ bool TextEngine::CreateLines( sal_uLong nPara )
 {
     // bool: changing Height of Paragraph Yes/No - true/false
 
-    TextNode* pNode = mpDoc->GetNode( nPara );
+    TextNode* pNode = mpDoc->GetNodes().GetObject( nPara );
     TEParaPortion* pTEParaPortion = mpTEParaPortions->GetObject( nPara );
     DBG_ASSERT( pTEParaPortion->IsInvalid(), "CreateLines: Portion not invalid!" );
 
@@ -2468,10 +2468,10 @@ bool TextEngine::CreateLines( sal_uLong nPara )
 OUString TextEngine::GetWord( const TextPaM& rCursorPos, TextPaM* pStartOfWord )
 {
     OUString aWord;
-    if ( rCursorPos.GetPara() < mpDoc->CountNodes() )
+    if ( rCursorPos.GetPara() < mpDoc->GetNodes().Count() )
     {
         TextSelection aSel( rCursorPos );
-        TextNode* pNode = mpDoc->GetNode(  rCursorPos.GetPara() );
+        TextNode* pNode = mpDoc->GetNodes().GetObject(  rCursorPos.GetPara() );
         uno::Reference < i18n::XBreakIterator > xBI = GetBreakIterator();
         i18n::Boundary aBoundary = xBI->getWordBoundary( pNode->GetText(), rCursorPos.GetIndex(), GetLocale(), i18n::WordType::ANYWORD_IGNOREWHITESPACES, true );
         aSel.GetStart().GetIndex() = (sal_uInt16)aBoundary.startPos;
@@ -2494,8 +2494,8 @@ bool TextEngine::Read( SvStream& rInput, const TextSelection* pSel )
         aSel = *pSel;
     else
     {
-        sal_uLong nParas = mpDoc->CountNodes();
-        TextNode* pNode = mpDoc->GetNode( nParas - 1 );
+        sal_uLong nParas = mpDoc->GetNodes().Count();
+        TextNode* pNode = mpDoc->GetNodes().GetObject( nParas - 1 );
         aSel = TextPaM( nParas-1 , pNode->GetText().getLength() );
     }
 
@@ -2535,8 +2535,8 @@ bool TextEngine::Write( SvStream& rOutput, const TextSelection* pSel, bool bHTML
         aSel = *pSel;
     else
     {
-        sal_uLong nParas = mpDoc->CountNodes();
-        TextNode* pNode = mpDoc->GetNode( nParas - 1 );
+        sal_uLong nParas = mpDoc->GetNodes().Count();
+        TextNode* pNode = mpDoc->GetNodes().GetObject( nParas - 1 );
         aSel.GetStart() = TextPaM( 0, 0 );
         aSel.GetEnd() = TextPaM( nParas-1, pNode->GetText().getLength() );
     }
@@ -2549,7 +2549,7 @@ bool TextEngine::Write( SvStream& rOutput, const TextSelection* pSel, bool bHTML
 
     for ( sal_uLong nPara = aSel.GetStart().GetPara(); nPara <= aSel.GetEnd().GetPara(); nPara++  )
     {
-        TextNode* pNode = mpDoc->GetNode( nPara );
+        TextNode* pNode = mpDoc->GetNodes().GetObject( nPara );
 
         sal_uInt16 nStartPos = 0;
         sal_Int32  nEndPos = pNode->GetText().getLength();
@@ -2618,9 +2618,9 @@ bool TextEngine::Write( SvStream& rOutput, const TextSelection* pSel, bool bHTML
 
 void TextEngine::RemoveAttribs( sal_uLong nPara, bool bIdleFormatAndUpdate )
 {
-    if ( nPara < mpDoc->CountNodes() )
+    if ( nPara < mpDoc->GetNodes().Count() )
     {
-        TextNode* pNode = mpDoc->GetNode( nPara );
+        TextNode* pNode = mpDoc->GetNodes().GetObject( nPara );
         if ( pNode->GetCharAttribs().Count() )
         {
             pNode->GetCharAttribs().Clear();
@@ -2639,9 +2639,9 @@ void TextEngine::RemoveAttribs( sal_uLong nPara, bool bIdleFormatAndUpdate )
 }
 void TextEngine::RemoveAttribs( sal_uLong nPara, sal_uInt16 nWhich, bool bIdleFormatAndUpdate )
 {
-    if ( nPara < mpDoc->CountNodes() )
+    if ( nPara < mpDoc->GetNodes().Count() )
     {
-        TextNode* pNode = mpDoc->GetNode( nPara );
+        TextNode* pNode = mpDoc->GetNodes().GetObject( nPara );
         if ( pNode->GetCharAttribs().Count() )
         {
             TextCharAttribList& rAttribs = pNode->GetCharAttribs();
@@ -2663,9 +2663,9 @@ void TextEngine::RemoveAttribs( sal_uLong nPara, sal_uInt16 nWhich, bool bIdleFo
 }
 void TextEngine::RemoveAttrib( sal_uLong nPara, const TextCharAttrib& rAttrib )
 {
-    if ( nPara < mpDoc->CountNodes() )
+    if ( nPara < mpDoc->GetNodes().Count() )
     {
-        TextNode* pNode = mpDoc->GetNode( nPara );
+        TextNode* pNode = mpDoc->GetNodes().GetObject( nPara );
         if ( pNode->GetCharAttribs().Count() )
         {
             TextCharAttribList& rAttribs = pNode->GetCharAttribs();
@@ -2694,9 +2694,9 @@ void TextEngine::SetAttrib( const TextAttrib& rAttr, sal_uLong nPara, sal_uInt16
 
     // As TextEngine is currently intended only for TextEditors, there is no Undo for Attributes!
 
-    if ( nPara < mpDoc->CountNodes() )
+    if ( nPara < mpDoc->GetNodes().Count() )
     {
-        TextNode* pNode = mpDoc->GetNode( nPara );
+        TextNode* pNode = mpDoc->GetNodes().GetObject( nPara );
         TEParaPortion* pTEParaPortion = mpTEParaPortions->GetObject( nPara );
 
         sal_Int32 nMax = pNode->GetText().getLength();
@@ -2734,7 +2734,7 @@ void TextEngine::ValidateSelection( TextSelection& rSel ) const
 
 void TextEngine::ValidatePaM( TextPaM& rPaM ) const
 {
-    sal_uLong nMaxPara = mpDoc->CountNodes() - 1;
+    sal_uLong nMaxPara = mpDoc->GetNodes().Count() - 1;
     if ( rPaM.GetPara() > nMaxPara )
     {
         rPaM.GetPara() = nMaxPara;
@@ -2780,7 +2780,7 @@ void TextEngine::ImpParagraphRemoved( sal_uLong nPara )
             TextView* pView = (*mpViews)[ --nView ];
             if ( pView != GetActiveView() )
             {
-                sal_uLong nParas = mpDoc->CountNodes();
+                sal_uLong nParas = mpDoc->GetNodes().Count();
                 for ( int n = 0; n <= 1; n++ )
                 {
                     TextPaM& rPaM = n ? pView->GetSelection().GetStart(): pView->GetSelection().GetEnd();
@@ -2964,7 +2964,7 @@ sal_uInt8 TextEngine::ImpGetRightToLeft( sal_uLong nPara, sal_uInt16 nPos, sal_u
 {
     sal_uInt8 nRightToLeft = 0;
 
-    TextNode* pNode = mpDoc->GetNode( nPara );
+    TextNode* pNode = mpDoc->GetNodes().GetObject( nPara );
     if ( pNode && !pNode->GetText().isEmpty() )
     {
         TEParaPortion* pParaPortion = mpTEParaPortions->GetObject( nPara );
diff --git a/vcl/source/edit/textundo.cxx b/vcl/source/edit/textundo.cxx
index 207bb19..57a721ed 100644
--- a/vcl/source/edit/textundo.cxx
+++ b/vcl/source/edit/textundo.cxx
@@ -173,20 +173,20 @@ void TextUndoDelPara::Undo()
 void TextUndoDelPara::Redo()
 {
     // pNode is not valid anymore in case an Undo joined paragraphs
-    mpNode = GetDoc()->GetNode( mnPara );
+    mpNode = GetDoc()->GetNodes().GetObject( mnPara );
 
     delete GetTEParaPortions()->GetObject( mnPara );
     GetTEParaPortions()->Remove( mnPara );
 
     // do not delete Node because of Undo!
-    GetDoc()->RemoveNode( mnPara );
+    GetDoc()->GetNodes().Remove( mnPara );
     GetTextEngine()->ImpParagraphRemoved( mnPara );
 
     mbDelObject = true; // belongs again to the Undo
 
-    sal_uLong nParas = GetDoc()->CountNodes();
+    sal_uLong nParas = GetDoc()->GetNodes().Count();
     sal_uLong n = mnPara < nParas ? mnPara : (nParas-1);
-    TextNode* pN = GetDoc()->GetNode( n );
+    TextNode* pN = GetDoc()->GetNodes().GetObject( n );
     TextPaM aPaM( n, pN->GetText().getLength() );
     SetSelection( aPaM );
 }
diff --git a/vcl/source/edit/textview.cxx b/vcl/source/edit/textview.cxx
index 92ec4ac..8e32b78 100644
--- a/vcl/source/edit/textview.cxx
+++ b/vcl/source/edit/textview.cxx
@@ -736,7 +736,7 @@ bool TextView::KeyInput( const KeyEvent& rKeyEvent )
                     aCurSel = mpImpl->mpTextEngine->ImpInsertParaBreak( aCurSel );
                     if ( mpImpl->mbAutoIndent )
                     {
-                        TextNode* pPrev = mpImpl->mpTextEngine->mpDoc->GetNode( aCurSel.GetEnd().GetPara() - 1 );
+                        TextNode* pPrev = mpImpl->mpTextEngine->mpDoc->GetNodes().GetObject( aCurSel.GetEnd().GetPara() - 1 );
                         sal_uInt16 n = 0;
                         while ( ( n < pPrev->GetText().getLength() ) && (
                                     ( pPrev->GetText()[ n ] == ' ' ) ||
@@ -859,7 +859,7 @@ void TextView::MouseButtonDown( const MouseEvent& rMouseEvent )
             if ( mpImpl->maSelection.GetEnd().GetIndex() < mpImpl->mpTextEngine->GetTextLen( mpImpl->maSelection.GetEnd().GetPara() ) )
             {
                 HideSelection();
-                TextNode* pNode = mpImpl->mpTextEngine->mpDoc->GetNode(  mpImpl->maSelection.GetEnd().GetPara() );
+                TextNode* pNode = mpImpl->mpTextEngine->mpDoc->GetNodes().GetObject(  mpImpl->maSelection.GetEnd().GetPara() );
                 uno::Reference < i18n::XBreakIterator > xBI = mpImpl->mpTextEngine->GetBreakIterator();
                 i18n::Boundary aBoundary = xBI->getWordBoundary( pNode->GetText(), mpImpl->maSelection.GetEnd().GetIndex(), mpImpl->mpTextEngine->GetLocale(), i18n::WordType::ANYWORD_IGNOREWHITESPACES, true );
                 TextSelection aNewSel( mpImpl->maSelection );
@@ -898,7 +898,7 @@ void TextView::MouseButtonDown( const MouseEvent& rMouseEvent )
                 HideSelection();
                 TextSelection aNewSel( mpImpl->maSelection );
                 aNewSel.GetStart().GetIndex() = 0;
-                aNewSel.GetEnd().GetIndex() = mpImpl->mpTextEngine->mpDoc->GetNode( mpImpl->maSelection.GetEnd().GetPara() )->GetText().getLength();
+                aNewSel.GetEnd().GetIndex() = mpImpl->mpTextEngine->mpDoc->GetNodes().GetObject( mpImpl->maSelection.GetEnd().GetPara() )->GetText().getLength();
                 ImpSetSelection( aNewSel );
                 ShowSelection();
                 ShowCursor( true, true );
@@ -922,7 +922,7 @@ void TextView::Command( const CommandEvent& rCEvt )
     {
         DeleteSelected();
         delete mpImpl->mpTextEngine->mpIMEInfos;
-        TextNode* pNode = mpImpl->mpTextEngine->mpDoc->GetNode( GetSelection().GetEnd().GetPara() );
+        TextNode* pNode = mpImpl->mpTextEngine->mpDoc->GetNodes().GetObject( GetSelection().GetEnd().GetPara() );
         mpImpl->mpTextEngine->mpIMEInfos = new TEIMEInfos( GetSelection().GetEnd(), pNode->GetText().copy( GetSelection().GetEnd().GetIndex() ) );
         mpImpl->mpTextEngine->mpIMEInfos->bWasCursorOverwrite = !IsInsertMode();
     }
@@ -1376,7 +1376,7 @@ TextPaM TextView::CursorLeft( const TextPaM& rPaM, sal_uInt16 nCharacterIterator
 
     if ( aPaM.GetIndex() )
     {
-        TextNode* pNode = mpImpl->mpTextEngine->mpDoc->GetNode( aPaM.GetPara() );
+        TextNode* pNode = mpImpl->mpTextEngine->mpDoc->GetNodes().GetObject( aPaM.GetPara() );
         uno::Reference < i18n::XBreakIterator > xBI = mpImpl->mpTextEngine->GetBreakIterator();
         sal_Int32 nCount = 1;
         aPaM.GetIndex() = (sal_uInt16)xBI->previousCharacters( pNode->GetText(), aPaM.GetIndex(), mpImpl->mpTextEngine->GetLocale(), nCharacterIteratorMode, nCount, nCount );
@@ -1384,7 +1384,7 @@ TextPaM TextView::CursorLeft( const TextPaM& rPaM, sal_uInt16 nCharacterIterator
     else if ( aPaM.GetPara() )
     {
         aPaM.GetPara()--;
-        TextNode* pNode = mpImpl->mpTextEngine->mpDoc->GetNode( aPaM.GetPara() );
+        TextNode* pNode = mpImpl->mpTextEngine->mpDoc->GetNodes().GetObject( aPaM.GetPara() );
         aPaM.GetIndex() = pNode->GetText().getLength();
     }
     return aPaM;
@@ -1394,14 +1394,14 @@ TextPaM TextView::CursorRight( const TextPaM& rPaM, sal_uInt16 nCharacterIterato
 {
     TextPaM aPaM( rPaM );
 
-    TextNode* pNode = mpImpl->mpTextEngine->mpDoc->GetNode( aPaM.GetPara() );
+    TextNode* pNode = mpImpl->mpTextEngine->mpDoc->GetNodes().GetObject( aPaM.GetPara() );
     if ( aPaM.GetIndex() < pNode->GetText().getLength() )
     {
         uno::Reference < i18n::XBreakIterator > xBI = mpImpl->mpTextEngine->GetBreakIterator();
         sal_Int32 nCount = 1;
         aPaM.GetIndex() = (sal_uInt16)xBI->nextCharacters( pNode->GetText(), aPaM.GetIndex(), mpImpl->mpTextEngine->GetLocale(), nCharacterIteratorMode, nCount, nCount );
     }
-    else if ( aPaM.GetPara() < ( mpImpl->mpTextEngine->mpDoc->CountNodes()-1) )
+    else if ( aPaM.GetPara() < ( mpImpl->mpTextEngine->mpDoc->GetNodes().Count()-1) )
     {
         aPaM.GetPara()++;
         aPaM.GetIndex() = 0;
@@ -1416,7 +1416,7 @@ TextPaM TextView::CursorWordLeft( const TextPaM& rPaM )
 
     if ( aPaM.GetIndex() )
     {
-        TextNode* pNode = mpImpl->mpTextEngine->mpDoc->GetNode( aPaM.GetPara() );
+        TextNode* pNode = mpImpl->mpTextEngine->mpDoc->GetNodes().GetObject( aPaM.GetPara() );
         uno::Reference < i18n::XBreakIterator > xBI = mpImpl->mpTextEngine->GetBreakIterator();
         i18n::Boundary aBoundary = xBI->getWordBoundary( pNode->GetText(), rPaM.GetIndex(), mpImpl->mpTextEngine->GetLocale(), i18n::WordType::ANYWORD_IGNOREWHITESPACES, true );
         if ( aBoundary.startPos >= rPaM.GetIndex() )
@@ -1426,7 +1426,7 @@ TextPaM TextView::CursorWordLeft( const TextPaM& rPaM )
     else if ( aPaM.GetPara() )
     {
         aPaM.GetPara()--;
-        TextNode* pNode = mpImpl->mpTextEngine->mpDoc->GetNode( aPaM.GetPara() );
+        TextNode* pNode = mpImpl->mpTextEngine->mpDoc->GetNodes().GetObject( aPaM.GetPara() );
         aPaM.GetIndex() = pNode->GetText().getLength();
     }
     return aPaM;
@@ -1436,14 +1436,14 @@ TextPaM TextView::CursorWordRight( const TextPaM& rPaM )
 {
     TextPaM aPaM( rPaM );
 
-    TextNode* pNode = mpImpl->mpTextEngine->mpDoc->GetNode( aPaM.GetPara() );
+    TextNode* pNode = mpImpl->mpTextEngine->mpDoc->GetNodes().GetObject( aPaM.GetPara() );
     if ( aPaM.GetIndex() < pNode->GetText().getLength() )
     {
         uno::Reference < i18n::XBreakIterator > xBI = mpImpl->mpTextEngine->GetBreakIterator();
         i18n::Boundary aBoundary = xBI->nextWord(  pNode->GetText(), aPaM.GetIndex(), mpImpl->mpTextEngine->GetLocale(), i18n::WordType::ANYWORD_IGNOREWHITESPACES );
         aPaM.GetIndex() = (sal_uInt16)aBoundary.startPos;
     }
-    else if ( aPaM.GetPara() < ( mpImpl->mpTextEngine->mpDoc->CountNodes()-1) )
+    else if ( aPaM.GetPara() < ( mpImpl->mpTextEngine->mpDoc->GetNodes().Count()-1) )
     {
         aPaM.GetPara()++;
         aPaM.GetIndex() = 0;
@@ -1467,7 +1467,7 @@ TextPaM TextView::ImpDelete( sal_uInt8 nMode, sal_uInt8 nDelMode )
         }
         else if ( nDelMode == DELMODE_RESTOFWORD )
         {
-            TextNode* pNode = mpImpl->mpTextEngine->mpDoc->GetNode( aEndPaM.GetPara() );
+            TextNode* pNode = mpImpl->mpTextEngine->mpDoc->GetNodes().GetObject(  aEndPaM.GetPara() );
             uno::Reference < i18n::XBreakIterator > xBI = mpImpl->mpTextEngine->GetBreakIterator();
             i18n::Boundary aBoundary = xBI->getWordBoundary( pNode->GetText(), mpImpl->maSelection.GetEnd().GetIndex(), mpImpl->mpTextEngine->GetLocale(), i18n::WordType::ANYWORD_IGNOREWHITESPACES, true );
             if ( aBoundary.startPos == mpImpl->maSelection.GetEnd().GetIndex() )
@@ -1495,21 +1495,21 @@ TextPaM TextView::ImpDelete( sal_uInt8 nMode, sal_uInt8 nDelMode )
         }
         else if ( nDelMode == DELMODE_RESTOFWORD )
         {
-            TextNode* pNode = mpImpl->mpTextEngine->mpDoc->GetNode(  aEndPaM.GetPara() );
+            TextNode* pNode = mpImpl->mpTextEngine->mpDoc->GetNodes().GetObject(  aEndPaM.GetPara() );
             uno::Reference < i18n::XBreakIterator > xBI = mpImpl->mpTextEngine->GetBreakIterator();
             i18n::Boundary aBoundary = xBI->nextWord( pNode->GetText(), mpImpl->maSelection.GetEnd().GetIndex(), mpImpl->mpTextEngine->GetLocale(), i18n::WordType::ANYWORD_IGNOREWHITESPACES );
             aEndPaM.GetIndex() = (sal_uInt16)aBoundary.startPos;
         }
         else    // DELMODE_RESTOFCONTENT
         {
-            TextNode* pNode = mpImpl->mpTextEngine->mpDoc->GetNode( aEndPaM.GetPara() );
+            TextNode* pNode = mpImpl->mpTextEngine->mpDoc->GetNodes().GetObject( aEndPaM.GetPara() );
             if ( aEndPaM.GetIndex() < pNode->GetText().getLength() )
                 aEndPaM.GetIndex() = pNode->GetText().getLength();
-            else if ( aEndPaM.GetPara() < ( mpImpl->mpTextEngine->mpDoc->CountNodes() - 1 ) )
+            else if ( aEndPaM.GetPara() < ( mpImpl->mpTextEngine->mpDoc->GetNodes().Count() - 1 ) )
             {
                 // next paragraph
                 aEndPaM.GetPara()++;
-                TextNode* pNextNode = mpImpl->mpTextEngine->mpDoc->GetNode( aEndPaM.GetPara() );
+                TextNode* pNextNode = mpImpl->mpTextEngine->mpDoc->GetNodes().GetObject( aEndPaM.GetPara() );
                 aEndPaM.GetIndex() = pNextNode->GetText().getLength();
             }
         }
@@ -1581,7 +1581,7 @@ TextPaM TextView::CursorDown( const TextPaM& rPaM )
         if ( ( aPaM.GetIndex() == pLine.GetEnd() ) && ( aPaM.GetIndex() > pLine.GetStart() ) && aPaM.GetIndex() < pPPortion->GetNode()->GetText().getLength() )
             aPaM.GetIndex()--;
     }
-    else if ( rPaM.GetPara() < ( mpImpl->mpTextEngine->mpDoc->CountNodes() - 1 ) )   // next paragraph
+    else if ( rPaM.GetPara() < ( mpImpl->mpTextEngine->mpDoc->GetNodes().Count() - 1 ) )   // next paragraph
     {
         aPaM.GetPara()++;
         pPPortion = mpImpl->mpTextEngine->mpTEParaPortions->GetObject( aPaM.GetPara() );
@@ -1639,7 +1639,7 @@ TextPaM TextView::CursorStartOfParagraph( const TextPaM& rPaM )
 
 TextPaM TextView::CursorEndOfParagraph( const TextPaM& rPaM )
 {
-    TextNode* pNode = mpImpl->mpTextEngine->mpDoc->GetNode( rPaM.GetPara() );
+    TextNode* pNode = mpImpl->mpTextEngine->mpDoc->GetNodes().GetObject( rPaM.GetPara() );
     TextPaM aPaM( rPaM );
     aPaM.GetIndex() = pNode->GetText().getLength();
     return aPaM;
@@ -1653,8 +1653,8 @@ TextPaM TextView::CursorStartOfDoc()
 
 TextPaM TextView::CursorEndOfDoc()
 {
-    sal_uLong nNode = mpImpl->mpTextEngine->mpDoc->CountNodes() - 1;
-    TextNode* pNode = mpImpl->mpTextEngine->mpDoc->GetNode( nNode );
+    sal_uLong nNode = mpImpl->mpTextEngine->mpDoc->GetNodes().Count() - 1;
+    TextNode* pNode = mpImpl->mpTextEngine->mpDoc->GetNodes().GetObject( nNode );
     TextPaM aPaM( nNode, pNode->GetText().getLength() );
     return aPaM;
 }
@@ -1713,7 +1713,7 @@ void TextView::ImpShowCursor( bool bGotoCursor, bool bForceVisCursor, bool bSpec
 
     if ( !IsInsertMode() && !mpImpl->maSelection.HasRange() )
     {
-        TextNode* pNode = mpImpl->mpTextEngine->mpDoc->GetNode( aPaM.GetPara() );
+        TextNode* pNode = mpImpl->mpTextEngine->mpDoc->GetNodes().GetObject( aPaM.GetPara() );
         if ( !pNode->GetText().isEmpty() && ( aPaM.GetIndex() < pNode->GetText().getLength() ) )
         {
             // If we are behind a portion, and the next portion has other direction, we must change position...


More information about the Libreoffice-commits mailing list