[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_;
 };


Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/