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 <vmiklos@collabora.com> Tested-by: Jenkins
This commit is contained in:
@@ -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>
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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 ;
|
||||
|
||||
@@ -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
|
||||
()
|
||||
[
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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())
|
||||
{
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user