View Issue Details
| ID | Project | Category | View Status | Date Submitted | Last Update |
|---|---|---|---|---|---|
| 0015939 | Scribus | General | public | 2019-11-13 08:14 | 2019-11-14 19:50 |
| Reporter | ale | Assigned To | ale | ||
| Priority | normal | Severity | feature | Reproducibility | N/A |
| Status | assigned | Resolution | open | ||
| Summary | 0015939: [PATCH] apply master page to pages with a given master page | ||||
| Description | add an option in "apply master page" to apply it to all pages with a specific "master page" (replace master page) | ||||
| Tags | No tags attached. | ||||
| Attached Files | |||||
| Patch | Yes | ||||
|
|
here is a patch: - renames ui/applytemplatedialog.* to ui/applymasterpagedialog.* to match what it does *and* the name of the class inside. - adds masterpage.* with the master utils function i've introduced in 0008115 (so that they can be used by both dialogs; please give feedback in 0015942 so that i can further improve this new file.. and maybe remove a few things from scribusdoc.cpp - adds an .ui file for the dialog - do not update the translation for a modal dialog (am i correct that we can extract the translations from the ui file?) - use a scoped enum class for the page selection types (instead of int) - allow to apply a master page only to pages with a specific master page here is the merge request with appimage (soon): https://gitlab.com/scribus/scribus/merge_requests/16 masterpage-replace.diff (41,323 bytes)
diff --git a/scribus/CMakeLists.txt b/scribus/CMakeLists.txt
index 3a6e69b38..de8ff86bf 100644
--- a/scribus/CMakeLists.txt
+++ b/scribus/CMakeLists.txt
@@ -91,6 +91,7 @@ set(SCRIBUS_UI_SRC
ui/actionsearchdialog.ui
ui/aligndistribute.ui
ui/annot.ui
+ ui/applymasterpagedialogbase.ui
ui/arcvectorbase.ui
ui/arcwidgetbase.ui
ui/charselect.ui
@@ -256,6 +257,7 @@ set(SCRIBUS_MOC_CLASSES
iconmanager.h
latexhelpers.h
loadsaveplugin.h
+ masterpage.h
menumanager.h
navigator.h
notesstyles.h
@@ -317,7 +319,7 @@ set(SCRIBUS_MOC_CLASSES
ui/directionselect.h
ui/annot.h
ui/annota.h
- ui/applytemplatedialog.h
+ ui/applymasterpagedialog.h
ui/arcwidget.h
ui/arcvectordialog.h
ui/arrowchooser.h
@@ -650,6 +652,7 @@ set(SCRIBUS_SOURCES
loadsaveplugin.cpp
localemgr.cpp
marks.cpp
+ masterpage.cpp
menumanager.cpp
mesh.cpp
navigator.cpp
@@ -820,7 +823,7 @@ set(SCRIBUS_SOURCES
ui/directionselect.cpp
ui/annot.cpp
ui/annota.cpp
- ui/applytemplatedialog.cpp
+ ui/applymasterpagedialog.cpp
ui/arcwidget.cpp
ui/arcvectordialog.cpp
ui/arrowchooser.cpp
diff --git a/scribus/masterpage.cpp b/scribus/masterpage.cpp
new file mode 100644
index 000000000..8d53a4993
--- /dev/null
+++ b/scribus/masterpage.cpp
@@ -0,0 +1,66 @@
+/*
+For general Scribus (>=1.3.2) copyright and licensing information please refer
+to the COPYING file provided with the program. Following this notice may exist
+a copyright and/or license notice that predates the release of Scribus 1.3.2
+for which a new license (GPL+exception) is in place.
+*/
+
+#include "masterpage.h"
+
+#include <QString>
+#include <QStringList>
+
+#include "commonstrings.h"
+#include "scribusdoc.h"
+#include "util.h"
+
+MasterPage::MasterPage()
+{
+}
+
+// void MasterPage::setDoc(ScribusDoc* doc)
+// {
+// // TODO: to be done
+// }
+
+// void MasterPage::unsetDoc()
+// {
+// // TODO: to be done
+// }
+
+bool MasterPage::isReservedName(const QString& name)
+{
+ return name == CommonStrings::masterPageNormal ||
+ name == CommonStrings::trMasterPageNormal ||
+ name == CommonStrings::masterPageNormalLeft ||
+ name == CommonStrings::trMasterPageNormalLeft ||
+ name == CommonStrings::masterPageNormalMiddle ||
+ name == CommonStrings::trMasterPageNormalMiddle ||
+ name == CommonStrings::masterPageNormalRight ||
+ name == CommonStrings::trMasterPageNormalRight;
+}
+
+QString MasterPage::getNonReservedName(const QString& name)
+{
+ const QStringList reservedNames = {
+ CommonStrings::masterPageNormal,
+ CommonStrings::trMasterPageNormal,
+ CommonStrings::trMasterPageNormalLeft,
+ CommonStrings::trMasterPageNormalMiddle,
+ CommonStrings::trMasterPageNormalRight
+ };
+ return getUniqueName(name, reservedNames);
+}
+
+QString MasterPage::getTranslatedReservedName(const QString& name)
+{
+ if (name == CommonStrings::masterPageNormal)
+ return CommonStrings::trMasterPageNormal;
+ if (name == CommonStrings::masterPageNormalLeft)
+ return CommonStrings::trMasterPageNormalLeft;
+ if (name == CommonStrings::masterPageNormalMiddle)
+ return CommonStrings::trMasterPageNormalMiddle;
+ if (name == CommonStrings::masterPageNormalRight)
+ return CommonStrings::trMasterPageNormalRight;
+ return name;
+}
diff --git a/scribus/masterpage.h b/scribus/masterpage.h
new file mode 100644
index 000000000..c96f3d8b1
--- /dev/null
+++ b/scribus/masterpage.h
@@ -0,0 +1,43 @@
+/*
+For general Scribus (>=1.3.2) copyright and licensing information please refer
+to the COPYING file provided with the program. Following this notice may exist
+a copyright and/or license notice that predates the release of Scribus 1.3.2
+for which a new license (GPL+exception) is in place.
+*/
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+#ifndef MASTERPAGE_H
+#define MASTERPAGE_H
+
+#include <QObject>
+
+class QString;
+
+class ScribusDoc;
+
+class MasterPage : public QObject
+{
+ Q_OBJECT
+
+public:
+ MasterPage();
+
+ // TODO: to be done
+ // void setDoc(ScribusDoc* doc);
+ // void unsetDoc();
+
+ static bool isReservedName(const QString& name);
+ static QString getNonReservedName(const QString& name);
+ /*!
+ * \retval the current name or, if it's a standard one, the translated version
+ */
+ static QString getTranslatedReservedName(const QString& name);
+};
+
+#endif // MASTERPAGE_H
diff --git a/scribus/scribus.cpp b/scribus/scribus.cpp
index 239ede923..bc9ae6e06 100644
--- a/scribus/scribus.cpp
+++ b/scribus/scribus.cpp
@@ -161,7 +161,7 @@ for which a new license (GPL+exception) is in place.
#include "ui/aligndistribute.h"
#include "ui/annot.h"
#include "ui/annota.h"
-#include "ui/applytemplatedialog.h"
+#include "ui/applymasterpagedialog.h"
#include "ui/arrowchooser.h"
#include "ui/autoform.h"
#include "ui/basepointwidget.h"
@@ -7733,40 +7733,44 @@ void ScribusMainWindow::ApplyMasterPage()
{
Q_ASSERT(!doc->masterPageMode());
- QScopedPointer<ApplyMasterPageDialog> dia(new ApplyMasterPageDialog(this));
- dia->setup(doc, doc->currentPage()->masterPageName());
- if (!dia->exec())
+ ApplyMasterPageDialog dia(this, doc);
+ if (!dia.exec())
return;
- QString masterPageName(dia->getMasterPageName());
- int pageSelection = dia->getPageSelection(); //0=current, 1=even, 2=odd, 3=all
- if (pageSelection == 0) //current page only
+ QString masterPageName(dia.getSelectedName());
+ using Selection = ApplyMasterPageDialog::PagesSelection;
+ auto pageSelection = dia.getPageSelection();
+ if (pageSelection == Selection::current)
Apply_MasterPage(masterPageName, doc->currentPage()->pageNr(), false);
else
{
int startPage, endPage;
- if (dia->usingRange())
+ if (dia.usingRange())
{
- startPage = dia->getFromPage()-1; //Pages start from 0, not 1
- endPage = dia->getToPage();
+ startPage = dia.getFromPage() - 1;
+ endPage = dia.getToPage();
}
else
{
- startPage = pageSelection==1 ? 1 : 0; //if even, startPage is 1 (real page 2)
+ // if even, startPage is 1 (real page 2)
+ startPage = pageSelection == Selection::even ? 1 : 0;
endPage = doc->DocPages.count();
}
- for (int pageNum = startPage; pageNum < endPage; ++pageNum)// +=pageStep)
+
+ const QString fromMasterPage = dia.getFromMasterPage();
+ for (int i = startPage; i < endPage; ++i)
{
- //Increment by 1 and not 2 even for even/odd application as user
- //can select to eg apply to even pages with a single odd page selected
- if (pageSelection == 1 && (pageNum %2 != 0)) //Even, %2!=0 as 1st page is numbered 0
- Apply_MasterPage(masterPageName, pageNum, false);
+ if (dia.usingMasterPage() &&
+ doc->DocPages.at(i)->masterPageName() != fromMasterPage)
+ continue;
+ if (pageSelection == Selection::even && (i %2 != 0))
+ Apply_MasterPage(masterPageName, i, false);
else
- if (pageSelection == 2 && (pageNum %2 == 0)) //Odd, %2==0 as 1st page is numbered 0
- Apply_MasterPage(masterPageName, pageNum, false);
+ if (pageSelection == Selection::odd && (i %2 == 0))
+ Apply_MasterPage(masterPageName, i, false);
else
- if (pageSelection == 3) //All
- Apply_MasterPage(masterPageName, pageNum, false);
+ if (pageSelection == Selection::all)
+ Apply_MasterPage(masterPageName, i, false);
}
}
diff --git a/scribus/ui/applymasterpagedialog.cpp b/scribus/ui/applymasterpagedialog.cpp
new file mode 100644
index 000000000..5e2c21cb5
--- /dev/null
+++ b/scribus/ui/applymasterpagedialog.cpp
@@ -0,0 +1,163 @@
+/*
+For general Scribus (>=1.3.2) copyright and licensing information please refer
+to the COPYING file provided with the program. Following this notice may exist
+a copyright and/or license notice that predates the release of Scribus 1.3.2
+for which a new license (GPL+exception) is in place.
+*/
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+#include "applymasterpagedialog.h"
+
+#include "commonstrings.h"
+#include "masterpage.h"
+#include "scpage.h"
+#include "scribusdoc.h"
+#include "iconmanager.h"
+
+ApplyMasterPageDialog::ApplyMasterPageDialog(QWidget* parent, ScribusDoc* doc) :
+ QDialog(parent)
+{
+ setupUi(this);
+
+ setWindowIcon(IconManager::instance().loadIcon("AppIcon.png"));
+
+ pagesButtonGroup->setId(currentPageButton, static_cast<int>(PagesSelection::current));
+ pagesButtonGroup->setId(allPagesButton, static_cast<int>(PagesSelection::all));
+ pagesButtonGroup->setId(evenPagesButton, static_cast<int>(PagesSelection::even));
+ pagesButtonGroup->setId(oddPagesButton, static_cast<int>(PagesSelection::odd));
+
+ setup(doc);
+
+ connect(pagesButtonGroup, QOverload<int>::of(&QButtonGroup::buttonClicked), this, &ApplyMasterPageDialog::pagesButtonClicked);
+
+ connect(rangeFromSpinBox, QOverload<int>::of(&QSpinBox::valueChanged), this, &ApplyMasterPageDialog::checkRangeFrom);
+ connect(rangeToSpinBox, QOverload<int>::of(&QSpinBox::valueChanged), this, &ApplyMasterPageDialog::checkRangeTo);
+ connect(masterPagesFromCheckBox, &QCheckBox::toggled, this, &ApplyMasterPageDialog::enableMasterPagesFrom);
+ connect(rangeCheckBox, &QCheckBox::toggled, this, &ApplyMasterPageDialog::enableRange);
+
+ connect(okButton, &QPushButton::clicked, this, &ApplyMasterPageDialog::accept);
+ connect(cancelButton, &QPushButton::clicked, this, &ApplyMasterPageDialog::reject);
+}
+
+void ApplyMasterPageDialog::setup(ScribusDoc *doc)
+{
+ const auto current = doc->currentPage()->masterPageName();
+
+ for (const auto& key: doc->MasterNames.keys())
+ {
+ auto tr_name = MasterPage::getTranslatedReservedName(key);
+ masterPagesComboBox->addItem(tr_name, key);
+ masterPagesFromComboBox->addItem(tr_name, key);
+ if (current == key)
+ {
+ int n = masterPagesComboBox->count() - 1;
+ masterPagesComboBox->setCurrentIndex(n);
+ masterPagesFromComboBox->setCurrentIndex(n);
+ }
+ }
+
+ const unsigned int pagesCount = doc->Pages->count();
+ if (pagesCount < 2)
+ evenPagesButton->setEnabled(false);
+ rangeFromSpinBox->setMaximum(pagesCount);
+ rangeFromSpinBox->setValue(doc->currentPage()->pageNr() + 1);
+ rangeToSpinBox->setMaximum(pagesCount);
+ rangeToSpinBox->setValue(static_cast<int>(pagesCount));
+}
+
+QString ApplyMasterPageDialog::getSelectedName()
+{
+ return masterPagesComboBox->currentText();
+}
+
+ApplyMasterPageDialog::PagesSelection ApplyMasterPageDialog::getPageSelection()
+{
+ return static_cast<PagesSelection>(pagesButtonGroup->checkedId());
+}
+
+bool ApplyMasterPageDialog::usingRange()
+{
+ return pagesButtonGroup->checkedId() != static_cast<int>(PagesSelection::current) &&
+ rangeCheckBox->isChecked();
+}
+
+bool ApplyMasterPageDialog::usingMasterPage()
+{
+ return pagesButtonGroup->checkedId() != static_cast<int>(PagesSelection::current) &&
+ masterPagesFromCheckBox->isChecked();
+}
+
+int ApplyMasterPageDialog::getFromPage()
+{
+ assert(rangeCheckBox->isChecked());
+ return static_cast<int>(rangeFromSpinBox->value());
+}
+
+
+int ApplyMasterPageDialog::getToPage()
+{
+ assert(rangeCheckBox->isChecked());
+ return static_cast<int>(rangeToSpinBox->value());
+}
+
+QString ApplyMasterPageDialog::getFromMasterPage()
+{
+ if (!masterPagesFromCheckBox->isChecked())
+ return "";
+ return masterPagesFromComboBox->currentText();
+}
+
+void ApplyMasterPageDialog::pagesButtonClicked(int id)
+{
+ bool enabled = evenPagesButton->isEnabled() &&
+ !(static_cast<PagesSelection>(id) == PagesSelection::current);
+
+ masterPagesFromCheckBox->setEnabled(enabled);
+ masterPagesFromComboBox->setEnabled(enabled && masterPagesFromCheckBox->isChecked());
+ rangeCheckBox->setEnabled(enabled);
+ rangeFromSpinBox->setEnabled(enabled && rangeCheckBox->isChecked());
+ rangeToLabel->setEnabled(enabled);
+ rangeToSpinBox->setEnabled(enabled && rangeCheckBox->isChecked());
+}
+
+void ApplyMasterPageDialog::enableMasterPagesFrom(bool checked)
+{
+ masterPagesFromComboBox->setEnabled(checked);
+}
+
+void ApplyMasterPageDialog::enableRange(bool checked)
+{
+ rangeFromSpinBox->setEnabled(checked);
+ rangeToSpinBox->setEnabled(checked);
+}
+
+void ApplyMasterPageDialog::checkRangeFrom(int value)
+{
+ bool oldFromState = rangeFromSpinBox->blockSignals(true);
+ bool oldToState = rangeToSpinBox->blockSignals(true);
+
+ if (rangeFromSpinBox->value() > rangeToSpinBox->value())
+ rangeToSpinBox->setValue(rangeFromSpinBox->value());
+
+ rangeToSpinBox->blockSignals(oldToState);
+ rangeFromSpinBox->blockSignals(oldFromState);
+}
+
+void ApplyMasterPageDialog::checkRangeTo(int value)
+{
+ bool oldFromState = rangeFromSpinBox->blockSignals(true);
+ bool oldToState = rangeToSpinBox->blockSignals(true);
+
+ if (rangeToSpinBox->value() < rangeFromSpinBox->value())
+ rangeFromSpinBox->setValue(rangeToSpinBox->value());
+
+ rangeToSpinBox->blockSignals(oldToState);
+ rangeFromSpinBox->blockSignals(oldFromState);
+}
diff --git a/scribus/ui/applymasterpagedialog.h b/scribus/ui/applymasterpagedialog.h
new file mode 100644
index 000000000..0890e4d1f
--- /dev/null
+++ b/scribus/ui/applymasterpagedialog.h
@@ -0,0 +1,64 @@
+/*
+For general Scribus (>=1.3.2) copyright and licensing information please refer
+to the COPYING file provided with the program. Following this notice may exist
+a copyright and/or license notice that predates the release of Scribus 1.3.2
+for which a new license (GPL+exception) is in place.
+*/
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+#ifndef APPLYMASTERPAGEDIALOG_H
+#define APPLYMASTERPAGEDIALOG_H
+
+#include "ui_applymasterpagedialogbase.h"
+
+#include <QDialog>
+#include <QString>
+
+#include "scribusapi.h"
+#include "scribusdoc.h"
+#include "scpage.h"
+#include "ui/scrspinbox.h"
+
+class ScribusDoc;
+
+class SCRIBUS_API ApplyMasterPageDialog : public QDialog, Ui::ApplyMasterPageDialogBase
+{
+ Q_OBJECT
+
+public:
+ enum class PagesSelection {
+ current,
+ even,
+ odd,
+ all
+ };
+
+ ApplyMasterPageDialog(QWidget* parent, ScribusDoc* doc);
+ ~ApplyMasterPageDialog() = default;
+
+ QString getSelectedName();
+ PagesSelection getPageSelection();
+ bool usingRange();
+ bool usingMasterPage();
+ int getFromPage();
+ int getToPage();
+ QString getFromMasterPage();
+
+private:
+ void setup(ScribusDoc* doc);
+
+private slots:
+ void pagesButtonClicked(int id);
+ void enableMasterPagesFrom(bool checked);
+ void enableRange(bool checked);
+ void checkRangeFrom(int id);
+ void checkRangeTo(int id);
+};
+
+#endif // APPLYMASTERPAGEDIALOG_H
diff --git a/scribus/ui/applymasterpagedialogbase.ui b/scribus/ui/applymasterpagedialogbase.ui
new file mode 100644
index 000000000..a8363078c
--- /dev/null
+++ b/scribus/ui/applymasterpagedialogbase.ui
@@ -0,0 +1,257 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>ApplyMasterPageDialogBase</class>
+ <widget class="QDialog" name="ApplyMasterPageDialogBase">
+ <property name="windowModality">
+ <enum>Qt::ApplicationModal</enum>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>274</width>
+ <height>256</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>Dialog</string>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout">
+ <item>
+ <widget class="QLabel" name="applyLabel">
+ <property name="text">
+ <string>Apply &Master Page</string>
+ </property>
+ <property name="buddy">
+ <cstring>masterPagesComboBox</cstring>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QComboBox" name="masterPagesComboBox"/>
+ </item>
+ <item>
+ <widget class="QLabel" name="applyToLabel">
+ <property name="text">
+ <string>to</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <widget class="QGroupBox" name="groupBox">
+ <property name="title">
+ <string/>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout_2">
+ <item>
+ <widget class="QRadioButton" name="currentPageButton">
+ <property name="text">
+ <string>Current &Page</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ <attribute name="buttonGroup">
+ <string notr="true">pagesButtonGroup</string>
+ </attribute>
+ </widget>
+ </item>
+ <item>
+ <widget class="QRadioButton" name="allPagesButton">
+ <property name="text">
+ <string>&All Pages</string>
+ </property>
+ <property name="checked">
+ <bool>false</bool>
+ </property>
+ <attribute name="buttonGroup">
+ <string notr="true">pagesButtonGroup</string>
+ </attribute>
+ </widget>
+ </item>
+ <item>
+ <widget class="QRadioButton" name="evenPagesButton">
+ <property name="text">
+ <string>&Even Pages</string>
+ </property>
+ <attribute name="buttonGroup">
+ <string notr="true">pagesButtonGroup</string>
+ </attribute>
+ </widget>
+ </item>
+ <item>
+ <widget class="QRadioButton" name="oddPagesButton">
+ <property name="text">
+ <string>O&dd Pages</string>
+ </property>
+ <attribute name="buttonGroup">
+ <string notr="true">pagesButtonGroup</string>
+ </attribute>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_2">
+ <item>
+ <widget class="QCheckBox" name="masterPagesFromCheckBox">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>With Ma&ster Page</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QComboBox" name="masterPagesFromComboBox">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer_3">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_3">
+ <item>
+ <widget class="QCheckBox" name="rangeCheckBox">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>&Within Range</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QSpinBox" name="rangeFromSpinBox">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="minimum">
+ <number>1</number>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLabel" name="rangeToLabel">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>to</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QSpinBox" name="rangeToSpinBox">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="minimum">
+ <number>1</number>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer_2">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <spacer name="verticalSpacer">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>40</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_4">
+ <item>
+ <spacer name="horizontalSpacer_4">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QPushButton" name="okButton">
+ <property name="text">
+ <string>&Ok</string>
+ </property>
+ <property name="default">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="cancelButton">
+ <property name="text">
+ <string>&Cancel</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </widget>
+ <resources/>
+ <connections/>
+ <buttongroups>
+ <buttongroup name="pagesButtonGroup"/>
+ </buttongroups>
+</ui>
diff --git a/scribus/ui/applytemplatedialog.cpp b/scribus/ui/applytemplatedialog.cpp
deleted file mode 100644
index 5fc56c9ee..000000000
--- a/scribus/ui/applytemplatedialog.cpp
+++ /dev/null
@@ -1,290 +0,0 @@
-/*
-For general Scribus (>=1.3.2) copyright and licensing information please refer
-to the COPYING file provided with the program. Following this notice may exist
-a copyright and/or license notice that predates the release of Scribus 1.3.2
-for which a new license (GPL+exception) is in place.
-*/
-/***************************************************************************
- * *
- * This program is free software; you can redistribute it and/or modify *
- * it under the terms of the GNU General Public License as published by *
- * the Free Software Foundation; either version 2 of the License, or *
- * (at your option) any later version. *
- * *
- ***************************************************************************/
-#include "applytemplatedialog.h"
-
-#include <QCheckBox>
-#include <QComboBox>
-#include <QEvent>
-#include <QGroupBox>
-#include <QHBoxLayout>
-#include <QLabel>
-#include <QPushButton>
-#include <QRadioButton>
-#include <QSpacerItem>
-#include <QSpinBox>
-#include <QToolTip>
-#include <QVBoxLayout>
-
-#include "commonstrings.h"
-#include "scpage.h"
-#include "scribusdoc.h"
-#include "iconmanager.h"
-
-enum {
- CurrentPage,
- EvenPages,
- OddPages,
- AllPages
-};
-
-/*
- * Constructs a ApplyMasterPageDialog as a child of 'parent', with the
- * name 'name' and widget flags set to 'f'.
- *
- * The dialog will by default be modeless, unless you set 'modal' to
- * true to construct a modal dialog.
- */
-ApplyMasterPageDialog::ApplyMasterPageDialog( QWidget* parent ) : QDialog( parent )
-{
- setModal(true);
- setWindowTitle( tr( "Possible Hyphenation" ));
- setWindowIcon(IconManager::instance().loadIcon("AppIcon.png"));
- ApplyMasterPageDialogLayout = new QVBoxLayout(this);
- ApplyMasterPageDialogLayout->setMargin(10);
- ApplyMasterPageDialogLayout->setSpacing(5);
-
- templateNameLayout = new QHBoxLayout;
- templateNameLayout->setMargin(0);
- templateNameLayout->setSpacing(5);
-
- masterPageLabel = new QLabel( this );
- templateNameLayout->addWidget( masterPageLabel );
- spacer2 = new QSpacerItem( 1, 1, QSizePolicy::Expanding, QSizePolicy::Minimum );
- templateNameLayout->addItem( spacer2 );
-
- masterPageComboBox = new QComboBox(this);
- masterPageComboBox->setEditable(false);
- templateNameLayout->addWidget( masterPageComboBox );
- ApplyMasterPageDialogLayout->addLayout( templateNameLayout );
-
- applyToPageButtonGroup = new QGroupBox(this);
- applyToPageButtonGroup->setMinimumSize( QSize( 250, 0 ) );
- applyToPageButtonGroupLayout = new QVBoxLayout(applyToPageButtonGroup);
- applyToPageButtonGroupLayout->setSpacing( 5 );
- applyToPageButtonGroupLayout->setMargin( 10 );
-
- currentPageRadioButton = new QRadioButton( applyToPageButtonGroup );
- currentPageRadioButton->setChecked( true );
- applyToPageButtonGroupLayout->addWidget( currentPageRadioButton );
-
- evenPagesRadioButton = new QRadioButton( applyToPageButtonGroup );
- applyToPageButtonGroupLayout->addWidget( evenPagesRadioButton );
-
- oddPagesRadioButton = new QRadioButton( applyToPageButtonGroup );
- applyToPageButtonGroupLayout->addWidget( oddPagesRadioButton );
-
- allPagesRadioButton = new QRadioButton( applyToPageButtonGroup );
- applyToPageButtonGroupLayout->addWidget( allPagesRadioButton );
-
- rangeLayout = new QHBoxLayout;
- rangeLayout->setSpacing( 5 );
- rangeLayout->setMargin( 0 );
-
- useRangeCheckBox = new QCheckBox( applyToPageButtonGroup );
- useRangeCheckBox->setEnabled( false );
- rangeLayout->addWidget( useRangeCheckBox );
-
- fromPageSpinBox = new ScrSpinBox( applyToPageButtonGroup );
- fromPageSpinBox->setEnabled( false );
- fromPageSpinBox->setMinimum( 1 );
- fromPageSpinBox->setDecimals(0);
- fromPageSpinBox->setSuffix("");
- rangeLayout->addWidget( fromPageSpinBox );
-
- toPageLabel = new QLabel( applyToPageButtonGroup );
- rangeLayout->addWidget( toPageLabel );
-
- toPageSpinBox = new ScrSpinBox( applyToPageButtonGroup );
- toPageSpinBox->setEnabled( false );
- toPageSpinBox->setMinimum( 1 );
- toPageSpinBox->setDecimals(0);
- toPageSpinBox->setSuffix("");
- rangeLayout->addWidget( toPageSpinBox );
- spacer3 = new QSpacerItem( 1, 1, QSizePolicy::Expanding, QSizePolicy::Minimum );
- rangeLayout->addItem( spacer3 );
- applyToPageButtonGroupLayout->addLayout( rangeLayout );
- ApplyMasterPageDialogLayout->addWidget( applyToPageButtonGroup );
-
- layout8 = new QHBoxLayout;
- layout8->setSpacing( 5 );
- layout8->setMargin( 0 );
- spacer1 = new QSpacerItem( 1, 1, QSizePolicy::Expanding, QSizePolicy::Minimum );
- layout8->addItem( spacer1 );
-
- okButton = new QPushButton( this );
- layout8->addWidget( okButton );
-
- cancelButton = new QPushButton( this );
- layout8->addWidget( cancelButton );
- ApplyMasterPageDialogLayout->addLayout( layout8 );
- languageChange();
- resize( QSize(272, 230).expandedTo(minimumSizeHint()) );
-
- // signals and slots connections
- connect( useRangeCheckBox, SIGNAL( toggled(bool) ), this, SLOT( enableRange(bool) ) );
- connect( currentPageRadioButton, SIGNAL( clicked() ), this, SLOT( singleSelectable() ) );
- connect( evenPagesRadioButton, SIGNAL( clicked() ), this, SLOT( rangeSelectable() ) );
- connect( oddPagesRadioButton, SIGNAL( clicked() ), this, SLOT( rangeSelectable() ) );
- connect( allPagesRadioButton, SIGNAL( clicked() ), this, SLOT( rangeSelectable() ) );
- connect( fromPageSpinBox, SIGNAL( valueChanged(double) ), this, SLOT( checkRangeFrom() ) );
- connect( toPageSpinBox, SIGNAL( valueChanged(double) ), this, SLOT( checkRangeTo() ) );
- connect( okButton, SIGNAL( clicked() ), this, SLOT( accept() ) );
- connect( cancelButton, SIGNAL( clicked() ), this, SLOT( reject() ) );
-
- // buddies
- masterPageLabel->setBuddy( masterPageComboBox );
-}
-
-/*
- * Destroys the object and frees any allocated resources
- */
-ApplyMasterPageDialog::~ApplyMasterPageDialog()
-{
- // no need to delete child widgets, Qt does it all for us
-}
-
-void ApplyMasterPageDialog::setup(ScribusDoc *doc, QString Nam)
-{
- QString na = Nam == CommonStrings::masterPageNormal ? CommonStrings::trMasterPageNormal : Nam, in;
- int cc = 0;
- for (QMap<QString,int>::Iterator it = doc->MasterNames.begin(); it != doc->MasterNames.end(); ++it)
- {
- in = it.key() == CommonStrings::masterPageNormal ? CommonStrings::trMasterPageNormal : it.key();
- masterPageComboBox->addItem(in, it.key());
- if (in == na)
- masterPageComboBox->setCurrentIndex(cc);
- ++cc;
- }
- const unsigned int docPagesCount = doc->Pages->count();
- if (docPagesCount < 2)
- evenPagesRadioButton->setEnabled(false);
- fromPageSpinBox->setMaximum(docPagesCount);
- fromPageSpinBox->setValue(doc->currentPage()->pageNr()+1);
- toPageSpinBox->setMaximum(docPagesCount);
- toPageSpinBox->setValue(static_cast<int>(docPagesCount));
-}
-
-
-QString ApplyMasterPageDialog::getMasterPageName()
-{
- int currentIndex = masterPageComboBox->currentIndex();
- return masterPageComboBox->itemData(currentIndex).toString();
-}
-
-
-int ApplyMasterPageDialog::getPageSelection()
-{
- if (currentPageRadioButton->isChecked())
- return CurrentPage;
- if (evenPagesRadioButton->isChecked())
- return EvenPages;
- if (oddPagesRadioButton->isChecked())
- return OddPages;
- return AllPages;
-}
-
-void ApplyMasterPageDialog::checkRangeFrom()
-{
- disconnect(fromPageSpinBox, SIGNAL(valueChanged(double)), this, SLOT(checkRangeFrom()));
- disconnect(toPageSpinBox, SIGNAL(valueChanged(double)), this, SLOT(checkRangeTo()));
- if (fromPageSpinBox->value() > toPageSpinBox->value())
- toPageSpinBox->setValue(fromPageSpinBox->value());
- connect(fromPageSpinBox, SIGNAL(valueChanged(double)), this, SLOT(checkRangeFrom()));
- connect(toPageSpinBox, SIGNAL(valueChanged(double)), this, SLOT(checkRangeTo()));
-}
-
-void ApplyMasterPageDialog::checkRangeTo()
-{
- disconnect(fromPageSpinBox, SIGNAL(valueChanged(double)), this, SLOT(checkRangeFrom()));
- disconnect(toPageSpinBox, SIGNAL(valueChanged(double)), this, SLOT(checkRangeTo()));
- if (toPageSpinBox->value() < fromPageSpinBox->value())
- fromPageSpinBox->setValue(toPageSpinBox->value());
- connect(fromPageSpinBox, SIGNAL(valueChanged(double)), this, SLOT(checkRangeFrom()));
- connect(toPageSpinBox, SIGNAL(valueChanged(double)), this, SLOT(checkRangeTo()));
-}
-
-void ApplyMasterPageDialog::enableRange( bool enabled )
-{
- fromPageSpinBox->setEnabled(enabled);
- toPageSpinBox->setEnabled(enabled);
-}
-
-void ApplyMasterPageDialog::rangeSelectable()
-{
- useRangeCheckBox->setEnabled(true);
- enableRange(useRangeCheckBox->isChecked());
-}
-
-void ApplyMasterPageDialog::singleSelectable()
-{
- useRangeCheckBox->setEnabled(false);
- fromPageSpinBox->setEnabled(false);
- toPageSpinBox->setEnabled(false);
-}
-
-
-bool ApplyMasterPageDialog::usingRange()
-{
- return useRangeCheckBox->isChecked();
-}
-
-
-int ApplyMasterPageDialog::getFromPage()
-{
- if (useRangeCheckBox->isChecked())
- return static_cast<int>(fromPageSpinBox->value());
- return -1;
-}
-
-
-int ApplyMasterPageDialog::getToPage()
-{
- if (useRangeCheckBox->isChecked())
- return static_cast<int>(toPageSpinBox->value());
- return -1;
-}
-
-void ApplyMasterPageDialog::changeEvent(QEvent *e)
-{
- if (e->type() == QEvent::LanguageChange)
- {
- languageChange();
- }
- else
- QWidget::changeEvent(e);
-}
-
-void ApplyMasterPageDialog::languageChange()
-{
- setWindowTitle( tr( "Apply Master Page" ) );
- masterPageLabel->setText( tr( "&Master Page:" ) );
- applyToPageButtonGroup->setTitle( tr( "Apply to" ) );
- currentPageRadioButton->setText( tr( "Current &Page" ) );
- currentPageRadioButton->setShortcut( QKeySequence( tr( "Alt+P" ) ) );
- evenPagesRadioButton->setText( tr( "&Even Pages" ) );
- evenPagesRadioButton->setShortcut( QKeySequence( tr( "Alt+E" ) ) );
- oddPagesRadioButton->setText( tr( "O&dd Pages" ) );
- oddPagesRadioButton->setShortcut( QKeySequence( tr( "Alt+D" ) ) );
- allPagesRadioButton->setText( tr( "&All Pages" ) );
- allPagesRadioButton->setShortcut( QKeySequence( tr( "Alt+A" ) ) );
- useRangeCheckBox->setText( tr( "&Within Range" ) );
- useRangeCheckBox->setShortcut( QKeySequence( tr( "Alt+W" ) ) );
- useRangeCheckBox->setToolTip( "<qt>" + tr( "Apply the selected master page to even, odd or all pages within the following range") + "</qt>" );
- toPageLabel->setText( tr( "to" ) );
- okButton->setText( CommonStrings::tr_OK );
- okButton->setShortcut( QKeySequence( tr( "Alt+O" ) ) );
- cancelButton->setText( CommonStrings::tr_Cancel );
- cancelButton->setShortcut( QKeySequence( tr( "Alt+C" ) ) );
-}
diff --git a/scribus/ui/applytemplatedialog.h b/scribus/ui/applytemplatedialog.h
deleted file mode 100644
index 2ca5d02d3..000000000
--- a/scribus/ui/applytemplatedialog.h
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
-For general Scribus (>=1.3.2) copyright and licensing information please refer
-to the COPYING file provided with the program. Following this notice may exist
-a copyright and/or license notice that predates the release of Scribus 1.3.2
-for which a new license (GPL+exception) is in place.
-*/
-/***************************************************************************
- * *
- * This program is free software; you can redistribute it and/or modify *
- * it under the terms of the GNU General Public License as published by *
- * the Free Software Foundation; either version 2 of the License, or *
- * (at your option) any later version. *
- * *
- ***************************************************************************/
-#ifndef APPLYMASTERPAGEDIALOG_H
-#define APPLYMASTERPAGEDIALOG_H
-
-#include <QDialog>
-#include <QString>
-
-#include "scribusapi.h"
-#include "scribusdoc.h"
-#include "scpage.h"
-#include "ui/scrspinbox.h"
-
-class QCheckBox;
-class QComboBox;
-class QEvent;
-class QGroupBox;
-class QHBoxLayout;
-class QLabel;
-class QPushButton;
-class QRadioButton;
-class QSpacerItem;
-class QVBoxLayout;
-
-class SCRIBUS_API ApplyMasterPageDialog : public QDialog
-{
- Q_OBJECT
-
-public:
- ApplyMasterPageDialog( QWidget* parent = 0 );
- ~ApplyMasterPageDialog();
-
- virtual void changeEvent(QEvent *e);
-
- QLabel* masterPageLabel;
- QComboBox* masterPageComboBox;
- QGroupBox* applyToPageButtonGroup;
- QRadioButton* currentPageRadioButton;
- QRadioButton* evenPagesRadioButton;
- QRadioButton* oddPagesRadioButton;
- QRadioButton* allPagesRadioButton;
- QCheckBox* useRangeCheckBox;
- ScrSpinBox* fromPageSpinBox;
- QLabel* toPageLabel;
- ScrSpinBox* toPageSpinBox;
- QPushButton* okButton;
- QPushButton* cancelButton;
-
- virtual void setup( ScribusDoc * view, QString Nam );
- virtual QString getMasterPageName();
- virtual int getPageSelection();
- virtual bool usingRange();
- virtual int getFromPage();
- virtual int getToPage();
-
-protected:
- QVBoxLayout* ApplyMasterPageDialogLayout;
- QHBoxLayout* templateNameLayout;
- QSpacerItem* spacer2;
- QVBoxLayout* applyToPageButtonGroupLayout;
- QHBoxLayout* rangeLayout;
- QSpacerItem* spacer3;
- QHBoxLayout* layout8;
- QSpacerItem* spacer1;
-
-protected slots:
- virtual void languageChange();
-
-private slots:
- virtual void checkRangeFrom();
- virtual void checkRangeTo();
- virtual void enableRange( bool enabled );
- virtual void rangeSelectable();
- virtual void singleSelectable();
-
-};
-
-#endif // APPLYMASTERPAGEDIALOG_H
diff --git a/scribus/ui/pagepalette_masterpages.cpp b/scribus/ui/pagepalette_masterpages.cpp
index 8490292a4..c439277b5 100644
--- a/scribus/ui/pagepalette_masterpages.cpp
+++ b/scribus/ui/pagepalette_masterpages.cpp
@@ -26,6 +26,7 @@ for which a new license (GPL+exception) is in place.
#include "canvasmode.h"
#include "commonstrings.h"
#include "iconmanager.h"
+#include "masterpage.h"
#include "mergedoc.h"
#include "newtemp.h"
#include "pagestructs.h"
@@ -154,7 +155,7 @@ void PagePalette_MasterPages::deleteMasterPage()
{
m_currentPage = delItem->text();
- if (isReservedName(m_currentPage))
+ if (MasterPage::isReservedName(m_currentPage))
continue;
QString extraWarn = "";
@@ -213,7 +214,7 @@ void PagePalette_MasterPages::duplicateMasterPage()
if (name.isEmpty())
return;
- name = getNonReservedName(name);
+ name = MasterPage::getNonReservedName(name);
name = getUniqueName(name, m_doc->MasterNames);
PrefsManager& prefsManager = PrefsManager::instance();
@@ -322,7 +323,7 @@ void PagePalette_MasterPages::newMasterPage()
if (name.isEmpty())
return;
- name = getNonReservedName(name);
+ name = MasterPage::getNonReservedName(name);
name = getUniqueName(name, m_doc->MasterNames);
m_doc->setCurrentPage(m_doc->addMasterPage(nr, name));
@@ -457,7 +458,7 @@ void PagePalette_MasterPages::updateMasterPageList(QString masterPageName)
mpName = CommonStrings::trMasterPageNormal;
QListWidgetItem* mpItem = new QListWidgetItem(mpName);
- if (!isReservedName(mpName))
+ if (!MasterPage::isReservedName(mpName))
mpItem->setFlags(mpItem->flags() |= Qt::ItemIsEditable);
else
mpItem->setFlags(mpItem->flags() &= ~Qt::ItemIsEditable);
@@ -504,7 +505,7 @@ void PagePalette_MasterPages::renameMasterPage(QListWidgetItem * item)
// masterPageListBox->blockSignals(sigBlocked);
// }
- if (newName.isEmpty() || isReservedName(newName) ||
+ if (newName.isEmpty() || MasterPage::isReservedName(newName) ||
!m_doc->MasterNames.contains(oldName) ||
m_doc->MasterNames.contains(newName))
{
@@ -538,43 +539,3 @@ void PagePalette_MasterPages::changeEvent(QEvent *e)
QWidget::changeEvent(e);
}
-
-// FIXME: move to a new masterpages.h
-bool PagePalette_MasterPages::isReservedName(const QString& name) const
-{
- return name == CommonStrings::masterPageNormal ||
- name == CommonStrings::trMasterPageNormal ||
- name == CommonStrings::masterPageNormalLeft ||
- name == CommonStrings::trMasterPageNormalLeft ||
- name == CommonStrings::masterPageNormalMiddle ||
- name == CommonStrings::trMasterPageNormalMiddle ||
- name == CommonStrings::masterPageNormalRight ||
- name == CommonStrings::trMasterPageNormalRight;
-}
-
-// FIXME: move to a new masterpages.h
-QString PagePalette_MasterPages::getNonReservedName(const QString& name) const
-{
- const QStringList reservedNames = {
- CommonStrings::masterPageNormal,
- CommonStrings::trMasterPageNormal,
- CommonStrings::trMasterPageNormalLeft,
- CommonStrings::trMasterPageNormalMiddle,
- CommonStrings::trMasterPageNormalRight
- };
- return getUniqueName(name, reservedNames);
-}
-
-// FIXME: move to a new masterpages.h
-QString PagePalette_MasterPages::getTranslatedReservedName(const QString& name) const
-{
- if (name == CommonStrings::masterPageNormal)
- return CommonStrings::trMasterPageNormal;
- if (name == CommonStrings::masterPageNormalLeft)
- return CommonStrings::trMasterPageNormalLeft;
- if (name == CommonStrings::masterPageNormalMiddle)
- return CommonStrings::trMasterPageNormalMiddle;
- if (name == CommonStrings::masterPageNormalRight)
- return CommonStrings::trMasterPageNormalRight;
- return name;
-}
diff --git a/scribus/ui/pagepalette_masterpages.h b/scribus/ui/pagepalette_masterpages.h
index 9939e4b60..6aead7bc4 100644
--- a/scribus/ui/pagepalette_masterpages.h
+++ b/scribus/ui/pagepalette_masterpages.h
@@ -53,13 +53,6 @@ protected:
void changeEvent(QEvent *e) override;
- bool isReservedName(const QString& name) const;
- QString getNonReservedName(const QString& name) const;
- /*!
- * \retval the current name or, if it's a standard one, the translated version
- */
- QString getTranslatedReservedName(const QString& name) const;
-
private slots:
void duplicateMasterPage();
void deleteMasterPage();
|
| Date Modified | Username | Field | Change |
|---|---|---|---|
| 2019-11-13 08:14 | ale | New Issue | |
| 2019-11-13 08:14 | ale | Assigned To | => ale |
| 2019-11-13 08:14 | ale | Status | new => assigned |
| 2019-11-13 09:19 | jghali | Severity | minor => feature |
| 2019-11-14 19:49 | ale | File Added: masterpage-replace.diff | |
| 2019-11-14 19:49 | ale | Note Added: 0047079 | |
| 2019-11-14 19:50 | ale | Summary | apply master page to pages with a given master page => [PATCH] apply master page to pages with a given master page |
| 2019-11-14 19:50 | ale | Patch | No => Yes |