sw/source/core/crsr/bookmrk.cxx |   37 +++++++++----------------------------
 sw/source/core/inc/bookmrk.hxx  |   18 ++++++++++++------
 2 files changed, 21 insertions(+), 34 deletions(-)

New commits:
commit 74bb3277e1471db2840584469a00158174780bd9
Author:     Tamás Zolnai <tamas.zol...@collabora.com>
AuthorDate: Wed Apr 3 12:11:44 2019 +0200
Commit:     Tamás Zolnai <tamas.zol...@collabora.com>
CommitDate: Thu Jul 11 23:33:32 2019 +0200

    MSForms: Deduplicate code by creating NonTextFieldmark class
    
    CheckboxFieldmark and DropDownFieldmark do the same in
    their InitDoc() and ReleaseDoc() methods.
    
    Change-Id: If6acae7f4783a222bc225c19ce8d32ea22f0d20b
    Reviewed-on: https://gerrit.libreoffice.org/75436
    Tested-by: Jenkins
    Reviewed-by: Tamás Zolnai <tamas.zol...@collabora.com>

diff --git a/sw/source/core/crsr/bookmrk.cxx b/sw/source/core/crsr/bookmrk.cxx
index 2e2a5417d0a0..bbe7867f03a2 100644
--- a/sw/source/core/crsr/bookmrk.cxx
+++ b/sw/source/core/crsr/bookmrk.cxx
@@ -431,11 +431,11 @@ namespace sw { namespace mark
         lcl_RemoveFieldMarks(this, pDoc, CH_TXT_ATR_FIELDSTART, 
CH_TXT_ATR_FIELDEND);
     }
 
-    CheckboxFieldmark::CheckboxFieldmark(const SwPaM& rPaM)
+    NonTextFieldmark::NonTextFieldmark(const SwPaM& rPaM)
         : Fieldmark(rPaM)
     { }
 
-    void CheckboxFieldmark::InitDoc(SwDoc* const io_pDoc, sw::mark::InsertMode 
const eMode)
+    void NonTextFieldmark::InitDoc(SwDoc* const io_pDoc, sw::mark::InsertMode 
const eMode)
     {
         if (eMode == sw::mark::InsertMode::New)
         {
@@ -453,12 +453,17 @@ namespace sw { namespace mark
         }
     }
 
-    void CheckboxFieldmark::ReleaseDoc(SwDoc* const pDoc)
+    void NonTextFieldmark::ReleaseDoc(SwDoc* const pDoc)
     {
         lcl_RemoveFieldMarks(this, pDoc,
                 CH_TXT_ATR_FIELDSTART, CH_TXT_ATR_FORMELEMENT);
     }
 
+
+    CheckboxFieldmark::CheckboxFieldmark(const SwPaM& rPaM)
+        : NonTextFieldmark(rPaM)
+    { }
+
     void CheckboxFieldmark::SetChecked(bool checked)
     {
         if ( IsChecked() != checked )
@@ -481,7 +486,7 @@ namespace sw { namespace mark
     }
 
     DropDownFieldmark::DropDownFieldmark(const SwPaM& rPaM)
-        : Fieldmark(rPaM)
+        : NonTextFieldmark(rPaM)
         , m_pButton(nullptr)
     {
     }
@@ -491,30 +496,6 @@ namespace sw { namespace mark
         m_pButton.disposeAndClear();
     }
 
-    void DropDownFieldmark::InitDoc(SwDoc* const io_pDoc, sw::mark::InsertMode 
const eMode)
-    {
-        if (eMode == sw::mark::InsertMode::New)
-        {
-            lcl_SetFieldMarks(this, io_pDoc, CH_TXT_ATR_FIELDSTART, 
CH_TXT_ATR_FORMELEMENT);
-
-            // For some reason the end mark is moved from 1 by the Insert:
-            // we don't want this for checkboxes
-            SwPosition aNewEndPos = GetMarkEnd();
-            aNewEndPos.nContent--;
-            SetMarkEndPos( aNewEndPos );
-        }
-        else
-        {
-            lcl_AssertFieldMarksSet(this, CH_TXT_ATR_FIELDSTART, 
CH_TXT_ATR_FORMELEMENT);
-        }
-    }
-
-    void DropDownFieldmark::ReleaseDoc(SwDoc* const pDoc)
-    {
-        lcl_RemoveFieldMarks(this, pDoc,
-                CH_TXT_ATR_FIELDSTART, CH_TXT_ATR_FORMELEMENT);
-    }
-
     void DropDownFieldmark::SetPortionPaintArea(const SwRect& 
rPortionPaintArea)
     {
         if(m_aPortionPaintArea == rPortionPaintArea &&
diff --git a/sw/source/core/inc/bookmrk.hxx b/sw/source/core/inc/bookmrk.hxx
index 2aec024a4272..22b4f94b8de8 100644
--- a/sw/source/core/inc/bookmrk.hxx
+++ b/sw/source/core/inc/bookmrk.hxx
@@ -247,28 +247,34 @@ namespace sw {
             virtual void ReleaseDoc(SwDoc* const pDoc) override;
         };
 
+        // Non text fieldmarks has has no content between the start and end 
marks.
+        class NonTextFieldmark
+            : public Fieldmark
+        {
+        public:
+            NonTextFieldmark(const SwPaM& rPaM);
+            virtual void InitDoc(SwDoc* const io_pDoc, sw::mark::InsertMode 
eMode) override;
+            virtual void ReleaseDoc(SwDoc* const pDoc) override;
+        };
+
         /// Fieldmark representing a checkbox form field.
         class CheckboxFieldmark
             : virtual public ICheckboxFieldmark
-            , public Fieldmark
+            , public NonTextFieldmark
         {
         public:
             CheckboxFieldmark(const SwPaM& rPaM);
-            virtual void InitDoc(SwDoc* const io_pDoc, sw::mark::InsertMode 
eMode) override;
-            virtual void ReleaseDoc(SwDoc* const pDoc) override;
             bool IsChecked() const override;
             void SetChecked(bool checked) override;
         };
 
         /// Fieldmark representing a drop-down form field.
         class DropDownFieldmark
-            : public Fieldmark
+            : public NonTextFieldmark
         {
         public:
             DropDownFieldmark(const SwPaM& rPaM);
             virtual ~DropDownFieldmark() override;
-            virtual void InitDoc(SwDoc* const io_pDoc, sw::mark::InsertMode 
eMode) override;
-            virtual void ReleaseDoc(SwDoc* const pDoc) override;
 
             // This method should be called only by the portion so we can now 
the portion's painting area
             void SetPortionPaintArea(const SwRect& rPortionPaintArea);
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to