diff options
| author | Mike Skec <skec@protonmail.ch> | 2021-01-02 19:19:37 +1100 |
|---|---|---|
| committer | Felix Queißner <felix@ib-queissner.de> | 2021-01-02 12:41:49 +0100 |
| commit | 40cf7edd21fadb77342e99b1bb6b7c87785bafa1 (patch) | |
| tree | 73675c042b4da725ff20119c86c8b00fb956c864 /src | |
| parent | 90e20d2c047ae1d9527e15267e62dbc8349e7bb3 (diff) | |
| download | kristall-40cf7edd21fadb77342e99b1bb6b7c87785bafa1.tar.gz | |
favourites: implement #77, and add rename context menus
Diffstat (limited to 'src')
| -rw-r--r-- | src/browsertab.cpp | 4 | ||||
| -rw-r--r-- | src/favouritecollection.cpp | 27 | ||||
| -rw-r--r-- | src/favouritecollection.hpp | 6 | ||||
| -rw-r--r-- | src/mainwindow.cpp | 45 | ||||
| -rw-r--r-- | src/mainwindow.hpp | 2 |
5 files changed, 69 insertions, 15 deletions
diff --git a/src/browsertab.cpp b/src/browsertab.cpp index 3390679..687dcd8 100644 --- a/src/browsertab.cpp +++ b/src/browsertab.cpp @@ -190,7 +190,7 @@ void BrowserTab::toggleIsFavourite(bool shouldBeFavourite) // we yet need to add it. if (shouldBeFavourite) { - kristall::favourites.addUnsorted(this->current_location); + kristall::favourites.addUnsorted(this->current_location, this->page_title); } else { @@ -1191,7 +1191,7 @@ void BrowserTab::updateUrlBarStyle() QTextLayout::FormatRange fr_right; fr_right.start = fr_left.length + url.authority().length(); - fr_right.length = url.path().length(); + fr_right.length = url.toString(QUrl::FullyEncoded).length() - fr_right.start; fr_right.format = f; formats.append(fr_right); } diff --git a/src/favouritecollection.cpp b/src/favouritecollection.cpp index 68d5fc7..8ff19e6 100644 --- a/src/favouritecollection.cpp +++ b/src/favouritecollection.cpp @@ -173,6 +173,16 @@ bool FavouriteCollection::addFavourite(const QString &group_name, const Favourit return true; } +void FavouriteCollection::editFavouriteTitle(const QModelIndex &index, const QString &title) +{ + this->getMutableFavourite(index)->title = title; +} + +void FavouriteCollection::editFavouriteDest(const QModelIndex &index, const QUrl &url) +{ + this->getMutableFavourite(index)->destination = url; +} + Favourite FavouriteCollection::getFavourite(const QModelIndex &index) const { if (!index.isValid()) @@ -317,12 +327,12 @@ bool FavouriteCollection::containsUrl(const QUrl &url) const return false; } -bool FavouriteCollection::addUnsorted(const QUrl &url) +bool FavouriteCollection::addUnsorted(const QUrl &url, const QString &t) { if(containsUrl(url)) return false; return addFavourite(tr("Unsorted"), Favourite { - QString { }, + t, url, }); } @@ -331,10 +341,17 @@ bool FavouriteCollection::removeUrl(const QUrl &url) { for(auto const & group : this->root.children) { - for(auto it = group->children.begin(); it != group->children.end(); it++) + size_t index = 0; + for(auto it = group->children.begin(); it != group->children.end(); ++it, ++index) { - if(it->get()->as<FavouriteNode>().favourite.destination == url) { + auto & fav = it->get()->as<FavouriteNode>(); + if(fav.favourite.destination == url) { + beginRemoveRows(QModelIndex { }, index, index + 1); + group->children.erase(it); + + endRemoveRows(); + return true; } } @@ -470,7 +487,7 @@ 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 | Qt::ItemIsEditable; + return QAbstractItemModel::flags(index) | Qt::ItemIsDragEnabled; case Node::Group: return QAbstractItemModel::flags(index) | Qt::ItemIsDropEnabled | Qt::ItemIsEditable; default: diff --git a/src/favouritecollection.hpp b/src/favouritecollection.hpp index 3dffa10..1316410 100644 --- a/src/favouritecollection.hpp +++ b/src/favouritecollection.hpp @@ -77,6 +77,10 @@ public: bool addFavourite(QString const & group, Favourite const & fav); + void editFavouriteTitle(const QModelIndex &index, const QString &title); + + void editFavouriteDest(const QModelIndex & index, const QUrl & url); + Favourite getFavourite(QModelIndex const & index) const; Favourite * getMutableFavourite(QModelIndex const & index); @@ -98,7 +102,7 @@ public: bool containsUrl(QUrl const & url) const; - bool addUnsorted(QUrl const & url); + bool addUnsorted(QUrl const & url, QString const & title); bool removeUrl(QUrl const & url); diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 0a818c9..3315840 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -108,7 +108,6 @@ BrowserTab * MainWindow::addEmptyTab(bool focus_new, bool load_default) if(focus_new) { this->ui->browser_tabs->setCurrentIndex(index); - tab->focusUrlBar(); } if(load_default) { @@ -117,6 +116,10 @@ BrowserTab * MainWindow::addEmptyTab(bool focus_new, bool load_default) tab->navigateTo(QUrl("about:blank"), BrowserTab::DontPush); } + if(focus_new) { + tab->focusUrlBar(); + } + return tab; } @@ -239,12 +242,12 @@ void MainWindow::on_browser_tabs_currentChanged(int index) updateWindowTitle(); } -//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) { @@ -517,6 +520,34 @@ void MainWindow::on_favourites_view_customContextMenuRequested(const QPoint pos) menu.addSeparator(); + connect(menu.addAction("Rename"), &QAction::triggered, [this, idx]() { + QInputDialog dialog { this }; + + dialog.setInputMode(QInputDialog::TextInput); + dialog.setLabelText(tr("New name of this favourite:")); + dialog.setTextValue(kristall::favourites.getFavourite(idx).getTitle()); + + if (dialog.exec() != QDialog::Accepted) + return; + + kristall::favourites.editFavouriteTitle(idx, dialog.textValue()); + }); + + connect(menu.addAction("Relocate"), &QAction::triggered, [this, idx]() { + QInputDialog dialog { this }; + + dialog.setInputMode(QInputDialog::TextInput); + dialog.setLabelText(tr("Enter new location of this favourite:")); + dialog.setTextValue(kristall::favourites.getFavourite(idx).destination.toString(QUrl::FullyEncoded)); + + if (dialog.exec() != QDialog::Accepted) + return; + + kristall::favourites.editFavouriteDest(idx, QUrl(dialog.textValue())); + }); + + menu.addSeparator(); + connect(menu.addAction("Delete"), &QAction::triggered, [idx]() { kristall::favourites.destroyFavourite(idx); }); diff --git a/src/mainwindow.hpp b/src/mainwindow.hpp index 49e2c84..e02ecfd 100644 --- a/src/mainwindow.hpp +++ b/src/mainwindow.hpp @@ -83,6 +83,8 @@ private slots: void on_favourites_view_customContextMenuRequested(const QPoint pos); + void on_favourites_view_doubleClicked(const QModelIndex &index); + void on_actionChangelog_triggered(); void on_actionManage_Certificates_triggered(); |
