More work on web browser, dynamic icon theme switching.

This commit is contained in:
Martin Rotter 2013-07-14 10:41:31 +02:00
parent 5062545cad
commit b5922526e0
4 changed files with 71 additions and 15 deletions

View file

@ -4,5 +4,5 @@
BaseWebPage::BaseWebPage(QObject *parent) : QWebPage(parent) { BaseWebPage::BaseWebPage(QObject *parent) : QWebPage(parent) {
setNetworkAccessManager(WebBrowser::getNetworkManager()); setNetworkAccessManager(WebBrowser::globalNetworkManager());
} }

View file

@ -4,6 +4,7 @@
#include "gui/formmain.h" #include "gui/formmain.h"
#include "gui/formabout.h" #include "gui/formabout.h"
#include "gui/formsettings.h" #include "gui/formsettings.h"
#include "gui/webbrowser.h"
#include "gui/themefactory.h" #include "gui/themefactory.h"
#include "gui/systemtrayicon.h" #include "gui/systemtrayicon.h"
#include "core/settings.h" #include "core/settings.h"
@ -115,12 +116,17 @@ bool FormMain::event(QEvent *event) {
} }
void FormMain::setupIcons() { 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_actionSettings->setIcon(ThemeFactory::fromTheme("preferences-system"));
m_ui->m_actionQuit->setIcon(ThemeFactory::fromTheme("application-exit")); m_ui->m_actionQuit->setIcon(ThemeFactory::fromTheme("application-exit"));
m_ui->m_actionAboutGuard->setIcon(ThemeFactory::fromTheme("help-about")); m_ui->m_actionAboutGuard->setIcon(ThemeFactory::fromTheme("help-about"));
m_ui->m_actionImport->setIcon(ThemeFactory::fromTheme("document-import")); m_ui->m_actionImport->setIcon(ThemeFactory::fromTheme("document-import"));
m_ui->m_actionExport->setIcon(ThemeFactory::fromTheme("document-export")); 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() { void FormMain::createConnections() {

View file

@ -1,6 +1,8 @@
#include <QVBoxLayout> #include <QVBoxLayout>
#include <QToolBar> #include <QToolBar>
#include <QAction>
#include <QPointer> #include <QPointer>
#include <QLineEdit>
#include "core/basenetworkaccessmanager.h" #include "core/basenetworkaccessmanager.h"
#include "gui/basewebview.h" #include "gui/basewebview.h"
@ -9,36 +11,71 @@
QPointer<BaseNetworkAccessManager> WebBrowser::m_networkManager; QPointer<BaseNetworkAccessManager> WebBrowser::m_networkManager;
QList<WebBrowser*> WebBrowser::m_runningWebBrowsers;
WebBrowser::WebBrowser(QWidget *parent) 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, // TODO: Make this better, add location box, search box, better icons for buttons,
// note that icons must be loaded via separate method, // note that icons must be loaded via separate method,
// and main window will be responsible for reloading // and main window will be responsible for reloading
// icons on all web browsers. // icons on all web browsers.
QToolBar *bar = new QToolBar(tr("Navigation panel"), this);
BaseWebView *view = new BaseWebView(this);
bar->addAction(view->pageAction(QWebPage::Back)); // Set toolbar properties.
bar->addAction(view->pageAction(QWebPage::Forward)); m_toolBar->layout()->setMargin(0);
bar->addAction(view->pageAction(QWebPage::Reload)); m_toolBar->setFloatable(false);
bar->addAction(view->pageAction(QWebPage::Stop)); m_toolBar->setMovable(false);
m_layout->addWidget(bar); // Add needed actions into toolbar.
m_layout->addWidget(view); 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); m_layout->setMargin(0);
view->load(QUrl("http://www.seznam.cz")); m_webView->load(QUrl("http://www.seznam.cz"));
} }
WebBrowser::~WebBrowser() { WebBrowser::~WebBrowser() {
qDebug("Erasing WebBrowser instance."); qDebug("Erasing WebBrowser instance.");
// Remove this instance from the global list of web browsers.
m_runningWebBrowsers.removeAll(this);
// Delete members.
delete m_layout; 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 *> WebBrowser::runningWebBrowsers() {
return m_runningWebBrowsers;
}
BaseNetworkAccessManager *WebBrowser::globalNetworkManager() {
if (m_networkManager.isNull()) { if (m_networkManager.isNull()) {
m_networkManager = new BaseNetworkAccessManager(); m_networkManager = new BaseNetworkAccessManager();
} }

View file

@ -4,7 +4,9 @@
#include <QWidget> #include <QWidget>
class QToolBar;
class QVBoxLayout; class QVBoxLayout;
class BaseWebView;
class BaseNetworkAccessManager; class BaseNetworkAccessManager;
class WebBrowser : public QWidget { class WebBrowser : public QWidget {
@ -14,12 +16,23 @@ class WebBrowser : public QWidget {
explicit WebBrowser(QWidget *parent = 0); explicit WebBrowser(QWidget *parent = 0);
~WebBrowser(); ~WebBrowser();
static BaseNetworkAccessManager *getNetworkManager(); void setupIcons();
static BaseNetworkAccessManager *globalNetworkManager();
static QList<WebBrowser*> runningWebBrowsers();
private: private:
QToolBar *m_toolBar;
QVBoxLayout *m_layout; QVBoxLayout *m_layout;
BaseWebView *m_webView;
QAction *m_actionBack;
QAction *m_actionForward;
QAction *m_actionReload;
QAction *m_actionStop;
static QPointer<BaseNetworkAccessManager> m_networkManager; static QPointer<BaseNetworkAccessManager> m_networkManager;
static QList<WebBrowser*> m_runningWebBrowsers;
}; };
#endif // WEBBROWSER_H #endif // WEBBROWSER_H