tdf#148999 Add rescan button to PDF a11y check dialog

Change-Id: I772f529ea4bd225701b9864ad9156c573f41484c
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/142715
Tested-by: Jenkins
Reviewed-by: Samuel Mehrbrodt <samuel.mehrbrodt@allotropia.de>
diff --git a/filter/source/pdf/impdialog.cxx b/filter/source/pdf/impdialog.cxx
index eaa3385..2287dc8 100644
--- a/filter/source/pdf/impdialog.cxx
+++ b/filter/source/pdf/impdialog.cxx
@@ -318,7 +318,10 @@ IMPL_LINK_NOARG(ImpPDFTabDialog, OkHdl, weld::Button&, void)
            sfx::AccessibilityIssueCollection aCollection = pShell->runAccessibilityCheck();
            if (!aCollection.getIssues().empty())
            {
                mpAccessibilityCheckDialog = std::make_shared<svx::AccessibilityCheckDialog>(mpParent, aCollection);
                mpAccessibilityCheckDialog = std::make_shared<svx::AccessibilityCheckDialog>(
                    mpParent, aCollection, [pShell]() -> sfx::AccessibilityIssueCollection {
                        return pShell->runAccessibilityCheck();
                    });
                weld::DialogController::runAsync(mpAccessibilityCheckDialog, [this](sal_Int32 retValue){
                    m_xDialog->response(retValue);
                });
diff --git a/include/svx/AccessibilityCheckDialog.hxx b/include/svx/AccessibilityCheckDialog.hxx
index 53fcdaf..f2e3c56 100644
--- a/include/svx/AccessibilityCheckDialog.hxx
+++ b/include/svx/AccessibilityCheckDialog.hxx
@@ -41,14 +41,21 @@ class SVX_DLLPUBLIC AccessibilityCheckDialog final : public weld::GenericDialogC
{
private:
    sfx::AccessibilityIssueCollection m_aIssueCollection;
    std::function<sfx::AccessibilityIssueCollection()> m_getIssueCollection;
    std::vector<std::unique_ptr<AccessibilityCheckEntry>> m_aAccessibilityCheckEntries;

    // Controls
    std::unique_ptr<weld::Box> m_xAccessibilityCheckBox;
    std::unique_ptr<weld::Button> m_xRescanBtn;

    DECL_LINK(RescanButtonClicked, weld::Button&, void);

    void populateIssues();

public:
    AccessibilityCheckDialog(weld::Window* pParent,
                             sfx::AccessibilityIssueCollection rIssueCollection);
                             sfx::AccessibilityIssueCollection rIssueCollection,
                             std::function<sfx::AccessibilityIssueCollection()> getIssueCollection);
    virtual ~AccessibilityCheckDialog() override;
};

diff --git a/include/vcl/weld.hxx b/include/vcl/weld.hxx
index adbd35d..b024bc3 100644
--- a/include/vcl/weld.hxx
+++ b/include/vcl/weld.hxx
@@ -361,7 +361,8 @@ protected:
    void signal_container_focus_changed() { m_aContainerFocusChangedHdl.Call(*this); }

public:
    // remove and add in one go
    // remove from old container and add to new container in one go
    // new container can be null to just remove from old container
    virtual void move(weld::Widget* pWidget, weld::Container* pNewParent) = 0;
    // create an XWindow as a child of this container. The XWindow is
    // suitable to contain css::awt::XControl items
diff --git a/svx/source/dialog/AccessibilityCheckDialog.cxx b/svx/source/dialog/AccessibilityCheckDialog.cxx
index 136bafc..ac34f73 100644
--- a/svx/source/dialog/AccessibilityCheckDialog.cxx
+++ b/svx/source/dialog/AccessibilityCheckDialog.cxx
@@ -36,14 +36,25 @@ IMPL_LINK_NOARG(AccessibilityCheckEntry, GotoButtonClicked, weld::Button&, void)
}

AccessibilityCheckDialog::AccessibilityCheckDialog(
    weld::Window* pParent, sfx::AccessibilityIssueCollection aIssueCollection)
    weld::Window* pParent, sfx::AccessibilityIssueCollection aIssueCollection,
    std::function<sfx::AccessibilityIssueCollection()> getIssueCollection)
    : GenericDialogController(pParent, "svx/ui/accessibilitycheckdialog.ui",
                              "AccessibilityCheckDialog")
    , m_aIssueCollection(std::move(aIssueCollection))
    , m_getIssueCollection(getIssueCollection)
    , m_xAccessibilityCheckBox(m_xBuilder->weld_box("accessibilityCheckBox"))
    , m_xRescanBtn(m_xBuilder->weld_button("rescan"))
{
    m_xRescanBtn->connect_clicked(LINK(this, AccessibilityCheckDialog, RescanButtonClicked));

    populateIssues();
}

