From 9643e146c35a3a3e9abf0bf332c7c1efd00be9c2 Mon Sep 17 00:00:00 2001 From: Aqua-sama Date: Wed, 15 Jan 2020 13:19:46 +0200 Subject: Move BookmarksWidget out of libbookmarks --- lib/bookmarks/bookmarksform.ui | 129 --------------------------- lib/bookmarks/bookmarkswidget.cpp | 138 ----------------------------- lib/bookmarks/bookmarkswidget.h | 50 ----------- lib/bookmarks/forms/editbookmarkdialog.cpp | 70 --------------- lib/bookmarks/forms/editbookmarkdialog.h | 44 --------- lib/bookmarks/forms/editbookmarkdialog.ui | 108 ---------------------- lib/bookmarks/meson.build | 13 ++- src/bookmarks/bookmarksform.ui | 129 +++++++++++++++++++++++++++ src/bookmarks/bookmarkswidget.cpp | 138 +++++++++++++++++++++++++++++ src/bookmarks/bookmarkswidget.h | 50 +++++++++++ src/bookmarks/editbookmarkdialog.cpp | 70 +++++++++++++++ src/bookmarks/editbookmarkdialog.h | 44 +++++++++ src/bookmarks/editbookmarkdialog.ui | 108 ++++++++++++++++++++++ src/browser.cpp | 2 +- src/mainwindow/menubar.cpp | 2 +- src/meson.build | 8 +- 16 files changed, 553 insertions(+), 550 deletions(-) delete mode 100644 lib/bookmarks/bookmarksform.ui delete mode 100644 lib/bookmarks/bookmarkswidget.cpp delete mode 100644 lib/bookmarks/bookmarkswidget.h delete mode 100644 lib/bookmarks/forms/editbookmarkdialog.cpp delete mode 100644 lib/bookmarks/forms/editbookmarkdialog.h delete mode 100644 lib/bookmarks/forms/editbookmarkdialog.ui create mode 100644 src/bookmarks/bookmarksform.ui create mode 100644 src/bookmarks/bookmarkswidget.cpp create mode 100644 src/bookmarks/bookmarkswidget.h create mode 100644 src/bookmarks/editbookmarkdialog.cpp create mode 100644 src/bookmarks/editbookmarkdialog.h create mode 100644 src/bookmarks/editbookmarkdialog.ui diff --git a/lib/bookmarks/bookmarksform.ui b/lib/bookmarks/bookmarksform.ui deleted file mode 100644 index a003e53..0000000 --- a/lib/bookmarks/bookmarksform.ui +++ /dev/null @@ -1,129 +0,0 @@ - - - BookmarksDialog - - - - 0 - 0 - 420 - 600 - - - - Bookmarks - - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - Add Folder - - - - - - - Add Bookmark - - - - - - - Delete Item - - - - - - - - - QAbstractItemView::NoEditTriggers - - - true - - - QAbstractItemView::DragDrop - - - Qt::MoveAction - - - 200 - - - 50 - - - - - - - Edit Bookmark - - - - - - Title - - - - - - - Address - - - - - - - - - - - - - - - - Edit Folder - - - - - - Name - - - - - - - - - - - - - - diff --git a/lib/bookmarks/bookmarkswidget.cpp b/lib/bookmarks/bookmarkswidget.cpp deleted file mode 100644 index 29e388c..0000000 --- a/lib/bookmarks/bookmarkswidget.cpp +++ /dev/null @@ -1,138 +0,0 @@ -/* - * This file is part of smolbote. It's copyrighted by the contributors recorded - * in the version control history of the file, available from its original - * location: https://neueland.iserlohn-fortress.net/gitea/aqua/smolbote - * - * SPDX-License-Identifier: GPL-3.0 - */ - -#include "bookmarkswidget.h" -#include "forms/editbookmarkdialog.h" -#include "ui_bookmarksform.h" -#include "bookmarkformat.h" -#include -#include - -inline void expandChildren(QTreeView *view, BookmarkModel *model, const QModelIndex &rootIndex) -{ - for(int i = 0; i < model->rowCount(rootIndex); ++i) { - QModelIndex idx = model->index(i, 0, rootIndex); - if(model->isItemExpanded(idx)) - view->expand(idx); - - // check if index has children - if(model->rowCount(idx) > 0) - expandChildren(view, model, idx); - } -} - -BookmarksWidget::BookmarksWidget(const QString &path, QWidget *parent) - : QWidget(parent) - , ui(new Ui::BookmarksDialog) -{ - // make sure this dialog does not get deleted on close - setAttribute(Qt::WA_DeleteOnClose, false); - - ui->setupUi(this); - ui->bookmark_groupBox->setVisible(false); - ui->folder_groupBox->setVisible(false); - - ui->addFolder_toolButton->setIcon(style()->standardPixmap(QStyle::SP_DirIcon)); - ui->addBookmark_toolButton->setIcon(style()->standardPixmap(QStyle::SP_FileIcon)); - ui->deleteItem_toolButton->setIcon(style()->standardPixmap(QStyle::SP_TrashIcon)); - ui->deleteItem_toolButton->setShortcut(QKeySequence::Delete); - - model = new BookmarkModel(this); - m_bookmarksPath = path; - QFile bookmarksFile(m_bookmarksPath); - if(bookmarksFile.open(QIODevice::ReadOnly | QIODevice::Text)) { - BookmarkFormat(&bookmarksFile) >> model; - } - model->resetModified(); - - ui->treeView->setModel(model); - expandChildren(ui->treeView, model, QModelIndex()); - - // item activated - connect(ui->treeView, &QTreeView::activated, this, [this](const QModelIndex &index) { - if(index.column() == 1) - emit openUrl(index.data(Qt::DisplayRole).toUrl()); - else - editBookmark(index); - }); - - connect(ui->treeView, &QTreeView::expanded, this, [this](const QModelIndex &index) { - model->setItemExpanded(index, true); - }); - connect(ui->treeView, &QTreeView::collapsed, this, [this](const QModelIndex &index) { - model->setItemExpanded(index, false); - }); - - ui->treeView->setContextMenuPolicy(Qt::CustomContextMenu); - connect(ui->treeView, &QTreeView::customContextMenuRequested, this, [this](const QPoint &pos) { - const QModelIndex idx = ui->treeView->indexAt(pos); - if(idx.isValid()) { - const QUrl url = model->data(idx, 1, Qt::DisplayRole).toUrl(); - const QPoint _pos = ui->treeView->viewport()->mapToGlobal(pos); - - emit showContextMenu(url, _pos); - } - }); - - // addBookmark - connect(ui->addBookmark_toolButton, &QToolButton::clicked, this, [this]() { - const QModelIndex idx = model->parentFolder(ui->treeView->currentIndex()); - const QModelIndex childIdx = model->appendBookmark(tr("Title"), QString(), idx); - ui->treeView->setCurrentIndex(childIdx); - editBookmark(childIdx); - }); - - // addFolder - connect(ui->addFolder_toolButton, &QToolButton::clicked, this, [this]() { - const QModelIndex idx = model->parentFolder(ui->treeView->currentIndex()); - const QModelIndex childIdx = model->appendFolder(tr("Title"), idx); - ui->treeView->setCurrentIndex(childIdx); - editBookmark(childIdx); - }); - - // deleteItem - connect(ui->deleteItem_toolButton, &QToolButton::clicked, this, [this]() { - const QModelIndex idx = ui->treeView->currentIndex(); - model->removeRow(idx.row(), idx.parent()); - }); -} - -BookmarksWidget::~BookmarksWidget() -{ - delete ui; -} - -void BookmarksWidget::editBookmark(const QModelIndex &index) -{ - auto *dlg = new EditBookmarkDialog(model, index, this); - dlg->exec(); -} - -void BookmarksWidget::save() -{ - if(!model->isModified()) - return; - - QFile bookmarksFile(m_bookmarksPath); - if(bookmarksFile.open(QIODevice::WriteOnly | QIODevice::Text)) { - BookmarkFormat f(&bookmarksFile); - model >> f; - bookmarksFile.flush(); - } -} - -void BookmarksWidget::addBookmark(const QString &title, const QString &url) -{ - model->appendBookmark(title, url, QModelIndex()); -} - -void BookmarksWidget::search(const QString &term, const std::function &callback) const -{ - QStringList ret = model->search(term); - callback(ret); -} diff --git a/lib/bookmarks/bookmarkswidget.h b/lib/bookmarks/bookmarkswidget.h deleted file mode 100644 index 149d2a6..0000000 --- a/lib/bookmarks/bookmarkswidget.h +++ /dev/null @@ -1,50 +0,0 @@ -/* - * This file is part of smolbote. It's copyrighted by the contributors recorded - * in the version control history of the file, available from its original - * location: https://neueland.iserlohn-fortress.net/gitea/aqua/smolbote - * - * SPDX-License-Identifier: GPL-3.0 - */ - -#ifndef BOOKMARKSDIALOG_H -#define BOOKMARKSDIALOG_H - -#include -#include -#include -#include - -namespace Ui -{ -class BookmarksDialog; -} - -class BookmarksView; -class BookmarkModel; -class BookmarksWidget : public QWidget -{ - Q_OBJECT - -public: - explicit BookmarksWidget(const QString &path, QWidget *parent = nullptr); - ~BookmarksWidget() override; - -protected: - void editBookmark(const QModelIndex &index); - -signals: - void showContextMenu(const QUrl &url, const QPoint &pos); - void openUrl(const QUrl &url); - -public slots: - void save(); - void addBookmark(const QString &title, const QString &url); - void search(const QString &term, const std::function &callback) const; - -private: - Ui::BookmarksDialog *ui; - QString m_bookmarksPath; - BookmarkModel *model; -}; - -#endif // BOOKMARKSDIALOG_H diff --git a/lib/bookmarks/forms/editbookmarkdialog.cpp b/lib/bookmarks/forms/editbookmarkdialog.cpp deleted file mode 100644 index 7df90b8..0000000 --- a/lib/bookmarks/forms/editbookmarkdialog.cpp +++ /dev/null @@ -1,70 +0,0 @@ -/* - * This file is part of smolbote. It's copyrighted by the contributors recorded - * in the version control history of the file, available from its original - * location: https://neueland.iserlohn-fortress.net/gitea/aqua/smolbote - * - * SPDX-License-Identifier: GPL-3.0 - */ - -#include "editbookmarkdialog.h" -#include "bookmarkitem.h" -#include "bookmarkmodel.h" -#include "ui_editbookmarkdialog.h" - -EditBookmarkDialog::EditBookmarkDialog(BookmarkModel *model, const QModelIndex &index, QWidget *parent) - : QDialog(parent) - , ui(new Ui::EditBookmarkDialog) -{ - ui->setupUi(this); - setAttribute(Qt::WA_DeleteOnClose, true); - - Q_CHECK_PTR(model); - m_model = model; - m_index = index; - - ui->title->setText(model->data(index, BookmarkItem::Title, Qt::DisplayRole).toString()); - connect(ui->title, &QLineEdit::editingFinished, this, [this]() { - titleChanged = true; - }); - - ui->address->setText(model->data(index, BookmarkItem::Href, Qt::DisplayRole).toString()); - connect(ui->address, &QLineEdit::editingFinished, this, [this]() { - hrefChanged = true; - }); - - ui->tags->setText(model->data(index, BookmarkItem::Tags, Qt::DisplayRole).toStringList().join(", ")); - connect(ui->tags, &QLineEdit::editingFinished, this, [this]() { - tagsChanged = true; - }); - - ui->description->setPlainText(model->data(index, BookmarkItem::Description, Qt::DisplayRole).toString()); - connect(ui->description, &QPlainTextEdit::textChanged, this, [this]() { - descriptionChanged = true; - }); - - connect(ui->buttonBox, &QDialogButtonBox::accepted, this, &EditBookmarkDialog::saveChanges); -} - -EditBookmarkDialog::~EditBookmarkDialog() -{ - delete ui; -} - -void EditBookmarkDialog::saveChanges() -{ - if(titleChanged) { - m_model->setData(m_index, ui->title->text(), BookmarkItem::Title, Qt::DisplayRole); - } - - if(hrefChanged) { - m_model->setData(m_index, ui->address->text(), BookmarkItem::Href, Qt::DisplayRole); - } - - if(tagsChanged) { - m_model->setData(m_index, ui->tags->text().split(", "), BookmarkItem::Tags, Qt::DisplayRole); - } - - if(descriptionChanged) { - m_model->setData(m_index, ui->description->toPlainText(), BookmarkItem::Description, Qt::DisplayRole); - } -} diff --git a/lib/bookmarks/forms/editbookmarkdialog.h b/lib/bookmarks/forms/editbookmarkdialog.h deleted file mode 100644 index fb53239..0000000 --- a/lib/bookmarks/forms/editbookmarkdialog.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - * This file is part of smolbote. It's copyrighted by the contributors recorded - * in the version control history of the file, available from its original - * location: https://neueland.iserlohn-fortress.net/gitea/aqua/smolbote - * - * SPDX-License-Identifier: GPL-3.0 - */ - -#ifndef SMOLBOTE_EDITBOOKMARKDIALOG_H -#define SMOLBOTE_EDITBOOKMARKDIALOG_H - -#include -#include - -namespace Ui -{ -class EditBookmarkDialog; -} - -class BookmarkModel; -class EditBookmarkDialog : public QDialog -{ - Q_OBJECT - -public: - explicit EditBookmarkDialog(BookmarkModel *model, const QModelIndex &index, QWidget *parent = nullptr); - ~EditBookmarkDialog() override; - -public slots: - void saveChanges(); - -private: - Ui::EditBookmarkDialog *ui; - - BookmarkModel *m_model; - QModelIndex m_index; - - bool titleChanged = false; - bool hrefChanged = false; - bool tagsChanged = false; - bool descriptionChanged = false; -}; - -#endif // SMOLBOTE_EDITBOOKMARKDIALOG_H diff --git a/lib/bookmarks/forms/editbookmarkdialog.ui b/lib/bookmarks/forms/editbookmarkdialog.ui deleted file mode 100644 index b988394..0000000 --- a/lib/bookmarks/forms/editbookmarkdialog.ui +++ /dev/null @@ -1,108 +0,0 @@ - - - EditBookmarkDialog - - - - 0 - 0 - 400 - 320 - - - - Edit Bookmark - - - - - - - - Title - - - - - - - - - - Address - - - - - - - - - - Tags - - - - - - - - - - Description - - - - - - - - - - - - Qt::Horizontal - - - QDialogButtonBox::Close|QDialogButtonBox::Save - - - - - - - - - buttonBox - accepted() - EditBookmarkDialog - accept() - - - 248 - 254 - - - 157 - 274 - - - - - buttonBox - rejected() - EditBookmarkDialog - reject() - - - 316 - 260 - - - 286 - 274 - - - - - diff --git a/lib/bookmarks/meson.build b/lib/bookmarks/meson.build index 78d0510..a7f603b 100644 --- a/lib/bookmarks/meson.build +++ b/lib/bookmarks/meson.build @@ -1,19 +1,16 @@ -bookmarks_inc = include_directories('.') bookmarks_moc = mod_qt5.preprocess( - moc_headers: ['bookmarkswidget.h', 'bookmarkmodel.h', 'forms/editbookmarkdialog.h'], - ui_files: ['bookmarksform.ui', 'forms/editbookmarkdialog.ui'], + moc_headers: [ 'bookmarkmodel.h' ], dependencies: dep_qt5 ) bookmarks_lib = static_library('bookmarks', - ['bookmarkswidget.cpp', bookmarks_moc, - 'bookmarksloader.cpp', 'formats/xbel.cpp', - 'bookmarkitem.cpp', 'bookmarkmodel.cpp', - 'forms/editbookmarkdialog.cpp'], + [ bookmarks_moc, + 'bookmarkformat.cpp', 'formats/xbel.cpp', + 'bookmarkitem.cpp', 'bookmarkmodel.cpp' ], dependencies: dep_qt5 ) dep_bookmarks = declare_dependency( - include_directories: bookmarks_inc, + include_directories: include_directories('.'), link_with: bookmarks_lib ) diff --git a/src/bookmarks/bookmarksform.ui b/src/bookmarks/bookmarksform.ui new file mode 100644 index 0000000..a003e53 --- /dev/null +++ b/src/bookmarks/bookmarksform.ui @@ -0,0 +1,129 @@ + + + BookmarksDialog + + + + 0 + 0 + 420 + 600 + + + + Bookmarks + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Add Folder + + + + + + + Add Bookmark + + + + + + + Delete Item + + + + + + + + + QAbstractItemView::NoEditTriggers + + + true + + + QAbstractItemView::DragDrop + + + Qt::MoveAction + + + 200 + + + 50 + + + + + + + Edit Bookmark + + + + + + Title + + + + + + + Address + + + + + + + + + + + + + + + + Edit Folder + + + + + + Name + + + + + + + + + + + + + + diff --git a/src/bookmarks/bookmarkswidget.cpp b/src/bookmarks/bookmarkswidget.cpp new file mode 100644 index 0000000..26fdddf --- /dev/null +++ b/src/bookmarks/bookmarkswidget.cpp @@ -0,0 +1,138 @@ +/* + * This file is part of smolbote. It's copyrighted by the contributors recorded + * in the version control history of the file, available from its original + * location: https://neueland.iserlohn-fortress.net/gitea/aqua/smolbote + * + * SPDX-License-Identifier: GPL-3.0 + */ + +#include "bookmarkswidget.h" +#include "editbookmarkdialog.h" +#include "ui_bookmarksform.h" +#include "bookmarkformat.h" +#include +#include + +inline void expandChildren(QTreeView *view, BookmarkModel *model, const QModelIndex &rootIndex) +{ + for(int i = 0; i < model->rowCount(rootIndex); ++i) { + QModelIndex idx = model->index(i, 0, rootIndex); + if(model->isItemExpanded(idx)) + view->expand(idx); + + // check if index has children + if(model->rowCount(idx) > 0) + expandChildren(view, model, idx); + } +} + +BookmarksWidget::BookmarksWidget(const QString &path, QWidget *parent) + : QWidget(parent) + , ui(new Ui::BookmarksDialog) +{ + // make sure this dialog does not get deleted on close + setAttribute(Qt::WA_DeleteOnClose, false); + + ui->setupUi(this); + ui->bookmark_groupBox->setVisible(false); + ui->folder_groupBox->setVisible(false); + + ui->addFolder_toolButton->setIcon(style()->standardPixmap(QStyle::SP_DirIcon)); + ui->addBookmark_toolButton->setIcon(style()->standardPixmap(QStyle::SP_FileIcon)); + ui->deleteItem_toolButton->setIcon(style()->standardPixmap(QStyle::SP_TrashIcon)); + ui->deleteItem_toolButton->setShortcut(QKeySequence::Delete); + + model = new BookmarkModel(this); + m_bookmarksPath = path; + QFile bookmarksFile(m_bookmarksPath); + if(bookmarksFile.open(QIODevice::ReadOnly | QIODevice::Text)) { + BookmarkFormat(&bookmarksFile) >> model; + } + model->resetModified(); + + ui->treeView->setModel(model); + expandChildren(ui->treeView, model, QModelIndex()); + + // item activated + connect(ui->treeView, &QTreeView::activated, this, [this](const QModelIndex &index) { + if(index.column() == 1) + emit openUrl(index.data(Qt::DisplayRole).toUrl()); + else + editBookmark(index); + }); + + connect(ui->treeView, &QTreeView::expanded, this, [this](const QModelIndex &index) { + model->setItemExpanded(index, true); + }); + connect(ui->treeView, &QTreeView::collapsed, this, [this](const QModelIndex &index) { + model->setItemExpanded(index, false); + }); + + ui->treeView->setContextMenuPolicy(Qt::CustomContextMenu); + connect(ui->treeView, &QTreeView::customContextMenuRequested, this, [this](const QPoint &pos) { + const QModelIndex idx = ui->treeView->indexAt(pos); + if(idx.isValid()) { + const QUrl url = model->data(idx, 1, Qt::DisplayRole).toUrl(); + const QPoint _pos = ui->treeView->viewport()->mapToGlobal(pos); + + emit showContextMenu(url, _pos); + } + }); + + // addBookmark + connect(ui->addBookmark_toolButton, &QToolButton::clicked, this, [this]() { + const QModelIndex idx = model->parentFolder(ui->treeView->currentIndex()); + const QModelIndex childIdx = model->appendBookmark(tr("Title"), QString(), idx); + ui->treeView->setCurrentIndex(childIdx); + editBookmark(childIdx); + }); + + // addFolder + connect(ui->addFolder_toolButton, &QToolButton::clicked, this, [this]() { + const QModelIndex idx = model->parentFolder(ui->treeView->currentIndex()); + const QModelIndex childIdx = model->appendFolder(tr("Title"), idx); + ui->treeView->setCurrentIndex(childIdx); + editBookmark(childIdx); + }); + + // deleteItem + connect(ui->deleteItem_toolButton, &QToolButton::clicked, this, [this]() { + const QModelIndex idx = ui->treeView->currentIndex(); + model->removeRow(idx.row(), idx.parent()); + }); +} + +BookmarksWidget::~BookmarksWidget() +{ + delete ui; +} + +void BookmarksWidget::editBookmark(const QModelIndex &index) +{ + auto *dlg = new EditBookmarkDialog(model, index, this); + dlg->exec(); +} + +void BookmarksWidget::save() +{ + if(!model->isModified()) + return; + + QFile bookmarksFile(m_bookmarksPath); + if(bookmarksFile.open(QIODevice::WriteOnly | QIODevice::Text)) { + BookmarkFormat f(&bookmarksFile); + model >> f; + bookmarksFile.flush(); + } +} + +void BookmarksWidget::addBookmark(const QString &title, const QString &url) +{ + model->appendBookmark(title, url, QModelIndex()); +} + +void BookmarksWidget::search(const QString &term, const std::function &callback) const +{ + QStringList ret = model->search(term); + callback(ret); +} diff --git a/src/bookmarks/bookmarkswidget.h b/src/bookmarks/bookmarkswidget.h new file mode 100644 index 0000000..149d2a6 --- /dev/null +++ b/src/bookmarks/bookmarkswidget.h @@ -0,0 +1,50 @@ +/* + * This file is part of smolbote. It's copyrighted by the contributors recorded + * in the version control history of the file, available from its original + * location: https://neueland.iserlohn-fortress.net/gitea/aqua/smolbote + * + * SPDX-License-Identifier: GPL-3.0 + */ + +#ifndef BOOKMARKSDIALOG_H +#define BOOKMARKSDIALOG_H + +#include +#include +#include +#include + +namespace Ui +{ +class BookmarksDialog; +} + +class BookmarksView; +class BookmarkModel; +class BookmarksWidget : public QWidget +{ + Q_OBJECT + +public: + explicit BookmarksWidget(const QString &path, QWidget *parent = nullptr); + ~BookmarksWidget() override; + +protected: + void editBookmark(const QModelIndex &index); + +signals: + void showContextMenu(const QUrl &url, const QPoint &pos); + void openUrl(const QUrl &url); + +public slots: + void save(); + void addBookmark(const QString &title, const QString &url); + void search(const QString &term, const std::function &callback) const; + +private: + Ui::BookmarksDialog *ui; + QString m_bookmarksPath; + BookmarkModel *model; +}; + +#endif // BOOKMARKSDIALOG_H diff --git a/src/bookmarks/editbookmarkdialog.cpp b/src/bookmarks/editbookmarkdialog.cpp new file mode 100644 index 0000000..7df90b8 --- /dev/null +++ b/src/bookmarks/editbookmarkdialog.cpp @@ -0,0 +1,70 @@ +/* + * This file is part of smolbote. It's copyrighted by the contributors recorded + * in the version control history of the file, available from its original + * location: https://neueland.iserlohn-fortress.net/gitea/aqua/smolbote + * + * SPDX-License-Identifier: GPL-3.0 + */ + +#include "editbookmarkdialog.h" +#include "bookmarkitem.h" +#include "bookmarkmodel.h" +#include "ui_editbookmarkdialog.h" + +EditBookmarkDialog::EditBookmarkDialog(BookmarkModel *model, const QModelIndex &index, QWidget *parent) + : QDialog(parent) + , ui(new Ui::EditBookmarkDialog) +{ + ui->setupUi(this); + setAttribute(Qt::WA_DeleteOnClose, true); + + Q_CHECK_PTR(model); + m_model = model; + m_index = index; + + ui->title->setText(model->data(index, BookmarkItem::Title, Qt::DisplayRole).toString()); + connect(ui->title, &QLineEdit::editingFinished, this, [this]() { + titleChanged = true; + }); + + ui->address->setText(model->data(index, BookmarkItem::Href, Qt::DisplayRole).toString()); + connect(ui->address, &QLineEdit::editingFinished, this, [this]() { + hrefChanged = true; + }); + + ui->tags->setText(model->data(index, BookmarkItem::Tags, Qt::DisplayRole).toStringList().join(", ")); + connect(ui->tags, &QLineEdit::editingFinished, this, [this]() { + tagsChanged = true; + }); + + ui->description->setPlainText(model->data(index, BookmarkItem::Description, Qt::DisplayRole).toString()); + connect(ui->description, &QPlainTextEdit::textChanged, this, [this]() { + descriptionChanged = true; + }); + + connect(ui->buttonBox, &QDialogButtonBox::accepted, this, &EditBookmarkDialog::saveChanges); +} + +EditBookmarkDialog::~EditBookmarkDialog() +{ + delete ui; +} + +void EditBookmarkDialog::saveChanges() +{ + if(titleChanged) { + m_model->setData(m_index, ui->title->text(), BookmarkItem::Title, Qt::DisplayRole); + } + + if(hrefChanged) { + m_model->setData(m_index, ui->address->text(), BookmarkItem::Href, Qt::DisplayRole); + } + + if(tagsChanged) { + m_model->setData(m_index, ui->tags->text().split(", "), BookmarkItem::Tags, Qt::DisplayRole); + } + + if(descriptionChanged) { + m_model->setData(m_index, ui->description->toPlainText(), BookmarkItem::Description, Qt::DisplayRole); + } +} diff --git a/src/bookmarks/editbookmarkdialog.h b/src/bookmarks/editbookmarkdialog.h new file mode 100644 index 0000000..fb53239 --- /dev/null +++ b/src/bookmarks/editbookmarkdialog.h @@ -0,0 +1,44 @@ +/* + * This file is part of smolbote. It's copyrighted by the contributors recorded + * in the version control history of the file, available from its original + * location: https://neueland.iserlohn-fortress.net/gitea/aqua/smolbote + * + * SPDX-License-Identifier: GPL-3.0 + */ + +#ifndef SMOLBOTE_EDITBOOKMARKDIALOG_H +#define SMOLBOTE_EDITBOOKMARKDIALOG_H + +#include +#include + +namespace Ui +{ +class EditBookmarkDialog; +} + +class BookmarkModel; +class EditBookmarkDialog : public QDialog +{ + Q_OBJECT + +public: + explicit EditBookmarkDialog(BookmarkModel *model, const QModelIndex &index, QWidget *parent = nullptr); + ~EditBookmarkDialog() override; + +public slots: + void saveChanges(); + +private: + Ui::EditBookmarkDialog *ui; + + BookmarkModel *m_model; + QModelIndex m_index; + + bool titleChanged = false; + bool hrefChanged = false; + bool tagsChanged = false; + bool descriptionChanged = false; +}; + +#endif // SMOLBOTE_EDITBOOKMARKDIALOG_H diff --git a/src/bookmarks/editbookmarkdialog.ui b/src/bookmarks/editbookmarkdialog.ui new file mode 100644 index 0000000..b988394 --- /dev/null +++ b/src/bookmarks/editbookmarkdialog.ui @@ -0,0 +1,108 @@ + + + EditBookmarkDialog + + + + 0 + 0 + 400 + 320 + + + + Edit Bookmark + + + + + + + + Title + + + + + + + + + + Address + + + + + + + + + + Tags + + + + + + + + + + Description + + + + + + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Close|QDialogButtonBox::Save + + + + + + + + + buttonBox + accepted() + EditBookmarkDialog + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + EditBookmarkDialog + reject() + + + 316 + 260 + + + 286 + 274 + + + + + diff --git a/src/browser.cpp b/src/browser.cpp index 09fc2c8..e518a81 100644 --- a/src/browser.cpp +++ b/src/browser.cpp @@ -10,7 +10,7 @@ #include "aboutdialog.h" #include "aboutplugin.h" #include "adblock/adblocklist.h" -#include "bookmarkswidget.h" +#include "bookmarks/bookmarkswidget.h" #include "configuration.h" #include "downloadswidget.h" #include "hostlist/hostlist.h" diff --git a/src/mainwindow/menubar.cpp b/src/mainwindow/menubar.cpp index 7fdad24..a8d0590 100644 --- a/src/mainwindow/menubar.cpp +++ b/src/mainwindow/menubar.cpp @@ -7,7 +7,7 @@ */ #include "menubar.h" -#include "bookmarkswidget.h" +#include "bookmarks/bookmarkswidget.h" #include "browser.h" #include "configuration.h" #include "downloadswidget.h" diff --git a/src/meson.build b/src/meson.build index 6d6a1aa..1783455 100644 --- a/src/meson.build +++ b/src/meson.build @@ -10,10 +10,14 @@ poi_settings_h = custom_target('default_config_value', poi_sourceset.add(mod_qt5.preprocess( moc_headers: ['browser.h', 'mainwindow/mainwindow.h', 'mainwindow/addressbar.h', 'mainwindow/menubar.h', 'mainwindow/widgets/completer.h', 'mainwindow/widgets/urllineedit.h', 'mainwindow/widgets/dockwidget.h', 'mainwindow/widgets/menusearch.h', 'mainwindow/widgets/navigationbar.h', 'mainwindow/widgets/searchform.h', + 'bookmarks/bookmarkswidget.h', 'bookmarks/editbookmarkdialog.h', 'session/savesessiondialog.h', 'session/sessiondialog.h', 'session/sessionform.h', 'subwindow/subwindow.h', 'subwindow/tabwidget.h', 'webengine/urlinterceptor.h', 'webengine/webpage.h', 'webengine/webview.h', 'webengine/webprofilemanager.h', 'webengine/webprofile.h'], - ui_files: ['mainwindow/addressbar.ui', 'mainwindow/widgets/searchform.ui', 'session/savesessiondialog.ui', 'session/sessiondialog.ui', 'session/sessionform.ui'], + ui_files: [ + 'mainwindow/addressbar.ui', 'mainwindow/widgets/searchform.ui', + 'bookmarks/bookmarksform.ui', 'bookmarks/editbookmarkdialog.ui', + 'session/savesessiondialog.ui', 'session/sessiondialog.ui', 'session/sessionform.ui'], qresources: '../data/resources.qrc', rcc_extra_arguments: ['--format-version=1'], dependencies: dep_qt5 @@ -34,6 +38,8 @@ poi_sourceset.add(files( 'mainwindow/widgets/navigationbar.cpp', 'mainwindow/widgets/searchform.cpp', + 'bookmarks/bookmarkswidget.cpp', 'bookmarks/editbookmarkdialog.cpp', + 'session/session.cpp', 'session/savesessiondialog.cpp', 'session/sessiondialog.cpp', -- cgit v1.2.1