sw/inc/editsh.hxx | 7 +++++++ sw/inc/strings.hrc | 4 ++++ sw/source/core/access/AccessibilityCheck.cxx | 11 +++++++++-- sw/source/core/access/AccessibilityIssue.cxx | 17 ++++++++++++++++- sw/source/core/inc/AccessibilityIssue.hxx | 1 + sw/source/uibase/inc/wrtsh.hxx | 1 + sw/source/uibase/wrtsh/wrtsh1.cxx | 11 +++++++++++ 7 files changed, 49 insertions(+), 3 deletions(-)
New commits: commit c5cde93cd4327f55fdd23e6230c2cb101192374d Author: Balazs Varga <balazs.varga.ext...@allotropia.de> AuthorDate: Wed Jun 7 12:21:24 2023 +0200 Commit: Samuel Mehrbrodt <samuel.mehrbr...@allotropia.de> CommitDate: Mon Jun 12 20:38:36 2023 +0200 tdf#155041 - A11Y sidebar: fix warning about missing form control description Add form control objects to "Go to" and "Fix" functions. In case of "Go to" a warning dialoge shows up if it is not in Design mode and ask to switch on Design mode or not. Change-Id: I79b6d67568e2ddfd121081d4c47ce7588f5d51b5 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/152698 Tested-by: Jenkins Reviewed-by: Samuel Mehrbrodt <samuel.mehrbr...@allotropia.de> diff --git a/sw/inc/editsh.hxx b/sw/inc/editsh.hxx index 41650792e10b..766e504b4072 100644 --- a/sw/inc/editsh.hxx +++ b/sw/inc/editsh.hxx @@ -637,6 +637,13 @@ public: return true; } + /// Switch to Design mode for Forms + virtual bool WarnSwitchToDesignModeDialog() const + { + // override in SwWrtShell + return false; + } + /** Query text within selection. */ void GetSelectedText( OUString &rBuf, ParaBreakType nHndlParaBreak = ParaBreakType::ToBlank ); diff --git a/sw/inc/strings.hrc b/sw/inc/strings.hrc index c18aff49639a..38ae2f61bff9 100644 --- a/sw/inc/strings.hrc +++ b/sw/inc/strings.hrc @@ -1469,6 +1469,10 @@ // in order to change %PRODUCTNAME at runtime is expensive, so limit doing that as much as possible. #define STR_A11Y_DESC_AUTO NC_("insertcaption|extended_tip|auto", "Opens the Caption dialog. It has the same information as the dialog you get by menu %PRODUCTNAME Writer - AutoCaption in the Options dialog box.") +#define STR_A11Y_DESIGN_MODE_TITLE NC_("STR_A11Y_DESIGN_MODE_TITLE", "The Forms are not editable") +#define STR_A11Y_DESIGN_MODE_PRIMARY NC_("STR_A11Y_DESIGN_MODE_PRIMARY", "Would you like to switch to Design mode?") +#define STR_A11Y_DESIGN_MODE_SECONDARY NC_("STR_A11Y_DESIGN_MODE_SECONDARY", "You need to switch to design mode to edit Forms.") + #define STR_MARK_COPY NC_("STR_MARK_COPY", "%1 Copy ") #define STR_INFORODLG_FOLDED_PRIMARY NC_("STR_INFORODLG_FOLDED_PRIMARY", "You are trying to delete folded (hidden) content.") diff --git a/sw/source/core/access/AccessibilityCheck.cxx b/sw/source/core/access/AccessibilityCheck.cxx index 302d26c9c06f..05d2634db863 100644 --- a/sw/source/core/access/AccessibilityCheck.cxx +++ b/sw/source/core/access/AccessibilityCheck.cxx @@ -1360,9 +1360,11 @@ void AccessibilityCheck::checkObject(SdrObject* pObject) lclAddIssue(m_aIssueCollection, SwResId(STR_FLOATING_TEXT)); const SdrObjKind nObjId = pObject->GetObjIdentifier(); + const SdrInventor nInv = pObject->GetObjInventor(); if (nObjId == SdrObjKind::CustomShape || nObjId == SdrObjKind::Text - || nObjId == SdrObjKind::Media || nObjId == SdrObjKind::Group) + || nObjId == SdrObjKind::Media || nObjId == SdrObjKind::Group + || nInv == SdrInventor::FmForm) { OUString sAlternative = pObject->GetTitle(); if (sAlternative.isEmpty()) @@ -1371,7 +1373,12 @@ void AccessibilityCheck::checkObject(SdrObject* pObject) OUString sIssueText = SwResId(STR_NO_ALT).replaceAll("%OBJECT_NAME%", sName); auto pIssue = lclAddIssue(m_aIssueCollection, sIssueText, sfx::AccessibilityIssueID::NO_ALT_SHAPE); - pIssue->setIssueObject(IssueObject::SHAPE); + // Set FORM Issue for Form objects because of the design mode + if (nInv == SdrInventor::FmForm) + pIssue->setIssueObject(IssueObject::FORM); + else + pIssue->setIssueObject(IssueObject::SHAPE); + pIssue->setObjectID(pObject->GetName()); pIssue->setDoc(*m_pDoc); } diff --git a/sw/source/core/access/AccessibilityIssue.cxx b/sw/source/core/access/AccessibilityIssue.cxx index 7f09b9d7cf05..d1ebb53bdeeb 100644 --- a/sw/source/core/access/AccessibilityIssue.cxx +++ b/sw/source/core/access/AccessibilityIssue.cxx @@ -71,6 +71,20 @@ void AccessibilityIssue::gotoIssue() const pWrtShell->ShowCursor(); } break; + case IssueObject::FORM: + { + SwWrtShell* pWrtShell = m_pDoc->GetDocShell()->GetWrtShell(); + bool bIsDesignMode = pWrtShell->GetView().GetFormShell()->IsDesignMode(); + if (bIsDesignMode || (!bIsDesignMode && pWrtShell->WarnSwitchToDesignModeDialog())) + { + if (!bIsDesignMode) + pWrtShell->GetView().GetFormShell()->SetDesignMode(true); + pWrtShell->GotoDrawingObject(m_sObjectID); + if (comphelper::LibreOfficeKit::isActive()) + pWrtShell->ShowCursor(); + } + } + break; case IssueObject::TABLE: { SwWrtShell* pWrtShell = m_pDoc->GetDocShell()->GetWrtShell(); @@ -105,7 +119,7 @@ void AccessibilityIssue::gotoIssue() const bool AccessibilityIssue::canQuickFixIssue() const { return m_eIssueObject == IssueObject::GRAPHIC || m_eIssueObject == IssueObject::OLE - || m_eIssueObject == IssueObject::SHAPE; + || m_eIssueObject == IssueObject::SHAPE || m_eIssueObject == IssueObject::FORM; } void AccessibilityIssue::quickFixIssue() const @@ -130,6 +144,7 @@ void AccessibilityIssue::quickFixIssue() const } break; case IssueObject::SHAPE: + case IssueObject::FORM: { OUString aDesc = SwResId(STR_ENTER_ALT); SvxNameDialog aNameDialog(m_pParent, "", aDesc); diff --git a/sw/source/core/inc/AccessibilityIssue.hxx b/sw/source/core/inc/AccessibilityIssue.hxx index 208f2656d0f5..5a51ba2110a1 100644 --- a/sw/source/core/inc/AccessibilityIssue.hxx +++ b/sw/source/core/inc/AccessibilityIssue.hxx @@ -22,6 +22,7 @@ enum class IssueObject GRAPHIC, OLE, SHAPE, + FORM, TABLE, TEXT, }; diff --git a/sw/source/uibase/inc/wrtsh.hxx b/sw/source/uibase/inc/wrtsh.hxx index b1834093e8d1..4edbca99a3c1 100644 --- a/sw/source/uibase/inc/wrtsh.hxx +++ b/sw/source/uibase/inc/wrtsh.hxx @@ -516,6 +516,7 @@ typedef bool (SwWrtShell::*FNSimpleMove)(); bool HasFoldedOutlineContentSelected() const; virtual void InfoReadOnlyDialog(bool bAsync) const override; virtual bool WarnHiddenSectionDialog() const override; + virtual bool WarnSwitchToDesignModeDialog() const override; std::optional<OString> getLOKPayload(int nType, int nViewId) const; diff --git a/sw/source/uibase/wrtsh/wrtsh1.cxx b/sw/source/uibase/wrtsh/wrtsh1.cxx index 9ffab76d1444..7a39048fec5f 100644 --- a/sw/source/uibase/wrtsh/wrtsh1.cxx +++ b/sw/source/uibase/wrtsh/wrtsh1.cxx @@ -2710,4 +2710,15 @@ bool SwWrtShell::WarnHiddenSectionDialog() const return (RET_YES == xQuery->run()); } +bool SwWrtShell::WarnSwitchToDesignModeDialog() const +{ + std::unique_ptr<weld::MessageDialog> xQuery(Application::CreateMessageDialog(nullptr, + VclMessageType::Question, VclButtonsType::YesNo, SwResId(STR_A11Y_DESIGN_MODE_PRIMARY))); + xQuery->set_default_response(RET_YES); + xQuery->set_title(SwResId(STR_A11Y_DESIGN_MODE_TITLE)); + xQuery->set_secondary_text(SwResId(STR_A11Y_DESIGN_MODE_SECONDARY)); + + return (RET_YES == xQuery->run()); +} + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */