diff options
author | Aqua-sama <aqua@iserlohn-fortress.net> | 2018-02-07 21:08:39 +0100 |
---|---|---|
committer | Aqua-sama <aqua@iserlohn-fortress.net> | 2018-02-07 21:08:39 +0100 |
commit | f779510603e01de438e337c82c439cc6649cd7c3 (patch) | |
tree | 98254e5ab079edcc6e207d692af28378573d4f0f /lib/bookmarks/bookmarkswidget.cpp | |
parent | Bookmarks bugfixes (diff) | |
download | smolbote-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.cpp | 109 |
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 ¤t, 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(); |