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; }
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::refreshModeList() { QTreeWidgetItem* item; QLCFixtureMode* mode; QString str; m_modeList->clear(); // Fill channels list QListIterator <QLCFixtureMode*> it(*m_fixtureDef->modes()); while (it.hasNext() == true) { mode = it.next(); item = new QTreeWidgetItem(m_modeList); item->setText(KModesColumnName, mode->name()); str.sprintf("%d", mode->channels()); item->setText(KModesColumnChannels, str); // Store the channel pointer to the listview as a string str.sprintf("%lu", (unsigned long) mode); item->setText(KModesColumnPointer, str); } slotModeListSelectionChanged(m_modeList->currentItem()); }
void AddFixture::fillModeCombo(const QString& text) { QLCFixtureMode* mode = NULL; m_modeCombo->clear(); if (m_fixtureDef == NULL) { m_modeCombo->setEnabled(false); m_modeCombo->insertItem(text); m_modeCombo->setCurrentItem(0); } else { m_modeCombo->setEnabled(true); QPtrListIterator <QLCFixtureMode> it(*m_fixtureDef->modes()); while ( (mode = *it) != NULL ) { m_modeCombo->insertItem(mode->name()); ++it; } /* Select the first mode by default */ m_modeCombo->setCurrentItem(0); slotModeActivated(m_modeCombo->currentText()); } }
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::slotRemoveMode() { QLCFixtureMode* mode = currentMode(); if (QMessageBox::question(this, tr("Remove Mode"), tr("Are you sure you wish to remove mode: %1 ?").arg(mode->name()), QMessageBox::Yes, QMessageBox::No) == QMessageBox::Yes) { m_fixtureDef->removeMode(mode); delete m_modeList->currentItem(); setModified(); } }
QLCFixtureMode *QLCFixtureDef::mode(const QString& name) { QListIterator <QLCFixtureMode*> it(m_modes); QLCFixtureMode* mode = NULL; while (it.hasNext() == true) { mode = it.next(); if (mode->name() == name) return mode; } return NULL; }
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 QLCFixtureEditor::slotEditMode() { QLCFixtureMode* mode = currentMode(); QString str; if (mode == NULL) return; EditMode em(this, mode); if (em.exec() == QDialog::Accepted) { QTreeWidgetItem* item = NULL; *mode = *(em.mode()); item = m_modeList->currentItem(); item->setText(KModesColumnName, mode->name()); str.sprintf("%d", mode->channels()); item->setText(KModesColumnChannels, str); setModified(); } }
void QLCFixtureEditor::slotRemoveMode() { QLCFixtureMode* mode = currentMode(); if (QMessageBox::question(this, "Remove Mode", QString("Are you sure you wish to remove mode: ") + mode->name(), QMessageBox::Yes, QMessageBox::No) == QMessageBox::Yes) { QTreeWidgetItem* item; QTreeWidgetItem* next; item = m_modeList->currentItem(); if (m_modeList->itemBelow(item) != NULL) next = m_modeList->itemBelow(item); else if (m_modeList->itemAbove(item) != NULL) next = m_modeList->itemAbove(item); else next = NULL; m_fixtureDef->removeMode(mode); delete item; setModified(); } }
void AddFixture_Test::initialScanner() { Fixture* fxi = new Fixture(m_doc); fxi->setName("My scanner"); QLCFixtureDef* def = m_doc->fixtureDefCache()->fixtureDef("Martin", "MAC300"); Q_ASSERT(def != NULL); Q_ASSERT(def != NULL); Q_ASSERT(def->channels().size() > 0); QLCFixtureMode* mode = def->modes().first(); Q_ASSERT(def->modes().size() > 1); fxi->setFixtureDefinition(def, mode); fxi->setUniverse(2); fxi->setAddress(484); m_doc->addFixture(fxi); AddFixture af(NULL, m_doc, fxi); QVERIFY(m_doc == af.m_doc); QVERIFY(af.fixtureDef() == def); QVERIFY(af.mode() == mode); QVERIFY(af.name() == QString("My scanner")); QVERIFY(af.address() == 484); QVERIFY(af.universe() == 2); QVERIFY(af.amount() == 1); QVERIFY(af.gap() == 0); QVERIFY(af.channels() == fxi->channels()); // Check that all makes & models are put to the tree QStringList makers(m_doc->fixtureDefCache()->manufacturers()); QVERIFY(makers.isEmpty() == false); for (int i = 0; i < af.m_tree->topLevelItemCount(); i++) { QTreeWidgetItem* top = af.m_tree->topLevelItem(i); if (top->text(0) != KXMLFixtureGeneric) { QStringList models(m_doc->fixtureDefCache()->models(top->text(0))); for (int j = 0; j < top->childCount(); j++) { QTreeWidgetItem* child = top->child(j); QCOMPARE(child->childCount(), 0); QCOMPARE(models.removeAll(child->text(0)), 1); } QCOMPARE(makers.removeAll(top->text(0)), 1); } else { QCOMPARE(i, af.m_tree->topLevelItemCount() - 1); // Generic should be last QCOMPARE(top->childCount(), 3); QCOMPARE(top->child(0)->text(0), QString(KXMLFixtureGeneric)); QStringList models(m_doc->fixtureDefCache()->models(top->text(0))); for (int j = 0; j < top->childCount(); j++) { QTreeWidgetItem* child = top->child(j); QCOMPARE(child->childCount(), 0); QCOMPARE(models.removeAll(child->text(0)), child->text(0) == KXMLFixtureGeneric ? 0 : 1); } QCOMPARE(makers.removeAll(top->text(0)), 1); } } QVERIFY(makers.isEmpty() == true); // Generic / Generic should be selected for dimmers QVERIFY(af.m_tree->currentItem() != NULL); QCOMPARE(af.m_tree->currentItem()->text(0), def->model()); QVERIFY(af.m_tree->currentItem()->parent() != NULL); QCOMPARE(af.m_tree->currentItem()->parent()->text(0), def->manufacturer()); QVERIFY(af.m_modeCombo->isEnabled() == true); QCOMPARE(af.m_modeCombo->count(), def->modes().size()); QCOMPARE(af.m_modeCombo->itemText(0), mode->name()); QVERIFY(af.m_universeCombo->isEnabled() == true); QCOMPARE(af.m_universeCombo->currentIndex(), 2); QCOMPARE(af.m_universeCombo->count(), 4); QVERIFY(af.m_addressSpin->isEnabled() == true); QCOMPARE(af.m_addressSpin->value(), 485); QVERIFY(af.m_channelsSpin->isEnabled() == false); QCOMPARE(af.m_channelsSpin->value(), (int) fxi->channels()); QVERIFY(af.m_nameEdit->isEnabled() == true); QCOMPARE(af.m_nameEdit->text(), QString("My scanner")); QVERIFY(af.m_nameEdit->isModified() == true); QVERIFY(af.m_multipleGroup->isEnabled() == false); QVERIFY(af.m_gapSpin->isEnabled() == false); QCOMPARE(af.m_gapSpin->value(), 0); QVERIFY(af.m_amountSpin->isEnabled() == false); QCOMPARE(af.m_amountSpin->value(), 1); }
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 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); 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()) .toLatin1()); } 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); }