From 1cd9c4b28c074f089ec9810acd97bb71245ce18b Mon Sep 17 00:00:00 2001 From: blacksun Date: Mon, 28 Apr 2014 19:00:49 +0000 Subject: [PATCH] cross ref item: bugfix git-svn-id: svn+ssh://svn.tuxfamily.org/svnroot/qet/qet/trunk@3035 bfdf4180-ca20-0410-9c96-a3a8aa849046 --- sources/qetgraphicsitem/crossrefitem.cpp | 10 ++- sources/qetgraphicsitem/crossrefitem.h | 1 + sources/qetgraphicsitem/masterelement.cpp | 76 +++++++---------------- sources/qetgraphicsitem/masterelement.h | 6 -- 4 files changed, 33 insertions(+), 60 deletions(-) diff --git a/sources/qetgraphicsitem/crossrefitem.cpp b/sources/qetgraphicsitem/crossrefitem.cpp index ec047a00e..95b4cc254 100644 --- a/sources/qetgraphicsitem/crossrefitem.cpp +++ b/sources/qetgraphicsitem/crossrefitem.cpp @@ -40,7 +40,7 @@ CrossRefItem::CrossRefItem(Element *elmt, QGraphicsItem *parent) : connect(elmt, SIGNAL(positionChange(QPointF)), this, SLOT(autoPos())); connect(elmt, SIGNAL(elementInfoChange(DiagramContext)), this, SLOT(updateLabel())); connect(elmt->diagram()->project(), SIGNAL(projectDiagramsOrderChanged(QETProject*,int,int)), this, SLOT(updateLabel())); - connect(elmt->diagram(), SIGNAL(XRefPropertiesChanged(XRefProperties)), this, SLOT(updateLabel())); + connect(elmt->diagram(), SIGNAL(XRefPropertiesChanged(XRefProperties)), this, SLOT(setProperties(XRefProperties))); updateLabel(); } @@ -52,6 +52,7 @@ CrossRefItem::~CrossRefItem() { disconnect(m_element, SIGNAL(positionChange(QPointF)), this, SLOT(autoPos())); disconnect(m_element, SIGNAL(elementInfoChange(DiagramContext)), this, SLOT(updateLabel())); disconnect(m_element->diagram()->project(), SIGNAL(projectDiagramsOrderChanged(QETProject*,int,int)), this, SLOT(updateLabel())); + disconnect(m_element->diagram(), SIGNAL(XRefPropertiesChanged(XRefProperties)), this, SLOT(setProperties(XRefProperties))); } /** @@ -70,6 +71,13 @@ QPainterPath CrossRefItem::shape() const{ return m_shape_path; } +void CrossRefItem::setProperties(XRefProperties xrp) { + if (m_properties != xrp) { + m_properties = xrp; + updateLabel(); + } +} + /** * @brief CrossRefItem::updateLabel * Update the content of the item diff --git a/sources/qetgraphicsitem/crossrefitem.h b/sources/qetgraphicsitem/crossrefitem.h index 74d74584f..39f1f1fb9 100644 --- a/sources/qetgraphicsitem/crossrefitem.h +++ b/sources/qetgraphicsitem/crossrefitem.h @@ -56,6 +56,7 @@ class CrossRefItem : public QGraphicsObject signals: public slots: + void setProperties (XRefProperties xrp); void updateLabel(); void autoPos(); diff --git a/sources/qetgraphicsitem/masterelement.cpp b/sources/qetgraphicsitem/masterelement.cpp index 55b566af8..a6827c970 100644 --- a/sources/qetgraphicsitem/masterelement.cpp +++ b/sources/qetgraphicsitem/masterelement.cpp @@ -88,52 +88,36 @@ void MasterElement::unlinkElement(Element *elmt) { if (connected_elements.contains(elmt)) { connected_elements.removeOne(elmt); elmt->unlinkElement(this); - //update the graphics cross ref - disconnect(elmt, SIGNAL(positionChange(QPointF)), cri_, SLOT(updateLabel())); - bool delete_cri = true; + if (cri_) { + //update the graphics cross ref + disconnect(elmt, SIGNAL(positionChange(QPointF)), cri_, SLOT(updateLabel())); - //if power contact isn't show, make sure they are only power contacts linked - //or nothing befor remove cri_ - if (!diagram()->defaultXRefProperties().showPowerContact()) { - foreach(Element *elmt, linkedElements()) - if (elmt->kindInformations()["type"].toString() != "power") delete_cri = false; - } - //else only make sur list is empty - else { - if (!linkedElements().isEmpty()) delete_cri = false; - } + bool delete_cri = true; - if (delete_cri) { - diagram()->removeItem(cri_); - delete cri_; - cri_ = 0; - } - else { - cri_->updateLabel(); + //if power contact isn't show, make sure they are only power contacts linked + //or nothing befor remove cri_ + if (!diagram()->defaultXRefProperties().showPowerContact()) { + foreach(Element *elmt, linkedElements()) + if (elmt->kindInformations()["type"].toString() != "power") delete_cri = false; + } + //else only make sur list is empty + else { + if (!linkedElements().isEmpty()) delete_cri = false; + } + + if (delete_cri) { + diagram()->removeItem(cri_); + delete cri_; + cri_ = 0; + } + else { + cri_->updateLabel(); + } } } } -/** - * @brief MasterElement::itemChange - * Réimplemente the protected method item change - * This is used to make connection/disconnection when this item is added/removed from a diagram - * @return - */ -QVariant MasterElement::itemChange(GraphicsItemChange change, const QVariant &value) { - if (change == QGraphicsItem::ItemSceneChange) { - if (diagram()) - disconnect(diagram(), SIGNAL(XRefPropertiesChanged(XRefProperties)), this, SLOT(reLink())); - } - else if (change == QGraphicsItem::ItemSceneHasChanged) { - if (diagram()) - connect(diagram(), SIGNAL(XRefPropertiesChanged(XRefProperties)), this, SLOT(reLink())); - } - return QetGraphicsItem::itemChange(change, value); -} - - /** * @brief MasterElement::updateLabel * update label of this element @@ -147,17 +131,3 @@ void MasterElement::updateLabel() { setTaggedText("label", "_", false): setTaggedText("label", label, true); } - -/** - * @brief MasterElement::reLink - * Relink all linked element. - * this method is notably used when xref properties changes - * for update the content of th e XRef - */ -void MasterElement::reLink() { - QList elmt_list = linkedElements(); - unlinkAllElements(); - foreach (Element *elmt, elmt_list) { - linkToElement(elmt); - } -} diff --git a/sources/qetgraphicsitem/masterelement.h b/sources/qetgraphicsitem/masterelement.h index cfec172c7..32d1170c5 100644 --- a/sources/qetgraphicsitem/masterelement.h +++ b/sources/qetgraphicsitem/masterelement.h @@ -31,18 +31,12 @@ class MasterElement : public CustomElement virtual void linkToElement(Element *elmt); virtual void unlinkAllElements(); virtual void unlinkElement(Element *elmt); - - protected: - QVariant itemChange(GraphicsItemChange change, const QVariant &value); signals: public slots: void updateLabel(); - private slots: - void reLink(); - private: CrossRefItem *cri_; };