[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    koffice/kword/part
From:       Thomas Zander <zander () kde ! org>
Date:       2010-08-29 21:02:41
Message-ID: 20100829210241.C17D3AC881 () svn ! kde ! org
[Download RAW message or body]

SVN commit 1169682 by zander:

Refactor background frameset to not be a textFS

It doesn't make much sense to have the frameset that
contains the backgrounds for pages to be a text frameset, so
introduce type to KWFrameSet and make this more sane.

 M  +1 -3      KWOdfLoader.cpp  
 M  +8 -3      KWord.cpp  
 M  +8 -2      KWord.h  
 M  +21 -21    frames/KWFrameLayout.cpp  
 M  +2 -1      frames/KWFrameLayout.h  
 M  +3 -2      frames/KWFrameSet.cpp  
 M  +6 -1      frames/KWFrameSet.h  
 M  +3 -6      frames/KWPageBackground.cpp  
 M  +5 -10     frames/KWTextFrameSet.cpp  


--- trunk/koffice/kword/part/KWOdfLoader.cpp #1169681:1169682
@@ -137,9 +137,7 @@
     loadMasterPageStyles(context, hasMainText);
 
     // add page background frame set
-    KWTextFrameSet *pageBackgroundFrameSet = new KWTextFrameSet(m_document, \
                KWord::PageBackgroundFrameSet);
-    pageBackgroundFrameSet->setAllowLayout(false);
-    pageBackgroundFrameSet->setPageStyle(m_document->pageManager()->pageStyle("Standard"));
 +    KWFrameSet *pageBackgroundFrameSet = new KWFrameSet(KWord::BackgroundFrameSet);
     m_document->addFrameSet(pageBackgroundFrameSet);
 
 #if 0 //1.6:
--- trunk/koffice/kword/part/KWord.cpp #1169681:1169682
@@ -22,16 +22,21 @@
 
 namespace KWord
 {
-bool isAutoGenerated(KWTextFrameSet *tfs)
+bool isAutoGenerated(KWFrameSet *fs)
 {
+    if (fs->type() == BackgroundFrameSet)
+        return true;
+    if (fs->type() == TextFrameSet) {
+        KWTextFrameSet *tfs = static_cast<KWTextFrameSet*>(fs);
     return tfs
         && (tfs->textFrameSetType() == KWord::OddPagesHeaderTextFrameSet
                 || tfs->textFrameSetType() == KWord::EvenPagesHeaderTextFrameSet
                 || tfs->textFrameSetType() == KWord::OddPagesFooterTextFrameSet
                 || tfs->textFrameSetType() == KWord::EvenPagesFooterTextFrameSet
-                || tfs->textFrameSetType() == KWord::MainTextFrameSet
-                || tfs->textFrameSetType() == KWord::PageBackgroundFrameSet);
+                    || tfs->textFrameSetType() == KWord::MainTextFrameSet);
 }
+    return false;
+}
 
 bool isHeaderFooter(KWTextFrameSet *tfs)
 {
--- trunk/koffice/kword/part/KWord.h #1169681:1169682
@@ -24,6 +24,7 @@
 
 #include <KoResourceManager.h>
 
+class KWFrameSet;
 class KWTextFrameSet;
 
 /// The kword-global namespace for all KWord related things.
@@ -69,11 +70,17 @@
         Foreground
     };
 
+    enum FrameSetType {
+        BackgroundFrameSet,
+        TextFrameSet,
+        OtherFrameSet
+    };
+
     /**
      * Returns true if the passed frameset is a known type that the frameLayout \
                auto-creates.
      * @param fs the frameset to check. 0 is allowed.
      */
-    bool isAutoGenerated(KWTextFrameSet *fs);
+    bool isAutoGenerated(KWFrameSet *fs);
     /**
      * Returns true if the passed frameset is a header or a footer frameset.
      * @param fs the frameset to check. 0 is allowed.
@@ -87,7 +94,6 @@
         OddPagesFooterTextFrameSet,  ///< The frameSet that holds the footers for \
                the odd pages
         EvenPagesFooterTextFrameSet, ///< The frameSet that holds the footers for \
                the even pages
         MainTextFrameSet,   ///< The frameset that holds all the frames for the main \
                text area
-        PageBackgroundFrameSet, ///< The frame set that holds all the frames for the \
                page background
         OtherTextFrameSet   ///< Any other text frameset not managed by the \
auto-frame layout  };
 
--- trunk/koffice/kword/part/frames/KWFrameLayout.cpp #1169681:1169682
@@ -42,6 +42,7 @@
         : m_pageManager(pageManager),
         m_frameSets(frameSets),
         m_maintext(0),
+        m_backgroundFrameSet(0),
         m_document(0),
         m_setup(false)
 {
@@ -63,14 +64,6 @@
     allHFTypes.append(KWord::OddPagesFooterTextFrameSet);
     allHFTypes.append(KWord::EvenPagesFooterTextFrameSet);
 
-    // create page background
-    KWTextFrameSet *fs = getOrCreate(KWord::PageBackgroundFrameSet, page);
-    if (!hasFrameOn(fs, pageNumber)) {
-        KoShape *shape = new KWPageBackground();
-        KWFrame *f = new KWFrame(shape, fs);
-        f->setTextRunAround(KWord::RunThrough);
-    }
-
     // create headers & footers
     KWord::TextFrameSetType origin;
     if (shouldHaveHeaderOrFooter(pageNumber, true, &origin)) {
@@ -86,6 +79,19 @@
             createCopyFrame(fs, page);
     }
 
+    // create page background
+    if (!m_backgroundFrameSet) {
+        m_backgroundFrameSet = new KWFrameSet(KWord::BackgroundFrameSet);
+        m_backgroundFrameSet->setName("backgroundFrames");
+    }
+    if (!hasFrameOn(m_backgroundFrameSet, pageNumber)) {
+        KoShape *shape = new KWPageBackground();
+        shape->setPosition(QPointF(0, page.offsetInDocument()));
+        KWFrame *f = new KWFrame(shape, m_backgroundFrameSet);
+        f->setTextRunAround(KWord::RunThrough);
+        // TODO pagespread
+    }
+
     // delete headers/footer frames that are not needed on this page
     foreach (KWFrame *frame, framesInPage(page.rect())) {
         KWTextFrameSet *tfs = dynamic_cast<KWTextFrameSet*>(frame->frameSet());
@@ -312,9 +318,6 @@
             requestedHeight[3] = -1; // rest
             break;
         }
-        case KWord::PageBackgroundFrameSet:
-            pageBackground = static_cast<KWFrame *>(frame);
-            break;
         // TODO endnote frameset
         default:;
         }
@@ -473,9 +476,6 @@
     case KWord::EvenPagesFooterTextFrameSet:
         answer = &frameSets.evenFooters;
         break;
-    case KWord::PageBackgroundFrameSet:
-        answer = &frameSets.pageBackground;
-        break;
     case KWord::MainTextFrameSet:
         answer = &m_maintext;
         break;
@@ -504,11 +504,13 @@
         return;
 
     m_maintext = 0;
+    m_backgroundFrameSet = 0;
     m_pageStyles.clear();
     foreach (KWFrameSet *fs, m_frameSets) {
-        KWTextFrameSet *tfs = dynamic_cast<KWTextFrameSet*>(fs);
-        if (tfs == 0)
-            continue;
+        if (fs->type() == KWord::BackgroundFrameSet) {
+            m_backgroundFrameSet = fs;
+        } else if (fs->type() == KWord::TextFrameSet) {
+            KWTextFrameSet *tfs = static_cast<KWTextFrameSet*>(fs);
         FrameSets frameSets = m_pageStyles.value(tfs->pageStyle());
         switch (tfs->textFrameSetType()) {
         case KWord::OddPagesHeaderTextFrameSet:
@@ -523,9 +525,6 @@
         case KWord::EvenPagesFooterTextFrameSet:
             frameSets.evenFooters = tfs;
             break;
-        case KWord::PageBackgroundFrameSet:
-            frameSets.pageBackground = tfs;
-            break;
         case KWord::MainTextFrameSet:
             m_maintext = tfs;
             disconnect(tfs, SIGNAL(frameRemoved(KWFrame*)), this, \
SLOT(mainframeRemoved(KWFrame*))); @@ -535,6 +534,7 @@
         if (tfs->pageStyle().isValid())
             m_pageStyles.insert(tfs->pageStyle(), frameSets);
     }
+    }
     m_setup = true;
 }
 
@@ -551,7 +551,7 @@
     return shape;
 }
 
-bool KWFrameLayout::hasFrameOn(KWTextFrameSet *fs, int pageNumber)
+bool KWFrameLayout::hasFrameOn(KWFrameSet *fs, int pageNumber)
 {
     KWPage page = m_pageManager->page(pageNumber);
     Q_ASSERT(page.isValid());
--- trunk/koffice/kword/part/frames/KWFrameLayout.h #1169681:1169682
@@ -126,7 +126,7 @@
     QList<KWFrame *> framesInPage(const QRectF &page);
     void setup();
     bool shouldHaveHeaderOrFooter(int pageNumber, bool header, \
                KWord::TextFrameSetType *origin);
-    bool hasFrameOn(KWTextFrameSet *fs, int pageNumber);
+    bool hasFrameOn(KWFrameSet *fs, int pageNumber);
     void cleanFrameSet(KWTextFrameSet *fs);
     KWFrame* createCopyFrame(KWFrameSet *fs, const KWPage &page);
 
@@ -136,6 +136,7 @@
     QHash<KWPageStyle, FrameSets> m_pageStyles;
 
     KWTextFrameSet *m_maintext;
+    KWFrameSet *m_backgroundFrameSet;
 
     const KWDocument *m_document;
 
--- trunk/koffice/kword/part/frames/KWFrameSet.cpp #1169681:1169682
@@ -23,8 +23,9 @@
 
 #include <kdebug.h>
 
-KWFrameSet::KWFrameSet()
-        : QObject()
+KWFrameSet::KWFrameSet(KWord::FrameSetType type)
+    : QObject(),
+    m_type(type)
 {
 }
 
--- trunk/koffice/kword/part/frames/KWFrameSet.h #1169681:1169682
@@ -38,7 +38,7 @@
     Q_OBJECT
 public:
     /// Constructor.
-    KWFrameSet();
+    KWFrameSet(KWord::FrameSetType type = KWord::OtherFrameSet);
     virtual ~KWFrameSet();
 
     /**
@@ -91,6 +91,10 @@
     virtual void printDebug(KWFrame *frame);
 #endif
 
+    KWord::FrameSetType type() const {
+        return m_type;
+    }
+
 signals:
     /**
      * emitted whenever a frame is added
@@ -116,6 +120,7 @@
 
     /// The list of frames that this frameset owns.
     QList<KWFrame*> m_frames;
+    KWord::FrameSetType m_type;
 
 private:
     QString m_name;
--- trunk/koffice/kword/part/frames/KWPageBackground.cpp #1169681:1169682
@@ -20,6 +20,8 @@
 #include "KWPageBackground.h"
 #include <KoShapeBackground.h>
 
+#include <QPainter>
+
 KWPageBackground::KWPageBackground()
 {
     setSelectable(false);
@@ -32,14 +34,9 @@
 
 void KWPageBackground::paint(QPainter &painter, const KoViewConverter &converter)
 {
-    return;
-    if (background()) {
         applyConversion(painter, converter);
-        QPainterPath p;
-        p.addRect(QRectF(QPointF(), size()));
-        background()->paint(painter, p);
+    painter.fillRect(0, 0, size().width(), size().height(), Qt::red);
     }
-}
 
 bool KWPageBackground::loadOdf(const KoXmlElement &, KoShapeLoadingContext &)
 {
--- trunk/koffice/kword/part/frames/KWTextFrameSet.cpp #1169681:1169682
@@ -40,7 +40,8 @@
 #include <QTextBlock>
 
 KWTextFrameSet::KWTextFrameSet(const KWDocument *doc)
-        : m_document(new QTextDocument()),
+        : KWFrameSet(KWord::TextFrameSet),
+        m_document(new QTextDocument()),
         m_layoutTriggered(false),
         m_allowLayoutRequests(true),
         m_frameOrderDirty(true),
@@ -64,7 +65,8 @@
 }
 
 KWTextFrameSet::KWTextFrameSet(const KWDocument *doc, KWord::TextFrameSetType type)
-        : m_document(new QTextDocument()),
+        : KWFrameSet(KWord::TextFrameSet),
+        m_document(new QTextDocument()),
         m_layoutTriggered(false),
         m_allowLayoutRequests(true),
         m_frameOrderDirty(true),
@@ -99,9 +101,6 @@
     case KWord::MainTextFrameSet:
         setName(i18n("Main text"));
         break;
-    case KWord::PageBackgroundFrameSet:
-        setName(i18n("Page Background"));
-        break;
     default: ;
     }
 }
@@ -109,7 +108,7 @@
 KWTextFrameSet::~KWTextFrameSet()
 {
     // first remove the doc from all our frames so they won't try to use it after we \
                delete it.
-    if (!m_frames.isEmpty() && m_textFrameSetType != KWord::PageBackgroundFrameSet) \
{ +    if (!m_frames.isEmpty()) {
         // we transfer ownership of the doc to our last shape so it will keep being \
alive until nobody references it anymore.  QList<KWFrame*>::Iterator iter = \
                m_frames.end();
         --iter;
@@ -130,10 +129,6 @@
 
 void KWTextFrameSet::setupFrame(KWFrame *frame)
 {
-    if (frame->shape() && m_pageStyle.isValid() && m_textFrameSetType == \
                KWord::PageBackgroundFrameSet) {
-        frame->shape()->setBackground(m_pageStyle.background());
-        return;
-    }
     if (m_textFrameSetType != KWord::OtherTextFrameSet)
         frame->shape()->setGeometryProtected(true);
     KoTextShapeData *data = \
qobject_cast<KoTextShapeData*>(frame->shape()->userData());


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic