improve behavior of Xref item (must show or not the power contact)

git-svn-id: svn+ssh://svn.tuxfamily.org/svnroot/qet/qet/trunk@3042 bfdf4180-ca20-0410-9c96-a3a8aa849046
This commit is contained in:
blacksun
2014-05-02 18:14:42 +00:00
parent 3252c1eda9
commit af22c5bc70
3 changed files with 49 additions and 26 deletions

View File

@@ -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;
}
}

View File

@@ -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:

View File

@@ -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,24 +87,10 @@ 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()));
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) {
if (linkedElements().isEmpty()) {
diagram()->removeItem(cri_);
delete cri_;
cri_ = 0;
@@ -115,7 +99,6 @@ void MasterElement::unlinkElement(Element *elmt) {
cri_->updateLabel();
}
}
}
}
/**