diff --git a/sources/qetgraphicsitem/crossrefitem.cpp b/sources/qetgraphicsitem/crossrefitem.cpp index 95b4cc254..2c9a29ce7 100644 --- a/sources/qetgraphicsitem/crossrefitem.cpp +++ b/sources/qetgraphicsitem/crossrefitem.cpp @@ -105,6 +105,7 @@ void CrossRefItem::updateLabel() { autoPos(); update(); + checkMustShow(); } /** @@ -467,3 +468,41 @@ void CrossRefItem::AddExtraInfo(QPainter &painter) { painter.restore(); } } + +/** + * @brief CrossRefItem::checkMustShow + * Check the propertie of this Xref for know if we + * must to be show or not + */ +void CrossRefItem::checkMustShow() { + + //We always show Xref when is displayed has contact + if (m_properties.displayHas() == XRefProperties::Contacts) { + this->show(); + return; + } + + //if Xref is display has cross and we must to don't show power contact, check it + else if (m_properties.displayHas() == XRefProperties::Cross && !m_properties.showPowerContact()) { + bool power = false; + foreach (Element *elmt, m_element->linkedElements()) { + // contact checked isn't power, show this xref and return; + if (elmt->kindInformations()["type"].toString() != "power") { + this->show(); + return; + } else { + power = true; + } + } + if (power) { + this->hide(); + return; + } + } + + //By default, show this Xref + else { + this->show(); + return; + } +} diff --git a/sources/qetgraphicsitem/crossrefitem.h b/sources/qetgraphicsitem/crossrefitem.h index 39f1f1fb9..5c15f8ae4 100644 --- a/sources/qetgraphicsitem/crossrefitem.h +++ b/sources/qetgraphicsitem/crossrefitem.h @@ -72,6 +72,7 @@ class CrossRefItem : public QGraphicsObject void drawContact (QPainter &painter, int flags, QString str = QString()); void fillCrossRef (QPainter &painter); void AddExtraInfo (QPainter &painter); + void checkMustShow (); //Attributes private: diff --git a/sources/qetgraphicsitem/masterelement.cpp b/sources/qetgraphicsitem/masterelement.cpp index a6827c970..e0be5514d 100644 --- a/sources/qetgraphicsitem/masterelement.cpp +++ b/sources/qetgraphicsitem/masterelement.cpp @@ -54,8 +54,6 @@ void MasterElement::linkToElement(Element *elmt) { connected_elements << elmt; elmt->linkToElement(this); - if (elmt->kindInformations()["type"].toString() == "power" && !diagram()->defaultXRefProperties().showPowerContact()) return; - if (!cri_) { cri_ = new CrossRefItem(this); //create cross ref item if not yet diagram()->addItem(cri_); @@ -89,31 +87,16 @@ void MasterElement::unlinkElement(Element *elmt) { connected_elements.removeOne(elmt); elmt->unlinkElement(this); - if (cri_) { - //update the graphics cross ref - disconnect(elmt, SIGNAL(positionChange(QPointF)), cri_, SLOT(updateLabel())); + //update the graphics cross ref + disconnect(elmt, SIGNAL(positionChange(QPointF)), cri_, SLOT(updateLabel())); - bool delete_cri = true; - - //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(); - } + if (linkedElements().isEmpty()) { + diagram()->removeItem(cri_); + delete cri_; + cri_ = 0; + } + else { + cri_->updateLabel(); } } }