QLCFixtureDef& QLCFixtureDef::operator=(const QLCFixtureDef& fixture) { if (this != &fixture) { QListIterator <QLCChannel*> chit(fixture.m_channels); QListIterator <QLCFixtureMode*> modeit(fixture.m_modes); m_manufacturer = fixture.m_manufacturer; m_model = fixture.m_model; m_type = fixture.m_type; m_author = fixture.m_author; /* Clear all channels */ while (m_channels.isEmpty() == false) delete m_channels.takeFirst(); /* Copy channels from the other fixture */ while (chit.hasNext() == true) m_channels.append(new QLCChannel(chit.next())); /* Clear all modes */ while (m_modes.isEmpty() == false) delete m_modes.takeFirst(); /* Copy modes from the other fixture */ while (modeit.hasNext() == true) m_modes.append(new QLCFixtureMode(this, modeit.next())); } return *this; }
QFile::FileError QLCFixtureDef::saveXML(const QString& fileName) { QFile::FileError error; if (fileName.isEmpty() == true) return QFile::OpenError; QFile file(fileName); if (file.open(QIODevice::WriteOnly) == false) return file.error(); QDomDocument doc(QLCFile::getXMLHeader(KXMLQLCFixtureDefDocument, author())); Q_ASSERT(doc.isNull() == false); /* Create a text stream for the file */ QTextStream stream(&file); stream.setAutoDetectUnicode(true); stream.setCodec("UTF-8"); /* Fixture tag */ QDomElement root = doc.documentElement(); QDomElement tag; QDomText text; /* Manufacturer */ tag = doc.createElement(KXMLQLCFixtureDefManufacturer); root.appendChild(tag); text = doc.createTextNode(m_manufacturer); tag.appendChild(text); /* Model */ tag = doc.createElement(KXMLQLCFixtureDefModel); root.appendChild(tag); text = doc.createTextNode(m_model); tag.appendChild(text); /* Type */ tag = doc.createElement(KXMLQLCFixtureDefType); root.appendChild(tag); text = doc.createTextNode(m_type); tag.appendChild(text); /* Channels */ QListIterator <QLCChannel*> chit(m_channels); while (chit.hasNext() == true) chit.next()->saveXML(&doc, &root); /* Modes */ QListIterator <QLCFixtureMode*> modeit(m_modes); while (modeit.hasNext() == true) modeit.next()->saveXML(&doc, &root); /* Write the document into the stream */ stream << doc.toString(); error = QFile::NoError; file.close(); return error; }
QFile::FileError QLCFixtureDef::saveXML(const QString& fileName) { QFile::FileError error; if (fileName.isEmpty() == true) return QFile::OpenError; QString tempFileName(fileName); tempFileName += ".temp"; QFile file(tempFileName); if (file.open(QIODevice::WriteOnly) == false) return file.error(); QXmlStreamWriter doc(&file); doc.setAutoFormatting(true); doc.setAutoFormattingIndent(1); doc.setCodec("UTF-8"); QLCFile::writeXMLHeader(&doc, KXMLQLCFixtureDefDocument, author()); doc.writeTextElement(KXMLQLCFixtureDefManufacturer, m_manufacturer); doc.writeTextElement(KXMLQLCFixtureDefModel, m_model); doc.writeTextElement(KXMLQLCFixtureDefType, m_type); /* Channels */ QListIterator <QLCChannel*> chit(m_channels); while (chit.hasNext() == true) chit.next()->saveXML(&doc); /* Modes */ QListIterator <QLCFixtureMode*> modeit(m_modes); while (modeit.hasNext() == true) modeit.next()->saveXML(&doc); /* End the document and close all the open elements */ error = QFile::NoError; doc.writeEndDocument(); file.close(); // Save to actual requested file name QFile currFile(fileName); if (currFile.exists() && !currFile.remove()) { qWarning() << "Could not erase" << fileName; return currFile.error(); } if (!file.rename(fileName)) { qWarning() << "Could not rename" << tempFileName << "to" << fileName; return file.error(); } return error; }
bool QLCFixtureDef::removeChannel(QLCChannel* channel) { /* First remove the channel from all modes */ QListIterator <QLCFixtureMode*> modeit(m_modes); while (modeit.hasNext() == true) modeit.next()->removeChannel(channel); /* Then remove the actual channel from this fixture definition */ QMutableListIterator <QLCChannel*> chit(m_channels); while (chit.hasNext() == true) { if (chit.next() == channel) { chit.remove(); delete channel; return true; } } return false; }