summaryrefslogtreecommitdiff
path: root/sw
diff options
context:
space:
mode:
Diffstat (limited to 'sw')
-rw-r--r--sw/inc/IDocumentMarkAccess.hxx6
-rw-r--r--sw/source/core/crsr/annotationmark.cxx3
-rw-r--r--sw/source/core/crsr/bookmrk.cxx35
-rw-r--r--sw/source/core/doc/docbm.cxx15
-rw-r--r--sw/source/core/inc/MarkManager.hxx6
-rw-r--r--sw/source/core/inc/annotationmark.hxx2
-rw-r--r--sw/source/core/inc/bookmrk.hxx10
7 files changed, 51 insertions, 26 deletions
diff --git a/sw/inc/IDocumentMarkAccess.hxx b/sw/inc/IDocumentMarkAccess.hxx
index a8dacbcbd7e4..1e2db2436a61 100644
--- a/sw/inc/IDocumentMarkAccess.hxx
+++ b/sw/inc/IDocumentMarkAccess.hxx
@@ -132,11 +132,13 @@ class IDocumentMarkAccess
*/
virtual ::sw::mark::IMark* makeMark(const SwPaM& rPaM,
const OUString& rProposedName,
- MarkType eMark, ::sw::mark::InsertMode eMode) = 0;
+ MarkType eMark, ::sw::mark::InsertMode eMode,
+ SwPosition const* pSepPos = nullptr) = 0;
virtual sw::mark::IFieldmark* makeFieldBookmark( const SwPaM& rPaM,
const OUString& rName,
- const OUString& rType) = 0;
+ const OUString& rType,
+ SwPosition const* pSepPos = nullptr) = 0;
virtual sw::mark::IFieldmark* makeNoTextFieldBookmark( const SwPaM& rPaM,
const OUString& rName,
const OUString& rType) = 0;
diff --git a/sw/source/core/crsr/annotationmark.cxx b/sw/source/core/crsr/annotationmark.cxx
index 9741f276906e..ea11fad3d2cc 100644
--- a/sw/source/core/crsr/annotationmark.cxx
+++ b/sw/source/core/crsr/annotationmark.cxx
@@ -48,7 +48,8 @@ namespace sw { namespace mark
{
}
- void AnnotationMark::InitDoc(SwDoc* const io_pDoc, sw::mark::InsertMode const)
+ void AnnotationMark::InitDoc(SwDoc* const io_pDoc,
+ sw::mark::InsertMode const, SwPosition const*const)
{
SwTextNode *pTextNode = GetMarkEnd().nNode.GetNode().GetTextNode();
assert(pTextNode);
diff --git a/sw/source/core/crsr/bookmrk.cxx b/sw/source/core/crsr/bookmrk.cxx
index c74abc61935f..ba43b2158bd4 100644
--- a/sw/source/core/crsr/bookmrk.cxx
+++ b/sw/source/core/crsr/bookmrk.cxx
@@ -154,7 +154,8 @@ namespace
void lcl_SetFieldMarks(Fieldmark* const pField,
SwDoc* const io_pDoc,
const sal_Unicode aStartMark,
- const sal_Unicode aEndMark)
+ const sal_Unicode aEndMark,
+ SwPosition const*const pSepPos)
{
io_pDoc->GetIDocumentUndoRedo().StartUndo(SwUndoId::UI_REPLACE, nullptr);
@@ -169,9 +170,18 @@ namespace
pField->SetMarkStartPos( start );
SwPosition& rEnd = pField->GetMarkEnd(); // note: retrieve after
// setting start, because if start==end it can go stale, see SetMarkPos()
- *aStartPaM.GetPoint() = rEnd;
+ assert(pSepPos == nullptr || (start < *pSepPos && *pSepPos <= rEnd));
+ *aStartPaM.GetPoint() = pSepPos ? *pSepPos : rEnd;
io_pDoc->getIDocumentContentOperations().InsertString(aStartPaM, OUString(CH_TXT_ATR_FIELDSEP));
- ++rEnd.nContent;
+ if (!pSepPos || rEnd < *pSepPos)
+ { // rEnd is not moved automatically if it's same as insert pos
+ ++rEnd.nContent;
+ }
+ assert(pSepPos == nullptr || (start < *pSepPos && *pSepPos <= rEnd));
+ }
+ else
+ {
+ assert(pSepPos == nullptr);
}
SwPosition& rEnd = pField->GetMarkEnd();
@@ -363,7 +373,8 @@ namespace sw { namespace mark
m_aName = rName;
}
- void Bookmark::InitDoc(SwDoc* const io_pDoc, sw::mark::InsertMode const)
+ void Bookmark::InitDoc(SwDoc* const io_pDoc,
+ sw::mark::InsertMode const, SwPosition const*const)
{
if (io_pDoc->GetIDocumentUndoRedo().DoesUndo())
{
@@ -485,11 +496,12 @@ namespace sw { namespace mark
m_aName = rName;
}
- void TextFieldmark::InitDoc(SwDoc* const io_pDoc, sw::mark::InsertMode const eMode)
+ void TextFieldmark::InitDoc(SwDoc* const io_pDoc,
+ sw::mark::InsertMode const eMode, SwPosition const*const pSepPos)
{
if (eMode == sw::mark::InsertMode::New)
{
- lcl_SetFieldMarks(this, io_pDoc, CH_TXT_ATR_FIELDSTART, CH_TXT_ATR_FIELDEND);
+ lcl_SetFieldMarks(this, io_pDoc, CH_TXT_ATR_FIELDSTART, CH_TXT_ATR_FIELDEND, pSepPos);
}
else
{
@@ -506,11 +518,13 @@ namespace sw { namespace mark
: Fieldmark(rPaM)
{ }
- void NonTextFieldmark::InitDoc(SwDoc* const io_pDoc, sw::mark::InsertMode const eMode)
+ void NonTextFieldmark::InitDoc(SwDoc* const io_pDoc,
+ sw::mark::InsertMode const eMode, SwPosition const*const pSepPos)
{
+ assert(pSepPos == nullptr);
if (eMode == sw::mark::InsertMode::New)
{
- lcl_SetFieldMarks(this, io_pDoc, CH_TXT_ATR_FIELDSTART, CH_TXT_ATR_FORMELEMENT);
+ lcl_SetFieldMarks(this, io_pDoc, CH_TXT_ATR_FIELDSTART, CH_TXT_ATR_FORMELEMENT, pSepPos);
// For some reason the end mark is moved from 1 by the Insert:
// we don't want this for checkboxes
@@ -625,13 +639,14 @@ namespace sw { namespace mark
{
}
- void DateFieldmark::InitDoc(SwDoc* const io_pDoc, sw::mark::InsertMode eMode)
+ void DateFieldmark::InitDoc(SwDoc* const io_pDoc,
+ sw::mark::InsertMode eMode, SwPosition const*const pSepPos)
{
m_pNumberFormatter = io_pDoc->GetNumberFormatter();
m_pDocumentContentOperationsManager = &io_pDoc->GetDocumentContentOperationsManager();
if (eMode == sw::mark::InsertMode::New)
{
- lcl_SetFieldMarks(this, io_pDoc, CH_TXT_ATR_FIELDSTART, CH_TXT_ATR_FIELDEND);
+ lcl_SetFieldMarks(this, io_pDoc, CH_TXT_ATR_FIELDSTART, CH_TXT_ATR_FIELDEND, pSepPos);
}
else
{
diff --git a/sw/source/core/doc/docbm.cxx b/sw/source/core/doc/docbm.cxx
index e385f5445abd..4f13bea2d79f 100644
--- a/sw/source/core/doc/docbm.cxx
+++ b/sw/source/core/doc/docbm.cxx
@@ -544,7 +544,8 @@ namespace sw { namespace mark
::sw::mark::IMark* MarkManager::makeMark(const SwPaM& rPaM,
const OUString& rName,
const IDocumentMarkAccess::MarkType eType,
- sw::mark::InsertMode const eMode)
+ sw::mark::InsertMode const eMode,
+ SwPosition const*const pSepPos)
{
#if OSL_DEBUG_LEVEL > 0
{
@@ -642,7 +643,7 @@ namespace sw { namespace mark
// no special array for these
break;
}
- pMark->InitDoc(m_pDoc, eMode);
+ pMark->InitDoc(m_pDoc, eMode, pSepPos);
SAL_INFO("sw.core", "--- makeType ---");
SAL_INFO("sw.core", "Marks");
lcl_DebugMarks(m_vAllMarks);
@@ -657,8 +658,10 @@ namespace sw { namespace mark
::sw::mark::IFieldmark* MarkManager::makeFieldBookmark(
const SwPaM& rPaM,
const OUString& rName,
- const OUString& rType )
+ const OUString& rType,
+ SwPosition const*const pSepPos)
{
+
// Disable undo, because we handle it using SwUndoInsTextFieldmark
bool bUndoIsEnabled = m_pDoc->GetIDocumentUndoRedo().DoesUndo();
m_pDoc->GetIDocumentUndoRedo().DoUndo(false);
@@ -668,13 +671,15 @@ namespace sw { namespace mark
{
pMark = makeMark(rPaM, rName,
IDocumentMarkAccess::MarkType::DATE_FIELDMARK,
- sw::mark::InsertMode::New);
+ sw::mark::InsertMode::New,
+ pSepPos);
}
else
{
pMark = makeMark(rPaM, rName,
IDocumentMarkAccess::MarkType::TEXT_FIELDMARK,
- sw::mark::InsertMode::New);
+ sw::mark::InsertMode::New,
+ pSepPos);
}
sw::mark::IFieldmark* pFieldMark = dynamic_cast<sw::mark::IFieldmark*>( pMark );
if (pFieldMark)
diff --git a/sw/source/core/inc/MarkManager.hxx b/sw/source/core/inc/MarkManager.hxx
index 120149ccc039..edf8121836b6 100644
--- a/sw/source/core/inc/MarkManager.hxx
+++ b/sw/source/core/inc/MarkManager.hxx
@@ -41,11 +41,13 @@ namespace sw {
// IDocumentMarkAccess
virtual ::sw::mark::IMark* makeMark(const SwPaM& rPaM,
const OUString& rName, IDocumentMarkAccess::MarkType eMark,
- sw::mark::InsertMode eMode) override;
+ sw::mark::InsertMode eMode,
+ SwPosition const* pSepPos = nullptr) override;
virtual sw::mark::IFieldmark* makeFieldBookmark( const SwPaM& rPaM,
const OUString& rName,
- const OUString& rType) override;
+ const OUString& rType,
+ SwPosition const* pSepPos = nullptr) override;
virtual sw::mark::IFieldmark* makeNoTextFieldBookmark( const SwPaM& rPaM,
const OUString& rName,
const OUString& rType) override;
diff --git a/sw/source/core/inc/annotationmark.hxx b/sw/source/core/inc/annotationmark.hxx
index a74470b6704a..8cf1590ca310 100644
--- a/sw/source/core/inc/annotationmark.hxx
+++ b/sw/source/core/inc/annotationmark.hxx
@@ -36,7 +36,7 @@ namespace sw { namespace mark
virtual ~AnnotationMark() override;
- virtual void InitDoc(SwDoc* const io_Doc, sw::mark::InsertMode eMode) override;
+ virtual void InitDoc(SwDoc* const io_Doc, sw::mark::InsertMode eMode, SwPosition const* pSepPos) override;
const SwFormatField* GetAnnotationFormatField() const;
};
diff --git a/sw/source/core/inc/bookmrk.hxx b/sw/source/core/inc/bookmrk.hxx
index 87860603aad7..cd0e154185db 100644
--- a/sw/source/core/inc/bookmrk.hxx
+++ b/sw/source/core/inc/bookmrk.hxx
@@ -99,7 +99,7 @@ namespace sw {
m_pPos1.swap(m_pPos2);
}
- virtual void InitDoc(SwDoc* const, sw::mark::InsertMode)
+ virtual void InitDoc(SwDoc* const, sw::mark::InsertMode, SwPosition const*)
{
}
@@ -166,7 +166,7 @@ namespace sw {
Bookmark(const SwPaM& rPaM,
const vcl::KeyCode& rCode,
const OUString& rName);
- virtual void InitDoc(SwDoc* const io_Doc, sw::mark::InsertMode eMode) override;
+ virtual void InitDoc(SwDoc* const io_Doc, sw::mark::InsertMode eMode, SwPosition const* pSepPos) override;
virtual void DeregisterFromDoc(SwDoc* const io_pDoc) override;
@@ -244,7 +244,7 @@ namespace sw {
{
public:
TextFieldmark(const SwPaM& rPaM, const OUString& rName);
- virtual void InitDoc(SwDoc* const io_pDoc, sw::mark::InsertMode eMode) override;
+ virtual void InitDoc(SwDoc* const io_pDoc, sw::mark::InsertMode eMode, SwPosition const* pSepPos) override;
virtual void ReleaseDoc(SwDoc* const pDoc) override;
};
@@ -254,7 +254,7 @@ namespace sw {
{
public:
NonTextFieldmark(const SwPaM& rPaM);
- virtual void InitDoc(SwDoc* const io_pDoc, sw::mark::InsertMode eMode) override;
+ virtual void InitDoc(SwDoc* const io_pDoc, sw::mark::InsertMode eMode, SwPosition const* pSepPos) override;
virtual void ReleaseDoc(SwDoc* const pDoc) override;
};
@@ -311,7 +311,7 @@ namespace sw {
DateFieldmark(const SwPaM& rPaM);
virtual ~DateFieldmark() override;
- virtual void InitDoc(SwDoc* const io_pDoc, sw::mark::InsertMode eMode) override;
+ virtual void InitDoc(SwDoc* const io_pDoc, sw::mark::InsertMode eMode, SwPosition const* pSepPos) override;
virtual void ReleaseDoc(SwDoc* const pDoc) override;
virtual void ShowButton(SwEditWin* pEditWin) override;