sw/inc/strings.hrc                                       |    1 
 sw/sdi/swriter.sdi                                       |    2 
 sw/source/uibase/inc/AccessibilityStatusBarControl.hxx   |    7 +-
 sw/source/uibase/uiview/view2.cxx                        |   16 +----
 sw/source/uibase/utlui/AccessibilityStatusBarControl.cxx |   45 +++++++++++++--
 sw/uiconfig/sglobal/statusbar/statusbar.xml              |    2 
 sw/uiconfig/swriter/statusbar/statusbar.xml              |    2 
 7 files changed, 53 insertions(+), 22 deletions(-)

New commits:
commit de9320f7fc86c1421ff59eb218a04c6c90049c39
Author:     Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk>
AuthorDate: Wed Oct 26 22:02:44 2022 +0200
Commit:     Tomaž Vajngerl <qui...@gmail.com>
CommitDate: Sat Dec 24 12:15:51 2022 +0000

    sw: improve a11y check statusbar
    
    Change-Id: I86f589d6618ae80f26542cf83b6b5e3695ca35f8
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/142193
    Tested-by: Jenkins
    Reviewed-by: Tomaž Vajngerl <qui...@gmail.com>
    (cherry picked from commit e96dd14288172187372b3a4f82de870b1d660020)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/144494
    Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com>

diff --git a/sw/inc/strings.hrc b/sw/inc/strings.hrc
index 5748ba7122ff..b4b03968a1eb 100644
--- a/sw/inc/strings.hrc
+++ b/sw/inc/strings.hrc
@@ -1087,6 +1087,7 @@
 #define STR_BOOKCTRL_HINT                       NC_("STR_BOOKCTRL_HINT", "Page 
number in document. Click to open Go to Page dialog or right-click for bookmark 
list.")
 #define STR_BOOKCTRL_HINT_EXTENDED              
NC_("STR_BOOKCTRL_HINT_EXTENDED", "Page number in document (Page number on 
printed document). Click to open Go to Page dialog.")
 #define STR_TMPLCTRL_HINT                       NC_("STR_TMPLCTRL_HINT", "Page 
Style. Right-click to change style or click to open Style dialog.")
+#define STR_ACCESSIBILITY_CHECK_HINT            
NC_("STR_ACCESSIBILITY_CHECK_HINT", "Status of the accessibility check.")
 
 // Strings for textual attributes.
 #define STR_DROP_OVER                           NC_("STR_DROP_OVER", "Drop 
Caps over")
diff --git a/sw/sdi/swriter.sdi b/sw/sdi/swriter.sdi
index f001b70ebb90..bc58977788a4 100644
--- a/sw/sdi/swriter.sdi
+++ b/sw/sdi/swriter.sdi
@@ -5970,7 +5970,7 @@ SfxStringItem StateWordCount FN_STAT_WORDCOUNT
     GroupId = SfxGroupId::View;
 ]
 
