aboutsummaryrefslogtreecommitdiff
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
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
-rw-r--r--src/forms/bookmarksdialog.cpp53
-rw-r--r--src/forms/bookmarksdialog.h14
-rw-r--r--src/forms/bookmarksdialog.ui111
-rw-r--r--src/xbel/xbel.cpp59
-rw-r--r--src/xbel/xbel.h14
-rw-r--r--test/bookmarks.xbel40
6 files changed, 254 insertions, 37 deletions
diff --git a/src/forms/bookmarksdialog.cpp b/src/forms/bookmarksdialog.cpp
index bf5a9fc..d61cf18 100644
--- a/src/forms/bookmarksdialog.cpp
+++ b/src/forms/bookmarksdialog.cpp
@@ -20,17 +20,42 @@
#include "bookmarksdialog.h"
#include "ui_bookmarksdialog.h"
-
+#include <QTreeWidget>
#include "xbel/xbel.h"
+#include "mainwindow.h"
-BookmarksDialog::BookmarksDialog(QWidget *parent) :
+BookmarksDialog::BookmarksDialog(MainWindow *parent) :
QDialog(parent),
ui(new Ui::BookmarksDialog)
{
+ parentWindow = parent;
ui->setupUi(this);
+ ui->treeWidget->header()->setSectionResizeMode(QHeaderView::Stretch);
+
+ QStyle *style = ui->treeWidget->style();
+ ui->addFolder_toolButton->setIcon(style->standardPixmap(QStyle::SP_DirIcon));
+ ui->addBookmark_toolButton->setIcon(style->standardPixmap(QStyle::SP_FileIcon));
+ ui->addSeparator_toolButton->setText("---");
+ ui->deleteItem_toolButton->setIcon(style->standardPixmap(QStyle::SP_TrashIcon));
+
+ connect(ui->treeWidget, SIGNAL(itemSelectionChanged()), this, SLOT(showItemDetails()));
+ connect(ui->treeWidget, SIGNAL(itemActivated(QTreeWidgetItem*,int)), this, SLOT(openItem(QTreeWidgetItem*,int)));
+
+ ui->deleteItem_toolButton->setShortcut(QKeySequence::Delete);
+ connect(ui->deleteItem_toolButton, SIGNAL(clicked(bool)), this, SLOT(deleteCurrentItem()));
xbel = new Xbel(ui->treeWidget);
xbel->read("bookmarks.xbel");
+
+ connect(ui->addFolder_toolButton, &QToolButton::clicked, [this]() {
+ xbel->addFolder(ui->treeWidget->currentItem());
+ });
+ connect(ui->addBookmark_toolButton, &QToolButton::clicked, [this]() {
+ xbel->addBookmark(ui->treeWidget->currentItem());
+ });
+ connect(ui->addSeparator_toolButton, &QToolButton::clicked, [this]() {
+ xbel->addSeparator(ui->treeWidget->currentItem());
+ });
}
BookmarksDialog::~BookmarksDialog()
@@ -40,3 +65,27 @@ BookmarksDialog::~BookmarksDialog()
delete xbel;
delete ui;
}
+
+void BookmarksDialog::deleteCurrentItem()
+{
+ delete ui->treeWidget->currentItem();
+}
+
+void BookmarksDialog::openItem(QTreeWidgetItem *item, int column)
+{
+ Q_UNUSED(column)
+
+ parentWindow->createNewTab(QUrl::fromUserInput(item->text(1)));
+}
+
+void BookmarksDialog::showItemDetails()
+{
+ QTreeWidgetItem *item = ui->treeWidget->currentItem();
+ if(!item) {
+ ui->title_lineEdit->setText("");
+ ui->href_label->setText("");
+ return;
+ }
+ ui->title_lineEdit->setText(item->text(0));
+ ui->href_lineEdit->setText(item->text(1));
+}
diff --git a/src/forms/bookmarksdialog.h b/src/forms/bookmarksdialog.h
index b01fc8b..e2387d7 100644
--- a/src/forms/bookmarksdialog.h
+++ b/src/forms/bookmarksdialog.h
@@ -28,15 +28,27 @@ namespace Ui {
class BookmarksDialog;
}
+class MainWindow;
class BookmarksDialog : public QDialog
{
Q_OBJECT
public:
- explicit BookmarksDialog(QWidget *parent = 0);
+ explicit BookmarksDialog(MainWindow *parent = 0);
~BookmarksDialog();
+public slots:
+ // void addFolder(const QString &title);
+ // void addBookmark(const QString &title, const QString &href);
+ // void addSeparator();
+ void deleteCurrentItem();
+
+private slots:
+ void openItem(QTreeWidgetItem *item, int column);
+ void showItemDetails();
+
private:
+ MainWindow *parentWindow;
Ui::BookmarksDialog *ui;
Xbel *xbel;
};
diff --git a/src/forms/bookmarksdialog.ui b/src/forms/bookmarksdialog.ui
index f578737..a0e4316 100644
--- a/src/forms/bookmarksdialog.ui
+++ b/src/forms/bookmarksdialog.ui
@@ -6,27 +6,110 @@
<rect>
<x>0</x>
<y>0</y>
- <width>640</width>
+ <width>820</width>
<height>480</height>
</rect>
</property>
<property name="windowTitle">
<string>Bookmarks</string>
</property>
- <layout class="QVBoxLayout" name="verticalLayout">
+ <layout class="QVBoxLayout" name="verticalLayout_2">
<item>
- <widget class="QTreeWidget" name="treeWidget">
- <column>
- <property name="text">
- <string notr="true">1</string>
- </property>
- </column>
- <column>
- <property name="text">
- <string>2</string>
- </property>
- </column>
- </widget>
+ <layout class="QHBoxLayout" name="horizontalLayout">
+ <item>
+ <widget class="QTreeWidget" name="treeWidget">
+ <property name="dragEnabled">
+ <bool>true</bool>
+ </property>
+ <property name="dragDropMode">
+ <enum>QAbstractItemView::InternalMove</enum>
+ </property>
+ <property name="defaultDropAction">
+ <enum>Qt::MoveAction</enum>
+ </property>
+ <column>
+ <property name="text">
+ <string notr="true">Title</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>href</string>
+ </property>
+ </column>
+ </widget>
+ </item>
+ <item>
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_2">
+ <item>
+ <widget class="QToolButton" name="addFolder_toolButton">
+ <property name="text">
+ <string>...</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QToolButton" name="addBookmark_toolButton">
+ <property name="text">
+ <string>...</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QToolButton" name="addSeparator_toolButton">
+ <property name="text">
+ <string>...</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QToolButton" name="deleteItem_toolButton">
+ <property name="text">
+ <string>...</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <widget class="QGroupBox" name="groupBox">
+ <property name="minimumSize">
+ <size>
+ <width>250</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>250</width>
+ <height>16777215</height>
+ </size>
+ </property>
+ <property name="title">
+ <string>Details</string>
+ </property>
+ <layout class="QFormLayout" name="formLayout">
+ <item row="1" column="0">
+ <widget class="QLabel" name="href_label">
+ <property name="text">
+ <string>href</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1">
+ <widget class="QLineEdit" name="href_lineEdit"/>
+ </item>
+ <item row="0" column="1">
+ <widget class="QLineEdit" name="title_lineEdit"/>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ </layout>
</item>
<item>
<widget class="QDialogButtonBox" name="buttonBox">
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;
diff --git a/test/bookmarks.xbel b/test/bookmarks.xbel
new file mode 100644
index 0000000..66fbc25
--- /dev/null
+++ b/test/bookmarks.xbel
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE xbel>
+<xbel version="1.0">
+ <folder folded="no">
+ <title>Bookmarks Bar</title>
+ <bookmark href="http://qt.io/">
+ <title>Qt Home Page</title>
+ </bookmark>
+ <bookmark href="http://doc.qt.io/">
+ <title>Qt Documentation</title>
+ </bookmark>
+ <bookmark href="http://planet.qt.io/">
+ <title>Qt Blog</title>
+ </bookmark>
+ <bookmark href="http://www.qtcentre.org/">
+ <title>Qt Centre</title>
+ </bookmark>
+ <bookmark href="http://qt-apps.org/">
+ <title>Qt-Apps.org</title>
+ </bookmark>
+ <bookmark href="http://wiki.qt.io/OnlineCommunities">
+ <title>Online Communities</title>
+ </bookmark>
+ <bookmark href="http://www.chromium.org/">
+ <title>The Chromium Projects</title>
+ </bookmark>
+ <bookmark href="http://xkcd.com/">
+ <title>xkcd</title>
+ </bookmark>
+ <bookmark href="http://twitter.com/qtproject">
+ <title>Twitter</title>
+ </bookmark>
+ </folder>
+ <folder folded="no">
+ <title>Bookmarks Menu</title>
+ <bookmark href="http://reddit.com/">
+ <title>reddit.com: what's new online!</title>
+ </bookmark>
+ </folder>
+</xbel>