Skip to content

Commit 196d0a4

Browse files
committed
Merge remote-tracking branch 'upstream/master' into effectsInWizard
2 parents 4c4c4cf + 7fd06c7 commit 196d0a4

342 files changed

Lines changed: 4222 additions & 2014 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/build.yml

Lines changed: 86 additions & 141 deletions
Large diffs are not rendered by default.

CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
cmake_minimum_required(VERSION 3.16)
22
project(qlcplus VERSION 4.14.1 LANGUAGES C CXX)
33

4+
option(qmlui "Build for QLC+ 5 QML UI" OFF)
5+
46
# Set Release build type by default
57
if(NOT CMAKE_BUILD_TYPE)
68
set(CMAKE_BUILD_TYPE "Debug" CACHE STRING "Choose the type of build, options are: Debug Release RelWithDebInfo MinSizeRel." FORCE)

create-appimage-cmake.sh

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,12 @@ set -e
1212
TARGET_DIR=$HOME/qlcplus.AppDir
1313
CMAKE_OPTS=""
1414

15+
if ! command -v chrpath 2>&1 >/dev/null
16+
then
17+
echo "chrpath could not be found. Install it before running this script"
18+
exit 1
19+
fi
20+
1521
if [ "$1" == "qmlui" ]; then
1622
./translate.sh "qmlui"
1723
CMAKE_OPTS="-Dqmlui=ON"
@@ -45,6 +51,9 @@ if [ ! -d "$TARGET_DIR" ]; then
4551
fi
4652
make install
4753

54+
cp -v ../resources/icons/svg/qlcplus.svg $TARGET_DIR
55+
cp -v ../platforms/linux/qlcplus.desktop $TARGET_DIR
56+
4857
find $TARGET_DIR/usr/lib/ -name 'libqlcplusengine.so*' -exec strip -v {} \;
4958

5059
if [ "$1" == "qmlui" ]; then
@@ -55,7 +64,7 @@ if [ "$1" == "qmlui" ]; then
5564
pushd $TARGET_DIR/usr/bin
5665
find . -name plugins.qmltypes -type f -delete
5766
find . -name *.qmlc -type f -delete
58-
rm -rf QtQuick/Extras QtQuick/Particles.2 QtQuick/XmlListModel
67+
rm -rf Qt/test QtQuick/Extras QtQuick/Particles.2 QtQuick/XmlListModel
5968
rm -rf QtQuick/Controls.2/designer QtQuick/Controls.2/Material
6069
rm -rf QtQuick/Controls.2/Universal QtQuick/Controls.2/Fusion
6170
rm -rf QtQuick/Controls.2/Imagine QtQuick/Controls.2/Scene2D
@@ -67,9 +76,6 @@ else
6776
sed -i -e 's/Exec=qlcplus --open %f/Exec=qlcplus/g' $TARGET_DIR/qlcplus.desktop
6877
fi
6978

70-
cp -v ../resources/icons/svg/qlcplus.svg $TARGET_DIR
71-
cp -v ../platforms/linux/qlcplus.desktop $TARGET_DIR
72-
7379
# There might be a new version of the tool available.
7480
wget -c https://github.com/AppImage/AppImageKit/releases/download/continuous/AppRun-x86_64 -O $TARGET_DIR/AppRun
7581
chmod a+x $TARGET_DIR/AppRun

create-exe.sh

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
#!/bin/bash
2+
#VERSION=$(head -1 debian/changelog | sed 's/.*(\(.*\)).*/\1/')
3+
VERSION=$(grep -m 1 APPVERSION variables.pri | cut -d '=' -f 2 | sed -e 's/^[[:space:]]*//' | tr ' ' _ | tr -d '\r\n')
4+
APP_DIR=/c/qlcplus
5+
ROOT_DIR=$PWD
6+
7+
# cleanup previous builds
8+
rm -rf $APP_DIR
9+
rm -rf build
10+
mkdir build
11+
cd build
12+
13+
# Build
14+
# export QTDIR=/c/projects/Qt/6.9.0/mingw_64/
15+
if [ -n "$QTDIR" ]; then
16+
if [ "$1" == "qmlui" ]; then
17+
cmake -DCMAKE_PREFIX_PATH="$QTDIR/lib/cmake" -Dqmlui=on ..
18+
else
19+
cmake -DCMAKE_PREFIX_PATH="$QTDIR/lib/cmake" ..
20+
fi
21+
else
22+
echo "QTDIR not set. Aborting."
23+
exit 1
24+
fi
25+
26+
ninja
27+
28+
if [ ! $? -eq 0 ]; then
29+
echo Compiler error. Aborting package creation.
30+
exit $?
31+
fi
32+
33+
# Install to target
34+
ninja install
35+
if [ ! $? -eq 0 ]; then
36+
echo Installation error. Aborting package creation.
37+
exit $?
38+
fi
39+
40+
cd ..
41+
42+
echo "Run windeployqt..."
43+
cd $APP_DIR
44+
if [ "$1" == "qmlui" ]; then
45+
$QTDIR/bin/windeployqt --qmldir $ROOT_DIR/qmlui/qml qlcplusengine.dll Plugins/dmxusb.dll qlcplus-qml.exe
46+
rm sceneparsers/gltfsceneexport.dll
47+
else
48+
$QTDIR/bin/windeployqt qlcplusengine.dll qlcplusui.dll qlcpluswebaccess.dll Plugins/dmxusb.dll qlcplus.exe
49+
fi
50+
51+
# remove uneeded stuff
52+
rm -rf generic networkinformation qmltooling renderplugins tls translations
53+
54+
55+
# Create Installer
56+
makensis -X'SetCompressor /FINAL lzma' qlcplus*.nsi
57+

debian/changelog

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,27 @@
11
qlcplus (4.14.2) stable; urgency=low
22

33
* engine: fix audio end of stream causing a crash on Qt 6 builds
4+
* engine: decrease memory usage of RGB Matrix (thanks to Nick Shaforostoff)
5+
* engine: fix crash when changing EFX timing after "Stop all functions" (thanks to Jurrie Overgoor)
6+
* engine: input profiles are now loaded from project folder too
7+
* engine: fix RGB Matrix color lost while editing (thanks to Jurrie Overgoor)
8+
* engine: fix RGB Matrix dimmer control mode on generic dimmers
9+
* engine: fix EFX duration change when asymmetrical
10+
* UI/Fixture Remap: include channel modifiers when fixture model and mode are the same
411
* Virtual Console: add an option to hide Grand Master (thanks to Jurrie Overgoor)
12+
* Plugins/DMX USB: fix crash with some FTDI adapters
13+
* Plugins/DMX USB: improve Open DMX timer accuracy (thanks to Basil Hussain)
14+
* Web Access: improved multiple connections handling (thank to Jurrie Overgoor)
515
* Input profiles: added M-Wave SMC Mixer
616
* New fixtures: Eurolite LED TMH-40, Stairville HF-900 Haze Fogger (thanks to thegasta)
717
* New fixtures: Sagitter Prince, Sagitter Lite Beam 5R, Sagitter ARS 1500FC (thanks to Alessandro Caseti)
18+
* New fixtures: Stairville BEL6 IP Bar HEX, BSW-350 LED (thanks to Theodor Hein)
19+
* New fixtures: American DJ Encore FR50z, Encore FR150z, Showtec LED Blinder 2 COB (thanks to Bram Janssen)
20+
* New fixture: Showtec LED Par 64 36x3W (thanks to Bostjan Vodnik)
21+
* New fixture: Expolite TourBar 32PIX RGBW (thanks to Wim Van Laer)
22+
* New fixture: Clay Paky Mini-B Spot
823

9-
-- Massimo Callegari <massimocallegari@yahoo.it> Sat, 24 May 2025 18:19:20 +0200
24+
-- Massimo Callegari <massimocallegari@yahoo.it> Sat, 14 Jun 2025 18:19:20 +0200
1025

1126
qlcplus (4.14.1) stable; urgency=high
1227

engine/src/doc.cpp

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@
6464

6565
Doc::Doc(QObject* parent, int universes)
6666
: QObject(parent)
67-
, m_wsPath("")
67+
, m_workspacePath("")
6868
, m_fixtureDefCache(new QLCFixtureDefCache)
6969
, m_modifiersCache(new QLCModifiersCache)
7070
, m_rgbScriptsCache(new RGBScriptsCache(this))
@@ -197,12 +197,12 @@ void Doc::clearContents()
197197

198198
void Doc::setWorkspacePath(QString path)
199199
{
200-
m_wsPath = path;
200+
m_workspacePath = path;
201201
}
202202

203-
QString Doc::getWorkspacePath() const
203+
QString Doc::workspacePath() const
204204
{
205-
return m_wsPath;
205+
return m_workspacePath;
206206
}
207207

