summaryrefslogtreecommitdiffstats
path: root/src/mixer/samplerbank.cpp
diff options
context:
space:
mode:
authorbe_ <be.0@gmx.com>2017-03-09 18:50:01 -0600
committerbe_ <be.0@gmx.com>2017-03-24 10:13:38 -0500
commit3aa2c87c7d087366b4b52a9a0df9ea47866f83ef (patch)
tree0f2e7c71fd756e32d932a26e5debbd721f6fe7b6 /src/mixer/samplerbank.cpp
parent3eb8844a5e5a789395cd0d72b45040c38521697d (diff)
make tracks loaded into samplers persistent across restarts
Diffstat (limited to 'src/mixer/samplerbank.cpp')
-rw-r--r--src/mixer/samplerbank.cpp96
1 files changed, 63 insertions, 33 deletions
diff --git a/src/mixer/samplerbank.cpp b/src/mixer/samplerbank.cpp
index e4ae049426..07b78e8c76 100644
--- a/src/mixer/samplerbank.cpp
+++ b/src/mixer/samplerbank.cpp
@@ -13,54 +13,70 @@ SamplerBank::SamplerBank(PlayerManager* pPlayerManager)
: QObject(pPlayerManager),
m_pPlayerManager(pPlayerManager) {
DEBUG_ASSERT(m_pPlayerManager);
- m_pLoadControl = new ControlPushButton(ConfigKey("[Sampler]", "LoadSamplerBank"));
- connect(m_pLoadControl, SIGNAL(valueChanged(double)),
+ m_pCOLoadBank = new ControlPushButton(ConfigKey("[Sampler]", "LoadSamplerBank"));
+ connect(m_pCOLoadBank, SIGNAL(valueChanged(double)),
this, SLOT(slotLoadSamplerBank(double)));
- m_pSaveControl = new ControlPushButton(ConfigKey("[Sampler]", "SaveSamplerBank"));
- connect(m_pSaveControl, SIGNAL(valueChanged(double)),
+ m_pCOSaveBank = new ControlPushButton(ConfigKey("[Sampler]", "SaveSamplerBank"));
+ connect(m_pCOSaveBank, SIGNAL(valueChanged(double)),
this, SLOT(slotSaveSamplerBank(double)));
+
+ m_pCONumSamplers = new ControlProxy(ConfigKey("[Master]", "num_samplers"));
}
SamplerBank::~SamplerBank() {
- delete m_pLoadControl;
- delete m_pSaveControl;
+ delete m_pCOLoadBank;
+ delete m_pCOSaveBank;
}
void SamplerBank::slotSaveSamplerBank(double v) {
- if (v == 0.0 || m_pPlayerManager == NULL) {
+ if (v <= 0.0) {
return;
}
- QString filefilter = tr("Mixxx Sampler Banks (*.xml)");
+
+ QString fileFilter = tr("Mixxx Sampler Banks (*.xml)");
QString samplerBankPath = QFileDialog::getSaveFileName(
NULL, tr("Save Sampler Bank"),
QString(),
tr("Mixxx Sampler Banks (*.xml)"),
- &filefilter);
+ &fileFilter);
if (samplerBankPath.isNull() || samplerBankPath.isEmpty()) {
return;
}
+
// Manually add extension due to bug in QFileDialog
// via https://bugreports.qt-project.org/browse/QTBUG-27186
// Can be removed after switch to Qt5
QFileInfo fileName(samplerBankPath);
if (fileName.suffix().isEmpty()) {
- QString ext = filefilter.section(".",1,1);
+ QString ext = fileFilter.section(".",1,1);
ext.chop(1);
samplerBankPath.append(".").append(ext);
}
+ if (!saveSamplerBankToPath(samplerBankPath)) {
+ QMessageBox::warning(NULL,
+ tr("Error Saving Sampler Bank"),
+ tr("Could not write the sampler bank to '%1'.")
+ .arg(samplerBankPath));
+ }
+}
+
+bool SamplerBank::saveSamplerBankToPath(const QString& samplerBankPath) {
// The user has picked a new directory via a file dialog. This means the
// system sandboxer (if we are sandboxed) has granted us permission to this
// folder. We don't need access to this file on a regular basis so we do not
// register a security bookmark.
+ if (m_pPlayerManager == nullptr) {
+ qWarning() << "SamplerBank::saveSamplerBankToPath called with no PlayerManager";
+ return false;
+ }
+
QFile file(samplerBankPath);
if (!file.open(QIODevice::WriteOnly)) {
- QMessageBox::warning(NULL,
- tr("Error Saving Sampler Bank"),
- tr("Could not write the sampler bank to '%1'.")
- .arg(samplerBankPath));
- return;
+ qWarning() << "Error saving sampler bank: Could not write to file"
+ << samplerBankPath;
+ return false;
}
QDomDocument doc("SamplerBank");
@@ -89,10 +105,12 @@ void SamplerBank::slotSaveSamplerBank(double v) {
file.write(docStr.toUtf8().constData());
file.close();
+
+ return true;
}
void SamplerBank::slotLoadSamplerBank(double v) {
- if (v == 0.0 || m_pPlayerManager == NULL) {
+ if (v <= 0.0) {
return;
}
@@ -105,37 +123,42 @@ void SamplerBank::slotLoadSamplerBank(double v) {
return;
}
+ if (!loadSamplerBankFromPath(samplerBankPath)) {
+ QMessageBox::warning(NULL,
+ tr("Error Reading Sampler Bank"),
+ tr("Could not open the sampler bank file '%1'.")
+ .arg(samplerBankPath));
+ }
+}
+
+bool SamplerBank::loadSamplerBankFromPath(const QString& samplerBankPath) {
// The user has picked a new directory via a file dialog. This means the
// system sandboxer (if we are sandboxed) has granted us permission to this
// folder. We don't need access to this file on a regular basis so we do not
// register a security bookmark.
+ if (m_pPlayerManager == nullptr) {
+ qWarning() << "SamplerBank::loadSamplerBankFromPath called with no PlayerManager";
+ return false;
+ }
+
QFile file(samplerBankPath);
if (!file.open(QIODevice::ReadOnly)) {
- QMessageBox::warning(NULL,
- tr("Error Reading Sampler Bank"),
- tr("Could not open the sampler bank file '%1'.")
- .arg(samplerBankPath));
- return;
+ qWarning() << "Could not read sampler bank file" << samplerBankPath;
+ return false;
}
QDomDocument doc;
if (!doc.setContent(file.readAll())) {
- QMessageBox::warning(NULL,
- tr("Error Reading Sampler Bank"),
- tr("Could not read the sampler bank file '%1'.")
- .arg(samplerBankPath));
- return;
+ qWarning() << "Could not read sampler bank file" << samplerBankPath;
+ return false;
}
QDomElement root = doc.documentElement();
- if(root.tagName() != "samplerbank") {
- QMessageBox::warning(NULL,
- tr("Error Reading Sampler Bank"),
- tr("Could not read the sampler bank file '%1'.")
- .arg(samplerBankPath));
- return;
+ if (root.tagName() != "samplerbank") {
+ qWarning() << "Could not read sampler bank file" << samplerBankPath;
+ return false;
}
QDomNode n = root.firstChild();
@@ -147,8 +170,14 @@ void SamplerBank::slotLoadSamplerBank(double v) {
if (e.tagName() == "sampler") {
QString group = e.attribute("group", "");
QString location = e.attribute("location", "");
+ int samplerNum;
+
+ if (!group.isEmpty()
+ && m_pPlayerManager->isSamplerGroup(group, &samplerNum)) {
+ if (m_pPlayerManager->numSamplers() < (unsigned) samplerNum) {
+ m_pCONumSamplers->set(samplerNum);
+ }
- if (!group.isEmpty()) {
if (location.isEmpty()) {
m_pPlayerManager->slotLoadTrackToPlayer(TrackPointer(), group);
} else {
@@ -162,4 +191,5 @@ void SamplerBank::slotLoadSamplerBank(double v) {
}
file.close();
+ return true;
}