bool RoutingLayerPrivate::handleMouseButtonRelease( QMouseEvent *e ) { if ( e->button() != Qt::LeftButton ) { return false; } if ( m_movingIndex >= 0 ) { m_movingIndex = -1; clearStopOver(); m_marbleWidget->model()->routingManager()->retrieveRoute(); return true; } if ( !m_dropStopOver.isNull() && !m_dragStopOver.isNull() ) { QPoint moved = e->pos() - m_dragStopOver; if ( moved.manhattanLength() < 10 ) { return false; } qreal lon( 0.0 ), lat( 0.0 ); if ( m_dragStopOverRightIndex >= 0 && m_dragStopOverRightIndex <= m_routeRequest->size() && m_marbleWidget->geoCoordinates( m_dropStopOver.x(), m_dropStopOver.y(), lon, lat, GeoDataCoordinates::Radian ) ) { GeoDataCoordinates position( lon, lat ); m_dragStopOverRightIndex = viaInsertPosition( e->modifiers() ); m_routeRequest->insert( m_dragStopOverRightIndex, position ); clearStopOver(); m_marbleWidget->model()->routingManager()->retrieveRoute(); return true; } } return false; }
bool RoutingLayerPrivate::handleMouseMove( QMouseEvent *e ) { if ( m_pointSelection ) { m_marbleWidget->setCursor( Qt::CrossCursor ); return true; } if ( !m_routingModel ) { return false; } qreal lon( 0.0 ), lat( 0.0 ); if ( m_marbleWidget->geoCoordinates( e->pos().x(), e->pos().y(), lon, lat, GeoDataCoordinates::Radian ) ) { if ( m_movingIndex >= 0 ) { GeoDataCoordinates moved( lon, lat ); m_routeRequest->setPosition( m_movingIndex, moved ); m_marbleWidget->setCursor( Qt::ArrowCursor ); } else if ( !m_dragStopOver.isNull() ) { // Repaint only that region of the map that is affected by the change m_dragStopOverRightIndex = viaInsertPosition( e->modifiers() ); QRect dirty = m_routeRegion.boundingRect(); dirty |= QRect( m_dropStopOver, m_pixmapSize ); dirty |= QRect( e->pos(), m_pixmapSize ); if ( e->buttons() & Qt::LeftButton ) { m_dropStopOver = e->pos(); } else { m_dragStopOver = QPoint(); m_dropStopOver = QPoint(); } m_marbleWidget->update( dirty ); m_marbleWidget->setCursor( Qt::ArrowCursor ); } else if ( isInfoPoint( e->pos() ) ) { clearStopOver(); m_marbleWidget->setCursor( Qt::ArrowCursor ); } else if ( m_routeRegion.contains( e->pos() ) ) { m_dropStopOver = e->pos(); m_marbleWidget->setCursor( Qt::ArrowCursor ); } else if ( !m_dropStopOver.isNull() ) { clearStopOver(); } else if ( isAlternativeRoutePoint( e->pos() ) ) { m_marbleWidget->setCursor( Qt::ArrowCursor ); } else { return false; } // Update pixmap in the map (old and new position needs repaint) paintStopOver( QRect( e->pos(), m_pixmapSize ) ); return true; } return false; }