diff --git a/sources/editor/graphicspart/customelementgraphicpart.cpp b/sources/editor/graphicspart/customelementgraphicpart.cpp index 6e684b640..56d2551da 100644 --- a/sources/editor/graphicspart/customelementgraphicpart.cpp +++ b/sources/editor/graphicspart/customelementgraphicpart.cpp @@ -36,10 +36,7 @@ CustomElementGraphicPart::CustomElementGraphicPart(QETElementEditor *editor, QGr _color(BlackColor), _antialiased(false) { - setFlags(QGraphicsItem::ItemIsSelectable | QGraphicsItem::ItemIsMovable); -#if QT_VERSION >= 0x040600 - setFlag(QGraphicsItem::ItemSendsGeometryChanges, true); -#endif + setFlags(QGraphicsItem::ItemIsSelectable | QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemSendsGeometryChanges); setAcceptHoverEvents(true); } @@ -427,6 +424,14 @@ void CustomElementGraphicPart::hoverEnterEvent(QGraphicsSceneHoverEvent *event) QGraphicsObject::hoverEnterEvent(event); } +void CustomElementGraphicPart::hoverMoveEvent(QGraphicsSceneHoverEvent *event) +{ + if (isSelected()) + setCursor(Qt::OpenHandCursor); + + QGraphicsObject::hoverMoveEvent(event); +} + /** * @brief CustomElementGraphicPart::hoverLeaveEvent * Reimplemented from QGraphicsObject. @@ -436,6 +441,7 @@ void CustomElementGraphicPart::hoverEnterEvent(QGraphicsSceneHoverEvent *event) void CustomElementGraphicPart::hoverLeaveEvent(QGraphicsSceneHoverEvent *event) { m_hovered = false; + unsetCursor(); QGraphicsObject::hoverLeaveEvent(event); } diff --git a/sources/editor/graphicspart/customelementgraphicpart.h b/sources/editor/graphicspart/customelementgraphicpart.h index 33659fe2e..a0684fa53 100644 --- a/sources/editor/graphicspart/customelementgraphicpart.h +++ b/sources/editor/graphicspart/customelementgraphicpart.h @@ -103,6 +103,7 @@ class CustomElementGraphicPart : public QGraphicsObject, public CustomElementPar QVariant itemChange(GraphicsItemChange change, const QVariant &value); void hoverEnterEvent(QGraphicsSceneHoverEvent *event); + void hoverMoveEvent (QGraphicsSceneHoverEvent *event); void hoverLeaveEvent(QGraphicsSceneHoverEvent *event); virtual void mousePressEvent(QGraphicsSceneMouseEvent *event); diff --git a/sources/editor/graphicspart/partarc.cpp b/sources/editor/graphicspart/partarc.cpp index 1f536f900..78425042e 100644 --- a/sources/editor/graphicspart/partarc.cpp +++ b/sources/editor/graphicspart/partarc.cpp @@ -65,8 +65,14 @@ void PartArc::paint(QPainter *painter, const QStyleOptionGraphicsItem *options, if (isSelected()) { + painter->save(); + QPen pen(Qt::DotLine); + pen.setWidth(1); + pen.setCosmetic(true); + painter->setPen(pen); //Draw the ellipse in black painter -> drawEllipse(rect()); + painter->restore(); //Draw the arc in red t.setColor(Qt::red); @@ -143,7 +149,7 @@ QPainterPath PartArc::shape() const shape.arcTo(m_rect, m_start_angle/16, m_span_angle/16); QPainterPathStroker pps; - pps.setWidth(penWeight()); + pps.setWidth(m_hovered? penWeight()+SHADOWS_HEIGHT : penWeight()); shape = pps.createStroke(shape); if (isSelected()) @@ -165,6 +171,29 @@ QPainterPath PartArc::shadowShape() const return (pps.createStroke(shape)); } +void PartArc::hoverMoveEvent(QGraphicsSceneHoverEvent *event) +{ + if (!isSelected()) + { + CustomElementGraphicPart::hoverMoveEvent(event); + return; + } + + int handler = m_handler.pointIsHoverHandler(event->pos(), m_handler.pointsForRect(m_rect)); + + if (handler >= 0) + { + if (handler == 0 || handler == 2 || handler == 5 || handler == 7) + setCursor(Qt::SizeAllCursor); + else if (handler == 1 || handler == 6) + setCursor(Qt::SizeVerCursor); + else if (handler == 3 || handler == 4) + setCursor(Qt::SizeHorCursor); + } + else + CustomElementGraphicPart::hoverMoveEvent(event); +} + /** * @brief PartArc::mousePressEvent * Handle mouse press event @@ -172,21 +201,24 @@ QPainterPath PartArc::shadowShape() const */ void PartArc::mousePressEvent(QGraphicsSceneMouseEvent *event) { - if (isSelected() && event->button() == Qt::LeftButton) + if (event->button() == Qt::LeftButton) { - m_handler_index = m_handler.pointIsHoverHandler(event->pos(), m_handler.pointsForRect(m_rect)); - - if(m_handler_index >= 0 && m_handler_index <= 7) //User click on an handler + setCursor(Qt::ClosedHandCursor); + if (isSelected()) { - m_undo_command = new QPropertyUndoCommand(this, "rect", QVariant(m_rect)); - m_undo_command->setText(tr("Modifier un arc")); - m_undo_command->enableAnimation(); + m_handler_index = m_handler.pointIsHoverHandler(event->pos(), m_handler.pointsForRect(m_rect)); + + if(m_handler_index >= 0 && m_handler_index <= 7) //User click on an handler + { + m_undo_command = new QPropertyUndoCommand(this, "rect", QVariant(m_rect)); + m_undo_command->setText(tr("Modifier un arc")); + m_undo_command->enableAnimation(); + return; + } } - else - CustomElementGraphicPart::mousePressEvent(event); } - else - CustomElementGraphicPart::mousePressEvent(event); + + CustomElementGraphicPart::mousePressEvent(event); } /** @@ -213,6 +245,9 @@ void PartArc::mouseMoveEvent(QGraphicsSceneMouseEvent *event) */ void PartArc::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) { + if (event->button() == Qt::LeftButton) + setCursor(Qt::OpenHandCursor); + if (m_handler_index >= 0 && m_handler_index <= 7) { if (!m_rect.isValid()) diff --git a/sources/editor/graphicspart/partarc.h b/sources/editor/graphicspart/partarc.h index f90f290cd..c86b6e445 100644 --- a/sources/editor/graphicspart/partarc.h +++ b/sources/editor/graphicspart/partarc.h @@ -59,6 +59,7 @@ class PartArc : public AbstractPartEllipse virtual QPainterPath shadowShape() const; protected: + virtual void hoverMoveEvent(QGraphicsSceneHoverEvent *event); virtual void mousePressEvent(QGraphicsSceneMouseEvent *event); virtual void mouseMoveEvent(QGraphicsSceneMouseEvent *event); virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event); diff --git a/sources/editor/graphicspart/partellipse.cpp b/sources/editor/graphicspart/partellipse.cpp index 732b952a7..65786953a 100644 --- a/sources/editor/graphicspart/partellipse.cpp +++ b/sources/editor/graphicspart/partellipse.cpp @@ -145,7 +145,7 @@ QPainterPath PartEllipse::shape() const shape.addEllipse(m_rect); QPainterPathStroker pps; - pps.setWidth(penWeight()); + pps.setWidth(m_hovered? penWeight()+SHADOWS_HEIGHT : penWeight()); shape = pps.createStroke(shape); if (isSelected()) @@ -166,6 +166,29 @@ QPainterPath PartEllipse::shadowShape() const return (pps.createStroke(shape)); } +void PartEllipse::hoverMoveEvent(QGraphicsSceneHoverEvent *event) +{ + if (!isSelected()) + { + CustomElementGraphicPart::hoverMoveEvent(event); + return; + } + + int handler = m_handler.pointIsHoverHandler(event->pos(), m_handler.pointsForRect(m_rect)); + + if (handler >= 0) + { + if (handler == 0 || handler == 2 || handler == 5 || handler == 7) + setCursor(Qt::SizeAllCursor); + else if (handler == 1 || handler == 6) + setCursor(Qt::SizeVerCursor); + else if (handler == 3 || handler == 4) + setCursor(Qt::SizeHorCursor); + } + else + CustomElementGraphicPart::hoverMoveEvent(event); +} + /** * @brief PartEllipse::mousePressEvent * Handle mouse press event @@ -173,21 +196,24 @@ QPainterPath PartEllipse::shadowShape() const */ void PartEllipse::mousePressEvent(QGraphicsSceneMouseEvent *event) { - if (isSelected() && event->button() == Qt::LeftButton) + if (event->button() == Qt::LeftButton) { - m_handler_index = m_handler.pointIsHoverHandler(event->pos(), m_handler.pointsForRect(m_rect)); - - if(m_handler_index >= 0 && m_handler_index <= 7) //User click on an handler + setCursor(Qt::ClosedHandCursor); + if (isSelected()) { - m_undo_command = new QPropertyUndoCommand(this, "rect", QVariant(m_rect)); - m_undo_command->setText(tr("Modifier une ellipse")); - m_undo_command->enableAnimation(); + m_handler_index = m_handler.pointIsHoverHandler(event->pos(), m_handler.pointsForRect(m_rect)); + + if(m_handler_index >= 0 && m_handler_index <= 7) //User click on an handler + { + m_undo_command = new QPropertyUndoCommand(this, "rect", QVariant(m_rect)); + m_undo_command->setText(tr("Modifier une ellipse")); + m_undo_command->enableAnimation(); + return; + } } - else - CustomElementGraphicPart::mousePressEvent(event); } - else - CustomElementGraphicPart::mousePressEvent(event); + + CustomElementGraphicPart::mousePressEvent(event); } /** @@ -196,7 +222,7 @@ void PartEllipse::mousePressEvent(QGraphicsSceneMouseEvent *event) * @param event */ void PartEllipse::mouseMoveEvent(QGraphicsSceneMouseEvent *event) -{ +{ if(m_handler_index >= 0 && m_handler_index <= 7) { QPointF pos_ = event->modifiers() == Qt::ControlModifier ? event->pos() : mapFromScene(elementScene()->snapToGrid(event->scenePos())); @@ -214,6 +240,9 @@ void PartEllipse::mouseMoveEvent(QGraphicsSceneMouseEvent *event) */ void PartEllipse::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) { + if (event->button() == Qt::LeftButton) + setCursor(Qt::OpenHandCursor); + if (m_handler_index >= 0 && m_handler_index <= 7) { if (!m_rect.isValid()) diff --git a/sources/editor/graphicspart/partellipse.h b/sources/editor/graphicspart/partellipse.h index 034f941e4..0339d5254 100644 --- a/sources/editor/graphicspart/partellipse.h +++ b/sources/editor/graphicspart/partellipse.h @@ -61,6 +61,7 @@ class PartEllipse : public AbstractPartEllipse virtual QPainterPath shadowShape() const; protected: + virtual void hoverMoveEvent(QGraphicsSceneHoverEvent *event); virtual void mousePressEvent(QGraphicsSceneMouseEvent *event); virtual void mouseMoveEvent(QGraphicsSceneMouseEvent *event); virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event); diff --git a/sources/editor/graphicspart/partline.cpp b/sources/editor/graphicspart/partline.cpp index 6ca6c040e..26a49a10a 100644 --- a/sources/editor/graphicspart/partline.cpp +++ b/sources/editor/graphicspart/partline.cpp @@ -146,21 +146,25 @@ void PartLine::fromXml(const QDomElement &qde) { */ void PartLine::mousePressEvent(QGraphicsSceneMouseEvent *event) { - if(isSelected() && event->button() == Qt::LeftButton) + if(event->button() == Qt::LeftButton) { - m_handler_index = m_handler.pointIsHoverHandler(event->pos(), m_handler.pointsForLine(m_line)); + setCursor(Qt::ClosedHandCursor); - if(m_handler_index >= 0 && m_handler_index <= 1) //User click on an handler + if (isSelected()) { - m_undo_command = new QPropertyUndoCommand(this, "line", QVariant(m_line)); - m_undo_command->setText(tr("Modifier une ligne")); - m_undo_command->enableAnimation(); + m_handler_index = m_handler.pointIsHoverHandler(event->pos(), m_handler.pointsForLine(m_line)); + + if(m_handler_index >= 0 && m_handler_index <= 1) //User click on an handler + { + m_undo_command = new QPropertyUndoCommand(this, "line", QVariant(m_line)); + m_undo_command->setText(tr("Modifier une ligne")); + m_undo_command->enableAnimation(); + return; + } } - else - CustomElementGraphicPart::mousePressEvent(event); } - else - CustomElementGraphicPart::mousePressEvent(event); + + CustomElementGraphicPart::mousePressEvent(event); } /** @@ -187,6 +191,9 @@ void PartLine::mouseMoveEvent(QGraphicsSceneMouseEvent *event) */ void PartLine::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) { + if (event->button() == Qt::LeftButton) + setCursor(Qt::OpenHandCursor); + if (m_handler_index >= 0 && m_handler_index <= 1) { m_undo_command->setNewValue(QVariant(m_line)); @@ -233,7 +240,7 @@ QPainterPath PartLine::shape() const } QPainterPathStroker pps; - pps.setWidth(penWeight()); + pps.setWidth(m_hovered? penWeight()+SHADOWS_HEIGHT : penWeight()); shape = pps.createStroke(shape); if (isSelected()) @@ -526,6 +533,20 @@ void PartLine::setSecondEndLength(const qreal &l) emit secondEndLengthChanged(); } +void PartLine::hoverMoveEvent(QGraphicsSceneHoverEvent *event) +{ + if (!isSelected()) + { + CustomElementGraphicPart::hoverMoveEvent(event); + return; + } + + if (m_handler.pointIsHoverHandler(event->pos(), m_handler.pointsForLine(m_line)) >= 0) + setCursor(Qt::SizeAllCursor); + else + CustomElementGraphicPart::hoverMoveEvent(event); +} + /** * @brief PartLine::path * @return this line has a QPainterPath. diff --git a/sources/editor/graphicspart/partline.h b/sources/editor/graphicspart/partline.h index 6cfda7849..8b23feb35 100644 --- a/sources/editor/graphicspart/partline.h +++ b/sources/editor/graphicspart/partline.h @@ -96,6 +96,7 @@ class PartLine : public CustomElementGraphicPart void setSecondEndLength(const qreal &l); protected: + virtual void hoverMoveEvent(QGraphicsSceneHoverEvent *event); virtual void mousePressEvent(QGraphicsSceneMouseEvent *event); virtual void mouseMoveEvent(QGraphicsSceneMouseEvent *event); virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event); diff --git a/sources/editor/graphicspart/partpolygon.cpp b/sources/editor/graphicspart/partpolygon.cpp index 24f984be3..e8464cec2 100644 --- a/sources/editor/graphicspart/partpolygon.cpp +++ b/sources/editor/graphicspart/partpolygon.cpp @@ -248,6 +248,20 @@ void PartPolygon::setClosed(bool close) emit closedChange(); } +void PartPolygon::hoverMoveEvent(QGraphicsSceneHoverEvent *event) +{ + if (!isSelected()) + { + CustomElementGraphicPart::hoverMoveEvent(event); + return; + } + + if (m_handler.pointIsHoverHandler(event->pos(), m_polygon) >= 0) + setCursor(Qt::SizeAllCursor); + else + CustomElementGraphicPart::hoverMoveEvent(event); +} + /** * @brief PartPolygon::mousePressEvent * Handle mouse press event @@ -255,20 +269,23 @@ void PartPolygon::setClosed(bool close) */ void PartPolygon::mousePressEvent(QGraphicsSceneMouseEvent *event) { - if (isSelected() && event->button() == Qt::LeftButton) + if (event->button() == Qt::LeftButton) { - m_handler_index = m_handler.pointIsHoverHandler(event->pos(), m_polygon); - - if(m_handler_index >= 0) //User click on an handler + setCursor(Qt::ClosedHandCursor); + if(isSelected()) { - m_undo_command = new QPropertyUndoCommand(this, "polygon", QVariant(m_polygon)); - m_undo_command->setText(tr("Modifier un polygone")); + m_handler_index = m_handler.pointIsHoverHandler(event->pos(), m_polygon); + + if(m_handler_index >= 0) //User click on an handler + { + m_undo_command = new QPropertyUndoCommand(this, "polygon", QVariant(m_polygon)); + m_undo_command->setText(tr("Modifier un polygone")); + return; + } } - else - CustomElementGraphicPart::mousePressEvent(event); } - else - CustomElementGraphicPart::mousePressEvent(event); + + CustomElementGraphicPart::mousePressEvent(event); } /** @@ -296,6 +313,9 @@ void PartPolygon::mouseMoveEvent(QGraphicsSceneMouseEvent *event) */ void PartPolygon::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) { + if (event->button() == Qt::LeftButton) + setCursor(Qt::OpenHandCursor); + if (m_handler_index >= 0) { m_undo_command->setNewValue(QVariant(m_polygon)); @@ -320,7 +340,7 @@ QPainterPath PartPolygon::shape() const shape.lineTo(m_polygon.first()); QPainterPathStroker pps; - pps.setWidth(penWeight()); + pps.setWidth(m_hovered? penWeight()+SHADOWS_HEIGHT : penWeight()); shape = pps.createStroke(shape); if (isSelected()) diff --git a/sources/editor/graphicspart/partpolygon.h b/sources/editor/graphicspart/partpolygon.h index 57c3bafac..53c5c4acf 100644 --- a/sources/editor/graphicspart/partpolygon.h +++ b/sources/editor/graphicspart/partpolygon.h @@ -85,6 +85,7 @@ class PartPolygon : public CustomElementGraphicPart void setClosed (bool close); protected: + virtual void hoverMoveEvent(QGraphicsSceneHoverEvent *event); virtual void mousePressEvent(QGraphicsSceneMouseEvent *event); virtual void mouseMoveEvent(QGraphicsSceneMouseEvent *event); virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event); diff --git a/sources/editor/graphicspart/partrectangle.cpp b/sources/editor/graphicspart/partrectangle.cpp index f0a30346f..9c3b13102 100644 --- a/sources/editor/graphicspart/partrectangle.cpp +++ b/sources/editor/graphicspart/partrectangle.cpp @@ -161,7 +161,7 @@ QPainterPath PartRectangle::shape() const shape.addRect(m_rect); QPainterPathStroker pps; - pps.setWidth(penWeight()); + pps.setWidth(m_hovered? penWeight()+SHADOWS_HEIGHT : penWeight()); shape = pps.createStroke(shape); if (isSelected()) @@ -237,6 +237,29 @@ void PartRectangle::handleUserTransformation(const QRectF &initial_selection_rec setRect(QRectF(mapFromScene(mapped_points.at(0)), mapFromScene(mapped_points.at(1)))); } +void PartRectangle::hoverMoveEvent(QGraphicsSceneHoverEvent *event) +{ + if (!isSelected()) + { + CustomElementGraphicPart::hoverMoveEvent(event); + return; + } + + int handler = m_handler.pointIsHoverHandler(event->pos(), m_handler.pointsForRect(m_rect)); + + if (handler >= 0) + { + if (handler == 0 || handler == 2 || handler == 5 || handler == 7) + setCursor(Qt::SizeAllCursor); + else if (handler == 1 || handler == 6) + setCursor(Qt::SizeVerCursor); + else if (handler == 3 || handler == 4) + setCursor(Qt::SizeHorCursor); + } + else + CustomElementGraphicPart::hoverMoveEvent(event); +} + /** * @brief PartRectangle::mousePressEvent * Handle mouse press event @@ -244,21 +267,24 @@ void PartRectangle::handleUserTransformation(const QRectF &initial_selection_rec */ void PartRectangle::mousePressEvent(QGraphicsSceneMouseEvent *event) { - if (isSelected() && event->button() == Qt::LeftButton) + if (event->button() == Qt::LeftButton) { - m_handler_index = m_handler.pointIsHoverHandler(event->pos(), m_handler.pointsForRect(m_rect)); - - if(m_handler_index >= 0 && m_handler_index <= 7) //User click on an handler + setCursor(Qt::ClosedHandCursor); + if(isSelected()) { - m_undo_command = new QPropertyUndoCommand(this, "rect", QVariant(m_rect)); - m_undo_command->setText(tr("Modifier un rectangle")); - m_undo_command->enableAnimation(); + m_handler_index = m_handler.pointIsHoverHandler(event->pos(), m_handler.pointsForRect(m_rect)); + + if(m_handler_index >= 0 && m_handler_index <= 7) //User click on an handler + { + m_undo_command = new QPropertyUndoCommand(this, "rect", QVariant(m_rect)); + m_undo_command->setText(tr("Modifier un rectangle")); + m_undo_command->enableAnimation(); + return; + } } - else - CustomElementGraphicPart::mousePressEvent(event); } - else - CustomElementGraphicPart::mousePressEvent(event); + + CustomElementGraphicPart::mousePressEvent(event); } /** @@ -285,6 +311,9 @@ void PartRectangle::mouseMoveEvent(QGraphicsSceneMouseEvent *event) */ void PartRectangle::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) { + if (event->button() == Qt::LeftButton) + setCursor(Qt::OpenHandCursor); + if (m_handler_index >= 0 && m_handler_index <= 7) { if (!m_rect.isValid()) diff --git a/sources/editor/graphicspart/partrectangle.h b/sources/editor/graphicspart/partrectangle.h index 227f66b36..02ca1637a 100644 --- a/sources/editor/graphicspart/partrectangle.h +++ b/sources/editor/graphicspart/partrectangle.h @@ -75,6 +75,7 @@ class PartRectangle : public CustomElementGraphicPart virtual void handleUserTransformation(const QRectF &, const QRectF &); protected: + virtual void hoverMoveEvent(QGraphicsSceneHoverEvent *event); virtual void mousePressEvent(QGraphicsSceneMouseEvent *event); virtual void mouseMoveEvent(QGraphicsSceneMouseEvent *event); virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);