void BackendGoogleMaps::releaseWidget(KGeoMapInternalWidgetInfo* const info) { // clear all tracks d->htmlWidget->runScript(QString::fromLatin1("kgeomapClearTracks();")); disconnect(d->htmlWidget, SIGNAL(signalJavaScriptReady()), this, SLOT(slotHTMLInitialized())); disconnect(d->htmlWidget, SIGNAL(signalHTMLEvents(QStringList)), this, SLOT(slotHTMLEvents(QStringList))); disconnect(d->htmlWidget, SIGNAL(selectionHasBeenMade(KGeoMap::GeoCoordinates::Pair)), this, SLOT(slotSelectionHasBeenMade(KGeoMap::GeoCoordinates::Pair))); d->htmlWidget->setSharedKGeoMapObject(0); d->htmlWidgetWrapper->removeEventFilter(this); d->htmlWidget = 0; d->htmlWidgetWrapper = 0; info->currentOwner = 0; info->state = KGeoMapInternalWidgetInfo::InternalWidgetReleased; d->isReady = false; emit(signalBackendReadyChanged(backendName())); }
QWidget* BackendGoogleMaps::mapWidget() { if (!d->htmlWidgetWrapper) { KGeoMapGlobalObject* const go = KGeoMapGlobalObject::instance(); KGeoMapInternalWidgetInfo info; bool foundReusableWidget = go->getInternalWidgetFromPool(this, &info); if (foundReusableWidget) { d->htmlWidgetWrapper = info.widget; const GMInternalWidgetInfo intInfo = info.backendData.value<GMInternalWidgetInfo>(); d->htmlWidget = intInfo.htmlWidget; } else { // the widget has not been created yet, create it now: d->htmlWidgetWrapper = new QWidget(); d->htmlWidgetWrapper->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); d->htmlWidget = new HTMLWidget(d->htmlWidgetWrapper); d->htmlWidgetWrapper->resize(400,400); } connect(d->htmlWidget, SIGNAL(signalJavaScriptReady()), this, SLOT(slotHTMLInitialized())); connect(d->htmlWidget, SIGNAL(signalHTMLEvents(QStringList)), this, SLOT(slotHTMLEvents(QStringList))); connect(d->htmlWidget, SIGNAL(selectionHasBeenMade(KGeoMap::GeoCoordinates::Pair)), this, SLOT(slotSelectionHasBeenMade(KGeoMap::GeoCoordinates::Pair))); d->htmlWidget->setSharedKGeoMapObject(s.data()); d->htmlWidgetWrapper->installEventFilter(this); if (foundReusableWidget) { slotHTMLInitialized(); } else { const KUrl htmlUrl = KGeoMapGlobalObject::instance()->locateDataFile(QLatin1String("backend-googlemaps.html")); d->htmlWidget->openUrl(htmlUrl); } } return d->htmlWidgetWrapper.data(); }
void HTMLWidget::mouseReleaseEvent(QMouseEvent* e) { if (s->currentMouseMode == MouseModeRegionSelection) { if (!d->firstSelectionPoint.hasCoordinates()) { runScript2Coordinates(QString::fromLatin1("kgeomapPixelToLatLng(%1, %2);") .arg(e->x()) .arg(e->y()), &d->firstSelectionPoint); d->firstSelectionScreenPoint = QPoint(e->x(), e->y()); } else { runScript2Coordinates(QString::fromLatin1("kgeomapPixelToLatLng(%1, %2);") .arg(e->x()) .arg(e->y()), &d->intermediateSelectionPoint); d->intermediateSelectionScreenPoint = QPoint(e->x(), e->y()); qreal lonWest, latNorth, lonEast, latSouth; if (d->firstSelectionScreenPoint.x() < d->intermediateSelectionScreenPoint.x()) { lonWest = d->firstSelectionPoint.lon(); lonEast = d->intermediateSelectionPoint.lon(); } else { lonEast = d->firstSelectionPoint.lon(); lonWest = d->intermediateSelectionPoint.lon(); } if (d->firstSelectionScreenPoint.y() < d->intermediateSelectionScreenPoint.y()) { latNorth = d->firstSelectionPoint.lat(); latSouth = d->intermediateSelectionPoint.lat(); } else { latNorth = d->intermediateSelectionPoint.lat(); latSouth = d->firstSelectionPoint.lat(); } runScript(QLatin1String("kgeomapRemoveTemporarySelectionRectangle();")); runScript(QString::fromLatin1("kgeomapSetSelectionRectangle(%1, %2, %3, %4);") .arg(lonWest) .arg(latNorth) .arg(lonEast) .arg(latSouth)); const GeoCoordinates::Pair selectionCoordinates( GeoCoordinates(latNorth, lonWest), GeoCoordinates(latSouth, lonEast) ); d->firstSelectionPoint.clear(); d->intermediateSelectionPoint.clear(); emit(selectionHasBeenMade(selectionCoordinates)); } } slotScanForJSMessages(QString::fromLatin1("(event)")); QWebView::mouseReleaseEvent(e); }