diff --git a/images/earth.html b/images/earth.html index 791c1f2..8febdee 100644 --- a/images/earth.html +++ b/images/earth.html @@ -13,12 +13,13 @@ google.load("earth", "1", { 'language': 'en'}); var ge = null; var initialized = false; + +var aircraft = new Array(); var currAircraft = 220; -var followEnabled = false; +var followAircraft = false; var currLat = 47.3769; var currLon = 8.549444; var currAlt = 470; -var currFollowHeading = 0.0; var homeLat = 0; var homeLon = 0; @@ -32,17 +33,11 @@ var currTilt = 40.0; ///<< The tilt angle (in degrees) var currFollowTilt = 40.0; var currView = null; -var M_PI = 3.14159265; - var planeOrient; var planeLoc; -var aircraft = []; -var attitudes = []; -var locations = []; -var trails = []; var trail; var lineStringPlacemark; var lineStyle; @@ -62,10 +57,7 @@ function init() { -function setCurrAircraft(id) -{ - currAircraft = id; -} + function setGCSHome(lat, lon, alt) { @@ -98,6 +90,13 @@ function setGCSHome(lat, lon, alt) { homeGroundLevel = alt; } + + + + + + + goHome(); } function createAircraft(id, type, color) @@ -205,19 +204,17 @@ function setAircraftPositionAttitude(id, lat, lon, alt, roll, pitch, yaw) currLat = lat; currLon = lon; currAlt = alt; - currFollowHeading = ((yaw/M_PI)+1.0)*360.0; } - // FIXME Currently invalid conversion from right-handed z-down to z-up frame - planeOrient.setRoll(((roll/M_PI)+1.0)*360.0); - planeOrient.setTilt(((pitch/M_PI)+1.0)*360.0); - planeOrient.setHeading(((yaw/M_PI)+1.0)*360.0); + planeOrient.setRoll(roll); + planeOrient.setTilt(pitch); + planeOrient.setHeading(yaw); - planeLoc.setLatitude(lat); - planeLoc.setLongitude(lon); - planeLoc.setAltitude(alt); + planeLoc.setLatitude(lat); + planeLoc.setLongitude(lon); + planeLoc.setAltitude(alt); } @@ -249,16 +246,24 @@ function setCurrentAircraft(id) currAircraft = id; } +function enableFollowing(follow) +{ + followEnabled = follow; +} + + function updateFollowAircraft() { + if (followEnabled) + { currView = ge.getView().copyAsLookAt(ge.ALTITUDE_ABSOLUTE); currView.setLatitude(currLat); currView.setLongitude(currLon); currView.setAltitude(currAlt); currView.setRange(currViewRange); currView.setTilt(currFollowTilt); - currView.setHeading(currFollowHeading-90.0); ge.getView().setAbstractView(currView); + } } function failureCallback(object) diff --git a/qgroundcontrol.pri b/qgroundcontrol.pri index 8466718..d21ef7c 100644 --- a/qgroundcontrol.pri +++ b/qgroundcontrol.pri @@ -300,8 +300,9 @@ win32-msvc2008 { DEFINES += QT_NO_DEBUG } - # Special settings for debug - #CONFIG += CONSOLE + debug { + CONFIG += console + } INCLUDEPATH += $$BASEDIR/lib/sdl/msvc/include \ $$BASEDIR/lib/opal/include \ @@ -379,6 +380,7 @@ win32-g++ { debug { #DESTDIR = $$BUILDDIR/debug + CONFIG += console } release { diff --git a/src/ui/map3D/QGCGoogleEarthView.cc b/src/ui/map3D/QGCGoogleEarthView.cc index 7281651..0ae4284 100644 --- a/src/ui/map3D/QGCGoogleEarthView.cc +++ b/src/ui/map3D/QGCGoogleEarthView.cc @@ -1,310 +1,360 @@ -#include -#include -#include -#include - -#include -#include "UASManager.h" - -#ifdef Q_OS_MAC -#include -#include -#include "QGCWebPage.h" -#endif - +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include "UASManager.h" + +#ifdef Q_OS_MAC +#include +#include +#include "QGCWebPage.h" +#endif + #include "QGC.h" -#include "ui_QGCGoogleEarthView.h" -#include "QGCGoogleEarthView.h" - -#define QGCGOOGLEEARTHVIEWSETTINGS QString("GoogleEarthViewSettings_") - -QGCGoogleEarthView::QGCGoogleEarthView(QWidget *parent) : - QWidget(parent), - updateTimer(new QTimer(this)), - refreshRateMs(80), - mav(NULL), - followCamera(true), - trailEnabled(true), - webViewInitialized(false), - gEarthInitialized(false), -#if (defined Q_OS_MAC) - webViewMac(new QWebView(this)), -#endif -#ifdef _MSC_VER - webViewWin(new QGCWebAxWidget(this)), -#endif -#if (defined _MSC_VER) - ui(new Ui::QGCGoogleEarthView) -#else - ui(new Ui::QGCGoogleEarthView) -#endif -{ -#ifdef _MSC_VER - // Create layout and attach webViewWin -#else -#endif - - // Load settings - QSettings settings; - followCamera = settings.value(QGCGOOGLEEARTHVIEWSETTINGS + "follow", followCamera).toBool(); - trailEnabled = settings.value(QGCGOOGLEEARTHVIEWSETTINGS + "trail", trailEnabled).toBool(); - - ui->setupUi(this); -#if (defined Q_OS_MAC) - ui->webViewLayout->addWidget(webViewMac); - connect(webViewMac, SIGNAL(loadFinished(bool)), this, SLOT(initializeGoogleEarth(bool))); -#endif - -#ifdef _MSC_VER - ui->webViewLayout->addWidget(webViewWin); -#endif - - connect(UASManager::instance(), SIGNAL(activeUASSet(UASInterface*)), this, SLOT(setActiveUAS(UASInterface*))); - connect(updateTimer, SIGNAL(timeout()), this, SLOT(updateState())); - - // Follow checkbox - ui->followAirplaneCheckbox->setChecked(followCamera); - connect(ui->followAirplaneCheckbox, SIGNAL(toggled(bool)), this, SLOT(follow(bool))); - - // Trail checkbox - ui->trailCheckbox->setChecked(trailEnabled); - connect(ui->trailCheckbox, SIGNAL(toggled(bool)), this, SLOT(showTrail(bool))); - - // Go home - connect(ui->goHomeButton, SIGNAL(clicked()), this, SLOT(goHome())); -} - -QGCGoogleEarthView::~QGCGoogleEarthView() -{ - QSettings settings; - settings.setValue(QGCGOOGLEEARTHVIEWSETTINGS + "follow", followCamera); - settings.setValue(QGCGOOGLEEARTHVIEWSETTINGS + "trail", trailEnabled); - settings.sync(); - delete ui; -} - -void QGCGoogleEarthView::addUAS(UASInterface* uas) -{ -#ifdef Q_OS_MAC +#include "ui_QGCGoogleEarthView.h" +#include "QGCGoogleEarthView.h" + +#define QGCGOOGLEEARTHVIEWSETTINGS QString("GoogleEarthViewSettings_") + +QGCGoogleEarthView::QGCGoogleEarthView(QWidget *parent) : + QWidget(parent), + updateTimer(new QTimer(this)), + refreshRateMs(80), + mav(NULL), + followCamera(true), + trailEnabled(true), + webViewInitialized(false), + gEarthInitialized(false), +#if (defined Q_OS_MAC) + webViewMac(new QWebView(this)), +#endif +#ifdef _MSC_VER + webViewWin(new QGCWebAxWidget(this)), +#endif +#if (defined _MSC_VER) + ui(new Ui::QGCGoogleEarthView) +#else + ui(new Ui::QGCGoogleEarthView) +#endif +{ +#ifdef _MSC_VER + // Create layout and attach webViewWin + + /* + QFile file("doc.html"); + if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) + qDebug() << __FILE__ << __LINE__ << "Could not open log file"; + + QTextStream out(&file); + out << webViewWin->generateDocumentation(); + out.flush(); + file.flush(); + file.close();*/ + + +#else +#endif + + // Load settings + QSettings settings; + followCamera = settings.value(QGCGOOGLEEARTHVIEWSETTINGS + "follow", followCamera).toBool(); + trailEnabled = settings.value(QGCGOOGLEEARTHVIEWSETTINGS + "trail", trailEnabled).toBool(); + + ui->setupUi(this); +#if (defined Q_OS_MAC) + ui->webViewLayout->addWidget(webViewMac); + connect(webViewMac, SIGNAL(loadFinished(bool)), this, SLOT(initializeGoogleEarth(bool))); +#endif + +#ifdef _MSC_VER + ui->webViewLayout->addWidget(webViewWin); +#endif + + connect(UASManager::instance(), SIGNAL(activeUASSet(UASInterface*)), this, SLOT(setActiveUAS(UASInterface*))); + connect(updateTimer, SIGNAL(timeout()), this, SLOT(updateState())); + + // Follow checkbox + ui->followAirplaneCheckbox->setChecked(followCamera); + connect(ui->followAirplaneCheckbox, SIGNAL(toggled(bool)), this, SLOT(follow(bool))); + + // Trail checkbox + ui->trailCheckbox->setChecked(trailEnabled); + connect(ui->trailCheckbox, SIGNAL(toggled(bool)), this, SLOT(showTrail(bool))); + + // Go home + connect(ui->goHomeButton, SIGNAL(clicked()), this, SLOT(goHome())); +} + +QGCGoogleEarthView::~QGCGoogleEarthView() +{ + QSettings settings; + settings.setValue(QGCGOOGLEEARTHVIEWSETTINGS + "follow", followCamera); + settings.setValue(QGCGOOGLEEARTHVIEWSETTINGS + "trail", trailEnabled); + settings.sync(); + delete ui; +} + +void QGCGoogleEarthView::addUAS(UASInterface* uas) +{ +#ifdef Q_OS_MAC // uasid, type, color (in aarrbbgg format) webViewMac->page()->currentFrame()->evaluateJavaScript(QString("createAircraft(%1, %2, %3);").arg(uas->getUASID()).arg(uas->getSystemType()).arg(uas->getColor().name().remove(0, 1).prepend("50"))); -#endif -#ifdef _MSC_VER - //if (webViewMac->page()->currentFrame()->evaluateJavaScript("isInitialized();").toBool()) -#endif - - // Automatically receive further position updates - connect(uas, SIGNAL(globalPositionChanged(UASInterface*,double,double,double,quint64)), this, SLOT(updateGlobalPosition(UASInterface*,double,double,double,quint64))); -} - -void QGCGoogleEarthView::setActiveUAS(UASInterface* uas) -{ - if (uas) - { - mav = uas; -#ifdef Q_OS_MAC - if (webViewMac->page()->currentFrame()->evaluateJavaScript("isInitialized();").toBool()) - { - webViewMac->page()->currentFrame()->evaluateJavaScript(QString("setCurrAircraft(%1);").arg(uas->getUASID())); - } -#endif -#ifdef _MSC_VER - //if (webViewMac->page()->currentFrame()->evaluateJavaScript("isInitialized();").toBool()) -#endif - } -} - -void QGCGoogleEarthView::updateGlobalPosition(UASInterface* uas, double lat, double lon, double alt, quint64 usec) -{ - Q_UNUSED(usec); -#ifdef Q_OS_MAC - webViewMac->page()->currentFrame()->evaluateJavaScript(QString("addTrailPosition(%1, %2, %3, %4);").arg(uas->getUASID()).arg(lat, 0, 'f', 15).arg(lon, 0, 'f', 15).arg(alt, 0, 'f', 15)); +#endif +#ifdef _MSC_VER + //if (webViewMac->page()->currentFrame()->evaluateJavaScript("isInitialized();").toBool()) +#endif + + // Automatically receive further position updates + connect(uas, SIGNAL(globalPositionChanged(UASInterface*,double,double,double,quint64)), this, SLOT(updateGlobalPosition(UASInterface*,double,double,double,quint64))); +} + +void QGCGoogleEarthView::setActiveUAS(UASInterface* uas) +{ + if (uas) + { + mav = uas; +#ifdef Q_OS_MAC + if (webViewMac->page()->currentFrame()->evaluateJavaScript("isInitialized();").toBool()) + { + webViewMac->page()->currentFrame()->evaluateJavaScript(QString("setCurrAircraft(%1);").arg(uas->getUASID())); + } +#endif +#ifdef _MSC_VER + //if (webViewMac->page()->currentFrame()->evaluateJavaScript("isInitialized();").toBool()) +#endif + } +} + +void QGCGoogleEarthView::updateGlobalPosition(UASInterface* uas, double lat, double lon, double alt, quint64 usec) +{ + Q_UNUSED(usec); +#ifdef Q_OS_MAC + webViewMac->page()->currentFrame()->evaluateJavaScript(QString("addTrailPosition(%1, %2, %3, %4);").arg(uas->getUASID()).arg(lat, 0, 'f', 15).arg(lon, 0, 'f', 15).arg(alt, 0, 'f', 15)); //qDebug() << QString("addTrailPosition(%1, %2, %3, %4);").arg(uas->getUASID()).arg(lat, 0, 'f', 15).arg(lon, 0, 'f', 15).arg(alt, 0, 'f', 15); -#endif -#ifdef _MSC_VER - //if (webViewMac->page()->currentFrame()->evaluateJavaScript("isInitialized();").toBool()) -#endif -} - -void QGCGoogleEarthView::showTrail(bool state) -{ - ui->trailCheckbox->setChecked(state); -} - -void QGCGoogleEarthView::showWaypoints(bool state) -{ - -} - -void QGCGoogleEarthView::follow(bool follow) -{ - ui->followAirplaneCheckbox->setChecked(follow); - followCamera = follow; -} - -void QGCGoogleEarthView::goHome() -{ - // Disable follow and update - follow(false); - updateState(); - // Go to home location -#ifdef Q_OS_MAC - webViewMac->page()->currentFrame()->evaluateJavaScript("goHome();"); -#endif -#ifdef _MSC_VER - webViewWin.dynamicCall("InvokeScript(\"goHome\");"); -#endif -} - -void QGCGoogleEarthView::setHome(double lat, double lon, double alt) -{ -#ifdef Q_OS_MAC - webViewMac->page()->currentFrame()->evaluateJavaScript(QString("setGCSHome(%1,%2,%3);").arg(lat, 0, 'f', 15).arg(lon, 0, 'f', 15).arg(alt, 0, 'f', 15)); -#endif -#ifdef _MSC_VER - webViewWin.dynamicCall(QString("InvokeScript(\"setGCSHome\", %1, %2, %3);").arg(lat, 0, 'f', 15).arg(lon, 0, 'f', 15).arg(alt, 0, 'f', 15)); -#endif -} - +#endif +#ifdef _MSC_VER + //if (webViewMac->page()->currentFrame()->evaluateJavaScript("isInitialized();").toBool()) +#endif +} + +void QGCGoogleEarthView::showTrail(bool state) +{ + ui->trailCheckbox->setChecked(state); +} + +void QGCGoogleEarthView::showWaypoints(bool state) +{ + +} + +void QGCGoogleEarthView::follow(bool follow) +{ + ui->followAirplaneCheckbox->setChecked(follow); + followCamera = follow; +} + +void QGCGoogleEarthView::goHome() +{ + // Disable follow and update + follow(false); + updateState(); + // Go to home location +#ifdef Q_OS_MAC + webViewMac->page()->currentFrame()->evaluateJavaScript("goHome();"); +#endif +#ifdef _MSC_VER + webViewWin->dynamicCall("InvokeScript(\"goHome\");"); +#endif +} + +void QGCGoogleEarthView::setHome(double lat, double lon, double alt) +{ +#ifdef Q_OS_MAC + webViewMac->page()->currentFrame()->evaluateJavaScript(QString("setGCSHome(%1,%2,%3);").arg(lat, 0, 'f', 15).arg(lon, 0, 'f', 15).arg(alt, 0, 'f', 15)); +#endif +#ifdef _MSC_VER + webViewWin->dynamicCall((QString("InvokeScript(\"setGCSHome\", %1, %2, %3)").arg(lat, 0, 'f', 15).arg(lon, 0, 'f', 15).arg(alt, 0, 'f', 15)).toStdString().c_str()); +#endif +} + void QGCGoogleEarthView::hideEvent(QHideEvent* event) { Q_UNUSED(event) updateTimer->stop(); } -void QGCGoogleEarthView::showEvent(QShowEvent* event) -{ - // React only to internal (pre-display) - // events +void QGCGoogleEarthView::showEvent(QShowEvent* event) +{ + // React only to internal (pre-display) + // events Q_UNUSED(event) - { - // Enable widget, initialize on first run - if (!webViewInitialized) - { -#if (defined Q_OS_MAC) - webViewMac->setPage(new QGCWebPage(webViewMac)); - webViewMac->settings()->setAttribute(QWebSettings::PluginsEnabled, true); - webViewMac->load(QUrl("earth.html")); -#endif - -#ifdef _MSC_VER - //webViewWin->dynamicCall("GoHome()"); - webViewWin->dynamicCall("Navigate(const QString&)", QApplication::applicationDirPath() + "/earth.html"); -#endif - - webViewInitialized = true; - // Reloading the webpage, this resets Google Earth - gEarthInitialized = false; - - QTimer::singleShot(1000, this, SLOT(initializeGoogleEarth())); - updateTimer->start(refreshRateMs); - } - } -} - -void QGCGoogleEarthView::initializeGoogleEarth() -{ - if (!gEarthInitialized) - { -#ifdef Q_OS_MAC - if (!webViewMac->page()->currentFrame()->evaluateJavaScript("isInitialized();").toBool()) -#endif -#ifdef _MSC_VER - //if (!webViewMac->page()->currentFrame()->evaluateJavaScript("isInitialized();").toBool()) -#endif - { - QTimer::singleShot(200, this, SLOT(initializeGoogleEarth())); - } - else - { - // Set home location - setHome(47.3769, 8.549444, 500); - - // Move to home location - goHome(); - - // Set current UAS - setActiveUAS(mav); - - // Add all MAVs - QList mavs = UASManager::instance()->getUASList(); - foreach (UASInterface* mav, mavs) - { - addUAS(mav); - } - - // Add any further MAV automatically - connect(UASManager::instance(), SIGNAL(UASCreated(UASInterface*)), this, SLOT(addUAS(UASInterface*))); - - gEarthInitialized = true; - } - } -} - -void QGCGoogleEarthView::updateState() -{ + { + // Enable widget, initialize on first run + if (!webViewInitialized) + { +#if (defined Q_OS_MAC) + webViewMac->setPage(new QGCWebPage(webViewMac)); + webViewMac->settings()->setAttribute(QWebSettings::PluginsEnabled, true); + webViewMac->load(QUrl("earth.html")); +#endif + +#ifdef _MSC_VER + //webViewWin->dynamicCall("GoHome()"); + webViewWin->dynamicCall("Navigate(const QString&)", QApplication::applicationDirPath() + "/earth.html"); + /* + + Sleep(4000); + + + QAxObject* doc = webViewWin->querySubObject("Document()"); + IUnknown* winDoc = NULL; + doc->queryInterface(QUuid("{25336920-03F9-11CF-8FD0-00AA00686F13}"), (void**)(&winDoc)); + //if (winDoc) + { + doc = new QAxObject(winDoc, webViewWin); + } + + QFile file("ie-doc.html"); + if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) + qDebug() << __FILE__ << __LINE__ << "Could not open log file"; + + QTextStream out(&file); + out << doc->generateDocumentation(); + out.flush(); + file.flush(); + file.close(); + while(1); + */ + +#endif + + webViewInitialized = true; + // Reloading the webpage, this resets Google Earth + gEarthInitialized = false; + + QTimer::singleShot(1000, this, SLOT(initializeGoogleEarth())); + updateTimer->start(refreshRateMs); + } + } +} + +void QGCGoogleEarthView::initializeGoogleEarth() +{ + if (!gEarthInitialized) + { +#ifdef Q_OS_MAC + if (!webViewMac->page()->currentFrame()->evaluateJavaScript("isInitialized();").toBool()) +#endif +#ifdef _MSC_VER + if (!webViewWin->dynamicCall("InvokeScript(const QString&)", QString("isInitialized")).toBool()) +#endif + { + QTimer::singleShot(200, this, SLOT(initializeGoogleEarth())); + } + else + { + // Set home location + setHome(47.3769, 8.549444, 500); + + // Move to home location + goHome(); + + // Set current UAS + setActiveUAS(mav); + + // Add all MAVs + QList mavs = UASManager::instance()->getUASList(); + foreach (UASInterface* mav, mavs) + { + addUAS(mav); + } + + // Add any further MAV automatically + connect(UASManager::instance(), SIGNAL(UASCreated(UASInterface*)), this, SLOT(addUAS(UASInterface*))); + + gEarthInitialized = true; + } + } +} + +void QGCGoogleEarthView::updateState() +{ #if (QGC_EVENTLOOP_DEBUG) qDebug() << "EVENTLOOP:" << __FILE__ << __LINE__; #endif - if (gEarthInitialized) - { - int uasId = 0; - double lat = 47.3769; - double lon = 8.549444; - double alt = 470.0; - - float roll = 0.0f; - float pitch = 0.0f; - float yaw = 0.0f; - - // Update all MAVs - QList mavs = UASManager::instance()->getUASList(); - foreach (UASInterface* mav, mavs) - { - uasId = mav->getUASID(); - lat = mav->getLatitude(); - lon = mav->getLongitude(); - alt = mav->getAltitude(); - roll = mav->getRoll(); - pitch = mav->getPitch(); - yaw = mav->getYaw(); - -#ifdef Q_OS_MAC - webViewMac->page()->currentFrame()->evaluateJavaScript(QString("setAircraftPositionAttitude(%1, %2, %3, %4, %6, %7, %8);") - .arg(uasId) - .arg(lat) - .arg(lon) - .arg(alt+500) - .arg(roll) - .arg(pitch) - .arg(yaw)); -#endif -#ifdef _MSC_VER - -#endif - } - - if (followCamera) - { -#ifdef Q_OS_MAC - webViewMac->page()->currentFrame()->evaluateJavaScript(QString("updateFollowAircraft()")); -#endif -#ifdef _MSC_VER -#endif - } - } -} - - -void QGCGoogleEarthView::changeEvent(QEvent *e) -{ - QWidget::changeEvent(e); - switch (e->type()) { - case QEvent::LanguageChange: - ui->retranslateUi(this); - break; - default: - break; - } -} + if (gEarthInitialized) + { + int uasId = 0; + double lat = 47.3769; + double lon = 8.549444; + double alt = 470.0; + + float roll = 0.0f; + float pitch = 0.0f; + float yaw = 0.0f; + + // Update all MAVs + QList mavs = UASManager::instance()->getUASList(); + foreach (UASInterface* mav, mavs) + { + uasId = mav->getUASID(); + lat = mav->getLatitude(); + lon = mav->getLongitude(); + alt = mav->getAltitude(); + roll = mav->getRoll(); + pitch = mav->getPitch(); + yaw = mav->getYaw(); + +#ifdef Q_OS_MAC + webViewMac->page()->currentFrame()->evaluateJavaScript(QString("setAircraftPositionAttitude(%1, %2, %3, %4, %6, %7, %8);") + .arg(uasId) + .arg(lat) + .arg(lon) + .arg(alt+500) + .arg(roll) + .arg(pitch) + .arg(yaw)); +#endif +#ifdef _MSC_VER +webViewWin->dynamicCall((QString("InvokeScript(\"setAircraftPositionAttitude\", %1, %2, %3, %4, %6, %7, %8);") + .arg(uasId) + .arg(lat) + .arg(lon) + .arg(alt+500) + .arg(roll) + .arg(pitch) + .arg(yaw)).toStdString().c_str()); +#endif + } + + if (followCamera) + { +#ifdef Q_OS_MAC + webViewMac->page()->currentFrame()->evaluateJavaScript(QString("updateFollowAircraft()")); +#endif +#ifdef _MSC_VER + webViewWin->dynamicCall("InvokeScript(\"updateFollowAircraft\");"); +#endif + } + } +} + + +void QGCGoogleEarthView::changeEvent(QEvent *e) +{ + QWidget::changeEvent(e); + switch (e->type()) { + case QEvent::LanguageChange: + ui->retranslateUi(this); + break; + default: + break; + } +} diff --git a/src/ui/map3D/QGCGoogleEarthView.h b/src/ui/map3D/QGCGoogleEarthView.h index 1366730..71aeb4a 100644 --- a/src/ui/map3D/QGCGoogleEarthView.h +++ b/src/ui/map3D/QGCGoogleEarthView.h @@ -11,19 +11,36 @@ #ifdef _MSC_VER #include +#include #include "windows.h" class QGCWebAxWidget : public QAxWidget { public: - + //Q_OBJECT QGCWebAxWidget(QWidget* parent = 0, Qt::WindowFlags f = 0) - : QAxWidget(parent, f) + : QAxWidget(parent, f), + _document(NULL) { // Set web browser control setControl("{8856F961-340A-11D0-A96B-00C04FD705A2}"); + //QObject::connect(this, SIGNAL(DocumentComplete(IDispatch*, QVariant&)), this, SLOT(setDocument(IDispatch*, QVariant&))); + + } + + QAxObject* document() + { + return _document; + } + + protected: + void setDocument(IDispatch* dispatch, QVariant& variant) + { + _document = this->querySubObject("Document()"); + } protected: + QAxObject* _document; virtual bool translateKeyEvent(int message, int keycode) const { if (message >= WM_KEYFIRST && message <= WM_KEYLAST)