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 .
19 #ifndef INCLUDED_SW_SOURCE_UIBASE_INC_FLDMGR_HXX
20 #define INCLUDED_SW_SOURCE_UIBASE_INC_FLDMGR_HXX
25 #include <com/sun/star/uno/Reference.h>
26 #include <com/sun/star/uno/Any.h>
32 namespace com::sun::star
{
37 class XNumberingTypeInfo
;
47 class SvNumberFormatter
;
48 namespace weld
{ class Widget
; class Window
; }
49 enum class SwFieldIds
: sal_uInt16
;
51 // the groups of fields
62 struct SwFieldGroupRgn
68 // the field manager handles the insertation of fields
69 // with command strings
70 struct SwInsertField_Data
72 SwFieldTypesEnum m_nTypeId
;
73 sal_uInt16 m_nSubType
;
74 const OUString m_sPar1
;
75 const OUString m_sPar2
;
76 sal_uInt32 m_nFormatId
;
78 sal_Unicode m_cSeparator
;
79 bool m_bIsAutomaticLanguage
;
80 css::uno::Any m_aDBDataSource
;
81 css::uno::Any m_aDBConnection
;
82 css::uno::Any m_aDBColumn
;
83 weld::Widget
* m_pParent
; // parent widget used for SwWrtShell::StartInputFieldDlg()
84 /// Marks the PostIt field's annotation start/end if it differs from the cursor selection.
85 std::optional
<SwPaM
> m_oAnnotationRange
;
87 SwInsertField_Data(SwFieldTypesEnum nType
, sal_uInt16 nSub
, OUString aPar1
, OUString aPar2
,
88 sal_uInt32 nFormatId
, SwWrtShell
* pShell
= nullptr, sal_Unicode cSep
= ' ', bool bIsAutoLanguage
= true) :
91 m_sPar1(std::move(aPar1
)),
92 m_sPar2(std::move(aPar2
)),
93 m_nFormatId(nFormatId
),
96 m_bIsAutomaticLanguage(bIsAutoLanguage
),
100 class SW_DLLPUBLIC SwFieldMgr
103 SwField
* m_pCurField
;
104 SwWrtShell
* m_pWrtShell
; // can be ZERO too!
107 OUString m_sCurFrame
;
109 OUString m_sMacroPath
;
110 OUString m_sMacroName
;
112 sal_uInt32 m_nCurFormat
;
115 SAL_DLLPRIVATE LanguageType
GetCurrLanguage() const;
117 css::uno::Reference
<css::text::XNumberingTypeInfo
> m_xNumberingInfo
;
118 SAL_DLLPRIVATE
css::uno::Reference
<css::text::XNumberingTypeInfo
> const & GetNumberingInfo()const;
121 explicit SwFieldMgr(SwWrtShell
* pSh
= nullptr);
124 void SetWrtShell( SwWrtShell
* pShell
)
125 { m_pWrtShell
= pShell
; }
127 // insert field using TypeID (TYP_ ...)
128 bool InsertField( SwInsertField_Data
& rData
);
130 // change the current field directly
131 void UpdateCurField(sal_uInt32 nFormat
,
132 const OUString
& rPar1
,
133 const OUString
& rPar2
,
134 std::unique_ptr
<SwField
> _pField
= nullptr);
136 const OUString
& GetCurFieldPar1() const { return m_aCurPar1
; }
137 const OUString
& GetCurFieldPar2() const { return m_aCurPar2
; }
140 SwField
* GetCurField();
142 void InsertFieldType(SwFieldType
const & rType
);
144 bool ChooseMacro(weld::Window
* pDialogParent
);
145 void SetMacroPath(const OUString
& rPath
);
146 const OUString
& GetMacroPath() const { return m_sMacroPath
; }
147 const OUString
& GetMacroName() const { return m_sMacroName
; }
149 // previous and next of the same type
150 bool GoNextPrev( bool bNext
= true, SwFieldType
* pTyp
= nullptr );
151 bool GoNext() { return GoNextPrev(); }
152 bool GoPrev() { return GoNextPrev( false ); }
154 bool IsDBNumeric(const OUString
& rDBName
, const OUString
& rTableQryName
,
155 bool bIsTable
, const OUString
& rFieldName
);
157 // organise RefMark with names
158 bool CanInsertRefMark( std::u16string_view rStr
);
160 // access to field types via ResId
161 size_t GetFieldTypeCount() const;
162 SwFieldType
* GetFieldType(SwFieldIds nResId
, size_t nField
= 0) const;
163 SwFieldType
* GetFieldType(SwFieldIds nResId
, const OUString
& rName
) const;
165 void RemoveFieldType(SwFieldIds nResId
, const OUString
& rName
);
167 // access via TypeId from the dialog
168 // Ids for a range of fields
169 static const SwFieldGroupRgn
& GetGroupRange(bool bHtmlMode
, sal_uInt16 nGrpId
);
170 static sal_uInt16
GetGroup(SwFieldTypesEnum nTypeId
, sal_uInt16 nSubType
);
172 // the current field's TypeId
173 SwFieldTypesEnum
GetCurTypeId() const;
175 // TypeId for a concrete position in the list
176 static SwFieldTypesEnum
GetTypeId(sal_uInt16 nPos
);
177 // name of the type in the list of fields
178 static const OUString
& GetTypeStr(sal_uInt16 nPos
);
180 // Pos in the list of fields
181 static sal_uInt16
GetPos(SwFieldTypesEnum nTypeId
);
183 // subtypes to a type
184 void GetSubTypes(SwFieldTypesEnum nId
, std::vector
<OUString
>& rToFill
);
187 sal_uInt16
GetFormatCount(SwFieldTypesEnum nTypeId
, bool bHtmlMode
) const;
188 OUString
GetFormatStr(SwFieldTypesEnum nTypeId
, sal_uInt32 nFormatId
) const;
189 sal_uInt16
GetFormatId(SwFieldTypesEnum nTypeId
, sal_uInt32 nFormatId
) const;
190 sal_uInt32
GetDefaultFormat(SwFieldTypesEnum nTypeId
, bool bIsText
, SvNumberFormatter
* pFormatter
);
192 // turn off evaluation of expression fields for insertation
193 // of many expression fields (see labels)
195 inline void SetEvalExpFields(bool bEval
);
196 void EvalExpFields(SwWrtShell
* pSh
);
199 inline void SwFieldMgr::SetEvalExpFields(bool bEval
)
200 { m_bEvalExp
= bEval
; }
204 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */