sw/source/uibase/sidebar/A11yCheckIssuesPanel.cxx |  210 +++++++---------------
 sw/source/uibase/sidebar/A11yCheckIssuesPanel.hxx |   56 ++---
 2 files changed, 97 insertions(+), 169 deletions(-)

New commits:
commit 3565d5be15d536c0732fd6930d3173c51458c3b6
Author:     Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk>
AuthorDate: Tue Apr 30 23:28:10 2024 +0900
Commit:     Szymon Kłos <szymon.k...@collabora.com>
CommitDate: Thu May 2 10:38:28 2024 +0200

    sw: simplify widgets in A11yCheckIssuesPanel
    
    Change-Id: Iee8db2953c5836f7dee667dadab9441f73706d52
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/166955
    Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com>
    Reviewed-by: Szymon Kłos <szymon.k...@collabora.com>

diff --git a/sw/source/uibase/sidebar/A11yCheckIssuesPanel.cxx 
b/sw/source/uibase/sidebar/A11yCheckIssuesPanel.cxx
index a1907c9b6306..7bbbf130678c 100644
--- a/sw/source/uibase/sidebar/A11yCheckIssuesPanel.cxx
+++ b/sw/source/uibase/sidebar/A11yCheckIssuesPanel.cxx
@@ -22,6 +22,7 @@
 #include <sfx2/AccessibilityIssue.hxx>
 #include <unotools/configmgr.hxx>
 #include <vcl/svapp.hxx>
+#include <o3tl/enumrange.hxx>
 
 #include "A11yCheckIssuesPanel.hxx"
 
