From 5337ce85c3b1c8c63529ae4fd483fc4d311b0135 Mon Sep 17 00:00:00 2001 From: Legaeli Date: Thu, 27 Nov 2025 14:33:46 +0100 Subject: [PATCH] v.1.0.1 --- CrystalizerEQ/PluginEditor.cpp | 53 +++++++++++++++++++++++++++++++ CrystalizerEQ/PluginEditor.h | 4 +++ CrystalizerEQ/PluginProcessor.cpp | 8 ++++- CrystalizerEQ/PluginProcessor.h | 2 +- 4 files changed, 65 insertions(+), 2 deletions(-) diff --git a/CrystalizerEQ/PluginEditor.cpp b/CrystalizerEQ/PluginEditor.cpp index 2db607a..4b68f0c 100644 --- a/CrystalizerEQ/PluginEditor.cpp +++ b/CrystalizerEQ/PluginEditor.cpp @@ -711,6 +711,58 @@ void CrystalizerEQAudioProcessorEditor::initPresetSystem() { presetBox.setLookAndFeel(presetComboBoxLookAndFeel.get()); } +void CrystalizerEQAudioProcessorEditor::syncPresetBox() { + const auto currentPresetName = audioProcessor.getPresetName(); + + // Durch alle Items in der ComboBox gehen + for (int i = 0; i < presetBox.getNumItems(); ++i) { + if (presetBox.getItemText(i) == currentPresetName) { + presetBox.setSelectedId(i + 1, juce::dontSendNotification); + return; + } + } + + presetBox.setSelectedId(1, juce::dontSendNotification); +} + +void CrystalizerEQAudioProcessorEditor::syncAllButtonStates() { + // Peak Bypass Buttons + const bool peak1Bypassed = audioProcessor.apvts.getRawParameterValue("Peak1Bypass")->load() > 0.5f; + if (peak1Bypassed) { + disableLowMidBand(1.0f); + } + + const bool peak2Bypassed = audioProcessor.apvts.getRawParameterValue("Peak2Bypass")->load() > 0.5f; + if (peak2Bypassed) { + disableMidBand(1.0f); + } + + const bool peak3Bypassed = audioProcessor.apvts.getRawParameterValue("Peak3Bypass")->load() > 0.5f; + if (peak3Bypassed) { + disableHighMidBand(1.0f); + } + + // Master Bypass + const bool masterBypassed = audioProcessor.apvts.getRawParameterValue("MasterBypass")->load() > 0.5f; + if (masterBypassed) { + disableEverything(1.0f); + } + + // Crystalize Button - Icon-Opacity setzen + const bool crystalized = audioProcessor.apvts.getRawParameterValue("CrystalizeButton")->load() > 0.5f; + if (crystalized) { + svgToggleButtonLookAndFeel->activeIconOpacity = 1.0f; + svgToggleButtonLookAndFeel->passiveIconOpacity = 0.0f; + } else { + svgToggleButtonLookAndFeel->activeIconOpacity = 0.0f; + svgToggleButtonLookAndFeel->passiveIconOpacity = 1.0f; + } + crystalizeButton.repaint(); + + syncPresetBox(); +} + + //============================================================================== CrystalizerEQAudioProcessorEditor::CrystalizerEQAudioProcessorEditor(CrystalizerEQAudioProcessor &p) : AudioProcessorEditor(&p), audioProcessor(p), spectrumAnalyzer(p.audioFIFO, p) { @@ -736,6 +788,7 @@ CrystalizerEQAudioProcessorEditor::CrystalizerEQAudioProcessorEditor(Crystalizer audioProcessor.apvts.addParameterListener("HighBandModes", this); updateModeButtons(); + syncAllButtonStates(); } CrystalizerEQAudioProcessorEditor::~CrystalizerEQAudioProcessorEditor() { diff --git a/CrystalizerEQ/PluginEditor.h b/CrystalizerEQ/PluginEditor.h index 70f8ecb..523f5f1 100644 --- a/CrystalizerEQ/PluginEditor.h +++ b/CrystalizerEQ/PluginEditor.h @@ -382,5 +382,9 @@ private: void parameterChanged(const juce::String& parameterID, float newValue) override; + void syncAllButtonStates(); + + void syncPresetBox(); + JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(CrystalizerEQAudioProcessorEditor) }; diff --git a/CrystalizerEQ/PluginProcessor.cpp b/CrystalizerEQ/PluginProcessor.cpp index d91e824..57f9564 100644 --- a/CrystalizerEQ/PluginProcessor.cpp +++ b/CrystalizerEQ/PluginProcessor.cpp @@ -572,6 +572,7 @@ void CrystalizerEQAudioProcessor::loadPreset(const juce::String &preset) { } } } + presetName = f.getFileNameWithoutExtension(); } } @@ -595,7 +596,7 @@ void CrystalizerEQAudioProcessor::deletePreset(const juce::String &preset) const } } -void CrystalizerEQAudioProcessor::resetAllParameters() const { +void CrystalizerEQAudioProcessor::resetAllParameters() { for (auto *p: getParameters()) { if (p == nullptr) continue; @@ -606,6 +607,7 @@ void CrystalizerEQAudioProcessor::resetAllParameters() const { ranged->endChangeGesture(); } } + presetName = "Init"; } void CrystalizerEQAudioProcessor::parameterChanged(const juce::String &id, float v) { @@ -808,6 +810,8 @@ juce::AudioProcessorEditor *CrystalizerEQAudioProcessor::createEditor() { void CrystalizerEQAudioProcessor::getStateInformation(juce::MemoryBlock &destData) { auto state = apvts.copyState(); std::unique_ptr xml(state.createXml()); + xml->setAttribute("currentPreset", presetName); + copyXmlToBinary(*xml, destData); } @@ -817,6 +821,8 @@ void CrystalizerEQAudioProcessor::setStateInformation(const void *data, int size if (xmlState != nullptr) { if (xmlState->hasTagName(apvts.state.getType())) { apvts.replaceState(juce::ValueTree::fromXml(*xmlState)); + + presetName = xmlState->getStringAttribute("currentPreset", "Init"); } } } diff --git a/CrystalizerEQ/PluginProcessor.h b/CrystalizerEQ/PluginProcessor.h index 5db86dd..cbd9140 100644 --- a/CrystalizerEQ/PluginProcessor.h +++ b/CrystalizerEQ/PluginProcessor.h @@ -103,7 +103,7 @@ public: void deletePreset(const juce::String &preset) const; - void resetAllParameters() const; + void resetAllParameters(); bool lowCutActive = false; bool highCutActive = false;