void Fixture_Test::loadWrongID() { QBuffer buffer; buffer.open(QIODevice::WriteOnly | QIODevice::Text); QXmlStreamWriter xmlWriter(&buffer); xmlWriter.writeStartElement("Fixture"); xmlWriter.writeTextElement("Channels", "9"); xmlWriter.writeTextElement("Name", "Foobar"); xmlWriter.writeTextElement("Universe", "0"); xmlWriter.writeTextElement("Model", "MAC250+"); xmlWriter.writeTextElement("Mode", "Mode 1"); xmlWriter.writeTextElement("Manufacturer", "Martin"); xmlWriter.writeTextElement("ID", QString::number(Fixture::invalidId())); xmlWriter.writeTextElement("Address", "21"); xmlWriter.writeEndDocument(); xmlWriter.setDevice(NULL); buffer.close(); buffer.open(QIODevice::ReadOnly | QIODevice::Text); QXmlStreamReader xmlReader(&buffer); xmlReader.readNextStartElement(); Fixture fxi(this); QVERIFY(fxi.loadXML(xmlReader, m_doc, m_doc->fixtureDefCache()) == false); }
void Fixture_Test::loadWrongUniverse() { QBuffer buffer; buffer.open(QIODevice::WriteOnly | QIODevice::Text); QXmlStreamWriter xmlWriter(&buffer); xmlWriter.writeStartElement("Fixture"); xmlWriter.writeTextElement("Channels", "18"); xmlWriter.writeTextElement("Name", "Foobar"); xmlWriter.writeTextElement("Universe", "4"); xmlWriter.writeTextElement("Model", "Foobar"); xmlWriter.writeTextElement("Mode", "Foobar"); xmlWriter.writeTextElement("Manufacturer", "Foobar"); xmlWriter.writeTextElement("ID", "42"); xmlWriter.writeTextElement("Address", "25"); xmlWriter.writeEndDocument(); xmlWriter.setDevice(NULL); buffer.close(); buffer.open(QIODevice::ReadOnly | QIODevice::Text); QXmlStreamReader xmlReader(&buffer); xmlReader.readNextStartElement(); Fixture fxi(this); QVERIFY(fxi.loadXML(xmlReader, m_doc, m_doc->fixtureDefCache()) == true); QVERIFY(fxi.name() == "Foobar"); QVERIFY(fxi.channels() == 18); QVERIFY(fxi.address() == 25); QVERIFY(fxi.universe() == 4); }
void Fixture_Test::status() { // This test is mostly just a stability check since checking lots of // detailed HTML formatting is not that useful. QString info; Fixture fxi(this); info = fxi.status(); fxi.setID(1337); info = fxi.status(); fxi.setName("Test Fixture"); info = fxi.status(); fxi.setUniverse(2); info = fxi.status(); fxi.setAddress(438); info = fxi.status(); fxi.setChannels(12); info = fxi.status(); QLCFixtureDef* fixtureDef; fixtureDef = m_doc->fixtureDefCache()->fixtureDef("Martin", "MAC250+"); Q_ASSERT(fixtureDef != NULL); QLCFixtureMode* fixtureMode; fixtureMode = fixtureDef->modes().at(0); Q_ASSERT(fixtureMode != NULL); fxi.setFixtureDefinition(fixtureDef, fixtureMode); info = fxi.status(); }
void Fixture_Test::channels() { Fixture fxi(this); QLCFixtureDef* fixtureDef = m_doc->fixtureDefCache()->fixtureDef("i-Pix", "BB4"); QVERIFY(fixtureDef != NULL); QLCFixtureMode* fixtureMode = fixtureDef->modes().last(); QVERIFY(fixtureMode != NULL); fxi.setFixtureDefinition(fixtureDef, fixtureMode); QCOMPARE(fxi.channel("red", Qt::CaseInsensitive), quint32(3)); QCOMPARE(fxi.channel("red", Qt::CaseInsensitive, QLCChannel::Intensity), quint32(3)); QCOMPARE(fxi.channel("brown", Qt::CaseInsensitive), QLCChannel::invalid()); QSet <quint32> chs; chs << 3 << 4 << 21 << 22 << 12 << 13 << 30 << 31; QCOMPARE(chs, fxi.channels("red", Qt::CaseInsensitive)); QCOMPARE(chs, fxi.channels("red", Qt::CaseInsensitive, QLCChannel::Intensity)); chs.clear(); chs << 5 << 6 << 23 << 24 << 14 << 15 << 32 << 33; QCOMPARE(chs, fxi.channels("green", Qt::CaseInsensitive)); chs.clear(); QCOMPARE(chs, fxi.channels("green")); chs.clear(); chs << 7 << 8 << 16 << 17 << 25 << 26 << 34 << 35; QCOMPARE(chs, fxi.channels("blue", Qt::CaseInsensitive)); chs.clear(); QCOMPARE(chs, fxi.channels("green", Qt::CaseInsensitive, QLCChannel::Colour)); chs.clear(); QCOMPARE(fxi.channels("brown", Qt::CaseInsensitive, QLCChannel::Intensity), chs); }
int Doc::totalPowerConsumption(int& fuzzy) const { int totalPowerConsumption = 0; // Make sure fuzzy starts from zero fuzzy = 0; QListIterator <Fixture*> fxit(fixtures()); while (fxit.hasNext() == true) { Fixture* fxi(fxit.next()); Q_ASSERT(fxi != NULL); // Generic dimmer has no mode and physical if (fxi->isDimmer() == false && fxi->fixtureMode() != NULL) { QLCPhysical phys = fxi->fixtureMode()->physical(); if (phys.powerConsumption() > 0) totalPowerConsumption += phys.powerConsumption(); else fuzzy++; } else { fuzzy++; } } return totalPowerConsumption; }
void Fixture_Test::dimmer() { Fixture fxi(this); QVERIFY(fxi.fixtureDef() == NULL); QVERIFY(fxi.fixtureMode() == NULL); QVERIFY(fxi.channels() == 0); QVERIFY(fxi.channel(0) == NULL); QVERIFY(fxi.channel(42) == NULL); /* All channels point to the same generic channel instance */ fxi.setChannels(5); QVERIFY(fxi.channels() == 5); QVERIFY(fxi.channel(0) != NULL); const QLCChannel* ch = fxi.channel(0); QVERIFY(fxi.channel(1) != fxi.channel(0)); QVERIFY(fxi.channel(2) != fxi.channel(1)); QVERIFY(fxi.channel(3) != fxi.channel(2)); QVERIFY(fxi.channel(4) != fxi.channel(3)); QVERIFY(fxi.channel(5) == NULL); QVERIFY(fxi.channel(42) == NULL); QVERIFY(fxi.channel(QLCChannel::invalid()) == NULL); QVERIFY(ch->capabilities().count() == 1); QVERIFY(ch->capabilities().at(0)->min() == 0); QVERIFY(ch->capabilities().at(0)->max() == UCHAR_MAX); QVERIFY(ch->capabilities().at(0)->name() == "Intensity"); /* Although the dimmer fixture HAS a channel with this name, it is not returned, because all channels have the same name. */ QVERIFY(fxi.channel(QLCChannel::Intensity) == 0); }
void Fixture_Test::name() { Fixture fxi(this); QVERIFY(fxi.name().isEmpty()); fxi.setName("MyFixture"); QVERIFY(fxi.name() == "MyFixture"); }
void VCXYPadProperties::slotAddClicked() { /* Put all fixtures already present into a list of fixtures that will be disabled in the fixture selection dialog */ QList <t_fixture_id> disabled; QTreeWidgetItemIterator twit(m_tree); while (*twit != NULL) { QVariant var((*twit)->data(KColumnFixture, Qt::UserRole)); VCXYPadFixture fxi(var); disabled << fxi.fixture(); ++twit; } /* Disable all fixtures that don't have pan OR tilt channels */ for (t_fixture_id fxi_id = 0; fxi_id < KFixtureArraySize; fxi_id++) { Fixture* fixture = _app->doc()->fixture(fxi_id); if (fixture == NULL) continue; // If a channel with pan group exists, don't disable this fixture if (fixture->channel("", Qt::CaseSensitive, QLCChannel::Pan) != QLCChannel::invalid()) { continue; } // If a channel with tilt group exists, don't disable this fixture if (fixture->channel("", Qt::CaseSensitive, QLCChannel::Tilt) != QLCChannel::invalid()) { continue; } // Disable all fixtures without pan or tilt channels disabled << fxi_id; } /* Get a list of new fixtures to add to the pad */ QTreeWidgetItem* item = NULL; FixtureSelection fs(this, _app->doc(), true, disabled); if (fs.exec() == QDialog::Accepted) { QListIterator <t_fixture_id> it(fs.selection); while (it.hasNext() == true) { VCXYPadFixture fxi; fxi.setFixture(it.next()); item = new QTreeWidgetItem(m_tree); updateFixtureItem(item, fxi); } } if (item != NULL) m_tree->setCurrentItem(item); }
void Fixture_Test::loadWrongRoot() { QDomDocument doc; Fixture fxi(this); QDomElement root = doc.createElement("Function"); doc.appendChild(root); QVERIFY(fxi.loadXML(&root, m_fixtureDefCache) == false); }
void Fixture_Test::loadDimmer() { QDomDocument doc; QDomElement root = doc.createElement("Fixture"); doc.appendChild(root); QDomElement chs = doc.createElement("Channels"); QDomText chsText = doc.createTextNode("18"); chs.appendChild(chsText); root.appendChild(chs); QDomElement name = doc.createElement("Name"); QDomText nameText = doc.createTextNode("Foobar"); name.appendChild(nameText); root.appendChild(name); QDomElement uni = doc.createElement("Universe"); QDomText uniText = doc.createTextNode("3"); uni.appendChild(uniText); root.appendChild(uni); QDomElement model = doc.createElement("Model"); QDomText modelText = doc.createTextNode("Foobar"); model.appendChild(modelText); root.appendChild(model); QDomElement mode = doc.createElement("Mode"); QDomText modeText = doc.createTextNode("Foobar"); mode.appendChild(modeText); root.appendChild(mode); QDomElement type = doc.createElement("Manufacturer"); QDomText typeText = doc.createTextNode("Foobar"); type.appendChild(typeText); root.appendChild(type); QDomElement id = doc.createElement("ID"); QDomText idText = doc.createTextNode("42"); id.appendChild(idText); root.appendChild(id); QDomElement addr = doc.createElement("Address"); QDomText addrText = doc.createTextNode("21"); addr.appendChild(addrText); root.appendChild(addr); Fixture fxi(this); QVERIFY(fxi.loadXML(&root, m_fixtureDefCache) == true); QVERIFY(fxi.name() == "Foobar"); QVERIFY(fxi.channels() == 18); QVERIFY(fxi.address() == 21); QVERIFY(fxi.universe() == 3); QVERIFY(fxi.fixtureDef() == NULL); QVERIFY(fxi.fixtureMode() == NULL); }
void Fixture_Test::fixtureDef() { Fixture fxi(this); QVERIFY(fxi.fixtureDef() == NULL); QVERIFY(fxi.fixtureMode() == NULL); QVERIFY(fxi.channels() == 0); QVERIFY(fxi.channel(0) == NULL); QCOMPARE(fxi.panMsbChannel(), QLCChannel::invalid()); QCOMPARE(fxi.tiltMsbChannel(), QLCChannel::invalid()); QCOMPARE(fxi.panLsbChannel(), QLCChannel::invalid()); QCOMPARE(fxi.tiltLsbChannel(), QLCChannel::invalid()); QCOMPARE(fxi.masterIntensityChannel(), QLCChannel::invalid()); QLCFixtureDef* fixtureDef; fixtureDef = m_doc->fixtureDefCache()->fixtureDef("Martin", "MAC300"); Q_ASSERT(fixtureDef != NULL); fxi.setFixtureDefinition(fixtureDef, NULL); QVERIFY(fxi.fixtureDef() == NULL); QVERIFY(fxi.fixtureMode() == NULL); QLCFixtureMode* fixtureMode; fixtureMode = fixtureDef->modes().last(); Q_ASSERT(fixtureMode != NULL); fxi.setFixtureDefinition(NULL, fixtureMode); QVERIFY(fxi.fixtureDef() == NULL); QVERIFY(fxi.fixtureMode() == NULL); fxi.setFixtureDefinition(fixtureDef, fixtureMode); QVERIFY(fxi.fixtureDef() != NULL); QVERIFY(fxi.fixtureMode() != NULL); QVERIFY(fxi.fixtureDef() == fixtureDef); QVERIFY(fxi.fixtureMode() == fixtureMode); QVERIFY(fxi.channels() == quint32(fixtureMode->channels().count())); QVERIFY(fxi.channel(fxi.channels() - 1) != NULL); QVERIFY(fxi.channel(fxi.channels()) == NULL); QVERIFY(fxi.channel(QLCChannel::Pan) != QLCChannel::invalid()); const QLCChannel* ch = fxi.channel(fxi.channel(QLCChannel::Pan)); QVERIFY(ch != NULL); QCOMPARE(fxi.panMsbChannel(), quint32(7)); QCOMPARE(fxi.tiltMsbChannel(), quint32(9)); QCOMPARE(fxi.panLsbChannel(), quint32(8)); QCOMPARE(fxi.tiltLsbChannel(), quint32(10)); QCOMPARE(fxi.masterIntensityChannel(), quint32(1)); QCOMPARE(fxi.rgbChannels(), QVector <quint32> ()); QCOMPARE(fxi.cmyChannels(), QVector <quint32> () << 2 << 3 << 4); }
void Fixture_Test::id() { QVERIFY(Fixture::invalidId() == UINT_MAX); Fixture fxi(this); QVERIFY(fxi.id() == Fixture::invalidId()); fxi.setID(50); QVERIFY(fxi.id() == 50); fxi.setID(INT_MAX); QVERIFY(fxi.id() == INT_MAX); }
void VCXYPad::slotAppModeChanged(App::Mode mode) { QMutableListIterator <VCXYPadFixture> it(m_fixtures); while (it.hasNext() == true) { VCXYPadFixture fxi(it.next()); if (mode == App::Operate) fxi.arm(); else fxi.disarm(); it.setValue(fxi); } }
void Fixture_Test::loadWrongID() { QDomDocument doc; QDomElement root = doc.createElement("Fixture"); doc.appendChild(root); QDomElement chs = doc.createElement("Channels"); QDomText chsText = doc.createTextNode("9"); chs.appendChild(chsText); root.appendChild(chs); QDomElement name = doc.createElement("Name"); QDomText nameText = doc.createTextNode("Foobar"); name.appendChild(nameText); root.appendChild(name); QDomElement uni = doc.createElement("Universe"); QDomText uniText = doc.createTextNode("0"); uni.appendChild(uniText); root.appendChild(uni); QDomElement model = doc.createElement("Model"); QDomText modelText = doc.createTextNode("MAC250+"); model.appendChild(modelText); root.appendChild(model); QDomElement mode = doc.createElement("Mode"); QDomText modeText = doc.createTextNode("Mode 1"); mode.appendChild(modeText); root.appendChild(mode); QDomElement type = doc.createElement("Manufacturer"); QDomText typeText = doc.createTextNode("Martin"); type.appendChild(typeText); root.appendChild(type); QDomElement id = doc.createElement("ID"); QDomText idText = doc.createTextNode(QString("%1") .arg(KFixtureArraySize)); id.appendChild(idText); root.appendChild(id); QDomElement addr = doc.createElement("Address"); QDomText addrText = doc.createTextNode("21"); addr.appendChild(addrText); root.appendChild(addr); Fixture fxi(this); QVERIFY(fxi.loadXML(&root, m_fixtureDefCache) == false); }
QList <t_fixture_id> VCXYPadProperties::selectedFixtureIDs() const { QListIterator <QTreeWidgetItem*> it(m_tree->selectedItems()); QList <t_fixture_id> list; /* Put all selected fixture IDs to a list and return it */ while (it.hasNext() == true) { QVariant var(it.next()->data(KColumnFixture, Qt::UserRole)); VCXYPadFixture fxi(var); list << fxi.fixture(); } return list; }
void Fixture_Test::fixtureDef() { Fixture fxi(this); QVERIFY(fxi.fixtureDef() == NULL); QVERIFY(fxi.fixtureMode() == NULL); QVERIFY(fxi.channels() == 0); QVERIFY(fxi.channel(0) == NULL); const QLCFixtureDef* fixtureDef; fixtureDef = m_fixtureDefCache.fixtureDef("Martin", "MAC250+"); Q_ASSERT(fixtureDef != NULL); fxi.setFixtureDefinition(fixtureDef, NULL); QVERIFY(fxi.fixtureDef() == NULL); QVERIFY(fxi.fixtureMode() == NULL); const QLCFixtureMode* fixtureMode; fixtureMode = fixtureDef->modes().at(0); Q_ASSERT(fixtureMode != NULL); fxi.setFixtureDefinition(NULL, fixtureMode); QVERIFY(fxi.fixtureDef() == NULL); QVERIFY(fxi.fixtureMode() == NULL); fxi.setFixtureDefinition(fixtureDef, fixtureMode); QVERIFY(fxi.fixtureDef() != NULL); QVERIFY(fxi.fixtureMode() != NULL); QVERIFY(fxi.fixtureDef() == fixtureDef); QVERIFY(fxi.fixtureMode() == fixtureMode); QVERIFY(fxi.channels() == quint32(fixtureMode->channels().count())); QVERIFY(fxi.channel(fxi.channels() - 1) != NULL); QVERIFY(fxi.channel(fxi.channels()) == NULL); QVERIFY(fxi.channel("Pan") != QLCChannel::invalid()); const QLCChannel* ch = fxi.channel(fxi.channel("Pan")); QVERIFY(ch != NULL); QVERIFY(ch->name().toLower() == "pan"); ch = fxi.channel(fxi.channel("Pan", Qt::CaseInsensitive, QLCChannel::Colour)); QVERIFY(ch == NULL); QVERIFY(fxi.channel("otation") != QLCChannel::invalid()); ch = fxi.channel(fxi.channel("otati")); QVERIFY(ch != NULL); QVERIFY(ch->name().toLower() == "gobo rotation"); }
void VCXYPadProperties::removeFixtureItem(GroupHead const & head) { QTreeWidgetItemIterator it(m_tree); while (*it != NULL) { QVariant var((*it)->data(KColumnFixture, Qt::UserRole)); VCXYPadFixture fxi(m_doc, var); if (fxi.head() == head) { delete (*it); break; } ++it; } }
void Fixture_Test::type() { Fixture fxi(this); QCOMPARE(fxi.type(), QString(KXMLFixtureDimmer)); QLCFixtureDef* fixtureDef; fixtureDef = m_doc->fixtureDefCache()->fixtureDef("Martin", "MAC250+"); QVERIFY(fixtureDef != NULL); QLCFixtureMode* fixtureMode; fixtureMode = fixtureDef->modes().at(0); QVERIFY(fixtureMode != NULL); fxi.setFixtureDefinition(fixtureDef, fixtureMode); QCOMPARE(fxi.type(), fixtureDef->type()); }
void VCXYPadProperties::removeFixtureItem(t_fixture_id fxi_id) { QTreeWidgetItemIterator it(m_tree); while (*it != NULL) { QVariant var((*it)->data(KColumnFixture, Qt::UserRole)); VCXYPadFixture fxi(var); if (fxi.fixture() == fxi_id) { delete (*it); break; } ++it; } }
void Fixture_Test::loadWrongRoot() { QBuffer buffer; buffer.open(QIODevice::WriteOnly | QIODevice::Text); QXmlStreamWriter xmlWriter(&buffer); xmlWriter.writeStartElement("Function"); xmlWriter.writeEndDocument(); xmlWriter.setDevice(NULL); buffer.close(); buffer.open(QIODevice::ReadOnly | QIODevice::Text); QXmlStreamReader xmlReader(&buffer); xmlReader.readNextStartElement(); Fixture fxi(this); QVERIFY(fxi.loadXML(xmlReader, m_doc, m_doc->fixtureDefCache()) == false); }
void VCXYPadProperties::slotEditClicked() { /* Get a list of selected fixtures */ QList <VCXYPadFixture> list(selectedFixtures()); /* Start editor */ VCXYPadFixtureEditor editor(this, list); if (editor.exec() == QDialog::Accepted) { QListIterator <VCXYPadFixture> it(editor.fixtures()); while (it.hasNext() == true) { VCXYPadFixture fxi(it.next()); QTreeWidgetItem* item = fixtureItem(fxi); updateFixtureItem(item, fxi); } } }
void VCXYPadFixtureEditor_Test::accept() { QList <VCXYPadFixture> list; VCXYPadFixture fxi(m_doc); fxi.setDisplayMode(VCXYPadFixture::Percentage); fxi.setHead(GroupHead(0, 0)); fxi.setX(0, 1, false); fxi.setY(0, 1, false); list << fxi; fxi.setHead(GroupHead(1, 0)); fxi.setX(0.5, 0.6, true); fxi.setY(0.5, 0.6, true); list << fxi; VCXYPadFixtureEditor fe(NULL, list); fe.m_xMin->setValue(10); fe.m_xMax->setValue(20); fe.m_yMin->setValue(30); fe.m_yMax->setValue(40); fe.accept(); QCOMPARE(fe.m_xMin->value(), 10); QCOMPARE(fe.m_xMax->value(), 20); QCOMPARE(fe.m_yMin->value(), 30); QCOMPARE(fe.m_yMax->value(), 40); list = fe.fixtures(); QCOMPARE(list[0].head().fxi, quint32(0)); QCOMPARE(list[0].head().head, 0); QCOMPARE(list[0].xMin(), qreal(0.1)); QCOMPARE(list[0].xMax(), qreal(0.2)); QCOMPARE(list[0].yMin(), qreal(0.3)); QCOMPARE(list[0].yMax(), qreal(0.4)); QCOMPARE(list[1].head().fxi, quint32(1)); QCOMPARE(list[1].head().head, 0); QCOMPARE(list[1].xMin(), qreal(0.1)); QCOMPARE(list[1].xMax(), qreal(0.2)); QCOMPARE(list[1].yMin(), qreal(0.3)); QCOMPARE(list[1].yMax(), qreal(0.4)); }
bool Doc::saveXML(QDomDocument* doc, QDomElement* wksp_root) { QDomElement root; Q_ASSERT(doc != NULL); Q_ASSERT(wksp_root != NULL); /* Create the master Engine node */ root = doc->createElement(KXMLQLCEngine); wksp_root->appendChild(root); /* Write fixtures into an XML document */ QListIterator <Fixture*> fxit(fixtures()); while (fxit.hasNext() == true) { Fixture* fxi(fxit.next()); Q_ASSERT(fxi != NULL); fxi->saveXML(doc, &root); } /* Write functions into an XML document */ QListIterator <Function*> funcit(functions()); while (funcit.hasNext() == true) { Function* func(funcit.next()); Q_ASSERT(func != NULL); func->saveXML(doc, &root); } QListIterator <FixtureGroup*> grpit(fixtureGroups()); while (grpit.hasNext() == true) { FixtureGroup* grp(grpit.next()); Q_ASSERT(grp != NULL); grp->saveXML(doc, &root); } return true; }
void Fixture_Test::channels() { Fixture fxi(this); QLCFixtureDef* fixtureDef = m_doc->fixtureDefCache()->fixtureDef("i-Pix", "BB4"); QVERIFY(fixtureDef != NULL); QLCFixtureMode* fixtureMode = fixtureDef->modes().last(); QVERIFY(fixtureMode != NULL); fxi.setFixtureDefinition(fixtureDef, fixtureMode); QCOMPARE(fxi.channel(QLCChannel::Intensity, QLCChannel::Red), quint32(3)); QSet <quint32> chs; chs << 3 << 4 << 21 << 22 << 12 << 13 << 30 << 31; QCOMPARE(chs, fxi.channels(QLCChannel::Intensity, QLCChannel::Red)); chs.clear(); chs << 5 << 6 << 23 << 24 << 14 << 15 << 32 << 33; QCOMPARE(chs, fxi.channels(QLCChannel::Intensity, QLCChannel::Green)); chs.clear(); chs << 7 << 8 << 16 << 17 << 25 << 26 << 34 << 35; QCOMPARE(chs, fxi.channels(QLCChannel::Intensity, QLCChannel::Blue)); chs.clear(); QCOMPARE(chs, fxi.channels(QLCChannel::Colour, QLCChannel::Blue)); }
void VCXYPadFixtureEditor_Test::initial() { QList <VCXYPadFixture> list; VCXYPadFixture fxi(m_doc); fxi.setDisplayMode(VCXYPadFixture::Percentage); fxi.setHead(GroupHead(0, 0)); fxi.setX(0.1, 0.2, false); fxi.setY(0.3, 0.4, true); list << fxi; fxi.setHead(GroupHead(1, 0)); fxi.setX(0, 1, true); fxi.setY(0, 1, false); list << fxi; VCXYPadFixtureEditor fe(NULL, list); QCOMPARE(fe.fixtures(), list); QCOMPARE(fe.m_xMin->value(), 10); QCOMPARE(fe.m_xMax->value(), 20); QCOMPARE(fe.m_xReverse->isChecked(), false); QCOMPARE(fe.m_yMin->value(), 30); QCOMPARE(fe.m_yMax->value(), 40); QCOMPARE(fe.m_yReverse->isChecked(), true); list.clear(); VCXYPadFixtureEditor fe2(NULL, list); QCOMPARE(fe2.fixtures().isEmpty(), true); QCOMPARE(fe2.m_xMin->value(), 0); QCOMPARE(fe2.m_xMax->value(), 100); QCOMPARE(fe2.m_xReverse->isChecked(), false); QCOMPARE(fe2.m_yMin->value(), 0); QCOMPARE(fe2.m_yMax->value(), 100); QCOMPARE(fe2.m_yReverse->isChecked(), false); }
bool VCXYPad::loadXML(const QDomElement* root) { bool visible = false; int x = 0; int y = 0; int w = 0; int h = 0; int xpos = 0; int ypos = 0; QDomNode node; QDomElement tag; QString str; Q_ASSERT(root != NULL); if (root->tagName() != KXMLQLCVCXYPad) { qWarning() << Q_FUNC_INFO << "XY Pad node not found"; return false; } /* Caption */ setCaption(root->attribute(KXMLQLCVCCaption)); /* Children */ node = root->firstChild(); while (node.isNull() == false) { tag = node.toElement(); if (tag.tagName() == KXMLQLCWindowState) { loadXMLWindowState(&tag, &x, &y, &w, &h, &visible); } else if (tag.tagName() == KXMLQLCVCAppearance) { loadXMLAppearance(&tag); } else if (tag.tagName() == KXMLQLCVCXYPadPosition) { str = tag.attribute(KXMLQLCVCXYPadPositionX); xpos = str.toInt(); str = tag.attribute(KXMLQLCVCXYPadPositionY); ypos = str.toInt(); } else if (tag.tagName() == KXMLQLCVCXYPadFixture) { VCXYPadFixture fxi(m_doc); if (fxi.loadXML(tag) == true) appendFixture(fxi); } else { qWarning() << Q_FUNC_INFO << "Unknown XY Pad tag:" << tag.tagName(); } node = node.nextSibling(); } /* First set window dimensions and AFTER that set the pointer's XY position */ setGeometry(x, y, w, h); setCurrentXYPosition(QPoint(xpos, ypos)); return true; }
void Fixture_Test::save() { const QLCFixtureDef* fixtureDef; fixtureDef = m_fixtureDefCache.fixtureDef("Martin", "MAC250+"); Q_ASSERT(fixtureDef != NULL); const QLCFixtureMode* fixtureMode; fixtureMode = fixtureDef->modes().at(0); Q_ASSERT(fixtureMode != NULL); Fixture fxi(this); fxi.setID(1337); fxi.setName("Test Fixture"); fxi.setUniverse(2); fxi.setAddress(438); fxi.setFixtureDefinition(fixtureDef, fixtureMode); QDomDocument doc; QDomElement root = doc.createElement("TestRoot"); QVERIFY(fxi.saveXML(&doc, &root) == true); QDomNode node = root.firstChild(); QVERIFY(node.toElement().tagName() == "Fixture"); bool manufacturer = false, model = false, mode = false, name = false, channels = false, universe = false, address = false, id = false; node = node.firstChild(); while (node.isNull() == false) { QDomElement e = node.toElement(); if (e.tagName() == "Manufacturer") { QVERIFY(e.text() == "Martin"); manufacturer = true; } else if (e.tagName() == "Model") { QVERIFY(e.text() == "MAC250+"); model = true; } else if (e.tagName() == "Mode") { QVERIFY(e.text() == fixtureMode->name()); mode = true; } else if (e.tagName() == "ID") { QVERIFY(e.text() == "1337"); id = true; } else if (e.tagName() == "Name") { QVERIFY(e.text() == "Test Fixture"); name = true; } else if (e.tagName() == "Universe") { QVERIFY(e.text() == "2"); universe = true; } else if (e.tagName() == "Address") { QVERIFY(e.text() == "438"); address = true; } else if (e.tagName() == "Channels") { QVERIFY(e.text().toInt() == fixtureMode->channels().count()); channels = true; } else { QFAIL(QString("Unexpected tag: %1").arg(e.tagName()) .toAscii()); } node = node.nextSibling(); } QVERIFY(manufacturer == true); QVERIFY(model == true); QVERIFY(mode == true); QVERIFY(id == true); QVERIFY(name == true); QVERIFY(universe == true); QVERIFY(address == true); QVERIFY(channels == true); }
void Fixture_Test::save() { QLCFixtureDef* fixtureDef; fixtureDef = m_doc->fixtureDefCache()->fixtureDef("Martin", "MAC250+"); Q_ASSERT(fixtureDef != NULL); QLCFixtureMode* fixtureMode; fixtureMode = fixtureDef->modes().at(0); Q_ASSERT(fixtureMode != NULL); Fixture fxi(this); fxi.setID(1337); fxi.setName("Test Fixture"); fxi.setUniverse(2); fxi.setAddress(438); fxi.setFixtureDefinition(fixtureDef, fixtureMode); QBuffer buffer; buffer.open(QIODevice::WriteOnly | QIODevice::Text); QXmlStreamWriter xmlWriter(&buffer); xmlWriter.writeStartElement("TestRoot"); QVERIFY(fxi.saveXML(&xmlWriter) == true); xmlWriter.setDevice(NULL); buffer.close(); buffer.open(QIODevice::ReadOnly | QIODevice::Text); QXmlStreamReader xmlReader(&buffer); xmlReader.readNextStartElement(); QVERIFY(xmlReader.name().toString() == "TestRoot"); xmlReader.readNextStartElement(); QVERIFY(xmlReader.name().toString() == "Fixture"); bool manufacturer = false, model = false, mode = false, name = false, channels = false, universe = false, address = false, id = false; while (xmlReader.readNextStartElement()) { if (xmlReader.name() == "Manufacturer") { QVERIFY(xmlReader.readElementText() == "Martin"); manufacturer = true; } else if (xmlReader.name() == "Model") { QVERIFY(xmlReader.readElementText() == "MAC250+"); model = true; } else if (xmlReader.name() == "Mode") { QVERIFY(xmlReader.readElementText() == fixtureMode->name()); mode = true; } else if (xmlReader.name() == "ID") { QVERIFY(xmlReader.readElementText() == "1337"); id = true; } else if (xmlReader.name() == "Name") { QVERIFY(xmlReader.readElementText() == "Test Fixture"); name = true; } else if (xmlReader.name() == "Universe") { QVERIFY(xmlReader.readElementText() == "2"); universe = true; } else if (xmlReader.name() == "Address") { QVERIFY(xmlReader.readElementText() == "438"); address = true; } else if (xmlReader.name() == "Channels") { QVERIFY(xmlReader.readElementText().toInt() == fixtureMode->channels().count()); channels = true; } else { QFAIL(QString("Unexpected tag: %1").arg(xmlReader.name().toString()) .toLatin1()); xmlReader.skipCurrentElement(); } } QVERIFY(manufacturer == true); QVERIFY(model == true); QVERIFY(mode == true); QVERIFY(id == true); QVERIFY(name == true); QVERIFY(universe == true); QVERIFY(address == true); QVERIFY(channels == true); }
void VCXYPadProperties::slotAddClicked() { /* Put all fixtures already present into a list of fixtures that will be disabled in the fixture selection dialog */ QList <GroupHead> disabled; QTreeWidgetItemIterator twit(m_tree); while (*twit != NULL) { QVariant var((*twit)->data(KColumnFixture, Qt::UserRole)); VCXYPadFixture fxi(m_doc, var); disabled << fxi.head(); ++twit; } /* Disable all fixtures that don't have pan OR tilt channels */ QListIterator <Fixture*> fxit(m_doc->fixtures()); while (fxit.hasNext() == true) { Fixture* fixture(fxit.next()); Q_ASSERT(fixture != NULL); // If a channel with pan or tilt group exists, don't disable this fixture if (fixture->channel(QLCChannel::Pan) == QLCChannel::invalid() && fixture->channel(QLCChannel::Tilt) == QLCChannel::invalid()) { // Disable all fixtures without pan or tilt channels disabled << fixture->id(); } else { QVector <QLCFixtureHead> const& heads = fixture->fixtureMode()->heads(); for (int i = 0; i < heads.size(); ++i) { if (heads[i].panMsbChannel() == QLCChannel::invalid() && heads[i].tiltMsbChannel() == QLCChannel::invalid() && heads[i].panLsbChannel() == QLCChannel::invalid() && heads[i].tiltLsbChannel() == QLCChannel::invalid()) { // Disable heads without pan or tilt channels disabled << GroupHead(fixture->id(), i); } } } } /* Get a list of new fixtures to add to the pad */ QTreeWidgetItem* item = NULL; FixtureSelection fs(this, m_doc); fs.setMultiSelection(true); fs.setSelectionMode(FixtureSelection::Heads); fs.setDisabledHeads(disabled); if (fs.exec() == QDialog::Accepted) { QListIterator <GroupHead> it(fs.selectedHeads()); while (it.hasNext() == true) { VCXYPadFixture fxi(m_doc); fxi.setHead(it.next()); item = new QTreeWidgetItem(m_tree); updateFixtureItem(item, fxi); } } if (item != NULL) m_tree->setCurrentItem(item); m_tree->resizeColumnToContents(KColumnFixture); m_tree->resizeColumnToContents(KColumnXAxis); m_tree->resizeColumnToContents(KColumnYAxis); }
void Fixture_Test::address() { Fixture fxi(this); fxi.setChannels(5); QVERIFY(fxi.address() == 0); QVERIFY(fxi.universe() == 0); QVERIFY(fxi.universeAddress() == 0); fxi.setUniverse(1); QVERIFY(fxi.address() == 0); QVERIFY(fxi.universe() == 1); QVERIFY(fxi.universeAddress() == (1 << 9)); fxi.setUniverse(2); QVERIFY(fxi.address() == 0); QVERIFY(fxi.universe() == 2); QVERIFY(fxi.universeAddress() == (2 << 9)); fxi.setUniverse(3); QVERIFY(fxi.address() == 0); QVERIFY(fxi.universe() == 3); QVERIFY(fxi.universeAddress() == (3 << 9)); /* The application might support only 4 universes, but there's no reason why Fixture itself couldn't support a million universes, as long as it fits into a uint minus 9 bits. */ fxi.setUniverse(100); QVERIFY(fxi.address() == 0); QVERIFY(fxi.universe() == 100); QVERIFY(fxi.universeAddress() == (100 << 9)); fxi.setAddress(15); fxi.setUniverse(0); QVERIFY(fxi.address() == 15); QVERIFY(fxi.universe() == 0); QVERIFY(fxi.universeAddress() == 15); /* Fixture should allow address overflow; maybe the first two channels that still fit to the universe here are enough for some fixture, who knows? */ fxi.setAddress(510); QVERIFY(fxi.address() == 510); QVERIFY(fxi.universe() == 0); QVERIFY(fxi.universeAddress() == 510); /* Invalid addresses should not be allowed */ fxi.setAddress(600); QVERIFY(fxi.address() == 510); QVERIFY(fxi.universe() == 0); QVERIFY(fxi.universeAddress() == 510); fxi.setAddress(100); QVERIFY(fxi.channelAddress(0) == 100); QVERIFY(fxi.channelAddress(1) == 101); QVERIFY(fxi.channelAddress(2) == 102); QVERIFY(fxi.channelAddress(3) == 103); QVERIFY(fxi.channelAddress(4) == 104); QVERIFY(fxi.channelAddress(5) == QLCChannel::invalid()); QVERIFY(fxi.channelAddress(20) == QLCChannel::invalid()); }