mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2025-12-24 03:10:52 +01:00
Il est desormais possible de deplacer les elements d'un schema avec les fleches du clavier
git-svn-id: svn+ssh://svn.tuxfamily.org/svnroot/qet/qet/trunk@123 bfdf4180-ca20-0410-9c96-a3a8aa849046
This commit is contained in:
54
element.cpp
54
element.cpp
@@ -228,35 +228,37 @@ void Element::mouseMoveEvent(QGraphicsSceneMouseEvent *e) {
|
||||
if (e -> buttons() & Qt::LeftButton) {
|
||||
QPointF oldPos = pos();
|
||||
setPos(mapToParent(e -> pos()) - matrix().map(e -> buttonDownPos(Qt::LeftButton)));
|
||||
QPointF diff = pos() - oldPos;
|
||||
|
||||
// inutile de deplacer les autres elements s'il n'y a pas eu de mouvement concret
|
||||
if (diff.isNull()) return;
|
||||
|
||||
// recupere le schema parent
|
||||
if (!scene()) return;
|
||||
Diagram *diagram = qobject_cast<Diagram *>(scene());
|
||||
if (!diagram) return;
|
||||
|
||||
// deplace les elements selectionnes
|
||||
foreach(Element *element, diagram -> elementsToMove()) {
|
||||
if (element == this) continue;
|
||||
element -> setPos(element -> pos() + diff);
|
||||
};
|
||||
|
||||
// deplace certains conducteurs
|
||||
foreach(Conducer *conducer, diagram -> conducersToMove()) {
|
||||
conducer -> setPos(conducer -> pos() + diff);
|
||||
}
|
||||
|
||||
// recalcule les autres conducteurs
|
||||
const QHash<Conducer *, Terminal *> &conducers_modify = diagram -> conducersToUpdate();
|
||||
foreach(Conducer *conducer, conducers_modify.keys()) {
|
||||
conducer -> updateWithNewPos(QRectF(), conducers_modify[conducer], conducers_modify[conducer] -> scenePos());
|
||||
}
|
||||
moveOtherElements(pos() - oldPos);
|
||||
} else e -> ignore();
|
||||
}
|
||||
|
||||
void Element::moveOtherElements(const QPointF &diff) {
|
||||
// inutile de deplacer les autres elements s'il n'y a pas eu de mouvement concret
|
||||
if (diff.isNull()) return;
|
||||
|
||||
// recupere le schema parent
|
||||
if (!scene()) return;
|
||||
Diagram *diagram = qobject_cast<Diagram *>(scene());
|
||||
if (!diagram) return;
|
||||
|
||||
// deplace les elements selectionnes
|
||||
foreach(Element *element, diagram -> elementsToMove()) {
|
||||
if (element == this) continue;
|
||||
element -> setPos(element -> pos() + diff);
|
||||
};
|
||||
|
||||
// deplace certains conducteurs
|
||||
foreach(Conducer *conducer, diagram -> conducersToMove()) {
|
||||
conducer -> setPos(conducer -> pos() + diff);
|
||||
}
|
||||
|
||||
// recalcule les autres conducteurs
|
||||
const QHash<Conducer *, Terminal *> &conducers_modify = diagram -> 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());
|
||||
|
||||
Reference in New Issue
Block a user