aboutsummaryrefslogtreecommitdiff
path: root/lib/addressbar/addressbar.cpp
diff options
context:
space:
mode:
authorAqua-sama <aqua@iserlohn-fortress.net>2018-05-01 15:54:49 +0200
committerAqua-sama <aqua@iserlohn-fortress.net>2018-05-01 15:54:49 +0200
commit1ee841364215042f1f284e692ae191ebf7a64156 (patch)
tree48c1f49e29fe6b13cef68cd73dd2cab039fea822 /lib/addressbar/addressbar.cpp
parentWindow::session (diff)
downloadsmolbote-1ee841364215042f1f284e692ae191ebf7a64156.tar.xz
Split off addressbar into lib/
Diffstat (limited to 'lib/addressbar/addressbar.cpp')
-rw-r--r--lib/addressbar/addressbar.cpp94
1 files changed, 94 insertions, 0 deletions
diff --git a/lib/addressbar/addressbar.cpp b/lib/addressbar/addressbar.cpp
new file mode 100644
index 0000000..9b3970d
--- /dev/null
+++ b/lib/addressbar/addressbar.cpp
@@ -0,0 +1,94 @@
+/*
+ * 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 "addressbar.h"
+#include "urllineedit.h"
+#include <QWebEngineView>
+#include <QProgressBar>
+#include <QShortcut>
+#include <QVBoxLayout>
+
+AddressBar::AddressBar(const QHash<QString, QString> &config, QWidget *parent)
+ : QWidget(parent)
+{
+ setLayout(new QVBoxLayout());
+ layout()->setContentsMargins(0, 0, 0, 0);
+ layout()->setSpacing(0);
+
+ urlBar = new UrlLineEdit(this);
+ layout()->addWidget(urlBar);
+
+ auto *focusShortcut = new QShortcut(QKeySequence(config.value("addressbar.shortcuts.focus")), parent);
+ connect(focusShortcut, &QShortcut::activated, urlBar, [=]() {
+ urlBar->setFocus();
+ urlBar->selectAll();
+ });
+
+ urlBar->pageMenu_action->setShortcut(QKeySequence(config.value("addressbar.shortcuts.pageMenu")));
+ urlBar->pageMenu_action->setToolTip(tr("Page Actions (%1)").arg(urlBar->pageMenu_action->shortcut().toString()));
+
+ urlBar->toolsMenu_action->setShortcut(QKeySequence(config.value("addressbar.shortcuts.toolsMenu")));
+ urlBar->toolsMenu_action->setToolTip(tr("Tools (%1)").arg(urlBar->toolsMenu_action->shortcut().toString()));
+
+ connect(urlBar, &UrlLineEdit::textEdited, [=](const QString &text) {
+ std::function<void(QStringList &)> callback = std::bind(&UrlLineEdit::updateCompleter, urlBar, std::placeholders::_1);
+ emit complete(text, callback);
+ });
+
+ progressBar = new QProgressBar(this);
+ progressBar->setMaximumHeight(5);
+ progressBar->setTextVisible(false);
+ layout()->addWidget(progressBar);
+}
+
+AddressBar::~AddressBar()
+{
+ disconnect(urlChangedConnection);
+ disconnect(loadUrlConnection);
+ disconnect(progressBarConnection);
+}
+
+void AddressBar::setView(QWebEngineView *view)
+{
+ disconnect(urlChangedConnection);
+ disconnect(loadUrlConnection);
+ disconnect(progressBarConnection);
+
+ progressBar->setValue(100);
+
+ if(view == nullptr) {
+ urlBar->clear();
+ urlBar->pageMenu_action->setMenu(nullptr);
+ urlBar->toolsMenu_action->setMenu(nullptr);
+ return;
+ }
+
+ urlBar->setUrl(view->url());
+ urlChangedConnection = connect(view, &QWebEngineView::urlChanged, urlBar, &UrlLineEdit::setUrl);
+ loadUrlConnection = connect(urlBar, &UrlLineEdit::returnPressed, [=]() {
+ if(urlBar->text().startsWith('#')) {
+ emit search(urlBar->text().mid(1));
+ } else {
+ view->load(QUrl::fromUserInput(urlBar->text()));
+ }
+ view->setFocus();
+ });
+
+ //progressBar->setValue(view->loadProgress());
+ progressBarConnection = connect(view, &QWebEngineView::loadProgress, progressBar, &QProgressBar::setValue);
+}
+
+void AddressBar::setPageMenu(QMenu *menu)
+{
+ urlBar->pageMenu_action->setMenu(menu);
+}
+
+void AddressBar::setToolsMenu(QMenu *menu)
+{
+ urlBar->toolsMenu_action->setMenu(menu);
+}