File indexing completed on 2024-05-19 16:09:59

0001 /* This file is part of the KDE project
0002  * Copyright (C) 2011-2015 C. Boemann <cbo@boemann.dk>
0003  * Copyright (C) 2011 Sebastian Sauer <sebastian.sauer@kdab.com>
0004  *
0005  * This library is free software; you can redistribute it and/or
0006  * modify it under the terms of the GNU Library General Public
0007  * License as published by the Free Software Foundation; either
0008  * version 2 of the License, or (at your option) any later version.
0009  *
0010  * This library is distributed in the hope that it will be useful,
0011  * but WITHOUT ANY WARRANTY; without even the implied warranty of
0012  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
0013  * Library General Public License for more details.
0014  *
0015  * You should have received a copy of the GNU Library General Public License
0016  * along with this library; see the file COPYING.LIB.  If not, write to
0017  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
0018  * Boston, MA 02110-1301, USA.
0019  */
0020 
0021 #ifndef KWROOTAREAPROVIDER_H
0022 #define KWROOTAREAPROVIDER_H
0023 
0024 #include "KWPage.h"
0025 #include <KWRootAreaProviderBase.h>
0026 
0027 #include <QMap>
0028 #include <QPair>
0029 
0030 class KoShape;
0031 class KoTextShapeData;
0032 class KWTextFrameSet;
0033 class KWPage;
0034 
0035 class KWRootAreaPage
0036 {
0037 public:
0038     KWRootAreaPage() {};
0039     ~KWRootAreaPage() {};
0040     KWPage page;
0041     QList<KoTextLayoutRootArea *> rootAreas;
0042     explicit KWRootAreaPage(const KWPage &p) : page(p) {}
0043 };
0044 
0045 class KWRootAreaProvider : public KWRootAreaProviderBase
0046 {
0047 public:
0048     //KWRootAreaProvider(KWTextFrameSet *textFrameSet, KoShape *shape, KoTextShapeData *data);
0049     explicit KWRootAreaProvider(KWTextFrameSet *textFrameSet);
0050     ~KWRootAreaProvider() override;
0051 
0052     void addDependentProvider(KWRootAreaProviderBase *provider, int pageNumber);
0053 
0054     void clearPages(int pageNumber) override;
0055     void setPageDirty(int pageNumber) override;
0056 
0057     /// reimplemented
0058     KoTextLayoutRootArea *provide(KoTextDocumentLayout *documentLayout, const RootAreaConstraint &constraints, int requestedPosition, bool *isNewArea) override;
0059     void releaseAllAfter(KoTextLayoutRootArea *afterThis) override;
0060     void doPostLayout(KoTextLayoutRootArea *rootArea, bool isNewRootArea) override;
0061 
0062 private:
0063     QList<KWRootAreaPage *> m_pages;
0064     QHash<KoTextLayoutRootArea*, KWRootAreaPage *> m_pageHash;
0065     QList<KoTextLayoutRootArea*> m_rootAreaCache;
0066     QList<QPair<KWRootAreaProviderBase *, int> > m_dependentProviders;
0067 
0068     QList<KWRootAreaPage *> pages() const { return m_pages; }
0069     KoTextLayoutRootArea* provideNext(KoTextDocumentLayout *documentLayout, const RootAreaConstraint &constraints);
0070     void handleDependentProviders(int pageNumber);
0071 };
0072 
0073 #endif