#include <QGraphicsView>
#include <QTime>
-class QPropertyAnimation;
+#include "coordinates/scenecoordinate.h"
+
class QParallelAnimationGroup;
+class QPropertyAnimation;
class MapScroller;
-class SceneCoordinate;
-
#define VALUES 4
/**
*/
Q_PROPERTY(qreal viewScale READ viewScale WRITE setViewScale)
+ /**
+ * @brief View shifting
+ *
+ * @property viewShift
+ */
+ Q_PROPERTY(qreal viewShift READ viewShift WRITE setViewShift)
+
public:
/**
* @brief Constructor
/**
* @brief Slot for centering view to new location
*
- * @param sceneCoordinate Scene coordinates of the new center point
+ * Does also shift the center point horizontally, if required.
+ *
+ * @param coordinate Scene coordinates of the new center point
*/
- void centerToSceneCoordinates(const SceneCoordinate &sceneCoordinate);
+ void centerToSceneCoordinates(const SceneCoordinate &coordinate);
/**
* @brief Set zoom level of the view
private slots:
/**
+ * @brief Disables shifting of the center point
+ */
+ void disableCenterShift();
+
+ /**
* @brief Double tap zoom finished.
*
* Disables double tap zoom flag and emits zoomIn signal.
*/
void doubleTapZoomFinished();
+ /**
+ * @brief Enables shifting of the center point
+ */
+ void enableCenterShift();
+
private:
/**
+ * @brief Returns the point which is considered by user as the visible center point
+ *
+ * Differs from view's center point when panel is open and view center point is shifted.
+ *
+ * @returns Center point
+ */
+ QPointF center() const;
+
+ /**
* @brief Set new view scale
*
* @param viewScale New scaling factor
void setViewScale(qreal viewScale);
/**
+ * @brief Set new view shifting
+ *
+ * @param viewShift New shifting amount
+ */
+ void setViewShift(qreal viewShift);
+
+ /**
+ * @brief Update center shifting value
+ */
+ void updateCenterShift();
+
+ /**
* @brief Get current view scale
*
* @return Current view scaling factor
*/
- qreal viewScale();
+ qreal viewScale() const;
+
+ /**
+ * @brief Get current view shifting
+ *
+ * @return Current view shifting amount
+ */
+ qreal viewShift() const;
/*******************************************************************************
* SIGNALS
******************************************************************************/
signals:
/**
+ * @brief Emitted when map center point shiftin is changed
+ *
+ * @param shifting New shifting value
+ */
+ void horizontalShiftingChanged(int shifting);
+
+ /**
* @brief Signal for view resize events.
*
* Signal is emitted when view has been resized.
* @brief Signal for view scroll events
*
* Signal is emitted when view is scrolled.
- * @param sceneCoordinate Scene coordinates of the new center point of the view
+ * @param coordinate Scene coordinates of the new center point of the view
*/
- void viewScrolled(const SceneCoordinate &sceneCoordinate);
+ void viewScrolled(const SceneCoordinate &coordinate);
/**
* @brief Signal for informing that zooming animation is finished
* DATA MEMBERS
******************************************************************************/
private:
- bool m_doubleTapZoomRunning; ///< Double tap zoom running flag
+ bool m_doubleTapZoomRunning; ///< Double tap zoom running flag
- int m_dragTime[VALUES]; ///< Table of mouse event durations
- int m_index; ///< Index of mouse event values tables
- int m_zoomLevel; ///< Current zoom level
+ int m_dragTime[VALUES]; ///< Table of mouse event durations
+ int m_index; ///< Current index of mouse event values table
+ int m_zoomLevel; ///< Current zoom level
- qreal m_kineticMaxViewDistance; ///< Maximum kinetic scroll distance in view pixels
-
- QPoint m_dragMovement[VALUES]; ///< Table of mouse event distances
- QPoint m_mouseLastScenePosition; ///< Previous mouse event position in the scene
- QPoint m_mouseLastViewPosition; ///< Previous mouse event position in the view
- QPoint m_scenePosition; ///< New center position
+ qreal m_centerHorizontalShiftViewPixels; ///< Center point horizontal shift in the view
+ qreal m_kineticMaxViewDistance; ///< Maximum kinetic scroll distance in view pixels
QParallelAnimationGroup *m_scrollAndZoomAnimation; ///< Double click zoom animation
- QPropertyAnimation *m_zoomAnimation; ///< Zoom animation
- QTime m_time; ///< Elapsed times in mouse events
+ QPoint m_dragMovement[VALUES]; ///< Table of mouse event distances
+ QPoint m_internalScenePosition; ///< New center position (used for dragging)
+ QPoint m_lastMouseEventScenePosition; ///< Previous mouse event position in the scene
+ QPoint m_lastMouseEventViewPosition; ///< Previous mouse event position in the view
+ QPoint m_viewCenterPoint; ///< Center point of the MapView
+
+ QPointF m_centerHorizontalShiftPoint; ///< Current amount of center point shifting
+
+ QPropertyAnimation *m_zoomAnimation; ///< Zoom animation
+
+ QTime m_time; ///< Elapsed time between mouse events
+
+ QPropertyAnimation *m_centerShiftAnimation; ///< Animation for shifting the center point
- MapScroller *m_scroller; ///< Kinetic scroller
+ MapScroller *m_scroller; ///< Kinetic scroller
+ SceneCoordinate m_lastSetScenePosition; ///< Last center point coordinate set by MapEngine
};
#endif // MAPVIEW_H