1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
3 * This file is part of the LibreOffice project.
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
9 * This file incorporates work covered by the following license notice:
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
20 #include <ooo/vba/word/WdFieldType.hpp>
22 #include <sal/log.hxx>
27 #include "vbaformfield.hxx"
28 #include "vbaformfieldcheckbox.hxx"
29 #include "wordvbahelper.hxx"
31 using namespace ::ooo::vba
;
32 using namespace ::com::sun::star
;
35 * Information about the method and properties of FormFields was gathered from
36 * https://www.codevba.com/Word/FormField.htm
38 * FormFields are inline text objects that are only found in MS Word.
39 * They cannot be created in Excel or in Calc.
41 * There are three specific kinds of FormFields: CheckBox, DropDown, and TextInput.
43 SwVbaFormField::SwVbaFormField(const uno::Reference
<ooo::vba::XHelperInterface
>& rParent
,
44 const uno::Reference
<uno::XComponentContext
>& rContext
,
45 const uno::Reference
<frame::XModel
>& xModel
,
46 sw::mark::IFieldmark
& rFormField
)
47 : SwVbaFormField_BASE(rParent
, rContext
)
48 , mxModel(std::move(xModel
))
49 , m_rFormField(rFormField
)
53 SwVbaFormField::~SwVbaFormField() {}
55 uno::Any SAL_CALL
SwVbaFormField::CheckBox()
57 return uno::Any(uno::Reference
<word::XCheckBox
>(
58 new SwVbaFormFieldCheckBox(mxParent
, mxContext
, m_rFormField
)));
61 uno::Any SAL_CALL
SwVbaFormField::DropDown()
63 // return uno::Any(uno::Reference<word::XDropDown>(
64 // new SwVbaFormFieldDropDown(mxParent, mxContext, m_rFormField)));
68 uno::Any SAL_CALL
SwVbaFormField::TextInput()
70 // return uno::Any(uno::Reference<word::XTextInput>(
71 // new SwVbaFormFieldTextInput(mxParent, mxContext, m_rFormField)));
75 uno::Any SAL_CALL
SwVbaFormField::Previous()
77 SwDoc
* pDoc
= word::getDocShell(mxModel
)->GetDoc();
81 const IDocumentMarkAccess
* pMarkAccess
= pDoc
->getIDocumentMarkAccess();
85 sw::mark::IFieldmark
* pFieldMark
= pMarkAccess
->getFieldmarkBefore(m_rFormField
.GetMarkPos());
87 // DateFields are a LO specialty, and do not exist natively in MS documents. Ignore if added...
88 auto pDateField
= dynamic_cast<sw::mark::IDateFieldmark
*>(pFieldMark
);
91 pFieldMark
= pMarkAccess
->getFieldmarkBefore(pDateField
->GetMarkPos());
92 pDateField
= dynamic_cast<sw::mark::IDateFieldmark
*>(pFieldMark
);
98 return uno::Any(uno::Reference
<word::XFormField
>(
99 new SwVbaFormField(mxParent
, mxContext
, mxModel
, *pFieldMark
)));
102 uno::Any SAL_CALL
SwVbaFormField::Next()
104 SwDoc
* pDoc
= word::getDocShell(mxModel
)->GetDoc();
108 const IDocumentMarkAccess
* pMarkAccess
= pDoc
->getIDocumentMarkAccess();
112 sw::mark::IFieldmark
* pFieldMark
= pMarkAccess
->getFieldmarkAfter(m_rFormField
.GetMarkPos());
114 // DateFields are a LO specialty, and do not exist natively in MS documents. Ignore if added...
115 auto pDateField
= dynamic_cast<sw::mark::IDateFieldmark
*>(pFieldMark
);
118 pFieldMark
= pMarkAccess
->getFieldmarkAfter(pDateField
->GetMarkPos());
119 pDateField
= dynamic_cast<sw::mark::IDateFieldmark
*>(pFieldMark
);
125 return uno::Any(uno::Reference
<word::XFormField
>(
126 new SwVbaFormField(mxParent
, mxContext
, mxModel
, *pFieldMark
)));
129 uno::Any SAL_CALL
SwVbaFormField::Range()
131 SAL_INFO("sw.vba", "SwVbaFormField::getRange stub");
135 OUString
SwVbaFormField::getDefaultPropertyName() { return "Type"; }
137 sal_Int32
SwVbaFormField::getType()
139 IDocumentMarkAccess::MarkType aType
= IDocumentMarkAccess::GetType(m_rFormField
);
140 if (aType
== IDocumentMarkAccess::MarkType::CHECKBOX_FIELDMARK
)
141 return ooo::vba::word::WdFieldType::wdFieldFormCheckBox
;
142 else if (aType
== IDocumentMarkAccess::MarkType::TEXT_FIELDMARK
)
143 return ooo::vba::word::WdFieldType::wdFieldFormTextInput
;
144 return ooo::vba::word::WdFieldType::wdFieldFormDropDown
;
147 sal_Bool
SwVbaFormField::getCalculateOnExit()
149 SAL_INFO("sw.vba", "SwVbaFormField::getCalculateOnExit stub");
153 void SwVbaFormField::setCalculateOnExit(sal_Bool
/*bSet*/)
155 SAL_INFO("sw.vba", "SwVbaFormField::setCalculateOnExit stub");
158 sal_Bool
SwVbaFormField::getEnabled()
160 SAL_INFO("sw.vba", "SwVbaFormField::getEnabled stub");
164 void SwVbaFormField::setEnabled(sal_Bool
/*bSet*/)
166 SAL_INFO("sw.vba", "SwVbaFormField::setEnabled stub");
169 OUString
SwVbaFormField::getEntryMacro()
172 (*m_rFormField
.GetParameters())["EntryMacro"] >>= sMacro
;
176 void SwVbaFormField::setEntryMacro(const OUString
& rSet
)
178 (*m_rFormField
.GetParameters())["EntryMacro"] <<= rSet
;
181 OUString
SwVbaFormField::getExitMacro()
184 (*m_rFormField
.GetParameters())["ExitMacro"] >>= sMacro
;
188 void SwVbaFormField::setExitMacro(const OUString
& rSet
)
190 (*m_rFormField
.GetParameters())["ExitMacro"] <<= rSet
;
193 OUString
SwVbaFormField::getHelpText() { return m_rFormField
.GetFieldHelptext(); }
195 void SwVbaFormField::setHelpText(const OUString
& rSet
) { m_rFormField
.SetFieldHelptext(rSet
); }
197 sal_Bool
SwVbaFormField::getOwnHelp()
199 SAL_INFO("sw.vba", "SwVbaFormField::getOwnHelp stub");
203 void SwVbaFormField::setOwnHelp(sal_Bool
/*bSet*/)
205 SAL_INFO("sw.vba", "SwVbaFormField::setOwnHelp stub");
208 OUString
SwVbaFormField::getName() { return m_rFormField
.GetName(); }
210 void SwVbaFormField::setName(const OUString
& rSet
)
212 SAL_WARN("sw.vba", "SwVbaFormField::setName[" << rSet
<< "] stub");
215 OUString
SwVbaFormField::getResult() { return m_rFormField
.GetContent(); }
217 void SwVbaFormField::setResult(const OUString
& rSet
)
219 if (dynamic_cast<sw::mark::ICheckboxFieldmark
*>(&m_rFormField
))
220 m_rFormField
.ReplaceContent("false");
222 m_rFormField
.ReplaceContent(rSet
);
225 OUString
SwVbaFormField::getStatusText()
227 SAL_INFO("sw.vba", "SwVbaFormField::getStatusText stub");
231 void SwVbaFormField::setStatusText(const OUString
& rSet
)
233 SAL_INFO("sw.vba", "SwVbaFormField::setStatusText[" << rSet
<< "] stub");
236 sal_Bool
SwVbaFormField::getOwnStatus()
238 SAL_INFO("sw.vba", "SwVbaFormField::getOwnStatus stub");
242 void SwVbaFormField::setOwnStatus(sal_Bool
/*bSet*/)
244 SAL_INFO("sw.vba", "SwVbaFormField::setOwnStatus stub");
247 OUString
SwVbaFormField::getServiceImplName() { return "SwVbaFormField"; }
249 uno::Sequence
<OUString
> SwVbaFormField::getServiceNames()
251 static uno::Sequence
<OUString
> const aServiceNames
{ "ooo.vba.word.FormField" };
252 return aServiceNames
;
255 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */