From 5ee4c611a188e29b1cf75cdf4ec3e0bf0ef41170 Mon Sep 17 00:00:00 2001 From: Martin Rotter Date: Sat, 3 Aug 2013 16:22:40 +0200 Subject: [PATCH] Color changing for all tabs. --- src/gui/basewebview.cpp | 11 +++++++++-- src/gui/tabcontent.h | 2 +- src/gui/tabwidget.cpp | 22 ++++++++++++++++++---- src/gui/tabwidget.h | 3 ++- src/gui/webbrowser.cpp | 18 +++++++++++++++--- src/gui/webbrowser.h | 8 +++++++- 6 files changed, 52 insertions(+), 12 deletions(-) diff --git a/src/gui/basewebview.cpp b/src/gui/basewebview.cpp index ddd88e05f..6d2fbf1af 100644 --- a/src/gui/basewebview.cpp +++ b/src/gui/basewebview.cpp @@ -109,12 +109,19 @@ void BaseWebView::mousePressEvent(QMouseEvent *event) { // Check if user clicked with middle mouse button on some // hyperlink. - if (hit_result.linkUrl().isValid()) { - emit linkMiddleClicked(hit_result.linkUrl()); + QUrl link_url = hit_result.linkUrl(); + QUrl image_url = hit_result.imageUrl(); + + if (link_url.isValid()) { + emit linkMiddleClicked(link_url); // No more handling of event is now needed. Return. return; } + else if (image_url.isValid()) { + emit linkMiddleClicked(image_url); + return; + } } else if (event->button() & Qt::RightButton) { m_gestureOrigin = event->pos(); diff --git a/src/gui/tabcontent.h b/src/gui/tabcontent.h index 4bf54d42b..4a0341539 100644 --- a/src/gui/tabcontent.h +++ b/src/gui/tabcontent.h @@ -17,7 +17,7 @@ class TabContent : public QWidget { virtual int index() const; virtual void setIndex(int index); - // Obtains instance contained in this TabContent. + // Obtains instance contained in this TabContent or nullptr. // This is used for obtaining the menu from the instance and so on. virtual WebBrowser *webBrowser() = 0; diff --git a/src/gui/tabwidget.cpp b/src/gui/tabwidget.cpp index 12792c077..ac7bb49be 100644 --- a/src/gui/tabwidget.cpp +++ b/src/gui/tabwidget.cpp @@ -39,13 +39,27 @@ void TabWidget::initializeTabs() { setTabToolTip(index_of_browser, tr("Browse your feeds and messages")); } +TabContent *TabWidget::contentAt(int index) { + return static_cast(widget(index)); +} + void TabWidget::setupIcons() { - // Find tab, which contains "Feeds" page and reload its icon. + // Iterate through all tabs and update icons + // accordingly. for (int index = 0; index < count(); index++) { if (tabBar()->tabType(index) == TabBar::FeedReader) { setTabIcon(index, ThemeFactory::getInstance()->fromTheme("application-rss+xml")); } - // TODO: Add changing of tab icons for webbrowser tabs. + else { + WebBrowser *active_browser = contentAt(index)->webBrowser(); + if (active_browser != nullptr) { + // We found WebBrowser instance of this tab page. + if (active_browser->icon().isNull()) { + // WebBrowser has no suitable icon, load new from icon theme. + setTabIcon(index, ThemeFactory::getInstance()->fromTheme("text-html")); + } + } + } } } @@ -93,8 +107,8 @@ void TabWidget::addEmptyBrowser() { addBrowser(false, true); } -void TabWidget::addLinkedBrowser() { - +void TabWidget::addLinkedBrowser(const QUrl &initial_url) { + addBrowser(true, false, initial_url); } void TabWidget::addBrowser(bool move_after_current, diff --git a/src/gui/tabwidget.h b/src/gui/tabwidget.h index 41bcd6dd9..3dc5c7d86 100644 --- a/src/gui/tabwidget.h +++ b/src/gui/tabwidget.h @@ -28,6 +28,7 @@ class TabWidget : public QTabWidget { // Returns tab bar. TabBar *tabBar(); + TabContent *contentAt(int index); void initializeTabs(); void setupIcons(); @@ -45,7 +46,7 @@ class TabWidget : public QTabWidget { // Adds new WebBrowser with link. This is used when user // selects to "Open link in new tab.". - void addLinkedBrowser(); + void addLinkedBrowser(const QUrl &initial_url); // General method for adding WebBrowsers. void addBrowser(bool move_after_current, diff --git a/src/gui/webbrowser.cpp b/src/gui/webbrowser.cpp index 1f74bdc82..949a419bd 100644 --- a/src/gui/webbrowser.cpp +++ b/src/gui/webbrowser.cpp @@ -13,12 +13,13 @@ #include "gui/webbrowser.h" #include "gui/locationlineedit.h" #include "gui/themefactory.h" +#include "gui/tabwidget.h" QPointer WebBrowser::m_networkManager; QList WebBrowser::m_runningWebBrowsers; -WebBrowser::WebBrowser(QWidget *parent) +WebBrowser::WebBrowser(TabWidget *parent) : TabContent(parent), m_layout(new QVBoxLayout(this)), m_toolBar(new QToolBar(tr("Navigation panel"), this)), m_webView(new BaseWebView(this)), @@ -61,6 +62,9 @@ WebBrowser::WebBrowser(QWidget *parent) m_layout->setMargin(0); m_layout->setContentsMargins(0, -1, 0, 0); + setTabOrder(m_txtLocation, m_toolBar); + setTabOrder(m_toolBar, m_webView); + createConnections(); setupIcons(); } @@ -75,9 +79,13 @@ void WebBrowser::createConnections() { connect(m_webView, &BaseWebView::urlChanged, this, &WebBrowser::updateUrl); - // Signal forwarding. + // Connect this WebBrowser to global TabWidget. + TabWidget *parent_widget = static_cast(parent()); connect(m_webView, &BaseWebView::newTabRequested, - this, &WebBrowser::newTabRequested); + parent_widget, &TabWidget::addEmptyBrowser); + connect(m_webView, &BaseWebView::linkMiddleClicked, + parent_widget, &TabWidget::addLinkedBrowser); + // Change location textbox status according to webpage status. connect(m_webView, &BaseWebView::loadProgress, @@ -118,6 +126,10 @@ QMenu *WebBrowser::globalMenu() { return nullptr; } +QIcon WebBrowser::icon() { + return m_webView->icon(); +} + void WebBrowser::setupIcons() { m_actionBack->setIcon(ThemeFactory::getInstance()->fromTheme("go-previous")); m_actionForward->setIcon(ThemeFactory::getInstance()->fromTheme("go-next")); diff --git a/src/gui/webbrowser.h b/src/gui/webbrowser.h index 86dae4988..ebf3af91e 100644 --- a/src/gui/webbrowser.h +++ b/src/gui/webbrowser.h @@ -12,18 +12,22 @@ class LocationLineEdit; class BaseWebView; class WebBrowserNetworkAccessManager; class QMenu; +class TabWidget; class WebBrowser : public TabContent { Q_OBJECT public: // Constructors and destructors. - explicit WebBrowser(QWidget *parent = 0); + explicit WebBrowser(TabWidget *parent = 0); ~WebBrowser(); // Reloads icons for all buttons. void setupIcons(); + // Returns icon associated with currently loaded website. + QIcon icon(); + // Returns this instance. // NOTE: This is needed due to TabContent interface. WebBrowser *webBrowser(); @@ -58,6 +62,8 @@ class WebBrowser : public TabContent { signals: void newTabRequested(); + void linkMiddleClicked(const QUrl &link_url); + void iconChanged(int index, const QIcon &icon); private: QVBoxLayout *m_layout;