tdf#131759 - Remember last used option in split table dialog

Change-Id: Id7aaa300babff988f0244d822860d455d57c86c0
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/151160
Tested-by: Jenkins
Reviewed-by: Andreas Heinisch <andreas.heinisch@yahoo.de>
diff --git a/sw/qa/uitest/table/splitTable.py b/sw/qa/uitest/table/splitTable.py
index 2bfc4ca..0292c45 100644
--- a/sw/qa/uitest/table/splitTable.py
+++ b/sw/qa/uitest/table/splitTable.py
@@ -7,7 +7,7 @@
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
#
from uitest.framework import UITestCase
from uitest.uihelper.common import get_url_for_data_file
from uitest.uihelper.common import get_state_as_dict, get_url_for_data_file

#Writer Split Table

@@ -64,4 +64,24 @@ class splitTable(UITestCase):
            self.xUITest.executeCommand(".uno:Undo")
            self.assertEqual(writer_doc.TextTables.getCount(), 1)

    def test_tdf115572_remember_split_table_option(self):
        with self.ui_test.load_file(get_url_for_data_file("splitTable.odt")) as writer_doc:
            # Go to second row
            self.xUITest.executeCommand(".uno:GoDown")
            self.xUITest.executeCommand(".uno:GoDown")

            # Split table using a non default option
            with self.ui_test.execute_dialog_through_command(".uno:SplitTable") as xDialog:
                xRadioNoHeading = xDialog.getChild("noheading")
                xRadioNoHeading.executeAction("CLICK", tuple())

            # Reopen split table dialog and check preselection
            self.xUITest.executeCommand(".uno:GoDown")
            with self.ui_test.execute_dialog_through_command(".uno:SplitTable") as xDialog:
                xRadioNoHeading = xDialog.getChild("noheading")
                # Without the fix in place, this test would have failed with
                # AssertionError: 'true' != 'false'
                # i.e. the last used option in the split table dialog was not remembered
                self.assertEqual("true", get_state_as_dict(xRadioNoHeading)["Checked"])

# vim: set shiftwidth=4 softtabstop=4 expandtab:
diff --git a/sw/source/ui/table/splittbl.cxx b/sw/source/ui/table/splittbl.cxx
index bc33390..5a7ef0a 100644
--- a/sw/source/ui/table/splittbl.cxx
+++ b/sw/source/ui/table/splittbl.cxx
@@ -21,6 +21,9 @@
#include <splittbl.hxx>
#include <tblenum.hxx>

SplitTable_HeadlineOption SwSplitTableDlg::m_eRememberedSplitOption
    = SplitTable_HeadlineOption::ContentCopy;

SwSplitTableDlg::SwSplitTableDlg(weld::Window* pParent, SwWrtShell& rSh)
    : GenericDialogController(pParent, "modules/swriter/ui/splittable.ui", "SplitTableDialog")
    , m_xBoxAttrCopyWithParaRB(m_xBuilder->weld_radio_button("customheadingapplystyle"))
@@ -29,6 +32,25 @@ SwSplitTableDlg::SwSplitTableDlg(weld::Window* pParent, SwWrtShell& rSh)
    , m_rShell(rSh)
    , m_nSplit(SplitTable_HeadlineOption::ContentCopy)
{
    // tdf#131759 - remember last used option in split table dialog
    m_nSplit = m_eRememberedSplitOption;
    switch (m_nSplit)
    {
        case SplitTable_HeadlineOption::BoxAttrAllCopy:
            m_xBoxAttrCopyWithParaRB->set_active(true);
            break;
        case SplitTable_HeadlineOption::BoxAttrCopy:
            m_xBoxAttrCopyNoParaRB->set_active(true);
            break;
        case SplitTable_HeadlineOption::BorderCopy:
            m_xBorderCopyRB->set_active(true);
            break;
        case SplitTable_HeadlineOption::NONE:
        case SplitTable_HeadlineOption::ContentCopy:
        default:
            // Use the default value in case of an invalid option
            m_nSplit = SplitTable_HeadlineOption::ContentCopy;
    }
}

void SwSplitTableDlg::Apply()
@@ -41,6 +63,9 @@ void SwSplitTableDlg::Apply()
    else if (m_xBorderCopyRB->get_active())
        m_nSplit = SplitTable_HeadlineOption::BorderCopy;

    // tdf#131759 - remember last used option in split table dialog
    m_eRememberedSplitOption = m_nSplit;

    m_rShell.SplitTable(m_nSplit);
}

diff --git a/sw/source/uibase/inc/splittbl.hxx b/sw/source/uibase/inc/splittbl.hxx
index 9eaef2a..c579eea 100644
--- a/sw/source/uibase/inc/splittbl.hxx
+++ b/sw/source/uibase/inc/splittbl.hxx
@@ -21,6 +21,7 @@

#include <vcl/weld.hxx>
#include <tblenum.hxx>
#include <unotools/viewoptions.hxx>

class SwWrtShell;

@@ -34,6 +35,9 @@ private:
    SwWrtShell& m_rShell;
    SplitTable_HeadlineOption m_nSplit;

    // tdf#131759 - remember last used option in split table dialog
    static SplitTable_HeadlineOption m_eRememberedSplitOption;

    void Apply();

public:
@@ -56,6 +60,10 @@ public:
            nSplit = SplitTable_HeadlineOption::BoxAttrCopy;
        else if (m_xBorderCopyRB->get_active())
            nSplit = SplitTable_HeadlineOption::BorderCopy;

        // tdf#131759 - remember last used option in split table dialog
        m_eRememberedSplitOption = nSplit;

        return nSplit;
    }
};