void KisKraLoaderTest::testLoading() { KisDocument *doc = KisPart::instance()->createDocument(); doc->loadNativeFormat(QString(FILES_DATA_DIR) + QDir::separator() + "load_test.kra"); KisImageWSP image = doc->image(); image->lock(); QCOMPARE(image->nlayers(), 12); QCOMPARE(doc->documentInfo()->aboutInfo("title"), QString("test image for loading")); QCOMPARE(image->height(), 753); QCOMPARE(image->width(), 1000); QCOMPARE(image->colorSpace()->id(), KoColorSpaceRegistry::instance()->rgb8()->id()); KisNodeSP node = image->root()->firstChild(); QVERIFY(node); QCOMPARE(node->name(), QString("Background")); QVERIFY(node->inherits("KisPaintLayer")); node = node->nextSibling(); QVERIFY(node); QCOMPARE(node->name(), QString("Group 1")); QVERIFY(node->inherits("KisGroupLayer")); QCOMPARE((int) node->childCount(), 2); delete doc; }
TransformStrokeStrategy::TransformStrokeStrategy(KisNodeSP rootNode, KisSelectionSP selection, KisPostExecutionUndoAdapter *undoAdapter) : KisStrokeStrategyUndoCommandBased(kundo2_i18n("Transform"), false, undoAdapter), m_selection(selection) { if (rootNode->childCount() || !rootNode->paintDevice()) { KisPaintDeviceSP device; if (KisTransformMask* tmask = dynamic_cast<KisTransformMask*>(rootNode.data())) { device = tmask->buildPreviewDevice(); /** * When working with transform mask, selections are not * taken into account. */ m_selection = 0; } else { rootNode->projectionLeaf()->explicitlyRegeneratePassThroughProjection(); device = rootNode->projection(); } m_previewDevice = createDeviceCache(device); } else { m_previewDevice = createDeviceCache(rootNode->paintDevice()); putDeviceCache(rootNode->paintDevice(), m_previewDevice); } Q_ASSERT(m_previewDevice); m_savedRootNode = rootNode; }
void KisNodeFacadeTest::testCreation() { TestGraphListener graphListener; KisNodeSP node = new TestNodeA(); QVERIFY(node->graphListener() == 0); KisNodeFacade facade(node); QVERIFY(facade.root() == node); node->setGraphListener(&graphListener); QVERIFY(node->graphListener() != 0); // Test contract for initial state QVERIFY(node->parent() == 0); QVERIFY(node->firstChild() == 0); QVERIFY(node->lastChild() == 0); QVERIFY(node->prevSibling() == 0); QVERIFY(node->nextSibling() == 0); QVERIFY(node->childCount() == 0); QVERIFY(node->at(0) == 0); QVERIFY(node->at(UINT_MAX) == 0); QVERIFY(node->index(0) == -1); }
bool KisNodeFacade::moveNode(KisNodeSP node, KisNodeSP parent, KisNodeSP aboveThis) { dbgImage << "moveNode " << node << " " << parent << " " << aboveThis; if (!node) { dbgImage << "cannot move null node"; return false; } if (!parent) { dbgImage << "cannot move to null parent"; return false; } if (node == parent) { dbgImage << "cannot move self inside self"; return false; } if (node == aboveThis) { dbgImage << "cannot move self above self"; return false; } if (parent == aboveThis) { dbgImage << "cannot move above parent"; return false; } if (!node->parent()) { dbgImage << "node does not have a parent"; return false; } if (aboveThis && aboveThis->parent() != parent) { dbgImage << "above this parent is not the parent"; return false; } int newIndex = parent->childCount(); if (aboveThis) newIndex = parent->index(aboveThis) + 1; return moveNode(node, parent, newIndex); }
int deepChildCount(KisNodeSP layer) { quint32 childCount = layer->childCount(); QList<KisNodeSP> children = layer->childNodes(layerClassNames(), KoProperties()); for(quint32 i = 0; i < childCount; ++i) childCount += deepChildCount(children.at(i)); return childCount; }
void dumpNodeStack(KisNodeSP node, QString prefix = QString("\t")) { for (uint i = 0; i < node->childCount(); ++i) { if (node->at(i)->parent()) dbgImage << prefix << "\t" << node->at(i) << "node at" << i << " has index from parent:" << node->index(node->at(i)); if (node->at(i)->childCount() > 0) { dumpNodeStack(node->at(i), prefix + "\t"); } } }
bool KisNodeFacade::addNode(KisNodeSP node, KisNodeSP parent, quint32 index) { if (!node) return false; if (!parent) return false; if (index == parent->childCount()) return parent->add(node, parent->lastChild()); else if (index != 0) return parent->add(node, parent->at(index)); else return parent->add(node, 0); }
bool checkHomogenity(KisNodeSP root) { bool res = true; KisNodeSP child = root->firstChild(); while (child) { if (child->childCount() > 0) { res= false; break; } child = child->nextSibling(); } return res; }
void expandNodesRecursively(KisNodeSP root, QPointer<KisNodeFilterProxyModel> filteringModel, KisNodeView *nodeView) { if (!root) return; if (filteringModel.isNull()) return; if (!nodeView) return; nodeView->blockSignals(true); KisNodeSP node = root->firstChild(); while (node) { QModelIndex idx = filteringModel->indexFromNode(node); if (idx.isValid()) { if (node->collapsed()) { nodeView->collapse(idx); } } if (node->childCount() > 0) { expandNodesRecursively(node, filteringModel, nodeView); } node = node->nextSibling(); } nodeView->blockSignals(false); }
void expandNodesRecursively(KisNodeSP root, QPointer<KisNodeModel> nodeModel, KoDocumentSectionView *sectionView) { if (!root) return; if (nodeModel.isNull()) return; if (!sectionView) return; sectionView->blockSignals(true); KisNodeSP node = root->firstChild(); while (node) { QModelIndex idx = nodeModel->indexFromNode(node); if (idx.isValid()) { if (node->collapsed()) { sectionView->collapse(idx); } } if (node->childCount() > 0) { expandNodesRecursively(node, nodeModel, sectionView); } node = node->nextSibling(); } sectionView->blockSignals(false); }
void KisNodeFacadeTest::testOrdering() { TestGraphListener graphListener; KisNodeSP root = new TestNodeA(); root->setGraphListener(&graphListener); KisNodeFacade facade(root); KisNodeSP node1 = new TestNodeA(); KisNodeSP node2 = new TestNodeA(); KisNodeSP node3 = new TestNodeA(); KisNodeSP node4 = new TestNodeA(); KisNodeSP node5 = new TestNodeA(); /* +---------+ | node 4 | | node 2 | | node 3| | node 1 | |root | +---------+ */ graphListener.resetBools(); QVERIFY(facade.addNode(node1, root, root->childCount()) == true); QVERIFY(graphListener.beforeInsertRow == true); QVERIFY(graphListener.afterInsertRow == true); QVERIFY(graphListener.beforeRemoveRow == false); QVERIFY(graphListener.afterRemoveRow == false); QVERIFY(root->firstChild() == node1); QVERIFY(root->lastChild() == node1); QVERIFY(root->childCount() == 1); graphListener.resetBools(); QVERIFY(facade.addNode(node2, root, root->childCount()) == true); QVERIFY(graphListener.beforeInsertRow == true); QVERIFY(graphListener.afterInsertRow == true); QVERIFY(graphListener.beforeRemoveRow == false); QVERIFY(graphListener.afterRemoveRow == false); QVERIFY(root->firstChild() == node1); QVERIFY(root->lastChild() == node2); QVERIFY(root->childCount() == 2); graphListener.resetBools(); QVERIFY(facade.addNode(node3, node1) == true); QVERIFY(graphListener.beforeInsertRow == true); QVERIFY(graphListener.afterInsertRow == true); QVERIFY(graphListener.beforeRemoveRow == false); QVERIFY(graphListener.afterRemoveRow == false); QVERIFY(root->firstChild() == node1); QVERIFY(root->lastChild() == node2); QVERIFY(root->childCount() == 2); QVERIFY(node1->childCount() == 1); graphListener.resetBools(); QVERIFY(facade.addNode(node4, root, root->lastChild()) == true); QVERIFY(graphListener.beforeInsertRow == true); QVERIFY(graphListener.afterInsertRow == true); QVERIFY(graphListener.beforeRemoveRow == false); QVERIFY(graphListener.afterRemoveRow == false); QVERIFY(root->firstChild() == node1); QVERIFY(root->lastChild() == node4); QVERIFY(root->childCount() == 3); graphListener.resetBools(); QVERIFY(node1->parent() == root); QVERIFY(node2->parent() == root); QVERIFY(node3->parent() == node1); QVERIFY(node4->parent() == root); QVERIFY(root->firstChild() == node1); QVERIFY(root->lastChild() == node4); QVERIFY(root->at(0) == node1); QVERIFY(root->at(1) == node2); QVERIFY(root->at(2) == node4); QVERIFY(node1->at(0) == node3); QVERIFY(root->index(node1) == 0); QVERIFY(root->index(node2) == 1); QVERIFY(root->index(node4) == 2); QVERIFY(node1->index(node3) == 0); QVERIFY(node4->prevSibling() == node2); QVERIFY(node2->prevSibling() == node1); QVERIFY(node1->prevSibling() == 0); QVERIFY(node3->prevSibling() == 0); QVERIFY(node4->nextSibling() == 0); QVERIFY(node2->nextSibling() == node4); QVERIFY(node1->nextSibling() == node2); QVERIFY(node3->nextSibling() == 0); /* node 4 node 2 node 3 node 1 root */ graphListener.resetBools(); QVERIFY(facade.removeNode(node4) == true); QVERIFY(node4->parent() == 0); QVERIFY(graphListener.beforeInsertRow == false); QVERIFY(graphListener.afterInsertRow == false); QVERIFY(graphListener.beforeRemoveRow == true); QVERIFY(graphListener.afterRemoveRow == true); QVERIFY(root->childCount() == 2); QVERIFY(root->lastChild() == node2); QVERIFY(root->firstChild() == node1); QVERIFY(node4->prevSibling() == 0); QVERIFY(node4->nextSibling() == 0); graphListener.resetBools(); QVERIFY(facade.addNode(node4, node3) == true); QVERIFY(graphListener.beforeInsertRow == true); QVERIFY(graphListener.afterInsertRow == true); QVERIFY(graphListener.beforeRemoveRow == false); QVERIFY(graphListener.afterRemoveRow == false); QVERIFY(root->childCount() == 2); QVERIFY(root->lastChild() == node2); QVERIFY(root->firstChild() == node1); QVERIFY(node3->childCount() == 1); QVERIFY(node3->firstChild() == node4); QVERIFY(node3->lastChild() == node4); QVERIFY(node4->prevSibling() == 0); QVERIFY(node4->nextSibling() == 0); graphListener.resetBools(); QVERIFY(facade.removeNode(node4) == true); QVERIFY(graphListener.beforeInsertRow == false); QVERIFY(graphListener.afterInsertRow == false); QVERIFY(graphListener.beforeRemoveRow == true); QVERIFY(graphListener.afterRemoveRow == true); QVERIFY(node3->childCount() == 0); QVERIFY(node4->parent() == 0); QVERIFY(root->childCount() == 2); QVERIFY(root->lastChild() == node2); QVERIFY(root->firstChild() == node1); QVERIFY(node4->prevSibling() == 0); QVERIFY(node4->nextSibling() == 0); graphListener.resetBools(); QVERIFY(facade.addNode(node4, node2) == true); graphListener.resetBools(); QVERIFY(graphListener.beforeMove == false); QVERIFY(graphListener.afterMove == false); QVERIFY(facade.moveNode(node3, root, 0) == true); QVERIFY(graphListener.beforeMove == true); QVERIFY(graphListener.afterMove == true); graphListener.resetBools(); /* node4 node2 node1 node 3 root */ QVERIFY(facade.moveNode(node1, node3, 0) == true); QVERIFY(facade.moveNode(node2, node3, node1) == true); QVERIFY(graphListener.beforeInsertRow == true); QVERIFY(graphListener.afterInsertRow == true); QVERIFY(graphListener.beforeRemoveRow == true); QVERIFY(graphListener.afterRemoveRow == true); graphListener.resetBools(); QVERIFY(facade.moveNode(node4, node4, node4) == false); QVERIFY(graphListener.beforeInsertRow == false); QVERIFY(graphListener.afterInsertRow == false); QVERIFY(graphListener.beforeRemoveRow == false); QVERIFY(graphListener.afterRemoveRow == false); graphListener.resetBools(); QCOMPARE(root->childCount(), 1u); QVERIFY(root->firstChild() == node3); QVERIFY(root->lastChild() == node3); QVERIFY(node3->childCount() == 2); QVERIFY(node3->firstChild() == node1); QVERIFY(node3->lastChild() == node2); /* node4 node2 node5 node1 node3 root */ QVERIFY(facade.addNode(node5, node3, node1) == true); QVERIFY(node5->parent() == node3); QVERIFY(node5->prevSibling() == node1); QVERIFY(node5->nextSibling() == node2); /* node5 node4 node2 node1 node3 root */ QVERIFY(facade.raiseNode(node5) == true); QVERIFY(node5->parent() == node3); QVERIFY(node5->nextSibling() == 0); QVERIFY(node5->prevSibling() == node2); // Try raising topnode to top QVERIFY(facade.raiseNode(node5) == true); QVERIFY(node5->parent() == node3); QVERIFY(node5->nextSibling() == 0); QVERIFY(node5->prevSibling() == node2); /* node5 node1 node4 node2 node3 root */ QVERIFY(facade.lowerNode(node2) == true); QVERIFY(node2->nextSibling() == node1); QVERIFY(node2->prevSibling() == 0); // Try lowering bottomnode to bottomg QVERIFY(facade.lowerNode(node2) == true); QVERIFY(node2->nextSibling() == node1); QVERIFY(node2->prevSibling() == 0); /** node4 node2 node5 node1 node3 root */ QVERIFY(facade.toTop(node2) == true); QVERIFY(node2->nextSibling() == 0); QVERIFY(node2->prevSibling() == node5); /** node5 node1 node4 node2 node3 root */ QVERIFY(facade.toBottom(node2) == true); QVERIFY(node2->nextSibling() == node1); QVERIFY(node2->prevSibling() == 0); }
void KisNodeTest::testOrdering() { TestUtil::TestGraphListener graphListener; KisNodeSP root = new TestNodeA(); root->setGraphListener(&graphListener); KisNodeSP node1 = new TestNodeA(); KisNodeSP node2 = new TestNodeA(); KisNodeSP node3 = new TestNodeA(); KisNodeSP node4 = new TestNodeA(); /* +---------+ | node 4 | | node 2 | | node 3 | | node 1 | |root | +---------+ */ graphListener.resetBools(); QVERIFY(root->lastChild() == 0); root->add(node1, root->lastChild()); QVERIFY(graphListener.beforeInsertRow == true); QVERIFY(graphListener.afterInsertRow == true); QVERIFY(graphListener.beforeRemoveRow == false); QVERIFY(graphListener.afterRemoveRow == false); QVERIFY(root->firstChild() == node1); QVERIFY(root->lastChild() == node1); graphListener.resetBools(); QVERIFY(root->lastChild() == node1); root->add(node2, root->lastChild()); QVERIFY(graphListener.beforeInsertRow == true); QVERIFY(graphListener.afterInsertRow == true); QVERIFY(graphListener.beforeRemoveRow == false); QVERIFY(graphListener.afterRemoveRow == false); QVERIFY(root->firstChild() == node1); QVERIFY(root->lastChild() == node2); graphListener.resetBools(); QVERIFY(root->lastChild() == node2); root->add(node3, node1); QVERIFY(root->lastChild() == node2); QVERIFY(graphListener.beforeInsertRow == true); QVERIFY(graphListener.afterInsertRow == true); QVERIFY(graphListener.beforeRemoveRow == false); QVERIFY(graphListener.afterRemoveRow == false); QVERIFY(root->firstChild() == node1); QVERIFY(root->lastChild() == node2); graphListener.resetBools(); root->add(node4, root->lastChild()); QVERIFY(graphListener.beforeInsertRow == true); QVERIFY(graphListener.afterInsertRow == true); QVERIFY(graphListener.beforeRemoveRow == false); QVERIFY(graphListener.afterRemoveRow == false); QVERIFY(root->firstChild() == node1); QVERIFY(root->lastChild() == node4); graphListener.resetBools(); QVERIFY(root->childCount() == 4); QVERIFY(node1->parent() == root); QVERIFY(node2->parent() == root); QVERIFY(node3->parent() == root); QVERIFY(node4->parent() == root); QVERIFY(root->firstChild() == node1); QVERIFY(root->lastChild() == node4); QVERIFY(root->at(0) == node1); QVERIFY(root->at(1) == node3); QVERIFY(root->at(2) == node2); QVERIFY(root->at(3) == node4); QVERIFY(root->index(node1) == 0); QVERIFY(root->index(node3) == 1); QVERIFY(root->index(node2) == 2); QVERIFY(root->index(node4) == 3); QVERIFY(node4->prevSibling() == node2); QVERIFY(node3->prevSibling() == node1); QVERIFY(node2->prevSibling() == node3); QVERIFY(node1->prevSibling() == 0); QVERIFY(node4->nextSibling() == 0); QVERIFY(node3->nextSibling() == node2); QVERIFY(node2->nextSibling() == node4); QVERIFY(node1->nextSibling() == node3); /* +---------+ | node 3 | | node 4 | | node 2 | | node 1 | |root | +---------+ */ graphListener.resetBools(); QVERIFY(root->remove(root->at(3)) == true); QVERIFY(node4->parent() == 0); QVERIFY(graphListener.beforeInsertRow == false); QVERIFY(graphListener.afterInsertRow == false); QVERIFY(graphListener.beforeRemoveRow == true); QVERIFY(graphListener.afterRemoveRow == true); QVERIFY(root->childCount() == 3); QVERIFY(root->lastChild() == node2); QVERIFY(root->firstChild() == node1); QVERIFY(node4->prevSibling() == 0); QVERIFY(node4->nextSibling() == 0); graphListener.resetBools(); node3->add(node4, node3->lastChild()); QVERIFY(graphListener.beforeInsertRow == true); QVERIFY(graphListener.afterInsertRow == true); QVERIFY(graphListener.beforeRemoveRow == false); QVERIFY(graphListener.afterRemoveRow == false); QVERIFY(root->childCount() == 3); QVERIFY(root->lastChild() == node2); QVERIFY(root->firstChild() == node1); QVERIFY(node3->childCount() == 1); QVERIFY(node3->firstChild() == node4); QVERIFY(node3->lastChild() == node4); QVERIFY(node4->prevSibling() == 0); QVERIFY(node4->nextSibling() == 0); QVERIFY(root->remove(node4) == false); graphListener.resetBools(); node3->remove(node4); QVERIFY(graphListener.beforeInsertRow == false); QVERIFY(graphListener.afterInsertRow == false); QVERIFY(graphListener.beforeRemoveRow == true); QVERIFY(graphListener.afterRemoveRow == true); QVERIFY(node3->childCount() == 0); QVERIFY(node4->parent() == 0); QVERIFY(root->childCount() == 3); QVERIFY(root->lastChild() == node2); QVERIFY(root->firstChild() == node1); QVERIFY(node4->prevSibling() == 0); QVERIFY(node4->nextSibling() == 0); }