@@ -80,13 +81,15 @@ AccessibilityCheckEntry::AccessibilityCheckEntry(
 
 IMPL_LINK_NOARG(AccessibilityCheckEntry, GotoButtonClicked, weld::LinkButton&, 
bool)
 {
-    m_pAccessibilityIssue->gotoIssue();
+    if (m_pAccessibilityIssue)
+        m_pAccessibilityIssue->gotoIssue();
     return true;
 }
 
 IMPL_LINK_NOARG(AccessibilityCheckEntry, FixButtonClicked, weld::Button&, void)
 {
-    m_pAccessibilityIssue->quickFixIssue();
+    if (m_pAccessibilityIssue)
+        m_pAccessibilityIssue->quickFixIssue();
 }
 
 std::unique_ptr<PanelLayout> A11yCheckIssuesPanel::Create(weld::Widget* 
pParent,
@@ -100,32 +103,34 @@ std::unique_ptr<PanelLayout> 
A11yCheckIssuesPanel::Create(weld::Widget* pParent,
 
 A11yCheckIssuesPanel::A11yCheckIssuesPanel(weld::Widget* pParent, SfxBindings* 
pBindings)
     : PanelLayout(pParent, "A11yCheckIssuesPanel", 
"modules/swriter/ui/a11ycheckissuespanel.ui")
-    , m_xExpanderDocument(m_xBuilder->weld_expander("expand_document"))
-    , m_xExpanderStyles(m_xBuilder->weld_expander("expand_styles"))
-    , m_xExpanderLinked(m_xBuilder->weld_expander("expand_linked"))
-    , m_xExpanderNoAlt(m_xBuilder->weld_expander("expand_no_alt"))
-    , m_xExpanderTable(m_xBuilder->weld_expander("expand_table"))
-    , m_xExpanderFormatting(m_xBuilder->weld_expander("expand_formatting"))
-    , m_xExpanderHyperlink(m_xBuilder->weld_expander("expand_hyperlink"))
-    , m_xExpanderFakes(m_xBuilder->weld_expander("expand_fakes"))
-    , m_xExpanderNumbering(m_xBuilder->weld_expander("expand_numbering"))
-    , m_xExpanderOther(m_xBuilder->weld_expander("expand_other"))
-    , m_xBoxDocument(m_xBuilder->weld_box("box_document"))
-    , m_xBoxStyles(m_xBuilder->weld_box("box_styles"))
-    , m_xBoxLinked(m_xBuilder->weld_box("box_linked"))
-    , m_xBoxNoAlt(m_xBuilder->weld_box("box_no_alt"))
-    , m_xBoxTable(m_xBuilder->weld_box("box_table"))
-    , m_xBoxFormatting(m_xBuilder->weld_box("box_formatting"))
-    , m_xBoxHyperlink(m_xBuilder->weld_box("box_hyperlink"))
-    , m_xBoxFakes(m_xBuilder->weld_box("box_fakes"))
-    , m_xBoxNumbering(m_xBuilder->weld_box("box_numbering"))
-    , m_xBoxOther(m_xBuilder->weld_box("box_other"))
     , mpBindings(pBindings)
     , mpDoc(nullptr)
     , maA11yCheckController(FN_STAT_ACCESSIBILITY_CHECK, *pBindings, *this)
     , mnIssueCount(0)
     , mbAutomaticCheckEnabled(false)
 {
+    m_xExpanders[0] = m_xBuilder->weld_expander("expand_document");
+    m_xExpanders[1] = m_xBuilder->weld_expander("expand_styles");
+    m_xExpanders[2] = m_xBuilder->weld_expander("expand_linked");
+    m_xExpanders[3] = m_xBuilder->weld_expander("expand_no_alt");
+    m_xExpanders[4] = m_xBuilder->weld_expander("expand_table");
+    m_xExpanders[5] = m_xBuilder->weld_expander("expand_formatting");
+    m_xExpanders[6] = m_xBuilder->weld_expander("expand_hyperlink");
+    m_xExpanders[7] = m_xBuilder->weld_expander("expand_fakes");
+    m_xExpanders[8] = m_xBuilder->weld_expander("expand_numbering");
+    m_xExpanders[9] = m_xBuilder->weld_expander("expand_other");
+
+    m_xBoxes[0] = m_xBuilder->weld_box("box_document");
+    m_xBoxes[1] = m_xBuilder->weld_box("box_styles");
+    m_xBoxes[2] = m_xBuilder->weld_box("box_linked");
+    m_xBoxes[3] = m_xBuilder->weld_box("box_no_alt");
+    m_xBoxes[4] = m_xBuilder->weld_box("box_table");
+    m_xBoxes[5] = m_xBuilder->weld_box("box_formatting");
+    m_xBoxes[6] = m_xBuilder->weld_box("box_hyperlink");
+    m_xBoxes[7] = m_xBuilder->weld_box("box_fakes");
+    m_xBoxes[8] = m_xBuilder->weld_box("box_numbering");
+    m_xBoxes[9] = m_xBuilder->weld_box("box_other");
+
     SwDocShell* pDocSh = dynamic_cast<SwDocShell*>(SfxObjectShell::Current());
     if (!pDocSh)
         return;
@@ -158,93 +163,49 @@ void A11yCheckIssuesPanel::ImplDestroy()
         batch->commit();
         mpBindings->Invalidate(SID_ACCESSIBILITY_CHECK_ONLINE);
     }
-    m_xExpanderDocument.reset();
-    m_xExpanderStyles.reset();
-    m_xExpanderLinked.reset();
-    m_xExpanderNoAlt.reset();
-    m_xExpanderTable.reset();
-    m_xExpanderFormatting.reset();
-    m_xExpanderHyperlink.reset();
-    m_xExpanderFakes.reset();
-    m_xExpanderNumbering.reset();
-    m_xExpanderOther.reset();
-    m_xBoxDocument.reset();
-    m_xBoxStyles.reset();
-    m_xBoxLinked.reset();
-    m_xBoxNoAlt.reset();
-    m_xBoxTable.reset();
-    m_xBoxFormatting.reset();
-    m_xBoxHyperlink.reset();
-    m_xBoxFakes.reset();
-    m_xBoxNumbering.reset();
-    m_xBoxOther.reset();
+
+    for (auto& xExapnder : m_xExpanders)
+        xExapnder.reset();
+
+    for (auto& xBox : m_xBoxes)
+        xBox.reset();
 }
 
 A11yCheckIssuesPanel::~A11yCheckIssuesPanel() { 
suppress_fun_call_w_exception(ImplDestroy()); }
 
-void A11yCheckIssuesPanel::removeOldWidgets()
+void A11yCheckIssuesPanel::removeAllEntries()
 {
-    for (auto const& xEntry : m_aDocumentEntries)
-        m_xBoxDocument->move(xEntry->get_widget(), nullptr);
-    m_xExpanderDocument->set_visible(false);
-
-    for (auto const& xEntry : m_aStylesEntries)
-        m_xBoxStyles->move(xEntry->get_widget(), nullptr);
-    m_xExpanderStyles->set_visible(false);
-
-    for (auto const& xEntry : m_aLinkedEntries)
-        m_xBoxLinked->move(xEntry->get_widget(), nullptr);
-    m_xExpanderLinked->set_visible(false);
-
-    for (auto const& xEntry : m_aNoAltEntries)
-        m_xBoxNoAlt->move(xEntry->get_widget(), nullptr);
-    m_xExpanderNoAlt->set_visible(false);
-
-    for (auto const& xEntry : m_aTableEntries)
-        m_xBoxTable->move(xEntry->get_widget(), nullptr);
-    m_xExpanderTable->set_visible(false);
-
-    for (auto const& xEntry : m_aFormattingEntries)
-        m_xBoxFormatting->move(xEntry->get_widget(), nullptr);
-    m_xExpanderFormatting->set_visible(false);
-
-    for (auto const& xEntry : m_aHyperlinkEntries)
-        m_xBoxHyperlink->move(xEntry->get_widget(), nullptr);
-    m_xExpanderHyperlink->set_visible(false);
-
-    for (auto const& xEntry : m_aFakesEntries)
-        m_xBoxFakes->move(xEntry->get_widget(), nullptr);
-    m_xExpanderFakes->set_visible(false);
-
-    for (auto const& xEntry : m_aNumberingEntries)
-        m_xBoxNumbering->move(xEntry->get_widget(), nullptr);
-    m_xExpanderNumbering->set_visible(false);
+    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);
+    }
+}
 
