aboutsummaryrefslogtreecommitdiff
path: root/src/xbel
diff options
context:
space:
mode:
authorAqua-sama <aqua@iserlohn-fortress.net>2017-02-10 16:19:21 +0100
committerAqua-sama <aqua@iserlohn-fortress.net>2017-02-10 16:19:21 +0100
commit29a46bbf2d36b8abc419348f33aa7f1f91043be5 (patch)
tree5151e249cde21f4d5cbcc564c18276a39c9a4ea5 /src/xbel
parentAdded git flag in qbs (#9) (diff)
downloadsmolbote-29a46bbf2d36b8abc419348f33aa7f1f91043be5.tar.xz
Bookmark improvements
Added icons to bookmark tree Bookmarks can now be rearranged Add/remove items from bookmark tree
Diffstat (limited to 'src/xbel')
-rw-r--r--src/xbel/xbel.cpp59
-rw-r--r--src/xbel/xbel.h14
2 files changed, 53 insertions, 20 deletions
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 <QXmlStreamReader>
+#include <QIcon>
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;