[Libreoffice-commits] core.git: include/svx svx/source sw/Library_sw.mk sw/source

Tomaž Vajngerl (via logerrit) logerrit at kemper.freedesktop.org
Sun Dec 29 16:01:37 UTC 2019


 include/svx/AccessibilityIssue.hxx             |    4 +
 svx/source/dialog/AccessibilityCheckDialog.cxx |    1 
 sw/Library_sw.mk                               |    1 
 sw/source/core/access/AccessibilityCheck.cxx   |   22 ++++++++-
 sw/source/core/access/AccessibilityIssue.cxx   |   58 +++++++++++++++++++++++++
 sw/source/core/inc/AccessibilityIssue.hxx      |   26 +++++++++--
 6 files changed, 104 insertions(+), 8 deletions(-)

New commits:
commit 1e34eadc148f60c039de1393345c49d94bf35417
Author:     Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
AuthorDate: Wed Dec 25 13:27:32 2019 +0100
Commit:     Tomaž Vajngerl <quikee at gmail.com>
CommitDate: Sun Dec 29 17:01:04 2019 +0100

    acc. check: implement goto for OLE/Graphic objects
    
    This implements goto function for Graphic/OLE objects that are
    reported in a AccessibilityIssue. So this enables to go to the
    object inside a document for which we have reported an
    accessibility issue.
    
    Change-Id: I699966b116a76ea032cb1acc9a431687fa204e07
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/85922
    Tested-by: Jenkins
    Reviewed-by: Tomaž Vajngerl <quikee at gmail.com>

diff --git a/include/svx/AccessibilityIssue.hxx b/include/svx/AccessibilityIssue.hxx
index b0508f5801b9..776e47ff7880 100644
--- a/include/svx/AccessibilityIssue.hxx
+++ b/include/svx/AccessibilityIssue.hxx
@@ -12,6 +12,9 @@
 #define INCLUDED_SVX_ACCESSIBILITYISSUE_HXX
 
 #include <svx/svxdllapi.h>
