officecfg/registry/data/org/openoffice/Office/UI/WriterCommands.xcu | 8 +++ sw/inc/cmdid.h | 1 sw/inc/strings.hrc | 1 sw/qa/uibase/wrtsh/wrtsh.cxx | 21 ++++++++++ sw/sdi/_textsh.sdi | 6 ++ sw/sdi/swriter.sdi | 17 ++++++++ sw/source/uibase/shells/textsh.cxx | 5 ++ sw/source/uibase/uiview/view.cxx | 1 sw/source/uibase/wrtsh/wrtsh1.cxx | 18 ++++++++ sw/uiconfig/swriter/menubar/menubar.xml | 1 sw/uiconfig/swriter/menubar/mscompatibleformsmenu.xml | 2 11 files changed, 79 insertions(+), 2 deletions(-)
New commits: commit 5f335154459e044b6035f099a3e08c98fe258d2b Author: Miklos Vajna <vmik...@collabora.com> AuthorDate: Tue May 31 09:29:54 2022 +0200 Commit: Miklos Vajna <vmik...@collabora.com> CommitDate: Tue May 31 14:39:26 2022 +0200 sw content controls, date: add insert UI - handle the date case in SwWrtShell::InsertContentControl() - expose this as a new .uno:InsertDateContentControl command - add the new uno command to the default & MS-compatible menus - hide the old .uno:DatePickerFormField from the menus that has the problems described in the sw::mark::DateFieldmark documentation. Change-Id: If3c1050d6a8302be0da4a11067a67805396dec48 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/135153 Reviewed-by: Miklos Vajna <vmik...@collabora.com> Tested-by: Jenkins diff --git a/officecfg/registry/data/org/openoffice/Office/UI/WriterCommands.xcu b/officecfg/registry/data/org/openoffice/Office/UI/WriterCommands.xcu index 2ca80032ed48..7c7dede5e219 100644 --- a/officecfg/registry/data/org/openoffice/Office/UI/WriterCommands.xcu +++ b/officecfg/registry/data/org/openoffice/Office/UI/WriterCommands.xcu @@ -659,6 +659,14 @@ <value>1</value> </prop> </node> + <node oor:name=".uno:InsertDateContentControl" oor:op="replace"> + <prop oor:name="Label" oor:type="xs:string"> + <value xml:lang="en-US">Insert Date Content Control</value> + </prop> + <prop oor:name="Properties" oor:type="xs:int"> + <value>1</value> + </prop> + </node> <node oor:name=".uno:InsertObjectDialog" oor:op="replace"> <prop oor:name="Label" oor:type="xs:string"> <value xml:lang="en-US">Insert Other Objects</value> diff --git a/sw/inc/cmdid.h b/sw/inc/cmdid.h index 8b102cae3bf1..ec35e740b42f 100644 --- a/sw/inc/cmdid.h +++ b/sw/inc/cmdid.h @@ -224,6 +224,7 @@ class SwUINumRuleItem; #define FN_INSERT_DROPDOWN_CONTENT_CONTROL (FN_INSERT + 24) /* Dropdown content control */ #define FN_CONTENT_CONTROL_PROPERTIES (FN_INSERT + 25) /* Content control properties */ #define FN_INSERT_PICTURE_CONTENT_CONTROL (FN_INSERT + 26) /* Picture content control */ +#define FN_INSERT_DATE_CONTENT_CONTROL (FN_INSERT + 27) /* Date content control */ #define FN_POSTIT (FN_INSERT + 29) /* Insert/edit PostIt */ #define FN_INSERT_TABLE (FN_INSERT + 30) /* Insert Table */ #define FN_INSERT_STRING (FN_INSERT+31) diff --git a/sw/inc/strings.hrc b/sw/inc/strings.hrc index 4136c2bce029..5a2ff72b0b3b 100644 --- a/sw/inc/strings.hrc +++ b/sw/inc/strings.hrc @@ -1431,6 +1431,7 @@ #define STR_WRAP_PANEL_CUSTOM_STR NC_("sidebarwrap|customlabel", "Custom") #define STR_CONTENT_CONTROL_PLACEHOLDER NC_("STR_CONTENT_CONTROL_PLACEHOLDER", "Click here to enter text") #define STR_DROPDOWN_CONTENT_CONTROL_PLACEHOLDER NC_("STR_DROPDOWN_CONTENT_CONTROL_PLACEHOLDER", "Choose an item") +#define STR_DATE_CONTENT_CONTROL_PLACEHOLDER NC_("STR_DATE_CONTENT_CONTROL_PLACEHOLDER", "Choose a date") #endif diff --git a/sw/qa/uibase/wrtsh/wrtsh.cxx b/sw/qa/uibase/wrtsh/wrtsh.cxx index 706e1c6653a7..87537e887242 100644 --- a/sw/qa/uibase/wrtsh/wrtsh.cxx +++ b/sw/qa/uibase/wrtsh/wrtsh.cxx @@ -346,6 +346,27 @@ CPPUNIT_TEST_FIXTURE(Test, testSelectDateContentControl) CPPUNIT_ASSERT_EQUAL(OUString("2022-05-24T00:00:00Z"), rFormatContentControl.GetContentControl()->GetCurrentDate()); } + +CPPUNIT_TEST_FIXTURE(Test, testInsertDateContentControl) +{ + // Given an empty document: + SwDoc* pDoc = createSwDoc(); + + // When inserting a date content control: + SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell(); + pWrtShell->InsertContentControl(SwContentControlType::DATE); + + // Then make sure that the matching text attribute is added to the document model: + SwTextNode* pTextNode = pWrtShell->GetCursor()->GetNode().GetTextNode(); + SwTextAttr* pAttr = pTextNode->GetTextAttrForCharAt(0, RES_TXTATR_CONTENTCONTROL); + auto pTextContentControl = static_txtattr_cast<SwTextContentControl*>(pAttr); + auto& rFormatContentControl + = static_cast<SwFormatContentControl&>(pTextContentControl->GetAttr()); + std::shared_ptr<SwContentControl> pContentControl = rFormatContentControl.GetContentControl(); + // Without the accompanying fix in place, this test would have failed, there was no special + // handling for date content control. + CPPUNIT_ASSERT(pContentControl->GetDate()); +} } CPPUNIT_PLUGIN_IMPLEMENT(); diff --git a/sw/sdi/_textsh.sdi b/sw/sdi/_textsh.sdi index 6f6ad01a1536..55d515d944a0 100644 --- a/sw/sdi/_textsh.sdi +++ b/sw/sdi/_textsh.sdi @@ -296,6 +296,12 @@ interface BaseText StateMethod = NoState ; DisableFlags="SfxDisableFlags::SwOnProtectedCursor"; ] + FN_INSERT_DATE_CONTENT_CONTROL // status(final|play) + [ + ExecMethod = ExecInsert ; + StateMethod = NoState ; + DisableFlags="SfxDisableFlags::SwOnProtectedCursor"; + ] FN_CONTENT_CONTROL_PROPERTIES // status(final|play) [ ExecMethod = ExecInsert ; diff --git a/sw/sdi/swriter.sdi b/sw/sdi/swriter.sdi index 285f1fdfa7e4..bf4ed3ec8b25 100644 --- a/sw/sdi/swriter.sdi +++ b/sw/sdi/swriter.sdi @@ -3100,6 +3100,23 @@ SfxVoidItem InsertPictureContentControl FN_INSERT_PICTURE_CONTENT_CONTROL GroupId = SfxGroupId::Insert; ] +SfxVoidItem InsertDateContentControl FN_INSERT_DATE_CONTENT_CONTROL +() +[ + AutoUpdate = FALSE, + FastCall = FALSE, + ReadOnlyDoc = FALSE, + Toggle = FALSE, + Container = FALSE, + RecordAbsolute = FALSE, + RecordPerSet; + + AccelConfig = TRUE, + MenuConfig = TRUE, + ToolBoxConfig = TRUE, + GroupId = SfxGroupId::Insert; +] + SfxVoidItem ContentControlProperties FN_CONTENT_CONTROL_PROPERTIES () [ diff --git a/sw/source/uibase/shells/textsh.cxx b/sw/source/uibase/shells/textsh.cxx index ded35969ff39..cb0ebc60b2ee 100644 --- a/sw/source/uibase/shells/textsh.cxx +++ b/sw/source/uibase/shells/textsh.cxx @@ -239,6 +239,11 @@ void SwTextShell::ExecInsert(SfxRequest &rReq) rReq.Done(); break; + case FN_INSERT_DATE_CONTENT_CONTROL: + rSh.InsertContentControl(SwContentControlType::DATE); + rReq.Done(); + break; + case FN_CONTENT_CONTROL_PROPERTIES: { SwWrtShell& rWrtSh = GetShell(); diff --git a/sw/source/uibase/uiview/view.cxx b/sw/source/uibase/uiview/view.cxx index 359e1b27fa49..4159b8714a7c 100644 --- a/sw/source/uibase/uiview/view.cxx +++ b/sw/source/uibase/uiview/view.cxx @@ -594,6 +594,7 @@ void SwView::CheckReadonlyState() FN_INSERT_BREAK, FN_INSERT_LINEBREAK, FN_INSERT_COLUMN_BREAK, FN_INSERT_BREAK_DLG, FN_INSERT_CONTENT_CONTROL, FN_INSERT_CHECKBOX_CONTENT_CONTROL, FN_INSERT_DROPDOWN_CONTENT_CONTROL, FN_INSERT_PICTURE_CONTENT_CONTROL, + FN_INSERT_DATE_CONTENT_CONTROL, FN_DELETE_SENT, FN_DELETE_BACK_SENT, FN_DELETE_WORD, FN_DELETE_BACK_WORD, FN_DELETE_LINE, FN_DELETE_BACK_LINE, FN_DELETE_PARA, FN_DELETE_BACK_PARA, FN_DELETE_WHOLE_LINE, diff --git a/sw/source/uibase/wrtsh/wrtsh1.cxx b/sw/source/uibase/wrtsh/wrtsh1.cxx index 3756df8a9781..4940e24cf24b 100644 --- a/sw/source/uibase/wrtsh/wrtsh1.cxx +++ b/sw/source/uibase/wrtsh/wrtsh1.cxx @@ -104,6 +104,8 @@ #include <comphelper/lok.hxx> #include <comphelper/propertyvalue.hxx> #include <svtools/optionsdrawinglayer.hxx> +#include <svl/numformat.hxx> +#include <svl/zformat.hxx> #include <memory> #include <frmtool.hxx> @@ -1031,7 +1033,6 @@ void SwWrtShell::InsertContentControl(SwContentControlType eType) switch (eType) { case SwContentControlType::RICH_TEXT: - case SwContentControlType::DATE: { pContentControl->SetShowingPlaceHolder(true); if (!HasSelection()) @@ -1106,6 +1107,21 @@ void SwWrtShell::InsertContentControl(SwContentControlType eType) Left(CRSR_SKIP_CHARS, /*bSelect=*/true, 1, /*bBasicCall=*/false); break; } + case SwContentControlType::DATE: + { + pContentControl->SetShowingPlaceHolder(true); + pContentControl->SetDate(true); + SvNumberFormatter* pFormatter = GetDoc()->GetNumberFormatter(); + sal_uInt32 nStandardFormat = pFormatter->GetStandardFormat(SvNumFormatType::DATE); + const SvNumberformat* pFormat = pFormatter->GetEntry(nStandardFormat); + pContentControl->SetDateFormat(pFormat->GetFormatstring()); + pContentControl->SetDateLanguage(LanguageTag(pFormat->GetLanguage()).getBcp47()); + if (!HasSelection()) + { + aPlaceholder = SwResId(STR_DATE_CONTENT_CONTROL_PLACEHOLDER); + } + break; + } } if (aPlaceholder.getLength()) { diff --git a/sw/uiconfig/swriter/menubar/menubar.xml b/sw/uiconfig/swriter/menubar/menubar.xml index 9ed30d1bf492..12df19d9c32c 100644 --- a/sw/uiconfig/swriter/menubar/menubar.xml +++ b/sw/uiconfig/swriter/menubar/menubar.xml @@ -716,6 +716,7 @@ <menu:menuitem menu:id=".uno:InsertPictureContentControl"/> <menu:menuitem menu:id=".uno:InsertCheckboxContentControl"/> <menu:menuitem menu:id=".uno:InsertDropdownContentControl"/> + <menu:menuitem menu:id=".uno:InsertDateContentControl"/> <menu:menuitem menu:id=".uno:ContentControlProperties"/> </menu:menupopup> </menu:menu> diff --git a/sw/uiconfig/swriter/menubar/mscompatibleformsmenu.xml b/sw/uiconfig/swriter/menubar/mscompatibleformsmenu.xml index cc4483cda320..1e66cd782a8f 100644 --- a/sw/uiconfig/swriter/menubar/mscompatibleformsmenu.xml +++ b/sw/uiconfig/swriter/menubar/mscompatibleformsmenu.xml @@ -19,7 +19,7 @@ <menu:menuitem menu:id=".uno:InsertPictureContentControl"/> <menu:menuitem menu:id=".uno:InsertCheckboxContentControl"/> <menu:menuitem menu:id=".uno:InsertDropdownContentControl"/> - <menu:menuitem menu:id=".uno:DatePickerFormField"/> + <menu:menuitem menu:id=".uno:InsertDateContentControl"/> <menu:menuitem menu:id=".uno:ContentControlProperties"/> </menu:menupopup> </menu:menu>