From f610efef8dacf2828b9ca253a76a49b10acb6ee5 Mon Sep 17 00:00:00 2001 From: xavier Date: Tue, 4 May 2010 20:18:30 +0000 Subject: [PATCH] Simplification du code permettant la mise a jour des conducteurs lors des deplacements et rotations d'elements. git-svn-id: svn+ssh://svn.tuxfamily.org/svnroot/qet/qet/branches/0.3@984 bfdf4180-ca20-0410-9c96-a3a8aa849046 --- sources/conductor.cpp | 14 +++----------- sources/conductor.h | 2 +- sources/diagram.cpp | 9 ++++----- sources/diagram.h | 6 +++--- sources/diagramcommands.cpp | 8 ++------ sources/diagramcontent.cpp | 6 +++--- sources/diagramcontent.h | 3 +-- sources/terminal.cpp | 12 +++--------- sources/terminal.h | 2 +- 9 files changed, 21 insertions(+), 41 deletions(-) diff --git a/sources/conductor.cpp b/sources/conductor.cpp index f98edee20..abf5c995e 100644 --- a/sources/conductor.cpp +++ b/sources/conductor.cpp @@ -134,18 +134,10 @@ void Conductor::update(const QRectF &rect) { @param b Borne @param newpos position de la borne b */ -void Conductor::updateWithNewPos(const QRectF &rect, const Terminal *b, const QPointF &newpos) { +void Conductor::updateWithNewPos(const QRectF &rect) { QPointF p1, p2; - if (b == terminal1) { - p1 = newpos; - p2 = terminal2 -> dockConductor(); - } else if (b == terminal2) { - p1 = terminal1 -> dockConductor(); - p2 = newpos; - } else { - p1 = terminal1 -> dockConductor(); - p2 = terminal2 -> dockConductor(); - } + p1 = terminal1 -> dockConductor(); + p2 = terminal2 -> dockConductor(); if (nbSegments() && !conductor_profiles[currentPathType()].isNull()) priv_modifieConductor(p1, terminal1 -> orientation(), p2, terminal2 -> orientation()); else diff --git a/sources/conductor.h b/sources/conductor.h index cd2a7a73d..762f28ea1 100644 --- a/sources/conductor.h +++ b/sources/conductor.h @@ -61,7 +61,7 @@ class Conductor : public QObject, public QGraphicsPathItem { /// @return true si ce conducteur est detruit bool isDestroyed() const { return(destroyed); } Diagram *diagram() const; - void updateWithNewPos(const QRectF &, const Terminal *, const QPointF &); + void updateWithNewPos(const QRectF &); void update(const QRectF & = QRectF()); void paint(QPainter *, const QStyleOptionGraphicsItem *, QWidget *); QRectF boundingRect() const; diff --git a/sources/diagram.cpp b/sources/diagram.cpp index a60b411db..4f7e82c31 100644 --- a/sources/diagram.cpp +++ b/sources/diagram.cpp @@ -845,7 +845,7 @@ void Diagram::fetchMovedElements() { if (elements_to_move.contains(other_terminal -> parentElement())) { conductors_to_move << conductor; } else { - conductors_to_update.insert(conductor, terminal); + conductors_to_update << conductor; } } } @@ -879,9 +879,8 @@ void Diagram::moveElements(const QPointF &diff, QGraphicsItem *dontmove) { } // recalcule les autres conducteurs - const QHash &conductors_modify = conductorsToUpdate(); - foreach(Conductor *conductor, conductors_modify.keys()) { - conductor -> updateWithNewPos(QRectF(), conductors_modify[conductor], conductors_modify[conductor] -> dockConductor()); + foreach(Conductor *conductor, conductorsToUpdate()) { + conductor -> updateWithNewPos(QRectF()); } // deplace les champs de texte @@ -1090,7 +1089,7 @@ DiagramContent Diagram::selectedContent() { dc.elements = elementsToMove().toList(); dc.textFields = independentTextsToMove().toList(); dc.conductorsToMove = conductorsToMove().toList(); - dc.conductorsToUpdate = conductorsToUpdate(); + dc.conductorsToUpdate = conductorsToUpdate().toList(); // recupere les conducteurs selectionnes isoles (= non deplacables mais supprimables) foreach(QGraphicsItem *qgi, items()) { diff --git a/sources/diagram.h b/sources/diagram.h index c5b0eae83..dc1f19af4 100644 --- a/sources/diagram.h +++ b/sources/diagram.h @@ -79,7 +79,7 @@ class Diagram : public QGraphicsScene { bool moved_elements_fetched; QSet elements_to_move; QSet conductors_to_move; - QHash conductors_to_update; + QSet conductors_to_update; QSet texts_to_move; QSet elements_texts_to_move; QGIManager *qgi_manager; @@ -158,7 +158,7 @@ class Diagram : public QGraphicsScene { void fetchMovedElements(); const QSet &elementsToMove(); const QSet &conductorsToMove(); - const QHash &conductorsToUpdate(); + const QSet &conductorsToUpdate(); const QSet &independentTextsToMove(); const QSet &elementTextsToMove(); QSet selectedTexts() const; @@ -285,7 +285,7 @@ inline const QSet &Diagram::conductorsToMove() { } /// @return la liste des conducteurs a modifier (typiquement les conducteurs dont seul un element est deplace) -inline const QHash &Diagram::conductorsToUpdate() { +inline const QSet &Diagram::conductorsToUpdate() { if (!moved_elements_fetched) fetchMovedElements(); return(conductors_to_update); } diff --git a/sources/diagramcommands.cpp b/sources/diagramcommands.cpp index 45f29c92c..3bc8f8600 100644 --- a/sources/diagramcommands.cpp +++ b/sources/diagramcommands.cpp @@ -353,12 +353,8 @@ void MoveElementsCommand::move(const QPointF &actual_movement) { } // recalcule les autres conducteurs - foreach(Conductor *conductor, content_to_move.conductorsToUpdate.keys()) { - conductor -> updateWithNewPos( - QRectF(), - content_to_move.conductorsToUpdate[conductor], - content_to_move.conductorsToUpdate[conductor] -> dockConductor() - ); + foreach(Conductor *conductor, content_to_move.conductorsToUpdate) { + conductor -> updateWithNewPos(QRectF()); } // deplace les textes diff --git a/sources/diagramcontent.cpp b/sources/diagramcontent.cpp index bbd4e17a4..3f2859484 100644 --- a/sources/diagramcontent.cpp +++ b/sources/diagramcontent.cpp @@ -52,7 +52,7 @@ DiagramContent::~DiagramContent() { QList DiagramContent::conductors(int filter) const { QList result; if (filter & ConductorsToMove) result += conductorsToMove; - if (filter & ConductorsToUpdate) result += conductorsToUpdate.keys(); + if (filter & ConductorsToUpdate) result += conductorsToUpdate; if (filter & OtherConductors) result += otherConductors; if (filter & SelectedOnly) { foreach(Conductor *conductor, result) { @@ -100,7 +100,7 @@ int DiagramContent::count(int filter) const { if (filter & Elements) foreach(Element *element, elements) { if (element -> isSelected()) ++ count; } if (filter & TextFields) foreach(DiagramTextItem *dti, textFields) { if (dti -> isSelected()) ++ count; } if (filter & ConductorsToMove) foreach(Conductor *conductor, conductorsToMove) { if (conductor -> isSelected()) ++ count; } - if (filter & ConductorsToUpdate) foreach(Conductor *conductor, conductorsToUpdate.keys()) { if (conductor -> isSelected()) ++ count; } + if (filter & ConductorsToUpdate) foreach(Conductor *conductor, conductorsToUpdate) { if (conductor -> isSelected()) ++ count; } if (filter & OtherConductors) foreach(Conductor *conductor, otherConductors) { if (conductor -> isSelected()) ++ count; } } else { if (filter & Elements) count += elements.count(); @@ -143,7 +143,7 @@ QDebug &operator<<(QDebug d, DiagramContent &content) { /* FIXME Le double-heritage QObject / QGraphicsItem a casse cet operateur d << " elements :" << c.elements << "\n"; - d << " conductorsToUpdate :" << c.conductorsToUpdate.keys() << "\n"; + d << " conductorsToUpdate :" << c.conductorsToUpdate << "\n"; d << " conductorsToMove :" << c.conductorsToMove << "\n"; d << " otherConductors :" << c.otherConductors << "\n"; */ diff --git a/sources/diagramcontent.h b/sources/diagramcontent.h index 627e379d8..4791763e7 100644 --- a/sources/diagramcontent.h +++ b/sources/diagramcontent.h @@ -20,7 +20,6 @@ #include class Conductor; class Element; -class Terminal; class IndependentTextItem; /** Cette classe est un conteneur pour passer facilement le contenu d'un schema @@ -55,7 +54,7 @@ class DiagramContent { /// Champs de texte independants du schema QList textFields; /// Conducteurs a mettre a jour du schema - QHash conductorsToUpdate; + QList conductorsToUpdate; /// Conducteurs a deplacer du schema QList conductorsToMove; /// Conducteurs isoles (ni a deplacer, ni a mettre a jour) diff --git a/sources/terminal.cpp b/sources/terminal.cpp index 2333e60e4..9fea77670 100644 --- a/sources/terminal.cpp +++ b/sources/terminal.cpp @@ -372,20 +372,14 @@ void Terminal::mouseReleaseEvent(QGraphicsSceneMouseEvent *e) { } /** - Met a jour l'eventuel conducteur relie a la Terminal. + Met a jour l'eventuel conducteur relie a la borne. @param newpos Position de l'element parent a prendre en compte */ -void Terminal::updateConductor(QPointF newpos) { +void Terminal::updateConductor() { if (!scene() || !parentItem()) return; foreach (Conductor *conductor, conductors_) { if (conductor -> isDestroyed()) continue; - if (newpos == QPointF()) conductor -> update(QRectF()); - else { - // determine la translation subie par l'element parent - QPointF translation = newpos - parentItem() -> pos(); - // rafraichit le conducteur en tenant compte de la translation - conductor -> updateWithNewPos(QRectF(), this, dockConductor() + translation); - } + conductor -> update(QRectF()); } } diff --git a/sources/terminal.h b/sources/terminal.h index b74105b0e..cca148d57 100644 --- a/sources/terminal.h +++ b/sources/terminal.h @@ -61,7 +61,7 @@ class Terminal : public QGraphicsItem { QList conductors() const; QET::Orientation orientation() const; QPointF dockConductor() const; - void updateConductor(QPointF = QPointF()); + void updateConductor(); bool isLinkedTo(Terminal *); bool canBeLinkedTo(Terminal *);