// Copyright (C) 2008 Lukas Lalinsky // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License along // with this program; if not, write to the Free Software Foundation, Inc., // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. #include "line.h" #include "hub.h" #include "diagramdocument.h" #include "diagramobject.h" #include "connector.h" Line::Line(DiagramItem *parent) : DiagramItem(parent) { m_connectors[0] = new Connector(this); m_connectors[1] = new Connector(this); setZValue(1.0); } Line::~Line() { delete m_connectors[0]; delete m_connectors[1]; } Connector * Line::connector(int index) const { Q_ASSERT(index == 0 || index == 1); return m_connectors[index]; } void Line::updateLayout() { } #include "domutils.h" void Line::loadFromXml(QDomElement element, DiagramDocument *document) { DiagramItem::loadFromXml(element, document); QDomElement lineElement = element.firstChildElement("line"); if (lineElement.isNull()) return; QDomElement connectorListElement = lineElement.firstChildElement("connector-list"); if (connectorListElement.isNull()) return; QDomElement connectorElement = connectorListElement.firstChildElement("connector"); int i = 0; while (!connectorElement.isNull()) { Connector *connector = m_connectors[i++]; qreal angle = readFloatElement(connectorElement, "angle"); connector->setAngle(angle); connector->setPos(readPointElement(connectorElement, "position")); QDomElement hubElement = connectorElement.firstChildElement("hub"); QString ownerId = hubElement.attribute("owner"); if (document && !ownerId.isEmpty()) { DiagramObject *owner = qobject_cast(document->itemById(ownerId)); connector->setHub(owner->hub()); } connectorElement = connectorElement.nextSiblingElement("connector"); } } void Line::saveToXml(QDomDocument doc, QDomElement element) { DiagramItem::saveToXml(doc, element); QDomElement lineElement = doc.createElement("line"); element.appendChild(lineElement); QDomElement connectorListElement = doc.createElement("connector-list"); lineElement.appendChild(connectorListElement); for (int i = 0; i < 2; i++) { Connector *connector = m_connectors[i]; QDomElement connectorElement = doc.createElement("connector"); connectorListElement.appendChild(connectorElement); appendPointElement(doc, connectorElement, "position", connector->pos()); appendFloatElement(doc, connectorElement, "angle", connector->angle()); if (connector->hub()) { QDomElement hubElement = doc.createElement("hub"); connectorElement.appendChild(hubElement); hubElement.setAttribute("owner", connector->hub()->owner()->id()); } } }