|
|
|
@ -34,7 +34,7 @@ QGCGoogleEarthView::QGCGoogleEarthView(QWidget *parent) :
@@ -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) :
@@ -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()
@@ -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)
@@ -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()
@@ -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)
@@ -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()
@@ -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) |
|
|
|
|