[qet] [3487] Fix wrong behavior with conductor text item when use "past here" |
[ Thread Index |
Date Index
| More lists.tuxfamily.org/qet Archives
]
Revision: 3487
Author: blacksun
Date: 2014-11-14 20:58:25 +0100 (Fri, 14 Nov 2014)
Log Message:
-----------
Fix wrong behavior with conductor text item when use "past here"
Modified Paths:
--------------
trunk/sources/diagram.cpp
Modified: trunk/sources/diagram.cpp
===================================================================
--- trunk/sources/diagram.cpp 2014-11-14 13:10:43 UTC (rev 3486)
+++ trunk/sources/diagram.cpp 2014-11-14 19:58:25 UTC (rev 3487)
@@ -576,15 +576,16 @@
}
}
- // chargement de tous les textes du fichiers XML
+ // Load text
QList<IndependentTextItem *> added_texts;
foreach (QDomElement text_xml, QET::findInDomElement(root, "inputs", "input")) {
- IndependentTextItem *iti = new IndependentTextItem(this);
+ IndependentTextItem *iti = new IndependentTextItem(this);
iti -> fromXml(text_xml);
addItem(iti);
added_texts << iti;
}
+ // Load image
QList<DiagramImageItem *> added_images;
foreach (QDomElement image_xml, QET::findInDomElement(root, "images", "image")) {
DiagramImageItem *dii = new DiagramImageItem ();
@@ -593,6 +594,7 @@
added_images << dii;
}
+ // Load shape
QList<QetShapeItem *> added_shapes;
foreach (QDomElement shape_xml, QET::findInDomElement(root, "shapes", "shape")) {
QetShapeItem *dii = new QetShapeItem (QPointF(0,0));
@@ -600,47 +602,8 @@
addItem(dii);
added_shapes << dii;
}
-
- // gere la translation des nouveaux elements et texte si celle-ci est demandee
- if (position != QPointF()) {
- // determine quel est le coin superieur gauche du rectangle entourant les elements ajoutes
- qreal minimum_x = 0, minimum_y = 0;
- bool init = false;
- QList<QGraphicsItem *> added_items;
- foreach (Element *added_element, added_elements) added_items << added_element;
- foreach (DiagramTextItem *added_text, added_texts) added_items << added_text;
- foreach (DiagramImageItem *added_image, added_images) added_items << added_image;
- foreach (QetShapeItem *added_shape, added_shapes) added_items << added_shape;
- foreach (QGraphicsItem *item, added_items) {
- QPointF csg = item -> mapToScene(item -> boundingRect()).boundingRect().topLeft();
- qreal px = csg.x();
- qreal py = csg.y();
- if (!init) {
- minimum_x = px;
- minimum_y = py;
- init = true;
- } else {
- if (px < minimum_x) minimum_x = px;
- if (py < minimum_y) minimum_y = py;
- }
- }
- qreal diff_x = position.x() - minimum_x;
- qreal diff_y = position.y() - minimum_y;
- foreach (Element *added_element, added_elements) {
- added_element -> setPos(added_element -> pos().x() + diff_x, added_element -> pos().y() + diff_y);
- }
- foreach (DiagramTextItem *added_text, added_texts) {
- added_text -> setPos(added_text -> pos().x() + diff_x, added_text -> pos().y() + diff_y);
- }
- foreach (DiagramImageItem *added_image, added_images) {
- added_image -> setPos(added_image -> pos().x() + diff_x, added_image -> pos().y() + diff_y);
- }
- foreach (QetShapeItem *added_shape, added_shapes) {
- added_shape -> setPos(added_shape -> pos().x() + diff_x, added_shape -> pos().y() + diff_y);
- }
- }
-
- // chargement de tous les Conducteurs du fichier XML
+
+ // Load conductor
QList<Conductor *> added_conductors;
foreach (QDomElement f, QET::findInDomElement(root, "conductors", "conductor")) {
if (!Conductor::valideXml(f)) continue;
@@ -667,6 +630,31 @@
}
} else qDebug() << "Diagram::fromXml() : Le chargement du conducteur" << id_p1 << id_p2 << "a echoue";
}
+
+ //Translate items if a new position was given in parameter
+ if (position != QPointF()) {
+
+ QList<QGraphicsItem *> added_items;
+ foreach (Element *added_element, added_elements ) added_items << added_element;
+ foreach (Conductor *added_cond, added_conductors) added_items << added_cond;
+ foreach (QetShapeItem *added_shape, added_shapes ) added_items << added_shape;
+ foreach (DiagramTextItem *added_text, added_texts ) added_items << added_text;
+ foreach (DiagramImageItem *added_image, added_images ) added_items << added_image;
+
+ //Get the top left corner of the rectangle that contain all added items
+ QRectF items_rect;
+ foreach (QGraphicsItem *item, added_items) {
+ items_rect = items_rect.united(item -> mapToScene(item -> boundingRect()).boundingRect());
+ }
+
+ QPointF point_ = items_rect.topLeft();
+ QPointF pos_ = Diagram::snapToGrid(QPointF (position.x() - point_.x(),
+ position.y() - point_.y()));
+
+ //Translate all added items
+ foreach (QGraphicsItem *qgi, added_items)
+ qgi -> setPos( qgi -> pos() += pos_);
+ }
// remplissage des listes facultatives
if (content_ptr) {