summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTamás Zolnai <tamas.zolnai@collabora.com>2019-05-31 17:55:10 +0200
committerTamás Zolnai <tamas.zolnai@collabora.com>2019-07-17 11:39:58 +0200
commit6ecf9b6a058a095fac2d43e31d6f59a71957a085 (patch)
tree01e2e1a9086b35ec82fea8417d43c8ef42da9d4c
parent25d534c90e5cdb6b443b4f51eef88b4476c2295c (diff)
MSForms: Insert text-based date field from MS compatible Forms menu
Reviewed-on: https://gerrit.libreoffice.org/75438 Reviewed-by: Tamás Zolnai <tamas.zolnai@collabora.com> Tested-by: Tamás Zolnai <tamas.zolnai@collabora.com> (cherry picked from commit 75099d6788672a98389d8592b88777c8d3a25fa6) Change-Id: I2f08fa806dc55a185adf67ca616af8d81bb23bda
-rw-r--r--officecfg/registry/data/org/openoffice/Office/UI/GenericCommands.xcu8
-rw-r--r--sw/inc/cmdid.h2
-rw-r--r--sw/qa/extras/uiwriter/uiwriter2.cxx34
-rw-r--r--sw/sdi/_textsh.sdi6
-rw-r--r--sw/sdi/swriter.sdi18
-rw-r--r--sw/source/uibase/shells/textfld.cxx16
-rw-r--r--sw/uiconfig/swriter/menubar/mscompatibleformsmenu.xml2
7 files changed, 85 insertions, 1 deletions
diff --git a/officecfg/registry/data/org/openoffice/Office/UI/GenericCommands.xcu b/officecfg/registry/data/org/openoffice/Office/UI/GenericCommands.xcu
index bb4e841388ca..63835b385892 100644
--- a/officecfg/registry/data/org/openoffice/Office/UI/GenericCommands.xcu
+++ b/officecfg/registry/data/org/openoffice/Office/UI/GenericCommands.xcu
@@ -6340,6 +6340,14 @@
<value>1</value>
</prop>
</node>
+ <node oor:name=".uno:DatePickerFormField" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="en-US">Date Picker Content Control</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
</node>
<node oor:name="Popups">
<node oor:name=".uno:PasteSpecialMenu" oor:op="replace">
diff --git a/sw/inc/cmdid.h b/sw/inc/cmdid.h
index 2e48818cff90..9b5242367c75 100644
--- a/sw/inc/cmdid.h
+++ b/sw/inc/cmdid.h
@@ -277,6 +277,8 @@
#define FN_INSERT_CHECKBOX_FORMFIELD (FN_INSERT2 + 23)
#define FN_INSERT_DROPDOWN_FORMFIELD (FN_INSERT2 + 24)
+// MSO content controls
+#define FN_INSERT_DATE_FORMFIELD (FN_INSERT2 + 25)
// Region: Format
#define FN_AUTOFORMAT_APPLY (FN_FORMAT + 1 ) /* apply autoformat options */
diff --git a/sw/qa/extras/uiwriter/uiwriter2.cxx b/sw/qa/extras/uiwriter/uiwriter2.cxx
index aad559629cbb..1706323f6088 100644
--- a/sw/qa/extras/uiwriter/uiwriter2.cxx
+++ b/sw/qa/extras/uiwriter/uiwriter2.cxx
@@ -87,6 +87,7 @@ public:
void testImageCommentAtChar();
void testTdf124261();
void testShapePageMove();
+ void testDateFormFieldInsertion();
CPPUNIT_TEST_SUITE(SwUiWriterTest2);
CPPUNIT_TEST(testRedlineMoveInsertInDelete);
@@ -118,6 +119,7 @@ public:
CPPUNIT_TEST(testImageCommentAtChar);
CPPUNIT_TEST(testTdf124261);
CPPUNIT_TEST(testShapePageMove);
+ CPPUNIT_TEST(testDateFormFieldInsertion);
CPPUNIT_TEST_SUITE_END();
private:
@@ -1333,6 +1335,38 @@ void SwUiWriterTest2::testShapePageMove()
CPPUNIT_ASSERT_EQUAL(nNodeIndex, pAnchor->nNode.GetIndex());
}
+void SwUiWriterTest2::testDateFormFieldInsertion()
+{
+ SwDoc* pDoc = createDoc();
+ CPPUNIT_ASSERT(pDoc);
+ IDocumentMarkAccess* pMarkAccess = pDoc->getIDocumentMarkAccess();
+ CPPUNIT_ASSERT(pMarkAccess);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), pMarkAccess->getAllMarksCount());
+
+ // Insert a date form field
+ lcl_dispatchCommand(mxComponent, ".uno:DatePickerFormField", {});
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(1), pMarkAccess->getAllMarksCount());
+
+ // Check whether the fieldmark is created
+ auto aIter = pMarkAccess->getAllMarksBegin();
+ CPPUNIT_ASSERT(aIter != pMarkAccess->getAllMarksEnd());
+ ::sw::mark::IFieldmark* pFieldmark = dynamic_cast<::sw::mark::IFieldmark*>(aIter->get());
+ CPPUNIT_ASSERT(pFieldmark);
+ CPPUNIT_ASSERT_EQUAL(OUString(ODF_FORMDATE), pFieldmark->GetFieldname());
+
+ // Undo insertion
+ lcl_dispatchCommand(mxComponent, ".uno:Undo", {});
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), pMarkAccess->getAllMarksCount());
+
+ // Redo insertion
+ lcl_dispatchCommand(mxComponent, ".uno:Redo", {});
+ aIter = pMarkAccess->getAllMarksBegin();
+ CPPUNIT_ASSERT(aIter != pMarkAccess->getAllMarksEnd());
+ pFieldmark = dynamic_cast<::sw::mark::IFieldmark*>(aIter->get());
+ CPPUNIT_ASSERT(pFieldmark);
+ CPPUNIT_ASSERT_EQUAL(OUString(ODF_FORMDATE), pFieldmark->GetFieldname());
+}
+
CPPUNIT_TEST_SUITE_REGISTRATION(SwUiWriterTest2);
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/sdi/_textsh.sdi b/sw/sdi/_textsh.sdi
index 3724ee041ecc..466b02c5e0bb 100644
--- a/sw/sdi/_textsh.sdi
+++ b/sw/sdi/_textsh.sdi
@@ -1694,6 +1694,12 @@ interface BaseText
StateMethod = StateField ;
]
+ FN_INSERT_DATE_FORMFIELD
+ [
+ ExecMethod = ExecField ;
+ StateMethod = StateField ;
+ ]
+
SID_FM_CTL_PROPERTIES
[
ExecMethod = Execute ;
diff --git a/sw/sdi/swriter.sdi b/sw/sdi/swriter.sdi
index 4933a9e605c9..69edddb1571d 100644
--- a/sw/sdi/swriter.sdi
+++ b/sw/sdi/swriter.sdi
@@ -7753,3 +7753,21 @@ SfxBoolItem UseHeaderFooterMenu FN_USE_HEADERFOOTERMENU
ToolBoxConfig = TRUE,
GroupId = SfxGroupId::View;
]
+
+SfxVoidItem DatePickerFormField FN_INSERT_DATE_FORMFIELD
+
+[
+ AutoUpdate = TRUE,
+ FastCall = FALSE,
+ ReadOnlyDoc = FALSE,
+ Toggle = FALSE,
+ Container = FALSE,
+ RecordAbsolute = FALSE,
+ RecordPerSet;
+
+
+ AccelConfig = TRUE,
+ MenuConfig = TRUE,
+ ToolBoxConfig = TRUE,
+ GroupId = SfxGroupId::Controls;
+]
diff --git a/sw/source/uibase/shells/textfld.cxx b/sw/source/uibase/shells/textfld.cxx
index 12e491df4573..d645beef252a 100644
--- a/sw/source/uibase/shells/textfld.cxx
+++ b/sw/source/uibase/shells/textfld.cxx
@@ -711,6 +711,21 @@ FIELD_INSERT:
rSh.GetView().GetViewFrame()->GetBindings().Invalidate( SID_UNDO );
}
break;
+ case FN_INSERT_DATE_FORMFIELD:
+ {
+ rSh.GetDoc()->GetIDocumentUndoRedo().StartUndo(SwUndoId::INSERT_FORM_FIELD, nullptr);
+
+ SwPaM* pCursorPos = rSh.GetCursor();
+ if(pCursorPos)
+ {
+ IDocumentMarkAccess* pMarksAccess = rSh.GetDoc()->getIDocumentMarkAccess();
+ pMarksAccess->makeNoTextFieldBookmark(*pCursorPos, OUString(), ODF_FORMDATE);
+ }
+
+ rSh.GetDoc()->GetIDocumentUndoRedo().EndUndo(SwUndoId::INSERT_FORM_FIELD, nullptr);
+ rSh.GetView().GetViewFrame()->GetBindings().Invalidate( SID_UNDO );
+ }
+ break;
default:
OSL_FAIL("wrong dispatcher");
return;
@@ -870,6 +885,7 @@ void SwTextShell::StateField( SfxItemSet &rSet )
case FN_INSERT_TEXT_FORMFIELD:
case FN_INSERT_CHECKBOX_FORMFIELD:
case FN_INSERT_DROPDOWN_FORMFIELD:
+ case FN_INSERT_DATE_FORMFIELD:
if ( rSh.CursorInsideInputField() )
{
rSet.DisableItem(nWhich);
diff --git a/sw/uiconfig/swriter/menubar/mscompatibleformsmenu.xml b/sw/uiconfig/swriter/menubar/mscompatibleformsmenu.xml
index 4d157908dd71..c9f2c0884754 100644
--- a/sw/uiconfig/swriter/menubar/mscompatibleformsmenu.xml
+++ b/sw/uiconfig/swriter/menubar/mscompatibleformsmenu.xml
@@ -32,7 +32,7 @@
</menu:menu>
<menu:menu menu:id=".uno:MSCompatContentControls">
<menu:menupopup>
- <menu:menuitem menu:id=".uno:DateField"/>
+ <menu:menuitem menu:id=".uno:DatePickerFormField"/>
</menu:menupopup>
</menu:menu>
</menu:menupopup>