summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/engine/enginedelay.cpp2
-rw-r--r--src/engine/enginedelay.h2
-rw-r--r--src/engine/enginemaster.cpp5
-rw-r--r--src/engine/enginemaster.h2
-rw-r--r--src/engine/enginesidechaincompressor.cpp2
-rw-r--r--src/engine/enginesidechaincompressor.h2
-rw-r--r--src/engine/enginetalkoverducking.cpp8
-rw-r--r--src/engine/enginetalkoverducking.h4
-rw-r--r--src/engine/sync/basesyncablelistener.cpp2
-rw-r--r--src/engine/sync/internalclock.cpp13
-rw-r--r--src/engine/sync/internalclock.h2
-rw-r--r--src/skin/legacyskinparser.cpp142
-rw-r--r--src/skin/legacyskinparser.h7
-rw-r--r--src/skin/skinloader.cpp2
-rw-r--r--src/waveform/renderers/waveformwidgetrenderer.cpp55
-rw-r--r--src/waveform/renderers/waveformwidgetrenderer.h12
-rw-r--r--src/waveform/widgets/emptywaveformwidget.cpp2
-rw-r--r--src/waveform/widgets/emptywaveformwidget.h2
-rw-r--r--src/waveform/widgets/glrgbwaveformwidget.cpp3
-rw-r--r--src/waveform/widgets/glrgbwaveformwidget.h2
-rw-r--r--src/waveform/widgets/glsimplewaveformwidget.cpp2
-rw-r--r--src/waveform/widgets/glsimplewaveformwidget.h2
-rw-r--r--src/waveform/widgets/glslwaveformwidget.cpp15
-rw-r--r--src/waveform/widgets/glslwaveformwidget.h10
-rw-r--r--src/waveform/widgets/glvsynctestwidget.cpp6
-rw-r--r--src/waveform/widgets/glvsynctestwidget.h2
-rw-r--r--src/waveform/widgets/glwaveformwidget.cpp2
-rw-r--r--src/waveform/widgets/glwaveformwidget.h2
-rw-r--r--src/waveform/widgets/hsvwaveformwidget.cpp6
-rw-r--r--src/waveform/widgets/hsvwaveformwidget.h2
-rw-r--r--src/waveform/widgets/qthsvwaveformwidget.cpp6
-rw-r--r--src/waveform/widgets/qthsvwaveformwidget.h2
-rw-r--r--src/waveform/widgets/qtrgbwaveformwidget.cpp2
-rw-r--r--src/waveform/widgets/qtrgbwaveformwidget.h2
-rw-r--r--src/waveform/widgets/qtsimplewaveformwidget.cpp4
-rw-r--r--src/waveform/widgets/qtsimplewaveformwidget.h2
-rw-r--r--src/waveform/widgets/qtvsynctestwidget.cpp6
-rw-r--r--src/waveform/widgets/qtvsynctestwidget.h2
-rw-r--r--src/waveform/widgets/qtwaveformwidget.cpp2
-rw-r--r--src/waveform/widgets/qtwaveformwidget.h2
-rw-r--r--src/waveform/widgets/rgbwaveformwidget.cpp2
-rw-r--r--src/waveform/widgets/rgbwaveformwidget.h2
-rw-r--r--src/waveform/widgets/softwarewaveformwidget.cpp6
-rw-r--r--src/waveform/widgets/softwarewaveformwidget.h2
-rw-r--r--src/waveform/widgets/waveformwidgetabstract.cpp6
-rw-r--r--src/waveform/widgets/waveformwidgetabstract.h2
-rw-r--r--src/widget/wkey.cpp2
-rw-r--r--src/widget/wkey.h2
-rw-r--r--src/widget/wnumberpos.cpp2
-rw-r--r--src/widget/wnumberpos.h2
-rw-r--r--src/widget/wnumberrate.cpp2
-rw-r--r--src/widget/wnumberrate.h2
-rw-r--r--src/widget/woverview.cpp2
-rw-r--r--src/widget/woverview.h2
-rw-r--r--src/widget/woverviewhsv.cpp4
-rw-r--r--src/widget/woverviewhsv.h2
-rw-r--r--src/widget/woverviewlmh.cpp5
-rw-r--r--src/widget/woverviewlmh.h2
-rw-r--r--src/widget/woverviewrgb.cpp4
-rw-r--r--src/widget/woverviewrgb.h2
-rw-r--r--src/widget/wstarrating.cpp14
-rw-r--r--src/widget/wstarrating.h2
-rw-r--r--src/widget/wtrackproperty.cpp13
-rw-r--r--src/widget/wtrackproperty.h4
-rw-r--r--src/widget/wtracktext.cpp10
-rw-r--r--src/widget/wtracktext.h4
-rw-r--r--src/widget/wwaveformviewer.cpp11
-rw-r--r--src/widget/wwaveformviewer.h19
68 files changed, 234 insertions, 248 deletions
diff --git a/src/engine/enginedelay.cpp b/src/engine/enginedelay.cpp
index 72c13b84e0..fea2383373 100644
--- a/src/engine/enginedelay.cpp
+++ b/src/engine/enginedelay.cpp
@@ -28,7 +28,7 @@ const int kiMaxDelay = (kdMaxDelayPot + 8) / 1000 *
mixxx::audio::SampleRate::kValueMax * mixxx::kEngineChannelCount;
} // anonymous namespace
-EngineDelay::EngineDelay(const char* group, ConfigKey delayControl, bool bPersist)
+EngineDelay::EngineDelay(const QString& group, ConfigKey delayControl, bool bPersist)
: m_iDelayPos(0),
m_iDelay(0) {
m_pDelayBuffer = SampleUtil::alloc(kiMaxDelay);
diff --git a/src/engine/enginedelay.h b/src/engine/enginedelay.h
index 8fab4b867e..5f2d16f689 100644
--- a/src/engine/enginedelay.h
+++ b/src/engine/enginedelay.h
@@ -26,7 +26,7 @@ class ControlProxy;
class EngineDelay : public EngineObject {
Q_OBJECT
public:
- EngineDelay(const char* group, ConfigKey delayControl, bool bPersist = true);
+ EngineDelay(const QString& group, ConfigKey delayControl, bool bPersist = true);
virtual ~EngineDelay();
void process(CSAMPLE* pInOut, const int iBufferSize);
diff --git a/src/engine/enginemaster.cpp b/src/engine/enginemaster.cpp
index d5e207d95a..76deaf7140 100644
--- a/src/engine/enginemaster.cpp
+++ b/src/engine/enginemaster.cpp
@@ -29,8 +29,9 @@
#include "util/timer.h"
#include "util/trace.h"
-EngineMaster::EngineMaster(UserSettingsPointer pConfig,
- const char* group,
+EngineMaster::EngineMaster(
+ UserSettingsPointer pConfig,
+ const QString& group,
EffectsManager* pEffectsManager,
ChannelHandleFactoryPointer pChannelHandleFactory,
bool bEnableSidechain)
diff --git a/src/engine/enginemaster.h b/src/engine/enginemaster.h
index 73b4edb939..5b5a1f2405 100644
--- a/src/engine/enginemaster.h
+++ b/src/engine/enginemaster.h
@@ -56,7 +56,7 @@ class EngineMaster : public QObject, public AudioSource {
Q_OBJECT
public:
EngineMaster(UserSettingsPointer pConfig,
- const char* pGroup,
+ const QString& group,
EffectsManager* pEffectsManager,
ChannelHandleFactoryPointer pChannelHandleFactory,
bool bEnableSidechain);
diff --git a/src/engine/enginesidechaincompressor.cpp b/src/engine/enginesidechaincompressor.cpp
index 0dc9a6bdac..bfc6b49739 100644
--- a/src/engine/enginesidechaincompressor.cpp
+++ b/src/engine/enginesidechaincompressor.cpp
@@ -2,7 +2,7 @@
#include "engine/enginesidechaincompressor.h"
-EngineSideChainCompressor::EngineSideChainCompressor(const char* group)
+EngineSideChainCompressor::EngineSideChainCompressor(const QString& group)
: m_compressRatio(1.0),
m_bAboveThreshold(false),
m_threshold(1.0),
diff --git a/src/engine/enginesidechaincompressor.h b/src/engine/enginesidechaincompressor.h
index e7b043f267..ca124d39b4 100644
--- a/src/engine/enginesidechaincompressor.h
+++ b/src/engine/enginesidechaincompressor.h
@@ -5,7 +5,7 @@
class EngineSideChainCompressor {
public:
- EngineSideChainCompressor(const char* group);
+ EngineSideChainCompressor(const QString& group);
virtual ~EngineSideChainCompressor() { };
void setParameters(CSAMPLE threshold, CSAMPLE strength,
diff --git a/src/engine/enginetalkoverducking.cpp b/src/engine/enginetalkoverducking.cpp
index 02e9830e9c..e67df8b131 100644
--- a/src/engine/enginetalkoverducking.cpp
+++ b/src/engine/enginetalkoverducking.cpp
@@ -4,10 +4,10 @@
#define DUCK_THRESHOLD 0.1
EngineTalkoverDucking::EngineTalkoverDucking(
- UserSettingsPointer pConfig, const char* group)
- : EngineSideChainCompressor(group),
- m_pConfig(pConfig),
- m_group(group) {
+ UserSettingsPointer pConfig, const QString& group)
+ : EngineSideChainCompressor(group),
+ m_pConfig(pConfig),
+ m_group(group) {
m_pMasterSampleRate = new ControlProxy(m_group, "samplerate", this);
m_pMasterSampleRate->connectValueChanged(this, &EngineTalkoverDucking::slotSampleRateChanged,
Qt::DirectConnection);
diff --git a/src/engine/enginetalkoverducking.h b/src/engine/enginetalkoverducking.h
index ef98284404..090b683af8 100644
--- a/src/engine/enginetalkoverducking.h
+++ b/src/engine/enginetalkoverducking.h
@@ -15,7 +15,7 @@ class EngineTalkoverDucking : public QObject, public EngineSideChainCompressor {
MANUAL,
};
- EngineTalkoverDucking(UserSettingsPointer pConfig, const char* group);
+ EngineTalkoverDucking(UserSettingsPointer pConfig, const QString& group);
virtual ~EngineTalkoverDucking();
TalkoverDuckSetting getMode() const {
@@ -31,7 +31,7 @@ class EngineTalkoverDucking : public QObject, public EngineSideChainCompressor {
private:
UserSettingsPointer m_pConfig;
- const char* m_group;
+ const QString m_group;
ControlProxy* m_pMasterSampleRate;
ControlPotmeter* m_pDuckStrength;
diff --git a/src/engine/sync/basesyncablelistener.cpp b/src/engine/sync/basesyncablelistener.cpp
index f3cde3f886..d0318aafd1 100644
--- a/src/engine/sync/basesyncablelistener.cpp
+++ b/src/engine/sync/basesyncablelistener.cpp
@@ -4,7 +4,7 @@
#include "engine/sync/internalclock.h"
-static const char* kInternalClockGroup = "[InternalClock]";
+const QString kInternalClockGroup = QStringLiteral("[InternalClock]");
BaseSyncableListener::BaseSyncableListener(UserSettingsPointer pConfig)
: m_pConfig(pConfig),
diff --git a/src/engine/sync/internalclock.cpp b/src/engine/sync/internalclock.cpp
index c2e7071424..0f598743c0 100644
--- a/src/engine/sync/internalclock.cpp
+++ b/src/engine/sync/internalclock.cpp
@@ -13,8 +13,8 @@ namespace {
const mixxx::Logger kLogger("InternalClock");
} // namespace
-InternalClock::InternalClock(const char* pGroup, SyncableListener* pEngineSync)
- : m_group(pGroup),
+InternalClock::InternalClock(const QString& group, SyncableListener* pEngineSync)
+ : m_group(group),
m_pEngineSync(pEngineSync),
m_mode(SYNC_NONE),
m_iOldSampleRate(44100),
@@ -28,8 +28,8 @@ InternalClock::InternalClock(const char* pGroup, SyncableListener* pEngineSync)
// and bpm_down controls.
// bpm_up / bpm_down steps by 1
// bpm_up_small / bpm_down_small steps by 0.1
- m_pClockBpm.reset(new ControlLinPotmeter(ConfigKey(m_group, "bpm"),
- 1, 200, 1, 0.1, true));
+ m_pClockBpm.reset(
+ new ControlLinPotmeter(ConfigKey(m_group, "bpm"), 1, 200, 1, 0.1, true));
connect(m_pClockBpm.data(), &ControlObject::valueChanged,
this, &InternalClock::slotBpmChanged,
Qt::DirectConnection);
@@ -41,11 +41,10 @@ InternalClock::InternalClock(const char* pGroup, SyncableListener* pEngineSync)
Qt::DirectConnection);
m_pSyncMasterEnabled.reset(
- new ControlPushButton(ConfigKey(pGroup, "sync_master")));
+ new ControlPushButton(ConfigKey(m_group, "sync_master")));
m_pSyncMasterEnabled->setButtonMode(ControlPushButton::TOGGLE);
m_pSyncMasterEnabled->connectValueChangeRequest(
- this, &InternalClock::slotSyncMasterEnabledChangeRequest,
- Qt::DirectConnection);
+ this, &InternalClock::slotSyncMasterEnabledChangeRequest, Qt::DirectConnection);
}
InternalClock::~InternalClock() {
diff --git a/src/engine/sync/internalclock.h b/src/engine/sync/internalclock.h
index 085fe7d9c5..21d819e6f4 100644
--- a/src/engine/sync/internalclock.h
+++ b/src/engine/sync/internalclock.h
@@ -22,7 +22,7 @@ class EngineSync;
class InternalClock : public QObject, public Clock, public Syncable {
Q_OBJECT
public:
- InternalClock(const char* pGroup, SyncableListener* pEngineSync);
+ InternalClock(const QString& group, SyncableListener* pEngineSync);
~InternalClock() override;
const QString& getGroup() const override {
diff --git a/src/skin/legacyskinparser.cpp b/src/skin/legacyskinparser.cpp
index 0a3978a183..6ad00f9b40 100644
--- a/src/skin/legacyskinparser.cpp
+++ b/src/skin/legacyskinparser.cpp
@@ -89,8 +89,9 @@
using mixxx::skin::SkinManifest;
-QList<const char*> LegacySkinParser::s_channelStrs;
-QMutex LegacySkinParser::s_safeStringMutex;
+/// This QSet allows to make use of the implicit sharing
+/// of QString instead of every widget keeping its own copy.
+QSet<QString> LegacySkinParser::s_sharedGroupStrings;
static bool sDebug = false;
@@ -248,14 +249,9 @@ QList<QString> LegacySkinParser::getSchemeList(const QString& qSkinPath) {
}
// static
-void LegacySkinParser::freeChannelStrings() {
- QMutexLocker lock(&s_safeStringMutex);
- for (int i = 0; i < s_channelStrs.length(); ++i) {
- if (s_channelStrs[i]) {
- delete [] s_channelStrs[i];
- }
- s_channelStrs[i] = NULL;
- }
+void LegacySkinParser::clearSharedGroupStrings() {
+ // This frees up the memory allocated by the QString objects
+ s_sharedGroupStrings.clear();
}
SkinManifest LegacySkinParser::getSkinManifest(const QDomElement& skinDocument) {
@@ -919,25 +915,22 @@ void LegacySkinParser::setupLabelWidget(const QDomElement& element, WLabel* pLab
}
QWidget* LegacySkinParser::parseOverview(const QDomElement& node) {
- QString channelStr = lookupNodeGroup(node);
-
- const char* pSafeChannelStr = safeChannelString(channelStr);
-
- BaseTrackPlayer* pPlayer = m_pPlayerManager->getPlayer(channelStr);
-
- if (pPlayer == NULL)
- return NULL;
+ QString group = lookupNodeGroup(node);
+ BaseTrackPlayer* pPlayer = m_pPlayerManager->getPlayer(group);
+ if (!pPlayer) {
+ return nullptr;
+ }
- WOverview* overviewWidget = NULL;
+ WOverview* overviewWidget = nullptr;
// "RGB" = "2", "HSV" = "1" or "Filtered" = "0" (LMH) waveform overview type
int type = m_pConfig->getValue(ConfigKey("[Waveform]","WaveformOverviewType"), 2);
if (type == 0) {
- overviewWidget = new WOverviewLMH(pSafeChannelStr, m_pPlayerManager, m_pConfig, m_pParent);
+ overviewWidget = new WOverviewLMH(group, m_pPlayerManager, m_pConfig, m_pParent);
} else if (type == 1) {
- overviewWidget = new WOverviewHSV(pSafeChannelStr, m_pPlayerManager, m_pConfig, m_pParent);
+ overviewWidget = new WOverviewHSV(group, m_pPlayerManager, m_pConfig, m_pParent);
} else {
- overviewWidget = new WOverviewRGB(pSafeChannelStr, m_pPlayerManager, m_pConfig, m_pParent);
+ overviewWidget = new WOverviewRGB(group, m_pPlayerManager, m_pConfig, m_pParent);
}
connect(overviewWidget, SIGNAL(trackDropped(QString, QString)),
@@ -965,15 +958,13 @@ QWidget* LegacySkinParser::parseOverview(const QDomElement& node) {
}
QWidget* LegacySkinParser::parseVisual(const QDomElement& node) {
- QString channelStr = lookupNodeGroup(node);
- BaseTrackPlayer* pPlayer = m_pPlayerManager->getPlayer(channelStr);
-
- const char* pSafeChannelStr = safeChannelString(channelStr);
-
- if (pPlayer == NULL)
- return NULL;
+ QString group = lookupNodeGroup(node);
+ BaseTrackPlayer* pPlayer = m_pPlayerManager->getPlayer(group);
+ if (!pPlayer) {
+ return nullptr;
+ }
- WWaveformViewer* viewer = new WWaveformViewer(pSafeChannelStr, m_pConfig, m_pParent);
+ WWaveformViewer* viewer = new WWaveformViewer(group, m_pConfig, m_pParent);
viewer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
WaveformWidgetFactory* factory = WaveformWidgetFactory::instance();
factory->setWaveformWidget(viewer, node, *m_pContext);
@@ -1004,18 +995,16 @@ QWidget* LegacySkinParser::parseVisual(const QDomElement& node) {
}
QWidget* LegacySkinParser::parseText(const QDomElement& node) {
- QString channelStr = lookupNodeGroup(node);
- const char* pSafeChannelStr = safeChannelString(channelStr);
-
- BaseTrackPlayer* pPlayer = m_pPlayerManager->getPlayer(channelStr);
-
- if (!pPlayer)
- return NULL;
+ QString group = lookupNodeGroup(node);
+ BaseTrackPlayer* pPlayer = m_pPlayerManager->getPlayer(group);
+ if (!pPlayer) {
+ return nullptr;
+ }
WTrackText* p = new WTrackText(m_pParent,
m_pConfig,
m_pLibrary->trackCollections(),
- pSafeChannelStr);
+ group);
setupLabelWidget(node, p);
connect(pPlayer, SIGNAL(newTrackLoaded(TrackPointer)),
@@ -1036,18 +1025,17 @@ QWidget* LegacySkinParser::parseText(const QDomElement& node) {
}
QWidget* LegacySkinParser::parseTrackProperty(const QDomElement& node) {
- QString channelStr = lookupNodeGroup(node);
- const char* pSafeChannelStr = safeChannelString(channelStr);
-
- BaseTrackPlayer* pPlayer = m_pPlayerManager->getPlayer(channelStr);
-
- if (!pPlayer)
- return NULL;
+ QString group = lookupNodeGroup(node);
+ BaseTrackPlayer* pPlayer = m_pPlayerManager->getPlayer(group);
+ if (!pPlayer) {
+ return nullptr;
+ }
- WTrackProperty* p = new WTrackProperty(m_pParent,
+ WTrackProperty* p = new WTrackProperty(
+ m_pParent,
m_pConfig,
m_pLibrary->trackCollections(),
- pSafeChannelStr);
+ group);
setupLabelWidget(node, p);
connect(pPlayer, SIGNAL(newTrackLoaded(TrackPointer)),
@@ -1068,15 +1056,13 @@ QWidget* LegacySkinParser::parseTrackProperty(const QDomElement& node) {
}
QWidget* LegacySkinParser::parseStarRating(const QDomElement& node) {
- QString channelStr = lookupNodeGroup(node);
- const char* pSafeChannelStr = safeChannelString(channelStr);
-
- BaseTrackPlayer* pPlayer = m_pPlayerManager->getPlayer(channelStr);
-
- if (!pPlayer)
- return NULL;
+ QString group = lookupNodeGroup(node);
+ BaseTrackPlayer* pPlayer = m_pPlayerManager->getPlayer(group);
+ if (!pPlayer) {
+ return nullptr;
+ }
- WStarRating* p = new WStarRating(pSafeChannelStr, m_pParent);
+ WStarRating* p = new WStarRating(group, m_pParent);
commonWidgetSetup(node, p, false);
p->setup(node, *m_pContext);
@@ -1096,10 +1082,7 @@ QWidget* LegacySkinParser::parseStarRating(const QDomElement& node) {
QWidget* LegacySkinParser::parseNumberRate(const QDomElement& node) {
- QString channelStr = lookupNodeGroup(node);
-
- const char* pSafeChannelStr = safeChannelString(channelStr);
-
+ QString group = lookupNodeGroup(node);
QColor c(255,255,255);
QString cStr;
if (m_pContext->hasNodeSelectString(node, "BgColor", &cStr)) {
@@ -1110,7 +1093,7 @@ QWidget* LegacySkinParser::parseNumberRate(const QDomElement& node) {
//palette.setBrush(QPalette::Background, WSkinColor::getCorrectColor(c));
palette.setBrush(QPalette::Button, Qt::NoBrush);
- WNumberRate* p = new WNumberRate(pSafeChannelStr, m_pParent);
+ WNumberRate* p = new WNumberRate(group, m_pParent);
setupLabelWidget(node, p);
// TODO(rryan): Let's look at removing this palette change in 1.12.0. I
@@ -1121,19 +1104,15 @@ QWidget* LegacySkinParser::parseNumberRate(const QDomElement& node) {
}
QWidget* LegacySkinParser::parseNumberPos(const QDomElement& node) {
- QString channelStr = lookupNodeGroup(node);
-
- const char* pSafeChannelStr = safeChannelString(channelStr);
-
- WNumberPos* p = new WNumberPos(pSafeChannelStr, m_pParent);
+ QString group = lookupNodeGroup(node);
+ WNumberPos* p = new WNumberPos(group, m_pParent);
setupLabelWidget(node, p);
return p;
}
QWidget* LegacySkinParser::parseEngineKey(const QDomElement& node) {
- QString channelStr = lookupNodeGroup(node);
- const char* pSafeChannelStr = safeChannelString(channelStr);
- WKey* pEngineKey = new WKey(pSafeChannelStr, m_pParent);
+ QString group = lookupNodeGroup(node);
+ WKey* pEngineKey = new WKey(group, m_pParent);
setupLabelWidget(node, pEngineKey);
return pEngineKey;
}
@@ -1181,7 +1160,6 @@ QWidget* LegacySkinParser::parseRecordingDuration(const QDomElement& node) {
}
QWidget* LegacySkinParser::parseSpinny(const QDomElement& node) {
- QString channelStr = lookupNodeGroup(node);
if (CmdlineArgs::Instance().getSafeMode()) {
WLabel* dummy = new WLabel(m_pParent);
//: Shown when Mixxx is running in safe mode.
@@ -1199,9 +1177,9 @@ QWidget* LegacySkinParser::parseSpinny(const QDomElement& node) {
return dummy;
}
- BaseTrackPlayer* pPlayer = m_pPlayerManager->getPlayer(channelStr);
- WSpinny* spinny = new WSpinny(m_pParent, channelStr, m_pConfig,
- m_pVCManager, pPlayer);
+ QString group = lookupNodeGroup(node);
+ BaseTrackPlayer* pPlayer = m_pPlayerManager->getPlayer(group);
+ WSpinny* spinny = new WSpinny(m_pParent, group, m_pConfig, m_pVCManager, pPlayer);
commonWidgetSetup(node, spinny);
connect(waveformWidgetFactory, SIGNAL(renderSpinnies(VSyncThread*)), spinny, SLOT(render(VSyncThread*)));
@@ -1563,24 +1541,14 @@ QString LegacySkinParser::lookupNodeGroup(const QDomElement& node) {
}
}
- return group;
+ QString sharedGroup = getSharedGroupString(group);
+ return sharedGroup;
}
// static
-const char* LegacySkinParser::safeChannelString(const QString& channelStr) {
- QMutexLocker lock(&s_safeStringMutex);
- foreach (const char *s, s_channelStrs) {
- if (channelStr == s) { // calls QString::operator==(const char*)
- return s;
- }
- }
- QByteArray qba(channelStr.toLatin1());
- char *safe = new char[qba.size() + 1]; // +1 for \0
- int i = 0;
- // Copy string
- while ((safe[i] = qba[i])) ++i;
- s_channelStrs.append(safe);
- return safe;
+QString LegacySkinParser::getSharedGroupString(const QString& channelStr) {
+ QSet<QString>::iterator i = s_sharedGroupStrings.insert(channelStr);
+ return *i;
}
QWidget* LegacySkinParser::parseEffectChainName(const QDomElement& node) {
diff --git a/src/skin/legacyskinparser.h b/src/skin/legacyskinparser.h
index 0a992855d4..6a32f0a8d4 100644
--- a/src/skin/legacyskinparser.h
+++ b/src/skin/legacyskinparser.h
@@ -48,7 +48,7 @@ class LegacySkinParser : public QObject, public SkinParser {
static QList<QString> getSchemeList(const QString& qSkinPath);
// Parse a skin manifest from the provided skin document root.
static mixxx::skin::SkinManifest getSkinManifest(const QDomElement& skinDocument);
- static void freeChannelStrings();
+ static void clearSharedGroupStrings();
static Qt::MouseButton parseButtonState(const QDomNode& node,
const SkinContext& context);
@@ -129,7 +129,7 @@ class LegacySkinParser : public QObject, public SkinParser {
QString getLibraryStyle(const QDomNode& node);
QString lookupNodeGroup(const QDomElement& node);
- static const char* safeChannelString(const QString& channelStr);
+ static QString getSh