diff options
author | be_ <be.0@gmx.com> | 2017-03-09 18:50:01 -0600 |
---|---|---|
committer | be_ <be.0@gmx.com> | 2017-03-24 10:13:38 -0500 |
commit | 3aa2c87c7d087366b4b52a9a0df9ea47866f83ef (patch) | |
tree | 0f2e7c71fd756e32d932a26e5debbd721f6fe7b6 /src/mixer/samplerbank.cpp | |
parent | 3eb8844a5e5a789395cd0d72b45040c38521697d (diff) |
make tracks loaded into samplers persistent across restarts
Diffstat (limited to 'src/mixer/samplerbank.cpp')
-rw-r--r-- | src/mixer/samplerbank.cpp | 96 |
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; } |