tdf#146970 use a textview to show the proposed replacement formula

so it can scroll and keep the text area to some finite size

no strings changes or new translations, so this is a backportable
change.

Change-Id: Ibc36812c6aa7fff8e035c06d0dad885909f057ff
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/128933
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
(cherry picked from commit 36121e87b7e2a2defbfe75dfdadb2dde4fff6b4f)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/128948
Reviewed-by: Eike Rathke <erack@redhat.com>
diff --git a/sc/UIConfig_scalc.mk b/sc/UIConfig_scalc.mk
index 336e171..bc320cc 100644
--- a/sc/UIConfig_scalc.mk
+++ b/sc/UIConfig_scalc.mk
@@ -259,6 +259,7 @@ $(eval $(call gb_UIConfig_add_uifiles,modules/scalc,\
	sc/uiconfig/scalc/ui/validationcriteriapage \
	sc/uiconfig/scalc/ui/validationhelptabpage \
	sc/uiconfig/scalc/ui/validationhelptabpage-mobile \
	sc/uiconfig/scalc/ui/warnautocorrect \
	sc/uiconfig/scalc/ui/xmlsourcedialog \
	sc/uiconfig/scalc/ui/zoombox \
	sc/uiconfig/scalc/ui/ztestdialog \
diff --git a/sc/source/ui/view/viewfunc.cxx b/sc/source/ui/view/viewfunc.cxx
index 247fded..ecaa0a2 100644
--- a/sc/source/ui/view/viewfunc.cxx
+++ b/sc/source/ui/view/viewfunc.cxx
@@ -337,6 +337,29 @@ namespace HelperNotifyChanges
    }
}

namespace
{
    class AutoCorrectQuery : public weld::MessageDialogController
    {
    private:
        std::unique_ptr<weld::TextView> m_xError;
    public:
        AutoCorrectQuery(weld::Window* pParent, const OUString& rFormula)
            : weld::MessageDialogController(pParent, "modules/scalc/ui/warnautocorrect.ui", "WarnAutoCorrect", "grid")
            , m_xError(m_xBuilder->weld_text_view("error"))
        {
            m_xDialog->set_primary_text(ScResId(SCSTR_FORMULA_AUTOCORRECTION).trim());
            m_xDialog->set_default_response(RET_YES);

            const int nMaxWidth = m_xError->get_approximate_digit_width() * 65;
            const int nMaxHeight = m_xError->get_height_rows(6);
            m_xError->set_size_request(nMaxWidth, nMaxHeight);

            m_xError->set_text(rFormula);
        }
    };
}

//      actual functions

//  input - undo OK
@@ -447,13 +470,8 @@ void ScViewFunc::EnterData( SCCOL nCol, SCROW nRow, SCTAB nTab,
                    nResult = RET_NO;   // empty formula, just '='
                else
                {
                    OUString aMessage = ScResId( SCSTR_FORMULA_AUTOCORRECTION ) + aCorrectedFormula;

                    std::unique_ptr<weld::MessageDialog> xQueryBox(Application::CreateMessageDialog(GetViewData().GetDialogParent(),
                                                                   VclMessageType::Question, VclButtonsType::YesNo,
                                                                   aMessage));
                    xQueryBox->set_default_response(RET_YES);
                    nResult = xQueryBox->run();
                    AutoCorrectQuery aQueryBox(GetViewData().GetDialogParent(), aCorrectedFormula);
                    nResult = aQueryBox.run();
                }
                if ( nResult == RET_YES )
                {
diff --git a/sc/uiconfig/scalc/ui/warnautocorrect.ui b/sc/uiconfig/scalc/ui/warnautocorrect.ui
new file mode 100644
index 0000000..632dbcc
--- /dev/null
+++ b/sc/uiconfig/scalc/ui/warnautocorrect.ui
@@ -0,0 +1,74 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.38.2 -->
<interface domain="sc">
  <requires lib="gtk+" version="3.20"/>
  <object class="GtkMessageDialog" id="WarnAutoCorrect">
    <property name="can-focus">False</property>
    <property name="border-width">6</property>
    <property name="type">popup</property>
    <property name="modal">True</property>
    <property name="type-hint">dialog</property>
    <property name="skip-taskbar-hint">True</property>
    <property name="message-type">question</property>
    <property name="buttons">yes-no</property>
    <child internal-child="vbox">
      <object class="GtkBox" id="messagedialog-vbox">
        <property name="can-focus">False</property>
        <property name="hexpand">True</property>
        <property name="vexpand">True</property>
        <property name="orientation">vertical</property>
        <property name="spacing">12</property>
        <child internal-child="action_area">
          <object class="GtkButtonBox" id="messagedialog-action_area">
            <property name="can-focus">False</property>
          </object>
          <packing>
            <property name="expand">False</property>
            <property name="fill">False</property>
            <property name="position">0</property>
          </packing>
        </child>
        <child>
          <!-- n-columns=1 n-rows=1 -->
          <object class="GtkGrid" id="grid">
            <property name="visible">True</property>
            <property name="can-focus">False</property>
            <property name="hexpand">True</property>
            <property name="vexpand">True</property>
            <child>
              <object class="GtkScrolledWindow">
                <property name="visible">True</property>
                <property name="can-focus">True</property>
                <property name="hexpand">True</property>
                <property name="vexpand">True</property>
                <property name="hscrollbar-policy">never</property>
                <property name="shadow-type">in</property>
                <child>
                  <object class="GtkTextView" id="error">
                    <property name="visible">True</property>
                    <property name="can-focus">True</property>
                    <property name="hexpand">True</property>
                    <property name="vexpand">True</property>
                    <property name="editable">False</property>
                    <property name="wrap-mode">char</property>
                    <property name="cursor-visible">False</property>
                    <property name="accepts-tab">False</property>
                  </object>
                </child>
              </object>
              <packing>
                <property name="left-attach">0</property>
                <property name="top-attach">0</property>
              </packing>
            </child>
          </object>
          <packing>
            <property name="expand">True</property>
            <property name="fill">True</property>
            <property name="position">2</property>
          </packing>
        </child>
      </object>
    </child>
  </object>
</interface>