diff --git a/CMakeLists.txt b/CMakeLists.txt index 4b5b3cd..23a7cd7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -306,6 +306,7 @@ target_sources(${PROJECT_NAME} "VASTvaporizer/Source/Plugin/VASTFXComponent.cpp" "VASTvaporizer/Source/Plugin/VASTFilterComponent.cpp" "VASTvaporizer/Source/Plugin/VASTGeneratorsComponent.cpp" + "VASTvaporizer/Source/Plugin/VASTGUIRuntimeModel.cpp" "VASTvaporizer/Source/Plugin/VASTHeaderComponent.cpp" "VASTvaporizer/Source/Plugin/VASTKeyboardComponent.cpp" "VASTvaporizer/Source/Plugin/VASTLFOMsegComponent.cpp" diff --git a/VASTvaporizer/Presets/AR Comb ARP.vvp b/VASTvaporizer/Presets/AR Comb ARP.vvp new file mode 100644 index 0000000..b18d907 --- /dev/null +++ b/VASTvaporizer/Presets/AR Comb ARP.vvp @@ -0,0 +1,934 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/VASTvaporizer/Presets/AR Dance With Me.vvp b/VASTvaporizer/Presets/AR Dance With Me.vvp new file mode 100644 index 0000000..6cf175f --- /dev/null +++ b/VASTvaporizer/Presets/AR Dance With Me.vvp @@ -0,0 +1,1447 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/VASTvaporizer/Presets/LD Metallic Stab ARPed.vvp b/VASTvaporizer/Presets/LD Metallic Stab ARPed.vvp new file mode 100644 index 0000000..22adf46 --- /dev/null +++ b/VASTvaporizer/Presets/LD Metallic Stab ARPed.vvp @@ -0,0 +1,933 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/VASTvaporizer/Presets/LD Metallic Stab.vvp b/VASTvaporizer/Presets/LD Metallic Stab.vvp new file mode 100644 index 0000000..ba584f8 --- /dev/null +++ b/VASTvaporizer/Presets/LD Metallic Stab.vvp @@ -0,0 +1,939 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/VASTvaporizer/Presets/LD Metro Through Underground.vvp b/VASTvaporizer/Presets/LD Metro Through Underground.vvp new file mode 100644 index 0000000..e7448ee --- /dev/null +++ b/VASTvaporizer/Presets/LD Metro Through Underground.vvp @@ -0,0 +1,926 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/VASTvaporizer/Presets/LD Visage.vvp b/VASTvaporizer/Presets/LD Visage.vvp new file mode 100644 index 0000000..3c8b553 --- /dev/null +++ b/VASTvaporizer/Presets/LD Visage.vvp @@ -0,0 +1,921 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/VASTvaporizer/Source/Engine/VASTXperience.cpp b/VASTvaporizer/Source/Engine/VASTXperience.cpp index 57aa344..e517e61 100644 --- a/VASTvaporizer/Source/Engine/VASTXperience.cpp +++ b/VASTvaporizer/Source/Engine/VASTXperience.cpp @@ -752,7 +752,26 @@ bool CVASTXperience::processAudioBuffer(AudioSampleBuffer& buffer, MidiBuffer& m return true; } -//// called only from GUI THREAD +void CVASTXperience::parameterUpdatesAfterInit() { + m_Poly.updateVariables(); + m_Poly.updateLFO(0); + m_Poly.updateLFO(1); + m_Poly.updateLFO(2); + m_Poly.updateLFO(3); + m_Poly.updateLFO(4); + m_Poly.initArp(); + m_Set.modMatrixCalcBuffers(); +} + +void CVASTXperience::setIsInitDefaults(bool defaults) { + m_isInitDefaults.store(defaults); +} + +bool CVASTXperience::getIsInitDefaults() { + return m_isInitDefaults.load(); +} + +//// called only from GUI THREAD void CVASTXperience::parameterChanged(const String& parameterID, float newValue) { if (myProcessor->initNotCompleted()) return; @@ -764,6 +783,7 @@ void CVASTXperience::parameterChanged(const String& parameterID, float newValue) // normal post procs bool l_isBlocked = nonThreadsafeIsBlockedProcessingInfo(); + bool l_isInitDefaults = getIsInitDefaults(); const ScopedLock sl(paramChangeLock); if (0 == parameterID.compare("m_uPolyMode")) { @@ -856,210 +876,210 @@ void CVASTXperience::parameterChanged(const String& parameterID, float newValue) if (m_Poly.m_singleNote[i] != nullptr) //safety check for multiple host threads editing simultaneously m_Poly.m_singleNote[i]->setPortamentoTime(*m_Set.m_State->m_fPortamento); } - if (!l_isBlocked) + if (!l_isBlocked && !l_isInitDefaults) m_Poly.updateVariables(); return; } if (0 == parameterID.compare("m_fMasterTune")) { - if (!l_isBlocked) + if (!l_isBlocked && !l_isInitDefaults) m_Poly.updateVariables(); return; } //LFO if (0 == parameterID.compare("m_uLFOTimeBeats_LFO1")) { - if (!l_isBlocked) + if (!l_isBlocked && !l_isInitDefaults) m_Poly.updateLFO(0); return; } if (0 == parameterID.compare("m_uLFOTimeBeats_LFO2")) { - if (!l_isBlocked) + if (!l_isBlocked && !l_isInitDefaults) m_Poly.updateLFO(1); return; } if (0 == parameterID.compare("m_uLFOTimeBeats_LFO3")) { - if (!l_isBlocked) + if (!l_isBlocked && !l_isInitDefaults) m_Poly.updateLFO(2); return; } if (0 == parameterID.compare("m_uLFOTimeBeats_LFO4")) { - if (!l_isBlocked) + if (!l_isBlocked && !l_isInitDefaults) m_Poly.updateLFO(3); return; } if (0 == parameterID.compare("m_uLFOTimeBeats_LFO5")) { - if (!l_isBlocked) + if (!l_isBlocked && !l_isInitDefaults) m_Poly.updateLFO(4); return; } if (0 == parameterID.compare("m_bLFOPerVoice_LFO1")) { - if (!l_isBlocked) + if (!l_isBlocked && !l_isInitDefaults) m_Poly.updateLFO(0); return; } if (0 == parameterID.compare("m_bLFOPerVoice_LFO2")) { - if (!l_isBlocked) + if (!l_isBlocked && !l_isInitDefaults) m_Poly.updateLFO(1); return; } if (0 == parameterID.compare("m_bLFOPerVoice_LFO3")) { - if (!l_isBlocked) + if (!l_isBlocked && !l_isInitDefaults) m_Poly.updateLFO(2); return; } if (0 == parameterID.compare("m_bLFOPerVoice_LFO4")) { - if (!l_isBlocked) + if (!l_isBlocked && !l_isInitDefaults) m_Poly.updateLFO(3); return; } if (0 == parameterID.compare("m_bLFOPerVoice_LFO5")) { - if (!l_isBlocked) + if (!l_isBlocked && !l_isInitDefaults) m_Poly.updateLFO(4); return; } if (0 == parameterID.compare("m_fLFOFreq_LFO1")) { - if (!l_isBlocked) + if (!l_isBlocked && !l_isInitDefaults) m_Poly.updateLFO(0); return; } if (0 == parameterID.compare("m_fLFOFreq_LFO2")) { - if (!l_isBlocked) + if (!l_isBlocked && !l_isInitDefaults) m_Poly.updateLFO(1); return; } if (0 == parameterID.compare("m_fLFOFreq_LFO3")) { - if (!l_isBlocked) + if (!l_isBlocked && !l_isInitDefaults) m_Poly.updateLFO(2); return; } if (0 == parameterID.compare("m_fLFOFreq_LFO4")) { - if (!l_isBlocked) + if (!l_isBlocked && !l_isInitDefaults) m_Poly.updateLFO(3); return; } if (0 == parameterID.compare("m_fLFOFreq_LFO5")) { - if (!l_isBlocked) + if (!l_isBlocked && !l_isInitDefaults) m_Poly.updateLFO(4); return; } if (0 == parameterID.compare("m_uLFOWave_LFO1")) { - if (!l_isBlocked) + if (!l_isBlocked && !l_isInitDefaults) m_Poly.updateLFO(0); return; } if (0 == parameterID.compare("m_uLFOWave_LFO2")) { - if (!l_isBlocked) + if (!l_isBlocked && !l_isInitDefaults) m_Poly.updateLFO(1); return; } if (0 == parameterID.compare("m_uLFOWave_LFO3")) { - if (!l_isBlocked) + if (!l_isBlocked && !l_isInitDefaults) m_Poly.updateLFO(2); return; } if (0 == parameterID.compare("m_uLFOWave_LFO4")) { - if (!l_isBlocked) + if (!l_isBlocked && !l_isInitDefaults) m_Poly.updateLFO(3); return; } if (0 == parameterID.compare("m_uLFOWave_LFO5")) { - if (!l_isBlocked) + if (!l_isBlocked && !l_isInitDefaults) m_Poly.updateLFO(4); return; } if (0 == parameterID.compare("m_bLFOSynch_LFO1")) { - if (!l_isBlocked) + if (!l_isBlocked && !l_isInitDefaults) m_Poly.updateLFO(0); return; } if (0 == parameterID.compare("m_bLFOSynch_LFO2")) { - if (!l_isBlocked) + if (!l_isBlocked && !l_isInitDefaults) m_Poly.updateLFO(1); return; } if (0 == parameterID.compare("m_bLFOSynch_LFO3")) { - if (!l_isBlocked) + if (!l_isBlocked && !l_isInitDefaults) m_Poly.updateLFO(2); return; } if (0 == parameterID.compare("m_bLFOSynch_LFO4")) { - if (!l_isBlocked) + if (!l_isBlocked && !l_isInitDefaults) m_Poly.updateLFO(3); return; } if (0 == parameterID.compare("m_bLFOSynch_LFO5")) { - if (!l_isBlocked) + if (!l_isBlocked && !l_isInitDefaults) m_Poly.updateLFO(4); return; } if (0 == parameterID.compare("m_uOscWave_OscA")) { - if (!l_isBlocked) + if (!l_isBlocked && !l_isInitDefaults) m_Poly.updateVariables(); return; } if (0 == parameterID.compare("m_uOscWave_OscB")) { - if (!l_isBlocked) + if (!l_isBlocked && !l_isInitDefaults) m_Poly.updateVariables(); return; } if (0 == parameterID.compare("m_uOscWave_OscC")) { - if (!l_isBlocked) + if (!l_isBlocked && !l_isInitDefaults) m_Poly.updateVariables(); return; } if (0 == parameterID.compare("m_uOscWave_OscD")) { - if (!l_isBlocked) + if (!l_isBlocked && !l_isInitDefaults) m_Poly.updateVariables(); return; } if ((0 == parameterID.compare("m_iNumOscs_OscA"))) { - if (!l_isBlocked) + if (!l_isBlocked && !l_isInitDefaults) m_Poly.updateVariables(); return; } if ((0 == parameterID.compare("m_iNumOscs_OscB"))) { - if (!l_isBlocked) + if (!l_isBlocked && !l_isInitDefaults) m_Poly.updateVariables(); return; } if ((0 == parameterID.compare("m_iNumOscs_OscC"))) { - if (!l_isBlocked) + if (!l_isBlocked && !l_isInitDefaults) m_Poly.updateVariables(); return; } if ((0 == parameterID.compare("m_iNumOscs_OscD"))) { - if (!l_isBlocked) + if (!l_isBlocked && !l_isInitDefaults) m_Poly.updateVariables(); return; } @@ -1086,82 +1106,82 @@ void CVASTXperience::parameterChanged(const String& parameterID, float newValue) if ((0 == parameterID.compare("m_bOscOnOff_OscA"))) { m_Poly.m_OscBank[0].setChangedFlag(); - if (!l_isBlocked) + if (!l_isBlocked && !l_isInitDefaults) m_Poly.updateVariables(); return; } if ((0 == parameterID.compare("m_bOscOnOff_OscB"))) { m_Poly.m_OscBank[1].setChangedFlag(); - if (!l_isBlocked) + if (!l_isBlocked && !l_isInitDefaults) m_Poly.updateVariables(); return; } if ((0 == parameterID.compare("m_bOscOnOff_OscC"))) { m_Poly.m_OscBank[2].setChangedFlag(); - if (!l_isBlocked) + if (!l_isBlocked && !l_isInitDefaults) m_Poly.updateVariables(); return; } if ((0 == parameterID.compare("m_bOscOnOff_OscD"))) { m_Poly.m_OscBank[3].setChangedFlag(); - if (!l_isBlocked) + if (!l_isBlocked && !l_isInitDefaults) m_Poly.updateVariables(); return; } if ((0 == parameterID.compare("m_bNoiseOnOff"))) { - if (!l_isBlocked) + if (!l_isBlocked && !l_isInitDefaults) m_Poly.updateVariables(); return; } if (0 == parameterID.compare("m_iOscOct_OscA")) { - if (!l_isBlocked) + if (!l_isBlocked && !l_isInitDefaults) m_Poly.updateVariables(); return; } if (0 == parameterID.compare("m_iOscOct_OscB")) { - if (!l_isBlocked) + if (!l_isBlocked && !l_isInitDefaults) m_Poly.updateVariables(); return; } if (0 == parameterID.compare("m_iOscOct_OscC")) { - if (!l_isBlocked) + if (!l_isBlocked && !l_isInitDefaults) m_Poly.updateVariables(); return; } if (0 == parameterID.compare("m_iOscOct_OscD")) { - if (!l_isBlocked) + if (!l_isBlocked && !l_isInitDefaults) m_Poly.updateVariables(); return; } if (0 == parameterID.compare("m_fOscDetune_OscA")) { - if (!l_isBlocked) + if (!l_isBlocked && !l_isInitDefaults) m_Poly.updateVariables(); return; } if (0 == parameterID.compare("m_fOscDetune_OscB")) { - if (!l_isBlocked) + if (!l_isBlocked && !l_isInitDefaults) m_Poly.updateVariables(); return; } if (0 == parameterID.compare("m_fOscDetune_OscC")) { - if (!l_isBlocked) + if (!l_isBlocked && !l_isInitDefaults) m_Poly.updateVariables(); return; } if (0 == parameterID.compare("m_fOscDetune_OscD")) { - if (!l_isBlocked) + if (!l_isBlocked && !l_isInitDefaults) m_Poly.updateVariables(); return; } @@ -1192,13 +1212,13 @@ void CVASTXperience::parameterChanged(const String& parameterID, float newValue) } if (0 == parameterID.compare("m_uVCAEnvMode")) { - if (!l_isBlocked) + if (!l_isBlocked && !l_isInitDefaults) m_Poly.updateVariables(); return; } if (0 == parameterID.compare("m_uVCFEnvMode")) { - if (!l_isBlocked) + if (!l_isBlocked && !l_isInitDefaults) m_Poly.updateVariables(); return; } @@ -1254,12 +1274,14 @@ void CVASTXperience::parameterChanged(const String& parameterID, float newValue) //ARP if (0 == parameterID.compare("m_bARPOnOff")) { - m_Poly.initArp(); + if (!l_isInitDefaults) + m_Poly.initArp(); return; } if (0 == parameterID.compare("m_bARPOnOff")) { - m_Poly.initArp(); + if (!l_isInitDefaults) + m_Poly.initArp(); return; } @@ -1272,8 +1294,9 @@ void CVASTXperience::parameterChanged(const String& parameterID, float newValue) if (true == parameterID.startsWith("m_uModMatSrce")) { //starts with! int slot = String(parameterID.removeCharacters("m_uModMatSrce")).getIntValue() - 1; int oldVal = m_Set.modMatrixSlotDest[slot]; - m_Set.modMatrixCalcBuffers(); - int newVal = m_Set.modMatrixSlotDest[slot]; + if (!l_isInitDefaults) + m_Set.modMatrixCalcBuffers(); + int newVal = m_Set.modMatrixSlotDest[slot]; myProcessor->requestUIUpdate(false, false, true, oldVal, newVal); //only particular sliders shall be updated return; } @@ -1281,7 +1304,8 @@ void CVASTXperience::parameterChanged(const String& parameterID, float newValue) if (true == parameterID.startsWith("m_uModMatDest")) { //starts with! int slot = String(parameterID.removeCharacters("m_uModMatDest")).getIntValue() - 1; int oldVal = m_Set.modMatrixSlotDest[slot]; - m_Set.modMatrixCalcBuffers(); + if (!l_isInitDefaults) + m_Set.modMatrixCalcBuffers(); int newVal = m_Set.modMatrixSlotDest[slot]; myProcessor->requestUIUpdate(false, false, true, oldVal, newVal); //only particular sliders shall be updated return; @@ -1290,7 +1314,8 @@ void CVASTXperience::parameterChanged(const String& parameterID, float newValue) if (true == parameterID.startsWith("m_fModMatVal")) { //starts with! int slot = String(parameterID.removeCharacters("m_fModMatVal")).getIntValue() - 1; int oldVal = m_Set.modMatrixSlotDest[slot]; - m_Set.modMatrixCalcBuffers(); + if (!l_isInitDefaults) + m_Set.modMatrixCalcBuffers(); int newVal = m_Set.modMatrixSlotDest[slot]; myProcessor->requestUIUpdate(false, true, true, oldVal, newVal); //only particular sliders shall be updated return; @@ -1304,7 +1329,8 @@ void CVASTXperience::parameterChanged(const String& parameterID, float newValue) if (true == parameterID.startsWith("m_uModMatPolarity")) { //starts with! int slot = String(parameterID.removeCharacters("m_uModMatPolarity")).getIntValue() - 1; int oldVal = m_Set.modMatrixSlotDest[slot]; - m_Set.modMatrixCalcBuffers(); + if (!l_isInitDefaults) + m_Set.modMatrixCalcBuffers(); int newVal = m_Set.modMatrixSlotDest[slot]; myProcessor->requestUIUpdate(false, true, true, oldVal, newVal); //only particular sliders shall be updated return; diff --git a/VASTvaporizer/Source/Engine/VASTXperience.h b/VASTvaporizer/Source/Engine/VASTXperience.h index 5141fa6..2f660a5 100644 --- a/VASTvaporizer/Source/Engine/VASTXperience.h +++ b/VASTvaporizer/Source/Engine/VASTXperience.h @@ -53,6 +53,9 @@ class CVASTXperience : public CVASTEffect void setStateInformation(const void*, int) override {}; void updateTiming() override {}; void parameterChanged(const String&, float) override; + void parameterUpdatesAfterInit(); + void setIsInitDefaults(bool defaults); + bool getIsInitDefaults(); CVASTSettings m_Set; VASTAudioProcessor* myProcessor; @@ -114,6 +117,7 @@ class CVASTXperience : public CVASTEffect private: std::atomic m_midiBank = 0; CriticalSection paramChangeLock; + std::atomic m_isInitDefaults = false; JUCE_HEAVYWEIGHT_LEAK_DETECTOR(CVASTXperience) //JUCE_LEAK_DETECTOR(CVASTXperience) diff --git a/VASTvaporizer/Source/Plugin/VASTArpComponent.cpp b/VASTvaporizer/Source/Plugin/VASTArpComponent.cpp index 4df55f0..d2b1787 100644 --- a/VASTvaporizer/Source/Plugin/VASTArpComponent.cpp +++ b/VASTvaporizer/Source/Plugin/VASTArpComponent.cpp @@ -7,7 +7,7 @@ the "//[xyz]" and "//[/xyz]" sections will be retained when the file is loaded and re-saved. - Created with Projucer version: 6.1.2 + Created with Projucer version: 7.0.9 ------------------------------------------------------------------------------ @@ -46,14 +46,15 @@ VASTArpComponent::VASTArpComponent (AudioProcessorEditor *editor, AudioProcessor //[Constructor_pre] You can add your own custom stuff here.. //[/Constructor_pre] - c_stepseqTab.reset (new VASTTabbedSTEPSEQComponent (myProcessor, juce::TabbedButtonBar::TabsAtTop)); + c_stepseqTab.reset (new VASTTabbedSTEPSEQComponent (myProcessor, + myEditor, juce::TabbedButtonBar::TabsAtTop)); addAndMakeVisible (c_stepseqTab.get()); c_stepseqTab->setName ("c_stepseqTab"); c_arpTab.reset (new juce::TabbedComponent (juce::TabbedButtonBar::TabsAtTop)); addAndMakeVisible (c_arpTab.get()); c_arpTab->setTabBarDepth (30); - c_arpTab->addTab (TRANS("ARP"), juce::Colour (0xff002a32), new VASTARPEditorPane (myEditor, myProcessor, &myProcessor->m_pVASTXperience.m_Set.m_ARPData_changed, &myProcessor->m_pVASTXperience.m_Set.m_ARPData), true); + c_arpTab->addTab (TRANS ("ARP"), juce::Colour (0xff002a32), new VASTARPEditorPane (myEditor, myProcessor, &myProcessor->m_pVASTXperience.m_Set.m_ARPData_changed, &myProcessor->m_pVASTXperience.m_Set.m_ARPData), true); c_arpTab->setCurrentTabIndex (0); c_iconMaximizeEditor.reset (new VASTDrawableButton ("c_iconMaximize", arrow_right_corner_svg, arrow_right_corner_svgSize, "Maximize area")); @@ -63,9 +64,9 @@ VASTArpComponent::VASTArpComponent (AudioProcessorEditor *editor, AudioProcessor //[UserPreSize] c_stepseqTab->setTabBarDepth(30); - c_stepseqTab->addTab(TRANS("STEPSEQ1"), juce::Colour(0x90bc6445), new VASTStepSeqEditorPane(myEditor, myProcessor, &myProcessor->m_pVASTXperience.m_Set.m_StepSeqData_changed[0], &myProcessor->m_pVASTXperience.m_Set.m_StepSeqData[0], "STEPSEQ1"), true); - c_stepseqTab->addTab(TRANS("STEPSEQ2"), juce::Colour(0x80bc6445), new VASTStepSeqEditorPane(myEditor, myProcessor, &myProcessor->m_pVASTXperience.m_Set.m_StepSeqData_changed[1], &myProcessor->m_pVASTXperience.m_Set.m_StepSeqData[1], "STEPSEQ2"), true); - c_stepseqTab->addTab(TRANS("STEPSEQ3"), juce::Colour(0x70bc6445), new VASTStepSeqEditorPane(myEditor, myProcessor, &myProcessor->m_pVASTXperience.m_Set.m_StepSeqData_changed[2], &myProcessor->m_pVASTXperience.m_Set.m_StepSeqData[2], "STEPSEQ3"), true); + c_stepseqTab->addTab(TRANS("STEPSEQ1"), juce::Colour(0x90bc6445), new VASTStepSeqEditorPane(myEditor, myProcessor, &myProcessor->m_pVASTXperience.m_Set.m_StepSeqData_changed[0], &myProcessor->m_pVASTXperience.m_Set.m_StepSeqData[0], "STEPSEQ1", 0), true); + c_stepseqTab->addTab(TRANS("STEPSEQ2"), juce::Colour(0x80bc6445), new VASTStepSeqEditorPane(myEditor, myProcessor, &myProcessor->m_pVASTXperience.m_Set.m_StepSeqData_changed[1], &myProcessor->m_pVASTXperience.m_Set.m_StepSeqData[1], "STEPSEQ2", 1), true); + c_stepseqTab->addTab(TRANS("STEPSEQ3"), juce::Colour(0x70bc6445), new VASTStepSeqEditorPane(myEditor, myProcessor, &myProcessor->m_pVASTXperience.m_Set.m_StepSeqData_changed[2], &myProcessor->m_pVASTXperience.m_Set.m_StepSeqData[2], "STEPSEQ3", 2), true); c_stepseqTab->setCurrentTabIndex(0); //manage parameter bindings -> set ComponentID = Name and processor @@ -75,17 +76,17 @@ VASTArpComponent::VASTArpComponent (AudioProcessorEditor *editor, AudioProcessor auto* aSlider = dynamic_cast (child); if (aSlider != nullptr) { aSlider->setAudioProcessor(*myProcessor); - aSlider->bindParameter(aSlider->getName()); + aSlider->bindParameter(myEditor, aSlider->getName(), VASTGUIRuntimeModel::GUIComponents::ARPComponent, 0); } auto* aCombobox = dynamic_cast (child); if (aCombobox != nullptr) { aCombobox->setAudioProcessor(*myProcessor); - aCombobox->bindParameter(aCombobox->getName()); + aCombobox->bindParameter(myEditor, aCombobox->getName(), VASTGUIRuntimeModel::GUIComponents::ARPComponent, 0); } auto* aButton = dynamic_cast (child); if (aButton != nullptr) { aButton->setAudioProcessor(*myProcessor); - aButton->bindParameter(aButton->getName()); + aButton->bindParameter(myEditor, aButton->getName(), VASTGUIRuntimeModel::GUIComponents::ARPComponent, 0); } } } @@ -99,7 +100,7 @@ VASTArpComponent::VASTArpComponent (AudioProcessorEditor *editor, AudioProcessor c_arpTab->setOutline(0); lastMouseWheelEvent = juce::Time::getCurrentTime(); setOpaque(true); - + return; //dont call setSize //[/UserPreSize] @@ -293,7 +294,7 @@ BEGIN_JUCER_METADATA + pos="0% 0% 100% 49.913%" class="VASTTabbedSTEPSEQComponent" params="myProcessor, myEditor, juce::TabbedButtonBar::TabsAtTop"/> diff --git a/VASTvaporizer/Source/Plugin/VASTArpComponent.h b/VASTvaporizer/Source/Plugin/VASTArpComponent.h index d1ebf9d..63c1d41 100644 --- a/VASTvaporizer/Source/Plugin/VASTArpComponent.h +++ b/VASTvaporizer/Source/Plugin/VASTArpComponent.h @@ -7,7 +7,7 @@ the "//[xyz]" and "//[/xyz]" sections will be retained when the file is loaded and re-saved. - Created with Projucer version: 6.1.2 + Created with Projucer version: 7.0.9 ------------------------------------------------------------------------------ @@ -35,7 +35,8 @@ class VASTTabbedSTEPSEQComponent : public TabbedComponent public: std::function TabChangedFunc; VASTAudioProcessor* myProcessor = nullptr; - VASTTabbedSTEPSEQComponent(VASTAudioProcessor* processor, TabbedButtonBar::Orientation orientation) : TabbedComponent(orientation), myProcessor(processor) { + VASTAudioProcessorEditor* myEditor = nullptr; + VASTTabbedSTEPSEQComponent(VASTAudioProcessor* processor, VASTAudioProcessorEditor* editor, TabbedButtonBar::Orientation orientation) : TabbedComponent(orientation), myProcessor(processor), myEditor(editor) { TabChangedFunc = [](int) {}; } void currentTabChanged(int index, const String&) override @@ -47,7 +48,7 @@ class VASTTabbedSTEPSEQComponent : public TabbedComponent if (tab2 != nullptr) tab2->stopAutoUpdate(); VASTStepSeqEditorPane* tab3 = dynamic_cast(getTabContentComponent(2)); - if (tab3 != nullptr) + if (tab3 != nullptr) tab3->stopAutoUpdate(); switch (index) { @@ -67,8 +68,8 @@ class VASTTabbedSTEPSEQComponent : public TabbedComponent TabChangedFunc(index); } - TabBarButton* createTabButton(const String &tabName, int) override { - return new VASTDnDTabBarButton(myProcessor, tabName, getTabbedButtonBar()); + TabBarButton* createTabButton(const String &tabName, int tabIndex) override { + return new VASTDnDTabBarButton(myProcessor, myEditor, tabName, getTabbedButtonBar(), tabIndex, this); } }; //[/Headers] @@ -100,6 +101,7 @@ class VASTArpComponent : public Component, void stopAutoUpdate(); void buttonClicked(Button* buttonThatWasClicked) override; void mouseWheelMove(const MouseEvent &event, const MouseWheelDetails &wheel) override; + VASTTabbedSTEPSEQComponent* getStepSeqTab() { return c_stepseqTab.get(); }; //[/UserMethods] void paint (juce::Graphics& g) override; diff --git a/VASTvaporizer/Source/Plugin/VASTAudioProcessor.cpp b/VASTvaporizer/Source/Plugin/VASTAudioProcessor.cpp index 65a4316..bd021e1 100644 --- a/VASTvaporizer/Source/Plugin/VASTAudioProcessor.cpp +++ b/VASTvaporizer/Source/Plugin/VASTAudioProcessor.cpp @@ -351,11 +351,14 @@ void VASTAudioProcessor::initializeToDefaults() { //int numparam = getNumParameters(); //deprecated int numparam = getParameters().size(); + m_pVASTXperience.setIsInitDefaults(true); for (int parameterIndex = 0; parameterIndex < numparam; parameterIndex++) { auto* param = getParameters()[parameterIndex]; float defVal = param->getDefaultValue(); param->setValueNotifyingHost(defVal); } + m_pVASTXperience.setIsInitDefaults(false); + m_pVASTXperience.parameterUpdatesAfterInit(); //reset wts and wav here for (int bank = 0; bank < 4; bank++) { @@ -520,11 +523,17 @@ void VASTAudioProcessor::initializeToDefaults() { m_pVASTXperience.m_fxBus1.initSequence(); m_pVASTXperience.m_fxBus2.initSequence(); m_pVASTXperience.m_fxBus3.initSequence(); - + //m_parameterState.undoManager->clearUndoHistory(); //TODO: there is a sporadic segfault here! m_parameterState.undoManager->beginNewTransaction(); //start new transcation only here? } +void VASTAudioProcessor::loadPresetFile(File presetvvpfile) { + VASTPresetElement lPreset{}; + std::unique_ptr xml(new XmlDocument(presetvvpfile)); + bool success = loadPatchXML(xml.get(), false, &lPreset, lPreset.presetarrayindex, lPreset); +} + void VASTAudioProcessor::setCurrentProgram(int index) { if (index >= getNumPrograms()) { @@ -1713,16 +1722,14 @@ void VASTAudioProcessor::setMidiKeyboardBaseOctave(int baseOctave) } int VASTAudioProcessor::autoParamGetDestination(String parametername) { - std::unordered_map::iterator it; - it = m_mapParameterNameToModdest.find(parametername); - if (it == m_mapParameterNameToModdest.end()) return -1; + auto it = m_mapParameterNameToModdest.find(parametername); //binary search + if (!it->first.equalsIgnoreCase(parametername)) return -1; return it->second; }; String VASTAudioProcessor::autoDestinationGetParam(int modmatdest) { - std::unordered_multimap::iterator it; - it = m_mapModdestToParameterName.find(modmatdest); - if (it == m_mapModdestToParameterName.end()) return ""; + auto it = m_mapModdestToParameterName.find(modmatdest); //binary search + if (it->first != modmatdest) return ""; return it->second; }; diff --git a/VASTvaporizer/Source/Plugin/VASTAudioProcessor.h b/VASTvaporizer/Source/Plugin/VASTAudioProcessor.h index af18afd..73c0060 100644 --- a/VASTvaporizer/Source/Plugin/VASTAudioProcessor.h +++ b/VASTvaporizer/Source/Plugin/VASTAudioProcessor.h @@ -239,6 +239,7 @@ class VASTAudioProcessor : public AudioProcessor bool isUserPatch(); String getUserPatchName(); void savePatchXML(File *selectedFile); + void loadPresetFile(File presetvvpfile); bool loadPatchXML(XmlDocument* xmlDoc, bool bNameOnly, const VASTPresetElement* preset, int index, VASTPresetElement& resultPresetData); static String getVSTPath(); static String getVSTPathAlternative(); @@ -262,9 +263,8 @@ class VASTAudioProcessor : public AudioProcessor void addModMatrixLookupTable(int modMatrixDestination, float rangeStart, float rangeEnd, float rangeSkew, StringRef paramID, AudioProcessorParameterWithID* param); sModMatrixLookup m_modMatrixLookupTable[M_MODMATRIX_MAX_DESTINATIONS]; - std::unordered_multimap m_mapModdestToParameterName; //fast: hashed //declare before vastxperience - std::unordered_map m_mapParameterNameToModdest; //declare before vastxperience - Array m_mapParameterNameToControl; //declare before vastxperience + std::multimap m_mapModdestToParameterName; //fast: hashed //declare before vastxperience + std::map m_mapParameterNameToModdest; //declare before vastxperience UndoManager m_undoManager {3000, 30}; //declare before parameterState AudioProcessorValueTreeState m_parameterState; //declare before vastxperience diff --git a/VASTvaporizer/Source/Plugin/VASTAudioProcessorEditor.cpp b/VASTvaporizer/Source/Plugin/VASTAudioProcessorEditor.cpp index 8678edc..5846fb0 100644 --- a/VASTvaporizer/Source/Plugin/VASTAudioProcessorEditor.cpp +++ b/VASTvaporizer/Source/Plugin/VASTAudioProcessorEditor.cpp @@ -26,7 +26,6 @@ VASTAudioProcessorEditor::VASTAudioProcessorEditor(VASTAudioProcessor& p) if (m_iMaxHeight > screenH) m_iMaxHeight = screenH; } - myProcessor->m_mapParameterNameToControl.clear(); //clear slider mapping resizeCalledFromConstructor = true; vaporizerComponent.reset(new VASTVaporizerComponent(this, myProcessor)); vaporizerComponent->setVisible(false); @@ -74,7 +73,7 @@ VASTAudioProcessorEditor::~VASTAudioProcessorEditor() { vaporizerComponent = nullptr; } -Component* VASTAudioProcessorEditor::findChildComponetWithName(Component* parent, String compName) +Component* VASTAudioProcessorEditor::findChildComponentWithName(Component* parent, String compName) { Component* retComp = nullptr; for (int i = 0; i < parent->getNumChildComponents(); ++i) @@ -84,7 +83,7 @@ Component* VASTAudioProcessorEditor::findChildComponetWithName(Component* parent return childComp; if (childComp->getNumChildComponents()) { if (retComp == nullptr) - retComp = findChildComponetWithName(childComp, compName); + retComp = findChildComponentWithName(childComp, compName); else return retComp; } @@ -124,7 +123,7 @@ void VASTAudioProcessorEditor::timerCallback(int timerID) { if (timerID == 1) { //component update if (myProcessor->m_bShallComponentValueUpdate.load()) { if (myProcessor->m_shallComponentUpdate != "") { - VASTSlider* lslider = dynamic_cast(findChildComponetWithName(vaporizerComponent.get(), myProcessor->m_shallComponentUpdate)); + VASTSlider* lslider = dynamic_cast(findChildComponentWithName(vaporizerComponent.get(), myProcessor->m_shallComponentUpdate)); if (lslider != nullptr) { if (lslider->getComponentID().equalsIgnoreCase(myProcessor->m_shallComponentUpdate)) { float sVal = lslider->getRange().getStart() + (lslider->getRange().getEnd() - lslider->getRange().getStart()) * jlimit(0.f, 1.f, myProcessor->m_shallComponentUpdateValue); @@ -154,7 +153,9 @@ void VASTAudioProcessorEditor::timerCallback(int timerID) { vaporizerComponent->getOscillatorComponent(3)->initAll(); vaporizerComponent->updateMatrixDisplay(); vaporizerComponent->updateHeader(); + getGUIRuntimeModel()->clearAllHighlights(); myProcessor->clearUIInitFlagAfterPresetLoad(); + myProcessor->requestUIUpdate(true, true, true, -1, -1); } if (myProcessor->needsUIUpdate()) { @@ -165,28 +166,21 @@ void VASTAudioProcessorEditor::timerCallback(int timerID) { vaporizerComponent->updateMatrixDisplay(); if (myProcessor->needsUIUpdate_sliders()) { - if ((myProcessor->needsUIUpdate_slider1dest() == -1) && (myProcessor->needsUIUpdate_slider2dest() == -1)) { //repaint all sliders - for (int i = 0; i < myProcessor->m_mapParameterNameToControl.size(); i++) { - VASTParameterSlider* lslider = dynamic_cast(myProcessor->m_mapParameterNameToControl[i]); - if (lslider != nullptr) { - if (lslider->isShowing()) - lslider->repaint(); - } - } + if ((myProcessor->needsUIUpdate_slider1dest() == -1) && (myProcessor->needsUIUpdate_slider2dest() == -1)) { //repaint all sliders + getGUIRuntimeModel()->repaintAllSliders(); } else { //repaint only the two that are given String param1name = myProcessor->autoDestinationGetParam(myProcessor->needsUIUpdate_slider1dest()); String param2name = myProcessor->autoDestinationGetParam(myProcessor->needsUIUpdate_slider2dest()); - for (int i = 0; i < myProcessor->m_mapParameterNameToControl.size(); i++) { - VASTParameterSlider* lslider = dynamic_cast(myProcessor->m_mapParameterNameToControl[i]); - if (lslider != nullptr) { - if ((lslider->getComponentID().equalsIgnoreCase(param1name)) || (lslider->getComponentID().equalsIgnoreCase(param2name))) { - if (lslider->isShowing()) - lslider->repaint(); - } - } - } + VASTGUIRuntimeModel::sGUIParameterSliders lslider = getGUIRuntimeModel()->getParameterSliderByParameterName(param1name); + if (lslider.slider != nullptr) + if (lslider.slider->isShowing()) + lslider.slider->repaint(); + lslider = getGUIRuntimeModel()->getParameterSliderByParameterName(param2name); + if (lslider.slider != nullptr) + if (lslider.slider->isShowing()) + lslider.slider->repaint(); } } @@ -1097,3 +1091,7 @@ void VASTAudioProcessorEditor::randomizePatch() { vaporizerComponent->getWaveTableEditorComponent()->setOscBank(0); myProcessor->requestUIInitAfterPrestLoad(); } + +VASTGUIRuntimeModel* VASTAudioProcessorEditor::getGUIRuntimeModel() { + return &m_guiRuntimeModel; +} diff --git a/VASTvaporizer/Source/Plugin/VASTAudioProcessorEditor.h b/VASTvaporizer/Source/Plugin/VASTAudioProcessorEditor.h index 2560b77..a9c118e 100644 --- a/VASTvaporizer/Source/Plugin/VASTAudioProcessorEditor.h +++ b/VASTvaporizer/Source/Plugin/VASTAudioProcessorEditor.h @@ -15,6 +15,7 @@ #include "VASTAudioProcessor.h" #include "VASTVaporizerComponent.h" #include "VASTUtils/VASTLookAndFeel.h" +#include "VASTGUIRuntimeModel.h" //============================================================================== /** @@ -50,7 +51,7 @@ class VASTAudioProcessorEditor : public AudioProcessorEditor, MultiTimer void initAllLookAndFeels(); void setActiveLookAndFeel(int no); VASTLookAndFeel* getCurrentVASTLookAndFeel(); - Component* findChildComponetWithName(Component* parent, String compName); + Component* findChildComponentWithName(Component* parent, String compName); class VASTComponentBoundsConstrainer : public ComponentBoundsConstrainer { public: @@ -71,11 +72,13 @@ class VASTAudioProcessorEditor : public AudioProcessorEditor, MultiTimer }; }; + VASTGUIRuntimeModel* getGUIRuntimeModel(); void randomizePatch(); private: VASTAudioProcessor* myProcessor; - + VASTGUIRuntimeModel m_guiRuntimeModel {myProcessor, this}; + TooltipWindow tooltipWindow{ this, 200 }; //just add and leave here std::unique_ptr m_alertWindow; int mi_update_delay = 0; diff --git a/VASTvaporizer/Source/Plugin/VASTControls/VASTDragFX.cpp b/VASTvaporizer/Source/Plugin/VASTControls/VASTDragFX.cpp index 4bb84a4..046d978 100644 --- a/VASTvaporizer/Source/Plugin/VASTControls/VASTDragFX.cpp +++ b/VASTvaporizer/Source/Plugin/VASTControls/VASTDragFX.cpp @@ -53,7 +53,7 @@ VASTDragFX::VASTDragFX(VASTAudioProcessorEditor *editor, VASTAudioProcessor *pro ddToggleButton.reset(new VASTParameterButton(paramID)); ddToggleButton->setAudioProcessor(*my_processor); - ddToggleButton->bindParameter(paramID); + ddToggleButton->bindParameter(editor, paramID, VASTGUIRuntimeModel::GUIComponents::DragFX, myBusnr); ddToggleButton->addListener(this); addAndMakeVisible(ddToggleButton.get()); } diff --git a/VASTvaporizer/Source/Plugin/VASTControls/VASTDragMatrix.cpp b/VASTvaporizer/Source/Plugin/VASTControls/VASTDragMatrix.cpp index 981b997..d8be3c3 100644 --- a/VASTvaporizer/Source/Plugin/VASTControls/VASTDragMatrix.cpp +++ b/VASTvaporizer/Source/Plugin/VASTControls/VASTDragMatrix.cpp @@ -15,11 +15,9 @@ VAST Dynamics #include "VASTDrawableButton.h" #include "../VASTScopeDisplay/VASTModMatCurveDisplay.h" -VASTDragMatrix::VASTDragMatrix(VASTAudioProcessorEditor *editor, VASTAudioProcessor *processor, int slotno) { - my_processor = processor; - my_editor = editor; - my_slotno = slotno; - +VASTDragMatrix::VASTDragMatrix(VASTAudioProcessorEditor *editor, VASTAudioProcessor *processor, int slotno) : + my_processor(processor), my_editor(editor), my_slotno(slotno) +{ //setRepaintsOnMouseActivity(false); //performance //setBufferedToImage(true); //performance @@ -37,28 +35,28 @@ VASTDragMatrix::VASTDragMatrix(VASTAudioProcessorEditor *editor, VASTAudioProces paramID = "m_uModMatSrce" + String(my_slotno + 1); m_uModMatSrce.reset(new VASTParameterComboBox(paramID)); m_uModMatSrce->setAudioProcessor(*my_processor); - m_uModMatSrce->bindParameter(paramID); + m_uModMatSrce->bindParameter(my_editor, paramID, VASTGUIRuntimeModel::GUIComponents::DragMatrix, 0); //m_uModMatSrce->addListener(this); addAndMakeVisible(m_uModMatSrce.get()); paramID = "m_uModMatPolarity" + String(my_slotno + 1); m_uModMatPolarity.reset(new VASTParameterComboBox(paramID)); m_uModMatPolarity->setAudioProcessor(*my_processor); - m_uModMatPolarity->bindParameter(paramID); + m_uModMatPolarity->bindParameter(my_editor, paramID, VASTGUIRuntimeModel::GUIComponents::DragMatrix, 0); //m_uModMatPolarity->addListener(this); addAndMakeVisible(m_uModMatPolarity.get()); paramID = "m_uModMatDest" + String(my_slotno + 1); m_uModMatDest.reset(new VASTParameterComboBox(paramID)); m_uModMatDest->setAudioProcessor(*my_processor); - m_uModMatDest->bindParameter(paramID); + m_uModMatDest->bindParameter(my_editor, paramID, VASTGUIRuntimeModel::GUIComponents::DragMatrix, 0); //m_uModMatDest->addListener(this); addAndMakeVisible(m_uModMatDest.get()); paramID = "m_fModMatVal" + String(my_slotno + 1); m_fModMatVal.reset(new VASTParameterSlider(paramID)); m_fModMatVal->setAudioProcessor(*my_processor); - m_fModMatVal->bindParameter(paramID); + m_fModMatVal->bindParameter(my_editor, paramID, VASTGUIRuntimeModel::GUIComponents::DragMatrix, 0); m_fModMatVal->setSliderStyle(Slider::RotaryVerticalDrag); m_fModMatVal->setTextBoxStyle(Slider::NoTextBox, false, 40, 16); //m_fModMatVal->addListener(this); @@ -67,7 +65,7 @@ VASTDragMatrix::VASTDragMatrix(VASTAudioProcessorEditor *editor, VASTAudioProces paramID = "m_fModMatCurve" + String(my_slotno + 1); m_fModMatCurve.reset(new VASTParameterSlider(paramID)); m_fModMatCurve->setAudioProcessor(*my_processor); - m_fModMatCurve->bindParameter(paramID); + m_fModMatCurve->bindParameter(my_editor, paramID, VASTGUIRuntimeModel::GUIComponents::DragMatrix, 0); m_fModMatCurve->setSliderStyle(Slider::RotaryVerticalDrag); m_fModMatCurve->setTextBoxStyle(Slider::NoTextBox, false, 40, 16); //m_fModMatCurve->addListener(this); diff --git a/VASTvaporizer/Source/Plugin/VASTControls/VASTDragSource.cpp b/VASTvaporizer/Source/Plugin/VASTControls/VASTDragSource.cpp index 24ae988..7327854 100644 --- a/VASTvaporizer/Source/Plugin/VASTControls/VASTDragSource.cpp +++ b/VASTvaporizer/Source/Plugin/VASTControls/VASTDragSource.cpp @@ -6,7 +6,7 @@ VAST Dynamics #include "VASTDragSource.h" #include "../VASTAudioProcessorEditor.h" -VASTDragSource::VASTDragSource(const juce::String &componentName, const juce::String &dragText) { +VASTDragSource::VASTDragSource(int modSource, const juce::String &componentName, const juce::String &dragText, const juce::String &tooltipText) : m_toolTipText(tooltipText), m_modSource(modSource){ this->setName(componentName); this->setComponentID(componentName); @@ -25,7 +25,7 @@ VASTDragSource::VASTDragSource(const juce::String &componentName, const juce::St addAndMakeVisible(ddImageButton.get()); ddImageButton->setImages(false, true, true, ImageCache::getFromMemory(VASTHeaderComponent::dragdrop_png, VASTHeaderComponent::dragdrop_pngSize), 1.000f, Colour(0x451c6d2f), - ImageCache::getFromMemory(VASTHeaderComponent::dragdrop_over_png, VASTHeaderComponent::dragdrop_over_pngSize), 1.000f, Colour(0x00000000), + ImageCache::getFromMemory(VASTHeaderComponent::dragdrop_over_png, VASTHeaderComponent::dragdrop_over_pngSize), 1.000f, Colour(0x00ff0000), ImageCache::getFromMemory(VASTHeaderComponent::dragdrop_png, VASTHeaderComponent::dragdrop_pngSize), 1.000f, Colour(0x00000000)); ddLabel.reset(new Label("new label", newtext)); @@ -37,9 +37,15 @@ VASTDragSource::VASTDragSource(const juce::String &componentName, const juce::St ddLabel->setColour(TextEditor::textColourId, Colours::black); ddLabel->setColour(TextEditor::backgroundColourId, Colour(0x00000000)); ddLabel->addListener(this); + this->addMouseListener(this, true); + + ddLabel->setTooltip(m_toolTipText); + ddImageButton->setTooltip(m_toolTipText); if (componentName.startsWithIgnoreCase("c_dd_CustomModulator")) ddLabel->setEditable(true); + clearHighlighted(); m_processor = NULL; + m_editor = NULL; } void VASTDragSource::resized() { @@ -60,19 +66,36 @@ void VASTDragSource::lookAndFeelChanged() { return; ddImageButton->setImages(false, true, true, ImageCache::getFromMemory(VASTHeaderComponent::dragdrop_png, VASTHeaderComponent::dragdrop_pngSize), 1.000f, c1, - ImageCache::getFromMemory(VASTHeaderComponent::dragdrop_over_png, VASTHeaderComponent::dragdrop_over_pngSize), 1.000f, c1.contrasting(0.3f), + ImageCache::getFromMemory(VASTHeaderComponent::dragdrop_over_png, VASTHeaderComponent::dragdrop_over_pngSize), 1.000f, + c1.contrasting(0.3f), ImageCache::getFromMemory(VASTHeaderComponent::dragdrop_png, VASTHeaderComponent::dragdrop_pngSize), 1.000f, c1.contrasting(0.5f)); m_bufferc1 = c1; } +void VASTDragSource::setHighlighted() { + m_isHighlighted = true; +} + +void VASTDragSource::clearHighlighted() { + m_isHighlighted = false; +} + void VASTDragSource::paint(Graphics& g) { - if (m_processor == nullptr) return; - if (m_noLabel) return; - Colour c1 = m_processor->getCurrentVASTLookAndFeel()->findVASTColour(colOscillatorComponentHeaderGradientFrom); - Colour c2 = m_processor->getCurrentVASTLookAndFeel()->findVASTColour(colOscillatorComponentHeaderGradientTo); - Colour c3 = Colour(0xff4e575c); //TODO - g.setGradientFill(ColourGradient(c1, + if (m_processor == nullptr) return; + if (m_noLabel) return; + + Colour c1 = m_processor->getCurrentVASTLookAndFeel()->findVASTColour(colOscillatorComponentHeaderGradientFrom); + Colour c2 = m_processor->getCurrentVASTLookAndFeel()->findVASTColour(colOscillatorComponentHeaderGradientTo); + Colour c3 = Colour(0xff4e575c); //TODO + + if (m_isHighlighted) { + c1 = m_processor->getCurrentVASTLookAndFeel()->findVASTColour(colParameterBindingHighlight); + c2 = c1; + c3 = c1; + } + + g.setGradientFill(ColourGradient(c1, proportionOfWidth(0), proportionOfHeight(0), c2, @@ -101,9 +124,11 @@ VASTDragSource::~VASTDragSource() { ddLabel = nullptr; } -void VASTDragSource::setAudioProcessor(VASTAudioProcessor &processor) { +void VASTDragSource::setAudioProcessor(VASTAudioProcessor &processor, VASTAudioProcessorEditor &editor) { m_processor = &processor; + m_editor = &editor; ddImageButton->setAudioProcessor(processor); + m_editor->getGUIRuntimeModel()->registerDragSource(this, m_modSource); } VASTAudioProcessor* VASTDragSource::getAudioProcessor() { @@ -140,3 +165,144 @@ void VASTDragSource::setLabelDefaultText(String defaultText) ddLabel->setText(defaultText, NotificationType::sendNotificationSync); ddLabel->showEditor(); } + +void VASTDragSource::mouseEnter(const MouseEvent &e) +{ + if ((m_processor==nullptr) || (m_editor == nullptr)) return; + for (int slot = 0; slotm_pVASTXperience.m_Set.modMatrixSlotGetValues(slot, l_value, l_curvy, l_srce, l_dest, polarity, lastSrceVals); + if (l_srce == m_modSource) { + String l_paramName = m_processor->autoDestinationGetParam(l_dest); + VASTGUIRuntimeModel::sGUIParameterSliders lslider = m_editor->getGUIRuntimeModel()->getParameterSliderByParameterName(l_paramName); + if (lslider.slider != nullptr) { + if (lslider.slider->isShowing()) { + lslider.slider->setHighlighted(); + lslider.slider->repaint(); + } + } + switch (lslider.guiComponent ) { + case VASTGUIRuntimeModel::GUIComponents::WavetableEditorView: + case VASTGUIRuntimeModel::GUIComponents::WavetableEditorComponent: + case VASTGUIRuntimeModel::GUIComponents::WavetableEditorViewHeader: + case VASTGUIRuntimeModel::GUIComponents::SamplerEditorComponent: + case VASTGUIRuntimeModel::GUIComponents::SamplerEditorComponentHeader: + m_editor->vaporizerComponent->getTabbedComponent()->setTabBackgroundColour(VASTTabbedComponent::TabSequence::WTEDITOR, m_editor->getCurrentVASTLookAndFeel()->findVASTColour(colParameterBindingHighlight)); + break; + case VASTGUIRuntimeModel::GUIComponents::FilterComponent: + m_editor->vaporizerComponent->getTabbedComponent()->setTabBackgroundColour(VASTTabbedComponent::TabSequence::FILTER, m_editor->getCurrentVASTLookAndFeel()->findVASTColour(colParameterBindingHighlight)); + break; + case VASTGUIRuntimeModel::GUIComponents::MSEGEditorPane: + { + VASTLFOMsegComponent* tab3 = dynamic_cast(m_editor->vaporizerComponent->getTabbedComponent()->getTabContentComponent(VASTTabbedComponent::TabSequence::LFOMSEG)); + if (tab3 != nullptr) + tab3->getEnvTab()->setTabBackgroundColour(lslider.tabNo, m_editor->getCurrentVASTLookAndFeel()->findVASTColour(colParameterBindingHighlight)); + } + m_editor->vaporizerComponent->getTabbedComponent()->setTabBackgroundColour(VASTTabbedComponent::TabSequence::LFOMSEG, m_editor->getCurrentVASTLookAndFeel()->findVASTColour(colParameterBindingHighlight)); + break; + case VASTGUIRuntimeModel::GUIComponents::LFOEditorPane: + { + VASTLFOMsegComponent* tab3 = dynamic_cast(m_editor->vaporizerComponent->getTabbedComponent()->getTabContentComponent(VASTTabbedComponent::TabSequence::LFOMSEG)); + if (tab3 != nullptr) + tab3->getLFOTab()->setTabBackgroundColour(lslider.tabNo, m_editor->getCurrentVASTLookAndFeel()->findVASTColour(colParameterBindingHighlight)); + } + m_editor->vaporizerComponent->getTabbedComponent()->setTabBackgroundColour(VASTTabbedComponent::TabSequence::LFOMSEG, m_editor->getCurrentVASTLookAndFeel()->findVASTColour(colParameterBindingHighlight)); + break; + case VASTGUIRuntimeModel::GUIComponents::MatrixComponent: + case VASTGUIRuntimeModel::GUIComponents::DragMatrix: + m_editor->vaporizerComponent->getTabbedComponent()->setTabBackgroundColour(VASTTabbedComponent::TabSequence::MATRIX, m_editor->getCurrentVASTLookAndFeel()->findVASTColour(colParameterBindingHighlight)); + break; + case VASTGUIRuntimeModel::GUIComponents::FXComponent: + case VASTGUIRuntimeModel::GUIComponents::DragFX: + case VASTGUIRuntimeModel::GUIComponents::GenericEditor: + { + VASTFXComponent* tab5 = dynamic_cast(m_editor->vaporizerComponent->getTabbedComponent()->getTabContentComponent(VASTTabbedComponent::TabSequence::FX)); + if (tab5 != nullptr) + tab5->getFXBusTab()->setTabBackgroundColour(lslider.tabNo, m_editor->getCurrentVASTLookAndFeel()->findVASTColour(colParameterBindingHighlight)); + } + case VASTGUIRuntimeModel::GUIComponents::FXSelectionPane: + m_editor->vaporizerComponent->getTabbedComponent()->setTabBackgroundColour(VASTTabbedComponent::TabSequence::FX, m_editor->getCurrentVASTLookAndFeel()->findVASTColour(colParameterBindingHighlight)); + break; + case VASTGUIRuntimeModel::GUIComponents::StepSeqEditorPane: + { + VASTArpComponent* tab6 = dynamic_cast(m_editor->vaporizerComponent->getTabbedComponent()->getTabContentComponent(VASTTabbedComponent::TabSequence::ARP)); + if (tab6 != nullptr) + tab6->getStepSeqTab()->setTabBackgroundColour(lslider.tabNo, m_editor->getCurrentVASTLookAndFeel()->findVASTColour(colParameterBindingHighlight)); + } + case VASTGUIRuntimeModel::GUIComponents::ARPComponent: + case VASTGUIRuntimeModel::GUIComponents::ARPEditorPane: + m_editor->vaporizerComponent->getTabbedComponent()->setTabBackgroundColour(VASTTabbedComponent::TabSequence::ARP, m_editor->getCurrentVASTLookAndFeel()->findVASTColour(colParameterBindingHighlight)); + break; + default: + break; + } + } + } +} + +void VASTDragSource::mouseExit(const MouseEvent &e) { + for (int slot = 0; slotm_pVASTXperience.m_Set.modMatrixSlotGetValues(slot, l_value, l_curvy, l_srce, l_dest, polarity, lastSrceVals); + if (l_srce == m_modSource) { + String l_paramName = m_processor->autoDestinationGetParam(l_dest); + VASTGUIRuntimeModel::sGUIParameterSliders lslider = m_editor->getGUIRuntimeModel()->getParameterSliderByParameterName(l_paramName); + if (lslider.slider != nullptr) { + if (lslider.slider->isShowing()) { + lslider.slider->clearHighlighted(); + lslider.slider->repaint(); + } + } + m_editor->vaporizerComponent->getTabbedComponent()->setTabBackgroundColour(VASTTabbedComponent::TabSequence::WTEDITOR, m_editor->getCurrentVASTLookAndFeel()->findVASTColour(colVaporizerComponentTabBarWTEDitorBackground)); + m_editor->vaporizerComponent->getTabbedComponent()->setTabBackgroundColour(VASTTabbedComponent::TabSequence::FILTER, m_editor->getCurrentVASTLookAndFeel()->findVASTColour(colVaporizerComponentTabBarFilterBackground)); + m_editor->vaporizerComponent->getTabbedComponent()->setTabBackgroundColour(VASTTabbedComponent::TabSequence::LFOMSEG, m_editor->getCurrentVASTLookAndFeel()->findVASTColour(colVaporizerComponentTabBarLFOMSEGBackground)); + m_editor->vaporizerComponent->getTabbedComponent()->setTabBackgroundColour(VASTTabbedComponent::TabSequence::MATRIX, m_editor->getCurrentVASTLookAndFeel()->findVASTColour(colVaporizerComponentTabBarMatrixBackground)); + m_editor->vaporizerComponent->getTabbedComponent()->setTabBackgroundColour(VASTTabbedComponent::TabSequence::FX, m_editor->getCurrentVASTLookAndFeel()->findVASTColour(colVaporizerComponentTabBarFXBackground)); + m_editor->vaporizerComponent->getTabbedComponent()->setTabBackgroundColour(VASTTabbedComponent::TabSequence::ARP, m_editor->getCurrentVASTLookAndFeel()->findVASTColour(colVaporizerComponentTabBarARPBackground)); + m_editor->vaporizerComponent->getTabbedComponent()->setTabBackgroundColour(VASTTabbedComponent::TabSequence::PRESET, m_editor->getCurrentVASTLookAndFeel()->findVASTColour(colVaporizerComponentTabBarPresetBackground)); + + VASTLFOMsegComponent* tab3 = dynamic_cast(m_editor->vaporizerComponent->getTabbedComponent()->getTabContentComponent(VASTTabbedComponent::TabSequence::LFOMSEG)); + if (tab3 != nullptr) { + tab3->getEnvTab()->setTabBackgroundColour(0, m_editor->getCurrentVASTLookAndFeel()->findVASTColour(colLFOMsegComponentTabBarMSEG1)); + tab3->getEnvTab()->setTabBackgroundColour(1, m_editor->getCurrentVASTLookAndFeel()->findVASTColour(colLFOMsegComponentTabBarMSEG2)); + tab3->getEnvTab()->setTabBackgroundColour(2, m_editor->getCurrentVASTLookAndFeel()->findVASTColour(colLFOMsegComponentTabBarMSEG3)); + tab3->getEnvTab()->setTabBackgroundColour(3, m_editor->getCurrentVASTLookAndFeel()->findVASTColour(colLFOMsegComponentTabBarMSEG4)); + tab3->getEnvTab()->setTabBackgroundColour(4, m_editor->getCurrentVASTLookAndFeel()->findVASTColour(colLFOMsegComponentTabBarMSEG5)); + tab3->getLFOTab()->setTabBackgroundColour(0, m_editor->getCurrentVASTLookAndFeel()->findVASTColour(colLFOMsegComponentTabBarLFO1)); + tab3->getLFOTab()->setTabBackgroundColour(1, m_editor->getCurrentVASTLookAndFeel()->findVASTColour(colLFOMsegComponentTabBarLFO2)); + tab3->getLFOTab()->setTabBackgroundColour(2, m_editor->getCurrentVASTLookAndFeel()->findVASTColour(colLFOMsegComponentTabBarLFO3)); + tab3->getLFOTab()->setTabBackgroundColour(3, m_editor->getCurrentVASTLookAndFeel()->findVASTColour(colLFOMsegComponentTabBarLFO4)); + tab3->getLFOTab()->setTabBackgroundColour(4, m_editor->getCurrentVASTLookAndFeel()->findVASTColour(colLFOMsegComponentTabBarLFO5)); + } + + VASTFXComponent* tab5 = dynamic_cast(m_editor->vaporizerComponent->getTabbedComponent()->getTabContentComponent(VASTTabbedComponent::TabSequence::FX)); + if (tab5 != nullptr) { + tab5->getFXBusTab()->setTabBackgroundColour(0, m_editor->getCurrentVASTLookAndFeel()->findVASTColour(colFXComponentTabBarFXBUS1)); + tab5->getFXBusTab()->setTabBackgroundColour(1, m_editor->getCurrentVASTLookAndFeel()->findVASTColour(colFXComponentTabBarFXBUS2)); + tab5->getFXBusTab()->setTabBackgroundColour(2, m_editor->getCurrentVASTLookAndFeel()->findVASTColour(colFXComponentTabBarFXBUS3)); + } + + VASTArpComponent* tab6 = dynamic_cast(m_editor->vaporizerComponent->getTabbedComponent()->getTabContentComponent(VASTTabbedComponent::TabSequence::ARP)); + if (tab6 != nullptr){ + tab6->getStepSeqTab()->setTabBackgroundColour(0, m_editor->getCurrentVASTLookAndFeel()->findVASTColour(colArpComponentTabBarSTEPSEQ1)); + tab6->getStepSeqTab()->setTabBackgroundColour(1, m_editor->getCurrentVASTLookAndFeel()->findVASTColour(colArpComponentTabBarSTEPSEQ2)); + + tab6->getStepSeqTab()->setTabBackgroundColour(2, m_editor->getCurrentVASTLookAndFeel()->findVASTColour(colArpComponentTabBarSTEPSEQ3)); + } + } + } +} + +int VASTDragSource::getModSource() { + return m_modSource; +} diff --git a/VASTvaporizer/Source/Plugin/VASTControls/VASTDragSource.h b/VASTvaporizer/Source/Plugin/VASTControls/VASTDragSource.h index ab7dfd1..b1c3969 100644 --- a/VASTvaporizer/Source/Plugin/VASTControls/VASTDragSource.h +++ b/VASTvaporizer/Source/Plugin/VASTControls/VASTDragSource.h @@ -13,26 +13,35 @@ class VASTDragSource : public GroupComponent, Label::Listener { public: - VASTDragSource(const juce::String &componentName, const juce::String &dragText); + VASTDragSource(int modSource, const juce::String &componentName, const juce::String &dragText, const juce::String &tooltipText); ~VASTDragSource(); void resized() override; void paint(Graphics& g) override; - void setAudioProcessor(VASTAudioProcessor &processor); + void setAudioProcessor(VASTAudioProcessor &processor, VASTAudioProcessorEditor &editor); VASTAudioProcessor* getAudioProcessor(); void setModString(const juce::String& dragText); void lookAndFeelChanged() override; void editorShown(Label *, TextEditor &) override; void labelTextChanged(Label* labelThatHasChanged) override; void setLabelDefaultText(String defaultText); - + void setHighlighted(); + void clearHighlighted(); + int getModSource(); + private: + void mouseEnter(const MouseEvent &e) override; + void mouseExit(const MouseEvent &e) override; std::unique_ptr ddImageButton; std::unique_ptr