aboutsummaryrefslogtreecommitdiff
path: root/lib/bookmarks/bookmarkswidget.cpp
diff options
context:
space:
mode:
authorAqua-sama <aqua@iserlohn-fortress.net>2018-02-07 21:08:39 +0100
committerAqua-sama <aqua@iserlohn-fortress.net>2018-02-07 21:08:39 +0100
commitf779510603e01de438e337c82c439cc6649cd7c3 (patch)
tree98254e5ab079edcc6e207d692af28378573d4f0f /lib/bookmarks/bookmarkswidget.cpp
parentBookmarks bugfixes (diff)
downloadsmolbote-f779510603e01de438e337c82c439cc6649cd7c3.tar.xz
Rewrote bookmark manager to use QTreeWidget over QTreeView
- cut out all the boilerplate that was BookmarkItem/BookmarksModel - deleting items no longer crash; proper drag'n'drop - Split Xbel into XbelReader and XbelWriter
Diffstat (limited to 'lib/bookmarks/bookmarkswidget.cpp')
-rw-r--r--lib/bookmarks/bookmarkswidget.cpp109
1 files changed, 42 insertions, 67 deletions
diff --git a/lib/bookmarks/bookmarkswidget.cpp b/lib/bookmarks/bookmarkswidget.cpp
index 8711b35..6ddd71c 100644
--- a/lib/bookmarks/bookmarkswidget.cpp
+++ b/lib/bookmarks/bookmarkswidget.cpp
@@ -8,6 +8,7 @@
#include "bookmarkswidget.h"
#include "ui_bookmarksform.h"
+#include "xbel.h"
#include <QUrl>
BookmarksWidget::BookmarksWidget(const QString &path, QWidget *parent)
@@ -19,7 +20,6 @@ BookmarksWidget::BookmarksWidget(const QString &path, QWidget *parent)
setWindowTitle(tr("Bookmarks"));
ui->setupUi(this);
- ui->treeView->header()->setSectionResizeMode(QHeaderView::Stretch);
ui->bookmark_groupBox->setVisible(false);
ui->folder_groupBox->setVisible(false);
@@ -28,94 +28,72 @@ BookmarksWidget::BookmarksWidget(const QString &path, QWidget *parent)
ui->deleteItem_toolButton->setIcon(style()->standardPixmap(QStyle::SP_TrashIcon));
ui->deleteItem_toolButton->setShortcut(QKeySequence::Delete);
- m_model = new BookmarksModel(style(), this);
- ui->treeView->setModel(m_model);
- ui->treeView->viewport()->setAcceptDrops(true);
- ui->treeView->setDragEnabled(true);
- ui->treeView->setDragDropMode(QAbstractItemView::InternalMove);
- ui->treeView->setDropIndicatorShown(true);
-
m_bookmarksPath = path;
// read bookmarks
{
QFile bookmarksFile(m_bookmarksPath);
- if (bookmarksFile.open(QIODevice::ReadOnly | QIODevice::Text)) {
- Xbel xbel(&bookmarksFile);
- qDebug("Reading bookmarks [%s] %s", qUtf8Printable(path), m_model->read(&xbel) ? "ok" : "failed");
+ if(bookmarksFile.open(QIODevice::ReadOnly | QIODevice::Text)) {
+ XbelReader xbel(&bookmarksFile);
+ xbel.read(ui->treeWidget);
+ //qDebug("Reading bookmarks [%s] %s", qUtf8Printable(path), m_model->read(&xbel) ? "ok" : "failed");
bookmarksFile.close();
}
}
- m_model->expandItems(ui->treeView);
-
// open bookmark action
- connect(ui->treeView, &QTreeView::activated, this, [this](const QModelIndex &index) {
- emit openUrl(m_model->data(index, BookmarksModel::OpenUrlRole).toUrl());
+ connect(ui->treeWidget, &QTreeWidget::itemActivated, this, [this](QTreeWidgetItem *item, int column) {
+ emit openUrl(QUrl::fromUserInput(item->text(1)));
});
// add bookmark action
connect(ui->addBookmark_toolButton, &QToolButton::clicked, this, [this]() {
- QModelIndex idx = ui->treeView->currentIndex();
- m_model->insertItem(BookmarkItem::Bookmark, idx);
+ auto *parentItem = ui->treeWidget->currentItem();
+ if(ui->treeWidget->itemType(parentItem) == BookmarksView::Bookmark)
+ parentItem = parentItem->parent();
+
+ auto *bookmark = ui->treeWidget->createBookmark(parentItem);
+ bookmark->setText(0, tr("title"));
+ bookmark->setText(1, tr("href"));
});
// add folder action
connect(ui->addFolder_toolButton, &QToolButton::clicked, this, [this]() {
- QModelIndex idx = ui->treeView->currentIndex();
- m_model->insertItem(BookmarkItem::Folder, idx);
- });
-
- connect(ui->deleteItem_toolButton, &QToolButton::clicked, this, [this]() {
- QModelIndex idx = ui->treeView->currentIndex();
- ui->treeView->clearSelection();
- ui->folder_groupBox->setVisible(false);
- ui->bookmark_groupBox->setVisible(false);
- m_model->removeItem(idx);
- });
+ auto *parentItem = ui->treeWidget->currentItem();
+ if(ui->treeWidget->itemType(parentItem) == BookmarksView::Bookmark)
+ parentItem = parentItem->parent();
- // set folder title action
- connect(ui->folderTitle, &QLineEdit::returnPressed, this, [this]() {
- QModelIndex idx = ui->treeView->currentIndex();
- Q_ASSERT(m_model->type(idx) == BookmarkItem::Folder);
- m_model->setData(idx, ui->folderTitle->text(), BookmarksModel::TitleRole);
+ auto *folder = ui->treeWidget->createFolder(parentItem);
+ folder->setText(0, tr("title"));
});
- // set bookmark title action
- connect(ui->bookmarkTitle, &QLineEdit::returnPressed, this, [this]() {
- QModelIndex idx = ui->treeView->currentIndex();
- Q_ASSERT(m_model->type(idx) == BookmarkItem::Bookmark);
- m_model->setData(idx, ui->bookmarkTitle->text(), BookmarksModel::TitleRole);
- });
-
- // set bookmark href action
- connect(ui->bookmarkHref, &QLineEdit::returnPressed, this, [this]() {
- QModelIndex idx = ui->treeView->currentIndex();
- Q_ASSERT(m_model->type(idx) == BookmarkItem::Bookmark);
- m_model->setData(idx, ui->bookmarkHref->text(), BookmarksModel::OpenUrlRole);
+ // delete item action
+ connect(ui->deleteItem_toolButton, &QToolButton::clicked, this, [this]() {
+ delete ui->treeWidget->currentItem();
});
- // set item action
- connect(ui->treeView->selectionModel(), &QItemSelectionModel::currentChanged, this, [this](const QModelIndex &current, const QModelIndex &previous) {
+ // edit item action
+ connect(ui->treeWidget, &QTreeWidget::currentItemChanged, this, [this](QTreeWidgetItem *current, QTreeWidgetItem *previous) {
// save the previous item
- if(previous.isValid() && (ui->folder_groupBox->isVisible() || ui->bookmark_groupBox->isVisible())) {
- if(m_model->type(previous) == BookmarkItem::Folder) {
- m_model->setData(previous, ui->folderTitle->text(), BookmarksModel::TitleRole);
+ if(previous) {
+ if(ui->treeWidget->itemType(previous) == BookmarksView::Folder) {
+ previous->setText(0, ui->folderTitle->text());
ui->folder_groupBox->setVisible(false);
- } else if(m_model->type(previous) == BookmarkItem::Bookmark) {
- m_model->setData(previous, ui->bookmarkTitle->text(), BookmarksModel::TitleRole);
- m_model->setData(previous, ui->bookmarkHref->text(), BookmarksModel::OpenUrlRole);
+ } else if(ui->treeWidget->itemType(previous) == BookmarksView::Bookmark) {
+ previous->setText(0, ui->bookmarkTitle->text());
+ previous->setText(1, ui->bookmarkHref->text());
ui->bookmark_groupBox->setVisible(false);
}
}
- if(current.isValid()) {
- if(m_model->type(current) == BookmarkItem::Folder) {
- ui->folderTitle->setText(m_model->data(current, BookmarksModel::TitleRole).toString());
+ // edit current item
+ if(current) {
+ if(ui->treeWidget->itemType(current) == BookmarksView::Folder) {
+ ui->folderTitle->setText(current->text(0));
ui->folder_groupBox->setVisible(true);
- } else if(m_model->type(current) == BookmarkItem::Bookmark) {
- ui->bookmarkTitle->setText(m_model->data(current, BookmarksModel::TitleRole).toString());
- ui->bookmarkHref->setText(m_model->data(current, BookmarksModel::OpenUrlRole).toString());
+ } else if(ui->treeWidget->itemType(current) == BookmarksView::Bookmark) {
+ ui->bookmarkTitle->setText(current->text(0));
+ ui->bookmarkHref->setText(current->text(1));
ui->bookmark_groupBox->setVisible(true);
}
}
@@ -129,26 +107,23 @@ BookmarksWidget::~BookmarksWidget()
void BookmarksWidget::save()
{
+ /*
if(!m_model->isModified()) {
qDebug("Writing bookmarks skipped");
return;
}
+ */
QFile bookmarksFile(m_bookmarksPath);
if(bookmarksFile.open(QIODevice::WriteOnly | QIODevice::Text)) {
- Xbel xbel(&bookmarksFile);
- qDebug("Writing bookmarks %s", m_model->write(&xbel) ? "ok" : "failed");
+ XbelWriter xbel(&bookmarksFile);
+ xbel.write(ui->treeWidget);
+ //qDebug("Writing bookmarks %s", m_model->write(&xbel) ? "ok" : "failed");
bookmarksFile.flush();
bookmarksFile.close();
}
}
-QAbstractItemModel *BookmarksWidget::model() const
-{
- Q_CHECK_PTR(m_model);
- return m_model;
-}
-
void BookmarksWidget::closeOthers()
{
emit closeOthersSignal();