Basic Shapes: Dynamic Preview added when constructing the shape.

git-svn-id: svn+ssh://svn.tuxfamily.org/svnroot/qet/qet/trunk@2876 bfdf4180-ca20-0410-9c96-a3a8aa849046
This commit is contained in:
abhishekm71
2014-02-24 14:22:26 +00:00
parent 389d4baccf
commit 25aa9603fc
3 changed files with 30 additions and 42 deletions

View File

@@ -43,7 +43,6 @@
#include <QGraphicsPixmapItem> #include <QGraphicsPixmapItem>
#include <QGraphicsSceneMouseEvent> #include <QGraphicsSceneMouseEvent>
#include "factory/elementfactory.h" #include "factory/elementfactory.h"
#include "qetgraphicsitem/qetshapeitem.h"
/** /**
@@ -51,7 +50,7 @@
@param diagram Schema a afficher ; si diagram vaut 0, un nouveau Diagram est utilise @param diagram Schema a afficher ; si diagram vaut 0, un nouveau Diagram est utilise
@param parent Le QWidget parent de cette vue de schema @param parent Le QWidget parent de cette vue de schema
*/ */
DiagramView::DiagramView(Diagram *diagram, QWidget *parent) : QGraphicsView(parent) { DiagramView::DiagramView(Diagram *diagram, QWidget *parent) : QGraphicsView(parent), newItem(0){
setAttribute(Qt::WA_DeleteOnClose, true); setAttribute(Qt::WA_DeleteOnClose, true);
setInteractive(true); setInteractive(true);
current_behavior = noAction; current_behavior = noAction;
@@ -459,28 +458,19 @@ void DiagramView::mousePressEvent(QMouseEvent *e) {
current_behavior = noAction; current_behavior = noAction;
break; break;
case addingLine: case addingLine:
// if (!rubber_band) { rubber_band_origin = mapToScene(e -> pos());
rubber_band_origin = mapToScene(e -> pos()); newItem = new QetShapeItem(rubber_band_origin, rubber_band_origin, QetShapeItem::Line, false);
// rubber_band = new QRubberBand(QRubberBand::Rectangle, this); scene -> addItem(newItem);
//}
//rubber_band->setGeometry(QRectF(rubber_band_origin, QSize()).toRect());
//rubber_band->show();
break; break;
case addingRectangle: case addingRectangle:
//if (!rubber_band) { rubber_band_origin = mapToScene(e -> pos());
rubber_band_origin = mapToScene(e -> pos()); newItem = new QetShapeItem(rubber_band_origin, rubber_band_origin, QetShapeItem::Rectangle);
//rubber_band = new QRubberBand(QRubberBand::Rectangle, this); scene -> addItem(newItem);
// }
//rubber_band->setGeometry(QRectF(rubber_band_origin, QSize()).toRect());
//rubber_band->show();
break; break;
case addingEllipse: case addingEllipse:
// if (!rubber_band) { rubber_band_origin = mapToScene(e -> pos());
rubber_band_origin = mapToScene(e -> pos()); newItem = new QetShapeItem(rubber_band_origin, rubber_band_origin, QetShapeItem::Ellipse);
// rubber_band = new QRubberBand(QRubberBand::Rectangle, this); scene -> addItem(newItem);
//}
//rubber_band->setGeometry(QRectF(rubber_band_origin, QSize()).toRect());
//rubber_band->show();
break; break;
case dragView: case dragView:
current_behavior = noAction; current_behavior = noAction;
@@ -512,9 +502,15 @@ void DiagramView::mouseMoveEvent(QMouseEvent *e) {
center_view_ = mapToScene(this -> viewport() -> rect()).boundingRect().center(); center_view_ = mapToScene(this -> viewport() -> rect()).boundingRect().center();
return; return;
} }
/*if ((e -> buttons() & Qt::LeftButton) && if ((e -> buttons() & Qt::LeftButton) &&
(current_behavior == addingLine || current_behavior == addingRectangle || current_behavior == addingEllipse)) (current_behavior == addingLine || current_behavior == addingRectangle || current_behavior == addingEllipse)) {
rubber_band -> setGeometry(QRectF(rubber_band_origin, mapToScene(e->pos())).normalized().toRect());*/ QRectF rec = QRectF(rubber_band_origin, mapToScene(e->pos())).normalized();
scene ->removeItem(newItem);
newItem -> setBoundingRect(rec);
if (current_behavior == addingLine)
newItem -> setLineAngle(rubber_band_origin != rec.topLeft() && rubber_band_origin != rec.bottomRight());
scene ->addItem(newItem);
}
QGraphicsView::mouseMoveEvent(e); QGraphicsView::mouseMoveEvent(e);
} }
@@ -528,26 +524,12 @@ void DiagramView::mouseReleaseEvent(QMouseEvent *e) {
return; return;
} }
if (current_behavior == addingLine || current_behavior == addingRectangle || current_behavior == addingEllipse) { if (current_behavior == addingLine || current_behavior == addingRectangle || current_behavior == addingEllipse) {
QRectF rec = QRectF(rubber_band_origin, mapToScene(e->pos())).normalized(); if (current_behavior == addingLine)
if (current_behavior == addingLine) {
QetShapeItem *line;
if (rubber_band_origin == rec.topLeft() || rubber_band_origin == rec.bottomRight())
line = new QetShapeItem(rec.topLeft(), rec.bottomRight(), QetShapeItem::Line, false);
else
line = new QetShapeItem(rec.topLeft(), rec.bottomRight(), QetShapeItem::Line, true);
scene -> addItem(line);
emit(LineAdded(false)); emit(LineAdded(false));
} else if (current_behavior == addingRectangle) { else if (current_behavior == addingRectangle)
QetShapeItem *rect = new QetShapeItem(rec.topLeft(), rec.bottomRight(), QetShapeItem::Rectangle);
scene -> addItem(rect);
emit(RectangleAdded(false)); emit(RectangleAdded(false));
} else { // ellipse else // ellipse
QetShapeItem *ellipse = new QetShapeItem(rec.topLeft(), rec.bottomRight(), QetShapeItem::Ellipse);
scene -> addItem(ellipse);
emit(EllipseAdded(false)); emit(EllipseAdded(false));
}
//rubber_band -> hide();
//rubber_band = 0;
current_behavior = noAction; current_behavior = noAction;
} }

