diff --git a/sources/conductorautonumerotation.cpp b/sources/conductorautonumerotation.cpp index 5dccbd9d9..eef9452ca 100644 --- a/sources/conductorautonumerotation.cpp +++ b/sources/conductorautonumerotation.cpp @@ -114,22 +114,25 @@ void ConductorAutoNumerotation::applyText(QString t) * @brief ConductorAutoNumerotation::numeratePotential * Numerate a conductor on an existing potential */ -void ConductorAutoNumerotation::numeratePotential() { +void ConductorAutoNumerotation::numeratePotential() +{ QStringList strl; foreach (const Conductor *cc, conductor_list) strl<<(cc->text()); + //the texts is identicals - if (QET::eachStrIsEqual(strl)) { + if (QET::eachStrIsEqual(strl)) + { ConductorProperties cp = conductor_ -> properties(); cp.text = strl.at(0); conductor_ -> setProperties(cp); conductor_ -> setText(strl.at(0)); } - //the texts isn't identicals - else { + //the texts isn't identicals + else + { PotentialTextsDialog ptd (conductor_, conductor_ -> diagramEditor()); - if (ptd.exec() == QDialog::Accepted) { - applyText(ptd.selectedText()); - } + ptd.exec(); + applyText(ptd.selectedText()); } } diff --git a/sources/qetgraphicsitem/conductor.cpp b/sources/qetgraphicsitem/conductor.cpp index b9e4f7026..4710cdd00 100644 --- a/sources/qetgraphicsitem/conductor.cpp +++ b/sources/qetgraphicsitem/conductor.cpp @@ -90,15 +90,11 @@ Conductor::Conductor(Terminal *p1, Terminal* p2) : setFlags(QGraphicsItem::ItemIsSelectable); setAcceptHoverEvents(true); - // ajout du champ de texte editable + // Add the text field text_item = new ConductorTextItem(properties_.text, this); text_item -> setFlag(QGraphicsItem::ItemStacksBehindParent); - connect( - text_item, - SIGNAL(diagramTextChanged(DiagramTextItem *, const QString &, const QString &)), - this, - SLOT(displayedTextChanged()) - ); + + connect(text_item, &ConductorTextItem::diagramTextChanged, this, &Conductor::displayedTextChanged); } /** @@ -1392,43 +1388,38 @@ void Conductor::setHighlighted(Conductor::Highlight hl) { } /** - Met a jour les proprietes du conducteur apres modification du champ de texte affiche -*/ -void Conductor::displayedTextChanged() { - // verifie que le texte a reellement change - if (text_item -> toPlainText() == properties_.text) return; - - if (Diagram *my_diagram = diagram()) + * @brief Conductor::displayedTextChanged + * Update the properties (text) of this conductor and other conductors + * at the same potential of this conductor. + */ +void Conductor::displayedTextChanged() +{ + if ((text_item->toPlainText() == properties_.text) || !diagram()) return; + + QVariant old_value, new_value; + old_value.setValue(properties_); + ConductorProperties new_properties(properties_); + new_properties.text = 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")); + + if (!relatedPotentialConductors().isEmpty()) { - int qmbreturn=0; - //if conductor isn't alone at this potential - //ask user to apply text on every conductors of this potential - if (relatedPotentialConductors().size() >= 1) - { - qmbreturn = QMessageBox::question(diagramEditor(), tr("Textes de conducteurs"), - tr("Voulez-vous appliquer le nouveau texte \n" - "à l'ensemble des conducteurs de ce potentiel ?"), - QMessageBox::No| QMessageBox::Yes, QMessageBox::Yes); - if (qmbreturn == QMessageBox::Yes) - { - ConductorAutoNumerotation can(this, my_diagram); - can.applyText(text_item -> toPlainText()); - } - } + undo->setText(tr("Modifier les propriétés de plusieurs conducteurs", "undo caption")); - if (qmbreturn == 0 || qmbreturn == QMessageBox::No) + foreach (Conductor *potential_conductor, relatedPotentialConductors()) { - QVariant old_value, new_value; - old_value.setValue(properties_); - ConductorProperties new_properties(properties_); - new_properties.text = text_item -> toPlainText(); + old_value.setValue(potential_conductor->properties()); + ConductorProperties new_properties = potential_conductor->properties(); + new_properties.text = 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")); - my_diagram -> undoStack().push(undo); + new QPropertyUndoCommand (potential_conductor, "properties", old_value, new_value, undo); } } + + diagram()->undoStack().push(undo); } diff --git a/sources/ui/conductorpropertiesdialog.cpp b/sources/ui/conductorpropertiesdialog.cpp index 0b35752f9..c27642ffe 100644 --- a/sources/ui/conductorpropertiesdialog.cpp +++ b/sources/ui/conductorpropertiesdialog.cpp @@ -61,28 +61,44 @@ void ConductorPropertiesDialog::PropertiesDialog(Conductor *conductor, QWidget * { ConductorPropertiesDialog cpd (conductor, parent); - if (cpd.exec() == QDialog::Accepted && cpd.properties() != conductor->properties()) + if (cpd.exec() == QDialog::Rejected || cpd.properties() == conductor->properties()) return; + + QVariant old_value, new_value; + old_value.setValue(conductor->properties()); + new_value.setValue(cpd.properties()); + + QPropertyUndoCommand *undo = new QPropertyUndoCommand(conductor, "properties", old_value, new_value); + undo->setText(tr("Modifier les propriétés d'un conducteur", "undo caption")); + + if (!conductor->relatedPotentialConductors().isEmpty()) { - QVariant old_value, new_value; - old_value.setValue(conductor->properties()); - new_value.setValue(cpd.properties()); + undo->setText(tr("Modifier les propriétés de plusieurs conducteurs", "undo caption")); + QString old_text = conductor->properties().text; + QString new_text = cpd.properties().text; - QPropertyUndoCommand *undo = new QPropertyUndoCommand(conductor, "properties", old_value, new_value); - undo->setText(tr("Modifier les propriétés d'un conducteur", "undo caption")); - - //Make undo for all related potiential conductors - if (cpd.applyAll() && !conductor->relatedPotentialConductors().isEmpty()) + foreach (Conductor *potential_conductor, conductor->relatedPotentialConductors()) { - undo->setText(tr("Modifier les propriétés de plusieurs conducteurs", "undo caption")); - foreach (Conductor *cond, conductor->relatedPotentialConductors()) + //"Apply to all conductors of potential" is checked, + //we apply the new properties for every conductors in the same potential. + if (cpd.applyAll()) { - old_value.setValue(cond->properties()); - new QPropertyUndoCommand (cond, "properties", old_value, new_value, undo); + old_value.setValue(potential_conductor->properties()); + new QPropertyUndoCommand (potential_conductor, "properties", old_value, new_value, undo); + } + //The num of conductor isn't affected by "Apply to all conductors of potential" + //we always apply it to the potential if he change. + else if(old_text != new_text) + { + old_value.setValue(potential_conductor->properties()); + ConductorProperties new_properties = potential_conductor->properties(); + new_properties.text = new_text; + new_value.setValue(new_properties); + new QPropertyUndoCommand (potential_conductor, "properties", old_value, new_value, undo); } } - - conductor->diagram()->undoStack().push(undo); } + + conductor->diagram()->undoStack().push(undo); } /** diff --git a/sources/ui/potentialtextsdialog.ui b/sources/ui/potentialtextsdialog.ui index 5108a809c..991da90f4 100644 --- a/sources/ui/potentialtextsdialog.ui +++ b/sources/ui/potentialtextsdialog.ui @@ -6,7 +6,7 @@ 0 0 - 400 + 403 94 @@ -20,7 +20,7 @@ Les textes de ce potentiel électrique ne sont pas identiques. -Appliquer un texte à l'ensemble de ces conducteurs? +Appliquer un texte à l'ensemble de ces conducteurs. @@ -48,7 +48,7 @@ Appliquer un texte à l'ensemble de ces conducteurs? Qt::Horizontal - QDialogButtonBox::Cancel|QDialogButtonBox::Ok + QDialogButtonBox::Ok