[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