[qet] [2985] Cross ref item, check properties for show power contacts or not. |
[ Thread Index |
Date Index
| More lists.tuxfamily.org/qet Archives
]
Revision: 2985
Author: blacksun
Date: 2014-04-12 14:51:25 +0200 (Sat, 12 Apr 2014)
Log Message:
-----------
Cross ref item, check properties for show power contacts or not.
Change properties in project is applied immediately to cross ref
Modified Paths:
--------------
trunk/sources/qetgraphicsitem/crossrefitem.cpp
trunk/sources/qetgraphicsitem/crossrefitem.h
trunk/sources/qetgraphicsitem/masterelement.cpp
trunk/sources/qetgraphicsitem/masterelement.h
Modified: trunk/sources/qetgraphicsitem/crossrefitem.cpp
===================================================================
--- trunk/sources/qetgraphicsitem/crossrefitem.cpp 2014-04-12 01:26:19 UTC (rev 2984)
+++ trunk/sources/qetgraphicsitem/crossrefitem.cpp 2014-04-12 12:51:25 UTC (rev 2985)
@@ -35,10 +35,12 @@
QGraphicsObject(parent),
element_ (elmt)
{
+ m_properties = elmt->diagram()->defaultXRefProperties();
setFlags(QGraphicsItem::ItemIsSelectable | QGraphicsItem::ItemIsMovable);
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()));
updateLabel();
}
@@ -276,7 +278,7 @@
//find each no and nc of connected element to element_
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();
if (state == "NO") NO_list << elmt;
else if (state == "NC") NC_list << elmt;
Modified: trunk/sources/qetgraphicsitem/crossrefitem.h
===================================================================
--- trunk/sources/qetgraphicsitem/crossrefitem.h 2014-04-12 01:26:19 UTC (rev 2984)
+++ trunk/sources/qetgraphicsitem/crossrefitem.h 2014-04-12 12:51:25 UTC (rev 2985)
@@ -19,6 +19,7 @@
#define CROSSREFITEM_H
#include "qetgraphicsitem/qetgraphicsitem.h"
+#include"properties/xrefproperties.h"
class element;
/**
@@ -63,6 +64,7 @@
QRectF bounding_rect_ , text_rect_;
QPicture drawing_;
QPainterPath shape_path_;
+ XRefProperties m_properties;
};
#endif // CROSSREFITEM_H
Modified: trunk/sources/qetgraphicsitem/masterelement.cpp
===================================================================
--- trunk/sources/qetgraphicsitem/masterelement.cpp 2014-04-12 01:26:19 UTC (rev 2984)
+++ trunk/sources/qetgraphicsitem/masterelement.cpp 2014-04-12 12:51:25 UTC (rev 2985)
@@ -54,15 +54,15 @@
connected_elements << elmt;
elmt->linkToElement(this);
- if (elmt->kindInformations()["type"].toString() != "power") {
- if (!cri_) {
+ 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_);
}
connect(elmt, SIGNAL(positionChange(QPointF)), cri_, SLOT(updateLabel()));
cri_->updateLabel();
}
- }
}
/**
@@ -92,9 +92,18 @@
disconnect(elmt, SIGNAL(positionChange(QPointF)), cri_, SLOT(updateLabel()));
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) {
diagram()->removeItem(cri_);
delete cri_;
@@ -107,6 +116,25 @@
}
/**
+ * @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
*/
@@ -119,3 +147,17 @@
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 <Element *> elmt_list = linkedElements();
+ unlinkAllElements();
+ foreach (Element *elmt, elmt_list) {
+ linkToElement(elmt);
+ }
+}
Modified: trunk/sources/qetgraphicsitem/masterelement.h
===================================================================
--- trunk/sources/qetgraphicsitem/masterelement.h 2014-04-12 01:26:19 UTC (rev 2984)
+++ trunk/sources/qetgraphicsitem/masterelement.h 2014-04-12 12:51:25 UTC (rev 2985)
@@ -31,12 +31,18 @@
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_;
};