Les deplacements d'elements sont desormais annulables

git-svn-id: svn+ssh://svn.tuxfamily.org/svnroot/qet/qet/trunk@137 bfdf4180-ca20-0410-9c96-a3a8aa849046
This commit is contained in:
xavierqet
2007-09-26 17:14:09 +00:00
parent 099d568f84
commit 5150cb38ad
6 changed files with 148 additions and 11 deletions

View File

@@ -3,6 +3,7 @@
#include "diagram.h"
#include "conducer.h"
#include "elementtextitem.h"
#include "diagramcommands.h"
#include <QtDebug>
/**
@@ -238,32 +239,43 @@ void Element::moveOtherElements(const QPointF &diff) {
if (diff.isNull()) return;
// recupere le schema parent
if (!scene()) return;
Diagram *diagram = qobject_cast<Diagram *>(scene());
if (!diagram) return;
Diagram *diagram_ptr = diagram();
if (!diagram_ptr) return;
diagram_ptr -> current_movement += diff;
// deplace les elements selectionnes
foreach(Element *element, diagram -> elementsToMove()) {
foreach(Element *element, diagram_ptr -> elementsToMove()) {
if (element == this) continue;
element -> setPos(element -> pos() + diff);
};
}
// deplace certains conducteurs
foreach(Conducer *conducer, diagram -> conducersToMove()) {
foreach(Conducer *conducer, diagram_ptr -> conducersToMove()) {
conducer -> setPos(conducer -> pos() + diff);
}
// recalcule les autres conducteurs
const QHash<Conducer *, Terminal *> &conducers_modify = diagram -> conducersToUpdate();
const QHash<Conducer *, Terminal *> &conducers_modify = diagram_ptr -> conducersToUpdate();
foreach(Conducer *conducer, conducers_modify.keys()) {
conducer -> updateWithNewPos(QRectF(), conducers_modify[conducer], conducers_modify[conducer] -> amarrageConducer());
}
}
void Element::mouseReleaseEvent(QGraphicsSceneMouseEvent *e) {
if (scene()) {
Diagram *diagram = qobject_cast<Diagram *>(scene());
if (diagram) diagram -> invalidateMovedElements();
Diagram *diagram_ptr = diagram();
if (diagram_ptr && !diagram_ptr -> current_movement.isNull()) {
diagram_ptr -> undoStack().push(
new MoveElementsCommand(
diagram_ptr,
diagram_ptr -> elementsToMove(),
diagram_ptr -> conducersToMove(),
diagram_ptr -> conducersToUpdate(),
diagram_ptr -> current_movement
)
);
diagram_ptr -> invalidateMovedElements();
diagram_ptr -> current_movement = QPointF();
}
QGraphicsItem::mouseReleaseEvent(e);
}