-    for (auto const& xEntry : m_aOtherEntries)
-        m_xBoxOther->move(xEntry->get_widget(), nullptr);
-    m_xExpanderOther->set_visible(false);
+void A11yCheckIssuesPanel::addEntryForGroup(AccessibilityCheckGroups eGroup,
+                                            std::vector<sal_Int32>& rIndices,
+                                            
std::shared_ptr<sfx::AccessibilityIssue> const& pIssue)
+{
+    auto nGroupIndex = size_t(eGroup);
+    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));
 }
 
 void A11yCheckIssuesPanel::populateIssues()
 {
     if (!mpDoc)
         return;
+
     sw::AccessibilityCheck aCheck(mpDoc);
     aCheck.check();
     m_aIssueCollection = aCheck.getIssueCollection();
 
-    removeOldWidgets();
-
-    sal_Int32 iDocument = 0;
-    sal_Int32 iStyles = 0;
-    sal_Int32 iLinked = 0;
-    sal_Int32 iNoAlt = 0;
-    sal_Int32 iTable = 0;
-    sal_Int32 iFormatting = 0;
-    sal_Int32 iHyperlink = 0;
-    sal_Int32 iFakes = 0;
-    sal_Int32 iNumbering = 0;
-    sal_Int32 iOther = 0;
+    removeAllEntries();
+
+    std::vector<sal_Int32> nIndices(10, 0);
+
     for (std::shared_ptr<sfx::AccessibilityIssue> const& pIssue : 
m_aIssueCollection.getIssues())
     {
         switch (pIssue->m_eIssueID)
@@ -253,91 +214,57 @@ void A11yCheckIssuesPanel::populateIssues()
             case sfx::AccessibilityIssueID::DOCUMENT_LANGUAGE:
             case sfx::AccessibilityIssueID::DOCUMENT_BACKGROUND:
             {
-                auto xEntry
-                    = 
std::make_unique<AccessibilityCheckEntry>(m_xBoxDocument.get(), pIssue);
-                m_xBoxDocument->reorder_child(xEntry->get_widget(), 
iDocument++);
-                m_xExpanderDocument->set_visible(true);
-                m_aDocumentEntries.push_back(std::move(xEntry));
+                addEntryForGroup(AccessibilityCheckGroups::Document, nIndices, 
pIssue);
             }
             break;
             case sfx::AccessibilityIssueID::STYLE_LANGUAGE:
             {
-                auto xEntry = 
std::make_unique<AccessibilityCheckEntry>(m_xBoxStyles.get(), pIssue);
-                m_xBoxStyles->reorder_child(xEntry->get_widget(), iStyles++);
-                m_xExpanderStyles->set_visible(true);
-                m_aStylesEntries.push_back(std::move(xEntry));
+                addEntryForGroup(AccessibilityCheckGroups::Styles, nIndices, 
pIssue);
             }
             break;
             case sfx::AccessibilityIssueID::LINKED_GRAPHIC:
             {
-                auto xEntry = 
std::make_unique<AccessibilityCheckEntry>(m_xBoxLinked.get(), pIssue);
-                m_xBoxLinked->reorder_child(xEntry->get_widget(), iLinked++);
-                m_xExpanderLinked->set_visible(true);
-                m_aLinkedEntries.push_back(std::move(xEntry));
+                addEntryForGroup(AccessibilityCheckGroups::Linked, nIndices, 
pIssue);
             }
             break;
             case sfx::AccessibilityIssueID::NO_ALT_OLE:
             case sfx::AccessibilityIssueID::NO_ALT_GRAPHIC:
             case sfx::AccessibilityIssueID::NO_ALT_SHAPE:
             {
-                auto xEntry = 
std::make_unique<AccessibilityCheckEntry>(m_xBoxNoAlt.get(), pIssue);
-                m_xBoxNoAlt->reorder_child(xEntry->get_widget(), iNoAlt++);
-                m_xExpanderNoAlt->set_visible(true);
-                m_aNoAltEntries.push_back(std::move(xEntry));
+                addEntryForGroup(AccessibilityCheckGroups::NoAlt, nIndices, 
pIssue);
             }
             break;
             case sfx::AccessibilityIssueID::TABLE_MERGE_SPLIT:
             {
-                auto xEntry = 
std::make_unique<AccessibilityCheckEntry>(m_xBoxTable.get(), pIssue);
-                m_xBoxTable->reorder_child(xEntry->get_widget(), iTable++);
-                m_xExpanderTable->set_visible(true);
-                m_aTableEntries.push_back(std::move(xEntry));
+                addEntryForGroup(AccessibilityCheckGroups::Table, nIndices, 
pIssue);
             }
             break;
             case sfx::AccessibilityIssueID::TEXT_FORMATTING:
             case sfx::AccessibilityIssueID::TABLE_FORMATTING:
             {
-                auto xEntry
-                    = 
std::make_unique<AccessibilityCheckEntry>(m_xBoxFormatting.get(), pIssue);
-                m_xBoxFormatting->reorder_child(xEntry->get_widget(), 
iFormatting++);
-                m_xExpanderFormatting->set_visible(true);
-                m_aFormattingEntries.push_back(std::move(xEntry));
+                addEntryForGroup(AccessibilityCheckGroups::Formatting, 
nIndices, pIssue);
             }
             break;
             case sfx::AccessibilityIssueID::HYPERLINK_IS_TEXT:
             case sfx::AccessibilityIssueID::HYPERLINK_SHORT:
             {
-                auto xEntry
-                    = 
std::make_unique<AccessibilityCheckEntry>(m_xBoxHyperlink.get(), pIssue);
-                m_xBoxHyperlink->reorder_child(xEntry->get_widget(), 
iHyperlink++);
-                m_xExpanderHyperlink->set_visible(true);
-                m_aHyperlinkEntries.push_back(std::move(xEntry));
+                addEntryForGroup(AccessibilityCheckGroups::Hyperlink, 
nIndices, pIssue);
             }
             break;
             case sfx::AccessibilityIssueID::FAKE_FOOTNOTE:
             case sfx::AccessibilityIssueID::FAKE_CAPTION:
             {
-                auto xEntry = 
std::make_unique<AccessibilityCheckEntry>(m_xBoxFakes.get(), pIssue);
-                m_xBoxFakes->reorder_child(xEntry->get_widget(), iFakes++);
-                m_xExpanderFakes->set_visible(true);
-                m_aFakesEntries.push_back(std::move(xEntry));
+                addEntryForGroup(AccessibilityCheckGroups::Fakes, nIndices, 
pIssue);
             }
             break;
             case sfx::AccessibilityIssueID::MANUAL_NUMBERING:
             {
-                auto xEntry
-                    = 
std::make_unique<AccessibilityCheckEntry>(m_xBoxNumbering.get(), pIssue);
-                m_xBoxNumbering->reorder_child(xEntry->get_widget(), 
iNumbering++);
-                m_xExpanderNumbering->set_visible(true);
-                m_aNumberingEntries.push_back(std::move(xEntry));
+                addEntryForGroup(AccessibilityCheckGroups::Numbering, 
nIndices, pIssue);
             }
             break;
             case sfx::AccessibilityIssueID::UNSPECIFIED:
             {
-                auto xEntry = 
std::make_unique<AccessibilityCheckEntry>(m_xBoxOther.get(), pIssue);
-                m_xBoxOther->reorder_child(xEntry->get_widget(), iOther++);
-                m_xExpanderOther->set_visible(true);
-                m_aOtherEntries.push_back(std::move(xEntry));
+                addEntryForGroup(AccessibilityCheckGroups::Other, nIndices, 
pIssue);
             }
             break;
             default:
@@ -348,6 +275,15 @@ void A11yCheckIssuesPanel::populateIssues()
             break;
         };
     }
