diff options
Diffstat (limited to 'src/krepagelayout.h')
-rw-r--r-- | src/krepagelayout.h | 257 |
1 files changed, 257 insertions, 0 deletions
diff --git a/src/krepagelayout.h b/src/krepagelayout.h new file mode 100644 index 0000000..2d788f2 --- /dev/null +++ b/src/krepagelayout.h @@ -0,0 +1,257 @@ +/* This file is part of the KDE project + Copyright (C) 1998, 1999 Torben Weis <weis@kde.org> + Copyright 2002, 2003 David Faure <faure@kde.org> + Copyright 2003 Nicolas GOUTTE <goutte@kde.org> + Copyright 2005 Jason Kivlighn <jkivlighn@gmail.com> + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. +*/ + +#ifndef KREPAGELAYOUT_H +#define KREPAGELAYOUT_H + +#include <tqstringlist.h> + +class TQDomElement; +class TQDomDocument; + +/** + * @brief Represents the paper format a document shall be printed on. + * + * For compatibility reasons, and because of screen and custom, + * this enum doesn't map to TQPrinter::PageSize but KoPageFormat::printerPageSize + * does the conversion. + * + * @todo convert DIN to ISO in the names + */ +enum KoFormat { + PG_DIN_A3 = 0, + PG_DIN_A4 = 1, + PG_DIN_A5 = 2, + PG_US_LETTER = 3, + PG_US_LEGAL = 4, + PG_SCREEN = 5, + PG_CUSTOM = 6, + PG_DIN_B5 = 7, + PG_US_EXECUTIVE = 8, + PG_DIN_A0 = 9, + PG_DIN_A1 = 10, + PG_DIN_A2 = 11, + PG_DIN_A6 = 12, + PG_DIN_A7 = 13, + PG_DIN_A8 = 14, + PG_DIN_A9 = 15, + PG_DIN_B0 = 16, + PG_DIN_B1 = 17, + PG_DIN_B10 = 18, + PG_DIN_B2 = 19, + PG_DIN_B3 = 20, + PG_DIN_B4 = 21, + PG_DIN_B6 = 22, + PG_ISO_C5 = 23, + PG_US_COMM10 = 24, + PG_ISO_DL = 25, + PG_US_FOLIO = 26, + PG_US_LEDGER = 27, + PG_US_TABLOID = 28, + // update the number below and the static arrays if you add more values to the enum + PG_LAST_FORMAT = PG_US_TABLOID // used by koPageLayout.cpp +}; + +/** + * Represents the orientation of a printed document. + */ +enum KoOrientation { + PG_PORTRAIT = 0, + PG_LANDSCAPE = 1 +}; + +namespace KoPageFormat +{ + /** + * @brief Convert a KoFormat into a KPrinter::PageSize. + * + * If format is 'screen' it will use A4 landscape. + * If format is 'custom' it will use A4 portrait. + * (you may want to take care of those cases separately). + * Usually passed to KPrinter::setPageSize(). + * + * @note We return int instead of the enum to avoid including kprinter.h + */ + int /*KPrinter::PageSize*/ printerPageSize( KoFormat format ); + + /** + * Returns the width (in mm) for a given page format and orientation + * 'Custom' isn't supported by this function, obviously. + */ + double width( KoFormat format, KoOrientation orientation ); + + /** + * Returns the height (in mm) for a given page format and orientation + * 'Custom' isn't supported by this function, obviously. + */ + double height( KoFormat format, KoOrientation orientation ); + + /** + * Returns the internal name of the given page format. + * Use for saving. + */ + TQString formatString( KoFormat format ); + + /** + * Convert a format string (internal name) to a page format value. + * Use for loading. + */ + KoFormat formatFromString( const TQString & string ); + + /** + * Returns the default format (based on the KControl settings) + */ + KoFormat defaultFormat(); + + /** + * Returns the translated name of the given page format. + * Use for showing the user. + */ + TQString name( KoFormat format ); + + /** + * Lists the translated names of all the available formats + */ + TQStringList allFormats(); + + /** + * Try to find the paper format for the given width and height (in mm). + * Useful to some import filters. + */ + KoFormat guessFormat( double width, double height ); +} + + +/** + * @brief Header/Footer type. + * + * @note Yes, this should have been a bitfield, but there was only 0, 2, 3 in koffice-1.0. Don't ask why. + * In the long run this should be replaced with a more flexible repetition/section concept. + */ +enum KoHFType { + HF_SAME = 0, ///< 0: Header/Footer is the same on all pages + HF_FIRST_EO_DIFF = 1, ///< 1: Header/Footer is different on first, even and odd pages (2&3) + HF_FIRST_DIFF = 2, ///< 2: Header/Footer for the first page differs + HF_EO_DIFF = 3 ///< 3: Header/Footer for even - odd pages are different +}; + +/** + * This structure defines the page layout, including + * its size in pt, its format (e.g. A4), orientation, unit, margins etc. + */ +struct KoPageLayout +{ + /** Page format */ + KoFormat format; + /** Page orientation */ + KoOrientation orientation; + + /** Page width in pt */ + double ptWidth; + /** Page height in pt */ + double ptHeight; + /** Left margin in pt */ + double ptLeft; + /** Right margin in pt */ + double ptRight; + /** Top margin in pt */ + double ptTop; + /** Bottom margin in pt */ + double ptBottom; + + bool operator==( const KoPageLayout& l ) const { + return ( ptWidth == l.ptWidth && + ptHeight == l.ptHeight && + ptLeft == l.ptLeft && + ptRight == l.ptRight && + ptTop == l.ptTop && + ptBottom == l.ptBottom ); + } + bool operator!=( const KoPageLayout& l ) const { + return !( (*this) == l ); + } + + /** + * Save this page layout to the Krecipes layout format + */ + TQDomElement saveKreFormat( TQDomDocument &doc ) const; + + /** + * Load this page layout from the Krecipes layout format + */ + void loadKreFormat(const TQDomElement &style); + + /** + * @return a page layout with the default page size depending on the locale settings, + * default margins (2 cm), and portrait orientation. + * @since 1.4 + */ + static KoPageLayout standardLayout(); +}; + +/** structure for header-footer */ +struct KoHeadFoot +{ + TQString headLeft; + TQString headMid; + TQString headRight; + TQString footLeft; + TQString footMid; + TQString footRight; +}; + +/** structure for columns */ +struct KoColumns +{ + int columns; + double ptColumnSpacing; + bool operator==( const KoColumns& rhs ) const { + return columns == rhs.columns && + TQABS(ptColumnSpacing - rhs.ptColumnSpacing) <= 1E-10; + } + bool operator!=( const KoColumns& rhs ) const { + return columns != rhs.columns || + TQABS(ptColumnSpacing - rhs.ptColumnSpacing) > 1E-10; + } +}; + +/** structure for KWord header-footer */ +struct KoKWHeaderFooter +{ + KoHFType header; + KoHFType footer; + double ptHeaderBodySpacing; + double ptFooterBodySpacing; + double ptFootNoteBodySpacing; + bool operator==( const KoKWHeaderFooter& rhs ) const { + return header == rhs.header && footer == rhs.footer && + TQABS(ptHeaderBodySpacing - rhs.ptHeaderBodySpacing) <= 1E-10 && + TQABS(ptFooterBodySpacing - rhs.ptFooterBodySpacing) <= 1E-10 && + TQABS(ptFootNoteBodySpacing - rhs.ptFootNoteBodySpacing) <= 1E-10; + } + bool operator!=( const KoKWHeaderFooter& rhs ) const { + return !( *this == rhs ); + } +}; + +#endif /* KREPAGELAYOUT_H */ + |