From bb213e7146ce49281f0bc9abba35639c807044d3 Mon Sep 17 00:00:00 2001 From: blacksun Date: Mon, 27 Jul 2015 19:25:54 +0000 Subject: [PATCH] Fix regression with shape item when open a project: type (line, rect, ellipse, polygon) is wrong git-svn-id: svn+ssh://svn.tuxfamily.org/svnroot/qet/qet/trunk@4076 bfdf4180-ca20-0410-9c96-a3a8aa849046 --- sources/qetgraphicsitem/qetshapeitem.cpp | 45 +++++++++++++++++++----- 1 file changed, 36 insertions(+), 9 deletions(-) diff --git a/sources/qetgraphicsitem/qetshapeitem.cpp b/sources/qetgraphicsitem/qetshapeitem.cpp index a6abaf04e..5080512fe 100644 --- a/sources/qetgraphicsitem/qetshapeitem.cpp +++ b/sources/qetgraphicsitem/qetshapeitem.cpp @@ -415,26 +415,45 @@ void QetShapeItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) * @param e element where is stored this item * @return true if load success */ -bool QetShapeItem::fromXml(const QDomElement &e) { +bool QetShapeItem::fromXml(const QDomElement &e) +{ if (e.tagName() != "shape") return (false); is_movable_ = (e.attribute("is_movable").toInt()); m_shapeStyle = Qt::PenStyle(e.attribute("style","0").toInt()); - if (e.attribute("type", "0").toInt() != Polyline) { + QString type = e.attribute("type"); + //Compatibility for version older than N°4075, shape type was stored with an int + if (type.size() == 1) + { + switch(e.attribute("type","0").toInt()) + { + case 0: m_shapeType = Line; break; + case 1: m_shapeType = Rectangle; break; + case 2: m_shapeType = Ellipse; break; + case 3: m_shapeType = Polyline; break; + } + } + //For version after N°4075, shape is stored with a string + else + { + if (type == "Line") m_shapeType = Line; + else if (type == "Rectangle") m_shapeType = Rectangle; + else if (type == "Ellipse") m_shapeType = Ellipse; + else if (type == "polygon") m_shapeType = Polyline; + } + + if (m_shapeType != Polyline) + { m_P1.setX(e.attribute("x1", 0).toDouble()); m_P1.setY(e.attribute("y1", 0).toDouble()); m_P2.setX(e.attribute("x2", 0).toDouble()); m_P2.setY(e.attribute("y2", 0).toDouble()); } - - else { - foreach(QDomElement de, QET::findInDomElement(e, "points", "point")) { + else + foreach(QDomElement de, QET::findInDomElement(e, "points", "point")) m_polygon << QPointF(de.attribute("x", 0).toDouble(), de.attribute("y", 0).toDouble()); - } - } - m_shapeType = QetShapeItem::ShapeType(e.attribute("type","0").toInt()); return (true); } @@ -449,7 +468,15 @@ QDomElement QetShapeItem::toXml(QDomDocument &document) const QDomElement result = document.createElement("shape"); //write some attribute - result.setAttribute("type", QString::number(m_shapeType)); + QString type; + switch(m_shapeType) + { + case Line: type = "Line"; break; + case Rectangle: type = "Rectangle"; break; + case Ellipse: type = "Ellipse"; break; + case Polyline: type = "polygon"; break; + } + result.setAttribute("type", type); result.setAttribute("style", QString::number(m_shapeStyle)); result.setAttribute("is_movable", bool(is_movable_)); if (m_shapeType != Polyline)