From 267c6f2ac71f92999e969232431ba04678e7437e Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Mon, 15 Apr 2024 07:54:39 +0200 Subject: Adding upstream version 4:24.2.0. Signed-off-by: Daniel Baumann --- sw/source/ui/vba/vbaformfield.cxx | 255 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 255 insertions(+) create mode 100644 sw/source/ui/vba/vbaformfield.cxx (limited to 'sw/source/ui/vba/vbaformfield.cxx') diff --git a/sw/source/ui/vba/vbaformfield.cxx b/sw/source/ui/vba/vbaformfield.cxx new file mode 100644 index 0000000000..cb1351fa74 --- /dev/null +++ b/sw/source/ui/vba/vbaformfield.cxx @@ -0,0 +1,255 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include + +#include + +#include +#include +#include + +#include "vbaformfield.hxx" +#include "vbaformfieldcheckbox.hxx" +#include "vbaformfielddropdown.hxx" +#include "vbaformfieldtextinput.hxx" +#include "vbarange.hxx" +#include "wordvbahelper.hxx" + +using namespace ::ooo::vba; +using namespace ::com::sun::star; + +/** + * FormFields are inline text objects that are only found in MS Word. + * They cannot be created in Excel or in Calc. + * + * There are three specific kinds of FormFields: CheckBox, DropDown, and TextInput. + */ +SwVbaFormField::SwVbaFormField(const uno::Reference& rParent, + const uno::Reference& rContext, + const uno::Reference& xTextDocument, + sw::mark::IFieldmark& rFormField) + : SwVbaFormField_BASE(rParent, rContext) + , m_xTextDocument(xTextDocument) + , m_rFormField(rFormField) +{ +} + +SwVbaFormField::~SwVbaFormField() {} + +uno::Any SwVbaFormField::CheckBox() +{ + return uno::Any(uno::Reference( + new SwVbaFormFieldCheckBox(mxParent, mxContext, m_rFormField))); +} + +uno::Any SwVbaFormField::DropDown() +{ + return uno::Any(uno::Reference( + new SwVbaFormFieldDropDown(mxParent, mxContext, m_rFormField))); +} + +uno::Any SwVbaFormField::TextInput() +{ + return uno::Any(uno::Reference( + new SwVbaFormFieldTextInput(mxParent, mxContext, m_rFormField))); +} + +uno::Any SwVbaFormField::Previous() +{ + SwDoc* pDoc = word::getDocShell(m_xTextDocument)->GetDoc(); + if (!pDoc) + return uno::Any(); + + const IDocumentMarkAccess* pMarkAccess = pDoc->getIDocumentMarkAccess(); + if (!pMarkAccess) + return uno::Any(); + + sw::mark::IFieldmark* pFieldMark = pMarkAccess->getFieldmarkBefore(m_rFormField.GetMarkPos(), + /*bLoop=*/false); + + // DateFields are a LO specialty, and do not exist natively in MS documents. Ignore if added... + auto pDateField = dynamic_cast(pFieldMark); + while (pDateField) + { + pFieldMark = pMarkAccess->getFieldmarkBefore(pDateField->GetMarkPos(), /*bLoop=*/false); + pDateField = dynamic_cast(pFieldMark); + } + + if (!pFieldMark) + return uno::Any(); + + return uno::Any(uno::Reference( + new SwVbaFormField(mxParent, mxContext, m_xTextDocument, *pFieldMark))); +} + +uno::Any SwVbaFormField::Next() +{ + SwDoc* pDoc = word::getDocShell(m_xTextDocument)->GetDoc(); + if (!pDoc) + return uno::Any(); + + const IDocumentMarkAccess* pMarkAccess = pDoc->getIDocumentMarkAccess(); + if (!pMarkAccess) + return uno::Any(); + + sw::mark::IFieldmark* pFieldMark = pMarkAccess->getFieldmarkAfter(m_rFormField.GetMarkPos(), + /*bLoop=*/false); + + // DateFields are a LO specialty, and do not exist natively in MS documents. Ignore if added... + auto pDateField = dynamic_cast(pFieldMark); + while (pDateField) + { + pFieldMark = pMarkAccess->getFieldmarkAfter(pDateField->GetMarkPos(), /*bLoop=*/false); + pDateField = dynamic_cast(pFieldMark); + } + + if (!pFieldMark) + return uno::Any(); + + return uno::Any(uno::Reference( + new SwVbaFormField(mxParent, mxContext, m_xTextDocument, *pFieldMark))); +} + +uno::Reference SwVbaFormField::Range() +{ + uno::Reference xRet; + SwDoc* pDoc = word::getDocShell(m_xTextDocument)->GetDoc(); + if (pDoc) + { + rtl::Reference xText(SwXTextRange::CreateXTextRange( + *pDoc, m_rFormField.GetMarkStart(), &m_rFormField.GetMarkEnd())); + if (xText.is()) + xRet = new SwVbaRange(mxParent, mxContext, m_xTextDocument, xText->getStart(), + xText->getEnd()); + } + return xRet; +} + +OUString SwVbaFormField::getDefaultPropertyName() { return "Type"; } + +sal_Int32 SwVbaFormField::getType() +{ + IDocumentMarkAccess::MarkType aType = IDocumentMarkAccess::GetType(m_rFormField); + if (aType == IDocumentMarkAccess::MarkType::CHECKBOX_FIELDMARK) + return ooo::vba::word::WdFieldType::wdFieldFormCheckBox; + else if (aType == IDocumentMarkAccess::MarkType::TEXT_FIELDMARK) + return ooo::vba::word::WdFieldType::wdFieldFormTextInput; + return ooo::vba::word::WdFieldType::wdFieldFormDropDown; +} + +sal_Bool SwVbaFormField::getCalculateOnExit() +{ + SAL_INFO("sw.vba", "SwVbaFormField::getCalculateOnExit stub"); + return false; +} + +void SwVbaFormField::setCalculateOnExit(sal_Bool /*bSet*/) +{ + SAL_INFO("sw.vba", "SwVbaFormField::setCalculateOnExit stub"); +} + +sal_Bool SwVbaFormField::getEnabled() +{ + SAL_INFO("sw.vba", "SwVbaFormField::getEnabled stub"); + return true; +} + +void SwVbaFormField::setEnabled(sal_Bool /*bSet*/) +{ + SAL_INFO("sw.vba", "SwVbaFormField::setEnabled stub"); +} + +OUString SwVbaFormField::getEntryMacro() +{ + OUString sMacro; + (*m_rFormField.GetParameters())["EntryMacro"] >>= sMacro; + return sMacro; +} + +void SwVbaFormField::setEntryMacro(const OUString& rSet) +{ + (*m_rFormField.GetParameters())["EntryMacro"] <<= rSet; +} + +OUString SwVbaFormField::getExitMacro() +{ + OUString sMacro; + (*m_rFormField.GetParameters())["ExitMacro"] >>= sMacro; + return sMacro; +} + +void SwVbaFormField::setExitMacro(const OUString& rSet) +{ + (*m_rFormField.GetParameters())["ExitMacro"] <<= rSet; +} + +OUString SwVbaFormField::getHelpText() { return m_rFormField.GetFieldHelptext(); } + +void SwVbaFormField::setHelpText(const OUString& rSet) { m_rFormField.SetFieldHelptext(rSet); } + +sal_Bool SwVbaFormField::getOwnHelp() +{ + SAL_INFO("sw.vba", "SwVbaFormField::getOwnHelp stub"); + return true; +} + +void SwVbaFormField::setOwnHelp(sal_Bool /*bSet*/) +{ + SAL_INFO("sw.vba", "SwVbaFormField::setOwnHelp stub"); +} + +OUString SwVbaFormField::getName() { return m_rFormField.GetName(); } + +void SwVbaFormField::setName(const OUString& rSet) +{ + SAL_INFO("sw.vba", "SwVbaFormField::setName[" << rSet << "] stub"); +} + +OUString SwVbaFormField::getResult() { return m_rFormField.GetContent(); } + +void SwVbaFormField::setResult(const OUString& rSet) +{ + if (dynamic_cast(&m_rFormField)) + m_rFormField.ReplaceContent("false"); + else + m_rFormField.ReplaceContent(rSet); +} + +OUString SwVbaFormField::getStatusText() +{ + SAL_INFO("sw.vba", "SwVbaFormField::getStatusText stub"); + return OUString(); +} + +void SwVbaFormField::setStatusText(const OUString& rSet) +{ + SAL_INFO("sw.vba", "SwVbaFormField::setStatusText[" << rSet << "] stub"); +} + +sal_Bool SwVbaFormField::getOwnStatus() +{ + SAL_INFO("sw.vba", "SwVbaFormField::getOwnStatus stub"); + return true; +} + +void SwVbaFormField::setOwnStatus(sal_Bool /*bSet*/) +{ + SAL_INFO("sw.vba", "SwVbaFormField::setOwnStatus stub"); +} + +OUString SwVbaFormField::getServiceImplName() { return "SwVbaFormField"; } + +uno::Sequence SwVbaFormField::getServiceNames() +{ + static uno::Sequence const aServiceNames{ "ooo.vba.word.FormField" }; + return aServiceNames; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -- cgit v1.2.3