summaryrefslogtreecommitdiffstats
path: root/Tools/MiniBrowser/qt/BrowserWindow.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Tools/MiniBrowser/qt/BrowserWindow.cpp')
-rw-r--r--Tools/MiniBrowser/qt/BrowserWindow.cpp259
1 files changed, 220 insertions, 39 deletions
diff --git a/Tools/MiniBrowser/qt/BrowserWindow.cpp b/Tools/MiniBrowser/qt/BrowserWindow.cpp
index c63c9d6..0405e9e 100644
--- a/Tools/MiniBrowser/qt/BrowserWindow.cpp
+++ b/Tools/MiniBrowser/qt/BrowserWindow.cpp
@@ -28,34 +28,92 @@
#include "BrowserWindow.h"
+#include "qwkpreferences.h"
+
static QWKPage* newPageFunction(QWKPage* page)
{
BrowserWindow* window = new BrowserWindow(page->context());
return window->page();
}
-QGraphicsWKView::BackingStoreType BrowserWindow::backingStoreTypeForNewWindow = QGraphicsWKView::Simple;
+QVector<qreal> BrowserWindow::m_zoomLevels;
-BrowserWindow::BrowserWindow(QWKContext* context)
+BrowserWindow::BrowserWindow(QWKContext* context, WindowOptions* options)
+ : m_isZoomTextOnly(false)
+ , m_currentZoom(1)
+ , m_context(context)
{
- setAttribute(Qt::WA_DeleteOnClose);
+ if (options)
+ m_windowOptions = *options;
+ else {
+ WindowOptions tmpOptions;
+ m_windowOptions = tmpOptions;
+ }
- m_menu = new QMenuBar();
- m_browser = new BrowserView(backingStoreTypeForNewWindow, context);
- m_addressBar = new QLineEdit();
+ if (m_windowOptions.useTiledBackingStore)
+ m_browser = new BrowserView(QGraphicsWKView::Tiled, context);
+ else
+ m_browser = new BrowserView(QGraphicsWKView::Simple, context);
- m_menu->addAction("New Window", this, SLOT(newWindow()));
- m_menu->addAction("Change User Agent", this, SLOT(showUserAgentDialog()));
+ setAttribute(Qt::WA_DeleteOnClose);
- m_menu->addSeparator();
- m_menu->addAction("Quit", this, SLOT(close()));
+ connect(m_browser->view(), SIGNAL(loadProgress(int)), SLOT(loadProgress(int)));
+ connect(m_browser->view(), SIGNAL(titleChanged(const QString&)), SLOT(setWindowTitle(const QString&)));
+ connect(m_browser->view(), SIGNAL(urlChanged(const QUrl&)), SLOT(urlChanged(const QUrl&)));
+ this->setCentralWidget(m_browser);
m_browser->setFocus(Qt::OtherFocusReason);
+ QMenu* fileMenu = menuBar()->addMenu("&File");
+ fileMenu->addAction("New Window", this, SLOT(newWindow()), QKeySequence::New);
+ fileMenu->addAction("Open File", this, SLOT(openFile()), QKeySequence::Open);
+ fileMenu->addSeparator();
+ fileMenu->addAction("Quit", this, SLOT(close()));
+
+ QMenu* viewMenu = menuBar()->addMenu("&View");
+ viewMenu->addAction(page()->action(QWKPage::Stop));
+ viewMenu->addAction(page()->action(QWKPage::Reload));
+ viewMenu->addSeparator();
+ QAction* zoomIn = viewMenu->addAction("Zoom &In", this, SLOT(zoomIn()));
+ QAction* zoomOut = viewMenu->addAction("Zoom &Out", this, SLOT(zoomOut()));
+ QAction* resetZoom = viewMenu->addAction("Reset Zoom", this, SLOT(resetZoom()));
+ QAction* zoomText = viewMenu->addAction("Zoom Text Only", this, SLOT(toggleZoomTextOnly(bool)));
+ zoomText->setCheckable(true);
+ zoomText->setChecked(false);
+ viewMenu->addSeparator();
+ viewMenu->addAction("Take Screen Shot...", this, SLOT(screenshot()));
+
+ zoomIn->setShortcut(QKeySequence(Qt::CTRL | Qt::Key_Plus));
+ zoomOut->setShortcut(QKeySequence(Qt::CTRL | Qt::Key_Minus));
+ resetZoom->setShortcut(QKeySequence(Qt::CTRL | Qt::Key_0));
+
+ QMenu* windowMenu = menuBar()->addMenu("&Window");
+ QAction* toggleFullScreen = windowMenu->addAction("Toggle FullScreen", this, SIGNAL(enteredFullScreenMode(bool)));
+ toggleFullScreen->setShortcut(Qt::Key_F11);
+ toggleFullScreen->setCheckable(true);
+ toggleFullScreen->setChecked(false);
+ // When exit fullscreen mode by clicking on the exit area (bottom right corner) we must
+ // uncheck the Toggle FullScreen action.
+ toggleFullScreen->connect(this, SIGNAL(enteredFullScreenMode(bool)), SLOT(setChecked(bool)));
+ connect(this, SIGNAL(enteredFullScreenMode(bool)), this, SLOT(toggleFullScreenMode(bool)));
+
+ QMenu* toolsMenu = menuBar()->addMenu("&Develop");
+ QAction* toggleFrameFlattening = toolsMenu->addAction("Toggle Frame Flattening", this, SLOT(toggleFrameFlattening(bool)));
+ toggleFrameFlattening->setCheckable(true);
+ toggleFrameFlattening->setChecked(false);
+ toolsMenu->addSeparator();
+ toolsMenu->addAction("Change User Agent", this, SLOT(showUserAgentDialog()));
+
+ QMenu* settingsMenu = menuBar()->addMenu("&Settings");
+ QAction* toggleAutoLoadImages = settingsMenu->addAction("Disable Auto Load Images", this, SLOT(toggleAutoLoadImages(bool)));
+ toggleAutoLoadImages->setCheckable(true);
+ toggleAutoLoadImages->setChecked(false);
+ QAction* toggleDisableJavaScript = settingsMenu->addAction("Disable JavaScript", this, SLOT(toggleDisableJavaScript(bool)));
+ toggleDisableJavaScript->setCheckable(true);
+ toggleDisableJavaScript->setChecked(false);
+
+ m_addressBar = new QLineEdit();
connect(m_addressBar, SIGNAL(returnPressed()), SLOT(changeLocation()));
- connect(m_browser->view(), SIGNAL(loadProgress(int)), SLOT(loadProgress(int)));
- connect(m_browser->view(), SIGNAL(titleChanged(const QString&)), SLOT(titleChanged(const QString&)));
- connect(m_browser->view(), SIGNAL(urlChanged(const QUrl&)), SLOT(urlChanged(const QUrl&)));
QToolBar* bar = addToolBar("Navigation");
bar->addAction(page()->action(QWKPage::Back));
@@ -64,17 +122,19 @@ BrowserWindow::BrowserWindow(QWKContext* context)
bar->addAction(page()->action(QWKPage::Stop));
bar->addWidget(m_addressBar);
- this->setMenuBar(m_menu);
- this->setCentralWidget(m_browser);
-
- m_browser->setFocus(Qt::OtherFocusReason);
-
QShortcut* selectAddressBar = new QShortcut(Qt::CTRL | Qt::Key_L, this);
connect(selectAddressBar, SIGNAL(activated()), this, SLOT(openLocation()));
page()->setCreateNewPageFunction(newPageFunction);
- resize(960, 640);
+ // the zoom values are chosen to be like in Mozilla Firefox 3
+ if (!m_zoomLevels.count()) {
+ m_zoomLevels << 0.3 << 0.5 << 0.67 << 0.8 << 0.9;
+ m_zoomLevels << 1;
+ m_zoomLevels << 1.1 << 1.2 << 1.33 << 1.5 << 1.7 << 2 << 2.4 << 3;
+ }
+
+ resize(800, 600);
show();
}
@@ -91,7 +151,14 @@ QWKPage* BrowserWindow::page()
BrowserWindow* BrowserWindow::newWindow(const QString& url)
{
- BrowserWindow* window = new BrowserWindow;
+ BrowserWindow* window;
+ if (m_windowOptions.useSeparateWebProcessPerWindow) {
+ QWKContext* context = new QWKContext();
+ window = new BrowserWindow(context);
+ context->setParent(window);
+ } else
+ window = new BrowserWindow(m_context);
+
window->load(url);
return window;
}
@@ -127,35 +194,113 @@ void BrowserWindow::loadProgress(int progress)
m_addressBar->setPalette(pallete);
}
-void BrowserWindow::titleChanged(const QString& title)
-{
- setWindowTitle(title);
-}
-
void BrowserWindow::urlChanged(const QUrl& url)
{
m_addressBar->setText(url.toString());
}
-void BrowserWindow::updateUserAgentList()
+void BrowserWindow::openFile()
{
- QFile file(":/useragentlist.txt");
+#ifndef QT_NO_FILEDIALOG
+ static const QString filter("HTML Files (*.htm *.html *.xhtml);;Text Files (*.txt);;Image Files (*.gif *.jpg *.png);;SVG Files (*.svg);;All Files (*)");
+
+ QFileDialog fileDialog(this, tr("Open"), QString(), filter);
+ fileDialog.setAcceptMode(QFileDialog::AcceptOpen);
+ fileDialog.setFileMode(QFileDialog::ExistingFile);
+ fileDialog.setOptions(QFileDialog::ReadOnly);
+
+ if (fileDialog.exec()) {
+ QString selectedFile = fileDialog.selectedFiles()[0];
+ if (!selectedFile.isEmpty())
+ load(selectedFile);
+ }
+#endif
+}
- if (file.open(QIODevice::ReadOnly)) {
- while (!file.atEnd()) {
- QString agent = file.readLine().trimmed();
- if (!m_userAgentList.contains(agent))
- m_userAgentList << agent;
- }
- file.close();
+void BrowserWindow::screenshot()
+{
+ QPixmap pixmap = QPixmap::grabWidget(m_browser);
+ QLabel* label = 0;
+#if !defined(Q_OS_SYMBIAN)
+ label = new QLabel;
+ label->setAttribute(Qt::WA_DeleteOnClose);
+ label->setWindowTitle("Screenshot - Preview");
+ label->setPixmap(pixmap);
+ label->show();
+#endif
+
+#ifndef QT_NO_FILEDIALOG
+ QString fileName = QFileDialog::getSaveFileName(label, "Screenshot", QString(), QString("PNG File (.png)"));
+ if (!fileName.isEmpty()) {
+ QRegExp rx("*.png");
+ rx.setCaseSensitivity(Qt::CaseInsensitive);
+ rx.setPatternSyntax(QRegExp::Wildcard);
+
+ if (!rx.exactMatch(fileName))
+ fileName += ".png";
+
+ pixmap.save(fileName, "png");
+ if (label)
+ label->setWindowTitle(QString("Screenshot - Saved at %1").arg(fileName));
}
+#endif
+}
- Q_ASSERT(!m_userAgentList.isEmpty());
- QWKPage* wkPage = page();
- if (!(wkPage->customUserAgent().isEmpty() || m_userAgentList.contains(wkPage->customUserAgent())))
- m_userAgentList << wkPage->customUserAgent();
+void BrowserWindow::zoomIn()
+{
+ if (m_isZoomTextOnly)
+ m_currentZoom = page()->textZoomFactor();
+ else
+ m_currentZoom = page()->pageZoomFactor();
+
+ int i = m_zoomLevels.indexOf(m_currentZoom);
+ Q_ASSERT(i >= 0);
+ if (i < m_zoomLevels.count() - 1)
+ m_currentZoom = m_zoomLevels[i + 1];
+
+ applyZoom();
}
+void BrowserWindow::zoomOut()
+{
+ if (m_isZoomTextOnly)
+ m_currentZoom = page()->textZoomFactor();
+ else
+ m_currentZoom = page()->pageZoomFactor();
+
+ int i = m_zoomLevels.indexOf(m_currentZoom);
+ Q_ASSERT(i >= 0);
+ if (i > 0)
+ m_currentZoom = m_zoomLevels[i - 1];
+
+ applyZoom();
+}
+
+void BrowserWindow::resetZoom()
+{
+ m_currentZoom = 1;
+ applyZoom();
+}
+
+void BrowserWindow::toggleZoomTextOnly(bool b)
+{
+ m_isZoomTextOnly = b;
+}
+
+void BrowserWindow::toggleFullScreenMode(bool enable)
+{
+ if (enable)
+ setWindowState(Qt::WindowFullScreen);
+ else
+ setWindowState(Qt::WindowNoState);
+}
+
+void BrowserWindow::toggleFrameFlattening(bool toggle)
+{
+ page()->preferences()->setAttribute(QWKPreferences::FrameFlatteningEnabled, toggle);
+}
+
+
void BrowserWindow::showUserAgentDialog()
{
updateUserAgentList();
@@ -185,9 +330,45 @@ void BrowserWindow::showUserAgentDialog()
page()->setCustomUserAgent(combo->currentText());
}
+void BrowserWindow::toggleDisableJavaScript(bool enable)
+{
+ page()->preferences()->setAttribute(QWKPreferences::JavascriptEnabled, !enable);
+}
+
+void BrowserWindow::toggleAutoLoadImages(bool enable)
+{
+ page()->preferences()->setAttribute(QWKPreferences::AutoLoadImages, !enable);
+}
+
+void BrowserWindow::updateUserAgentList()
+{
+ QFile file(":/useragentlist.txt");
+
+ if (file.open(QIODevice::ReadOnly)) {
+ while (!file.atEnd()) {
+ QString agent = file.readLine().trimmed();
+ if (!m_userAgentList.contains(agent))
+ m_userAgentList << agent;
+ }
+ file.close();
+ }
+
+ Q_ASSERT(!m_userAgentList.isEmpty());
+ QWKPage* wkPage = page();
+ if (!(wkPage->customUserAgent().isEmpty() || m_userAgentList.contains(wkPage->customUserAgent())))
+ m_userAgentList << wkPage->customUserAgent();
+}
+
+void BrowserWindow::applyZoom()
+{
+ if (m_isZoomTextOnly)
+ page()->setTextZoomFactor(m_currentZoom);
+ else
+ page()->setPageZoomFactor(m_currentZoom);
+}
+
BrowserWindow::~BrowserWindow()
{
delete m_addressBar;
delete m_browser;
- delete m_menu;
}