1
#include "TestFrameLayout.h"
2
#include "TestDocumentLayout.h"
4
#include "../KWPageManager.h"
6
#include "../KWPageStyle.h"
7
#include "../frames/KWFrameLayout.h"
8
#include "../frames/KWCopyShape.h"
9
#include "../frames/KWTextFrameSet.h"
10
#include "../frames/KWTextFrame.h"
12
#include <MockShapes.h>
13
#include <MockTextShape.h>
15
#include <KoTextDocumentLayout.h>
16
#include <KoColorBackground.h>
17
#include <QTextCursor>
19
#include <kcomponentdata.h>
25
pageManager = new KWPageManager();
26
KWPage page = pageManager->appendPage();
27
KoPageLayout pageLayout = page.pageStyle().pageLayout();
28
pageLayout.width = 200;
29
pageLayout.height = 200;
30
page.pageStyle().setPageLayout(pageLayout);
31
pageStyle = page.pageStyle();
37
KWPageManager *pageManager;
38
KWPageStyle pageStyle;
41
TestFrameLayout::TestFrameLayout()
43
new KComponentData("TestFrameLayout");
46
void TestFrameLayout::testGetOrCreateFrameSet()
50
KWPage page = helper.pageManager->page(1);
51
KWFrameLayout bfl(helper.pageManager, m_frames);
52
connect(&bfl, SIGNAL(newFrameSet(KWFrameSet*)), this, SLOT(addFS(KWFrameSet*)));
54
KWTextFrameSet *fs = bfl.getOrCreate(KWord::OddPagesHeaderTextFrameSet, page);
56
QCOMPARE(fs->textFrameSetType(), KWord::OddPagesHeaderTextFrameSet);
58
KWTextFrameSet *fs2 = bfl.getOrCreate(KWord::OddPagesHeaderTextFrameSet, page);
61
QVERIFY(m_frames.contains(fs2));
63
KWTextFrameSet *main = new KWTextFrameSet(0, KWord::MainTextFrameSet);
64
m_frames.append(main);
66
KWTextFrameSet *main2 = bfl.getOrCreate(KWord::MainTextFrameSet, page);
68
QCOMPARE(main, main2);
69
QCOMPARE(main->textFrameSetType(), KWord::MainTextFrameSet);
72
void TestFrameLayout::testCreateNewFramesForPage()
76
QVERIFY(m_frames.count() == 0);
77
KWFrameLayout bfl(helper.pageManager, m_frames);
78
KWPage page = helper.pageManager->page(1);
79
connect(&bfl, SIGNAL(newFrameSet(KWFrameSet*)), this, SLOT(addFS(KWFrameSet*)));
81
KWTextFrameSet *main = bfl.getOrCreate(KWord::MainTextFrameSet, page);
83
QVERIFY(bfl.frameOn(main, 1) == 0);
85
KoShape *shape = new MockTextShape();
86
new KWTextFrame(shape, main);
87
QCOMPARE(main->frameCount(), 1);
89
QVERIFY(bfl.frameOn(main, 1));
91
bfl.createNewFramesForPage(1);
92
QCOMPARE(main->frameCount(), 1);
95
void TestFrameLayout::testShouldHaveHeaderOrFooter()
99
KWFrameLayout bfl(helper.pageManager, m_frames);
100
connect(&bfl, SIGNAL(newFrameSet(KWFrameSet*)), this, SLOT(addFS(KWFrameSet*)));
102
// test the first page
103
helper.pageStyle.setHeaderPolicy(KWord::HFTypeNone);
104
helper.pageStyle.setFooterPolicy(KWord::HFTypeNone);
105
KWord::TextFrameSetType origin;
106
QCOMPARE(bfl.shouldHaveHeaderOrFooter(1, true, &origin), false); // header
107
QCOMPARE(bfl.shouldHaveHeaderOrFooter(1, false, &origin), false); // footer
109
helper.pageStyle.setHeaderPolicy(KWord::HFTypeEvenOdd);
110
helper.pageStyle.setFooterPolicy(KWord::HFTypeUniform);
111
QCOMPARE(bfl.shouldHaveHeaderOrFooter(1, true, &origin), true);
112
QCOMPARE(origin, KWord::OddPagesHeaderTextFrameSet);
113
QCOMPARE(bfl.shouldHaveHeaderOrFooter(1, false, &origin), true);
114
QCOMPARE(origin, KWord::OddPagesFooterTextFrameSet);
116
helper.pageStyle.setHeaderPolicy(KWord::HFTypeUniform);
117
helper.pageStyle.setFooterPolicy(KWord::HFTypeEvenOdd);
118
QCOMPARE(bfl.shouldHaveHeaderOrFooter(1, true, &origin), true);
119
QCOMPARE(origin, KWord::OddPagesHeaderTextFrameSet);
120
QCOMPARE(bfl.shouldHaveHeaderOrFooter(1, false, &origin), true);
121
QCOMPARE(origin, KWord::OddPagesFooterTextFrameSet);
123
// append the second page, same pageStyle like the first
124
helper.pageManager->appendPage();
125
QVERIFY(helper.pageManager->page(1).pageStyle() == helper.pageManager->page(2).pageStyle());
127
// append the theird page with another pagesettings
128
KWPageStyle pagesettings3("Page3PageStyle");
129
helper.pageManager->addPageStyle(pagesettings3);
130
helper.pageManager->appendPage(pagesettings3);
131
QVERIFY(helper.pageManager->page(3).pageStyle() == pagesettings3);
133
// test the second page
134
helper.pageStyle.setHeaderPolicy(KWord::HFTypeNone);
135
helper.pageStyle.setFooterPolicy(KWord::HFTypeNone);
136
QCOMPARE(bfl.shouldHaveHeaderOrFooter(2, true, &origin), false);
137
QCOMPARE(bfl.shouldHaveHeaderOrFooter(2, false, &origin), false);
139
helper.pageStyle.setHeaderPolicy(KWord::HFTypeEvenOdd);
140
helper.pageStyle.setFooterPolicy(KWord::HFTypeUniform);
141
QCOMPARE(bfl.shouldHaveHeaderOrFooter(2, true, &origin), true);
142
QCOMPARE(origin, KWord::EvenPagesHeaderTextFrameSet);
143
QCOMPARE(bfl.shouldHaveHeaderOrFooter(2, false, &origin), true);
144
QCOMPARE(origin, KWord::OddPagesFooterTextFrameSet);
147
pagesettings3.setHeaderPolicy(KWord::HFTypeEvenOdd);
148
pagesettings3.setFooterPolicy(KWord::HFTypeUniform);
149
QCOMPARE(bfl.shouldHaveHeaderOrFooter(3, true, &origin), true);
150
QCOMPARE(origin, KWord::OddPagesHeaderTextFrameSet);
151
QCOMPARE(bfl.shouldHaveHeaderOrFooter(3, false, &origin), true);
152
QCOMPARE(origin, KWord::OddPagesFooterTextFrameSet);
154
pagesettings3.setHeaderPolicy(KWord::HFTypeNone);
155
pagesettings3.setFooterPolicy(KWord::HFTypeNone);
156
QCOMPARE(bfl.shouldHaveHeaderOrFooter(3, true, &origin), false);
157
QCOMPARE(bfl.shouldHaveHeaderOrFooter(3, false, &origin), false);
159
// test the first and the second pages again to be sure they still have there prev values
160
QCOMPARE(bfl.shouldHaveHeaderOrFooter(1, true, &origin), true);
161
QCOMPARE(bfl.shouldHaveHeaderOrFooter(2, true, &origin), true);
164
void TestFrameLayout::headerPerPage()
168
KWPage page = helper.pageManager->begin();
169
KWFrameLayout bfl(helper.pageManager, m_frames);
170
connect(&bfl, SIGNAL(newFrameSet(KWFrameSet*)), this, SLOT(addFS(KWFrameSet*)));
172
KWPageStyle myStyle("myStyle");
173
myStyle.setHeaderPolicy(KWord::HFTypeUniform);
174
helper.pageManager->addPageStyle(myStyle);
175
KWPage page2 = helper.pageManager->appendPage(myStyle);
176
QVERIFY(page.pageStyle() != page2.pageStyle());
177
QCOMPARE(bfl.m_pageStyles.count(), 0);
179
KWTextFrameSet *fs = bfl.getOrCreate(KWord::OddPagesHeaderTextFrameSet, page);
181
QCOMPARE(fs->textFrameSetType(), KWord::OddPagesHeaderTextFrameSet);
183
QCOMPARE(bfl.m_pageStyles.count(), 1);
184
QVERIFY(bfl.m_pageStyles.contains(page.pageStyle()));
185
KWFrameLayout::FrameSets fsets = bfl.m_pageStyles[page.pageStyle()];
186
QCOMPARE(fsets.oddHeaders, fs);
187
QCOMPARE(fsets.evenHeaders, (void*) 0);
188
QCOMPARE(fsets.oddFooters, (void*) 0);
189
QCOMPARE(fsets.evenFooters, (void*) 0);
191
KWTextFrameSet *fs2 = bfl.getOrCreate(KWord::OddPagesHeaderTextFrameSet, page2);
193
QCOMPARE(fs2->textFrameSetType(), KWord::OddPagesHeaderTextFrameSet);
196
QCOMPARE(bfl.getOrCreate(KWord::OddPagesHeaderTextFrameSet, page2), fs2);
197
QCOMPARE(bfl.getOrCreate(KWord::OddPagesHeaderTextFrameSet, page), fs);
199
QCOMPARE(bfl.m_pageStyles.count(), 2);
200
QVERIFY(bfl.m_pageStyles.contains(page.pageStyle()));
201
QVERIFY(bfl.m_pageStyles.contains(page2.pageStyle()));
202
fsets = bfl.m_pageStyles[page.pageStyle()];
203
QCOMPARE(fsets.oddHeaders, fs);
204
QCOMPARE(fsets.evenHeaders, (void*) 0);
205
QCOMPARE(fsets.oddFooters, (void*) 0);
206
QCOMPARE(fsets.evenFooters, (void*) 0);
207
KWFrameLayout::FrameSets fsets2 = bfl.m_pageStyles[page2.pageStyle()];
208
QCOMPARE(fsets2.oddHeaders, fs2);
209
QCOMPARE(fsets2.evenHeaders, (void*) 0);
210
QCOMPARE(fsets2.oddFooters, (void*) 0);
211
QCOMPARE(fsets2.evenFooters, (void*) 0);
214
void TestFrameLayout::testFrameCreation()
218
KWFrameLayout bfl(helper.pageManager, m_frames);
219
connect(&bfl, SIGNAL(newFrameSet(KWFrameSet*)), this, SLOT(addFS(KWFrameSet*)));
221
KWPageStyle style = helper.pageManager->defaultPageStyle();
222
style.setHeaderPolicy(KWord::HFTypeUniform);
223
style.setHasMainTextFrame(true);
225
bfl.createNewFramesForPage(1);
226
QVERIFY(bfl.m_maintext != 0);
227
QCOMPARE(bfl.m_maintext->frameCount(), 1);
229
KWFrameLayout::FrameSets frameSets = bfl.m_pageStyles.value(style);
230
QVERIFY(frameSets.oddHeaders != 0);
231
QCOMPARE(frameSets.oddHeaders->frameCount(), 1);
232
QVERIFY(frameSets.evenHeaders == 0);
233
QVERIFY(frameSets.oddFooters == 0);
234
QVERIFY(frameSets.evenFooters == 0);
236
KoColumns columns = style.columns();
238
style.setColumns(columns);
241
bfl.createNewFramesForPage(1);
242
QCOMPARE(bfl.m_maintext->frameCount(), 2);
244
frameSets = bfl.m_pageStyles.value(style);
245
QVERIFY(frameSets.oddHeaders != 0);
246
QCOMPARE(frameSets.oddHeaders->frameCount(), 1);
247
QVERIFY(frameSets.evenHeaders == 0);
248
QVERIFY(frameSets.oddFooters == 0);
249
QVERIFY(frameSets.evenFooters == 0);
252
void TestFrameLayout::testCreateNewFrameForPage_data()
254
// tests void KWFrameLayout::createNewFrameForPage(KWTextFrameSet *fs, int pageNumber)
255
QTest::addColumn<QStringList>("pages");
256
QTest::addColumn<int>("frameSetType");
257
QTest::addColumn<int>("pageNumber");
258
QTest::addColumn<int>("expectedFrameCount");
260
QTest::newRow("noFooter1") << (QStringList() << QString("style1") << QString("style2")) <<
261
(int) KWord::OddPagesFooterTextFrameSet << 1 << 0;
262
QTest::newRow("noFooter2") << (QStringList() << QString("style1") << QString("style2")) <<
263
(int) KWord::EvenPagesFooterTextFrameSet << 1 << 0;
264
QTest::newRow("noFooter3") << (QStringList() << QString("style1") << QString("style2")) <<
265
(int) KWord::EvenPagesFooterTextFrameSet << 2 << 0;
267
QTest::newRow("noHeader1") << (QStringList() << QString("style1") << QString("style2")) <<
268
(int) KWord::OddPagesHeaderTextFrameSet << 1 << 0;
269
QTest::newRow("noHeader2") << (QStringList() << QString("style1") << QString("style2")) <<
270
(int) KWord::OddPagesHeaderTextFrameSet << 2 << 0;
271
QTest::newRow("noHeader3") << (QStringList() << QString("style1") << QString("style2")) <<
272
(int) KWord::EvenPagesHeaderTextFrameSet << 1 << 0;
274
QTest::newRow("oddHeader1") << (QStringList() << QString("style2") << QString("style2")) <<
275
(int) KWord::OddPagesHeaderTextFrameSet << 1 << 1;
276
QTest::newRow("oddHeader2") << (QStringList() << QString("style2") << QString("style2")) <<
277
(int) KWord::OddPagesHeaderTextFrameSet << 2 << 0;
278
QTest::newRow("evenHeader1") << (QStringList() << QString("style2") << QString("style2")) <<
279
(int) KWord::EvenPagesHeaderTextFrameSet << 1 << 0;
280
QTest::newRow("evenHeader2") << (QStringList() << QString("style2") << QString("style2")) <<
281
(int) KWord::EvenPagesHeaderTextFrameSet << 2 << 1;
283
QTest::newRow("main1") << (QStringList() << QString("style1") << QString("style3") << QString("style4")) <<
284
(int) KWord::MainTextFrameSet << 1 << 1;
285
QTest::newRow("main2") << (QStringList() << QString("style1") << QString("style3") << QString("style4")) <<
286
(int) KWord::MainTextFrameSet << 2 << 0;
287
QTest::newRow("main3") << (QStringList() << QString("style1") << QString("style3") << QString("style4")) <<
288
(int) KWord::MainTextFrameSet << 3 << 2;
289
QTest::newRow("main4") << (QStringList() << QString("style5")) <<
290
(int) KWord::MainTextFrameSet << 1 << 0;
292
QTest::newRow("footer1") << (QStringList() << QString("style3") << QString("style5") << QString("style2")) <<
293
(int) KWord::EvenPagesFooterTextFrameSet << 1 << 0; // uniform goes to the odd
294
QTest::newRow("footer2") << (QStringList() << QString("style3") << QString("style5") << QString("style2")) <<
295
(int) KWord::EvenPagesFooterTextFrameSet << 2 << 0;
296
QTest::newRow("footer3") << (QStringList() << QString("style3") << QString("style5") << QString("style2")) <<
297
(int) KWord::EvenPagesFooterTextFrameSet << 3 << 0; // uniform goes to the odd
299
QTest::newRow("footer4") << (QStringList() << QString("style3") << QString("style5") << QString("style2")) <<
300
(int) KWord::OddPagesFooterTextFrameSet << 1 << 1;
301
QTest::newRow("footer5") << (QStringList() << QString("style3") << QString("style5") << QString("style2")) <<
302
(int) KWord::OddPagesFooterTextFrameSet << 2 << 0;
303
QTest::newRow("footer6") << (QStringList() << QString("style3") << QString("style5") << QString("style2")) <<
304
(int) KWord::OddPagesFooterTextFrameSet << 3 << 1;
307
void TestFrameLayout::testCreateNewFrameForPage()
309
QFETCH(QStringList, pages);
310
QFETCH(int, frameSetType);
311
QFETCH(int, pageNumber);
312
QFETCH(int, expectedFrameCount);
314
QHash<QString, KWPageStyle> styles;
315
KWPageStyle style1("style1");
316
style1.setHeaderPolicy(KWord::HFTypeNone);
317
style1.setHasMainTextFrame(true);
318
style1.setFooterPolicy(KWord::HFTypeNone);
319
styles.insert(style1.name(), style1);
321
KWPageStyle style2("style2");
322
style2.setHeaderPolicy(KWord::HFTypeEvenOdd);
323
style2.setHasMainTextFrame(true);
324
style2.setFooterPolicy(KWord::HFTypeUniform);
325
styles.insert(style2.name(), style2);
327
KWPageStyle style3("style3"); // weird
328
style3.setHeaderPolicy(KWord::HFTypeEvenOdd);
329
style3.setHasMainTextFrame(false);
330
style3.setFooterPolicy(KWord::HFTypeUniform);
331
styles.insert(style3.name(), style3);
333
KWPageStyle style4("style4");
334
style4.setHeaderPolicy(KWord::HFTypeUniform);
335
style4.setHasMainTextFrame(true);
336
style4.setFooterPolicy(KWord::HFTypeEvenOdd);
339
columns.columnSpacing = 4;
340
style4.setColumns(columns);
341
styles.insert(style4.name(), style4);
343
KWPageStyle style5("style5"); // blank
344
style5.setHeaderPolicy(KWord::HFTypeNone);
345
style5.setHasMainTextFrame(false);
346
style5.setFooterPolicy(KWord::HFTypeNone);
347
style5.setColumns(columns);
348
styles.insert(style5.name(), style5);
350
KWPageManager manager;
351
foreach (const QString &styleName, pages) {
352
QVERIFY(styles.contains(styleName));
353
manager.appendPage(styles[styleName]);
357
KWTextFrameSet tfs(0, (KWord::TextFrameSetType) frameSetType);
359
KWFrameLayout frameLayout(&manager, m_frames);
360
connect(&frameLayout, SIGNAL(newFrameSet(KWFrameSet*)), this, SLOT(addFS(KWFrameSet*)));
362
KWPage page = manager.page(pageNumber);
363
QVERIFY(page.isValid());
364
tfs.setPageStyle(page.pageStyle());
366
frameLayout.createNewFramesForPage(pageNumber);
367
QCOMPARE(tfs.frameCount(), expectedFrameCount);
368
foreach(KWFrame *frame, tfs.frames()) {
369
QVERIFY (page.rect().contains(frame->shape()->position()));
373
void TestFrameLayout::testCopyFramesForPage()
377
KWPage page = helper.pageManager->begin();
380
MockShape *copyShape = new MockShape();
381
copyShape->setPosition(QPointF(9, 13));
382
KWFrameSet *copyShapeFrameSet = new KWFrameSet();
383
KWFrame *frame = new KWFrame(copyShape, copyShapeFrameSet);
384
frame->setNewFrameBehavior(KWord::CopyNewFrame);
385
m_frames << copyShapeFrameSet;
388
MockShape *copyShapeOdd = new MockShape();
389
copyShapeOdd->setPosition(QPointF(7, 12));
390
KWFrameSet *copyShapeOddFrameSet = new KWFrameSet();
391
frame = new KWFrame(copyShapeOdd, copyShapeOddFrameSet);
392
frame->setNewFrameBehavior(KWord::CopyNewFrame);
393
frame->setFrameOnBothSheets(false);
394
m_frames << copyShapeOddFrameSet;
397
MockTextShape *textshapePlain = new MockTextShape();
398
textshapePlain->setPosition(QPointF(11, 15));
399
KWTextFrameSet *textshapePlainFS = new KWTextFrameSet(0, KWord::OtherTextFrameSet);
400
KWTextFrame *tFrame = new KWTextFrame(textshapePlain, textshapePlainFS);
401
tFrame->setNewFrameBehavior(KWord::ReconnectNewFrame);
402
m_frames << textshapePlainFS;
405
MockTextShape *textShapeRotated = new MockTextShape();
406
textShapeRotated->setPosition(QPointF(13, 107));
407
KWTextFrameSet *textshapeRotFS = new KWTextFrameSet(0, KWord::OtherTextFrameSet);
408
tFrame = new KWTextFrame(textShapeRotated, textshapeRotFS);
409
tFrame->setNewFrameBehavior(KWord::ReconnectNewFrame);
410
tFrame->shape()->rotate(90);
411
m_frames << textshapeRotFS;
413
// textShapeGeometryProtected
414
MockTextShape *textShapeGeometryProtected = new MockTextShape();
415
textShapeGeometryProtected->setPosition(QPointF(3, 14));
416
KWTextFrameSet *textshapeGeometryProtectedFS = new KWTextFrameSet(0, KWord::OtherTextFrameSet);
417
tFrame = new KWTextFrame(textShapeGeometryProtected, textshapeGeometryProtectedFS);
418
tFrame->setNewFrameBehavior(KWord::ReconnectNewFrame);
419
tFrame->shape()->setGeometryProtected(true);
420
m_frames << textshapeGeometryProtectedFS;
422
// textShapeContentProtected
423
MockTextShape *textShapeContentProtected = new MockTextShape();
424
textShapeContentProtected->setPosition(QPointF(19, 23));
425
KWTextFrameSet *textshapeContentProtectedFS = new KWTextFrameSet(0, KWord::OtherTextFrameSet);
426
tFrame = new KWTextFrame(textShapeContentProtected, textshapeContentProtectedFS);
427
tFrame->setNewFrameBehavior(KWord::ReconnectNewFrame);
428
tFrame->shape()->setContentProtected(true);
429
m_frames << textshapeContentProtectedFS;
431
// textShapeUnselectable
432
MockTextShape *textShapeUnselectable = new MockTextShape();
433
textShapeUnselectable->setPosition(QPointF(7, 24));
434
KWTextFrameSet *textshapeUnselectableFS = new KWTextFrameSet(0, KWord::OtherTextFrameSet);
435
tFrame = new KWTextFrame(textShapeUnselectable, textshapeUnselectableFS);
436
tFrame->setNewFrameBehavior(KWord::ReconnectNewFrame);
437
tFrame->shape()->setSelectable(false);
438
m_frames << textshapeUnselectableFS;
441
KWFrameLayout bfl(helper.pageManager, m_frames);
442
connect(&bfl, SIGNAL(newFrameSet(KWFrameSet*)), this, SLOT(addFS(KWFrameSet*)));
444
KWPage page2 = helper.pageManager->appendPage();
445
bfl.createNewFramesForPage(page2.pageNumber());
447
QCOMPARE(copyShapeFrameSet->frameCount(), 2);
448
KWCopyShape *copy = dynamic_cast<KWCopyShape*>(copyShapeFrameSet->frames()[1]->shape());
450
QCOMPARE(copy->position().x(), 9.);
451
QCOMPARE(copy->position().y(), 13. + page2.offsetInDocument());
453
// copyShapeOddFrameSet is not copied
454
QCOMPARE(copyShapeOddFrameSet->frameCount(), 1);
457
QCOMPARE(textshapePlainFS->frameCount(), 2);
458
QVERIFY(!textshapePlainFS->frames()[1]->isCopy());
459
KoShape *shape = textshapePlainFS->frames()[1]->shape();
460
QCOMPARE(shape->position().x(), 11.);
461
QCOMPARE(shape->position().y(), 15. + page2.offsetInDocument());
465
QCOMPARE(textshapeRotFS->frameCount(), 2);
466
QVERIFY(!textshapeRotFS->frames()[1]->isCopy());
467
shape = textshapeRotFS->frames()[1]->shape();
468
QCOMPARE(shape->position().x(), 13.);
469
QCOMPARE(shape->position().y(), 107. + page2.offsetInDocument());
470
QCOMPARE(shape->absolutePosition(KoFlake::TopRightCorner), QPointF(13 + 50, 107 + 50
471
+ page2.offsetInDocument())); // 90° around center moves the top-right down
473
// textShapeGeometryProtected
474
QCOMPARE(textshapeGeometryProtectedFS->frameCount(), 2);
475
QVERIFY(!textshapeGeometryProtectedFS->frames()[1]->isCopy());
476
shape = textshapeGeometryProtectedFS->frames()[1]->shape();
477
QCOMPARE(shape->position().x(), 3.);
478
QCOMPARE(shape->position().y(), 14. + page2.offsetInDocument());
479
QCOMPARE(shape->isGeometryProtected(), true);
480
QCOMPARE(shape->isContentProtected(), false);
481
QCOMPARE(shape->isSelectable(), true);
483
// textShapeContentProtected
484
QCOMPARE(textshapeContentProtectedFS->frameCount(), 2);
485
QVERIFY(!textshapeContentProtectedFS->frames()[1]->isCopy());
486
shape = textshapeContentProtectedFS->frames()[1]->shape();
487
QCOMPARE(shape->isGeometryProtected(), false);
488
QCOMPARE(shape->isContentProtected(), true);
489
QCOMPARE(shape->isSelectable(), true);
491
// textShapeUnselectable
492
QCOMPARE(textshapeUnselectableFS->frameCount(), 2);
493
QVERIFY(!textshapeUnselectableFS->frames()[1]->isCopy());
494
shape = textshapeUnselectableFS->frames()[1]->shape();
495
QCOMPARE(shape->isGeometryProtected(), false);
496
QCOMPARE(shape->isContentProtected(), false);
497
QCOMPARE(shape->isSelectable(), false);
500
void TestFrameLayout::testLargeHeaders()
502
// create a header with waaaaaaay to much text and do one page layout.
503
// Check if the header has been trunkated and no new page has been requested.
506
KWPage page = helper.pageManager->begin();
507
helper.pageStyle.setHeaderPolicy(KWord::HFTypeUniform);
509
KWFrameLayout bfl(helper.pageManager, m_frames);
510
connect(&bfl, SIGNAL(newFrameSet(KWFrameSet*)), this, SLOT(addFS(KWFrameSet*)));
512
KWTextFrameSet *fs = bfl.getOrCreate(KWord::OddPagesHeaderTextFrameSet, page);
514
QCOMPARE(fs->frameCount(), 0);
515
bfl.createNewFramesForPage(page.pageNumber());
516
QCOMPARE(fs->frameCount(), 1);
518
// now we have to make sure the header looks pretty full
519
KWTextFrame *tf = dynamic_cast<KWTextFrame*>(fs->frames().at(0));
521
tf->setMinimumFrameHeight(300);
522
bfl.layoutFramesOnPage(page.pageNumber());
523
QCOMPARE(fs->frameCount(), 1);
525
KoShape *shape = fs->frames()[0]->shape();
526
QVERIFY(shape->size().width() <= 200);
527
// the header can never be bigger than a page.
528
QVERIFY(shape->size().height() < 180);
530
// the header can never force the main text fs to get too small
531
KWTextFrameSet *mfs = bfl.getOrCreate(KWord::MainTextFrameSet, page);
533
QCOMPARE(mfs->frameCount(), 1);
534
shape = mfs->frames()[0]->shape();
535
QVERIFY(shape->size().height() >= 10);
538
void TestFrameLayout::testLayoutPageSpread()
543
//set up as a page spread;
544
KoPageLayout pageLayout = helper.pageStyle.pageLayout();
545
pageLayout.leftMargin = -1;
546
pageLayout.rightMargin = -1;
547
pageLayout.pageEdge = 20;
548
pageLayout.bindingSide = 25;
549
pageLayout.topMargin = 21;
550
pageLayout.bottomMargin = 22;
551
helper.pageStyle.setPageLayout(pageLayout);
553
KWPage spread = helper.pageManager->appendPage();
554
QCOMPARE(spread.pageSide(), KWPage::PageSpread);
555
QCOMPARE(spread.pageNumber(), 2);
557
KWFrameLayout bfl(helper.pageManager, m_frames);
558
connect(&bfl, SIGNAL(newFrameSet(KWFrameSet*)), this, SLOT(addFS(KWFrameSet*)));
560
bfl.createNewFramesForPage(spread.pageNumber());
561
KWTextFrameSet *fs = bfl.getOrCreate(KWord::MainTextFrameSet, spread);
562
QCOMPARE(fs->frameCount(), 2);
563
bfl.layoutFramesOnPage(spread.pageNumber());
564
QCOMPARE(fs->frames()[0]->shape()->position(), QPointF(20, 221)); // left
565
QCOMPARE(fs->frames()[0]->shape()->size(), QSizeF(155, 157));
566
QCOMPARE(fs->frames()[1]->shape()->position(), QPointF(225, 221)); // right
567
QCOMPARE(fs->frames()[1]->shape()->size(), QSizeF(155, 157));
570
void TestFrameLayout::testPageStyle()
572
// on different page styles i want different framesets.
573
// changing a page (in a sequence) to get a different style should
574
// thus delete all auto-generated frames on that page and force
575
// new ones to be created.
579
KWFrameLayout bfl(helper.pageManager, m_frames);
580
connect(&bfl, SIGNAL(newFrameSet(KWFrameSet*)), this, SLOT(addFS(KWFrameSet*)));
582
KWPage page1 = helper.pageManager->page(1);
583
page1.pageStyle().setHeaderPolicy(KWord::HFTypeUniform);
585
KWPageStyle style2 = page1.pageStyle();
586
style2.detach("Style2"); // make it a copy of first style, but with new name
587
helper.pageManager->addPageStyle(style2);
588
KWPage page2 = helper.pageManager->appendPage();
589
QCOMPARE(page1.pageStyle(), page2.pageStyle());
590
KWPage page3 = helper.pageManager->appendPage(style2);
591
QCOMPARE(page3.pageStyle(), style2);
592
KWPage page4 = helper.pageManager->appendPage();
593
QCOMPARE(page1.pageStyle(), page2.pageStyle());
594
QCOMPARE(page3.pageStyle(), style2);
595
QCOMPARE(page4.pageStyle(), style2);
597
bfl.createNewFramesForPage(1);
598
// mainFs is special; there is only one across all page styles
599
QVERIFY(bfl.m_maintext);
600
KWTextFrameSet *mainFs = bfl.getOrCreate(KWord::MainTextFrameSet, page1);
601
QCOMPARE(bfl.m_maintext, mainFs);
602
bfl.createNewFramesForPage(2);
603
QCOMPARE(bfl.getOrCreate(KWord::MainTextFrameSet, page2), mainFs);
604
QVERIFY(!bfl.m_pageStyles.contains(style2));
605
bfl.createNewFramesForPage(3);
606
QVERIFY(bfl.m_pageStyles.contains(style2));
607
QCOMPARE(bfl.getOrCreate(KWord::MainTextFrameSet, page3), mainFs);
608
bfl.createNewFramesForPage(4);
609
QCOMPARE(bfl.getOrCreate(KWord::MainTextFrameSet, page1), mainFs);
610
QCOMPARE(bfl.getOrCreate(KWord::MainTextFrameSet, page2), mainFs);
611
QCOMPARE(bfl.getOrCreate(KWord::MainTextFrameSet, page3), mainFs);
612
QCOMPARE(bfl.getOrCreate(KWord::MainTextFrameSet, page4), mainFs);
614
KWFrameLayout::FrameSets fsets1 = bfl.m_pageStyles.value(page1.pageStyle());
615
KWFrameLayout::FrameSets fsets2 = bfl.m_pageStyles.value(style2);
616
QVERIFY(fsets1.oddHeaders);
617
QVERIFY(fsets2.oddHeaders);
618
QVERIFY(fsets1.oddHeaders != fsets2.oddHeaders);
619
QCOMPARE(bfl.getOrCreate(KWord::OddPagesHeaderTextFrameSet, page1), fsets1.oddHeaders);
620
QCOMPARE(bfl.getOrCreate(KWord::OddPagesHeaderTextFrameSet, page2), fsets1.oddHeaders);
621
QCOMPARE(bfl.getOrCreate(KWord::OddPagesHeaderTextFrameSet, page3), fsets2.oddHeaders);
622
QCOMPARE(bfl.getOrCreate(KWord::OddPagesHeaderTextFrameSet, page4), fsets2.oddHeaders);
623
QCOMPARE(fsets1.oddHeaders->frameCount(), 2);
624
QCOMPARE(fsets2.oddHeaders->frameCount(), 2);
626
QVERIFY(bfl.frameOn(fsets1.oddHeaders, 1));
627
QVERIFY(bfl.frameOn(fsets1.oddHeaders, 2));
628
QVERIFY(bfl.frameOn(fsets1.oddHeaders, 3) == 0);
629
QVERIFY(bfl.frameOn(fsets1.oddHeaders, 4) == 0);
631
QVERIFY(bfl.frameOn(fsets2.oddHeaders, 1) == 0);
632
QVERIFY(bfl.frameOn(fsets2.oddHeaders, 2) == 0);
633
QVERIFY(bfl.frameOn(fsets2.oddHeaders, 3));
634
QVERIFY(bfl.frameOn(fsets2.oddHeaders, 4));
636
// now we change one and check if the frame moved
637
page2.setPageStyle(style2);
638
bfl.createNewFramesForPage(2);
640
fsets1 = bfl.m_pageStyles.value(page1.pageStyle());
641
fsets2 = bfl.m_pageStyles.value(style2);
642
QVERIFY(fsets1.oddHeaders);
643
QVERIFY(fsets2.oddHeaders);
644
QVERIFY(fsets1.oddHeaders != fsets2.oddHeaders);
645
QVERIFY(bfl.frameOn(fsets1.oddHeaders, 1));
646
QVERIFY(bfl.frameOn(fsets1.oddHeaders, 2) == 0);
647
QVERIFY(bfl.frameOn(fsets1.oddHeaders, 3) == 0);
648
QVERIFY(bfl.frameOn(fsets1.oddHeaders, 4) == 0);
650
QVERIFY(bfl.frameOn(fsets2.oddHeaders, 1) == 0);
651
QVERIFY(bfl.frameOn(fsets2.oddHeaders, 2));
652
QVERIFY(bfl.frameOn(fsets2.oddHeaders, 3));
653
QVERIFY(bfl.frameOn(fsets2.oddHeaders, 4));
654
QCOMPARE(bfl.getOrCreate(KWord::OddPagesHeaderTextFrameSet, page1), fsets1.oddHeaders);
655
QCOMPARE(bfl.getOrCreate(KWord::OddPagesHeaderTextFrameSet, page2), fsets2.oddHeaders);
656
QCOMPARE(bfl.getOrCreate(KWord::OddPagesHeaderTextFrameSet, page3), fsets2.oddHeaders);
657
QCOMPARE(bfl.getOrCreate(KWord::OddPagesHeaderTextFrameSet, page4), fsets2.oddHeaders);
658
QCOMPARE(fsets1.oddHeaders->frameCount(), 1);
659
QCOMPARE(fsets2.oddHeaders->frameCount(), 3);
662
void TestFrameLayout::testPageBackground()
664
// creating a page with a pagestyle that has a background set should
665
// trigger the creation of a shape that draws the page-background.
666
// If there is no background or its removed (in a command) that should
670
KWFrameLayout bfl(helper.pageManager, m_frames);
671
connect(&bfl, SIGNAL(newFrameSet(KWFrameSet*)), this, SLOT(addFS(KWFrameSet*)));
673
KWPage page1 = helper.pageManager->page(1);
674
page1.pageStyle().setBackground(new KoColorBackground(Qt::red));
676
KWPageStyle style2("No Background");
677
helper.pageManager->addPageStyle(style2);
678
KWPage page2 = helper.pageManager->appendPage();
679
KWPage page3 = helper.pageManager->appendPage(style2);
680
KWPage page4 = helper.pageManager->appendPage();
682
QVERIFY(bfl.m_backgroundFrameSet == 0);
683
bfl.createNewFramesForPage(1);
684
QVERIFY(bfl.m_backgroundFrameSet);
685
QCOMPARE(bfl.m_backgroundFrameSet->frameCount(), 1);
686
bfl.createNewFramesForPage(2);
687
QCOMPARE(bfl.m_backgroundFrameSet->frameCount(), 2);
688
bfl.createNewFramesForPage(3);
689
QVERIFY(bfl.m_backgroundFrameSet);
690
QCOMPARE(bfl.m_backgroundFrameSet->frameCount(), 2);
691
bfl.createNewFramesForPage(4);
692
QCOMPARE(bfl.m_backgroundFrameSet->frameCount(), 2);
694
KWFrameSet *bfs = bfl.m_backgroundFrameSet;
695
foreach (KWFrame *frame, bfs->frames()) {
696
QCOMPARE(frame->shape()->background(), page1.pageStyle().background());
699
// run layout to position and size them.
700
for (int i = 1; i <= 4; ++i)
701
bfl.layoutFramesOnPage(i);
703
QCOMPARE(bfs->frames()[0]->shape()->size(), QSizeF(page1.width(), page1.height()));
704
QCOMPARE(bfs->frames()[0]->shape()->position(), QPointF());
705
QCOMPARE(bfs->frames()[1]->shape()->size(), QSizeF(page2.width(), page2.height()));
706
QCOMPARE(bfs->frames()[1]->shape()->position(), QPointF(0, page2.offsetInDocument()));
710
// helper method (slot)
711
void TestFrameLayout::addFS(KWFrameSet*fs)
716
void TestFrameLayout::removeAllFrames()
718
foreach (KWFrameSet *fs, m_frames) {
719
foreach (KWFrame *frame, fs->frames()) {
720
fs->removeFrame(frame);
721
delete frame->shape();
726
QTEST_KDEMAIN(TestFrameLayout, GUI)
728
#include <TestFrameLayout.moc>