Initial llqtwebkit
This commit is contained in:
341
indra/llqtwebkit/tests/qttestapp/main.cpp
Normal file
341
indra/llqtwebkit/tests/qttestapp/main.cpp
Normal file
@@ -0,0 +1,341 @@
|
||||
/* Copyright (c) 2006-2010, Linden Research, Inc.
|
||||
*
|
||||
* LLQtWebKit Source Code
|
||||
* The source code in this file ("Source Code") is provided by Linden Lab
|
||||
* to you under the terms of the GNU General Public License, version 2.0
|
||||
* ("GPL"), unless you have obtained a separate licensing agreement
|
||||
* ("Other License"), formally executed by you and Linden Lab. Terms of
|
||||
* the GPL can be found in GPL-license.txt in this distribution, or online at
|
||||
* http://secondlifegrid.net/technology-programs/license-virtual-world/viewerlicensing/gplv2
|
||||
*
|
||||
* There are special exceptions to the terms and conditions of the GPL as
|
||||
* it is applied to this Source Code. View the full text of the exception
|
||||
* in the file FLOSS-exception.txt in this software distribution, or
|
||||
* online at
|
||||
* http://secondlifegrid.net/technology-programs/license-virtual-world/viewerlicensing/flossexception
|
||||
*
|
||||
* By copying, modifying or distributing this software, you acknowledge
|
||||
* that you have read and understood your obligations described above,
|
||||
* and agree to abide by those obligations.
|
||||
*
|
||||
* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
|
||||
* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
|
||||
* COMPLETENESS OR PERFORMANCE.
|
||||
*/
|
||||
|
||||
#include <QtGui/QtGui>
|
||||
#include <llqtwebkit.h>
|
||||
|
||||
class WebPage : public QWidget, LLEmbeddedBrowserWindowObserver
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
signals:
|
||||
void locationChanged(const QString &);
|
||||
void canGoBack(bool);
|
||||
void canGoForward(bool);
|
||||
|
||||
public:
|
||||
WebPage(QWidget *parent = 0);
|
||||
~WebPage();
|
||||
|
||||
void onCursorChanged(const EventType& event);
|
||||
void onPageChanged(const EventType& event);
|
||||
void onNavigateBegin(const EventType& event);
|
||||
void onNavigateComplete(const EventType& event);
|
||||
void onUpdateProgress(const EventType& event);
|
||||
void onStatusTextChange(const EventType& event);
|
||||
void onLocationChange(const EventType& event);
|
||||
void onClickLinkHref(const EventType& event);
|
||||
void onClickLinkNoFollow(const EventType& event);
|
||||
|
||||
public slots:
|
||||
void goBack();
|
||||
void goForward();
|
||||
void reload();
|
||||
void loadUrl(const QString &);
|
||||
|
||||
protected:
|
||||
void resizeEvent(QResizeEvent *event);
|
||||
void paintEvent(QPaintEvent *event);
|
||||
void mouseDoubleClickEvent(QMouseEvent *event);
|
||||
void mouseMoveEvent(QMouseEvent *event);
|
||||
void mousePressEvent(QMouseEvent *event);
|
||||
void mouseReleaseEvent(QMouseEvent *event);
|
||||
void keyPressEvent(QKeyEvent *event);
|
||||
void keyReleaseEvent(QKeyEvent *event);
|
||||
private:
|
||||
void updateSLvariables();
|
||||
int mBrowserWindowId;
|
||||
};
|
||||
|
||||
WebPage::WebPage(QWidget *parent)
|
||||
: QWidget(parent)
|
||||
{
|
||||
setMouseTracking(true);
|
||||
std::string applicationDir = std::string();
|
||||
std::string componentDir = applicationDir;
|
||||
std::string profileDir = applicationDir + "\\" + "testGL_profile";
|
||||
LLQtWebKit::getInstance()->init(applicationDir, componentDir, profileDir, 0);
|
||||
|
||||
mBrowserWindowId = LLQtWebKit::getInstance()->createBrowserWindow(width(), height());
|
||||
|
||||
// observer events that LLQtWebKit emits
|
||||
LLQtWebKit::getInstance()->addObserver( mBrowserWindowId, this );
|
||||
|
||||
// append details to agent string
|
||||
LLQtWebKit::getInstance()->setBrowserAgentId("testqtapp");
|
||||
|
||||
// don't flip bitmap
|
||||
LLQtWebKit::getInstance()->flipWindow(mBrowserWindowId, false);
|
||||
|
||||
// test Second Life viewer specific functions
|
||||
LLQtWebKit::getInstance()->setSLObjectEnabled( true ); // true means feature is turned on
|
||||
LLQtWebKit::getInstance()->setAgentLanguage( "tst-en" ); // viewer language selected by agent
|
||||
LLQtWebKit::getInstance()->setAgentRegion( "QtTestAppRegion" ); // name of region where agent is located
|
||||
LLQtWebKit::getInstance()->setAgentLocation( 9.8, 7.6, 5.4 ); // agent's x,y,z location within a region
|
||||
LLQtWebKit::getInstance()->setAgentGlobalLocation( 119.8, 227.6, 335.4 ); // agent's x,y,z location within the grid
|
||||
LLQtWebKit::getInstance()->setAgentMaturity( "Very immature" ); // selected maturity level of agent
|
||||
LLQtWebKit::getInstance()->setAgentOrientation( (rand()%36000)/100.0f ); // direction avatar is facing
|
||||
LLQtWebKit::getInstance()->emitLocation();
|
||||
LLQtWebKit::getInstance()->emitLanguage();
|
||||
LLQtWebKit::getInstance()->emitMaturity();
|
||||
|
||||
// go to the "home page"
|
||||
LLQtWebKit::getInstance()->navigateTo(mBrowserWindowId, "http://callum-linden.s3.amazonaws.com/browsertest.html");
|
||||
}
|
||||
|
||||
WebPage::~WebPage()
|
||||
{
|
||||
// unhook observer
|
||||
LLQtWebKit::getInstance()->remObserver( mBrowserWindowId, this );
|
||||
|
||||
// clean up
|
||||
LLQtWebKit::getInstance()->reset();
|
||||
}
|
||||
|
||||
void WebPage::updateSLvariables()
|
||||
{
|
||||
// randomly update SL values to test
|
||||
LLQtWebKit::getInstance()->setAgentOrientation( (rand()%36000)/100.0f );
|
||||
LLQtWebKit::getInstance()->setAgentLocation( (rand()%25600)/100.0f, (rand()%25600)/100.0f, (rand()%25600)/100.0f );
|
||||
LLQtWebKit::getInstance()->setAgentGlobalLocation( (rand()%25600)/100.0f, (rand()%25600)/100.0f, (rand()%25600)/100.0f );
|
||||
|
||||
if ( rand() % 2 )
|
||||
LLQtWebKit::getInstance()->setAgentLanguage( "One language" );
|
||||
else
|
||||
LLQtWebKit::getInstance()->setAgentLanguage( "Another language" );
|
||||
|
||||
if ( rand() % 2 )
|
||||
LLQtWebKit::getInstance()->setAgentRegion( "Region Wibble" );
|
||||
else
|
||||
LLQtWebKit::getInstance()->setAgentRegion( "Region Flasm" );
|
||||
|
||||
if ( rand() % 2 )
|
||||
LLQtWebKit::getInstance()->setAgentMaturity( "Adults only" );
|
||||
else
|
||||
LLQtWebKit::getInstance()->setAgentMaturity( "Children only" );
|
||||
|
||||
LLQtWebKit::getInstance()->emitLocation();
|
||||
LLQtWebKit::getInstance()->emitLanguage();
|
||||
LLQtWebKit::getInstance()->emitMaturity();
|
||||
}
|
||||
|
||||
void WebPage::onCursorChanged(const EventType& event)
|
||||
{
|
||||
//qDebug() << __FUNCTION__ << QString::fromStdString(event.getEventUri());
|
||||
switch (event.getIntValue()) {
|
||||
case LLQtWebKit::C_ARROW: setCursor(QCursor(Qt::ArrowCursor)); break;
|
||||
case LLQtWebKit::C_IBEAM: setCursor(QCursor(Qt::IBeamCursor)); break;
|
||||
case LLQtWebKit::C_SPLITV: setCursor(QCursor(Qt::SplitHCursor)); break;
|
||||
case LLQtWebKit::C_SPLITH: setCursor(QCursor(Qt::SplitVCursor)); break;
|
||||
case LLQtWebKit::C_POINTINGHAND: setCursor(QCursor(Qt::PointingHandCursor)); break;
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
|
||||
void WebPage::onPageChanged(const EventType& event)
|
||||
{
|
||||
Q_UNUSED(event);
|
||||
LLQtWebKit::getInstance()->grabBrowserWindow( mBrowserWindowId );
|
||||
//qDebug() << __FUNCTION__ << QString::fromStdString(event.getEventUri());
|
||||
update();
|
||||
}
|
||||
|
||||
void WebPage::onNavigateBegin(const EventType& event)
|
||||
{
|
||||
Q_UNUSED(event);
|
||||
//qDebug() << __FUNCTION__ << QString::fromStdString(event.getEventUri());
|
||||
}
|
||||
|
||||
void WebPage::onNavigateComplete(const EventType& event)
|
||||
{
|
||||
Q_UNUSED(event);
|
||||
//qDebug() << __FUNCTION__ << QString::fromStdString(event.getEventUri());
|
||||
}
|
||||
|
||||
void WebPage::onUpdateProgress(const EventType& event)
|
||||
{
|
||||
Q_UNUSED(event);
|
||||
}
|
||||
|
||||
void WebPage::onStatusTextChange(const EventType& event)
|
||||
{
|
||||
Q_UNUSED(event);
|
||||
}
|
||||
|
||||
void WebPage::onLocationChange(const EventType& event)
|
||||
{
|
||||
//qDebug() << __FUNCTION__;
|
||||
emit locationChanged(QString::fromStdString(event.getEventUri()));
|
||||
//void canGoBack(bool);
|
||||
//void canGoForward(bool);
|
||||
}
|
||||
|
||||
void WebPage::onClickLinkHref(const EventType& event)
|
||||
{
|
||||
Q_UNUSED(event);
|
||||
}
|
||||
|
||||
void WebPage::onClickLinkNoFollow(const EventType& event)
|
||||
{
|
||||
Q_UNUSED(event);
|
||||
}
|
||||
|
||||
void WebPage::resizeEvent(QResizeEvent *event)
|
||||
{
|
||||
LLQtWebKit::getInstance()->setSize(mBrowserWindowId, event->size().width(), event->size().height());
|
||||
QWidget::resizeEvent(event);
|
||||
}
|
||||
|
||||
void WebPage::paintEvent(QPaintEvent *event)
|
||||
{
|
||||
Q_UNUSED(event);
|
||||
|
||||
int width = LLQtWebKit::getInstance()->getBrowserWidth(mBrowserWindowId);
|
||||
int height = LLQtWebKit::getInstance()->getBrowserHeight(mBrowserWindowId);
|
||||
const unsigned char* pixels = LLQtWebKit::getInstance()->getBrowserWindowPixels(mBrowserWindowId);
|
||||
QImage image(pixels, width, height, QImage::Format_RGB32);
|
||||
image = image.rgbSwapped();
|
||||
QPainter painter(this);
|
||||
painter.drawImage(QPoint(0, 0), image);
|
||||
}
|
||||
|
||||
void WebPage::mouseDoubleClickEvent(QMouseEvent *event)
|
||||
{
|
||||
LLQtWebKit::getInstance()->mouseEvent( mBrowserWindowId,
|
||||
LLQtWebKit::ME_MOUSE_DOUBLE_CLICK,
|
||||
LLQtWebKit::MB_MOUSE_BUTTON_LEFT,
|
||||
event->x(), event->y(),
|
||||
LLQtWebKit::KM_MODIFIER_NONE );
|
||||
}
|
||||
|
||||
void WebPage::mouseMoveEvent(QMouseEvent *event)
|
||||
{
|
||||
updateSLvariables();
|
||||
|
||||
LLQtWebKit::getInstance()->mouseEvent( mBrowserWindowId,
|
||||
LLQtWebKit::ME_MOUSE_MOVE,
|
||||
LLQtWebKit::MB_MOUSE_BUTTON_LEFT,
|
||||
event->x(), event->y(),
|
||||
LLQtWebKit::KM_MODIFIER_NONE );
|
||||
}
|
||||
|
||||
void WebPage::mousePressEvent(QMouseEvent *event)
|
||||
{
|
||||
LLQtWebKit::getInstance()->mouseEvent( mBrowserWindowId,
|
||||
LLQtWebKit::ME_MOUSE_DOWN,
|
||||
LLQtWebKit::MB_MOUSE_BUTTON_LEFT,
|
||||
event->x(), event->y(),
|
||||
LLQtWebKit::KM_MODIFIER_NONE );
|
||||
}
|
||||
|
||||
void WebPage::mouseReleaseEvent(QMouseEvent *event)
|
||||
{
|
||||
LLQtWebKit::getInstance()->mouseEvent( mBrowserWindowId,
|
||||
LLQtWebKit::ME_MOUSE_UP,
|
||||
LLQtWebKit::MB_MOUSE_BUTTON_LEFT,
|
||||
event->x(), event->y(),
|
||||
LLQtWebKit::KM_MODIFIER_NONE );
|
||||
|
||||
LLQtWebKit::getInstance()->focusBrowser(mBrowserWindowId, true);
|
||||
}
|
||||
|
||||
void WebPage::keyPressEvent(QKeyEvent *event)
|
||||
{
|
||||
Q_UNUSED(event);
|
||||
}
|
||||
|
||||
void WebPage::keyReleaseEvent(QKeyEvent *event)
|
||||
{
|
||||
Q_UNUSED(event);
|
||||
//LLQtWebKit::getInstance()->unicodeInput(mBrowserWindowId, event->text().at(0).unicode(),LLQtWebKit::KM_MODIFIER_NONE);
|
||||
}
|
||||
|
||||
void WebPage::goBack()
|
||||
{
|
||||
LLQtWebKit::getInstance()->userAction(mBrowserWindowId, LLQtWebKit::UA_NAVIGATE_BACK);
|
||||
}
|
||||
|
||||
void WebPage::goForward()
|
||||
{
|
||||
LLQtWebKit::getInstance()->userAction(mBrowserWindowId, LLQtWebKit::UA_NAVIGATE_FORWARD);
|
||||
}
|
||||
|
||||
void WebPage::reload()
|
||||
{
|
||||
LLQtWebKit::getInstance()->userAction(mBrowserWindowId, LLQtWebKit::UA_NAVIGATE_RELOAD);
|
||||
}
|
||||
|
||||
void WebPage::loadUrl(const QString &url)
|
||||
{
|
||||
LLQtWebKit::getInstance()->navigateTo(mBrowserWindowId, url.toStdString());
|
||||
}
|
||||
|
||||
#include "ui_window.h"
|
||||
|
||||
class Window : public QDialog, public Ui_Dialog
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
Window(QWidget *parent = 0);
|
||||
|
||||
public slots:
|
||||
void loadUrl();
|
||||
};
|
||||
|
||||
Window::Window(QWidget *parent)
|
||||
: QDialog(parent)
|
||||
{
|
||||
setupUi(this);
|
||||
connect(webpage, SIGNAL(locationChanged(const QString &)),
|
||||
location, SLOT(setText(const QString &)));
|
||||
connect(webpage, SIGNAL(canGoBack(bool)),
|
||||
backButton, SLOT(setEnabled(bool)));
|
||||
connect(webpage, SIGNAL(canGoForward(bool)),
|
||||
forwardButton, SLOT(setEnabled(bool)));
|
||||
connect(backButton, SIGNAL(clicked()),
|
||||
webpage, SLOT(goBack()));
|
||||
connect(forwardButton, SIGNAL(clicked()),
|
||||
webpage, SLOT(goForward()));
|
||||
connect(reloadButton, SIGNAL(clicked()),
|
||||
webpage, SLOT(reload()));
|
||||
connect(location, SIGNAL(returnPressed()),
|
||||
this, SLOT(loadUrl()));
|
||||
}
|
||||
|
||||
void Window::loadUrl()
|
||||
{
|
||||
webpage->loadUrl(location->text());
|
||||
}
|
||||
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
QApplication application(argc, argv);
|
||||
Window window;
|
||||
window.show();
|
||||
return application.exec();
|
||||
}
|
||||
|
||||
#include "main.moc"
|
||||
Reference in New Issue
Block a user