1d0825bca7fe65beaee391d30da42e937db621564Steve Block/*
2d0825bca7fe65beaee391d30da42e937db621564Steve Block * Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies)
3d0825bca7fe65beaee391d30da42e937db621564Steve Block *
4d0825bca7fe65beaee391d30da42e937db621564Steve Block *  This library is free software; you can redistribute it and/or
5d0825bca7fe65beaee391d30da42e937db621564Steve Block *  modify it under the terms of the GNU Lesser General Public
6d0825bca7fe65beaee391d30da42e937db621564Steve Block *  License as published by the Free Software Foundation; either
7d0825bca7fe65beaee391d30da42e937db621564Steve Block *  version 2 of the License, or (at your option) any later version.
8d0825bca7fe65beaee391d30da42e937db621564Steve Block *
9d0825bca7fe65beaee391d30da42e937db621564Steve Block *  This library is distributed in the hope that it will be useful,
10d0825bca7fe65beaee391d30da42e937db621564Steve Block *  but WITHOUT ANY WARRANTY; without even the implied warranty of
11d0825bca7fe65beaee391d30da42e937db621564Steve Block *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12d0825bca7fe65beaee391d30da42e937db621564Steve Block *  Lesser General Public License for more details.
13d0825bca7fe65beaee391d30da42e937db621564Steve Block *
14d0825bca7fe65beaee391d30da42e937db621564Steve Block *  You should have received a copy of the GNU Lesser General Public
15d0825bca7fe65beaee391d30da42e937db621564Steve Block *  License along with this library; if not, write to the Free Software
16d0825bca7fe65beaee391d30da42e937db621564Steve Block *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
17d0825bca7fe65beaee391d30da42e937db621564Steve Block *
18d0825bca7fe65beaee391d30da42e937db621564Steve Block */
19d0825bca7fe65beaee391d30da42e937db621564Steve Block
20d0825bca7fe65beaee391d30da42e937db621564Steve Block#include "widget.h"
21d0825bca7fe65beaee391d30da42e937db621564Steve Block
22d0825bca7fe65beaee391d30da42e937db621564Steve Block#include "qwebelement.h"
23d0825bca7fe65beaee391d30da42e937db621564Steve Block#include "qwebframe.h"
24d0825bca7fe65beaee391d30da42e937db621564Steve Block#include "ui_widget.h"
25d0825bca7fe65beaee391d30da42e937db621564Steve Block#include <QPainter>
26d0825bca7fe65beaee391d30da42e937db621564Steve Block#include <QtTest/QtTest>
27d0825bca7fe65beaee391d30da42e937db621564Steve Block
28d0825bca7fe65beaee391d30da42e937db621564Steve BlockWidget::Widget(QWidget* parent) :
29d0825bca7fe65beaee391d30da42e937db621564Steve Block    QWidget(parent),
30d0825bca7fe65beaee391d30da42e937db621564Steve Block    ui(new Ui::Widget)
31d0825bca7fe65beaee391d30da42e937db621564Steve Block{
32d0825bca7fe65beaee391d30da42e937db621564Steve Block    ui->setupUi(this);
33d0825bca7fe65beaee391d30da42e937db621564Steve Block}
34d0825bca7fe65beaee391d30da42e937db621564Steve Block
35d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid Widget::refreshJS()
36d0825bca7fe65beaee391d30da42e937db621564Steve Block{
37d0825bca7fe65beaee391d30da42e937db621564Steve Block    ui->webView->page()->mainFrame()->addToJavaScriptWindowObject("myWidget", this);
38d0825bca7fe65beaee391d30da42e937db621564Steve Block}
39d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid Widget::start()
40d0825bca7fe65beaee391d30da42e937db621564Steve Block{
41d0825bca7fe65beaee391d30da42e937db621564Steve Block    ui->webView->load(QUrl("qrc:///test.html"));
42d0825bca7fe65beaee391d30da42e937db621564Steve Block    connect(ui->webView->page()->mainFrame(), SIGNAL(javaScriptWindowObjectCleared()), this, SLOT(refreshJS()));
43d0825bca7fe65beaee391d30da42e937db621564Steve Block    ui->webView->page()->mainFrame()->addToJavaScriptWindowObject("myWidget", this);
44d0825bca7fe65beaee391d30da42e937db621564Steve Block}
45d0825bca7fe65beaee391d30da42e937db621564Steve Block
46d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid Widget::completeTest()
47d0825bca7fe65beaee391d30da42e937db621564Steve Block{
48d0825bca7fe65beaee391d30da42e937db621564Steve Block    QCOMPARE(ui->lbl1->pixmap()->size(), ui->lbl2->size());
49d0825bca7fe65beaee391d30da42e937db621564Steve Block    QCOMPARE(ui->lbl3->size(), ui->lbl4->pixmap()->size());
50d0825bca7fe65beaee391d30da42e937db621564Steve Block    QCOMPARE(ui->lbl2->size().width(), ui->webView->page()->mainFrame()->findFirstElement("#img1").evaluateJavaScript("this.width").toInt());
51d0825bca7fe65beaee391d30da42e937db621564Steve Block    QCOMPARE(ui->lbl3->size().width(), ui->webView->page()->mainFrame()->findFirstElement("#img2").evaluateJavaScript("this.width").toInt());
52d0825bca7fe65beaee391d30da42e937db621564Steve Block    emit testComplete();
53d0825bca7fe65beaee391d30da42e937db621564Steve Block}
54d0825bca7fe65beaee391d30da42e937db621564Steve Block
55d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid Widget::setPixmap(const QPixmap& p)
56d0825bca7fe65beaee391d30da42e937db621564Steve Block{
57d0825bca7fe65beaee391d30da42e937db621564Steve Block    ui->lbl1->setPixmap(p);
58d0825bca7fe65beaee391d30da42e937db621564Steve Block}
59d0825bca7fe65beaee391d30da42e937db621564Steve BlockQPixmap Widget::pixmap() const
60d0825bca7fe65beaee391d30da42e937db621564Steve Block{
61d0825bca7fe65beaee391d30da42e937db621564Steve Block    QPixmap px(ui->lbl3->size());
62d0825bca7fe65beaee391d30da42e937db621564Steve Block    {
63d0825bca7fe65beaee391d30da42e937db621564Steve Block        QPainter p(&px);
64d0825bca7fe65beaee391d30da42e937db621564Steve Block        ui->lbl3->render(&p);
65d0825bca7fe65beaee391d30da42e937db621564Steve Block    }
66d0825bca7fe65beaee391d30da42e937db621564Steve Block    return px;
67d0825bca7fe65beaee391d30da42e937db621564Steve Block}
68d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid Widget::setImage(const QImage& img)
69d0825bca7fe65beaee391d30da42e937db621564Steve Block{
70d0825bca7fe65beaee391d30da42e937db621564Steve Block    ui->lbl4->setPixmap(QPixmap::fromImage(img));
71d0825bca7fe65beaee391d30da42e937db621564Steve Block}
72d0825bca7fe65beaee391d30da42e937db621564Steve Block
73d0825bca7fe65beaee391d30da42e937db621564Steve BlockQImage Widget::image() const
74d0825bca7fe65beaee391d30da42e937db621564Steve Block{
75d0825bca7fe65beaee391d30da42e937db621564Steve Block    QImage img(ui->lbl2->size(), QImage::Format_ARGB32);
76d0825bca7fe65beaee391d30da42e937db621564Steve Block    {
77d0825bca7fe65beaee391d30da42e937db621564Steve Block        QPainter p(&img);
78d0825bca7fe65beaee391d30da42e937db621564Steve Block        ui->lbl2->render(&p);
79d0825bca7fe65beaee391d30da42e937db621564Steve Block    }
80d0825bca7fe65beaee391d30da42e937db621564Steve Block    return img;
81d0825bca7fe65beaee391d30da42e937db621564Steve Block}
82d0825bca7fe65beaee391d30da42e937db621564Steve Block
83d0825bca7fe65beaee391d30da42e937db621564Steve BlockWidget::~Widget()
84d0825bca7fe65beaee391d30da42e937db621564Steve Block{
85d0825bca7fe65beaee391d30da42e937db621564Steve Block    delete ui;
86d0825bca7fe65beaee391d30da42e937db621564Steve Block}
87d0825bca7fe65beaee391d30da42e937db621564Steve Block
88d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid Widget::changeEvent(QEvent* e)
89d0825bca7fe65beaee391d30da42e937db621564Steve Block{
90d0825bca7fe65beaee391d30da42e937db621564Steve Block    QWidget::changeEvent(e);
91d0825bca7fe65beaee391d30da42e937db621564Steve Block    switch (e->type()) {
92d0825bca7fe65beaee391d30da42e937db621564Steve Block    case QEvent::LanguageChange:
93d0825bca7fe65beaee391d30da42e937db621564Steve Block        ui->retranslateUi(this);
94d0825bca7fe65beaee391d30da42e937db621564Steve Block        break;
95d0825bca7fe65beaee391d30da42e937db621564Steve Block    default:
96d0825bca7fe65beaee391d30da42e937db621564Steve Block        break;
97d0825bca7fe65beaee391d30da42e937db621564Steve Block    }
98d0825bca7fe65beaee391d30da42e937db621564Steve Block}
99d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid Widget::compare(const QVariant& a, const QVariant& b)
100d0825bca7fe65beaee391d30da42e937db621564Steve Block{
101d0825bca7fe65beaee391d30da42e937db621564Steve Block    QCOMPARE(a, b);
102d0825bca7fe65beaee391d30da42e937db621564Steve Block}
103d0825bca7fe65beaee391d30da42e937db621564Steve Block
104d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid Widget::imageSlot(const QImage& img)
105d0825bca7fe65beaee391d30da42e937db621564Steve Block{
106d0825bca7fe65beaee391d30da42e937db621564Steve Block    QCOMPARE(img.size(), ui->lbl3->size());
107d0825bca7fe65beaee391d30da42e937db621564Steve Block    emit pixmapSignal(QPixmap::fromImage(img));
108d0825bca7fe65beaee391d30da42e937db621564Steve Block}
109d0825bca7fe65beaee391d30da42e937db621564Steve Block
110d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid Widget::pixmapSlot(const QPixmap& pxm)
111d0825bca7fe65beaee391d30da42e937db621564Steve Block{
112d0825bca7fe65beaee391d30da42e937db621564Steve Block    QCOMPARE(pxm.size(), ui->lbl2->size());
113d0825bca7fe65beaee391d30da42e937db621564Steve Block    emit imageSignal(ui->lbl4->pixmap()->toImage());
114d0825bca7fe65beaee391d30da42e937db621564Steve Block}
115d0825bca7fe65beaee391d30da42e937db621564Steve Block
116d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid Widget::randomSlot(const QPixmap& pxm)
117d0825bca7fe65beaee391d30da42e937db621564Steve Block{
118d0825bca7fe65beaee391d30da42e937db621564Steve Block    QVERIFY(pxm.isNull());
119d0825bca7fe65beaee391d30da42e937db621564Steve Block}
120