diff --git a/src/ui/map3D/QGCGoogleEarthView.cc b/src/ui/map3D/QGCGoogleEarthView.cc index 669d468..9c15215 100644 --- a/src/ui/map3D/QGCGoogleEarthView.cc +++ b/src/ui/map3D/QGCGoogleEarthView.cc @@ -34,7 +34,7 @@ QGCGoogleEarthView::QGCGoogleEarthView(QWidget *parent) : followCamera(true), trailEnabled(true), webViewInitialized(false), - jScriptInitialized(false), + jScriptInitialized(false), gEarthInitialized(false), #if (defined Q_OS_MAC) webViewMac(new QWebView(this)), @@ -51,16 +51,16 @@ QGCGoogleEarthView::QGCGoogleEarthView(QWidget *parent) : #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(); + 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 @@ -108,7 +108,7 @@ QGCGoogleEarthView::~QGCGoogleEarthView() void QGCGoogleEarthView::addUAS(UASInterface* uas) { // uasid, type, color (in aarrbbgg format) - //javaScript(QString("createAircraft(%1, %2, %3);").arg(uas->getUASID()).arg(uas->getSystemType()).arg(uas->getColor().name().remove(0, 1).prepend("50"))); + //javaScript(QString("createAircraft(%1, %2, %3);").arg(uas->getUASID()).arg(uas->getSystemType()).arg(uas->getColor().name().remove(0, 1).prepend("50"))); javaScript(QString("createAircraft(%1, %2, %3);").arg(uas->getUASID()).arg(uas->getSystemType()).arg("0")); // Automatically receive further position updates connect(uas, SIGNAL(globalPositionChanged(UASInterface*,double,double,double,quint64)), this, SLOT(updateGlobalPosition(UASInterface*,double,double,double,quint64))); @@ -119,16 +119,16 @@ void QGCGoogleEarthView::setActiveUAS(UASInterface* uas) if (uas) { mav = uas; - javaScript(QString("setCurrAircraft(%1);").arg(uas->getUASID())); + javaScript(QString("setCurrAircraft(%1);").arg(uas->getUASID())); } } void QGCGoogleEarthView::updateGlobalPosition(UASInterface* uas, double lat, double lon, double alt, quint64 usec) { Q_UNUSED(usec); - javaScript(QString("addTrailPosition(%1, %2, %3, %4);").arg(uas->getUASID()).arg(lat, 0, 'f', 15).arg(lon, 0, 'f', 15).arg(alt, 0, 'f', 15)); + javaScript(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); + //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); } void QGCGoogleEarthView::showTrail(bool state) @@ -158,7 +158,7 @@ void QGCGoogleEarthView::goHome() void QGCGoogleEarthView::setHome(double lat, double lon, double alt) { - javaScript(QString("setGCSHome(%1,%2,%3);").arg(lat, 0, 'f', 15).arg(lon, 0, 'f', 15).arg(alt, 0, 'f', 15)); + javaScript(QString("setGCSHome(%1,%2,%3);").arg(lat, 0, 'f', 15).arg(lon, 0, 'f', 15).arg(alt, 0, 'f', 15)); } void QGCGoogleEarthView::hideEvent(QHideEvent* event) @@ -172,102 +172,102 @@ void QGCGoogleEarthView::showEvent(QShowEvent* event) // events Q_UNUSED(event) { - // Enable widget, initialize on first run - if (!webViewInitialized) - { + // 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")); + 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"); + //webViewWin->dynamicCall("GoHome()"); + webViewWin->dynamicCall("Navigate(const QString&)", QApplication::applicationDirPath() + "/earth.html"); #endif - webViewInitialized = true; - // Reloading the webpage, this resets Google Earth - gEarthInitialized = false; + webViewInitialized = true; + // Reloading the webpage, this resets Google Earth + gEarthInitialized = false; - QTimer::singleShot(2000, this, SLOT(initializeGoogleEarth())); - updateTimer->start(refreshRateMs); - } + QTimer::singleShot(2000, this, SLOT(initializeGoogleEarth())); + updateTimer->start(refreshRateMs); + } } } void QGCGoogleEarthView::printWinException(int no, QString str1, QString str2, QString str3) { - qDebug() << no << str1 << str2 << str3; + qDebug() << no << str1 << str2 << str3; } QVariant QGCGoogleEarthView::javaScript(QString javaScript) { #ifdef Q_OS_MAC - return webViewMac->page()->currentFrame()->evaluateJavaScript(javaScript); + return webViewMac->page()->currentFrame()->evaluateJavaScript(javaScript); #endif #ifdef _MSC_VER - if(!jScriptInitialized) - { - qDebug() << "TOO EARLY JAVASCRIPT CALL, ABORTING"; - return QVariant(false); - } - else - { - QVariantList params; - params.append(javaScript); - params.append("JScript"); - return jScriptWin->dynamicCall("execScript(QString, QString)", params); - } + if(!jScriptInitialized) + { + qDebug() << "TOO EARLY JAVASCRIPT CALL, ABORTING"; + return QVariant(false); + } + else + { + QVariantList params; + params.append(javaScript); + params.append("JScript"); + return jScriptWin->dynamicCall("execScript(QString, QString)", params); + } #endif } void QGCGoogleEarthView::initializeGoogleEarth() { - if (!jScriptInitialized) - { - #ifdef Q_OS_MAC - jScriptInitialized = true; + if (!jScriptInitialized) + { +#ifdef Q_OS_MAC + jScriptInitialized = true; #endif - #ifdef _MSC_VER - QAxObject* doc = webViewWin->querySubObject("Document()"); - IDispatch* Disp; - IDispatch* winDoc = NULL; - - //332C4425-26CB-11D0-B483-00C04FD90119 IHTMLDocument2 - //25336920-03F9-11CF-8FD0-00AA00686F13 HTMLDocument - doc->queryInterface(QUuid("{332C4425-26CB-11D0-B483-00C04FD90119}"), (void**)(&winDoc)); - if (winDoc) - { - // Security: - // CoInternetSetFeatureEnabled - // (FEATURE_LOCALMACHINE_LOCKDOWN, SET_FEATURE_ON_PROCESS, TRUE); - // - IHTMLDocument2* document = NULL; - winDoc->QueryInterface( IID_IHTMLDocument2, (void**)&document ); - IHTMLWindow2 *window = NULL; - document->get_parentWindow( &window ); - - jScriptWin = new QAxObject(window, webViewWin); - connect(jScriptWin, SIGNAL(exception(int,QString,QString,QString)), this, SLOT(printWinException(int,QString,QString,QString))); - jScriptInitialized = true; - } - else - { - qDebug() << "COULD NOT GET DOCUMENT OBJECT! Aborting"; - } +#ifdef _MSC_VER + QAxObject* doc = webViewWin->querySubObject("Document()"); + IDispatch* Disp; + IDispatch* winDoc = NULL; + + //332C4425-26CB-11D0-B483-00C04FD90119 IHTMLDocument2 + //25336920-03F9-11CF-8FD0-00AA00686F13 HTMLDocument + doc->queryInterface(QUuid("{332C4425-26CB-11D0-B483-00C04FD90119}"), (void**)(&winDoc)); + if (winDoc) + { + // Security: + // CoInternetSetFeatureEnabled + // (FEATURE_LOCALMACHINE_LOCKDOWN, SET_FEATURE_ON_PROCESS, TRUE); + // + IHTMLDocument2* document = NULL; + winDoc->QueryInterface( IID_IHTMLDocument2, (void**)&document ); + IHTMLWindow2 *window = NULL; + document->get_parentWindow( &window ); + + jScriptWin = new QAxObject(window, webViewWin); + connect(jScriptWin, SIGNAL(exception(int,QString,QString,QString)), this, SLOT(printWinException(int,QString,QString,QString))); + jScriptInitialized = true; + } + else + { + qDebug() << "COULD NOT GET DOCUMENT OBJECT! Aborting"; + } #endif - QTimer::singleShot(2500, this, SLOT(initializeGoogleEarth())); - return; -} + QTimer::singleShot(2500, this, SLOT(initializeGoogleEarth())); + return; + } if (!gEarthInitialized) { - if (0 == 1)//(!javaScript("isInitialized();").toBool()) - { - QTimer::singleShot(500, this, SLOT(initializeGoogleEarth())); - qDebug() << "NOT INITIALIZED, WAITING"; - } + if (0 == 1)//(!javaScript("isInitialized();").toBool()) + { + QTimer::singleShot(500, this, SLOT(initializeGoogleEarth())); + qDebug() << "NOT INITIALIZED, WAITING"; + } else { // Set home location @@ -323,13 +323,13 @@ void QGCGoogleEarthView::updateState() yaw = mav->getYaw(); javaScript(QString("setAircraftPositionAttitude(%1, %2, %3, %4, %6, %7, %8);") - .arg(uasId) - .arg(lat) - .arg(lon) - .arg(alt+500) - .arg(roll) - .arg(pitch) - .arg(yaw)); + .arg(uasId) + .arg(lat) + .arg(lon) + .arg(alt+500) + .arg(roll) + .arg(pitch) + .arg(yaw)); } if (followCamera)