void VCMatrix::slotCustomControlClicked() { QPushButton *btn = qobject_cast<QPushButton*>(sender()); VCMatrixControl *control = m_controls[btn]; if (control != NULL) { RGBMatrix* matrix = qobject_cast<RGBMatrix*>(m_doc->function(m_matrixID)); if (matrix == NULL || mode() == Doc::Design) return; if (control->m_type == VCMatrixControl::StartColor) { QPixmap px(42, 42); px.fill(control->m_color); m_startColorButton->setIcon(px); matrix->setStartColor(control->m_color); matrix->calculateColorDelta(); } else if (control->m_type == VCMatrixControl::EndColor) { QPixmap px(42, 42); px.fill(control->m_color); m_endColorButton->setIcon(px); matrix->setEndColor(control->m_color); matrix->calculateColorDelta(); } else if (control->m_type == VCMatrixControl::Animation) { RGBAlgorithm* algo = RGBAlgorithm::algorithm(m_doc, control->m_resource); matrix->setAlgorithm(algo); if (instantChanges() == true) matrix->calculateColorDelta(); } else if (control->m_type == VCMatrixControl::Text) { RGBAlgorithm* algo = RGBAlgorithm::algorithm(m_doc, "Text"); RGBText* text = static_cast<RGBText*> (algo); text->setText(control->m_resource); matrix->setAlgorithm(algo); if (instantChanges() == true) matrix->calculateColorDelta(); } } }
void VCMatrix::slotAnimationChanged(QString name) { RGBMatrix* matrix = qobject_cast<RGBMatrix*>(m_doc->function(m_matrixID)); if (matrix == NULL || mode() == Doc::Design) return; RGBAlgorithm* algo = RGBAlgorithm::algorithm(m_doc, name); matrix->setAlgorithm(algo); if (instantChanges() == true) matrix->calculateColorDelta(); }
void VCMatrix::slotCustomControlClicked() { QPushButton *btn = qobject_cast<QPushButton*>(sender()); VCMatrixControl *control = m_controls[btn]; if (control != NULL) { RGBMatrix* matrix = qobject_cast<RGBMatrix*>(m_doc->function(m_matrixID)); if (matrix == NULL || mode() == Doc::Design) return; if (control->m_type == VCMatrixControl::StartColor) { QPixmap px(42, 42); px.fill(control->m_color); m_startColorButton->setIcon(px); matrix->setStartColor(control->m_color); matrix->calculateColorDelta(); } else if (control->m_type == VCMatrixControl::EndColor) { QPixmap px(42, 42); px.fill(control->m_color); m_endColorButton->setIcon(px); matrix->setEndColor(control->m_color); matrix->calculateColorDelta(); } else if (control->m_type == VCMatrixControl::Animation) { RGBAlgorithm* algo = RGBAlgorithm::algorithm(m_doc, control->m_resource); if (!control->m_properties.isEmpty()) { RGBScript *script = static_cast<RGBScript*> (algo); QHashIterator<QString, QString> it(control->m_properties); while(it.hasNext()) { it.next(); script->setProperty(it.key(), it.value()); } } matrix->setAlgorithm(algo); if (instantChanges() == true) matrix->calculateColorDelta(); m_presetCombo->blockSignals(true); #if QT_VERSION >= QT_VERSION_CHECK(5,0,0) m_presetCombo->setCurrentText(control->m_resource); #else m_presetCombo->setCurrentIndex(m_presetCombo->findText(control->m_resource)); #endif m_presetCombo->blockSignals(false); } else if (control->m_type == VCMatrixControl::Text) { RGBAlgorithm* algo = RGBAlgorithm::algorithm(m_doc, "Text"); RGBText* text = static_cast<RGBText*> (algo); text->setText(control->m_resource); matrix->setAlgorithm(algo); if (instantChanges() == true) matrix->calculateColorDelta(); } } }
void RGBMatrix_Test::loadSave() { RGBMatrix* mtx = new RGBMatrix(m_doc); mtx->setStartColor(Qt::magenta); mtx->setEndColor(Qt::blue); mtx->setFixtureGroup(42); mtx->setAlgorithm(RGBAlgorithm::algorithm(m_doc, "Stripes")); QVERIFY(mtx->algorithm() != NULL); QCOMPARE(mtx->algorithm()->name(), QString("Stripes")); mtx->setName("Xyzzy"); mtx->setDirection(Function::Backward); mtx->setRunOrder(Function::PingPong); mtx->setDuration(1200); mtx->setFadeInSpeed(10); mtx->setFadeOutSpeed(20); mtx->setDimmerControl(false); m_doc->addFunction(mtx); QBuffer buffer; buffer.open(QIODevice::WriteOnly | QIODevice::Text); QXmlStreamWriter xmlWriter(&buffer); QVERIFY(mtx->saveXML(&xmlWriter) == true); xmlWriter.setDevice(NULL); buffer.close(); buffer.open(QIODevice::ReadOnly | QIODevice::Text); QXmlStreamReader xmlReader(&buffer); xmlReader.readNextStartElement(); QCOMPARE(xmlReader.name().toString(), QString("Function")); QCOMPARE(xmlReader.attributes().value("Type").toString(), QString("RGBMatrix")); QCOMPARE(xmlReader.attributes().value("ID").toString(), QString::number(mtx->id())); QCOMPARE(xmlReader.attributes().value("Name").toString(), QString("Xyzzy")); int speed = 0, dir = 0, run = 0, algo = 0, monocolor = 0, endcolor = 0, grp = 0, dimmer = 0; while (xmlReader.readNextStartElement()) { if (xmlReader.name() == "Speed") { QCOMPARE(xmlReader.attributes().value("FadeIn").toString(), QString("10")); QCOMPARE(xmlReader.attributes().value("FadeOut").toString(), QString("20")); QCOMPARE(xmlReader.attributes().value("Duration").toString(), QString("1200")); speed++; xmlReader.skipCurrentElement(); } else if (xmlReader.name() == "Direction") { QCOMPARE(xmlReader.readElementText(), QString("Backward")); dir++; } else if (xmlReader.name() == "RunOrder") { QCOMPARE(xmlReader.readElementText(), QString("PingPong")); run++; } else if (xmlReader.name() == "Algorithm") { // RGBAlgorithms take care of Algorithm tag's contents algo++; xmlReader.skipCurrentElement(); } else if (xmlReader.name() == "MonoColor") { QCOMPARE(xmlReader.readElementText().toUInt(), QColor(Qt::magenta).rgb()); monocolor++; } else if (xmlReader.name() == "EndColor") { QCOMPARE(xmlReader.readElementText().toUInt(), QColor(Qt::blue).rgb()); endcolor++; } else if (xmlReader.name() == "FixtureGroup") { QCOMPARE(xmlReader.readElementText(), QString("42")); grp++; } else if (xmlReader.name() == "DimmerControl") { QCOMPARE(xmlReader.readElementText(), QString("0")); dimmer++; } else { QFAIL(QString("Unexpected tag: %1").arg(xmlReader.name().toString()).toUtf8().constData()); } } QCOMPARE(speed, 1); QCOMPARE(dir, 1); QCOMPARE(run, 1); QCOMPARE(algo, 1); QCOMPARE(monocolor, 1); QCOMPARE(endcolor, 1); QCOMPARE(grp, 1); QCOMPARE(dimmer, 1); xmlReader.setDevice(NULL); buffer.seek(0); xmlReader.setDevice(&buffer); xmlReader.readNextStartElement(); RGBMatrix mtx2(m_doc); QVERIFY(mtx2.loadXML(xmlReader) == true); QCOMPARE(mtx2.direction(), Function::Backward); QCOMPARE(mtx2.runOrder(), Function::PingPong); QCOMPARE(mtx2.startColor(), QColor(Qt::magenta)); QCOMPARE(mtx2.endColor(), QColor(Qt::blue)); QCOMPARE(mtx2.fixtureGroup(), uint(42)); QVERIFY(mtx2.algorithm() != NULL); QCOMPARE(mtx2.algorithm()->name(), mtx->algorithm()->name()); QCOMPARE(mtx2.duration(), uint(1200)); QCOMPARE(mtx2.fadeInSpeed(), uint(10)); QCOMPARE(mtx2.fadeOutSpeed(), uint(20)); buffer.close(); buffer.setData(QByteArray()); buffer.open(QIODevice::WriteOnly | QIODevice::Text); xmlWriter.setDevice(&buffer); // Put some extra garbage in xmlWriter.writeStartElement("Foo"); xmlWriter.writeEndElement(); buffer.close(); buffer.open(QIODevice::ReadOnly | QIODevice::Text); xmlReader.setDevice(&buffer); xmlReader.readNextStartElement(); QVERIFY(mtx2.loadXML(xmlReader) == false); // Not a function node xmlReader.setDevice(NULL); buffer.close(); buffer.setData(QByteArray()); buffer.open(QIODevice::WriteOnly | QIODevice::Text); xmlWriter.setDevice(&buffer); // Put some extra garbage in xmlWriter.writeStartElement("Function"); xmlWriter.writeAttribute("Type", "Scene"); xmlWriter.writeEndElement(); buffer.close(); buffer.open(QIODevice::ReadOnly | QIODevice::Text); xmlReader.setDevice(&buffer); xmlReader.readNextStartElement(); QVERIFY(mtx2.loadXML(xmlReader) == false); // Not an RGBMatrix node }