tdf#159054 sw: fix .uno:DefaultNumber toggle on Heading numbering

This fixes a 7.2 regression from
commit c456f839a597f537f1c59becd7d0bb6c86248ef8
Author: Anshu on Wed Jan 6 15:04:16 2021 +0530
    tdf#115965 tdf#92622 NoList default in menu,tool,sidebar

The current implementation would set the number format
to SVX_NUM_NUMBER_NONE, but it still looks like a number to the toolbar,
so toggling didn't work since 7.4's bcede3c0ed94d4
It also never cleared out the prefix/suffix when toggled off,
and it affected ALL paragraphs using that outline numbering style.

Remove numbering was doing the same kind of thing.

I think the toggle was trying to follow the drop-down behaviour
of modifying the outline numbering style itself.
While I think the drop-down handling could be considered appropriate,
using the toggle to pseudo-disable the entire style just seems wrong.

This patch kills that, and in addition
automatically gains all the nice undo/redo functionality.

This is one tiny step in making outline numbering go away.

make CppunitTest_sw_uiwriter9 \
    CPPUNIT_TEST_NAME=testTdf159054_disableOutlineNumbering

Change-Id: Id6a24ac25479cb8f35bf1c2c58344390ed7512fe
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/164985
Reviewed-by: Justin Luth <jluth@mail.com>
Tested-by: Justin Luth <jluth@mail.com>
Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
diff --git a/sw/qa/extras/uiwriter/uiwriter9.cxx b/sw/qa/extras/uiwriter/uiwriter9.cxx
index a18f14c..f46d43e 100644
--- a/sw/qa/extras/uiwriter/uiwriter9.cxx
+++ b/sw/qa/extras/uiwriter/uiwriter9.cxx
@@ -429,20 +429,26 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest9, testTdf159054_disableOutlineNumbering)
    dispatchCommand(mxComponent, ".uno:DefaultNumbering", {});

    // the selected paragraphs should definitely have the list label removed
    CPPUNIT_ASSERT_EQUAL(OUString("."), getProperty<OUString>(xPara1, "ListLabelString"));
    CPPUNIT_ASSERT_EQUAL(OUString("."), getProperty<OUString>(xPara2, "ListLabelString"));
    // current implementation: the numbering style itself is changed too - affects all Heading 1's.
    // A valid alternative implementation would be to simply SetCountInList(false) for 1st para,
    // and leave the Outline style format alone.
    CPPUNIT_ASSERT_EQUAL(OUString("."), getProperty<OUString>(xPara3, "ListLabelString"));
    CPPUNIT_ASSERT_EQUAL(OUString(""), getProperty<OUString>(xPara1, "ListLabelString"));
    CPPUNIT_ASSERT_EQUAL(OUString(""), getProperty<OUString>(xPara2, "ListLabelString"));
    // the third paragraph must retain the existing numbering format
    CPPUNIT_ASSERT_EQUAL(OUString("A."), getProperty<OUString>(xPara3, "ListLabelString"));

    // on the selection, simulate pressing the toolbar button to toggle ON numbering again
    dispatchCommand(mxComponent, ".uno:DefaultNumbering", {});

    // current implementation: the entire format was removed, so turn (default) numbering on
    CPPUNIT_ASSERT_EQUAL(OUString("."), getProperty<OUString>(xPara1, "ListLabelString"));
    CPPUNIT_ASSERT_EQUAL(OUString("."), getProperty<OUString>(xPara2, "ListLabelString"));
    CPPUNIT_ASSERT_EQUAL(OUString("."), getProperty<OUString>(xPara3, "ListLabelString"));
    // the outline numbering format must be re-applied to the first two paragraphs
    CPPUNIT_ASSERT_EQUAL(OUString("A."), getProperty<OUString>(xPara1, "ListLabelString"));
    CPPUNIT_ASSERT_EQUAL(OUString("B."), getProperty<OUString>(xPara2, "ListLabelString"));
    CPPUNIT_ASSERT_EQUAL(OUString("C."), getProperty<OUString>(xPara3, "ListLabelString"));

    // on the selection, simulate a right click - list - No list
    dispatchCommand(mxComponent, ".uno:RemoveBullets", {});

    // the selected paragraphs should definitely have the list label removed
    CPPUNIT_ASSERT_EQUAL(OUString(""), getProperty<OUString>(xPara1, "ListLabelString"));
    CPPUNIT_ASSERT_EQUAL(OUString(""), getProperty<OUString>(xPara2, "ListLabelString"));
    CPPUNIT_ASSERT_EQUAL(OUString("A."), getProperty<OUString>(xPara3, "ListLabelString"));
}

