[qet] [2879] Basic shapes: Items can be selected and moved (thanks joshua)

[ Thread Index | Date Index | More lists.tuxfamily.org/qet Archives ]


Revision: 2879
Author:   abhishekm71
Date:     2014-02-27 10:55:54 +0100 (Thu, 27 Feb 2014)
Log Message:
-----------
Basic shapes: Items can be selected and moved (thanks joshua)

Modified Paths:
--------------
    trunk/sources/diagramview.cpp
    trunk/sources/qetgraphicsitem/qetshapeitem.cpp
    trunk/sources/qetgraphicsitem/qetshapeitem.h

Modified: trunk/sources/diagramview.cpp
===================================================================
--- trunk/sources/diagramview.cpp	2014-02-26 23:57:22 UTC (rev 2878)
+++ trunk/sources/diagramview.cpp	2014-02-27 09:55:54 UTC (rev 2879)
@@ -524,6 +524,7 @@
 		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)

Modified: trunk/sources/qetgraphicsitem/qetshapeitem.cpp
===================================================================
--- trunk/sources/qetgraphicsitem/qetshapeitem.cpp	2014-02-26 23:57:22 UTC (rev 2878)
+++ trunk/sources/qetgraphicsitem/qetshapeitem.cpp	2014-02-27 09:55:54 UTC (rev 2879)
@@ -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 @@
 	_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) {

Modified: trunk/sources/qetgraphicsitem/qetshapeitem.h
===================================================================
--- trunk/sources/qetgraphicsitem/qetshapeitem.h	2014-02-26 23:57:22 UTC (rev 2878)
+++ trunk/sources/qetgraphicsitem/qetshapeitem.h	2014-02-27 09:55:54 UTC (rev 2879)
@@ -21,6 +21,7 @@
 	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 @@
 	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;
 
 };
 


Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/