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

List:       kde-commits
Subject:    koffice/plugins/textshape
From:       Thomas Zander <zander () kde ! org>
Date:       2010-12-23 15:57:37
Message-ID: 20101223155737.DAEE43E1F3 () svn ! kde ! org
[Download RAW message or body]

SVN commit 1208887 by zander:

Make displaying styles in a table not look buggy for more levels.

 M  +4 -3      dialogs/StylesModel.cpp  
 M  +41 -0     tests/TestStylesModel.cpp  


--- trunk/koffice/plugins/textshape/dialogs/StylesModel.cpp #1208886:1208887
@@ -61,18 +61,19 @@
     treeRoot << m_styleManager->defaultParagraphStyle()->styleId();
     paragraphStyles << treeRoot[0];
     foreach (KoParagraphStyle *style, m_styleManager->paragraphStyles()) {
-        KoParagraphStyle *root = style;
-        while (root->parentStyle()) {
+        KoParagraphStyle *root;
+        for (root = style; root->parentStyle(); root = root->parentStyle()) {
             const int key = root->parentStyle()->styleId();
             // the multiHash has the nasty habit or returning an inverted list, so \
lets 'sort in' by inserting them again  QList<int> prevValues = \
m_relations.values(key); +            if (prevValues.contains(root->styleId()))
+                continue;
             m_relations.remove(key);
             m_relations.insert(key, root->styleId());
             while (!prevValues.isEmpty())
                 m_relations.insert(key, prevValues.takeLast());
 
             characterStyles << root->characterStyle()->styleId();
-            root = root->parentStyle();
         }
         Q_ASSERT(root);
         Q_ASSERT(root->characterStyle());
--- trunk/koffice/plugins/textshape/tests/TestStylesModel.cpp #1208886:1208887
@@ -18,6 +18,7 @@
 private slots:
     void testPrecalcCache();
     void testSetManager();
+    void testNestedStyles();
 
 private:
     void fillManager();
@@ -94,14 +95,49 @@
     QCOMPARE(model.rootStyleIds().count(), 5);
 }
 
+void TestStylesModel::testNestedStyles()
+{
+    // have a 3 level deep style hierarchy and make sure it shows correctly.
+    fillManager();
+    KoParagraphStyle *headers = manager->paragraphStyle("headers");
+    QVERIFY(headers);
+
+    // the fillManager adds headers root and H1, H2, H3.  Add new root above to get
+    // to 3 levels.
+    KoParagraphStyle *root = new KoParagraphStyle();
+    root->setName("Root Style");
+    manager->add(root);
+    headers->setParentStyle(root);
+
+    MockModel model(manager);
+    QCOMPARE(model.rootStyleIds().count(), 5); // default, root, code, altered and \
red. +
+    KoParagraphStyle *s = manager->paragraphStyle(model.rootStyleIds().at(0));
+    QVERIFY(s);
+    QCOMPARE(s->name(), QString("Default"));
+
+    s = manager->paragraphStyle(model.rootStyleIds().at(1));
+    QCOMPARE(s, root);
+    QList<int> headerId = model.relations().values(root->styleId());
+    QCOMPARE(headerId.count(), 1);
+    s = manager->paragraphStyle(headerId.at(0));
+    QVERIFY(s);
+    QCOMPARE(s->name(), QString("headers"));
+
+    QList<int> children = model.relations().values(headerId.at(0));
+    QCOMPARE(children.count(), 3); // Head 1, 2, 3
+}
+
 void TestStylesModel::fillManager()
 {
     KoParagraphStyle *ps = new KoParagraphStyle();
     ps->setName("code");
     manager->add(ps);
+    // qDebug() << "code:" << ps->styleId();
     ps = new KoParagraphStyle();
     ps->setName("altered");
     manager->add(ps);
+    // qDebug() << "altered:" << ps->styleId();
 
     ps = new KoParagraphStyle();
     ps->setName("headers");
@@ -109,19 +145,24 @@
     head->setParentStyle(ps);
     head->setName("Head 1");
     manager->add(head);
+    // qDebug() << "head1:" << head->styleId();
     head = new KoParagraphStyle();
     head->setParentStyle(ps);
     head->setName("Head 2");
     manager->add(head);
+    // qDebug() << "head2:" << head->styleId();
     manager->add(ps);
+    // qDebug() << "headers:" << ps->styleId();
     head = new KoParagraphStyle();
     head->setParentStyle(ps);
     head->setName("Head 3");
     manager->add(head);
+    // qDebug() << "head3:" << head->styleId();
 
     KoCharacterStyle *style = new KoCharacterStyle();
     style->setName("red");
     manager->add(style);
+    // qDebug() << "red:" << style->styleId();
 }
 
 QTEST_MAIN(TestStylesModel)


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

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