| 87 | } |
| 88 | |
| 89 | void CInstrumentEditorSeq::SetupParser() const // // // |
| 90 | { |
| 91 | const auto MakeParser = [this] (sequence_t typ, seq_setting_t setting) -> std::unique_ptr<CSeqConversionBase> { |
| 92 | switch (typ) { |
| 93 | case sequence_t::Volume: |
| 94 | return std::make_unique<CSeqConversionDefault>(0, setting == SETTING_VOL_64_STEPS ? 0x3F : this->m_iMaxVolume); |
| 95 | case sequence_t::Arpeggio: |
| 96 | switch (setting) { |
| 97 | case SETTING_ARP_SCHEME: // // // |
| 98 | return std::make_unique<CSeqConversionArpScheme>(ARPSCHEME_MIN); |
| 99 | case SETTING_ARP_FIXED: |
| 100 | return std::make_unique<CSeqConversionArpFixed>(); |
| 101 | default: |
| 102 | return std::make_unique<CSeqConversionDefault>(-NOTE_COUNT, NOTE_COUNT); |
| 103 | } |
| 104 | case sequence_t::Pitch: case sequence_t::HiPitch: |
| 105 | return std::make_unique<CSeqConversionDefault>(-128, 127); |
| 106 | case sequence_t::DutyCycle: |
| 107 | if (this->m_iInstType == INST_S5B) |
| 108 | return std::make_unique<CSeqConversion5B>(); |
| 109 | return std::make_unique<CSeqConversionDefault>(0, this->m_iMaxDuty); |
| 110 | } |
| 111 | DEBUG_BREAK(); return nullptr; |
| 112 | }; |
| 113 | |
| 114 | auto pConv = MakeParser(m_pSequence->GetSequenceType(), m_pSequence->GetSetting()); |
| 115 | m_pSequenceEditor->SetConversion(*pConv); // // // |
| 116 | m_pParser->SetSequence(m_pSequence); |
| 117 | m_pParser->SetConversion(std::move(pConv)); |
| 118 | } |
| 119 | |
| 120 | void CInstrumentEditorSeq::UpdateSequenceString(bool Changed) // // // |
| 121 | { |
nothing calls this directly
no test coverage detected