successfully save/load ui width/height
This commit is contained in:
parent
a990072f1f
commit
374394330f
|
@ -0,0 +1,84 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<Scheme
|
||||||
|
LastUpgradeVersion = "1020"
|
||||||
|
version = "1.3">
|
||||||
|
<BuildAction
|
||||||
|
parallelizeBuildables = "YES"
|
||||||
|
buildImplicitDependencies = "YES">
|
||||||
|
<BuildActionEntries>
|
||||||
|
<BuildActionEntry
|
||||||
|
buildForTesting = "YES"
|
||||||
|
buildForRunning = "YES"
|
||||||
|
buildForProfiling = "YES"
|
||||||
|
buildForArchiving = "YES"
|
||||||
|
buildForAnalyzing = "YES">
|
||||||
|
<BuildableReference
|
||||||
|
BuildableIdentifier = "primary"
|
||||||
|
BlueprintIdentifier = "345302E3C02BBFCDACE98BE7"
|
||||||
|
BuildableName = "juicysfplugin.component"
|
||||||
|
BlueprintName = "juicysfplugin - AU"
|
||||||
|
ReferencedContainer = "container:juicysfplugin.xcodeproj">
|
||||||
|
</BuildableReference>
|
||||||
|
</BuildActionEntry>
|
||||||
|
</BuildActionEntries>
|
||||||
|
</BuildAction>
|
||||||
|
<TestAction
|
||||||
|
buildConfiguration = "Debug"
|
||||||
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||||
|
shouldUseLaunchSchemeArgsEnv = "YES">
|
||||||
|
<Testables>
|
||||||
|
</Testables>
|
||||||
|
<AdditionalOptions>
|
||||||
|
</AdditionalOptions>
|
||||||
|
</TestAction>
|
||||||
|
<LaunchAction
|
||||||
|
buildConfiguration = "Debug"
|
||||||
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||||
|
launchStyle = "0"
|
||||||
|
useCustomWorkingDirectory = "NO"
|
||||||
|
ignoresPersistentStateOnLaunch = "NO"
|
||||||
|
debugDocumentVersioning = "YES"
|
||||||
|
debugServiceExtension = "internal"
|
||||||
|
allowLocationSimulation = "YES">
|
||||||
|
<PathRunnable
|
||||||
|
runnableDebuggingMode = "0"
|
||||||
|
FilePath = "/Applications/JUCE/extras/AudioPluginHost/Builds/MacOSX/build/Debug/AudioPluginHost.app">
|
||||||
|
</PathRunnable>
|
||||||
|
<MacroExpansion>
|
||||||
|
<BuildableReference
|
||||||
|
BuildableIdentifier = "primary"
|
||||||
|
BlueprintIdentifier = "345302E3C02BBFCDACE98BE7"
|
||||||
|
BuildableName = "juicysfplugin.component"
|
||||||
|
BlueprintName = "juicysfplugin - AU"
|
||||||
|
ReferencedContainer = "container:juicysfplugin.xcodeproj">
|
||||||
|
</BuildableReference>
|
||||||
|
</MacroExpansion>
|
||||||
|
<AdditionalOptions>
|
||||||
|
</AdditionalOptions>
|
||||||
|
</LaunchAction>
|
||||||
|
<ProfileAction
|
||||||
|
buildConfiguration = "Release"
|
||||||
|
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||||
|
savedToolIdentifier = ""
|
||||||
|
useCustomWorkingDirectory = "NO"
|
||||||
|
debugDocumentVersioning = "YES">
|
||||||
|
<MacroExpansion>
|
||||||
|
<BuildableReference
|
||||||
|
BuildableIdentifier = "primary"
|
||||||
|
BlueprintIdentifier = "345302E3C02BBFCDACE98BE7"
|
||||||
|
BuildableName = "juicysfplugin.component"
|
||||||
|
BlueprintName = "juicysfplugin - AU"
|
||||||
|
ReferencedContainer = "container:juicysfplugin.xcodeproj">
|
||||||
|
</BuildableReference>
|
||||||
|
</MacroExpansion>
|
||||||
|
</ProfileAction>
|
||||||
|
<AnalyzeAction
|
||||||
|
buildConfiguration = "Debug">
|
||||||
|
</AnalyzeAction>
|
||||||
|
<ArchiveAction
|
||||||
|
buildConfiguration = "Release"
|
||||||
|
revealArchiveInOrganizer = "YES">
|
||||||
|
</ArchiveAction>
|
||||||
|
</Scheme>
|
|
@ -33,7 +33,7 @@
|
||||||
</AdditionalOptions>
|
</AdditionalOptions>
|
||||||
</TestAction>
|
</TestAction>
|
||||||
<LaunchAction
|
<LaunchAction
|
||||||
buildConfiguration = "Release"
|
buildConfiguration = "Debug"
|
||||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||||
launchStyle = "0"
|
launchStyle = "0"
|
||||||
|
|
|
@ -51,8 +51,11 @@
|
||||||
debugDocumentVersioning = "YES"
|
debugDocumentVersioning = "YES"
|
||||||
debugServiceExtension = "internal"
|
debugServiceExtension = "internal"
|
||||||
allowLocationSimulation = "YES">
|
allowLocationSimulation = "YES">
|
||||||
<BuildableProductRunnable
|
<PathRunnable
|
||||||
runnableDebuggingMode = "0">
|
runnableDebuggingMode = "0"
|
||||||
|
FilePath = "/Applications/JUCE/extras/AudioPluginHost/Builds/MacOSX/build/Debug/AudioPluginHost.app">
|
||||||
|
</PathRunnable>
|
||||||
|
<MacroExpansion>
|
||||||
<BuildableReference
|
<BuildableReference
|
||||||
BuildableIdentifier = "primary"
|
BuildableIdentifier = "primary"
|
||||||
BlueprintIdentifier = "24C399ED93EC47D5BEB26F76"
|
BlueprintIdentifier = "24C399ED93EC47D5BEB26F76"
|
||||||
|
@ -60,7 +63,7 @@
|
||||||
BlueprintName = "juicysfplugin - Standalone Plugin"
|
BlueprintName = "juicysfplugin - Standalone Plugin"
|
||||||
ReferencedContainer = "container:juicysfplugin.xcodeproj">
|
ReferencedContainer = "container:juicysfplugin.xcodeproj">
|
||||||
</BuildableReference>
|
</BuildableReference>
|
||||||
</BuildableProductRunnable>
|
</MacroExpansion>
|
||||||
<AdditionalOptions>
|
<AdditionalOptions>
|
||||||
</AdditionalOptions>
|
</AdditionalOptions>
|
||||||
</LaunchAction>
|
</LaunchAction>
|
||||||
|
|
|
@ -0,0 +1,84 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<Scheme
|
||||||
|
LastUpgradeVersion = "1020"
|
||||||
|
version = "1.3">
|
||||||
|
<BuildAction
|
||||||
|
parallelizeBuildables = "YES"
|
||||||
|
buildImplicitDependencies = "YES">
|
||||||
|
<BuildActionEntries>
|
||||||
|
<BuildActionEntry
|
||||||
|
buildForTesting = "YES"
|
||||||
|
buildForRunning = "YES"
|
||||||
|
buildForProfiling = "YES"
|
||||||
|
buildForArchiving = "YES"
|
||||||
|
buildForAnalyzing = "YES">
|
||||||
|
<BuildableReference
|
||||||
|
BuildableIdentifier = "primary"
|
||||||
|
BlueprintIdentifier = "48A570326AA09CE818BE1901"
|
||||||
|
BuildableName = "juicysfplugin.vst"
|
||||||
|
BlueprintName = "juicysfplugin - VST"
|
||||||
|
ReferencedContainer = "container:juicysfplugin.xcodeproj">
|
||||||
|
</BuildableReference>
|
||||||
|
</BuildActionEntry>
|
||||||
|
</BuildActionEntries>
|
||||||
|
</BuildAction>
|
||||||
|
<TestAction
|
||||||
|
buildConfiguration = "Debug"
|
||||||
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||||
|
shouldUseLaunchSchemeArgsEnv = "YES">
|
||||||
|
<Testables>
|
||||||
|
</Testables>
|
||||||
|
<AdditionalOptions>
|
||||||
|
</AdditionalOptions>
|
||||||
|
</TestAction>
|
||||||
|
<LaunchAction
|
||||||
|
buildConfiguration = "Debug"
|
||||||
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||||
|
launchStyle = "0"
|
||||||
|
useCustomWorkingDirectory = "NO"
|
||||||
|
ignoresPersistentStateOnLaunch = "NO"
|
||||||
|
debugDocumentVersioning = "YES"
|
||||||
|
debugServiceExtension = "internal"
|
||||||
|
allowLocationSimulation = "YES">
|
||||||
|
<PathRunnable
|
||||||
|
runnableDebuggingMode = "0"
|
||||||
|
FilePath = "/Applications/JUCE/extras/AudioPluginHost/Builds/MacOSX/build/Debug/AudioPluginHost.app">
|
||||||
|
</PathRunnable>
|
||||||
|
<MacroExpansion>
|
||||||
|
<BuildableReference
|
||||||
|
BuildableIdentifier = "primary"
|
||||||
|
BlueprintIdentifier = "48A570326AA09CE818BE1901"
|
||||||
|
BuildableName = "juicysfplugin.vst"
|
||||||
|
BlueprintName = "juicysfplugin - VST"
|
||||||
|
ReferencedContainer = "container:juicysfplugin.xcodeproj">
|
||||||
|
</BuildableReference>
|
||||||
|
</MacroExpansion>
|
||||||
|
<AdditionalOptions>
|
||||||
|
</AdditionalOptions>
|
||||||
|
</LaunchAction>
|
||||||
|
<ProfileAction
|
||||||
|
buildConfiguration = "Release"
|
||||||
|
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||||
|
savedToolIdentifier = ""
|
||||||
|
useCustomWorkingDirectory = "NO"
|
||||||
|
debugDocumentVersioning = "YES">
|
||||||
|
<MacroExpansion>
|
||||||
|
<BuildableReference
|
||||||
|
BuildableIdentifier = "primary"
|
||||||
|
BlueprintIdentifier = "48A570326AA09CE818BE1901"
|
||||||
|
BuildableName = "juicysfplugin.vst"
|
||||||
|
BlueprintName = "juicysfplugin - VST"
|
||||||
|
ReferencedContainer = "container:juicysfplugin.xcodeproj">
|
||||||
|
</BuildableReference>
|
||||||
|
</MacroExpansion>
|
||||||
|
</ProfileAction>
|
||||||
|
<AnalyzeAction
|
||||||
|
buildConfiguration = "Debug">
|
||||||
|
</AnalyzeAction>
|
||||||
|
<ArchiveAction
|
||||||
|
buildConfiguration = "Release"
|
||||||
|
revealArchiveInOrganizer = "YES">
|
||||||
|
</ArchiveAction>
|
||||||
|
</Scheme>
|
|
@ -42,6 +42,10 @@
|
||||||
debugDocumentVersioning = "YES"
|
debugDocumentVersioning = "YES"
|
||||||
debugServiceExtension = "internal"
|
debugServiceExtension = "internal"
|
||||||
allowLocationSimulation = "YES">
|
allowLocationSimulation = "YES">
|
||||||
|
<PathRunnable
|
||||||
|
runnableDebuggingMode = "0"
|
||||||
|
FilePath = "/Applications/JUCE/extras/AudioPluginHost/Builds/MacOSX/build/Debug/AudioPluginHost.app">
|
||||||
|
</PathRunnable>
|
||||||
<MacroExpansion>
|
<MacroExpansion>
|
||||||
<BuildableReference
|
<BuildableReference
|
||||||
BuildableIdentifier = "primary"
|
BuildableIdentifier = "primary"
|
||||||
|
|
|
@ -34,26 +34,36 @@ JuicySFAudioProcessorEditor::JuicySFAudioProcessorEditor(
|
||||||
|
|
||||||
// int width, height;
|
// int width, height;
|
||||||
// {
|
// {
|
||||||
// RangedAudioParameter *param {valueTreeState.getParameter("uiWidth")};
|
// RangedAudioParameter *param {valueTreeState.getParameter("uiWidthPersist")};
|
||||||
// jassert(dynamic_cast<AudioParameterInt*> (param) != nullptr);
|
// jassert(dynamic_cast<AudioParameterInt*> (param) != nullptr);
|
||||||
// AudioParameterInt* castParam {dynamic_cast<AudioParameterInt*> (param)};
|
// AudioParameterInt* castParam {dynamic_cast<AudioParameterInt*> (param)};
|
||||||
// width = castParam->get();
|
// width = castParam->get();
|
||||||
// }
|
// }
|
||||||
// {
|
// {
|
||||||
// RangedAudioParameter *param {valueTreeState.getParameter("uiHeight")};
|
// RangedAudioParameter *param {valueTreeState.getParameter("uiHeightPersist")};
|
||||||
// jassert(dynamic_cast<AudioParameterInt*> (param) != nullptr);
|
// jassert(dynamic_cast<AudioParameterInt*> (param) != nullptr);
|
||||||
// AudioParameterInt* castParam {dynamic_cast<AudioParameterInt*> (param)};
|
// AudioParameterInt* castParam {dynamic_cast<AudioParameterInt*> (param)};
|
||||||
// height = castParam->get();
|
// height = castParam->get();
|
||||||
// }
|
// }
|
||||||
|
|
||||||
// valueTreeState.addParameterListener("uiWidthPersist", this);
|
// valueTreeState.addParameterListener("uiWidthPersist", this);
|
||||||
// valueTreeState.addParameterListener("uiHeightPersist", this);
|
// valueTreeState.addParameterListener("uiHeightPersist", this);
|
||||||
// valueTreeState.addParameterListener("uiWidth", this);
|
// valueTreeState.addParameterListener("uiWidth", this);
|
||||||
// valueTreeState.addParameterListener("uiHeight", this);
|
// valueTreeState.addParameterListener("uiHeight", this);
|
||||||
|
|
||||||
valueTreeState.state.addListener(this);
|
// valueTreeState.state.addListener(this);
|
||||||
|
|
||||||
setSize(GuiConstants::minWidth, GuiConstants::minHeight);
|
// setSize(GuiConstants::minWidth, GuiConstants::minHeight);
|
||||||
|
// setSize(width, height);
|
||||||
|
|
||||||
|
lastUIWidth.referTo(valueTreeState.state.getChildWithName("uiState").getPropertyAsValue("width", nullptr));
|
||||||
|
lastUIHeight.referTo(valueTreeState.state.getChildWithName("uiState").getPropertyAsValue("height", nullptr));
|
||||||
|
|
||||||
|
// set our component's initial size to be the last one that was stored in the filter's settings
|
||||||
|
setSize(lastUIWidth.getValue(), lastUIHeight.getValue());
|
||||||
|
|
||||||
|
lastUIWidth.addListener(this);
|
||||||
|
lastUIHeight.addListener(this);
|
||||||
|
|
||||||
// processor.subscribeToStateChanges(this);
|
// processor.subscribeToStateChanges(this);
|
||||||
|
|
||||||
|
@ -71,52 +81,60 @@ JuicySFAudioProcessorEditor::JuicySFAudioProcessorEditor(
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// called when the stored window size changes
|
||||||
|
void JuicySFAudioProcessorEditor::valueChanged(Value&) {
|
||||||
|
setSize(lastUIWidth.getValue(), lastUIHeight.getValue());
|
||||||
|
}
|
||||||
|
|
||||||
JuicySFAudioProcessorEditor::~JuicySFAudioProcessorEditor()
|
JuicySFAudioProcessorEditor::~JuicySFAudioProcessorEditor()
|
||||||
{
|
{
|
||||||
// valueTreeState.removeParameterListener("uiWidthPersist", this);
|
lastUIWidth.removeListener(this);
|
||||||
// valueTreeState.removeParameterListener("uiHeightPersist", this);
|
lastUIHeight.removeListener(this);
|
||||||
|
// valueTreeState.removeParameterListener("uiWidthPersist", this);
|
||||||
|
// valueTreeState.removeParameterListener("uiHeightPersist", this);
|
||||||
// valueTreeState.removeParameterListener("uiWidth", this);
|
// valueTreeState.removeParameterListener("uiWidth", this);
|
||||||
// valueTreeState.removeParameterListener("uiHeight", this);
|
// valueTreeState.removeParameterListener("uiHeight", this);
|
||||||
valueTreeState.state.removeListener(this);
|
// valueTreeState.state.removeListener(this);
|
||||||
// processor.unsubscribeFromStateChanges(this);
|
// processor.unsubscribeFromStateChanges(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
void JuicySFAudioProcessorEditor::valueTreePropertyChanged(ValueTree& treeWhosePropertyHasChanged,
|
// void JuicySFAudioProcessorEditor::valueTreePropertyChanged(ValueTree& treeWhosePropertyHasChanged,
|
||||||
const Identifier& property) {
|
// const Identifier& property) {
|
||||||
if (&treeWhosePropertyHasChanged == &valueTreeState.state) {
|
// // if (treeWhosePropertyHasChanged.getType() == Identifier("PARAM")) {
|
||||||
if (property == Identifier("uiWidth")) {
|
// const String propertyString{property.toString()};
|
||||||
// String soundFontPath{treeWhosePropertyHasChanged.getProperty("soundFontPath", "")};
|
// if (propertyString == "uiWidth") {
|
||||||
// if (soundFontPath.isNotEmpty()) {
|
// // String soundFontPath{treeWhosePropertyHasChanged.getProperty("soundFontPath", "")};
|
||||||
// loadFont(soundFontPath);
|
// // if (soundFontPath.isNotEmpty()) {
|
||||||
// }
|
// // loadFont(soundFontPath);
|
||||||
int value{treeWhosePropertyHasChanged.getProperty("uiWidth", GuiConstants::minWidth)};
|
// // }
|
||||||
setSize(value, getHeight());
|
// int value{treeWhosePropertyHasChanged.getProperty("uiWidth", GuiConstants::minWidth)};
|
||||||
} else if (property == Identifier("uiHeight")) {
|
// setSize(value, getHeight());
|
||||||
int value{treeWhosePropertyHasChanged.getProperty("uiHeight", GuiConstants::minHeight)};
|
// } else if (propertyString == "uiHeight") {
|
||||||
setSize(getWidth(), value);
|
// int value{treeWhosePropertyHasChanged.getProperty("uiHeight", GuiConstants::minHeight)};
|
||||||
}
|
// setSize(getWidth(), value);
|
||||||
}
|
// }
|
||||||
}
|
// // }
|
||||||
|
// }
|
||||||
|
|
||||||
// void JuicySFAudioProcessorEditor::parameterChanged(const String& parameterID, float newValue) {
|
// void JuicySFAudioProcessorEditor::parameterChanged(const String& parameterID, float newValue) {
|
||||||
// // if (parameterID == "uiWidthPersist"
|
// // if (parameterID == "uiWidthPersist"
|
||||||
// // || parameterID == "uiHeightPersist") {
|
// // || parameterID == "uiHeightPersist") {
|
||||||
// if (parameterID == "uiWidth"
|
// if (parameterID == "uiWidth"
|
||||||
// || parameterID == "uiHeight") {
|
// || parameterID == "uiHeight") {
|
||||||
// RangedAudioParameter *param {valueTreeState.getParameter(parameterID)};
|
// RangedAudioParameter *param {valueTreeState.getParameter(parameterID)};
|
||||||
// jassert(dynamic_cast<AudioParameterInt*> (param) != nullptr);
|
// jassert(dynamic_cast<AudioParameterInt*> (param) != nullptr);
|
||||||
// AudioParameterInt* castParam {dynamic_cast<AudioParameterInt*> (param)};
|
// AudioParameterInt* castParam {dynamic_cast<AudioParameterInt*> (param)};
|
||||||
// int value{castParam->get()};
|
// int value{castParam->get()};
|
||||||
// // if (parameterID == "uiWidthPersist") {
|
|
||||||
// // setSize(value, getHeight());
|
|
||||||
// // } else if (parameterID == "uiHeightPersist") {
|
|
||||||
// // setSize(getWidth(), value);
|
|
||||||
// // }
|
|
||||||
// if (parameterID == "uiWidth") {
|
// if (parameterID == "uiWidth") {
|
||||||
// setSize(value, getHeight());
|
// setSize(value, getHeight());
|
||||||
// } else if (parameterID == "uiHeight") {
|
// } else if (parameterID == "uiHeight") {
|
||||||
// setSize(getWidth(), value);
|
// setSize(getWidth(), value);
|
||||||
// }
|
// }
|
||||||
|
// // if (parameterID == "uiWidthPersist") {
|
||||||
|
// // setSize(value, getHeight());
|
||||||
|
// // } else if (parameterID == "uiHeightPersist") {
|
||||||
|
// // setSize(getWidth(), value);
|
||||||
|
// // }
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
|
|
||||||
|
@ -171,21 +189,30 @@ void JuicySFAudioProcessorEditor::resized()
|
||||||
|
|
||||||
tablesComponent.setBounds(rContent);
|
tablesComponent.setBounds(rContent);
|
||||||
|
|
||||||
valueTreeState.state.setPropertyExcludingListener(this, "uiWidth", getWidth(), nullptr);
|
lastUIWidth = getWidth();
|
||||||
valueTreeState.state.setPropertyExcludingListener(this, "uiHeight", getHeight(), nullptr);
|
lastUIHeight = getHeight();
|
||||||
|
|
||||||
|
// valueTreeState.state.setPropertyExcludingListener(this, "uiWidth", getWidth(), nullptr);
|
||||||
|
// valueTreeState.state.setPropertyExcludingListener(this, "uiHeight", getHeight(), nullptr);
|
||||||
|
|
||||||
// {
|
// {
|
||||||
// RangedAudioParameter *param {valueTreeState.getParameter("uiWidth2")};
|
// // RangedAudioParameter *param {valueTreeState.getParameter("uiWidthTemp")};
|
||||||
// jassert(dynamic_cast<AudioParameterInt*> (param) != nullptr);
|
// RangedAudioParameter *param {valueTreeState.getParameter("uiWidth")};
|
||||||
// AudioParameterInt* castParam {dynamic_cast<AudioParameterInt*> (param)};
|
// // param->setValueNotifyingHost(param->convertTo0to1(getWidth()));
|
||||||
// *castParam = getWidth();
|
// jassert(dynamic_cast<AudioParameterInt*> (param) != nullptr);
|
||||||
// }
|
// AudioParameterInt* castParam {dynamic_cast<AudioParameterInt*> (param)};
|
||||||
// {
|
// *castParam = getWidth();
|
||||||
// RangedAudioParameter *param {valueTreeState.getParameter("uiHeight2")};
|
// // castParam->AudioProcessorParameter::setValue(castParam->convertTo0to1(static_cast<float>(getWidth())));
|
||||||
// jassert(dynamic_cast<AudioParameterInt*> (param) != nullptr);
|
// }
|
||||||
// AudioParameterInt* castParam {dynamic_cast<AudioParameterInt*> (param)};
|
// {
|
||||||
// *castParam = getHeight();
|
// // RangedAudioParameter *param {valueTreeState.getParameter("uiHeightTemp")};
|
||||||
// }
|
// RangedAudioParameter *param {valueTreeState.getParameter("uiHeight")};
|
||||||
|
// // param->setValueNotifyingHost(param->convertTo0to1(getHeight()));
|
||||||
|
// jassert(dynamic_cast<AudioParameterInt*> (param) != nullptr);
|
||||||
|
// AudioParameterInt* castParam {dynamic_cast<AudioParameterInt*> (param)};
|
||||||
|
// *castParam = getHeight();
|
||||||
|
// // castParam->AudioProcessorParameter::setValue(castParam->convertTo0to1(static_cast<float>(getHeight())));
|
||||||
|
// }
|
||||||
|
|
||||||
// sharedParams.setUiWidth(getWidth());
|
// sharedParams.setUiWidth(getWidth());
|
||||||
// sharedParams.setUiHeight(getHeight());
|
// sharedParams.setUiHeight(getHeight());
|
||||||
|
|
|
@ -26,7 +26,8 @@
|
||||||
class JuicySFAudioProcessorEditor
|
class JuicySFAudioProcessorEditor
|
||||||
: public AudioProcessorEditor
|
: public AudioProcessorEditor
|
||||||
// , public AudioProcessorValueTreeState::Listener
|
// , public AudioProcessorValueTreeState::Listener
|
||||||
, public ValueTree::Listener
|
, private Value::Listener
|
||||||
|
// , public ValueTree::Listener
|
||||||
/*,
|
/*,
|
||||||
, public ExposesComponents
|
, public ExposesComponents
|
||||||
public StateChangeSubscriber*/
|
public StateChangeSubscriber*/
|
||||||
|
@ -55,19 +56,20 @@ public:
|
||||||
// int getWidth();
|
// int getWidth();
|
||||||
// int getHeight();
|
// int getHeight();
|
||||||
|
|
||||||
virtual void valueTreePropertyChanged (ValueTree& treeWhosePropertyHasChanged,
|
// virtual void valueTreePropertyChanged (ValueTree& treeWhosePropertyHasChanged,
|
||||||
const Identifier& property) override;
|
// const Identifier& property) override;
|
||||||
inline virtual void valueTreeChildAdded (ValueTree& parentTree,
|
// inline virtual void valueTreeChildAdded (ValueTree& parentTree,
|
||||||
ValueTree& childWhichHasBeenAdded) override {};
|
// ValueTree& childWhichHasBeenAdded) override {};
|
||||||
inline virtual void valueTreeChildRemoved (ValueTree& parentTree,
|
// inline virtual void valueTreeChildRemoved (ValueTree& parentTree,
|
||||||
ValueTree& childWhichHasBeenRemoved,
|
// ValueTree& childWhichHasBeenRemoved,
|
||||||
int indexFromWhichChildWasRemoved) override {};
|
// int indexFromWhichChildWasRemoved) override {};
|
||||||
inline virtual void valueTreeChildOrderChanged (ValueTree& parentTreeWhoseChildrenHaveMoved,
|
// inline virtual void valueTreeChildOrderChanged (ValueTree& parentTreeWhoseChildrenHaveMoved,
|
||||||
int oldIndex, int newIndex) override {};
|
// int oldIndex, int newIndex) override {};
|
||||||
inline virtual void valueTreeParentChanged (ValueTree& treeWhoseParentHasChanged) override {};
|
// inline virtual void valueTreeParentChanged (ValueTree& treeWhoseParentHasChanged) override {};
|
||||||
inline virtual void valueTreeRedirected (ValueTree& treeWhichHasBeenChanged) override {};
|
// inline virtual void valueTreeRedirected (ValueTree& treeWhichHasBeenChanged) override {};
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
void valueChanged (Value&) override;
|
||||||
|
|
||||||
// This reference is provided as a quick way for your editor to
|
// This reference is provided as a quick way for your editor to
|
||||||
// access the processor object that created it.
|
// access the processor object that created it.
|
||||||
|
@ -76,6 +78,11 @@ private:
|
||||||
AudioProcessorValueTreeState& valueTreeState;
|
AudioProcessorValueTreeState& valueTreeState;
|
||||||
// SharesParams& sharedParams;
|
// SharesParams& sharedParams;
|
||||||
|
|
||||||
|
// these are used to persist the UI's size - the values are stored along with the
|
||||||
|
// filter's other parameters, and the UI component will update them when it gets
|
||||||
|
// resized.
|
||||||
|
Value lastUIWidth, lastUIHeight;
|
||||||
|
|
||||||
SurjectiveMidiKeyboardComponent midiKeyboard;
|
SurjectiveMidiKeyboardComponent midiKeyboard;
|
||||||
TablesComponent tablesComponent;
|
TablesComponent tablesComponent;
|
||||||
FilePicker filePicker;
|
FilePicker filePicker;
|
||||||
|
|
|
@ -33,12 +33,19 @@ JuicySFAudioProcessor::JuicySFAudioProcessor()
|
||||||
, valueTreeState{
|
, valueTreeState{
|
||||||
*this,
|
*this,
|
||||||
nullptr,
|
nullptr,
|
||||||
{ "MYPLUGINSETTINGS" },
|
"MYPLUGINSETTINGS",
|
||||||
createParameterLayout()}
|
createParameterLayout()}
|
||||||
, fluidSynthModel{valueTreeState, valueTree}
|
, fluidSynthModel{valueTreeState, valueTree}
|
||||||
//, fluidSynthModel{*this}
|
//, fluidSynthModel{*this}
|
||||||
//, pluginEditor(nullptr)
|
//, pluginEditor(nullptr)
|
||||||
{
|
{
|
||||||
|
valueTreeState.state.appendChild({ "uiState", {
|
||||||
|
{ "width", GuiConstants::minWidth },
|
||||||
|
{ "height", GuiConstants::minHeight }
|
||||||
|
}, {} }, nullptr);
|
||||||
|
valueTreeState.state.setProperty("soundFontPath", "", nullptr);
|
||||||
|
// valueTreeState.state.appendChild({ "soundFontPath", {} }, nullptr);
|
||||||
|
|
||||||
initialiseSynth();
|
initialiseSynth();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -57,8 +64,8 @@ AudioProcessorValueTreeState::ParameterLayout JuicySFAudioProcessor::createParam
|
||||||
// make_unique<AudioParameterInt>("uiHeightPersist", "height of this plugin's GUI. Editor listens for changes (e.g. on load)", GuiConstants::minHeight, GuiConstants::maxHeight, GuiConstants::minHeight, "UI Height Persist" ),
|
// make_unique<AudioParameterInt>("uiHeightPersist", "height of this plugin's GUI. Editor listens for changes (e.g. on load)", GuiConstants::minHeight, GuiConstants::maxHeight, GuiConstants::minHeight, "UI Height Persist" ),
|
||||||
// make_unique<AudioParameterInt>("uiWidthTemp", "width of this plugin's GUI. Editor writes here on change (e.g. on window resize). Processor copies this into Persist before any save.", GuiConstants::minWidth, GuiConstants::maxWidth, GuiConstants::minWidth, "UI Width Temp" ),
|
// make_unique<AudioParameterInt>("uiWidthTemp", "width of this plugin's GUI. Editor writes here on change (e.g. on window resize). Processor copies this into Persist before any save.", GuiConstants::minWidth, GuiConstants::maxWidth, GuiConstants::minWidth, "UI Width Temp" ),
|
||||||
// make_unique<AudioParameterInt>("uiHeightTemp", "height of this plugin's GUI. Editor writes here on change (e.g. on window resize). Processor copies this into Persist before any save.", GuiConstants::minHeight, GuiConstants::maxHeight, GuiConstants::minHeight, "UI Height Temp" ),
|
// make_unique<AudioParameterInt>("uiHeightTemp", "height of this plugin's GUI. Editor writes here on change (e.g. on window resize). Processor copies this into Persist before any save.", GuiConstants::minHeight, GuiConstants::maxHeight, GuiConstants::minHeight, "UI Height Temp" ),
|
||||||
make_unique<AudioParameterInt>("uiWidth", "width of this plugin's GUI", GuiConstants::minWidth, GuiConstants::maxWidth, GuiConstants::minWidth, "UI Width" ),
|
// make_unique<AudioParameterInt>("uiWidth", "width of this plugin's GUI", GuiConstants::minWidth, GuiConstants::maxWidth, GuiConstants::minWidth, "UI Width" ),
|
||||||
make_unique<AudioParameterInt>("uiHeight", "height of this plugin's GUI", GuiConstants::minHeight, GuiConstants::maxHeight, GuiConstants::minHeight, "UI Height" ),
|
// make_unique<AudioParameterInt>("uiHeight", "height of this plugin's GUI", GuiConstants::minHeight, GuiConstants::maxHeight, GuiConstants::minHeight, "UI Height" ),
|
||||||
// todo: check whether bank really is 0-127
|
// todo: check whether bank really is 0-127
|
||||||
make_unique<AudioParameterInt>("bank", "which bank is selected in the soundfont", MidiConstants::midiMinValue, MidiConstants::midiMaxValue, MidiConstants::midiMinValue, "Bank" ),
|
make_unique<AudioParameterInt>("bank", "which bank is selected in the soundfont", MidiConstants::midiMinValue, MidiConstants::midiMaxValue, MidiConstants::midiMinValue, "Bank" ),
|
||||||
// note: banks may be sparse, and lack a 0th preset. so defend against this.
|
// note: banks may be sparse, and lack a 0th preset. so defend against this.
|
||||||
|
@ -227,7 +234,11 @@ void JuicySFAudioProcessor::processBlock (AudioBuffer<float>& buffer, MidiBuffer
|
||||||
|
|
||||||
switch(static_cast<fluid_midi_control_change>(m.getControllerNumber())) {
|
switch(static_cast<fluid_midi_control_change>(m.getControllerNumber())) {
|
||||||
case SOUND_CTRL2: { // MIDI CC 71 Timbre/Harmonic Intensity (filter resonance)
|
case SOUND_CTRL2: { // MIDI CC 71 Timbre/Harmonic Intensity (filter resonance)
|
||||||
valueTreeState.state.setProperty({"filterResonance"}, m.getControllerValue(), nullptr);
|
// valueTreeState.state.setProperty({"filterResonance"}, m.getControllerValue(), nullptr);
|
||||||
|
RangedAudioParameter *param {valueTreeState.getParameter("filterResonance")};
|
||||||
|
jassert(dynamic_cast<AudioParameterInt*> (param) != nullptr);
|
||||||
|
AudioParameterInt* castParam {dynamic_cast<AudioParameterInt*> (param)};
|
||||||
|
*castParam = m.getControllerValue();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case SOUND_CTRL3: { // MIDI CC 72 Release time
|
case SOUND_CTRL3: { // MIDI CC 72 Release time
|
||||||
|
@ -382,9 +393,11 @@ void JuicySFAudioProcessor::getStateInformation (MemoryBlock& destData)
|
||||||
// for (auto* param : getParameters())
|
// for (auto* param : getParameters())
|
||||||
// if (auto* p = dynamic_cast<AudioProcessorParameterWithID*> (param))
|
// if (auto* p = dynamic_cast<AudioProcessorParameterWithID*> (param))
|
||||||
// xml->setAttribute (p->paramID, p->getValue());
|
// xml->setAttribute (p->paramID, p->getValue());
|
||||||
|
|
||||||
// then use this helper function to stuff it into the binary blob and return it..
|
// then use this helper function to stuff it into the binary blob and return it..
|
||||||
copyXmlToBinary (*xml, destData);
|
if (xml.get() != nullptr) {
|
||||||
|
copyXmlToBinary(*xml, destData);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void JuicySFAudioProcessor::setStateInformation (const void* data, int sizeInBytes)
|
void JuicySFAudioProcessor::setStateInformation (const void* data, int sizeInBytes)
|
||||||
|
@ -399,7 +412,41 @@ void JuicySFAudioProcessor::setStateInformation (const void* data, int sizeInByt
|
||||||
// make sure that it's actually our type of XML object..
|
// make sure that it's actually our type of XML object..
|
||||||
// if (xmlState->hasTagName ("MYPLUGINSETTINGS")) {
|
// if (xmlState->hasTagName ("MYPLUGINSETTINGS")) {
|
||||||
if (xmlState->hasTagName(valueTreeState.state.getType())) {
|
if (xmlState->hasTagName(valueTreeState.state.getType())) {
|
||||||
valueTreeState.replaceState(ValueTree::fromXml(*xmlState));
|
// valueTreeState.replaceState(ValueTree::fromXml(*xmlState));
|
||||||
|
for (auto* param : getParameters())
|
||||||
|
if (auto* p = dynamic_cast<AudioProcessorParameterWithID*>(param))
|
||||||
|
p->setValue(static_cast<float>(xmlState->getDoubleAttribute(p->paramID, p->getValue())));
|
||||||
|
|
||||||
|
{
|
||||||
|
Value value{valueTreeState.state.getPropertyAsValue("soundFontPath", nullptr)};
|
||||||
|
value = xmlState->getStringAttribute("soundFontPath", value.getValue());
|
||||||
|
// valueTreeState.getParameter("soundFontPath")->getValue()
|
||||||
|
// valueTreeState.getParameter("soundFontPath")->getValue();
|
||||||
|
// RangedAudioParameter *param {valueTreeState.getParameter("release")};
|
||||||
|
// jassert(dynamic_cast<AudioParameterInt*> (param) != nullptr);
|
||||||
|
// AudioParameterInt* castParam {dynamic_cast<AudioParameterInt*> (param)};
|
||||||
|
// *castParam = m.getControllerValue();
|
||||||
|
}
|
||||||
|
{
|
||||||
|
ValueTree tree{valueTreeState.state.getChildWithName("uiState")};
|
||||||
|
XmlElement* uiState{xmlState->getChildByName("uiState")};
|
||||||
|
if (uiState) {
|
||||||
|
{
|
||||||
|
Value value{tree.getPropertyAsValue("width", nullptr)};
|
||||||
|
value = uiState->getIntAttribute("width", value.getValue());
|
||||||
|
}
|
||||||
|
{
|
||||||
|
Value value{tree.getPropertyAsValue("height", nullptr)};
|
||||||
|
value = uiState->getIntAttribute("height", value.getValue());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// tree.getPropertyAsValue("width", nullptr)
|
||||||
|
// tree.
|
||||||
|
// valueTreeState.replaceState(ValueTree::fromXml(*xmlState))
|
||||||
|
// value = xmlState->getStringAttribute("soundFontPath", value.getValue());
|
||||||
|
}
|
||||||
|
|
||||||
// list<StateChangeSubscriber*>::iterator p;
|
// list<StateChangeSubscriber*>::iterator p;
|
||||||
// for(p = stateChangeSubscribers.begin(); p != stateChangeSubscribers.end(); p++) {
|
// for(p = stateChangeSubscribers.begin(); p != stateChangeSubscribers.end(); p++) {
|
||||||
// (*p)->setStateInformation(xmlState);
|
// (*p)->setStateInformation(xmlState);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user