+    size_t nGroupIndex = 0;
+    for (sal_Int32 nIndex : nIndices)
+    {
+        if (nIndex > 0)
+            m_xExpanders[nGroupIndex]->show();
+        else
+            m_xExpanders[nGroupIndex]->hide();
+        nGroupIndex++;
+    }
 }
 
 void A11yCheckIssuesPanel::NotifyItemUpdate(const sal_uInt16 nSid, const 
SfxItemState /* eState */,
diff --git a/sw/source/uibase/sidebar/A11yCheckIssuesPanel.hxx 
b/sw/source/uibase/sidebar/A11yCheckIssuesPanel.hxx
index 7f569e16ef85..519cd6b244e8 100644
--- a/sw/source/uibase/sidebar/A11yCheckIssuesPanel.hxx
+++ b/sw/source/uibase/sidebar/A11yCheckIssuesPanel.hxx
@@ -31,7 +31,7 @@ private:
     std::unique_ptr<weld::LinkButton> m_xGotoButton;
     std::unique_ptr<weld::Button> m_xFixButton;
 
-    std::shared_ptr<sfx::AccessibilityIssue> const& m_pAccessibilityIssue;
+    std::shared_ptr<sfx::AccessibilityIssue> m_pAccessibilityIssue;
 
 public:
     AccessibilityCheckEntry(weld::Container* pParent,
@@ -43,6 +43,21 @@ public:
     DECL_LINK(FixButtonClicked, weld::Button&, void);
 };
 
+enum class AccessibilityCheckGroups : size_t
+{
+    Document = 0,
+    Styles = 1,
+    Linked = 2,
+    NoAlt = 3,
+    Table = 4,
+    Formatting = 5,
+    Hyperlink = 6,
+    Fakes = 7,
+    Numbering = 8,
+    Other = 9,
+    LAST = Other
+};
+
 class A11yCheckIssuesPanel : public PanelLayout,
                              public 
::sfx2::sidebar::ControllerItem::ItemUpdateReceiverInterface
 {
@@ -60,40 +75,17 @@ public:
     virtual ~A11yCheckIssuesPanel() override;
 
 private:
-    std::vector<std::unique_ptr<AccessibilityCheckEntry>> m_aDocumentEntries;
-    std::vector<std::unique_ptr<AccessibilityCheckEntry>> m_aStylesEntries;
-    std::vector<std::unique_ptr<AccessibilityCheckEntry>> m_aLinkedEntries;
-    std::vector<std::unique_ptr<AccessibilityCheckEntry>> m_aNoAltEntries;
-    std::vector<std::unique_ptr<AccessibilityCheckEntry>> m_aTableEntries;
-    std::vector<std::unique_ptr<AccessibilityCheckEntry>> m_aFormattingEntries;
-    std::vector<std::unique_ptr<AccessibilityCheckEntry>> m_aHyperlinkEntries;
-    std::vector<std::unique_ptr<AccessibilityCheckEntry>> m_aFakesEntries;
-    std::vector<std::unique_ptr<AccessibilityCheckEntry>> m_aNumberingEntries;
-    std::vector<std::unique_ptr<AccessibilityCheckEntry>> m_aOtherEntries;
-    std::unique_ptr<weld::Expander> m_xExpanderDocument;
-    std::unique_ptr<weld::Expander> m_xExpanderStyles;
-    std::unique_ptr<weld::Expander> m_xExpanderLinked;
-    std::unique_ptr<weld::Expander> m_xExpanderNoAlt;
-    std::unique_ptr<weld::Expander> m_xExpanderTable;
-    std::unique_ptr<weld::Expander> m_xExpanderFormatting;
-    std::unique_ptr<weld::Expander> m_xExpanderHyperlink;
-    std::unique_ptr<weld::Expander> m_xExpanderFakes;
-    std::unique_ptr<weld::Expander> m_xExpanderNumbering;
-    std::unique_ptr<weld::Expander> m_xExpanderOther;
-    std::unique_ptr<weld::Box> m_xBoxDocument;
-    std::unique_ptr<weld::Box> m_xBoxStyles;
-    std::unique_ptr<weld::Box> m_xBoxLinked;
-    std::unique_ptr<weld::Box> m_xBoxNoAlt;
-    std::unique_ptr<weld::Box> m_xBoxTable;
-    std::unique_ptr<weld::Box> m_xBoxFormatting;
-    std::unique_ptr<weld::Box> m_xBoxHyperlink;
-    std::unique_ptr<weld::Box> m_xBoxFakes;
-    std::unique_ptr<weld::Box> m_xBoxNumbering;
-    std::unique_ptr<weld::Box> m_xBoxOther;
+    std::array<std::vector<std::unique_ptr<AccessibilityCheckEntry>>, 10> 
m_aEntries;
+    std::array<std::unique_ptr<weld::Expander>, 10> m_xExpanders;
+    std::array<std::unique_ptr<weld::Box>, 10> m_xBoxes;
+
     sfx::AccessibilityIssueCollection m_aIssueCollection;
-    void removeOldWidgets();
+    void removeAllEntries();
     void populateIssues();
 
+    void addEntryForGroup(AccessibilityCheckGroups eGroup, 
std::vector<sal_Int32>& rIndices,
+                          std::shared_ptr<sfx::AccessibilityIssue> const& 
pIssue);
+
     SfxBindings* mpBindings;
     SwDoc* mpDoc;
     ::sfx2::sidebar::ControllerItem maA11yCheckController;

Reply via email to