void TestPageCommands::testPageStylePropertiesCommand2() { /* make setup where multiple, interspaced pages use the style we want to change. add some frames. check if the frames moved properly when the page gets a new size check that all pages got their new size check that the name of the style did not change */ KWDocument document; KWPageManager *manager = document.pageManager(); KWPageStyle style("pagestyle1"); KoPageLayout lay = style.pageLayout(); lay.width = 300; lay.height = 500; style.setPageLayout(lay); KWPageStyle style2("pagestyle2"); lay = style.pageLayout(); lay.width = 400; lay.height = 400; style2.setPageLayout(lay); KWPage p1 = manager->appendPage(style2); KWPage p2 = manager->appendPage(style); KWPage p3 = manager->appendPage(style); KWPage p4 = manager->appendPage(style2); KWPage p5 = manager->appendPage(style2); KWPage p6 = manager->appendPage(style); KWPage p7 = manager->appendPage(style); KWPage p8 = manager->appendPage(style); KWPage p9 = manager->appendPage(style2); QCOMPARE(manager->pageCount(), 9); KWFrameSet *fs = new KWFrameSet(); for (int i = 1; i <= manager->pageCount(); ++i) { // create one frame per page. Positioned relative to the top of the page. KWPage page = manager->page(i); QVERIFY(page.isValid()); MockShape *shape = new MockShape(); new KWFrame(shape, fs); shape->setPosition(QPointF(-10, page.offsetInDocument() + 10)); } document.addFrameSet(fs); // lets prepare to change the style to a new page size. KWPageStyle newStyle("foo"); lay = newStyle.pageLayout(); lay.width = 350; lay.height = 1000; newStyle.setPageLayout(lay); KWPageStylePropertiesCommand command(&document, style, newStyle); // nothing happens in constructor before redo; for (int i = 1; i <= manager->pageCount(); ++i) { KWPage page = manager->page(i); QVERIFY(page.height() <= 500); // not 1000 yet QVERIFY(page.isValid()); KoShape *shape = fs->frames().at(i-1)->shape(); QCOMPARE(shape->position(), QPointF(-10, page.offsetInDocument() + 10)); } const qreal lastPageOffset = p9.offsetInDocument(); command.redo(); QCOMPARE(manager->pageCount(), 9); QCOMPARE(p1.height(), 400.); QCOMPARE(p4.height(), 400.); QCOMPARE(p5.height(), 400.); QCOMPARE(p9.height(), 400.); QCOMPARE(p2.height(), 1000.); QCOMPARE(p3.height(), 1000.); QCOMPARE(p6.height(), 1000.); QCOMPARE(p7.height(), 1000.); QCOMPARE(p8.height(), 1000.); QCOMPARE(lastPageOffset + 2500, p9.offsetInDocument()); for (int i = 1; i <= manager->pageCount(); ++i) { KWPage page = manager->page(i); QVERIFY(page.isValid()); KoShape *shape = fs->frames().at(i-1)->shape(); QCOMPARE(shape->position(), QPointF(-10, page.offsetInDocument() + 10)); } }
void TestPageCommands::testPageSpread() { // setup a doc with multiple pages like; // 1: S1, 2: S1, 3: S1, 4: S2, 5: S1, 6:S2, 7: S2 KWDocument document; KWPageManager *manager = document.pageManager(); KWPageStyle style("pagestyle1"); KoPageLayout lay = style.pageLayout(); lay.width = 300; lay.height = 500; style.setPageLayout(lay); KWPageStyle style2("pagestyle2"); lay = style.pageLayout(); lay.width = 400; lay.height = 400; style2.setPageLayout(lay); KWPage p1 = manager->appendPage(style); KWPage p2 = manager->appendPage(style); KWPage p3 = manager->appendPage(style); KWPage p4 = manager->appendPage(style2); KWPage p5 = manager->appendPage(style); KWPage p6 = manager->appendPage(style2); KWPage p7 = manager->appendPage(style2); KWFrameSet *fs = new KWFrameSet(); for (int i = 1; i <= manager->pageCount(); ++i) { // create one frame per page. Positioned relative to the top of the page. KWPage page = manager->page(i); QVERIFY(page.isValid()); MockShape *shape = new MockShape(); new KWFrame(shape, fs); shape->setPosition(QPointF(-10, page.offsetInDocument() + 10)); } document.addFrameSet(fs); // when changing S1 from normal to pagespread I expect // page 1 to stay the same. // page 2 to become a pagespread // page 3 to be deleted // page 4 to stay the same. // page 5 to become a page spread and gets pageNumber 6 // page 6 to become page 7 and become a Right page // page 7 to become page 8 and become a Left page // there will be a new KWPage for page 5 // all frames to be moved so they are still at the same relative location // to their original page' top KWPageStyle style3("dummy"); lay.leftMargin = -1; lay.rightMargin = -1; lay.pageEdge = 7; lay.bindingSide = 13; style2.setPageLayout(lay); KWPageStylePropertiesCommand cmd(&document, style, style3); cmd.redo(); QCOMPARE(manager->pageCount(), 7); QEXPECT_FAIL("", "Not done yet", Abort); QCOMPARE(p1.height(), 500.); QCOMPARE(p1.width(), 300.); QCOMPARE(p1.pageSide(), KWPage::Right); QCOMPARE(p1.pageNumber(), 1); QCOMPARE(p2.height(), 500.); QCOMPARE(p2.width(), 600.); QCOMPARE(p2.pageSide(), KWPage::PageSpread); QCOMPARE(p2.pageNumber(), 2); QVERIFY(!p3.isValid()); QCOMPARE(p4.pageSide(), KWPage::Left); QCOMPARE(p4.width(), 300.); QCOMPARE(p4.height(), 500.); QCOMPARE(p4.pageNumber(), 4); QCOMPARE(p5.width(), 600.); QCOMPARE(p5.height(), 500.); QCOMPARE(p5.pageSide(), KWPage::PageSpread); QCOMPARE(p5.pageNumber(), 6); QCOMPARE(p6.pageSide(), KWPage::Right); QCOMPARE(p6.width(), 400.); QCOMPARE(p6.pageNumber(), 7); QCOMPARE(p7.pageSide(), KWPage::Left); QCOMPARE(p7.width(), 400.); QCOMPARE(p7.pageNumber(), 8); KWPage newPage5 = manager->page(5); QCOMPARE(newPage5.pageStyle(), style); QCOMPARE(newPage5.width(), 400.); QCOMPARE(newPage5.height(), 400.); QCOMPARE(newPage5.pageSide(), KWPage::Left); QCOMPARE(fs->frames()[0]->shape()->position(), QPointF(-10, 10)); // TODO figure out what the actual numbers should be below QCOMPARE(fs->frames()[1]->shape()->position(), QPointF(-10, 10)); QCOMPARE(fs->frames()[2]->shape()->position(), QPointF(-10, 10)); QCOMPARE(fs->frames()[3]->shape()->position(), QPointF(-10, 10)); QCOMPARE(fs->frames()[4]->shape()->position(), QPointF(-10, 10)); QCOMPARE(fs->frames()[5]->shape()->position(), QPointF(-10, 10)); QCOMPARE(fs->frames()[6]->shape()->position(), QPointF(-10, 10)); }
void TestPageCommands::testPageStylePropertiesCommand() // basic properties change { KWDocument document; KWPageManager *manager = document.pageManager(); KWPageStyle style("pagestyle1"); KoPageLayout oldLayout; oldLayout.format = KoPageFormat::IsoA4Size; oldLayout.width = 101; oldLayout.height = 102; oldLayout.leftMargin = -1; oldLayout.rightMargin = -1; oldLayout.pageEdge = 7; oldLayout.bindingSide = 13; style.setPageLayout(oldLayout); KoColumns oldColumns; oldColumns.count = 4; oldColumns.gapWidth = 21; style.setColumns(oldColumns); KWPage page1 = manager->appendPage(style); page1.setDirectionHint(KoText::LeftRightTopBottom); QCOMPARE(page1.pageNumber(), 1); QCOMPARE(page1.width(), 101.); QCOMPARE(page1.height(), 102.); QCOMPARE(page1.leftMargin(), 13.); // its a right-sided page QCOMPARE(page1.pageEdgeMargin(), 7.); QCOMPARE(page1.directionHint(), KoText::LeftRightTopBottom); QCOMPARE(page1.pageStyle().columns().count, 4); QCOMPARE(page1.pageSide(), KWPage::Right); // new ;) KWPageStyle style2("pagestyle2"); KoPageLayout newLayout; newLayout.width = 401; newLayout.height = 405; newLayout.leftMargin = 11; newLayout.rightMargin = 18; newLayout.pageEdge = -1; newLayout.bindingSide = -1; style2.setPageLayout(newLayout); KoColumns newColumns; newColumns.count = 2; newColumns.columnData.append(ColumnDatum(1.0, 2.0, 1.0, 1.0, 25)); newColumns.columnData.append(ColumnDatum(1.0, 1.0, 1.0, 1.0, 50)); style2.setColumns(newColumns); style2.setDirection(KoText::RightLeftTopBottom); KWPageStylePropertiesCommand command1(&document, style, style2); // nothing changed before the redo QCOMPARE(page1.width(), 101.); QCOMPARE(page1.height(), 102.); QCOMPARE(page1.leftMargin(), 13.); // its a right-sided page QCOMPARE(page1.pageEdgeMargin(), 7.); QCOMPARE(page1.directionHint(), KoText::LeftRightTopBottom); // redo command1.redo(); QCOMPARE(page1.pageStyle().name(), QString("pagestyle1")); // name didn't change QCOMPARE(page1.width(), 401.); QCOMPARE(page1.height(), 405.); QCOMPARE(page1.leftMargin(), 11.); QCOMPARE(page1.pageEdgeMargin(), -1.); // its a right-sided page QCOMPARE(page1.pageStyle().direction(), KoText::RightLeftTopBottom); QCOMPARE(page1.directionHint(), KoText::LeftRightTopBottom); page1.setDirectionHint(KoText::InheritDirection); // reset to what the style says QCOMPARE(page1.directionHint(), KoText::RightLeftTopBottom); QCOMPARE(style.pageLayout().width, 401.); // style changed QCOMPARE(page1.pageStyle().columns().count, 2); QCOMPARE(page1.pageNumber(), 1); QCOMPARE(page1.pageSide(), KWPage::Right); QCOMPARE(manager->pageCount(), 1); QVERIFY(manager->page(1).isValid()); QVERIFY(!manager->page(2).isValid()); KWPage page2 = manager->appendPage(style); QCOMPARE(manager->pageCount(), 2); QVERIFY(manager->page(1).isValid()); QVERIFY(manager->page(2).isValid()); QVERIFY(!manager->page(3).isValid()); QCOMPARE(page2.pageNumber(), 2); QCOMPARE(page2.pageSide(), KWPage::Left); // undo command1.undo(); QCOMPARE(page1.pageStyle().name(), QString("pagestyle1")); // name didn't change QCOMPARE(page1.width(), 101.); QCOMPARE(page1.height(), 102.); QCOMPARE(page1.leftMargin(), 13.); QCOMPARE(page1.directionHint(), KoText::AutoDirection); QCOMPARE(style.pageLayout().width, 101.); QCOMPARE(page1.pageStyle().columns().count, 4); QCOMPARE(page1.pageNumber(), 1); QCOMPARE(page1.pageSide(), KWPage::Right); QCOMPARE(manager->pageCount(), 2); QVERIFY(manager->page(1).isValid()); QVERIFY(manager->page(2).isValid()); QVERIFY(!manager->page(3).isValid()); QCOMPARE(page2.pageNumber(), 2); QCOMPARE(page2.pageSide(), KWPage::Left); QCOMPARE(page2.width(), 101.); // same style QCOMPARE(page2.height(), 102.); QCOMPARE(page2.leftMargin(), 7.); QCOMPARE(page2.directionHint(), KoText::AutoDirection); }