diff options
Diffstat (limited to 'examples/webkit/fancybrowser/mainwindow.cpp')
-rw-r--r-- | examples/webkit/fancybrowser/mainwindow.cpp | 167 |
1 files changed, 167 insertions, 0 deletions
diff --git a/examples/webkit/fancybrowser/mainwindow.cpp b/examples/webkit/fancybrowser/mainwindow.cpp new file mode 100644 index 0000000..bf61f9c --- /dev/null +++ b/examples/webkit/fancybrowser/mainwindow.cpp @@ -0,0 +1,167 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at qt-sales@nokia.com. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QtGui> +#include <QtWebKit> +#include "mainwindow.h" + +MainWindow::MainWindow() +{ + progress = 0; + + QFile file; + file.setFileName(":/jquery.min.js"); + file.open(QIODevice::ReadOnly); + jQuery = file.readAll(); + file.close(); + + view = new QWebView(this); + view->load(QUrl("http://www.google.com/ncr")); + connect(view, SIGNAL(loadFinished(bool)), SLOT(adjustLocation())); + connect(view, SIGNAL(titleChanged(const QString&)), SLOT(adjustTitle())); + connect(view, SIGNAL(loadProgress(int)), SLOT(setProgress(int))); + connect(view, SIGNAL(loadFinished(bool)), SLOT(finishLoading(bool))); + + locationEdit = new QLineEdit(this); + locationEdit->setSizePolicy(QSizePolicy::Expanding, locationEdit->sizePolicy().verticalPolicy()); + connect(locationEdit, SIGNAL(returnPressed()), SLOT(changeLocation())); + + QToolBar *toolBar = addToolBar(tr("Navigation")); + toolBar->addAction(view->pageAction(QWebPage::Back)); + toolBar->addAction(view->pageAction(QWebPage::Forward)); + toolBar->addAction(view->pageAction(QWebPage::Reload)); + toolBar->addAction(view->pageAction(QWebPage::Stop)); + toolBar->addWidget(locationEdit); + + QMenu *effectMenu = menuBar()->addMenu(tr("&Effect")); + effectMenu->addAction("Highlight all links", this, SLOT(highlightAllLinks())); + + QAction *rotateAction = new QAction(this); + rotateAction->setIcon(style()->standardIcon(QStyle::SP_FileDialogDetailedView)); + rotateAction->setCheckable(true); + rotateAction->setText(tr("Turn images upside down")); + connect(rotateAction, SIGNAL(toggled(bool)), this, SLOT(rotateImages(bool))); + effectMenu->addAction(rotateAction); + + QMenu *toolsMenu = menuBar()->addMenu(tr("&Tools")); + toolsMenu->addAction(tr("Remove GIF images"), this, SLOT(removeGifImages())); + toolsMenu->addAction(tr("Remove all inline frames"), this, SLOT(removeInlineFrames())); + toolsMenu->addAction(tr("Remove all object elements"), this, SLOT(removeObjectElements())); + toolsMenu->addAction(tr("Remove all embedded elements"), this, SLOT(removeEmbeddedElements())); + + setCentralWidget(view); +} + +void MainWindow::adjustLocation() +{ + locationEdit->setText(view->url().toString()); +} + +void MainWindow::changeLocation() +{ + QUrl url = QUrl(locationEdit->text()); + locationEdit->setText(url.toString()); + view->load(url); + view->setFocus(); +} + +void MainWindow::adjustTitle() +{ + if (progress <= 0 || progress >= 100) + setWindowTitle(view->title()); + else + setWindowTitle(QString("%1 (%2%)").arg(view->title()).arg(progress)); +} + +void MainWindow::setProgress(int p) +{ + progress = p; + adjustTitle(); +} + +void MainWindow::finishLoading(bool) +{ + progress = 100; + adjustTitle(); + view->page()->mainFrame()->evaluateJavaScript(jQuery); +} + +void MainWindow::highlightAllLinks() +{ + QString code = "$('a').each( function () { $(this).css('background-color', 'yellow') } )"; + view->page()->mainFrame()->evaluateJavaScript(code); +} + +void MainWindow::rotateImages(bool toggle) +{ + QString code = "$('img').each( function () { $(this).css('-webkit-transition', '-webkit-transform 2s') } )"; + view->page()->mainFrame()->evaluateJavaScript(code); + if (toggle) + code = "$('img').each( function () { $(this).css('-webkit-transform', 'rotate(180deg)') } )"; + else + code = "$('img').each( function () { $(this).css('-webkit-transform', 'rotate(0deg)') } )"; + view->page()->mainFrame()->evaluateJavaScript(code); +} + +void MainWindow::removeGifImages() +{ + QString code = "$('[src*=gif]').remove()"; + view->page()->mainFrame()->evaluateJavaScript(code); +} + +void MainWindow::removeInlineFrames() +{ + QString code = "$('iframe').remove()"; + view->page()->mainFrame()->evaluateJavaScript(code); +} + +void MainWindow::removeObjectElements() +{ + QString code = "$('object').remove()"; + view->page()->mainFrame()->evaluateJavaScript(code); +} + +void MainWindow::removeEmbeddedElements() +{ + QString code = "$('embed').remove()"; + view->page()->mainFrame()->evaluateJavaScript(code); +} + |