From 8362bf63dea22bbf6736609b0f49c152f975eb63 Mon Sep 17 00:00:00 2001 From: tpearson Date: Wed, 20 Jan 2010 01:29:50 +0000 Subject: Added old abandoned KDE3 version of koffice git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/applications/koffice@1077364 283d02a7-25f6-0310-bc7c-ecb5cbfe19da --- kword/KWPageManager.h | 142 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 142 insertions(+) create mode 100644 kword/KWPageManager.h (limited to 'kword/KWPageManager.h') diff --git a/kword/KWPageManager.h b/kword/KWPageManager.h new file mode 100644 index 00000000..300bef99 --- /dev/null +++ b/kword/KWPageManager.h @@ -0,0 +1,142 @@ +/* This file is part of the KOffice project + * Copyright (C) 2005 Thomas Zander + * + * 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; version 2. + + * 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., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ +#ifndef kw_pagemanager_h +#define kw_pagemanager_h + +#include "KoPageLayout.h" + +#include + +class KWPage; +class KoPoint; +class KoRect; + +/** + * The Page Manager manages all the pages a document contains and separates all the frames + * the document contains into actual printed pages. + */ +class KWPageManager { +public: + KWPageManager(); + + /// return pageNumber of @p frame, pagenumbers for a normal document start at 1. + int pageNumber(const KoRect *rect) const; + /// return pageNumber of @p rect, pagenumbers for a normal document start at 1. + int pageNumber(const KoRect &rect) const; + /// return pageNumber of @p point, pagenumbers for a normal document start at 1. + int pageNumber(const KoPoint &point) const; + /** return pageNumber of page with document-offset (in the Y direction) of @p ptY, + * pagenumbers for a normal document start at 1. + */ + int pageNumber(double ptY) const; + /// return total number of pages in this document. + int pageCount() const; + /// return the highest page number we have in this document. + int lastPageNumber() const; + /// return the KWPage of a specific page number. Returns 0 if page does not exist. + KWPage* page(int pageNumber) const; + /// return the KWPage instance where the rect is on. Returns 0 if page does not exist. + KWPage* page(const KoRect &rect) const; + /// return the KWPage instance where the rect or frame is on. Returns 0 if page does not exist. + KWPage* page(const KoRect *frame) const; + /// return the KWPage instance where the point is on. Returns 0 if page does not exist. + KWPage* page(const KoPoint &point) const; + /// return the KWPage instance of the y-coordinate in the document. Returns 0 if page does not exist. + KWPage* page(double ptY) const; + + /** + * Return the y-offset in this document of the top of page with @p pageNumber + * Note that pageNumber is NOT an offset in the document, but the real number + * of the page. + * @see setStartPage(int) + */ + double topOfPage(int pageNumber) const; // in pt + /** + * Return the y-offset in this document of the bottom of page with @p pageNumber + * Note that pageNumber is NOT an offset in the document, but the real number + * of the page. + * @see setStartPage(int) + */ + double bottomOfPage(int pageNumber) const; // in pt + + /// Set a new startpage for this document, renumbering all pages already added. + void setStartPage(int startPage); + + /// return the first pagenumber of this document + int startPage() const { return m_firstPage; } + + /** + * Register if new pages can only be appended after the last one and not + * somewhere in between. + * @param appendOnly the new value + */ + void setOnlyAllowAppend(bool appendOnly) { m_onlyAllowAppend = appendOnly; } + /** + * return if new pages can only be appended after the last one and not + * somewhere in between. + */ + bool onlyAllowAppend() { return m_onlyAllowAppend; } + + /** + * Inserts a new page at the specified position in the document. + * Shifts the page currently at that position (if any) and any subsequent pages after. + * if onlyAllowAppend is set to true the pagenumber will be ignored and the new page + * will always be appended. + * @param pageNumber page number of the new page + */ + KWPage* insertPage(int pageNumber); + /// Append a new page at the end of the document + KWPage* appendPage(); + + /// Remove the page with @p pageNumber renumbering all pages after pages already added + void removePage(int pageNumber); + /// Remove @p page renumbering all pages after pages already added + void removePage(KWPage *page); + + /// return the effective pageLayout of @p pageNumber combining the default and the page specific ones + const KoPageLayout pageLayout(int pageNumber) const; + + void setDefaultPage(const KoPageLayout &layout); + + /** + * Returns the argument point, with altered coordinats if the point happens to be + * outside all pages. + * The resulting point is the shortest distance from the argument inside the document. + * @param point the point to test + */ + KoPoint clipToDocument(const KoPoint &point); + +private: + /// helper method for the topOfPage and bottomOfPage + double pageOffset(int pageNumber, bool bottom) const; + /// sorter for numbered pages. + class PageList : public QPtrList { + protected: + virtual int compareItems(QPtrCollection::Item a, QPtrCollection::Item b); + }; + + PageList m_pageList; + int m_firstPage; + bool m_onlyAllowAppend; // true for WP style documents. + + KoPageLayout m_defaultPageLayout; + +friend class KWPage; +}; + +#endif -- cgit v1.2.1