Cross ref item, check properties for show power contacts or not.

Change properties in project is applied immediately to cross ref


git-svn-id: svn+ssh://svn.tuxfamily.org/svnroot/qet/qet/trunk@2985 bfdf4180-ca20-0410-9c96-a3a8aa849046
This commit is contained in:
blacksun
2014-04-12 12:51:25 +00:00
parent c7fe3f583b
commit ff14edda6b
4 changed files with 58 additions and 6 deletions

View File

@@ -35,10 +35,12 @@ CrossRefItem::CrossRefItem(Element *elmt, QGraphicsItem *parent) :
QGraphicsObject(parent), QGraphicsObject(parent),
element_ (elmt) element_ (elmt)
{ {
m_properties = elmt->diagram()->defaultXRefProperties();
setFlags(QGraphicsItem::ItemIsSelectable | QGraphicsItem::ItemIsMovable); setFlags(QGraphicsItem::ItemIsSelectable | QGraphicsItem::ItemIsMovable);
connect(elmt, SIGNAL(positionChange(QPointF)), this, SLOT(autoPos())); connect(elmt, SIGNAL(positionChange(QPointF)), this, SLOT(autoPos()));
connect(elmt, SIGNAL(elementInfoChange(DiagramContext)), this, SLOT(updateLabel())); connect(elmt, SIGNAL(elementInfoChange(DiagramContext)), this, SLOT(updateLabel()));
connect(elmt->diagram()->project(), SIGNAL(projectDiagramsOrderChanged(QETProject*,int,int)), this, SLOT(updateLabel())); connect(elmt->diagram()->project(), SIGNAL(projectDiagramsOrderChanged(QETProject*,int,int)), this, SLOT(updateLabel()));
connect(elmt->diagram(), SIGNAL(XRefPropertiesChanged(XRefProperties)), this, SLOT(updateLabel()));
updateLabel(); updateLabel();
} }
@@ -276,7 +278,7 @@ void CrossRefItem::fillCrossRef(QPainter &painter) {
//find each no and nc of connected element to element_ //find each no and nc of connected element to element_
foreach (Element *elmt, element_->linkedElements()) { foreach (Element *elmt, element_->linkedElements()) {
if (elmt->kindInformations()["type"].toString() == "power") continue; if (elmt->kindInformations()["type"].toString() == "power" && !m_properties.showPowerContact()) continue;
QString state = elmt->kindInformations()["state"].toString(); QString state = elmt->kindInformations()["state"].toString();
if (state == "NO") NO_list << elmt; if (state == "NO") NO_list << elmt;
else if (state == "NC") NC_list << elmt; else if (state == "NC") NC_list << elmt;

View File

@@ -19,6 +19,7 @@
#define CROSSREFITEM_H #define CROSSREFITEM_H
#include "qetgraphicsitem/qetgraphicsitem.h" #include "qetgraphicsitem/qetgraphicsitem.h"
#include"properties/xrefproperties.h"
class element; class element;
/** /**
@@ -63,6 +64,7 @@ class CrossRefItem : public QGraphicsObject
QRectF bounding_rect_ , text_rect_; QRectF bounding_rect_ , text_rect_;
QPicture drawing_; QPicture drawing_;
QPainterPath shape_path_; QPainterPath shape_path_;
XRefProperties m_properties;
}; };
#endif // CROSSREFITEM_H #endif // CROSSREFITEM_H

View File

@@ -54,15 +54,15 @@ void MasterElement::linkToElement(Element *elmt) {
connected_elements << elmt; connected_elements << elmt;
elmt->linkToElement(this); elmt->linkToElement(this);
if (elmt->kindInformations()["type"].toString() != "power") { if (elmt->kindInformations()["type"].toString() == "power" && !diagram()->defaultXRefProperties().showPowerContact()) return;
if (!cri_) {
if (!cri_) {
cri_ = new CrossRefItem(this); //create cross ref item if not yet cri_ = new CrossRefItem(this); //create cross ref item if not yet
diagram()->addItem(cri_); diagram()->addItem(cri_);
} }
connect(elmt, SIGNAL(positionChange(QPointF)), cri_, SLOT(updateLabel())); connect(elmt, SIGNAL(positionChange(QPointF)), cri_, SLOT(updateLabel()));
cri_->updateLabel(); cri_->updateLabel();
} }
}
} }
/** /**
@@ -92,8 +92,17 @@ void MasterElement::unlinkElement(Element *elmt) {
disconnect(elmt, SIGNAL(positionChange(QPointF)), cri_, SLOT(updateLabel())); disconnect(elmt, SIGNAL(positionChange(QPointF)), cri_, SLOT(updateLabel()));
bool delete_cri = true; bool delete_cri = true;
foreach(Element *elmt, linkedElements())
if (elmt->kindInformations()["type"].toString() != "power") delete_cri = false; //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 (delete_cri) {
diagram()->removeItem(cri_); diagram()->removeItem(cri_);
@@ -106,6 +115,25 @@ void MasterElement::unlinkElement(Element *elmt) {
} }
} }
/**
* @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 * @brief MasterElement::updateLabel
* update label of this element * update label of this element
@@ -119,3 +147,17 @@ void MasterElement::updateLabel() {
setTaggedText("label", "_", false): setTaggedText("label", "_", false):
setTaggedText("label", label, true); 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 <Element *> elmt_list = linkedElements();
unlinkAllElements();
foreach (Element *elmt, elmt_list) {
linkToElement(elmt);
}
}

View File

@@ -31,12 +31,18 @@ class MasterElement : public CustomElement
virtual void linkToElement(Element *elmt); virtual void linkToElement(Element *elmt);
virtual void unlinkAllElements(); virtual void unlinkAllElements();
virtual void unlinkElement(Element *elmt); virtual void unlinkElement(Element *elmt);
protected:
QVariant itemChange(GraphicsItemChange change, const QVariant &value);
signals: signals:
public slots: public slots:
void updateLabel(); void updateLabel();
private slots:
void reLink();
private: private:
CrossRefItem *cri_; CrossRefItem *cri_;
}; };