double OverlayViewOperationHandler::setZoomLevel(double zoomLevel) { if (zoomLevel > getZoomLevel()){ // Currently, we only use magnetic zoom when zooming in. m_lastProjectionEvent = MapProjectionListener::UNKNOWN; return MapLibOperationHandler::setZoomLevel(zoomLevel); } if(!m_view->automaticHighlightEnabled() || !m_view->hasValidClosestItem()) { return MapLibOperationHandler::setZoomLevel(zoomLevel); } else { if (!m_lastActionWasZoomRelated) { m_view->updateClosestItemPoint(); } WFAPI::WGS84Coordinate coord = m_view->getClosestItemCoord(); WFAPI::ScreenPoint oldPoint = m_view->getClosestItemPoint(); double ret = MapLibOperationHandler::setZoomLevel(zoomLevel); MapLibOperationHandler::setPoint(coord, oldPoint); return ret; } }
void GSVWrapper::processQueue() { if (requestQueue.isEmpty()) { qDebug() << "GSVWrapper::processQueue(): requestQueue is empty"; return; } else { qDebug() << "GSVWrapper::processQueue()"; printRequests(); // Debug } foreach(QSharedPointer<Request> req, requestQueue) { switch (req->state()) { case Request::Unready: req->setState(Request::Running); switch (req->type()) { case Request::Pano: { qDebug() << "Requesting panorama" << req->lat << req->lng; if (req->getMetadata() != 0) { // Metadata is already fetched QVector2D v = getZoomLevel(req->zoomLevel); qDebug() << QString("Zoomlevel %1 max x = %2 and max y = %3").arg(req->zoomLevel).arg(v.x()).arg(v.y()); // Here is tile logic for (int x = 0; x < v.x(); x++) { for (int y = 0; y < v.y(); y++) { QImage tile = filehandler.getTile(req->getMetadata()->lat.toDouble(), req->getMetadata()->lng.toDouble(), x, y, req->zoomLevel); if (tile.isNull()) { // Must get tile from network networkhandler.getTile(req->id, req->getMetadata()->pano_id, req->zoomLevel, x, y, req->priority); } else { // Tile found from cache // Save tile to current panorama Tile *t = new Tile(x, y, req->zoomLevel, tile); req->getPanorama()->addTile(*t); emit tileReady(tile, req->lat, req->lng, x, y, req->zoomLevel); } } } } else { // Panorama request, but must fetch first metadata qDebug() << "Get metadata first for" << req->id; getMeta(req); } } break; case Request::Meta: qDebug() << "Requesting metafield" << req->fieldName; networkhandler.getMeta(req->id, req->lat, req->lng); break; default: qDebug() << "GSVWrapper::handleMetadata: Error: Unkown request type"; break; } break; case Request::Running: break; case Request::Ready: break; default: qDebug() << "Unknown request state"; break; } } removeReadyRequests(); }