208208
QString Doc::normalizeComponentPath(const QString& filePath) const
@@ -212,9 +212,9 @@ QString Doc::normalizeComponentPath(const QString& filePath) const
212212

213213
QFileInfo f(filePath);
214214

215-
if (f.absolutePath().startsWith(getWorkspacePath()))
215+
if (f.absolutePath().startsWith(workspacePath()))
216216
{
217-
return QDir(getWorkspacePath()).relativeFilePath(f.absoluteFilePath());
217+
return QDir(workspacePath()).relativeFilePath(f.absoluteFilePath());
218218
}
219219
else
220220
{
@@ -227,7 +227,7 @@ QString Doc::denormalizeComponentPath(const QString& filePath) const
227227
if (filePath.isEmpty())
228228
return filePath;
229229

230-
return QFileInfo(QDir(getWorkspacePath()), filePath).absoluteFilePath();
230+
return QFileInfo(QDir(workspacePath()), filePath).absoluteFilePath();
231231
}
232232

233233
/*****************************************************************************
@@ -592,6 +592,13 @@ bool Doc::replaceFixtures(QList<Fixture*> newFixturesList)
592592
newFixture->setForcedHTPChannels(fixture->forcedHTPChannels());
593593
newFixture->setForcedLTPChannels(fixture->forcedLTPChannels());
594594

595+
for (quint32 s = 0; s < fixture->channels(); s++)
596+
{
597+
ChannelModifier *chMod = fixture->channelModifier(s);
598+
if (chMod != NULL)
599+
newFixture->setChannelModifier(s, chMod);
600+
}
601+
595602
m_fixtures.insert(id, newFixture);
596603
m_fixturesListCacheUpToDate = false;
597604

engine/src/doc.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ class Doc : public QObject
8181
void setWorkspacePath(QString path);
8282

8383
/** Retrieve the current workspace absolute path */
84-
QString getWorkspacePath() const;
84+
QString workspacePath() const;
8585

8686
/** If filePath is in the workspace directory or in one of its subdirectories,
8787
* return path relative to the workspace directory.
@@ -100,7 +100,7 @@ class Doc : public QObject
100100
QString denormalizeComponentPath(const QString& filePath) const;
101101

102102
private:
103-
QString m_wsPath;
103+
QString m_workspacePath;
104104

105105
signals:
106106
/** Emitted when clearContents() is called, before actually doing anything. */

engine/src/efx.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -525,6 +525,9 @@ public slots:
525525
Serial, /**< Pattern propagates to the next fixture after a delay */
526526
Asymmetric /**< All fixtures move with an offset */
527527
};
528+
#if QT_VERSION >= 0x050500
529+
Q_ENUM(PropagationMode)
530+
#endif
528531

529532
/** Set the EFX's fixture propagation mode (see the enum above) */
530533
void setPropagationMode(PropagationMode mode);

engine/src/efxfixture.cpp

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,9 @@ bool EFXFixture::isValid() const
186186

187187
void EFXFixture::durationChanged()
188188
{
189+
if (m_elapsed == 0)
190+
return;
191+
189192
// To avoid jumps when changing duration,
190193
// the elapsed time is rescaled to the
191194
// new duration.
@@ -195,11 +198,12 @@ void EFXFixture::durationChanged()
195198

196199
// Serial or Asymmetric propagation mode:
197200
// we must subtract the offset from the current position
198-
if (timeOffset())
201+
uint offset = timeOffset();
202+
if (offset)
199203
{
200-
if (m_elapsed < timeOffset())
204+
if (m_elapsed < offset)
201205
m_elapsed += m_parent->loopDuration();
202-
m_elapsed -= timeOffset();
206+
m_elapsed -= offset;
203207
}
204208
}
205209

engine/src/fixture.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1243,7 +1243,7 @@ bool Fixture::loadXML(QXmlStreamReader &xmlDoc, Doc *doc,
12431243
QString man(manufacturer);
12441244
QString mod(model);
12451245
QString path = QString("%1%2%3-%4%5")
1246-
.arg(doc->getWorkspacePath()).arg(QDir::separator())
1246+
.arg(doc->workspacePath()).arg(QDir::separator())
12471247
.arg(man.replace(" ", "-")).arg(mod.replace(" ", "-")).arg(KExtFixture);
12481248

12491249
qDebug() << "Fixture not found. Fallback to:" << path;

0 commit comments

Comments
 (0)