View File

@@ -20,6 +20,7 @@
#include <QtGui> #include <QtGui>
#include "elementslocation.h" #include "elementslocation.h"
#include "templatelocation.h" #include "templatelocation.h"
#include "qetgraphicsitem/qetshapeitem.h"
class Conductor; class Conductor;
class Diagram; class Diagram;
class Element; class Element;
@@ -57,7 +58,7 @@ class DiagramView : public QGraphicsView {
QPointF reference_view_; QPointF reference_view_;
QPointF center_view_; QPointF center_view_;
QImage image_to_add_; QImage image_to_add_;
QRubberBand *rubber_band; QetShapeItem *newItem;
QPointF rubber_band_origin; QPointF rubber_band_origin;
// methods // methods

View File

@@ -16,6 +16,12 @@ class QetShapeItem : public QetGraphicsItem
QetShapeItem(QPointF, QPointF, ShapeType, bool lineAngle = false, QGraphicsItem *parent = 0); QetShapeItem(QPointF, QPointF, ShapeType, bool lineAngle = false, QGraphicsItem *parent = 0);
virtual ~QetShapeItem(); virtual ~QetShapeItem();
void setStyle(Qt::PenStyle);
Qt::PenStyle getStyle() const { return _shapeStyle; }
ShapeType getType() const { return _shapeType; }
void setBoundingRect(QRectF rec) { _boundingRect = rec; }
void setLineAngle(bool lineAngle){ _lineAngle = lineAngle; }
private: private:
ShapeType _shapeType; ShapeType _shapeType;
Qt::PenStyle _shapeStyle; Qt::PenStyle _shapeStyle;
@@ -23,7 +29,6 @@ class QetShapeItem : public QetGraphicsItem
bool _lineAngle; // false if line from topleft corner to bottomright corner bool _lineAngle; // false if line from topleft corner to bottomright corner
// and true if line from topright corner to bottomleft corner // and true if line from topright corner to bottomleft corner
void setStyle(Qt::PenStyle);
virtual void editProperty() {} virtual void editProperty() {}
protected: protected: