weWaveDesc.cpp (2624B)
1 #include "weWaveDesc.h" 2 3 #include "weWaveTreeItem.h" 4 #include "xtWaveEditor.h" 5 6 #include "baseLib/filesystem.h" 7 8 #include "synthLib/sysexToMidi.h" 9 10 namespace xtJucePlugin 11 { 12 WaveDesc* WaveDesc::fromDragSource(const juce::DragAndDropTarget::SourceDetails& _sourceDetails) 13 { 14 auto* desc = dynamic_cast<WaveDesc*>(_sourceDetails.description.getObject()); 15 return desc; 16 } 17 18 bool WaveDesc::writeToFile(const juce::File& _file) const 19 { 20 std::vector<xt::SysEx> sysex; 21 22 sysex.reserve(tableIds.size() + waveIds.size()); 23 24 for (size_t i = 0; i<tableIds.size(); ++i) 25 sysex.emplace_back(xt::State::createTableData(tableDatas[i], tableIds[i].rawId(), false)); 26 27 for (size_t i = 0; i < waveIds.size(); ++i) 28 sysex.emplace_back(xt::State::createWaveData(waveDatas[i], waveIds[i].rawId(), false)); 29 30 if(sysex.empty()) 31 return false; 32 33 if (_file.getFullPathName().endsWithIgnoreCase(".syx")) 34 { 35 std::vector<uint8_t> data; 36 for (const auto& s : sysex) 37 data.insert(data.end(), s.begin(), s.end()); 38 return baseLib::filesystem::writeFile(_file.getFullPathName().toStdString(), data); 39 } 40 return synthLib::SysexToMidi::write(_file.getFullPathName().toStdString().c_str(), sysex); 41 } 42 43 bool WaveDesc::canDropExternally() const 44 { 45 return !waveDatas.empty() || !tableDatas.empty(); 46 } 47 48 std::string WaveDesc::getExportFileName(const pluginLib::Processor& _processor) const 49 { 50 std::stringstream name; 51 name << _processor.getProperties().name << " - "; 52 53 if (tableIds.size() > 1) 54 name << "Table " << m_editor.getTableName(tableIds.front()) << " - " << m_editor.getTableName(tableIds.back()); 55 else if (waveIds.size() > 1) 56 name << "Wave " << WaveTreeItem::getWaveName(waveIds.front()) << " - " << WaveTreeItem::getWaveName(waveIds.back()); 57 else if(!tableDatas.empty()) 58 name << "Table " << m_editor.getTableName(tableIds.front()); 59 else if(!waveDatas.empty()) 60 name << "Wave " << WaveTreeItem::getWaveName(waveIds.front()); 61 else 62 return DragAndDropObject::getExportFileName(_processor); 63 64 if (juce::ModifierKeys::getCurrentModifiers().isShiftDown()) 65 name << ".syx"; 66 else 67 name << ".mid"; 68 69 return name.str(); 70 } 71 72 void WaveDesc::fillData(const WaveEditorData& _data) 73 { 74 for (int32_t i=0; i<static_cast<int32_t>(waveIds.size()); ++i) 75 { 76 if (auto wave = _data.getWave(waveIds[i])) 77 waveDatas.push_back(*wave); 78 else 79 waveIds.erase(waveIds.begin() + i); 80 } 81 for (int32_t i = 0; i < static_cast<int32_t>(tableIds.size()); ++i) 82 { 83 if (auto table = _data.getTable(tableIds[i])) 84 tableDatas.push_back(*table); 85 else 86 tableIds.erase(tableIds.begin() + i); 87 } 88 } 89 }