Basic shapes: Items can be selected and moved (thanks joshua)

git-svn-id: svn+ssh://svn.tuxfamily.org/svnroot/qet/qet/trunk@2879 bfdf4180-ca20-0410-9c96-a3a8aa849046
This commit is contained in:
abhishekm71
2014-02-27 09:55:54 +00:00
parent bf707cca2e
commit 8e4c71c3e7
3 changed files with 47 additions and 1 deletions

View File

@@ -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)

View File

@@ -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) {

View File

@@ -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;
};