mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2025-09-13 20:23:04 +02:00
Amelioration de la purge des parties non pertinentes a l'enregistrement dans l'editeur d'element.
Il n'est desormais plus possible d'ajouter plusieurs fois le meme objet Part* sur la scene. git-svn-id: svn+ssh://svn.tuxfamily.org/svnroot/qet/qet/trunk@233 bfdf4180-ca20-0410-9c96-a3a8aa849046
This commit is contained in:
parent
675b7a53f9
commit
4fbac85316
@ -51,6 +51,7 @@ class CustomElementPart {
|
|||||||
virtual QWidget *elementInformations() = 0;
|
virtual QWidget *elementInformations() = 0;
|
||||||
virtual void setProperty(const QString &, const QVariant &) = 0;
|
virtual void setProperty(const QString &, const QVariant &) = 0;
|
||||||
virtual QVariant property(const QString &) = 0;
|
virtual QVariant property(const QString &) = 0;
|
||||||
|
virtual bool isUseless() const = 0;
|
||||||
virtual QETElementEditor *elementEditor() const;
|
virtual QETElementEditor *elementEditor() const;
|
||||||
virtual ElementScene *elementScene() const;
|
virtual ElementScene *elementScene() const;
|
||||||
virtual QUndoStack &undoStack() const;
|
virtual QUndoStack &undoStack() const;
|
||||||
|
@ -232,20 +232,24 @@ void ElementScene::mouseReleaseEvent(QGraphicsSceneMouseEvent *e) {
|
|||||||
if (e -> button() & Qt::LeftButton) {
|
if (e -> button() & Qt::LeftButton) {
|
||||||
switch(behavior) {
|
switch(behavior) {
|
||||||
case Line:
|
case Line:
|
||||||
|
if (qgiManager().manages(current_line)) break;
|
||||||
undo_stack.push(new AddPartCommand(tr("ligne"), this, current_line));
|
undo_stack.push(new AddPartCommand(tr("ligne"), this, current_line));
|
||||||
emit(partsAdded());
|
emit(partsAdded());
|
||||||
break;
|
break;
|
||||||
case Ellipse:
|
case Ellipse:
|
||||||
|
if (qgiManager().manages(current_ellipse)) break;
|
||||||
current_ellipse -> setRect(current_ellipse -> rect().normalized());
|
current_ellipse -> setRect(current_ellipse -> rect().normalized());
|
||||||
undo_stack.push(new AddPartCommand(tr("ellipse"), this, current_ellipse));
|
undo_stack.push(new AddPartCommand(tr("ellipse"), this, current_ellipse));
|
||||||
emit(partsAdded());
|
emit(partsAdded());
|
||||||
break;
|
break;
|
||||||
case Arc:
|
case Arc:
|
||||||
|
if (qgiManager().manages(current_arc)) break;
|
||||||
current_arc-> setRect(current_arc -> rect().normalized());
|
current_arc-> setRect(current_arc -> rect().normalized());
|
||||||
undo_stack.push(new AddPartCommand(tr("arc"), this, current_arc));
|
undo_stack.push(new AddPartCommand(tr("arc"), this, current_arc));
|
||||||
emit(partsAdded());
|
emit(partsAdded());
|
||||||
break;
|
break;
|
||||||
case Circle:
|
case Circle:
|
||||||
|
if (qgiManager().manages(current_circle)) break;
|
||||||
current_circle -> setRect(current_circle -> rect().normalized());
|
current_circle -> setRect(current_circle -> rect().normalized());
|
||||||
undo_stack.push(new AddPartCommand(tr("cercle"), this, current_circle));
|
undo_stack.push(new AddPartCommand(tr("cercle"), this, current_circle));
|
||||||
emit(partsAdded());
|
emit(partsAdded());
|
||||||
@ -381,6 +385,7 @@ const QDomDocument ElementScene::toXml() const {
|
|||||||
// description de l'element
|
// description de l'element
|
||||||
foreach(QGraphicsItem *qgi, zItems(true)) {
|
foreach(QGraphicsItem *qgi, zItems(true)) {
|
||||||
if (CustomElementPart *ce = dynamic_cast<CustomElementPart *>(qgi)) {
|
if (CustomElementPart *ce = dynamic_cast<CustomElementPart *>(qgi)) {
|
||||||
|
if (ce -> isUseless()) continue;
|
||||||
description.appendChild(ce -> toXml(xml_document));
|
description.appendChild(ce -> toXml(xml_document));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -241,3 +241,13 @@ int PartArc::angle() const {
|
|||||||
int PartArc::startAngle() const {
|
int PartArc::startAngle() const {
|
||||||
return(start_angle);
|
return(start_angle);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
@return true si cette partie n'est pas pertinente et ne merite pas d'etre
|
||||||
|
conservee / enregistree.
|
||||||
|
Un arc est pertinent des lors que ses dimensions et son etendue ne sont
|
||||||
|
pas nulles.
|
||||||
|
*/
|
||||||
|
bool PartArc::isUseless() const {
|
||||||
|
return(rect().isNull() || !angle());
|
||||||
|
}
|
||||||
|
@ -54,6 +54,7 @@ class PartArc : public QGraphicsEllipseItem, public CustomElementGraphicPart {
|
|||||||
virtual int startAngle() const;
|
virtual int startAngle() const;
|
||||||
virtual void setProperty(const QString &, const QVariant &);
|
virtual void setProperty(const QString &, const QVariant &);
|
||||||
virtual QVariant property(const QString &);
|
virtual QVariant property(const QString &);
|
||||||
|
virtual bool isUseless() const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
QVariant itemChange(GraphicsItemChange, const QVariant &);
|
QVariant itemChange(GraphicsItemChange, const QVariant &);
|
||||||
|
@ -188,3 +188,12 @@ QRectF PartCircle::boundingRect() const {
|
|||||||
r.adjust(-adjust, -adjust, adjust, adjust);
|
r.adjust(-adjust, -adjust, adjust, adjust);
|
||||||
return(r);
|
return(r);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
@return true si cette partie n'est pas pertinente et ne merite pas d'etre
|
||||||
|
conservee / enregistree.
|
||||||
|
Un cercle est pertinent des lors que son rayon n'est pas nul
|
||||||
|
*/
|
||||||
|
bool PartCircle::isUseless() const {
|
||||||
|
return(rect().isNull());
|
||||||
|
}
|
||||||
|
@ -50,6 +50,7 @@ class PartCircle : public QGraphicsEllipseItem, public CustomElementGraphicPart
|
|||||||
QPointF sceneCenter() const;
|
QPointF sceneCenter() const;
|
||||||
virtual void setProperty(const QString &, const QVariant &);
|
virtual void setProperty(const QString &, const QVariant &);
|
||||||
virtual QVariant property(const QString &);
|
virtual QVariant property(const QString &);
|
||||||
|
virtual bool isUseless() const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
QVariant itemChange(GraphicsItemChange, const QVariant &);
|
QVariant itemChange(GraphicsItemChange, const QVariant &);
|
||||||
|
@ -178,3 +178,12 @@ QVariant PartEllipse::itemChange(GraphicsItemChange change, const QVariant &valu
|
|||||||
QPointF PartEllipse::sceneTopLeft() const {
|
QPointF PartEllipse::sceneTopLeft() const {
|
||||||
return(mapToScene(rect().topLeft()));
|
return(mapToScene(rect().topLeft()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
@return true si cette partie n'est pas pertinente et ne merite pas d'etre
|
||||||
|
conservee / enregistree.
|
||||||
|
Une ellipse est pertinente des lors que ses dimensions ne sont pas nulles
|
||||||
|
*/
|
||||||
|
bool PartEllipse::isUseless() const {
|
||||||
|
return(rect().isNull());
|
||||||
|
}
|
||||||
|
@ -48,6 +48,7 @@ class PartEllipse : public QGraphicsEllipseItem, public CustomElementGraphicPart
|
|||||||
virtual QPointF sceneTopLeft() const;
|
virtual QPointF sceneTopLeft() const;
|
||||||
virtual void setProperty(const QString &, const QVariant &);
|
virtual void setProperty(const QString &, const QVariant &);
|
||||||
virtual QVariant property(const QString &);
|
virtual QVariant property(const QString &);
|
||||||
|
virtual bool isUseless() const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
QVariant itemChange(GraphicsItemChange, const QVariant &);
|
QVariant itemChange(GraphicsItemChange, const QVariant &);
|
||||||
|
@ -65,12 +65,6 @@ const QDomElement PartLine::toXml(QDomDocument &xml_document) const {
|
|||||||
QPointF p1(sceneP1());
|
QPointF p1(sceneP1());
|
||||||
QPointF p2(sceneP2());
|
QPointF p2(sceneP2());
|
||||||
|
|
||||||
// cas particulier : on n'enregistre pas les lignes equivalentes a un point
|
|
||||||
if (p1 == p2) {
|
|
||||||
QDomElement *null_qdom_elmt = new QDomElement();
|
|
||||||
return(*null_qdom_elmt);
|
|
||||||
}
|
|
||||||
|
|
||||||
QDomElement xml_element = xml_document.createElement("line");
|
QDomElement xml_element = xml_document.createElement("line");
|
||||||
xml_element.setAttribute("x1", p1.x());
|
xml_element.setAttribute("x1", p1.x());
|
||||||
xml_element.setAttribute("y1", p1.y());
|
xml_element.setAttribute("y1", p1.y());
|
||||||
@ -248,3 +242,13 @@ QRectF PartLine::boundingRect() const {
|
|||||||
r.adjust(-adjust, -adjust, adjust, adjust);
|
r.adjust(-adjust, -adjust, adjust, adjust);
|
||||||
return(r);
|
return(r);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
@return true si cette partie n'est pas pertinente et ne merite pas d'etre
|
||||||
|
conservee / enregistree.
|
||||||
|
Une ligne est pertinente des lors que ses deux points sont differents
|
||||||
|
*/
|
||||||
|
bool PartLine::isUseless() const {
|
||||||
|
return(sceneP1() == sceneP2());
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -51,6 +51,7 @@ class PartLine : public QGraphicsLineItem, public CustomElementGraphicPart {
|
|||||||
virtual QRectF boundingRect() const;
|
virtual QRectF boundingRect() const;
|
||||||
virtual void setProperty(const QString &, const QVariant &);
|
virtual void setProperty(const QString &, const QVariant &);
|
||||||
virtual QVariant property(const QString &);
|
virtual QVariant property(const QString &);
|
||||||
|
virtual bool isUseless() const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
QVariant itemChange(GraphicsItemChange, const QVariant &);
|
QVariant itemChange(GraphicsItemChange, const QVariant &);
|
||||||
|
@ -144,3 +144,22 @@ QVariant PartPolygon::itemChange(GraphicsItemChange change, const QVariant &valu
|
|||||||
}
|
}
|
||||||
return(QGraphicsPolygonItem::itemChange(change, value));
|
return(QGraphicsPolygonItem::itemChange(change, value));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
@return true si cette partie n'est pas pertinente et ne merite pas d'etre
|
||||||
|
conservee / enregistree.
|
||||||
|
Un polygone est pertinent des lors qu'il possede deux points differents.
|
||||||
|
*/
|
||||||
|
bool PartPolygon::isUseless() const {
|
||||||
|
QPolygonF poly(polygon());
|
||||||
|
|
||||||
|
if (polygon().count() < 2) return(true);
|
||||||
|
|
||||||
|
QPointF previous_point;
|
||||||
|
for (int i = 1 ; i < poly.count() ; ++ i) {
|
||||||
|
if (poly[i] != poly[i-1]) return(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
return(true);
|
||||||
|
}
|
||||||
|
@ -62,6 +62,7 @@ class PartPolygon : public QGraphicsPolygonItem, public CustomElementGraphicPart
|
|||||||
bool isClosed() const;
|
bool isClosed() const;
|
||||||
void setProperty(const QString &, const QVariant &);
|
void setProperty(const QString &, const QVariant &);
|
||||||
virtual QVariant property(const QString &);
|
virtual QVariant property(const QString &);
|
||||||
|
virtual bool isUseless() const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
QVariant itemChange(GraphicsItemChange, const QVariant &);
|
QVariant itemChange(GraphicsItemChange, const QVariant &);
|
||||||
|
@ -216,3 +216,13 @@ void PartTerminal::updateSecondPoint() {
|
|||||||
case QET::West : second_point = QPointF(ts, 0.0); break;
|
case QET::West : second_point = QPointF(ts, 0.0); break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
@return true si cette partie n'est pas pertinente et ne merite pas d'etre
|
||||||
|
conservee / enregistree.
|
||||||
|
Une borne est toujours pertinente ; cette fonction renvoie donc
|
||||||
|
toujours false
|
||||||
|
*/
|
||||||
|
bool PartTerminal::isUseless() const {
|
||||||
|
return(false);
|
||||||
|
}
|
||||||
|
@ -54,6 +54,7 @@ class PartTerminal : public CustomElementPart, public QGraphicsItem {
|
|||||||
void setOrientation(QET::Orientation);
|
void setOrientation(QET::Orientation);
|
||||||
virtual void setProperty(const QString &, const QVariant &);
|
virtual void setProperty(const QString &, const QVariant &);
|
||||||
virtual QVariant property(const QString &);
|
virtual QVariant property(const QString &);
|
||||||
|
virtual bool isUseless() const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
QVariant itemChange(GraphicsItemChange, const QVariant &);
|
QVariant itemChange(GraphicsItemChange, const QVariant &);
|
||||||
|
@ -207,3 +207,12 @@ QRectF PartText::boundingRect() const {
|
|||||||
r.adjust(0.0, -2.0, 0.0, 0.0);
|
r.adjust(0.0, -2.0, 0.0, 0.0);
|
||||||
return(r);
|
return(r);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
@return true si cette partie n'est pas pertinente et ne merite pas d'etre
|
||||||
|
conservee / enregistree.
|
||||||
|
Un texte statique n'est pas pertinent lorsque son texte est vide.
|
||||||
|
*/
|
||||||
|
bool PartText::isUseless() const {
|
||||||
|
return(toPlainText().isEmpty());
|
||||||
|
}
|
||||||
|
@ -49,6 +49,7 @@ class PartText : public QGraphicsTextItem, public CustomElementPart {
|
|||||||
void setPos(qreal, qreal);
|
void setPos(qreal, qreal);
|
||||||
virtual void setProperty(const QString &, const QVariant &);
|
virtual void setProperty(const QString &, const QVariant &);
|
||||||
virtual QVariant property(const QString &);
|
virtual QVariant property(const QString &);
|
||||||
|
virtual bool isUseless() const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void focusOutEvent(QFocusEvent *);
|
virtual void focusOutEvent(QFocusEvent *);
|
||||||
|
@ -231,3 +231,13 @@ QRectF PartTextField::boundingRect() const {
|
|||||||
r.adjust(0.0, -2.0, 0.0, 0.0);
|
r.adjust(0.0, -2.0, 0.0, 0.0);
|
||||||
return(r);
|
return(r);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
@return true si cette partie n'est pas pertinente et ne merite pas d'etre
|
||||||
|
conservee / enregistree.
|
||||||
|
Un champ de texte est toujours pertinent ; cette fonction renvoie donc
|
||||||
|
toujours false
|
||||||
|
*/
|
||||||
|
bool PartTextField::isUseless() const {
|
||||||
|
return(false);
|
||||||
|
}
|
||||||
|
@ -55,6 +55,7 @@ class PartTextField : public QGraphicsTextItem, public CustomElementPart {
|
|||||||
void setFollowParentRotations(bool);
|
void setFollowParentRotations(bool);
|
||||||
virtual void setProperty(const QString &, const QVariant &);
|
virtual void setProperty(const QString &, const QVariant &);
|
||||||
virtual QVariant property(const QString &);
|
virtual QVariant property(const QString &);
|
||||||
|
virtual bool isUseless() const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void focusOutEvent(QFocusEvent *);
|
virtual void focusOutEvent(QFocusEvent *);
|
||||||
|
@ -91,3 +91,12 @@ void QGIManager::release(const QList<QGraphicsItem *> &qgis) {
|
|||||||
void QGIManager::setDestroyQGIOnDelete(bool b) {
|
void QGIManager::setDestroyQGIOnDelete(bool b) {
|
||||||
destroy_qgi_on_delete = b;
|
destroy_qgi_on_delete = b;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Permet de savoir si ce QGIManager gere ou non un item donne
|
||||||
|
@param qgi QGraphicsItem dont il faut verifier la presence
|
||||||
|
@return true si l'item est gere, false sinon
|
||||||
|
*/
|
||||||
|
bool QGIManager::manages(QGraphicsItem *qgi) const {
|
||||||
|
return(qgi_manager.contains(qgi));
|
||||||
|
}
|
||||||
|
@ -46,5 +46,6 @@ class QGIManager {
|
|||||||
void manage(const QList<QGraphicsItem *> &);
|
void manage(const QList<QGraphicsItem *> &);
|
||||||
void release(const QList<QGraphicsItem *> &);
|
void release(const QList<QGraphicsItem *> &);
|
||||||
void setDestroyQGIOnDelete(bool);
|
void setDestroyQGIOnDelete(bool);
|
||||||
|
bool manages(QGraphicsItem *) const;
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
x
Reference in New Issue
Block a user