From 7ed83b6c6666eb8b6b104c211ae7e52907350372 Mon Sep 17 00:00:00 2001 From: craig Date: Sun, 1 Jan 2012 11:40:09 +0000 Subject: Branch 1.3.5 tree to 1.4.x tree, goodbye 1.3.x git-svn-id: svn://scribus.net/branches/Version14x/Scribus@17163 11d20701-8431-0410-a711-e3c959e3b870 --- scribus/pagesize.cpp | 242 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 242 insertions(+) create mode 100644 scribus/pagesize.cpp (limited to 'scribus/pagesize.cpp') diff --git a/scribus/pagesize.cpp b/scribus/pagesize.cpp new file mode 100644 index 0000000..94ce896 --- /dev/null +++ b/scribus/pagesize.cpp @@ -0,0 +1,242 @@ +/* +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. +*/ +/*************************************************************************** + begin : Feb 2005 + copyright : (C) 2005 by Craig Bradney + email : cbradney@zip.com.au + ***************************************************************************/ + +/*************************************************************************** + * * + * 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 "pagesize.h" + + +#include + +#include +#include + +#include "commonstrings.h" + + +PageSize::PageSize(const QString sizeName) +{ + bool valuesSet=false; + generateSizeList(); + //Build based on untranslated key value + if (pageSizeList.contains(sizeName)) + { + PageSizeInfoMap::Iterator it = pageSizeList.find(sizeName); + m_pageSizeName=it.key(); + m_width=it.value().width; + m_height=it.value().height; + m_pageUnitIndex=it.value().pageUnitIndex; + m_trPageSizeName=it.value().trSizeName; + valuesSet=true; + } + else //build based on translated value. + { + PageSizeInfoMap::Iterator it; + for (it=pageSizeList.begin();it!=pageSizeList.end() && valuesSet!=true;++it) + { + if (sizeName==it.value().trSizeName) + { + m_pageSizeName=it.key(); + m_width=it.value().width; + m_height=it.value().height; + m_pageUnitIndex=it.value().pageUnitIndex; + m_trPageSizeName=it.value().trSizeName; + valuesSet=true; + } + } + } + + if (!valuesSet) + { + //qDebug("Non-existant page size selected"); + m_width=m_height=0.0; + m_pageUnitIndex=-1; + m_pageSizeName=CommonStrings::customPageSize; + m_trPageSizeName=CommonStrings::trCustomPageSize; + } +} + +PageSize::PageSize(const double w, const double h) +{ + m_width=w; + m_height=h; + m_pageSizeName=CommonStrings::customPageSize; + m_trPageSizeName=CommonStrings::trCustomPageSize; +} + +QStringList PageSize::sizeList(void) const +{ + QStringList pageSizes; + pageSizes.clear(); + PageSizeInfoMap::ConstIterator it; + for (it=pageSizeList.begin();it!=pageSizeList.end();++it) + pageSizes.append(it.key()); + return QStringList(pageSizes); +} + +QStringList PageSize::sizeTRList(void) const +{ + QStringList pageSizes; + pageSizes.clear(); + PageSizeInfoMap::ConstIterator it; + for (it=pageSizeList.begin();it!=pageSizeList.end();++it) + pageSizes.append(it.value().trSizeName); + return QStringList(pageSizes); +} + + +void PageSize::generateSizeList() +{ + /* + {"A5", "A6", "A7", "A8", "A9", "B0", "B1", "B2", "B3", + "B4", "B5", "B6", "B7", "B8", "B9", "B10", "C5E", "Comm10E", "DLE", QObject::tr("Executive"), + QObject::tr("Folio"), QObject::tr("Ledger"), QObject::tr("Legal"), QObject::tr("Letter"), QObject::tr("Tabloid") + }; + */ + + double width, height, tmp; + int format; + QString name; + struct PageSizeInfo info; + /* A series */ + width = floor(1000.0 / sqrt(sqrt(2.0)) + 0.5); + height = floor(sqrt(sqrt(2.0))*1000.0 + 0.5); + //4A0 + info.width=mm2pts(width*2.0); + info.height=mm2pts(height*2.0); + info.pageUnitIndex=SC_MM; + info.trSizeName=QObject::tr("4A0"); + pageSizeList.insert("4A0", info); + //2A0 + info.width=mm2pts(height); + info.height=mm2pts(width*2.0); + info.pageUnitIndex=SC_MM; + info.trSizeName=QObject::tr("2A0"); + pageSizeList.insert("2A0", info); + //Continue with rest of A series + for (format = 0; format <= 10; format++) { + info.width=mm2pts(width); + info.height=mm2pts(height); + info.pageUnitIndex=SC_MM; + name=QString("A%1").arg(format); + info.trSizeName=name; + pageSizeList.insert(name, info); + tmp = height; + height = width; + width = floor(tmp / 2.0); + } + + /* B series */ + width = 1000.0; + height = floor(sqrt(2.0)*1000.0 + 0.5); + + for (format = 0; format <= 10; format++) { + info.width=mm2pts(width); + info.height=mm2pts(height); + info.pageUnitIndex=SC_MM; + name=QString("B%1").arg(format); + info.trSizeName=name; + pageSizeList.insert(name, info); + + tmp = height; + height = width; + width = floor(tmp / 2.0); + } + + /* C series */ + width = floor(1000.0 / sqrt(sqrt(sqrt(2.0)))+0.5); + height = floor(sqrt(sqrt(sqrt(8.0)))*1000.0 + 0.5); + + for (format = 0; format <= 10; format++) { + info.width=mm2pts(width); + info.height=mm2pts(height); + info.pageUnitIndex=SC_MM; + name=QString("C%1").arg(format); + info.trSizeName=name; + pageSizeList.insert(name, info); + + tmp = height; + height = width; + width = floor(tmp / 2.0); + } + + /* PA series */ + width = 840; + height = 1120; + for (format = 0; format <= 10; format++) { + info.width=mm2pts(width); + info.height=mm2pts(height); + info.pageUnitIndex=SC_MM; + name=QString("PA%1").arg(format); + info.trSizeName=name; + pageSizeList.insert(name, info); + tmp = height; + height = width; + width = floor(tmp / 2.0); + } + + //Imperial + //http://en.wikipedia.org/wiki/Paper_sizes + double impWidths[]={10.0,13.0,8.5,8.0,8.5,11.0,7.25,15.5,15.0,16.5,17.5,18.0,20.0,23.0,23.5,35.0,5.5,8.5,11.0,17.0,22.0,34.0}; + double impHeights[]={8.0,8.0,11.0,10.5,14.0,17.0,10.5,19.25,20.0,21.0,22.5,23.0,25.0,28.0,35.0,45.0,8.5,11.0,17.0,22.0,34.0,44.0}; + QString impNames[]={"Quarto","Foolscap","Letter","Govt. Letter","Legal","Ledger","Executive","Post","Crown","Large Post","Demy","Medium","Royal","Elephant","Double Demy","Quad Demy","STMT","A","B","C","D","E"}; + QString impTrNames[]={QObject::tr("Quarto"), QObject::tr("Foolscap"), QObject::tr("Letter"), + QObject::tr("Govt. Letter"), QObject::tr("Legal"), QObject::tr("Ledger"), QObject::tr("Executive"), + QObject::tr("Post"), QObject::tr("Crown"), QObject::tr("Large Post"), QObject::tr("Demy"), + QObject::tr("Medium"), QObject::tr("Royal"), QObject::tr("Elephant"), QObject::tr("Double Demy"), + QObject::tr("Quad Demy"), QObject::tr("STMT"), QObject::tr("A"), QObject::tr("B"), QObject::tr("C"), + QObject::tr("D"), QObject::tr("E")}; + + size_t const num_mappings_widths = (sizeof impWidths)/(sizeof *impWidths); + + for (uint i = 0; i < num_mappings_widths; ++i) + { + info.width=in2pts(impWidths[i]); + info.height=in2pts(impHeights[i]); + info.pageUnitIndex=SC_IN; + info.trSizeName=impTrNames[i]; + pageSizeList.insert(impNames[i], info); + } + //Comm10E + info.width=in2pts(4.125); + info.height=in2pts(9.5); + info.pageUnitIndex=SC_IN; + info.trSizeName=QObject::tr("Comm10E"); + pageSizeList.insert("Comm10E", info); + //DLE + info.width=mm2pts(110); + info.height=mm2pts(220); + info.pageUnitIndex=SC_MM; + info.trSizeName=QObject::tr("DLE"); + pageSizeList.insert("DLE", info); + //Executive + //Folio + //Ledger + //Legal + //Letter + //Tabloid +} + +void PageSize::printSizeList() +{ + PageSizeInfoMap::Iterator it; + for (it=pageSizeList.begin();it!=pageSizeList.end();++it) + std::cout << it.key().leftJustified(6).toStdString() << ": " << it.value().width << " x " << it.value().height << ", " << it.value().width*unitGetRatioFromIndex(it.value().pageUnitIndex) << " x " << it.value().height*unitGetRatioFromIndex(it.value().pageUnitIndex) << ", " << it.value().trSizeName.toStdString() << std::endl; +} + -- cgit