From b5922526e0c0a57c18bb3f0918ce63a180c1b9a5 Mon Sep 17 00:00:00 2001 From: Martin Rotter Date: Sun, 14 Jul 2013 10:41:31 +0200 Subject: [PATCH] More work on web browser, dynamic icon theme switching. --- src/gui/basewebpage.cpp | 2 +- src/gui/formmain.cpp | 8 +++++- src/gui/webbrowser.cpp | 59 +++++++++++++++++++++++++++++++++-------- src/gui/webbrowser.h | 17 ++++++++++-- 4 files changed, 71 insertions(+), 15 deletions(-) diff --git a/src/gui/basewebpage.cpp b/src/gui/basewebpage.cpp index 808a7c09b..5d763b450 100644 --- a/src/gui/basewebpage.cpp +++ b/src/gui/basewebpage.cpp @@ -4,5 +4,5 @@ BaseWebPage::BaseWebPage(QObject *parent) : QWebPage(parent) { - setNetworkAccessManager(WebBrowser::getNetworkManager()); + setNetworkAccessManager(WebBrowser::globalNetworkManager()); } diff --git a/src/gui/formmain.cpp b/src/gui/formmain.cpp index f59e3065a..9288f72de 100644 --- a/src/gui/formmain.cpp +++ b/src/gui/formmain.cpp @@ -4,6 +4,7 @@ #include "gui/formmain.h" #include "gui/formabout.h" #include "gui/formsettings.h" +#include "gui/webbrowser.h" #include "gui/themefactory.h" #include "gui/systemtrayicon.h" #include "core/settings.h" @@ -115,12 +116,17 @@ bool FormMain::event(QEvent *event) { } void FormMain::setupIcons() { - // NOTE: Call QIcon::fromTheme for all needed widgets here. + // Setup icons of this main window. m_ui->m_actionSettings->setIcon(ThemeFactory::fromTheme("preferences-system")); m_ui->m_actionQuit->setIcon(ThemeFactory::fromTheme("application-exit")); m_ui->m_actionAboutGuard->setIcon(ThemeFactory::fromTheme("help-about")); m_ui->m_actionImport->setIcon(ThemeFactory::fromTheme("document-import")); m_ui->m_actionExport->setIcon(ThemeFactory::fromTheme("document-export")); + + // Setup icons for underlying components: opened web browsers... + foreach (WebBrowser *browser, WebBrowser::runningWebBrowsers()) { + browser->setupIcons(); + } } void FormMain::createConnections() { diff --git a/src/gui/webbrowser.cpp b/src/gui/webbrowser.cpp index 31a2b79cb..3174693a1 100644 --- a/src/gui/webbrowser.cpp +++ b/src/gui/webbrowser.cpp @@ -1,6 +1,8 @@ #include #include +#include #include +#include #include "core/basenetworkaccessmanager.h" #include "gui/basewebview.h" @@ -9,36 +11,71 @@ QPointer WebBrowser::m_networkManager; +QList WebBrowser::m_runningWebBrowsers; WebBrowser::WebBrowser(QWidget *parent) - : QWidget(parent), m_layout(new QVBoxLayout(this)) { + : QWidget(parent), m_layout(new QVBoxLayout(this)), + m_toolBar(new QToolBar(tr("Navigation panel"), this)), + m_webView(new BaseWebView(this)), + m_actionBack(m_webView->pageAction(QWebPage::Back)), + m_actionForward(m_webView->pageAction(QWebPage::Forward)), + m_actionReload(m_webView->pageAction(QWebPage::Reload)), + m_actionStop(m_webView->pageAction(QWebPage::Stop)) { + + // Add this new instance to the global list of web browsers. + // NOTE: This is used primarily for dynamic icon theme switching. + m_runningWebBrowsers.append(this); // TODO: Make this better, add location box, search box, better icons for buttons, // note that icons must be loaded via separate method, // and main window will be responsible for reloading // icons on all web browsers. - QToolBar *bar = new QToolBar(tr("Navigation panel"), this); - BaseWebView *view = new BaseWebView(this); - bar->addAction(view->pageAction(QWebPage::Back)); - bar->addAction(view->pageAction(QWebPage::Forward)); - bar->addAction(view->pageAction(QWebPage::Reload)); - bar->addAction(view->pageAction(QWebPage::Stop)); + // Set toolbar properties. + m_toolBar->layout()->setMargin(0); + m_toolBar->setFloatable(false); + m_toolBar->setMovable(false); - m_layout->addWidget(bar); - m_layout->addWidget(view); + // Add needed actions into toolbar. + m_toolBar->addAction(m_actionBack); + m_toolBar->addAction(m_actionForward); + m_toolBar->addSeparator(); + m_toolBar->addAction(m_actionReload); + m_toolBar->addAction(m_actionStop); + + QLineEdit *ed = new QLineEdit(this); + m_toolBar->addWidget(ed); + + // Setup layout. + m_layout->addWidget(m_toolBar); + m_layout->addWidget(m_webView); m_layout->setMargin(0); - view->load(QUrl("http://www.seznam.cz")); + m_webView->load(QUrl("http://www.seznam.cz")); } WebBrowser::~WebBrowser() { qDebug("Erasing WebBrowser instance."); + // Remove this instance from the global list of web browsers. + m_runningWebBrowsers.removeAll(this); + + // Delete members. delete m_layout; } -BaseNetworkAccessManager *WebBrowser::getNetworkManager() { +void WebBrowser::setupIcons() { + m_actionBack->setIcon(ThemeFactory::fromTheme("go-previous")); + m_actionForward->setIcon(ThemeFactory::fromTheme("go-next")); + m_actionReload->setIcon(ThemeFactory::fromTheme("view-refresh")); + m_actionStop->setIcon(ThemeFactory::fromTheme("process-stop")); +} + +QList WebBrowser::runningWebBrowsers() { + return m_runningWebBrowsers; +} + +BaseNetworkAccessManager *WebBrowser::globalNetworkManager() { if (m_networkManager.isNull()) { m_networkManager = new BaseNetworkAccessManager(); } diff --git a/src/gui/webbrowser.h b/src/gui/webbrowser.h index 3edf7995d..d720262a6 100644 --- a/src/gui/webbrowser.h +++ b/src/gui/webbrowser.h @@ -4,7 +4,9 @@ #include +class QToolBar; class QVBoxLayout; +class BaseWebView; class BaseNetworkAccessManager; class WebBrowser : public QWidget { @@ -14,12 +16,23 @@ class WebBrowser : public QWidget { explicit WebBrowser(QWidget *parent = 0); ~WebBrowser(); - static BaseNetworkAccessManager *getNetworkManager(); - + void setupIcons(); + + static BaseNetworkAccessManager *globalNetworkManager(); + static QList runningWebBrowsers(); + private: + QToolBar *m_toolBar; QVBoxLayout *m_layout; + BaseWebView *m_webView; + + QAction *m_actionBack; + QAction *m_actionForward; + QAction *m_actionReload; + QAction *m_actionStop; static QPointer m_networkManager; + static QList m_runningWebBrowsers; }; #endif // WEBBROWSER_H