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;