CPPUNIT_TEST_FIXTURE(SwUiWriterTest9, testTdf158375_dde_disable)
diff --git a/sw/source/core/doc/docnum.cxx b/sw/source/core/doc/docnum.cxx
index 1c7d179..73b04ad 100644
--- a/sw/source/core/doc/docnum.cxx
+++ b/sw/source/core/doc/docnum.cxx
@@ -1368,10 +1368,15 @@ void SwDoc::DelNumRules(const SwPaM& rPam, SwRootFrame const*const pLayout)
            {
                pTNd->ChkCondColl();
            }
            else if( !pOutlNd &&
                     static_cast<SwTextFormatColl*>(pTNd->GetFormatColl())->IsAssignedToListLevelOfOutlineStyle() )
            else
            {
                pOutlNd = pTNd;
                auto pParaStyle = static_cast<SwTextFormatColl*>(pTNd->GetFormatColl());
                if (pParaStyle && pParaStyle->IsAssignedToListLevelOfOutlineStyle())
                {
                    if (!pOutlNd)
                        pOutlNd = pTNd;
                    pTNd->SetCountedInList(false);
                }
            }
        }
    }
diff --git a/sw/source/uibase/shells/txtnum.cxx b/sw/source/uibase/shells/txtnum.cxx
index 2c25e96..bdad787 100644
--- a/sw/source/uibase/shells/txtnum.cxx
+++ b/sw/source/uibase/shells/txtnum.cxx
@@ -111,7 +111,6 @@ void SwTextShell::ExecEnterNum(SfxRequest &rReq)
        SfxRequest aReq(GetView().GetViewFrame(), FN_NUM_BULLET_ON);
        aReq.AppendItem(SfxBoolItem(FN_PARAM_1, false));
        aReq.Done();
        GetShell().NumOrBulletOff();
        GetShell().DelNumRules();
        GetShell().EndAllAction();
    }
diff --git a/sw/source/uibase/wrtsh/wrtsh1.cxx b/sw/source/uibase/wrtsh/wrtsh1.cxx
index 2063029..bb90ab6 100644
--- a/sw/source/uibase/wrtsh/wrtsh1.cxx
+++ b/sw/source/uibase/wrtsh/wrtsh1.cxx
@@ -1704,36 +1704,7 @@ void SwWrtShell::NumOrBulletOff()
    if (!pCurNumRule)
        return;

    if (pCurNumRule->IsOutlineRule())
    {
        SwNumRule aNumRule(*pCurNumRule);

        SwTextNode * pTextNode =
            sw::GetParaPropsNode(*GetLayout(), GetCursor()->GetPoint()->GetNode());

        if (pTextNode)
        {
            int nLevel = pTextNode->GetActualListLevel();

            if (nLevel < 0)
                nLevel = 0;

            if (nLevel >= MAXLEVEL)
                nLevel = MAXLEVEL - 1;

            SwNumFormat aFormat(aNumRule.Get(o3tl::narrowing<sal_uInt16>(nLevel)));

            aFormat.SetNumberingType(SVX_NUM_NUMBER_NONE);
            aNumRule.Set(nLevel, aFormat);

            // no start or continuation of a list - the outline style is only changed.
            SetCurNumRule( aNumRule, false );
        }
    }
    else
    {
        DelNumRules();
    }
    DelNumRules();

    // #126346# - Cursor can not be anymore in front of
    // a label, because numbering/bullet is switched off.