diff options
author | Caolán McNamara <caolanm@redhat.com> | 2014-12-18 17:39:07 +0000 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2014-12-19 09:48:28 +0000 |
commit | 68d87e98951ae3ed5f7b863954667bfdd9805985 (patch) | |
tree | bf6de27eb413b6b58cb0d4f2b16182a87ac667d7 | |
parent | 5214b96a10fed8147e5801f13bdc463e8ad0f430 (diff) |
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
-rw-r--r-- | include/vcl/textdata.hxx | 15 | ||||
-rw-r--r-- | vcl/source/edit/textdoc.cxx | 80 | ||||
-rw-r--r-- | vcl/source/edit/textdoc.hxx | 16 | ||||
-rw-r--r-- | vcl/source/edit/texteng.cxx | 92 | ||||
-rw-r--r-- | vcl/source/edit/textundo.cxx | 8 | ||||
-rw-r--r-- | vcl/source/edit/textview.cxx | 44 |
6 files changed, 136 insertions, 119 deletions
diff --git a/include/vcl/textdata.hxx b/include/vcl/textdata.hxx index fe37fbd3b4c7..6af42ee5a93d 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 324d81b5f519..560284ccb1d6 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 8fa194b07447..739de18040c6 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 81ff71f4a012..81a1a0f65c59 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 207bb1959df3..57a721ed2b33 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 92ec4acc06ff..8e32b78578a5 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... |