diff --git a/ui/src/functionwizard.cpp b/ui/src/functionwizard.cpp index 2da3877a30..ab2fdfed78 100644 --- a/ui/src/functionwizard.cpp +++ b/ui/src/functionwizard.cpp @@ -31,6 +31,7 @@ #include "vcsoloframe.h" #include "vccuelist.h" #include "rgbmatrix.h" +#include "efx.h" #include "vcwidget.h" #include "vcbutton.h" #include "vcslider.h" @@ -328,6 +329,15 @@ void FunctionWizard::updateAvailableFunctionsTree() addFunctionsGroup(fxGrpItem, grpItem, PaletteGenerator::typetoString(PaletteGenerator::Animation), PaletteGenerator::Animation); + addFunctionsGroup(fxGrpItem, grpItem, + PaletteGenerator::typetoString(PaletteGenerator::Effect), + PaletteGenerator::Effect); + } + else if (cap == QLCChannel::groupToString(QLCChannel::Pan)) + { + addFunctionsGroup(fxGrpItem, grpItem, + PaletteGenerator::typetoString(PaletteGenerator::Effect), + PaletteGenerator::Effect); } else if (cap == QLCChannel::groupToString(QLCChannel::Gobo)) addFunctionsGroup(fxGrpItem, grpItem, @@ -427,6 +437,12 @@ void FunctionWizard::updateResultFunctionsTree() item->setText(KFunctionName, matrix->name()); item->setIcon(KFunctionName, matrix->getIcon()); } + foreach (EFX *effect, palette->effects()) + { + QTreeWidgetItem *item = new QTreeWidgetItem(getFunctionGroupItem(effect)); + item->setText(KFunctionName, effect->name()); + item->setIcon(KFunctionName, effect->getIcon()); + } } } } @@ -521,6 +537,20 @@ void FunctionWizard::updateWidgetsTree() item->setData(KWidgetName, Qt::UserRole, VCWidget::ButtonWidget); item->setData(KWidgetName, Qt::UserRole + 1, QVariant::fromValue((void *)matrix)); } + foreach (EFX *effect, palette->effects()) + { + QTreeWidgetItem *item = NULL; + if (soloFrameItem != NULL) + item = new QTreeWidgetItem(soloFrameItem); + else + item = new QTreeWidgetItem(frame); + QString toRemove = " - " + palette->model(); + item->setText(KWidgetName, effect->name().remove(toRemove)); + item->setIcon(KWidgetName, VCWidget::typeToIcon(VCWidget::ButtonWidget)); + item->setCheckState(KWidgetName, Qt::Unchecked); + item->setData(KWidgetName, Qt::UserRole, VCWidget::ButtonWidget); + item->setData(KWidgetName, Qt::UserRole + 1, QVariant::fromValue((void *)effect)); + } if (palette->scenes().count() > 0) { diff --git a/ui/src/palettegenerator.cpp b/ui/src/palettegenerator.cpp index cb35fc132e..2f2504df9b 100644 --- a/ui/src/palettegenerator.cpp +++ b/ui/src/palettegenerator.cpp @@ -30,6 +30,7 @@ #include "fixturegroup.h" #include "chaserstep.h" #include "rgbmatrix.h" +#include "efx.h" #include "fixture.h" #include "chaser.h" #include "scene.h" @@ -60,6 +61,7 @@ PaletteGenerator::~PaletteGenerator() m_scenes.clear(); m_chasers.clear(); m_matrices.clear(); + m_effects.clear(); } void PaletteGenerator::setName(QString name) @@ -102,6 +104,7 @@ QString PaletteGenerator::typetoString(PaletteGenerator::PaletteType type) case Gobos: return tr("Gobo macros"); case ColourMacro: return tr("Colour macros"); case Animation: return tr("Animations"); + case Effect: return tr("EFXs"); case Undefined: default: return tr("Unknown"); @@ -194,6 +197,11 @@ QList PaletteGenerator::matrices() return m_matrices; } +QList PaletteGenerator::effects() +{ + return m_effects; +} + void PaletteGenerator::addToDoc() { foreach (Scene *scene, m_scenes) @@ -217,6 +225,10 @@ void PaletteGenerator::addToDoc() matrix->setFixtureGroup(m_fixtureGroup->id()); m_doc->addFunction(matrix); } + foreach (EFX *effect, m_effects) + { + m_doc->addFunction(effect); + } } void PaletteGenerator::createColorScene(QList chMap, QString name, PaletteSubType subType) @@ -453,6 +465,63 @@ void PaletteGenerator::createRGBMatrices(QList rgbMap) } } +EFX *PaletteGenerator::createEffect(QList fixtures, bool staggered, EFXFixture::Mode mode) +{ + EFX *efx = new EFX(m_doc); + + efx->setName(tr("EFX %1 %2 - ").arg(EFXFixture::modeToString(mode)).arg(staggered ? " Staggered " : "") + m_model); + + if (mode == EFXFixture::Mode::RGB) + { + efx->setAlgorithm(EFX::Algorithm::Line2); + efx->setHeight(0); + } + else if (mode == EFXFixture::Mode::PanTilt) + { + } + else if (mode == EFXFixture::Mode::Dimmer) + { + } + + for (int i = 0; i < fixtures.count(); i++) + { + Fixture *fixture = fixtures[i]; + for (int h = 0; h < fixture->heads(); h++) + { + qDebug() << "fx" << fixture->channelAddress(0) << " " << h; + + EFXFixture *ef = new EFXFixture(efx); + ef->setHead(GroupHead(fixture->id(), h)); + ef->setMode(mode); + ef->setStartOffset(staggered ? (i * (360 / fixtures.count())) : 0); + efx->addFixture(ef); + } + } + + qDebug() << "efx: " << efx << efx->fixtures().count(); + + return efx; +} + +void PaletteGenerator::createEffects(QList fixtures) +{ + qDebug() << "createEffects"; + + m_effects.append(createEffect(fixtures, false, EFXFixture::Mode::Dimmer)); + m_effects.append(createEffect(fixtures, true, EFXFixture::Mode::Dimmer)); + + if (PaletteGenerator::getCapabilities(fixtures[0]).contains(KQLCChannelRGB)) + { + m_effects.append(createEffect(fixtures, false, EFXFixture::Mode::RGB)); + m_effects.append(createEffect(fixtures, true, EFXFixture::Mode::RGB)); + } + if (PaletteGenerator::getCapabilities(fixtures[0]).contains(KQLCChannelMovement)) + { + m_effects.append(createEffect(fixtures, false, EFXFixture::Mode::PanTilt)); + m_effects.append(createEffect(fixtures, true, EFXFixture::Mode::PanTilt)); + } +} + void PaletteGenerator::createChaser(QString name) { if (m_scenes.count() == 0) @@ -562,6 +631,15 @@ void PaletteGenerator::createFunctions(PaletteGenerator::PaletteType type, createRGBMatrices(m_redList); } break; + case Effect: + { + if ((m_redList.size() > 1 && + m_greenList.size() == m_redList.size() && + m_blueList.size() == m_redList.size()) || + m_panList.size() > 1) + createEffects(m_fixtures); + } + break; case Gobos: { createCapabilityScene(m_goboList, subType); diff --git a/ui/src/palettegenerator.h b/ui/src/palettegenerator.h index 6e7fd6ec89..bdd38eb944 100644 --- a/ui/src/palettegenerator.h +++ b/ui/src/palettegenerator.h @@ -26,9 +26,12 @@ #include #include "scenevalue.h" +#include "efx.h" class FixtureGroup; class RGBMatrix; +class EFX; +class EFXFixture; class Fixture; class Chaser; class Scene; @@ -56,6 +59,7 @@ class PaletteGenerator: public QObject Shutter, Gobos, ColourMacro, + Effect, Animation }; @@ -112,6 +116,7 @@ class PaletteGenerator: public QObject QList scenes(); QList chasers(); QList matrices(); + QList effects(); void addToDoc(); @@ -127,6 +132,9 @@ class PaletteGenerator: public QObject void createRGBMatrices(QList rgbMap); + EFX* createEffect(QList fixtures, bool staggered, EFXFixture::Mode mode); + void createEffects(QList fixtures); + void createChaser(QString name); /** @@ -152,6 +160,7 @@ class PaletteGenerator: public QObject QList m_scenes; QList m_chasers; QList m_matrices; + QList m_effects; }; /** @} */