diff --git a/sources/diagramview.cpp b/sources/diagramview.cpp index b76ef03f1..bf321e90d 100644 --- a/sources/diagramview.cpp +++ b/sources/diagramview.cpp @@ -524,6 +524,7 @@ void DiagramView::mouseReleaseEvent(QMouseEvent *e) { return; } if (current_behavior == addingLine || current_behavior == addingRectangle || current_behavior == addingEllipse) { + newItem -> setFullyBuilt(true); if (current_behavior == addingLine) emit(LineAdded(false)); else if (current_behavior == addingRectangle) diff --git a/sources/qetgraphicsitem/qetshapeitem.cpp b/sources/qetgraphicsitem/qetshapeitem.cpp index e01d82e67..c18af27e6 100644 --- a/sources/qetgraphicsitem/qetshapeitem.cpp +++ b/sources/qetgraphicsitem/qetshapeitem.cpp @@ -3,7 +3,8 @@ QetShapeItem::QetShapeItem(QPointF p1, QPointF p2, ShapeType type, bool lineAngle,QGraphicsItem *parent) : QetGraphicsItem(parent), _shapeStyle(Qt::DashLine), - _lineAngle(lineAngle) + _lineAngle(lineAngle), + _isFullyBuilt(false) { _shapeType = type; _boundingRect = QRectF(p1, p2); @@ -18,15 +19,56 @@ void QetShapeItem::setStyle(Qt::PenStyle newStyle) _shapeStyle = newStyle; } +void QetShapeItem::setFullyBuilt(bool isBuilt) +{ + _isFullyBuilt = isBuilt; + setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable | QGraphicsItem::ItemIsFocusable); +} + QRectF QetShapeItem::boundingRect() const { return _boundingRect; } +QPainterPath QetShapeItem::shape() const +{ + QPainterPath path; + QPainterPathStroker pps; + QRectF rect = boundingRect(); + + switch (_shapeType) { + case Line: + if (_lineAngle) { + path.moveTo(rect.topRight()); + path.lineTo(rect.bottomLeft()); + } else { + path.moveTo(rect.topLeft()); + path.lineTo(rect.bottomRight()); + } + //use @pps for grab line with bigger outerline + //more usefull + pps.setWidth(10); + path= pps.createStroke(path); + break; + case Rectangle: + path = QetGraphicsItem::shape(); + break; + case Ellipse: + path.addEllipse(rect); + break; + default: + path = QetGraphicsItem::shape(); + } + + return path; +} + void QetShapeItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) { QRectF rec = boundingRect(); QPen pen(Qt::black); + if (isSelected()) + pen.setColor(Qt::red); pen.setStyle(_shapeStyle); painter->setPen(pen); switch(_shapeType) { diff --git a/sources/qetgraphicsitem/qetshapeitem.h b/sources/qetgraphicsitem/qetshapeitem.h index ec530cd1a..2f9cd35df 100644 --- a/sources/qetgraphicsitem/qetshapeitem.h +++ b/sources/qetgraphicsitem/qetshapeitem.h @@ -21,6 +21,7 @@ class QetShapeItem : public QetGraphicsItem ShapeType getType() const { return _shapeType; } void setBoundingRect(QRectF rec) { _boundingRect = rec; } void setLineAngle(bool lineAngle){ _lineAngle = lineAngle; } + void setFullyBuilt(bool isBuilt); private: ShapeType _shapeType; @@ -28,12 +29,14 @@ class QetShapeItem : public QetGraphicsItem QRectF _boundingRect; bool _lineAngle; // false if line from topleft corner to bottomright corner // and true if line from topright corner to bottomleft corner + bool _isFullyBuilt; virtual void editProperty() {} protected: void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget); QRectF boundingRect() const; + QPainterPath shape() const; };