diff options
author | Kandrashin Denis <mail@lintest.ru> | 2012-09-28 14:58:34 +0400 |
---|---|---|
committer | Kandrashin Denis <mail@lintest.ru> | 2012-09-28 14:58:34 +0400 |
commit | 4d4ddcf75c13d66c5a47cd04225b7ba9573a9578 (patch) | |
tree | 6d9de7065438b908de83a2b9bfa7b4f77511f1d3 | |
parent | d6c4c70f19f02c45d439e6298c55bac806c41f37 (diff) |
Fix header types
-rw-r--r-- | source/fb2head.cpp | 52 | ||||
-rw-r--r-- | source/fb2head.hpp | 1 |
2 files changed, 35 insertions, 18 deletions
diff --git a/source/fb2head.cpp b/source/fb2head.cpp index 56176b7..27cf8bc 100644 --- a/source/fb2head.cpp +++ b/source/fb2head.cpp @@ -99,23 +99,26 @@ QString FbScheme::info() const QString FbScheme::type() const { if (isNull()) return QString(); + if (attribute("name") == "last-name") { + QString result = attribute("type"); + return result; + } QString result = attribute("type"); if (!result.isEmpty()) return result; - FbScheme child = firstChildElement("xs:complexType"); - child = child.firstChildElement("xs:complexContent"); - child = child.firstChildElement("xs:extension"); - return child.attribute("base"); + FbScheme child = firstChildElement("xs:complexType").firstChildElement(); + while (!child.isNull()) { + QString tag = child.tagName(); + if (tag == "xs:complexContent" || tag == "xs:simpleContent") { + return child.firstChildElement("xs:extension").attribute("base"); + } + child = child.nextSiblingElement(); + } + return QString(); } -FbScheme FbScheme::element(const QString &name) const +FbScheme FbScheme::item(const QString &name) const { - FbScheme parent = *this; - if (parent.isNull()) { - parent = fb2().documentElement(); - parent = parent.element("FictionBook"); - } - - FbScheme child = parent.firstChildElement(); + FbScheme child = firstChildElement(); while (!child.isNull()) { switch (toKeyword(child.tagName())) { case XsElement: { @@ -124,13 +127,26 @@ FbScheme FbScheme::element(const QString &name) const case XsChoice: case XsComplexType: case XsSequence: { - FbScheme result = child.element(name); + FbScheme result = child.item(name); if (!result.isNull()) return result; } break; default: ; } child = child.nextSiblingElement(); } + return FbScheme(); +} + +FbScheme FbScheme::element(const QString &name) const +{ + FbScheme parent = *this; + if (parent.isNull()) { + parent = fb2().documentElement(); + parent = parent.element("FictionBook"); + } + + FbScheme child = parent.item(name); + if (!child.isNull()) return child; QString type = this->type(); if (type.isEmpty()) return *this; @@ -579,11 +595,11 @@ void FbHeadView::appendNode() FbNodeDlg dlg(this, item->scheme(), list); if (dlg.exec()) { - current = m->append(current, dlg.value()); - if (current.isValid()) { - setCurrentIndex(current); - scrollTo(current); + QModelIndex child = m->append(current, dlg.value()); + if (child.isValid()) { expand(current); + setCurrentIndex(child); + scrollTo(child); } } } @@ -602,7 +618,7 @@ QModelIndex FbHeadModel::append(const QModelIndex &parent, const QString &name) beginInsertRows(parent, row, row); FbHeadItem * item = owner->append(name); endInsertRows(); - return createIndex(row, 1, (void*)item); + return createIndex(row, 0, (void*)item); } void FbHeadModel::remove(const QModelIndex &index) diff --git a/source/fb2head.hpp b/source/fb2head.hpp index 4949582..8f3d29b 100644 --- a/source/fb2head.hpp +++ b/source/fb2head.hpp @@ -49,6 +49,7 @@ public: private: FbScheme typeScheme() const; + FbScheme item(const QString &name) const; }; class FbHeadItem: public QObject |