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