[no subject]

[ Thread Index | Date Index | More lists.tuxfamily.org/qet Archives ]


Modified Paths:
--------------
    trunk/sources/diagram.cpp
    trunk/sources/qetgraphicsitem/commentitem.cpp
    trunk/sources/qetgraphicsitem/crossrefitem.cpp
    trunk/sources/qetgraphicsitem/crossrefitem.h
    trunk/sources/qetgraphicsitem/customelement.cpp
    trunk/sources/qetgraphicsitem/dynamicelementtextitem.cpp
    trunk/sources/qetgraphicsitem/dynamicelementtextitem.h
    trunk/sources/qetgraphicsitem/element.cpp
    trunk/sources/qetgraphicsitem/element.h
    trunk/sources/qetgraphicsitem/elementtextitemgroup.cpp
    trunk/sources/qetgraphicsitem/elementtextitemgroup.h
    trunk/sources/qetgraphicsitem/masterelement.cpp
    trunk/sources/qetgraphicsitem/masterelement.h
    trunk/sources/qetgraphicsitem/reportelement.cpp
    trunk/sources/qetgraphicsitem/simpleelement.cpp
    trunk/sources/qetgraphicsitem/slaveelement.cpp
    trunk/sources/qetgraphicsitem/terminalelement.cpp


--lxyNAQ4yOVf
Content-Disposition: attachment; filename=r5216-blacksun.diff
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Modified: trunk/sources/diagram.cpp
===================================================================
--- trunk/sources/diagram.cpp	2018-01-12 22:04:27 UTC (rev 5215)
+++ trunk/sources/diagram.cpp	2018-01-19 12:17:20 UTC (rev 5216)
@@ -915,14 +915,15 @@
 			nvel_elmt = new GhostElement(element_location);
 		}
 		
-		// charge les caracteristiques de l'element
-		if (nvel_elmt -> fromXml(element_xml, table_adr_id, handle_inputs_rotation)) {
-			// ajout de l'element au schema et a la liste des elements ajoutes
-			addItem(nvel_elmt);
-			added_elements << nvel_elmt;
-		} else {
+		addItem(nvel_elmt);
+			//Loading fail, remove item from the diagram
+		if (!nvel_elmt->fromXml(element_xml, table_adr_id, handle_inputs_rotation))
+		{
+			removeItem(nvel_elmt);
 			delete nvel_elmt;
 			qDebug() << "Diagram::fromXml() : Le chargement des parametres d'un element a echoue";
+		} else {
+			added_elements << nvel_elmt;
 		}
 	}
 	

