QLCFixtureMode *Fixture::genericRGBPanelMode(QLCFixtureDef *def, Components components, quint32 width, quint32 height) { Q_ASSERT(def != NULL); QLCFixtureMode *mode = new QLCFixtureMode(def); int compNum = 3; if (components == BGR) { mode->setName("BGR"); } else if (components == RGBW) { mode->setName("RGBW"); compNum = 4; } else if (components == RGBWW) { mode->setName("RGBWW"); compNum = 5; } else mode->setName("RGB"); QList<QLCChannel *>channels = def->channels(); for (int i = 0; i < channels.count(); i++) { QLCChannel *ch = channels.at(i); mode->insertChannel(ch, i); if (i%compNum == 0) { QLCFixtureHead head; head.addChannel(i); head.addChannel(i+1); head.addChannel(i+2); if (components == RGBW) head.addChannel(i+3); else if (components == RGBWW) { head.addChannel(i+3); head.addChannel(i+4); } mode->insertHead(-1, head); } } QLCPhysical physical; physical.setWidth(width); physical.setHeight(height); physical.setDepth(height); mode->setPhysical(physical); return mode; }
void QLCFixtureMode_Test::copy() { QLCFixtureMode* mode = new QLCFixtureMode(m_fixtureDef); mode->setName("Test Mode"); mode->insertChannel(m_ch1, 0); mode->insertChannel(m_ch2, 1); mode->insertChannel(m_ch3, 2); mode->insertChannel(m_ch4, 3); /* Create a copy of the mode to the same fixtureDef as the original */ QLCFixtureMode* copy = new QLCFixtureMode(m_fixtureDef, mode); QVERIFY(copy != NULL); QVERIFY(copy->name() == "Test Mode"); QVERIFY(copy->channels().size() == 4); QVERIFY(copy->channel(0) == m_ch1); QVERIFY(copy->channel(1) == m_ch2); QVERIFY(copy->channel(2) == m_ch3); QVERIFY(copy->channel(3) == m_ch4); delete copy; copy = NULL; /* Create another fixture def with some channels matching, some not */ QLCFixtureDef* anotherDef = new QLCFixtureDef(); QLCChannel* ch1 = new QLCChannel(); ch1->setName("Channel 1"); // Should match anotherDef->addChannel(ch1); QLCChannel* ch2 = new QLCChannel(); ch2->setName("Channel 2, not the same name"); // Shouldn't match anotherDef->addChannel(ch2); QLCChannel* ch3 = new QLCChannel(); ch3->setName("Channel 3, still not the same name"); // Shouldn't match anotherDef->addChannel(ch3); QLCChannel* ch4 = new QLCChannel(); ch4->setName("Channel 4"); // Should match anotherDef->addChannel(ch4); QLCChannel* ch5 = new QLCChannel(); ch5->setName("Channel 5"); // Shouldn't match since original has 4 chans anotherDef->addChannel(ch5); /* Create a copy of the mode to the other fixtureDef */ copy = new QLCFixtureMode(anotherDef, mode); QVERIFY(copy->name() == "Test Mode"); QVERIFY(copy->channels().size() == 2); QVERIFY(copy->channel(0)->name() == "Channel 1"); QVERIFY(copy->channel(0) == ch1); QVERIFY(copy->channel(1)->name() == "Channel 4"); QVERIFY(copy->channel(1) == ch4); delete copy; delete anotherDef; }
QLCFixtureMode *Fixture::genericDimmerMode(QLCFixtureDef *def, int channels) { Q_ASSERT(def != NULL); QLCFixtureMode *mode = new QLCFixtureMode(def); mode->setName(QString("%1 Channel").arg(channels)); QList<QLCChannel *>chList = def->channels(); for (int i = 0; i < chList.count(); i++) { QLCChannel *ch = chList.at(i); mode->insertChannel(ch, i); QLCFixtureHead head; head.addChannel(i); mode->insertHead(-1, head); } QLCPhysical physical; physical.setWidth(300 * channels); physical.setHeight(300); physical.setDepth(300); mode->setPhysical(physical); def->addMode(mode); return mode; }
void QLCFixtureMode_Test::name() { /* Verify that a name can be set & get for the mode */ QLCFixtureMode* mode = new QLCFixtureMode(m_fixtureDef); QVERIFY(mode->name().isEmpty()); mode->setName("Normal"); QVERIFY(mode->name() == "Normal"); delete mode; }
void QLCFixtureEditor::slotCloneMode() { QLCFixtureMode* mode = NULL; bool ok = false; QString text; mode = currentMode(); if (mode == NULL) return; while (1) { text = QInputDialog::getText(this, tr("Rename new mode"), tr("Give a unique name for the mode"), QLineEdit::Normal, tr("Copy of %1").arg(mode->name()), &ok); if (ok == true && text.isEmpty() == false) { /* User entered a name that is already found from the fixture definition -> again */ if (mode->fixtureDef()->mode(text) != NULL) { QMessageBox::information(this, tr("Invalid name"), tr("Another mode by that name already exists.")); ok = false; continue; } /* Create new mode and an item for it */ QTreeWidgetItem* item; QLCFixtureMode* clone; clone = new QLCFixtureMode(mode->fixtureDef(), mode); clone->setName(text); item = new QTreeWidgetItem(m_modeList); mode->fixtureDef()->addMode(clone); updateModeItem(clone, item); m_modeList->setCurrentItem(item); setModified(); break; } else { // User pressed cancel break; } } }
void QLCFixtureEditor::slotCloneMode() { QLCFixtureMode* mode = NULL; QLCFixtureMode* clone = NULL; bool ok = false; QString text; mode = currentMode(); if (mode == NULL) return; while (1) { text = QInputDialog::getText(this, tr("Rename new mode"), tr("Give a unique name for the mode"), QLineEdit::Normal, "Copy of " + mode->name(), &ok); if (ok == true && text.isEmpty() == false) { /* User entered a name that is already found from the fixture definition -> again */ if (mode->fixtureDef()->mode(text) != NULL) { QMessageBox::information( this, tr("Invalid name"), tr("Another mode by that name already exists.")); ok = false; continue; } clone = new QLCFixtureMode(mode); clone->setName(text); mode->fixtureDef()->addMode(clone); refreshModeList(); break; } else { // User pressed cancel break; } } }
void QLCFixtureDef_Test::saveLoadXML() { const QString path("qlcfixturedef_test_saveXML.qxf"); QLCFixtureDef* def = new QLCFixtureDef; def->setManufacturer("Foobar"); def->setModel("Xyzzy"); def->setType("Blinder"); QLCChannel* ch = new QLCChannel; ch->setName("Whatever"); def->addChannel(ch); QLCFixtureMode* mode = new QLCFixtureMode(def); mode->setName("Barfoo"); def->addMode(mode); mode->insertChannel(ch, 0); QVERIFY(def->saveXML(QString("zxcvb:/path/to/nowhere") + path) != QFile::NoError); QCOMPARE(def->saveXML(path), QFile::NoError); // Test only QLCFixtureDef's doings and don't go into channel/mode details // since they are tested in their individual unit tests. QLCFixtureDef* def2 = new QLCFixtureDef; QCOMPARE(def2->loadXML(QString()), QFile::OpenError); QCOMPARE(def2->loadXML("/path/beyond/this/universe/foo.qxf"), QFile::ReadError); QCOMPARE(def2->loadXML("readonly.xml"), QFile::ReadError); QCOMPARE(def2->loadXML(path), QFile::NoError); QCOMPARE(def2->manufacturer(), def->manufacturer()); QCOMPARE(def2->model(), def->model()); QCOMPARE(def2->channels().size(), 1); QCOMPARE(def2->channels().at(0)->name(), ch->name()); QCOMPARE(def2->modes().size(), 1); QCOMPARE(def2->modes().at(0)->name(), mode->name()); delete def; delete def2; QFile::remove(path); QVERIFY(QFile::exists(path) == false); }
void QLCFixtureMode_Test::insertChannel() { QLCFixtureMode* mode = new QLCFixtureMode(m_fixtureDef); mode->setName("Test"); QVERIFY(mode->insertChannel(NULL, 0) == false); QVERIFY(mode->channels().size() == 0); /* Channel that doesn't belong to mode->fixtureDef() */ QLCChannel* ch = new QLCChannel(); ch->setName("Rogue"); mode->insertChannel(ch, 0); QVERIFY(mode->channels().size() == 0); delete ch; /* First channel */ mode->insertChannel(m_ch1, 0); QVERIFY(mode->channel(0) == m_ch1); /* Second prepended */ mode->insertChannel(m_ch2, 0); QVERIFY(mode->channel(0) == m_ch2); QVERIFY(mode->channel(1) == m_ch1); /* Third appended way over the end */ mode->insertChannel(m_ch3, 10); QVERIFY(mode->channel(0) == m_ch2); QVERIFY(mode->channel(1) == m_ch1); QVERIFY(mode->channel(2) == m_ch3); /* Fourth inserted in-between */ mode->insertChannel(m_ch4, 1); QVERIFY(mode->channel(0) == m_ch2); QVERIFY(mode->channel(1) == m_ch4); QVERIFY(mode->channel(2) == m_ch1); QVERIFY(mode->channel(3) == m_ch3); delete mode; }
void QLCFixtureDef_Test::copy() { QLCFixtureDef* fd = new QLCFixtureDef(); fd->setManufacturer("Martin"); fd->setModel("MAC600"); fd->setType("Moving Head"); QLCChannel* ch = new QLCChannel(); ch->setName("TestChannel"); fd->addChannel(ch); QLCFixtureMode* mode = new QLCFixtureMode(fd); mode->setName("TestMode"); fd->addMode(mode); mode->insertChannel(ch, 0); QLCFixtureDef* copy = new QLCFixtureDef(fd); QVERIFY(copy->manufacturer() == "Martin"); QVERIFY(copy->model() == "MAC600"); QVERIFY(copy->type() == "Moving Head"); /* Verify that modes and channels get copied and that the channels in the copied mode are from the copied fixtureDef and not the one that the copy is taken FROM. */ QVERIFY(copy->channels().at(0)->name() == "TestChannel"); QVERIFY(copy->modes().at(0)->name() == "TestMode"); QVERIFY(copy->modes().at(0)->channels().size() == 1); QVERIFY(copy->modes().size() == 1); QVERIFY(copy->modes().at(0)->channel(0) != ch); QVERIFY(copy->modes().at(0)->channel(0) == copy->channels().at(0)); QVERIFY(copy->channels().at(0)->name() == "TestChannel"); QVERIFY(copy->modes().at(0)->channel(0)->name() == "TestChannel"); delete fd; delete copy; }