+#include <rtl/ustring.hxx>
+#include <vector>
+#include <memory>
 
 namespace svx
 {
@@ -31,6 +34,7 @@ public:
     {
     }
     virtual ~AccessibilityIssue() {}
+    virtual bool canGotoIssue() const = 0;
     virtual void gotoIssue() const = 0;
 
     AccessibilityIssueID m_eIssueID;
diff --git a/svx/source/dialog/AccessibilityCheckDialog.cxx b/svx/source/dialog/AccessibilityCheckDialog.cxx
index af96c09295d5..5864bd9661bf 100644
--- a/svx/source/dialog/AccessibilityCheckDialog.cxx
+++ b/svx/source/dialog/AccessibilityCheckDialog.cxx
@@ -23,6 +23,7 @@ AccessibilityCheckEntry::AccessibilityCheckEntry(
     , m_pAccessibilityIssue(rAccessibilityIssue)
 {
     m_xLabel->set_label(m_pAccessibilityIssue->m_aIssueText);
+    m_xGotoButton->set_visible(m_pAccessibilityIssue->canGotoIssue());
     m_xGotoButton->connect_clicked(LINK(this, AccessibilityCheckEntry, GotoButtonClicked));
     m_xContainer->show();
 }
diff --git a/sw/Library_sw.mk b/sw/Library_sw.mk
index acab4210994b..ec4c3ebc146e 100644
--- a/sw/Library_sw.mk
+++ b/sw/Library_sw.mk
@@ -96,6 +96,7 @@ $(eval $(call gb_Library_add_exception_objects,sw,\
     sw/source/core/SwNumberTree/SwNodeNum \
     sw/source/core/SwNumberTree/SwNumberTree \
     sw/source/core/access/AccessibilityCheck \
+    sw/source/core/access/AccessibilityIssue \
     sw/source/core/access/acccell \
     sw/source/core/access/acccontext \
     sw/source/core/access/accdoc \
diff --git a/sw/source/core/access/AccessibilityCheck.cxx b/sw/source/core/access/AccessibilityCheck.cxx
index dc82b4c17e48..606a47da0e6f 100644
--- a/sw/source/core/access/AccessibilityCheck.cxx
+++ b/sw/source/core/access/AccessibilityCheck.cxx
@@ -46,12 +46,14 @@ OUString sTextBlinking("Blinking text.");
 OUString sAvoidFootnotes("Avoid footnotes.");
 OUString sAvoidEndnotes("Avoid endnotes.");
 
-void lclAddIssue(svx::AccessibilityIssueCollection& rIssueCollection, OUString const& rText,
-                 svx::AccessibilityIssueID eIssue = svx::AccessibilityIssueID::UNSPECIFIED)
+std::shared_ptr<sw::AccessibilityIssue>
+lclAddIssue(svx::AccessibilityIssueCollection& rIssueCollection, OUString const& rText,
+            svx::AccessibilityIssueID eIssue = svx::AccessibilityIssueID::UNSPECIFIED)
 {
     auto pIssue = std::make_shared<sw::AccessibilityIssue>(eIssue);
     pIssue->m_aIssueText = rText;
     rIssueCollection.getIssues().push_back(pIssue);
+    return pIssue;
 }
 
 class BaseCheck
@@ -92,7 +94,21 @@ class NoTextNodeAltTextCheck : public NodeCheck
             OUString sName = pNoTextNode->GetFlyFormat()->GetName();
 
             OUString sIssueText = sNoAlt.replaceAll("%OBJECT_NAME%", sName);
-            lclAddIssue(m_rIssueCollection, sIssueText);
+
+            auto pIssue = lclAddIssue(m_rIssueCollection, sIssueText);
+
+            if (pNoTextNode->IsOLENode())
+            {
+                pIssue->setDoc(pNoTextNode->GetDoc());
+                pIssue->setIssueObject(IssueObject::OLE);
+                pIssue->setObjectID(pNoTextNode->GetFlyFormat()->GetName());
+            }
+            else if (pNoTextNode->IsGrfNode())
+            {
+                pIssue->setDoc(pNoTextNode->GetDoc());
+                pIssue->setIssueObject(IssueObject::GRAPHIC);
+                pIssue->setObjectID(pNoTextNode->GetFlyFormat()->GetName());
+            }
         }
     }
 
diff --git a/sw/source/core/access/AccessibilityIssue.cxx b/sw/source/core/access/AccessibilityIssue.cxx
new file mode 100644
index 000000000000..e4ce9f658f57
--- /dev/null
+++ b/sw/source/core/access/AccessibilityIssue.cxx
@@ -0,0 +1,58 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ */
+
+#include <AccessibilityIssue.hxx>
+#include <wrtsh.hxx>
+#include <docsh.hxx>
+
+namespace sw
+{
+AccessibilityIssue::AccessibilityIssue(svx::AccessibilityIssueID eIssueID)
+    : svx::AccessibilityIssue(eIssueID)
+    , m_eIssueObject(IssueObject::UNKNOWN)
+    , m_pDoc(nullptr)
+{
+}
+
+void AccessibilityIssue::setIssueObject(IssueObject eIssueObject) { m_eIssueObject = eIssueObject; }
+
+void AccessibilityIssue::setDoc(SwDoc* pDoc) { m_pDoc = pDoc; }
+
+void AccessibilityIssue::setObjectID(OUString const& rID) { m_sObjectID = rID; }
+
+bool AccessibilityIssue::canGotoIssue() const
+{
+    if (m_eIssueObject != IssueObject::UNKNOWN)
+        return true;
+    return false;
+}
+
+void AccessibilityIssue::gotoIssue() const
+{
+    if (!m_pDoc)
+        return;
+
+    switch (m_eIssueObject)
+    {
+        case IssueObject::GRAPHIC:
+        case IssueObject::OLE:
+        {
+            SwWrtShell* pWrtShell = m_pDoc->GetDocShell()->GetWrtShell();
+            pWrtShell->GotoFly(m_sObjectID, FLYCNTTYPE_ALL, true);
+        }
+        break;
+        default:
+            break;
+    }
+}
+
+} // end sw namespace
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/source/core/inc/AccessibilityIssue.hxx b/sw/source/core/inc/AccessibilityIssue.hxx
index afb5b57d6170..2d8776ac5c1f 100644
--- a/sw/source/core/inc/AccessibilityIssue.hxx
+++ b/sw/source/core/inc/AccessibilityIssue.hxx
@@ -12,17 +12,33 @@
 #define INCLUDED_SW_SOURCE_CORE_ACCESSIBILITYISSUE_HXX
 
 #include <svx/AccessibilityIssue.hxx>
+#include <doc.hxx>
 
 namespace sw
 {
+enum class IssueObject
+{
+    UNKNOWN,
+    GRAPHIC,
+    OLE,
+};
+
 class SW_DLLPUBLIC AccessibilityIssue final : public svx::AccessibilityIssue
 {
+private:
+    IssueObject m_eIssueObject;
+    SwDoc* m_pDoc;
+    OUString m_sObjectID;
+
 public:
-    AccessibilityIssue(svx::AccessibilityIssueID eIssueID = svx::AccessibilityIssueID::UNSPECIFIED)
-        : svx::AccessibilityIssue(eIssueID)
-    {
-    }
-    void gotoIssue() const override {}
+    AccessibilityIssue(svx::AccessibilityIssueID eIssueID = svx::AccessibilityIssueID::UNSPECIFIED);
+
+    void setIssueObject(IssueObject eIssueObject);
+    void setDoc(SwDoc* pDoc);
+    void setObjectID(OUString const& rID);
+
+    bool canGotoIssue() const override;
+    void gotoIssue() const override;
 };
 
 } // end sw namespace


More information about the Libreoffice-commits mailing list