diff options
Diffstat (limited to 'examples/corelib/serialization/streambookmarks/xbelwriter.cpp')
-rw-r--r-- | examples/corelib/serialization/streambookmarks/xbelwriter.cpp | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/examples/corelib/serialization/streambookmarks/xbelwriter.cpp b/examples/corelib/serialization/streambookmarks/xbelwriter.cpp new file mode 100644 index 0000000000..e50f47a5a5 --- /dev/null +++ b/examples/corelib/serialization/streambookmarks/xbelwriter.cpp @@ -0,0 +1,56 @@ +// Copyright (C) 2016 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause + +#include "xbelwriter.h" + +#include <QTreeWidget> + +using namespace Qt::StringLiterals; + +//! [0] +XbelWriter::XbelWriter(const QTreeWidget *treeWidget) : treeWidget(treeWidget) +{ + xml.setAutoFormatting(true); +} +//! [0] + +//! [1] +bool XbelWriter::writeFile(QIODevice *device) +{ + xml.setDevice(device); + + xml.writeStartDocument(); + xml.writeDTD("<!DOCTYPE xbel>"_L1); + xml.writeStartElement("xbel"_L1); + xml.writeAttribute("version"_L1, "1.0"_L1); + for (int i = 0; i < treeWidget->topLevelItemCount(); ++i) + writeItem(treeWidget->topLevelItem(i)); + + xml.writeEndDocument(); + return true; +} +//! [1] + +//! [2] +void XbelWriter::writeItem(const QTreeWidgetItem *item) +{ + QString tagName = item->data(0, Qt::UserRole).toString(); + if (tagName == "folder"_L1) { + bool folded = !item->isExpanded(); + xml.writeStartElement(tagName); + xml.writeAttribute("folded"_L1, folded ? "yes"_L1 : "no"_L1); + xml.writeTextElement("title"_L1, item->text(0)); + for (int i = 0; i < item->childCount(); ++i) + writeItem(item->child(i)); + xml.writeEndElement(); + } else if (tagName == "bookmark"_L1) { + xml.writeStartElement(tagName); + if (!item->text(1).isEmpty()) + xml.writeAttribute("href"_L1, item->text(1)); + xml.writeTextElement("title"_L1, item->text(0)); + xml.writeEndElement(); + } else if (tagName == "separator"_L1) { + xml.writeEmptyElement(tagName); + } +} +//! [2] |