Exemple #1
0
df::Touch MapWidget::GetTouch(QMouseEvent * e) const
{
  df::Touch touch;
  touch.m_id = 0;
  touch.m_location = GetDevicePoint(e);
  return touch;
}
Exemple #2
0
  void DrawWidget::mouseReleaseEvent(QMouseEvent * e)
  {
    QGLWidget::mouseReleaseEvent(e);

    m2::PointD const pt = GetDevicePoint(e);
    if (m_framework->GetGuiController()->OnTapEnded(pt))
      return;

    if (!m_wasLongClick && m_isCleanSingleClick)
    {
      m_framework->GetBalloonManager().RemovePin();

      StartPressTask(pt, SHORT_TOUCH_MS);
    }
    else
      m_wasLongClick = false;

    StopDragging(e);
    StopRotating(e);
  }
Exemple #3
0
  void DrawWidget::mouseMoveEvent(QMouseEvent * e)
  {
    QGLWidget::mouseMoveEvent(e);

    m2::PointD const pt = GetDevicePoint(e);
    if (!pt.EqualDxDy(m_taskPoint, m_framework->GetVisualScale() * 10.0))
    {
      // moved far from start point - do not show balloon
      m_isCleanSingleClick = false;
      KillPressTask();
    }

    if (m_framework->GetGuiController()->OnTapMoved(pt))
      return;

    if (m_isDrag)
      m_framework->DoDrag(GetDragEvent(e));

    if (m_isRotate)
      m_framework->DoRotate(GetRotateEvent(e->pos()));
  }
Exemple #4
0
  void DrawWidget::mousePressEvent(QMouseEvent * e)
  {
    QGLWidget::mousePressEvent(e);

    KillPressTask();

    m2::PointD const pt = GetDevicePoint(e);

    if (e->button() == Qt::LeftButton)
    {
      if (m_framework->GetGuiController()->OnTapStarted(pt))
        return;

      if (e->modifiers() & Qt::ControlModifier)
      {
        // starting rotation
        m_framework->StartRotate(GetRotateEvent(e->pos()));

        setCursor(Qt::CrossCursor);
        m_isRotate = true;
      }
      else if (e->modifiers() & Qt::ShiftModifier)
      {
        if (m_framework->IsRoutingActive())
          m_framework->CloseRouting();
        else
        {
          auto const & state = m_framework->GetLocationState();
          if (state->IsModeHasPosition())
            m_framework->BuildRoute(state->Position(), m_framework->PtoG(pt), 0 /* timeoutSec */);
          else
            return;
        }
      }
      if (e->modifiers() & Qt::AltModifier)
      {
        m_emulatingLocation = true;
        m2::PointD const point = m_framework->PtoG(pt);

        location::GpsInfo info;
        info.m_latitude = MercatorBounds::YToLat(point.y);
        info.m_longitude = MercatorBounds::XToLon(point.x);
        info.m_horizontalAccuracy = 10.0;
        info.m_timestamp = QDateTime::currentMSecsSinceEpoch() / 1000.0;

        m_framework->OnLocationUpdate(info);

        if (m_framework->IsRoutingActive())
        {
          location::FollowingInfo loc;
          m_framework->GetRouteFollowingInfo(loc);
          LOG(LDEBUG, ("Distance:", loc.m_distToTarget, loc.m_targetUnitsSuffix, "Time:", loc.m_time,
                       "Turn:", routing::turns::GetTurnString(loc.m_turn), "(", loc.m_distToTurn, loc.m_turnUnitsSuffix,
                       ") Roundabout exit number:", loc.m_exitNum));
        }
      }
      else
      {
        // init press task params
        m_taskPoint = pt;
        m_wasLongClick = false;
        m_isCleanSingleClick = true;

        StartPressTask(pt, LONG_TOUCH_MS);

        // starting drag
        m_framework->StartDrag(GetDragEvent(e));

        setCursor(Qt::CrossCursor);
        m_isDrag = true;
      }
    }
    else if (e->button() == Qt::RightButton)
    {
      // show feature types
      QMenu menu;

      // Get POI under cursor or nearest address by point.
      m2::PointD dummy;
      search::AddressInfo info;
      feature::Metadata metadata;
      if (m_framework->GetVisiblePOI(pt, dummy, info, metadata))
        add_string(menu, "POI");
      else
        m_framework->GetAddressInfoForPixelPoint(pt, info);

      // Get feature types under cursor.
      vector<string> types;
      m_framework->GetFeatureTypes(pt, types);
      for (size_t i = 0; i < types.size(); ++i)
        add_string(menu, types[i]);

      (void)menu.addSeparator();

      // Format address and types.
      if (!info.m_name.empty())
        add_string(menu, info.m_name);
      add_string(menu, info.FormatAddress());
      add_string(menu, info.FormatTypes());

      menu.exec(e->pos());
    }
  }