void QLCChannel_Test::colour() { QCOMPARE(int(QLCChannel::NoColour), 0); QCOMPARE(int(QLCChannel::Red), 0xFF0000); QCOMPARE(int(QLCChannel::Green), 0x00FF00); QCOMPARE(int(QLCChannel::Blue), 0x0000FF); QCOMPARE(int(QLCChannel::Cyan), 0x00FFFF); QCOMPARE(int(QLCChannel::Magenta), 0xFF00FF); QCOMPARE(int(QLCChannel::Yellow), 0xFFFF00); QLCChannel* channel = new QLCChannel(); QCOMPARE(channel->colour(), QLCChannel::NoColour); channel->setColour(QLCChannel::Green); QCOMPARE(channel->colour(), QLCChannel::Green); channel->setColour(QLCChannel::Magenta); QCOMPARE(channel->colour(), QLCChannel::Magenta); channel->setColour(QLCChannel::NoColour); QCOMPARE(channel->colour(), QLCChannel::NoColour); }
void QLCChannel_Test::load() { QDomDocument doc; QDomElement root = doc.createElement("Channel"); root.setAttribute("Name", "Channel1"); doc.appendChild(root); QDomElement group = doc.createElement("Group"); root.appendChild(group); group.setAttribute("Byte", 1); QDomText groupName = doc.createTextNode("Tilt"); group.appendChild(groupName); QDomElement colour = doc.createElement("Colour"); QDomText colourText = doc.createTextNode(QLCChannel::colourToString(QLCChannel::Cyan)); colour.appendChild(colourText); root.appendChild(colour); QDomElement cap1 = doc.createElement("Capability"); root.appendChild(cap1); cap1.setAttribute("Min", 0); cap1.setAttribute("Max", 10); QDomText cap1name = doc.createTextNode("Cap1"); cap1.appendChild(cap1name); /* Overlaps with cap1, shouldn't appear in the channel */ QDomElement cap2 = doc.createElement("Capability"); root.appendChild(cap2); cap2.setAttribute("Min", 5); cap2.setAttribute("Max", 15); QDomText cap2name = doc.createTextNode("Cap2"); cap2.appendChild(cap2name); QDomElement cap3 = doc.createElement("Capability"); root.appendChild(cap3); cap3.setAttribute("Min", 11); cap3.setAttribute("Max", 20); QDomText cap3name = doc.createTextNode("Cap3"); cap3.appendChild(cap3name); /* Invalid capability tag, shouldn't appear in the channel, since it is not recognized by the channel. */ QDomElement cap4 = doc.createElement("apability"); root.appendChild(cap4); cap4.setAttribute("Min", 21); cap4.setAttribute("Max", 30); QDomText cap4name = doc.createTextNode("Cap4"); cap4.appendChild(cap4name); /* Missing minimum value, shouldn't appear in the channel, because loadXML() fails. */ QDomElement cap5 = doc.createElement("Capability"); root.appendChild(cap5); cap5.setAttribute("Max", 30); QDomText cap5name = doc.createTextNode("Cap5"); cap5.appendChild(cap5name); QLCChannel ch; QVERIFY(ch.loadXML(&root) == true); qDebug() << int(ch.colour()); QVERIFY(ch.name() == "Channel1"); QVERIFY(ch.group() == QLCChannel::Tilt); QVERIFY(ch.controlByte() == QLCChannel::LSB); QVERIFY(ch.colour() == QLCChannel::Cyan); QVERIFY(ch.capabilities().size() == 2); QVERIFY(ch.capabilities()[0]->name() == "Cap1"); QVERIFY(ch.capabilities()[1]->name() == "Cap3"); }
void QLCChannel_Test::copy() { QLCChannel* channel = new QLCChannel(); QVERIFY(channel->capabilities().size() == 0); channel->setName("Foobar"); channel->setGroup(QLCChannel::Tilt); channel->setControlByte(QLCChannel::ControlByte(3)); channel->setColour(QLCChannel::Yellow); QLCCapability* cap1 = new QLCCapability(10, 19, "10-19"); QVERIFY(channel->addCapability(cap1) == true); QLCCapability* cap2 = new QLCCapability(50, 59, "50-59"); QVERIFY(channel->addCapability(cap2) == true); QLCCapability* cap3 = new QLCCapability(40, 49, "40-49"); QVERIFY(channel->addCapability(cap3) == true); QLCCapability* cap4 = new QLCCapability(0, 9, "0-9"); QVERIFY(channel->addCapability(cap4) == true); QLCCapability* cap5 = new QLCCapability(200, 209, "200-209"); QVERIFY(channel->addCapability(cap5) == true); QLCCapability* cap6 = new QLCCapability(30, 39, "30-39"); QVERIFY(channel->addCapability(cap6) == true); QLCCapability* cap7 = new QLCCapability(26, 29, "26-29"); QVERIFY(channel->addCapability(cap7) == true); QLCCapability* cap8 = new QLCCapability(20, 25, "20-25"); QVERIFY(channel->addCapability(cap8) == true); /* Create a copy of the original channel */ QLCChannel* copy = new QLCChannel(channel); QVERIFY(copy->name() == "Foobar"); QVERIFY(copy->group() == QLCChannel::Tilt); QVERIFY(copy->controlByte() == QLCChannel::ControlByte(3)); QVERIFY(copy->colour() == QLCChannel::Yellow); /* Verify that the capabilities in the copied channel are also copies i.e. their pointers are not the same as the originals. */ QList <QLCCapability*> caps(copy->capabilities()); QVERIFY(caps.size() == 8); QVERIFY(caps.at(0) != cap1); QVERIFY(caps.at(0)->name() == cap1->name()); QVERIFY(caps.at(0)->min() == cap1->min()); QVERIFY(caps.at(0)->max() == cap1->max()); QVERIFY(caps.at(1) != cap2); QVERIFY(caps.at(1)->name() == cap2->name()); QVERIFY(caps.at(1)->min() == cap2->min()); QVERIFY(caps.at(1)->max() == cap2->max()); QVERIFY(caps.at(2) != cap3); QVERIFY(caps.at(2)->name() == cap3->name()); QVERIFY(caps.at(2)->min() == cap3->min()); QVERIFY(caps.at(2)->max() == cap3->max()); QVERIFY(caps.at(3) != cap4); QVERIFY(caps.at(3)->name() == cap4->name()); QVERIFY(caps.at(3)->min() == cap4->min()); QVERIFY(caps.at(3)->max() == cap4->max()); QVERIFY(caps.at(4) != cap5); QVERIFY(caps.at(4)->name() == cap5->name()); QVERIFY(caps.at(4)->min() == cap5->min()); QVERIFY(caps.at(4)->max() == cap5->max()); QVERIFY(caps.at(5) != cap6); QVERIFY(caps.at(5)->name() == cap6->name()); QVERIFY(caps.at(5)->min() == cap6->min()); QVERIFY(caps.at(5)->max() == cap6->max()); QVERIFY(caps.at(6) != cap7); QVERIFY(caps.at(6)->name() == cap7->name()); QVERIFY(caps.at(6)->min() == cap7->min()); QVERIFY(caps.at(6)->max() == cap7->max()); QVERIFY(caps.at(7) != cap8); QVERIFY(caps.at(7)->name() == cap8->name()); QVERIFY(caps.at(7)->min() == cap8->min()); QVERIFY(caps.at(7)->max() == cap8->max()); }
void QLCChannel_Test::load() { QBuffer buffer; buffer.open(QIODevice::WriteOnly | QIODevice::Text); QXmlStreamWriter xmlWriter(&buffer); xmlWriter.writeStartElement("Channel"); xmlWriter.writeAttribute("Name", "Channel1"); xmlWriter.writeStartElement("Group"); xmlWriter.writeAttribute("Byte", "1"); xmlWriter.writeCharacters("Tilt"); xmlWriter.writeEndElement(); xmlWriter.writeTextElement("Colour", QLCChannel::colourToString(QLCChannel::Cyan)); xmlWriter.writeStartElement("Capability"); xmlWriter.writeAttribute("Min", "0"); xmlWriter.writeAttribute("Max", "10"); xmlWriter.writeCharacters("Cap1"); xmlWriter.writeEndElement(); /* Overlaps with cap1, shouldn't appear in the channel */ xmlWriter.writeStartElement("Capability"); xmlWriter.writeAttribute("Min", "5"); xmlWriter.writeAttribute("Max", "15"); xmlWriter.writeCharacters("Cap2"); xmlWriter.writeEndElement(); xmlWriter.writeStartElement("Capability"); xmlWriter.writeAttribute("Min", "11"); xmlWriter.writeAttribute("Max", "20"); xmlWriter.writeCharacters("Cap3"); xmlWriter.writeEndElement(); /* Invalid capability tag, shouldn't appear in the channel, since it is not recognized by the channel. */ xmlWriter.writeStartElement("apability"); xmlWriter.writeAttribute("Min", "21"); xmlWriter.writeAttribute("Max", "30"); xmlWriter.writeCharacters("Cap4"); xmlWriter.writeEndElement(); /* Missing minimum value, shouldn't appear in the channel, because loadXML() fails. */ xmlWriter.writeStartElement("Capability"); xmlWriter.writeAttribute("Max", "30"); xmlWriter.writeCharacters("Cap5"); xmlWriter.writeEndElement(); xmlWriter.writeEndDocument(); xmlWriter.setDevice(NULL); buffer.close(); buffer.open(QIODevice::ReadOnly | QIODevice::Text); QXmlStreamReader xmlReader(&buffer); xmlReader.readNextStartElement(); QLCChannel ch; QVERIFY(ch.loadXML(xmlReader) == true); qDebug() << int(ch.colour()); QVERIFY(ch.name() == "Channel1"); QVERIFY(ch.group() == QLCChannel::Tilt); QVERIFY(ch.controlByte() == QLCChannel::LSB); QVERIFY(ch.colour() == QLCChannel::Cyan); QVERIFY(ch.capabilities().size() == 2); QVERIFY(ch.capabilities()[0]->name() == "Cap1"); QVERIFY(ch.capabilities()[1]->name() == "Cap3"); }
void QLCChannel_Test::colour() { QCOMPARE(int(QLCChannel::NoColour), 0); QCOMPARE(int(QLCChannel::Red), 0xFF0000); QCOMPARE(int(QLCChannel::Green), 0x00FF00); QCOMPARE(int(QLCChannel::Blue), 0x0000FF); QCOMPARE(int(QLCChannel::Cyan), 0x00FFFF); QCOMPARE(int(QLCChannel::Magenta), 0xFF00FF); QCOMPARE(int(QLCChannel::Yellow), 0xFFFF00); QCOMPARE(int(QLCChannel::Amber), 0xFF7E00); QCOMPARE(int(QLCChannel::White), 0xFFFFFF); QCOMPARE(int(QLCChannel::UV), 0x9400D3); QCOMPARE(int(QLCChannel::Lime), 0xADFF2F); QCOMPARE(int(QLCChannel::Indigo), 0x4B0082); QLCChannel* channel = new QLCChannel(); QCOMPARE(channel->colour(), QLCChannel::NoColour); channel->setColour(QLCChannel::Red); QCOMPARE(channel->colour(), QLCChannel::Red); channel->setColour(QLCChannel::Green); QCOMPARE(channel->colour(), QLCChannel::Green); channel->setColour(QLCChannel::Blue); QCOMPARE(channel->colour(), QLCChannel::Blue); channel->setColour(QLCChannel::Cyan); QCOMPARE(channel->colour(), QLCChannel::Cyan); channel->setColour(QLCChannel::Magenta); QCOMPARE(channel->colour(), QLCChannel::Magenta); channel->setColour(QLCChannel::Yellow); QCOMPARE(channel->colour(), QLCChannel::Yellow); channel->setColour(QLCChannel::Amber); QCOMPARE(channel->colour(), QLCChannel::Amber); channel->setColour(QLCChannel::White); QCOMPARE(channel->colour(), QLCChannel::White); channel->setColour(QLCChannel::UV); QCOMPARE(channel->colour(), QLCChannel::UV); channel->setColour(QLCChannel::Lime); QCOMPARE(channel->colour(), QLCChannel::Lime); channel->setColour(QLCChannel::Indigo); QCOMPARE(channel->colour(), QLCChannel::Indigo); channel->setColour(QLCChannel::NoColour); QCOMPARE(channel->colour(), QLCChannel::NoColour); }
void EFX::arm() { int serialNumber = 0; Doc* doc = qobject_cast <Doc*> (parent()); Q_ASSERT(doc != NULL); QListIterator <EFXFixture*> it(m_fixtures); while (it.hasNext() == true) { EFXFixture* ef = it.next(); Q_ASSERT(ef != NULL); ef->setSerialNumber(serialNumber++); /* If fxi == NULL, the fixture has been destroyed */ Fixture* fxi = doc->fixture(ef->fixture()); if (fxi == NULL) continue; /* If this fixture has no mode, it's a generic dimmer that can't do pan&tilt anyway. */ const QLCFixtureMode* mode = fxi->fixtureMode(); if (mode == NULL) continue; QList <quint32> intensityChannels; /* Find exact channel numbers for MSB/LSB pan and tilt */ for (quint32 i = 0; i < quint32(mode->channels().size()); i++) { QLCChannel* ch = mode->channel(i); Q_ASSERT(ch != NULL); if (ch->group() == QLCChannel::Pan) { if (ch->controlByte() == QLCChannel::MSB) ef->setMsbPanChannel(fxi->universeAddress() + i); else if (ch->controlByte() == QLCChannel::LSB) ef->setLsbPanChannel(fxi->universeAddress() + i); } else if (ch->group() == QLCChannel::Tilt) { if (ch->controlByte() == QLCChannel::MSB) ef->setMsbTiltChannel(fxi->universeAddress() + i); else if (ch->controlByte() == QLCChannel::LSB) ef->setLsbTiltChannel(fxi->universeAddress() + i); } else if (ch->group() == QLCChannel::Intensity && ch->colour() == QLCChannel::NoColour) // Don't touch RGB/CMY channels { if (ch->searchCapability(/*D*/"immer", false) != NULL || ch->searchCapability(/*I*/"ntensity", false) != NULL) { intensityChannels << (fxi->universeAddress() + i); } } } ef->setIntensityChannels(intensityChannels); ef->setFadeBus(fadeBusID()); } Q_ASSERT(m_fader == NULL); m_fader = new GenericFader; resetElapsed(); }