summaryrefslogtreecommitdiffstats
path: root/sw/source/ui/fldui/flddok.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'sw/source/ui/fldui/flddok.cxx')
-rw-r--r--sw/source/ui/fldui/flddok.cxx641
1 files changed, 641 insertions, 0 deletions
diff --git a/sw/source/ui/fldui/flddok.cxx b/sw/source/ui/fldui/flddok.cxx
new file mode 100644
index 000000000..4e65a7c3f
--- /dev/null
+++ b/sw/source/ui/fldui/flddok.cxx
@@ -0,0 +1,641 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <flddat.hxx>
+#include <docufld.hxx>
+#include <strings.hrc>
+#include <chpfld.hxx>
+#include "flddok.hxx"
+#include <swmodule.hxx>
+#include <wrtsh.hxx>
+#include <svl/numformat.hxx>
+#include <svl/zformat.hxx>
+#include <o3tl/string_view.hxx>
+
+#define USER_DATA_VERSION_1 "1"
+#define USER_DATA_VERSION USER_DATA_VERSION_1
+
+SwFieldDokPage::SwFieldDokPage(weld::Container* pPage, weld::DialogController* pController, const SfxItemSet *const pCoreSet)
+ : SwFieldPage(pPage, pController, "modules/swriter/ui/flddocumentpage.ui",
+ "FieldDocumentPage", pCoreSet)
+ , nOldSel(0)
+ , nOldFormat(0)
+ , m_xTypeLB(m_xBuilder->weld_tree_view("type"))
+ , m_xSelection(m_xBuilder->weld_widget("selectframe"))
+ , m_xSelectionLB(m_xBuilder->weld_tree_view("select"))
+ , m_xValueFT(m_xBuilder->weld_label("valueft"))
+ , m_xValueED(m_xBuilder->weld_entry("value"))
+ , m_xLevelFT(m_xBuilder->weld_label("levelft"))
+ , m_xLevelED(m_xBuilder->weld_spin_button("level"))
+ , m_xDateFT(m_xBuilder->weld_label("daysft"))
+ , m_xTimeFT(m_xBuilder->weld_label("minutesft"))
+ , m_xDateOffsetED(m_xBuilder->weld_spin_button("offset"))
+ , m_xFormat(m_xBuilder->weld_widget("formatframe"))
+ , m_xFormatLB(m_xBuilder->weld_tree_view("format"))
+ , m_xNumFormatLB(new SwNumFormatTreeView(m_xBuilder->weld_tree_view("numformat")))
+ , m_xFixedCB(m_xBuilder->weld_check_button("fixed"))
+{
+ m_xTypeLB->make_sorted();
+ m_xFormatLB->make_sorted();
+
+ auto nWidth = m_xTypeLB->get_approximate_digit_width() * FIELD_COLUMN_WIDTH;
+ auto nHeight = m_xTypeLB->get_height_rows(10);
+
+ m_xTypeLB->set_size_request(nWidth, nHeight);
+ m_xSelectionLB->set_size_request(nWidth, nHeight);
+ m_xFormatLB->set_size_request(nWidth * 2, nHeight);
+
+ m_xSelectionLB->connect_row_activated(LINK(this, SwFieldDokPage, TreeViewInsertHdl));
+ m_xFormatLB->connect_row_activated(LINK(this, SwFieldDokPage, TreeViewInsertHdl));
+ m_xNumFormatLB->connect_row_activated(LINK(this, SwFieldDokPage, NumFormatHdl));
+
+ m_xLevelED->set_max(MAXLEVEL);
+ m_xDateOffsetED->set_range(INT_MIN, INT_MAX);
+ //enable 'active' language selection
+ m_xNumFormatLB->SetShowLanguageControl(true);
+
+ // uitests
+ m_xTypeLB->set_buildable_name(m_xTypeLB->get_buildable_name() + "-doc");
+ m_xValueED->set_buildable_name(m_xValueED->get_buildable_name() + "-doc");
+ m_xNumFormatLB->set_buildable_name(m_xNumFormatLB->get_buildable_name() + "-doc");
+ m_xSelectionLB->set_buildable_name(m_xSelectionLB->get_buildable_name() + "-doc");
+ m_xFormatLB->set_buildable_name(m_xFormatLB->get_buildable_name() + "-doc");
+}
+
+SwFieldDokPage::~SwFieldDokPage()
+{
+}
+
+void SwFieldDokPage::Reset(const SfxItemSet* )
+{
+ SavePos(*m_xTypeLB);
+ Init(); // general initialisation
+
+ // initialise TypeListBox
+ const SwFieldGroupRgn& rRg = SwFieldMgr::GetGroupRange(IsFieldDlgHtmlMode(), GetGroup());
+
+ m_xTypeLB->freeze();
+ m_xTypeLB->clear();
+
+ if (!IsFieldEdit())
+ {
+ bool bPage = false;
+ // fill Type-Listbox
+ for(sal_uInt16 i = rRg.nStart; i < rRg.nEnd; ++i)
+ {
+ const SwFieldTypesEnum nTypeId = SwFieldMgr::GetTypeId(i);
+
+ switch (nTypeId)
+ {
+ case SwFieldTypesEnum::PreviousPage:
+ case SwFieldTypesEnum::NextPage:
+ case SwFieldTypesEnum::PageNumber:
+ if (!bPage)
+ {
+ m_xTypeLB->append(OUString::number(USHRT_MAX), SwResId(FMT_REF_PAGE));
+ bPage = true;
+ }
+ break;
+
+ default:
+ m_xTypeLB->append(OUString::number(static_cast<sal_uInt16>(nTypeId)), SwFieldMgr::GetTypeStr(i));
+ break;
+ }
+ }
+ }
+ else
+ {
+ const SwField* pCurField = GetCurField();
+ SwFieldTypesEnum nTypeId = pCurField->GetTypeId();
+ if (nTypeId == SwFieldTypesEnum::FixedDate)
+ nTypeId = SwFieldTypesEnum::Date;
+ if (nTypeId == SwFieldTypesEnum::FixedTime)
+ nTypeId = SwFieldTypesEnum::Time;
+ m_xTypeLB->append(OUString::number(static_cast<sal_uInt16>(nTypeId)), SwFieldMgr::GetTypeStr(SwFieldMgr::GetPos(nTypeId)));
+ m_xNumFormatLB->SetAutomaticLanguage(pCurField->IsAutomaticLanguage());
+ SwWrtShell *pSh = GetWrtShell();
+ if(!pSh)
+ pSh = ::GetActiveWrtShell();
+ if(pSh)
+ {
+ const SvNumberformat* pFormat = pSh->GetNumberFormatter()->GetEntry(pCurField->GetFormat());
+ if(pFormat)
+ m_xNumFormatLB->SetLanguage(pFormat->GetLanguage());
+ }
+ }
+
+
+ m_xTypeLB->thaw();
+
+ // select old Pos
+ RestorePos(*m_xTypeLB);
+
+ m_xTypeLB->connect_row_activated(LINK(this, SwFieldDokPage, TreeViewInsertHdl));
+ m_xTypeLB->connect_changed(LINK(this, SwFieldDokPage, TypeHdl));
+ m_xFormatLB->connect_changed(LINK(this, SwFieldDokPage, FormatHdl));
+
+ if( !IsRefresh() )
+ {
+ const OUString sUserData = GetUserData();
+ sal_Int32 nIdx{ 0 };
+ if (o3tl::equalsIgnoreAsciiCase(o3tl::getToken(sUserData, 0, ';', nIdx), u"" USER_DATA_VERSION_1))
+ {
+ const sal_uInt16 nVal = static_cast< sal_uInt16 >(o3tl::toInt32(o3tl::getToken(sUserData, 0, ';', nIdx)));
+ if(nVal != USHRT_MAX)
+ {
+ for (int i = 0, nEntryCount = m_xTypeLB->n_children(); i < nEntryCount; i++)
+ {
+ if (nVal == m_xTypeLB->get_id(i).toUInt32())
+ {
+ m_xTypeLB->select(i);
+ break;
+ }
+ }
+ }
+ }
+ }
+ TypeHdl(*m_xTypeLB);
+
+ if (IsFieldEdit())
+ {
+ nOldSel = m_xSelectionLB->get_selected_index();
+ nOldFormat = GetCurField()->GetFormat();
+ m_xFixedCB->save_state();
+ m_xValueED->save_value();
+ m_xLevelED->save_value();
+ m_xDateOffsetED->save_value();
+ }
+}
+
+IMPL_LINK_NOARG(SwFieldDokPage, TypeHdl, weld::TreeView&, void)
+{
+ // save old ListBoxPos
+ const sal_Int32 nOld = GetTypeSel();
+
+ // current ListBoxPos
+ SetTypeSel(m_xTypeLB->get_selected_index());
+
+ if(GetTypeSel() == -1)
+ {
+ SetTypeSel(0);
+ m_xTypeLB->select(0);
+ }
+
+ if (nOld == GetTypeSel())
+ return;
+
+ size_t nCount;
+
+ m_xDateFT->hide();
+ m_xTimeFT->hide();
+
+ SwFieldTypesEnum nTypeId = static_cast<SwFieldTypesEnum>(m_xTypeLB->get_id(GetTypeSel()).toUInt32());
+
+ // fill Selection-Listbox
+ m_xSelectionLB->clear();
+
+ if (nTypeId != SwFieldTypesEnum::Unknown)
+ {
+ std::vector<OUString> aLst;
+ GetFieldMgr().GetSubTypes(nTypeId, aLst);
+
+ if (nTypeId != SwFieldTypesEnum::Author)
+ nCount = aLst.size();
+ else
+ nCount = GetFieldMgr().GetFormatCount(nTypeId, IsFieldDlgHtmlMode());
+
+ for (size_t i = 0; i < nCount; ++i)
+ {
+ if (!IsFieldEdit())
+ {
+ OUString sId(OUString::number(i));
+ if (nTypeId != SwFieldTypesEnum::Author)
+ m_xSelectionLB->append(sId, aLst[i]);
+ else
+ m_xSelectionLB->append(sId, GetFieldMgr().GetFormatStr(nTypeId, i));
+ }
+ else
+ {
+ bool bInsert = false;
+
+ OUString sId(OUString::number(i));
+
+ switch (nTypeId)
+ {
+ case SwFieldTypesEnum::Date:
+ case SwFieldTypesEnum::Time:
+ m_xSelectionLB->append(sId, aLst[i]);
+ if (static_cast<SwDateTimeField*>(GetCurField())->IsFixed() && !i)
+ m_xSelectionLB->select_id(sId);
+ if (!static_cast<SwDateTimeField*>(GetCurField())->IsFixed() && i)
+ m_xSelectionLB->select_id(sId);
+ break;
+ case SwFieldTypesEnum::ExtendedUser:
+ case SwFieldTypesEnum::DocumentStatistics:
+ m_xSelectionLB->append(sId, aLst[i]);
+ if (GetCurField()->GetSubType() == i)
+ m_xSelectionLB->select_id(sId);
+ break;
+
+ case SwFieldTypesEnum::Author:
+ {
+ const OUString sFormat(GetFieldMgr().GetFormatStr(nTypeId, i));
+ m_xSelectionLB->append(sId, sFormat);
+ m_xSelectionLB->select_text(GetFieldMgr().GetFormatStr(nTypeId, GetCurField()->GetFormat()));
+ break;
+ }
+
+ default:
+ if (aLst[i] == GetCurField()->GetPar1())
+ bInsert = true;
+ break;
+ }
+ if (bInsert)
+ {
+ m_xSelectionLB->append(sId, aLst[i]);
+ break;
+ }
+ }
+ }
+ m_xSelectionLB->connect_changed(Link<weld::TreeView&,void>());
+ }
+ else
+ {
+ AddSubType(SwFieldTypesEnum::PageNumber);
+ AddSubType(SwFieldTypesEnum::PreviousPage);
+ AddSubType(SwFieldTypesEnum::NextPage);
+ nTypeId = static_cast<SwFieldTypesEnum>(m_xSelectionLB->get_id(0).toUInt32());
+ nCount = 3;
+ m_xSelectionLB->connect_changed(LINK(this, SwFieldDokPage, SubTypeHdl));
+ }
+
+ bool bEnable = nCount != 0;
+
+ if (bEnable && m_xSelectionLB->get_selected_index() == -1)
+ m_xSelectionLB->select(0);
+
+ m_xSelection->set_sensitive( bEnable );
+
+ // fill Format-Listbox
+ sal_Int32 nSize = FillFormatLB(nTypeId);
+
+ bool bValue = false, bLevel = false, bNumFormat = false, bOffset = false;
+ bool bFormat = nSize != 0;
+ bool bOneArea = false;
+ bool bFixed = false;
+ SvNumFormatType nFormatType = SvNumFormatType::ALL;
+
+ switch (nTypeId)
+ {
+ case SwFieldTypesEnum::Date:
+ bFormat = bNumFormat = bOneArea = bOffset = true;
+
+ nFormatType = SvNumFormatType::DATE;
+
+ m_xDateFT->show();
+
+ m_xDateOffsetED->set_range(INT_MIN, INT_MAX); // no limit
+
+ if (IsFieldEdit())
+ m_xDateOffsetED->set_value( static_cast<SwDateTimeField*>(GetCurField())->GetOffset() / 24 / 60);
+ break;
+
+ case SwFieldTypesEnum::Time:
+ bFormat = bNumFormat = bOneArea = bOffset = true;
+
+ nFormatType = SvNumFormatType::TIME;
+
+ m_xTimeFT->show();
+
+ m_xDateOffsetED->set_range(-1440, 1440); // one day
+
+ if (IsFieldEdit())
+ m_xDateOffsetED->set_value( static_cast<SwDateTimeField*>(GetCurField())->GetOffset() );
+ break;
+
+ case SwFieldTypesEnum::PreviousPage:
+ case SwFieldTypesEnum::NextPage:
+ if (IsFieldEdit())
+ {
+ const sal_uInt16 nTmp = m_xFormatLB->get_selected_id().toUInt32();
+
+ if(SVX_NUM_CHAR_SPECIAL != nTmp)
+ {
+ sal_Int32 nOff = GetCurField()->GetPar2().toInt32();
+ if( SwFieldTypesEnum::NextPage == nTypeId && 1 != nOff )
+ m_xValueED->set_text(
+ OUString::number(nOff - 1) );
+ else if( SwFieldTypesEnum::PreviousPage == nTypeId && -1 != nOff )
+ m_xValueED->set_text(
+ OUString::number(nOff + 1) );
+ else
+ m_xValueED->set_text(OUString());
+ }
+ else
+ m_xValueED->set_text(static_cast<SwPageNumberField*>(GetCurField())->GetUserString());
+ }
+ bValue = true;
+ break;
+
+ case SwFieldTypesEnum::Chapter:
+ m_xValueFT->set_label(SwResId(STR_LEVEL));
+ if (IsFieldEdit())
+ m_xLevelED->set_text(OUString::number(static_cast<SwChapterField*>(GetCurField())->GetLevel(GetWrtShell()->GetLayout()) + 1));
+ bLevel = true;
+ break;
+
+ case SwFieldTypesEnum::PageNumber:
+ m_xValueFT->set_label( SwResId( STR_OFFSET ));
+ if (IsFieldEdit())
+ m_xValueED->set_text(GetCurField()->GetPar2());
+ bValue = true;
+ break;
+
+ case SwFieldTypesEnum::ExtendedUser:
+ case SwFieldTypesEnum::Author:
+ case SwFieldTypesEnum::Filename:
+ bFixed = true;
+ break;
+
+ default:
+ break;
+ }
+
+ if (bNumFormat)
+ {
+ if (IsFieldEdit())
+ {
+ m_xNumFormatLB->SetDefFormat(GetCurField()->GetFormat());
+
+ if (m_xNumFormatLB->GetFormatType() == (SvNumFormatType::DATE|SvNumFormatType::TIME))
+ {
+ // always set Format-Type because otherwise when date/time formats are combined,
+ // both formats would be displayed at the same time
+ m_xNumFormatLB->SetFormatType(SvNumFormatType::ALL);
+ m_xNumFormatLB->SetFormatType(nFormatType);
+ // set correct format once again
+ m_xNumFormatLB->SetDefFormat(GetCurField()->GetFormat());
+ }
+ }
+ else
+ m_xNumFormatLB->SetFormatType(nFormatType);
+
+ m_xNumFormatLB->SetOneArea(bOneArea);
+ }
+
+ m_xFormatLB->set_visible(!bNumFormat);
+ m_xNumFormatLB->set_visible(bNumFormat);
+
+ m_xValueFT->set_visible(bValue);
+ m_xValueED->set_visible(bValue);
+ m_xLevelFT->set_visible(bLevel);
+ m_xLevelED->set_visible(bLevel);
+ m_xDateOffsetED->set_visible(bOffset);
+ m_xFixedCB->set_visible(!bValue && !bLevel && !bOffset);
+
+ m_xFormat->set_sensitive(bFormat);
+ m_xFixedCB->set_sensitive(bFixed);
+
+ if (IsFieldEdit())
+ m_xFixedCB->set_active((GetCurField()->GetFormat() & AF_FIXED) != 0 && bFixed);
+
+ if (m_xNumFormatLB->get_selected_index() == -1)
+ m_xNumFormatLB->select(0);
+ m_xValueFT->set_sensitive(bValue || bLevel || bOffset);
+ m_xValueED->set_sensitive(bValue);
+}
+
+void SwFieldDokPage::AddSubType(SwFieldTypesEnum nTypeId)
+{
+ m_xSelectionLB->append(OUString::number(static_cast<sal_uInt16>(nTypeId)), SwFieldType::GetTypeStr(nTypeId));
+}
+
+IMPL_LINK_NOARG(SwFieldDokPage, SubTypeHdl, weld::TreeView&, void)
+{
+ sal_Int32 nPos = m_xSelectionLB->get_selected_index();
+ if(nPos == -1)
+ nPos = 0;
+
+ const SwFieldTypesEnum nTypeId = static_cast<SwFieldTypesEnum>(m_xSelectionLB->get_id(nPos).toUInt32());
+ FillFormatLB(nTypeId);
+
+ TranslateId pTextRes;
+ switch (nTypeId)
+ {
+ case SwFieldTypesEnum::Chapter:
+ pTextRes = STR_LEVEL;
+ break;
+
+ case SwFieldTypesEnum::PreviousPage:
+ case SwFieldTypesEnum::NextPage:
+ pTextRes = SVX_NUM_CHAR_SPECIAL == m_xFormatLB->get_selected_id().toUInt32()
+ ? STR_VALUE : STR_OFFSET;
+ break;
+
+ case SwFieldTypesEnum::PageNumber:
+ pTextRes = STR_OFFSET;
+ break;
+ default: break;
+ }
+
+ if (pTextRes)
+ m_xValueFT->set_label(SwResId(pTextRes));
+}
+
+sal_Int32 SwFieldDokPage::FillFormatLB(SwFieldTypesEnum nTypeId)
+{
+ // fill Format-Listbox
+ m_xFormatLB->clear();
+
+ if (nTypeId == SwFieldTypesEnum::Author)
+ return m_xFormatLB->n_children();
+
+ const sal_uInt16 nSize = GetFieldMgr().GetFormatCount(nTypeId, IsFieldDlgHtmlMode());
+
+ for( sal_uInt16 i = 0; i < nSize; ++i )
+ {
+ const sal_uInt16 nFormatId = GetFieldMgr().GetFormatId( nTypeId, i );
+ OUString sId(OUString::number(nFormatId));
+ m_xFormatLB->append(sId, GetFieldMgr().GetFormatStr(nTypeId, i));
+ }
+
+ if (IsFieldEdit())
+ {
+ m_xFormatLB->select_id(OUString::number(GetCurField()->GetFormat() & ~AF_FIXED));
+ }
+ else
+ {
+ // Select default selected value for "Insert" dialog
+ switch (nTypeId)
+ {
+ case SwFieldTypesEnum::PageNumber:
+ case SwFieldTypesEnum::DocumentStatistics:
+ m_xFormatLB->select_text(SwResId(FMT_NUM_PAGEDESC));
+ break;
+ default:
+ m_xFormatLB->select(0);
+ }
+ }
+
+ FormatHdl(*m_xFormatLB);
+
+ return nSize;
+}
+
+IMPL_LINK_NOARG(SwFieldDokPage, FormatHdl, weld::TreeView&, void)
+{
+ SwFieldTypesEnum nTypeId = static_cast<SwFieldTypesEnum>(m_xTypeLB->get_id(GetTypeSel()).toUInt32());
+
+ if (nTypeId == SwFieldTypesEnum::Unknown)
+ {
+ sal_Int32 nPos = m_xSelectionLB->get_selected_index();
+ if(nPos == -1)
+ nPos = 0;
+
+ nTypeId = static_cast<SwFieldTypesEnum>(m_xSelectionLB->get_id(nPos).toUInt32());
+ }
+
+ if (nTypeId != SwFieldTypesEnum::NextPage && nTypeId != SwFieldTypesEnum::PreviousPage)
+ return;
+
+ // Prev/Next - PageNumFields special treatment:
+ sal_uInt16 nTmp = m_xFormatLB->get_selected_id().toUInt32();
+ const OUString sOldText( m_xValueFT->get_label() );
+ const OUString sNewText( SwResId( SVX_NUM_CHAR_SPECIAL == nTmp ? STR_VALUE
+ : STR_OFFSET ));
+
+ if (sOldText != sNewText)
+ m_xValueFT->set_label(sNewText);
+
+ if (sOldText != m_xValueFT->get_label())
+ m_xValueED->set_text(OUString());
+}
+
+bool SwFieldDokPage::FillItemSet(SfxItemSet* )
+{
+ SwFieldTypesEnum nTypeId = static_cast<SwFieldTypesEnum>(m_xTypeLB->get_id(GetTypeSel()).toUInt32());
+
+ if (nTypeId == SwFieldTypesEnum::Unknown)
+ {
+ sal_Int32 nPos = m_xSelectionLB->get_selected_index();
+ if(nPos == -1)
+ nPos = 0;
+ nTypeId = static_cast<SwFieldTypesEnum>(m_xSelectionLB->get_id(nPos).toUInt32());
+ }
+
+ OUString aVal(m_xValueED->get_text());
+ sal_uLong nFormat = 0;
+ sal_uInt16 nSubType = 0;
+
+ if (m_xFormatLB->get_sensitive())
+ {
+ sal_Int32 nPos = m_xFormatLB->get_selected_index();
+ if(nPos != -1)
+ nFormat = m_xFormatLB->get_id(nPos).toUInt32();
+ }
+
+ if (m_xSelectionLB->get_sensitive())
+ {
+ sal_Int32 nPos = m_xSelectionLB->get_selected_index();
+ if(nPos != -1)
+ nSubType = m_xSelectionLB->get_id(nPos).toUInt32();
+ }
+
+ switch (nTypeId)
+ {
+ case SwFieldTypesEnum::Author:
+ nFormat = nSubType;
+ nSubType = 0;
+ [[fallthrough]];
+ case SwFieldTypesEnum::ExtendedUser:
+ nFormat |= m_xFixedCB->get_active() ? AF_FIXED : 0;
+ break;
+
+ case SwFieldTypesEnum::Filename:
+ nFormat |= m_xFixedCB->get_active() ? FF_FIXED : 0;
+ break;
+
+ case SwFieldTypesEnum::Date:
+ case SwFieldTypesEnum::Time:
+ {
+ nFormat = m_xNumFormatLB->GetFormat();
+ tools::Long nVal = static_cast< tools::Long >(m_xDateOffsetED->get_value());
+ if (nTypeId == SwFieldTypesEnum::Date)
+ aVal = OUString::number(nVal * 60 * 24);
+ else
+ aVal = OUString::number(nVal);
+ break;
+ }
+
+ case SwFieldTypesEnum::NextPage:
+ case SwFieldTypesEnum::PreviousPage:
+ case SwFieldTypesEnum::PageNumber:
+ case SwFieldTypesEnum::GetRefPage:
+ {
+ if( SVX_NUM_CHAR_SPECIAL != nFormat &&
+ (SwFieldTypesEnum::PreviousPage == nTypeId || SwFieldTypesEnum::NextPage == nTypeId))
+ {
+ sal_Int32 nVal = m_xValueED->get_text().toInt32();
+ aVal = OUString::number(nVal);
+ }
+ break;
+ }
+
+ case SwFieldTypesEnum::Chapter:
+ aVal = m_xLevelED->get_text();
+ break;
+
+ default:
+ break;
+ }
+
+ if (!IsFieldEdit() ||
+ nOldSel != m_xSelectionLB->get_selected_index() ||
+ nOldFormat != nFormat ||
+ m_xFixedCB->get_state_changed_from_saved() ||
+ m_xValueED->get_value_changed_from_saved() ||
+ m_xLevelED->get_value_changed_from_saved() ||
+ m_xDateOffsetED->get_value_changed_from_saved())
+ {
+ InsertField(nTypeId, nSubType, OUString(), aVal, nFormat, ' ', m_xNumFormatLB->IsAutomaticLanguage());
+ }
+
+ return false;
+}
+
+std::unique_ptr<SfxTabPage> SwFieldDokPage::Create(weld::Container* pPage, weld::DialogController* pController,
+ const SfxItemSet *const pAttrSet)
+{
+ return std::make_unique<SwFieldDokPage>(pPage, pController, pAttrSet);
+}
+
+sal_uInt16 SwFieldDokPage::GetGroup()
+{
+ return GRP_DOC;
+}
+
+void SwFieldDokPage::FillUserData()
+{
+ const sal_Int32 nEntryPos = m_xTypeLB->get_selected_index();
+ const sal_uInt16 nTypeSel = ( -1 == nEntryPos )
+ ? USHRT_MAX : m_xTypeLB->get_id(nEntryPos).toUInt32();
+ SetUserData(USER_DATA_VERSION ";" + OUString::number( nTypeSel ));
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */