1 /*
2 For general Scribus (>=1.3.2) copyright and licensing information please refer
3 to the COPYING file provided with the program. Following this notice may exist
4 a copyright and/or license notice that predates the release of Scribus 1.3.2
5 for which a new license (GPL+exception) is in place.
6 */
7 #include "marginpresetlayout.h"
8 
PresetLayout(QWidget * parent)9 PresetLayout::PresetLayout(QWidget *parent) : QComboBox(parent)
10 {
11 	addItem( tr("None", "layout type"), PresetLayout::none);
12 	addItem( tr("Gutenberg"), PresetLayout::gutenberg);
13 	addItem( tr("Magazine"), PresetLayout::magazine);
14 	addItem( tr("Fibonacci"), PresetLayout::fibonacci);
15 	addItem( tr("Golden Mean"), PresetLayout::goldencut);
16 	addItem( tr("Nine Parts"), PresetLayout::nineparts);
17 	setCurrentIndex(PresetLayout::none);
18 
19 	updateMargins = false;
20 
21 	this->setToolTip( "<qt>" + tr("When you have selected a Document Layout other than Single Page, you can select a predefined page layout here. 'None' leaves margins as is, Gutenberg sets margins classically. 'Magazine' sets all margins to the same value. Leading is Left/Inside value.") + "</qt>");
22 }
23 
getMargins(int index,double pageWidth,double pageHeight,double leftMargin)24 MarginStruct PresetLayout::getMargins(int index, double pageWidth, double pageHeight, double leftMargin)
25 {
26 	MarginStruct ret;
27 
28 	updateMargins = true;
29 
30 	switch (index)
31 	{
32 		case PresetLayout::magazine:
33 			ret.set(leftMargin, leftMargin, leftMargin, leftMargin);
34 			break;
35 		case PresetLayout::gutenberg:
36 			{
37 				double ratio = pageHeight / pageWidth;
38 				ret.setLeft(leftMargin);
39 				ret.setTop(leftMargin * ratio);
40 				ret.setRight(leftMargin * 2.0);
41 				ret.setBottom(ret.right() * ratio);
42 			}
43 			break;
44 		case PresetLayout::fibonacci:
45 			ret.setLeft(leftMargin);
46 			ret.setTop(leftMargin / 2.0 * 3.0);
47 			ret.setRight(leftMargin / 2.0 * 5.0);
48 			ret.setBottom(leftMargin / 2.0 * 8.0);
49 			break;
50 		case PresetLayout::goldencut:
51 			ret.setLeft(leftMargin);
52 			ret.setTop(leftMargin / 2.0 * 3.4);
53 			ret.setRight(leftMargin / 2.0 * 4.8);
54 			ret.setBottom(leftMargin / 2.0 * 6.8);
55 			break;
56 		case PresetLayout::nineparts:
57 			ret.setLeft(pageWidth / 9.0);
58 			ret.setTop(pageHeight / 9.0);
59 			ret.setRight(pageWidth / 9.0 * 2.0);
60 			ret.setBottom(pageHeight / 9.0 * 2.0);
61 			break;
62 		default:
63 			updateMargins = false;
64 			ret.set(-1.0, -1.0, -1.0, -1.0);
65 	}
66 	return ret;
67 }
68 
needUpdate() const69 bool PresetLayout::needUpdate() const
70 {
71 	return updateMargins;
72 }
73 
74