Index: resources/iconsets/1_7_0/16/page-binding-left.svg
===================================================================
--- resources/iconsets/1_7_0/16/page-binding-left.svg (nicht existent)
+++ resources/iconsets/1_7_0/16/page-binding-left.svg (Arbeitskopie)
@@ -0,0 +1,3 @@
+
Index: resources/iconsets/1_7_0/16/page-binding-right.svg
===================================================================
--- resources/iconsets/1_7_0/16/page-binding-right.svg (nicht existent)
+++ resources/iconsets/1_7_0/16/page-binding-right.svg (Arbeitskopie)
@@ -0,0 +1,3 @@
+
Index: resources/iconsets/1_7_0/1_7_0.xml
===================================================================
--- resources/iconsets/1_7_0/1_7_0.xml (Revision 27164)
+++ resources/iconsets/1_7_0/1_7_0.xml (Arbeitskopie)
@@ -385,6 +385,8 @@
+
+
Index: scribus/plugins/fileloader/scribus171format/scribus171format.cpp
===================================================================
--- scribus/plugins/fileloader/scribus171format/scribus171format.cpp (Revision 27164)
+++ scribus/plugins/fileloader/scribus171format/scribus171format.cpp (Arbeitskopie)
@@ -2533,6 +2533,7 @@
m_Doc->setPageOrientation(attrs.valueAsInt("ORIENTATION", 0));
m_Doc->FirstPnum = attrs.valueAsInt("FIRSTNUM", 1);
m_Doc->setPagePositioning(attrs.valueAsInt("BOOK", 0));
+ m_Doc->setBindingDirection(attrs.valueAsInt("BINDINGDIRECTION", 0));
m_Doc->setUsesAutomaticTextFrames( attrs.valueAsInt("AUTOTEXT") );
m_Doc->PageSp = attrs.valueAsInt("AUTOSPALTEN");
@@ -2599,6 +2600,7 @@
m_Doc->setPageOrientation(attrs.valueAsInt("PageOrientation", 0));
m_Doc->FirstPnum = attrs.valueAsInt("FirstPageNumber", 1);
m_Doc->setPagePositioning(attrs.valueAsInt("PagePositioning", 0));
+ m_Doc->setBindingDirection(attrs.valueAsInt("BindingDirection", 0));
m_Doc->setUsesAutomaticTextFrames( attrs.valueAsInt("AutomaticTextFrames") );
m_Doc->PageSp = attrs.valueAsInt("AutomaticTextFrameColumnCount");
Index: scribus/plugins/fileloader/scribus171format/scribus171format_save.cpp
===================================================================
--- scribus/plugins/fileloader/scribus171format/scribus171format_save.cpp (Revision 27164)
+++ scribus/plugins/fileloader/scribus171format/scribus171format_save.cpp (Arbeitskopie)
@@ -336,6 +336,7 @@
docu.writeAttribute("PageSize", m_Doc->pageSize());
docu.writeAttribute("FirstPageNumber", m_Doc->FirstPnum);
docu.writeAttribute("PagePositioning", m_Doc->pagePositioning());
+ docu.writeAttribute("BindingDirection", m_Doc->bindingDirection());
if (m_Doc->usesAutomaticTextFrames())
docu.writeAttribute("AutomaticTextFrames", 1);
docu.writeAttribute("AutomaticTextFrameColumnCount", m_Doc->PageSp);
Index: scribus/plugins/scriptplugin/cmddoc.cpp
===================================================================
--- scribus/plugins/scriptplugin/cmddoc.cpp (Revision 27164)
+++ scribus/plugins/scriptplugin/cmddoc.cpp (Arbeitskopie)
@@ -15,22 +15,20 @@
#include
-/*
-newDocument(size, margins, orientation, firstPageNumber,
- unit, pagesType, firstPageOrder)*/
PyObject *scribus_newdocument(PyObject* /* self */, PyObject* args)
{
double topMargin, bottomMargin, leftMargin, rightMargin;
double pageWidth, pageHeight;
int orientation, firstPageNr, unit, pagesType, firstPageOrder, numPages;
+ int bindingDirection = 0;
PyObject *p, *m;
- if ((!PyArg_ParseTuple(args, "OOiiiiii", &p, &m, &orientation,
+ if ((!PyArg_ParseTuple(args, "OOiiiiii|i", &p, &m, &orientation,
&firstPageNr, &unit,
&pagesType,
&firstPageOrder,
- &numPages)) ||
+ &numPages, &bindingDirection)) ||
(!PyArg_ParseTuple(p, "dd", &pageWidth, &pageHeight)) ||
(!PyArg_ParseTuple(m, "dddd", &leftMargin, &rightMargin,
&topMargin, &bottomMargin)))
@@ -39,12 +37,8 @@
numPages = 1;
if (pagesType == 0)
{
- // facingPages = 0;
firstPageOrder = 0;
}
-// else
-// facingPages = 1;
- // checking the bounds
if (pagesType < firstPageOrder)
{
PyErr_SetString(ScribusException, QObject::tr("firstPageOrder is bigger than allowed.","python error").toUtf8().constData());
@@ -71,7 +65,8 @@
// columnDistance, numberCols, autoframes,
0, 1, false,
pagesType, unit, firstPageOrder,
- orientation, firstPageNr, "Custom", true, numPages);
+ orientation, firstPageNr, "Custom", true,
+ numPages, true, 0, bindingDirection);
ScCore->primaryMainWindow()->doc->setPageSetFirstPage(pagesType, firstPageOrder);
return PyLong_FromLong(static_cast(ret));
Index: scribus/plugins/scriptplugin/cmddoc.h
===================================================================
--- scribus/plugins/scriptplugin/cmddoc.h (Revision 27164)
+++ scribus/plugins/scriptplugin/cmddoc.h (Arbeitskopie)
@@ -14,7 +14,7 @@
PyDoc_STRVAR(scribus_newdocument__doc__,
QT_TR_NOOP("newDocument(size, margins, orientation, firstPageNumber,\n\
- unit, pagesType, firstPageOrder, numPages) -> bool\n\
+ unit, pagesType, firstPageOrder, numPages, bindingDirection) -> bool\n\
\n\
Creates a new document and returns true if successful. The parameters have the\n\
following meaning:\n\
@@ -42,8 +42,10 @@
firstPageOrder = What is position of first page in the document.\n\
Indexed from 0 (0 = first).\n\
\n\
-numPage = Number of pages to be created.\n\
+numPages = Number of pages to be created.\n\
\n\
+bindingDirection = 0 = LTR, 1 = RTL (optional, defaults to 0).\n\
+\n\
The values for width, height and the margins are expressed in the given unit\n\
for the document. PAPER_* constants are expressed in points. If your document\n\
is not in points, make sure to account for this.\n\
Index: scribus/prefsmanager.cpp
===================================================================
--- scribus/prefsmanager.cpp (Revision 27164)
+++ scribus/prefsmanager.cpp (Arbeitskopie)
@@ -455,6 +455,7 @@
pageS.pageNames.append(CommonStrings::pageLocRight);
appPrefs.pageSets.append(pageS);
appPrefs.docSetupPrefs.pagePositioning = singlePage;
+ appPrefs.docSetupPrefs.bindingDirection = 0;
appPrefs.fontPrefs.askBeforeSubstitute = true;
appPrefs.miscPrefs.haveStylePreview = true;
appPrefs.miscPrefs.saveEmergencyFile = true;
@@ -1385,6 +1386,7 @@
deDocumentSetup.setAttribute("MarginRight", ScCLocale::toQStringC(appPrefs.docSetupPrefs.margins.right()));
deDocumentSetup.setAttribute("MarginPreset", appPrefs.docSetupPrefs.marginPreset);
deDocumentSetup.setAttribute("PagePositioning", appPrefs.docSetupPrefs.pagePositioning);
+ deDocumentSetup.setAttribute("BindingDirection", appPrefs.docSetupPrefs.bindingDirection);
deDocumentSetup.setAttribute("AutoSave", static_cast(appPrefs.docSetupPrefs.AutoSave));
deDocumentSetup.setAttribute("AutoSaveTime", appPrefs.docSetupPrefs.AutoSaveTime);
deDocumentSetup.setAttribute("AutoSaveCount", appPrefs.docSetupPrefs.AutoSaveCount);
@@ -2080,6 +2082,7 @@
appPrefs.docSetupPrefs.margins.setRight(ScCLocale::toDoubleC(dc.attribute("MarginRight"), 9.0));
appPrefs.docSetupPrefs.marginPreset = dc.attribute("MarginPreset", "0").toInt();
appPrefs.docSetupPrefs.pagePositioning = dc.attribute("PagePositioning", "0").toInt();
+ appPrefs.docSetupPrefs.bindingDirection = dc.attribute("BindingDirection", "0").toInt();
appPrefs.docSetupPrefs.AutoSave = static_cast(dc.attribute("AutoSave", "0").toInt());
appPrefs.docSetupPrefs.AutoSaveTime = dc.attribute("AutoSaveTime", "600000").toInt();
appPrefs.docSetupPrefs.AutoSaveCount = dc.attribute("AutoSaveCount", "1").toInt();
Index: scribus/prefsstructs.h
===================================================================
--- scribus/prefsstructs.h (Revision 27164)
+++ scribus/prefsstructs.h (Arbeitskopie)
@@ -168,6 +168,7 @@
bool AutoSaveLocation;
QString AutoSaveDir;
bool saveCompressed;
+ int bindingDirection; //! 0 = LTR, 1 = RTL
};
//Guides
Index: scribus/scribus.cpp
===================================================================
--- scribus/scribus.cpp (Revision 27164)
+++ scribus/scribus.cpp (Arbeitskopie)
@@ -337,7 +337,7 @@
internalCopy = false;
internalCopyBuffer.clear();
m_doc = new ScribusDoc();
- m_doc->setup(0, 1, 1, 1, 1, "Custom", "Custom");
+ m_doc->setup(0, 1, 1, 1, 1, "Custom", "Custom", 0);
m_doc->setPage(100, 100, 0, 0, 0, 0, 0, 0, false, false);
m_doc->addPage(0);
m_doc->setGUI(false, this, nullptr);
@@ -2026,6 +2026,7 @@
{
int facingPages = dia->choosenLayout();
int firstPage = dia->layoutFirstPage();
+ int bindingDirection = dia->bindingDirection();
docSet = dia->startDocSetup->isChecked();
double topMargin = dia->marginGroup->margins().top();
double bottomMargin = dia->marginGroup->margins().bottom();
@@ -2039,7 +2040,11 @@
int orientation = dia->orientation();
int pageCount = dia->pageCountSpinBox->value();
QString pagesize = dia->pageSizeName();
- doFileNew(pageWidth, pageHeight, topMargin, leftMargin, rightMargin, bottomMargin, columnDistance, numberCols, autoframes, facingPages, dia->unitOfMeasureComboBox->currentIndex(), firstPage, orientation, 1, pagesize, true, pageCount, true, dia->marginGroup->marginPreset());
+ doFileNew(pageWidth, pageHeight, topMargin, leftMargin, rightMargin, bottomMargin,
+ columnDistance, numberCols, autoframes, facingPages, dia->unitOfMeasureComboBox->currentIndex(),
+ firstPage, orientation, 1, pagesize, true, pageCount, true, dia->marginGroup->marginPreset(),
+ bindingDirection
+ );
doc->setPageSetFirstPage(facingPages, firstPage);
doc->bleeds()->set(dia->bleedTop(), dia->bleedLeft(), dia->bleedBottom(), dia->bleedRight());
HaveNewDoc();
@@ -2102,6 +2107,7 @@
int facingPages = dia->choosenLayout();
int firstPage = dia->layoutFirstPage();
+ int bindingDirection = dia->bindingDirection();
bool docSet = dia->startDocSetup->isChecked();
double topMargin = dia->marginGroup->margins().top();
double bottomMargin = dia->marginGroup->margins().bottom();
@@ -2116,7 +2122,9 @@
int pageCount = dia->pageCountSpinBox->value();
QString pagesize = dia->pageSizeName();
- if (doFileNew(pageWidth, pageHeight, topMargin, leftMargin, rightMargin, bottomMargin, columnDistance, numberCols, autoframes, facingPages, dia->unitOfMeasureComboBox->currentIndex(), firstPage, orientation, 1, pagesize, true, pageCount, true, dia->marginGroup->marginPreset()))
+ if (doFileNew(pageWidth, pageHeight, topMargin, leftMargin, rightMargin, bottomMargin, columnDistance, numberCols,
+ autoframes, facingPages, dia->unitOfMeasureComboBox->currentIndex(), firstPage, orientation, 1,
+ pagesize, true, pageCount, true, dia->marginGroup->marginPreset(), bindingDirection))
{
doc->setPageSetFirstPage(facingPages, firstPage);
doc->bleeds()->set(dia->bleedTop(), dia->bleedLeft(), dia->bleedBottom(), dia->bleedRight());
@@ -2135,14 +2143,10 @@
return retVal;
}
-//TODO move to core, assign doc to doc list, optionally create gui for it
-ScribusDoc *ScribusMainWindow::newDoc(double width, double height, double topMargin, double leftMargin, double rightMargin, double bottomMargin, double columnDistance, double columnCount, bool autoTextFrames, int pageArrangement, int unitIndex, int firstPageLocation, int orientation, int firstPageNumber, const QString& defaultPageSize, bool requiresGUI, int pageCount, bool showView, int marginPreset)
+ScribusDoc *ScribusMainWindow::doFileNew(double width, double height, double topMargin, double leftMargin, double rightMargin, double bottomMargin,
+ double columnDistance, double columnCount, bool autoTextFrames, int pageArrangement, int unitIndex, int firstPageLocation, int orientation,
+ int firstPageNumber, const QString& defaultPageSize, bool requiresGUI, int pageCount, bool showView, int marginPreset, int bindingDirection)
{
- return doFileNew(width, height, topMargin, leftMargin, rightMargin, bottomMargin, columnDistance, columnCount, autoTextFrames, pageArrangement, unitIndex, firstPageLocation, orientation, firstPageNumber, defaultPageSize, requiresGUI, pageCount, showView, marginPreset);
-}
-
-ScribusDoc *ScribusMainWindow::doFileNew(double width, double height, double topMargin, double leftMargin, double rightMargin, double bottomMargin, double columnDistance, double columnCount, bool autoTextFrames, int pageArrangement, int unitIndex, int firstPageLocation, int orientation, int firstPageNumber, const QString& defaultPageSize, bool requiresGUI, int pageCount, bool showView, int marginPreset)
-{
if (HaveDoc)
outlinePalette->buildReopenVals();
m_undoManager->setUndoEnabled(false);
@@ -2189,7 +2193,7 @@
doc->PageColors = m_prefsManager.appPrefs.colorPrefs.DColors;
}
tempDoc->PageColors.ensureDefaultColors();
- tempDoc->setup(unitIndex, pageArrangement, firstPageLocation, orientation, firstPageNumber, defaultPageSize, newDocName);
+ tempDoc->setup(unitIndex, pageArrangement, firstPageLocation, orientation, firstPageNumber, defaultPageSize, newDocName, bindingDirection);
if (requiresGUI)
{
HaveDoc++;
@@ -9221,7 +9225,7 @@
if (fmt)
{
ScribusDoc *s_doc = new ScribusDoc();
- s_doc->setup(0, 1, 1, 1, 1, "Custom", "Custom");
+ s_doc->setup(0, 1, 1, 1, 1, "Custom", "Custom", 0);
s_doc->setPage(100, 100, 0, 0, 0, 0, 0, 0, false, false);
s_doc->addPage(0);
s_doc->setGUI(false, this, nullptr);
Index: scribus/scribus.h
===================================================================
--- scribus/scribus.h (Revision 27164)
+++ scribus/scribus.h (Arbeitskopie)
@@ -154,8 +154,10 @@
inline bool scriptIsRunning(void) const { return (m_ScriptRunning > 0); }
inline void setScriptRunning(bool value) { m_ScriptRunning += (value ? 1 : -1); }
- ScribusDoc* doFileNew(double width, double height, double topMargin, double leftMargin, double rightMargin, double bottomMargin, double columnDistance, double columnCount, bool autoTextFrames, int pageArrangement, int unitIndex, int firstPageLocation, int orientation, int firstPageNumber, const QString& defaultPageSize, bool requiresGUI, int pageCount = 1, bool showView = true, int marginPreset = 0);
- ScribusDoc* newDoc(double width, double height, double topMargin, double leftMargin, double rightMargin, double bottomMargin, double columnDistance, double columnCount, bool autoTextFrames, int pageArrangement, int unitIndex, int firstPageLocation, int orientation, int firstPageNumber, const QString& defaultPageSize, bool requiresGUI, int pageCount = 1, bool showView = true, int marginPreset = 0);
+ ScribusDoc* doFileNew(double width, double height, double topMargin, double leftMargin, double rightMargin,
+ double bottomMargin, double columnDistance, double columnCount, bool autoTextFrames, int pageArrangement,
+ int unitIndex, int firstPageLocation, int orientation, int firstPageNumber, const QString& defaultPageSize,
+ bool requiresGUI, int pageCount = 1, bool showView = true, int marginPreset = 0, int bindingDirection = 0);
bool DoFileSave(const QString& fileName, QString* savedFileName = nullptr, uint formatID = FORMATID_CURRENTEXPORT);
void changeEvent(QEvent *e) override;
Index: scribus/scribusdoc.cpp
===================================================================
--- scribus/scribusdoc.cpp (Revision 27164)
+++ scribus/scribusdoc.cpp (Arbeitskopie)
@@ -680,7 +680,7 @@
return retList;
}
-void ScribusDoc::setup(int unitIndex, int fp, int firstLeft, int orientation, int firstPageNumber, const QString& defaultPageSize, const QString& documentName)
+void ScribusDoc::setup(int unitIndex, int fp, int firstLeft, int orientation, int firstPageNumber, const QString& defaultPageSize, const QString& documentName, int bindingDirection)
{
m_docPrefsData.docSetupPrefs.docUnitIndex = unitIndex;
setPageSetFirstPage(fp, firstLeft);
@@ -688,6 +688,7 @@
m_docPrefsData.docSetupPrefs.pageSize = defaultPageSize;
FirstPnum = firstPageNumber;
m_docPrefsData.docSetupPrefs.pagePositioning = fp;
+ m_docPrefsData.docSetupPrefs.bindingDirection = bindingDirection;
setDocumentFileName(documentName);
HasCMS = false;
if (!pdfOptions().UseLPI)
@@ -6067,11 +6068,21 @@
int rowcounter = 0;
double maxXPos = 0.0;
double maxYPos = 0.0;
+ double lastYPos = Pages->at(0)->initialHeight();
+
+ bool rtlBinding = m_docPrefsData.docSetupPrefs.bindingDirection == 1;
+
double currentXPos = m_docPrefsData.displayPrefs.scratch.left();
+ if (rtlBinding)
+ {
+ counter = counter == 1 ? 0 : 1;
+ currentXPos += m_docPrefsData.docSetupPrefs.pageWidth
+ - (m_docPrefsData.docSetupPrefs.pageWidth + m_docPrefsData.displayPrefs.pageGapHorizontal) * counter;
+ }
+ else
+ currentXPos += (Pages->at(0)->initialWidth() + m_docPrefsData.displayPrefs.pageGapHorizontal) * counter;
+
double currentYPos = m_docPrefsData.displayPrefs.scratch.top();
- double lastYPos = Pages->at(0)->initialHeight();
- currentXPos += (Pages->at(0)->initialWidth() + m_docPrefsData.displayPrefs.pageGapHorizontal) * counter;
- // currentXPos += (m_docPrefsData.docSetupPrefs.pageWidth + m_docPrefsData.displayPrefs.pageGapHorizontal) * counter;
ScPage* page;
int docPageCount = Pages->count();
@@ -6111,29 +6122,63 @@
page->setYOffset(currentYPos);
if (counter < pageSets()[m_docPrefsData.docSetupPrefs.pagePositioning].Columns-1)
{
- currentXPos += page->width() + m_docPrefsData.displayPrefs.pageGapHorizontal;
+ if (rtlBinding)
+ {
+ ScPage* next_page = Pages->at(i+1); // check width of next page for correct offset
+ int w = next_page ? next_page->width() : page->width();
+ currentXPos -= w + m_docPrefsData.displayPrefs.pageGapHorizontal;
+ }
+ else
+ currentXPos += page->width() + m_docPrefsData.displayPrefs.pageGapHorizontal;
lastYPos = qMax(lastYPos, page->height());
if (counter == 0)
{
- page->Margins.setLeft(page->initialMargins.right());
- page->Margins.setRight(page->initialMargins.left());
+ if (rtlBinding)
+ {
+ page->Margins.setLeft(page->initialMargins.left());
+ page->Margins.setRight(page->initialMargins.right());
+ }
+ else
+ {
+ page->Margins.setLeft(page->initialMargins.right());
+ page->Margins.setRight(page->initialMargins.left());
+ }
}
else
{
- page->Margins.setLeft(page->initialMargins.left());
- page->Margins.setRight(page->initialMargins.left());
+ if (rtlBinding)
+ {
+ page->Margins.setLeft(page->initialMargins.right());
+ page->Margins.setRight(page->initialMargins.right());
+ }
+ else
+ {
+ page->Margins.setLeft(page->initialMargins.left());
+ page->Margins.setRight(page->initialMargins.left());
+ }
}
}
else
{
- currentXPos = m_docPrefsData.displayPrefs.scratch.left();
+ if (rtlBinding)
+ currentXPos = m_docPrefsData.displayPrefs.scratch.left() + m_docPrefsData.docSetupPrefs.pageWidth;
+ else
+ currentXPos = m_docPrefsData.displayPrefs.scratch.left();
if (pageSets()[m_docPrefsData.docSetupPrefs.pagePositioning].Columns > 1)
currentYPos += qMax(lastYPos, page->height())+m_docPrefsData.displayPrefs.pageGapVertical;
else
currentYPos += page->height()+m_docPrefsData.displayPrefs.pageGapVertical;
lastYPos = 0;
- page->Margins.setRight(page->initialMargins.right());
- page->Margins.setLeft(page->initialMargins.left());
+ if (rtlBinding)
+ {
+ page->Margins.setRight(page->initialMargins.left());
+ page->Margins.setLeft(page->initialMargins.right());
+ }
+ else
+ {
+ page->Margins.setRight(page->initialMargins.right());
+ page->Margins.setLeft(page->initialMargins.left());
+ }
}
counter++;
if (counter > pageSets()[m_docPrefsData.docSetupPrefs.pagePositioning].Columns-1)
Index: scribus/scribusdoc.h
===================================================================
--- scribus/scribusdoc.h (Revision 27164)
+++ scribus/scribusdoc.h (Arbeitskopie)
@@ -107,7 +107,10 @@
bool inASpecialEditMode() const;
QList getAllItems(const QList &items) const;
QList *parentGroup(PageItem* item, QList *list);
- void setup(int, int, int, int, int, const QString&, const QString&);
+ /**
+ * @param bindingDirection Defaults to 0 for all the one page temporary documents Scribus creates
+ */
+ void setup(int unitIndex, int fp, int firstLeft, int orientation, int firstPageNumber, const QString& defaultPageSize, const QString& documentName, int bindingDirection = 0);
void setLoading(bool);
bool isLoading() const;
void setModified(bool);
@@ -217,6 +220,8 @@
int pageOrientation() const { return m_docPrefsData.docSetupPrefs.pageOrientation; }
void setPageOrientation(int o) { m_docPrefsData.docSetupPrefs.pageOrientation = o; }
+ int bindingDirection() const { return m_docPrefsData.docSetupPrefs.bindingDirection; }
+ void setBindingDirection(int d) { m_docPrefsData.docSetupPrefs.bindingDirection = d; }
int pagePositioning() const { return m_docPrefsData.docSetupPrefs.pagePositioning; }
void setPagePositioning(int p) { m_docPrefsData.docSetupPrefs.pagePositioning = p; }
Index: scribus/ui/newdocdialog.cpp
===================================================================
--- scribus/ui/newdocdialog.cpp (Revision 27164)
+++ scribus/ui/newdocdialog.cpp (Arbeitskopie)
@@ -63,6 +63,7 @@
m_unitRatio = unitGetRatioFromIndex(m_unitIndex);
m_unitSuffix = unitGetSuffixFromIndex(m_unitIndex);
m_orientation = prefsManager.appPrefs.docSetupPrefs.pageOrientation;
+ m_bindingDirection = prefsManager.appPrefs.docSetupPrefs.bindingDirection;
buttonVertical->setIcon(iconManager.loadIcon("page-orientation-vertical"));
buttonHorizontal->setIcon(iconManager.loadIcon("page-orientation-horizontal"));
@@ -69,6 +70,10 @@
buttonSinglePage->setIcon(iconManager.loadIcon("page-simple"));
buttonDoublePageLeft->setIcon(iconManager.loadIcon("page-first-left"));
buttonDoublePageRight->setIcon(iconManager.loadIcon("page-first-right"));
+ QIcon pageBindingIcon;
+ pageBindingIcon.addPixmap(iconManager.loadPixmap("page-binding-left"), QIcon::Normal, QIcon::Off);
+ pageBindingIcon.addPixmap(iconManager.loadPixmap("page-binding-right"), QIcon::Normal, QIcon::On);
+ buttonBindingDirection->setIcon(pageBindingIcon);
labelColumns->setPixmap(iconManager.loadPixmap("paragraph-columns"));
createNewDocPage();
@@ -98,6 +103,7 @@
buttonSinglePage->setToolTip(tr("Single page document"));
buttonDoublePageLeft->setToolTip(tr("A document with facing pages, with the first page on the left side"));
buttonDoublePageRight->setToolTip(tr("A document with facing pages, with the first page on the right side"));
+ buttonBindingDirection->setToolTip(tr("Bind the pages on the right (LTR) or left (RTL) side"));
widthSpinBox->setToolTip( tr( "Width of the document's pages, editable if you have chosen a custom page size" ) );
heightSpinBox->setToolTip( tr( "Height of the document's pages, editable if you have chosen a custom page size" ) );
pageCountSpinBox->setToolTip( tr( "Initial number of pages of the document" ) );
@@ -112,6 +118,7 @@
connect(pageOrientationButtons, &QButtonGroup::idClicked, this, &NewDocDialog::setOrientation);
connect(pageLayoutButtons, &QButtonGroup::idClicked, this, &NewDocDialog::setLayout);
+ connect(buttonBindingDirection, &QToolButton::toggled, this, &NewDocDialog::setBindingDirection);
connect(unitOfMeasureComboBox, SIGNAL(activated(int)), this, SLOT(setUnit(int)));
connect(Distance, SIGNAL(valueChanged(double)), this, SLOT(setDistance(double)));
connect(autoTextFrame, SIGNAL(clicked()), this, SLOT(handleAutoFrame()));
@@ -155,16 +162,21 @@
if (pagePositioning == singlePage)
{
pageLayoutButtons->button(0)->setChecked(true);
+ buttonBindingDirection->setDisabled(true);
}
else if (prefsManager.appPrefs.pageSets[pagePositioning].FirstPage == 0)
{
pageLayoutButtons->button(1)->setChecked(true);
+ buttonBindingDirection->setDisabled(false);
}
else
{
pageLayoutButtons->button(2)->setChecked(true);
+ buttonBindingDirection->setDisabled(false);
}
+ buttonBindingDirection->setChecked(m_bindingDirection);
+
listPageFormats->setValues(pageSize, orientation, PageSizeInfo::Preferred, PageSizeList::NameAsc);
pageSizeSelector->setHasFormatSelector(false);
@@ -525,20 +537,28 @@
{
case 0:
setDocLayout(0);
+ buttonBindingDirection->setDisabled(true);
break;
case 1:
setDocLayout(1);
pagePreview->setFirstPage(0);
setDocFirstPage(0);
+ buttonBindingDirection->setDisabled(false);
break;
case 2:
setDocLayout(1);
pagePreview->setFirstPage(1);
setDocFirstPage(1);
+ buttonBindingDirection->setDisabled(false);
break;
}
}
+void NewDocDialog::setBindingDirection(bool checked)
+{
+ m_bindingDirection = int(checked);
+}
+
void NewDocDialog::setPageSize(const QString &size)
{
setSize(size);
Index: scribus/ui/newdocdialog.h
===================================================================
--- scribus/ui/newdocdialog.h (Revision 27164)
+++ scribus/ui/newdocdialog.h (Arbeitskopie)
@@ -76,6 +76,7 @@
int orientation() const { return m_orientation;}
int choosenLayout() const { return m_choosenLayout;}
+ int bindingDirection() const { return m_bindingDirection; }
int layoutFirstPage() const { return m_layoutFirstPage; }
double pageWidth() const { return m_pageWidth;}
double pageHeight() const { return m_pageHeight;}
@@ -94,6 +95,7 @@
void ExitOK();
void setOrientation(int ori);
void setLayout(int layoutId);
+ void setBindingDirection(bool checked);
void setPageSize(const QString &);
void setDocLayout(int layout);
void setDocFirstPage(int firstPage);
@@ -126,6 +128,7 @@
double m_unitRatio { 1.0 };
int m_orientation { 0 };
int m_choosenLayout { 0 };
+ int m_bindingDirection { 0 }; // 0 = LTR, 1 = RTL
int m_layoutFirstPage { 0 };
double m_pageWidth { 1.0 };
double m_pageHeight { 1.0 };
Index: scribus/ui/newdocdialog.ui
===================================================================
--- scribus/ui/newdocdialog.ui (Revision 27164)
+++ scribus/ui/newdocdialog.ui (Arbeitskopie)
@@ -474,6 +474,16 @@
+ -
+
+
+
+
+
+ true
+
+
+
Index: scribus/ui/pagepalette_pages.cpp
===================================================================
--- scribus/ui/pagepalette_pages.cpp (Revision 27164)
+++ scribus/ui/pagepalette_pages.cpp (Arbeitskopie)
@@ -379,12 +379,10 @@
pageLayout->setScheme(currView->m_doc->pagePositioning());
pageLayout->setFirstPage(currentPageSet.FirstPage);
- int counter = currentPageSet.FirstPage;
- int cols = currentPageSet.Columns;
-
+ pageViewWidget->pageGrid()->setBindingDirection(currView->m_doc->bindingDirection());
pageViewWidget->pageGrid()->setDocumentPageSize(QSize(currView->m_doc->pageWidth(), currView->m_doc->pageHeight()));
- pageViewWidget->pageGrid()->setPageInGroup(cols);
- pageViewWidget->pageGrid()->setPageOffset(counter);
+ pageViewWidget->pageGrid()->setPageInGroup(currentPageSet.Columns);
+ pageViewWidget->pageGrid()->setPageOffset(currentPageSet.FirstPage);
m_pagePreviewUpdatePending = false;
@@ -456,6 +454,7 @@
return;
pageViewWidget->pageGrid()->setSelectionColor(PrefsManager::instance().appPrefs.displayPrefs.pageBorderColor);
+ pageViewWidget->pageGrid()->setBindingDirection(view->m_doc->bindingDirection());
// if (currView)
// connect(currView->m_doc, SIGNAL(pagePreviewChanged()), this, SLOT(updatePagePreview()));
Index: scribus/ui/pagepalette_widgets.cpp
===================================================================
--- scribus/ui/pagepalette_widgets.cpp (Revision 27164)
+++ scribus/ui/pagepalette_widgets.cpp (Arbeitskopie)
@@ -318,7 +318,8 @@
void PageGrid::setPageOffset(int pageCount)
{
- m_pageOffset = pageCount;
+ m_pageOffset = columnNormalized(pageCount);
+
calculateSize();
update();
}
@@ -328,6 +329,8 @@
if ( r == -1 || c == -1) return -1;
+ c = columnNormalized(c);
+
int id = (r == 0) ? c : r * columns() + c;
id -= m_pageOffset;
@@ -363,9 +366,9 @@
return m_rowHeight - m_fontSize - m_labelGap;
}
-void PageGrid::setSelectedPage(int pageID)
+void PageGrid::setSelectedPage(int pageId)
{
- m_selectedPage = clampPageId(pageID);
+ m_selectedPage = clampPageId(pageId);
update();
}
@@ -398,6 +401,11 @@
return qCeil( (double)(pageCount() + m_pageOffset + 1) / (double)columns() );
}
+int PageGrid::columnNormalized(int column)
+{
+ return m_rtlBinding ? columns() - column - 1: column;
+}
+
int PageGrid::columnAt(QPoint pos)
{
if(pageCount() == 0) return -1;
@@ -407,28 +415,21 @@
int m_col = -1;
- int cellId = row * m_cellsInGroup;
- int pageId = cellId - m_pageOffset;
QRect cellRect(m_groupSpace, m_rowSpace + row * (rowHeight() + m_rowSpace), dummyPageSize().width(), rowHeight());
int width = 0;
- for (int i = 0; i < m_cellsInGroup; ++i)
+ for (int i = 0; i <= m_cellsInGroup; ++i)
{
+ int id = pageId(row, i, false);
- int id = cellId + i;
-
// skip empty cells
- if (id < m_pageOffset || id >= pageCount() + m_pageOffset)
+ if (pageInRange(id))
{
- //qDebug() << "Cell" << id << "is Empty";
- width = dummyPageSize().width();
+ PageCell *pc = pageList.at(id);
+ width = pc->pageWidthByHeight(pageHeight());
}
else
- {
- //qDebug() << "Cell" << id << "is Page" << "PageId" << pageId + i;
- PageCell *pc = pageList.at(pageId + i);
- width = pc->pageWidthByHeight(pageHeight());
- }
+ width = dummyPageSize().width();
cellRect.setWidth( width );
@@ -435,7 +436,6 @@
if(cellRect.contains(pos))
{
m_col = i;
- //qDebug() << "Page" << pageId + i << "at" << pos << "in column"<< i;
break;
}
@@ -462,23 +462,19 @@
{
if(pageCount() == 0 || rowId < 0) return -1;
- int cellId = rowId * m_cellsInGroup;
- int pageId = cellId - m_pageOffset;
int width = 0;
for (int i = 0; i < m_cellsInGroup; ++i)
{
- int id = cellId + i;
+ int id = pageId(rowId, i, false);
- if (id < m_pageOffset || id >= pageCount() + m_pageOffset)
+ if (pageInRange(id))
{
- width += dummyPageSize().width();
+ PageCell *pc = pageList.at(id);
+ width += pc->pageWidthByHeight(pageHeight());
}
else
- {
- PageCell *pc = pageList.at(pageId + i);
- width += pc->pageWidthByHeight(pageHeight());
- }
+ width += dummyPageSize().width();
width += m_cellGap;
@@ -494,33 +490,26 @@
{
if ( row == -1 || col == -1) return QRect();
- int cellId = row * m_cellsInGroup;
- int pageId = cellId - m_pageOffset;
QRect cellRect(m_groupSpace, m_rowSpace + row * (rowHeight() + m_rowSpace), dummyPageSize().width(), rowHeight());
int width = 0;
- for (int i = 0; i < m_cellsInGroup; ++i)
+ for (int i = 0; i <= m_cellsInGroup; ++i)
{
+ int id = pageId(row, i, false);
- int id = cellId + i;
-
// skip empty cells
- if (id < m_pageOffset || id >= pageCount() + m_pageOffset)
+ if (pageInRange(id))
{
- width = dummyPageSize().width();
+ PageCell *pc = pageList.at(id);
+ width = pc->pageWidthByHeight(pageHeight());
}
else
- {
- PageCell *pc = pageList.at(pageId + i);
- width = pc->pageWidthByHeight(pageHeight());
- }
+ width = dummyPageSize().width();
cellRect.setWidth( width );
- if(i == col)
- {
+ if(id == pageId(row, col, false))
return cellRect;
- }
cellRect.setX(cellRect.x() + width + m_cellGap);
};
@@ -534,12 +523,10 @@
double ratio = m_documentPageSize.width() / m_documentPageSize.height();
QSize dummySize(pageHeight() * ratio, pageHeight());
- //qDebug() << dummySize << ratio << m_documentPageSize.width() << m_documentPageSize.height();
-
return dummySize;
}
-QPoint PageGrid::mapPosToCell(QPoint pos, Mode &mode)
+QRect PageGrid::mapPosToCell(QPoint pos, Mode &mode)
{
int col = columnAt(pos);
int row = rowAt(pos);
@@ -548,7 +535,7 @@
if (col == -1 || row == -1)
{
mode = Mode::Invalid;
- return QPoint();
+ return QRect();
}
int id = pageId(row, col, false);
@@ -557,7 +544,7 @@
int y = cellRect.y();
// cell doesn't have a page
- if (id < 0 || id >= pageCount()){
+ if (!pageInRange(id)){
mode = Mode::Add;
}
else
@@ -564,6 +551,10 @@
{
// check if mouse is on "insert area"
QRect insertArea(x, y, 8, rowHeight());
+
+ if (m_rtlBinding)
+ insertArea = QRect(cellRect.right() - 8, y, 8, rowHeight());
+
if (insertArea.contains(pos))
mode = Mode::Insert;
else
@@ -570,26 +561,25 @@
mode = Mode::Hover;
}
- return QPoint(x,y);
+ return cellRect;
}
QPoint PageGrid::pagePosition(int pageId)
{
- if (pageId < 0 || pageId >= pageCount()) return QPoint();
+ if (!pageInRange(pageId)) return QPoint();
int row = qCeil( (pageId + m_pageOffset) / m_cellsInGroup );
- int col = 0;
- return rectAt(row, col).topLeft();
+ return rectAt(row, 0).topLeft();
}
-int PageGrid::clampPageId(int pageID, bool allowPlusOne)
+int PageGrid::clampPageId(int pageId, bool allowPlusOne)
{
// Always returns 0 if there is no page in the page list
if (pageCount() == 0) return 0;
int max = (allowPlusOne) ? pageCount() : pageCount() -1;
- return qBound( 0, pageID, max);
+ return qBound( 0, pageId, max);
}
@@ -606,7 +596,7 @@
int id = pageId(row, col);
// check if page id is in range of an existing cell
- if (id > -1 && id < pageCount() )
+ if (pageInRange(id))
{
int newSelectedPage = clampPageId( id );
@@ -623,7 +613,7 @@
void PageGrid::updateModeMarker(QPoint pos)
{
Mode mode;
- QPoint mapPos = mapPosToCell(pos, mode);
+ QRect mapPos = mapPosToCell(pos, mode);
// check if mouse is on "insert area"
switch (mode)
@@ -636,7 +626,13 @@
case Mode::Insert:
{
int selectorWidth = 4;
- int offsetX = mapPos.x() - selectorWidth / 2 - qRound((double)m_cellGap / 2);
+ int offsetX;
+
+ if (m_rtlBinding)
+ offsetX = mapPos.right() - selectorWidth / 2 + qRound((double)m_cellGap / 2);
+ else
+ offsetX = mapPos.left() - selectorWidth / 2 - qRound((double)m_cellGap / 2);
+
m_rectInsert = QRect(offsetX, mapPos.y() - 4, selectorWidth, pageHeight() + 8 );
m_rectAdd = QRect();
m_hoveredPage = -1;
@@ -789,6 +785,12 @@
m_contextMenu->exec( mapToGlobal(pos) );
}
+
+void PageGrid::setBindingDirection(int rtl_binding)
+{
+ m_rtlBinding = rtl_binding == 1;
+}
+
/* ********************************************************************************* *
*
* Events
@@ -797,8 +799,6 @@
void PageGrid::paintEvent(QPaintEvent *event)
{
-
- int count = 0;
int x = m_groupSpace;
int y = m_rowSpace;
int offset = 0;
@@ -812,9 +812,6 @@
if (pageCount() == 0) return;
-// QElapsedTimer timer;
-// timer.start();
-
// Draw pages
for (int r = 0; r < rows(); r++)
{
@@ -825,33 +822,42 @@
for (int c = 0; c < columns(); c++)
{
+ int id = pageId(r, c, false);
+
// cell is after last page cell
- if (count >= pageCount() + m_pageOffset)
+ if (id >= pageCount() + columns())
break;
// cell is a page cell
- if (count >= m_pageOffset && count < pageCount() + m_pageOffset)
+ if (pageInRange(id))
{
- int id = count - m_pageOffset;
PageCell * cell = getPageItem(id);
+
if (id == m_selectedPage)
selectedPageRect = QRect(x, y, cell->pageWidthByHeight(pageHeight()), pageHeight() );
+
QPoint pos(x,y);
bool isRightPage = (m_cellsInGroup == c + 1 && m_cellsInGroup > 1);
drawTile(painter, pos, cell, (id == m_selectedPage) ? true : false, (id == m_hoveredPage) ? true : false, foregroundColor, isRightPage);
+ bool ltrLast = !m_rtlBinding && id == pageCount() -1;
+ bool rtlFirst = m_rtlBinding && id == 0;
+
// add space only between pages
- if ((c + 1) % m_cellsInGroup == 0 || count == pageCount() + m_pageOffset -1)
+ if ((c + 1) % m_cellsInGroup == 0 || ltrLast || rtlFirst)
offset = 0;
else
offset = m_cellGap;
+ if(isLastRow(r + 1))
+ groupStart = m_rtlBinding ? x : m_groupSpace;
- x += cell->pageWidthByHeight(pageHeight()) + offset;
- groupWidth += cell->pageWidthByHeight(pageHeight()) + offset;
+ int w = cell->pageWidthByHeight(pageHeight()) + offset;
+ x += w;
+ groupWidth += w;
+
drawGroupRect = true;
-
}
// cell is before first page cell
else
@@ -860,11 +866,9 @@
x += dummyPageSize().width() + offset;
// adjust start on first row if first page has an offset
- if(r == 0)
- groupStart = x;
+ if(isFirstRow(r))
+ groupStart = m_rtlBinding ? m_groupSpace : x;
}
-
- count++;
}
// Draw group border
@@ -952,7 +956,7 @@
if ( r == -1 || c == -1 )
return;
- int p = pageId(r, c);
+ int id = pageId(r, c);
Mode mode;
mapPosToCell(dropEventPos, mode);
@@ -960,10 +964,10 @@
{
case Mode::Add:
case Mode::Insert:
- emit newPage(p, tmp);
+ emit newPage(id, tmp);
break;
case Mode::Hover:
- emit useTemplate(tmp, clampPageId(p));
+ emit useTemplate(tmp, clampPageId(id));
break;
case Mode::Invalid:
break;
@@ -1050,9 +1054,9 @@
int row = rowAt(mouseEventPos);
int col = columnAt(mouseEventPos);
- int pageID = pageId(row, col);
+ int id = pageId(row, col);
- if (pageID > -1 && pageID < pageCount() )
+ if (pageInRange(id))
emit click(m_selectedPage, event->button());
}
break;
Index: scribus/ui/pagepalette_widgets.h
===================================================================
--- scribus/ui/pagepalette_widgets.h (Revision 27164)
+++ scribus/ui/pagepalette_widgets.h (Arbeitskopie)
@@ -75,8 +75,8 @@
QPoint m_mousePos;
bool m_mousePressed {false};
bool m_thumb {false};
- QString m_prefsContext = "PagePalette";
- QString m_prefsName = "showMasterThumbnails";
+ QString m_prefsContext = "PagePalette";
+ QString m_prefsName = "showMasterThumbnails";
};
@@ -134,6 +134,9 @@
void setPageLayout(PageLayout layout);
PageLayout pageLayout() { return m_pageLayout; };
+ /**
+ * @param offset currrently it's 0 for single page document documents, 0 or 1 for double page document.
+ */
void setPageOffset(int pageCount);
int pageOffset() { return m_pageOffset; };
@@ -147,7 +150,8 @@
int pageCount();
int pageHeight();
- void setSelectedPage(int pageID);
+ void setSelectedPage(int pageId);
+ void setBindingDirection(int rtl_binding);
int selectedPage() { return m_selectedPage; };
void deleteSelectedPage();
@@ -190,10 +194,16 @@
int m_cellsInGroup {1}; // 1 for single page
int m_pageOffset {0};
QMenu *m_contextMenu {nullptr};
+ bool m_rtlBinding = false;
int columns();
int rows();
+ int columnNormalized(int column);
+
+ bool isFirstRow(int row) { return row == 0 ? true : false; };
+ bool isLastRow(int row) { return row == rows() ? true : false; };
+
int columnAt(QPoint pos);
int rowAt(QPoint pos);
int rowWidth(int rowId);
@@ -201,10 +211,11 @@
QSize dummyPageSize();
- QPoint mapPosToCell(QPoint pos, Mode &mode);
+ QRect mapPosToCell(QPoint pos, Mode &mode);
QPoint pagePosition(int pageId);
- int clampPageId(int pageID, bool allowPlusOne = false);
+ int clampPageId(int pageId, bool allowPlusOne = false);
+ bool pageInRange(int pageId) { return pageId >= 0 && pageId < pageCount(); };
void updateSelectedPage(QPoint pos);
void updateModeMarker(QPoint pos);
Index: scribus/ui/preferences/prefs_documentsetup.cpp
===================================================================
--- scribus/ui/preferences/prefs_documentsetup.cpp (Revision 27164)
+++ scribus/ui/preferences/prefs_documentsetup.cpp (Arbeitskopie)
@@ -63,6 +63,9 @@
layoutFirstPageIsComboBox->addItem(" ");
layoutFirstPageIsComboBox->setCurrentIndex(0);
layoutFirstPageIsComboBox->setEnabled(false);
+ bindingDirectionButtonGroup->setId(leftToRightRadioButton, 0);
+ bindingDirectionButtonGroup->setId(rightToLeftRadioButton, 1);
+ leftToRightRadioButton->setChecked(true);
pageWidthSpinBox->setMaximum(16777215);
pageHeightSpinBox->setMaximum(16777215);
@@ -176,6 +179,16 @@
layoutFirstPageIsComboBox->setCurrentIndex(prefsData->pageSets[prefsData->docSetupPrefs.pagePositioning].FirstPage);
+ switch (prefsData->docSetupPrefs.bindingDirection)
+ {
+ case 0:
+ leftToRightRadioButton->setChecked(true);
+ break;
+ case 1:
+ rightToLeftRadioButton->setChecked(true);
+ break;
+ }
+
pageWidthSpinBox->blockSignals(false);
pageHeightSpinBox->blockSignals(false);
pageOrientationComboBox->blockSignals(false);
@@ -221,6 +234,7 @@
prefsData->docSetupPrefs.pageWidth = pageW;
prefsData->docSetupPrefs.pageHeight = pageH;
prefsData->docSetupPrefs.pagePositioning = pageLayoutButtonGroup->checkedId();
+ prefsData->docSetupPrefs.bindingDirection = bindingDirectionButtonGroup->checkedId();
prefsData->pageSets[prefsData->docSetupPrefs.pagePositioning].FirstPage = layoutFirstPageIsComboBox->currentIndex();
prefsData->docSetupPrefs.margins = marginsWidget->margins();
Index: scribus/ui/preferences/prefs_documentsetupbase.ui
===================================================================
--- scribus/ui/preferences/prefs_documentsetupbase.ui (Revision 27164)
+++ scribus/ui/preferences/prefs_documentsetupbase.ui (Arbeitskopie)
@@ -39,7 +39,7 @@
-
- Qt::Orientation::Horizontal
+ Qt::Orientation::Horizontal
@@ -68,7 +68,7 @@
-
- Qt::Orientation::Horizontal
+ Qt::Orientation::Horizontal
@@ -83,10 +83,10 @@
-
- Qt::Orientation::Vertical
+ Qt::Orientation::Vertical
- QSizePolicy::Policy::Fixed
+ QSizePolicy::Policy::Fixed
@@ -111,7 +111,7 @@
-
- Qt::Orientation::Horizontal
+ Qt::Orientation::Horizontal
@@ -127,12 +127,12 @@
-
-
-
+
-
- Qt::ArrowType::NoArrow
+ Qt::ArrowType::NoArrow
@@ -209,7 +209,7 @@
-
- Qt::Orientation::Vertical
+ Qt::Orientation::Vertical
@@ -241,7 +241,7 @@
-
- Qt::Orientation::Horizontal
+ Qt::Orientation::Horizontal
@@ -260,7 +260,7 @@
-
- QComboBox::SizeAdjustPolicy::AdjustToContents
+ QComboBox::SizeAdjustPolicy::AdjustToContents
@@ -307,12 +307,39 @@
+ -
+
+
+ Binding Direction:
+
+
+
+ -
+
+
+ Left to Right
+
+
+ bindingDirectionButtonGroup
+
+
+
+ -
+
+
+ Right to Left
+
+
+ bindingDirectionButtonGroup
+
+
+
-
- Qt::Orientation::Vertical
+ Qt::Orientation::Vertical
@@ -344,10 +371,10 @@
-
- QFrame::Shape::NoFrame
+ QFrame::Shape::NoFrame
- QFrame::Shadow::Plain
+ QFrame::Shadow::Plain
0
@@ -360,8 +387,8 @@
0
0
- 494
- 575
+ 283
+ 236
@@ -380,7 +407,7 @@
-
- Qt::Orientation::Horizontal
+ Qt::Orientation::Horizontal
@@ -404,7 +431,7 @@
-
- Qt::Orientation::Horizontal
+ Qt::Orientation::Horizontal
@@ -433,10 +460,10 @@
-
- Qt::Orientation::Vertical
+ Qt::Orientation::Vertical
- QSizePolicy::Policy::Fixed
+ QSizePolicy::Policy::Fixed
@@ -461,7 +488,7 @@
-
- Qt::Orientation::Horizontal
+ Qt::Orientation::Horizontal
@@ -485,7 +512,7 @@
-
- Qt::Orientation::Horizontal
+ Qt::Orientation::Horizontal
@@ -500,7 +527,7 @@
-
- Qt::Orientation::Vertical
+ Qt::Orientation::Vertical
@@ -538,10 +565,10 @@
-
- Qt::Orientation::Vertical
+ Qt::Orientation::Vertical
- QSizePolicy::Policy::Fixed
+ QSizePolicy::Policy::Fixed
@@ -566,7 +593,7 @@
-
- Qt::Orientation::Horizontal
+ Qt::Orientation::Horizontal
@@ -617,7 +644,7 @@
-
- Qt::Orientation::Horizontal
+ Qt::Orientation::Horizontal
@@ -680,10 +707,10 @@
-
- Qt::Orientation::Vertical
+ Qt::Orientation::Vertical
- QSizePolicy::Policy::Maximum
+ QSizePolicy::Policy::Maximum
@@ -708,7 +735,7 @@
-
- Qt::Orientation::Horizontal
+ Qt::Orientation::Horizontal
@@ -734,7 +761,7 @@
-
- Qt::Orientation::Horizontal
+ Qt::Orientation::Horizontal
@@ -749,7 +776,7 @@
-
- Qt::Orientation::Vertical
+ Qt::Orientation::Vertical
@@ -777,12 +804,12 @@
1
-
- PageSizeSelector
- QWidget
- ui/widgets/pagesizeselector.h
- 1
-
+
+ PageSizeSelector
+ QWidget
+ ui/widgets/pagesizeselector.h
+ 1
+
tabWidget
@@ -885,5 +912,6 @@
+
Index: scribus/ui/prefs_documentsetup.cpp
===================================================================
--- scribus/ui/prefs_documentsetup.cpp (Revision 27146)
+++ scribus/ui/prefs_documentsetup.cpp (Arbeitskopie)
@@ -63,6 +63,9 @@
layoutFirstPageIsComboBox->addItem(" ");
layoutFirstPageIsComboBox->setCurrentIndex(0);
layoutFirstPageIsComboBox->setEnabled(false);
+ bindingDirectionButtonGroup->setId(leftToRightRadioButton, 0);
+ bindingDirectionButtonGroup->setId(rightToLeftRadioButton, 1);
+ leftToRightRadioButton->setChecked(true);
pageWidthSpinBox->setMaximum(16777215);
pageHeightSpinBox->setMaximum(16777215);
@@ -176,6 +179,16 @@
layoutFirstPageIsComboBox->setCurrentIndex(prefsData->pageSets[prefsData->docSetupPrefs.pagePositioning].FirstPage);
+ switch (prefsData->docSetupPrefs.bindingDirection)
+ {
+ case 0:
+ leftToRightRadioButton->setChecked(true);
+ break;
+ case 1:
+ rightToLeftRadioButton->setChecked(true);
+ break;
+ }
+
pageWidthSpinBox->blockSignals(false);
pageHeightSpinBox->blockSignals(false);
pageOrientationComboBox->blockSignals(false);
@@ -221,6 +234,7 @@
prefsData->docSetupPrefs.pageWidth = pageW;
prefsData->docSetupPrefs.pageHeight = pageH;
prefsData->docSetupPrefs.pagePositioning = pageLayoutButtonGroup->checkedId();
+ prefsData->docSetupPrefs.bindingDirection = bindingDirectionButtonGroup->checkedId();
prefsData->pageSets[prefsData->docSetupPrefs.pagePositioning].FirstPage = layoutFirstPageIsComboBox->currentIndex();
prefsData->docSetupPrefs.margins = marginsWidget->margins();
Index: scribus/ui/prefs_documentsetupbase.ui
===================================================================
--- scribus/ui/prefs_documentsetupbase.ui (Revision 27146)
+++ scribus/ui/prefs_documentsetupbase.ui (Arbeitskopie)
@@ -307,6 +307,33 @@
+ -
+
+
+ Binding Direction:
+
+
+
+ -
+
+
+ Left to Right
+
+
+ bindingDirectionButtonGroup
+
+
+
+ -
+
+
+ Right to Left
+
+
+ bindingDirectionButtonGroup
+
+
+
-
@@ -885,5 +912,6 @@
+