Modified: trunk/sources/qetgraphicsitem/commentitem.cpp
===================================================================
--- trunk/sources/qetgraphicsitem/commentitem.cpp	2018-01-12 22:04:27 UTC (rev 5215)
+++ trunk/sources/qetgraphicsitem/commentitem.cpp	2018-01-19 12:17:20 UTC (rev 5216)
@@ -58,7 +58,7 @@
 {
 	if (m_text_parent)
 		centerToParentBottom(this);
-	else
+	else if (m_element->diagram())
 	{
 		XRefProperties xrp = m_element->diagram()->project()->defaultXRefProperties(m_element->kindInformations()["type"].toString());
 		centerToBottomDiagram(this, m_element, xrp.offset());

Modified: trunk/sources/qetgraphicsitem/crossrefitem.cpp
===================================================================
--- trunk/sources/qetgraphicsitem/crossrefitem.cpp	2018-01-12 22:04:27 UTC (rev 5215)
+++ trunk/sources/qetgraphicsitem/crossrefitem.cpp	2018-01-19 12:17:20 UTC (rev 5216)
@@ -23,6 +23,8 @@
 #include "diagram.h"
 #include "qgraphicsitemutility.h"
 #include "assignvariables.h"
+#include "dynamicelementtextitem.h"
+#include "elementtextitemgroup.h"
 
 //define the height of the header.
 static int header = 5;
@@ -31,45 +33,96 @@
 
 /**
  * @brief CrossRefItem::CrossRefItem
- * Default constructor
- * @param elmt element to display the cross ref and also parent item.
- * elmt must be in a diagram
+ * @param elmt : element to display the cross ref
  */
+CrossRefItem::CrossRefItem(Element *elmt) :
+	QGraphicsObject(elmt),
+	m_element(elmt)
+{init();}
+
 /**
  * @brief CrossRefItem::CrossRefItem
- * @param elmt
+ * @param elmt : element to display the cross ref
+ * @param text : If the Xref must be displayed under a text, the text.
  */
-CrossRefItem::CrossRefItem(Element *elmt) :
-	QGraphicsObject(elmt),
-	m_element (elmt)
-{
-	Q_ASSERT_X(elmt->diagram(), "CrossRefItem constructor", "Parent element is not in a diagram");
+CrossRefItem::CrossRefItem(Element *elmt, DynamicElementTextItem *text) :
+	QGraphicsObject(text),
+	m_element (elmt),
+	m_text(text)
+{init();}
 
-	m_properties = elmt->diagram()->project()->defaultXRefProperties(elmt->kindInformations()["type"].toString());
-	setAcceptHoverEvents(true);
+/**
+ * @brief CrossRefItem::CrossRefItem
+ * @param elmt : element to display the cross ref
+ * @param group : If the Xref must be displayed under a group, the group.
+ */
+CrossRefItem::CrossRefItem(Element *elmt, ElementTextItemGroup *group) :
+	QGraphicsObject(group),
+	m_element(elmt),
+	m_group(group)
+{init();}
 
-	QETProject *project = elmt->diagram()->project();
-	connect(project, &QETProject::projectDiagramsOrderChanged, this, &CrossRefItem::updateLabel);
-	connect(project, &QETProject::diagramRemoved,              this, &CrossRefItem::updateLabel);
-	connect(project, &QETProject::XRefPropertiesChanged,       this, &CrossRefItem::updateProperties);
+/**
+ * @brief CrossRefItem::~CrossRefItem
+ * Default destructor
+ */
+CrossRefItem::~CrossRefItem() {}
 
-	//set specific behavior related to the parent item.
-	if(m_properties.snapTo() == XRefProperties::Bottom)
+/**
+ * @brief CrossRefItem::init
+ * init this Xref
+ */
+void CrossRefItem::init()
+{
+	if(!m_element->diagram())
 	{
-		connect(elmt, SIGNAL(yChanged()),        this, SLOT(autoPos()));
-		connect(elmt, SIGNAL(rotationChanged()), this, SLOT(autoPos()));
-	} else {
-		setTextParent();
+		qDebug() << "CrossRefItem constructor", "element is not in a diagram";
+		return;
 	}
+	
+	QETProject *project = m_element->diagram()->project();
+	connect(project, &QETProject::XRefPropertiesChanged, this, &CrossRefItem::updateProperties);
+	
+	m_properties = m_element->diagram()->project()->defaultXRefProperties(m_element->kindInformations()["type"].toString());
+	setAcceptHoverEvents(true);
+	
+	setUpConnection();
+	linkedChanged();
 	updateLabel();
 }
 
 /**
- * @brief CrossRefItem::~CrossRefItem
- * Default destructor
+ * @brief CrossRefItem::setUpConnection
+ * Set up several connection to keep up to date the Xref
  */
-CrossRefItem::~CrossRefItem() {}
+void CrossRefItem::setUpConnection()
+{
+	for(QMetaObject::Connection c : m_update_connection)
+		disconnect(c);
+	
+	m_update_connection.clear();
+	QETProject *project = m_element->diagram()->project();
+	bool set=false;
+		
+	if(m_properties.snapTo() == XRefProperties::Label && (m_text || m_group)) //Snap to label and parent is a text or a group
+		set=true;
+	else if(m_properties.snapTo() == XRefProperties::Bottom && !m_text && !m_group) //Snap to bottom of element and parent is the element itself
+	{
+		m_update_connection << connect(m_element, SIGNAL(yChanged()),        this, SLOT(autoPos()));
+		m_update_connection << connect(m_element, SIGNAL(rotationChanged()), this, SLOT(autoPos()));
+		set=true;
+	}
 
+	if(set)
+	{
+		m_update_connection << connect(project, &QETProject::projectDiagramsOrderChanged, this, &CrossRefItem::updateLabel);
+		m_update_connection << connect(project, &QETProject::diagramRemoved,              this, &CrossRefItem::updateLabel);
+		m_update_connection << connect(m_element, &Element::linkedElementChanged, this, &CrossRefItem::linkedChanged);
+		linkedChanged();
+		updateLabel();
+	}
+}
+
 /**
  * @brief CrossRefItem::boundingRect
  * @return the bounding rect of this item
@@ -115,25 +168,17 @@
 void CrossRefItem::updateProperties()
 {
 	XRefProperties xrp = m_element->diagram()->project()->defaultXRefProperties(m_element->kindInformations()["type"].toString());
-
+	
 	if (m_properties != xrp)
 	{
-		if (m_properties.snapTo() != xrp.snapTo())
-		{
-			if (xrp.snapTo() == XRefProperties::Bottom)
-			{
-				setParentItem(m_element);
-				connect(m_element, SIGNAL(yChanged()),        this, SLOT(autoPos()));
-				connect(m_element, SIGNAL(rotationChanged()), this, SLOT(autoPos()));
-			}
-			else
-			{
-				setTextParent();
-				disconnect(m_element, SIGNAL(yChanged()),        this, SLOT(autoPos()));
-				disconnect(m_element, SIGNAL(rotationChanged()), this, SLOT(autoPos()));
-			}
-		}
 		m_properties = xrp;
+		hide();
+		if(m_properties.snapTo() == XRefProperties::Label && (m_text || m_group)) //Snap to label and parent is text or group
+			show();
+		else if((m_properties.snapTo() == XRefProperties::Bottom && !m_text && !m_group)) //Snap to bottom of element is the parent
+			show();
+		
+		setUpConnection();
 		updateLabel();
 	}
 }
@@ -168,11 +213,12 @@
 			drawAsContacts(qp);
 	}
 
-	AddExtraInfo(qp, "comment");
-	AddExtraInfo(qp, "location");
+//	AddExtraInfo(qp, "comment");
+//	AddExtraInfo(qp, "location");
 	qp.end();
 
 	autoPos();
+	update();
 }
 
 /**
@@ -187,6 +233,34 @@
 		centerToParentBottom(this);
 }
 
+bool CrossRefItem::sceneEvent(QEvent *event)
+{
+		//By default when a QGraphicsItem is a child of a QGraphicsItemGroup
+		//all events are forwarded to group.
+		//We override it, when this Xref is in a group
+	if(m_group)
+	{
+		switch (event->type())
+		{
+			case QEvent::GraphicsSceneHoverEnter:
+				hoverEnterEvent(static_cast<QGraphicsSceneHoverEvent *>(event));
+				break;
+			case QEvent::GraphicsSceneHoverMove:
+				hoverMoveEvent(static_cast<QGraphicsSceneHoverEvent *>(event));
+				break;
+			case QEvent::GraphicsSceneHoverLeave:
+				hoverLeaveEvent(static_cast<QGraphicsSceneHoverEvent *>(event));
+				break;
+			case QEvent::GraphicsSceneMouseDoubleClick:
+				mouseDoubleClickEvent(static_cast<QGraphicsSceneMouseEvent *>(event));
+				break;
+		}
+		return true;
+	}
+	
+	return QGraphicsObject::sceneEvent(event);
+}
+
 /**
  * @brief CrossRefItem::paint
  * Paint this item
@@ -229,7 +303,7 @@
 void CrossRefItem::hoverEnterEvent(QGraphicsSceneHoverEvent *event)
 {
 	m_hovered_contact = nullptr;
-	QGraphicsObject::hoverEnterEvent(event);
+		QGraphicsObject::hoverEnterEvent(event);
 }
 
 void CrossRefItem::hoverMoveEvent(QGraphicsSceneHoverEvent *event)
@@ -293,6 +367,25 @@
 	QGraphicsObject::hoverLeaveEvent(event);
 }
 
+void CrossRefItem::linkedChanged()
+{
+	for(QMetaObject::Connection c : m_slave_connection)
+		disconnect(c);
+	
+	m_slave_connection.clear();
+	
+	if(!isVisible())
+		return;
+	
+	for(Element *elmt : m_element->linkedElements())
+	{
+		m_slave_connection << connect(elmt, &Element::xChanged, this, &CrossRefItem::updateLabel);
+		m_slave_connection << connect(elmt, &Element::yChanged, this, &CrossRefItem::updateLabel);
+	}
+	
+	updateLabel();
+}
+
 /**
  * @brief CrossRefItem::buildHeaderContact
  * Draw the QPicture of m_hdr_no_ctc and m_hdr_nc_ctc
@@ -719,17 +812,6 @@
 }
 
 /**
- * @brief CrossRefItem::setTextParent
- * Set the text field tagged "label" of m_element
- * parent of this item
- */
-void CrossRefItem::setTextParent() {
-	ElementTextItem *eti = m_element->taggedText("label");
-	if (eti) setParentItem(eti);
-	else qDebug() << "CrossRefItem,no text tagged 'label' found to set has parent";
-}
-
-/**
  * @brief CrossRefItem::NOElements
  * @return The linked elements of @m_element wich are open or switch contact.
  * If linked element is a power contact, xref propertie is set to don't show power contact

Modified: trunk/sources/qetgraphicsitem/crossrefitem.h
===================================================================
--- trunk/sources/qetgraphicsitem/crossrefitem.h	2018-01-12 22:04:27 UTC (rev 5215)
+++ trunk/sources/qetgraphicsitem/crossrefitem.h	2018-01-19 12:17:20 UTC (rev 5216)
@@ -23,6 +23,8 @@
 #include <QPicture>
 
 class Element;
+class DynamicElementTextItem;
+class ElementTextItemGroup;
 
 /**
  * @brief The CrossRefItem class
@@ -42,8 +44,14 @@
 		//Methods
 	public:
 		explicit CrossRefItem(Element *elmt);
+		explicit CrossRefItem(Element *elmt, DynamicElementTextItem *text);
+		explicit CrossRefItem(Element *elmt, ElementTextItemGroup *group);
 		~CrossRefItem() override;
-
+	private:
+		void init();
+		void setUpConnection();
+	
+	public:
 		enum { Type = UserType + 1009 };
 		int type() const override { return Type; }
 
@@ -68,6 +76,7 @@
 		void autoPos	   ();
 
 	protected:
+		bool sceneEvent(QEvent *event) override;
 		void paint (QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override;
 		void mouseDoubleClickEvent (QGraphicsSceneMouseEvent * event ) override;
 		void hoverEnterEvent(QGraphicsSceneHoverEvent *event) override;
@@ -75,6 +84,7 @@
 		void hoverLeaveEvent(QGraphicsSceneHoverEvent *event) override;
 
 	private:
+		void linkedChanged();
 		void buildHeaderContact		();
 		void setUpCrossBoundingRect (QPainter &painter);
 		void drawAsCross			(QPainter &painter);
@@ -82,7 +92,6 @@
 		QRectF drawContact			(QPainter &painter, int flags, Element *elmt);
 		void fillCrossRef			(QPainter &painter);
 		void AddExtraInfo			(QPainter &painter, QString);
-		void setTextParent			();
 		QList<Element *> NOElements() const;
 		QList<Element *> NCElements() const;
 
@@ -96,7 +105,10 @@
 		int			   m_drawed_contacts;
 		QMap <Element *, QRectF> m_hovered_contacts_map;
 		Element *m_hovered_contact = nullptr;
-
+		DynamicElementTextItem *m_text = nullptr;
+		ElementTextItemGroup *m_group = nullptr;
+		QList <QMetaObject::Connection> m_slave_connection;
+		QList <QMetaObject::Connection> m_update_connection;
 };
 
 #endif // CROSSREFITEM_H

Modified: trunk/sources/qetgraphicsitem/customelement.cpp
===================================================================
--- trunk/sources/qetgraphicsitem/customelement.cpp	2018-01-12 22:04:27 UTC (rev 5215)
+++ trunk/sources/qetgraphicsitem/customelement.cpp	2018-01-19 12:17:20 UTC (rev 5216)
@@ -737,33 +737,33 @@
 		!QET::attributeIsAnInteger(dom_element, "size", &size)
 	) return(false);
 	
-		//The text have a tagg, we create an element text item
-	if (dom_element.attribute("tagg", "none") != "none")
-	{
-		ElementTextItem *eti = new ElementTextItem(dom_element.attribute("text"), this);
-		eti -> setFont(QETApp::diagramTextsFont(size));
-		eti -> setTagg(dom_element.attribute("tagg", "other"));
-		m_element_informations.addValue(dom_element.attribute("tagg", "other"), dom_element.attribute("text"));
+//		//The text have a tagg, we create an element text item
+//	if (dom_element.attribute("tagg", "none") != "none")
+//	{
+//		ElementTextItem *eti = new ElementTextItem(dom_element.attribute("text"), this);
+//		eti -> setFont(QETApp::diagramTextsFont(size));
+//		eti -> setTagg(dom_element.attribute("tagg", "other"));
+//		m_element_informations.addValue(dom_element.attribute("tagg", "other"), dom_element.attribute("text"));
 		
-		// position the text field
-		eti -> setOriginalPos(QPointF(pos_x, pos_y));
-		eti -> setPos(pos_x, pos_y);
+//		// position the text field
+//		eti -> setOriginalPos(QPointF(pos_x, pos_y));
+//		eti -> setPos(pos_x, pos_y);
 		
-		// rotation of the text field
-		qreal original_rotation_angle = 0.0;
-		QET::attributeIsAReal(dom_element, "rotation", &original_rotation_angle);
-		eti -> setOriginalRotationAngle(original_rotation_angle);
-		eti -> setRotationAngle(original_rotation_angle);
+//		// rotation of the text field
+//		qreal original_rotation_angle = 0.0;
+//		QET::attributeIsAReal(dom_element, "rotation", &original_rotation_angle);
+//		eti -> setOriginalRotationAngle(original_rotation_angle);
+//		eti -> setRotationAngle(original_rotation_angle);
 		
-		// behavior when the parent element is rotated
-		eti -> setFollowParentRotations(dom_element.attribute("rotate") == "true");
+//		// behavior when the parent element is rotated
+//		eti -> setFollowParentRotations(dom_element.attribute("rotate") == "true");
 		
-		m_texts << eti;
+//		m_texts << eti;
 		
-		connect(eti, &ElementTextItem::diagramTextChanged, this, &Element::textItemChanged);
+//		connect(eti, &ElementTextItem::diagramTextChanged, this, &Element::textItemChanged);
 		
-		return(eti);
-	}
+//		return(eti);
+//	}
 		//The text haven't got a tagg, so we convert it to a dynamic text item
 		//and store it to m_converted_text_from_xml_description, instead of m_dynamic_text_list
 		//because these dynamic text need post treatement
@@ -773,8 +773,13 @@
 		deti->setText(dom_element.attribute("text", "_"));
 		deti->setFontSize(dom_element.attribute("size", QString::number(9)).toInt());
 		deti->setRotation(dom_element.attribute("rotation", QString::number(0)).toDouble());
+
+		if(dom_element.attribute("tagg", "none") != "none")
+		{
+			deti->setTextFrom(DynamicElementTextItem::ElementInfo);
+			deti->setInfoName(dom_element.attribute("tagg"));
+		}
 		
-		
 			//the origin transformation point of PartDynamicTextField is the top left corner, no matter the font size
 			//The origin transformation point of ElementTextItem is the middle of left edge, and so by definition, change with the size of the font
 			//We need to use a QMatrix to find the pos of this text from the saved pos of text item 

Modified: trunk/sources/qetgraphicsitem/dynamicelementtextitem.cpp
===================================================================
--- trunk/sources/qetgraphicsitem/dynamicelementtextitem.cpp	2018-01-12 22:04:27 UTC (rev 5215)
+++ trunk/sources/qetgraphicsitem/dynamicelementtextitem.cpp	2018-01-19 12:17:20 UTC (rev 5216)
@@ -24,6 +24,7 @@
 #include "terminal.h"
 #include "conductor.h"
 #include "elementtextitemgroup.h"
+#include "crossrefitem.h"
 
 #include <QDomDocument>
 #include <QDomElement>
@@ -41,7 +42,6 @@
 	setFont(QETApp::diagramTextsFont(9));
 	setText(tr("Texte"));
     setParentItem(parent_element);
-	
 	connect(this, &DynamicElementTextItem::textEdited, [this](const QString &old_str, const QString &new_str)
 	{
 		if(this->m_parent_element && this->m_parent_element->diagram())
@@ -52,36 +52,6 @@
 		}
 		
 	});
-
-		//If the parent is slave, we keep aware about the changement of master.
-	if(parent_element->linkType() == Element::Slave)
-	{
-		connect(parent_element, &Element::linkedElementChanged, this, &DynamicElementTextItem::masterChanged);
-			//The parent is already linked, wa call master changed for init the connection
-		if(!parent_element->linkedElements().isEmpty())
-			masterChanged();
-	}
-	if(parent_element->linkType() & Element::AllReport)
-	{
-			//Get the report formula, and add connection to keep up to date the formula.
-		if (parent_element->diagram() && parent_element->diagram()->project())
-		{
-			m_report_formula = parent_element->diagram()->project()->defaultReportProperties();
-			m_report_formula_con = connect(parent_element->diagram()->project(), &QETProject::reportPropertiesChanged, this, &DynamicElementTextItem::reportFormulaChanged);
-		}
-
-			//Add connection to keep up to date the status of the element linked to the parent folio report of this text.
-		connect(parent_element, &Element::linkedElementChanged, this, &DynamicElementTextItem::reportChanged);
-			//The parent is already linked, we call reportChanged for init the connection
-		if(!parent_element->linkedElements().isEmpty())
-			reportChanged();
-		
-			//Add connection to keep up date the conductors added or removed to the parent folio report element
-		connect(parent_element->terminals().first(), &Terminal::conductorWasAdded, this, &DynamicElementTextItem::conductorWasAdded);
-		connect(parent_element->terminals().first(), &Terminal::conductorWasRemoved, this, &DynamicElementTextItem::conductorWasRemoved);
-			//Get a conductor in the potential
-		setPotentialConductor();
-	}
 }
 
 DynamicElementTextItem::~DynamicElementTextItem()
@@ -168,43 +138,34 @@
 	QGraphicsTextItem::setRotation(dom_elmt.attribute("rotation", QString::number(0)).toDouble());
 	setFont(QETApp::diagramTextsFont(dom_elmt.attribute("font_size", QString::number(9)).toInt()));
 	m_uuid = QUuid(dom_elmt.attribute("uuid", QUuid::createUuid().toString()));
-	m_frame = dom_elmt.attribute("frame", "false") == "true"? true : false;
+	setFrame(dom_elmt.attribute("frame", "false") == "true"? true : false);
 	
+		//Text from
 	QMetaEnum me = textFromMetaEnum();
-	m_text_from = DynamicElementTextItem::TextFrom(me.keyToValue(dom_elmt.attribute("text_from").toStdString().data()));
-	if(m_text_from == ElementInfo || m_text_from == CompositeText)
-	{
-		setNoEditable(true);
-			//We don't made the connection below if the parent element is a report, because report haven't got info.
-		if (!(parentElement()->linkType() & Element::AllReport) && elementUseForInfo()) 
-			connect(elementUseForInfo(), &Element::elementInfoChange, this, &DynamicElementTextItem::elementInfoChanged);
-	}
-	else {
-		setNoEditable(false);
-	}
+	setTextFrom(DynamicElementTextItem::TextFrom(me.keyToValue(dom_elmt.attribute("text_from").toStdString().data())));
 
 		//Text
     QDomElement dom_text = dom_elmt.firstChildElement("text");
 	if (!dom_text.isNull())
-	{
-		m_text = dom_text.text();
-		setPlainText(m_text);
-	}
+		setText(dom_text.text());
 	
 		//Info name
 	QDomElement dom_info_name = dom_elmt.firstChildElement("info_name");
 	if(!dom_info_name.isNull())
-		m_info_name = dom_info_name.text();
+		setInfoName(dom_info_name.text());
 	
 		//Composite text
 	QDomElement dom_comp_text = dom_elmt.firstChildElement("composite_text");
 	if(!dom_comp_text.isNull())
-		m_composite_text = dom_comp_text.text();
+		setCompositeText(dom_comp_text.text());
 
 		//Color
 	QDomElement dom_color = dom_elmt.firstChildElement("color");
 	if(!dom_color.isNull())
 		setColor(QColor(dom_color.text()));
+	
+		//Force the update of the displayed text
+	setTextFrom(m_text_from);
 }
 
 /**
@@ -224,10 +185,13 @@
  */
 ElementTextItemGroup *DynamicElementTextItem::parentGroup() const
 {
-	if(group())
-		return dynamic_cast<ElementTextItemGroup *>(group());
-	else
-		return nullptr;
+	if(parentItem())
+	{
+		if(ElementTextItemGroup *grp = dynamic_cast<ElementTextItemGroup *>(parentItem()))
+		   return grp;
+	}
+	
+	return nullptr;
 }
 
 /**
@@ -281,8 +245,16 @@
 	if ((m_text_from == ElementInfo && m_info_name == "label") ||
 		(m_text_from == CompositeText && m_composite_text.contains("%{label}")))
 	{
-		setupFormulaConnection();
-		updateLabel();
+		if(m_parent_element.data()->linkType() & Element::AllReport)
+		{
+			updateReportFormulaConnection();
+			updateReportText();
+		}
+		else
+		{
+			setupFormulaConnection();
+			updateLabel();
+		}
 	}
 }
 
@@ -301,15 +273,21 @@
  */
 void DynamicElementTextItem::setTextFrom(DynamicElementTextItem::TextFrom text_from)
 {
+	if(m_text_from == text_from)
+		return;
+	
 	setNoEditable(text_from == UserText? false : true);
 	clearFormulaConnection();
 	
-	if(text_from == UserText)
+	TextFrom old_text_from = m_text_from;
+	m_text_from = text_from;
+	
+	if(m_text_from == UserText)
 	{
 		setPlainText(m_text);
 		disconnect(m_parent_element.data(), &Element::elementInfoChange, this, &DynamicElementTextItem::elementInfoChanged);
 	}
-	else if (text_from == ElementInfo && elementUseForInfo())
+	else if (m_text_from == ElementInfo && elementUseForInfo())
 	{
 		if(m_info_name == "label")
 		{
@@ -319,10 +297,10 @@
 		else
 			setPlainText(elementUseForInfo()->elementInformations().value(m_info_name).toString());
 		
-		if(m_text_from == UserText)
+		if(old_text_from == UserText)
 			connect(elementUseForInfo(), &Element::elementInfoChange, this, &DynamicElementTextItem::elementInfoChanged);
 	}
-	else if (text_from == CompositeText && elementUseForInfo())
+	else if (m_text_from == CompositeText && elementUseForInfo())
 	{
 		if(m_composite_text.contains("%{label}"))
 		{
@@ -332,15 +310,15 @@
 		else
 			setPlainText(autonum::AssignVariables::replaceVariable(m_composite_text, elementUseForInfo()->elementInformations()));
 		
-		if(m_text_from == UserText)
+		if(old_text_from == UserText)
 			connect(elementUseForInfo(), &Element::elementInfoChange, this, &DynamicElementTextItem::elementInfoChanged);
 	}
-	
-	if(m_text_from != text_from)
-	{
-		m_text_from = text_from;
-		emit textFromChanged(m_text_from);
-	}
+		
+	if(m_parent_element.data()->linkType() == Element::Master ||
+	   m_parent_element.data()->linkType() == Element::Slave)
+		updateXref();
+		
+	emit textFromChanged(m_text_from);
 }
 
 /**
@@ -372,9 +350,13 @@
 {
 	QString old_info_name = m_info_name;
 	m_info_name = info_name;
+
 	
 	if(old_info_name == "label")
+	{
 		clearFormulaConnection();
+		updateXref();
+	}
 
 	if (m_parent_element && (m_parent_element.data()->linkType() & Element::AllReport)) //special treatment for report
 	{
@@ -393,9 +375,10 @@
 		}
 	}
 	else if (m_info_name == "label" && elementUseForInfo())
-	{
+	{	
 		setupFormulaConnection();
 		updateLabel();
+		updateXref();
 	}
 	else if(elementUseForInfo()) {
 		setPlainText(elementUseForInfo()->elementInformations().value(info_name).toString());
@@ -423,7 +406,10 @@
 	m_composite_text = text;
 	
 	if(old_composite_text.contains("%{label}"))
+	{
 		clearFormulaConnection();
+		updateXref();
+	}
 
 	if (m_parent_element && (m_parent_element.data()->linkType() & Element::AllReport)) //special treatment for report
 	{
@@ -444,6 +430,7 @@
 	{
 		setupFormulaConnection();
 		updateLabel();
+		updateXref();
 	}
 	else
 	{
@@ -494,6 +481,8 @@
 	{
 		setDefaultTextColor(m_user_color);
 		m_user_color = QColor(); //m_user_color is now invalid
+		if(m_slave_Xref_item)
+			m_slave_Xref_item->setDefaultTextColor(Qt::black);
 	}
 	
 	DiagramTextItem::mousePressEvent(event);
@@ -561,44 +550,7 @@
 void DynamicElementTextItem::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event)
 {
 	DiagramTextItem::mouseDoubleClickEvent(event);
-	
-	if(!parentElement())
-		return;
-	
-	Element *zoomed_element = nullptr;
-	
-	if(parentElement()->linkType() == Element::Slave && m_master_element)
-	{
-		if ((m_text_from == ElementInfo && m_info_name == "label") ||
-			(m_text_from == CompositeText && m_composite_text.contains("%{label}")))
-			zoomed_element = m_master_element.data();
-	}
-	if((parentElement()->linkType() & Element::AllReport) && m_other_report)
-	{
-		if((m_text_from == ElementInfo && m_info_name == "label") ||
-		   (m_text_from == CompositeText && m_composite_text.contains("%{label}")))
-			zoomed_element = m_other_report.data();
-	}
-	
-	if(zoomed_element)
-	{
-			//Unselect and ungrab mouse to prevent unwanted
-			//move when linked element is in the same scene of this.
-		setSelected(false);
-		ungrabMouse();
-		
-		if(scene() != zoomed_element->scene())
-			zoomed_element->diagram()->showMe();
-		zoomed_element->setSelected(true);
-		
-			//Zoom to the element
-		for(QGraphicsView *view : zoomed_element->scene()->views())
-		{
-			QRectF fit = zoomed_element->sceneBoundingRect();
-			fit.adjust(-200, -200, 200, 200);
-			view->fitInView(fit, Qt::KeepAspectRatioByExpanding);
-		}
-	}
+	zoomToLinkedElement();
 }
 
 /**
@@ -617,27 +569,15 @@
 	if(isSelected())
 		return;
 	
-	Element::kind type = parentElement()->linkType();
-	bool blue = false;
-	
-	if ((type & Element::AllReport) && m_other_report)
+	if ((parentElement()->linkType() & Element::AllReport) && m_other_report)
 	{
 		if( (m_text_from == ElementInfo && m_info_name == "label") ||
 			(m_text_from == CompositeText && m_composite_text.contains("%{label}")) )
-			blue = true;
+		{
+			m_user_color = color();
+			setDefaultTextColor(Qt::blue);
+		}
 	}
-	else if (type == Element::Slave && m_master_element)
-	{
-		if( (m_text_from == ElementInfo && m_info_name == "label") ||
-			(m_text_from == CompositeText && m_composite_text.contains("%{label}")) )
-			blue = true;
-	}
-
-	if(blue)
-	{
-		m_user_color = color();
-		setDefaultTextColor(Qt::blue);
-	}
 }
 
 /**
@@ -696,6 +636,89 @@
 	}
 }
 
+QVariant DynamicElementTextItem::itemChange(QGraphicsItem::GraphicsItemChange change, const QVariant &value)
+{
+		//The first time this text is added to a scene, we make several cheking and connection
+		//according to the link type of the parent element
+	if(change == QGraphicsItem::ItemSceneHasChanged && m_first_scene_change)
+	{
+		if(m_parent_element.isNull())
+			return QGraphicsObject::itemChange(change, value);
+		
+			//If the parent is slave, we keep aware about the changement of master.
+		if(m_parent_element.data()->linkType() == Element::Slave)
+		{
+			connect(m_parent_element.data(), &Element::linkedElementChanged, this, &DynamicElementTextItem::masterChanged);
+				//The parent is already linked, wa call master changed for init the connection
+			if(!m_parent_element.data()->linkedElements().isEmpty())
+				masterChanged();
+		}
+		else if(m_parent_element.data()->linkType() & Element::AllReport)
+		{
+				//Get the report formula, and add connection to keep up to date the formula.
+			if (m_parent_element.data()->diagram() && m_parent_element.data()->diagram()->project())
+			{
+				m_report_formula = m_parent_element.data()->diagram()->project()->defaultReportProperties();
+				m_report_formula_con = connect(m_parent_element.data()->diagram()->project(), &QETProject::reportPropertiesChanged, this, &DynamicElementTextItem::reportFormulaChanged);
+			}
+			
+				//Add connection to keep up to date the status of the element linked to the parent folio report of this text.
+			connect(m_parent_element.data(), &Element::linkedElementChanged, this, &DynamicElementTextItem::reportChanged);
+				//The parent is already linked, we call reportChanged for init the connection
+			if(!m_parent_element.data()->linkedElements().isEmpty())
+				reportChanged();
+			
+			if(m_parent_element.data()->terminals().size())
+			{
+					//Add connection to keep up date the conductors added or removed to the parent folio report element
+				connect(m_parent_element.data()->terminals().first(), &Terminal::conductorWasAdded, this, &DynamicElementTextItem::conductorWasAdded);
+				connect(m_parent_element.data()->terminals().first(), &Terminal::conductorWasRemoved, this, &DynamicElementTextItem::conductorWasRemoved);
+			}
+				//Get a conductor in the potential
+			setPotentialConductor();
+		}
+		else if(m_parent_element.data()->linkType() == Element::Master)
+		{
+			connect(m_parent_element.data(), &Element::linkedElementChanged, this, &DynamicElementTextItem::updateXref);
+			if(m_parent_element.data()->diagram())
+				connect(m_parent_element.data()->diagram()->project(), &QETProject::XRefPropertiesChanged, this, &DynamicElementTextItem::updateXref);
+			if(!m_parent_element.data()->linkedElements().isEmpty())
+				updateXref();
+		}
+		
+		m_first_scene_change = false;
+		return QGraphicsObject::itemChange(change, value);
+	}
+	else if (change == QGraphicsItem::ItemParentHasChanged)
+	{
+		updateXref();
+		updateXref();
+	}
+	
+	return QGraphicsObject::itemChange(change, value);
+}
+
+bool DynamicElementTextItem::sceneEventFilter(QGraphicsItem *watched, QEvent *event)
+{
+	if(watched != m_slave_Xref_item)
+		return false;
+	
+	if(event->type() == QEvent::GraphicsSceneHoverEnter) {
+		m_slave_Xref_item->setDefaultTextColor(Qt::blue);
+		return true;
+	}
+	else if(event->type() == QEvent::GraphicsSceneHoverLeave) {
+		m_slave_Xref_item->setDefaultTextColor(Qt::black);
+		return true;
+	}
+	else if(event->type() == QEvent::GraphicsSceneMouseDoubleClick) {
+		zoomToLinkedElement();
+		return true;
+	}
+	
+	return false;
+}
+
 void DynamicElementTextItem::elementInfoChanged()
 {
 	DiagramContext dc;
@@ -734,6 +757,7 @@
 		final_text = m_text;
 	
 	setPlainText(final_text);
+	emit plainTextChanged();
 }
 
 /**
@@ -745,7 +769,11 @@
 {
 		//First we remove the old connection
 	if(!m_master_element.isNull() && (m_text_from == ElementInfo || m_text_from == CompositeText))
+	{
 		disconnect(m_master_element.data(), &Element::elementInfoChange, this, &DynamicElementTextItem::elementInfoChanged);
+		m_master_element.clear();
+		updateXref();
+	}
 	
 	if(elementUseForInfo())
 	{
@@ -752,6 +780,8 @@
 		m_master_element = elementUseForInfo();
 		if(m_text_from == ElementInfo || m_text_from == CompositeText)
 			connect(m_master_element.data(), &Element::elementInfoChange, this, &DynamicElementTextItem::elementInfoChanged);
+		
+		updateXref();
 	}
 		
 		//Because master changed we update this text
@@ -916,6 +946,9 @@
 
 void DynamicElementTextItem::updateReportFormulaConnection()
 {
+	if(!m_parent_element.data()->linkType() & Element::AllReport)
+		return;
+	
 	removeConnectionForReportFormula(m_report_formula);
 	setConnectionForReportFormula(m_report_formula);
 	updateReportText();
@@ -926,7 +959,10 @@
  * This function is only use when this text is owned by a report, and this text have for info the Label.
  */
 void DynamicElementTextItem::updateReportText()
-{	
+{
+	if(!m_parent_element.data()->linkType() & Element::AllReport)
+		return;
+	
 	if (m_text_from == ElementInfo && m_info_name == "label" && m_other_report)
 	{
 		Element *elmt = m_other_report.data();
@@ -1003,6 +1039,9 @@
 {
 	if(parentElement() && (parentElement()->linkType() & Element::AllReport))
 	{
+		if(parentElement()->terminals().isEmpty())
+			return;
+		
 		/*
 		 * #First case, if m_watched_conductor is a conductor of the parent report, everything is ok
 		 * #Second case, if the conductors list of parent report element is not empty,
@@ -1095,3 +1134,142 @@
 	return string;
 }
 
+/**
+ * @brief DynamicElementTextItem::zoomToLinkedElement
+ * If the parent element is a folio report or a slave element,
+ * and is linked, zoom to the linked element
+ */
+void DynamicElementTextItem::zoomToLinkedElement()
+{
+	if(!parentElement())
+		return;
+	
+	Element *zoomed_element = nullptr;
+	
+	if(parentElement()->linkType() == Element::Slave && m_master_element)
+	{
+		if ((m_text_from == ElementInfo && m_info_name == "label") ||
+			(m_text_from == CompositeText && m_composite_text.contains("%{label}")))
+			zoomed_element = m_master_element.data();
+	}
+	if((parentElement()->linkType() & Element::AllReport) && m_other_report)
+	{
+		if((m_text_from == ElementInfo && m_info_name == "label") ||
+		   (m_text_from == CompositeText && m_composite_text.contains("%{label}")))
+			zoomed_element = m_other_report.data();
+	}
+	
+	if(zoomed_element)
+	{
+			//Unselect and ungrab mouse to prevent unwanted
+			//move when linked element is in the same scene of this.
+		setSelected(false);
+		ungrabMouse();
+		
+		if(scene() != zoomed_element->scene())
+			zoomed_element->diagram()->showMe();
+		zoomed_element->setSelected(true);
+		
+			//Zoom to the element
+		for(QGraphicsView *view : zoomed_element->scene()->views())
+		{
+			QRectF fit = zoomed_element->sceneBoundingRect();
+			fit.adjust(-200, -200, 200, 200);
+			view->fitInView(fit, Qt::KeepAspectRatioByExpanding);
+		}
+	}
+}
+
+/**
+ * @brief DynamicElementTextItem::updateXref
+ * Create or delete the Xref according to the current properties of the project
+ */
+void DynamicElementTextItem::updateXref()
+{
+	if(diagram())
+	{
+		if(m_parent_element.data()->linkType() == Element::Master)
+		{
+			XRefProperties xrp = diagram()->project()->defaultXRefProperties(m_parent_element.data()->kindInformations()["type"].toString());
+			
+			if(m_text_from == DynamicElementTextItem::ElementInfo &&
+			   m_info_name == "label" &&
+			   !m_parent_element.data()->linkedElements().isEmpty() &&
+			   xrp.snapTo() == XRefProperties::Label)
+			{
+				//For add a Xref, this text must not be in a group
+				if(!parentGroup())
+				{
+					if(!m_Xref_item)
+						m_Xref_item = new CrossRefItem(m_parent_element.data(), this);
+					return;
+				}
+			}
+		}
+		else if (m_parent_element.data()->linkType() == Element::Slave)
+		{
+			if(m_master_element && !parentGroup() &&
+			   (
+				   (m_text_from == DynamicElementTextItem::ElementInfo && m_info_name == "label") ||
+				   (m_text_from == DynamicElementTextItem::CompositeText && m_composite_text.contains("%{label}"))
+			   )
+			  )
+			{
+				XRefProperties xrp = diagram()->project()->defaultXRefProperties(m_master_element.data()->kindInformations()["type"].toString());
+				QString xref_label = xrp.slaveLabel();
+				xref_label = autonum::AssignVariables::formulaToLabel(xref_label, m_master_element.data()->rSequenceStruct(), m_master_element.data()->diagram(), m_master_element.data());
+				
+				if(!m_slave_Xref_item)
+				{
+					m_slave_Xref_item = new QGraphicsTextItem(xref_label, this);
+					m_slave_Xref_item->setFont(QETApp::diagramTextsFont(5));
+					m_slave_Xref_item->installSceneEventFilter(this);
+					
+					m_update_slave_Xref_connection << connect(m_master_element.data(), &Element::xChanged,                       this, &DynamicElementTextItem::updateXref);
+					m_update_slave_Xref_connection << connect(m_master_element.data(), &Element::yChanged,                       this, &DynamicElementTextItem::updateXref);
+					m_update_slave_Xref_connection << connect(m_master_element.data(), &Element::elementInfoChange,              this, &DynamicElementTextItem::updateXref);
+					m_update_slave_Xref_connection << connect(diagram()->project(),    &QETProject::projectDiagramsOrderChanged, this, &DynamicElementTextItem::updateXref);
+					m_update_slave_Xref_connection << connect(diagram()->project(),    &QETProject::diagramRemoved,              this, &DynamicElementTextItem::updateXref);
+					m_update_slave_Xref_connection << connect(diagram()->project(),    &QETProject::XRefPropertiesChanged,       this, &DynamicElementTextItem::updateXref);
+				}
+				else
+					m_slave_Xref_item->setPlainText(xref_label);
+				
+				QRectF r = boundingRect();
+				QPointF pos(r.center().x() - m_slave_Xref_item->boundingRect().width()/2,
+							r.bottom());
+				m_slave_Xref_item->setPos(pos);
+				return;
+			}
+		}
+	}
+
+		//There is no reason to have a xref, we delete it if exist
+	if(m_Xref_item)
+	{
+		delete m_Xref_item;
+		m_Xref_item = nullptr;
+	}
+	
+	if(m_slave_Xref_item)
+	{
+		delete m_slave_Xref_item;
+		m_slave_Xref_item = nullptr;
+		m_update_slave_Xref_connection.clear();
+	}
+}
+
+void DynamicElementTextItem::setPlainText(const QString &text)
+{
+	DiagramTextItem::setPlainText(text);
+	if(m_Xref_item)
+		m_Xref_item->autoPos();
+	else if(m_slave_Xref_item)
+	{
+		QRectF r = boundingRect();
+		QPointF pos(r.center().x() - m_slave_Xref_item->boundingRect().width()/2,
+					r.bottom());
+		m_slave_Xref_item->setPos(pos);
+	}
+}
+

Modified: trunk/sources/qetgraphicsitem/dynamicelementtextitem.h
===================================================================
--- trunk/sources/qetgraphicsitem/dynamicelementtextitem.h	2018-01-12 22:04:27 UTC (rev 5215)
+++ trunk/sources/qetgraphicsitem/dynamicelementtextitem.h	2018-01-19 12:17:20 UTC (rev 5216)
@@ -19,6 +19,7 @@
 #define DYNAMICELEMENTTEXTITEM_H
 
 #include "diagramtextitem.h"
+#include "element.h"
 #include <QUuid>
 #include <QPointer>
 
@@ -25,6 +26,7 @@
 class Element;
 class Conductor;
 class ElementTextItemGroup;
+class CrossRefItem;
 
 /**
  * @brief The DynamicElementTextItem class
@@ -62,6 +64,7 @@
 		void infoNameChanged(QString info);
 		void compositeTextChanged(QString text);
 		void frameChanged(bool frame);
+		void plainTextChanged();
 	
 	public:
 		DynamicElementTextItem(Element *parent_element);
@@ -92,6 +95,8 @@
 		void setFrame(const bool frame);
 		bool frame() const;
 		QUuid uuid() const;
+		void updateXref();
+		void setPlainText(const QString &text);
 		
 	protected:
 		void mousePressEvent(QGraphicsSceneMouseEvent *event) override;
@@ -101,6 +106,8 @@
 		void hoverEnterEvent(QGraphicsSceneHoverEvent *event) override;
 		void hoverLeaveEvent(QGraphicsSceneHoverEvent *event) override;
 		void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override;
+		QVariant itemChange(GraphicsItemChange change, const QVariant &value) override;
+		bool sceneEventFilter(QGraphicsItem *watched, QEvent *event) override;
 		
 	private:
 		void elementInfoChanged();
@@ -119,6 +126,7 @@
 		void setPotentialConductor();
 		void conductorPropertiesChanged();
 		QString reportReplacedCompositeText() const;
+		void zoomToLinkedElement();
 		
 	private:
 		QPointer <Element> m_parent_element,
@@ -133,9 +141,13 @@
 		DynamicElementTextItem::TextFrom m_text_from = UserText;
 		QUuid m_uuid;
 		QMetaObject::Connection m_report_formula_con;
-		QList<QMetaObject::Connection> m_formula_connection;
+		QList<QMetaObject::Connection> m_formula_connection,
+									   m_update_slave_Xref_connection;
 		QColor m_user_color;
-		bool m_frame = false;
+		bool m_frame = false,
+			 m_first_scene_change = true;
+		CrossRefItem *m_Xref_item = nullptr;
+		QGraphicsTextItem *m_slave_Xref_item = nullptr;
 };
 
 #endif // DYNAMICELEMENTTEXTITEM_H

Modified: trunk/sources/qetgraphicsitem/element.cpp
===================================================================
--- trunk/sources/qetgraphicsitem/element.cpp	2018-01-12 22:04:27 UTC (rev 5215)
+++ trunk/sources/qetgraphicsitem/element.cpp	2018-01-19 12:17:20 UTC (rev 5216)
@@ -69,7 +69,7 @@
 	must_highlight_(false),
 	m_mouse_over(false)
 {
-	link_type_ = Simple;
+	m_link_type = Simple;
 	uuid_ = QUuid::createUuid();
 	setZValue(10);
 	setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable);
@@ -386,18 +386,18 @@
 }
 
 /**
-	Methode d'import XML. Cette methode est appelee lors de l'import de contenu
-	XML (coller, import, ouverture de fichier...) afin que l'element puisse
-	gerer lui-meme l'importation de ses bornes. Ici, comme cette classe est
-	caracterisee par un nombre fixe de bornes, l'implementation exige de
-	retrouver exactement ses bornes dans le fichier XML.
-	@param e L'element XML a analyser.
-	@param table_id_adr Reference vers la table de correspondance entre les IDs
-	du fichier XML et les adresses en memoire. Si l'import reussit, il faut y
-	ajouter les bons couples (id, adresse).
-	@return true si l'import a reussi, false sinon
-	
-*/
+ * @brief Element::fromXml
+ * Import the parameters of this element from a xml document.
+ * When call this function ensure this element is already in a scene, because
+ * the dynamic text item and element text item group (in the xml file) are created in this function
+ * and need a diagram for create their Xref, when this element is linked to another.
+ * If not the Xref can be not displayed, until the next call of update Xref of the group or text item.
+ * @param e : the dom element where the parameter is stored
+ * @param table_id_adr : Reference to the mapping table between IDs of the XML file
+ * and the addresses in memory. If the import succeeds, it must be add the right couples (id, address).
+ * @param handle_inputs_rotation : apply the rotation of this element to his child text
+ * @return 
+ */
 bool Element::fromXml(QDomElement &e, QHash<int, Terminal *> &table_id_adr, bool handle_inputs_rotation)
 {
 	QDomDocument doc = e.ownerDocument();
@@ -507,6 +507,7 @@
 	
 		//First case, we check for the text item converted to dynamic text item
 	const QList <DynamicElementTextItem *> conv_deti_list = m_converted_text_from_xml_description.keys();
+	QList <DynamicElementTextItem *> successfully_converted; 
 	const QList <QDomElement> dom_inputs = inputs;
 	
 	for (DynamicElementTextItem *deti : conv_deti_list)
@@ -518,7 +519,7 @@
 				//that mean this is the good text
 			if (qFuzzyCompare(qreal(dom_input.attribute("x").toDouble()), m_converted_text_from_xml_description.value(deti).x()) &&
 				qFuzzyCompare(qreal(dom_input.attribute("y").toDouble()), m_converted_text_from_xml_description.value(deti).y()))
-			{
+			{	
 				deti->setText(dom_input.attribute("text"));
 				
 				qreal rotation = deti->rotation();
@@ -554,6 +555,7 @@
 				inputs.removeAll(dom_input);
 				m_dynamic_text_list.append(deti);
 				m_converted_text_from_xml_description.remove(deti);
+				successfully_converted << deti;
 			}
 		}
 	}
@@ -591,7 +593,8 @@
 	}
 	
 		//load informations
-	m_element_informations.fromXml(e.firstChildElement("elementInformations"), "elementInformation");
+	DiagramContext dc;
+	dc.fromXml(e.firstChildElement("elementInformations"), "elementInformation");
 		/**
 		 * Since the commit 4791, the value used as "label" and "formula" is stored in differents keys (instead of the same key, "label" in previous version),
 		 * so, if "label" contain "%" (Use variable value), and "formula" does not exist,
@@ -598,10 +601,11 @@
 		 * this mean the label was made before commit 4791 (0.51 dev). So we swap the value stored in "label" to "formula" as expected.
 		 * @TODO remove this code at version 0.7 or more (probably useless).
 		 */
-	if (m_element_informations["label"].toString().contains("%") && m_element_informations["formula"].toString().isNull())
+	if (dc["label"].toString().contains("%") && dc["formula"].toString().isNull())
 	{
-		m_element_informations.addValue("formula", m_element_informations["label"]);
+		dc.addValue("formula", dc["label"]);
 	}
+	setElementInformations(dc);
 	
 		/**
 		  * At the start of the 0.51 devel, if the text item with tagg "label" was edited directly in the diagram,
@@ -626,6 +630,71 @@
 			}
 		}
 	}
+	
+	/**
+	  During the devel of the version 0.7, the "old text" was replaced by the dynamic element text item.
+	  When open a project made befor the 0.7, we must to reproduce the same visual when the label are not empty and visible,
+      and comment are not empty and visible and/or location are not empty and visible.
+	  we create a text group with inside the needed texts, label and comment and/or location.
+	  */
+		//#1 There must be old text converted to dynamic text
+	if(!successfully_converted.isEmpty())
+	{
+			//#2 the element information must have label not empty and visible
+			//and a least comment or location not empty and visible
+		QString label = m_element_informations.value("label").toString();
+		QString comment = m_element_informations.value("comment").toString();
+		QString location = m_element_informations.value("location").toString();
+		bool la = m_element_informations.keyMustShow("label");
+		bool c = m_element_informations.keyMustShow("comment");
+		bool lo = m_element_informations.keyMustShow("location");
+		if(!label.isEmpty() && la &&
+		   ((!comment.isEmpty() && c) || (!location.isEmpty() && lo)))
+		{
+				//#2 in the converted list one text must have text from = element info and info name = label
+			for(DynamicElementTextItem *deti : successfully_converted)
+			{
+				if(deti->textFrom() == DynamicElementTextItem::ElementInfo && deti->infoName() == "label")
+				{
+						//Create the comment item
+					DynamicElementTextItem *comment_text = nullptr;
+					if(!comment.isEmpty() && c)
+					{
+						comment_text = new DynamicElementTextItem(this);
+						comment_text->setTextFrom(DynamicElementTextItem::ElementInfo);
+						comment_text->setInfoName("comment");
+						comment_text->setFontSize(6);
+						comment_text->setFrame(true);
+						comment_text->setPos(deti->x(), deti->y()+10); //+10 is arbitrary, comment_text must be below deti
+						addDynamicTextItem(comment_text);
+					}
+						//create the location item
+					DynamicElementTextItem *location_text = nullptr;
+					if(!location.isEmpty() && lo)
+					{
+						location_text = new DynamicElementTextItem(this);
+						location_text->setTextFrom(DynamicElementTextItem::ElementInfo);
+						location_text->setInfoName("location");
+						location_text->setFontSize(6);
+						location_text->setPos(deti->x(), deti->y()+20); //+20 is arbitrary, location_text must be below deti and comment
+						addDynamicTextItem(location_text);
+					}
+					
+						//Create the group
+					ElementTextItemGroup *group = addTextGroup(tr("Label + commentaire"));
+					addTextToGroup(deti, group);
+					if(comment_text)
+						addTextToGroup(comment_text, group);
+					if(location_text)
+						addTextToGroup(location_text, group);
+					group->setAlignment(Qt::AlignVCenter);
+					group->setVerticalAdjustment(-4);
+					
+					break;
+				}
+			}
+		}
+	}
     
 	return(true);
 }

Modified: trunk/sources/qetgraphicsitem/element.h
===================================================================
--- trunk/sources/qetgraphicsitem/element.h	2018-01-12 22:04:27 UTC (rev 5215)
+++ trunk/sources/qetgraphicsitem/element.h	2018-01-19 12:17:20 UTC (rev 5216)
@@ -117,7 +117,7 @@
 		virtual void unlinkElement     (Element *) {}
 		virtual void initLink          (QETProject *);
 		QList<Element *> linkedElements ();
-		virtual kind linkType() const {return link_type_;} // @return the linkable type
+		virtual kind linkType() const {return m_link_type;} // @return the linkable type
 		void newUuid() {uuid_ = QUuid::createUuid();} 	//create new uuid for this element
 
 		//ATTRIBUTES related to linked element
@@ -125,7 +125,7 @@
 		QList <Element *> connected_elements;
 		QList <QUuid>     tmp_uuids_link;
 		QUuid             uuid_;
-		kind              link_type_;
+		kind              m_link_type;
 		ElementTextItem* setTaggedText(const QString &tagg, const QString &newstr, const bool noeditable=false);
 
 	signals:

Modified: trunk/sources/qetgraphicsitem/elementtextitemgroup.cpp
===================================================================
--- trunk/sources/qetgraphicsitem/elementtextitemgroup.cpp	2018-01-12 22:04:27 UTC (rev 5215)
+++ trunk/sources/qetgraphicsitem/elementtextitemgroup.cpp	2018-01-19 12:17:20 UTC (rev 5216)
@@ -21,6 +21,8 @@
 #include "diagram.h"
 #include "addelementtextcommand.h"
 #include "QPropertyUndoCommand/qpropertyundocommand.h"
+#include "crossrefitem.h"
+#include "qetapp.h"
 
 #include <QPainter>
 #include <QGraphicsSceneMouseEvent>
@@ -36,9 +38,11 @@
  */
 ElementTextItemGroup::ElementTextItemGroup(const QString &name, Element *parent) :
 	QGraphicsItemGroup(parent),
-	m_name(name)
+	m_name(name),
+	m_parent_element(parent)
 {
 	setFlags(QGraphicsItem::ItemIsSelectable | QGraphicsItem::ItemIsMovable);
+	connect(parent, &Element::linkedElementChanged, this, &ElementTextItemGroup::updateXref);
 }
 
 ElementTextItemGroup::~ElementTextItemGroup()
@@ -69,7 +73,13 @@
 		connect(deti, &DynamicElementTextItem::textChanged,          this, &ElementTextItemGroup::updateAlignment);
 		connect(deti, &DynamicElementTextItem::textFromChanged,      this, &ElementTextItemGroup::updateAlignment);
 		connect(deti, &DynamicElementTextItem::infoNameChanged,      this, &ElementTextItemGroup::updateAlignment);
-		connect(deti, &DynamicElementTextItem::compositeTextChanged, this, &ElementTextItemGroup::updateAlignment);	
+		connect(deti, &DynamicElementTextItem::compositeTextChanged, this, &ElementTextItemGroup::updateAlignment);
+		connect(deti, &DynamicElementTextItem::plainTextChanged,     this, &ElementTextItemGroup::updateAlignment);
+		
+		connect(deti, &DynamicElementTextItem::textFromChanged, this, &ElementTextItemGroup::updateXref);
+		connect(deti, &DynamicElementTextItem::infoNameChanged, this, &ElementTextItemGroup::updateXref);
+		
+		updateXref();
 	}
 }
 
@@ -94,6 +104,12 @@
 		disconnect(deti, &DynamicElementTextItem::textFromChanged,      this, &ElementTextItemGroup::updateAlignment);
 		disconnect(deti, &DynamicElementTextItem::infoNameChanged,      this, &ElementTextItemGroup::updateAlignment);
 		disconnect(deti, &DynamicElementTextItem::compositeTextChanged, this, &ElementTextItemGroup::updateAlignment);
+		disconnect(deti, &DynamicElementTextItem::plainTextChanged,     this, &ElementTextItemGroup::updateAlignment);
+		
+		disconnect(deti, &DynamicElementTextItem::textFromChanged, this, &ElementTextItemGroup::updateXref);
+		disconnect(deti, &DynamicElementTextItem::infoNameChanged, this, &ElementTextItemGroup::updateXref);
+		
+		updateXref();
 	}
 }
 
@@ -124,7 +140,8 @@
 {
 	prepareGeometryChange();
 	
-	QList <QGraphicsItem *> texts = childItems();
+	QList <DynamicElementTextItem *> texts = this->texts();
+	
 	if (texts.size() > 1)
 	{
 		prepareGeometryChange();
@@ -169,6 +186,11 @@
 		
 		setTransformOriginPoint(boundingRect().topLeft());
 	}
+	
+	if(m_Xref_item)
+		m_Xref_item->autoPos();
+	if(m_slave_Xref_item)
+		adjustSlaveXrefPos();
 }
 
 /**
@@ -334,8 +356,8 @@
 		//if we move an item already in the group, the bounding rect of the group stay unchanged.
 		//We reimplement this function to avoid this behavior.
 	QRectF rect;
-	for(QGraphicsItem *qgi : childItems())
-	{
+	for(QGraphicsItem *qgi : texts())
+	{		
 		QRectF r(qgi->pos(), QSize(qgi->boundingRect().width(), qgi->boundingRect().height()));
 		rect = rect.united(r);
 	}
@@ -414,6 +436,38 @@
 		QGraphicsItemGroup::mouseReleaseEvent(event);
 }
 
+void ElementTextItemGroup::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event)
+{
+	if(m_slave_Xref_item)
+	{
+		if(m_slave_Xref_item->boundingRect().contains(mapToItem(m_slave_Xref_item, event->pos())))
+		{
+			if(parentElement()->linkType() == Element::Slave && !parentElement()->linkedElements().isEmpty())
+			{
+				m_slave_Xref_item->setDefaultTextColor(Qt::black);
+				Element *elmt = parentElement()->linkedElements().first();
+				
+					//Unselect and ungrab mouse to prevent unwanted
+					//move when linked element is in the same scene of this.
+				setSelected(false);
+				ungrabMouse();
+				
+				if(scene() != elmt->scene())
+					elmt->diagram()->showMe();
+				elmt->setSelected(true);
+				
+					//Zoom to the element
+				for(QGraphicsView *view : elmt->scene()->views())
+				{
+					QRectF fit = elmt->sceneBoundingRect();
+					fit.adjust(-200, -200, 200, 200);
+					view->fitInView(fit, Qt::KeepAspectRatioByExpanding);
+				}
+			}
+		}
+	}
+}
+
 /**
  * @brief ElementTextItemGroup::keyPressEvent
  * @param event
@@ -447,3 +501,111 @@
 	event->ignore();
 }
 
+void ElementTextItemGroup::hoverEnterEvent(QGraphicsSceneHoverEvent *event)
+{
+		//The pos of the event is not in this item coordinate,
+		//but in child item hovered by the mouse, so we use the scene pos.
+	if(m_slave_Xref_item &&
+	   m_slave_Xref_item->boundingRect().contains(m_slave_Xref_item->mapFromScene(event->scenePos())))
+		m_slave_Xref_item->setDefaultTextColor(Qt::blue);
+	
+	QGraphicsItemGroup::hoverEnterEvent(event);
+}
+
+void ElementTextItemGroup::hoverLeaveEvent(QGraphicsSceneHoverEvent *event)
+{
+	if(m_slave_Xref_item)
+		m_slave_Xref_item->setDefaultTextColor(Qt::black);
+	
+	QGraphicsItemGroup::hoverLeaveEvent(event);
+}
+
+void ElementTextItemGroup::updateXref()
+{
+	if(m_parent_element->diagram())
+	{
+		QETProject *project = m_parent_element->diagram()->project();
+		
+		if(m_parent_element->linkType() == Element::Master &&
+		   !m_parent_element->linkedElements().isEmpty())
+		{
+			
+			XRefProperties xrp = project->defaultXRefProperties(m_parent_element->kindInformations()["type"].toString());
+			
+			if(xrp.snapTo() == XRefProperties::Label)
+			{
+					//At least one text owned by this group must be set with
+					//textFrom -> element info and element info name -> label
+					//for display a xref
+				for(DynamicElementTextItem *deti : texts())
+				{
+					if(deti->textFrom() == DynamicElementTextItem::ElementInfo &&
+					   deti->infoName() == "label")
+					{
+						if(!m_Xref_item)
+							m_Xref_item = new CrossRefItem(m_parent_element, this);
+						m_Xref_item->autoPos();
+						return;
+					}
+				}
+			}
+		}
+		else if(m_parent_element->linkType() == Element::Slave &&
+				!m_parent_element->linkedElements().isEmpty())
+		{
+			Element *master_elmt = m_parent_element->linkedElements().first();
+			for(DynamicElementTextItem *deti : texts())
+			{
+				if((deti->textFrom() == DynamicElementTextItem::ElementInfo && deti->infoName() == "label") ||
+				   (deti->textFrom() == DynamicElementTextItem::CompositeText && deti->compositeText().contains("%{label")))
+				{
+					XRefProperties xrp = project->defaultXRefProperties(master_elmt->kindInformations()["type"].toString());
+					QString xref_label = xrp.slaveLabel();
+					xref_label = autonum::AssignVariables::formulaToLabel(xref_label, master_elmt->rSequenceStruct(), master_elmt->diagram(), master_elmt);
+					
+					if(!m_slave_Xref_item)
+					{
+						m_slave_Xref_item = new QGraphicsTextItem(xref_label, this);
+						m_slave_Xref_item->setFont(QETApp::diagramTextsFont(5));
+						
+						m_update_slave_Xref_connection << connect(master_elmt, &Element::xChanged,                       this, &ElementTextItemGroup::updateXref);
+						m_update_slave_Xref_connection << connect(master_elmt, &Element::yChanged,                       this, &ElementTextItemGroup::updateXref);
+						m_update_slave_Xref_connection << connect(master_elmt, &Element::elementInfoChange,              this, &ElementTextItemGroup::updateXref);
+						m_update_slave_Xref_connection << connect(project,     &QETProject::projectDiagramsOrderChanged, this, &ElementTextItemGroup::updateXref);
+						m_update_slave_Xref_connection << connect(project,     &QETProject::diagramRemoved,              this, &ElementTextItemGroup::updateXref);
+						m_update_slave_Xref_connection << connect(project,     &QETProject::XRefPropertiesChanged,       this, &ElementTextItemGroup::updateXref);
+					}
+					else
+						m_slave_Xref_item->setPlainText(xref_label);
+					
+					adjustSlaveXrefPos();
+					return;
+				}
+			}
+		
+		}
+	}
+
+	
+		//There is no reason to have a xref, we delete it if exist
+	if(m_Xref_item)
+	{
+		delete m_Xref_item;
+		m_Xref_item = nullptr;	
+	}
+	if(m_slave_Xref_item)
+	{
+		delete m_slave_Xref_item;
+		m_slave_Xref_item = nullptr;
+		m_update_slave_Xref_connection.clear();
+	}
+}
+
+void ElementTextItemGroup::adjustSlaveXrefPos()
+{
+	QRectF r = boundingRect();
+	QPointF pos(r.center().x() - m_slave_Xref_item->boundingRect().width()/2,
+				r.bottom());
+	m_slave_Xref_item->setPos(pos);
+}
+

Modified: trunk/sources/qetgraphicsitem/elementtextitemgroup.h
===================================================================
--- trunk/sources/qetgraphicsitem/elementtextitemgroup.h	2018-01-12 22:04:27 UTC (rev 5215)
+++ trunk/sources/qetgraphicsitem/elementtextitemgroup.h	2018-01-19 12:17:20 UTC (rev 5216)
@@ -25,6 +25,7 @@
 class Element;
 class DynamicElementTextItem;
 class Diagram;
+class CrossRefItem;
 
 /**
  * @brief The ElementTextItemGroup class
@@ -77,7 +78,14 @@
 		void mousePressEvent(QGraphicsSceneMouseEvent *event) override;
 		void mouseMoveEvent(QGraphicsSceneMouseEvent *event) override;
 		void mouseReleaseEvent(QGraphicsSceneMouseEvent *event) override;
+		void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event) override;
 		void keyPressEvent(QKeyEvent *event) override;
+		void hoverEnterEvent(QGraphicsSceneHoverEvent *event) override;
+		void hoverLeaveEvent(QGraphicsSceneHoverEvent *event) override;
+		
+	private:
+		void updateXref();
+		void adjustSlaveXrefPos();
 
 	private:
 		Qt::Alignment m_alignment = Qt::AlignJustify;
@@ -85,6 +93,10 @@
 		bool m_first_move = true;
 		QPointF m_mouse_to_origin_movement;
 		int m_vertical_adjustment = 0;
+		CrossRefItem *m_Xref_item = nullptr;
+		Element *m_parent_element = nullptr;
+		QList<QMetaObject::Connection> m_update_slave_Xref_connection;
+		QGraphicsTextItem *m_slave_Xref_item = nullptr;
 };
 
 #endif // ELEMENTTEXTITEMGROUP_H

Modified: trunk/sources/qetgraphicsitem/masterelement.cpp
===================================================================
--- trunk/sources/qetgraphicsitem/masterelement.cpp	2018-01-12 22:04:27 UTC (rev 5215)
+++ trunk/sources/qetgraphicsitem/masterelement.cpp	2018-01-19 12:17:20 UTC (rev 5216)
@@ -19,6 +19,7 @@
 #include "crossrefitem.h"
 #include "elementtextitem.h"
 #include "diagram.h"
+#include "dynamicelementtextitem.h"
 #include <QRegularExpression>
 
 /**
@@ -30,10 +31,10 @@
  * @param state int used to know if the creation of element have error
  */
 MasterElement::MasterElement(const ElementsLocation &location, QGraphicsItem *qgi, int *state) :
-	CustomElement(location, qgi, state),
-	m_Xref_item (nullptr)
+	CustomElement(location, qgi, state)
 {
-	link_type_ = Master;
+	m_link_type = Element::Master;
+
 	connect(this, SIGNAL(elementInfoChange(DiagramContext, DiagramContext)), this, SLOT(updateLabel(DiagramContext, DiagramContext)));
 	connect(this, &Element::updateLabel, [this]() {this->updateLabel(this->elementInformations(), this->elementInformations());});
 }
@@ -60,13 +61,12 @@
 		connected_elements << elmt;
 		elmt->linkToElement(this);
 
-		if (!m_Xref_item) m_Xref_item = new CrossRefItem(this); //create cross ref item if not yet
-
-		connect(elmt, SIGNAL(xChanged()),    m_Xref_item, SLOT(updateLabel()));
-		connect(elmt, SIGNAL(yChanged()),    m_Xref_item, SLOT(updateLabel()));
-		connect(elmt, SIGNAL(updateLabel()), m_Xref_item, SLOT(updateLabel()));
-		connect(&elmt->diagram()->border_and_titleblock, &BorderTitleBlock::titleBlockFolioChanged, m_Xref_item, &CrossRefItem::updateLabel);
-		m_Xref_item -> updateLabel();
+		XRefProperties xrp = diagram()->project()->defaultXRefProperties(kindInformations()["type"].toString());
+		if (!m_Xref_item && xrp.snapTo() == XRefProperties::Bottom)
+			m_Xref_item = new CrossRefItem(this); //create cross ref item if not yet
+		else
+			aboutDeleteXref();
+		
 		emit linkedElementChanged();
 	}
 }
@@ -100,13 +100,6 @@
 		elmt -> unlinkElement  (this);
 		elmt -> setHighlighted (false);
 
-			//update the graphics cross ref
-		disconnect(elmt, SIGNAL(xChanged()),    m_Xref_item, SLOT(updateLabel()));
-		disconnect(elmt, SIGNAL(yChanged()),    m_Xref_item, SLOT(updateLabel()));
-		disconnect(elmt, SIGNAL(updateLabel()), m_Xref_item, SLOT(updateLabel()));
-		disconnect(&elmt->diagram()->border_and_titleblock, &BorderTitleBlock::titleBlockFolioChanged, m_Xref_item, &CrossRefItem::updateLabel);
-
-		m_Xref_item -> updateLabel();
 		aboutDeleteXref();
 		emit linkedElementChanged();
 	}
@@ -154,23 +147,32 @@
 		new_info["label"].toString().isEmpty() ? eti->setVisible(true) : eti -> setVisible(new_info.keyMustShow("label"));
 	}
 
