[qet] qet/qet: [4825] revert and merge rev 4823.

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


Revision: 4825
Author:   blacksun
Date:     2016-12-28 11:03:47 +0100 (Wed, 28 Dec 2016)
Log Message:
-----------
revert and merge rev 4823.
Fix : in old projects without the conductors formula, the conductors texts aren't loaded and displayed
Fix it in method void Conductor::refreshText()

Modified Paths:
--------------
    trunk/sources/autoNum/assignvariables.cpp
    trunk/sources/autoNum/assignvariables.h
    trunk/sources/conductorautonumerotation.cpp
    trunk/sources/diagram.cpp
    trunk/sources/qetgraphicsitem/conductor.cpp
    trunk/sources/qetgraphicsitem/conductor.h
    trunk/sources/qetgraphicsitem/terminal.cpp
    trunk/sources/ui/conductorpropertieswidget.cpp
    trunk/sources/ui/potentialselectordialog.cpp
    trunk/sources/ui/potentialselectordialog.h

Modified: trunk/sources/autoNum/assignvariables.cpp
===================================================================
--- trunk/sources/autoNum/assignvariables.cpp	2016-12-27 14:59:31 UTC (rev 4824)
+++ trunk/sources/autoNum/assignvariables.cpp	2016-12-28 10:03:47 UTC (rev 4825)
@@ -27,7 +27,6 @@
 
 namespace autonum
 {
-
 	/**
 	 * @brief sequentialNumbers::sequentialNumbers
 	 */
@@ -34,6 +33,18 @@
 	sequentialNumbers::sequentialNumbers()
 	{}
 
+	sequentialNumbers::sequentialNumbers(const sequentialNumbers &other)
+	{
+		unit          = other.unit;
+		unit_folio    = other.unit_folio;
+		ten           = other.ten;
+		ten_folio     = other.ten_folio;
+		hundred       = other.hundred;
+		hundred_folio = other.hundred_folio;
+	}
+
+	sequentialNumbers::~sequentialNumbers() {}
+
 	sequentialNumbers &sequentialNumbers::operator=(const sequentialNumbers &other)
 	{
 		if (&other == this || other == *this)
@@ -216,22 +227,22 @@
 
 		for (int i=1; i<=max ; i++)
 		{
-			if (m_assigned_label.contains("%sequ_" + QString::number(i)) && !m_seq_struct.unit.isEmpty()) {
+			if (m_assigned_label.contains("%sequ_" + QString::number(i)) && m_seq_struct.unit.size() >= i) {
 				m_assigned_label.replace("%sequ_" + QString::number(i),m_seq_struct.unit.at(i-1));
 			}
-			if (m_assigned_label.contains("%seqt_" + QString::number(i)) && !m_seq_struct.ten.isEmpty()) {
+			if (m_assigned_label.contains("%seqt_" + QString::number(i)) && m_seq_struct.ten.size() >= i) {
 				m_assigned_label.replace("%seqt_" + QString::number(i),m_seq_struct.ten.at(i-1));
 			}
-			if (m_assigned_label.contains("%seqh_" + QString::number(i)) && !m_seq_struct.hundred.isEmpty()) {
+			if (m_assigned_label.contains("%seqh_" + QString::number(i)) && m_seq_struct.hundred.size() >= i) {
 				m_assigned_label.replace("%seqh_" + QString::number(i),m_seq_struct.hundred.at(i-1));
 			}
-			if (m_assigned_label.contains("%sequf_" + QString::number(i)) && !m_seq_struct.unit_folio.isEmpty()) {
+			if (m_assigned_label.contains("%sequf_" + QString::number(i)) && m_seq_struct.unit_folio.size() >= i) {
 				m_assigned_label.replace("%sequf_" + QString::number(i),m_seq_struct.unit_folio.at(i-1));
 			}
-			if (m_assigned_label.contains("%seqtf_" + QString::number(i)) && !m_seq_struct.ten_folio.isEmpty()) {
+			if (m_assigned_label.contains("%seqtf_" + QString::number(i)) && m_seq_struct.ten_folio.size() >= i) {
 				m_assigned_label.replace("%seqtf_" + QString::number(i),m_seq_struct.ten_folio.at(i-1));
 			}
-			if (m_assigned_label.contains("%seqhf_" + QString::number(i)) && !m_seq_struct.hundred_folio.isEmpty()) {
+			if (m_assigned_label.contains("%seqhf_" + QString::number(i)) && m_seq_struct.hundred_folio.size() >= i) {
 				m_assigned_label.replace("%seqhf_" + QString::number(i),m_seq_struct.hundred_folio.at(i-1));
 			}
 		}

Modified: trunk/sources/autoNum/assignvariables.h
===================================================================
--- trunk/sources/autoNum/assignvariables.h	2016-12-27 14:59:31 UTC (rev 4824)
+++ trunk/sources/autoNum/assignvariables.h	2016-12-28 10:03:47 UTC (rev 4825)
@@ -34,6 +34,8 @@
 	{
 		public:
 			sequentialNumbers();
+			sequentialNumbers(const sequentialNumbers &other);
+			~sequentialNumbers();
 
 			sequentialNumbers &operator= (const sequentialNumbers &other);
 			bool operator== (const sequentialNumbers &other) const;
@@ -80,4 +82,6 @@
 	QString elementPrefixForLocation(const ElementsLocation &location);
 }
 
+Q_DECLARE_METATYPE(autonum::sequentialNumbers)
+
 #endif // ASSIGNVARIABLES_H

Modified: trunk/sources/conductorautonumerotation.cpp
===================================================================
--- trunk/sources/conductorautonumerotation.cpp	2016-12-27 14:59:31 UTC (rev 4824)
+++ trunk/sources/conductorautonumerotation.cpp	2016-12-28 10:03:47 UTC (rev 4825)
@@ -121,9 +121,8 @@
 		ConductorProperties cp = m_conductor -> properties();
 		cp.text = text_list.first();
 		cp.m_formula = formula_list.first();
+		m_conductor->rSequenceNum() = conductor_list.first()->sequenceNum();
 		m_conductor->setProperties(cp);
-		m_conductor->rSequenceNum() = conductor_list.first()->sequenceNum();
-		m_conductor->setText(text_list.first());
 	}
 		//the texts isn't identicals
 	else

Modified: trunk/sources/diagram.cpp
===================================================================
--- trunk/sources/diagram.cpp	2016-12-27 14:59:31 UTC (rev 4824)
+++ trunk/sources/diagram.cpp	2016-12-28 10:03:47 UTC (rev 4825)
@@ -1158,8 +1158,7 @@
 			elmt->updateLabel();
 	}
 	foreach (Conductor *cnd, content().conductors()) {
-		if (cnd->properties().text.contains("%F"))
-			cnd->setText(cnd->properties().text);
+		cnd->refreshText();
 	}
 }
 

Modified: trunk/sources/qetgraphicsitem/conductor.cpp
===================================================================
--- trunk/sources/qetgraphicsitem/conductor.cpp	2016-12-27 14:59:31 UTC (rev 4824)
+++ trunk/sources/qetgraphicsitem/conductor.cpp	2016-12-28 10:03:47 UTC (rev 4825)
@@ -79,7 +79,7 @@
 	terminal2(p2),
 	m_mouse_over(false),
 	m_handler(10),
-	text_item(0),
+	m_text_item(0),
 	segments(NULL),
 	moving_segment(false),
 	modified_path(false),
@@ -127,8 +127,8 @@
 	setAcceptHoverEvents(true);
 	
 		// Add the text field
-	text_item = new ConductorTextItem(m_properties.text, this);
-	connect(text_item, &ConductorTextItem::diagramTextChanged, this, &Conductor::displayedTextChanged);
+	m_text_item = new ConductorTextItem(m_properties.text, this);
+	connect(m_text_item, &ConductorTextItem::diagramTextChanged, this, &Conductor::displayedTextChanged);
 }
 
 /**
@@ -543,7 +543,7 @@
 	@return le champ de texte associe a ce conducteur
 */
 ConductorTextItem *Conductor::textItem() const {
-	return(text_item);
+	return(m_text_item);
 }
 
 /**
@@ -597,7 +597,7 @@
 		{
 			moving_segment = true;
 			moved_segment = segmentsList().at(index+1);
-			before_mov_text_pos_ = text_item -> pos();
+			before_mov_text_pos_ = m_text_item -> pos();
 		}
 	}
 
@@ -855,7 +855,7 @@
 
 	bool return_ = pathFromXml(dom_element);
 
-	text_item -> fromXml(dom_element);
+	m_text_item -> fromXml(dom_element);
 	ConductorProperties pr;
 	pr.fromXml(dom_element);
 
@@ -909,7 +909,7 @@
 	
 		// Export the properties and text
 	m_properties. toXml(dom_element);
-	text_item -> toXml(dom_element);
+	m_text_item -> toXml(dom_element);
 
 	return(dom_element);
 }
@@ -1130,7 +1130,7 @@
  * If text was moved by user, this function do nothing, except check if text is near conductor.
  */
 void Conductor::calculateTextItemPosition() {
-	if (!text_item || !diagram() || m_properties.type != ConductorProperties::Multi) return;
+	if (!m_text_item || !diagram() || m_properties.type != ConductorProperties::Multi) return;
 
 	if (diagram() -> defaultConductorProperties.m_one_text_per_folio == true &&
 		relatedPotentialConductors(false).size() > 0) {
@@ -1149,17 +1149,17 @@
 					c -> textItem() -> setVisible(false);
 			}
 		//Make sure text item is visible
-		text_item -> setVisible(true);
+		m_text_item -> setVisible(true);
 	}
 
 	//position
-	if (text_item -> wasMovedByUser()) {
+	if (m_text_item -> wasMovedByUser()) {
 		//Text field was moved by user :
 		//we check if text field is yet  near the conductor
-		QPointF text_item_pos = text_item -> pos();
+		QPointF text_item_pos = m_text_item -> pos();
 		QPainterPath near_shape = nearShape();
 		if (!near_shape.contains(text_item_pos)) {
-			text_item -> setPos(movePointIntoPolygon(text_item_pos, near_shape));
+			m_text_item -> setPos(movePointIntoPolygon(text_item_pos, near_shape));
 		}
 	} else {
 		//Position and rotation of text is calculated.
@@ -1166,20 +1166,20 @@
 		Qt::Orientations rotation;
 		QPointF text_pos = posForText(rotation);
 
-		if (!text_item -> wasRotateByUser()) {
-			rotation == Qt::Vertical ? text_item -> setRotationAngle(m_properties.verti_rotate_text):
-									   text_item -> setRotationAngle(m_properties.horiz_rotate_text);
+		if (!m_text_item -> wasRotateByUser()) {
+			rotation == Qt::Vertical ? m_text_item -> setRotationAngle(m_properties.verti_rotate_text):
+									   m_text_item -> setRotationAngle(m_properties.horiz_rotate_text);
 		}
 
 		//Adjust the position of text if his rotation
 		//is 0° or 270°, to be exactly centered to the conductor
-		if (text_item -> rotation() == 0)
-			text_pos.rx() -= text_item -> boundingRect().width()/2;
-		else if (text_item -> rotation() == 270)
-			text_pos.ry() += text_item -> boundingRect().width()/2;
+		if (m_text_item -> rotation() == 0)
+			text_pos.rx() -= m_text_item -> boundingRect().width()/2;
+		else if (m_text_item -> rotation() == 270)
+			text_pos.ry() += m_text_item -> boundingRect().width()/2;
 
 		//Finaly set the position of text
-		text_item -> setPos(text_pos);
+		m_text_item -> setPos(text_pos);
 	}
 }
 
@@ -1199,7 +1199,7 @@
 			conductor_profiles[current_path_type],
 			current_path_type
 		);
-		undo_object -> setConductorTextItemMove(before_mov_text_pos_, text_item -> pos());
+		undo_object -> setConductorTextItemMove(before_mov_text_pos_, m_text_item -> pos());
 		dia -> undoStack().push(undo_object);
 	}
 }
@@ -1248,61 +1248,100 @@
 	return(conductor_profiles[path_type]);
 }
 
-/// @return le texte du conducteur
-QString Conductor::text() const {
-	QString label = text_item->toPlainText();
-	return(label);
-}
-
 /**
- * @brief Conductor::setText
- * The text of this conductor
- * @param t
+ * @brief Conductor::refreshText
+ * Refresh the text of this conductor.
+ * recalcule and set the text according to the formula.
  */
-void Conductor::setText(const QString &t)
+void Conductor::refreshText()
 {
-	text_item->setPlainText(t);
+	if (m_freeze_label)
+	{
+		m_text_item->setPlainText(m_properties.text);
+	}
+	else
+	{
+		if (!m_properties.m_formula.isEmpty())
+		{
+			if (diagram())
+			{
+				QString text = autonum::AssignVariables::formulaToLabel(m_properties.m_formula, m_autoNum_seq, diagram());
+				m_properties.text = text;
+				m_text_item->setPlainText(text);
+			}
+			else
+			{
+				m_properties.text = m_properties.m_formula;
+				m_text_item->setPlainText(m_properties.text);
+			}
+		}
+		else
+		{
+			m_text_item->setPlainText(m_properties.text);
+		}
+	}
 }
 
 /**
- * @brief Conductor::refreshText
- * Refresh the text of this conductor.
- * recalcule and set the text according to the formula.
+ * @brief Conductor::setPropertiesToPotential
+ * @param properties
+ * @param only_text
+ * Set @propertie to conductor and every conductors in the same potential of @conductor.
+ * If @only_text is true only formula, text, function and tension/protocol is set
+ * to other conductor in the same potential, the other values of property stay unmodified
  */
-void Conductor::refreshText() {
-	setText(m_freeze_label? text_item->toPlainText() : properties().text);
+void Conductor::setPropertyToPotential(const ConductorProperties &property, bool only_text)
+{
+	setProperties(property);
+	QSet <Conductor *> potential_list = relatedPotentialConductors();
+
+	foreach(Conductor *other_conductor, potential_list)
+	{
+		if (only_text)
+		{
+			ConductorProperties other_properties = other_conductor->properties();
+			other_properties.m_formula = m_properties.m_formula;
+			other_properties.text = m_properties.text;
+			other_properties.m_function = m_properties.m_function;
+			other_properties.m_tension_protocol = m_properties.m_tension_protocol;
+			other_conductor->setProperties(other_properties);
+		}
+		else
+		{
+			other_conductor->setProperties(property);
+		}
+	}
 }
 
 /**
  * @brief Conductor::setProperties
- * Set new properties for this conductor
- * Also change the common properties for every conductors at the same potential.
- * (text, function and tension/protocol) other value of properties isn't changed.
+ * Set @property as current property of conductor
  * @param properties : properties
  */
-void Conductor::setProperties(const ConductorProperties &properties)
+void Conductor::setProperties(const ConductorProperties &property)
 {
-	if (m_properties == properties) return;
+	if (m_properties == property) return;
 
-	m_properties = properties;
+	m_properties = property;
 
-	foreach(Conductor *other_conductor, relatedPotentialConductors())
+	if (!m_properties.m_formula.isEmpty())
 	{
-		ConductorProperties other_properties = other_conductor->properties();
-		other_properties.text = m_properties.text;
-		other_properties.color = m_properties.color;
-		other_properties.cond_size = m_properties.cond_size;
-		other_properties.m_function = m_properties.m_function;
-		other_properties.m_tension_protocol = m_properties.m_tension_protocol;
-		other_conductor->setProperties(other_properties);
+		if (diagram()) {
+			QString text = autonum::AssignVariables::formulaToLabel(m_properties.m_formula, m_autoNum_seq, diagram());
+			m_properties.text = text;
+		}
+		else {
+			m_properties.text = m_properties.m_formula;
+		}
 	}
-	setText(m_properties.text);
-	text_item -> setFontSize(m_properties.text_size);
 
+	m_text_item->setPlainText(m_properties.text);
+	m_text_item->setFontSize(m_properties.text_size);
+
 	if (m_properties.type != ConductorProperties::Multi)
-		text_item -> setVisible(false);
+		m_text_item->setVisible(false);
 	else
-		text_item -> setVisible(m_properties.m_show_text);
+		m_text_item->setVisible(m_properties.m_show_text);
 
 	calculateTextItemPosition();
 	update();
@@ -1341,17 +1380,17 @@
  */
 void Conductor::displayedTextChanged()
 {
-	if ((text_item->toPlainText() == autonum::AssignVariables::formulaToLabel(m_properties.text, m_autoNum_seq, diagram())) || !diagram()) return;
-
 	QVariant old_value, new_value;
 	old_value.setValue(m_properties);
 	ConductorProperties new_properties(m_properties);
-	new_properties.text = text_item -> toPlainText();
+	new_properties.m_formula = m_text_item->toPlainText();
+	new_properties.text = m_text_item->toPlainText();
 	new_value.setValue(new_properties);
 
-	QPropertyUndoCommand *undo = new QPropertyUndoCommand(this, "properties", old_value, new_value);
-	undo->setText(tr("Modifier les propriétés d'un conducteur", "undo caption"));
 
+	QUndoCommand *undo = new QUndoCommand(tr("Modifier les propriétés d'un conducteur", "undo caption"));
+	new QPropertyUndoCommand(this, "properties", old_value, new_value, undo);
+
 	if (!relatedPotentialConductors().isEmpty())
 	{
 		undo->setText(tr("Modifier les propriétés de plusieurs conducteurs", "undo caption"));
@@ -1360,7 +1399,8 @@
 		{
 			old_value.setValue(potential_conductor->properties());
 			ConductorProperties new_properties = potential_conductor->properties();
-			new_properties.text = text_item->toPlainText();
+			new_properties.m_formula = m_text_item->toPlainText();
+			new_properties.text = m_text_item->toPlainText();
 			new_value.setValue(new_properties);
 			new QPropertyUndoCommand (potential_conductor, "properties", old_value, new_value, undo);
 		}
@@ -1440,6 +1480,12 @@
 	ConductorPropertiesDialog::PropertiesDialog(this, diagramEditor());
 }
 
+void Conductor::setSequenceNum(autonum::sequentialNumbers sn)
+{
+	m_autoNum_seq = sn;
+	refreshText();
+}
+
 /**
 	@param a point
 	@param b point

Modified: trunk/sources/qetgraphicsitem/conductor.h
===================================================================
--- trunk/sources/qetgraphicsitem/conductor.h	2016-12-27 14:59:31 UTC (rev 4824)
+++ trunk/sources/qetgraphicsitem/conductor.h	2016-12-28 10:03:47 UTC (rev 4825)
@@ -45,6 +45,7 @@
 	Q_PROPERTY(QPointF pos READ pos WRITE setPos)
 	Q_PROPERTY(int animPath READ fakePath WRITE updatePathAnimate)
 	Q_PROPERTY(ConductorProperties properties READ properties WRITE setProperties)
+	Q_PROPERTY(autonum::sequentialNumbers sequenceNum READ sequenceNum WRITE setSequenceNum)
 
 	signals:
 		void propertiesChange();
@@ -62,9 +63,7 @@
 		enum { Type = UserType + 1001 };
 		enum Highlight { None, Normal, Alert };
 
-		/// First terminal the wire is attached to
 		Terminal *terminal1;
-		/// Second terminal the wire is attached to
 		Terminal *terminal2;
 	
 	public:
@@ -89,8 +88,6 @@
 		qreal length() const;
 		ConductorSegment *middleSegment();
 		QPointF posForText(Qt::Orientations &flag);
-		QString text() const;
-		void setText(const QString &);
 		void refreshText();
 
 	public:
@@ -103,8 +100,11 @@
 	public:
 		QVector <QPointF> handlerPoints() const;
 		const QList<ConductorSegment *> segmentsList() const;
-		void setProperties(const ConductorProperties &properties);
+
+		void setPropertyToPotential(const ConductorProperties &property, bool only_text = false);
+		void setProperties(const ConductorProperties &property);
 		ConductorProperties properties() const;
+
 		void setProfile(const ConductorProfile &, Qt::Corner);
 		ConductorProfile profile(Qt::Corner) const;
 		void setProfiles(const ConductorProfilesGroup &);
@@ -118,6 +118,7 @@
 
 		autonum::sequentialNumbers sequenceNum () const {return m_autoNum_seq;}
 		autonum::sequentialNumbers& rSequenceNum()      {return m_autoNum_seq;}
+		void setSequenceNum(autonum::sequentialNumbers sn);
 	private:
 		autonum::sequentialNumbers m_autoNum_seq;
 
@@ -143,7 +144,7 @@
 		/// Functional properties
 		ConductorProperties m_properties;
 		/// Text input for non simple, non-singleline conductors
-		ConductorTextItem *text_item;
+		ConductorTextItem *m_text_item;
 		/// Segments composing the conductor
 		ConductorSegment *segments;
 		/// Attributs related to mouse interaction
@@ -159,14 +160,15 @@
 		/// conductor profile: "photography" of what the conductor is supposed to look
 		/// like - there is one profile per kind of traject
 		ConductorProfilesGroup conductor_profiles;
-		/// QPen et QBrush objects used to draw conductors
-		static QPen conductor_pen;
-		static QBrush conductor_brush;
-		static bool pen_and_brush_initialized;
 		/// Define whether and how the conductor should be highlighted
 		Highlight must_highlight_;
 		bool m_valid;
 		bool m_freeze_label = false;
+
+			/// QPen et QBrush objects used to draw conductors
+		static QPen conductor_pen;
+		static QBrush conductor_brush;
+		static bool pen_and_brush_initialized;
 	
 	private:
 		void segmentsToPath();

Modified: trunk/sources/qetgraphicsitem/terminal.cpp
===================================================================
--- trunk/sources/qetgraphicsitem/terminal.cpp	2016-12-27 14:59:31 UTC (rev 4824)
+++ trunk/sources/qetgraphicsitem/terminal.cpp	2016-12-28 10:03:47 UTC (rev 4825)
@@ -623,8 +623,7 @@
 	if (use_properties)
 	{
 		Conductor *other = conductors_list.toList().first();
-		new_conductor->setText("");
-		new_conductor->setText(other->properties().text);
+		new_conductor->setProperties(other->properties());
 	}
 }
 

Modified: trunk/sources/ui/conductorpropertieswidget.cpp
===================================================================
--- trunk/sources/ui/conductorpropertieswidget.cpp	2016-12-27 14:59:31 UTC (rev 4824)
+++ trunk/sources/ui/conductorpropertieswidget.cpp	2016-12-28 10:03:47 UTC (rev 4825)
@@ -135,7 +135,7 @@
 bool ConductorPropertiesWidget::event(QEvent *event)
 {
 	if (event->type() == QEvent::WindowActivate) {
-		ui -> m_text_le -> setFocus();
+		ui -> m_formula_le -> setFocus();
 	}
 	return(QWidget::event(event));
 }

Modified: trunk/sources/ui/potentialselectordialog.cpp
===================================================================
--- trunk/sources/ui/potentialselectordialog.cpp	2016-12-27 14:59:31 UTC (rev 4824)
+++ trunk/sources/ui/potentialselectordialog.cpp	2016-12-28 10:03:47 UTC (rev 4825)
@@ -24,6 +24,7 @@
 #include "diagram.h"
 #include "element.h"
 #include "reportelement.h"
+#include "assignvariables.h"
 
 //### BEGIN PRIVATE CLASS ###//
 
@@ -43,8 +44,8 @@
 			terminal_1->removeConductor(conductor);
 			terminal_2->removeConductor(conductor);
 
-			getPotential(terminal_1, m_properties_1, m_conductor_number_1);
-			getPotential(terminal_2, m_properties_2, m_conductor_number_2);
+			getPotential(terminal_1, m_properties_1, m_seq_num_1, m_conductor_number_1);
+			getPotential(terminal_2, m_properties_2, m_seq_num_2, m_conductor_number_2);
 
 				//There isn't a potential at terminal 1 or 2.
 			if (m_conductor_number_1 == 0 && m_conductor_number_2 == 0) return;
@@ -64,7 +65,7 @@
 		 * @param properties
 		 * @param number
 		 */
-		void getPotential(Terminal *terminal, ConductorProperties &properties, int &number)
+		void getPotential(Terminal *terminal, ConductorProperties &properties, autonum::sequentialNumbers &seq_num , int &number)
 		{
 			Conductor *conductor_in_potential = nullptr;
 
@@ -99,6 +100,7 @@
 
 			if (!conductor_in_potential) return;
 			properties = conductor_in_potential->properties();
+			seq_num = conductor_in_potential->sequenceNum();
 			number = conductor_in_potential->relatedPotentialConductors().size()+1; //We add +1 because conductor_in_potential isn't count by relatedPotentialConductors
 		}
 
@@ -171,7 +173,7 @@
  * Constructor when we link two potentiels together, with a folio report.
  * @param report : one of the report used to link the potentials (report must be linked to another report)
  * @param parent_undo : undo parent to use
- * @param parent : paren widget
+ * @param parent : parent widget
  */
 PotentialSelectorDialog::PotentialSelectorDialog(Element *report, QUndoCommand *parent_undo, QWidget *parent) :
 	QDialog(parent),
@@ -200,8 +202,22 @@
 	QRadioButton *rb1 = new QRadioButton(tr("Le potentiel avec numero de fil %1 est présent %2 fois").arg(m_potential_selector->m_properties_1.text).arg(m_potential_selector->m_conductor_number_1), this);
 	QRadioButton *rb2 = new QRadioButton(tr("Le potentiel avec numero de fil %1 est présent %2 fois").arg(m_potential_selector->m_properties_2.text).arg(m_potential_selector->m_conductor_number_2), this);
 
-	connect(rb1, &QRadioButton::toggled, [this](bool t){if(t) this->m_selected_properties = this->m_potential_selector->m_properties_1;});
-	connect(rb2, &QRadioButton::toggled, [this](bool t){if(t) this->m_selected_properties = this->m_potential_selector->m_properties_2;});
+	connect(rb1, &QRadioButton::toggled, [this](bool t)
+	{
+		if(t)
+		{
+			this->m_selected_properties = this->m_potential_selector->m_properties_1;
+			this->m_sequential_num = this->m_potential_selector->m_seq_num_1;
+		}
+	});
+	connect(rb2, &QRadioButton::toggled, [this](bool t)
+	{
+		if(t)
+		{
+			this->m_selected_properties = this->m_potential_selector->m_properties_2;
+			this->m_sequential_num = this->m_potential_selector->m_seq_num_2;
+		}
+	});
 
 		//Set the radio button of potential with the bigger number of conductors,
 		//at first position, and check it
@@ -232,6 +248,7 @@
 
 	ConductorProperties new_properties = m_conductor->properties();
 	new_properties.text = m_selected_properties.text;
+	new_properties.m_formula = m_selected_properties.m_formula;
 	new_properties.m_function = m_selected_properties.m_function;
 	new_properties.m_tension_protocol = m_selected_properties.m_tension_protocol;
 
@@ -239,9 +256,19 @@
 	old_value.setValue(m_conductor->properties());
 	new_value.setValue(new_properties);
 
+
+	QUndoCommand *undo = nullptr;
+	if (m_parent_undo)
+		undo = m_parent_undo;
+	else
+		undo = new QUndoCommand(tr("Modifier les propriétés de plusieurs conducteurs", "undo caption"));
+
 		//Set the properties for the new conductor
-	QPropertyUndoCommand *undo = new QPropertyUndoCommand(m_conductor, "properties", old_value, new_value, m_parent_undo);
-	undo->setText(tr("Modifier les propriétés de plusieurs conducteurs", "undo caption"));
+	QVariant old_seq, new_seq;
+	old_seq.setValue(m_conductor->sequenceNum());
+	new_seq.setValue(m_sequential_num);
+	new QPropertyUndoCommand(m_conductor, "sequenceNum", old_seq, new_seq, undo);
+	new QPropertyUndoCommand(m_conductor, "properties", old_value, new_value, undo);
 
 		//Set the new properties for each conductors of the new potential
 	foreach(Conductor *cond, m_conductor->relatedPotentialConductors())
@@ -248,10 +275,13 @@
 	{
 		new_properties = cond->properties();
 		new_properties.text = m_selected_properties.text;
+		new_properties.m_formula = m_selected_properties.m_formula;
 		new_properties.m_function = m_selected_properties.m_function;
 		new_properties.m_tension_protocol = m_selected_properties.m_tension_protocol;
 		old_value.setValue(cond->properties());
 		new_value.setValue(new_properties);
+		old_seq.setValue(cond->sequenceNum());
+		new QPropertyUndoCommand(cond, "sequenceNum", old_seq, new_seq, undo);
 		new QPropertyUndoCommand(cond, "properties", old_value, new_value, undo);
 	}
 
@@ -263,6 +293,7 @@
 	else
 	{
 		delete undo;
+		m_conductor->setSequenceNum(m_sequential_num);
 		m_conductor->setProperties(new_properties);
 	}
 }

Modified: trunk/sources/ui/potentialselectordialog.h
===================================================================
--- trunk/sources/ui/potentialselectordialog.h	2016-12-27 14:59:31 UTC (rev 4824)
+++ trunk/sources/ui/potentialselectordialog.h	2016-12-28 10:03:47 UTC (rev 4825)
@@ -20,6 +20,7 @@
 
 #include <QDialog>
 #include "conductorproperties.h"
+#include "assignvariables.h"
 class Conductor;
 class QUndoCommand;
 class Element;
@@ -32,6 +33,7 @@
 		virtual bool isValid() const = 0;
 
 		ConductorProperties m_properties_1, m_properties_2;
+		autonum::sequentialNumbers m_seq_num_1, m_seq_num_2;
 		int m_conductor_number_1, m_conductor_number_2;
 };
 
@@ -72,6 +74,7 @@
 		Element *m_report;
 		QUndoCommand *m_parent_undo;
 		ConductorProperties m_selected_properties;
+		autonum::sequentialNumbers m_sequential_num;
 		AbstractPotentialSelector *m_potential_selector;
 };
 #endif // POTENTIALSELECTORDIALOG_H


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