filter/inc/strings.hrc | 4 filter/source/pdf/impdialog.cxx | 3 include/sfx2/AccessibilityIssue.hxx | 10 sfx2/source/accessibility/AccessibilityIssue.cxx | 4 static/CustomTarget_emscripten_fs_image.mk | 1 svx/UIConfig_svx.mk | 1 svx/uiconfig/ui/accessibilitychecklevel.ui | 322 +++++++++++++ sw/qa/core/accessibilitycheck/AccessibilityCheckTest.cxx | 17 sw/source/core/access/AccessibilityCheck.cxx | 114 +++- sw/source/core/access/AccessibilityIssue.cxx | 5 sw/source/core/inc/AccessibilityIssue.hxx | 2 sw/source/uibase/sidebar/A11yCheckIssuesPanel.cxx | 179 +++++-- sw/source/uibase/sidebar/A11yCheckIssuesPanel.hxx | 34 + sw/uiconfig/swriter/ui/a11ycheckissuespanel.ui | 370 ++------------- vcl/jsdialog/enabled.cxx | 1 15 files changed, 648 insertions(+), 419 deletions(-)
New commits: commit 13ac356a32f279a3fd542d62c12e58abe3d3ad30 Author: Balazs Varga <balazs.varga.ext...@allotropia.de> AuthorDate: Fri Nov 22 22:03:56 2024 +0100 Commit: Balazs Varga <balazs.varga.ext...@allotropia.de> CommitDate: Fri Nov 29 12:08:48 2024 +0100 tdf#164048 sw a11y: improve error/warning levels with adding two A11y issue level: Error and warning level, and categorizing our accesibility issues based on how the PAC 2024 tools and WCAG behave with the different warnings/errors. Change-Id: If4e4800497340318bb990326c64de655f24a47e8 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177389 Tested-by: Gabor Kelemen <gabor.kelemen.ext...@allotropia.de> Tested-by: Jenkins Reviewed-by: Balazs Varga <balazs.varga.ext...@allotropia.de> diff --git a/filter/inc/strings.hrc b/filter/inc/strings.hrc index 3fd833352194..ab52e67b5d9e 100644 --- a/filter/inc/strings.hrc +++ b/filter/inc/strings.hrc @@ -76,9 +76,9 @@ #define STR_WARN_TRANSP_CONVERTED_SHORT NC_("STR_WARN_TRANSP_CONVERTED_SHORT", "Transparencies removed") #define STR_ERR_SIGNATURE_FAILED NC_("STR_ERR_SIGNATURE_FAILED", "Signature generation failed") #define STR_ERR_PDF_EXPORT_ABORTED NC_("STR_ERR_PDF_EXPORT_ABORTED", "PDF export aborted") -#define STR_WARN_PDFUA_ISSUES NNC_("STR_WARN_PDFUA_ISSUES", "One accessibility issue detected. Do you want to continue?", "%1 accessibility issues detected. Do you want to continue?") +#define STR_WARN_PDFUA_ISSUES NNC_("STR_WARN_PDFUA_ISSUES", "One accessibility error detected. Do you want to continue?", "%1 accessibility errors detected. Do you want to continue?") #define STR_PDFUA_IGNORE NC_("STR_PDFUA_IGNORE", "Continue") -#define STR_PDFUA_INVESTIGATE NNC_("STR_PDFUA_INVESTIGATE", "Investigate issue", "Investigate issues") +#define STR_PDFUA_INVESTIGATE NNC_("STR_PDFUA_INVESTIGATE", "Investigate error", "Investigate errors") // Progress bar status indicator when importing or exporting #define STR_FILTER_DOC_LOADING NC_("STR_FILTER_DOC_LOADING", "Loading: ") diff --git a/filter/source/pdf/impdialog.cxx b/filter/source/pdf/impdialog.cxx index fb9bab206a81..482d523bed63 100644 --- a/filter/source/pdf/impdialog.cxx +++ b/filter/source/pdf/impdialog.cxx @@ -279,7 +279,8 @@ IMPL_LINK_NOARG(ImpPDFTabDialog, OkHdl, weld::Button&, void) const int nIssueCount = std::count_if(aIssues.begin(), aIssues.end(), [](const std::shared_ptr<sfx::AccessibilityIssue >& pIssues) { - return !pIssues->getHidden(); + return !pIssues->getHidden() && + pIssues->m_eIssueLvl == sfx::AccessibilityIssueLevel::ERRORLEV; }); if (nIssueCount) diff --git a/include/sfx2/AccessibilityIssue.hxx b/include/sfx2/AccessibilityIssue.hxx index 1aae578822f4..abb7a1318f05 100644 --- a/include/sfx2/AccessibilityIssue.hxx +++ b/include/sfx2/AccessibilityIssue.hxx @@ -54,10 +54,17 @@ enum class AccessibilityIssueID FONTWORKS, }; +enum class AccessibilityIssueLevel : size_t +{ + ERRORLEV = 0, + WARNLEV = 1, + LAST = WARNLEV +}; + class SFX2_DLLPUBLIC AccessibilityIssue { public: - AccessibilityIssue(AccessibilityIssueID eIssueID); + AccessibilityIssue(AccessibilityIssueID eIssueID, AccessibilityIssueLevel eIssueLvl); AccessibilityIssue(AccessibilityIssue const&) = default; virtual ~AccessibilityIssue(); @@ -75,6 +82,7 @@ public: AccessibilityIssue& operator=(const AccessibilityIssue&) = default; AccessibilityIssueID m_eIssueID; + AccessibilityIssueLevel m_eIssueLvl; OUString m_aIssueText; bool m_bHidden; diff --git a/sfx2/source/accessibility/AccessibilityIssue.cxx b/sfx2/source/accessibility/AccessibilityIssue.cxx index 44ff3adb1e8f..54124dc21275 100644 --- a/sfx2/source/accessibility/AccessibilityIssue.cxx +++ b/sfx2/source/accessibility/AccessibilityIssue.cxx @@ -12,8 +12,10 @@ namespace sfx { -AccessibilityIssue::AccessibilityIssue(AccessibilityIssueID eIssueID) +AccessibilityIssue::AccessibilityIssue(AccessibilityIssueID eIssueID, + AccessibilityIssueLevel eIssueLvl) : m_eIssueID(eIssueID) + , m_eIssueLvl(eIssueLvl) , m_bHidden(false) , m_pParent(nullptr) { diff --git a/static/CustomTarget_emscripten_fs_image.mk b/static/CustomTarget_emscripten_fs_image.mk index b83676900859..7e40f7eb1aae 100644 --- a/static/CustomTarget_emscripten_fs_image.mk +++ b/static/CustomTarget_emscripten_fs_image.mk @@ -1199,6 +1199,7 @@ gb_emscripten_fs_image_files += \ $(INSTROOT)/$(LIBO_SHARE_FOLDER)/config/soffice.cfg/svx/ui/absrecbox.ui \ $(INSTROOT)/$(LIBO_SHARE_FOLDER)/config/soffice.cfg/svx/ui/acceptrejectchangesdialog.ui \ $(INSTROOT)/$(LIBO_SHARE_FOLDER)/config/soffice.cfg/svx/ui/accessibilitycheckentry.ui \ + $(INSTROOT)/$(LIBO_SHARE_FOLDER)/config/soffice.cfg/svx/ui/accessibilitychecklevel.ui \ $(INSTROOT)/$(LIBO_SHARE_FOLDER)/config/soffice.cfg/svx/ui/addconditiondialog.ui \ $(INSTROOT)/$(LIBO_SHARE_FOLDER)/config/soffice.cfg/svx/ui/adddataitemdialog.ui \ $(INSTROOT)/$(LIBO_SHARE_FOLDER)/config/soffice.cfg/svx/ui/addinstancedialog.ui \ diff --git a/svx/UIConfig_svx.mk b/svx/UIConfig_svx.mk index fdbf7027ab35..7268f7f526a5 100644 --- a/svx/UIConfig_svx.mk +++ b/svx/UIConfig_svx.mk @@ -13,6 +13,7 @@ $(eval $(call gb_UIConfig_add_uifiles,svx,\ svx/uiconfig/ui/absrecbox \ svx/uiconfig/ui/acceptrejectchangesdialog \ svx/uiconfig/ui/accessibilitycheckentry \ + svx/uiconfig/ui/accessibilitychecklevel \ svx/uiconfig/ui/addconditiondialog \ svx/uiconfig/ui/adddataitemdialog \ svx/uiconfig/ui/addinstancedialog \ diff --git a/svx/uiconfig/ui/accessibilitychecklevel.ui b/svx/uiconfig/ui/accessibilitychecklevel.ui new file mode 100644 index 000000000000..20a277a8b448 --- /dev/null +++ b/svx/uiconfig/ui/accessibilitychecklevel.ui @@ -0,0 +1,322 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- Generated with glade 3.38.2 --> +<interface domain="svx"> + <requires lib="gtk+" version="3.20"/> + <object class="GtkBox" id="accessibilityCheckLevelBox"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="orientation">vertical</property> + <property name="spacing">6</property> + <property name="baseline-position">top</property> + <child> + <object class="GtkExpander" id="expand_document"> + <property name="can-focus">True</property> + <child> + <object class="GtkBox" id="box_document"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="margin-start">6</property> + <property name="orientation">vertical</property> + <child> + <placeholder/> + </child> + </object> + </child> + <child type="label"> + <object class="GtkLabel" id="expand_document_lb"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="label" translatable="yes" context="accessibilitychecklevel|expand_document_lb">Document</property> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkExpander" id="expand_styles"> + <property name="can-focus">True</property> + <child> + <object class="GtkBox" id="box_styles"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="margin-start">6</property> + <property name="orientation">vertical</property> + <child> + <placeholder/> + </child> + </object> + </child> + <child type="label"> + <object class="GtkLabel" id="expand_styles_lb"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="label" translatable="yes" context="accessibilitychecklevel|expand_styles_lb">Styles</property> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkExpander" id="expand_linked"> + <property name="can-focus">True</property> + <child> + <object class="GtkBox" id="box_linked"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="margin-start">6</property> + <property name="hexpand">True</property> + <property name="orientation">vertical</property> + <child> + <placeholder/> + </child> + </object> + </child> + <child type="label"> + <object class="GtkLabel" id="expand_linked_lb"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="label" translatable="yes" context="accessibilitychecklevel|expand_linked_lb">Missing linked graphic</property> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">2</property> + </packing> + </child> + <child> + <object class="GtkExpander" id="expand_no_alt"> + <property name="can-focus">True</property> + <child> + <object class="GtkBox" id="box_no_alt"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="margin-start">6</property> + <property name="hexpand">True</property> + <property name="orientation">vertical</property> + <child> + <placeholder/> + </child> + </object> + </child> + <child type="label"> + <object class="GtkLabel" id="expand_no_alt_lb"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="label" translatable="yes" context="accessibilitychecklevel|expand_no_alt_lb">Missing alternative or description text</property> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">3</property> + </packing> + </child> + <child> + <object class="GtkExpander" id="expand_table"> + <property name="can-focus">True</property> + <child> + <object class="GtkBox" id="box_table"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="margin-start">6</property> + <property name="orientation">vertical</property> + <child> + <placeholder/> + </child> + </object> + </child> + <child type="label"> + <object class="GtkLabel" id="expand_table_lb"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="label" translatable="yes" context="accessibilitychecklevel|expand_table_lb">Table</property> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">4</property> + </packing> + </child> + <child> + <object class="GtkExpander" id="expand_formatting"> + <property name="can-focus">True</property> + <child> + <object class="GtkBox" id="box_formatting"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="margin-start">6</property> + <property name="orientation">vertical</property> + <child> + <object class="GtkExpander" id="expand_direct_formatting"> + <property name="can-focus">True</property> + <child> + <object class="GtkBox" id="box_direct_formatting"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="margin-start">6</property> + <property name="orientation">vertical</property> + <child> + <placeholder/> + </child> + </object> + </child> + <child type="label"> + <object class="GtkLabel" id="expand_direct_formatting_lb"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="label" context="accessibilitychecklevel|expand_direct_formatting_lb">Direct Formatting</property> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <placeholder/> + </child> + </object> + </child> + <child type="label"> + <object class="GtkLabel" id="expand_formatting_lb"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="label" translatable="yes" context="accessibilitychecklevel|expand_formatting_lb">Formatting</property> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">5</property> + </packing> + </child> + <child> + <object class="GtkExpander" id="expand_hyperlink"> + <property name="can-focus">True</property> + <child> + <object class="GtkBox" id="box_hyperlink"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="margin-start">6</property> + <property name="orientation">vertical</property> + <child> + <placeholder/> + </child> + </object> + </child> + <child type="label"> + <object class="GtkLabel" id="expand_hyperlink_lb"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="label" translatable="yes" context="accessibilitychecklevel|expand_hyperlink_lb">Hyperlink</property> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">7</property> + </packing> + </child> + <child> + <object class="GtkExpander" id="expand_fakes"> + <property name="can-focus">True</property> + <child> + <object class="GtkBox" id="box_fakes"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="margin-start">6</property> + <property name="orientation">vertical</property> + <child> + <placeholder/> + </child> + </object> + </child> + <child type="label"> + <object class="GtkLabel" id="expand_fakes_lb"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="label" translatable="yes" context="accessibilitychecklevel|expand_fakes_lb">Simulated captions</property> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">8</property> + </packing> + </child> + <child> + <object class="GtkExpander" id="expand_numbering"> + <property name="can-focus">True</property> + <child> + <object class="GtkBox" id="box_numbering"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="margin-start">6</property> + <property name="orientation">vertical</property> + <child> + <placeholder/> + </child> + </object> + </child> + <child type="label"> + <object class="GtkLabel" id="expand_numbering_lb"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="label" translatable="yes" context="accessibilitychecklevel|expand_numbering_lb">Numbering</property> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">9</property> + </packing> + </child> + <child> + <object class="GtkExpander" id="expand_other"> + <property name="can-focus">True</property> + <child> + <object class="GtkBox" id="box_other"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="margin-start">6</property> + <property name="orientation">vertical</property> + <child> + <placeholder/> + </child> + </object> + </child> + <child type="label"> + <object class="GtkLabel" id="expand_other_lb"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="label" context="accessibilitychecklevel|expand_other_lb">Other</property> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">10</property> + </packing> + </child> + </object> +</interface> diff --git a/sw/qa/core/accessibilitycheck/AccessibilityCheckTest.cxx b/sw/qa/core/accessibilitycheck/AccessibilityCheckTest.cxx index 91295c1ce819..6bdba45e753c 100644 --- a/sw/qa/core/accessibilitycheck/AccessibilityCheckTest.cxx +++ b/sw/qa/core/accessibilitycheck/AccessibilityCheckTest.cxx @@ -36,6 +36,7 @@ CPPUNIT_TEST_FIXTURE(AccessibilityCheckTest, testCheckDocumentIssues) auto& aIssues = aCheck.getIssueCollection().getIssues(); CPPUNIT_ASSERT_EQUAL(size_t(2), aIssues.size()); CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::DOCUMENT_LANGUAGE, aIssues[0]->m_eIssueID); + CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueLevel::WARNLEV, aIssues[0]->m_eIssueLvl); CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::DOCUMENT_TITLE, aIssues[1]->m_eIssueID); } @@ -49,11 +50,14 @@ CPPUNIT_TEST_FIXTURE(AccessibilityCheckTest, testTableSplitMergeAndAltText) CPPUNIT_ASSERT_EQUAL(size_t(6), aIssues.size()); CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::NO_ALT_GRAPHIC, aIssues[0]->m_eIssueID); + CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueLevel::ERRORLEV, aIssues[0]->m_eIssueLvl); CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::TABLE_MERGE_SPLIT, aIssues[1]->m_eIssueID); CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::TABLE_MERGE_SPLIT, aIssues[2]->m_eIssueID); CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::TABLE_MERGE_SPLIT, aIssues[3]->m_eIssueID); CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::TABLE_MERGE_SPLIT, aIssues[4]->m_eIssueID); + CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueLevel::WARNLEV, aIssues[4]->m_eIssueLvl); CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::NO_ALT_SHAPE, aIssues[5]->m_eIssueID); + CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueLevel::ERRORLEV, aIssues[5]->m_eIssueLvl); } CPPUNIT_TEST_FIXTURE(AccessibilityCheckTest, testCheckParagraphIssues) @@ -78,6 +82,7 @@ CPPUNIT_TEST_FIXTURE(AccessibilityCheckTest, testCheckBackgroundImage) auto& aIssues = aCheck.getIssueCollection().getIssues(); CPPUNIT_ASSERT_EQUAL(size_t(1), aIssues.size()); CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::DOCUMENT_BACKGROUND, aIssues[0]->m_eIssueID); + CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueLevel::WARNLEV, aIssues[0]->m_eIssueLvl); } CPPUNIT_TEST_FIXTURE(AccessibilityCheckTest, testCheckLinkedImage) @@ -89,6 +94,7 @@ CPPUNIT_TEST_FIXTURE(AccessibilityCheckTest, testCheckLinkedImage) auto& aIssues = aCheck.getIssueCollection().getIssues(); CPPUNIT_ASSERT_EQUAL(size_t(4), aIssues.size()); CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::LINKED_GRAPHIC, aIssues[1]->m_eIssueID); + CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueLevel::WARNLEV, aIssues[1]->m_eIssueLvl); } CPPUNIT_TEST_FIXTURE(AccessibilityCheckTest, testCheckNewlineSpace) @@ -103,6 +109,7 @@ CPPUNIT_TEST_FIXTURE(AccessibilityCheckTest, testCheckNewlineSpace) CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::TEXT_FORMATTING, aIssues[1]->m_eIssueID); CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::DIRECT_FORMATTING, aIssues[2]->m_eIssueID); CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::TEXT_FORMATTING, aIssues[3]->m_eIssueID); + CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueLevel::WARNLEV, aIssues[3]->m_eIssueLvl); } CPPUNIT_TEST_FIXTURE(AccessibilityCheckTest, testCheckSpacebarSpace) @@ -127,9 +134,12 @@ CPPUNIT_TEST_FIXTURE(AccessibilityCheckTest, testHyperlinks) auto& aIssues = aCheck.getIssueCollection().getIssues(); CPPUNIT_ASSERT_EQUAL(size_t(5), aIssues.size()); CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::HYPERLINK_SHORT, aIssues[0]->m_eIssueID); + CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueLevel::WARNLEV, aIssues[0]->m_eIssueLvl); CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::HYPERLINK_NO_NAME, aIssues[1]->m_eIssueID); CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::HYPERLINK_IS_TEXT, aIssues[2]->m_eIssueID); + CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueLevel::WARNLEV, aIssues[2]->m_eIssueLvl); CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::HYPERLINK_NO_NAME, aIssues[3]->m_eIssueID); + CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueLevel::WARNLEV, aIssues[3]->m_eIssueLvl); CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::DIRECT_FORMATTING, aIssues[4]->m_eIssueID); } @@ -159,6 +169,7 @@ CPPUNIT_TEST_FIXTURE(AccessibilityCheckTest, testNumberingCheck) CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::MANUAL_NUMBERING, aIssues[2]->m_eIssueID); CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::MANUAL_NUMBERING, aIssues[3]->m_eIssueID); CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::MANUAL_NUMBERING, aIssues[4]->m_eIssueID); + CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueLevel::WARNLEV, aIssues[4]->m_eIssueLvl); } CPPUNIT_TEST_FIXTURE(AccessibilityCheckTest, testCheckFakeFootnote) @@ -171,10 +182,13 @@ CPPUNIT_TEST_FIXTURE(AccessibilityCheckTest, testCheckFakeFootnote) CPPUNIT_ASSERT_EQUAL(size_t(6), aIssues.size()); CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::DIRECT_FORMATTING, aIssues[0]->m_eIssueID); CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::FAKE_FOOTNOTE, aIssues[1]->m_eIssueID); + CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueLevel::WARNLEV, aIssues[1]->m_eIssueLvl); CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::DIRECT_FORMATTING, aIssues[2]->m_eIssueID); CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::FAKE_FOOTNOTE, aIssues[3]->m_eIssueID); + CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueLevel::WARNLEV, aIssues[3]->m_eIssueLvl); CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::DIRECT_FORMATTING, aIssues[4]->m_eIssueID); CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::DIRECT_FORMATTING, aIssues[5]->m_eIssueID); + CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueLevel::WARNLEV, aIssues[5]->m_eIssueLvl); } CPPUNIT_TEST_FIXTURE(AccessibilityCheckTest, testCheckFakeCaption) @@ -186,6 +200,7 @@ CPPUNIT_TEST_FIXTURE(AccessibilityCheckTest, testCheckFakeCaption) auto& aIssues = aCheck.getIssueCollection().getIssues(); CPPUNIT_ASSERT_EQUAL(size_t(1), aIssues.size()); CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::FAKE_CAPTION, aIssues[0]->m_eIssueID); + CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueLevel::WARNLEV, aIssues[0]->m_eIssueLvl); } CPPUNIT_TEST_FIXTURE(AccessibilityCheckTest, testCheckTableFormatting) @@ -197,6 +212,7 @@ CPPUNIT_TEST_FIXTURE(AccessibilityCheckTest, testCheckTableFormatting) auto& aIssues = aCheck.getIssueCollection().getIssues(); CPPUNIT_ASSERT_EQUAL(size_t(1), aIssues.size()); CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::TABLE_FORMATTING, aIssues[0]->m_eIssueID); + CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueLevel::WARNLEV, aIssues[0]->m_eIssueLvl); } CPPUNIT_TEST_FIXTURE(AccessibilityCheckTest, testCheckTabsFormatting) @@ -244,6 +260,7 @@ CPPUNIT_TEST_FIXTURE(AccessibilityCheckTest, testDeleteHeader) aCheck.check(); CPPUNIT_ASSERT_EQUAL(size_t(8), aIssues.size()); CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::DOCUMENT_TITLE, aIssues[0]->m_eIssueID); + CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueLevel::ERRORLEV, aIssues[0]->m_eIssueLvl); CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::TEXT_FORMATTING, aIssues[1]->m_eIssueID); CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::TEXT_FORMATTING, aIssues[2]->m_eIssueID); CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::TEXT_FORMATTING, aIssues[3]->m_eIssueID); diff --git a/sw/source/core/access/AccessibilityCheck.cxx b/sw/source/core/access/AccessibilityCheck.cxx index bf54b7a3ea4d..39a4999f1965 100644 --- a/sw/source/core/access/AccessibilityCheck.cxx +++ b/sw/source/core/access/AccessibilityCheck.cxx @@ -271,9 +271,9 @@ void lcl_SetHiddenIssues(std::shared_ptr<sw::AccessibilityIssue>& pIssue) std::shared_ptr<sw::AccessibilityIssue> lclAddIssue(sfx::AccessibilityIssueCollection& rIssueCollection, OUString const& rText, - sfx::AccessibilityIssueID eIssue) + sfx::AccessibilityIssueID eIssueId, sfx::AccessibilityIssueLevel eIssueLvl) { - auto pIssue = std::make_shared<sw::AccessibilityIssue>(eIssue); + auto pIssue = std::make_shared<sw::AccessibilityIssue>(eIssueId, eIssueLvl); pIssue->m_aIssueText = rText; // check which a11y issue should be visible @@ -330,7 +330,8 @@ class NoTextNodeAltTextCheck : public NodeCheck .replaceFirst("%LINK%", sURL); auto pIssue = lclAddIssue(m_rIssueCollection, sIssueText, - sfx::AccessibilityIssueID::LINKED_GRAPHIC); + sfx::AccessibilityIssueID::LINKED_GRAPHIC, + sfx::AccessibilityIssueLevel::WARNLEV); pIssue->setDoc(pNoTextNode->GetDoc()); pIssue->setIssueObject(IssueObject::LINKED); pIssue->setObjectID(pFrameFormat->GetName()); @@ -347,8 +348,9 @@ class NoTextNodeAltTextCheck : public NodeCheck if (pNoTextNode->IsOLENode()) { - auto pIssue = lclAddIssue(m_rIssueCollection, sIssueText, - sfx::AccessibilityIssueID::NO_ALT_OLE); + auto pIssue + = lclAddIssue(m_rIssueCollection, sIssueText, sfx::AccessibilityIssueID::NO_ALT_OLE, + sfx::AccessibilityIssueLevel::ERRORLEV); pIssue->setDoc(pNoTextNode->GetDoc()); pIssue->setIssueObject(IssueObject::OLE); pIssue->setObjectID(pFrameFormat->GetName()); @@ -359,7 +361,8 @@ class NoTextNodeAltTextCheck : public NodeCheck if (!(pIsDecorItem && pIsDecorItem->GetValue())) { auto pIssue = lclAddIssue(m_rIssueCollection, sIssueText, - sfx::AccessibilityIssueID::NO_ALT_GRAPHIC); + sfx::AccessibilityIssueID::NO_ALT_GRAPHIC, + sfx::AccessibilityIssueLevel::ERRORLEV); pIssue->setDoc(pNoTextNode->GetDoc()); pIssue->setIssueObject(IssueObject::GRAPHIC); pIssue->setObjectID(pFrameFormat->GetName()); @@ -395,7 +398,8 @@ private: OUString sName = pFormat->GetName(); OUString sIssueText = SwResId(STR_TABLE_MERGE_SPLIT).replaceAll("%OBJECT_NAME%", sName); auto pIssue = lclAddIssue(m_rIssueCollection, sIssueText, - sfx::AccessibilityIssueID::TABLE_MERGE_SPLIT); + sfx::AccessibilityIssueID::TABLE_MERGE_SPLIT, + sfx::AccessibilityIssueLevel::WARNLEV); pIssue->setDoc(rDoc); pIssue->setIssueObject(IssueObject::TABLE); pIssue->setObjectID(sName); @@ -493,7 +497,8 @@ private: if (nEmptyBoxes > nBoxCount / 2) { auto pIssue = lclAddIssue(m_rIssueCollection, SwResId(STR_TABLE_FORMATTING), - sfx::AccessibilityIssueID::TABLE_FORMATTING); + sfx::AccessibilityIssueID::TABLE_FORMATTING, + sfx::AccessibilityIssueLevel::WARNLEV); pIssue->setDoc(pTableNode->GetDoc()); pIssue->setIssueObject(IssueObject::TABLE); @@ -558,7 +563,8 @@ public: OUString sIssueText = SwResId(STR_FAKE_NUMBERING).replaceAll("%NUMBERING%", sNumbering); auto pIssue = lclAddIssue(m_rIssueCollection, sIssueText, - sfx::AccessibilityIssueID::MANUAL_NUMBERING); + sfx::AccessibilityIssueID::MANUAL_NUMBERING, + sfx::AccessibilityIssueLevel::WARNLEV); pIssue->setIssueObject(IssueObject::TEXT); pIssue->setDoc(pCurrent->GetDoc()); pIssue->setNode(pCurrent); @@ -593,13 +599,15 @@ private: OUString sIssueText = SwResId(STR_HYPERLINK_TEXT_IS_LINK) .replaceFirst("%LINK%", sHyperlink); pIssue = lclAddIssue(m_rIssueCollection, sIssueText, - sfx::AccessibilityIssueID::HYPERLINK_IS_TEXT); + sfx::AccessibilityIssueID::HYPERLINK_IS_TEXT, + sfx::AccessibilityIssueLevel::WARNLEV); } else if (sRunText.getLength() <= 5) { pIssue = lclAddIssue(m_rIssueCollection, SwResId(STR_HYPERLINK_TEXT_IS_SHORT), - sfx::AccessibilityIssueID::HYPERLINK_SHORT); + sfx::AccessibilityIssueID::HYPERLINK_SHORT, + sfx::AccessibilityIssueLevel::WARNLEV); } if (pIssue) @@ -619,7 +627,8 @@ private: { std::shared_ptr<sw::AccessibilityIssue> pNameIssue = lclAddIssue(m_rIssueCollection, SwResId(STR_HYPERLINK_NO_NAME), - sfx::AccessibilityIssueID::HYPERLINK_NO_NAME); + sfx::AccessibilityIssueID::HYPERLINK_NO_NAME, + sfx::AccessibilityIssueLevel::WARNLEV); if (pNameIssue) { @@ -785,7 +794,8 @@ private: { auto pIssue = lclAddIssue(m_rIssueCollection, SwResId(STR_TEXT_FORMATTING_CONVEYS_MEANING), - sfx::AccessibilityIssueID::DIRECT_FORMATTING); + sfx::AccessibilityIssueID::DIRECT_FORMATTING, + sfx::AccessibilityIssueLevel::WARNLEV); pIssue->setIssueObject(IssueObject::TEXT); pIssue->setNode(pTextNode); SwDoc& rDocument = pTextNode->GetDoc(); @@ -811,7 +821,8 @@ private: if (fContrastRatio < 4.5) { auto pIssue = lclAddIssue(m_rIssueCollection, SwResId(STR_TEXT_CONTRAST), - sfx::AccessibilityIssueID::TEXT_CONTRAST); + sfx::AccessibilityIssueID::TEXT_CONTRAST, + sfx::AccessibilityIssueLevel::WARNLEV); pIssue->setIssueObject(IssueObject::TEXT); pIssue->setNode(pTextNode); pIssue->setDoc(pTextNode->GetDoc()); @@ -1257,7 +1268,8 @@ public: o3tl::remove_duplicates(aFormattings); auto pIssue = lclAddIssue(m_rIssueCollection, SwResId(STR_TEXT_FORMATTING_CONVEYS_MEANING), - sfx::AccessibilityIssueID::DIRECT_FORMATTING); + sfx::AccessibilityIssueID::DIRECT_FORMATTING, + sfx::AccessibilityIssueLevel::WARNLEV); pIssue->setIssueObject(IssueObject::TEXT); pIssue->setNode(pTextNode); SwDoc& rDocument = pTextNode->GetDoc(); @@ -1597,7 +1609,8 @@ public: { auto pIssue = lclAddIssue(m_rIssueCollection, SwResId(STR_TEXT_FORMATTING_CONVEYS_MEANING), - sfx::AccessibilityIssueID::DIRECT_FORMATTING); + sfx::AccessibilityIssueID::DIRECT_FORMATTING, + sfx::AccessibilityIssueLevel::WARNLEV); pIssue->setIssueObject(IssueObject::TEXT); pIssue->setNode(pTextNode); SwDoc& rDocument = pTextNode->GetDoc(); @@ -1616,7 +1629,8 @@ public: { auto pIssue = lclAddIssue(m_rIssueCollection, SwResId(STR_TEXT_FORMATTING_CONVEYS_MEANING), - sfx::AccessibilityIssueID::DIRECT_FORMATTING); + sfx::AccessibilityIssueID::DIRECT_FORMATTING, + sfx::AccessibilityIssueLevel::WARNLEV); pIssue->setIssueObject(IssueObject::TEXT); pIssue->setNode(pTextNode); SwDoc& rDocument = pTextNode->GetDoc(); @@ -1685,7 +1699,8 @@ public: if (pPrevTextNode->GetText().getLength() == 0) { auto pIssue = lclAddIssue(m_rIssueCollection, SwResId(STR_AVOID_NEWLINES_SPACE), - sfx::AccessibilityIssueID::TEXT_FORMATTING); + sfx::AccessibilityIssueID::TEXT_FORMATTING, + sfx::AccessibilityIssueLevel::WARNLEV); pIssue->setIssueObject(IssueObject::TEXT); pIssue->setNode(pTextNode); pIssue->setDoc(rDocument); @@ -1711,7 +1726,8 @@ public: { auto pIssue = lclAddIssue(m_rIssueCollection, SwResId(STR_AVOID_NEWLINES_SPACE), - sfx::AccessibilityIssueID::TEXT_FORMATTING); + sfx::AccessibilityIssueID::TEXT_FORMATTING, + sfx::AccessibilityIssueLevel::WARNLEV); pIssue->setIssueObject(IssueObject::TEXT); pIssue->setNode(pTextNode); pIssue->setDoc(rDocument); @@ -1784,7 +1800,8 @@ public: { auto pIssue = lclAddIssue(m_rIssueCollection, SwResId(STR_AVOID_TABS_FORMATTING), - sfx::AccessibilityIssueID::TEXT_FORMATTING); + sfx::AccessibilityIssueID::TEXT_FORMATTING, + sfx::AccessibilityIssueLevel::WARNLEV); pIssue->setIssueObject(IssueObject::TEXT); pIssue->setNode(pTextNode); SwDoc& rDocument = pTextNode->GetDoc(); @@ -1801,7 +1818,8 @@ public: { auto pIssue = lclAddIssue(m_rIssueCollection, SwResId(STR_AVOID_SPACES_SPACE), - sfx::AccessibilityIssueID::TEXT_FORMATTING); + sfx::AccessibilityIssueID::TEXT_FORMATTING, + sfx::AccessibilityIssueLevel::WARNLEV); pIssue->setIssueObject(IssueObject::TEXT); pIssue->setNode(pTextNode); SwDoc& rDocument = pTextNode->GetDoc(); @@ -1837,7 +1855,8 @@ private: && pTextAttr->GetStart() == 0 && pTextAttr->GetAnyEnd() == 1) { auto pIssue = lclAddIssue(m_rIssueCollection, SwResId(STR_AVOID_FAKE_FOOTNOTES), - sfx::AccessibilityIssueID::FAKE_FOOTNOTE); + sfx::AccessibilityIssueID::FAKE_FOOTNOTE, + sfx::AccessibilityIssueLevel::WARNLEV); pIssue->setIssueObject(IssueObject::TEXT); pIssue->setNode(pTextNode); SwDoc& rDocument = pTextNode->GetDoc(); @@ -1867,7 +1886,8 @@ public: if (pTextNode->GetText()[0] == '*') { auto pIssue = lclAddIssue(m_rIssueCollection, SwResId(STR_AVOID_FAKE_FOOTNOTES), - sfx::AccessibilityIssueID::FAKE_FOOTNOTE); + sfx::AccessibilityIssueID::FAKE_FOOTNOTE, + sfx::AccessibilityIssueLevel::WARNLEV); pIssue->setIssueObject(IssueObject::TEXT); pIssue->setNode(pTextNode); SwDoc& rDocument = pTextNode->GetDoc(); @@ -1941,7 +1961,8 @@ public: || sText.startsWith(SwResId(STR_POOLCOLL_LABEL_FIGURE))) { auto pIssue = lclAddIssue(m_rIssueCollection, SwResId(STR_AVOID_FAKE_CAPTIONS), - sfx::AccessibilityIssueID::FAKE_CAPTION); + sfx::AccessibilityIssueID::FAKE_CAPTION, + sfx::AccessibilityIssueLevel::WARNLEV); pIssue->setIssueObject(IssueObject::TEXT); pIssue->setNode(pTextNode); SwDoc& rDocument = pTextNode->GetDoc(); @@ -1969,7 +1990,8 @@ private: if (bBlinking) { auto pIssue = lclAddIssue(m_rIssueCollection, SwResId(STR_TEXT_BLINKING), - sfx::AccessibilityIssueID::TEXT_BLINKING); + sfx::AccessibilityIssueID::TEXT_BLINKING, + sfx::AccessibilityIssueLevel::WARNLEV); pIssue->setIssueObject(IssueObject::TEXT); pIssue->setNode(pTextNode); pIssue->setDoc(pTextNode->GetDoc()); @@ -2037,7 +2059,8 @@ public: if (nLevel > m_nPreviousLevel && std::abs(nLevel - m_nPreviousLevel) > 1) { auto pIssue = lclAddIssue(m_rIssueCollection, SwResId(STR_HEADINGS_NOT_IN_ORDER), - sfx::AccessibilityIssueID::HEADINGS_NOT_IN_ORDER); + sfx::AccessibilityIssueID::HEADINGS_NOT_IN_ORDER, + sfx::AccessibilityIssueLevel::ERRORLEV); pIssue->setIssueObject(IssueObject::TEXT); pIssue->setDoc(pCurrent->GetDoc()); pIssue->setNode(pCurrent); @@ -2083,7 +2106,8 @@ public: { sal_Int32 nStart = 0; auto pIssue = lclAddIssue(m_rIssueCollection, SwResId(STR_NON_INTERACTIVE_FORMS), - sfx::AccessibilityIssueID::NON_INTERACTIVE_FORMS); + sfx::AccessibilityIssueID::NON_INTERACTIVE_FORMS, + sfx::AccessibilityIssueLevel::WARNLEV); pIssue->setIssueObject(IssueObject::TEXT); pIssue->setNode(pTextNode); pIssue->setDoc(pTextNode->GetDoc()); @@ -2131,7 +2155,8 @@ public: if (aIdx == aCurrentIdx) { auto pIssue = lclAddIssue(m_rIssueCollection, SwResId(STR_FLOATING_TEXT), - sfx::AccessibilityIssueID::FLOATING_TEXT); + sfx::AccessibilityIssueID::FLOATING_TEXT, + sfx::AccessibilityIssueLevel::WARNLEV); pIssue->setIssueObject(IssueObject::TEXTFRAME); pIssue->setObjectID(pFormat->GetName()); pIssue->setDoc(pCurrent->GetDoc()); @@ -2175,7 +2200,8 @@ public: { m_bPrevPassed = false; auto pIssue = lclAddIssue(m_rIssueCollection, SwResId(STR_HEADING_IN_TABLE), - sfx::AccessibilityIssueID::HEADING_IN_TABLE); + sfx::AccessibilityIssueID::HEADING_IN_TABLE, + sfx::AccessibilityIssueLevel::WARNLEV); pIssue->setIssueObject(IssueObject::TEXT); pIssue->setDoc(pCurrent->GetDoc()); pIssue->setNode(pCurrent); @@ -2224,7 +2250,8 @@ public: } resultString = resultString.replaceAll("%LEVEL_CURRENT%", OUString::number(currentLevel)); - auto pIssue = lclAddIssue(m_rIssueCollection, resultString, eIssueID); + auto pIssue = lclAddIssue(m_rIssueCollection, resultString, eIssueID, + sfx::AccessibilityIssueLevel::ERRORLEV); pIssue->setIssueObject(IssueObject::TEXT); pIssue->setDoc(pCurrent->GetDoc()); pIssue->setNode(pCurrent); @@ -2269,7 +2296,8 @@ public: auto pIssue = lclAddIssue(m_rIssueCollection, SwResId(STR_CONTENT_CONTROL_IN_HEADER_OR_FOOTER), - sfx::AccessibilityIssueID::CONTENT_CONTROL); + sfx::AccessibilityIssueID::CONTENT_CONTROL, + sfx::AccessibilityIssueLevel::WARNLEV); pIssue->setIssueObject(IssueObject::TEXT); pIssue->setDoc(pCurrent->GetDoc()); pIssue->setNode(pCurrent); @@ -2310,7 +2338,8 @@ public: if (eLanguage == LANGUAGE_NONE) { auto pIssue = lclAddIssue(m_rIssueCollection, SwResId(STR_DOCUMENT_DEFAULT_LANGUAGE), - sfx::AccessibilityIssueID::DOCUMENT_LANGUAGE); + sfx::AccessibilityIssueID::DOCUMENT_LANGUAGE, + sfx::AccessibilityIssueLevel::WARNLEV); pIssue->setIssueObject(IssueObject::LANGUAGE_NOT_SET); pIssue->setObjectID(OUString()); pIssue->setDoc(*pDoc); @@ -2327,7 +2356,8 @@ public: = SwResId(STR_STYLE_NO_LANGUAGE).replaceAll("%STYLE_NAME%", sName); auto pIssue = lclAddIssue(m_rIssueCollection, sIssueText, - sfx::AccessibilityIssueID::STYLE_LANGUAGE); + sfx::AccessibilityIssueID::STYLE_LANGUAGE, + sfx::AccessibilityIssueLevel::WARNLEV); pIssue->setIssueObject(IssueObject::LANGUAGE_NOT_SET); pIssue->setObjectID(sName); pIssue->setDoc(*pDoc); @@ -2359,7 +2389,8 @@ public: if (o3tl::trim(sTitle).empty()) { auto pIssue = lclAddIssue(m_rIssueCollection, SwResId(STR_DOCUMENT_TITLE), - sfx::AccessibilityIssueID::DOCUMENT_TITLE); + sfx::AccessibilityIssueID::DOCUMENT_TITLE, + sfx::AccessibilityIssueLevel::ERRORLEV); pIssue->setDoc(*pDoc); pIssue->setIssueObject(IssueObject::DOCUMENT_TITLE); } @@ -2384,7 +2415,8 @@ public: sfx::AccessibilityIssueID eIssueID = rFootnote.IsEndNote() ? sfx::AccessibilityIssueID::AVOID_FOOTNOTES : sfx::AccessibilityIssueID::AVOID_ENDNOTES; - auto pIssue = lclAddIssue(m_rIssueCollection, sError, eIssueID); + auto pIssue = lclAddIssue(m_rIssueCollection, sError, eIssueID, + sfx::AccessibilityIssueLevel::WARNLEV); pIssue->setDoc(*pDoc); pIssue->setIssueObject(IssueObject::FOOTENDNOTE); pIssue->setTextFootnote(pTextFootnote); @@ -2427,7 +2459,8 @@ public: { auto pIssue = lclAddIssue(m_rIssueCollection, SwResId(STR_AVOID_BACKGROUND_IMAGES), - sfx::AccessibilityIssueID::DOCUMENT_BACKGROUND); + sfx::AccessibilityIssueID::DOCUMENT_BACKGROUND, + sfx::AccessibilityIssueLevel::WARNLEV); pIssue->setDoc(*pDoc); pIssue->setIssueObject(IssueObject::DOCUMENT_BACKGROUND); @@ -2454,7 +2487,8 @@ void AccessibilityCheck::checkObject(SwNode* pCurrent, SdrObject* pObject) if (const uno::Any* pAny = rGeometryItem.GetPropertyValueByName(u"Type"_ustr)) if (pAny->get<OUString>().startsWith("fontwork-")) lclAddIssue(m_aIssueCollection, SwResId(STR_FONTWORKS), - sfx::AccessibilityIssueID::FONTWORKS); + sfx::AccessibilityIssueID::FONTWORKS, + sfx::AccessibilityIssueLevel::WARNLEV); } // Checking if there is floating Writer text draw object and if so, throwing a warning. @@ -2463,7 +2497,8 @@ void AccessibilityCheck::checkObject(SwNode* pCurrent, SdrObject* pObject) && FindFrameFormat(pObject)->GetAnchor().GetAnchorId() != RndStdIds::FLY_AS_CHAR) { auto pIssue = lclAddIssue(m_aIssueCollection, SwResId(STR_FLOATING_TEXT), - sfx::AccessibilityIssueID::FLOATING_TEXT); + sfx::AccessibilityIssueID::FLOATING_TEXT, + sfx::AccessibilityIssueLevel::WARNLEV); pIssue->setIssueObject(IssueObject::TEXTFRAME); pIssue->setObjectID(pObject->GetName()); pIssue->setDoc(*m_pDoc); @@ -2483,7 +2518,8 @@ void AccessibilityCheck::checkObject(SwNode* pCurrent, SdrObject* pObject) const OUString& sName = pObject->GetName(); OUString sIssueText = SwResId(STR_NO_ALT).replaceAll("%OBJECT_NAME%", sName); auto pIssue = lclAddIssue(m_aIssueCollection, sIssueText, - sfx::AccessibilityIssueID::NO_ALT_SHAPE); + sfx::AccessibilityIssueID::NO_ALT_SHAPE, + sfx::AccessibilityIssueLevel::ERRORLEV); // Set FORM Issue for Form objects because of the design mode if (nInv == SdrInventor::FmForm) pIssue->setIssueObject(IssueObject::FORM); diff --git a/sw/source/core/access/AccessibilityIssue.cxx b/sw/source/core/access/AccessibilityIssue.cxx index a6e02f9a8b67..2aabb968bb0a 100644 --- a/sw/source/core/access/AccessibilityIssue.cxx +++ b/sw/source/core/access/AccessibilityIssue.cxx @@ -35,8 +35,9 @@ namespace sw { -AccessibilityIssue::AccessibilityIssue(sfx::AccessibilityIssueID eIssueID) - : sfx::AccessibilityIssue(eIssueID) +AccessibilityIssue::AccessibilityIssue(sfx::AccessibilityIssueID eIssueID, + sfx::AccessibilityIssueLevel eIssueLvl) + : sfx::AccessibilityIssue(eIssueID, eIssueLvl) , m_eIssueObject(IssueObject::UNKNOWN) , m_pDoc(nullptr) , m_pNode(nullptr) diff --git a/sw/source/core/inc/AccessibilityIssue.hxx b/sw/source/core/inc/AccessibilityIssue.hxx index eef014c5f7f3..647d51b66da7 100644 --- a/sw/source/core/inc/AccessibilityIssue.hxx +++ b/sw/source/core/inc/AccessibilityIssue.hxx @@ -49,7 +49,7 @@ private: sal_Int32 m_nEnd; public: - AccessibilityIssue(sfx::AccessibilityIssueID eIssueID); + AccessibilityIssue(sfx::AccessibilityIssueID eIssueID, sfx::AccessibilityIssueLevel eIssueLvl); AccessibilityIssue(AccessibilityIssue const&) = default; void setIssueObject(IssueObject eIssueObject); diff --git a/sw/source/uibase/sidebar/A11yCheckIssuesPanel.cxx b/sw/source/uibase/sidebar/A11yCheckIssuesPanel.cxx index 5e6e934ee598..d5f5f264d657 100644 --- a/sw/source/uibase/sidebar/A11yCheckIssuesPanel.cxx +++ b/sw/source/uibase/sidebar/A11yCheckIssuesPanel.cxx @@ -97,28 +97,9 @@ IMPL_LINK_NOARG(AccessibilityCheckEntry, FixButtonClicked, weld::Button&, void) m_pAccessibilityIssue->quickFixIssue(); } -std::unique_ptr<PanelLayout> A11yCheckIssuesPanel::Create(weld::Widget* pParent, - SfxBindings* pBindings) -{ - if (pParent == nullptr) - throw css::lang::IllegalArgumentException( - u"no parent window given to A11yCheckIssuesPanel::Create"_ustr, nullptr, 0); - return std::make_unique<A11yCheckIssuesPanel>(pParent, pBindings); -} - -A11yCheckIssuesPanel::A11yCheckIssuesPanel(weld::Widget* pParent, SfxBindings* pBindings) - : PanelLayout(pParent, u"A11yCheckIssuesPanel"_ustr, - u"modules/swriter/ui/a11ycheckissuespanel.ui"_ustr) - , m_xOptionsButton(m_xBuilder->weld_button(u"bOptions"_ustr)) - , mxAccessibilityBox(m_xBuilder->weld_box(u"accessibilityCheckBox"_ustr)) - , mxUpdateBox(m_xBuilder->weld_box(u"updateBox"_ustr)) - , mxUpdateLinkButton(m_xBuilder->weld_link_button(u"updateLinkButton"_ustr)) - - , mpBindings(pBindings) - , mpDoc(nullptr) - , maA11yCheckController(FN_STAT_ACCESSIBILITY_CHECK, *pBindings, *this) - , mnIssueCount(0) - , mbAutomaticCheckEnabled(false) +AccessibilityCheckLevel::AccessibilityCheckLevel(weld::Box* pParent) + : m_xBuilder(Application::CreateBuilder(pParent, u"svx/ui/accessibilitychecklevel.ui"_ustr)) + , m_xContainer(m_xBuilder->weld_box(u"accessibilityCheckLevelBox"_ustr)) { m_xExpanders[0] = m_xBuilder->weld_expander(u"expand_document"_ustr); m_xExpanders[1] = m_xBuilder->weld_expander(u"expand_styles"_ustr); @@ -143,6 +124,84 @@ A11yCheckIssuesPanel::A11yCheckIssuesPanel(weld::Widget* pParent, SfxBindings* p m_xBoxes[8] = m_xBuilder->weld_box(u"box_fakes"_ustr); m_xBoxes[9] = m_xBuilder->weld_box(u"box_numbering"_ustr); m_xBoxes[10] = m_xBuilder->weld_box(u"box_other"_ustr); +} + +void AccessibilityCheckLevel::removeAllEntries() +{ + for (auto eGroup : o3tl::enumrange<AccessibilityCheckGroups>()) + { + auto nGroupIndex = size_t(eGroup); + for (auto const& xEntry : m_aEntries[nGroupIndex]) + m_xBoxes[nGroupIndex]->move(xEntry->get_widget(), nullptr); + } +} + +void AccessibilityCheckLevel::reset() +{ + for (auto& xExpander : m_xExpanders) + xExpander.reset(); + + for (auto& xBox : m_xBoxes) + xBox.reset(); +} + +void AccessibilityCheckLevel::addEntryForGroup( + AccessibilityCheckGroups eGroup, std::vector<sal_Int32>& rIndices, + std::shared_ptr<sfx::AccessibilityIssue> const& pIssue) +{ + auto nGroupIndex = size_t(eGroup); + // prevent the UI locking up forever, this is effectively an O(n^2) situation, given the way the UI additions work + if (m_aEntries[nGroupIndex].size() > 500) + { + SAL_WARN("sw", "too many a11y issues, not adding to panel"); + return; + } + auto xEntry = std::make_unique<AccessibilityCheckEntry>(m_xBoxes[nGroupIndex].get(), pIssue); + m_xBoxes[nGroupIndex]->reorder_child(xEntry->get_widget(), rIndices[nGroupIndex]++); + m_aEntries[nGroupIndex].push_back(std::move(xEntry)); +} + +size_t AccessibilityCheckLevel::getEntrySize(AccessibilityCheckGroups eGroup) const +{ + auto nGroupIndex = size_t(eGroup); + return m_aEntries[nGroupIndex].size(); +} + +void AccessibilityCheckLevel::show(size_t nGroupIndex) { m_xExpanders[nGroupIndex]->show(); } + +void AccessibilityCheckLevel::hide(size_t nGroupIndex) { m_xExpanders[nGroupIndex]->hide(); } + +std::unique_ptr<PanelLayout> A11yCheckIssuesPanel::Create(weld::Widget* pParent, + SfxBindings* pBindings) +{ + if (pParent == nullptr) + throw css::lang::IllegalArgumentException( + u"no parent window given to A11yCheckIssuesPanel::Create"_ustr, nullptr, 0); + return std::make_unique<A11yCheckIssuesPanel>(pParent, pBindings); +} + +A11yCheckIssuesPanel::A11yCheckIssuesPanel(weld::Widget* pParent, SfxBindings* pBindings) + : PanelLayout(pParent, u"A11yCheckIssuesPanel"_ustr, + u"modules/swriter/ui/a11ycheckissuespanel.ui"_ustr) + , m_xOptionsButton(m_xBuilder->weld_button(u"bOptions"_ustr)) + , mxUpdateBox(m_xBuilder->weld_box(u"updateBox"_ustr)) + , mxUpdateLinkButton(m_xBuilder->weld_link_button(u"updateLinkButton"_ustr)) + , m_xListSep(m_xBuilder->weld_widget(u"sep_level"_ustr)) + , mpBindings(pBindings) + , mpDoc(nullptr) + , maA11yCheckController(FN_STAT_ACCESSIBILITY_CHECK, *pBindings, *this) + , mnIssueCount(0) + , mbAutomaticCheckEnabled(false) +{ + // errors + m_xLevelExpanders[0] = m_xBuilder->weld_expander(u"expand_errors"_ustr); + mxAccessibilityBox[0] = m_xBuilder->weld_box(u"accessibilityBoxErr"_ustr); + m_aLevelEntries[0] = std::make_unique<AccessibilityCheckLevel>(mxAccessibilityBox[0].get()); + + // warnings + m_xLevelExpanders[1] = m_xBuilder->weld_expander(u"expand_warnings"_ustr); + mxAccessibilityBox[1] = m_xBuilder->weld_box(u"accessibilityBoxWrn"_ustr); + m_aLevelEntries[1] = std::make_unique<AccessibilityCheckLevel>(mxAccessibilityBox[1].get()); mxUpdateLinkButton->connect_activate_link( LINK(this, A11yCheckIssuesPanel, UpdateLinkButtonClicked)); @@ -171,12 +230,14 @@ A11yCheckIssuesPanel::A11yCheckIssuesPanel(weld::Widget* pParent, SfxBindings* p // In desktop don't show the update button and schedule to run the accessibility check async if (comphelper::LibreOfficeKit::isActive()) { - mxAccessibilityBox->hide(); + m_xLevelExpanders[0]->hide(); + m_xLevelExpanders[1]->hide(); mxUpdateBox->show(); } else { - mxAccessibilityBox->show(); + m_xLevelExpanders[0]->show(); + m_xLevelExpanders[1]->show(); mxUpdateBox->hide(); Application::PostUserEvent(LINK(this, A11yCheckIssuesPanel, PopulateIssuesHdl)); } @@ -191,7 +252,8 @@ IMPL_LINK_NOARG(A11yCheckIssuesPanel, OptionsButtonClicked, weld::Button&, void) IMPL_LINK_NOARG(A11yCheckIssuesPanel, UpdateLinkButtonClicked, weld::LinkButton&, bool) { - mxAccessibilityBox->show(); + m_xLevelExpanders[0]->show(); + m_xLevelExpanders[1]->show(); mxUpdateBox->hide(); Application::PostUserEvent(LINK(this, A11yCheckIssuesPanel, PopulateIssuesHdl)); return true; @@ -211,44 +273,41 @@ void A11yCheckIssuesPanel::ImplDestroy() mpBindings->Invalidate(SID_ACCESSIBILITY_CHECK_ONLINE); } - for (auto& xExpander : m_xExpanders) - xExpander.reset(); - - for (auto& xBox : m_xBoxes) - xBox.reset(); + for (auto& aLevelEntry : m_aLevelEntries) + { + aLevelEntry->reset(); + aLevelEntry.reset(); + } } A11yCheckIssuesPanel::~A11yCheckIssuesPanel() { suppress_fun_call_w_exception(ImplDestroy()); } void A11yCheckIssuesPanel::removeAllEntries() { - for (auto eGroup : o3tl::enumrange<AccessibilityCheckGroups>()) + for (auto& aLevelEntry : m_aLevelEntries) { - auto nGroupIndex = size_t(eGroup); - for (auto const& xEntry : m_aEntries[nGroupIndex]) - m_xBoxes[nGroupIndex]->move(xEntry->get_widget(), nullptr); + aLevelEntry->removeAllEntries(); } } void A11yCheckIssuesPanel::addEntryForGroup(AccessibilityCheckGroups eGroup, - std::vector<sal_Int32>& rIndices, + std::vector<std::vector<sal_Int32>>& rIndices, std::shared_ptr<sfx::AccessibilityIssue> const& pIssue) { - auto nGroupIndex = size_t(eGroup); // prevent the UI locking up forever, this is effectively an O(n^2) situation, given the way the UI additions work - if (m_aEntries[nGroupIndex].size() > 500) + if (m_aLevelEntries[0]->getEntrySize(eGroup) + m_aLevelEntries[1]->getEntrySize(eGroup) > 500) { SAL_WARN("sw", "too many a11y issues, not adding to panel"); return; } - auto xEntry = std::make_unique<AccessibilityCheckEntry>(m_xBoxes[nGroupIndex].get(), pIssue); - m_xBoxes[nGroupIndex]->reorder_child(xEntry->get_widget(), rIndices[nGroupIndex]++); - m_aEntries[nGroupIndex].push_back(std::move(xEntry)); + + size_t nLevel = static_cast<size_t>(pIssue->m_eIssueLvl); + m_aLevelEntries[nLevel]->addEntryForGroup(eGroup, rIndices[nLevel], pIssue); } void A11yCheckIssuesPanel::populateIssues() { - if (!mpDoc || !mxAccessibilityBox->is_visible()) + if (!mpDoc || !(m_xLevelExpanders[0]->is_visible() || m_xLevelExpanders[1]->is_visible())) return; SfxViewShell* pViewShell = SfxViewShell::Current(); @@ -263,7 +322,7 @@ void A11yCheckIssuesPanel::populateIssues() removeAllEntries(); - std::vector<sal_Int32> nIndices(11, 0); + std::vector<std::vector<sal_Int32>> nIndices(2, std::vector<sal_Int32>(11, 0)); sal_Int32 nDirectFormats = 0; for (std::shared_ptr<sfx::AccessibilityIssue> const& pIssue : m_aIssueCollection.getIssues()) @@ -368,23 +427,43 @@ void A11yCheckIssuesPanel::populateIssues() } } - // add DirectFormats (if have) as last element to Formatting AccessibilityCheckGroup + // add DirectFormats (if have) as last element to Formatting AccessibilityCheckGroup on the Warning level if (nDirectFormats > 0) { size_t nGroupFormatIndex = size_t(AccessibilityCheckGroups::Formatting); - nIndices[nGroupFormatIndex]++; + // Direct Formats are on the warning level + size_t nLevel = static_cast<size_t>(sfx::AccessibilityIssueLevel::WARNLEV); + nIndices[nLevel][nGroupFormatIndex]++; } - size_t nGroupIndex = 0; - for (sal_Int32 nIndex : nIndices) + for (auto eLevel : o3tl::enumrange<sfx::AccessibilityIssueLevel>()) { - if (nIndex > 0) - m_xExpanders[nGroupIndex]->show(); + size_t nGroupIndex = 0; + auto nLevelIndex = size_t(eLevel); + bool bHaveIssue = false; + for (sal_Int32 nIndex : nIndices[nLevelIndex]) + { + if (nIndex > 0) + { + m_aLevelEntries[nLevelIndex]->show(nGroupIndex); + if (!bHaveIssue) + bHaveIssue = true; + } + else + m_aLevelEntries[nLevelIndex]->hide(nGroupIndex); + nGroupIndex++; + } + if (!bHaveIssue) + m_xLevelExpanders[nLevelIndex]->hide(); else - m_xExpanders[nGroupIndex]->hide(); - nGroupIndex++; + m_xLevelExpanders[nLevelIndex]->show(); } + if (m_xLevelExpanders[0]->is_visible() && m_xLevelExpanders[1]->is_visible()) + m_xListSep->set_visible(true); + else + m_xListSep->set_visible(false); + if (pWindow) pWindow->SetPointer(PointerStyle::Arrow); } diff --git a/sw/source/uibase/sidebar/A11yCheckIssuesPanel.hxx b/sw/source/uibase/sidebar/A11yCheckIssuesPanel.hxx index f961778c4b27..b293cb937953 100644 --- a/sw/source/uibase/sidebar/A11yCheckIssuesPanel.hxx +++ b/sw/source/uibase/sidebar/A11yCheckIssuesPanel.hxx @@ -59,6 +59,29 @@ enum class AccessibilityCheckGroups : size_t LAST = Other }; +class AccessibilityCheckLevel +{ +private: + std::unique_ptr<weld::Builder> m_xBuilder; + std::unique_ptr<weld::Box> m_xContainer; + std::array<std::vector<std::unique_ptr<AccessibilityCheckEntry>>, 11> m_aEntries; + std::array<std::unique_ptr<weld::Expander>, 11> m_xExpanders; + std::array<std::unique_ptr<weld::Box>, 11> m_xBoxes; + +public: + AccessibilityCheckLevel(weld::Box* pParent); + + void removeAllEntries(); + void reset(); + + void addEntryForGroup(AccessibilityCheckGroups eGroup, std::vector<sal_Int32>& rIndices, + std::shared_ptr<sfx::AccessibilityIssue> const& pIssue); + size_t getEntrySize(AccessibilityCheckGroups eGroup) const; + + void show(size_t nGroupIndex); + void hide(size_t nGroupIndex); +}; + class A11yCheckIssuesPanel : public PanelLayout, public ::sfx2::sidebar::ControllerItem::ItemUpdateReceiverInterface { @@ -76,13 +99,13 @@ public: virtual ~A11yCheckIssuesPanel() override; private: - std::array<std::vector<std::unique_ptr<AccessibilityCheckEntry>>, 11> m_aEntries; - std::array<std::unique_ptr<weld::Expander>, 11> m_xExpanders; - std::array<std::unique_ptr<weld::Box>, 11> m_xBoxes; std::unique_ptr<weld::Button> m_xOptionsButton; - std::unique_ptr<weld::Box> mxAccessibilityBox; + std::array<std::unique_ptr<weld::Expander>, 2> m_xLevelExpanders; + std::array<std::unique_ptr<weld::Box>, 2> mxAccessibilityBox; + std::array<std::unique_ptr<AccessibilityCheckLevel>, 2> m_aLevelEntries; std::unique_ptr<weld::Box> mxUpdateBox; std::unique_ptr<weld::LinkButton> mxUpdateLinkButton; + std::unique_ptr<weld::Widget> m_xListSep; sfx::AccessibilityIssueCollection m_aIssueCollection; void removeAllEntries(); @@ -92,7 +115,8 @@ private: DECL_LINK(UpdateLinkButtonClicked, weld::LinkButton&, bool); DECL_LINK(PopulateIssuesHdl, void*, void); - void addEntryForGroup(AccessibilityCheckGroups eGroup, std::vector<sal_Int32>& rIndices, + void addEntryForGroup(AccessibilityCheckGroups eGroup, + std::vector<std::vector<sal_Int32>>& rIndices, std::shared_ptr<sfx::AccessibilityIssue> const& pIssue); SfxBindings* GetBindings() { return mpBindings; } diff --git a/sw/uiconfig/swriter/ui/a11ycheckissuespanel.ui b/sw/uiconfig/swriter/ui/a11ycheckissuespanel.ui index 489f19e9683e..2dc86725159b 100644 --- a/sw/uiconfig/swriter/ui/a11ycheckissuespanel.ui +++ b/sw/uiconfig/swriter/ui/a11ycheckissuespanel.ui @@ -9,6 +9,7 @@ <property name="hexpand">True</property> <property name="vexpand">True</property> <property name="orientation">vertical</property> + <property name="spacing">3</property> <child> <!-- n-columns=2 n-rows=1 --> <object class="GtkGrid" id="gridOptions"> @@ -20,7 +21,7 @@ <property name="can-focus">False</property> <property name="halign">start</property> <property name="hexpand">True</property> - <property name="label" translatable="yes" context="optsecuritypage|lbOptions">Adjust accessibility check options</property> + <property name="label" translatable="yes" context="a11ycheckissuespanel|lbOptions">Adjust accessibility check options</property> </object> <packing> <property name="left-attach">0</property> @@ -67,340 +68,75 @@ </packing> </child> <child> - <object class="GtkBox" id="accessibilityCheckBox"> + <object class="GtkExpander" id="expand_errors"> <property name="visible">True</property> - <property name="can-focus">False</property> - <property name="valign">start</property> - <property name="hexpand">True</property> - <property name="vexpand">True</property> - <property name="orientation">vertical</property> - <property name="spacing">6</property> - <property name="baseline-position">top</property> - <child> - <object class="GtkExpander" id="expand_document"> - <property name="can-focus">True</property> - <property name="expanded">True</property> - <child> - <object class="GtkBox" id="box_document"> - <property name="visible">True</property> - <property name="can-focus">False</property> - <property name="margin-start">6</property> - <property name="orientation">vertical</property> - <child> - <placeholder/> - </child> - </object> - </child> - <child type="label"> - <object class="GtkLabel" id="expand_document_label"> - <property name="visible">True</property> - <property name="can-focus">False</property> - <property name="label" translatable="yes" context="a11ycheckissuespanel|expand_document_label">Document</property> - </object> - </child> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkExpander" id="expand_styles"> - <property name="can-focus">True</property> - <property name="expanded">True</property> - <child> - <object class="GtkBox" id="box_styles"> - <property name="visible">True</property> - <property name="can-focus">False</property> - <property name="margin-start">6</property> - <property name="orientation">vertical</property> - <child> - <placeholder/> - </child> - </object> - </child> - <child type="label"> - <object class="GtkLabel" id="expand_styles_label"> - <property name="visible">True</property> - <property name="can-focus">False</property> - <property name="label" translatable="yes" context="a11ycheckissuespanel|expand_styles_label">Styles</property> - </object> - </child> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">1</property> - </packing> - </child> - <child> - <object class="GtkExpander" id="expand_linked"> - <property name="can-focus">True</property> - <property name="expanded">True</property> - <child> - <object class="GtkBox" id="box_linked"> - <property name="visible">True</property> - <property name="can-focus">False</property> - <property name="margin-start">6</property> - <property name="hexpand">True</property> - <property name="orientation">vertical</property> - <child> - <placeholder/> - </child> - </object> - </child> - <child type="label"> - <object class="GtkLabel" id="expand_linked_label"> - <property name="visible">True</property> - <property name="can-focus">False</property> - <property name="label" translatable="yes" context="a11ycheckissuespanel|expand_linked_label">Missing linked graphic</property> - </object> - </child> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">2</property> - </packing> - </child> + <property name="can-focus">True</property> + <property name="expanded">True</property> <child> - <object class="GtkExpander" id="expand_no_alt"> - <property name="can-focus">True</property> - <property name="expanded">True</property> - <child> - <object class="GtkBox" id="box_no_alt"> - <property name="visible">True</property> - <property name="can-focus">False</property> - <property name="margin-start">6</property> - <property name="hexpand">True</property> - <property name="orientation">vertical</property> - <child> - <placeholder/> - </child> - </object> - </child> - <child type="label"> - <object class="GtkLabel" id="expand_no_alt_label"> - <property name="visible">True</property> - <property name="can-focus">False</property> - <property name="label" translatable="yes" context="a11ycheckissuespanel|expand_no_alt_label">Missing alternative or description text</property> - </object> - </child> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">3</property> - </packing> - </child> - <child> - <object class="GtkExpander" id="expand_table"> - <property name="can-focus">True</property> - <property name="expanded">True</property> - <child> - <object class="GtkBox" id="box_table"> - <property name="visible">True</property> - <property name="can-focus">False</property> - <property name="margin-start">6</property> - <property name="orientation">vertical</property> - <child> - <placeholder/> - </child> - </object> - </child> - <child type="label"> - <object class="GtkLabel" id="expand_table_label"> - <property name="visible">True</property> - <property name="can-focus">False</property> - <property name="label" translatable="yes" context="a11ycheckissuespanel|expand_table_label">Table</property> - </object> - </child> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">4</property> - </packing> - </child> - <child> - <object class="GtkExpander" id="expand_formatting"> - <property name="can-focus">True</property> - <property name="expanded">True</property> - <child> - <object class="GtkBox" id="box_formatting"> - <property name="visible">True</property> - <property name="can-focus">False</property> - <property name="margin-start">6</property> - <property name="orientation">vertical</property> - <child> - <object class="GtkExpander" id="expand_direct_formatting"> - <property name="can-focus">True</property> - <child> - <object class="GtkBox" id="box_direct_formatting"> - <property name="visible">True</property> - <property name="can-focus">False</property> - <property name="margin-start">6</property> - <property name="orientation">vertical</property> - <child> - <placeholder/> - </child> - </object> - </child> - <child type="label"> - <object class="GtkLabel" id="expand_direct_formatting_label"> - <property name="visible">True</property> - <property name="can-focus">False</property> - <property name="label" translatable="yes" context="a11ycheckissuespanel|expand_formatting_label">Direct Formatting</property> - </object> - </child> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">0</property> - </packing> - </child> - <child> - <placeholder/> - </child> - </object> - </child> - <child type="label"> - <object class="GtkLabel" id="expand_formatting_label"> - <property name="visible">True</property> - <property name="can-focus">False</property> - <property name="label" translatable="yes" context="a11ycheckissuespanel|expand_formatting_label">Formatting</property> - </object> - </child> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">5</property> - </packing> - </child> - <child> - <object class="GtkExpander" id="expand_hyperlink"> - <property name="can-focus">True</property> - <property name="expanded">True</property> + <object class="GtkBox" id="accessibilityBoxErr"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="margin-start">6</property> + <property name="margin-top">6</property> + <property name="orientation">vertical</property> <child> - <object class="GtkBox" id="box_hyperlink"> - <property name="visible">True</property> - <property name="can-focus">False</property> - <property name="margin-start">6</property> - <property name="orientation">vertical</property> - <child> - <placeholder/> - </child> - </object> - </child> - <child type="label"> - <object class="GtkLabel" id="expand_hyperlink_label"> - <property name="visible">True</property> - <property name="can-focus">False</property> - <property name="label" translatable="yes" context="a11ycheckissuespanel|expand_hyperlink_label">Hyperlink</property> - </object> + <placeholder/> </child> </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">7</property> - </packing> </child> - <child> - <object class="GtkExpander" id="expand_fakes"> - <property name="can-focus">True</property> - <property name="expanded">True</property> - <child> - <object class="GtkBox" id="box_fakes"> - <property name="visible">True</property> - <property name="can-focus">False</property> - <property name="margin-start">6</property> - <property name="orientation">vertical</property> - <child> - <placeholder/> - </child> - </object> - </child> - <child type="label"> - <object class="GtkLabel" id="expand_fakes_label"> - <property name="visible">True</property> - <property name="can-focus">False</property> - <property name="label" translatable="yes" context="a11ycheckissuespanel|expand_fakes_label">Simulated captions</property> - </object> - </child> + <child type="label"> + <object class="GtkLabel" id="expand_errors_label"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="label" translatable="yes" context="a11ycheckissuespanel|expand_errors_label">Accessibility errors</property> </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">8</property> - </packing> </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">2</property> + </packing> + </child> + <child> + <object class="GtkSeparator" id="sep_level"> + <property name="can-focus">False</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">3</property> + </packing> + </child> + <child> + <object class="GtkExpander" id="expand_warnings"> + <property name="visible">True</property> + <property name="can-focus">True</property> + <property name="expanded">True</property> <child> - <object class="GtkExpander" id="expand_numbering"> - <property name="can-focus">True</property> - <property name="expanded">True</property> + <object class="GtkBox" id="accessibilityBoxWrn"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="margin-start">6</property> + <property name="margin-top">6</property> + <property name="orientation">vertical</property> <child> - <object class="GtkBox" id="box_numbering"> - <property name="visible">True</property> - <property name="can-focus">False</property> - <property name="margin-start">6</property> - <property name="orientation">vertical</property> - <child> - <placeholder/> - </child> - </object> - </child> - <child type="label"> - <object class="GtkLabel" id="expand_numbering_label"> - <property name="visible">True</property> - <property name="can-focus">False</property> - <property name="label" translatable="yes" context="a11ycheckissuespanel|expand_numbering_label">Numbering</property> - </object> + <placeholder/> </child> </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">9</property> - </packing> </child> - <child> - <object class="GtkExpander" id="expand_other"> - <property name="can-focus">True</property> - <property name="expanded">True</property> - <child> - <object class="GtkBox" id="box_other"> - <property name="visible">True</property> - <property name="can-focus">False</property> - <property name="margin-start">6</property> - <property name="orientation">vertical</property> - <child> - <placeholder/> - </child> - </object> - </child> - <child type="label"> - <object class="GtkLabel" id="expand_other_label"> - <property name="visible">True</property> - <property name="can-focus">False</property> - <property name="label" translatable="yes" context="a11ycheckissuespanel|expand_other_label">Other</property> - </object> - </child> + <child type="label"> + <object class="GtkLabel" id="expand_warns_lb"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="label" translatable="yes" context="a11ycheckissuespanel|expand_warns_lb">Accessibility warnings</property> </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">10</property> - </packing> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> - <property name="position">2</property> + <property name="position">4</property> </packing> </child> <child> @@ -426,7 +162,7 @@ <packing> <property name="expand">False</property> <property name="fill">True</property> - <property name="position">3</property> + <property name="position">5</property> </packing> </child> </object> diff --git a/vcl/jsdialog/enabled.cxx b/vcl/jsdialog/enabled.cxx index 231c6fe2d3cf..172c4504ed92 100644 --- a/vcl/jsdialog/enabled.cxx +++ b/vcl/jsdialog/enabled.cxx @@ -255,6 +255,7 @@ bool isBuilderEnabled(std::u16string_view rUIFile, bool bMobile) || rUIFile == u"svx/ui/acceptrejectchangesdialog.ui" || rUIFile == u"svx/ui/accessibilitycheckdialog.ui" || rUIFile == u"svx/ui/accessibilitycheckentry.ui" + || rUIFile == u"svx/ui/accessibilitychecklevel.ui" || rUIFile == u"svx/ui/compressgraphicdialog.ui" || rUIFile == u"svx/ui/findreplacedialog.ui" || rUIFile == u"svx/ui/fontworkgallerydialog.ui"