summaryrefslogtreecommitdiffstats
path: root/sw/source/ui/chrdlg/break.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'sw/source/ui/chrdlg/break.cxx')
-rw-r--r--sw/source/ui/chrdlg/break.cxx213
1 files changed, 213 insertions, 0 deletions
diff --git a/sw/source/ui/chrdlg/break.cxx b/sw/source/ui/chrdlg/break.cxx
new file mode 100644
index 000000000..8c1c6a0cc
--- /dev/null
+++ b/sw/source/ui/chrdlg/break.cxx
@@ -0,0 +1,213 @@
+/* -*- 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 <vcl/svapp.hxx>
+#include <osl/diagnose.h>
+
+#include <uitool.hxx>
+#include <swtypes.hxx>
+#include <wrtsh.hxx>
+#include <view.hxx>
+#include <viewopt.hxx>
+#include <break.hxx>
+#include <pagedesc.hxx>
+#include <poolfmt.hxx>
+
+#include <strings.hrc>
+#include <SwStyleNameMapper.hxx>
+
+void SwBreakDlg::rememberResult()
+{
+ nKind = 0;
+ if (m_xLineBtn->get_active())
+ {
+ nKind = 1;
+ m_eClear = static_cast<SwLineBreakClear>(m_xLineClearBox->get_active());
+ }
+ else if(m_xColumnBtn->get_active())
+ nKind = 2;
+ else if(m_xPageBtn->get_active())
+ {
+ nKind = 3;
+ const int nPos = m_xPageCollBox->get_active();
+ if (nPos != 0 && nPos != -1)
+ {
+ m_aTemplate = m_xPageCollBox->get_active_text();
+ oPgNum.reset();
+ if (m_xPageNumBox->get_active())
+ {
+ oPgNum = o3tl::narrowing<sal_uInt16>(m_xPageNumEdit->get_value());
+ }
+ }
+ }
+}
+
+IMPL_LINK_NOARG(SwBreakDlg, ToggleHdl, weld::Toggleable&, void)
+{
+ CheckEnable();
+}
+
+IMPL_LINK_NOARG(SwBreakDlg, ChangeHdl, weld::ComboBox&, void)
+{
+ CheckEnable();
+}
+
+// Handler for Change Page Number
+IMPL_LINK(SwBreakDlg, PageNumHdl, weld::Toggleable&, rBox, void)
+{
+ if (rBox.get_active())
+ m_xPageNumEdit->set_value(1);
+ else
+ m_xPageNumEdit->set_text(OUString());
+}
+
+// By changing the Page number the checkbox is checked.
+IMPL_LINK_NOARG(SwBreakDlg, PageNumModifyHdl, weld::SpinButton&, void)
+{
+ m_xPageNumBox->set_active(true);
+}
+
+/*
+ * Ok-Handler;
+ * checks whether pagenumber nPage is a legal pagenumber (left pages with even
+ * numbers etc. for a page template with alternating pages)
+ */
+IMPL_LINK_NOARG(SwBreakDlg, OkHdl, weld::Button&, void)
+{
+ if (m_xPageNumBox->get_active())
+ {
+ // In case of differing page descriptions, test validity
+ const int nPos = m_xPageCollBox->get_active();
+ // position 0 says 'Without'.
+ const SwPageDesc *pPageDesc;
+ if (nPos != 0 && nPos != -1)
+ pPageDesc = rSh.FindPageDescByName(m_xPageCollBox->get_active_text(), true);
+ else
+ pPageDesc = &rSh.GetPageDesc(rSh.GetCurPageDesc());
+
+ OSL_ENSURE(pPageDesc, "Page description not found.");
+ const sal_uInt16 nUserPage = sal_uInt16(m_xPageNumEdit->get_value());
+ bool bOk = true;
+ switch(pPageDesc->GetUseOn())
+ {
+ case UseOnPage::Mirror:
+ case UseOnPage::All: break;
+ case UseOnPage::Left: bOk = 0 == nUserPage % 2; break;
+ case UseOnPage::Right: bOk = 1 == nUserPage % 2; break;
+ default:; //prevent warning
+ }
+ if(!bOk)
+ {
+ std::unique_ptr<weld::Dialog> xDialog(Application::CreateMessageDialog(m_xPageNumEdit.get(), VclMessageType::Info,
+ VclButtonsType::Ok, SwResId(STR_ILLEGAL_PAGENUM)));
+ xDialog->run();
+ m_xPageNumEdit->grab_focus();
+ return;
+ }
+ }
+ rememberResult();
+ m_xDialog->response(RET_OK);
+}
+
+SwBreakDlg::SwBreakDlg(weld::Window *pParent, SwWrtShell &rS)
+ : GenericDialogController(pParent, "modules/swriter/ui/insertbreak.ui", "BreakDialog")
+ , m_xLineBtn(m_xBuilder->weld_radio_button("linerb"))
+ , m_xLineClearText(m_xBuilder->weld_label("clearft"))
+ , m_xLineClearBox(m_xBuilder->weld_combo_box("clearlb"))
+ , m_xColumnBtn(m_xBuilder->weld_radio_button("columnrb"))
+ , m_xPageBtn(m_xBuilder->weld_radio_button("pagerb"))
+ , m_xPageCollText(m_xBuilder->weld_label("styleft"))
+ , m_xPageCollBox(m_xBuilder->weld_combo_box("stylelb"))
+ , m_xPageNumBox(m_xBuilder->weld_check_button("pagenumcb"))
+ , m_xPageNumEdit(m_xBuilder->weld_spin_button("pagenumsb"))
+ , m_xOkBtn(m_xBuilder->weld_button("ok"))
+ , rSh(rS)
+ , nKind(0)
+ , bHtmlMode(0 != ::GetHtmlMode(rS.GetView().GetDocShell()))
+{
+ Link<weld::Toggleable&,void> aLk = LINK(this, SwBreakDlg, ToggleHdl);
+ m_xPageBtn->connect_toggled(aLk);
+ m_xLineBtn->connect_toggled(aLk);
+ m_xColumnBtn->connect_toggled(aLk);
+ m_xPageCollBox->connect_changed(LINK(this, SwBreakDlg, ChangeHdl));
+
+ m_xOkBtn->connect_clicked(LINK(this, SwBreakDlg, OkHdl));
+ m_xPageNumBox->connect_toggled(LINK(this, SwBreakDlg, PageNumHdl));
+ m_xPageNumEdit->connect_value_changed(LINK(this, SwBreakDlg, PageNumModifyHdl));
+
+ // Insert page description to Listbox
+ const size_t nCount = rSh.GetPageDescCnt();
+ for (size_t i = 0; i < nCount; ++i)
+ {
+ const SwPageDesc &rPageDesc = rSh.GetPageDesc(i);
+ ::InsertStringSorted("", rPageDesc.GetName(), *m_xPageCollBox, 1 );
+ }
+
+ OUString aFormatName;
+ for (sal_uInt16 i = RES_POOLPAGE_BEGIN; i < RES_POOLPAGE_END; ++i)
+ {
+ aFormatName = SwStyleNameMapper::GetUIName( i, aFormatName );
+ if (m_xPageCollBox->find_text(aFormatName) == -1)
+ ::InsertStringSorted("", aFormatName, *m_xPageCollBox, 1 );
+ }
+ //add landscape page
+ aFormatName = SwStyleNameMapper::GetUIName( RES_POOLPAGE_LANDSCAPE, aFormatName );
+ if (m_xPageCollBox->find_text(aFormatName) == -1)
+ ::InsertStringSorted("", aFormatName, *m_xPageCollBox, 1);
+ CheckEnable();
+ m_xPageNumEdit->set_text(OUString());
+}
+
+void SwBreakDlg::CheckEnable()
+{
+ bool bEnable = true;
+ if ( bHtmlMode )
+ {
+ m_xColumnBtn->set_sensitive(false);
+ m_xPageCollBox->set_sensitive(false);
+ bEnable = false;
+ }
+ else if(rSh.GetFrameType(nullptr,true)
+ & (FrameTypeFlags::FLY_ANY | FrameTypeFlags::HEADER | FrameTypeFlags::FOOTER | FrameTypeFlags::FOOTNOTE))
+ {
+ m_xPageBtn->set_sensitive(false);
+ if (m_xPageBtn->get_active())
+ m_xLineBtn->set_active(true);
+ bEnable = false;
+ }
+ const bool bPage = m_xPageBtn->get_active();
+ m_xPageCollText->set_sensitive(bPage);
+ m_xPageCollBox->set_sensitive(bPage);
+ bool bLine = m_xLineBtn->get_active();
+ m_xLineClearText->set_sensitive(bLine);
+ m_xLineClearBox->set_sensitive(bLine);
+
+ bEnable &= bPage;
+ if ( bEnable )
+ {
+ // position 0 says 'Without' page template.
+ const int nPos = m_xPageCollBox->get_active();
+ if (nPos == 0 || nPos == -1)
+ bEnable = false;
+ }
+ m_xPageNumBox->set_sensitive(bEnable);
+ m_xPageNumEdit->set_sensitive(bEnable);
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */