Skip to content

Commit

Permalink
engine: include fanning into palettes + start testing
Browse files Browse the repository at this point in the history
  • Loading branch information
mcallegari committed Oct 15, 2019
1 parent d1709d4 commit 9c9c5c0
Show file tree
Hide file tree
Showing 7 changed files with 360 additions and 5 deletions.
141 changes: 137 additions & 4 deletions engine/src/qlcpalette.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -26,16 +26,22 @@
#include "scenevalue.h"
#include "doc.h"

#define KXMLQLCPaletteType "Type"
#define KXMLQLCPaletteName "Name"
#define KXMLQLCPaletteValue "Value"
#define KXMLQLCPaletteType "Type"
#define KXMLQLCPaletteName "Name"
#define KXMLQLCPaletteValue "Value"
#define KXMLQLCPaletteFanning "Fan"
#define KXMLQLCPaletteFanLayout "Layout"
#define KXMLQLCPaletteFanAmount "Amount"
#define KXMLQLCPaletteFanValue "FanValue"

QLCPalette::QLCPalette(QLCPalette::PaletteType type, QObject *parent)
: QObject(parent)
, m_id(QLCPalette::invalidId())
, m_type(type)
, m_fanningType(Flat)
, m_fanningLayout(LeftToRight)
, m_fanningAmount(100)
{

}

QLCPalette::~QLCPalette()
Expand Down Expand Up @@ -254,6 +260,133 @@ QList<SceneValue> QLCPalette::valuesFromFixtureGroups(Doc *doc, QList<quint32> g
return list;
}

/************************************************************************
* Fanning
************************************************************************/

QLCPalette::FanningType QLCPalette::fanningType() const
{
return m_fanningType;
}

void QLCPalette::setFanningType(QLCPalette::FanningType type)
{
m_fanningType = type;
}

QString QLCPalette::fanningTypeToString(QLCPalette::FanningType type)
{
switch (type)
{
case Flat: return "Flat";
case Linear: return "Linear";
case Sine: return "Sine";
case Square: return "Square";
case Saw: return "Saw";
}

return "";
}

QLCPalette::FanningType QLCPalette::stringToFanningType(const QString &str)
{
if (str == "Flat")
return Flat;
else if (str == "Linear")
return Linear;
else if (str == "Sine")
return Sine;
else if (str == "Square")
return Square;
else if (str == "Saw")
return Saw;

return Flat;
}

QLCPalette::FanningLayout QLCPalette::fanningLayout() const
{
return m_fanningLayout;
}

void QLCPalette::setFanningLayout(QLCPalette::FanningLayout layout)
{
m_fanningLayout = layout;
}

QString QLCPalette::fanningLayoutToString(QLCPalette::FanningLayout layout)
{
switch (layout)
{
case LeftToRight: return "LeftToRight";
case RightToLeft: return "RightToLeft";
case TopToBottom: return "TopToBottom";
case BottomToTop: return "BottomToTop";
case Centered: return "Centered";
}

return "";
}

QLCPalette::FanningLayout QLCPalette::stringToFanningLayout(const QString &str)
{
if (str == "LeftToRight")
return LeftToRight;
else if (str == "RightToLeft")
return RightToLeft;
else if (str == "TopToBottom")
return TopToBottom;
else if (str == "BottomToTop")
return BottomToTop;
else if (str == "Centered")
return Centered;

return LeftToRight;
}

int QLCPalette::fanningAmount() const
{
return m_fanningAmount;
}

void QLCPalette::setFanningAmount(int amount)
{
m_fanningAmount = amount;
}

QVariant QLCPalette::fanningValue() const
{
return m_fanningValue;
}

void QLCPalette::setFanningValue(QVariant value)
{
m_fanningValue = value;
}

/************************************************************************
* Color helpers
************************************************************************/

QString QLCPalette::colorToString(QColor rgb, QColor wauv)
{
QString final = rgb.name();
final.append(wauv.name().right(6));
return final;
}

bool QLCPalette::stringToColor(QString str, QColor &rgb, QColor &wauv)
{
// string must be like #112233aabbcc
if (str.length() != 13)
return false;

rgb = QColor(str.left(7));
wauv = QColor("#" + str.right(6));

return true;
}

/************************************************************************
* Load & Save
************************************************************************/
Expand Down
73 changes: 72 additions & 1 deletion engine/src/qlcpalette.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
#define QLCPALETTE_H

#include <QObject>
#include <QVariant>

class QXmlStreamReader;
class QXmlStreamWriter;
Expand Down Expand Up @@ -86,7 +87,7 @@ class QLCPalette : public QObject
/** Get an invalid palette id */
static quint32 invalidId();

/** Get/Set the palette type */
/** Get the palette type */
PaletteType type() const;

/** Helper methods to convert palette type <-> string */
Expand Down Expand Up @@ -117,6 +118,76 @@ class QLCPalette : public QObject
QString m_name;
QVariantList m_values;

/************************************************************************
* Fanning
************************************************************************/
public:
enum FanningType
{
Flat,
Linear,
Sine,
Square,
Saw
};
#if QT_VERSION >= 0x050500
Q_ENUM(FanningType)
#endif

