diff options
author | Samuel Mehrbrodt <samuel.mehrbrodt@allotropia.de> | 2022-11-14 16:23:30 +0100 |
---|---|---|
committer | Samuel Mehrbrodt <samuel.mehrbrodt@allotropia.de> | 2022-11-18 09:06:55 +0100 |
commit | 950bd818eb37e79c2276ce919f90d177255d5520 (patch) | |
tree | 70068c9d3f85e860e783a651a31aaa8ccbab37f8 | |
parent | 0cef06f0a2c0963e8c1579b78975710e6af4471c (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.cxx | 5 | ||||
-rw-r--r-- | include/svx/AccessibilityCheckDialog.hxx | 9 | ||||
-rw-r--r-- | include/vcl/weld.hxx | 3 | ||||
-rw-r--r-- | svx/source/dialog/AccessibilityCheckDialog.cxx | 25 | ||||
-rw-r--r-- | svx/uiconfig/ui/accessibilitycheckdialog.ui | 20 | ||||
-rw-r--r-- | sw/source/uibase/shells/basesh.cxx | 9 |
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; |