use signals from ABC

This commit is contained in:
Martin Rotter 2022-04-04 13:32:08 +02:00
parent 82bde2d087
commit 4e20727ba6
9 changed files with 63 additions and 20 deletions

View File

@ -160,6 +160,14 @@ bool TabWidget::closeTab(int index) {
}
}
void TabWidget::closeBrowserTab() {
auto idx = indexOf(qobject_cast<WebBrowser*>(sender()));
if (idx >= 0) {
closeTab(idx);
}
}
void TabWidget::closeAllTabsExceptCurrent() {
// Close tabs after active tab.
int index_of_active = currentIndex();
@ -237,6 +245,7 @@ int TabWidget::addBrowser(bool move_after_current, bool make_active, WebBrowser*
// Make connections.
connect(browser, &WebBrowser::titleChanged, this, &TabWidget::changeTitle);
connect(browser, &WebBrowser::iconChanged, this, &TabWidget::changeIcon);
connect(browser, &WebBrowser::windowCloseRequested, this, &TabWidget::closeBrowserTab);
// Setup the tab index.
browser->setIndex(final_index);

View File

@ -61,6 +61,7 @@ class TabWidget : public QTabWidget {
// Tab closing.
bool closeTab(int index);
void closeBrowserTab();
void closeAllTabsExceptCurrent();
void closeAllTabs();
void closeCurrentTab();

View File

@ -43,7 +43,8 @@ WebBrowser::WebBrowser(WebViewer* viewer, QWidget* parent) : TabContent(parent),
}
// Initialize the components and layout.
m_webView->bindToBrowser(this);
bindWebView();
m_webView->setZoomFactor(qApp->settings()->value(GROUP(Messages), SETTING(Messages::Zoom)).toDouble());
initializeLayout();
@ -56,6 +57,22 @@ WebBrowser::WebBrowser(WebViewer* viewer, QWidget* parent) : TabContent(parent),
reloadFontSettings();
}
void WebBrowser::bindWebView() {
m_webView->bindToBrowser(this);
auto* qobj_viewer = dynamic_cast<QObject*>(m_webView);
connect(qobj_viewer, SIGNAL(linkHighlighted(QUrl)), this, SLOT(onLinkHovered(QUrl)));
connect(qobj_viewer, SIGNAL(titleChanged(QString)), this, SLOT(onTitleChanged(QString)));
connect(qobj_viewer, SIGNAL(urlChanged(QUrl)), this, SLOT(updateUrl(QUrl)));
connect(qobj_viewer, SIGNAL(iconChanged(QIcon)), this, SLOT(onIconChanged(QIcon)));
connect(qobj_viewer, SIGNAL(loadStarted()), this, SLOT(onLoadingStarted()));
connect(qobj_viewer, SIGNAL(loadProgress(int)), this, SLOT(onLoadingProgress(int)));
connect(qobj_viewer, SIGNAL(loadFinished(bool)), this, SLOT(onLoadingFinished(bool)));
connect(qobj_viewer, SIGNAL(newWindowRequested(WebViewer*)), this, SLOT(newWindowRequested(WebViewer*)));
connect(qobj_viewer, SIGNAL(closeWindowRequested()), this, SIGNAL(windowCloseRequested()));
}
void WebBrowser::createConnections() {
installEventFilter(this);

View File

@ -78,6 +78,7 @@ class WebBrowser : public TabContent {
private:
void initializeLayout();
void bindWebView();
void createConnections();
private:

View File

@ -53,17 +53,7 @@ void LiteHtmlViewer::bindToBrowser(WebBrowser* browser) {
// right away.
browser->m_actionStop->setEnabled(false);
connect(this, &LiteHtmlViewer::linkHighlighted, browser, &WebBrowser::onLinkHovered);
connect(this, &LiteHtmlViewer::titleChanged, browser, &WebBrowser::onTitleChanged);
connect(this, &LiteHtmlViewer::urlChanged, browser, &WebBrowser::updateUrl);
connect(this, &LiteHtmlViewer::loadStarted, browser, &WebBrowser::onLoadingStarted);
connect(this, &LiteHtmlViewer::loadProgress, browser, &WebBrowser::onLoadingProgress);
connect(this, &LiteHtmlViewer::loadFinished, browser, &WebBrowser::onLoadingFinished);
connect(this, &LiteHtmlViewer::newWindowRequested, browser, &WebBrowser::newWindowRequested);
// TODO: add "Open in new tab" to context menu.
//
//connect(page(), &WebEnginePage::windowCloseRequested, browser, &WebBrowser::windowCloseRequested);
}
void LiteHtmlViewer::findText(const QString& text, bool backwards) {

View File

@ -14,6 +14,7 @@ class QMenu;
class LiteHtmlViewer : public QLiteHtmlWidget, public WebViewer {
Q_OBJECT
Q_INTERFACES(WebViewer)
public:
explicit LiteHtmlViewer(QWidget* parent = nullptr);
@ -42,10 +43,13 @@ class LiteHtmlViewer : public QLiteHtmlWidget, public WebViewer {
signals:
void titleChanged(const QString& new_title);
void urlChanged(const QUrl& url);
void iconChanged(const QIcon&);
void linkHighlighted(const QUrl& url);
void loadStarted();
void loadProgress(int progress);
void loadFinished(bool success);
void newWindowRequested(WebViewer* viewer);
void closeWindowRequested();
protected:
virtual void keyPressEvent(QKeyEvent* event);

View File

@ -166,16 +166,15 @@ void WebEngineViewer::bindToBrowser(WebBrowser* browser) {
browser->m_actionReload = pageAction(QWebEnginePage::WebAction::Reload);
browser->m_actionStop = pageAction(QWebEnginePage::WebAction::Stop);
connect(this, &WebEngineViewer::loadStarted, browser, &WebBrowser::onLoadingStarted);
connect(this, &WebEngineViewer::loadProgress, browser, &WebBrowser::onLoadingProgress);
connect(this, &WebEngineViewer::loadFinished, browser, &WebBrowser::onLoadingFinished);
connect(this, &WebEngineViewer::titleChanged, browser, &WebBrowser::onTitleChanged);
connect(this, &WebEngineViewer::iconChanged, browser, &WebBrowser::onIconChanged);
connect(this, &WebEngineViewer::urlChanged, browser, &WebBrowser::updateUrl);
connect(this, &WebEngineViewer::newWindowRequested, browser, &WebBrowser::newWindowRequested);
connect(this, &QWebEngineView::loadStarted, this, &WebEngineViewer::loadStarted);
connect(this, &QWebEngineView::loadProgress, this, &WebEngineViewer::loadProgress);
connect(this, &QWebEngineView::loadFinished, this, &WebEngineViewer::loadFinished);
connect(this, &QWebEngineView::titleChanged, this, &WebEngineViewer::titleChanged);
connect(this, &QWebEngineView::iconChanged, this, &WebEngineViewer::iconChanged);
connect(this, &QWebEngineView::urlChanged, this, &WebEngineViewer::urlChanged);
connect(page(), &WebEnginePage::windowCloseRequested, browser, &WebBrowser::windowCloseRequested);
connect(page(), &WebEnginePage::linkHovered, browser, &WebBrowser::onLinkHovered);
connect(page(), &QWebEnginePage::windowCloseRequested, this, &WebEngineViewer::closeWindowRequested);
connect(page(), &QWebEnginePage::linkHovered, this, &WebEngineViewer::linkHighlighted);
}
void WebEngineViewer::findText(const QString& text, bool backwards) {

View File

@ -16,6 +16,7 @@ class WebBrowser;
class WebEngineViewer : public QWebEngineView, public WebViewer {
Q_OBJECT
Q_INTERFACES(WebViewer)
public:
explicit WebEngineViewer(QWidget* parent = nullptr);
@ -38,7 +39,15 @@ class WebEngineViewer : public QWebEngineView, public WebViewer {
virtual QUrl url() const;
signals:
void titleChanged(const QString& new_title);
void urlChanged(const QUrl& url);
void iconChanged(const QIcon&);
void linkHighlighted(const QUrl& url);
void loadStarted();
void loadProgress(int progress);
void loadFinished(bool success);
void newWindowRequested(WebViewer* viewer);
void closeWindowRequested();
protected:
virtual QWebEngineView* createWindow(QWebEnginePage::WebWindowType type);

View File

@ -57,8 +57,21 @@ class WebViewer {
virtual void zoomOut();
virtual qreal zoomFactor() const = 0;
virtual void setZoomFactor(qreal zoom_factor) = 0;
signals:
virtual void titleChanged(const QString& new_title) = 0;
virtual void urlChanged(const QUrl& url) = 0;
virtual void iconChanged(const QIcon&) = 0;
virtual void linkHighlighted(const QUrl& url) = 0;
virtual void loadStarted() = 0;
virtual void loadProgress(int progress) = 0;
virtual void loadFinished(bool success) = 0;
virtual void newWindowRequested(WebViewer* viewer) = 0;
virtual void closeWindowRequested() = 0;
};
Q_DECLARE_INTERFACE(WebViewer, "WebViewer")
inline WebViewer::~WebViewer() {}
inline void WebViewer::zoomIn() {