diff options
Diffstat (limited to 'lib/bookmarks/xbel.cpp')
-rw-r--r-- | lib/bookmarks/xbel.cpp | 104 |
1 files changed, 52 insertions, 52 deletions
diff --git a/lib/bookmarks/xbel.cpp b/lib/bookmarks/xbel.cpp index 47d855b..0f84447 100644 --- a/lib/bookmarks/xbel.cpp +++ b/lib/bookmarks/xbel.cpp @@ -9,42 +9,28 @@ #include "xbel.h" #include <QFile> -Xbel::Xbel(QIODevice *file) +XbelReader::XbelReader(QIODevice *file) { Q_CHECK_PTR(file); m_file = file; } -bool Xbel::read(BookmarkItem *root) -{ - QXmlStreamReader xmlReader(m_file); - - if(xmlReader.readNextStartElement()) { - if(!(xmlReader.name() == "xbel" && xmlReader.attributes().value("version") == "1.0")) { - return false; - } - - readChildElements(xmlReader, root); - } - - return true; -} - -void Xbel::readChildElements(QXmlStreamReader &reader, BookmarkItem *parentItem) +void readChildElements(QXmlStreamReader &reader, BookmarksView *widget, QTreeWidgetItem *parentItem = nullptr) { while(reader.readNextStartElement()) { if(reader.name() == "title") { - parentItem->title = reader.readElementText(); + Q_CHECK_PTR(parentItem); + parentItem->setText(0, reader.readElementText()); } else if(reader.name() == "folder") { - BookmarkItem *item = new BookmarkItem(BookmarkItem::Folder, parentItem); - item->folded = reader.attributes().value("folded") == QLatin1String("yes"); - readChildElements(reader, item); + auto *item = widget->createFolder(parentItem); + widget->setItemExpanded(item, !(reader.attributes().value("folded") == QLatin1String("yes"))); + readChildElements(reader, widget, item); } else if(reader.name() == "bookmark") { - BookmarkItem *item = new BookmarkItem(BookmarkItem::Bookmark, parentItem); - item->href = reader.attributes().value("href").toString(); - readChildElements(reader, item); + auto *item = widget->createBookmark(parentItem); + item->setText(1, reader.attributes().value("href").toString()); + readChildElements(reader, widget, item); } else { reader.skipCurrentElement(); @@ -52,50 +38,64 @@ void Xbel::readChildElements(QXmlStreamReader &reader, BookmarkItem *parentItem) } } -bool Xbel::write(BookmarkItem *root) +void XbelReader::read(BookmarksView *treeWidget) { - QXmlStreamWriter xmlWriter(m_file); - xmlWriter.setAutoFormatting(true); + QXmlStreamReader qXmlStreamReader(m_file); - xmlWriter.writeStartDocument(); - xmlWriter.writeDTD("<!DOCTYPE xbel>"); - - xmlWriter.writeStartElement("xbel"); - xmlWriter.writeAttribute("version", "1.0"); - - writeChildElements(xmlWriter, root); - - xmlWriter.writeEndDocument(); + if(qXmlStreamReader.readNextStartElement()) { + if(!(qXmlStreamReader.name() == "xbel" && qXmlStreamReader.attributes().value("version") == "1.0")) { + return; + } - return true; + readChildElements(qXmlStreamReader, treeWidget); + } } -void Xbel::writeChildElements(QXmlStreamWriter &writer, BookmarkItem *parentItem) +XbelWriter::XbelWriter(QIODevice *file) { - switch(parentItem->type()) { - case BookmarkItem::Root: - for(int i = 0; i < parentItem->childCount(); ++i) { - writeChildElements(writer, parentItem->child(i)); - } - break; + Q_CHECK_PTR(file); + m_file = file; +} - case BookmarkItem::Folder: +void writeChildElements(QXmlStreamWriter &writer, BookmarksView *treeWidget, QTreeWidgetItem *parentItem) +{ + switch(treeWidget->itemType(parentItem)) { + case BookmarksView::Folder: writer.writeStartElement("folder"); - writer.writeAttribute("folded", parentItem->folded ? "yes" : "no"); - writer.writeTextElement("title", parentItem->title); + writer.writeAttribute("folded", !treeWidget->isItemExpanded(parentItem) ? "yes" : "no"); + writer.writeTextElement("title", parentItem->text(0)); for(int i = 0; i < parentItem->childCount(); ++i) { - writeChildElements(writer, parentItem->child(i)); + writeChildElements(writer, treeWidget, parentItem->child(i)); } writer.writeEndElement(); - break; - case BookmarkItem::Bookmark: + break; + case BookmarksView::Bookmark: writer.writeStartElement("bookmark"); - writer.writeAttribute("href", parentItem->href); - writer.writeTextElement("title", parentItem->title); + writer.writeAttribute("href", parentItem->text(1)); + writer.writeTextElement("title", parentItem->text(0)); writer.writeEndElement(); + break; } } + +void XbelWriter::write(BookmarksView *treeWidget) +{ + QXmlStreamWriter xmlWriter(m_file); + xmlWriter.setAutoFormatting(true); + + xmlWriter.writeStartDocument(); + xmlWriter.writeDTD("<!DOCTYPE xbel>"); + + xmlWriter.writeStartElement("xbel"); + xmlWriter.writeAttribute("version", "1.0"); + + for(int i = 0; i < treeWidget->topLevelItemCount(); ++i) { + writeChildElements(xmlWriter, treeWidget, treeWidget->topLevelItem(i)); + } + + xmlWriter.writeEndDocument(); +} |