summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSamuel Mehrbrodt <samuel.mehrbrodt@allotropia.de>2022-11-14 16:23:30 +0100
committerSamuel Mehrbrodt <samuel.mehrbrodt@allotropia.de>2022-11-18 09:06:55 +0100
commit950bd818eb37e79c2276ce919f90d177255d5520 (patch)
tree70068c9d3f85e860e783a651a31aaa8ccbab37f8
parent0cef06f0a2c0963e8c1579b78975710e6af4471c (diff)
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>
-rw-r--r--filter/source/pdf/impdialog.cxx5
-rw-r--r--include/svx/AccessibilityCheckDialog.hxx9
-rw-r--r--include/vcl/weld.hxx3
-rw-r--r--svx/source/dialog/AccessibilityCheckDialog.cxx25
-rw-r--r--svx/uiconfig/ui/accessibilitycheckdialog.ui20
-rw-r--r--sw/source/uibase/shells/basesh.cxx9
6 files changed, 61 insertions, 10 deletions
diff --git a/filter/source/pdf/impdialog.cxx b/filter/source/pdf/impdialog.cxx
index eaa3385ab16f..2287dc8665dc 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 53fcdaf4a031..f2e3c567351b 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 adbd35d85df6..b024bc33c4af 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 136bafc265bf..ac34f7306da4 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"))
{
- sal_Int32 i = 0;
+ 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 b46206189eb7..fecab2fbb31f 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 4a365d33af11..31f2c247b545 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;