summaryrefslogtreecommitdiffstats
path: root/src/krepagelayout.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/krepagelayout.h')
-rw-r--r--src/krepagelayout.h257
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 */
+