summaryrefslogtreecommitdiff
path: root/sw/source/core/doc/docbm.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'sw/source/core/doc/docbm.cxx')
-rw-r--r--sw/source/core/doc/docbm.cxx325
1 files changed, 220 insertions, 105 deletions
diff --git a/sw/source/core/doc/docbm.cxx b/sw/source/core/doc/docbm.cxx
index 0c04ec9d378a..d6e6457c51a6 100644
--- a/sw/source/core/doc/docbm.cxx
+++ b/sw/source/core/doc/docbm.cxx
@@ -22,6 +22,7 @@
#include <boost/bind.hpp>
#include <cntfrm.hxx>
#include <crossrefbookmark.hxx>
+#include <annotationmark.hxx>
#include <dcontact.hxx>
#include <doc.hxx>
#include <docary.hxx>
@@ -274,6 +275,8 @@ IDocumentMarkAccess::MarkType IDocumentMarkAccess::GetType(const IMark& rBkmk)
return CROSSREF_HEADING_BOOKMARK;
else if(*pMarkTypeInfo == typeid(CrossRefNumItemBookmark))
return CROSSREF_NUMITEM_BOOKMARK;
+ else if(*pMarkTypeInfo == typeid(AnnotationMark))
+ return ANNOTATIONMARK;
else if(*pMarkTypeInfo == typeid(TextFieldmark))
return TEXT_FIELDMARK;
else if(*pMarkTypeInfo == typeid(CheckboxFieldmark))
@@ -305,8 +308,15 @@ bool IDocumentMarkAccess::IsLegalPaMForCrossRefHeadingBookmark( const SwPaM& rPa
namespace sw { namespace mark
{
MarkManager::MarkManager(SwDoc& rDoc)
- : m_pDoc(&rDoc)
+ : m_vAllMarks()
+ , m_vBookmarks()
+ , m_vFieldmarks()
+ , m_vAnnotationMarks()
+ , m_vCommonMarks()
+ , m_pDoc(&rDoc)
{ }
+
+
::sw::mark::IMark* MarkManager::makeMark(const SwPaM& rPaM,
const OUString& rName,
const IDocumentMarkAccess::MarkType eType)
@@ -327,7 +337,7 @@ namespace sw { namespace mark
}
#endif
// see for example _SaveCntntIdx, Shells
- OSL_PRECOND(m_vMarks.size() < USHRT_MAX,
+ OSL_PRECOND(m_vAllMarks.size() < USHRT_MAX,
"MarkManager::makeMark(..)"
" - more than USHRT_MAX marks are not supported correctly");
// There should only be one CrossRefBookmark per Textnode per Type
@@ -365,6 +375,9 @@ namespace sw { namespace mark
case IDocumentMarkAccess::UNO_BOOKMARK:
pMark = boost::shared_ptr<IMark>(new UnoMark(rPaM));
break;
+ case IDocumentMarkAccess::ANNOTATIONMARK:
+ pMark = boost::shared_ptr<IMark>(new AnnotationMark( rPaM, rName ));
+ break;
}
OSL_ENSURE(pMark.get(),
"MarkManager::makeMark(..)"
@@ -375,34 +388,40 @@ namespace sw { namespace mark
pMarkBase->Swap();
// for performance reasons, we trust UnoMarks to have a (generated) unique name
- if(eType != IDocumentMarkAccess::UNO_BOOKMARK)
- pMarkBase->SetName(getUniqueMarkName(pMarkBase->GetName()));
+ if ( eType != IDocumentMarkAccess::UNO_BOOKMARK )
+ pMarkBase->SetName( getUniqueMarkName( pMarkBase->GetName() ) );
// register mark
m_aMarkNamesSet.insert(pMarkBase->GetName());
- lcl_InsertMarkSorted(m_vMarks, pMark);
+ lcl_InsertMarkSorted(m_vAllMarks, pMark);
switch(eType)
{
case IDocumentMarkAccess::BOOKMARK:
case IDocumentMarkAccess::CROSSREF_NUMITEM_BOOKMARK:
case IDocumentMarkAccess::CROSSREF_HEADING_BOOKMARK:
+ lcl_InsertMarkSorted(m_vCommonMarks, pMark);
lcl_InsertMarkSorted(m_vBookmarks, pMark);
break;
case IDocumentMarkAccess::TEXT_FIELDMARK:
case IDocumentMarkAccess::CHECKBOX_FIELDMARK:
+ lcl_InsertMarkSorted(m_vCommonMarks, pMark);
lcl_InsertMarkSorted(m_vFieldmarks, pMark);
break;
+ case IDocumentMarkAccess::ANNOTATIONMARK:
+ lcl_InsertMarkSorted( m_vAnnotationMarks, pMark );
+ break;
case IDocumentMarkAccess::NAVIGATOR_REMINDER:
case IDocumentMarkAccess::DDE_BOOKMARK:
case IDocumentMarkAccess::UNO_BOOKMARK:
- // no special array for these
+ lcl_InsertMarkSorted(m_vCommonMarks, pMark);
+ // no special array for these
break;
}
pMarkBase->InitDoc(m_pDoc);
#if 0
OSL_TRACE("--- makeType ---");
OSL_TRACE("Marks");
- lcl_DebugMarks(m_vMarks);
+ lcl_DebugMarks(m_vAllMarks);
OSL_TRACE("Bookmarks");
lcl_DebugMarks(m_vBookmarks);
OSL_TRACE("Fieldmarks");
@@ -412,7 +431,8 @@ namespace sw { namespace mark
return pMark.get();
}
- ::sw::mark::IFieldmark* MarkManager::makeFieldBookmark( const SwPaM& rPaM,
+ ::sw::mark::IFieldmark* MarkManager::makeFieldBookmark(
+ const SwPaM& rPaM,
const OUString& rName,
const OUString& rType )
{
@@ -424,7 +444,8 @@ namespace sw { namespace mark
return pFieldMark;
}
- ::sw::mark::IFieldmark* MarkManager::makeNoTextFieldBookmark( const SwPaM& rPaM,
+ ::sw::mark::IFieldmark* MarkManager::makeNoTextFieldBookmark(
+ const SwPaM& rPaM,
const OUString& rName,
const OUString& rType)
{
@@ -436,8 +457,10 @@ namespace sw { namespace mark
return pFieldMark;
}
- ::sw::mark::IMark* MarkManager::getMarkForTxtNode(const SwTxtNode& rTxtNode,
- const IDocumentMarkAccess::MarkType eType)
+
+ ::sw::mark::IMark* MarkManager::getMarkForTxtNode(
+ const SwTxtNode& rTxtNode,
+ const IDocumentMarkAccess::MarkType eType )
{
SwPosition aPos(rTxtNode);
aPos.nContent.Assign(&(const_cast<SwTxtNode&>(rTxtNode)), 0);
@@ -448,7 +471,16 @@ namespace sw { namespace mark
return makeMark(aPaM, OUString(), eType);
}
- void MarkManager::repositionMark( ::sw::mark::IMark* const io_pMark,
+
+ sw::mark::IMark* MarkManager::makeAnnotationMark(
+ const SwPaM& rPaM,
+ const ::rtl::OUString& rName )
+ {
+ return makeMark( rPaM, rName, IDocumentMarkAccess::ANNOTATIONMARK );
+ }
+
+ void MarkManager::repositionMark(
+ ::sw::mark::IMark* const io_pMark,
const SwPaM& rPaM)
{
OSL_PRECOND(io_pMark->GetMarkPos().GetDoc() == m_pDoc,
@@ -467,14 +499,16 @@ namespace sw { namespace mark
sortMarks();
}
- bool MarkManager::renameMark(::sw::mark::IMark* io_pMark, const OUString& rNewName)
+ bool MarkManager::renameMark(
+ ::sw::mark::IMark* io_pMark,
+ const OUString& rNewName )
{
OSL_PRECOND(io_pMark->GetMarkPos().GetDoc() == m_pDoc,
"<MarkManager::renameMark(..)>"
" - Mark is not in my doc.");
- if(io_pMark->GetName() == rNewName)
+ if ( io_pMark->GetName() == rNewName )
return true;
- if(hasMark(rNewName))
+ if ( findMark(rNewName) != m_vAllMarks.end() )
return false;
m_aMarkNamesSet.erase(dynamic_cast< ::sw::mark::MarkBase* >(io_pMark)->GetName());
m_aMarkNamesSet.insert(rNewName);
@@ -482,24 +516,30 @@ namespace sw { namespace mark
return true;
}
- void MarkManager::correctMarksAbsolute(const SwNodeIndex& rOldNode, const SwPosition& rNewPos, const xub_StrLen nOffset)
+
+ void MarkManager::correctMarksAbsolute(
+ const SwNodeIndex& rOldNode,
+ const SwPosition& rNewPos,
+ const xub_StrLen nOffset)
{
const SwNode* const pOldNode = &rOldNode.GetNode();
SwPosition aNewPos(rNewPos);
aNewPos.nContent += nOffset;
bool isSortingNeeded = false;
- for(iterator_t ppMark = m_vMarks.begin();
- ppMark != m_vMarks.end();
+
+ for(iterator_t ppMark = m_vAllMarks.begin();
+ ppMark != m_vAllMarks.end();
++ppMark)
{
- // is on position ??
- bool bChangedPos = false, bChangedOPos = false;
::sw::mark::MarkBase* pMark = dynamic_cast< ::sw::mark::MarkBase* >(ppMark->get());
+ // is on position ??
+ bool bChangedPos = false;
if(&pMark->GetMarkPos().nNode.GetNode() == pOldNode)
{
pMark->SetMarkPos(aNewPos);
bChangedPos = true;
}
+ bool bChangedOPos = false;
if (pMark->IsExpanded() &&
&pMark->GetOtherMarkPos().nNode.GetNode() == pOldNode)
{
@@ -509,23 +549,26 @@ namespace sw { namespace mark
// illegal selection? collapse the mark and restore sorting later
isSortingNeeded |= lcl_FixCorrectedMark(bChangedPos, bChangedOPos, pMark);
}
+
// restore sorting if needed
if(isSortingNeeded)
sortMarks();
#if 0
OSL_TRACE("correctMarksAbsolute");
- lcl_DebugMarks(m_vMarks);
+ lcl_DebugMarks(m_vAllMarks);
#endif
}
+
void MarkManager::correctMarksRelative(const SwNodeIndex& rOldNode, const SwPosition& rNewPos, const xub_StrLen nOffset)
{
const SwNode* const pOldNode = &rOldNode.GetNode();
SwPosition aNewPos(rNewPos);
aNewPos.nContent += nOffset;
bool isSortingNeeded = false;
- for(iterator_t ppMark = m_vMarks.begin();
- ppMark != m_vMarks.end();
+
+ for(iterator_t ppMark = m_vAllMarks.begin();
+ ppMark != m_vAllMarks.end();
++ppMark)
{
// is on position ??
@@ -549,15 +592,17 @@ namespace sw { namespace mark
// illegal selection? collapse the mark and restore sorting later
isSortingNeeded |= lcl_FixCorrectedMark(bChangedPos, bChangedOPos, pMark);
}
+
// restore sorting if needed
if(isSortingNeeded)
sortMarks();
#if 0
OSL_TRACE("correctMarksRelative");
- lcl_DebugMarks(m_vMarks);
+ lcl_DebugMarks(m_vAllMarks);
#endif
}
+
void MarkManager::deleteMarks(
const SwNodeIndex& rStt,
const SwNodeIndex& rEnd,
@@ -567,10 +612,11 @@ namespace sw { namespace mark
{
vector<const_iterator_t> vMarksToDelete;
bool isSortingNeeded = false;
- // copy all bookmarks in the move area to a vector storing all position data as offsets
+
+ // copy all bookmarks in the move area to a vector storing all position data as offset
// reassignment is performed after the move
- for(iterator_t ppMark = m_vMarks.begin();
- ppMark != m_vMarks.end();
+ for(iterator_t ppMark = m_vAllMarks.begin();
+ ppMark != m_vAllMarks.end();
++ppMark)
{
// navigator marks should not be moved
@@ -665,7 +711,7 @@ namespace sw { namespace mark
vector< ::boost::shared_ptr<ILazyDeleter> > vDelay;
vDelay.reserve(vMarksToDelete.size());
// we just remembered the iterators to delete, so we do not need to
- // search for the boost::shared_ptr<> (the entry in m_vMarks) again.
+ // search for the boost::shared_ptr<> (the entry in m_vAllMarks) again.
// reverse iteration, since erasing an entry invalidates iterators
// behind it (the iterators in vMarksToDelete are sorted)
for (vector<const_iterator_t>::reverse_iterator pppMark
@@ -680,7 +726,7 @@ namespace sw { namespace mark
sortMarks();
#if 0
OSL_TRACE("deleteMarks");
- lcl_DebugMarks(m_vMarks);
+ lcl_DebugMarks(m_vAllMarks);
#endif
}
@@ -702,37 +748,56 @@ namespace sw { namespace mark
MarkManager::deleteMark(const const_iterator_t ppMark)
{
::boost::shared_ptr<ILazyDeleter> ret;
- if (ppMark == m_vMarks.end()) return ret;
+ if (ppMark == m_vAllMarks.end()) return ret;
switch(IDocumentMarkAccess::GetType(**ppMark))
{
case IDocumentMarkAccess::BOOKMARK:
case IDocumentMarkAccess::CROSSREF_HEADING_BOOKMARK:
case IDocumentMarkAccess::CROSSREF_NUMITEM_BOOKMARK:
- // if(dynamic_cast<IBookmark*>)
- {
- IDocumentMarkAccess::iterator_t ppBookmark = lcl_FindMark(m_vBookmarks, *ppMark);
- OSL_ENSURE(ppBookmark != m_vBookmarks.end(),
- "<MarkManager::deleteMark(..)>"
- " - Bookmark not found.");
- m_vBookmarks.erase(ppBookmark);
+ // if(dynamic_cast<IBookmark*>)
+ {
+ IDocumentMarkAccess::iterator_t ppBookmark = lcl_FindMark(m_vBookmarks, *ppMark);
+ OSL_ENSURE(ppBookmark != m_vBookmarks.end(),
+ "<MarkManager::deleteMark(..)>"
+ " - Bookmark not found.");
+ m_vBookmarks.erase(ppBookmark);
+
+ ppBookmark = lcl_FindMark(m_vCommonMarks, *ppMark);
+ m_vCommonMarks.erase(ppBookmark);
+ }
break;
- }
+
case IDocumentMarkAccess::TEXT_FIELDMARK:
case IDocumentMarkAccess::CHECKBOX_FIELDMARK:
- {
- IDocumentMarkAccess::iterator_t ppFieldmark = lcl_FindMark(m_vFieldmarks, *ppMark);
- OSL_ENSURE(ppFieldmark != m_vFieldmarks.end(),
- "<MarkManager::deleteMark(..)>"
- " - Bookmark not found.");
- m_vFieldmarks.erase(ppFieldmark);
- ret.reset(new LazyFieldmarkDeleter(*ppMark, m_pDoc));
+ {
+ IDocumentMarkAccess::iterator_t ppFieldmark = lcl_FindMark(m_vFieldmarks, *ppMark);
+ OSL_ENSURE(ppFieldmark != m_vFieldmarks.end(),
+ "<MarkManager::deleteMark(..)>"
+ " - Bookmark not found.");
+ m_vFieldmarks.erase(ppFieldmark);
+ ret.reset(new LazyFieldmarkDeleter(*ppMark, m_pDoc));
+
+ ppFieldmark = lcl_FindMark(m_vCommonMarks, *ppMark);
+ m_vCommonMarks.erase(ppFieldmark);
+ }
break;
- }
+
+ case IDocumentMarkAccess::ANNOTATIONMARK:
+ {
+ IDocumentMarkAccess::iterator_t ppAnnotationMark = lcl_FindMark(m_vAnnotationMarks, *ppMark);
+ OSL_ENSURE( ppAnnotationMark != m_vAnnotationMarks.end(), "<MarkManager::deleteMark(..)> - Annotation Mark not found." );
+ m_vAnnotationMarks.erase(ppAnnotationMark);
+ }
+ break;
+
case IDocumentMarkAccess::NAVIGATOR_REMINDER:
case IDocumentMarkAccess::DDE_BOOKMARK:
case IDocumentMarkAccess::UNO_BOOKMARK:
- // no special array for these
+ {
+ IDocumentMarkAccess::iterator_t ppOtherMark = lcl_FindMark(m_vCommonMarks, *ppMark);
+ m_vCommonMarks.erase(ppOtherMark);
+ }
break;
}
DdeBookmark* const pDdeBookmark = dynamic_cast<DdeBookmark*>(ppMark->get());
@@ -740,7 +805,7 @@ namespace sw { namespace mark
pDdeBookmark->DeregisterFromDoc(m_pDoc);
//Effective STL Item 27, get a non-const iterator aI at the same
//position as const iterator ppMark was
- iterator_t aI = m_vMarks.begin();
+ iterator_t aI = m_vAllMarks.begin();
std::advance(aI, std::distance<const_iterator_t>(aI, ppMark));
//fdo#37974
@@ -756,7 +821,7 @@ namespace sw { namespace mark
//it anymore.
pMark_t xHoldPastErase = *aI;
m_aMarkNamesSet.erase(ppMark->get()->GetName());
- m_vMarks.erase(aI);
+ m_vAllMarks.erase(aI);
return ret;
}
@@ -767,22 +832,18 @@ namespace sw { namespace mark
" - Mark is not in my doc.");
// finds the last Mark that is starting before pMark
// (pMarkLow < pMark)
- iterator_t pMarkLow = lower_bound(
- m_vMarks.begin(), m_vMarks.end(),
- pMark->GetMarkStart(),
- sw::mark::CompareIMarkStartsBefore());
- // finds the first Mark that pMark is starting before
- // (pMark < pMarkHigh)
- //iterator_t pMarkHigh = upper_bound(
- // pMarkLow, m_vMarks.end(),
- // pMark->GetMarkStart(),
- // bind(&IMark::StartsBefore, _2, _1));
- // since it should be rare that pMark isnt found at all
- // we skip the bisect search on the upper bound
- iterator_t pMarkHigh = m_vMarks.end();
- iterator_t pMarkFound = find_if(
- pMarkLow, pMarkHigh,
- boost::bind(equal_to<const IMark*>(), boost::bind(&boost::shared_ptr<IMark>::get, _1), pMark));
+ iterator_t pMarkLow =
+ lower_bound(
+ m_vAllMarks.begin(),
+ m_vAllMarks.end(),
+ pMark->GetMarkStart(),
+ bind(&IMark::StartsBefore, _1, _2) );
+ iterator_t pMarkHigh = m_vAllMarks.end();
+ iterator_t pMarkFound =
+ find_if(
+ pMarkLow,
+ pMarkHigh,
+ bind(equal_to<const IMark*>(), bind(&boost::shared_ptr<IMark>::get, _1), pMark) );
if(pMarkFound != pMarkHigh)
deleteMark(pMarkFound);
}
@@ -792,20 +853,24 @@ namespace sw { namespace mark
m_vFieldmarks.clear();
m_vBookmarks.clear();
m_aMarkNamesSet.clear();
+
+ m_vCommonMarks.clear();
+
+ m_vAnnotationMarks.clear();
+
#if OSL_DEBUG_LEVEL > 0
- for(iterator_t pBkmk = m_vMarks.begin();
- pBkmk != m_vMarks.end();
+ for(iterator_t pBkmk = m_vAllMarks.begin();
+ pBkmk != m_vAllMarks.end();
++pBkmk)
- OSL_ENSURE(pBkmk->unique(),
- "<MarkManager::clearAllMarks(..)>"
- " - a Bookmark is still in use.");
+ OSL_ENSURE( pBkmk->unique(),
+ "<MarkManager::clearAllMarks(..)> - a Bookmark is still in use.");
#endif
- m_vMarks.clear();
+ m_vAllMarks.clear();
}
IDocumentMarkAccess::const_iterator_t MarkManager::findMark(const OUString& rName) const
{
- return lcl_FindMarkByName(rName, m_vMarks.begin(), m_vMarks.end());
+ return lcl_FindMarkByName(rName, m_vAllMarks.begin(), m_vAllMarks.end());
}
IDocumentMarkAccess::const_iterator_t MarkManager::findBookmark(const OUString& rName) const
@@ -813,14 +878,14 @@ namespace sw { namespace mark
return lcl_FindMarkByName(rName, m_vBookmarks.begin(), m_vBookmarks.end());
}
- IDocumentMarkAccess::const_iterator_t MarkManager::getMarksBegin() const
- { return m_vMarks.begin(); }
+ IDocumentMarkAccess::const_iterator_t MarkManager::getAllMarksBegin() const
+ { return m_vAllMarks.begin(); }
- IDocumentMarkAccess::const_iterator_t MarkManager::getMarksEnd() const
- { return m_vMarks.end(); }
+ IDocumentMarkAccess::const_iterator_t MarkManager::getAllMarksEnd() const
+ { return m_vAllMarks.end(); }
- sal_Int32 MarkManager::getMarksCount() const
- { return m_vMarks.size(); }
+ sal_Int32 MarkManager::getAllMarksCount() const
+ { return m_vAllMarks.size(); }
IDocumentMarkAccess::const_iterator_t MarkManager::getBookmarksBegin() const
{ return m_vBookmarks.begin(); }
@@ -847,13 +912,50 @@ namespace sw { namespace mark
IFieldmark* MarkManager::getFieldmarkBefore(const SwPosition& rPos) const
{ return dynamic_cast<IFieldmark*>(lcl_getMarkBefore(m_vFieldmarks, rPos)); }
+ IDocumentMarkAccess::const_iterator_t MarkManager::getCommonMarksBegin() const
+ {
+ return m_vCommonMarks.begin();
+ }
+
+ IDocumentMarkAccess::const_iterator_t MarkManager::getCommonMarksEnd() const
+ {
+ return m_vCommonMarks.end();
+ }
+
+ sal_Int32 MarkManager::getCommonMarksCount() const
+ {
+ return m_vCommonMarks.size();
+ }
+
+
+ IDocumentMarkAccess::const_iterator_t MarkManager::getAnnotationMarksBegin() const
+ {
+ return m_vAnnotationMarks.begin();
+ }
+
+ IDocumentMarkAccess::const_iterator_t MarkManager::getAnnotationMarksEnd() const
+ {
+ return m_vAnnotationMarks.end();
+ }
+
+ sal_Int32 MarkManager::getAnnotationMarksCount() const
+ {
+ return m_vAnnotationMarks.size();
+ }
+
+ IDocumentMarkAccess::const_iterator_t MarkManager::findAnnotationMark( const ::rtl::OUString& rName ) const
+ {
+ return lcl_FindMarkByName( rName, m_vAnnotationMarks.begin(), m_vAnnotationMarks.end() );
+ }
OUString MarkManager::getUniqueMarkName(const OUString& rName) const
{
- OSL_ENSURE(!rName.isEmpty(),
- "<MarkManager::getUniqueMarkName(..)>"
- " - a name should be proposed");
- if(!hasMark(rName)) return rName;
+ OSL_ENSURE(rName.getLength(),
+ "<MarkManager::getUniqueMarkName(..)> - a name should be proposed");
+ if ( findMark(rName) == getAllMarksEnd() )
+ {
+ return rName;
+ }
OUStringBuffer sBuf;
OUString sTmp;
@@ -868,7 +970,10 @@ namespace sw { namespace mark
{
sTmp = sBuf.append(rName).append(nCnt).makeStringAndClear();
nCnt++;
- if(!hasMark(sTmp)) break;
+ if ( findMark(sTmp) == getAllMarksEnd() )
+ {
+ break;
+ }
}
m_aMarkBasenameMapUniqueOffset[rName] = nCnt;
@@ -877,11 +982,26 @@ namespace sw { namespace mark
void MarkManager::sortMarks()
{
- sort(m_vMarks.begin(), m_vMarks.end(), &lcl_MarkOrderingByStart);
+ sort(m_vAllMarks.begin(), m_vAllMarks.end(), &lcl_MarkOrderingByStart);
+ sort(m_vCommonMarks.begin(), m_vCommonMarks.end(), &lcl_MarkOrderingByStart);
sort(m_vBookmarks.begin(), m_vBookmarks.end(), &lcl_MarkOrderingByStart);
sort(m_vFieldmarks.begin(), m_vFieldmarks.end(), &lcl_MarkOrderingByStart);
+ sort(m_vAnnotationMarks.begin(), m_vAnnotationMarks.end(), &lcl_MarkOrderingByStart);
}
+#if OSL_DEBUG_LEVEL > 1
+ void MarkManager::dumpFieldmarks( ) const
+ {
+ const_iterator_t pIt = m_vFieldmarks.begin();
+ for (; pIt != m_vFieldmarks.end( ); pIt++)
+ {
+ rtl::OUString str = (*pIt)->ToString();
+ OSL_TRACE("%s\n",
+ ::rtl::OUStringToOString(str, RTL_TEXTENCODING_UTF8).getStr());
+ }
+ }
+#endif
+
bool MarkManager::hasMark(const OUString& rName) const
{
return (m_aMarkNamesSet.find(rName) != m_aMarkNamesSet.end());
@@ -1244,41 +1364,36 @@ void _SaveCntntIdx(SwDoc* pDoc,
aSave.SetTypeAndCount( 0x8000, 0 );
IDocumentMarkAccess* const pMarkAccess = pDoc->getIDocumentMarkAccess();
- const sal_Int32 nBkmks = pMarkAccess->getMarksCount();
- for(; aSave.GetCount() < nBkmks; aSave.IncCount())
+ const sal_Int32 nMarksCount = pMarkAccess->getAllMarksCount();
+ for ( ; aSave.GetCount() < nMarksCount; aSave.IncCount() )
{
- bool bEqual = false;
- bool bLower = false;
- const ::sw::mark::IMark* pBkmk = (pMarkAccess->getMarksBegin() + aSave.GetCount())->get();
+ bool bMarkPosEqual = false;
+ const ::sw::mark::IMark* pBkmk = (pMarkAccess->getAllMarksBegin() + aSave.GetCount())->get();
if(pBkmk->GetMarkPos().nNode.GetIndex() == nNode
&& pBkmk->GetMarkPos().nContent.GetIndex() <= nCntnt)
{
if(pBkmk->GetMarkPos().nContent.GetIndex() < nCntnt)
{
- bLower = true; // a hint for the other position...
aSave.SetContent(pBkmk->GetMarkPos().nContent.GetIndex());
aSave.Add(rSaveArr);
}
else // if a bookmark position is equal nCntnt, the other position
- bEqual = true; // has to decide if it is added to the array
+ bMarkPosEqual = true; // has to decide if it is added to the array
}
if(pBkmk->IsExpanded()
&& pBkmk->GetOtherMarkPos().nNode.GetIndex() == nNode
&& pBkmk->GetOtherMarkPos().nContent.GetIndex() <= nCntnt)
{
- if(bLower || pBkmk->GetOtherMarkPos().nContent.GetIndex() < nCntnt)
- {
- if(bEqual)
- { // the other position is before, the (main) position is equal
- aSave.SetContent(pBkmk->GetMarkPos().nContent.GetIndex());
- aSave.Add(rSaveArr);
- }
- aSave.SetContent(pBkmk->GetOtherMarkPos().nContent.GetIndex());
- aSave.IncType();
+ if(bMarkPosEqual)
+ { // the other position is before, the (main) position is equal
+ aSave.SetContent(pBkmk->GetMarkPos().nContent.GetIndex());
aSave.Add(rSaveArr);
- aSave.DecType();
}
+ aSave.SetContent(pBkmk->GetOtherMarkPos().nContent.GetIndex());
+ aSave.IncType();
+ aSave.Add(rSaveArr);
+ aSave.DecType();
}
}
@@ -1470,7 +1585,7 @@ void _RestoreCntntIdx(SwDoc* pDoc,
{
case 0x8000:
{
- MarkBase* pMark = dynamic_cast<MarkBase*>(pMarkAccess->getMarksBegin()[aSave.GetCount()].get());
+ MarkBase* pMark = dynamic_cast<MarkBase*>(pMarkAccess->getAllMarksBegin()[aSave.GetCount()].get());
SwPosition aNewPos(pMark->GetMarkPos());
aNewPos.nNode = *pCNd;
aNewPos.nContent.Assign(pCNd, aSave.GetContent() + nOffset);
@@ -1479,7 +1594,7 @@ void _RestoreCntntIdx(SwDoc* pDoc,
break;
case 0x8001:
{
- MarkBase* pMark = dynamic_cast<MarkBase*>(pMarkAccess->getMarksBegin()[aSave.GetCount()].get());
+ MarkBase* pMark = dynamic_cast<MarkBase*>(pMarkAccess->getAllMarksBegin()[aSave.GetCount()].get());
SwPosition aNewPos(pMark->GetOtherMarkPos());
aNewPos.nNode = *pCNd;
aNewPos.nContent.Assign(pCNd, aSave.GetContent() + nOffset);
@@ -1638,7 +1753,7 @@ void _RestoreCntntIdx(std::vector<sal_uLong> &rSaveArr,
{
case 0x8000:
{
- MarkBase* pMark = dynamic_cast<MarkBase*>(pMarkAccess->getMarksBegin()[aSave.GetCount()].get());
+ MarkBase* pMark = dynamic_cast<MarkBase*>(pMarkAccess->getAllMarksBegin()[aSave.GetCount()].get());
SwPosition aNewPos(pMark->GetMarkPos());
aNewPos.nNode = rNd;
aNewPos.nContent.Assign(pCNd, std::min(aSave.GetContent(), nLen));
@@ -1647,7 +1762,7 @@ void _RestoreCntntIdx(std::vector<sal_uLong> &rSaveArr,
break;
case 0x8001:
{
- MarkBase* pMark = dynamic_cast<MarkBase*>(pMarkAccess->getMarksBegin()[aSave.GetCount()].get());
+ MarkBase* pMark = dynamic_cast<MarkBase*>(pMarkAccess->getAllMarksBegin()[aSave.GetCount()].get());
SwPosition aNewPos(pMark->GetOtherMarkPos());
aNewPos.nNode = rNd;
aNewPos.nContent.Assign(pCNd, std::min(aSave.GetContent(), nLen));