diff --git a/sources/diagramcommands.cpp b/sources/diagramcommands.cpp index b1e684a10..624e8326b 100644 --- a/sources/diagramcommands.cpp +++ b/sources/diagramcommands.cpp @@ -988,14 +988,25 @@ ChangeSeveralConductorsPropertiesCommand::~ChangeSeveralConductorsPropertiesComm /// definit l'ancienne configuration void ChangeSeveralConductorsPropertiesCommand::setOldSettings(const QList &properties) { - old_properties = properties; - old_settings_set = true; + if (!old_settings_set) { + old_properties = properties; + old_settings_set = true; + } } /// definit la nouvelle configuration void ChangeSeveralConductorsPropertiesCommand::setNewSettings(const QList &properties) { - new_properties = properties; - new_settings_set = true; + if (!new_settings_set) { + new_properties = properties; + new_settings_set = true; + } +} + +void ChangeSeveralConductorsPropertiesCommand::setNewSettings(const ConductorProperties &properties) { + if (!new_settings_set) { + single_new_properties = properties; + new_settings_set = true; + } } /** @@ -1019,11 +1030,23 @@ void ChangeSeveralConductorsPropertiesCommand::undo() { */ void ChangeSeveralConductorsPropertiesCommand::redo() { if (old_settings_set && new_settings_set) { - int i=0; - foreach(Conductor *c, conductors) { - c -> setProperties(new_properties.at(i)); - c -> update(); - i++; + + //new propertie are the same for each conductor + if (new_properties.isEmpty()) { + foreach(Conductor *c, conductors) { + c -> setProperties(single_new_properties); + c -> update(); + } + } + + //new propertie are different for each conductor + else { + int i=0; + foreach(Conductor *c, conductors) { + c -> setProperties(new_properties.at(i)); + c -> update(); + i++; + } } } } diff --git a/sources/diagramcommands.h b/sources/diagramcommands.h index a95beb6a5..55e37a68b 100644 --- a/sources/diagramcommands.h +++ b/sources/diagramcommands.h @@ -544,6 +544,7 @@ class ChangeSeveralConductorsPropertiesCommand : public QUndoCommand { virtual void redo(); virtual void setOldSettings(const QList &); virtual void setNewSettings(const QList &); + virtual void setNewSettings(const ConductorProperties &); // attributes private: @@ -553,6 +554,8 @@ class ChangeSeveralConductorsPropertiesCommand : public QUndoCommand { QList old_properties; /// properties after the change QList new_properties; + /// single properties for each conductor + ConductorProperties single_new_properties; /// track whether pre-change properties were set bool old_settings_set; /// track whether post-change properties were set diff --git a/sources/diagramview.cpp b/sources/diagramview.cpp index 1dc1a9b73..e078e3edf 100644 --- a/sources/diagramview.cpp +++ b/sources/diagramview.cpp @@ -1047,43 +1047,39 @@ void DiagramView::editConductor(Conductor *edited_conductor) { if (conductor_dialog.exec() == QDialog::Accepted) { // recupere les nouvelles proprietes ConductorProperties new_properties = cpw -> conductorProperties(); + if (new_properties != old_properties) { int qmbreturn=0; - //if conductor isn't alone at this potential and text is changed + //if conductor isn't alone at this potential and is property is changed //ask user to apply text on every conductors of this potential - if ((edited_conductor -> relatedPotentialConductors().size() >= 1) && (old_properties.text != new_properties.text)){ - qmbreturn = QMessageBox::question(diagramEditor(), tr("Textes de conducteurs"), - tr("Voulez-vous appliquer le nouveau texte \n" + if (edited_conductor -> relatedPotentialConductors().size() >= 1){ + qmbreturn = QMessageBox::question(diagramEditor(), tr("Propri\351t\351 de conducteurs"), + tr("Voulez-vous appliquer les nouvelles propri\351t\351s \n" "\340 l'ensemble des conducteurs de ce potentiel ?"), QMessageBox::No| QMessageBox::Yes, QMessageBox::Yes); if (qmbreturn == QMessageBox::Yes){ QSet conductorslist = edited_conductor -> relatedPotentialConductors(); conductorslist << edited_conductor; - QList old_properties_list, new_properties_list; - ConductorProperties cp; + QList old_properties_list; foreach (Conductor *c, conductorslist) { if (c == edited_conductor) { old_properties_list << old_properties; - new_properties_list << new_properties; } else { old_properties_list << c -> properties(); - cp = c -> properties(); - cp.text = new_properties.text; - c -> setProperties(cp); - new_properties_list << c -> properties(); - c -> setText(new_properties.text); + c -> setProperties(new_properties); } } //initialize the corresponding UndoCommand object ChangeSeveralConductorsPropertiesCommand *cscpc = new ChangeSeveralConductorsPropertiesCommand(conductorslist); cscpc -> setOldSettings(old_properties_list); - cscpc -> setNewSettings(new_properties_list); + cscpc -> setNewSettings(new_properties); diagram() -> undoStack().push(cscpc); } } + if (qmbreturn == 0 || qmbreturn == QMessageBox::No) { // initialise l'objet UndoCommand correspondant ChangeConductorPropertiesCommand *ccpc = new ChangeConductorPropertiesCommand(edited_conductor);