AccessibilityCheckDialog::~AccessibilityCheckDialog() {}

void AccessibilityCheckDialog::populateIssues()
{
    sal_Int32 i = 0;

    for (std::shared_ptr<sfx::AccessibilityIssue> const& pIssue : m_aIssueCollection.getIssues())
    {
        auto xEntry
@@ -53,7 +64,15 @@ AccessibilityCheckDialog::AccessibilityCheckDialog(
    }
}

AccessibilityCheckDialog::~AccessibilityCheckDialog() {}
IMPL_LINK_NOARG(AccessibilityCheckDialog, RescanButtonClicked, weld::Button&, void)
{
    // Remove old issue widgets
    for (auto const& xEntry : m_aAccessibilityCheckEntries)
        m_xAccessibilityCheckBox->move(xEntry->get_widget(), nullptr);

    m_aIssueCollection = m_getIssueCollection();
    populateIssues();
}

} // end svx namespace

diff --git a/svx/uiconfig/ui/accessibilitycheckdialog.ui b/svx/uiconfig/ui/accessibilitycheckdialog.ui
index b462061..fecab2f 100644
--- a/svx/uiconfig/ui/accessibilitycheckdialog.ui
+++ b/svx/uiconfig/ui/accessibilitycheckdialog.ui
@@ -23,6 +23,20 @@
            <property name="can-focus">False</property>
            <property name="layout-style">end</property>
            <child>
              <object class="GtkButton" id="rescan">
                <property name="label" translatable="yes" context="AccessibleCheckDialog|btn_rescan">Rescan</property>
                <property name="visible">True</property>
                <property name="can-focus">True</property>
                <property name="receives-default">True</property>
                <property name="use-underline">True</property>
              </object>
              <packing>
                <property name="expand">False</property>
                <property name="fill">True</property>
                <property name="position">0</property>
              </packing>
            </child>
            <child>
              <object class="GtkButton" id="ok">
                <property name="label" translatable="yes" context="stock">_OK</property>
                <property name="visible">True</property>
@@ -35,7 +49,7 @@
              <packing>
                <property name="expand">False</property>
                <property name="fill">True</property>
                <property name="position">0</property>
                <property name="position">1</property>
              </packing>
            </child>
            <child>
@@ -49,7 +63,7 @@
              <packing>
                <property name="expand">False</property>
                <property name="fill">True</property>
                <property name="position">1</property>
                <property name="position">2</property>
              </packing>
            </child>
            <child>
@@ -63,7 +77,7 @@
              <packing>
                <property name="expand">False</property>
                <property name="fill">True</property>
                <property name="position">2</property>
                <property name="position">3</property>
                <property name="secondary">True</property>
              </packing>
            </child>
diff --git a/sw/source/uibase/shells/basesh.cxx b/sw/source/uibase/shells/basesh.cxx
index 4a365d3..31f2c24 100644
--- a/sw/source/uibase/shells/basesh.cxx
+++ b/sw/source/uibase/shells/basesh.cxx
@@ -2798,7 +2798,14 @@ void SwBaseShell::ExecDlg(SfxRequest &rReq)
        {
            sw::AccessibilityCheck aCheck(rSh.GetDoc());
            aCheck.check();
            std::shared_ptr<svx::AccessibilityCheckDialog> aDialog = std::make_shared<svx::AccessibilityCheckDialog>(pMDI, aCheck.getIssueCollection());
            std::shared_ptr<svx::AccessibilityCheckDialog> aDialog
                = std::make_shared<svx::AccessibilityCheckDialog>(
                    pMDI, aCheck.getIssueCollection(),
                    [&rSh]() -> sfx::AccessibilityIssueCollection {
                        sw::AccessibilityCheck aA11yCheck(rSh.GetDoc());
                        aA11yCheck.check();
                        return aA11yCheck.getIssueCollection();
                    });
            weld::DialogController::runAsync(aDialog, [](int){});
        }
        break;