LibreOffice Module sw (master)  1
cnttab.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 <config_folders.h>
21 
22 #include <sal/log.hxx>
23 #include <svl/style.hxx>
24 #include <vcl/help.hxx>
25 #include <vcl/weld.hxx>
26 #include <svl/stritem.hxx>
27 #include <svl/urihelper.hxx>
28 #include <unotools/pathoptions.hxx>
29 #include <sfx2/request.hxx>
30 #include <sfx2/viewfrm.hxx>
31 #include <sfx2/dispatch.hxx>
32 #include <sfx2/docfile.hxx>
33 #include <svx/dialogs.hrc>
34 #include <svx/svxdlg.hxx>
35 #include <svx/flagsdef.hxx>
36 #include <svx/svxids.hrc>
37 #include <com/sun/star/ui/dialogs/TemplateDescription.hpp>
38 #include <com/sun/star/ui/dialogs/XFilePicker3.hpp>
39 #include <com/sun/star/ui/dialogs/XFilterManager.hpp>
42 #include <editeng/unolingu.hxx>
43 #include <column.hxx>
44 #include <fmtfsize.hxx>
45 #include <shellio.hxx>
46 #include <authfld.hxx>
47 #include <swtypes.hxx>
48 #include <wrtsh.hxx>
49 #include <view.hxx>
50 #include <basesh.hxx>
51 #include <outline.hxx>
52 #include <cnttab.hxx>
53 #include <swuicnttab.hxx>
54 #include <poolfmt.hxx>
55 #include <strings.hrc>
56 #include <uitool.hxx>
57 #include <fmtcol.hxx>
58 #include <fldbas.hxx>
59 #include <expfld.hxx>
60 #include <unotools.hxx>
61 #include <unotxdoc.hxx>
62 #include <docsh.hxx>
63 #include <swmodule.hxx>
64 #include <modcfg.hxx>
65 
66 #include <cmdid.h>
67 #include <globals.hrc>
68 #include <cnttab.hrc>
69 #include <SwStyleNameMapper.hxx>
70 #include <sfx2/filedlghelper.hxx>
71 #include <toxwrap.hxx>
72 #include <chpfld.hxx>
73 
74 #include <sfx2/app.hxx>
75 
76 #include <unomid.h>
77 
78 #include <cmath>
79 #include <memory>
80 #include <vector>
81 #include <numeric>
82 
83 
84 using namespace ::com::sun::star;
85 using namespace ::com::sun::star::lang;
86 using namespace ::com::sun::star::uno;
87 using namespace com::sun::star::ui::dialogs;
88 using namespace ::sfx2;
90 
91 static const sal_Unicode aDeliStart = '['; // for the form
92 static const sal_Unicode aDeliEnd = ']'; // for the form
93 
94 static OUString lcl_CreateAutoMarkFileDlg(weld::Window* pParent, const OUString& rURL,
95  const OUString& rFileString, bool bOpen)
96 {
97  OUString sRet;
98 
99  FileDialogHelper aDlgHelper( bOpen ?
100  TemplateDescription::FILEOPEN_SIMPLE : TemplateDescription::FILESAVE_AUTOEXTENSION,
101  FileDialogFlags::NONE, pParent);
102  uno::Reference < XFilePicker3 > xFP = aDlgHelper.GetFilePicker();
103 
104  xFP->appendFilter( rFileString, "*.sdi" );
105  xFP->setCurrentFilter( rFileString ) ;
106 
107  if( !rURL.isEmpty() )
108  xFP->setDisplayDirectory( rURL );
109  else
110  {
111  SvtPathOptions aPathOpt;
112  xFP->setDisplayDirectory( aPathOpt.GetUserConfigPath() );
113  }
114 
115  if( aDlgHelper.Execute() == ERRCODE_NONE )
116  {
117  sRet = xFP->getSelectedFiles().getConstArray()[0];
118  }
119 
120  return sRet;
121 }
122 
124 {
125  OUString sSearch;
126  OUString sAlternative;
127  OUString sPrimKey;
128  OUString sSecKey;
129  OUString sComment;
130  bool bCase;
131  bool bWord;
132 
134  bCase(false),
135  bWord(false){}
136 };
137 
138 typedef ::svt::EditBrowseBox SwEntryBrowseBox_Base;
139 
141 {
144 
145  OUString m_sSearch;
146  OUString m_sAlternative;
147  OUString m_sPrimKey;
148  OUString m_sSecKey;
149  OUString m_sComment;
151  OUString m_sWordOnly;
152  OUString m_sYes;
153  OUString m_sNo;
154 
155  std::vector<std::unique_ptr<AutoMarkEntry>> m_Entries;
156 
159 
162 
163 protected:
164  virtual bool SeekRow( long nRow ) override;
165  virtual void PaintCell(OutputDevice& rDev, const tools::Rectangle& rRect, sal_uInt16 nColId) const override;
166  virtual void InitController(::svt::CellControllerRef& rController, long nRow, sal_uInt16 nCol) override;
167  virtual ::svt::CellController* GetController(long nRow, sal_uInt16 nCol) override;
168  virtual bool SaveModified() override;
169 
170  std::vector<long> GetOptimalColWidths() const;
171 
172 public:
173  SwEntryBrowseBox(const css::uno::Reference<css::awt::XWindow> &rParent);
174  virtual ~SwEntryBrowseBox() override;
175  virtual void dispose() override;
176  void ReadEntries(SvStream& rInStr);
177  void WriteEntries(SvStream& rOutStr);
178 
179  bool IsModified()const override;
180 
181  virtual OUString GetCellText( long nRow, sal_uInt16 nColumn ) const override;
182  virtual void Resize() override;
183  virtual Size GetOptimalSize() const override;
184 };
185 
187 {
188  OUString sAutoMarkURL;
190 
191  std::unique_ptr<weld::Button> m_xOKPB;
192  std::unique_ptr<weld::Container> m_xTable;
193  css::uno::Reference<css::awt::XWindow> m_xTableCtrlParent;
195 
196  DECL_LINK(OkHdl, weld::Button&, void);
197 public:
198  SwAutoMarkDlg_Impl(weld::Window* pParent, const OUString& rAutoMarkURL,
199  bool bCreate);
200  virtual ~SwAutoMarkDlg_Impl() override;
201 };
202 
203 sal_uInt16 CurTOXType::GetFlatIndex() const
204 {
205  return static_cast< sal_uInt16 >( (eType == TOX_USER && nIndex)
206  ? TOX_AUTHORITIES + nIndex : eType );
207 }
208 
210  SwWrtShell &rShell, SwTOXBase* pCurTOX,
211  sal_uInt16 nToxType, bool bGlobal)
212  : SfxTabDialogController(pParent, "modules/swriter/ui/tocdialog.ui", "TocDialog", &rSet)
213  , m_pMgr( new SwTOXMgr( &rShell ) )
214  , m_rWrtShell(rShell)
215  , m_pParamTOXBase(pCurTOX)
216  , m_sUserDefinedIndex(SwResId(STR_USER_DEFINED_INDEX))
217  , m_nInitialTOXType(nToxType)
218  , m_bEditTOX(false)
219  , m_bExampleCreated(false)
220  , m_bGlobalFlag(bGlobal)
221  , m_xShowExampleCB(m_xBuilder->weld_check_button("showexample"))
222 {
225 
226  const sal_uInt16 nUserTypeCount = m_rWrtShell.GetTOXTypeCount(TOX_USER);
227  m_vTypeData.resize(nUserTypeCount + 6);
228  //the standard user index is on position TOX_USER
229  //all user indexes follow after position TOX_AUTHORITIES
230  if(pCurTOX)
231  {
232  m_bEditTOX = true;
233  }
234  for(int i = m_vTypeData.size() - 1; i > -1; i--)
235  {
236  m_vTypeData[i].m_pxIndexSections.reset(new SwIndexSections_Impl);
237  if(pCurTOX)
238  {
239  m_eCurrentTOXType.eType = pCurTOX->GetType();
240  sal_uInt16 nArrayIndex = static_cast< sal_uInt16 >(m_eCurrentTOXType.eType);
242  {
243  //which user type is it?
244  for(sal_uInt16 nUser = 0; nUser < nUserTypeCount; nUser++)
245  {
246  const SwTOXType* pTemp = m_rWrtShell.GetTOXType(TOX_USER, nUser);
247  if(pCurTOX->GetTOXType() == pTemp)
248  {
249  m_eCurrentTOXType.nIndex = nUser;
250  nArrayIndex = static_cast< sal_uInt16 >(nUser > 0 ? TOX_AUTHORITIES + nUser : TOX_USER);
251  break;
252  }
253  }
254  }
255  m_vTypeData[nArrayIndex].m_pForm.reset(new SwForm(pCurTOX->GetTOXForm()));
256  m_vTypeData[nArrayIndex].m_pDescription = CreateTOXDescFromTOXBase(pCurTOX);
258  {
259  const SwAuthorityFieldType* pFType = static_cast<const SwAuthorityFieldType*>(
261  if(pFType)
262  {
263  OUString sBrackets;
264  if(pFType->GetPrefix())
265  sBrackets += OUStringChar(pFType->GetPrefix());
266  if(pFType->GetSuffix())
267  sBrackets += OUStringChar(pFType->GetSuffix());
268  m_vTypeData[nArrayIndex].m_pDescription->SetAuthBrackets(sBrackets);
269  m_vTypeData[nArrayIndex].m_pDescription->SetAuthSequence(pFType->IsSequence());
270  }
271  else
272  {
273  m_vTypeData[nArrayIndex].m_pDescription->SetAuthBrackets("[]");
274  }
275  }
276  }
277  }
279  AddTabPage("index", SwTOXSelectTabPage::Create, nullptr);
280  AddTabPage("styles", SwTOXStylesTabPage::Create, nullptr);
281  AddTabPage("columns", SwColumnPage::Create, nullptr);
282  AddTabPage("background", pFact->GetTabPageCreatorFunc(RID_SVXPAGE_BKG), nullptr);
283  AddTabPage("entries", SwTOXEntryTabPage::Create, nullptr);
284  if (!pCurTOX)
285  SetCurPageId("index");
286 
287  m_xShowExampleCB->connect_toggled(LINK(this, SwMultiTOXTabDialog, ShowPreviewHdl));
288  m_xShowExampleCB->set_active(SW_MOD()->GetModuleConfig()->IsShowIndexPreview());
289 
290  ShowPreviewHdl(*m_xShowExampleCB);
291 }
292 
294 {
295  SW_MOD()->GetModuleConfig()->SetShowIndexPreview(m_xShowExampleCB->get_active());
296 }
297 
298 void SwMultiTOXTabDialog::PageCreated(const OString& rId, SfxTabPage &rPage)
299 {
300  if (rId == "background")
301  {
302  SfxAllItemSet aSet(*(GetInputSetImpl()->GetPool()));
303  aSet.Put (SfxUInt32Item(SID_FLAG_TYPE, static_cast<sal_uInt32>(SvxBackgroundTabFlags::SHOW_SELECTOR)));
304  rPage.PageCreated(aSet);
305  }
306  else if (rId == "columns")
307  {
309 
310  static_cast<SwColumnPage&>(rPage).SetPageWidth(rSize.GetWidth());
311  }
312  else if (rId == "entries")
313  static_cast<SwTOXEntryTabPage&>(rPage).SetWrtShell(m_rWrtShell);
314  else if (rId == "index")
315  {
316  static_cast<SwTOXSelectTabPage&>(rPage).SetWrtShell(m_rWrtShell);
318  static_cast<SwTOXSelectTabPage&>(rPage).SelectType(static_cast<TOXTypes>(m_nInitialTOXType));
319  }
320 }
321 
323 {
324  short nRet = SfxTabDialogController::Ok();
327 
328  const sal_uInt16 nIndex = m_eCurrentTOXType.GetFlatIndex();
329  if(m_vTypeData[nIndex].m_pForm)
330  {
331  rDesc.SetForm(*m_vTypeData[nIndex].m_pForm);
332  aNewDef.SetTOXForm(*m_vTypeData[nIndex].m_pForm);
333  }
334  rDesc.ApplyTo(aNewDef);
335  if(!m_bGlobalFlag)
336  m_pMgr->UpdateOrInsertTOX(
337  rDesc, nullptr, GetOutputItemSet());
338  else if(m_bEditTOX)
339  m_pMgr->UpdateOrInsertTOX(
340  rDesc, &m_pParamTOXBase, GetOutputItemSet());
341 
344 
345  return nRet;
346 }
347 
349 {
350  const sal_uInt16 nIndex = eType.GetFlatIndex();
351  if(!m_vTypeData[nIndex].m_pForm)
352  m_vTypeData[nIndex].m_pForm.reset(new SwForm(eType.eType));
353  return m_vTypeData[nIndex].m_pForm.get();
354 }
355 
357 {
358  const sal_uInt16 nIndex = eType.GetFlatIndex();
359  if(!m_vTypeData[nIndex].m_pDescription)
360  {
361  const SwTOXBase* pDef = m_rWrtShell.GetDefaultTOXBase( eType.eType );
362  if(pDef)
363  m_vTypeData[nIndex].m_pDescription = CreateTOXDescFromTOXBase(pDef);
364  else
365  {
366  m_vTypeData[nIndex].m_pDescription.reset(new SwTOXDescription(eType.eType));
367  if(eType.eType == TOX_USER)
368  m_vTypeData[nIndex].m_pDescription->SetTitle(m_sUserDefinedIndex);
369  else
370  m_vTypeData[nIndex].m_pDescription->SetTitle(
371  m_rWrtShell.GetTOXType(eType.eType, 0)->GetTypeName());
372  }
373  if(TOX_AUTHORITIES == eType.eType)
374  {
375  const SwAuthorityFieldType* pFType = static_cast<const SwAuthorityFieldType*>(
377  if(pFType)
378  {
379  m_vTypeData[nIndex].m_pDescription->SetAuthBrackets(OUStringChar(pFType->GetPrefix()) +
380  OUStringChar(pFType->GetSuffix()));
381  m_vTypeData[nIndex].m_pDescription->SetAuthSequence(pFType->IsSequence());
382  }
383  else
384  {
385  m_vTypeData[nIndex].m_pDescription->SetAuthBrackets("[]");
386  }
387  }
388  else if(TOX_INDEX == eType.eType)
389  m_vTypeData[nIndex].m_pDescription->SetMainEntryCharStyle(SwResId(STR_POOLCHR_IDX_MAIN_ENTRY));
390 
391  }
392  return *m_vTypeData[nIndex].m_pDescription;
393 }
394 
395 std::unique_ptr<SwTOXDescription> SwMultiTOXTabDialog::CreateTOXDescFromTOXBase(
396  const SwTOXBase*pCurTOX)
397 {
398  std::unique_ptr<SwTOXDescription> pDesc(new SwTOXDescription(pCurTOX->GetType()));
399  for(sal_uInt16 i = 0; i < MAXLEVEL; i++)
400  pDesc->SetStyleNames(pCurTOX->GetStyleNames(i), i);
401  pDesc->SetAutoMarkURL(m_rWrtShell.GetTOIAutoMarkURL());
402  pDesc->SetTitle(pCurTOX->GetTitle());
403 
404  pDesc->SetContentOptions(pCurTOX->GetCreateType());
405  if(pDesc->GetTOXType() == TOX_INDEX)
406  pDesc->SetIndexOptions(pCurTOX->GetOptions());
407  pDesc->SetMainEntryCharStyle(pCurTOX->GetMainEntryCharStyle());
408  if(pDesc->GetTOXType() != TOX_INDEX)
409  pDesc->SetLevel(static_cast<sal_uInt8>(pCurTOX->GetLevel()));
410  pDesc->SetCreateFromObjectNames(pCurTOX->IsFromObjectNames());
411  pDesc->SetSequenceName(pCurTOX->GetSequenceName());
412  pDesc->SetCaptionDisplay(pCurTOX->GetCaptionDisplay());
413  pDesc->SetFromChapter(pCurTOX->IsFromChapter());
414  pDesc->SetReadonly(pCurTOX->IsProtected());
415  pDesc->SetOLEOptions(pCurTOX->GetOLEOptions());
416  pDesc->SetLevelFromChapter(pCurTOX->IsLevelFromChapter());
417  pDesc->SetLanguage(pCurTOX->GetLanguage());
418  pDesc->SetSortAlgorithm(pCurTOX->GetSortAlgorithm());
419  return pDesc;
420 }
421 
423 {
424  if (m_xShowExampleCB->get_active())
425  {
426  if(!m_xExampleFrame && !m_bExampleCreated)
427  {
428  m_bExampleCreated = true;
429  OUString sTemplate("internal/idxexample.odt");
430 
431  SvtPathOptions aOpt;
432  bool bExist = aOpt.SearchFile( sTemplate, SvtPathOptions::PATH_TEMPLATE );
433 
434  if(!bExist)
435  {
436  OUString sInfo(SwResId(STR_FILE_NOT_FOUND));
437  sInfo = sInfo.replaceFirst( "%1", sTemplate );
438  sInfo = sInfo.replaceFirst( "%2", aOpt.GetTemplatePath() );
439  std::unique_ptr<weld::MessageDialog> xInfoBox(Application::CreateMessageDialog(m_xDialog.get(),
440  VclMessageType::Info, VclButtonsType::Ok,
441  sInfo));
442  xInfoBox->run();
443  }
444  else
445  {
446  Link<SwOneExampleFrame&,void> aLink(LINK(this, SwMultiTOXTabDialog, CreateExample_Hdl));
447  m_xExampleFrame.reset(new SwOneExampleFrame(EX_SHOW_ONLINE_LAYOUT, &aLink, &sTemplate));
448  m_xExampleFrameWin.reset(new weld::CustomWeld(*m_xBuilder, "example", *m_xExampleFrame));
449  }
450  m_xShowExampleCB->set_visible(m_xExampleFrame != nullptr);
451  }
452  }
453 
454  if (m_xExampleFrame)
455  {
456  const bool bSetViewWindow = m_xShowExampleCB->get_active();
457  if (bSetViewWindow)
458  m_xExampleFrame->Show();
459  else
460  m_xExampleFrame->Hide();
461  }
462 
463  m_xDialog->resize_to_request();
464 }
465 
466 bool SwMultiTOXTabDialog::IsNoNum(SwWrtShell& rSh, const OUString& rName)
467 {
468  SwTextFormatColl* pColl = rSh.GetParaStyle(rName);
469  if(pColl && ! pColl->IsAssignedToListLevelOfOutlineStyle())
470  return true;
471 
472  const sal_uInt16 nId = SwStyleNameMapper::GetPoolIdFromUIName(
474  return nId != USHRT_MAX &&
476 }
477 
479 {
480  OUString* pStyleArr;
481 
482  std::unique_ptr<weld::Button> m_xOk;
483  std::unique_ptr<weld::Button> m_xLeftPB;
484  std::unique_ptr<weld::Button> m_xRightPB;
485  std::unique_ptr<weld::TreeView> m_xHeaderTree;
486 
487  DECL_LINK(OkHdl, weld::Button&, void);
488  DECL_LINK(LeftRightHdl, weld::Button&, void);
489  DECL_LINK(KeyInput, const KeyEvent&, bool);
490  DECL_LINK(TreeSizeAllocHdl, const Size&, void);
491  typedef std::pair<int, int> row_col;
492  DECL_LINK(RadioToggleOnHdl, const row_col&, void);
493 
494 public:
495  SwAddStylesDlg_Impl(weld::Window* pParent, SwWrtShell const & rWrtSh, OUString rStringArr[]);
496 };
497 
499  SwWrtShell const & rWrtSh, OUString rStringArr[])
500  : SfxDialogController(pParent, "modules/swriter/ui/assignstylesdialog.ui", "AssignStylesDialog")
501  , pStyleArr(rStringArr)
502  , m_xOk(m_xBuilder->weld_button("ok"))
503  , m_xLeftPB(m_xBuilder->weld_button("left"))
504  , m_xRightPB(m_xBuilder->weld_button("right"))
505  , m_xHeaderTree(m_xBuilder->weld_tree_view("styles"))
506 {
507  m_xOk->connect_clicked(LINK(this, SwAddStylesDlg_Impl, OkHdl));
508  m_xLeftPB->connect_clicked(LINK(this, SwAddStylesDlg_Impl, LeftRightHdl));
509  m_xRightPB->connect_clicked(LINK(this, SwAddStylesDlg_Impl, LeftRightHdl));
510  m_xHeaderTree->connect_size_allocate(LINK(this, SwAddStylesDlg_Impl, TreeSizeAllocHdl));
511 
512  std::vector<int> aRadioColumns;
513  for (sal_uInt16 i = 0; i <= MAXLEVEL; ++i)
514  aRadioColumns.push_back(i + 1);
515  m_xHeaderTree->set_toggle_columns_as_radio(aRadioColumns);
516  m_xHeaderTree->connect_toggled(LINK(this, SwAddStylesDlg_Impl, RadioToggleOnHdl));
517 
518  std::vector<int> aWidths;
519  aWidths.push_back(m_xHeaderTree->get_approximate_digit_width() * 30);
520  int nPadding = m_xHeaderTree->get_approximate_digit_width() * 2;
521  OUString sTitle(m_xHeaderTree->get_column_title(1));
522  for (sal_uInt16 i = 0; i <= MAXLEVEL; ++i)
523  {
524  sTitle = OUString::number(i);
525  m_xHeaderTree->set_column_title(i + 1, sTitle);
526  aWidths.push_back(m_xHeaderTree->get_pixel_size(sTitle).Width() + nPadding);
527  }
528  m_xHeaderTree->set_column_fixed_widths(aWidths);
529  auto nWidth = std::accumulate(aWidths.begin(), aWidths.end(), 0);
530  m_xHeaderTree->set_size_request(nWidth, m_xHeaderTree->get_height_rows(15));
531 
532  int nRow(0);
533  for (sal_uInt16 i = 0; i < MAXLEVEL; ++i)
534  {
535  const OUString &rStyles{rStringArr[i]};
536  if (rStyles.isEmpty())
537  continue;
538  sal_Int32 nPos(0);
539  do
540  {
541  OUString sEntry = rStyles.getToken(0, TOX_STYLE_DELIMITER, nPos);
542  m_xHeaderTree->append_text(sEntry);
543  for (sal_uInt16 j = 0; j <= MAXLEVEL; ++j)
544  {
545  TriState eState = i == j - 1 ? TRISTATE_TRUE : TRISTATE_FALSE;
546  m_xHeaderTree->set_toggle(nRow, eState, j + 1);
547  }
548  ++nRow;
549  } while (nPos>=0);
550  }
551  // now the other styles
552 
553  const sal_uInt16 nSz = rWrtSh.GetTextFormatCollCount();
554  for (sal_uInt16 j = 0; j < nSz; ++j)
555  {
556  const SwTextFormatColl& rColl = rWrtSh.GetTextFormatColl(j);
557  if (rColl.IsDefault())
558  continue;
559 
560  const OUString aName = rColl.GetName();
561  if (!aName.isEmpty())
562  {
563  bool bEntry = false;
564  int nChildren = m_xHeaderTree->n_children();
565  for (int i = 0; i < nChildren; ++i)
566  {
567  if (m_xHeaderTree->get_text(i, 0) == aName)
568  {
569  bEntry = true;
570  break;
571  }
572  }
573  if (!bEntry)
574  {
575  m_xHeaderTree->append_text(aName);
576  for (sal_uInt16 k = 0; k <= MAXLEVEL; ++k)
577  {
578  TriState eState = k == 0 ? TRISTATE_TRUE : TRISTATE_FALSE;
579  m_xHeaderTree->set_toggle(nRow, eState, k + 1);
580  }
581  ++nRow;
582  }
583  }
584  }
585  m_xHeaderTree->make_sorted();
586  m_xHeaderTree->select(0);
587  m_xHeaderTree->connect_key_release(LINK(this, SwAddStylesDlg_Impl, KeyInput));
588 }
589 
590 IMPL_LINK(SwAddStylesDlg_Impl, TreeSizeAllocHdl, const Size&, rSize, void)
591 {
592  auto nWidth = rSize.Width();
593 
594  std::vector<int> aWidths;
595  aWidths.push_back(0);
596  int nPadding = m_xHeaderTree->get_approximate_digit_width() * 2;
597  for (sal_uInt16 i = 0; i <= MAXLEVEL; ++i)
598  {
599  OUString sTitle(m_xHeaderTree->get_column_title(i + 1));
600  aWidths.push_back(m_xHeaderTree->get_pixel_size(sTitle).Width() + nPadding);
601  }
602  auto nOtherWidth = std::accumulate(aWidths.begin(), aWidths.end(), 0);
603  aWidths[0] = nWidth - nOtherWidth;
604  m_xHeaderTree->set_column_fixed_widths(aWidths);
605 }
606 
607 IMPL_LINK(SwAddStylesDlg_Impl, RadioToggleOnHdl, const row_col&, rRowCol, void)
608 {
609  for (sal_uInt16 i = 0; i <= MAXLEVEL; ++i)
610  {
611  TriState eState = rRowCol.second == i + 1 ? TRISTATE_TRUE : TRISTATE_FALSE;
612  m_xHeaderTree->set_toggle(rRowCol.first, eState, i + 1);
613  }
614 }
615 
616 IMPL_LINK(SwAddStylesDlg_Impl, KeyInput, const KeyEvent&, rKEvt, bool)
617 {
618  vcl::KeyCode aCode = rKEvt.GetKeyCode();
619  bool bHandled = false;
620 
621  if (aCode.GetCode() == KEY_ADD || aCode.GetCode() == KEY_RIGHT)
622  {
623  LeftRightHdl(*m_xRightPB);
624  bHandled = true;
625  }
626  else if (aCode.GetCode() == KEY_SUBTRACT || aCode.GetCode() == KEY_LEFT)
627  {
628  LeftRightHdl(*m_xLeftPB);
629  bHandled = true;
630  }
631 
632  return bHandled;
633 }
634 
636 {
637  for(sal_uInt16 i = 0; i < MAXLEVEL; i++)
638  pStyleArr[i].clear();
639 
640  int nChildren = m_xHeaderTree->n_children();
641  for (int i = 0; i < nChildren; ++i)
642  {
643  int nToggleColumn = 0;
644  for (sal_uInt16 j = 0; j <= MAXLEVEL; ++j)
645  {
646  if (m_xHeaderTree->get_toggle(i, j + 1) == TRISTATE_TRUE)
647  {
648  nToggleColumn = j;
649  break;
650  }
651  }
652  if (nToggleColumn)
653  {
654  int nLevel = nToggleColumn - 1;
655  if(!pStyleArr[nLevel].isEmpty())
656  pStyleArr[nLevel] += OUStringChar(TOX_STYLE_DELIMITER);
657  pStyleArr[nLevel] += m_xHeaderTree->get_text(i, 0);
658  }
659  }
660 
661  //TODO write back style names
662  m_xDialog->response(RET_OK);
663 }
664 
665 IMPL_LINK(SwAddStylesDlg_Impl, LeftRightHdl, weld::Button&, rBtn, void)
666 {
667  bool bLeft = &rBtn == m_xLeftPB.get();
668  int nEntry = m_xHeaderTree->get_selected_index();
669  if (nEntry != -1)
670  {
671  int nToggleColumn = 0;
672  for (sal_uInt16 j = 0; j <= MAXLEVEL; ++j)
673  {
674  if (m_xHeaderTree->get_toggle(nEntry, j + 1) == TRISTATE_TRUE)
675  {
676  nToggleColumn = j;
677  break;
678  }
679  }
680 
681  if (bLeft)
682  {
683  if (nToggleColumn)
684  --nToggleColumn;
685  }
686  else
687  {
688  if (nToggleColumn < MAXLEVEL)
689  ++nToggleColumn;
690  }
691 
692  for (sal_uInt16 j = 0; j <= MAXLEVEL; ++j)
693  {
694  m_xHeaderTree->set_toggle(nEntry, j == nToggleColumn ? TRISTATE_TRUE : TRISTATE_FALSE, j + 1);
695  }
696  }
697 }
698 
700  : SfxTabPage(pPage, pController, "modules/swriter/ui/tocindexpage.ui", "TocIndexPage", &rAttrSet)
701  , sAutoMarkType(SwResId(STR_AUTOMARK_TYPE))
702  , m_bWaitingInitialSettings(true)
703  , m_xTitleED(m_xBuilder->weld_entry("title"))
704  , m_xTypeFT(m_xBuilder->weld_label("typeft"))
705  , m_xTypeLB(m_xBuilder->weld_combo_box("type"))
706  , m_xReadOnlyCB(m_xBuilder->weld_check_button("readonly"))
707  , m_xAreaFrame(m_xBuilder->weld_widget("areaframe"))
708  , m_xAreaLB(m_xBuilder->weld_combo_box("scope"))
709  , m_xLevelFT(m_xBuilder->weld_label("levelft"))
710  , m_xLevelNF(m_xBuilder->weld_spin_button("level"))
711  , m_xCreateFrame(m_xBuilder->weld_widget("createframe"))
712  , m_xFromHeadingsCB(m_xBuilder->weld_check_button("fromheadings"))
713  , m_xStylesCB(m_xBuilder->weld_check_button("stylescb"))
714  , m_xAddStylesCB(m_xBuilder->weld_check_button("addstylescb"))
715  , m_xAddStylesPB(m_xBuilder->weld_button("styles"))
716  , m_xFromTablesCB(m_xBuilder->weld_check_button("fromtables"))
717  , m_xFromFramesCB(m_xBuilder->weld_check_button("fromframes"))
718  , m_xFromGraphicsCB(m_xBuilder->weld_check_button("fromgraphics"))
719  , m_xFromOLECB(m_xBuilder->weld_check_button("fromoles"))
720  , m_xLevelFromChapterCB(m_xBuilder->weld_check_button("uselevel"))
721  , m_xFromCaptionsRB(m_xBuilder->weld_radio_button("captions"))
722  , m_xFromObjectNamesRB(m_xBuilder->weld_radio_button("objnames"))
723  , m_xCaptionSequenceFT(m_xBuilder->weld_label("categoryft"))
724  , m_xCaptionSequenceLB(m_xBuilder->weld_combo_box("category"))
725  , m_xDisplayTypeFT(m_xBuilder->weld_label("displayft"))
726  , m_xDisplayTypeLB(m_xBuilder->weld_combo_box("display"))
727  , m_xTOXMarksCB(m_xBuilder->weld_check_button("indexmarks"))
728  , m_xIdxOptionsFrame(m_xBuilder->weld_widget("optionsframe"))
729  , m_xCollectSameCB(m_xBuilder->weld_check_button("combinesame"))
730  , m_xUseFFCB(m_xBuilder->weld_check_button("useff"))
731  , m_xUseDashCB(m_xBuilder->weld_check_button("usedash"))
732  , m_xCaseSensitiveCB(m_xBuilder->weld_check_button("casesens"))
733  , m_xInitialCapsCB(m_xBuilder->weld_check_button("initcaps"))
734  , m_xKeyAsEntryCB(m_xBuilder->weld_check_button("keyasentry"))
735  , m_xFromFileCB(m_xBuilder->weld_check_button("fromfile"))
736  , m_xAutoMarkPB(m_xBuilder->weld_menu_button("file"))
737  , m_xFromObjCLB(m_xBuilder->weld_tree_view("objects"))
738  , m_xFromObjFrame(m_xBuilder->weld_widget("objectframe"))
739  , m_xSequenceCB(m_xBuilder->weld_check_button("numberentries"))
740  , m_xBracketLB(m_xBuilder->weld_combo_box("brackets"))
741  , m_xAuthorityFrame(m_xBuilder->weld_widget("authframe"))
742  , m_xSortFrame(m_xBuilder->weld_widget("sortframe"))
743  , m_xLanguageLB(new SvxLanguageBox(m_xBuilder->weld_combo_box("lang")))
744  , m_xSortAlgorithmLB(m_xBuilder->weld_combo_box("keytype"))
745 {
746  sAddStyleUser = m_xStylesCB->get_label();
748 
749  m_xLanguageLB->SetLanguageList( SvxLanguageListFlags::ALL | SvxLanguageListFlags::ONLY_KNOWN,
750  false );
751 
752  //Default mode is arranged to be the tallest mode
753  //of alphabetical index, lock that size in now
754  LanguageHdl(nullptr); //fill sort algorithm list
755  Size aPrefSize(m_xContainer->get_preferred_size());
756  m_xContainer->set_size_request(aPrefSize.Width(), aPrefSize.Height());
757 
758  sAddStyleContent = m_xAddStylesCB->get_label();
759 
760  std::vector<int> aWidths;
761  aWidths.push_back(m_xFromObjCLB->get_checkbox_column_width());
762  m_xFromObjCLB->set_column_fixed_widths(aWidths);
763 
764  for (size_t i = 0; i < SAL_N_ELEMENTS(RES_SRCTYPES); ++i)
765  {
766  OUString sId(OUString::number(static_cast<sal_uInt32>(RES_SRCTYPES[i].second)));
767  m_xFromObjCLB->append();
768  m_xFromObjCLB->set_toggle(i, TRISTATE_FALSE, 0);
769  m_xFromObjCLB->set_text(i, SwResId(RES_SRCTYPES[i].first), 1);
770  m_xFromObjCLB->set_id(i, sId);
771  }
772 
774  m_xTypeLB->connect_changed(LINK(this, SwTOXSelectTabPage, TOXTypeHdl));
775 
776  m_xAddStylesPB->connect_clicked(LINK(this, SwTOXSelectTabPage, AddStylesHdl));
777 
778  m_xAutoMarkPB->connect_toggled(LINK(this, SwTOXSelectTabPage, MenuEnableHdl));
779  m_xAutoMarkPB->connect_selected(LINK(this, SwTOXSelectTabPage, MenuExecuteHdl));
780 
781  Link<weld::ToggleButton&,void> aLk = LINK(this, SwTOXSelectTabPage, CheckBoxHdl);
782  m_xAddStylesCB->connect_toggled(aLk);
783  m_xFromHeadingsCB->connect_toggled(aLk);
784  m_xTOXMarksCB->connect_toggled(aLk);
785  m_xFromFileCB->connect_toggled(aLk);
786  m_xCollectSameCB->connect_toggled(aLk);
787  m_xUseFFCB->connect_toggled(aLk);
788  m_xUseDashCB->connect_toggled(aLk);
789  m_xInitialCapsCB->connect_toggled(aLk);
790  m_xKeyAsEntryCB->connect_toggled(aLk);
791 
792  m_xTitleED->connect_changed(LINK(this, SwTOXSelectTabPage, ModifyEntryHdl));
793  m_xLevelNF->connect_value_changed(LINK(this, SwTOXSelectTabPage, ModifySpinHdl));
794  m_xSortAlgorithmLB->connect_changed(LINK(this, SwTOXSelectTabPage, ModifyListBoxHdl));
795 
796  aLk = LINK(this, SwTOXSelectTabPage, RadioButtonHdl);
797  m_xFromCaptionsRB->connect_toggled(aLk);
798  m_xFromObjectNamesRB->connect_toggled(aLk);
799  RadioButtonHdl(*m_xFromCaptionsRB);
800 
801  m_xLanguageLB->connect_changed(LINK(this, SwTOXSelectTabPage, LanguageListBoxHdl));
802  m_xTypeLB->set_active(0);
803  m_xTitleED->save_value();
804 }
805 
807 {
808  pIndexRes.reset();
809  pIndexEntryWrapper.reset();
810  m_xLanguageLB.reset();
811 }
812 
814 {
815  const sal_uInt16 nUserTypeCount = rSh.GetTOXTypeCount(TOX_USER);
816  if(nUserTypeCount > 1)
817  {
818  //insert all new user indexes names after the standard user index
819  sal_Int32 nPos = m_xTypeLB->find_id(OUString::number(sal_uInt32(TO_USER))) + 1;
820  for (sal_uInt16 nUser = 1; nUser < nUserTypeCount; nUser++)
821  {
822  sal_uInt32 nEntryData = nUser << 8;
823  nEntryData |= TO_USER;
824  OUString sId(OUString::number(nEntryData));
825  m_xTypeLB->insert(nPos++, rSh.GetTOXType(TOX_USER, nUser)->GetTypeName(),
826  &sId, nullptr, nullptr);
827  }
828  }
829 }
830 
832 {
833  return true;
834 }
835 
837 {
838  sal_uInt16 nRet = TOX_INDEX;
839  switch(eType.eType)
840  {
841  case TOX_INDEX : nRet = TO_INDEX; break;
842  case TOX_USER :
843  {
844  nRet = eType.nIndex << 8;
845  nRet |= TO_USER;
846  }
847  break;
848  case TOX_CONTENT : nRet = TO_CONTENT; break;
849  case TOX_ILLUSTRATIONS:nRet = TO_ILLUSTRATION; break;
850  case TOX_OBJECTS : nRet = TO_OBJECT; break;
851  case TOX_TABLES : nRet = TO_TABLE; break;
852  case TOX_AUTHORITIES : nRet = TO_AUTHORITIES; break;
853  case TOX_BIBLIOGRAPHY : nRet = TO_BIBLIOGRAPHY; break;
854  case TOX_CITATION :break;
855  }
856  return nRet;
857 }
858 
860 {
861  CurTOXType eCurType (eSet);
862 
863  sal_uInt32 nData = lcl_TOXTypesToUserData(eCurType);
864  m_xTypeLB->set_active_id(OUString::number(nData));
865  m_xTypeFT->set_sensitive(false);
866  m_xTypeLB->set_sensitive(false);
867  TOXTypeHdl(*m_xTypeLB);
868 }
869 
870 static CurTOXType lcl_UserData2TOXTypes(sal_uInt16 nData)
871 {
872  CurTOXType eRet;
873 
874  switch(nData&0xff)
875  {
876  case TO_INDEX : eRet.eType = TOX_INDEX; break;
877  case TO_USER :
878  {
879  eRet.eType = TOX_USER;
880  eRet.nIndex = (nData&0xff00) >> 8;
881  }
882  break;
883  case TO_CONTENT : eRet.eType = TOX_CONTENT; break;
884  case TO_ILLUSTRATION: eRet.eType = TOX_ILLUSTRATIONS; break;
885  case TO_OBJECT : eRet.eType = TOX_OBJECTS; break;
886  case TO_TABLE : eRet.eType = TOX_TABLES; break;
887  case TO_AUTHORITIES : eRet.eType = TOX_AUTHORITIES; break;
888  case TO_BIBLIOGRAPHY : eRet.eType = TOX_BIBLIOGRAPHY; break;
889  default: OSL_FAIL("what a type?");
890  }
891  return eRet;
892 }
893 
895 {
896  SwMultiTOXTabDialog* pTOXDlg = static_cast<SwMultiTOXTabDialog*>(GetDialogController());
897  const CurTOXType aCurType = pTOXDlg->GetCurrentTOXType();
898  SwTOXDescription& rDesc = pTOXDlg->GetTOXDescription(aCurType);
899  m_xReadOnlyCB->set_active(rDesc.IsReadonly());
900  if (!m_xTitleED->get_value_changed_from_saved())
901  {
902  if (rDesc.GetTitle())
903  m_xTitleED->set_text(*rDesc.GetTitle());
904  else
905  m_xTitleED->set_text(OUString());
906  m_xTitleED->save_value();
907  }
908 
909  m_xAreaLB->set_active(rDesc.IsFromChapter() ? 1 : 0);
910 
911  if (aCurType.eType != TOX_INDEX)
912  m_xLevelNF->set_value(rDesc.GetLevel()); //content, user
913 
914  SwTOXElement nCreateType = rDesc.GetContentOptions();
915 
916  //user + content
917  bool bHasStyleNames = false;
918 
919  for( sal_uInt16 i = 0; i < MAXLEVEL; i++)
920  if(!rDesc.GetStyleNames(i).isEmpty())
921  {
922  bHasStyleNames = true;
923  break;
924  }
925  m_xAddStylesCB->set_active(bHasStyleNames && (nCreateType & SwTOXElement::Template));
926 
927  m_xFromOLECB->set_active( bool(nCreateType & SwTOXElement::Ole) );
928  m_xFromTablesCB->set_active( bool(nCreateType & SwTOXElement::Table) );
929  m_xFromGraphicsCB->set_active( bool(nCreateType & SwTOXElement::Graphic) );
930  m_xFromFramesCB->set_active( bool(nCreateType & SwTOXElement::Frame) );
931 
932  m_xLevelFromChapterCB->set_active(rDesc.IsLevelFromChapter());
933 
934  //all but illustration and table
935  m_xTOXMarksCB->set_active( bool(nCreateType & SwTOXElement::Mark) );
936 
937  //content
938  if(TOX_CONTENT == aCurType.eType)
939  {
940  m_xFromHeadingsCB->set_active( bool(nCreateType & SwTOXElement::OutlineLevel) );
941  m_xAddStylesCB->set_label(sAddStyleContent);
942  m_xAddStylesPB->set_sensitive(m_xAddStylesCB->get_active());
943  }
944  //index only
945  else if(TOX_INDEX == aCurType.eType)
946  {
947  const SwTOIOptions nIndexOptions = rDesc.GetIndexOptions();
948  m_xCollectSameCB->set_active( bool(nIndexOptions & SwTOIOptions::SameEntry) );
949  m_xUseFFCB->set_active( bool(nIndexOptions & SwTOIOptions::FF) );
950  m_xUseDashCB->set_active( bool(nIndexOptions & SwTOIOptions::Dash) );
951  if (m_xUseFFCB->get_active())
952  m_xUseDashCB->set_sensitive(false);
953  else if (m_xUseDashCB->get_active())
954  m_xUseFFCB->set_sensitive(false);
955 
956  m_xCaseSensitiveCB->set_active( bool(nIndexOptions & SwTOIOptions::CaseSensitive) );
957  m_xInitialCapsCB->set_active( bool(nIndexOptions & SwTOIOptions::InitialCaps) );
958  m_xKeyAsEntryCB->set_active( bool(nIndexOptions & SwTOIOptions::KeyAsEntry) );
959  }
960  else if (TOX_ILLUSTRATIONS == aCurType.eType || TOX_TABLES == aCurType.eType)
961  {
962  m_xFromObjectNamesRB->set_active(rDesc.IsCreateFromObjectNames());
963  m_xFromCaptionsRB->set_active(!rDesc.IsCreateFromObjectNames());
964  OUString sName(rDesc.GetSequenceName());
965  int nIndex = m_xCaptionSequenceLB->find_text(sName);
966  if (nIndex != -1)
967  m_xCaptionSequenceLB->set_active(nIndex);
968  m_xDisplayTypeLB->set_active(static_cast<sal_Int32>(rDesc.GetCaptionDisplay()));
969  if (m_xDisplayTypeLB->get_active() == -1)
970  m_xDisplayTypeLB->set_active(0);
971  RadioButtonHdl(*m_xFromCaptionsRB);
972 
973  }
974  else if(TOX_OBJECTS == aCurType.eType)
975  {
976  SwTOOElements nOLEData = rDesc.GetOLEOptions();
977  for (int nFromObj = 0, nCount = m_xFromObjCLB->n_children(); nFromObj < nCount; ++nFromObj)
978  {
979  SwTOOElements nData = static_cast<SwTOOElements>(m_xFromObjCLB->get_id(nFromObj).toInt32());
980  m_xFromObjCLB->set_toggle(nFromObj, bool(nData & nOLEData) ? TRISTATE_TRUE : TRISTATE_FALSE, 0);
981  }
982  }
983  else if(TOX_AUTHORITIES == aCurType.eType)
984  {
985  const OUString& sBrackets(rDesc.GetAuthBrackets());
986  if(sBrackets.isEmpty() || sBrackets == " ")
987  m_xBracketLB->set_active(0);
988  else
989  m_xBracketLB->set_active_text(sBrackets);
990  m_xSequenceCB->set_active(rDesc.IsAuthSequence());
991  }
992  m_xAutoMarkPB->set_sensitive(m_xFromFileCB->get_active());
993 
994  for(sal_uInt16 i = 0; i < MAXLEVEL; i++)
995  aStyleArr[i] = rDesc.GetStyleNames(i);
996 
997  m_xLanguageLB->set_active_id(rDesc.GetLanguage());
998  LanguageHdl(nullptr);
999  for (int nCnt = 0, nEntryCount = m_xSortAlgorithmLB->get_count(); nCnt < nEntryCount; ++nCnt)
1000  {
1001  const OUString& rEntryData = m_xSortAlgorithmLB->get_id(nCnt);
1002  if (rEntryData == rDesc.GetSortAlgorithm())
1003  {
1004  m_xSortAlgorithmLB->set_active(nCnt);
1005  break;
1006  }
1007  }
1008 }
1009 
1011 {
1012  SwMultiTOXTabDialog* pTOXDlg = static_cast<SwMultiTOXTabDialog*>(GetDialogController());
1013  CurTOXType aCurType = pTOXDlg->GetCurrentTOXType();
1014  SwTOXDescription& rDesc = pTOXDlg->GetTOXDescription(aCurType);
1015  rDesc.SetTitle(m_xTitleED->get_text());
1016  rDesc.SetFromChapter(1 == m_xAreaLB->get_active());
1017  SwTOXElement nContentOptions = SwTOXElement::NONE;
1018  if (m_xTOXMarksCB->get_visible() && m_xTOXMarksCB->get_active())
1019  nContentOptions |= SwTOXElement::Mark;
1020 
1022  switch(rDesc.GetTOXType())
1023  {
1024  case TOX_CONTENT:
1025  if(m_xFromHeadingsCB->get_active())
1026  nContentOptions |= SwTOXElement::OutlineLevel;
1027  break;
1028  case TOX_USER:
1029  {
1030  rDesc.SetTOUName(m_xTypeLB->get_active_text());
1031 
1032  if(m_xFromOLECB->get_active())
1033  nContentOptions |= SwTOXElement::Ole;
1034  if(m_xFromTablesCB->get_active())
1035  nContentOptions |= SwTOXElement::Table;
1036  if(m_xFromFramesCB->get_active())
1037  nContentOptions |= SwTOXElement::Frame;
1038  if(m_xFromGraphicsCB->get_active())
1039  nContentOptions |= SwTOXElement::Graphic;
1040  }
1041  break;
1042  case TOX_INDEX:
1043  {
1044  nContentOptions = SwTOXElement::Mark;
1045 
1046  if(m_xCollectSameCB->get_active())
1047  nIndexOptions |= SwTOIOptions::SameEntry;
1048  if(m_xUseFFCB->get_active())
1049  nIndexOptions |= SwTOIOptions::FF;
1050  if(m_xUseDashCB->get_active())
1051  nIndexOptions |= SwTOIOptions::Dash;
1052  if(m_xCaseSensitiveCB->get_active())
1053  nIndexOptions |= SwTOIOptions::CaseSensitive;
1054  if(m_xInitialCapsCB->get_active())
1055  nIndexOptions |= SwTOIOptions::InitialCaps;
1056  if(m_xKeyAsEntryCB->get_active())
1057  nIndexOptions |= SwTOIOptions::KeyAsEntry;
1058  if(m_xFromFileCB->get_active())
1060  else
1061  rDesc.SetAutoMarkURL(OUString());
1062  }
1063  break;
1064  case TOX_ILLUSTRATIONS:
1065  case TOX_TABLES :
1066  rDesc.SetCreateFromObjectNames(m_xFromObjectNamesRB->get_active());
1067  rDesc.SetSequenceName(m_xCaptionSequenceLB->get_active_text());
1068  rDesc.SetCaptionDisplay(static_cast<SwCaptionDisplay>(m_xDisplayTypeLB->get_active()));
1069  break;
1070  case TOX_OBJECTS:
1071  {
1073  for (int i = 0, nCount = m_xFromObjCLB->n_children(); i < nCount; ++i)
1074  {
1075  if (m_xFromObjCLB->get_toggle(i, 0) == TRISTATE_TRUE)
1076  {
1077  SwTOOElements nData = static_cast<SwTOOElements>(m_xFromObjCLB->get_id(i).toInt32());
1078  nOLEData |= nData;
1079  }
1080  }
1081  rDesc.SetOLEOptions(nOLEData);
1082  }
1083  break;
1084  case TOX_AUTHORITIES:
1085  case TOX_BIBLIOGRAPHY :
1086  {
1087  if (m_xBracketLB->get_active())
1088  rDesc.SetAuthBrackets(m_xBracketLB->get_active_text());
1089  else
1090  rDesc.SetAuthBrackets(OUString());
1091  rDesc.SetAuthSequence(m_xSequenceCB->get_active());
1092  }
1093  break;
1094  case TOX_CITATION :
1095  break;
1096  }
1097 
1098  rDesc.SetLevelFromChapter( m_xLevelFromChapterCB->get_visible() &&
1099  m_xLevelFromChapterCB->get_active());
1100  if (m_xTOXMarksCB->get_active() && m_xTOXMarksCB->get_visible())
1101  nContentOptions |= SwTOXElement::Mark;
1102  if (m_xFromHeadingsCB->get_active() && m_xFromHeadingsCB->get_visible())
1103  nContentOptions |= SwTOXElement::OutlineLevel;
1104  if (m_xAddStylesCB->get_active() && m_xAddStylesCB->get_visible())
1105  nContentOptions |= SwTOXElement::Template;
1106 
1107  rDesc.SetContentOptions(nContentOptions);
1108  rDesc.SetIndexOptions(nIndexOptions);
1109  rDesc.SetLevel(m_xLevelNF->get_value());
1110 
1111  rDesc.SetReadonly(m_xReadOnlyCB->get_active());
1112 
1113  for(sal_uInt16 i = 0; i < MAXLEVEL; i++)
1114  rDesc.SetStyleNames(aStyleArr[i], i);
1115 
1116  rDesc.SetLanguage(m_xLanguageLB->get_active_id());
1117  const OUString& rEntryData = m_xSortAlgorithmLB->get_active_id();
1118  rDesc.SetSortAlgorithm(rEntryData);
1119 }
1120 
1122 {
1123  SwMultiTOXTabDialog* pTOXDlg = static_cast<SwMultiTOXTabDialog*>(GetDialogController());
1124  SwWrtShell& rSh = pTOXDlg->GetWrtShell();
1125  const CurTOXType aCurType = pTOXDlg->GetCurrentTOXType();
1126  sal_uInt32 nData = lcl_TOXTypesToUserData(aCurType);
1127  m_xTypeLB->set_active_id(OUString::number(nData));
1128 
1131  m_xFromFileCB->set_active(!sAutoMarkURL.isEmpty());
1132 
1133  m_xCaptionSequenceLB->clear();
1134  const size_t nCount = rSh.GetFieldTypeCount(SwFieldIds::SetExp);
1135  for (size_t i = 0; i < nCount; ++i)
1136  {
1137  SwFieldType *pType = rSh.GetFieldType( i, SwFieldIds::SetExp );
1138  if( pType->Which() == SwFieldIds::SetExp &&
1139  static_cast<SwSetExpFieldType *>( pType)->GetType() & nsSwGetSetExpType::GSE_SEQ )
1140  m_xCaptionSequenceLB->append_text(pType->GetName());
1141  }
1142 
1143  if(pTOXDlg->IsTOXEditMode())
1144  {
1145  m_xTypeFT->set_sensitive(false);
1146  m_xTypeLB->set_sensitive(false);
1147  }
1148 
1150  {
1151  // save current values into the proper TOXDescription
1153  }
1154  m_bWaitingInitialSettings = false;
1155 
1156  TOXTypeHdl(*m_xTypeLB);
1157  CheckBoxHdl(*m_xAddStylesCB);
1158 }
1159 
1161 {
1162  //nothing to do
1163 }
1164 
1166 {
1167  if (_pSet)
1168  _pSet->Put(SfxUInt16Item(FN_PARAM_TOX_TYPE, m_xTypeLB->get_active_id().toUInt32()));
1170  return DeactivateRC::LeavePage;
1171 }
1172 
1173 std::unique_ptr<SfxTabPage> SwTOXSelectTabPage::Create(weld::Container* pPage, weld::DialogController* pController, const SfxItemSet* rAttrSet)
1174 {
1175  return std::make_unique<SwTOXSelectTabPage>(pPage, pController, *rAttrSet);
1176 }
1177 
1178 IMPL_LINK(SwTOXSelectTabPage, TOXTypeHdl, weld::ComboBox&, rBox, void)
1179 {
1180  SwMultiTOXTabDialog* pTOXDlg = static_cast<SwMultiTOXTabDialog*>(GetDialogController());
1181  const sal_uInt16 nType = rBox.get_active_id().toUInt32();
1182  CurTOXType eCurType = lcl_UserData2TOXTypes(nType);
1183  pTOXDlg->SetCurrentTOXType(eCurType);
1184 
1185  m_xAreaLB->set_visible( 0 != (nType & (TO_CONTENT|TO_ILLUSTRATION|TO_USER|TO_INDEX|TO_TABLE|TO_OBJECT)) );
1186  m_xLevelFT->set_visible( 0 != (nType & (TO_CONTENT)) );
1187  m_xLevelNF->set_visible( 0 != (nType & (TO_CONTENT)) );
1188  m_xLevelFromChapterCB->set_visible( 0 != (nType & (TO_USER)) );
1189  m_xAreaFrame->set_visible( 0 != (nType & (TO_CONTENT|TO_ILLUSTRATION|TO_USER|TO_INDEX|TO_TABLE|TO_OBJECT)) );
1190 
1191  m_xFromHeadingsCB->set_visible( 0 != (nType & (TO_CONTENT)) );
1192  m_xAddStylesCB->set_visible( 0 != (nType & (TO_CONTENT|TO_USER)) );
1193  m_xAddStylesPB->set_visible( 0 != (nType & (TO_CONTENT|TO_USER)) );
1194 
1195  m_xFromTablesCB->set_visible( 0 != (nType & (TO_USER)) );
1196  m_xFromFramesCB->set_visible( 0 != (nType & (TO_USER)) );
1197  m_xFromGraphicsCB->set_visible( 0 != (nType & (TO_USER)) );
1198  m_xFromOLECB->set_visible( 0 != (nType & (TO_USER)) );
1199 
1200  m_xFromCaptionsRB->set_visible( 0 != (nType & (TO_ILLUSTRATION|TO_TABLE)) );
1201  m_xFromObjectNamesRB->set_visible( 0 != (nType & (TO_ILLUSTRATION|TO_TABLE)) );
1202 
1203  m_xTOXMarksCB->set_visible( 0 != (nType & (TO_CONTENT|TO_USER)) );
1204 
1205  m_xCreateFrame->set_visible( 0 != (nType & (TO_CONTENT|TO_ILLUSTRATION|TO_USER|TO_TABLE)) );
1206  m_xCaptionSequenceFT->set_visible( 0 != (nType & (TO_ILLUSTRATION|TO_TABLE)) );
1207  m_xCaptionSequenceLB->set_visible( 0 != (nType & (TO_ILLUSTRATION|TO_TABLE)) );
1208  m_xDisplayTypeFT->set_visible( 0 != (nType & (TO_ILLUSTRATION|TO_TABLE)) );
1209  m_xDisplayTypeLB->set_visible( 0 != (nType & (TO_ILLUSTRATION|TO_TABLE)) );
1210 
1211  m_xAuthorityFrame->set_visible( 0 != (nType & TO_AUTHORITIES) );
1212 
1213  bool bEnableSortLanguage = 0 != (nType & (TO_INDEX|TO_AUTHORITIES));
1214  m_xSortFrame->set_visible(bEnableSortLanguage);
1215 
1216  if( nType & TO_ILLUSTRATION )
1217  {
1219  m_xCaptionSequenceLB->set_active_text(sName);
1220  }
1221  else if( nType & TO_TABLE )
1222  {
1224  m_xCaptionSequenceLB->set_active_text(sName);
1225  }
1226  else if( nType & TO_USER )
1227  {
1228  m_xAddStylesCB->set_label(sAddStyleUser);
1229  }
1230 
1231  m_xIdxOptionsFrame->set_visible( 0 != (nType & TO_INDEX) );
1232 
1233  //object index
1234  m_xFromObjFrame->set_visible( 0 != (nType & TO_OBJECT) );
1235 
1236  //set control values from the proper TOXDescription
1237  {
1238  ApplyTOXDescription();
1239  }
1240  ModifyHdl();
1241 }
1242 
1244 {
1246  {
1248  SwMultiTOXTabDialog* pTOXDlg = static_cast<SwMultiTOXTabDialog*>(GetDialogController());
1250  }
1251 }
1252 
1254 {
1255  ModifyHdl();
1256 }
1257 
1259 {
1260  ModifyHdl();
1261 }
1262 
1264 {
1265  ModifyHdl();
1266 }
1267 
1268 IMPL_LINK(SwTOXSelectTabPage, CheckBoxHdl, weld::ToggleButton&, rButton, void)
1269 {
1270  SwMultiTOXTabDialog* pTOXDlg = static_cast<SwMultiTOXTabDialog*>(GetDialogController());
1271  const CurTOXType aCurType = pTOXDlg->GetCurrentTOXType();
1272  if(TOX_CONTENT == aCurType.eType)
1273  {
1274  //at least one of the three CheckBoxes must be checked
1275  if (!m_xAddStylesCB->get_active() && !m_xFromHeadingsCB->get_active() && !m_xTOXMarksCB->get_active())
1276  {
1277  //TODO: InfoBox?
1278  rButton.set_active(true);
1279  }
1280  m_xAddStylesPB->set_sensitive(m_xAddStylesCB->get_active());
1281  }
1282  if (TOX_USER == aCurType.eType)
1283  {
1284  m_xAddStylesPB->set_sensitive(m_xAddStylesCB->get_active());
1285  }
1286  else if (TOX_INDEX == aCurType.eType)
1287  {
1288  m_xAutoMarkPB->set_sensitive(m_xFromFileCB->get_active());
1289  m_xUseFFCB->set_sensitive(m_xCollectSameCB->get_active() && !m_xUseDashCB->get_active());
1290  m_xUseDashCB->set_sensitive(m_xCollectSameCB->get_active() && !m_xUseFFCB->get_active());
1291  m_xCaseSensitiveCB->set_sensitive(m_xCollectSameCB->get_active());
1292  }
1293  ModifyHdl();
1294 };
1295 
1297 {
1298  bool bEnable = m_xFromCaptionsRB->get_active();
1299  m_xCaptionSequenceFT->set_sensitive(bEnable);
1300  m_xCaptionSequenceLB->set_sensitive(bEnable);
1301  m_xDisplayTypeFT->set_sensitive(bEnable);
1302  m_xDisplayTypeLB->set_sensitive(bEnable);
1303  ModifyHdl();
1304 }
1305 
1306 IMPL_LINK(SwTOXSelectTabPage, LanguageListBoxHdl, weld::ComboBox&, rBox, void)
1307 {
1308  LanguageHdl(&rBox);
1309 }
1310 
1312 {
1313  lang::Locale aLcl( LanguageTag( m_xLanguageLB->get_active_id() ).getLocale() );
1314  Sequence< OUString > aSeq = pIndexEntryWrapper->GetAlgorithmList( aLcl );
1315 
1316  if( !pIndexRes )
1317  pIndexRes.reset(new IndexEntryResource());
1318 
1319  OUString sOldString = m_xSortAlgorithmLB->get_active_id();
1320  m_xSortAlgorithmLB->clear();
1321 
1322  sal_Int32 nEnd = aSeq.getLength();
1323  for( sal_Int32 nCnt = 0; nCnt < nEnd; ++nCnt )
1324  {
1325  const OUString sAlg(aSeq[ nCnt ]);
1326  const OUString sUINm = pIndexRes->GetTranslation( sAlg );
1327  m_xSortAlgorithmLB->append(sAlg, sUINm);
1328  if( sAlg == sOldString )
1329  m_xSortAlgorithmLB->set_active(nCnt);
1330  }
1331 
1332  if (m_xSortAlgorithmLB->get_active() == -1)
1333  m_xSortAlgorithmLB->set_active(0);
1334 
1335  if (pBox)
1336  ModifyHdl();
1337 };
1338 
1340 {
1341  SwAddStylesDlg_Impl aDlg(GetFrameWeld(), static_cast<SwMultiTOXTabDialog*>(GetDialogController())->GetWrtShell(),
1342  aStyleArr);
1343  aDlg.run();
1344  ModifyHdl();
1345 }
1346 
1348 {
1349  m_xAutoMarkPB->set_item_sensitive("edit", !sAutoMarkURL.isEmpty());
1350 }
1351 
1352 IMPL_LINK(SwTOXSelectTabPage, MenuExecuteHdl, const OString&, rIdent, void)
1353 {
1354  const OUString sSaveAutoMarkURL = sAutoMarkURL;
1355 
1356  if (rIdent == "open")
1357  {
1358  sAutoMarkURL = lcl_CreateAutoMarkFileDlg(GetFrameWeld(),
1359  sAutoMarkURL, sAutoMarkType, true);
1360  }
1361  else if (rIdent == "new" || rIdent == "edit")
1362  {
1363  bool bNew = (rIdent == "new");
1364  if (bNew)
1365  {
1366  sAutoMarkURL = lcl_CreateAutoMarkFileDlg(GetFrameWeld(),
1367  sAutoMarkURL, sAutoMarkType, false);
1368  if (sAutoMarkURL.isEmpty())
1369  return;
1370  }
1371 
1372  SwAutoMarkDlg_Impl aAutoMarkDlg(GetFrameWeld(), sAutoMarkURL, bNew);
1373  if (RET_OK != aAutoMarkDlg.run() && bNew)
1374  sAutoMarkURL = sSaveAutoMarkURL;
1375  }
1376 }
1377 
1379 {
1380 protected:
1382 public:
1383  virtual WindowType GetType() const = 0;
1384  virtual void GrabFocus() = 0;
1385  virtual void Hide() = 0;
1386  virtual void set_grid_left_attach(int nPos) = 0;
1387  virtual void get_extents_relative_to(weld::Widget& rRelative, int& x, int& y, int& width, int& height) = 0;
1388  void SetGetFocusHdl(const Link<SwTOXWidget&,void>& rLink) { aGetFocusLink = rLink; }
1389  virtual ~SwTOXWidget() {}
1390 };
1391 
1392 class SwTOXEdit : public SwTOXWidget
1393 {
1394  std::unique_ptr<weld::Builder> m_xBuilder;
1400  std::unique_ptr<weld::Entry> m_xEntry;
1401 
1402  DECL_LINK(ModifyHdl, weld::Entry&, void);
1403 public:
1404  SwTOXEdit(SwTokenWindow* pTokenWin, const SwFormToken& rToken)
1405  : m_xBuilder(Application::CreateBuilder(pTokenWin->get_child_container(), "modules/swriter/ui/toxentrywidget.ui"))
1406  , aFormToken(rToken)
1407  , bNextControl(false)
1408  , m_pParent(pTokenWin)
1409  , m_xEntry(m_xBuilder->weld_entry("entry", true))
1410  {
1411  m_xEntry->connect_changed(LINK(this, SwTOXEdit, ModifyHdl));
1412  m_xEntry->connect_key_press(LINK(this, SwTOXEdit, KeyInputHdl));
1413  m_xEntry->connect_focus_in(LINK(this, SwTOXEdit, FocusInHdl));
1414  m_xEntry->set_tooltip_text(m_pParent->CreateQuickHelp(rToken));
1415  }
1416 
1417  virtual WindowType GetType() const override
1418  {
1419  return WindowType::EDIT;
1420  }
1421 
1422  virtual void GrabFocus() override
1423  {
1424  m_xEntry->grab_focus();
1425  }
1426 
1427  virtual void Hide() override
1428  {
1429  m_xEntry->hide();
1430  }
1431 
1432  void Show()
1433  {
1434  m_xEntry->show();
1435  }
1436 
1437  void SetAccessibleName(const OUString& rName)
1438  {
1439  m_xEntry->set_accessible_name(rName);
1440  }
1441 
1442  virtual void set_grid_left_attach(int nPos) override
1443  {
1444  m_xEntry->set_grid_left_attach(nPos);
1445  }
1446 
1447  virtual void get_extents_relative_to(weld::Widget& rRelative, int& x, int& y, int& width, int& height) override
1448  {
1449  m_xEntry->get_extents_relative_to(rRelative, x, y, width, height);
1450  }
1451 
1452  OUString GetText() const
1453  {
1454  return m_xEntry->get_text();
1455  }
1456 
1457  void SetText(const OUString& rText)
1458  {
1459  m_xEntry->set_text(rText);
1460  }
1461 
1462  void get_selection_bounds(int& rStartPos, int& rEndPos)
1463  {
1464  m_xEntry->get_selection_bounds(rStartPos, rEndPos);
1465  }
1466 
1467  void select_region(int nStartPos, int nEndPos)
1468  {
1469  m_xEntry->select_region(nStartPos, nEndPos);
1470  }
1471 
1473  {
1474  aModifiedLink = rLink;
1475  }
1476 
1477  DECL_LINK(KeyInputHdl, const KeyEvent&, bool);
1478  DECL_LINK(FocusInHdl, weld::Widget&, void);
1479 
1480  bool IsNextControl() const { return bNextControl; }
1481  void SetPrevNextLink(const Link<SwTOXEdit&,void>& rLink) { aPrevNextControlLink = rLink; }
1482 
1484  {
1485  aFormToken.sText = m_xEntry->get_text();
1486  return aFormToken;
1487  }
1488 
1489  void SetCharStyleName(const OUString& rSet, sal_uInt16 nPoolId)
1490  {
1491  aFormToken.sCharStyleName = rSet;
1492  aFormToken.nPoolId = nPoolId;
1493  }
1494 
1495  void AdjustSize();
1496 };
1497 
1499 {
1500  aModifiedLink.Call(*this);
1501 }
1502 
1503 IMPL_LINK(SwTOXEdit, KeyInputHdl, const KeyEvent&, rKEvt, bool)
1504 {
1505  bool bCall = false;
1506  int nStartPos, nEndPos;
1507  bool bStartIsEnd = !m_xEntry->get_selection_bounds(nStartPos, nEndPos);
1508  int nMin = std::min(nStartPos, nEndPos);
1509  const sal_Int32 nTextLen = GetText().getLength();
1510  if ((bStartIsEnd && !nMin) || nMin == nTextLen)
1511  {
1512  vcl::KeyCode aCode = rKEvt.GetKeyCode();
1513  if (aCode.GetCode() == KEY_RIGHT && nMin == nTextLen)
1514  {
1515  bNextControl = true;
1516  bCall = true;
1517  }
1518  else if (aCode.GetCode() == KEY_LEFT && !nMin)
1519  {
1520  bNextControl = false;
1521  bCall = true;
1522  }
1523  else if ( (aCode.GetCode() == KEY_F3) && aCode.IsShift() && !aCode.IsMod1() && !aCode.IsMod2() )
1524  {
1525  if (m_pParent)
1526  {
1527  m_pParent->SetFocus2theAllBtn();
1528  }
1529  }
1530  if (bCall && aPrevNextControlLink.IsSet())
1531  aPrevNextControlLink.Call(*this);
1532  else
1533  bCall = false;
1534 
1535  }
1536  return bCall;
1537 }
1538 
1540 {
1541  aGetFocusLink.Call(*this);
1542 }
1543 
1545 {
1546  auto nWidth = m_xEntry->get_pixel_size(GetText()).Width();
1547  float fChars = nWidth / m_xEntry->get_approximate_digit_width();
1548  m_xEntry->set_width_chars(std::max(1.0f, std::ceil(fChars)));
1549 }
1550 
1551 class SwTOXButton : public SwTOXWidget
1552 {
1553  std::unique_ptr<weld::Builder> m_xBuilder;
1558  std::unique_ptr<weld::ToggleButton> m_xButton;
1559 public:
1560  SwTOXButton(SwTokenWindow* pTokenWin, const SwFormToken& rToken)
1561  : m_xBuilder(Application::CreateBuilder(pTokenWin->get_child_container(), "modules/swriter/ui/toxbuttonwidget.ui"))
1562  , aFormToken(rToken)
1563  , bNextControl(false)
1564  , m_pParent(pTokenWin)
1565  , m_xButton(m_xBuilder->weld_toggle_button("button", true))
1566  {
1567  m_xButton->connect_key_press(LINK(this, SwTOXButton, KeyInputHdl));
1568  m_xButton->connect_focus_in(LINK(this, SwTOXButton, FocusInHdl));
1569  m_xButton->set_tooltip_text(m_pParent->CreateQuickHelp(rToken));
1570  }
1571 
1572  virtual WindowType GetType() const override
1573  {
1574  return WindowType::PUSHBUTTON;
1575  }
1576 
1577  virtual void GrabFocus() override
1578  {
1579  m_xButton->grab_focus();
1580  }
1581 
1582  virtual void Hide() override
1583  {
1584  m_xButton->hide();
1585  }
1586 
1587  void Show()
1588  {
1589  m_xButton->show();
1590  }
1591 
1592  void SetAccessibleName(const OUString& rName)
1593  {
1594  m_xButton->set_accessible_name(rName);
1595  }
1596 
1597  virtual void set_grid_left_attach(int nPos) override
1598  {
1599  m_xButton->set_grid_left_attach(nPos);
1600  }
1601 
1602  void get_extents_relative_to(weld::Widget& rRelative, int& x, int& y, int& width, int& height) override
1603  {
1604  m_xButton->get_extents_relative_to(rRelative, x, y, width, height);
1605  }
1606 
1607  void Check(bool bCheck = true)
1608  {
1609  m_xButton->set_active(bCheck);
1610  }
1611 
1612  DECL_LINK(KeyInputHdl, const KeyEvent&, bool);
1613  DECL_LINK(FocusInHdl, weld::Widget&, void);
1614 
1615  bool IsNextControl() const {return bNextControl;}
1616  void SetPrevNextLink(const Link<SwTOXButton&,void>& rLink) {aPrevNextControlLink = rLink;}
1617  const SwFormToken& GetFormToken() const {return aFormToken;}
1618 
1619  void SetCharStyleName(const OUString& rSet, sal_uInt16 nPoolId)
1620  {
1621  aFormToken.sCharStyleName = rSet;
1622  aFormToken.nPoolId = nPoolId;
1623  }
1624 
1626  { aFormToken.nTabStopPosition = nSet; }
1627 
1629  { aFormToken.cTabFillChar = cSet; }
1630 
1632  { aFormToken.eTabAlign = eAlign;}
1633 
1634 //---> i89791
1635  //used for entry number format, in TOC only
1636  //needed for different UI dialog position
1637  void SetEntryNumberFormat(sal_uInt16 nSet) {
1638  switch(nSet)
1639  {
1640  default:
1641  case 0:
1642  aFormToken.nChapterFormat = CF_NUMBER;
1643  break;
1644  case 1:
1646  break;
1647  }
1648  }
1649 
1650  void SetChapterInfo(sal_uInt16 nSet) {
1651  switch(nSet)
1652  {
1653  default:
1654  case 0:
1656  break;
1657  case 1:
1658  aFormToken.nChapterFormat = CF_TITLE;
1659  break;
1660  case 2:
1661  aFormToken.nChapterFormat = CF_NUMBER_NOPREPST;
1662  break;
1663  }
1664  }
1665 
1666  void SetOutlineLevel( sal_uInt16 nSet ) { aFormToken.nOutlineLevel = nSet;}//i53420
1667 
1668  void SetText(const OUString& rText)
1669  {
1670  m_xButton->set_label(rText);
1671  }
1672 
1673  void SetLinkEnd()
1674  {
1675  OSL_ENSURE(TOKEN_LINK_START == aFormToken.eTokenType,
1676  "call SetLinkEnd for link start only!");
1677  aFormToken.eTokenType = TOKEN_LINK_END;
1678  aFormToken.sText = SwForm::GetFormLinkEnd();
1679  SetText(aFormToken.sText);
1680  }
1681 
1683  {
1684  OSL_ENSURE(TOKEN_LINK_END == aFormToken.eTokenType,
1685  "call SetLinkStart for link start only!");
1686  aFormToken.eTokenType = TOKEN_LINK_START;
1687  aFormToken.sText = SwForm::GetFormLinkStt();
1688  SetText(aFormToken.sText);
1689  }
1690 };
1691 
1692 IMPL_LINK(SwTOXButton, KeyInputHdl, const KeyEvent&, rKEvt, bool)
1693 {
1694  bool bCall = false;
1695  vcl::KeyCode aCode = rKEvt.GetKeyCode();
1696  if (aCode.GetCode() == KEY_RIGHT)
1697  {
1698  bNextControl = true;
1699  bCall = true;
1700  }
1701  else if (aCode.GetCode() == KEY_LEFT)
1702  {
1703  bNextControl = false;
1704  bCall = true;
1705  }
1706  else if (aCode.GetCode() == KEY_DELETE)
1707  {
1708  m_pParent->RemoveControl(this, true);
1709  //this is invalid here
1710  return true;
1711  }
1712  else if ( (aCode.GetCode() == KEY_F3) && aCode.IsShift() && !aCode.IsMod1() && !aCode.IsMod2() )
1713  {
1714  if (m_pParent)
1715  {
1716  m_pParent->SetFocus2theAllBtn();
1717  }
1718  }
1719  if (bCall && aPrevNextControlLink.IsSet())
1720  aPrevNextControlLink.Call(*this);
1721  else
1722  bCall = false;
1723  return bCall;
1724 }
1725 
1727 {
1728  aGetFocusLink.Call(*this);
1729 }
1730 
1731 namespace
1732 {
1733  const char* STR_AUTH_FIELD_ARY[] =
1734  {
1735  STR_AUTH_FIELD_IDENTIFIER,
1736  STR_AUTH_FIELD_AUTHORITY_TYPE,
1737  STR_AUTH_FIELD_ADDRESS,
1738  STR_AUTH_FIELD_ANNOTE,
1739  STR_AUTH_FIELD_AUTHOR,
1740  STR_AUTH_FIELD_BOOKTITLE,
1741  STR_AUTH_FIELD_CHAPTER,
1742  STR_AUTH_FIELD_EDITION,
1743  STR_AUTH_FIELD_EDITOR,
1744  STR_AUTH_FIELD_HOWPUBLISHED,
1745  STR_AUTH_FIELD_INSTITUTION,
1746  STR_AUTH_FIELD_JOURNAL,
1747  STR_AUTH_FIELD_MONTH,
1748  STR_AUTH_FIELD_NOTE,
1749  STR_AUTH_FIELD_NUMBER,
1750  STR_AUTH_FIELD_ORGANIZATIONS,
1751  STR_AUTH_FIELD_PAGES,
1752  STR_AUTH_FIELD_PUBLISHER,
1753  STR_AUTH_FIELD_SCHOOL,
1754  STR_AUTH_FIELD_SERIES,
1755  STR_AUTH_FIELD_TITLE,
1756  STR_AUTH_FIELD_TYPE,
1757  STR_AUTH_FIELD_VOLUME,
1758  STR_AUTH_FIELD_YEAR,
1759  STR_AUTH_FIELD_URL,
1760  STR_AUTH_FIELD_CUSTOM1,
1761  STR_AUTH_FIELD_CUSTOM2,
1762  STR_AUTH_FIELD_CUSTOM3,
1763  STR_AUTH_FIELD_CUSTOM4,
1764  STR_AUTH_FIELD_CUSTOM5,
1765  STR_AUTH_FIELD_ISBN
1766  };
1767 }
1768 
1770  : SfxTabPage(pPage, pController, "modules/swriter/ui/tocentriespage.ui", "TocEntriesPage", &rAttrSet)
1771  , sDelimStr(SwResId(STR_DELIM))
1772  , sNoCharStyle(SwResId(STR_NO_CHAR_STYLE))
1773  , m_pCurrentForm(nullptr)
1774  , bInLevelHdl(false)
1775  , m_xTypeFT(m_xBuilder->weld_label("typeft"))
1776  , m_xLevelFT(m_xBuilder->weld_label("levelft"))
1777  , m_xLevelLB(m_xBuilder->weld_tree_view("level"))
1778  , m_xAllLevelsPB(m_xBuilder->weld_button("all"))
1779  , m_xEntryNoPB(m_xBuilder->weld_button("chapterno"))
1780  , m_xEntryPB(m_xBuilder->weld_button("entrytext"))
1781  , m_xTabPB(m_xBuilder->weld_button("tabstop"))
1782  , m_xChapterInfoPB(m_xBuilder->weld_button("chapterinfo"))
1783  , m_xPageNoPB(m_xBuilder->weld_button("pageno"))
1784  , m_xHyperLinkPB(m_xBuilder->weld_button("hyperlink"))
1785  , m_xAuthFieldsLB(m_xBuilder->weld_combo_box("authfield"))
1786  , m_xAuthInsertPB(m_xBuilder->weld_button("insert"))
1787  , m_xAuthRemovePB(m_xBuilder->weld_button("remove"))
1788  , m_xCharStyleLB(m_xBuilder->weld_combo_box("charstyle"))
1789  , m_xEditStylePB(m_xBuilder->weld_button("edit"))
1790  , m_xChapterEntryFT(m_xBuilder->weld_label("chapterentryft"))
1791  , m_xChapterEntryLB(m_xBuilder->weld_combo_box("chapterentry"))
1792  , m_xNumberFormatFT(m_xBuilder->weld_label("numberformatft"))
1793  , m_xNumberFormatLB(m_xBuilder->weld_combo_box("numberformat"))
1794  , m_xEntryOutlineLevelFT(m_xBuilder->weld_label("entryoutlinelevelft"))
1795  , m_xEntryOutlineLevelNF(m_xBuilder->weld_spin_button("entryoutlinelevel"))
1796  , m_xFillCharFT(m_xBuilder->weld_label("fillcharft"))
1797  , m_xFillCharCB(m_xBuilder->weld_combo_box("fillchar"))
1798  , m_xTabPosFT(m_xBuilder->weld_label("tabstopposft"))
1799  , m_xTabPosMF(m_xBuilder->weld_metric_spin_button("tabstoppos", FieldUnit::CM))
1800  , m_xAutoRightCB(m_xBuilder->weld_check_button("alignright"))
1801  , m_xFormatFrame(m_xBuilder->weld_widget("formatframe"))
1802  , m_xMainEntryStyleFT(m_xBuilder->weld_label("mainstyleft"))
1803  , m_xMainEntryStyleLB(m_xBuilder->weld_combo_box("mainstyle"))
1804  , m_xAlphaDelimCB(m_xBuilder->weld_check_button("alphadelim"))
1805  , m_xCommaSeparatedCB(m_xBuilder->weld_check_button("commasep"))
1806  , m_xRelToStyleCB(m_xBuilder->weld_check_button("reltostyle"))
1807  , m_xSortingFrame(m_xBuilder->weld_widget("sortingframe"))
1808  , m_xSortDocPosRB(m_xBuilder->weld_radio_button("sortpos"))
1809  , m_xSortContentRB(m_xBuilder->weld_radio_button("sortcontents"))
1810  , m_xSortKeyFrame(m_xBuilder->weld_widget("sortkeyframe"))
1811  , m_xFirstKeyLB(m_xBuilder->weld_combo_box("key1lb"))
1812  , m_xFirstSortUpRB(m_xBuilder->weld_radio_button("up1cb"))
1813  , m_xFirstSortDownRB(m_xBuilder->weld_radio_button("down1cb"))
1814  , m_xSecondKeyLB(m_xBuilder->weld_combo_box("key2lb"))
1815  , m_xSecondSortUpRB(m_xBuilder->weld_radio_button("up2cb"))
1816  , m_xSecondSortDownRB(m_xBuilder->weld_radio_button("down2cb"))
1817  , m_xThirdKeyLB(m_xBuilder->weld_combo_box("key3lb"))
1818  , m_xThirdSortUpRB(m_xBuilder->weld_radio_button("up3cb"))
1819  , m_xThirdSortDownRB(m_xBuilder->weld_radio_button("down3cb"))
1820  , m_xTokenWIN(new SwTokenWindow(m_xBuilder->weld_container("token")))
1821 {
1822  const OUString sNoCharSortKey(SwResId(STR_NOSORTKEY));
1823 
1824  sAuthTypeStr = m_xTypeFT->get_label();
1825  sLevelStr = m_xLevelFT->get_label();
1826  m_xAuthFieldsLB->make_sorted();
1827  m_xTokenWIN->SetTabPage(this);
1828 
1830  aLastTOXType.nIndex = 0;
1831 
1833  m_xEntryNoPB->connect_clicked(LINK(this, SwTOXEntryTabPage, InsertTokenHdl));
1834  m_xEntryPB->connect_clicked(LINK(this, SwTOXEntryTabPage, InsertTokenHdl));
1835  m_xChapterInfoPB->connect_clicked(LINK(this, SwTOXEntryTabPage, InsertTokenHdl));
1836  m_xPageNoPB->connect_clicked(LINK(this, SwTOXEntryTabPage, InsertTokenHdl));
1837  m_xTabPB->connect_clicked(LINK(this, SwTOXEntryTabPage, InsertTokenHdl));
1838  m_xHyperLinkPB->connect_clicked(LINK(this, SwTOXEntryTabPage, InsertTokenHdl));
1839  m_xEditStylePB->connect_clicked(LINK(this, SwTOXEntryTabPage, EditStyleHdl));
1840  m_xLevelLB->connect_changed(LINK(this, SwTOXEntryTabPage, LevelHdl));
1841  m_xTokenWIN->SetButtonSelectedHdl(LINK(this, SwTOXEntryTabPage, TokenSelectedHdl));
1842  m_xTokenWIN->SetModifyHdl(LINK(this, SwTOXEntryTabPage, ModifyHdl));
1843  m_xCharStyleLB->connect_changed(LINK(this, SwTOXEntryTabPage, StyleSelectHdl));
1844  m_xCharStyleLB->append_text(sNoCharStyle);
1845  m_xChapterEntryLB->connect_changed(LINK(this, SwTOXEntryTabPage, ChapterInfoHdl));
1846  m_xEntryOutlineLevelNF->connect_value_changed(LINK(this, SwTOXEntryTabPage, ChapterInfoOutlineHdl));
1847  m_xNumberFormatLB->connect_changed(LINK(this, SwTOXEntryTabPage, NumberFormatHdl));
1848 
1849  m_xTabPosMF->connect_value_changed(LINK(this, SwTOXEntryTabPage, TabPosHdl));
1850  m_xFillCharCB->connect_changed(LINK(this, SwTOXEntryTabPage, FillCharHdl));
1851  m_xAutoRightCB->connect_toggled(LINK(this, SwTOXEntryTabPage, AutoRightHdl));
1852  m_xAuthInsertPB->connect_clicked(LINK(this, SwTOXEntryTabPage, RemoveInsertAuthHdl));
1853  m_xAuthRemovePB->connect_clicked(LINK(this, SwTOXEntryTabPage, RemoveInsertAuthHdl));
1854  m_xSortDocPosRB->connect_toggled(LINK(this, SwTOXEntryTabPage, SortKeyHdl));
1855  m_xSortContentRB->connect_toggled(LINK(this, SwTOXEntryTabPage, SortKeyHdl));
1856  m_xAllLevelsPB->connect_clicked(LINK(this, SwTOXEntryTabPage, AllLevelsHdl));
1857 
1858  m_xAlphaDelimCB->connect_toggled(LINK(this, SwTOXEntryTabPage, ModifyClickHdl));
1859  m_xCommaSeparatedCB->connect_toggled(LINK(this, SwTOXEntryTabPage, ModifyClickHdl));
1860  m_xRelToStyleCB->connect_toggled(LINK(this, SwTOXEntryTabPage, ModifyClickHdl));
1861 
1862  FieldUnit aMetric = ::GetDfltMetric(false);
1863  ::SetFieldUnit(*m_xTabPosMF, aMetric);
1864 
1865  m_xSortDocPosRB->set_active(true);
1866 
1867  m_xFillCharCB->set_entry_max_length(1);
1868  m_xFillCharCB->append_text(OUString(' '));
1869  m_xFillCharCB->append_text(OUString('.'));
1870  m_xFillCharCB->append_text(OUString('-'));
1871  m_xFillCharCB->append_text(OUString('_'));
1872  m_xFillCharCB->append_text(OUString(u'\x2024')); // ONE DOT LEADER
1873  m_xFillCharCB->append_text(OUString(u'\x2025')); // TWO DOT LEADER
1874  m_xFillCharCB->append_text(OUString(u'\x2026')); // HORIZONTAL ELLIPSIS
1875 
1876  m_xEditStylePB->set_sensitive(false);
1877 
1878  //fill the types in
1879  for (sal_uInt16 i = 0; i < AUTH_FIELD_END; ++i)
1880  {
1881  OUString sId(OUString::number(i));
1882  m_xAuthFieldsLB->append(sId, SwResId(STR_AUTH_FIELD_ARY[i]));
1883  }
1884 
1885  m_xFirstKeyLB->append(OUString::number(USHRT_MAX), sNoCharSortKey);
1886  m_xSecondKeyLB->append(OUString::number(USHRT_MAX), sNoCharSortKey);
1887  m_xThirdKeyLB->append(OUString::number(USHRT_MAX), sNoCharSortKey);
1888 
1889  for (sal_uInt16 i = 0; i < AUTH_FIELD_END; ++i)
1890  {
1891  const OUString sTmp(m_xAuthFieldsLB->get_text(i));
1892  const OUString sEntryData(m_xAuthFieldsLB->get_id(i));
1893  m_xFirstKeyLB->append(sEntryData, sTmp);
1894  m_xSecondKeyLB->append(sEntryData, sTmp);
1895  m_xThirdKeyLB->append(sEntryData, sTmp);
1896  }
1897  m_xFirstKeyLB->set_active(0);
1898  m_xSecondKeyLB->set_active(0);
1899  m_xThirdKeyLB->set_active(0);
1900 
1901  //lock size
1902  Size aPrefSize(m_xContainer->get_preferred_size());
1903  m_xContainer->set_size_request(aPrefSize.Width(), aPrefSize.Height());
1904 }
1905 
1907 {
1908  m_xTokenWIN.reset();
1909 }
1910 
1912 {
1913  OnModify(true);
1914 }
1915 
1917 {
1918  OnModify(false);
1919 }
1920 
1921 // bAllLevels is used as signal to change all levels of the example
1922 void SwTOXEntryTabPage::OnModify(bool bAllLevels)
1923 {
1924  UpdateDescriptor();
1925 
1926  SwMultiTOXTabDialog* pTOXDlg = static_cast<SwMultiTOXTabDialog*>(GetDialogController());
1927  if (pTOXDlg)
1928  {
1929  sal_uInt16 nCurLevel = m_xLevelLB->get_selected_index() + 1;
1930  if (aLastTOXType.eType == TOX_CONTENT && bAllLevels)
1931  nCurLevel = USHRT_MAX;
1932  pTOXDlg->CreateOrUpdateExample(
1933  pTOXDlg->GetCurrentTOXType().eType, TOX_PAGE_ENTRY, nCurLevel);
1934  }
1935 }
1936 
1938 {
1939  // nothing to do
1940  return true;
1941 }
1942 
1944 {
1945  SwMultiTOXTabDialog* pTOXDlg = static_cast<SwMultiTOXTabDialog*>(GetDialogController());
1946  const CurTOXType aCurType = pTOXDlg->GetCurrentTOXType();
1947  m_pCurrentForm = pTOXDlg->GetForm(aCurType);
1948  if(TOX_INDEX == aCurType.eType)
1949  {
1950  SwTOXDescription& rDesc = pTOXDlg->GetTOXDescription(aCurType);
1951  const OUString& sMainEntryCharStyle = rDesc.GetMainEntryCharStyle();
1952  if(!sMainEntryCharStyle.isEmpty())
1953  {
1954  if (m_xMainEntryStyleLB->find_text(sMainEntryCharStyle) == -1)
1955  m_xMainEntryStyleLB->append_text(sMainEntryCharStyle);
1956  m_xMainEntryStyleLB->set_active_text(sMainEntryCharStyle);
1957  }
1958  else
1959  m_xMainEntryStyleLB->set_active_text(sNoCharStyle);
1960  m_xAlphaDelimCB->set_active( bool(rDesc.GetIndexOptions() & SwTOIOptions::AlphaDelimiter) );
1961  }
1962  m_xRelToStyleCB->set_active(m_pCurrentForm->IsRelTabPos());
1964 }
1965 
1967 {
1968  SwMultiTOXTabDialog* pTOXDlg = static_cast<SwMultiTOXTabDialog*>(GetDialogController());
1969  const CurTOXType aCurType = pTOXDlg->GetCurrentTOXType();
1970 
1971  m_pCurrentForm = pTOXDlg->GetForm(aCurType);
1972  if( !( aLastTOXType == aCurType ))
1973  {
1974  bool bToxIsAuthorities = TOX_AUTHORITIES == aCurType.eType;
1975  bool bToxIsIndex = TOX_INDEX == aCurType.eType;
1976  bool bToxIsContent = TOX_CONTENT == aCurType.eType;
1977  bool bToxSupportsLinks = TOX_CONTENT == aCurType.eType ||
1978  TOX_ILLUSTRATIONS == aCurType.eType ||
1979  TOX_TABLES == aCurType.eType ||
1980  TOX_OBJECTS == aCurType.eType ||
1981  TOX_USER == aCurType.eType;
1982 
1983  m_xLevelLB->clear();
1984  for(sal_uInt16 i = 1; i < m_pCurrentForm->GetFormMax(); i++)
1985  {
1986  if(bToxIsAuthorities)
1988  static_cast<ToxAuthorityType>(i - 1)) );
1989  else if( bToxIsIndex )
1990  {
1991  if(i == 1)
1992  m_xLevelLB->append_text( sDelimStr );
1993  else
1994  m_xLevelLB->append_text( OUString::number(i - 1) );
1995  }
1996  else
1997  m_xLevelLB->append_text(OUString::number(i));
1998  }
1999  if(bToxIsAuthorities)
2000  {
2001  SwWrtShell& rSh = pTOXDlg->GetWrtShell();
2002  const SwAuthorityFieldType* pFType = static_cast<const SwAuthorityFieldType*>(
2003  rSh.GetFieldType(SwFieldIds::TableOfAuthorities, OUString()));
2004  if(pFType)
2005  {
2006  if(pFType->IsSortByDocument())
2007  m_xSortDocPosRB->set_active(true);
2008  else
2009  {
2010  m_xSortContentRB->set_active(true);
2011  const sal_uInt16 nKeyCount = pFType->GetSortKeyCount();
2012  if(0 < nKeyCount)
2013  {
2014  const SwTOXSortKey* pKey = pFType->GetSortKey(0);
2015  m_xFirstKeyLB->set_active_id(OUString::number(pKey->eField));
2016  m_xFirstSortUpRB->set_active(pKey->bSortAscending);
2017  m_xFirstSortDownRB->set_active(!pKey->bSortAscending);
2018  }
2019  if(1 < nKeyCount)
2020  {
2021  const SwTOXSortKey* pKey = pFType->GetSortKey(1);
2022  m_xSecondKeyLB->set_active_id(OUString::number(pKey->eField));
2023  m_xSecondSortUpRB->set_active(pKey->bSortAscending);
2024  m_xSecondSortDownRB->set_active(!pKey->bSortAscending);
2025  }
2026  if(2 < nKeyCount)
2027  {
2028  const SwTOXSortKey* pKey = pFType->GetSortKey(2);
2029  m_xThirdKeyLB->set_active_id(OUString::number(pKey->eField));
2030  m_xThirdSortUpRB->set_active(pKey->bSortAscending);
2031  m_xThirdSortDownRB->set_active(!pKey->bSortAscending);
2032  }
2033  }
2034  }
2035  SortKeyHdl(m_xSortDocPosRB->get_active() ? *m_xSortDocPosRB : *m_xSortContentRB);
2036  m_xLevelFT->set_label(sAuthTypeStr);
2037  }
2038  else
2039  m_xLevelFT->set_label(sLevelStr);
2040 
2041  m_xLevelLB->select(bToxIsIndex ? 1 : 0);
2042 
2043  //show or hide controls
2044  m_xEntryNoPB->set_visible(bToxIsContent);
2045  m_xHyperLinkPB->set_visible(bToxSupportsLinks);
2046  m_xRelToStyleCB->set_visible(!bToxIsAuthorities);
2047  m_xChapterInfoPB->set_visible(!bToxIsContent && !bToxIsAuthorities);
2048  m_xEntryPB->set_visible(!bToxIsAuthorities);
2049  m_xPageNoPB->set_visible(!bToxIsAuthorities);
2050  m_xAuthFieldsLB->set_visible(bToxIsAuthorities);
2051  m_xAuthInsertPB->set_visible(bToxIsAuthorities);
2052  m_xAuthRemovePB->set_visible(bToxIsAuthorities);
2053 
2054  m_xFormatFrame->set_visible(!bToxIsAuthorities);
2055 
2056  m_xSortingFrame->set_visible(bToxIsAuthorities);
2057  m_xSortKeyFrame->set_visible(bToxIsAuthorities);
2058 
2059  m_xMainEntryStyleFT->set_visible(bToxIsIndex);
2060  m_xMainEntryStyleLB->set_visible(bToxIsIndex);
2061  m_xAlphaDelimCB->set_visible(bToxIsIndex);
2062  m_xCommaSeparatedCB->set_visible(bToxIsIndex);
2063  }
2064  aLastTOXType = aCurType;
2065 
2066  //invalidate PatternWindow
2067  m_xTokenWIN->SetInvalid();
2068  LevelHdl(*m_xLevelLB);
2069 }
2070 
2072 {
2073  WriteBackLevel();
2074  SwMultiTOXTabDialog* pTOXDlg = static_cast<SwMultiTOXTabDialog*>(GetDialogController());
2075  SwTOXDescription& rDesc = pTOXDlg->GetTOXDescription(aLastTOXType);
2077  {
2078  const OUString sTemp(m_xMainEntryStyleLB->get_active_text());
2079  rDesc.SetMainEntryCharStyle(sNoCharStyle == sTemp ? OUString(): sTemp);
2081  if (m_xAlphaDelimCB->get_active())
2082  nIdxOptions |= SwTOIOptions::AlphaDelimiter;
2083  rDesc.SetIndexOptions(nIdxOptions);
2084  }
2085  else if (TOX_AUTHORITIES == aLastTOXType.eType)
2086  {
2087  rDesc.SetSortByDocument(m_xSortDocPosRB->get_active());
2088  SwTOXSortKey aKey1, aKey2, aKey3;
2089  aKey1.eField = static_cast<ToxAuthorityField>(m_xFirstKeyLB->get_active_id().toInt32());
2090  aKey1.bSortAscending = m_xFirstSortUpRB->get_active();
2091  aKey2.eField = static_cast<ToxAuthorityField>(m_xSecondKeyLB->get_active_id().toInt32());
2092  aKey2.bSortAscending = m_xSecondSortUpRB->get_active();
2093  aKey3.eField = static_cast<ToxAuthorityField>(m_xThirdKeyLB->get_active_id().toInt32());
2094  aKey3.bSortAscending = m_xThirdSortUpRB->get_active();
2095 
2096  rDesc.SetSortKeys(aKey1, aKey2, aKey3);
2097  }
2098  SwForm* pCurrentForm = pTOXDlg->GetForm(aLastTOXType);
2099  if (m_xRelToStyleCB->get_visible())
2100  pCurrentForm->SetRelTabPos(m_xRelToStyleCB->get_active());
2101  if (m_xCommaSeparatedCB->get_visible())
2102  pCurrentForm->SetCommaSeparated(m_xCommaSeparatedCB->get_active());
2103 }
2104 
2106 {
2107  UpdateDescriptor();
2108  return DeactivateRC::LeavePage;
2109 }
2110 
2111 std::unique_ptr<SfxTabPage> SwTOXEntryTabPage::Create(weld::Container* pPage, weld::DialogController* pController, const SfxItemSet* rAttrSet)
2112 {
2113  return std::make_unique<SwTOXEntryTabPage>(pPage, pController, *rAttrSet);
2114 }
2115 
2117 {
2118  if (m_xCharStyleLB->get_active() != -1)
2119  {
2120  SfxStringItem aStyle(SID_STYLE_EDIT, m_xCharStyleLB->get_active_text());
2121  SfxUInt16Item aFamily(SID_STYLE_FAMILY, sal_uInt16(SfxStyleFamily::Char));
2122  static_cast<SwMultiTOXTabDialog*>(GetDialogController())->GetWrtShell().
2123  GetView().GetViewFrame()->GetDispatcher()->ExecuteList(SID_STYLE_EDIT,
2124  SfxCallMode::SYNCHRON,
2125  { &aStyle, &aFamily });
2126  }
2127 }
2128 
2129 IMPL_LINK(SwTOXEntryTabPage, RemoveInsertAuthHdl, weld::Button&, rButton, void)
2130 {
2131  bool bInsert = &rButton == m_xAuthInsertPB.get();
2132  if(bInsert)
2133  {
2134  sal_Int32 nSelPos = m_xAuthFieldsLB->get_active();
2135  const OUString sToInsert(m_xAuthFieldsLB->get_active_text());
2136  SwFormToken aInsert(TOKEN_AUTHORITY);
2137  aInsert.nAuthorityField = m_xAuthFieldsLB->get_id(nSelPos).toUInt32();
2138  m_xTokenWIN->InsertAtSelection(aInsert);
2139  m_xAuthFieldsLB->remove_text(sToInsert);
2140  m_xAuthFieldsLB->set_active(nSelPos ? nSelPos - 1 : 0);
2141  }
2142  else
2143  {
2144  SwTOXWidget* pCtrl = m_xTokenWIN->GetActiveControl();
2145  OSL_ENSURE(WindowType::EDIT != pCtrl->GetType(), "Remove should be disabled");
2146  if (WindowType::EDIT != pCtrl->GetType())
2147  {
2148  //fill it into the ListBox
2149  const SwFormToken& rToken = static_cast<SwTOXButton*>(pCtrl)->GetFormToken();
2150  PreTokenButtonRemoved(rToken);
2151  m_xTokenWIN->RemoveControl(static_cast<SwTOXButton*>(pCtrl));
2152  }
2153  }
2154  ModifyHdl(nullptr);
2155 }
2156 
2158 {
2159  //fill it into the ListBox
2160  sal_uInt32 nData = rToken.nAuthorityField;
2161  m_xAuthFieldsLB->append(OUString::number(nData), SwResId(STR_AUTH_FIELD_ARY[nData]));
2162 }
2163 
2165 {
2166  m_xAllLevelsPB->grab_focus();
2167 }
2168 
2169 // This function initializes the default value in the Token
2170 // put here the UI dependent initializations
2171 IMPL_LINK(SwTOXEntryTabPage, InsertTokenHdl, weld::Button&, rBtn, void)
2172 {
2173  OUString sText;
2174  FormTokenType eTokenType = TOKEN_ENTRY_NO;
2175  OUString sCharStyle;
2176  sal_uInt16 nChapterFormat = CF_NUMBER; // i89791
2177  if (&rBtn == m_xEntryNoPB.get())
2178  {
2179  sText = SwForm::GetFormEntryNum();
2180  eTokenType = TOKEN_ENTRY_NO;
2181  }
2182  else if (&rBtn == m_xEntryPB.get())
2183  {
2184  if( TOX_CONTENT == m_pCurrentForm->GetTOXType() )
2185  {
2186  sText = SwForm::GetFormEntryText();
2187  eTokenType = TOKEN_ENTRY_TEXT;
2188  }
2189  else
2190  {
2191  sText = SwForm::GetFormEntry();
2192  eTokenType = TOKEN_ENTRY;
2193  }
2194  }
2195  else if (&rBtn == m_xChapterInfoPB.get())
2196  {
2197  sText = SwForm::GetFormChapterMark();
2198  eTokenType = TOKEN_CHAPTER_INFO;
2199  nChapterFormat = CF_NUM_NOPREPST_TITLE; // i89791
2200  }
2201  else if (&rBtn == m_xPageNoPB.get())
2202  {
2203  sText = SwForm::GetFormPageNums();
2204  eTokenType = TOKEN_PAGE_NUMS;
2205  }
2206  else if (&rBtn == m_xHyperLinkPB.get())
2207  {
2208  sText = SwForm::GetFormLinkStt();
2209  eTokenType = TOKEN_LINK_START;
2210  sCharStyle = SwResId(STR_POOLCHR_TOXJUMP);
2211  }
2212  else if (&rBtn == m_xTabPB.get())
2213  {
2214  sText = SwForm::GetFormTab();
2215  eTokenType = TOKEN_TAB_STOP;
2216  }
2217  SwFormToken aInsert(eTokenType);
2218  aInsert.sCharStyleName = sCharStyle;
2219  aInsert.nTabStopPosition = 0;
2220  aInsert.nChapterFormat = nChapterFormat; // i89791
2221  m_xTokenWIN->InsertAtSelection(aInsert);
2222  ModifyHdl(nullptr);
2223 }
2224 
2226 {
2227  //get current level
2228  //write it into all levels
2229  if(m_xTokenWIN->IsValid())
2230  {
2231  const OUString sNewToken = m_xTokenWIN->GetPattern();
2232  for(sal_uInt16 i = 1; i < m_pCurrentForm->GetFormMax(); i++)
2233  m_pCurrentForm->SetPattern(i, sNewToken);
2234 
2235  OnModify(true);
2236  }
2237 }
2238 
2240 {
2241  if(m_xTokenWIN->IsValid())
2242  {
2243  const OUString sNewToken = m_xTokenWIN->GetPattern();
2244  const sal_uInt16 nLastLevel = m_xTokenWIN->GetLastLevel();
2245  if(nLastLevel != USHRT_MAX)
2246  m_pCurrentForm->SetPattern(nLastLevel + 1, sNewToken);
2247  }
2248 }
2249 
2251 {
2252  if(bInLevelHdl)
2253  return;
2254  bInLevelHdl = true;
2255  WriteBackLevel();
2256 
2257  const sal_uInt16 nLevel = rBox.get_selected_index();
2258  m_xTokenWIN->SetForm(*m_pCurrentForm, nLevel);
2259  if(TOX_AUTHORITIES == m_pCurrentForm->GetTOXType())
2260  {
2261  //fill the types in
2262  m_xAuthFieldsLB->clear();
2263  for( sal_uInt32 i = 0; i < AUTH_FIELD_END; i++)
2264  {
2265  m_xAuthFieldsLB->append(OUString::number(i), SwResId(STR_AUTH_FIELD_ARY[i]));
2266  }
2267 
2268  // #i21237#
2269  SwFormTokens aPattern = m_pCurrentForm->GetPattern(nLevel + 1);
2270 
2271  for(const auto& aToken : aPattern)
2272  {
2273  if(TOKEN_AUTHORITY == aToken.eTokenType)
2274  {
2275  sal_uInt32 nSearch = aToken.nAuthorityField;
2276  int nLstBoxPos = m_xAuthFieldsLB->find_id(OUString::number(nSearch));
2277  OSL_ENSURE(nLstBoxPos != -1, "Entry not found?");
2278  m_xAuthFieldsLB->remove(nLstBoxPos);
2279  }
2280  }
2281  m_xAuthFieldsLB->set_active(0);
2282  }
2283  bInLevelHdl = false;
2284  rBox.grab_focus();
2285 }
2286 
2288 {
2289  bool bEnable = m_xSortContentRB->get_active();
2290  m_xSortKeyFrame->set_sensitive(bEnable);
2291 }
2292 
2293 IMPL_LINK(SwTOXEntryTabPage, TokenSelectedHdl, SwFormToken&, rToken, void)
2294 {
2295  if (!rToken.sCharStyleName.isEmpty())
2296  m_xCharStyleLB->set_active_text(rToken.sCharStyleName);
2297  else
2298  m_xCharStyleLB->set_active_text(sNoCharStyle);
2299 
2300  const OUString sEntry = m_xCharStyleLB->get_active_text();
2301  m_xEditStylePB->set_sensitive(sEntry != sNoCharStyle);
2302 
2303  if(rToken.eTokenType == TOKEN_CHAPTER_INFO)
2304  {
2305 //---> i89791
2306  switch(rToken.nChapterFormat)
2307  {
2308  default:
2309  m_xChapterEntryLB->set_active(-1);//to alert the user
2310  break;
2311  case CF_NUM_NOPREPST_TITLE:
2312  m_xChapterEntryLB->set_active(0);
2313  break;
2314  case CF_TITLE:
2315  m_xChapterEntryLB->set_active(1);
2316  break;
2317  case CF_NUMBER_NOPREPST:
2318  m_xChapterEntryLB->set_active(2);
2319  break;
2320  }
2321 //i53420
2322 
2323  m_xEntryOutlineLevelNF->set_value(rToken.nOutlineLevel);
2324  }
2325 
2326 //i53420
2327  if(rToken.eTokenType == TOKEN_ENTRY_NO)
2328  {
2329  m_xEntryOutlineLevelNF->set_value(rToken.nOutlineLevel);
2330  const sal_uInt16 nFormat =
2331  rToken.nChapterFormat == CF_NUM_NOPREPST_TITLE ? 1 : 0;
2332  m_xNumberFormatLB->set_active(nFormat);
2333  }
2334 
2335  bool bTabStop = TOKEN_TAB_STOP == rToken.eTokenType;
2336  m_xFillCharFT->set_visible(bTabStop);
2337  m_xFillCharCB->set_visible(bTabStop);
2338  m_xTabPosFT->set_visible(bTabStop);
2339  m_xTabPosMF->set_visible(bTabStop);
2340  m_xAutoRightCB->set_visible(bTabStop);
2341  m_xAutoRightCB->set_sensitive(bTabStop);
2342  if(bTabStop)
2343  {
2344  m_xTabPosMF->set_value(m_xTabPosMF->normalize(rToken.nTabStopPosition), FieldUnit::TWIP);
2345  m_xAutoRightCB->set_active(SvxTabAdjust::End == rToken.eTabAlign);
2346  m_xFillCharCB->set_entry_text(OUString(rToken.cTabFillChar));
2347  m_xTabPosFT->set_sensitive(!m_xAutoRightCB->get_active());
2348  m_xTabPosMF->set_sensitive(!m_xAutoRightCB->get_active());
2349  }
2350  else
2351  {
2352  m_xTabPosMF->set_sensitive(false);
2353  }
2354 
2355  bool bIsChapterInfo = rToken.eTokenType == TOKEN_CHAPTER_INFO;
2356  bool bIsEntryNumber = rToken.eTokenType == TOKEN_ENTRY_NO;
2357  m_xChapterEntryFT->set_visible( bIsChapterInfo );
2358  m_xChapterEntryLB->set_visible( bIsChapterInfo );
2359  m_xEntryOutlineLevelFT->set_visible( bIsChapterInfo || bIsEntryNumber );
2360  m_xEntryOutlineLevelNF->set_visible( bIsChapterInfo || bIsEntryNumber );
2361  m_xNumberFormatFT->set_visible( bIsEntryNumber );
2362  m_xNumberFormatLB->set_visible( bIsEntryNumber );
2363 
2364  //now enable the visible buttons
2365  //- inserting the same type of control is not allowed
2366  //- some types of controls can only appear once (EntryText EntryNumber)
2367 
2368  if (m_xEntryNoPB->get_visible())
2369  {
2370  m_xEntryNoPB->set_sensitive(TOKEN_ENTRY_NO != rToken.eTokenType );
2371  }
2372  if (m_xEntryPB->get_visible())
2373  {
2374  m_xEntryPB->set_sensitive(TOKEN_ENTRY_TEXT != rToken.eTokenType &&
2375  !m_xTokenWIN->Contains(TOKEN_ENTRY_TEXT)
2376  && !m_xTokenWIN->Contains(TOKEN_ENTRY));
2377  }
2378 
2379  if (m_xChapterInfoPB->get_visible())
2380  {
2381  m_xChapterInfoPB->set_sensitive(TOKEN_CHAPTER_INFO != rToken.eTokenType);
2382  }
2383  if (m_xPageNoPB->get_visible())
2384  {
2385  m_xPageNoPB->set_sensitive(TOKEN_PAGE_NUMS != rToken.eTokenType &&
2386  !m_xTokenWIN->Contains(TOKEN_PAGE_NUMS));
2387  }
2388  if (m_xTabPB->get_visible())
2389  {
2390  m_xTabPB->set_sensitive(!bTabStop);
2391  }
2392  if (m_xHyperLinkPB->get_visible())
2393  {
2394  m_xHyperLinkPB->set_sensitive(TOKEN_LINK_START != rToken.eTokenType &&
2395  TOKEN_LINK_END != rToken.eTokenType);
2396  }
2397  //table of authorities
2398  if (m_xAuthInsertPB->get_visible())
2399  {
2400  bool bText = TOKEN_TEXT == rToken.eTokenType;
2401  m_xAuthInsertPB->set_sensitive(bText && !m_xAuthFieldsLB->get_active_text().isEmpty());
2402  m_xAuthRemovePB->set_sensitive(!bText);
2403  }
2404 }
2405 
2406 IMPL_LINK(SwTOXEntryTabPage, StyleSelectHdl, weld::ComboBox&, rBox, void)
2407 {
2408  OUString sEntry = rBox.get_active_text();
2409  const sal_uInt16 nId = rBox.get_active_id().toUInt32();
2410  const bool bEqualsNoCharStyle = sEntry == sNoCharStyle;
2411  m_xEditStylePB->set_sensitive(!bEqualsNoCharStyle);
2412  if (bEqualsNoCharStyle)
2413  sEntry.clear();
2414  SwTOXWidget* pCtrl = m_xTokenWIN->GetActiveControl();
2415  OSL_ENSURE(pCtrl, "no active control?");
2416  if(pCtrl)
2417  {
2418  if(WindowType::EDIT == pCtrl->GetType())
2419  static_cast<SwTOXEdit*>(pCtrl)->SetCharStyleName(sEntry, nId);
2420  else
2421  static_cast<SwTOXButton*>(pCtrl)->SetCharStyleName(sEntry, nId);
2422 
2423  }
2424  ModifyHdl(nullptr);
2425 }
2426 
2427 IMPL_LINK(SwTOXEntryTabPage, ChapterInfoHdl, weld::ComboBox&, rBox, void)
2428 {
2429  int nPos = rBox.get_active();
2430  if (nPos != -1)
2431  {
2432  SwTOXWidget* pCtrl = m_xTokenWIN->GetActiveControl();
2433  OSL_ENSURE(pCtrl, "no active control?");
2434  if(pCtrl && WindowType::EDIT != pCtrl->GetType())
2435  static_cast<SwTOXButton*>(pCtrl)->SetChapterInfo(nPos);
2436  ModifyHdl(nullptr);
2437  }
2438 }
2439 
2440 IMPL_LINK(SwTOXEntryTabPage, ChapterInfoOutlineHdl, weld::SpinButton&, rEdit, void)
2441 {
2442  const sal_uInt16 nLevel = rEdit.get_value();
2443 
2444  SwTOXWidget* pCtrl = m_xTokenWIN->GetActiveControl();
2445  OSL_ENSURE(pCtrl, "no active control?");
2446  if(pCtrl && WindowType::EDIT != pCtrl->GetType())
2447  static_cast<SwTOXButton*>(pCtrl)->SetOutlineLevel(nLevel);
2448 
2449  ModifyHdl(nullptr);
2450 }
2451 
2452 IMPL_LINK(SwTOXEntryTabPage, NumberFormatHdl, weld::ComboBox&, rBox, void)
2453 {
2454  const sal_Int32 nPos = rBox.get_active();
2455  if (nPos != -1)
2456  {
2457  SwTOXWidget* pCtrl = m_xTokenWIN->GetActiveControl();
2458  OSL_ENSURE(pCtrl, "no active control?");
2459  if(pCtrl && WindowType::EDIT != pCtrl->GetType())
2460  {
2461  static_cast<SwTOXButton*>(pCtrl)->SetEntryNumberFormat(nPos);//i89791
2462  }
2463  ModifyHdl(nullptr);
2464  }
2465 }
2466 
2468 {
2469  SwTOXWidget* pCtrl = m_xTokenWIN->GetActiveControl();
2470  OSL_ENSURE(pCtrl && WindowType::EDIT != pCtrl->GetType() &&
2471  TOKEN_TAB_STOP == static_cast<SwTOXButton*>(pCtrl)->GetFormToken().eTokenType,
2472  "no active style::TabStop control?");
2473  if( pCtrl && WindowType::EDIT != pCtrl->GetType() )
2474  {
2475  static_cast<SwTOXButton*>(pCtrl)->SetTabPosition( static_cast< SwTwips >(
2476  rEdit.denormalize(rEdit.get_value(FieldUnit::TWIP))));
2477  }
2478  ModifyHdl(nullptr);
2479 }
2480 
2481 IMPL_LINK(SwTOXEntryTabPage, FillCharHdl, weld::ComboBox&, rBox, void)
2482 {
2483  SwTOXWidget* pCtrl = m_xTokenWIN->GetActiveControl();
2484  OSL_ENSURE(pCtrl && WindowType::EDIT != pCtrl->GetType() &&
2485  TOKEN_TAB_STOP == static_cast<SwTOXButton*>(pCtrl)->GetFormToken().eTokenType,
2486  "no active style::TabStop control?");
2487  if (pCtrl && WindowType::EDIT != pCtrl->GetType())
2488  {
2489  sal_Unicode cSet;
2490  if (!rBox.get_active_text().isEmpty())
2491  cSet = rBox.get_active_text()[0];
2492  else
2493  cSet = ' ';
2494  static_cast<SwTOXButton*>(pCtrl)->SetFillChar( cSet );
2495  }
2496  ModifyHdl(nullptr);
2497 }
2498 
2499 IMPL_LINK(SwTOXEntryTabPage, AutoRightHdl, weld::ToggleButton&, rBox, void)
2500 {
2501  //the most right style::TabStop is usually right aligned
2502  SwTOXWidget* pCurCtrl = m_xTokenWIN->GetActiveControl();
2503  OSL_ENSURE(WindowType::EDIT != pCurCtrl->GetType() &&
2504  static_cast<SwTOXButton*>(pCurCtrl)->GetFormToken().eTokenType == TOKEN_TAB_STOP,
2505  "no style::TabStop selected!");
2506 
2507  const SwFormToken& rToken = static_cast<SwTOXButton*>(pCurCtrl)->GetFormToken();
2508  bool bChecked = rBox.get_active();
2509  if(rToken.eTokenType == TOKEN_TAB_STOP)
2510  static_cast<SwTOXButton*>(pCurCtrl)->SetTabAlign(
2511  bChecked ? SvxTabAdjust::End : SvxTabAdjust::Left);
2512  m_xTabPosFT->set_sensitive(!bChecked);
2513  m_xTabPosMF->set_sensitive(!bChecked);
2514  ModifyHdl(nullptr);
2515 }
2516 
2518 {
2519  SwDocShell* pDocSh = rSh.GetView().GetDocShell();
2520  ::FillCharStyleListBox(*m_xCharStyleLB, pDocSh, true, true);
2521  const OUString sDefault(SwResId(STR_POOLCOLL_STANDARD));
2522  for (int i = 0, nCount = m_xCharStyleLB->get_count(); i < nCount; ++i)
2523  {
2524  const OUString sEntry = m_xCharStyleLB->get_text(i);
2525  if(sDefault != sEntry)
2526  {
2527  m_xMainEntryStyleLB->append(m_xCharStyleLB->get_id(i), sEntry);
2528  }
2529  }
2531  RES_POOLCHR_IDX_MAIN_ENTRY, OUString()));
2532 }
2533 
2534 static const char* STR_TOKEN_ARY[] =
2535 {
2536  STR_TOKEN_ENTRY_NO,
2537  STR_TOKEN_ENTRY, //mapped from original STR_TOKEN_ENTRY_TEXT,
2538  STR_TOKEN_ENTRY,
2539  STR_TOKEN_TAB_STOP,
2540  nullptr,
2541  STR_TOKEN_PAGE_NUMS,
2542  STR_TOKEN_CHAPTER_INFO,
2543  STR_TOKEN_LINK_START,
2544  STR_TOKEN_LINK_END,
2545  STR_TOKEN_AUTHORITY
2546 };
2547 
2548 static const char* STR_TOKEN_HELP_ARY[] =
2549 {
2550  STR_TOKEN_HELP_ENTRY_NO,
2551  STR_TOKEN_HELP_ENTRY, // mapped from original STR_TOKEN_HELP_ENTRY_TEXT,
2552  STR_TOKEN_HELP_ENTRY,
2553  STR_TOKEN_HELP_TAB_STOP,
2554  STR_TOKEN_HELP_TEXT,
2555  STR_TOKEN_HELP_PAGE_NUMS,
2556  STR_TOKEN_HELP_CHAPTER_INFO,
2557  STR_TOKEN_HELP_LINK_START,
2558  STR_TOKEN_HELP_LINK_END,
2559  STR_TOKEN_HELP_AUTHORITY
2560 };
2561 
2562 SwTokenWindow::SwTokenWindow(std::unique_ptr<weld::Container> xParent)
2563  : m_pForm(nullptr)
2564  , m_nLevel(0)
2565  , m_bValid(false)
2566  , m_sCharStyle(SwResId(STR_CHARSTYLE))
2567  , m_pActiveCtrl(nullptr)
2568  , m_pParent(nullptr)
2569  , m_xParentWidget(std::move(xParent))
2570  , m_xBuilder(Application::CreateBuilder(m_xParentWidget.get(), "modules/swriter/ui/tokenwidget.ui"))
2571  , m_xContainer(m_xBuilder->weld_container("TokenWidget"))
2572  , m_xLeftScrollWin(m_xBuilder->weld_button("left"))
2573  , m_xCtrlParentWin(m_xBuilder->weld_container("ctrl"))
2574  , m_xScrollWin(m_xBuilder->weld_scrolled_window("scrollwin"))
2575  , m_xRightScrollWin(m_xBuilder->weld_button("right"))
2576 {
2577  m_xScrollWin->connect_hadjustment_changed(LINK(this, SwTokenWindow, ScrollHdl));
2578  m_xCtrlParentWin->set_size_request(-1, Edit::GetMinimumEditSize().Height());
2579  m_xCtrlParentWin->connect_size_allocate(LINK(this, SwTokenWindow, AdjustPositionsHdl));
2580 
2581  for (sal_uInt32 i = 0; i < TOKEN_END; ++i)
2582  {
2583  const char* pTextId = STR_TOKEN_ARY[i];
2584  if (pTextId)
2585  m_aButtonTexts[i] = SwResId(pTextId);
2586 
2587  const char* pHelpId = STR_TOKEN_HELP_ARY[i];
2588  m_aButtonHelpTexts[i] = SwResId(pHelpId);
2589  }
2590 
2591  m_sAccessibleName = SwResId(STR_STRUCTURE);
2592  m_sAdditionalAccnameString1 = SwResId(STR_ADDITIONAL_ACCNAME_STRING1);
2593  m_sAdditionalAccnameString2 = SwResId(STR_ADDITIONAL_ACCNAME_STRING2);
2594  m_sAdditionalAccnameString3 = SwResId(STR_ADDITIONAL_ACCNAME_STRING3);
2595 
2596  Link<weld::Button&,void> aLink(LINK(this, SwTokenWindow, ScrollBtnHdl));
2597  m_xLeftScrollWin->connect_clicked(aLink);
2598  m_xRightScrollWin->connect_clicked(aLink);
2599 }
2600 
2602 {
2603 }
2604 
2605 void SwTokenWindow::SetForm(SwForm& rForm, sal_uInt16 nL)
2606 {
2607  SetActiveControl(nullptr);
2608  m_bValid = true;
2609 
2610  if (m_pForm)
2611  {
2612  //apply current level settings to the form
2613  m_aControlList.clear();
2614  }
2615 
2616  m_nLevel = nL;
2617  m_pForm = &rForm;
2618  //now the display
2619  if(m_nLevel < MAXLEVEL || rForm.GetTOXType() == TOX_AUTHORITIES)
2620  {
2621  // #i21237#
2622  SwFormTokens aPattern = m_pForm->GetPattern(m_nLevel + 1);
2623  bool bLastWasText = false; //assure alternating text - code - text
2624 
2625  SwTOXWidget* pSetActiveControl = nullptr;
2626  for (const auto& aToken : aPattern) // #i21237#
2627  {
2628  if(TOKEN_TEXT == aToken.eTokenType)
2629  {
2630  SAL_WARN_IF(bLastWasText, "sw", "text following text is invalid");
2631  SwTOXWidget* pCtrl = InsertItem(aToken.sText, aToken);
2632  bLastWasText = true;
2633  if (!GetActiveControl())
2634  SetActiveControl(pCtrl);
2635  }
2636  else
2637  {
2638  if( !bLastWasText )
2639  {
2640  SwFormToken aTemp(TOKEN_TEXT);
2641  SwTOXWidget* pCtrl = InsertItem(OUString(), aTemp);
2642  if(!pSetActiveControl)
2643  pSetActiveControl = pCtrl;
2644  }
2645 
2646  OUString sForm;
2647  switch( aToken.eTokenType )
2648  {
2649  case TOKEN_ENTRY_NO: sForm = SwForm::GetFormEntryNum(); break;
2650  case TOKEN_ENTRY_TEXT: sForm = SwForm::GetFormEntryText(); break;
2651  case TOKEN_ENTRY: sForm = SwForm::GetFormEntry(); break;
2652  case TOKEN_TAB_STOP: sForm = SwForm::GetFormTab(); break;
2653  case TOKEN_PAGE_NUMS: sForm = SwForm::GetFormPageNums(); break;
2654  case TOKEN_CHAPTER_INFO: sForm = SwForm::GetFormChapterMark(); break;
2655  case TOKEN_LINK_START: sForm = SwForm::GetFormLinkStt(); break;
2656  case TOKEN_LINK_END: sForm = SwForm::GetFormLinkEnd(); break;
2657  case TOKEN_AUTHORITY: sForm = SwForm::GetFormAuth(); break;
2658  default:; //prevent warning
2659  }
2660 
2661  InsertItem( sForm, aToken );
2662  bLastWasText = false;
2663  }
2664  }
2665  if(!bLastWasText)
2666  {
2667  SwFormToken aTemp(TOKEN_TEXT);
2668  SwTOXWidget* pCtrl = InsertItem(OUString(), aTemp);
2669  if(!pSetActiveControl)
2670  pSetActiveControl = pCtrl;
2671  }
2672  SetActiveControl(pSetActiveControl);
2673  }
2674  AdjustScrolling();
2675 }
2676 
2678 {
2679  if (pSet != m_pActiveCtrl)
2680  {
2681  m_pActiveCtrl = pSet;
2682  if( m_pActiveCtrl )
2683  {
2685  //it must be a SwTOXEdit
2686  const SwFormToken* pFToken;
2687  if( WindowType::EDIT == m_pActiveCtrl->GetType() )
2688  pFToken = &static_cast<SwTOXEdit*>(m_pActiveCtrl)->GetFormToken();
2689  else
2690  pFToken = &static_cast<SwTOXButton*>(m_pActiveCtrl)->GetFormToken();
2691 
2692  SwFormToken aTemp( *pFToken );
2693  m_aButtonSelectedHdl.Call( aTemp );
2694  }
2695  }
2696 }
2697 
2698 SwTOXWidget* SwTokenWindow::InsertItem(const OUString& rText, const SwFormToken& rToken)
2699 {
2700  SwTOXWidget* pRet = nullptr;
2701 
2702  if (TOKEN_TEXT == rToken.eTokenType)
2703  {
2704  SwTOXEdit* pEdit = new SwTOXEdit(this, rToken);
2705  pEdit->set_grid_left_attach(m_aControlList.size());
2706 
2707  m_aControlList.emplace_back(pEdit);
2708 
2709  pEdit->SetText(rText);
2710  sal_uInt32 nIndex = GetControlIndex( TOKEN_TEXT );
2711  OUString strName(m_sAccessibleName + OUString::number(nIndex));
2712  if ( nIndex == 1 )
2713  {
2714  /*Press left or right arrow to choose the structure controls*/
2715  strName += " (" + m_sAdditionalAccnameString2 + ", "
2716  /*Press Ctrl+Alt+A to move focus for more operations*/
2718  /*Press Ctrl+Alt+B to move focus back to the current structure control*/
2720  }
2721  pEdit->SetAccessibleName(strName);
2722  pEdit->AdjustSize();
2723  pEdit->SetModifyHdl(LINK(this, SwTokenWindow, EditResize ));
2724  pEdit->SetPrevNextLink(LINK(this, SwTokenWindow, NextItemHdl));
2725  pEdit->SetGetFocusHdl(LINK(this, SwTokenWindow, TbxFocusHdl));
2726  pEdit->Show();
2727  pRet = pEdit;
2728  }
2729  else
2730  {
2731  SwTOXButton* pButton = new SwTOXButton(this, rToken);
2732  pButton->set_grid_left_attach(m_aControlList.size());
2733 
2734  m_aControlList.emplace_back(pButton);
2735 
2736  pButton->SetPrevNextLink(LINK(this, SwTokenWindow, NextItemBtnHdl));
2737  pButton->SetGetFocusHdl(LINK(this, SwTokenWindow, TbxFocusBtnHdl));
2738 
2739  if(TOKEN_AUTHORITY != rToken.eTokenType)
2740  pButton->SetText(m_aButtonTexts[rToken.eTokenType]);
2741  else
2742  {
2743  //use the first two chars as symbol
2745  static_cast<ToxAuthorityField>(rToken.nAuthorityField)));
2746  pButton->SetText(sTmp.copy(0, 2));
2747  }
2748 
2749  sal_uInt32 nIndex = GetControlIndex( rToken.eTokenType );
2750  OUString sAccName = m_aButtonHelpTexts[rToken.eTokenType];
2751  if ( nIndex )
2752  {
2753  sAccName += " " + OUString::number(nIndex);
2754  }
2755  pButton->SetAccessibleName( sAccName );
2756 
2757  pButton->Show();
2758  pRet = pButton;
2759  }
2760 
2761  return pRet;
2762 }
2763 
2765 {
2766  OSL_ENSURE(m_pActiveCtrl, "no active control!");
2767 
2768  if(!m_pActiveCtrl)
2769  return;
2770 
2771  SwFormToken aToInsertToken(rToken);
2772 
2773  if(TOKEN_LINK_START == aToInsertToken.eTokenType)
2774  {
2775  //determine if start or end of hyperlink is appropriate
2776  //eventually change a following link start into a link end
2777  // groups of LS LE should be ignored
2778  // <insert>
2779  //LS <insert>
2780  //LE <insert>
2781  //<insert> LS
2782  //<insert> LE
2783  //<insert>
2784  bool bPreStartLinkFound = false;
2785  bool bPreEndLinkFound = false;
2786 
2787  const SwTOXWidget* pControl = nullptr;
2788  const SwTOXWidget* pExchange = nullptr;
2789 
2790  auto it = m_aControlList.cbegin();
2791  for( ; it != m_aControlList.cend() && m_pActiveCtrl != it->get(); ++it )
2792  {
2793  pControl = it->get();
2794 
2795  if( WindowType::EDIT != pControl->GetType())
2796  {
2797  const SwFormToken& rNewToken =
2798  static_cast<const SwTOXButton*>(pControl)->GetFormToken();
2799 
2800  if( TOKEN_LINK_START == rNewToken.eTokenType )
2801  {
2802  bPreStartLinkFound = true;
2803  pExchange = nullptr;
2804  }
2805  else if(TOKEN_LINK_END == rNewToken.eTokenType)
2806  {
2807  if( bPreStartLinkFound )
2808  bPreStartLinkFound = false;
2809  else
2810  {
2811  bPreEndLinkFound = false;
2812  pExchange = pControl;
2813  }
2814  }
2815  }
2816  }
2817 
2818  bool bPostLinkStartFound = false;
2819 
2820  if(!bPreStartLinkFound && !bPreEndLinkFound)
2821  {
2822  for( ; it != m_aControlList.cend(); ++it )
2823  {
2824  pControl = it->get();
2825 
2826  if( pControl != m_pActiveCtrl &&
2827  WindowType::EDIT != pControl->GetType())
2828  {
2829  const SwFormToken& rNewToken =
2830  static_cast<const SwTOXButton*>(pControl)->GetFormToken();
2831 
2832  if( TOKEN_LINK_START == rNewToken.eTokenType )
2833  {
2834  if(bPostLinkStartFound)
2835  break;
2836  bPostLinkStartFound = true;
2837  pExchange = pControl;
2838  }
2839  else if(TOKEN_LINK_END == rNewToken.eTokenType )
2840  {
2841  if(bPostLinkStartFound)
2842  {
2843  bPostLinkStartFound = false;
2844  pExchange = nullptr;
2845  }
2846  break;
2847  }
2848  }
2849  }
2850  }
2851 
2852  if(bPreStartLinkFound)
2853  {
2854  aToInsertToken.eTokenType = TOKEN_LINK_END;
2855  aToInsertToken.sText = m_aButtonTexts[TOKEN_LINK_END];
2856  }
2857 
2858  if(bPostLinkStartFound)
2859  {
2860  OSL_ENSURE(pExchange, "no control to exchange?");
2861  if(pExchange)
2862  {
2863  const_cast<SwTOXButton*>(static_cast<const SwTOXButton*>(pExchange))->SetLinkEnd();
2864  const_cast<SwTOXButton*>(static_cast<const SwTOXButton*>(pExchange))->SetText(m_aButtonTexts[TOKEN_LINK_END]);
2865  }
2866  }
2867 
2868  if(bPreEndLinkFound)
2869  {
2870  OSL_ENSURE(pExchange, "no control to exchange?");
2871 
2872  if(pExchange)
2873  {
2874  const_cast<SwTOXButton*>(static_cast<const SwTOXButton*>(pExchange))->SetLinkStart();
2875  const_cast<SwTOXButton*>(static_cast<const SwTOXButton*>(pExchange))->SetText(m_aButtonTexts[TOKEN_LINK_START]);
2876  }
2877  }
2878  }
2879 
2880  //if the active control is text then insert a new button at the selection
2881  //else replace the button
2882  auto iterActive = std::find_if(m_aControlList.begin(), m_aControlList.end(),
2883  [this](const auto& rControl)
2884  {
2885  SwTOXWidget* pCtrl = rControl.get();
2886  return pCtrl == m_pActiveCtrl;
2887  });
2888 
2889  assert(iterActive != m_aControlList.end());
2890  if (iterActive == m_aControlList.end())
2891  return;
2892 
2893  if (WindowType::EDIT == m_pActiveCtrl->GetType())
2894  {
2895  ++iterActive;
2896 
2897  int nStartPos, nEndPos;
2898  static_cast<SwTOXEdit*>(m_pActiveCtrl)->get_selection_bounds(nStartPos, nEndPos);
2899 
2900  const OUString sEditText = static_cast<SwTOXEdit*>(m_pActiveCtrl)->GetText();
2901  const OUString sLeft = sEditText.copy( 0, std::min(nStartPos, nEndPos) );
2902  const OUString sRight = sEditText.copy( std::max(nStartPos, nEndPos) );
2903 
2904  static_cast<SwTOXEdit*>(m_pActiveCtrl)->SetText(sLeft);
2905  static_cast<SwTOXEdit*>(m_pActiveCtrl)->AdjustSize();
2906 
2907  SwFormToken aTmpToken(TOKEN_TEXT);
2908  SwTOXEdit* pEdit = new SwTOXEdit(this, aTmpToken);
2909  iterActive = m_aControlList.emplace(iterActive, pEdit);
2910 
2911  pEdit->SetText(sRight);
2912  sal_uInt32 nIndex = GetControlIndex( TOKEN_TEXT );
2913  OUString strName(m_sAccessibleName + OUString::number(nIndex));
2914  if ( nIndex == 1)
2915  {
2916  /*Press left or right arrow to choose the structure controls*/
2917  strName += " (" + m_sAdditionalAccnameString2 + ", "
2918  /*Press Ctrl+Alt+A to move focus for more operations*/
2920  /*Press Ctrl+Alt+B to move focus back to the current structure control*/
2922  }
2923  pEdit->SetAccessibleName(strName);
2924  pEdit->AdjustSize();
2925  pEdit->SetModifyHdl(LINK(this, SwTokenWindow, EditResize ));
2926  pEdit->SetPrevNextLink(LINK(this, SwTokenWindow, NextItemHdl));
2927  pEdit->SetGetFocusHdl(LINK(this, SwTokenWindow, TbxFocusHdl));
2928  pEdit->Show();
2929  }
2930  else
2931  {
2932  m_pActiveCtrl->Hide();
2933  m_pActiveCtrl = nullptr;
2934  iterActive = m_aControlList.erase(iterActive);
2935  }
2936 
2937  //now the new button
2938  SwTOXButton* pButton = new SwTOXButton(this, aToInsertToken);
2939  m_aControlList.emplace(iterActive, pButton);
2940 
2941  pButton->SetPrevNextLink(LINK(this, SwTokenWindow, NextItemBtnHdl));
2942  pButton->SetGetFocusHdl(LINK(this, SwTokenWindow, TbxFocusBtnHdl));
2943 
2944  if (TOKEN_AUTHORITY != aToInsertToken.eTokenType)
2945  {
2946  pButton->SetText(m_aButtonTexts[aToInsertToken.eTokenType]);
2947  }
2948  else
2949  {
2950  //use the first two chars as symbol
2952  static_cast<ToxAuthorityField>(aToInsertToken.nAuthorityField)));
2953  pButton->SetText(sTmp.copy(0, 2));
2954  }
2955 
2956  pButton->Check();
2957  pButton->Show();
2958  SetActiveControl(pButton);
2959 
2960  AdjustPositions();
2961 }
2962 
2963 void SwTokenWindow::RemoveControl(const SwTOXButton* pDel, bool bInternalCall)
2964 {
2965  if (bInternalCall && TOX_AUTHORITIES == m_pForm->GetTOXType())
2967 
2968  auto it = std::find_if(m_aControlList.begin(), m_aControlList.end(),
2969  [pDel](const auto& rControl)
2970  {
2971  SwTOXWidget* pCtrl = rControl.get();
2972  return pCtrl == pDel;
2973  });
2974  assert(it != m_aControlList.end()); //Control does not exist!
2975  if (it == m_aControlList.end())
2976  return;
2977 
2978  // the two neighbours of the box must be merged
2979  // the properties of the right one will be lost
2980  assert(it != m_aControlList.begin() && it != m_aControlList.end() - 1); //Button at first or last position?
2981  if (it == m_aControlList.begin() || it == m_aControlList.end() - 1)
2982  return;
2983 
2984  auto itLeft = it, itRight = it;
2985  --itLeft;
2986  ++itRight;
2987  SwTOXWidget* pLeftEdit = itLeft->get();
2988  SwTOXWidget* pRightEdit = itRight->get();
2989 
2990  static_cast<SwTOXEdit*>(pLeftEdit)->SetText(static_cast<SwTOXEdit*>(pLeftEdit)->GetText() +
2991  static_cast<SwTOXEdit*>(pRightEdit)->GetText());
2992  static_cast<SwTOXEdit*>(pLeftEdit)->AdjustSize();
2993 
2994  m_pActiveCtrl->Hide();
2995  m_pActiveCtrl = nullptr;
2996 
2997  m_aControlList.erase(itRight);
2998  m_aControlList.erase(it);
2999 
3000  SetActiveControl(pLeftEdit);
3001  AdjustPositions();
3002  m_aModifyHdl.Call(nullptr);
3003 }
3004 
3005 IMPL_LINK_NOARG(SwTokenWindow, AdjustPositionsHdl, const Size&, void)
3006 {
3007  AdjustScrolling();
3008 }
3009 
3011 {
3012  for (size_t i = 0; i < m_aControlList.size(); ++i)
3013  m_aControlList[i]->set_grid_left_attach(i);
3014  AdjustScrolling();
3015 }
3016 
3018 {
3019  m_xScrollWin->hadjustment_set_value(nOffset);
3020 }
3021 
3023 {
3024  AdjustScrolling();
3025 }
3026 
3028 {
3029  if (m_aControlList.size() > 1)
3030  {
3031  //validate scroll buttons
3032 
3033  auto nLeft = m_xScrollWin->hadjustment_get_value();
3034  auto nSpace = m_xScrollWin->hadjustment_get_page_size();
3035  auto nWidth = m_xScrollWin->hadjustment_get_upper();
3036 
3037  bool bEnable = nWidth > nSpace;
3038 
3039  //the active control must be visible
3040  if (bEnable && m_pActiveCtrl)
3041  {
3042  int x, y, width, height;
3043  m_pActiveCtrl->get_extents_relative_to(*m_xCtrlParentWin, x, y, width, height);
3044 
3045  if (x < nLeft || x + width > nLeft + nSpace)
3046  {
3047  MoveControls(x);
3048  nLeft = x;
3049  }
3050 
3051  m_xLeftScrollWin->set_sensitive(nLeft > 0);
3052  m_xRightScrollWin->set_sensitive(nLeft + nSpace < nWidth);
3053  }
3054  else
3055  {
3056  //if the control fits into the space then the first control must be at position 0
3057  m_xRightScrollWin->set_sensitive(false);
3058  m_xLeftScrollWin->set_sensitive(false);
3059  }
3060  }
3061 }
3062 
3063 IMPL_LINK(SwTokenWindow, ScrollBtnHdl, weld::Button&, rBtn, void)
3064 {
3065  if (m_aControlList.empty())
3066  return;
3067 
3068  const auto nSpace = m_xScrollWin->hadjustment_get_page_size();
3069  const auto nWidth = m_xScrollWin->hadjustment_get_upper();
3070  const auto nLeft = m_xScrollWin->hadjustment_get_value();
3071 
3072  long nMove = nLeft;
3073  if (&rBtn == m_xLeftScrollWin.get())
3074  {
3075  //find the first completely visible control (left edge visible)
3076  auto it = std::find_if(m_aControlList.begin(), m_aControlList.end(),
3077  [this, nLeft](const auto& rControl)
3078  {
3079  SwTOXWidget* pCtrl = rControl.get();
3080 
3081  int x, y, width, height;
3082  pCtrl->get_extents_relative_to(*m_xCtrlParentWin, x, y, width, height);
3083 
3084  return x >= nLeft;
3085  });
3086  if (it != m_aControlList.end())
3087  {
3088  if (it == m_aControlList.begin())
3089  {
3090  nMove = 0;
3091  }
3092  else
3093  {
3094  //move the left neighbor to the start position
3095  auto itLeft = it;
3096  --itLeft;
3097  SwTOXWidget* pLeft = itLeft->get();
3098 
3099  int x, y, width, height;
3100  pLeft->get_extents_relative_to(*m_xCtrlParentWin, x, y, width, height);
3101 
3102  nMove = x;
3103  }
3104  }
3105  }
3106  else
3107  {
3108  //find the first completely visible control (right edge visible)
3109  auto it = std::find_if(m_aControlList.rbegin(), m_aControlList.rend(),
3110  [this, nLeft, nSpace](const auto& rControl) {
3111  SwTOXWidget* pCtrl = rControl.get();
3112 
3113  int x, y, width, height;
3114  pCtrl->get_extents_relative_to(*m_xCtrlParentWin, x, y, width, height);
3115 
3116  auto nXPos = x + width;
3117  return nXPos <= nLeft + nSpace;
3118  });
3119  if (it != m_aControlList.rend() && it != m_aControlList.rbegin())
3120  {
3121  //move the right neighbor to the right edge right aligned
3122  auto itRight = it;
3123  --itRight;
3124  SwTOXWidget* pRight = itRight->get();
3125 
3126  int x, y, width, height;
3127  pRight->get_extents_relative_to(*m_xCtrlParentWin, x, y, width, height);
3128 
3129  nMove = x + width - nSpace;
3130  }
3131 
3132  //move it left until it's completely visible
3133  }
3134 
3135  if (nMove != nLeft)
3136  {
3137  // move the complete list
3138  MoveControls(nMove);
3139  m_xLeftScrollWin->set_sensitive(nMove > 0);
3140  m_xRightScrollWin->set_sensitive(nMove + nSpace < nWidth);
3141  }
3142 }
3143 
3145 {
3146  OUStringBuffer sRet;
3147 
3148  for (const auto& elem : m_aControlList)
3149  {
3150  const SwTOXWidget* pCtrl = elem.get();
3151 
3152  const SwFormToken &rNewToken = pCtrl->GetType() == WindowType::EDIT
3153  ? const_cast<SwTOXEdit*>(static_cast<const SwTOXEdit*>(pCtrl))->GetFormToken()
3154  : static_cast<const SwTOXButton*>(pCtrl)->GetFormToken();
3155 
3156  //TODO: prevent input of TOX_STYLE_DELIMITER in KeyInput
3157  sRet.append(rNewToken.GetString());
3158  }
3159 
3160  return sRet.makeStringAndClear();
3161 }
3162 
3163 // Check if a control of the specified TokenType is already contained in the list
3165 {
3166  bool bRet = false;
3167 
3168  for (const auto& elem : m_aControlList)
3169  {
3170  const SwTOXWidget* pCtrl = elem.get();
3171  const SwFormToken &rNewToken = pCtrl->GetType() == WindowType::EDIT
3172  ? const_cast<SwTOXEdit*>(static_cast<const SwTOXEdit*>(pCtrl))->GetFormToken()
3173  : static_cast<const SwTOXButton*>(pCtrl)->GetFormToken();
3174 
3175  if (eSearchFor == rNewToken.eTokenType)
3176  {
3177  bRet = true;
3178  break;
3179  }
3180  }
3181 
3182  return bRet;
3183 }
3184 
3186 {
3187  OUString sEntry;
3188  if (rToken.eTokenType != TOKEN_AUTHORITY)
3189  sEntry = m_aButtonHelpTexts[rToken.eTokenType];
3190  else
3191  {
3193  static_cast<ToxAuthorityField>(rToken.nAuthorityField));
3194  }
3195 
3196  if (rToken.eTokenType != TOKEN_TAB_STOP)
3197  {
3198  if (!rToken.sCharStyleName.isEmpty())
3199  {
3200  sEntry += " " + m_sCharStyle + rToken.sCharStyleName;
3201  }
3202  }
3203 
3204  return sEntry;
3205 }
3206 
3207 IMPL_LINK(SwTokenWindow, EditResize, SwTOXEdit&, rEdit, void)
3208 {
3209  rEdit.AdjustSize();
3210  AdjustPositions();
3211  m_aModifyHdl.Call(nullptr);
3212 }
3213 
3214 IMPL_LINK(SwTokenWindow, NextItemHdl, SwTOXEdit&, rEdit, void)
3215 {
3216  auto it = std::find_if(m_aControlList.begin(), m_aControlList.end(),
3217  [&rEdit](const auto& rControl)
3218  {
3219  SwTOXWidget* pCtrl = rControl.get();
3220  return pCtrl == &rEdit;
3221  });
3222 
3223  if (it == m_aControlList.end())
3224  return;
3225 
3226  auto itTest = it;
3227  ++itTest;
3228 
3229  if ((it != m_aControlList.begin() && !rEdit.IsNextControl()) ||
3230  (itTest != m_aControlList.end() && rEdit.IsNextControl()))
3231  {
3232  auto iterFocus = it;
3233  rEdit.IsNextControl() ? ++iterFocus : --iterFocus;
3234 
3235  SwTOXWidget *pCtrlFocus = iterFocus->get();
3236  pCtrlFocus->GrabFocus();
3237  static_cast<SwTOXButton*>(pCtrlFocus)->Check();
3238 
3239  AdjustScrolling();
3240  }
3241 }
3242 
3243 IMPL_LINK(SwTokenWindow, TbxFocusHdl, SwTOXWidget&, rControl, void)
3244 {
3245  SwTOXEdit* pEdit = static_cast<SwTOXEdit*>(&rControl);
3246  for (const auto& aControl : m_aControlList)
3247  {
3248  SwTOXWidget* pCtrl = aControl.get();
3249  if (pCtrl && pCtrl->GetType() != WindowType::EDIT)
3250  static_cast<SwTOXButton*>(pCtrl)->Check(false);
3251  }
3252 
3253  SetActiveControl(pEdit);
3254 }
3255 
3256 IMPL_LINK(SwTokenWindow, NextItemBtnHdl, SwTOXButton&, rBtn, void )
3257 {
3258  auto it = std::find_if(m_aControlList.begin(), m_aControlList.end(),
3259  [&rBtn](const auto& rControl)
3260  {
3261  SwTOXWidget* pCtrl = rControl.get();
3262  return pCtrl == &rBtn;
3263  });
3264 
3265  if (it == m_aControlList.end())
3266  return;
3267 
3268  auto itTest = it;
3269  ++itTest;
3270 
3271  if (!rBtn.IsNextControl() || (itTest != m_aControlList.end() && rBtn.IsNextControl()))
3272  {
3273  bool isNext = rBtn.IsNextControl();
3274 
3275  auto iterFocus = it;
3276  isNext ? ++iterFocus : --iterFocus;
3277 
3278  SwTOXWidget* pCtrlFocus = iterFocus->get();
3279  pCtrlFocus->GrabFocus();
3280  int nStartPos(0), nEndPos(0);
3281 
3282  if (!isNext)
3283  {
3284  const sal_Int32 nLen = static_cast<SwTOXEdit*>(pCtrlFocus)->GetText().getLength();
3285 
3286  nStartPos = nLen;
3287  nEndPos = nLen;
3288  }
3289 
3290  static_cast<SwTOXEdit*>(pCtrlFocus)->select_region(nStartPos, nEndPos);
3291 
3292  rBtn.Check(false);
3293 
3294  AdjustScrolling();
3295  }
3296 }
3297 
3298 IMPL_LINK(SwTokenWindow, TbxFocusBtnHdl, SwTOXWidget&, rControl, void)
3299 {
3300  SwTOXButton* pBtn = static_cast<SwTOXButton*>(&rControl);
3301  for (const auto& aControl : m_aControlList)
3302  {
3303  SwTOXWidget* pControl = aControl.get();
3304 
3305  if (pControl && WindowType::EDIT != pControl->GetType())
3306  static_cast<SwTOXButton*>(pControl)->Check(pBtn == pControl);
3307  }
3308 
3309  SetActiveControl(pBtn);
3310 }
3311 
3313 {
3314  if (m_pParent)
3315  {
3317  }
3318 }
3319 
3321 {
3322  //there are only one entry-text button and only one page-number button,
3323  //so we need not add index for these two buttons.
3324  if ( eType == TOKEN_ENTRY_TEXT || eType == TOKEN_PAGE_NUMS )
3325  {
3326  return 0;
3327  }
3328 
3329  sal_uInt32 nIndex = 0;
3330  for (const auto& elem : m_aControlList)
3331  {
3332  const SwTOXWidget* pControl = elem.get();
3333 
3334  const SwFormToken& rNewToken = WindowType::EDIT == pControl->GetType()
3335  ? const_cast<SwTOXEdit*>(static_cast<const SwTOXEdit*>(pControl))->GetFormToken()
3336  : static_cast<const SwTOXButton*>(pControl)->GetFormToken();
3337 
3338  if(eType == rNewToken.eTokenType)
3339  {
3340  ++nIndex;
3341  }
3342  }
3343 
3344  return nIndex;
3345 }
3346 
3348  : SfxTabPage(pPage, pController, "modules/swriter/ui/tocstylespage.ui", "TocStylesPage", &rAttrSet)
3349  , m_xLevelLB(m_xBuilder->weld_tree_view("levels"))
3350  , m_xAssignBT(m_xBuilder->weld_button("assign"))
3351  , m_xParaLayLB(m_xBuilder->weld_tree_view("styles"))
3352  , m_xStdBT(m_xBuilder->weld_button("default"))
3353  , m_xEditStyleBT(m_xBuilder->weld_button("edit"))
3354 {
3355  m_xParaLayLB->make_sorted();
3356  auto nHeight = m_xLevelLB->get_height_rows(16);
3357  m_xLevelLB->set_size_request(-1, nHeight);
3358  m_xParaLayLB->set_size_request(-1, nHeight);
3359 
3361 
3362  m_xEditStyleBT->connect_clicked(LINK(this, SwTOXStylesTabPage, EditStyleHdl));
3363  m_xAssignBT->connect_clicked(LINK(this, SwTOXStylesTabPage, AssignHdl));
3364  m_xStdBT->connect_clicked(LINK(this, SwTOXStylesTabPage, StdHdl));
3365  m_xParaLayLB->connect_changed(LINK(this, SwTOXStylesTabPage, EnableSelectHdl));
3366  m_xLevelLB->connect_changed(LINK(this, SwTOXStylesTabPage, EnableSelectHdl));
3367  m_xParaLayLB->connect_row_activated(LINK(this, SwTOXStylesTabPage, DoubleClickHdl));
3368 }
3369 
3371 {
3372 }
3373 
3375 {
3376  return true;
3377 }
3378 
3380 {
3381  ActivatePage(*rSet);
3382 }
3383 
3385 {
3386  m_pCurrentForm.reset(new SwForm(GetForm()));
3387 
3388  // not hyperlink for user directories
3389  const sal_uInt16 nSize = m_pCurrentForm->GetFormMax();
3390 
3391  // display form pattern without title
3392 
3393  m_xLevelLB->freeze();
3394  m_xLevelLB->clear();
3395  // display 1st TemplateEntry
3396  OUString aStr( SwResId( STR_TITLE ));
3397  if( !m_pCurrentForm->GetTemplate( 0 ).isEmpty() )
3398  {
3399  aStr += " " + OUStringChar(aDeliStart)
3400  + m_pCurrentForm->GetTemplate( 0 )
3401  + OUStringChar(aDeliEnd);
3402  }
3403  m_xLevelLB->append_text(aStr);
3404 
3405  for( sal_uInt16 i=1; i < nSize; ++i )
3406  {
3407  if( TOX_INDEX == m_pCurrentForm->GetTOXType() &&
3408  FORM_ALPHA_DELIMITER == i )
3409  {
3410  aStr = SwResId(STR_ALPHA);
3411  }
3412  else
3413  {
3414  aStr = SwResId(STR_LEVEL) + OUString::number(
3415  TOX_INDEX == m_pCurrentForm->GetTOXType() ? i - 1 : i );
3416  }
3417  if( !m_pCurrentForm->GetTemplate( i ).isEmpty() )
3418  {
3419  aStr += " " + OUStringChar(aDeliStart)
3420  + m_pCurrentForm->GetTemplate( i )
3421  + OUStringChar(aDeliEnd);
3422  }
3423  m_xLevelLB->append_text(aStr);
3424  }
3425  m_xLevelLB->thaw();
3426 
3427  // initialise templates
3428  SwWrtShell& rSh = static_cast<SwMultiTOXTabDialog*>(GetDialogController())->GetWrtShell();
3429  const sal_uInt16 nSz = rSh.GetTextFormatCollCount();
3430 
3431  m_xParaLayLB->freeze();
3432  m_xParaLayLB->clear();
3433  for( sal_uInt16 i = 0; i < nSz; ++i )
3434  {
3435  const SwTextFormatColl *pColl = &rSh.GetTextFormatColl( i );
3436  if( !pColl->IsDefault() )
3437  m_xParaLayLB->append_text( pColl->GetName() );
3438  }
3439 
3440  // query pool collections and set them for the directory
3441  for( sal_uInt16 i = 0; i < m_pCurrentForm->GetFormMax(); ++i )
3442  {
3443  aStr = m_pCurrentForm->GetTemplate( i );
3444  if (!aStr.isEmpty() && m_xParaLayLB->find_text(aStr) == -1)
3445  m_xParaLayLB->append_text(aStr);
3446  }
3447  m_xParaLayLB->thaw();
3448 
3449  EnableSelectHdl(*m_xParaLayLB);
3450 }
3451 
3453 {
3454  GetForm() = *m_pCurrentForm;
3455  return DeactivateRC::LeavePage;
3456 }
3457 
3458 std::unique_ptr<SfxTabPage> SwTOXStylesTabPage::Create(weld::Container* pPage, weld::DialogController* pController,
3459  const SfxItemSet* rAttrSet)
3460 {
3461  return std::make_unique<SwTOXStylesTabPage>(pPage, pController, *rAttrSet);
3462 }
3463 
3465 {
3466  if (m_xParaLayLB->get_selected_index() != -1)
3467  {
3468  SfxStringItem aStyle(SID_STYLE_EDIT, m_xParaLayLB->get_selected_text());
3469  SfxUInt16Item aFamily(SID_STYLE_FAMILY, sal_uInt16(SfxStyleFamily::Para));
3470  SwWrtShell& rSh = static_cast<SwMultiTOXTabDialog*>(GetDialogController())->GetWrtShell();
3471  rSh.GetView().GetViewFrame()->GetDispatcher()->ExecuteList(SID_STYLE_EDIT,
3472  SfxCallMode::SYNCHRON,
3473  { &aStyle, &aFamily });
3474  }
3475 }
3476 
3477 // allocate templates
3479 {
3480  auto nLevPos = m_xLevelLB->get_selected_index();
3481  auto nTemplPos = m_xParaLayLB->get_selected_index();
3482  if (nLevPos != -1 && nTemplPos != -1)
3483  {
3484  const OUString aStr(m_xLevelLB->get_text(nLevPos).getToken(0, aDeliStart)
3485  + OUStringChar(aDeliStart)
3486  + m_xParaLayLB->get_selected_text()
3487  + OUStringChar(aDeliEnd));
3488 
3489  m_pCurrentForm->SetTemplate(nLevPos, m_xParaLayLB->get_selected_text());
3490 
3491  m_xLevelLB->remove(nLevPos);
3492  m_xLevelLB->insert_text(nLevPos, aStr);
3493  m_xLevelLB->select_text(aStr);
3494  Modify();
3495  }
3496 }
3497 
3499 {
3500  const auto nPos = m_xLevelLB->get_selected_index();
3501  if (nPos != -1)
3502  {
3503  const OUString aStr(m_xLevelLB->get_text(nPos).getToken(0, aDeliStart));
3504  m_xLevelLB->remove(nPos);
3505  m_xLevelLB->insert_text(nPos, aStr);
3506  m_xLevelLB->select_text(aStr);
3507  m_pCurrentForm->SetTemplate(nPos, OUString());
3508  Modify();
3509  }
3510 }
3511 
3513 {
3514  const OUString aTmpName(m_xParaLayLB->get_selected_text());
3515  SwWrtShell& rSh = static_cast<SwMultiTOXTabDialog*>(GetDialogController())->GetWrtShell();
3516 
3517  if(m_xParaLayLB->get_selected_index() != -1 &&
3518  (m_xLevelLB->get_selected_index() == 0 || SwMultiTOXTabDialog::IsNoNum(rSh, aTmpName)))
3519  AssignHdl(*m_xAssignBT);
3520 
3521  return true;
3522 }
3523 
3524 // enable only when selected
3526 {
3527  m_xStdBT->set_sensitive(m_xLevelLB->get_selected_index() != -1);
3528 
3529  SwWrtShell& rSh = static_cast<SwMultiTOXTabDialog*>(GetDialogController())->GetWrtShell();
3530  const OUString aTmpName(m_xParaLayLB->get_selected_text());
3531  m_xAssignBT->set_sensitive(m_xParaLayLB->get_selected_index() != -1 &&
3532  m_xLevelLB->get_selected_index() != -1 &&
3533  (m_xLevelLB->get_selected_index() == 0 || SwMultiTOXTabDialog::IsNoNum(rSh, aTmpName)));
3534  m_xEditStyleBT->set_sensitive(m_xParaLayLB->get_selected_index() != -1);
3535 }
3536 
3538 {
3539  SwMultiTOXTabDialog* pTOXDlg = static_cast<SwMultiTOXTabDialog*>(GetDialogController());
3540  if (pTOXDlg)
3541  {
3542  GetForm() = *m_pCurrentForm;
3544  }
3545 }
3546 
3547 #define ITEM_SEARCH 1
3548 #define ITEM_ALTERNATIVE 2
3549 #define ITEM_PRIM_KEY 3
3550 #define ITEM_SEC_KEY 4
3551 #define ITEM_COMMENT 5
3552 #define ITEM_CASE 6
3553 #define ITEM_WORDONLY 7
3554 
3555 SwEntryBrowseBox::SwEntryBrowseBox(const css::uno::Reference<css::awt::XWindow> &rParent)
3561  BrowserMode::HLINES |
3562  BrowserMode::VLINES |
3565  , m_aCellEdit(VclPtr<Edit>::Create(&GetDataWindow(), 0))
3566  , m_aCellCheckBox(VclPtr< ::svt::CheckBoxControl>::Create(&GetDataWindow()))
3567  , m_nCurrentRow(0)
3568  , m_bModified(false)
3569 {
3570  m_sSearch = SwResId(STR_AUTOMARK_SEARCHTERM);
3571  m_sAlternative = SwResId(STR_AUTOMARK_ALTERNATIVE);
3572  m_sPrimKey = SwResId(STR_AUTOMARK_KEY1);
3573  m_sSecKey = SwResId(STR_AUTOMARK_KEY2);
3574  m_sComment = SwResId(STR_AUTOMARK_COMMENT);
3575  m_sCaseSensitive = SwResId(STR_AUTOMARK_CASESENSITIVE);
3576  m_sWordOnly = SwResId(STR_AUTOMARK_WORDONLY);
3577  m_sYes = SwResId(STR_AUTOMARK_YES);
3578  m_sNo = SwResId(STR_AUTOMARK_NO);
3579 
3581  m_xController = new ::svt::EditCellController(m_aCellEdit.get());
3582  m_xCheckController = new ::svt::CheckBoxCellController(m_aCellCheckBox.get());
3583 
3584  // HACK: BrowseBox doesn't invalidate its children, how it should be.
3585  // That's why WB_CLIPCHILDREN is reset in order to enforce the
3586  // children' invalidation
3587  WinBits aStyle = GetStyle();
3588  if( aStyle & WB_CLIPCHILDREN )
3589  {
3590  aStyle &= ~WB_CLIPCHILDREN;
3591  SetStyle( aStyle );
3592  }
3593 
3594  const OUString* aTitles[7] =
3595  {
3596  &m_sSearch,
3597  &m_sAlternative,
3598  &m_sPrimKey,
3599  &m_sSecKey,
3600  &m_sComment,
3602  &m_sWordOnly
3603  };
3604 
3605  long nWidth = GetSizePixel().Width();
3606  nWidth /=7;
3607  --nWidth;
3608  for(sal_uInt16 i = 1; i < 8; i++)
3609  InsertDataColumn( i, *aTitles[i - 1], nWidth );
3610 }
3611 
3613 {
3614  disposeOnce();
3615 }
3616 
3618 {
3622 }
3623 
3625 {
3627 
3628  long nWidth = GetSizePixel().Width();
3629  std::vector<long> aWidths = GetOptimalColWidths();
3630  long nNaturalWidth(std::accumulate(aWidths.begin(), aWidths.end(), 0));
3631  long nExcess = ((nWidth - nNaturalWidth) / aWidths.size()) - 1;
3632 
3633  for (size_t i = 0; i < aWidths.size(); ++i)
3634  SetColumnWidth(i+1, aWidths[i] + nExcess);
3635 }
3636 
3637 std::vector<long> SwEntryBrowseBox::GetOptimalColWidths() const
3638 {
3639  std::vector<long> aWidths;
3640 
3641  long nStandardColMinWidth = approximate_char_width() * 16;
3642  long nYesNoWidth = approximate_char_width() * 5;
3643  nYesNoWidth = std::max(nYesNoWidth, GetTextWidth(m_sYes));
3644  nYesNoWidth = std::max(nYesNoWidth, GetTextWidth(m_sNo));
3645  for (sal_uInt16 i = 1; i < 6; i++)
3646  {
3647  long nColWidth = std::max(nStandardColMinWidth,
3648  GetTextWidth(GetColumnTitle(i)));
3649  nColWidth += 12;
3650  aWidths.push_back(nColWidth);
3651  }
3652 
3653  for (sal_uInt16 i = 6; i < 8; i++)
3654  {
3655  long nColWidth = std::max(nYesNoWidth,
3656  GetTextWidth(GetColumnTitle(i)));
3657  nColWidth += 12;
3658  aWidths.push_back(nColWidth);
3659  }
3660 
3661  return aWidths;
3662 }
3663 
3665 {
3666  Size aSize = LogicToPixel(Size(276 , 175), MapMode(MapUnit::MapAppFont));
3667 
3668  std::vector<long> aWidths = GetOptimalColWidths();
3669 
3670  long nWidth(std::accumulate(aWidths.begin(), aWidths.end(), 0));
3671 
3672  aSize.setWidth( std::max(aSize.Width(), nWidth) );
3673 
3674  return aSize;
3675 }
3676 
3677 bool SwEntryBrowseBox::SeekRow( long nRow )
3678 {
3679  m_nCurrentRow = nRow;
3680  return true;
3681 }
3682 
3683 OUString SwEntryBrowseBox::GetCellText(long nRow, sal_uInt16 nColumn) const
3684 {
3685  OUString pRet;
3686  if (static_cast<size_t>(nRow) < m_Entries.size())
3687  {
3688  const AutoMarkEntry* pEntry = m_Entries[ nRow ].get();
3689  switch(nColumn)
3690  {
3691  case ITEM_SEARCH : pRet = pEntry->sSearch; break;
3692  case ITEM_ALTERNATIVE : pRet = pEntry->sAlternative; break;
3693  case ITEM_PRIM_KEY : pRet = pEntry->sPrimKey; break;
3694  case ITEM_SEC_KEY : pRet = pEntry->sSecKey; break;
3695  case ITEM_COMMENT : pRet = pEntry->sComment; break;
3696  case ITEM_CASE : pRet = pEntry->bCase ? m_sYes : m_sNo; break;
3697  case ITEM_WORDONLY : pRet = pEntry->bWord ? m_sYes : m_sNo; break;
3698  }
3699  }
3700  return pRet;
3701 }
3702 
3704  const tools::Rectangle& rRect, sal_uInt16 nColumnId) const
3705 {
3706  const DrawTextFlags nStyle = DrawTextFlags::Clip | DrawTextFlags::Center;
3707  rDev.DrawText( rRect, GetCellText( m_nCurrentRow, nColumnId ), nStyle );
3708 }
3709 
3711 {
3712  return nCol < ITEM_CASE ? m_xController.get() : m_xCheckController.get();
3713 }
3714 
3716 {
3717  m_bModified = true;
3718  const size_t nRow = GetCurRow();
3719  const sal_uInt16 nCol = GetCurColumnId();
3720 
3721  OUString sNew;
3722  bool bVal = false;
3723  ::svt::CellController* pController = nullptr;
3724  if(nCol < ITEM_CASE)
3725  {
3726  pController = m_xController.get();
3727  sNew = static_cast< ::svt::EditCellController*>(pController)->GetEditImplementation()->GetText( LINEEND_LF );
3728  }
3729  else
3730  {
3731  pController = m_xCheckController.get();
3732  bVal = static_cast< ::svt::CheckBoxCellController*>(pController)->GetCheckBox().IsChecked();
3733  }
3734  const bool bAddEntry = nRow >= m_Entries.size();
3735  std::unique_ptr<AutoMarkEntry> xNewEntry(bAddEntry ? new AutoMarkEntry : nullptr);
3736  AutoMarkEntry* pEntry = bAddEntry ? xNewEntry.get() : m_Entries[nRow].get();
3737  switch(nCol)
3738  {
3739  case ITEM_SEARCH : pEntry->sSearch = sNew; break;
3740  case ITEM_ALTERNATIVE : pEntry->sAlternative = sNew; break;
3741  case ITEM_PRIM_KEY : pEntry->sPrimKey = sNew; break;
3742  case ITEM_SEC_KEY : pEntry->sSecKey = sNew; break;
3743  case ITEM_COMMENT : pEntry->sComment = sNew; break;
3744  case ITEM_CASE : pEntry->bCase = bVal; break;
3745  case ITEM_WORDONLY : pEntry->bWord = bVal; break;
3746  }
3747  if (bAddEntry)
3748  {
3749  m_Entries.push_back(std::move(xNewEntry));
3750  RowInserted(nRow, 1, true, true);
3751  if(nCol < ITEM_WORDONLY)
3752  {
3753  pController->ClearModified();
3754  GoToRow( nRow );
3755  }
3756  }
3757  return true;
3758 }
3759 
3761  ::svt::CellControllerRef& rController, long nRow, sal_uInt16 nCol)
3762 {
3763  const OUString rText = GetCellText( nRow, nCol );
3764  if(nCol < ITEM_CASE)
3765  {
3766  rController = m_xController;
3767  ::svt::CellController* pController = m_xController.get();
3768  static_cast< ::svt::EditCellController*>(pController)->GetEditImplementation()->SetText( rText );
3769  }
3770  else
3771  {
3772  rController = m_xCheckController;
3773  ::svt::CellController* pController = m_xCheckController.get();
3774  static_cast< ::svt::CheckBoxCellController*>(pController)->GetCheckBox().Check(
3775  rText == m_sYes );
3776  }
3777 }
3778 
3780 {
3781  AutoMarkEntry* pToInsert = nullptr;
3782  rtl_TextEncoding eTEnc = osl_getThreadTextEncoding();
3783  while (rInStr.good())
3784  {
3785  OUString sLine;
3786  rInStr.ReadByteStringLine( sLine, eTEnc );
3787 
3788  // # -> comment
3789  // ; -> delimiter between entries ->
3790  // Format: TextToSearchFor;AlternativeString;PrimaryKey;SecondaryKey
3791  // Leading and trailing blanks are ignored
3792  if( !sLine.isEmpty() )
3793  {
3794  //comments are contained in separate lines but are put into the struct of the following data
3795  //line (if available)
3796  if( '#' != sLine[0] )
3797  {
3798  if( !pToInsert )
3799  pToInsert = new AutoMarkEntry;
3800 
3801  sal_Int32 nSttPos = 0;
3802  pToInsert->sSearch = sLine.getToken(0, ';', nSttPos );
3803  pToInsert->sAlternative = sLine.getToken(0, ';', nSttPos );
3804  pToInsert->sPrimKey = sLine.getToken(0, ';', nSttPos );
3805  pToInsert->sSecKey = sLine.getToken(0, ';', nSttPos );
3806 
3807  OUString sStr = sLine.getToken(0, ';', nSttPos );
3808  pToInsert->bCase = !sStr.isEmpty() && sStr != "0";
3809 
3810  sStr = sLine.getToken(0, ';', nSttPos );
3811  pToInsert->bWord = !sStr.isEmpty() && sStr != "0";
3812 
3813  m_Entries.push_back(std::unique_ptr<AutoMarkEntry>(pToInsert));
3814  pToInsert = nullptr;
3815  }
3816  else
3817  {
3818  if(pToInsert)
3819  m_Entries.push_back(std::unique_ptr<AutoMarkEntry>(pToInsert));
3820  pToInsert = new AutoMarkEntry;
3821  pToInsert->sComment = sLine.copy(1);
3822  }
3823  }
3824  }
3825  if( pToInsert )
3826  m_Entries.push_back(std::unique_ptr<AutoMarkEntry>(pToInsert));
3827  RowInserted(0, m_Entries.size() + 1);
3828 }
3829 
3831 {
3832  //check if the current controller is modified
3833  const sal_uInt16 nCol = GetCurColumnId();
3834  ::svt::CellController* pController;
3835  if(nCol < ITEM_CASE)
3836  pController = m_xController.get();
3837  else
3838  pController = m_xCheckController.get();
3839  if(pController ->IsModified())
3840  GoToColumnId(nCol + (nCol < ITEM_CASE ? 1 : -1 ));
3841 
3842  rtl_TextEncoding eTEnc = osl_getThreadTextEncoding();
3843  for(const std::unique_ptr<AutoMarkEntry> & rpEntry : m_Entries)
3844  {
3845  AutoMarkEntry* pEntry = rpEntry.get();
3846  if(!pEntry->sComment.isEmpty())
3847  {
3848  rOutStr.WriteByteStringLine( "#" + pEntry->sComment, eTEnc );
3849  }
3850 
3851  OUString sWrite( pEntry->sSearch + ";" +
3852  pEntry->sAlternative + ";" +
3853  pEntry->sPrimKey + ";" +
3854  pEntry->sSecKey + ";" +
3855  (pEntry->bCase ? OUStringLiteral("1") : OUStringLiteral("0")) + ";" +
3856  (pEntry->bWord ? OUStringLiteral("1") : OUStringLiteral("0")) );
3857 
3858  if( sWrite.getLength() > 5 )
3859  rOutStr.WriteByteStringLine( sWrite, eTEnc );
3860  }
3861 }
3862 
3864 {
3865  if(m_bModified)
3866  return true;
3867 
3868  //check if the current controller is modified
3869  const sal_uInt16 nCol = GetCurColumnId();
3870  ::svt::CellController* pController;
3871  if(nCol < ITEM_CASE)
3872  pController = m_xController.get();
3873  else
3874  pController = m_xCheckController.get();
3875  return pController->IsModified();
3876 }
3877 
3878 SwAutoMarkDlg_Impl::SwAutoMarkDlg_Impl(weld::Window* pParent, const OUString& rAutoMarkURL,
3879  bool bCreate)
3880  : GenericDialogController(pParent, "modules/swriter/ui/createautomarkdialog.ui", "CreateAutomarkDialog")
3881  , sAutoMarkURL(rAutoMarkURL)
3882  , bCreateMode(bCreate)
3883  , m_xOKPB(m_xBuilder->weld_button("ok"))
3884  , m_xTable(m_xBuilder->weld_container("area"))
3885  , m_xTableCtrlParent(m_xTable->CreateChildFrame())
3886  , m_xEntriesBB(VclPtr<SwEntryBrowseBox>::Create(m_xTableCtrlParent))
3887 {
3888  m_xEntriesBB->Show();
3889  m_xOKPB->connect_clicked(LINK(this, SwAutoMarkDlg_Impl, OkHdl));
3890 
3891  m_xDialog->set_title(m_xDialog->get_title() + ": " + sAutoMarkURL);
3892  bool bError = false;
3893  if( bCreateMode )
3895  else
3896  {
3897  SfxMedium aMed( sAutoMarkURL, StreamMode::STD_READ );
3898  if( aMed.GetInStream() && !aMed.GetInStream()->GetError() )
3899  m_xEntriesBB->ReadEntries( *aMed.GetInStream() );
3900  else
3901  bError = true;
3902  }
3903 
3904  Size aPrefSize = m_xEntriesBB->GetOptimalSize();
3905  m_xTable->set_size_request(aPrefSize.Width(), aPrefSize.Height());
3906 
3907  if (bError)
3908  m_xDialog->response(RET_CANCEL);
3909 }
3910 
3912 {
3914  m_xTableCtrlParent->dispose();
3915  m_xTableCtrlParent.clear();
3916 }
3917 
3919 {
3920  bool bError = false;
3921  if (m_xEntriesBB->IsModified() || bCreateMode)
3922  {
3923  SfxMedium aMed( sAutoMarkURL,
3924  bCreateMode ? StreamMode::WRITE
3925  : StreamMode::WRITE| StreamMode::TRUNC );
3926  SvStream* pStrm = aMed.GetOutStream();
3927  pStrm->SetStreamCharSet( RTL_TEXTENCODING_MS_1253 );
3928  if( !pStrm->GetError() )
3929  {
3930  m_xEntriesBB->WriteEntries( *pStrm );
3931  aMed.Commit();
3932  }
3933  else
3934  bError = true;
3935  }
3936  if (!bError)
3937  m_xDialog->response(RET_OK);
3938 }
3939 
3940 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
SwFieldType * GetFieldType(size_t nField, SwFieldIds nResId=SwFieldIds::Unknown) const
get field types with a ResId, if 0 get all
Definition: edfld.cxx:64
css::uno::Reference< css::linguistic2::XProofreadingIterator > get(css::uno::Reference< css::uno::XComponentContext > const &context)
SfxViewFrame * GetViewFrame() const
void SetEntryNumberFormat(sal_uInt16 nSet)
Definition: cnttab.cxx:1637
std::unique_ptr< weld::MenuButton > m_xAutoMarkPB
Definition: swuicnttab.hxx:175
TOXTypes GetTOXType() const
Definition: tox.hxx:648
Instances of SwFields and those derived from it occur 0 to n times.
Definition: fldbas.hxx:234
#define KEY_SUBTRACT
long Width() const
std::unique_ptr< weld::Button > m_xRightPB
Definition: cnttab.cxx:484
OUString m_aButtonHelpTexts[TOKEN_END]
Definition: swuicnttab.hxx:229
std::vector< SwFormToken > SwFormTokens
Vector of tokens.
Definition: tox.hxx:249
std::shared_ptr< weld::Dialog > m_xDialog
std::unique_ptr< weld::ComboBox > m_xAuthFieldsLB
Definition: swuicnttab.hxx:325
void DrawText(const Point &rStartPt, const OUString &rStr, sal_Int32 nIndex=0, sal_Int32 nLen=-1, MetricVector *pVector=nullptr, OUString *pDisplayText=nullptr, const SalLayoutGlyphs *pLayoutCache=nullptr)
std::unique_ptr< weld::ScrolledWindow > m_xScrollWin
Definition: swuicnttab.hxx:247
bool IsNextControl() const
Definition: cnttab.cxx:1480
TOXTypes
Definition: toxe.hxx:39
virtual void GrabFocus()=0
void SetTOUName(const OUString &rSet)
Definition: toxmgr.hxx:103
const SfxPoolItem * ExecuteList(sal_uInt16 nSlot, SfxCallMode nCall, std::initializer_list< SfxPoolItem const * > args, std::initializer_list< SfxPoolItem const * > internalargs=std::initializer_list< SfxPoolItem const * >())
boost::optional< OUString > const & GetTitle() const
Definition: toxmgr.hxx:101
::svt::CellControllerRef m_xCheckController
Definition: cnttab.cxx:158
virtual void Resize() override
FieldUnit
#define RES_FRM_SIZE
Definition: hintids.hxx:196
void OnModify(bool bAllLevels)
Definition: cnttab.cxx:1922
void MoveControls(long nOffset)
Definition: cnttab.cxx:3017
SwTOIOptions
Definition: tox.hxx:350
std::vector< TypeData > m_vTypeData
Definition: swuicnttab.hxx:65
SwTOXElement GetContentOptions() const
Definition: toxmgr.hxx:110
OUString sAutoMarkURL
Definition: cnttab.cxx:188
void SetLinkStart()
Definition: cnttab.cxx:1682
std::unique_ptr< weld::ComboBox > m_xNumberFormatLB
format for numbering (E#)
Definition: swuicnttab.hxx:333
Represents the style of a paragraph.
Definition: fmtcol.hxx:55
#define KEY_DELETE
void Check(bool bCheck=true)
Definition: cnttab.cxx:1607
std::unique_ptr< weld::RadioButton > m_xSecondSortUpRB
Definition: swuicnttab.hxx:355
std::unique_ptr< weld::TreeView > m_xParaLayLB
Definition: swuicnttab.hxx:407
OUString m_sYes
Definition: cnttab.cxx:152
SwFormToken aFormToken
Definition: cnttab.cxx:1395
virtual void PaintCell(OutputDevice &rDev, const tools::Rectangle &rRect, sal_uInt16 nColId) const override
Definition: cnttab.cxx:3703
SwTextFormatColl * GetTextCollFromPool(sal_uInt16 nId)
Definition: edfmt.cxx:123
SwTOXElement GetCreateType() const
Definition: tox.hxx:671
OUString m_sAdditionalAccnameString2
Definition: swuicnttab.hxx:236
void PreTokenButtonRemoved(const SwFormToken &rToken)
Definition: cnttab.cxx:2157
long m_nCurrentRow
Definition: cnttab.cxx:160
SwTOIOptions GetOptions() const
Definition: tox.hxx:710
std::unique_ptr< weld::Button > m_xRightScrollWin
Definition: swuicnttab.hxx:248
std::unique_ptr< weld::Button > m_xOKPB
Definition: cnttab.cxx:191
void SetMainEntryCharStyle(const OUString &rSet)
Definition: toxmgr.hxx:116
bool IsDefault() const
Definition: format.hxx:109
virtual void set_grid_left_attach(int nPos) override
Definition: cnttab.cxx:1597
std::unique_ptr< SvxLanguageBox > m_xLanguageLB
Definition: swuicnttab.hxx:187
#define TO_BIBLIOGRAPHY
Definition: cnttab.hxx:37
EditBrowseBoxFlags
virtual void ActivatePage(const SfxItemSet &) override
Definition: cnttab.cxx:1160
virtual void PageCreated(const SfxAllItemSet &aSet)
static SfxAbstractDialogFactory * Create()
sal_uInt16 m_nLevel
Definition: swuicnttab.hxx:226
void SetPattern(sal_uInt16 nLevel, const SwFormTokens &rName)
Definition: tox.cxx:921
std::unique_ptr< weld::Button > m_xAddStylesPB
Definition: swuicnttab.hxx:145
DECL_LINK(KeyInputHdl, const KeyEvent &, bool)
std::unique_ptr< weld::Button > m_xEntryPB
Definition: swuicnttab.hxx:320
std::unique_ptr< weld::ComboBox > m_xTypeLB
Definition: swuicnttab.hxx:132
std::unique_ptr< weld::ComboBox > m_xFirstKeyLB
Definition: swuicnttab.hxx:351
SwTokenWindow * m_pParent
Definition: cnttab.cxx:1399
bool IsProtected() const
Definition: tox.hxx:502
SW_DLLPUBLIC void FillCharStyleListBox(weld::ComboBox &rToFill, SwDocShell *pDocSh, bool bSorted=false, bool bWithDefault=false)
Definition: uitool.cxx:734
sal_uInt16 nOutlineLevel
Definition: tox.hxx:215
virtual bool FillItemSet(SfxItemSet *) override
Definition: cnttab.cxx:3374
const SfxItemSet * GetOutputItemSet() const
std::unique_ptr< weld::Button > m_xHyperLinkPB
Definition: swuicnttab.hxx:324
long Height() const
std::unique_ptr< weld::Button > m_xStdBT
Definition: swuicnttab.hxx:408
SwTOOElements
Definition: tox.hxx:373
Definition: tox.hxx:276
void SetSequenceName(const OUString &rSet)
Definition: toxmgr.hxx:125
const OUString & GetSequenceName() const
Definition: toxmgr.hxx:124
sal_uInt16 GetTextFormatCollCount() const
Definition: edfcol.cxx:685
std::unique_ptr< weld::Button > m_xLeftPB
Definition: cnttab.cxx:483
OUString aStyleArr[MAXLEVEL]
Definition: swuicnttab.hxx:120
long GetWidth() const
VclPtr< Edit > m_aCellEdit
Definition: cnttab.cxx:142
SfxDispatcher * GetDispatcher()
SwTOXDescription & GetTOXDescription(CurTOXType eTOXTypes)
Definition: cnttab.cxx:356
DECL_LINK(ModifyHdl, weld::Entry &, void)
void SelectType(TOXTypes eSet)
Definition: cnttab.cxx:859
std::unique_ptr< weld::SpinButton > m_xEntryOutlineLevelNF
level to evaluate outline level to, for i53420
Definition: swuicnttab.hxx:335
std::unique_ptr< weld::Builder > m_xBuilder
Definition: cnttab.cxx:1394
std::unique_ptr< weld::Button > m_xEditStyleBT
Definition: swuicnttab.hxx:409
Main entry in indices.
Definition: poolfmt.hxx:127
static OUString GetFormLinkStt()
Definition: tox.cxx:503
TOXTypes GetTOXType() const
Definition: toxmgr.hxx:90
std::unique_ptr< weld::TreeView > m_xHeaderTree
Definition: cnttab.cxx:485
void disposeAndClear()
void SetAuthSequence(bool bSet)
Definition: toxmgr.hxx:146
void SetReadonly(bool bSet)
Definition: toxmgr.hxx:133
std::unique_ptr< weld::ComboBox > m_xCaptionSequenceLB
Definition: swuicnttab.hxx:159
virtual void ActivatePage(const SfxItemSet &) override
Definition: cnttab.cxx:1966
SwForm * GetForm(CurTOXType eType)
Definition: cnttab.cxx:348
#define TOX_STYLE_DELIMITER
Definition: tox.hxx:386
std::unique_ptr< weld::RadioButton > m_xSortDocPosRB
Definition: swuicnttab.hxx:348
#define ITEM_COMMENT
Definition: cnttab.cxx:3551
only chapter number without post-/prefix
Definition: chpfld.hxx:35
void CreateOrUpdateExample(TOXTypes nTOXIndex, sal_uInt16 nPage=0, sal_uInt16 nCurLevel=USHRT_MAX)
Definition: cntex.cxx:137
OUString const m_sCharStyle
Definition: swuicnttab.hxx:230
virtual ~SwAutoMarkDlg_Impl() override
Definition: cnttab.cxx:3911
void SetStyleNames(const OUString &rSet, sal_uInt16 nLvl)
Definition: toxmgr.hxx:94
bool Commit()
sal_uInt16 sal_Char sal_Char * pDesc
sal_Int16 nId
Link< SwTOXEdit &, void > aModifiedLink
Definition: cnttab.cxx:1396
std::unique_ptr< weld::TreeView > m_xLevelLB
Definition: swuicnttab.hxx:405
std::unique_ptr< weld::CheckButton > m_xRelToStyleCB
Definition: swuicnttab.hxx:346
static bool IsNoNum(SwWrtShell &rSh, const OUString &rName)
Definition: cnttab.cxx:466
virtual void ActivatePage(const SfxItemSet &) override
Definition: cnttab.cxx:3384
sal_uInt16 GetCode() const
const OUString & GetTemplatePath() const
long SwTwips
Definition: swtypes.hxx:49
SwForm * m_pCurrentForm
Definition: swuicnttab.hxx:310
std::unique_ptr< weld::RadioButton > m_xThirdSortDownRB
Definition: swuicnttab.hxx:359
virtual void dispose() override
void SetFocus2theAllBtn()
Definition: cnttab.cxx:2164
std::vector< long > GetOptimalColWidths() const
Definition: cnttab.cxx:3637
SfxItemSet * GetInputSetImpl()
OUString const & GetTOIAutoMarkURL() const
AutoMark file.
Definition: edtox.cxx:254
sal_uInt16 GetFormMax() const
Definition: tox.hxx:653
std::unique_ptr< weld::CheckButton > m_xFromFramesCB
Definition: swuicnttab.hxx:148
static OUString GetFormTab()
Definition: tox.cxx:501
virtual void get_extents_relative_to(weld::Widget &rRelative, int &x, int &y, int &width, int &height)=0
std::pair< int, int > row_col
Definition: cnttab.cxx:491
void SetLevel(sal_uInt8 nSet)
Definition: toxmgr.hxx:118
void SetWrtShell(SwWrtShell &rSh)
Definition: cnttab.cxx:2517
std::unique_ptr< weld::RadioButton > m_xFirstSortUpRB
Definition: swuicnttab.hxx:352
std::vector< std::unique_ptr< AutoMarkEntry > > m_Entries
Definition: cnttab.cxx:155
sal_uInt16 nPoolId
Definition: tox.hxx:212
std::unique_ptr< weld::CheckButton > m_xFromTablesCB
Definition: swuicnttab.hxx:147
float x
virtual Size GetOptimalSize() const override
Definition: cnttab.cxx:3664
void SetModifyHdl(const Link< SwTOXEdit &, void > &rLink)
Definition: cnttab.cxx:1472
#define KEY_LEFT
TRISTATE_TRUE
RET_CANCEL
void SetIndexOptions(SwTOIOptions nSet)
Definition: toxmgr.hxx:112
static OUString const & GetAuthTypeName(ToxAuthorityType eType)
Definition: initui.cxx:282
#define KEY_ADD
virtual void Reset(const SfxItemSet *) override
Definition: cnttab.cxx:3379
IMPL_LINK(SwAddStylesDlg_Impl, TreeSizeAllocHdl, const Size &, rSize, void)
Definition: cnttab.cxx:590
std::unique_ptr< weld::ToggleButton > m_xButton
Definition: cnttab.cxx:1558
SwEntryBrowseBox(const css::uno::Reference< css::awt::XWindow > &rParent)
Definition: cnttab.cxx:3555
chapter number without post-/prefix and title
Definition: chpfld.hxx:36
SwAddStylesDlg_Impl(weld::Window *pParent, SwWrtShell const &rWrtSh, OUString rStringArr[])
Definition: cnttab.cxx:498
std::unique_ptr< weld::Widget > m_xSortKeyFrame
Definition: swuicnttab.hxx:350
sal_Unicode cTabFillChar
Definition: tox.hxx:217
std::unique_ptr< weld::Button > m_xAuthInsertPB
Definition: swuicnttab.hxx:326
sal_uInt16 GetTOXTypeCount(TOXTypes eTyp) const
Manage types of content tables.
Definition: edws.cxx:189
SwTOXWidget * m_pActiveCtrl
Definition: swuicnttab.hxx:232
virtual bool IsModified() const =0
std::unique_ptr< weld::Entry > m_xTitleED
Definition: swuicnttab.hxx:130
virtual WindowType GetType() const override
Definition: cnttab.cxx:1417
void SetRelTabPos(bool b)
Definition: tox.hxx:308
Used by the UI to modify the document model.
Definition: wrtsh.hxx:90
OUString sPrimKey
Definition: cnttab.cxx:127
DECL_LINK(OkHdl, weld::Button &, void)
virtual short Ok()
::svt::CellControllerRef m_xController
Definition: cnttab.cxx:157
SwTextFormatColl & GetTextFormatColl(sal_uInt16 nTextFormatColl) const
Definition: edfcol.cxx:690
sal_Int64 WinBits
sal_uInt16 sal_Unicode
std::unique_ptr< weld::RadioButton > m_xSecondSortDownRB
Definition: swuicnttab.hxx:356
CurTOXType aLastTOXType
Definition: swuicnttab.hxx:312
SwCaptionDisplay GetCaptionDisplay() const
Definition: toxmgr.hxx:127
bool IsAssignedToListLevelOfOutlineStyle() const
Definition: fmtcol.hxx:109
OUString m_sAdditionalAccnameString1
Definition: swuicnttab.hxx:235
const SwTOXSortKey * GetSortKey(sal_uInt16 nIdx) const
Definition: authfld.cxx:438
std::unique_ptr< weld::RadioButton > m_xSortContentRB
Definition: swuicnttab.hxx:349
const SwTOXType * GetTOXType() const
Definition: tox.hxx:668
OUString m_sAccessibleName
Definition: swuicnttab.hxx:234
std::unique_ptr< weld::CheckButton > m_xFromHeadingsCB
Definition: swuicnttab.hxx:142
const SwView & GetView() const
Definition: wrtsh.hxx:428
sal_Unicode GetPrefix() const
Definition: authfld.hxx:113
ErrCode GetError() const
virtual WindowType GetType() const override
Definition: cnttab.cxx:1572
virtual CreateTabPage GetTabPageCreatorFunc(sal_uInt16 nId)=0
virtual ~SwTOXSelectTabPage() override
Definition: cnttab.cxx:806
std::unique_ptr< weld::Button > m_xAuthRemovePB
Definition: swuicnttab.hxx:327
void LanguageHdl(const weld::ComboBox *)
Definition: cnttab.cxx:1311
void SetSortByDocument(bool bSet)
Definition: toxmgr.hxx:149
SwTOIOptions GetIndexOptions() const
Definition: toxmgr.hxx:113
virtual void set_grid_left_attach(int nPos)=0
std::unique_ptr< weld::ComboBox > m_xMainEntryStyleLB
Definition: swuicnttab.hxx:343
std::unique_ptr< weld::ComboBox > m_xFillCharCB
Definition: swuicnttab.hxx:337
bool ReadByteStringLine(OUString &rStr, rtl_TextEncoding eSrcCharSet, sal_Int32 nMaxBytesToRead=0xFFFE)
std::unique_ptr< weld::ComboBox > m_xAreaLB
Definition: swuicnttab.hxx:136
OUString sText
Definition: tox.hxx:208
const OUString & GetName() const
Definition: format.hxx:111
void SetExchangeSupport()
SwTOXEdit(SwTokenWindow *pTokenWin, const SwFormToken &rToken)
Definition: cnttab.cxx:1404
bool IsCreateFromObjectNames() const
Definition: toxmgr.hxx:122
virtual bool FillItemSet(SfxItemSet *) override
Definition: cnttab.cxx:1937
virtual ~SwEntryBrowseBox() override
Definition: cnttab.cxx:3612
virtual void Hide() override
Definition: cnttab.cxx:1582
bool IsLevelFromChapter() const
Definition: toxmgr.hxx:139
std::unique_ptr< weld::Container > m_xTable
Definition: cnttab.cxx:192
const sal_uInt8 MAXLEVEL
Definition: swtypes.hxx:95
#define TO_USER
Definition: cnttab.hxx:34
static SW_DLLPUBLIC sal_uInt16 GetPoolIdFromUIName(const OUString &rName, SwGetPoolIdFromName)
void UpdateDescriptor()
Definition: cnttab.cxx:2071
SvStream * GetOutStream()
virtual void GrabFocus() override
Definition: cnttab.cxx:1422
static OUString GetFormEntry()
Definition: tox.cxx:500
std::unique_ptr< weld::Button > m_xLeftScrollWin
Definition: swuicnttab.hxx:245
void SetAuthBrackets(const OUString &rSet)
Definition: toxmgr.hxx:143
virtual short Ok() override
Definition: cnttab.cxx:322
OUString sAddStyleContent
Definition: swuicnttab.hxx:124
void SetTitle(const OUString &rSet)
Definition: toxmgr.hxx:100
const OUString & GetSequenceName() const
Definition: tox.hxx:505
std::unique_ptr< weld::Builder > m_xBuilder
Definition: cnttab.cxx:1553
#define ITEM_SEARCH
Definition: cnttab.cxx:3547
OUString sSearch
Definition: cnttab.cxx:125
OUString * pStyleArr
Definition: cnttab.cxx:480
std::vector< std::unique_ptr< SwTOXWidget > > m_aControlList
Definition: swuicnttab.hxx:249
virtual void Hide() override
Definition: cnttab.cxx:1427
SwTOOElements GetOLEOptions() const
Definition: tox.hxx:478
OUString m_sCaseSensitive
Definition: cnttab.cxx:150
OUString sSecKey
Definition: cnttab.cxx:128
std::unique_ptr< weld::Button > m_xOk
Definition: cnttab.cxx:482
#define ITEM_ALTERNATIVE
Definition: cnttab.cxx:3548
std::unique_ptr< weld::RadioButton > m_xFirstSortDownRB
Definition: swuicnttab.hxx:353
std::unique_ptr< weld::CheckButton > m_xStylesCB
Definition: swuicnttab.hxx:143
OUString m_sWordOnly
Definition: cnttab.cxx:151
virtual void GrabFocus() override
Definition: cnttab.cxx:1577
OUString sAuthTypeStr
Definition: swuicnttab.hxx:307
virtual bool SaveModified() override
Definition: cnttab.cxx:3715
OUString sAddStyleUser
Definition: swuicnttab.hxx:123
std::unique_ptr< weld::CheckButton > m_xAddStylesCB
Definition: swuicnttab.hxx:144
virtual WindowType GetType() const =0
bool IsAuthSequence() const
Definition: toxmgr.hxx:145
OUString sAlternative
Definition: cnttab.cxx:126
std::unique_ptr< weld::CheckButton > m_xCommaSeparatedCB
Definition: swuicnttab.hxx:345
void RemoveControl(const SwTOXButton *pDel, bool bInternalCall=false)
Definition: cnttab.cxx:2963
float y
Link< SwTOXWidget &, void > aGetFocusLink
Definition: cnttab.cxx:1381
bool IsFromChapter() const
Definition: toxmgr.hxx:131
static OUString GetFormEntryNum()
Definition: tox.cxx:505
#define SAL_N_ELEMENTS(arr)
OUString m_aButtonTexts[TOKEN_END]
Definition: swuicnttab.hxx:228
void SetFromChapter(bool bSet)
Definition: toxmgr.hxx:130
sal_Int32 m_nLevel
std::unique_ptr< weld::RadioButton > m_xFromCaptionsRB
Definition: swuicnttab.hxx:154
void SetText(const OUString &rText)
Definition: cnttab.cxx:1668
bool GoToColumnId(sal_uInt16 nColId)
std::unique_ptr< weld::CheckButton > m_xUseFFCB
Definition: swuicnttab.hxx:169
weld::Window * GetFrameWeld(const SfxFrame *pFrame)
Definition: dialoghelp.cxx:20
OUString GetString() const
Definition: tox.cxx:647
SwTOXWidget * InsertItem(const OUString &rText, const SwFormToken &aToken)
Definition: cnttab.cxx:2698
void SetPrevNextLink(const Link< SwTOXEdit &, void > &rLink)
Definition: cnttab.cxx:1481
void InsertDataColumn(sal_uInt16 nItemId, const OUString &rText, long nSize, HeaderBarItemBits nBits=HeaderBarItemBits::STDSTYLE, sal_uInt16 nPos=HEADERBAR_APPEND)
std::unique_ptr< weld::ComboBox > m_xThirdKeyLB
Definition: swuicnttab.hxx:357
T * get() const
::svt::EditBrowseBox SwEntryBrowseBox_Base
Definition: cnttab.cxx:138
OUString m_sPrimKey
Definition: cnttab.cxx:147
const SwFormToken & GetFormToken()
Definition: cnttab.cxx:1483
LINEEND_LF
OUString GetPattern() const
Definition: cnttab.cxx:3144
const OUString & GetUserConfigPath() const
#define SW_MOD()
Definition: swmodule.hxx:256
Link< SwFormToken &, void > m_aButtonSelectedHdl
Definition: swuicnttab.hxx:231
sal_uInt16 const m_nInitialTOXType
Definition: swuicnttab.hxx:72
OUString GetColumnTitle(sal_uInt16 nColumnId) const
sal_uInt8 GetLevel() const
Definition: toxmgr.hxx:119
IMPL_LINK_NOARG(SwMultiTOXTabDialog, ShowPreviewHdl, weld::ToggleButton &, void)
Definition: cnttab.cxx:422
std::unique_ptr< weld::Label > m_xLevelFT
Definition: swuicnttab.hxx:316
sal_uInt32 GetControlIndex(FormTokenType eType) const
Definition: cnttab.cxx:3320
bool Contains(FormTokenType) const
Definition: cnttab.cxx:3164
virtual void Reset(const SfxItemSet *) override
Definition: cnttab.cxx:1943
SW_DLLPUBLIC FieldUnit GetDfltMetric(bool bWeb)
Definition: uitool.cxx:709
bool m_bWaitingInitialSettings
Definition: swuicnttab.hxx:128
const SwTOXBase * GetDefaultTOXBase(TOXTypes eTyp, bool bCreate=false)
Definition: edtox.cxx:110
void SetColumnWidth(sal_uInt16 nColumnId, sal_uLong nWidth)
static OUString const & GetAuthFieldName(ToxAuthorityField eType)
Definition: initui.cxx:244
SwTOXElement
Definition: tox.hxx:328
virtual void Reset(const SfxItemSet *) override
Definition: cnttab.cxx:1121
const OUString & GetSortAlgorithm() const
Definition: toxmgr.hxx:162
CheckBox & GetBox()
bool const m_bGlobalFlag
Definition: swuicnttab.hxx:76
FormTokenType eTokenType
Definition: tox.hxx:211
const SwFormTokens & GetPattern(sal_uInt16 nLevel) const
Definition: tox.cxx:935
void SetChapterInfo(sal_uInt16 nSet)
Definition: cnttab.cxx:1650
#define TO_INDEX
Definition: cnttab.hxx:31
VclPtr< SwEntryBrowseBox > m_xEntriesBB
Definition: cnttab.cxx:194
std::unique_ptr< SwTokenWindow > m_xTokenWIN
Definition: swuicnttab.hxx:360
OUString sCharStyleName
Definition: tox.hxx:209
SwTOOElements GetOLEOptions() const
Definition: toxmgr.hxx:136
#define TO_OBJECT
Definition: cnttab.hxx:35
std::unique_ptr< weld::TreeView > m_xLevelLB
Definition: swuicnttab.hxx:317
virtual void ClearModified()=0
SwTOXWidget * GetActiveControl()
Definition: swuicnttab.hxx:288
OUString sName
std::unique_ptr< weld::CheckButton > m_xAlphaDelimCB
Definition: swuicnttab.hxx:344
#define TOX_PAGE_SELECT
Definition: cnttab.hxx:26
std::unique_ptr< IndexEntryResource > pIndexRes
Definition: swuicnttab.hxx:118
long GetCurRow() const
int i
QPRO_FUNC_TYPE const nType
bool IsFromObjectNames() const
Definition: tox.hxx:496
void FillTOXDescription()
Definition: cnttab.cxx:1010
TRISTATE_FALSE
SwWrtShell & GetWrtShell()
Definition: swuicnttab.hxx:107
SwFormToken aFormToken
Definition: cnttab.cxx:1554
std::unique_ptr< weld::SpinButton > m_xLevelNF
Definition: swuicnttab.hxx:138
void EnableTriState(bool bTriState=true)
size_t GetFieldTypeCount(SwFieldIds nResId=SwFieldIds::Unknown) const
count field types with a ResId, if SwFieldIds::Unknown count all
Definition: edfld.cxx:43
void SetFillChar(sal_Unicode cSet)
Definition: cnttab.cxx:1628
static CurTOXType lcl_UserData2TOXTypes(sal_uInt16 nData)
Definition: cnttab.cxx:870
virtual void PageCreated(const OString &rId, SfxTabPage &rPage) override
Definition: cnttab.cxx:298
sal_Unicode GetSuffix() const
Definition: authfld.hxx:114
std::unique_ptr< weld::ComboBox > m_xBracketLB
Definition: swuicnttab.hxx:182
virtual OUString GetCellText(long nRow, sal_uInt16 nColumn) const override
Definition: cnttab.cxx:3683
float u
std::unique_ptr< SwTOXDescription > CreateTOXDescFromTOXBase(const SwTOXBase *pCurTOX)
Definition: cnttab.cxx:395
void SetAccessibleName(const OUString &rName)
Definition: cnttab.cxx:1592
#define TO_TABLE
Definition: cnttab.hxx:33
std::unique_ptr< SwForm > m_pCurrentForm
Definition: swuicnttab.hxx:403
bool IsReadonly() const
Definition: toxmgr.hxx:134
static std::unique_ptr< SfxTabPage > Create(weld::Container *pPage, weld::DialogController *pController, const SfxItemSet *rAttrSet)
Definition: cnttab.cxx:1173
const OUString & GetTypeName() const
Definition: tox.hxx:660
static OUString GetFormChapterMark()
Definition: tox.cxx:507
void ApplyTOXDescription()
Definition: cnttab.cxx:894
void SetOutlineLevel(sal_uInt16 nSet)
Definition: cnttab.cxx:1666
#define ITEM_SEC_KEY
Definition: cnttab.cxx:3550
std::unique_ptr< weld::CheckButton > m_xUseDashCB
Definition: swuicnttab.hxx:170
virtual DeactivateRC DeactivatePage(SfxItemSet *pSet) override
Definition: cnttab.cxx:2105
sal_uInt16 nChapterFormat
Definition: tox.hxx:214
SwForm * m_pForm
Definition: swuicnttab.hxx:225
void SetAccessibleName(const OUString &rName)
Definition: cnttab.cxx:1437
bool IsSequence() const
Definition: authfld.hxx:101
void SetSortAlgorithm(const OUString &rSet)
Definition: toxmgr.hxx:163
sal_uInt16 GetFlatIndex() const
Definition: cnttab.cxx:203
static long lcl_TOXTypesToUserData(CurTOXType eType)
Definition: cnttab.cxx:836
BrowserMode
sal_uInt16 nAuthorityField
Definition: tox.hxx:216
virtual bool FillItemSet(SfxItemSet *) override
Definition: cnttab.cxx:831
DrawTextFlags
OUString SwResId(const char *pId)
Definition: swmodule.cxx:190
SwForm & GetForm()
Definition: swuicnttab.hxx:418
std::unique_ptr< weld::CheckButton > m_xFromOLECB
Definition: swuicnttab.hxx:150
Link< LinkParamNone *, void > m_aModifyHdl
Definition: swuicnttab.hxx:233
virtual void set_grid_left_attach(int nPos) override
Definition: cnttab.cxx:1442
bool IsFromChapter() const
Definition: tox.hxx:493
DocumentType const eType
sal_uInt16 GetLevel() const
Definition: tox.hxx:704
virtual ~SwTOXEntryTabPage() override
Definition: cnttab.cxx:1906
virtual void dispose() override
Definition: cnttab.cxx:3617
OUString m_sAdditionalAccnameString3
Definition: swuicnttab.hxx:237
void SetCreateFromObjectNames(bool bSet)
Definition: toxmgr.hxx:121
const OUString & GetTitle() const
Definition: tox.hxx:674
void AdjustPositions()
Definition: cnttab.cxx:3010
bool GoToRow(long nRow)
bool bSortAscending
Definition: authfld.hxx:48
static std::unique_ptr< SfxTabPage > Create(weld::Container *pPage, weld::DialogController *pController, const SfxItemSet *rAttrSet)
Definition: cnttab.cxx:3458
void SetCurrentTOXType(const CurTOXType &eSet)
Definition: swuicnttab.hxx:100
SwCaptionDisplay GetCaptionDisplay() const
Definition: tox.hxx:508
SwDocShell * GetDocShell()
Definition: view.cxx:1128
SwTOXStylesTabPage(weld::Container *pPage, weld::DialogController *pController, const SfxItemSet &rAttrSet)
Definition: cnttab.cxx:3347
void SetForm(SwForm &rForm, sal_uInt16 nLevel)
Definition: cnttab.cxx:2605
const SwFormToken & GetFormToken() const
Definition: cnttab.cxx:1617
Link< SwTOXEdit &, void > aPrevNextControlLink
Definition: cnttab.cxx:1397
OUString const sDelimStr
Definition: swuicnttab.hxx:305
SwTOXEntryTabPage(weld::Container *pPage, weld::DialogController *pController, const SfxItemSet &rAttrSet)
Definition: cnttab.cxx:1769
void SetDefaultTOXBase(const SwTOXBase &rBase)
Definition: edtox.cxx:115
const OUString & GetSortAlgorithm() const
Definition: tox.hxx:519
std::unique_ptr< weld::Label > m_xTypeFT
Definition: swuicnttab.hxx:315
std::unique_ptr< weld::Button > m_xPageNoPB
Definition: swuicnttab.hxx:323
OUString sComment
Definition: cnttab.cxx:129
std::unique_ptr< weld::CheckButton > m_xCollectSameCB
Definition: swuicnttab.hxx:168
void SetLanguage(LanguageType nLang)
Definition: toxmgr.hxx:160
ToxAuthorityField
Definition: toxe.hxx:82
bool IsNextControl() const
Definition: cnttab.cxx:1615
only the chapter number
Definition: chpfld.hxx:32
#define ITEM_PRIM_KEY
Definition: cnttab.cxx:3549
std::unique_ptr< weld::Label > m_xTypeFT
Definition: swuicnttab.hxx:131
void SetLevelFromChapter(bool bSet)
Definition: toxmgr.hxx:140
std::unique_ptr< weld::CheckButton > m_xTOXMarksCB
Definition: swuicnttab.hxx:164
virtual ::svt::CellController * GetController(long nRow, sal_uInt16 nCol) override
Definition: cnttab.cxx:3710
std::unique_ptr< weld::CheckButton > m_xFromFileCB
Definition: swuicnttab.hxx:174
#define ITEM_CASE
Definition: cnttab.cxx:3552
void SetAutoMarkURL(const OUString &rSet)
Definition: toxmgr.hxx:98
const OUString & GetMainEntryCharStyle() const
Definition: toxmgr.hxx:115
void SetGetFocusHdl(const Link< SwTOXWidget &, void > &rLink)
Definition: cnttab.cxx:1388
std::unique_ptr< weld::ComboBox > m_xChapterEntryLB
Definition: swuicnttab.hxx:331
const SfxPoolItem * Put(const SfxPoolItem &rItem, sal_uInt16 nWhich)
VclPtr< ::svt::CheckBoxControl > m_aCellCheckBox
Definition: cnttab.cxx:143
SvStream * GetInStream()
std::unique_ptr< weld::CheckButton > m_xCaseSensitiveCB
Definition: swuicnttab.hxx:171
std::unique_ptr< weld::CheckButton > m_xKeyAsEntryCB
Definition: swuicnttab.hxx:173
css::uno::Reference< css::awt::XWindow > m_xTableCtrlParent
Definition: cnttab.cxx:193
const CurTOXType & GetCurrentTOXType() const
Definition: swuicnttab.hxx:99
#define ITEM_WORDONLY
Definition: cnttab.cxx:3553
void AdjustSize()
Definition: cnttab.cxx:1544
bool IsRelTabPos() const
Definition: tox.hxx:307
bool IsShift() const
const SwGetSetExpType GSE_SEQ
Sequence.
Definition: fldbas.hxx:198
void WriteBackLevel()
Definition: cnttab.cxx:2239
SwTokenWindow(std::unique_ptr< weld::Container > xParent)
Definition: cnttab.cxx:2562
void SetTabPosition(SwTwips nSet)
Definition: cnttab.cxx:1625
ToxAuthorityField eField
Definition: authfld.hxx:47
weld::Entry & rEdit
static Size GetMinimumEditSize()
SwTwips nTabStopPosition
Definition: tox.hxx:210
OUString m_sAlternative
Definition: cnttab.cxx:146
OUString m_sComment
Definition: cnttab.cxx:149
LanguageType GetLanguage() const
Definition: toxmgr.hxx:159
TOXTypes eType
Definition: cnttab.hxx:41
std::unique_ptr< weld::CheckButton > m_xFromGraphicsCB
Definition: swuicnttab.hxx:149