10#include <QGraphicsLineItem>
11#include <QGraphicsPolygonItem>
12#include <QGraphicsScene>
13#include <QGraphicsSceneMouseEvent>
14#include <QGraphicsView>
56 setFlags (QGraphicsItem::ItemIsMovable |
57 QGraphicsItem::ItemSendsGeometryChanges);
58 setCursor (Qt::OpenHandCursor);
62 m_arrow =
new QGraphicsPolygonItem (
this);
65 m_shadedArea =
new QGraphicsRectItem (
X_INITIAL,
71 m_shadedArea->setPen (Qt::NoPen);
72 m_shadedArea->setZValue (0.0);
73 scene.addItem (m_shadedArea);
78 m_divider =
new QGraphicsLineItem (
X_INITIAL,
83 m_divider->setZValue (1.0);
84 scene.addItem (m_divider);
101 updateGeometryDivider();
102 updateGeometryNonPaddle ();
109 return QGraphicsRectItem::itemChange (
change,
value);
115 m_startDragPos =
QPointF (rect().x () + rect().width () / 2.0,
116 rect().y () + rect().
height () / 2.0);
119void ViewProfileDivider::sendSignalMoved ()
121 if (m_isLowerBoundary) {
136 updateGeometryPaddle ();
137 updateGeometryDivider ();
138 updateGeometryNonPaddle ();
144 double yMiddle = rect().top() + rect().height() / 2.0;
148 if (m_isLowerBoundary) {
163 m_arrow->setPen (
QPen (Qt::black));
167void ViewProfileDivider::slotOtherMoved(
double xSceneOther)
170 updateGeometryNonPaddle ();
173void ViewProfileDivider::updateGeometryDivider ()
175 m_divider->setLine (m_xScene,
178 2 *
SLOP + m_sceneHeight);
181void ViewProfileDivider::updateGeometryNonPaddle()
183 if (m_isLowerBoundary) {
184 if (m_xScene <= m_xSceneOther) {
187 m_shadedArea->setRect (-
SLOP,
190 2 *
SLOP + m_sceneHeight);
195 m_shadedArea->setRect (m_xSceneOther,
197 m_xScene - m_xSceneOther,
198 2 *
SLOP + m_sceneHeight);
203 if (m_xSceneOther <= m_xScene) {
206 m_shadedArea->setRect (m_xScene,
208 SLOP + m_sceneWidth - m_xScene,
209 2 *
SLOP + m_sceneHeight);
215 m_shadedArea->setRect (m_xSceneOther,
218 2 *
SLOP + m_sceneHeight);
223void ViewProfileDivider::updateGeometryPaddle ()
const int INNER_RADIUS_MIN
const double DIVIDER_WIDTH
const QColor DIVIDER_COLOR
const QColor ARROW_COLOR(Qt::NoPen)
const double SHADED_AREA_OPACITY
const QColor SHADED_AREA_COLOR
const double ARROW_HEIGHT
void signalMovedHigh(double xSceneOther)
Signal used when divider is dragged and m_isLowerBoundary is false.
void signalMovedLow(double xSceneOther)
Signal used when divider is dragged and m_isLowerBoundary is true.
void setX(double x, double xLow, double xHigh)
Set the position by specifying the new x coordinate.
ViewProfileDivider(QGraphicsScene &scene, QGraphicsView &view, int sceneWidth, int sceneHeight, int yCenter, bool isLowerBoundary)
Single constructor.
virtual void mousePressEvent(QGraphicsSceneMouseEvent *event)
Save paddle position at start of click-and-drag.
virtual QVariant itemChange(GraphicsItemChange change, const QVariant &value)
Intercept changes so divider movement can be restricted to horizontal direction only.