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;
   }
}
Ejemplo n.º 2
0
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();
}