From 4008102c04a8e4813f9f4af6905bfa66cf68c77a Mon Sep 17 00:00:00 2001 From: pixhawk Date: Sat, 19 Feb 2011 19:06:24 +0100 Subject: [PATCH] Improved windows google earth support. Very close to full closed loop. --- images/earth.html | 4 +- src/ui/map3D/QGCGoogleEarthView.cc | 76 ++++++++++++++++++++++++++++++-------- 2 files changed, 63 insertions(+), 17 deletions(-) diff --git a/images/earth.html b/images/earth.html index a5056ed..c5c675a 100644 --- a/images/earth.html +++ b/images/earth.html @@ -447,7 +447,7 @@ function initCallback(object) ge.getLayerRoot().enableLayerById(ge.LAYER_TREES, true); enableEventListener(); - + document.getElementById('JScript_initialized').setAttribute('value','true') initialized = true; } @@ -602,5 +602,7 @@ function failureCallback(object)
+ + diff --git a/src/ui/map3D/QGCGoogleEarthView.cc b/src/ui/map3D/QGCGoogleEarthView.cc index c481394..9e2af28 100644 --- a/src/ui/map3D/QGCGoogleEarthView.cc +++ b/src/ui/map3D/QGCGoogleEarthView.cc @@ -19,6 +19,8 @@ #include #include #include +#include +#include #endif #include "QGC.h" @@ -443,22 +445,64 @@ QVariant QGCGoogleEarthView::documentElement(QString name) } else { - QVariantList params; - QString javaScript("getGlobal(%1)"); - params.append(javaScript.arg(name)); - params.append("JScript"); - QVariant result = jScriptWin->dynamicCall("execScript(QString, QString)", params); - qDebug() << "JScript result: " << result << result.toDouble(); -// if (documentWin) -// { -// // Get HTMLElement object -// QVariantList params; -// params.append(name); -// //QAxObject* elementWin = documentWin->dynamicCall("getElementById(QString)", params); -// QVariant result =documentWin->dynamicCall("toString()"); -// qDebug() << "GOT RESULT" << result; -// return QVariant(0);//QVariant(result); -// } +// QVariantList params; +// QString javaScript("getGlobal(%1)"); +// params.append(javaScript.arg(name)); +// params.append("JScript"); +// QVariant result = jScriptWin->dynamicCall("execScript(QString, QString)", params); +// qDebug() << "JScript result: " << result << result.toDouble(); + if (documentWin) + { + QString resultString; + + // Get HTMLElement object + QVariantList params; + IHTMLDocument3* doc; + documentWin->queryInterface( IID_IHTMLDocument3, (void**)&doc); + params.append(name); + IHTMLElement* element = NULL; + + HRESULT res = doc->getElementById(L"JScript_dragWaypointIndex", &element); + //BSTR elemString; + if (element) + { + //element->get_innerHTML(&elemString); + VARIANT value; + element->getAttribute(L"value", 0, &value); + QVariant qtValue; + bool success = QVariantToVARIANT(qtValue, value); + qDebug() << "Convert MS VARIANT to QVariant:" << success; + if (success) + { + qDebug() << "initialized is:"<< qtValue.toInt(); + return qtValue; + } + + //element->toString(&elemString); + + //_bstr_t bstrHello(elemString, true); // passing true means + // you should not call + // SysFreeString + + //qDebug() << "BSTR:" << LPCSTR(bstrHello); + + //QAxObject* elementWin = new QAxObject(element, documentWin); + //if (elementWin) + //{ + // QVariant result = elementWin->dynamicCall("toString()"); + // qDebug() << "GOT RESULT" << result << result.toString(); + //} + //else + //{ + // qDebug() << "CREATING HTML ELEMENT FAILED"; + //} + } + else + { + qDebug() << "DID NOT GET HTML ELEMENT"; + } + return QVariant(0);//QVariant(result); + } } #endif }