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