diff options
Diffstat (limited to 'src/contentswidget/contentswidget.cpp')
-rw-r--r-- | src/contentswidget/contentswidget.cpp | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/src/contentswidget/contentswidget.cpp b/src/contentswidget/contentswidget.cpp new file mode 100644 index 0000000..40ea5f9 --- /dev/null +++ b/src/contentswidget/contentswidget.cpp @@ -0,0 +1,61 @@ +#include "contentswidget.h" +#include "ui_contentswidget.h" +#include <QDomDocument> + +ContentsForm::ContentsForm(QWidget *parent) + : QWidget(parent) + , ui(new Ui::ContentsForm) +{ + ui->setupUi(this); +} + +ContentsForm::~ContentsForm() +{ + delete ui; +} + +QTreeWidgetItem *treeNode(QTreeWidgetItem *parent, const QDomNode &node) +{ + auto *item = new QTreeWidgetItem(parent); + item->setText(0, node.nodeName()); + + if(node.hasAttributes()) { + const auto attr = node.attributes(); + for(int i = 0; i < attr.length(); ++i) { + const QString name = attr.item(i).nodeName(); + const QString value = attr.item(i).nodeValue(); + + if(name == "Open") + item->setText(1, value); + else if(name == "Destination") + item->setText(2, value); + else + qDebug("Unknown attribute name %s\nattr.value=%s", qUtf8Printable(name), qUtf8Printable(value)); + } + } + + auto child = node.firstChild(); + while(!child.isNull()) { + treeNode(item, child); + child = child.nextSibling(); + } + + return item; +} + +void ContentsForm::setContents(QDomDocument *document) +{ + ui->treeWidget->clear(); + + if(document && !document->isNull()) { + auto node = document->firstChild(); + while(!node.isNull()) { + auto *item = treeNode(nullptr, node); + ui->treeWidget->addTopLevelItem(item); + + node = node.nextSibling(); + } + } + delete document; +} + |