diff options
author | Tamás Zolnai <tamas.zolnai@collabora.com> | 2019-05-31 17:55:10 +0200 |
---|---|---|
committer | Tamás Zolnai <tamas.zolnai@collabora.com> | 2019-07-17 11:39:58 +0200 |
commit | 6ecf9b6a058a095fac2d43e31d6f59a71957a085 (patch) | |
tree | 01e2e1a9086b35ec82fea8417d43c8ef42da9d4c | |
parent | 25d534c90e5cdb6b443b4f51eef88b4476c2295c (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.xcu | 8 | ||||
-rw-r--r-- | sw/inc/cmdid.h | 2 | ||||
-rw-r--r-- | sw/qa/extras/uiwriter/uiwriter2.cxx | 34 | ||||
-rw-r--r-- | sw/sdi/_textsh.sdi | 6 | ||||
-rw-r--r-- | sw/sdi/swriter.sdi | 18 | ||||
-rw-r--r-- | sw/source/uibase/shells/textfld.cxx | 16 | ||||
-rw-r--r-- | sw/uiconfig/swriter/menubar/mscompatibleformsmenu.xml | 2 |
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> |