[calligra] /: Make sure page is there when resize is called

Thorsten Zachmann t.zachmann at zagge.de
Sat May 7 07:39:26 BST 2011


Git commit 7538442f82e5ef212e1bc4c6d9c75016c7362c37 by Thorsten Zachmann.
Committed on 07/05/2011 at 08:30.
Pushed by zachmann into branch 'master'.

Make sure page is there when resize is called

@Casper and Sebastian: Is that ok to do it like that.

CCMAIL: calligra-devel at kde.org

M  +1    -0    libs/kotext/KoTextDocument.cpp     
M  +3    -1    libs/kotext/KoTextDocument.h     
M  +3    -0    libs/kotext/KoTextPage.h     
M  +5    -1    libs/textlayout/KoTextDocumentLayout.cpp     
M  +8    -2    plugins/variables/PageVariable.cpp     

http://commits.kde.org/calligra/7538442f82e5ef212e1bc4c6d9c75016c7362c37

diff --git a/libs/kotext/KoTextDocument.cpp b/libs/kotext/KoTextDocument.cpp
index 3c3d5f4..0f319a1 100644
--- a/libs/kotext/KoTextDocument.cpp
+++ b/libs/kotext/KoTextDocument.cpp
@@ -54,6 +54,7 @@ const QUrl KoTextDocument::FootNotesFrameURL = QUrl("kotext://footnotesframe");
 const QUrl KoTextDocument::RelativeTabsURL = QUrl("kotext://relativetabs");
 const QUrl KoTextDocument::HeadingListURL = QUrl("kotext://headingList");
 const QUrl KoTextDocument::SelectionsURL = QUrl("kotext://selections");
+const QUrl KoTextDocument::LayoutTextPageUrl = QUrl("kotext://layoutTextPage");
 
 Q_DECLARE_METATYPE(QTextFrame*)
 
diff --git a/libs/kotext/KoTextDocument.h b/libs/kotext/KoTextDocument.h
index 9cc6e79..dd90616 100644
--- a/libs/kotext/KoTextDocument.h
+++ b/libs/kotext/KoTextDocument.h
@@ -181,7 +181,8 @@ public:
         FootNotesFrame,
         RelativeTabs,
         HeadingList,
-        Selections
+        Selections,
+        LayoutTextPage /// this is used for setting the correct page variable on the first resize and should not be used for other purposes
     };
 
     static const QUrl StyleManagerURL;
@@ -198,6 +199,7 @@ public:
     static const QUrl RelativeTabsURL;
     static const QUrl HeadingListURL;
     static const QUrl SelectionsURL;
+    static const QUrl LayoutTextPageUrl;
 
 private:
     QTextDocument *m_document;
diff --git a/libs/kotext/KoTextPage.h b/libs/kotext/KoTextPage.h
index b85e9d6..ff0dc50 100644
--- a/libs/kotext/KoTextPage.h
+++ b/libs/kotext/KoTextPage.h
@@ -24,6 +24,7 @@
 
 #include <QString>
 #include <QRectF>
+#include <QMetaType>
 
 /**
  * Interface for a single OpenDocumentText page.
@@ -84,4 +85,6 @@ public:
 
 };
 
+Q_DECLARE_METATYPE(KoTextPage*)
+
 #endif
diff --git a/libs/textlayout/KoTextDocumentLayout.cpp b/libs/textlayout/KoTextDocumentLayout.cpp
index 1528f2d..b44c4f2 100644
--- a/libs/textlayout/KoTextDocumentLayout.cpp
+++ b/libs/textlayout/KoTextDocumentLayout.cpp
@@ -428,7 +428,11 @@ void KoTextDocumentLayout::resizeInlineObject(QTextInlineObject item, int positi
     QTextCharFormat cf = format.toCharFormat();
     KoInlineObject *obj = d->inlineTextObjectManager->inlineTextObject(cf);
     if (obj) {
-        obj->resize(document(), item, position, cf, paintDevice());
+        QTextDocument *doc = document();
+        QVariant v;
+        v.setValue(d->anchoringRootArea->page());
+        doc->addResource(KoTextDocument::LayoutTextPage, QUrl("kotext://layoutTextPage"), v);
+        obj->resize(doc, item, position, cf, paintDevice());
         registerInlineObject(item);
     }
 }
diff --git a/plugins/variables/PageVariable.cpp b/plugins/variables/PageVariable.cpp
index 3e9646d..4ffdb1e 100644
--- a/plugins/variables/PageVariable.cpp
+++ b/plugins/variables/PageVariable.cpp
@@ -84,13 +84,19 @@ void PageVariable::resize(const QTextDocument *document, QTextInlineObject objec
 {
     KoTextPage *page = 0;
     if (m_type != PageCount) {
+#if 0 // the code is left here to do some testing
         KoTextDocumentLayout *lay = qobject_cast<KoTextDocumentLayout*>(document->documentLayout());
+        KoTextLayoutRootArea *rootArea = 0;
+        KoTextPage *page2 = 0;
         if (lay) {
-            KoTextLayoutRootArea *rootArea = lay->rootAreaForPosition(posInDocument);
+            rootArea = lay->rootAreaForPosition(posInDocument);
             if (rootArea) {
-                page = rootArea->page();
+                page2 = rootArea->page();
             }
         }
+#endif
+        page = document->resource(KoTextDocument::LayoutTextPage, KoTextDocument::LayoutTextPageUrl).value<KoTextPage*>();
+        //qDebug() << __PRETTY_FUNCTION__ << lay << rootArea << page << page2;
     }
     int pagenumber = 0;
 



More information about the calligra-devel mailing list