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"/>