aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMike Skec <skec@protonmail.ch>2021-01-02 19:19:37 +1100
committerFelix Queißner <felix@ib-queissner.de>2021-01-02 12:41:49 +0100
commit40cf7edd21fadb77342e99b1bb6b7c87785bafa1 (patch)
tree73675c042b4da725ff20119c86c8b00fb956c864 /src
parent90e20d2c047ae1d9527e15267e62dbc8349e7bb3 (diff)
downloadkristall-40cf7edd21fadb77342e99b1bb6b7c87785bafa1.tar.gz
favourites: implement #77, and add rename context menus
Diffstat (limited to 'src')
-rw-r--r--src/browsertab.cpp4
-rw-r--r--src/favouritecollection.cpp27
-rw-r--r--src/favouritecollection.hpp6
-rw-r--r--src/mainwindow.cpp45
-rw-r--r--src/mainwindow.hpp2
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();