mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2026-04-26 14:59:58 +02: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:
33
diagram.cpp
33
diagram.cpp
@@ -70,6 +70,39 @@ void Diagram::drawBackground(QPainter *p, const QRectF &r) {
|
|||||||
p -> restore();
|
p -> restore();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Gere le clavier
|
||||||
|
@param e QKeyEvent decrivant l'evenement clavier
|
||||||
|
*/
|
||||||
|
void Diagram::keyPressEvent(QKeyEvent *e) {
|
||||||
|
qDebug() << "Diagram::keyPressEvent";
|
||||||
|
QPointF movement;
|
||||||
|
switch(e -> key()) {
|
||||||
|
case Qt::Key_Left: movement = QPointF(-GRILLE_X, 0.0); break;
|
||||||
|
case Qt::Key_Right: movement = QPointF(+GRILLE_X, 0.0); break;
|
||||||
|
case Qt::Key_Up: movement = QPointF(0.0, -GRILLE_Y); break;
|
||||||
|
case Qt::Key_Down: movement = QPointF(0.0, +GRILLE_Y); break;
|
||||||
|
}
|
||||||
|
if (!movement.isNull()) {
|
||||||
|
QSet<Element *> moved_elements = elementsToMove();
|
||||||
|
if (!moved_elements.isEmpty()) {
|
||||||
|
Element *first_elmt;
|
||||||
|
foreach(Element *elmt, moved_elements) {
|
||||||
|
first_elmt = elmt;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
first_elmt -> setPos(first_elmt -> pos() + movement);
|
||||||
|
first_elmt -> moveOtherElements(movement);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
QGraphicsScene::keyPressEvent(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Diagram::keyReleaseEvent(QKeyEvent *e) {
|
||||||
|
invalidateMovedElements();
|
||||||
|
QGraphicsScene::keyReleaseEvent(e);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Exporte le schema vers une image
|
Exporte le schema vers une image
|
||||||
@return Une QImage representant le schema
|
@return Une QImage representant le schema
|
||||||
|
|||||||
@@ -38,6 +38,8 @@ class Diagram : public QGraphicsScene {
|
|||||||
// methodes
|
// methodes
|
||||||
public:
|
public:
|
||||||
void drawBackground(QPainter *, const QRectF &);
|
void drawBackground(QPainter *, const QRectF &);
|
||||||
|
void keyPressEvent(QKeyEvent *);
|
||||||
|
void keyReleaseEvent(QKeyEvent *);
|
||||||
|
|
||||||
// fonctions relatives a la pose de conducteurs
|
// fonctions relatives a la pose de conducteurs
|
||||||
void setConducer(bool);
|
void setConducer(bool);
|
||||||
|
|||||||
54
element.cpp
54
element.cpp
@@ -228,35 +228,37 @@ void Element::mouseMoveEvent(QGraphicsSceneMouseEvent *e) {
|
|||||||
if (e -> buttons() & Qt::LeftButton) {
|
if (e -> buttons() & Qt::LeftButton) {
|
||||||
QPointF oldPos = pos();
|
QPointF oldPos = pos();
|
||||||
setPos(mapToParent(e -> pos()) - matrix().map(e -> buttonDownPos(Qt::LeftButton)));
|
setPos(mapToParent(e -> pos()) - matrix().map(e -> buttonDownPos(Qt::LeftButton)));
|
||||||
QPointF diff = pos() - oldPos;
|
moveOtherElements(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());
|
|
||||||
}
|
|
||||||
} else e -> ignore();
|
} 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) {
|
void Element::mouseReleaseEvent(QGraphicsSceneMouseEvent *e) {
|
||||||
if (scene()) {
|
if (scene()) {
|
||||||
Diagram *diagram = qobject_cast<Diagram *>(scene());
|
Diagram *diagram = qobject_cast<Diagram *>(scene());
|
||||||
|
|||||||
@@ -60,6 +60,7 @@ class Element : public QGraphicsItem {
|
|||||||
// methodes relatives a la position
|
// methodes relatives a la position
|
||||||
void setPos(const QPointF &);
|
void setPos(const QPointF &);
|
||||||
void setPos(qreal, qreal);
|
void setPos(qreal, qreal);
|
||||||
|
void moveOtherElements(const QPointF &);
|
||||||
|
|
||||||
// methodes relatives aux connexions internes
|
// methodes relatives aux connexions internes
|
||||||
bool connexionsInternesAcceptees();
|
bool connexionsInternesAcceptees();
|
||||||
|
|||||||
Reference in New Issue
Block a user