/* * 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/smolbote.hg * * SPDX-License-Identifier: GPL-3.0 */ #include "bookmarkswidget.h" #include "ui_bookmarksform.h" #include "xbel.h" #include 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); setWindowTitle(tr("Bookmarks")); 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); m_bookmarksPath = path; // read bookmarks { QFile bookmarksFile(m_bookmarksPath); 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(); } } // open bookmark action 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]() { 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]() { auto *parentItem = ui->treeWidget->currentItem(); if(ui->treeWidget->itemType(parentItem) == BookmarksView::Bookmark) parentItem = parentItem->parent(); auto *folder = ui->treeWidget->createFolder(parentItem); folder->setText(0, tr("title")); }); // delete item action connect(ui->deleteItem_toolButton, &QToolButton::clicked, this, [this]() { delete ui->treeWidget->currentItem(); }); // edit item action connect(ui->treeWidget, &QTreeWidget::currentItemChanged, this, [this](QTreeWidgetItem *current, QTreeWidgetItem *previous) { // save the previous item if(previous) { if(ui->treeWidget->itemType(previous) == BookmarksView::Folder) { previous->setText(0, ui->folderTitle->text()); ui->folder_groupBox->setVisible(false); } 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); } } // 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(ui->treeWidget->itemType(current) == BookmarksView::Bookmark) { ui->bookmarkTitle->setText(current->text(0)); ui->bookmarkHref->setText(current->text(1)); ui->bookmark_groupBox->setVisible(true); } } }); } BookmarksWidget::~BookmarksWidget() { delete ui; } void BookmarksWidget::save() { /* if(!m_model->isModified()) { qDebug("Writing bookmarks skipped"); return; } */ QFile bookmarksFile(m_bookmarksPath); if(bookmarksFile.open(QIODevice::WriteOnly | QIODevice::Text)) { XbelWriter xbel(&bookmarksFile); xbel.write(ui->treeWidget); //qDebug("Writing bookmarks %s", m_model->write(&xbel) ? "ok" : "failed"); bookmarksFile.flush(); bookmarksFile.close(); } } void BookmarksWidget::addBookmark(const QString &title, const QString &url) { auto *bookmark = ui->treeWidget->createBookmark(nullptr); bookmark->setText(0, title); bookmark->setText(1, url); } void BookmarksWidget::search(const QString &term, std::function callback) const { QStringList ret; const QList res = ui->treeWidget->findItems(term, Qt::MatchContains | Qt::MatchRecursive, 1); for(const QTreeWidgetItem *i : res) { if(!i->text(1).isEmpty()) ret.append(i->text(1)); } callback(ret); }