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) {
setNetworkAccessManager(WebBrowser::getNetworkManager());
setNetworkAccessManager(WebBrowser::globalNetworkManager());
}

View file

@ -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() {

View file

@ -1,6 +1,8 @@
#include <QVBoxLayout>
#include <QToolBar>
#include <QAction>
#include <QPointer>
#include <QLineEdit>
#include "core/basenetworkaccessmanager.h"
#include "gui/basewebview.h"
@ -9,36 +11,71 @@
QPointer<BaseNetworkAccessManager> WebBrowser::m_networkManager;
QList<WebBrowser*> 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 *> WebBrowser::runningWebBrowsers() {
return m_runningWebBrowsers;
}
BaseNetworkAccessManager *WebBrowser::globalNetworkManager() {
if (m_networkManager.isNull()) {
m_networkManager = new BaseNetworkAccessManager();
}

View file

@ -4,7 +4,9 @@
#include <QWidget>
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<WebBrowser*> 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<BaseNetworkAccessManager> m_networkManager;
static QList<WebBrowser*> m_runningWebBrowsers;
};
#endif // WEBBROWSER_H