diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/favouritecollection.cpp | 39 | ||||
| -rw-r--r-- | src/favouritecollection.hpp | 4 | ||||
| -rw-r--r-- | src/main.cpp | 5 | ||||
| -rw-r--r-- | src/mainwindow.cpp | 34 | ||||
| -rw-r--r-- | src/mainwindow.hpp | 2 | ||||
| -rw-r--r-- | src/protocols/abouthandler.cpp | 6 |
6 files changed, 77 insertions, 13 deletions
diff --git a/src/favouritecollection.cpp b/src/favouritecollection.cpp index 06329fe..d0a0a09 100644 --- a/src/favouritecollection.cpp +++ b/src/favouritecollection.cpp @@ -412,6 +412,16 @@ QVariant FavouriteCollection::data(const QModelIndex &index, int role) const return "Unknown"; } } + if (role == Qt::EditRole) + { + switch(item->type) { + case Node::Root: return "root"; + case Node::Group: return static_cast<GroupNode const *>(item)->title; + case Node::Favourite: return static_cast<FavouriteNode const *>(item)->favourite.title; + default: + return "Unknown"; + } + } else if(role == Qt::DecorationRole) { switch(item->type) { @@ -425,6 +435,31 @@ QVariant FavouriteCollection::data(const QModelIndex &index, int role) const return QVariant(); } +bool FavouriteCollection::setData(const QModelIndex &index, const QVariant &value, int role) +{ + if (!index.isValid()) + return false; + + Node *item = static_cast<Node*>(index.internalPointer()); + if (role == Qt::EditRole) + { + switch(item->type) { + case Node::Root: return false; + case Node::Group: + item->as<GroupNode>().title = value.toString(); + emit this->dataChanged(index, index, { Qt::EditRole }); + return true; + case Node::Favourite: + item->as<FavouriteNode>().favourite.title = value.toString(); + emit this->dataChanged(index, index, { Qt::EditRole }); + return true; + default: return false; + } + } + + return false; +} + Qt::ItemFlags FavouriteCollection::flags(const QModelIndex &index) const { if (!index.isValid()) @@ -432,9 +467,9 @@ Qt::ItemFlags FavouriteCollection::flags(const QModelIndex &index) const Node const *item = static_cast<Node const*>(index.internalPointer()); switch(item->type) { case Node::Favourite: - return QAbstractItemModel::flags(index) | Qt::ItemIsDragEnabled; + return QAbstractItemModel::flags(index) | Qt::ItemIsDragEnabled | Qt::ItemIsEditable; case Node::Group: - return QAbstractItemModel::flags(index) | Qt::ItemIsDropEnabled; + return QAbstractItemModel::flags(index) | Qt::ItemIsDropEnabled | Qt::ItemIsEditable; default: return QAbstractItemModel::flags(index); } diff --git a/src/favouritecollection.hpp b/src/favouritecollection.hpp index ea107ab..ed056ae 100644 --- a/src/favouritecollection.hpp +++ b/src/favouritecollection.hpp @@ -18,7 +18,7 @@ struct Favourite QString getTitle() const { if(title.isEmpty()) - return destination.toString(QUrl::FullyDecoded); + return destination.toString(QUrl::FullyEncoded); else return title; } @@ -114,6 +114,8 @@ public: QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; + bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override; + // Drag'n'Drop Qt::ItemFlags flags(const QModelIndex &index) const override; diff --git a/src/main.cpp b/src/main.cpp index 09a6a7c..9be807e 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -147,7 +147,7 @@ int main(int argc, char *argv[]) app_settings.endGroup(); } - // deprecated_settings.setValue("deprecated", true); + deprecated_settings.setValue("deprecated", true); } else { @@ -159,6 +159,7 @@ int main(int argc, char *argv[]) // Migrate to new favourites format if(int len = app_settings.beginReadArray("favourites"); len > 0) { + qDebug() << "Migrating old-style favourites..."; std::vector<Favourite> favs; favs.reserve(len); @@ -332,7 +333,9 @@ void kristall::saveSettings() assert(app_settings_ptr != nullptr); QSettings & app_settings = *app_settings_ptr; + app_settings.beginGroup("Favourites"); kristall::favourites.save(app_settings); + app_settings.endGroup(); app_settings.beginGroup("Protocols"); kristall::protocols.save(app_settings); diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index b987e7d..62f6ad0 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -10,6 +10,8 @@ #include <QFile> #include <QTextStream> #include <QFileDialog> +#include <QInputDialog> + #include "ioutil.hpp" #include "kristall.hpp" @@ -145,12 +147,12 @@ void MainWindow::on_browser_tabs_currentChanged(int index) } } -void MainWindow::on_favourites_view_doubleClicked(const QModelIndex &index) -{ - if(auto url = kristall::favourites.getFavourite(index).destination; url.isValid()) { - this->addNewTab(true, url); - } -} +//void MainWindow::on_favourites_view_doubleClicked(const QModelIndex &index) +//{ +// if(auto url = kristall::favourites.getFavourite(index).destination; url.isValid()) { +// this->addNewTab(true, url); +// } +//} void MainWindow::on_browser_tabs_tabCloseRequested(int index) { @@ -406,6 +408,26 @@ void MainWindow::on_favourites_view_customContextMenuRequested(const QPoint &pos menu.exec(this->ui->favourites_view->mapToGlobal(pos)); } + else if(QString group = kristall::favourites.group(idx); not group.isEmpty()) { + qDebug() << group; + } + } + else { + QMenu menu; + + connect(menu.addAction("Create new group..."), &QAction::triggered, [this]() { + QInputDialog dialog { this }; + + dialog.setInputMode(QInputDialog::TextInput); + dialog.setLabelText(tr("Enter name of the new group:")); + + if(dialog.exec() != QDialog::Accepted) + return; + + kristall::favourites.addGroup(dialog.textValue()); + }); + + menu.exec(this->ui->favourites_view->mapToGlobal(pos)); } } diff --git a/src/mainwindow.hpp b/src/mainwindow.hpp index e845bc8..1966684 100644 --- a/src/mainwindow.hpp +++ b/src/mainwindow.hpp @@ -35,8 +35,6 @@ public: private slots: void on_browser_tabs_currentChanged(int index); - void on_favourites_view_doubleClicked(const QModelIndex &index); - void on_browser_tabs_tabCloseRequested(int index); void on_history_view_doubleClicked(const QModelIndex &index); diff --git a/src/protocols/abouthandler.cpp b/src/protocols/abouthandler.cpp index 53646d9..5192f0c 100644 --- a/src/protocols/abouthandler.cpp +++ b/src/protocols/abouthandler.cpp @@ -30,7 +30,11 @@ bool AboutHandler::startRequest(const QUrl &url, ProtocolHandler::RequestOptions for (auto const &fav : kristall::favourites.allFavourites()) { - document.append("=> " + fav->destination.toString().toUtf8() + "\n"); + if(fav->title.isEmpty()) { + document.append("=> " + fav->destination.toString().toUtf8() + "\n"); + } else { + document.append("=> " + fav->destination.toString().toUtf8() + " " + fav->title.toUtf8() + "\n"); + } } this->requestComplete(document, "text/gemini"); |
