/src/libreoffice/sw/source/uibase/inc/fldmgr.hxx
Line | Count | Source (jump to first uncovered line) |
1 | | /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ |
2 | | /* |
3 | | * This file is part of the LibreOffice project. |
4 | | * |
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/. |
8 | | * |
9 | | * This file incorporates work covered by the following license notice: |
10 | | * |
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 . |
18 | | */ |
19 | | #ifndef INCLUDED_SW_SOURCE_UIBASE_INC_FLDMGR_HXX |
20 | | #define INCLUDED_SW_SOURCE_UIBASE_INC_FLDMGR_HXX |
21 | | |
22 | | #include <fldbas.hxx> |
23 | | #include <pam.hxx> |
24 | | #include <swdllapi.h> |
25 | | #include <names.hxx> |
26 | | #include <com/sun/star/uno/Reference.h> |
27 | | #include <com/sun/star/uno/Any.h> |
28 | | #include <memory> |
29 | | #include <optional> |
30 | | #include <utility> |
31 | | #include <vector> |
32 | | |
33 | | namespace com::sun::star{ |
34 | | namespace text{ |
35 | | class XNumberingTypeInfo; |
36 | | } |
37 | | } |
38 | | |
39 | | class SwWrtShell; |
40 | | class SwField; |
41 | | class SwFieldType; |
42 | | class SvNumberFormatter; |
43 | | namespace weld { class Widget; class Window; } |
44 | | enum class SwFieldIds : sal_uInt16; |
45 | | |
46 | | // the groups of fields |
47 | | enum SwFieldGroups |
48 | | { |
49 | | GRP_DOC, |
50 | | GRP_FKT, |
51 | | GRP_REF, |
52 | | GRP_REG, |
53 | | GRP_DB, |
54 | | GRP_VAR |
55 | | }; |
56 | | |
57 | | struct SwFieldGroupRgn |
58 | | { |
59 | | sal_uInt16 nStart; |
60 | | sal_uInt16 nEnd; |
61 | | }; |
62 | | |
63 | | // the field manager handles the insertation of fields |
64 | | // with command strings |
65 | | struct SwInsertField_Data |
66 | | { |
67 | | SwFieldTypesEnum m_nTypeId; |
68 | | sal_uInt16 m_nSubType; |
69 | | const OUString m_sPar1; |
70 | | const OUString m_sPar2; |
71 | | sal_uInt32 m_nFormatId; |
72 | | SwWrtShell* m_pSh; |
73 | | sal_Unicode m_cSeparator; |
74 | | bool m_bIsAutomaticLanguage; |
75 | | css::uno::Any m_aDBDataSource; |
76 | | css::uno::Any m_aDBConnection; |
77 | | css::uno::Any m_aDBColumn; |
78 | | weld::Widget* m_pParent; // parent widget used for SwWrtShell::StartInputFieldDlg() |
79 | | /// Marks the PostIt field's annotation start/end if it differs from the cursor selection. |
80 | | std::optional<SwPaM> m_oAnnotationRange; |
81 | | std::optional<std::tuple<sal_uInt32, sal_uInt32, SwMarkName>> m_oParentId; |
82 | | bool m_bNeverExpand; |
83 | | |
84 | | SwInsertField_Data(SwFieldTypesEnum nType, sal_uInt16 nSub, OUString aPar1, OUString aPar2, |
85 | | sal_uInt32 nFormatId, SwWrtShell* pShell = nullptr, sal_Unicode cSep = ' ', |
86 | | bool bIsAutoLanguage = true, bool bNeverExpand = false) |
87 | 0 | : m_nTypeId(nType) |
88 | 0 | , m_nSubType(nSub) |
89 | 0 | , m_sPar1(std::move(aPar1)) |
90 | 0 | , m_sPar2(std::move(aPar2)) |
91 | 0 | , m_nFormatId(nFormatId) |
92 | 0 | , m_pSh(pShell) |
93 | 0 | , m_cSeparator(cSep) |
94 | 0 | , m_bIsAutomaticLanguage(bIsAutoLanguage) |
95 | 0 | , m_pParent(nullptr) |
96 | 0 | , m_bNeverExpand(bNeverExpand) |
97 | 0 | { |
98 | 0 | } |
99 | | }; |
100 | | |
101 | | class SW_DLLPUBLIC SwFieldMgr |
102 | | { |
103 | | private: |
104 | | SwField* m_pCurField; |
105 | | SwWrtShell* m_pWrtShell; // can be ZERO too! |
106 | | OUString m_aCurPar1; |
107 | | OUString m_aCurPar2; |
108 | | OUString m_sCurFrame; |
109 | | |
110 | | OUString m_sMacroPath; |
111 | | OUString m_sMacroName; |
112 | | |
113 | | bool m_bEvalExp; |
114 | | |
115 | | SAL_DLLPRIVATE LanguageType GetCurrLanguage() const; |
116 | | |
117 | | css::uno::Reference<css::text::XNumberingTypeInfo> m_xNumberingInfo; |
118 | | SAL_DLLPRIVATE css::uno::Reference<css::text::XNumberingTypeInfo> const & GetNumberingInfo()const; |
119 | | |
120 | | public: |
121 | | explicit SwFieldMgr(SwWrtShell* pSh = nullptr); |
122 | | ~SwFieldMgr(); |
123 | | |
124 | | void SetWrtShell( SwWrtShell* pShell ) |
125 | 0 | { m_pWrtShell = pShell; } |
126 | | |
127 | | // insert field using TypeID (TYP_ ...) |
128 | | bool InsertField( SwInsertField_Data& rData ); |
129 | | |
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); |
135 | | |
136 | 0 | const OUString& GetCurFieldPar1() const { return m_aCurPar1; } |
137 | 0 | const OUString& GetCurFieldPar2() const { return m_aCurPar2; } |
138 | | |
139 | | // determine a field |
140 | | SwField* GetCurField(); |
141 | | |
142 | | void InsertFieldType(SwFieldType const & rType); |
143 | | |
144 | | bool ChooseMacro(weld::Window* pDialogParent); |
145 | | void SetMacroPath(const OUString& rPath); |
146 | 0 | const OUString& GetMacroPath() const { return m_sMacroPath; } |
147 | 0 | const OUString& GetMacroName() const { return m_sMacroName; } |
148 | | |
149 | | // previous and next of the same type |
150 | | bool GoNextPrev( bool bNext = true, SwFieldType* pTyp = nullptr ); |
151 | 0 | bool GoNext() { return GoNextPrev(); } |
152 | 0 | bool GoPrev() { return GoNextPrev( false ); } |
153 | | |
154 | | bool IsDBNumeric(const OUString& rDBName, const OUString& rTableQryName, |
155 | | bool bIsTable, const OUString& rFieldName); |
156 | | |
157 | | // organise RefMark with names |
158 | | bool CanInsertRefMark( const SwMarkName& rStr ); |
159 | | |
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; |
164 | | |
165 | | void RemoveFieldType(SwFieldIds nResId, const OUString& rName); |
166 | | |
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); |
171 | | |
172 | | // the current field's TypeId |
173 | | SwFieldTypesEnum GetCurTypeId() const; |
174 | | |
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); |
179 | | |
180 | | // Pos in the list of fields |
181 | | static sal_uInt16 GetPos(SwFieldTypesEnum nTypeId); |
182 | | |
183 | | // subtypes to a type |
184 | | void GetSubTypes(SwFieldTypesEnum nId, std::vector<OUString>& rToFill); |
185 | | |
186 | | // format to a type |
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); |
191 | | |
192 | | // turn off evaluation of expression fields for insertation |
193 | | // of many expression fields (see labels) |
194 | | |
195 | | inline void SetEvalExpFields(bool bEval); |
196 | | void EvalExpFields(SwWrtShell* pSh); |
197 | | }; |
198 | | |
199 | | inline void SwFieldMgr::SetEvalExpFields(bool bEval) |
200 | 0 | { m_bEvalExp = bEval; } |
201 | | |
202 | | #endif |
203 | | |
204 | | /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |