df::Touch MapWidget::GetTouch(QMouseEvent * e) const { df::Touch touch; touch.m_id = 0; touch.m_location = GetDevicePoint(e); return touch; }
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); }
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())); }
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()); } }