Internal web browser now has its toolbar and basic functionality back.
This commit is contained in:
parent
752d507414
commit
df91d10e3c
10
rssguard.pro
10
rssguard.pro
@ -265,7 +265,10 @@ HEADERS += src/core/feeddownloader.h \
|
||||
src/services/tt-rss/ttrssserviceroot.h \
|
||||
src/gui/webviewer.h \
|
||||
src/gui/webbrowser.h \
|
||||
src/network-web/webpage.h
|
||||
src/network-web/webpage.h \
|
||||
src/gui/locationlineedit.h \
|
||||
src/network-web/googlesuggest.h \
|
||||
src/gui/discoverfeedsbutton.h
|
||||
|
||||
SOURCES += src/core/feeddownloader.cpp \
|
||||
src/core/feedsmodel.cpp \
|
||||
@ -373,7 +376,10 @@ SOURCES += src/core/feeddownloader.cpp \
|
||||
src/services/tt-rss/ttrssserviceroot.cpp \
|
||||
src/gui/webviewer.cpp \
|
||||
src/gui/webbrowser.cpp \
|
||||
src/network-web/webpage.cpp
|
||||
src/network-web/webpage.cpp \
|
||||
src/gui/locationlineedit.cpp \
|
||||
src/network-web/googlesuggest.cpp \
|
||||
src/gui/discoverfeedsbutton.cpp
|
||||
|
||||
FORMS += \
|
||||
src/gui/toolbareditor.ui \
|
||||
|
@ -47,7 +47,7 @@ class FeedMessageViewer : public TabContent {
|
||||
|
||||
// WebBrowser getter from TabContent interface.
|
||||
inline WebBrowser *webBrowser() const {
|
||||
return NULL;
|
||||
return m_messagesBrowser;
|
||||
}
|
||||
|
||||
// FeedsView getter.
|
||||
|
@ -21,6 +21,8 @@
|
||||
#include <QWidget>
|
||||
|
||||
|
||||
class WebBrowser;
|
||||
|
||||
// Base class for all widgets which are placed inside tabs of TabWidget
|
||||
class TabContent : public QWidget {
|
||||
Q_OBJECT
|
||||
@ -41,6 +43,10 @@ class TabContent : public QWidget {
|
||||
m_index = index;
|
||||
}
|
||||
|
||||
// Obtains instance contained in this TabContent or nullptr.
|
||||
// This can be used for obtaining the menu from the instance and so on.
|
||||
virtual WebBrowser *webBrowser() const = 0;
|
||||
|
||||
protected:
|
||||
int m_index;
|
||||
};
|
||||
|
@ -18,9 +18,13 @@
|
||||
#include "gui/webbrowser.h"
|
||||
|
||||
#include "miscellaneous/application.h"
|
||||
#include "network-web/webfactory.h"
|
||||
#include "miscellaneous/databasequeries.h"
|
||||
#include "network-web/networkfactory.h"
|
||||
#include "network-web/webfactory.h"
|
||||
#include "gui/messagebox.h"
|
||||
#include "gui/webviewer.h"
|
||||
#include "gui/discoverfeedsbutton.h"
|
||||
#include "gui/locationlineedit.h"
|
||||
#include "gui/dialogs/formmain.h"
|
||||
#include "services/abstract/serviceroot.h"
|
||||
|
||||
@ -28,15 +32,59 @@
|
||||
#include <QToolBar>
|
||||
#include <QWebEngineSettings>
|
||||
#include <QToolTip>
|
||||
#include <QWidgetAction>
|
||||
|
||||
|
||||
void WebBrowser::createConnections() {
|
||||
connect(m_ui->m_webMessage, &WebViewer::messageStatusChangeRequested, this, &WebBrowser::receiveMessageStatusChangeRequest);
|
||||
connect(m_webView, &WebViewer::messageStatusChangeRequested, this, &WebBrowser::receiveMessageStatusChangeRequest);
|
||||
|
||||
connect(m_txtLocation,SIGNAL(submitted(QString)), this, SLOT(loadUrl(QString)));
|
||||
connect(m_webView, SIGNAL(urlChanged(QUrl)), this, SLOT(updateUrl(QUrl)));
|
||||
|
||||
// Connect this WebBrowser to global TabWidget.
|
||||
//TabWidget *tab_widget = qApp->mainForm()->tabWidget();
|
||||
//connect(m_webView, SIGNAL(newTabRequested()), tab_widget, SLOT(addEmptyBrowser()));
|
||||
//connect(m_webView, SIGNAL(linkMiddleClicked(QUrl)), tab_widget, SLOT(addLinkedBrowser(QUrl)));
|
||||
|
||||
// Change location textbox status according to webpage status.
|
||||
connect(m_webView, SIGNAL(loadStarted()), this, SLOT(onLoadingStarted()));
|
||||
//connect(m_webView, SIGNAL(loadProgress(int)), this, SLOT(onLoadingProgress(int)));
|
||||
connect(m_webView, SIGNAL(loadFinished(bool)), this, SLOT(onLoadingFinished(bool)));
|
||||
|
||||
// Forward title/icon changes.
|
||||
//connect(m_webView, SIGNAL(titleChanged(QString)), this, SLOT(onTitleChanged(QString)));
|
||||
//connect(m_webView, SIGNAL(iconChanged(QIcon)), this, SLOT(onIconChanged(QIcon)));
|
||||
}
|
||||
|
||||
void WebBrowser::updateUrl(const QUrl &url) {
|
||||
QString url_string = url.toString();
|
||||
|
||||
m_txtLocation->setText(url_string);
|
||||
//setNavigationBarVisible(url_string != INTERNAL_URL_EMPTY && url_string != INTERNAL_URL_NEWSPAPER);
|
||||
}
|
||||
|
||||
void WebBrowser::loadUrl(const QUrl &url) {
|
||||
if (url.isValid()) {
|
||||
m_webView->load(url);
|
||||
}
|
||||
}
|
||||
|
||||
WebBrowser::WebBrowser(QWidget *parent) : TabContent(parent),
|
||||
m_ui(new Ui::WebBrowser) {
|
||||
m_ui->setupUi(this);
|
||||
m_layout(new QVBoxLayout(this)),
|
||||
m_toolBar(new QToolBar(tr("Navigation panel"), this)),
|
||||
m_webView(new WebViewer(this)),
|
||||
m_txtLocation(new LocationLineEdit(this)),
|
||||
m_btnDiscoverFeeds(new DiscoverFeedsButton(this)),
|
||||
m_actionBack(m_webView->pageAction(QWebEnginePage::Back)),
|
||||
m_actionForward(m_webView->pageAction(QWebEnginePage::Forward)),
|
||||
m_actionReload(m_webView->pageAction(QWebEnginePage::Reload)),
|
||||
m_actionStop(m_webView->pageAction(QWebEnginePage::Stop)) {
|
||||
|
||||
// Initialize the components and layout.
|
||||
initializeLayout();
|
||||
|
||||
setTabOrder(m_txtLocation, m_toolBar);
|
||||
setTabOrder(m_toolBar, m_webView);
|
||||
|
||||
createConnections();
|
||||
reloadFontSettings();
|
||||
@ -44,6 +92,8 @@ WebBrowser::WebBrowser(QWidget *parent) : TabContent(parent),
|
||||
}
|
||||
|
||||
WebBrowser::~WebBrowser() {
|
||||
// Delete members. Do not use scoped pointers here.
|
||||
delete m_layout;
|
||||
}
|
||||
|
||||
void WebBrowser::reloadFontSettings() {
|
||||
@ -56,10 +106,14 @@ void WebBrowser::reloadFontSettings() {
|
||||
}
|
||||
|
||||
void WebBrowser::clear() {
|
||||
m_ui->m_webMessage->clear();
|
||||
m_webView->clear();
|
||||
hide();
|
||||
}
|
||||
|
||||
void WebBrowser::loadUrl(const QString &url) {
|
||||
return loadUrl(QUrl::fromUserInput(url));
|
||||
}
|
||||
|
||||
void WebBrowser::loadMessages(const QList<Message> &messages, RootItem *root) {
|
||||
if (m_messages.size() == messages.size()) {
|
||||
for (int i = 0; i < messages.size(); i++) {
|
||||
@ -78,7 +132,7 @@ void WebBrowser::loadMessages(const QList<Message> &messages, RootItem *root) {
|
||||
m_root = root;
|
||||
|
||||
if (!m_root.isNull()) {
|
||||
m_ui->m_webMessage->loadMessages(messages);
|
||||
m_webView->loadMessages(messages);
|
||||
show();
|
||||
}
|
||||
}
|
||||
@ -110,6 +164,57 @@ void WebBrowser::receiveMessageStatusChangeRequest(int message_id, WebPage::Mess
|
||||
}
|
||||
}
|
||||
|
||||
void WebBrowser::initializeLayout() {
|
||||
m_toolBar->setFloatable(false);
|
||||
m_toolBar->setMovable(false);
|
||||
m_toolBar->setAllowedAreas(Qt::TopToolBarArea);
|
||||
|
||||
// Modify action texts.
|
||||
m_actionBack->setText(tr("Back"));
|
||||
m_actionBack->setToolTip(tr("Go back."));
|
||||
m_actionForward->setText(tr("Forward"));
|
||||
m_actionForward->setToolTip(tr("Go forward."));
|
||||
m_actionReload->setText(tr("Reload"));
|
||||
m_actionReload->setToolTip(tr("Reload current web page."));
|
||||
m_actionStop->setText(tr("Stop"));
|
||||
m_actionStop->setToolTip(tr("Stop web page loading."));
|
||||
|
||||
QWidgetAction *act_discover = new QWidgetAction(this);
|
||||
|
||||
act_discover->setDefaultWidget(m_btnDiscoverFeeds);
|
||||
|
||||
// Add needed actions into toolbar.
|
||||
m_toolBar->addAction(m_actionBack);
|
||||
m_toolBar->addAction(m_actionForward);
|
||||
m_toolBar->addAction(m_actionReload);
|
||||
m_toolBar->addAction(m_actionStop);
|
||||
m_toolBar->addAction(act_discover);
|
||||
m_toolBar->addWidget(m_txtLocation);
|
||||
|
||||
// Setup layout.
|
||||
m_layout->addWidget(m_toolBar);
|
||||
m_layout->addWidget(m_webView);
|
||||
m_layout->setMargin(0);
|
||||
m_layout->setSpacing(0);
|
||||
}
|
||||
|
||||
void WebBrowser::onLoadingStarted() {
|
||||
m_btnDiscoverFeeds->clearFeedAddresses();
|
||||
}
|
||||
|
||||
void WebBrowser::onLoadingFinished(bool success) {
|
||||
if (success) {
|
||||
// Let's check if there are any feeds defined on the web and eventually
|
||||
// display "Add feeds" button.
|
||||
m_webView->page()->toHtml([this](const QString &result){
|
||||
this->m_btnDiscoverFeeds->setFeedAddresses(NetworkFactory::extractFeedLinksFromHtmlPage(m_webView->url(), result));
|
||||
});
|
||||
}
|
||||
else {
|
||||
m_btnDiscoverFeeds->clearFeedAddresses();
|
||||
}
|
||||
}
|
||||
|
||||
void WebBrowser::markMessageAsRead(int id, bool read) {
|
||||
if (!m_root.isNull()) {
|
||||
Message *msg = findMessage(id);
|
||||
|
@ -20,19 +20,30 @@
|
||||
|
||||
#include "gui/tabcontent.h"
|
||||
|
||||
#include "ui_webbrowser.h"
|
||||
//#include "ui_webbrowser.h"
|
||||
|
||||
#include "core/message.h"
|
||||
#include "network-web/webpage.h"
|
||||
#include "services/abstract/rootitem.h"
|
||||
|
||||
#include <QPointer>
|
||||
#include <QToolBar>
|
||||
|
||||
|
||||
namespace Ui {
|
||||
/*namespace Ui {
|
||||
class MessagePreviewer;
|
||||
}
|
||||
}*/
|
||||
|
||||
class QToolBar;
|
||||
class QToolButton;
|
||||
class QVBoxLayout;
|
||||
class QHBoxLayout;
|
||||
class QProgressBar;
|
||||
class QMenu;
|
||||
class QLabel;
|
||||
class TabWidget;
|
||||
class WebViewer;
|
||||
class LocationLineEdit;
|
||||
class DiscoverFeedsButton;
|
||||
|
||||
class WebBrowser : public TabContent {
|
||||
Q_OBJECT
|
||||
@ -41,14 +52,28 @@ class WebBrowser : public TabContent {
|
||||
explicit WebBrowser(QWidget *parent = 0);
|
||||
virtual ~WebBrowser();
|
||||
|
||||
WebBrowser *webBrowser() const {
|
||||
return const_cast<WebBrowser*>(this);
|
||||
}
|
||||
|
||||
void reloadFontSettings();
|
||||
|
||||
public slots:
|
||||
void clear();
|
||||
void loadUrl(const QString &url);
|
||||
void loadUrl(const QUrl &url);
|
||||
void loadMessages(const QList<Message> &messages, RootItem *root);
|
||||
void loadMessage(const Message &message, RootItem *root);
|
||||
|
||||
// Switches visibility of navigation bar.
|
||||
inline void setNavigationBarVisible(bool visible) {
|
||||
m_toolBar->setVisible(visible);
|
||||
}
|
||||
|
||||
private slots:
|
||||
void updateUrl(const QUrl &url);
|
||||
void onLoadingStarted();
|
||||
void onLoadingFinished(bool success);
|
||||
void receiveMessageStatusChangeRequest(int message_id, WebPage::MessageStatusChange change);
|
||||
|
||||
signals:
|
||||
@ -57,12 +82,25 @@ class WebBrowser : public TabContent {
|
||||
void requestMessageListReload(bool mark_current_as_read);
|
||||
|
||||
private:
|
||||
void initializeLayout();
|
||||
Message *findMessage(int id);
|
||||
void markMessageAsRead(int id, bool read);
|
||||
void switchMessageImportance(int id, bool checked);
|
||||
void createConnections();
|
||||
|
||||
QScopedPointer<Ui::WebBrowser> m_ui;
|
||||
QVBoxLayout *m_layout;
|
||||
QToolBar *m_toolBar;
|
||||
WebViewer *m_webView;
|
||||
LocationLineEdit *m_txtLocation;
|
||||
DiscoverFeedsButton *m_btnDiscoverFeeds;
|
||||
|
||||
QAction *m_actionBack;
|
||||
QAction *m_actionForward;
|
||||
QAction *m_actionReload;
|
||||
QAction *m_actionStop;
|
||||
|
||||
//QScopedPointer<Ui::WebBrowser> m_ui;
|
||||
|
||||
QList<Message> m_messages;
|
||||
QPointer<RootItem> m_root;
|
||||
};
|
||||
|
@ -26,8 +26,7 @@
|
||||
WebViewer::WebViewer(QWidget *parent) : QWebEngineView(parent) {
|
||||
WebPage *page = new WebPage(this);
|
||||
|
||||
connect(page, &WebPage::messageStatusChangeRequested,
|
||||
this, &WebViewer::messageStatusChangeRequested);
|
||||
connect(page, &WebPage::messageStatusChangeRequested, this, &WebViewer::messageStatusChangeRequested);
|
||||
setPage(page);
|
||||
}
|
||||
|
||||
|
@ -299,4 +299,5 @@ void Application::onAboutToQuit() {
|
||||
void Application::downloadRequested(QWebEngineDownloadItem *download_item) {
|
||||
downloadManager()->download(download_item->url());
|
||||
download_item->cancel();
|
||||
download_item->deleteLater();
|
||||
}
|
||||
|
@ -108,6 +108,10 @@ class DownloadManager : public TabContent {
|
||||
explicit DownloadManager(QWidget *parent = 0);
|
||||
virtual ~DownloadManager();
|
||||
|
||||
WebBrowser *webBrowser() const {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
QNetworkAccessManager *networkManager() const;
|
||||
|
||||
int totalDownloads() const;
|
||||
|
Loading…
x
Reference in New Issue
Block a user