-SfxStringItem StateAccessibilityCheck FN_STAT_ACCESSIBILITY_CHECK
+SfxInt32Item StateAccessibilityCheck FN_STAT_ACCESSIBILITY_CHECK
 
 [
     AutoUpdate = FALSE,
diff --git a/sw/source/uibase/inc/AccessibilityStatusBarControl.hxx 
b/sw/source/uibase/inc/AccessibilityStatusBarControl.hxx
index 52e64b99f5ac..63744499d083 100644
--- a/sw/source/uibase/inc/AccessibilityStatusBarControl.hxx
+++ b/sw/source/uibase/inc/AccessibilityStatusBarControl.hxx
@@ -15,14 +15,17 @@ namespace sw
 {
 class AccessibilityStatusBarControl final : public SfxStatusBarControl
 {
+    sal_Int32 mnIssues;
+
 public:
     SFX_DECL_STATUSBAR_CONTROL();
 
     AccessibilityStatusBarControl(sal_uInt16 nSlotId, sal_uInt16 nId, 
StatusBar& rStb);
     virtual ~AccessibilityStatusBarControl() override;
 
-    virtual void StateChangedAtStatusBarControl(sal_uInt16 nSID, SfxItemState 
eState,
-                                                const SfxPoolItem* pState) 
override;
+    void StateChangedAtStatusBarControl(sal_uInt16 nSID, SfxItemState eState,
+                                        const SfxPoolItem* pState) override;
+    void Paint(const UserDrawEvent& rEvent) override;
 };
 
 } // end sw
diff --git a/sw/source/uibase/uiview/view2.cxx 
b/sw/source/uibase/uiview/view2.cxx
index 3472bf63ef0e..a5cdc27fd059 100644
--- a/sw/source/uibase/uiview/view2.cxx
+++ b/sw/source/uibase/uiview/view2.cxx
@@ -1614,19 +1614,11 @@ void SwView::StateStatusLine(SfxItemSet &rSet)
             break;
             case FN_STAT_ACCESSIBILITY_CHECK:
             {
-                if (rShell.GetDoc()->getOnlineAccessibilityCheck())
+                std::unique_ptr<sw::OnlineAccessibilityCheck> const& 
rOnlineAccessibilityCheck = rShell.GetDoc()->getOnlineAccessibilityCheck();
+                if (rOnlineAccessibilityCheck)
                 {
-                    auto nIssues = 
rShell.GetDoc()->getOnlineAccessibilityCheck()->getNumberOfAccessibilityIssues();
-                    OUString aString;
-                    if (nIssues > 0)
-                    {
-                        aString = u"Issues: " + OUString::number(nIssues);
-                    }
-                    else
-                    {
-                        aString = u"No Issues";
-                    }
-                    rSet.Put(SfxStringItem(FN_STAT_ACCESSIBILITY_CHECK, 
aString));
+                    sal_Int32 nIssues = 
rOnlineAccessibilityCheck->getNumberOfAccessibilityIssues();
+                    rSet.Put(SfxInt32Item(FN_STAT_ACCESSIBILITY_CHECK, 
nIssues));
                 }
             }
             break;
diff --git a/sw/source/uibase/utlui/AccessibilityStatusBarControl.cxx 
b/sw/source/uibase/utlui/AccessibilityStatusBarControl.cxx
index 55daee5d31d9..100313f709b1 100644
--- a/sw/source/uibase/utlui/AccessibilityStatusBarControl.cxx
+++ b/sw/source/uibase/utlui/AccessibilityStatusBarControl.cxx
@@ -10,16 +10,18 @@
 #include <swtypes.hxx>
 #include <strings.hrc>
 #include <AccessibilityStatusBarControl.hxx>
-#include <svl/stritem.hxx>
+#include <svl/intitem.hxx>
 #include <vcl/status.hxx>
+#include <vcl/event.hxx>
 
-SFX_IMPL_STATUSBAR_CONTROL(sw::AccessibilityStatusBarControl, SfxStringItem);
+SFX_IMPL_STATUSBAR_CONTROL(sw::AccessibilityStatusBarControl, SfxInt32Item);
 
 namespace sw
 {
 AccessibilityStatusBarControl::AccessibilityStatusBarControl(sal_uInt16 
_nSlotId, sal_uInt16 _nId,
                                                              StatusBar& rStb)
     : SfxStatusBarControl(_nSlotId, _nId, rStb)
+    , mnIssues(0)
 {
 }
 
@@ -29,18 +31,51 @@ void 
AccessibilityStatusBarControl::StateChangedAtStatusBarControl(sal_uInt16 /*
                                                                    
SfxItemState eState,
                                                                    const 
SfxPoolItem* pState)
 {
+    if (eState != SfxItemState::DEFAULT)
+    {
+        mnIssues = -1;
+    }
+    else if (auto pItem = dynamic_cast<const SfxInt32Item*>(pState))
+    {
+        mnIssues = pItem->GetValue();
+    }
+    else
+    {
+        mnIssues = -1;
+    }
+
+    GetStatusBar().SetItemData(GetId(), nullptr); // necessary ?
+    GetStatusBar().SetItemText(GetId(), ""); // necessary ?
+
     if (eState == SfxItemState::DEFAULT) // Can access pState
     {
-        GetStatusBar().SetItemText(GetId(), static_cast<const 
SfxStringItem*>(pState)->GetValue());
-        GetStatusBar().SetQuickHelpText(GetId(), SwResId(STR_WORDCOUNT_HINT));
+        GetStatusBar().SetQuickHelpText(GetId(), 
SwResId(STR_ACCESSIBILITY_CHECK_HINT));
     }
     else
     {
-        GetStatusBar().SetItemText(GetId(), u"");
         GetStatusBar().SetQuickHelpText(GetId(), u"");
     }
 }
 
+void AccessibilityStatusBarControl::Paint(const UserDrawEvent& rUserEvent)
+{
+    vcl::RenderContext* pRenderContext = rUserEvent.GetRenderContext();
+
+    tools::Rectangle aRect = rUserEvent.GetRect();
+    Color aOldLineColor = pRenderContext->GetLineColor();
+    Color aOldFillColor = pRenderContext->GetFillColor();
+
+    if (mnIssues > 0)
+        pRenderContext->SetFillColor(COL_RED);
+    else
+        pRenderContext->SetFillColor(COL_GREEN);
+
+    pRenderContext->DrawRect(aRect);
+
+    pRenderContext->SetLineColor(aOldLineColor);
+    pRenderContext->SetFillColor(aOldFillColor);
+}
+
 } // end sw
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/uiconfig/sglobal/statusbar/statusbar.xml 
b/sw/uiconfig/sglobal/statusbar/statusbar.xml
index 2f2e54f21c6d..18f6871a3ac6 100644
--- a/sw/uiconfig/sglobal/statusbar/statusbar.xml
+++ b/sw/uiconfig/sglobal/statusbar/statusbar.xml
@@ -20,7 +20,7 @@
 <statusbar:statusbar xmlns:statusbar="http://openoffice.org/2001/statusbar"; 
xmlns:xlink="http://www.w3.org/1999/xlink";>
  <statusbar:statusbaritem xlink:href=".uno:StatePageNumber" 
statusbar:align="left" statusbar:autosize="true" statusbar:mandatory="true" 
statusbar:width="54"/>
  <statusbar:statusbaritem xlink:href=".uno:StateWordCount" 
statusbar:align="left" statusbar:autosize="true"/>
- <statusbar:statusbaritem xlink:href=".uno:StateAccessibilityCheck" 
statusbar:align="left" statusbar:width="50"/>
+ <statusbar:statusbaritem xlink:href=".uno:StateAccessibilityCheck" 
statusbar:align="left" statusbar:ownerdraw="true" statusbar:width="32"/>
  <statusbar:statusbaritem xlink:href=".uno:PageStyleName" 
statusbar:align="left" statusbar:autosize="true" statusbar:width="79"/>
  <statusbar:statusbaritem xlink:href=".uno:LanguageStatus" 
statusbar:align="center" statusbar:autosize="true" statusbar:mandatory="false" 
statusbar:width="100"/>
  <statusbar:statusbaritem xlink:href=".uno:InsertMode" 
statusbar:align="center" statusbar:mandatory="false" statusbar:width="55"/>
diff --git a/sw/uiconfig/swriter/statusbar/statusbar.xml 
b/sw/uiconfig/swriter/statusbar/statusbar.xml
index 090c44b1f941..09a7f76abb98 100644
--- a/sw/uiconfig/swriter/statusbar/statusbar.xml
+++ b/sw/uiconfig/swriter/statusbar/statusbar.xml
@@ -21,7 +21,7 @@
  <statusbar:statusbaritem xlink:href=".uno:ModifiedStatus" 
statusbar:align="center" statusbar:ownerdraw="true" statusbar:mandatory="true" 
statusbar:width="16"/>
  <statusbar:statusbaritem xlink:href=".uno:StatePageNumber" 
statusbar:align="left" statusbar:autosize="true" statusbar:mandatory="true" 
statusbar:width="54"/>
  <statusbar:statusbaritem xlink:href=".uno:StateWordCount" 
statusbar:align="left" statusbar:autosize="true"/>
-<statusbar:statusbaritem xlink:href=".uno:StateAccessibilityCheck" 
statusbar:align="left" statusbar:width="50"/>
+ <statusbar:statusbaritem xlink:href=".uno:StateAccessibilityCheck" 
statusbar:align="left" statusbar:ownerdraw="true" statusbar:width="32"/>
  <statusbar:statusbaritem xlink:href=".uno:PageStyleName" 
statusbar:align="left" statusbar:autosize="true" statusbar:width="79"/>
  <statusbar:statusbaritem xlink:href=".uno:LanguageStatus" 
statusbar:align="center" statusbar:autosize="true" statusbar:mandatory="false" 
statusbar:width="100"/>
  <statusbar:statusbaritem xlink:href=".uno:InsertMode" 
statusbar:align="center" statusbar:mandatory="false" statusbar:width="55"/>

Reply via email to