LibreOffice Module sw (master) 1
flddinf.cxx
Go to the documentation of this file.
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
20#include <sfx2/frame.hxx>
21#include <svl/numformat.hxx>
22#include <svl/zforlist.hxx>
23#include <svl/zformat.hxx>
24#include <o3tl/string_view.hxx>
25
26#include <swtypes.hxx>
27#include <flddinf.hrc>
28#include <strings.hrc>
29#include <fldbas.hxx>
30#include <docufld.hxx>
31#include <wrtsh.hxx>
32#include <cmdid.h>
33
34#include "flddinf.hxx"
35#include <com/sun/star/beans/XPropertySet.hpp>
36#include <com/sun/star/beans/XPropertySetInfo.hpp>
37#include <com/sun/star/util/Time.hpp>
38#include <com/sun/star/util/DateTime.hpp>
39#include <com/sun/star/util/Date.hpp>
40
41#define USER_DATA_VERSION_1 "1"
42#define USER_DATA_VERSION USER_DATA_VERSION_1
43
44using namespace nsSwDocInfoSubType;
45using namespace com::sun::star;
46
48{
49 for (auto const& aID : FLD_SELECT)
50 rListBox.append_text(SwResId(aID));
51}
52
54 : SwFieldPage(pPage, pController, "modules/swriter/ui/flddocinfopage.ui", "FieldDocInfoPage", pCoreSet)
55 , m_nOldSel(0)
56 , m_nOldFormat(0)
57 , m_xTypeList(m_xBuilder->weld_tree_view("type-list"))
58 , m_xTypeTree(m_xBuilder->weld_tree_view("type-tree"))
59 // tdf#104278 have two tree views, one with expander and one without, the one with is only used
60 // when there are custom properties which use the expander, so the common case of no custom
61 // properties doesn't have an 'unexplained' expander margin
62 , m_pTypeView(m_xTypeTree.get())
63 , m_xSelection(m_xBuilder->weld_widget("selectframe"))
64 , m_xSelectionLB(m_xBuilder->weld_tree_view("select"))
65 , m_xFormat(m_xBuilder->weld_widget("formatframe"))
66 , m_xFormatLB(new SwNumFormatTreeView(m_xBuilder->weld_tree_view("format")))
67 , m_xFixedCB(m_xBuilder->weld_check_button("fixed"))
68{
69 m_xTypeList->make_sorted();
70 m_xTypeTree->make_sorted();
72
74 auto nHeight = m_pTypeView->get_height_rows(10);
75 m_xTypeTree->set_size_request(nWidth, nHeight);
76 m_xTypeList->set_size_request(nWidth, nHeight);
77 m_xFormatLB->get_widget().set_size_request(nWidth * 2, nHeight);
78 m_xSelectionLB->set_size_request(nWidth, nHeight);
79
80 //enable 'active' language selection
81 m_xFormatLB->SetShowLanguageControl(true);
82
83 const SfxUnoAnyItem* pItem = pCoreSet
84 ? pCoreSet->GetItem(FN_FIELD_DIALOG_DOC_PROPS, false)
85 : nullptr;
86 if ( pItem )
87 pItem->GetValue() >>= m_xCustomPropertySet;
88
89 // uitests
90 m_pTypeView->set_buildable_name("type-docinf");
91 m_xSelectionLB->set_buildable_name(m_xSelectionLB->get_buildable_name() + "-docinf");
92 m_xFormatLB->set_buildable_name(m_xFormatLB->get_buildable_name() + "-docinf");
93}
94
96{
97}
98
100{
101 Init(); // general initialisation
102
103 uno::Sequence<beans::Property> aCustomProperties;
104 if (m_xCustomPropertySet.is())
105 {
106 uno::Reference<beans::XPropertySetInfo> xSetInfo = m_xCustomPropertySet->getPropertySetInfo();
107 aCustomProperties = xSetInfo->getProperties();
108 }
109
110 if (aCustomProperties.hasElements())
111 {
112 m_xTypeList->hide();
113 m_xTypeList->set_buildable_name("type-list");
114 m_xTypeTree->show();
115 m_pTypeView = m_xTypeTree.get();
116 }
117 else
118 {
119 m_xTypeTree->hide();
120 m_xTypeTree->set_buildable_name("type-tree");
121 m_xTypeList->show();
122 m_pTypeView = m_xTypeList.get();
123 }
124
125 m_pTypeView->set_buildable_name("type-docinf");
126
127 // initialise TypeListBox
130 m_xSelEntry.reset();
131
132 // display SubTypes in TypeLB
133 sal_uInt16 nSubType = USHRT_MAX;
134 if (IsFieldEdit())
135 {
136 const SwField* pCurField = GetCurField();
137 nSubType = pCurField->GetSubType() & 0xff;
138 if( nSubType == DI_CUSTOM )
139 {
140 if (auto const pField = dynamic_cast<SwDocInfoField const*>(pCurField))
141 {
142 m_sOldCustomFieldName = pField->GetName();
143 }
144 }
145 m_xFormatLB->SetAutomaticLanguage(pCurField->IsAutomaticLanguage());
146 SwWrtShell *pSh = GetWrtShell();
147 if(pSh)
148 {
149 const SvNumberformat* pFormat = pSh->GetNumberFormatter()->GetEntry(pCurField->GetFormat());
150 if(pFormat)
151 m_xFormatLB->SetLanguage(pFormat->GetLanguage());
152 }
153 }
154
155 sal_Int32 nSelEntryData = -1;
156 const OUString sUserData = GetUserData();
157 sal_Int32 nIdx{ 0 };
158 if (o3tl::equalsIgnoreAsciiCase(o3tl::getToken(sUserData, 0, ';', nIdx), u"" USER_DATA_VERSION_1))
159 {
160 nSelEntryData = o3tl::toInt32(o3tl::getToken(sUserData, 0, ';', nIdx));
161 }
162
163 std::vector<OUString> aLst;
165 std::unique_ptr<weld::TreeIter> xEntry(m_pTypeView->make_iterator());
166 std::unique_ptr<weld::TreeIter> xExpandEntry;
167 for(size_t i = 0; i < aLst.size(); ++i)
168 {
169 if (!IsFieldEdit() || nSubType == i)
170 {
171 const OUString sId(OUString::number(i));
172 if (DI_CUSTOM == i)
173 {
174 if(m_xCustomPropertySet.is() )
175 {
176 if (aCustomProperties.hasElements())
177 {
178 std::unique_ptr<weld::TreeIter> xInfo(m_pTypeView->make_iterator());
179
180 OUString sText(SwResId(STR_CUSTOM_FIELD));
181 OUString sEntryId(OUString::number(USHRT_MAX));
182 m_pTypeView->insert(nullptr, -1, &sText, &sEntryId, nullptr,
183 nullptr, false, xInfo.get());
184 for (const auto& rProperty : aCustomProperties)
185 {
186 const OUString sEntry = rProperty.Name;
187
188 m_pTypeView->insert(xInfo.get(), -1, &sEntry, &sId,
189 nullptr, nullptr, false, xEntry.get());
190 if (m_sOldCustomFieldName == sEntry)
191 {
192 m_xSelEntry = m_pTypeView->make_iterator(xEntry.get());
193 xExpandEntry = m_pTypeView->make_iterator(xInfo.get());
194 }
195 }
196 }
197 }
198 }
199 else
200 {
201 if (!(IsFieldDlgHtmlMode() && (i == DI_EDIT || i == DI_SUBJECT || i == DI_PRINT)))
202 {
203 m_pTypeView->insert(nullptr, -1, &aLst[i], &sId,
204 nullptr, nullptr, false, xEntry.get());
205 }
206 }
207 if (static_cast<size_t>(nSelEntryData) == i)
208 m_xSelEntry = std::move(xEntry);
209 }
210 }
211
212 m_pTypeView->thaw();
213
214 if (xExpandEntry)
215 m_pTypeView->expand_row(*xExpandEntry);
216
217 // select old Pos
218 if (m_xSelEntry)
219 {
221 nSubType = m_pTypeView->get_id(*m_xSelEntry).toUInt32();
222 }
223 else
224 {
227 nSubType = m_pTypeView->get_id(*m_xSelEntry).toUInt32();
228 else
229 m_xSelEntry.reset();
230 }
231
232 FillSelectionLB(nSubType);
233 if (m_xSelEntry)
234 TypeHdl(*m_pTypeView);
235
237 m_pTypeView->connect_row_activated(LINK(this, SwFieldDokInfPage, TreeViewInsertHdl));
238 m_xSelectionLB->connect_changed(LINK(this, SwFieldDokInfPage, SubTypeHdl));
239 m_xSelectionLB->connect_row_activated(LINK(this, SwFieldDokInfPage, TreeViewInsertHdl));
240 m_xFormatLB->connect_row_activated(LINK(this, SwFieldDokInfPage, TreeViewInsertHdl));
241
242 if (IsFieldEdit())
243 {
244 m_nOldSel = m_xSelectionLB->get_selected_index();
246 m_xFixedCB->save_state();
247 }
248}
249
251{
252 // current ListBoxPos
253 if (!m_pTypeView->get_selected(m_xSelEntry.get()) &&
254 m_pTypeView->get_iter_first(*m_xSelEntry))
255 {
256 m_pTypeView->select(*m_xSelEntry);
257 }
258 FillSelectionLB(m_pTypeView->get_id(*m_xSelEntry).toUInt32());
259 SubTypeHdl(*m_xSelectionLB);
260}
261
263{
264 sal_uInt16 nSubType = m_pTypeView->get_id(*m_xSelEntry).toUInt32();
265 sal_Int32 nPos = m_xSelectionLB->get_selected_index();
266 sal_uInt16 nExtSubType;
267 SvNumFormatType nNewType = SvNumFormatType::ALL;
268
269 if (nSubType != DI_EDIT)
270 {
271 if (nPos == -1)
272 {
273 if (!m_xSelectionLB->n_children())
274 {
275 m_xFormatLB->clear();
276 m_xFormat->set_sensitive(false);
277 if( nSubType == DI_CUSTOM )
278 {
279 //find out which type the custom field has - for a start set to DATE format
280 const OUString sName = m_pTypeView->get_text(*m_xSelEntry);
281 try
282 {
283 uno::Any aVal = m_xCustomPropertySet->getPropertyValue( sName );
284 const uno::Type& rValueType = aVal.getValueType();
285 if( rValueType == ::cppu::UnoType<util::DateTime>::get())
286 {
287 nNewType = SvNumFormatType::DATETIME;
288 }
289 else if( rValueType == ::cppu::UnoType<util::Date>::get())
290 {
291 nNewType = SvNumFormatType::DATE;
292 }
293 else if( rValueType == ::cppu::UnoType<util::Time>::get())
294 {
295 nNewType = SvNumFormatType::TIME;
296 }
297 }
298 catch( const uno::Exception& )
299 {
300 }
301 }
302 else
303 return;
304 }
305 nPos = 0;
306 }
307
308 nExtSubType = m_xSelectionLB->get_id(nPos).toUInt32();
309 }
310 else
311 nExtSubType = DI_SUB_TIME;
312
313 SvNumFormatType nOldType = SvNumFormatType::ALL;
314 bool bEnable = false;
315 bool bOneArea = false;
316
317 if (m_xFormatLB->get_active())
318 nOldType = m_xFormatLB->GetFormatType();
319
320 switch (nExtSubType)
321 {
322 case DI_SUB_AUTHOR:
323 break;
324
325 case DI_SUB_DATE:
326 nNewType = SvNumFormatType::DATE;
327 bOneArea = true;
328 break;
329
330 case DI_SUB_TIME:
331 nNewType = SvNumFormatType::TIME;
332 bOneArea = true;
333 break;
334 }
335 if (nNewType == SvNumFormatType::ALL)
336 {
337 m_xFormatLB->clear();
338 }
339 else
340 {
341 if (nOldType != nNewType)
342 {
343 m_xFormatLB->SetFormatType(nNewType);
344 m_xFormatLB->SetOneArea(bOneArea);
345 }
346 bEnable = true;
347 }
348
349 sal_uInt32 nFormat = 0;
350
351 sal_uInt16 nOldSubType = 0;
352
353 if (IsFieldEdit())
354 {
355 if (auto const pField = dynamic_cast<SwDocInfoField const*>(GetCurField()))
356 {
357 nFormat = pField->GetFormat();
358 nOldSubType = pField->GetSubType() & 0xff00;
359 }
360 nPos = m_xSelectionLB->get_selected_index();
361 if (nPos != -1)
362 {
363 nSubType = m_xSelectionLB->get_id(nPos).toUInt32();
364
365 nOldSubType &= ~DI_SUB_FIXED;
366 if (nOldSubType == nSubType)
367 {
368 if (!nFormat && (nNewType == SvNumFormatType::DATE || nNewType == SvNumFormatType::TIME))
369 {
370 SwWrtShell *pSh = GetWrtShell();
371 if(pSh)
372 {
373 SvNumberFormatter* pFormatter = pSh->GetNumberFormatter();
374 LanguageType eLang = m_xFormatLB->GetCurLanguage();
375 if (nNewType == SvNumFormatType::DATE)
376 nFormat = pFormatter->GetFormatIndex( NF_DATE_SYSTEM_SHORT, eLang);
377 else if (nNewType == SvNumFormatType::TIME)
378 nFormat = pFormatter->GetFormatIndex( NF_TIME_HHMM, eLang);
379 }
380 }
381 m_xFormatLB->SetDefFormat(nFormat);
382 }
383 }
384 else if( (nSubType == DI_CUSTOM) && (nNewType != SvNumFormatType::ALL) )
385 {
386 m_xFormatLB->SetDefFormat(nFormat);
387 }
388 }
389
390 // Always allow Fixed Content to be turned off if it is currently on
391 m_xFormat->set_sensitive(bEnable || m_xFixedCB->get_active());
392
393 if (!bEnable)
394 m_xFormatLB->clear();
395 else if (m_xFormatLB->get_selected_index() == -1)
396 m_xFormatLB->select(0);
397}
398
399sal_Int32 SwFieldDokInfPage::FillSelectionLB(sal_uInt16 nSubType)
400{
401 // fill Format-Listbox
403
404 EnableInsert(nSubType != USHRT_MAX);
405
406 if (nSubType == USHRT_MAX) // Info-Text
407 nSubType = DI_SUBTYPE_BEGIN;
408
409 m_xSelectionLB->clear();
410
411 sal_uInt16 nSize = 0;
412 sal_Int32 nSelPos = -1;
413 sal_uInt16 nExtSubType = 0;
414
415 if (IsFieldEdit())
416 {
417 if (auto const pField = dynamic_cast<SwDocInfoField const*>(GetCurField()))
418 {
419 nExtSubType = pField->GetSubType() & 0xff00;
420 }
421 m_xFixedCB->set_active((nExtSubType & DI_SUB_FIXED) != 0);
422 nExtSubType = ((nExtSubType & ~DI_SUB_FIXED) >> 8) - 1;
423 }
424
425 if (nSubType < DI_CREATE || nSubType == DI_DOCNO || nSubType == DI_EDIT|| nSubType == DI_CUSTOM )
426 {
427 // Format Box is empty for Title and Time
428 }
429 else
430 {
431 nSize = GetFieldMgr().GetFormatCount(nTypeId, IsFieldDlgHtmlMode());
432 for (sal_uInt16 i = 0; i < nSize; ++i)
433 {
434 OUString sId(OUString::number(GetFieldMgr().GetFormatId(nTypeId, i)));
435 m_xSelectionLB->append(sId, GetFieldMgr().GetFormatStr(nTypeId, i));
436 if (IsFieldEdit() && i == nExtSubType)
437 nSelPos = i;
438 }
439 }
440
441 bool bEnable = nSize != 0;
442
443 if (nSize)
444 {
445 if (m_xSelectionLB->get_selected_index() == -1)
446 m_xSelectionLB->select(nSelPos == USHRT_MAX ? 0 : nSelPos);
447 bEnable = true;
448 }
449
450 m_xSelection->set_sensitive(bEnable);
451
452 return nSize;
453}
454
456{
457 if (!m_xSelEntry)
458 return false;
459
460 sal_uInt16 nSubType = m_pTypeView->get_id(*m_xSelEntry).toUInt32();
461 if (nSubType == USHRT_MAX)
462 return false;
463
464 sal_uInt32 nFormat = 0;
465
466 sal_Int32 nPos = m_xSelectionLB->get_selected_index();
467
468 OUString aName;
469 if (DI_CUSTOM == nSubType)
471
472 if (nPos != -1)
473 nSubType |= m_xSelectionLB->get_id(nPos).toUInt32();
474
475 if (m_xFixedCB->get_active())
476 nSubType |= DI_SUB_FIXED;
477
478 nPos = m_xFormatLB->get_selected_index();
479 if(nPos != -1)
480 nFormat = m_xFormatLB->GetFormat();
481
482 if (!IsFieldEdit() || m_nOldSel != m_xSelectionLB->get_selected_index() ||
483 m_nOldFormat != nFormat || m_xFixedCB->get_state_changed_from_saved()
484 || (DI_CUSTOM == nSubType && aName != m_sOldCustomFieldName ))
485 {
486 InsertField(SwFieldTypesEnum::DocumentInfo, nSubType, aName, OUString(), nFormat,
487 ' ', m_xFormatLB->IsAutomaticLanguage());
488 }
489
490 return false;
491}
492
493std::unique_ptr<SfxTabPage> SwFieldDokInfPage::Create( weld::Container* pPage, weld::DialogController* pController,
494 const SfxItemSet *const pAttrSet)
495{
496 return std::make_unique<SwFieldDokInfPage>(pPage, pController, pAttrSet);
497}
498
500{
501 return GRP_REG;
502}
503
505{
506 int nEntry = m_pTypeView->get_selected_index();
507 sal_uInt16 nTypeSel = nEntry != -1 ? m_pTypeView->get_id(nEntry).toUInt32() : USHRT_MAX;
508 SetUserData(USER_DATA_VERSION ";" + OUString::number( nTypeSel ));
509}
510
511/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
const SfxPoolItem * GetItem(sal_uInt16 nWhich, bool bSearchInParent=true) const
void SetUserData(const OUString &rString)
const OUString & GetUserData() const
const css::uno::Any & GetValue() const
sal_uInt32 GetFormatIndex(NfIndexTableOffset, LanguageType eLnge=LANGUAGE_DONTKNOW)
const SvNumberformat * GetEntry(sal_uInt32 nKey) const
LanguageType GetLanguage() const
SvNumberFormatter * GetNumberFormatter()
Query NumberFormatter from document.
Definition: editsh.cxx:756
sal_uInt32 m_nOldFormat
Definition: flddinf.hxx:34
virtual void Reset(const SfxItemSet *rSet) override
Definition: flddinf.cxx:99
std::unique_ptr< weld::TreeView > m_xSelectionLB
Definition: flddinf.hxx:41
virtual bool FillItemSet(SfxItemSet *rSet) override
Definition: flddinf.cxx:455
OUString m_sOldCustomFieldName
Definition: flddinf.hxx:35
std::unique_ptr< SwNumFormatTreeView > m_xFormatLB
Definition: flddinf.hxx:43
std::unique_ptr< weld::TreeView > m_xTypeList
Definition: flddinf.hxx:37
std::unique_ptr< weld::TreeView > m_xTypeTree
Definition: flddinf.hxx:38
virtual void FillUserData() override
Definition: flddinf.cxx:504
static std::unique_ptr< SfxTabPage > Create(weld::Container *pPage, weld::DialogController *pController, const SfxItemSet *rAttrSet)
Definition: flddinf.cxx:493
std::unique_ptr< weld::Widget > m_xSelection
Definition: flddinf.hxx:40
sal_Int32 m_nOldSel
Definition: flddinf.hxx:33
SwFieldDokInfPage(weld::Container *pPage, weld::DialogController *pController, const SfxItemSet *pSet)
Definition: flddinf.cxx:53
std::unique_ptr< weld::TreeIter > m_xSelEntry
Definition: flddinf.hxx:30
std::unique_ptr< weld::CheckButton > m_xFixedCB
Definition: flddinf.hxx:44
weld::TreeView * m_pTypeView
Definition: flddinf.hxx:39
virtual ~SwFieldDokInfPage() override
Definition: flddinf.cxx:95
sal_Int32 FillSelectionLB(sal_uInt16 nSubTypeId)
Definition: flddinf.cxx:399
css::uno::Reference< css::beans::XPropertySet > m_xCustomPropertySet
Definition: flddinf.hxx:31
virtual sal_uInt16 GetGroup() override
Definition: flddinf.cxx:499
sal_uInt16 GetFormatCount(SwFieldTypesEnum nTypeId, bool bHtmlMode) const
Definition: fldmgr.cxx:676
void GetSubTypes(SwFieldTypesEnum nId, std::vector< OUString > &rToFill)
Definition: fldmgr.cxx:573
void InsertField(SwFieldTypesEnum nTypeId, sal_uInt16 nSubType, const OUString &rPar1, const OUString &rPar2, sal_uInt32 nFormatId, sal_Unicode cDelim=' ', bool bIsAutomaticLanguage=true)
Definition: fldpage.cxx:116
void Init()
Definition: fldpage.cxx:64
SwFieldMgr & GetFieldMgr()
Definition: fldpage.hxx:81
bool IsFieldEdit() const
Definition: fldpage.hxx:62
bool IsFieldDlgHtmlMode() const
Definition: fldpage.hxx:49
void EnableInsert(bool bEnable)
Definition: fldpage.cxx:322
SwField * GetCurField()
Definition: fldpage.hxx:51
SwWrtShell * GetWrtShell()
Definition: fldpage.hxx:52
Base class of all fields.
Definition: fldbas.hxx:296
bool IsAutomaticLanguage() const
Definition: fldbas.hxx:387
virtual sal_uInt16 GetSubType() const
Definition: fldbas.cxx:355
sal_uInt32 GetFormat() const
Query parameters for dialog and for BASIC.
Definition: fldbas.hxx:407
Used by the UI to modify the document model.
Definition: wrtsh.hxx:97
virtual std::unique_ptr< TreeIter > make_iterator(const TreeIter *pOrig=nullptr) const=0
virtual void expand_row(const TreeIter &rIter)=0
void connect_row_activated(const Link< TreeView &, bool > &rLink)
virtual OUString get_text(int row, int col=-1) const=0
void append_text(const OUString &rStr)
virtual void insert(const TreeIter *pParent, int pos, const OUString *pStr, const OUString *pId, const OUString *pIconName, VirtualDevice *pImageSurface, bool bChildrenOnDemand, TreeIter *pRet)=0
virtual void clear()=0
void connect_changed(const Link< TreeView &, void > &rLink)
virtual bool get_iter_first(TreeIter &rIter) const=0
virtual int get_height_rows(int nRows) const=0
virtual void select(int pos)=0
virtual int get_selected_index() const=0
virtual OUString get_id(int pos) const=0
virtual void freeze()=0
virtual void thaw()=0
virtual float get_approximate_digit_width() const=0
virtual void set_buildable_name(const OUString &rName)=0
#define FN_FIELD_DIALOG_DOC_PROPS
Definition: cmdid.h:662
float u
SwFieldTypesEnum
List of FieldTypes at UI.
Definition: fldbas.hxx:98
void FillFieldSelect(weld::TreeView &rListBox)
Definition: flddinf.cxx:47
#define USER_DATA_VERSION_1
Definition: flddinf.cxx:41
#define USER_DATA_VERSION
Definition: flddinf.cxx:42
IMPL_LINK_NOARG(SwFieldDokInfPage, TypeHdl, weld::TreeView &, void)
Definition: flddinf.cxx:250
@ GRP_REG
Definition: fldmgr.hxx:57
#define FIELD_COLUMN_WIDTH
Definition: fldpage.hxx:25
OUString sName
OUString aName
sal_uInt16 nPos
int i
const SwDocInfoSubType DI_DOCNO
Definition: docufld.hxx:78
const SwDocInfoSubType DI_SUB_AUTHOR
Definition: docufld.hxx:83
const SwDocInfoSubType DI_CUSTOM
Definition: docufld.hxx:80
const SwDocInfoSubType DI_SUBTYPE_BEGIN
NB: these must denote consecutive integers! NB2: these are extended by 4 DI_INFO values for backward ...
Definition: docufld.hxx:70
const SwDocInfoSubType DI_SUB_FIXED
Definition: docufld.hxx:86
const SwDocInfoSubType DI_PRINT
Definition: docufld.hxx:77
const SwDocInfoSubType DI_SUB_DATE
Definition: docufld.hxx:85
const SwDocInfoSubType DI_EDIT
Definition: docufld.hxx:79
const SwDocInfoSubType DI_SUBJECT
Definition: docufld.hxx:72
const SwDocInfoSubType DI_SUB_TIME
Definition: docufld.hxx:84
const SwDocInfoSubType DI_CREATE
Definition: docufld.hxx:75
bool equalsIgnoreAsciiCase(std::u16string_view s1, std::u16string_view s2)
sal_Int32 toInt32(std::u16string_view str, sal_Int16 radix=10)
std::basic_string_view< charT, traits > getToken(std::basic_string_view< charT, traits > sv, charT delimiter, std::size_t &position)
css::uno::Reference< css::linguistic2::XProofreadingIterator > get(css::uno::Reference< css::uno::XComponentContext > const &context)
OUString SwResId(TranslateId aId)
Definition: swmodule.cxx:168
OUString sId
SvNumFormatType
NF_DATE_SYSTEM_SHORT
NF_TIME_HHMM