summaryrefslogtreecommitdiff
path: root/src/contentswidget/contentswidget.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/contentswidget/contentswidget.cpp')
-rw-r--r--src/contentswidget/contentswidget.cpp61
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;
+}
+