From 29a46bbf2d36b8abc419348f33aa7f1f91043be5 Mon Sep 17 00:00:00 2001 From: Aqua-sama Date: Fri, 10 Feb 2017 16:19:21 +0100 Subject: Bookmark improvements Added icons to bookmark tree Bookmarks can now be rearranged Add/remove items from bookmark tree --- src/xbel/xbel.cpp | 59 ++++++++++++++++++++++++++++++++++++++++--------------- src/xbel/xbel.h | 14 +++++++++---- 2 files changed, 53 insertions(+), 20 deletions(-) (limited to 'src/xbel') diff --git a/src/xbel/xbel.cpp b/src/xbel/xbel.cpp index 509be1f..2047e99 100644 --- a/src/xbel/xbel.cpp +++ b/src/xbel/xbel.cpp @@ -26,6 +26,11 @@ Xbel::Xbel(QTreeWidget *widget) { treeWidget = widget; + + QStyle *style = treeWidget->style(); + folderIcon.addPixmap(style->standardPixmap(QStyle::SP_DirOpenIcon), QIcon::Normal, QIcon::On); + folderIcon.addPixmap(style->standardPixmap(QStyle::SP_DirClosedIcon), QIcon::Normal, QIcon::Off); + bookmarkIcon.addPixmap(style->standardPixmap(QStyle::SP_FileIcon)); } bool Xbel::read(const QString &xbel) @@ -93,11 +98,14 @@ void Xbel::readChildElements(QTreeWidgetItem *parentItem) if(xmlReader.name() == "title") { readTitle(parentItem); } else if(xmlReader.name() == "folder") { - readFolder(parentItem); + readChildElements(addFolder(parentItem)); } else if(xmlReader.name() == "bookmark") { - readBookmark(parentItem); + QTreeWidgetItem *item = addBookmark(parentItem); + item->setText(1, xmlReader.attributes().value("href").toString()); + readChildElements(item); } else if(xmlReader.name() == "separator") { - readSeparator(parentItem); + addSeparator(parentItem); + xmlReader.skipCurrentElement(); } else { xmlReader.skipCurrentElement(); } @@ -109,32 +117,51 @@ void Xbel::readTitle(QTreeWidgetItem *item) item->setText(0, xmlReader.readElementText()); } -void Xbel::readFolder(QTreeWidgetItem *parentItem) +QTreeWidgetItem *Xbel::addFolder(QTreeWidgetItem *parentItem) { - QTreeWidgetItem *folderItem = createChildItem(parentItem); + QTreeWidgetItem *folderItem = createChildItem(parentFolder(parentItem), "folder"); folderItem->setExpanded(xmlReader.attributes().value("folded") != "no"); + folderItem->setFlags(folderItem->flags() | Qt::ItemIsEditable); + folderItem->setIcon(0, folderIcon); - readChildElements(folderItem); + return folderItem; } -void Xbel::readBookmark(QTreeWidgetItem *parentItem) +QTreeWidgetItem *Xbel::addBookmark(QTreeWidgetItem *parentItem) { - QTreeWidgetItem *bookmarkItem = createChildItem(parentItem); - bookmarkItem->setFlags(bookmarkItem->flags() | Qt::ItemIsEditable); + QTreeWidgetItem *bookmarkItem = createChildItem(parentFolder(parentItem), "bookmark"); + bookmarkItem->setFlags((bookmarkItem->flags() | Qt::ItemIsEditable) & ~Qt::ItemIsDropEnabled); + bookmarkItem->setIcon(0, bookmarkIcon); bookmarkItem->setText(0, "Unknown Title"); - bookmarkItem->setText(1, xmlReader.attributes().value("href").toString()); + bookmarkItem->setText(1, "Unknown Address"); - readChildElements(bookmarkItem); + return bookmarkItem; } -void Xbel::readSeparator(QTreeWidgetItem *parentItem) +void Xbel::addSeparator(QTreeWidgetItem *parentItem) { - QTreeWidgetItem *separatorItem = createChildItem(parentItem); + QTreeWidgetItem *separatorItem = createChildItem(parentFolder(parentItem), "separator"); + separatorItem->setFlags(separatorItem->flags() & ~Qt::ItemIsDropEnabled); separatorItem->setText(0, "-----"); - xmlReader.skipCurrentElement(); } -QTreeWidgetItem *Xbel::createChildItem(QTreeWidgetItem *item) +QTreeWidgetItem *Xbel::parentFolder(QTreeWidgetItem *item) +{ + QTreeWidgetItem *parentItem = item; + + if(parentItem) { + while(parentItem->data(0, Qt::UserRole) != "folder") { + parentItem = parentItem->parent(); + if(parentItem == 0) { + break; + } + } + } + + return parentItem; +} + +QTreeWidgetItem *Xbel::createChildItem(QTreeWidgetItem *item, const QString &type) { QTreeWidgetItem *childItem; if(item) { @@ -142,7 +169,7 @@ QTreeWidgetItem *Xbel::createChildItem(QTreeWidgetItem *item) } else { childItem = new QTreeWidgetItem(treeWidget); } - childItem->setData(0, Qt::UserRole, xmlReader.name().toString()); + childItem->setData(0, Qt::UserRole, type); return childItem; } diff --git a/src/xbel/xbel.h b/src/xbel/xbel.h index 7f80eeb..6ffafb1 100644 --- a/src/xbel/xbel.h +++ b/src/xbel/xbel.h @@ -22,6 +22,7 @@ #define XBELREADER_H #include +#include class QTreeWidget; class QTreeWidgetItem; @@ -32,17 +33,22 @@ public: bool read(const QString &xbel); bool write(const QString &xbel); + QTreeWidgetItem *addFolder(QTreeWidgetItem *parentItem); + QTreeWidgetItem *addBookmark(QTreeWidgetItem *parentItem); + void addSeparator(QTreeWidgetItem *parentItem); + private: void readChildElements(QTreeWidgetItem *parentItem); void readTitle(QTreeWidgetItem *item); - void readFolder(QTreeWidgetItem *parentItem); - void readBookmark(QTreeWidgetItem *parentItem); - void readSeparator(QTreeWidgetItem *parentItem); - QTreeWidgetItem *createChildItem(QTreeWidgetItem *item); + QTreeWidgetItem *parentFolder(QTreeWidgetItem *item); + QTreeWidgetItem *createChildItem(QTreeWidgetItem *item, const QString &type); void writeItem(QTreeWidgetItem *item); + QIcon folderIcon; + QIcon bookmarkIcon; + QTreeWidget *treeWidget; QXmlStreamReader xmlReader; QXmlStreamWriter xmlWriter; -- cgit v1.2.1