enum FanningLayout
{
LeftToRight,
RightToLeft,
TopToBottom,
BottomToTop,
Centered
};
#if QT_VERSION >= 0x050500
Q_ENUM(FanningLayout)
#endif

/** Get/Set the fanning type */
FanningType fanningType() const;
void setFanningType(QLCPalette::FanningType type);

/** Helper methods to convert fanning type <-> string */
static QString fanningTypeToString(QLCPalette::FanningType type);
static FanningType stringToFanningType(const QString& str);

/** Get/Set the fanning layout */
FanningLayout fanningLayout() const;
void setFanningLayout(QLCPalette::FanningLayout layout);

/** Helper methods to convert fanning layout <-> string */
static QString fanningLayoutToString(QLCPalette::FanningLayout layout);
static FanningLayout stringToFanningLayout(const QString& str);

/** Get/Set the amount of fanning applied to this palette */
int fanningAmount() const;
void setFanningAmount(int amount);

/** Get/Set the fanning value */
QVariant fanningValue() const;
void setFanningValue(QVariant value);

private:
FanningType m_fanningType;
FanningLayout m_fanningLayout;
int m_fanningAmount;
QVariant m_fanningValue;

/************************************************************************
* Color helpers
************************************************************************/
public:
/** Helper method to pack two QColor into a Qt-like style string
* formatted like this: "#rrggbbwwaauv" */
static QString colorToString(QColor rgb, QColor wauv);

/** Helper method to convert a string created with colorToString
* back to 2 separate QColor */
static bool stringToColor(QString str, QColor &rgb, QColor &wauv);

/************************************************************************
* Load & Save
************************************************************************/
Expand Down
17 changes: 17 additions & 0 deletions engine/test/qlcpalette/qlcpalette.pro
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
include(../../../variables.pri)
include(../../../coverage.pri)
TEMPLATE = app
LANGUAGE = C++
TARGET = qlcpalette_test

QT += testlib
CONFIG -= app_bundle

DEPENDPATH += ../../src
INCLUDEPATH += ../../../plugins/interfaces
INCLUDEPATH += ../../src
QMAKE_LIBDIR += ../../src
LIBS += -lqlcplusengine

SOURCES += qlcpalette_test.cpp
HEADERS += qlcpalette_test.h
90 changes: 90 additions & 0 deletions engine/test/qlcpalette/qlcpalette_test.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
/*
Q Light Controller Plus - Unit tests
qlcpalette_test.cpp
Copyright (C) Massimo Callegari
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0.txt
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

#include <QtTest>
#include <QXmlStreamReader>
#include <QXmlStreamWriter>

#include "qlcpalette_test.h"
#include "qlcpalette.h"

void QLCPalette_Test::initialization()
{
QLCPalette p(QLCPalette::Undefined);

QVERIFY(p.type() == QLCPalette::Undefined);
QVERIFY(p.id() == QLCPalette::invalidId());
QVERIFY(p.fanningType() == QLCPalette::Flat);
QVERIFY(p.fanningLayout() == QLCPalette::LeftToRight);
QVERIFY(p.fanningAmount() == 100);
QVERIFY(p.fanningValue() == QVariant());

p.setID(42);
QVERIFY(p.id() == 42);

QVERIFY(QLCPalette::typeToString(QLCPalette::Undefined) == QString());
QVERIFY(QLCPalette::typeToString(QLCPalette::Dimmer) == QString("Dimmer"));
QVERIFY(QLCPalette::typeToString(QLCPalette::Color) == QString("Color"));
QVERIFY(QLCPalette::typeToString(QLCPalette::Pan) == QString("Pan"));
QVERIFY(QLCPalette::typeToString(QLCPalette::Tilt) == QString("Tilt"));
QVERIFY(QLCPalette::typeToString(QLCPalette::PanTilt) == QString("PanTilt"));
QVERIFY(QLCPalette::typeToString(QLCPalette::Shutter) == QString("Shutter"));
QVERIFY(QLCPalette::typeToString(QLCPalette::Gobo) == QString("Gobo"));

QVERIFY(p.name() == QString());
p.setName("My Palette");
QVERIFY(p.name() == QString("My Palette"));
}

void QLCPalette_Test::colorHelpers()
{
QColor rgb(0xAA, 0xBB, 0xCC);
QColor wauv(0x11, 0x22, 0x33);

QVERIFY(QLCPalette::colorToString(rgb, wauv) == QString("#aabbcc112233"));

QVERIFY(QLCPalette::stringToColor("#invalid", rgb, wauv) == false);
QVERIFY(QLCPalette::stringToColor("#11deadbeef22", rgb, wauv) == true);

QVERIFY(rgb.red() == 0x11);
QVERIFY(rgb.green() == 0xDE);
QVERIFY(rgb.blue() == 0xAD);

QVERIFY(wauv.red() == 0xBE);
QVERIFY(wauv.green() == 0xEF);
QVERIFY(wauv.blue() == 0x22);

}

void QLCPalette_Test::load()
{

}

void QLCPalette_Test::loadWrongRoot()
{

}

void QLCPalette_Test::save()
{

}

QTEST_APPLESS_MAIN(QLCPalette_Test)

0 comments on commit 9c9c5c0

Please sign in to comment.