+}
 
-	//Delete or update the xref
-	if (m_Xref_item) {
-		m_Xref_item -> updateLabel();
-		aboutDeleteXref();
+QVariant MasterElement::itemChange(QGraphicsItem::GraphicsItemChange change, const QVariant &value)
+{
+	if(change == QGraphicsItem::ItemSceneHasChanged && m_first_scene_change)
+	{
+		m_first_scene_change = false;
+		connect(diagram()->project(), &QETProject::XRefPropertiesChanged, this, &MasterElement::xrefPropertiesChanged);
 	}
-	else {
-		QString comment   = elementInformations()["comment"].toString();
-		bool    must_show_comment = elementInformations().keyMustShow("comment");
+	return CustomElement::itemChange(change, value);
+}
 
-		QString location  = elementInformations()["location"].toString();
-		bool	must_show_location = elementInformations().keyMustShow("location");
-
-		if (! (comment.isEmpty() || !must_show_comment) || !(location.isEmpty() || !must_show_location)) {
+void MasterElement::xrefPropertiesChanged()
+{
+	if(!diagram())
+		return;
+	
+	XRefProperties xrp = diagram()->project()->defaultXRefProperties(kindInformations()["type"].toString());
+	if(xrp.snapTo() == XRefProperties::Bottom)
+	{
+			//We create a Xref, and just after we call aboutDeleteXref,
+			//because the Xref may be useless.
+		if(!m_Xref_item)
 			m_Xref_item = new CrossRefItem(this);
-		}
 	}
+	aboutDeleteXref();
 }
 
 /**
@@ -183,15 +185,23 @@
  * option show power contact is disable, the cross isn't draw.
  * @return
  */
-bool MasterElement::aboutDeleteXref() {
-	if(!m_Xref_item) return true;
-	if(!linkedElements().isEmpty()) return false;
-
-	if (m_Xref_item -> boundingRect().isNull()) {
+void MasterElement::aboutDeleteXref()
+{
+	if(!m_Xref_item)
+		return;
+	
+	XRefProperties xrp = diagram()->project()->defaultXRefProperties(kindInformations()["type"].toString());
+	if (xrp.snapTo() != XRefProperties::Bottom && m_Xref_item)
+	{
 		delete m_Xref_item;
 		m_Xref_item = nullptr;
-		return true;
+		return;
 	}
-
-	return false;
+	
+	if (m_Xref_item->boundingRect().isNull())
+	{
+		delete m_Xref_item;
+		m_Xref_item = nullptr;
+		return;
+	}
 }

Modified: trunk/sources/qetgraphicsitem/masterelement.h
===================================================================
--- trunk/sources/qetgraphicsitem/masterelement.h	2018-01-12 22:04:27 UTC (rev 5215)
+++ trunk/sources/qetgraphicsitem/masterelement.h	2018-01-19 12:17:20 UTC (rev 5216)
@@ -43,12 +43,17 @@
 
 	public slots:
 		void updateLabel(DiagramContext old_info, DiagramContext new_info);
+		
+	protected:
+		QVariant itemChange(GraphicsItemChange change, const QVariant &value) override;
 
 	private:
-		bool aboutDeleteXref ();
+		void xrefPropertiesChanged();
+		void aboutDeleteXref ();
 
 	private:
-		CrossRefItem *m_Xref_item;
+		CrossRefItem *m_Xref_item = nullptr;
+		bool m_first_scene_change = true;
 };
 
 #endif // MASTERELEMENT_H

Modified: trunk/sources/qetgraphicsitem/reportelement.cpp
===================================================================
--- trunk/sources/qetgraphicsitem/reportelement.cpp	2018-01-12 22:04:27 UTC (rev 5215)
+++ trunk/sources/qetgraphicsitem/reportelement.cpp	2018-01-19 12:17:20 UTC (rev 5216)
@@ -22,6 +22,7 @@
 #include "diagram.h"
 #include "terminal.h"
 #include "conductor.h"
+#include "dynamicelementtextitem.h"
 
 ReportElement::ReportElement(const ElementsLocation &location, QString link_type,QGraphicsItem *qgi, int *state) :
 	CustomElement(location, qgi, state),
@@ -40,7 +41,7 @@
 	if (m_text_field)
 		m_text_field -> setNoEditable();
 
-	link_type == "next_report"? link_type_=NextReport : link_type_=PreviousReport;
+	link_type == "next_report"? m_link_type=NextReport : m_link_type=PreviousReport;
 	link_type == "next_report"? m_inverse_report=PreviousReport : m_inverse_report=NextReport;
 
 		//We make these connections, to be always aware about the conductor properties

Modified: trunk/sources/qetgraphicsitem/simpleelement.cpp
===================================================================
--- trunk/sources/qetgraphicsitem/simpleelement.cpp	2018-01-12 22:04:27 UTC (rev 5215)
+++ trunk/sources/qetgraphicsitem/simpleelement.cpp	2018-01-19 12:17:20 UTC (rev 5216)
@@ -32,7 +32,7 @@
 	m_comment_item (nullptr),
 	m_location_item (nullptr)
 {
-	link_type_ = Simple;
+	m_link_type = Simple;
 	connect(this, SIGNAL(elementInfoChange(DiagramContext, DiagramContext)), this, SLOT(updateLabel(DiagramContext, DiagramContext)));
 	connect(this, &Element::updateLabel, [this]() {this->updateLabel(this->elementInformations(), this->elementInformations());});
 }
@@ -84,17 +84,17 @@
 		new_info["label"].toString().isEmpty() ? eti->setVisible(true) : eti -> setVisible(new_info.keyMustShow("label"));
 	}
 
-		//Comment and Location of element
-	QString comment   = new_info["comment"].toString();
-	bool    must_show = new_info.keyMustShow("comment");
-	QString location  = new_info["location"].toString();
-	bool must_show_location = new_info.keyMustShow("location");
+//		//Comment and Location of element
+//	QString comment   = new_info["comment"].toString();
+//	bool    must_show = new_info.keyMustShow("comment");
+//	QString location  = new_info["location"].toString();
+//	bool must_show_location = new_info.keyMustShow("location");
 
-	if ((!(comment.isEmpty() || !must_show) && !m_comment_item)||(!(location.isEmpty() || !must_show_location) && !m_comment_item)) {
-		m_comment_item = new CommentItem(this);
-	}
-	else if (((comment.isEmpty() || !must_show) && m_comment_item) && ((location.isEmpty() || !must_show_location) && m_comment_item)) {
-		delete m_comment_item;
-		m_comment_item = nullptr;
-	}
+//	if ((!(comment.isEmpty() || !must_show) && !m_comment_item)||(!(location.isEmpty() || !must_show_location) && !m_comment_item)) {
+//		m_comment_item = new CommentItem(this);
+//	}
+//	else if (((comment.isEmpty() || !must_show) && m_comment_item) && ((location.isEmpty() || !must_show_location) && m_comment_item)) {
+//		delete m_comment_item;
+//		m_comment_item = nullptr;
+//	}
 }

Modified: trunk/sources/qetgraphicsitem/slaveelement.cpp
===================================================================
--- trunk/sources/qetgraphicsitem/slaveelement.cpp	2018-01-12 22:04:27 UTC (rev 5215)
+++ trunk/sources/qetgraphicsitem/slaveelement.cpp	2018-01-19 12:17:20 UTC (rev 5216)
@@ -20,6 +20,7 @@
 #include "qetapp.h"
 #include "elementtextitem.h"
 #include "diagram.h"
+#include "dynamicelementtextitem.h"
 
 /**
  * @brief SlaveElement::SlaveElement
@@ -33,7 +34,8 @@
 	CustomElement(location, qgi, state)
 {
 	m_xref_item = nullptr;
-	link_type_ = Slave;
+	m_link_type = Slave;
+	
 	connect(this, SIGNAL(updateLabel()), this, SLOT(updateLabel()));
 }
 

Modified: trunk/sources/qetgraphicsitem/terminalelement.cpp
===================================================================
--- trunk/sources/qetgraphicsitem/terminalelement.cpp	2018-01-12 22:04:27 UTC (rev 5215)
+++ trunk/sources/qetgraphicsitem/terminalelement.cpp	2018-01-19 12:17:20 UTC (rev 5216)
@@ -32,7 +32,7 @@
 	m_comment_item (nullptr),
 	m_location_item (nullptr)
 {
-	link_type_ = Terminale;
+	m_link_type = Terminale;
 	
 	connect(this, SIGNAL(elementInfoChange(DiagramContext, DiagramContext)), this, SLOT(updateLabel(DiagramContext, DiagramContext)));
 	connect(this, &Element::updateLabel, [this]() {this->updateLabel(this->elementInformations(), this->elementInformations());});
@@ -80,18 +80,18 @@
 		new_info["label"].toString().isEmpty() ? eti->setVisible(true) : eti -> setVisible(new_info.keyMustShow("label"));
 	}
 
-		//Comment and Location of element
-	QString comment   = new_info["comment"].toString();
-	bool    must_show = new_info.keyMustShow("comment");
-	QString location  = new_info["location"].toString();
-	bool must_show_location = new_info.keyMustShow("location");
+//		//Comment and Location of element
+//	QString comment   = new_info["comment"].toString();
+//	bool    must_show = new_info.keyMustShow("comment");
+//	QString location  = new_info["location"].toString();
+//	bool must_show_location = new_info.keyMustShow("location");
 
-	if ((!(comment.isEmpty() || !must_show) && !m_comment_item)||(!(location.isEmpty() || !must_show_location) && !m_comment_item)) {
-		m_comment_item = new CommentItem(this);
-	}
-	else if (((comment.isEmpty() || !must_show) && m_comment_item) && ((location.isEmpty() || !must_show_location) && m_comment_item)) {
-		delete m_comment_item;
-		m_comment_item = nullptr;
-	}
+//	if ((!(comment.isEmpty() || !must_show) && !m_comment_item)||(!(location.isEmpty() || !must_show_location) && !m_comment_item)) {
+//		m_comment_item = new CommentItem(this);
+//	}
+//	else if (((comment.isEmpty() || !must_show) && m_comment_item) && ((location.isEmpty() || !must_show_location) && m_comment_item)) {
+//		delete m_comment_item;
+//		m_comment_item = nullptr;
+//	}
 }
 

--lxyNAQ4yOVf--



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