From baafdc8fc0a23e0c3df8de0b3556c43671013b1c Mon Sep 17 00:00:00 2001 From: George Reales Date: Thu, 8 Apr 2021 09:14:24 +0200 Subject: [PATCH 01/21] Update PluginProcessor.cpp --- Source/PluginProcessor.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/Source/PluginProcessor.cpp b/Source/PluginProcessor.cpp index 37aa386..e148c78 100755 --- a/Source/PluginProcessor.cpp +++ b/Source/PluginProcessor.cpp @@ -653,6 +653,7 @@ bool ObxdAudioProcessor::loadFromFXBFile(const File& fxbFile) return false; setStateInformation(cset->chunk, fxbSwap (cset->chunkSize)); + setCurrentProgram(0); // Set to first preset position } else if (compareMagic (set->fxMagic, "FPCh")) { From 65b7e2275fa4cf76ab88f8e09bced179f0c83f8e Mon Sep 17 00:00:00 2001 From: George Reales Date: Tue, 27 Apr 2021 09:46:19 +0200 Subject: [PATCH 02/21] Preliminary preset bar implementation --- OB-Xd.jucer | 11 +- Source/Components/PresetBar.cpp | 253 +++++++++++++++++++++++++++++ Source/Components/PresetBar.h | 79 +++++++++ Source/Images/presetnavigation.svg | 19 +++ Source/PluginEditor.cpp | 33 +++- Source/PluginEditor.h | 11 +- 6 files changed, 400 insertions(+), 6 deletions(-) create mode 100644 Source/Components/PresetBar.cpp create mode 100644 Source/Components/PresetBar.h create mode 100644 Source/Images/presetnavigation.svg diff --git a/OB-Xd.jucer b/OB-Xd.jucer index 9aceccb..d71f44f 100644 --- a/OB-Xd.jucer +++ b/OB-Xd.jucer @@ -1,6 +1,6 @@ - + + + @@ -76,7 +80,7 @@ stripLocalSymbols="0" linkTimeOptimisation="0"/> + enablePluginBinaryCopyStep="1"/> @@ -124,7 +128,8 @@ + targetName="OB-Xd" headerPath="../../Modules/asiosdk2.3.2/common" + enablePluginBinaryCopyStep="1"/> diff --git a/Source/Components/PresetBar.cpp b/Source/Components/PresetBar.cpp new file mode 100644 index 0000000..80213d7 --- /dev/null +++ b/Source/Components/PresetBar.cpp @@ -0,0 +1,253 @@ +/* + ============================================================================== + + This is an automatically generated GUI class created by the Projucer! + + Be careful when adding custom code to these files, as only the code within + the "//[xyz]" and "//[/xyz]" sections will be retained when the file is loaded + and re-saved. + + Created with Projucer version: 6.0.8 + + ------------------------------------------------------------------------------ + + The Projucer is part of the JUCE library. + Copyright (c) 2020 - Raw Material Software Limited. + + ============================================================================== +*/ + +//[Headers] You can add your own extra header files here... +#include "../PluginEditor.h" +//[/Headers] + +#include "PresetBar.h" + + +//[MiscUserDefs] You can add your own user definitions and misc code here... +//[/MiscUserDefs] + +//============================================================================== +PresetBar::PresetBar (ObxdAudioProcessorEditor &gui) + : editor(gui) +{ + //[Constructor_pre] You can add your own custom stuff here.. + //[/Constructor_pre] + + presetNameLb.reset (new juce::Label ("new label", + TRANS("---\n"))); + addAndMakeVisible (presetNameLb.get()); + presetNameLb->setFont (juce::Font (15.00f, juce::Font::plain).withTypefaceStyle ("Regular")); + presetNameLb->setJustificationType (juce::Justification::centred); + presetNameLb->setEditable (false, false, false); + presetNameLb->setColour (juce::TextEditor::textColourId, juce::Colours::black); + presetNameLb->setColour (juce::TextEditor::backgroundColourId, juce::Colour (0x00000000)); + + presetNameLb->setBounds (24, 8, 368, 24); + + previousBtn.reset (new juce::ImageButton ("new button")); + addAndMakeVisible (previousBtn.get()); + previousBtn->setButtonText (juce::String()); + previousBtn->addListener (this); + + previousBtn->setImages (false, true, true, + juce::Image(), 1.000f, juce::Colour (0x00000000), + juce::Image(), 1.000f, juce::Colour (0x00000000), + juce::Image(), 1.000f, juce::Colour (0x00000000)); + previousBtn->setBounds (407, 8, 20, 24); + + nextBtn.reset (new juce::ImageButton ("new button")); + addAndMakeVisible (nextBtn.get()); + nextBtn->setButtonText (juce::String()); + nextBtn->addListener (this); + + nextBtn->setImages (false, true, true, + juce::Image(), 1.000f, juce::Colour (0x00000000), + juce::Image(), 1.000f, juce::Colour (0x00000000), + juce::Image(), 1.000f, juce::Colour (0x00000000)); + nextBtn->setBounds (435, 8, 20, 24); + + drawable1 = juce::Drawable::createFromImageData (presetnavigation_svg, presetnavigation_svgSize); + + //[UserPreSize] + //[/UserPreSize] + + setSize (471, 40); + + + //[Constructor] You can add your own custom stuff here.. + startTimer(500); + //[/Constructor] +} + +PresetBar::~PresetBar() +{ + //[Destructor_pre]. You can add your own custom destruction code here.. + //[/Destructor_pre] + + presetNameLb = nullptr; + previousBtn = nullptr; + nextBtn = nullptr; + drawable1 = nullptr; + + + //[Destructor]. You can add your own custom destruction code here.. + //[/Destructor] +} + +//============================================================================== +void PresetBar::paint (juce::Graphics& g) +{ + //[UserPrePaint] Add your own custom painting code here.. + //[/UserPrePaint] + + g.fillAll (juce::Colours::black); + + { + int x = 0, y = 0, width = 471, height = 40; + //[UserPaintCustomArguments] Customize the painting arguments here.. + //[/UserPaintCustomArguments] + g.setColour (juce::Colours::black); + jassert (drawable1 != nullptr); + if (drawable1 != nullptr) + drawable1->drawWithin (g, juce::Rectangle (x, y, width, height).toFloat(), + juce::RectanglePlacement::centred, 1.000f); + } + + //[UserPaint] Add your own custom painting code here.. + //[/UserPaint] +} + +void PresetBar::resized() +{ + //[UserPreResize] Add your own custom resize code here.. + //[/UserPreResize] + + //[UserResized] Add your own custom resize handling here.. + //[/UserResized] +} + +void PresetBar::buttonClicked (juce::Button* buttonThatWasClicked) +{ + //[UserbuttonClicked_Pre] + //[/UserbuttonClicked_Pre] + + if (buttonThatWasClicked == previousBtn.get()) + { + //[UserButtonCode_previousBtn] -- add your button handler code here.. + editor.prevProgram(); + //[/UserButtonCode_previousBtn] + } + else if (buttonThatWasClicked == nextBtn.get()) + { + //[UserButtonCode_nextBtn] -- add your button handler code here.. + editor.nextProgram(); + //[/UserButtonCode_nextBtn] + } + + //[UserbuttonClicked_Post] + //[/UserbuttonClicked_Post] +} + + + +//[MiscUserCode] You can add your own definitions of your custom methods or any other code here... +void PresetBar::timerCallback() { + update(); +} + +void PresetBar::update(){ + presetNameLb->setText(editor.getCurrentProgramName(), NotificationType::dontSendNotification); +} +//[/MiscUserCode] + + +//============================================================================== +#if 0 +/* -- Projucer information section -- + + This is where the Projucer stores the metadata that describe this GUI layout, so + make changes in here at your peril! + +BEGIN_JUCER_METADATA + + + + + + + +END_JUCER_METADATA +*/ +#endif + +//============================================================================== +// Binary resources - be careful not to edit any of these sections! + +// JUCER_RESOURCE: presetnavigation_svg, 2220, "../Images/presetnavigation.svg" +static const unsigned char resource_PresetBar_presetnavigation_svg[] = { 60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101,110,99,111,100,105,110,103,61,34,85,84,70,45,56,34,32, +115,116,97,110,100,97,108,111,110,101,61,34,110,111,34,63,62,10,60,33,68,79,67,84,89,80,69,32,115,118,103,32,80,85,66,76,73,67,32,34,45,47,47,87,51,67,47,47,68,84,68,32,83,86,71,32,49,46,49,47,47,69,78, +34,32,34,104,116,116,112,58,47,47,119,119,119,46,119,51,46,111,114,103,47,71,114,97,112,104,105,99,115,47,83,86,71,47,49,46,49,47,68,84,68,47,115,118,103,49,49,46,100,116,100,34,62,10,60,115,118,103,32, +119,105,100,116,104,61,34,49,48,48,37,34,32,104,101,105,103,104,116,61,34,49,48,48,37,34,32,118,105,101,119,66,111,120,61,34,48,32,48,32,52,55,49,32,51,57,34,32,118,101,114,115,105,111,110,61,34,49,46, +49,34,32,120,109,108,110,115,61,34,104,116,116,112,58,47,47,119,119,119,46,119,51,46,111,114,103,47,50,48,48,48,47,115,118,103,34,32,120,109,108,110,115,58,120,108,105,110,107,61,34,104,116,116,112,58, +47,47,119,119,119,46,119,51,46,111,114,103,47,49,57,57,57,47,120,108,105,110,107,34,32,120,109,108,58,115,112,97,99,101,61,34,112,114,101,115,101,114,118,101,34,32,120,109,108,110,115,58,115,101,114,105, +102,61,34,104,116,116,112,58,47,47,119,119,119,46,115,101,114,105,102,46,99,111,109,47,34,32,115,116,121,108,101,61,34,102,105,108,108,45,114,117,108,101,58,101,118,101,110,111,100,100,59,99,108,105,112, +45,114,117,108,101,58,101,118,101,110,111,100,100,59,115,116,114,111,107,101,45,108,105,110,101,106,111,105,110,58,114,111,117,110,100,59,115,116,114,111,107,101,45,109,105,116,101,114,108,105,109,105, +116,58,50,59,34,62,10,32,32,32,32,60,114,101,99,116,32,120,61,34,48,34,32,121,61,34,48,34,32,119,105,100,116,104,61,34,52,55,49,34,32,104,101,105,103,104,116,61,34,51,57,34,47,62,10,32,32,32,32,60,103, +32,116,114,97,110,115,102,111,114,109,61,34,109,97,116,114,105,120,40,49,44,48,44,48,44,49,46,48,50,57,52,49,44,48,44,45,48,46,48,53,56,56,50,51,53,41,34,62,10,32,32,32,32,32,32,32,32,60,112,97,116,104, +32,100,61,34,77,52,54,53,44,49,48,46,53,67,52,54,53,44,53,46,56,48,57,32,52,54,49,46,48,55,57,44,50,32,52,53,54,46,50,53,44,50,76,49,50,46,55,53,44,50,67,55,46,57,50,49,44,50,32,52,44,53,46,56,48,57,32, +52,44,49,48,46,53,76,52,44,50,55,46,53,67,52,44,51,50,46,49,57,49,32,55,46,57,50,49,44,51,54,32,49,50,46,55,53,44,51,54,76,52,53,54,46,50,53,44,51,54,67,52,54,49,46,48,55,57,44,51,54,32,52,54,53,44,51, +50,46,49,57,49,32,52,54,53,44,50,55,46,53,76,52,54,53,44,49,48,46,53,90,34,32,115,116,121,108,101,61,34,102,105,108,108,58,114,103,98,40,49,50,49,44,49,50,49,44,49,50,49,41,59,34,47,62,10,32,32,32,32, +60,47,103,62,10,32,32,32,32,60,112,97,116,104,32,100,61,34,77,51,57,56,44,57,46,50,48,53,67,51,57,56,44,55,46,52,51,54,32,51,57,54,46,53,54,52,44,54,32,51,57,52,46,55,57,53,44,54,76,50,52,46,50,48,53, +44,54,67,50,50,46,52,51,54,44,54,32,50,49,44,55,46,52,51,54,32,50,49,44,57,46,50,48,53,76,50,49,44,50,57,46,55,57,53,67,50,49,44,51,49,46,53,54,52,32,50,50,46,52,51,54,44,51,51,32,50,52,46,50,48,53,44, +51,51,76,51,57,52,46,55,57,53,44,51,51,67,51,57,54,46,53,54,52,44,51,51,32,51,57,56,44,51,49,46,53,54,52,32,51,57,56,44,50,57,46,55,57,53,76,51,57,56,44,57,46,50,48,53,90,34,47,62,10,32,32,32,32,60,103, +32,116,114,97,110,115,102,111,114,109,61,34,109,97,116,114,105,120,40,49,44,48,44,48,44,49,44,49,44,49,53,46,52,49,57,49,41,34,62,10,32,32,32,32,32,32,32,32,60,103,32,116,114,97,110,115,102,111,114,109, +61,34,109,97,116,114,105,120,40,51,54,44,48,44,48,44,51,54,44,52,48,54,46,54,50,49,44,49,55,46,50,54,52,53,41,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,112,97,116,104,32,100,61,34,77,48,46,52,50, +53,44,45,48,46,49,53,54,67,48,46,52,51,53,44,45,48,46,49,52,55,32,48,46,52,51,57,44,45,48,46,49,51,53,32,48,46,52,51,57,44,45,48,46,49,50,50,67,48,46,52,51,57,44,45,48,46,49,48,57,32,48,46,52,51,53,44, +45,48,46,48,57,55,32,48,46,52,50,53,44,45,48,46,48,56,56,67,48,46,52,49,53,44,45,48,46,48,55,56,32,48,46,52,48,52,44,45,48,46,48,55,51,32,48,46,51,57,49,44,45,48,46,48,55,51,67,48,46,51,55,55,44,45,48, +46,48,55,51,32,48,46,51,54,54,44,45,48,46,48,55,56,32,48,46,51,53,54,44,45,48,46,48,56,55,76,48,46,49,49,50,44,45,48,46,51,51,50,67,48,46,49,48,50,44,45,48,46,51,52,49,32,48,46,48,57,56,44,45,48,46,51, +53,51,32,48,46,48,57,56,44,45,48,46,51,54,54,67,48,46,48,57,56,44,45,48,46,51,56,32,48,46,49,48,51,44,45,48,46,51,57,49,32,48,46,49,49,50,44,45,48,46,52,48,49,76,48,46,51,53,54,44,45,48,46,54,52,53,67, +48,46,51,54,54,44,45,48,46,54,53,52,32,48,46,51,55,55,44,45,48,46,54,53,57,32,48,46,51,57,49,44,45,48,46,54,53,57,67,48,46,52,48,52,44,45,48,46,54,53,57,32,48,46,52,49,53,44,45,48,46,54,53,52,32,48,46, +52,50,53,44,45,48,46,54,52,53,67,48,46,52,51,53,44,45,48,46,54,51,53,32,48,46,52,51,57,44,45,48,46,54,50,52,32,48,46,52,51,57,44,45,48,46,54,49,67,48,46,52,51,57,44,45,48,46,53,57,55,32,48,46,52,51,53, +44,45,48,46,53,56,53,32,48,46,52,50,53,44,45,48,46,53,55,54,76,48,46,50,49,53,44,45,48,46,51,54,54,76,48,46,52,50,53,44,45,48,46,49,53,54,90,34,32,115,116,121,108,101,61,34,102,105,108,108,45,114,117, +108,101,58,110,111,110,122,101,114,111,59,34,47,62,10,32,32,32,32,32,32,32,32,60,47,103,62,10,32,32,32,32,60,47,103,62,10,32,32,32,32,60,103,32,116,114,97,110,115,102,111,114,109,61,34,109,97,116,114, +105,120,40,49,44,48,44,48,44,49,44,50,56,44,49,53,46,52,49,57,49,41,34,62,10,32,32,32,32,32,32,32,32,60,103,32,116,114,97,110,115,102,111,114,109,61,34,109,97,116,114,105,120,40,51,54,44,48,44,48,44,51, +54,44,52,48,54,46,54,50,49,44,49,55,46,50,54,52,53,41,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,112,97,116,104,32,100,61,34,77,48,46,51,50,50,44,45,48,46,51,54,54,76,48,46,49,49,50,44,45,48,46,53, +55,54,67,48,46,49,48,51,44,45,48,46,53,56,53,32,48,46,48,57,56,44,45,48,46,53,57,55,32,48,46,48,57,56,44,45,48,46,54,49,67,48,46,48,57,56,44,45,48,46,54,50,52,32,48,46,49,48,50,44,45,48,46,54,51,53,32, +48,46,49,49,50,44,45,48,46,54,52,53,67,48,46,49,50,50,44,45,48,46,54,53,52,32,48,46,49,51,51,44,45,48,46,54,53,57,32,48,46,49,52,54,44,45,48,46,54,53,57,67,48,46,49,54,44,45,48,46,54,53,57,32,48,46,49, +55,49,44,45,48,46,54,53,52,32,48,46,49,56,49,44,45,48,46,54,52,53,76,48,46,52,50,53,44,45,48,46,52,48,49,67,48,46,52,51,53,44,45,48,46,51,57,49,32,48,46,52,51,57,44,45,48,46,51,56,32,48,46,52,51,57,44, +45,48,46,51,54,54,67,48,46,52,51,57,44,45,48,46,51,53,51,32,48,46,52,51,53,44,45,48,46,51,52,49,32,48,46,52,50,53,44,45,48,46,51,51,50,76,48,46,49,56,49,44,45,48,46,48,56,55,67,48,46,49,55,49,44,45,48, +46,48,55,56,32,48,46,49,54,44,45,48,46,48,55,51,32,48,46,49,52,54,44,45,48,46,48,55,51,67,48,46,49,51,51,44,45,48,46,48,55,51,32,48,46,49,50,50,44,45,48,46,48,55,56,32,48,46,49,49,50,44,45,48,46,48,56, +56,67,48,46,49,48,50,44,45,48,46,48,57,55,32,48,46,48,57,56,44,45,48,46,49,48,57,32,48,46,48,57,56,44,45,48,46,49,50,50,67,48,46,48,57,56,44,45,48,46,49,51,53,32,48,46,49,48,51,44,45,48,46,49,52,55,32, +48,46,49,49,50,44,45,48,46,49,53,54,76,48,46,51,50,50,44,45,48,46,51,54,54,90,34,32,115,116,121,108,101,61,34,102,105,108,108,45,114,117,108,101,58,110,111,110,122,101,114,111,59,34,47,62,10,32,32,32, +32,32,32,32,32,60,47,103,62,10,32,32,32,32,60,47,103,62,10,60,47,115,118,103,62,10,0,0}; + +const char* PresetBar::presetnavigation_svg = (const char*) resource_PresetBar_presetnavigation_svg; +const int PresetBar::presetnavigation_svgSize = 2220; + + +//[EndFile] You can add extra defines here... +//[/EndFile] + diff --git a/Source/Components/PresetBar.h b/Source/Components/PresetBar.h new file mode 100644 index 0000000..dd05f21 --- /dev/null +++ b/Source/Components/PresetBar.h @@ -0,0 +1,79 @@ +/* + ============================================================================== + + This is an automatically generated GUI class created by the Projucer! + + Be careful when adding custom code to these files, as only the code within + the "//[xyz]" and "//[/xyz]" sections will be retained when the file is loaded + and re-saved. + + Created with Projucer version: 6.0.8 + + ------------------------------------------------------------------------------ + + The Projucer is part of the JUCE library. + Copyright (c) 2020 - Raw Material Software Limited. + + ============================================================================== +*/ + +#pragma once + +//[Headers] -- You can add your own extra header files here -- +#include +class ObxdAudioProcessorEditor; +//[/Headers] + + + +//============================================================================== +/** + //[Comments] + An auto-generated component, created by the Projucer. + + Describe your class and how it works here! + //[/Comments] +*/ +class PresetBar : public juce::Component, + public Timer, + public juce::Button::Listener +{ +public: + //============================================================================== + PresetBar (ObxdAudioProcessorEditor &gui); + ~PresetBar() override; + + //============================================================================== + //[UserMethods] -- You can add your own custom methods in this section. + void timerCallback() override; + void update(); + //[/UserMethods] + + void paint (juce::Graphics& g) override; + void resized() override; + void buttonClicked (juce::Button* buttonThatWasClicked) override; + + // Binary resources: + static const char* presetnavigation_svg; + static const int presetnavigation_svgSize; + + +private: + //[UserVariables] -- You can add your own custom variables in this section. + ObxdAudioProcessorEditor &editor; + //[/UserVariables] + + //============================================================================== + std::unique_ptr presetNameLb; + std::unique_ptr previousBtn; + std::unique_ptr nextBtn; + std::unique_ptr drawable1; + + + //============================================================================== + JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (PresetBar) +}; + +//[EndFile] You can add extra defines here... +//[/EndFile] + diff --git a/Source/Images/presetnavigation.svg b/Source/Images/presetnavigation.svg new file mode 100644 index 0000000..04bd397 --- /dev/null +++ b/Source/Images/presetnavigation.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/Source/PluginEditor.cpp b/Source/PluginEditor.cpp index 40bf916..8e5be25 100755 --- a/Source/PluginEditor.cpp +++ b/Source/PluginEditor.cpp @@ -50,7 +50,11 @@ ObxdAudioProcessorEditor::ObxdAudioProcessorEditor (ObxdAudioProcessor& ownerFil #else startTimer(100); // This will fix the issue #endif + + DBG("W: " <setVisible(showPresetBar); + presetBar->setBounds( + (getWidth() - presetBar->getWidth())/2, getHeight(), presetBar->getWidth(), presetBar->getHeight()); + updatePresetBar(); repaint(); } ObxdAudioProcessorEditor::~ObxdAudioProcessorEditor() @@ -505,7 +517,7 @@ void ObxdAudioProcessorEditor::createMenu () menu->addSubMenu ("Themes", skinMenu); // About // menu.addItem(1, String("Release ") + String(JucePlugin_VersionString).dropLastCharacters(2), false); } - + menu->addItem(progStart + 1000, "Preset Bar", true, false, Image()); popupMenus.add (menu); } @@ -546,6 +558,25 @@ void ObxdAudioProcessorEditor::resultFromMenu (const Point pos) else if (result < progStart){ MenuActionCallback(result); } + else if (result == progStart + 1000){ + this->showPresetBar = !this->showPresetBar; + updatePresetBar(); + } +} + +void ObxdAudioProcessorEditor::updatePresetBar(){ + DBG(" H: " << getHeight() <<" W:" <getWidth() << " CH" <getHeight() << " CX:" <getX() << " CY: " <getY()); + if (this->showPresetBar){ + this->setSize(this->getWidth(), this->getHeight() + 40); + presetBar->setVisible(true); + } + else if (presetBar->isVisible()) { + this->setSize(this->getWidth(), this->getHeight() - 40); + presetBar->setVisible(false); + } + + presetBar->update(); + } void ObxdAudioProcessorEditor::MenuActionCallback(int action){ diff --git a/Source/PluginEditor.h b/Source/PluginEditor.h index 7d63dbd..cab6d9f 100755 --- a/Source/PluginEditor.h +++ b/Source/PluginEditor.h @@ -18,7 +18,7 @@ #include "Gui/TooglableButton.h" #include "Gui/ButtonList.h" #include "Components/SetPresetNameWindow.h" - +#include "Components/PresetBar.h" enum KeyPressCommandIDs { buttonNextProgram = 1, @@ -66,7 +66,10 @@ public: void paint (Graphics& g) override; void updateFromHost(); - + String getCurrentProgramName(){ + return processor.getProgramName(processor.getCurrentProgram()); + } + void updatePresetBar(); //============================================================================== void changeListenerCallback (ChangeBroadcaster* source) override; void buttonClicked (Button *) override; @@ -154,6 +157,7 @@ private: void resultFromMenu (const Point); void clean(); + void rebuildComponents (ObxdAudioProcessor&); void loadSkin(ObxdAudioProcessor&); //============================================================================== @@ -248,9 +252,12 @@ private: int progStart; int bankStart; int skinStart; + + bool showPresetBar = false; Array skins; Array banks; std::unique_ptr setPresetNameWindow; + std::unique_ptr presetBar; std::unique_ptr fileChooser; // Command manager ApplicationCommandManager commandManager; From adb33c8c2361612ba37210c52d2b918438a8cb1c Mon Sep 17 00:00:00 2001 From: George Reales Date: Tue, 27 Apr 2021 10:17:13 +0200 Subject: [PATCH 03/21] Preset bar show hide status --- Source/PluginEditor.cpp | 6 +++--- Source/PluginEditor.h | 1 - Source/PluginProcessor.cpp | 3 ++- Source/PluginProcessor.h | 12 +++++++++++- 4 files changed, 16 insertions(+), 6 deletions(-) mode change 100755 => 100644 Source/PluginEditor.cpp mode change 100755 => 100644 Source/PluginProcessor.cpp diff --git a/Source/PluginEditor.cpp b/Source/PluginEditor.cpp old mode 100755 new mode 100644 index 8e5be25..d0c1483 --- a/Source/PluginEditor.cpp +++ b/Source/PluginEditor.cpp @@ -273,7 +273,7 @@ void ObxdAudioProcessorEditor::loadSkin (ObxdAudioProcessor& ownerFilter) presetBar.reset(new PresetBar(*this)); addAndMakeVisible(*presetBar); - presetBar->setVisible(showPresetBar); + presetBar->setVisible(processor.getShowPresetBar()); presetBar->setBounds( (getWidth() - presetBar->getWidth())/2, getHeight(), presetBar->getWidth(), presetBar->getHeight()); updatePresetBar(); @@ -559,14 +559,14 @@ void ObxdAudioProcessorEditor::resultFromMenu (const Point pos) MenuActionCallback(result); } else if (result == progStart + 1000){ - this->showPresetBar = !this->showPresetBar; + processor.setShowPresetBar(!processor.getShowPresetBar()); updatePresetBar(); } } void ObxdAudioProcessorEditor::updatePresetBar(){ DBG(" H: " << getHeight() <<" W:" <getWidth() << " CH" <getHeight() << " CX:" <getX() << " CY: " <getY()); - if (this->showPresetBar){ + if (processor.getShowPresetBar()){ this->setSize(this->getWidth(), this->getHeight() + 40); presetBar->setVisible(true); } diff --git a/Source/PluginEditor.h b/Source/PluginEditor.h index cab6d9f..5571df5 100755 --- a/Source/PluginEditor.h +++ b/Source/PluginEditor.h @@ -253,7 +253,6 @@ private: int bankStart; int skinStart; - bool showPresetBar = false; Array skins; Array banks; std::unique_ptr setPresetNameWindow; diff --git a/Source/PluginProcessor.cpp b/Source/PluginProcessor.cpp old mode 100755 new mode 100644 index e148c78..18b88cd --- a/Source/PluginProcessor.cpp +++ b/Source/PluginProcessor.cpp @@ -70,7 +70,7 @@ ObxdAudioProcessor::ObxdAudioProcessor() options.millisecondsBeforeSaving = 2500; options.processLock = &configLock; config = std::unique_ptr (new PropertiesFile (getDocumentFolder().getChildFile ("Skin.xml"), options)); - + showPresetBar = config->getBoolValue("presetnavigation"); currentSkin = config->containsKey("skin") ? config->getValue("skin") : "Ilkka Rosma Dark"; currentBank = "000 - FMR OB-Xa Patch Book"; @@ -93,6 +93,7 @@ ObxdAudioProcessor::ObxdAudioProcessor() ObxdAudioProcessor::~ObxdAudioProcessor() { + config->saveIfNeeded(); config = nullptr; } diff --git a/Source/PluginProcessor.h b/Source/PluginProcessor.h index a03a87d..1631a74 100755 --- a/Source/PluginProcessor.h +++ b/Source/PluginProcessor.h @@ -200,7 +200,15 @@ public: void setEngineParameterValue (int, float, bool notifyToHost= false); void parameterChanged (const String&, float) override; AudioProcessorValueTreeState& getPluginState(); - + + bool getShowPresetBar(){ + return this->showPresetBar; + } + + void setShowPresetBar(bool val){ + this->showPresetBar = val; + config->setValue("presetnavigation", this->showPresetBar); + } private: //============================================================================== bool isHostAutomatedChange; @@ -229,6 +237,8 @@ public: String currentPreset; File currentPresetFile; void savePreset(); + + bool showPresetBar = false; private: Array bankFiles; Array skinFiles; From 16211dbfb24a754d2e5ba80f0e54dd5bc98eb67e Mon Sep 17 00:00:00 2001 From: George Reales Date: Wed, 5 May 2021 19:52:29 +0200 Subject: [PATCH 04/21] Update juce_StandaloneFilterWindow.h --- .../Standalone/juce_StandaloneFilterWindow.h | 91 +++++++++---------- 1 file changed, 41 insertions(+), 50 deletions(-) diff --git a/Modules/juce_audio_plugin_client/Standalone/juce_StandaloneFilterWindow.h b/Modules/juce_audio_plugin_client/Standalone/juce_StandaloneFilterWindow.h index 493aa86..636dd18 100644 --- a/Modules/juce_audio_plugin_client/Standalone/juce_StandaloneFilterWindow.h +++ b/Modules/juce_audio_plugin_client/Standalone/juce_StandaloneFilterWindow.h @@ -2,17 +2,16 @@ ============================================================================== This file is part of the JUCE library. - Copyright (c) 2017 - ROLI Ltd. + Copyright (c) 2020 - Raw Material Software Limited JUCE is an open source library subject to commercial or open-source licensing. - By using JUCE, you agree to the terms of both the JUCE 5 End-User License - Agreement and JUCE 5 Privacy Policy (both updated and effective as of the - 27th April 2017). + By using JUCE, you agree to the terms of both the JUCE 6 End-User License + Agreement and JUCE Privacy Policy (both effective as of the 16th June 2020). - End User License Agreement: www.juce.com/juce-5-licence - Privacy Policy: www.juce.com/juce-5-privacy-policy + End User License Agreement: www.juce.com/juce-6-licence + Privacy Policy: www.juce.com/juce-privacy-policy Or: You may also use this code under the terms of the GPL v3 (see www.gnu.org/licenses). @@ -24,8 +23,10 @@ ============================================================================== */ -#if JUCE_MODULE_AVAILABLE_juce_audio_plugin_client -extern juce::AudioProcessor* JUCE_API JUCE_CALLTYPE createPluginFilterOfType (juce::AudioProcessor::WrapperType type); +#pragma once + +#ifndef DOXYGEN + #include "../utility/juce_CreatePluginFilter.h" #endif namespace juce @@ -73,7 +74,7 @@ public: #if JUCE_ANDROID || JUCE_IOS bool shouldAutoOpenMidiDevices = true #else - bool shouldAutoOpenMidiDevices = true + bool shouldAutoOpenMidiDevices = false #endif ) @@ -123,15 +124,7 @@ public: //============================================================================== virtual void createPlugin() { - #if JUCE_MODULE_AVAILABLE_juce_audio_plugin_client - processor.reset (::createPluginFilterOfType (AudioProcessor::wrapperType_Standalone)); - #else - AudioProcessor::setTypeOfNextNewPlugin (AudioProcessor::wrapperType_Standalone); - processor.reset (createPluginFilter()); - AudioProcessor::setTypeOfNextNewPlugin (AudioProcessor::wrapperType_Undefined); - #endif - jassert (processor != nullptr); // Your createPluginFilter() function must return a valid object! - + processor.reset (createPluginFilterOfType (AudioProcessor::wrapperType_Standalone)); processor->disableNonMainBuses(); processor->setRateAndBufferSizeDetails (44100, 512); @@ -272,12 +265,8 @@ public: maxNumOutputs = jmax (0, bus->getDefaultLayout().size()); o.content.setOwned (new SettingsComponent (*this, deviceManager, maxNumInputs, maxNumOutputs)); -//#if JUCE_MAC o.content->setSize (500, 400); -//#endif -//#if ! JUCE_MAC -// o.content->setSize (500, 450); -//#endif + o.dialogTitle = TRANS("Audio/MIDI Settings"); o.dialogBackgroundColour = o.content->getLookAndFeel().findColour (ResizableWindow::backgroundColourId); o.escapeKeyTriggersCloseButton = true; @@ -376,7 +365,6 @@ public: return false; } - #if JUCE_MODULE_AVAILABLE_juce_gui_basics Image getIAAHostIcon (int size) { #if JUCE_IOS && JucePlugin_Enable_IAA @@ -388,7 +376,6 @@ public: return {}; } - #endif static StandalonePluginHolder* getInstance(); @@ -423,7 +410,7 @@ private: 0, maxAudioInputChannels, 0, maxAudioOutputChannels, true, - false, // disables MIDI Out // (pluginHolder.processor.get() != nullptr && pluginHolder.processor->producesMidi()), + (pluginHolder.processor.get() != nullptr && pluginHolder.processor->producesMidi()), true, false), shouldMuteLabel ("Feedback Loop:", "Feedback Loop:"), shouldMuteButton ("Mute audio input") @@ -586,13 +573,13 @@ public: #if JUCE_ANDROID || JUCE_IOS bool autoOpenMidiDevices = true #else - bool autoOpenMidiDevices = true + bool autoOpenMidiDevices = false #endif ) - : DocumentWindow ("", Colour::fromHSV (0.0f, 0.0f, 0.1f, 1.0f), DocumentWindow::minimiseButton | DocumentWindow::closeButton) - , menuBar(this) + : DocumentWindow (title, backgroundColour, DocumentWindow::minimiseButton | DocumentWindow::closeButton), + menuBar(this) #if ! JUCE_MAC - , optionsButton ("Settings") + , optionsButton ("Options") #endif { #if JUCE_IOS || JUCE_ANDROID @@ -709,20 +696,7 @@ public: void menuBarActivated (bool isActive) override {}; - void buttonClicked (Button*) override - { - pluginHolder->showAudioSettingsDialog(); - - // PopupMenu m; - // m.addItem (1, TRANS("Audio/MIDI Settings...")); - // m.addSeparator(); - // m.addItem (2, TRANS("Save current state...")); - // m.addItem (3, TRANS("Load a saved state...")); - // m.addSeparator(); - // m.addItem (4, TRANS("Reset to default state")); - - // m.showMenuAsync (PopupMenu::Options(),ModalCallbackFunction::forComponent (menuCallback, this)); - } + void handleMenuResult (int result) { @@ -745,9 +719,9 @@ public: void resized() override { DocumentWindow::resized(); - #if ! JUCE_MAC + #if ! JUCE_MAC optionsButton.setBounds (8, 6, 60, getTitleBarHeight() - 8); - #endif + #endif } virtual StandalonePluginHolder* getPluginHolder() { return pluginHolder.get(); } @@ -757,6 +731,22 @@ public: PopupMenu menu; private: + void buttonClicked (Button*) override + { + pluginHolder->showAudioSettingsDialog(); + + //PopupMenu m; + //m.addItem (1, TRANS("Audio/MIDI Settings...")); + //m.addSeparator(); + //m.addItem (2, TRANS("Save current state...")); + //m.addItem (3, TRANS("Load a saved state...")); + //m.addSeparator(); + //m.addItem (4, TRANS("Reset to default state")); + + //m.showMenuAsync (PopupMenu::Options(), + // ModalCallbackFunction::forComponent (menuCallback, this)); + } + //============================================================================== class MainContentComponent : public Component, private Value::Listener, @@ -808,8 +798,9 @@ private: notification.setBounds (r.removeFromTop (NotificationArea::height)); if (editor != nullptr) - editor->setBounds (editor->getLocalArea (this, r) - .withPosition (r.getTopLeft().transformedBy (editor->getTransform().inverted()))); + editor->setBounds (editor->getLocalArea (this, r.toFloat()) + .withPosition (r.getTopLeft().toFloat().transformedBy (editor->getTransform().inverted())) + .toNearestInt()); } private: @@ -919,9 +910,9 @@ private: }; //============================================================================== - #if ! JUCE_MAC + #if ! JUCE_MAC TextButton optionsButton; - #endif + #endif JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (StandaloneFilterWindow) }; From 919f828c2b8097e6d8fc8f8fe4d888b28098b789 Mon Sep 17 00:00:00 2001 From: George Reales Date: Wed, 5 May 2021 20:30:41 +0200 Subject: [PATCH 05/21] Update juce_StandaloneFilterWindow.h --- .../Standalone/juce_StandaloneFilterWindow.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Modules/juce_audio_plugin_client/Standalone/juce_StandaloneFilterWindow.h b/Modules/juce_audio_plugin_client/Standalone/juce_StandaloneFilterWindow.h index 636dd18..323bf07 100644 --- a/Modules/juce_audio_plugin_client/Standalone/juce_StandaloneFilterWindow.h +++ b/Modules/juce_audio_plugin_client/Standalone/juce_StandaloneFilterWindow.h @@ -74,7 +74,7 @@ public: #if JUCE_ANDROID || JUCE_IOS bool shouldAutoOpenMidiDevices = true #else - bool shouldAutoOpenMidiDevices = false + bool shouldAutoOpenMidiDevices = true #endif ) @@ -576,10 +576,10 @@ public: bool autoOpenMidiDevices = false #endif ) - : DocumentWindow (title, backgroundColour, DocumentWindow::minimiseButton | DocumentWindow::closeButton), + : DocumentWindow ("", backgroundColour, DocumentWindow::minimiseButton | DocumentWindow::closeButton), menuBar(this) #if ! JUCE_MAC - , optionsButton ("Options") + , optionsButton ("Settings") #endif { #if JUCE_IOS || JUCE_ANDROID @@ -815,7 +815,7 @@ private: #if JUCE_IOS || JUCE_ANDROID settingsButton ("Unmute Input") #else - settingsButton ("Settings...") + settingsButton ("Settings") #endif { setOpaque (true); From 8e6d1ac29ab6e4ac8cbf9386147ad01df2fd3d0b Mon Sep 17 00:00:00 2001 From: George Reales Date: Wed, 12 May 2021 18:47:15 +0200 Subject: [PATCH 06/21] Preset sync workaround and menu tweak --- Source/PluginEditor.cpp | 23 ++++++++++++++++------- Source/PluginEditor.h | 12 ++++++++++++ Source/PluginProcessor.cpp | 17 +++++++++++++++++ Source/PluginProcessor.h | 1 + 4 files changed, 46 insertions(+), 7 deletions(-) mode change 100644 => 100755 Source/PluginEditor.cpp mode change 100644 => 100755 Source/PluginProcessor.cpp diff --git a/Source/PluginEditor.cpp b/Source/PluginEditor.cpp old mode 100644 new mode 100755 index d0c1483..89c275a --- a/Source/PluginEditor.cpp +++ b/Source/PluginEditor.cpp @@ -45,11 +45,9 @@ ObxdAudioProcessorEditor::ObxdAudioProcessorEditor (ObxdAudioProcessor& ownerFil getTopLevelComponent()->addKeyListener (commandManager.getKeyMappings()); //Timer::callAfterDelay (100, [this] { this->grabKeyboardFocus(); }); // ensure that key presses are sent to the KeyPressTarget object -#if JUCE_WINDOWS - // No run timer to grab component on window -#else + startTimer(100); // This will fix the issue -#endif + DBG("W: " <addSubMenu ("Themes", skinMenu); // About // menu.addItem(1, String("Release ") + String(JucePlugin_VersionString).dropLastCharacters(2), false); } - menu->addItem(progStart + 1000, "Preset Bar", true, false, Image()); + viewMenu.addItem(progStart + 1000, "Preset Bar", true, processor.showPresetBar); + menu->addSubMenu ("View", viewMenu); popupMenus.add (menu); } @@ -560,6 +560,7 @@ void ObxdAudioProcessorEditor::resultFromMenu (const Point pos) } else if (result == progStart + 1000){ processor.setShowPresetBar(!processor.getShowPresetBar()); + createMenu(); updatePresetBar(); } } @@ -753,7 +754,11 @@ void ObxdAudioProcessorEditor::nextProgram() { if (cur == processor.getNumPrograms()) { cur = 0; } - processor.setCurrentProgram (cur); + processor.setCurrentProgram (cur, false); + + needNotifytoHost = true; + countTimer = 0; + clean(); loadSkin (processor); } @@ -762,7 +767,11 @@ void ObxdAudioProcessorEditor::prevProgram() { if (cur < 0) { cur = processor.getNumPrograms() - 1; } - processor.setCurrentProgram (cur); + processor.setCurrentProgram (cur, false); + + needNotifytoHost = true; + countTimer = 0; + clean(); loadSkin (processor); } diff --git a/Source/PluginEditor.h b/Source/PluginEditor.h index 5571df5..fa1b9c5 100755 --- a/Source/PluginEditor.h +++ b/Source/PluginEditor.h @@ -75,7 +75,17 @@ public: void buttonClicked (Button *) override; //bool keyPressed(const KeyPress & press) override; void timerCallback() override { +#if JUCE_WINDOWS || JUCE_LINUX + // No run timer to grab component on window +#else this->grabKeyboardFocus(); +#endif + countTimer ++; + if (countTimer == 4 && needNotifytoHost){ + countTimer = 0; + needNotifytoHost= false; + processor.updateHostDisplay(); + } } ApplicationCommandTarget* getNextCommandTarget() override { return nullptr; @@ -260,6 +270,8 @@ private: std::unique_ptr fileChooser; // Command manager ApplicationCommandManager commandManager; + int countTimer =0; + bool needNotifytoHost = false; }; #endif // PLUGINEDITOR_H_INCLUDED diff --git a/Source/PluginProcessor.cpp b/Source/PluginProcessor.cpp old mode 100644 new mode 100755 index 18b88cd..e246672 --- a/Source/PluginProcessor.cpp +++ b/Source/PluginProcessor.cpp @@ -167,6 +167,23 @@ int ObxdAudioProcessor::getCurrentProgram() return programs.currentProgram; } +void ObxdAudioProcessor::setCurrentProgram (int index, bool updateHost){ + programs.currentProgram = index; + programs.currentProgramPtr = programs.programs + programs.currentProgram; + isHostAutomatedChange = false; + + for (int i = 0; i < PARAM_COUNT; ++i) + setEngineParameterValue (i, programs.currentProgramPtr->values[i], true); + + isHostAutomatedChange = true; + + sendChangeMessage(); + // Will delay + if (updateHost) { + updateHostDisplay(); + } +} + void ObxdAudioProcessor::setCurrentProgram (int index) { programs.currentProgram = index; diff --git a/Source/PluginProcessor.h b/Source/PluginProcessor.h index 1631a74..d24affe 100755 --- a/Source/PluginProcessor.h +++ b/Source/PluginProcessor.h @@ -153,6 +153,7 @@ public: int getNumPrograms() override; int getCurrentProgram() override; void setCurrentProgram (int index) override; + void setCurrentProgram (int index, bool updateHost); const String getProgramName (int index) override; void changeProgramName (int index, const String& newName) override; From 561b9bc6c13dd53392cb24d12d0b384433df38ec Mon Sep 17 00:00:00 2001 From: George Reales Date: Wed, 12 May 2021 20:40:48 +0200 Subject: [PATCH 07/21] Update juce_StandaloneFilterWindow.h --- .../Standalone/juce_StandaloneFilterWindow.h | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/Modules/juce_audio_plugin_client/Standalone/juce_StandaloneFilterWindow.h b/Modules/juce_audio_plugin_client/Standalone/juce_StandaloneFilterWindow.h index 323bf07..396ce7c 100644 --- a/Modules/juce_audio_plugin_client/Standalone/juce_StandaloneFilterWindow.h +++ b/Modules/juce_audio_plugin_client/Standalone/juce_StandaloneFilterWindow.h @@ -576,8 +576,15 @@ public: bool autoOpenMidiDevices = false #endif ) +#if JUCE_MAC : DocumentWindow ("", backgroundColour, DocumentWindow::minimiseButton | DocumentWindow::closeButton), - menuBar(this) +#endif + +#if ! JUCE_MAC + : DocumentWindow (title, Colour::fromHSV (0.0f, 0.0f, 0.1f, 0.5f), DocumentWindow::minimiseButton | DocumentWindow::closeButton), +#endif + + menuBar(this) #if ! JUCE_MAC , optionsButton ("Settings") #endif @@ -585,10 +592,16 @@ public: #if JUCE_IOS || JUCE_ANDROID setTitleBarHeight (0); #else + + LookAndFeel_V4 *lfv4 = dynamic_cast(&getLookAndFeel()); +if (lfv4) { +lfv4->getCurrentColourScheme().setUIColour (LookAndFeel_V4::ColourScheme::widgetBackground, Colour::fromHSV (0.0f, 0.0f, 0.1f, 1.0f)); +} + setTitleBarButtonsRequired (DocumentWindow::minimiseButton | DocumentWindow::closeButton, false); - + #if JUCE_MAC - setUsingNativeTitleBar(true); + setUsingNativeTitleBar(false); menu.addItem (1, TRANS("Audio/MIDI Settings...")); MenuBarModel::setMacMainMenu (this, &menu); #else From 9c433f72c1c8d7999350986251ace4f3be3f52db Mon Sep 17 00:00:00 2001 From: George Reales Date: Thu, 13 May 2021 09:47:23 +0200 Subject: [PATCH 08/21] Update juce_StandaloneFilterWindow.h --- .../Standalone/juce_StandaloneFilterWindow.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Modules/juce_audio_plugin_client/Standalone/juce_StandaloneFilterWindow.h b/Modules/juce_audio_plugin_client/Standalone/juce_StandaloneFilterWindow.h index 396ce7c..b5a7ef7 100644 --- a/Modules/juce_audio_plugin_client/Standalone/juce_StandaloneFilterWindow.h +++ b/Modules/juce_audio_plugin_client/Standalone/juce_StandaloneFilterWindow.h @@ -601,7 +601,7 @@ lfv4->getCurrentColourScheme().setUIColour (LookAndFeel_V4::ColourScheme::widget setTitleBarButtonsRequired (DocumentWindow::minimiseButton | DocumentWindow::closeButton, false); #if JUCE_MAC - setUsingNativeTitleBar(false); + setUsingNativeTitleBar(true); menu.addItem (1, TRANS("Audio/MIDI Settings...")); MenuBarModel::setMacMainMenu (this, &menu); #else From 89bb66f9ca0c7cb846ee248e4faf736c65e35d82 Mon Sep 17 00:00:00 2001 From: George Reales Date: Thu, 13 May 2021 09:52:04 +0200 Subject: [PATCH 09/21] Update presetnavigation.svg --- Source/Images/presetnavigation.svg | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/Source/Images/presetnavigation.svg b/Source/Images/presetnavigation.svg index 04bd397..f3b3fde 100644 --- a/Source/Images/presetnavigation.svg +++ b/Source/Images/presetnavigation.svg @@ -1,19 +1,16 @@ - + - - - - + - + - + From e076db2dcb4ad978c32f04d2c6cb3c7820165b1d Mon Sep 17 00:00:00 2001 From: reales <13709183+reales@users.noreply.github.com> Date: Thu, 13 May 2021 10:45:06 +0200 Subject: [PATCH 10/21] Update PresetBar.cpp --- Source/Components/PresetBar.cpp | 60 ++++++++++++++++----------------- 1 file changed, 29 insertions(+), 31 deletions(-) diff --git a/Source/Components/PresetBar.cpp b/Source/Components/PresetBar.cpp index 80213d7..5a901c9 100644 --- a/Source/Components/PresetBar.cpp +++ b/Source/Components/PresetBar.cpp @@ -206,7 +206,7 @@ END_JUCER_METADATA //============================================================================== // Binary resources - be careful not to edit any of these sections! -// JUCER_RESOURCE: presetnavigation_svg, 2220, "../Images/presetnavigation.svg" +// JUCER_RESOURCE: presetnavigation_svg, 2067, "../../../../GitHub/OB-Xd/Source/Images/presetnavigation.svg" static const unsigned char resource_PresetBar_presetnavigation_svg[] = { 60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101,110,99,111,100,105,110,103,61,34,85,84,70,45,56,34,32, 115,116,97,110,100,97,108,111,110,101,61,34,110,111,34,63,62,10,60,33,68,79,67,84,89,80,69,32,115,118,103,32,80,85,66,76,73,67,32,34,45,47,47,87,51,67,47,47,68,84,68,32,83,86,71,32,49,46,49,47,47,69,78, 34,32,34,104,116,116,112,58,47,47,119,119,119,46,119,51,46,111,114,103,47,71,114,97,112,104,105,99,115,47,83,86,71,47,49,46,49,47,68,84,68,47,115,118,103,49,49,46,100,116,100,34,62,10,60,115,118,103,32, @@ -214,38 +214,36 @@ static const unsigned char resource_PresetBar_presetnavigation_svg[] = { 60,63,1 49,34,32,120,109,108,110,115,61,34,104,116,116,112,58,47,47,119,119,119,46,119,51,46,111,114,103,47,50,48,48,48,47,115,118,103,34,32,120,109,108,110,115,58,120,108,105,110,107,61,34,104,116,116,112,58, 47,47,119,119,119,46,119,51,46,111,114,103,47,49,57,57,57,47,120,108,105,110,107,34,32,120,109,108,58,115,112,97,99,101,61,34,112,114,101,115,101,114,118,101,34,32,120,109,108,110,115,58,115,101,114,105, 102,61,34,104,116,116,112,58,47,47,119,119,119,46,115,101,114,105,102,46,99,111,109,47,34,32,115,116,121,108,101,61,34,102,105,108,108,45,114,117,108,101,58,101,118,101,110,111,100,100,59,99,108,105,112, -45,114,117,108,101,58,101,118,101,110,111,100,100,59,115,116,114,111,107,101,45,108,105,110,101,106,111,105,110,58,114,111,117,110,100,59,115,116,114,111,107,101,45,109,105,116,101,114,108,105,109,105, -116,58,50,59,34,62,10,32,32,32,32,60,114,101,99,116,32,120,61,34,48,34,32,121,61,34,48,34,32,119,105,100,116,104,61,34,52,55,49,34,32,104,101,105,103,104,116,61,34,51,57,34,47,62,10,32,32,32,32,60,103, -32,116,114,97,110,115,102,111,114,109,61,34,109,97,116,114,105,120,40,49,44,48,44,48,44,49,46,48,50,57,52,49,44,48,44,45,48,46,48,53,56,56,50,51,53,41,34,62,10,32,32,32,32,32,32,32,32,60,112,97,116,104, -32,100,61,34,77,52,54,53,44,49,48,46,53,67,52,54,53,44,53,46,56,48,57,32,52,54,49,46,48,55,57,44,50,32,52,53,54,46,50,53,44,50,76,49,50,46,55,53,44,50,67,55,46,57,50,49,44,50,32,52,44,53,46,56,48,57,32, -52,44,49,48,46,53,76,52,44,50,55,46,53,67,52,44,51,50,46,49,57,49,32,55,46,57,50,49,44,51,54,32,49,50,46,55,53,44,51,54,76,52,53,54,46,50,53,44,51,54,67,52,54,49,46,48,55,57,44,51,54,32,52,54,53,44,51, -50,46,49,57,49,32,52,54,53,44,50,55,46,53,76,52,54,53,44,49,48,46,53,90,34,32,115,116,121,108,101,61,34,102,105,108,108,58,114,103,98,40,49,50,49,44,49,50,49,44,49,50,49,41,59,34,47,62,10,32,32,32,32, -60,47,103,62,10,32,32,32,32,60,112,97,116,104,32,100,61,34,77,51,57,56,44,57,46,50,48,53,67,51,57,56,44,55,46,52,51,54,32,51,57,54,46,53,54,52,44,54,32,51,57,52,46,55,57,53,44,54,76,50,52,46,50,48,53, -44,54,67,50,50,46,52,51,54,44,54,32,50,49,44,55,46,52,51,54,32,50,49,44,57,46,50,48,53,76,50,49,44,50,57,46,55,57,53,67,50,49,44,51,49,46,53,54,52,32,50,50,46,52,51,54,44,51,51,32,50,52,46,50,48,53,44, -51,51,76,51,57,52,46,55,57,53,44,51,51,67,51,57,54,46,53,54,52,44,51,51,32,51,57,56,44,51,49,46,53,54,52,32,51,57,56,44,50,57,46,55,57,53,76,51,57,56,44,57,46,50,48,53,90,34,47,62,10,32,32,32,32,60,103, -32,116,114,97,110,115,102,111,114,109,61,34,109,97,116,114,105,120,40,49,44,48,44,48,44,49,44,49,44,49,53,46,52,49,57,49,41,34,62,10,32,32,32,32,32,32,32,32,60,103,32,116,114,97,110,115,102,111,114,109, -61,34,109,97,116,114,105,120,40,51,54,44,48,44,48,44,51,54,44,52,48,54,46,54,50,49,44,49,55,46,50,54,52,53,41,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,112,97,116,104,32,100,61,34,77,48,46,52,50, -53,44,45,48,46,49,53,54,67,48,46,52,51,53,44,45,48,46,49,52,55,32,48,46,52,51,57,44,45,48,46,49,51,53,32,48,46,52,51,57,44,45,48,46,49,50,50,67,48,46,52,51,57,44,45,48,46,49,48,57,32,48,46,52,51,53,44, -45,48,46,48,57,55,32,48,46,52,50,53,44,45,48,46,48,56,56,67,48,46,52,49,53,44,45,48,46,48,55,56,32,48,46,52,48,52,44,45,48,46,48,55,51,32,48,46,51,57,49,44,45,48,46,48,55,51,67,48,46,51,55,55,44,45,48, -46,48,55,51,32,48,46,51,54,54,44,45,48,46,48,55,56,32,48,46,51,53,54,44,45,48,46,48,56,55,76,48,46,49,49,50,44,45,48,46,51,51,50,67,48,46,49,48,50,44,45,48,46,51,52,49,32,48,46,48,57,56,44,45,48,46,51, -53,51,32,48,46,48,57,56,44,45,48,46,51,54,54,67,48,46,48,57,56,44,45,48,46,51,56,32,48,46,49,48,51,44,45,48,46,51,57,49,32,48,46,49,49,50,44,45,48,46,52,48,49,76,48,46,51,53,54,44,45,48,46,54,52,53,67, -48,46,51,54,54,44,45,48,46,54,53,52,32,48,46,51,55,55,44,45,48,46,54,53,57,32,48,46,51,57,49,44,45,48,46,54,53,57,67,48,46,52,48,52,44,45,48,46,54,53,57,32,48,46,52,49,53,44,45,48,46,54,53,52,32,48,46, -52,50,53,44,45,48,46,54,52,53,67,48,46,52,51,53,44,45,48,46,54,51,53,32,48,46,52,51,57,44,45,48,46,54,50,52,32,48,46,52,51,57,44,45,48,46,54,49,67,48,46,52,51,57,44,45,48,46,53,57,55,32,48,46,52,51,53, -44,45,48,46,53,56,53,32,48,46,52,50,53,44,45,48,46,53,55,54,76,48,46,50,49,53,44,45,48,46,51,54,54,76,48,46,52,50,53,44,45,48,46,49,53,54,90,34,32,115,116,121,108,101,61,34,102,105,108,108,45,114,117, -108,101,58,110,111,110,122,101,114,111,59,34,47,62,10,32,32,32,32,32,32,32,32,60,47,103,62,10,32,32,32,32,60,47,103,62,10,32,32,32,32,60,103,32,116,114,97,110,115,102,111,114,109,61,34,109,97,116,114, -105,120,40,49,44,48,44,48,44,49,44,50,56,44,49,53,46,52,49,57,49,41,34,62,10,32,32,32,32,32,32,32,32,60,103,32,116,114,97,110,115,102,111,114,109,61,34,109,97,116,114,105,120,40,51,54,44,48,44,48,44,51, -54,44,52,48,54,46,54,50,49,44,49,55,46,50,54,52,53,41,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,112,97,116,104,32,100,61,34,77,48,46,51,50,50,44,45,48,46,51,54,54,76,48,46,49,49,50,44,45,48,46,53, -55,54,67,48,46,49,48,51,44,45,48,46,53,56,53,32,48,46,48,57,56,44,45,48,46,53,57,55,32,48,46,48,57,56,44,45,48,46,54,49,67,48,46,48,57,56,44,45,48,46,54,50,52,32,48,46,49,48,50,44,45,48,46,54,51,53,32, -48,46,49,49,50,44,45,48,46,54,52,53,67,48,46,49,50,50,44,45,48,46,54,53,52,32,48,46,49,51,51,44,45,48,46,54,53,57,32,48,46,49,52,54,44,45,48,46,54,53,57,67,48,46,49,54,44,45,48,46,54,53,57,32,48,46,49, -55,49,44,45,48,46,54,53,52,32,48,46,49,56,49,44,45,48,46,54,52,53,76,48,46,52,50,53,44,45,48,46,52,48,49,67,48,46,52,51,53,44,45,48,46,51,57,49,32,48,46,52,51,57,44,45,48,46,51,56,32,48,46,52,51,57,44, -45,48,46,51,54,54,67,48,46,52,51,57,44,45,48,46,51,53,51,32,48,46,52,51,53,44,45,48,46,51,52,49,32,48,46,52,50,53,44,45,48,46,51,51,50,76,48,46,49,56,49,44,45,48,46,48,56,55,67,48,46,49,55,49,44,45,48, -46,48,55,56,32,48,46,49,54,44,45,48,46,48,55,51,32,48,46,49,52,54,44,45,48,46,48,55,51,67,48,46,49,51,51,44,45,48,46,48,55,51,32,48,46,49,50,50,44,45,48,46,48,55,56,32,48,46,49,49,50,44,45,48,46,48,56, -56,67,48,46,49,48,50,44,45,48,46,48,57,55,32,48,46,48,57,56,44,45,48,46,49,48,57,32,48,46,48,57,56,44,45,48,46,49,50,50,67,48,46,48,57,56,44,45,48,46,49,51,53,32,48,46,49,48,51,44,45,48,46,49,52,55,32, -48,46,49,49,50,44,45,48,46,49,53,54,76,48,46,51,50,50,44,45,48,46,51,54,54,90,34,32,115,116,121,108,101,61,34,102,105,108,108,45,114,117,108,101,58,110,111,110,122,101,114,111,59,34,47,62,10,32,32,32, -32,32,32,32,32,60,47,103,62,10,32,32,32,32,60,47,103,62,10,60,47,115,118,103,62,10,0,0}; +45,114,117,108,101,58,101,118,101,110,111,100,100,59,115,116,114,111,107,101,45,108,105,110,101,99,97,112,58,114,111,117,110,100,59,115,116,114,111,107,101,45,108,105,110,101,106,111,105,110,58,114,111, +117,110,100,59,115,116,114,111,107,101,45,109,105,116,101,114,108,105,109,105,116,58,49,46,53,59,34,62,10,32,32,32,32,60,114,101,99,116,32,120,61,34,48,34,32,121,61,34,48,34,32,119,105,100,116,104,61, +34,52,55,49,34,32,104,101,105,103,104,116,61,34,51,57,34,47,62,10,32,32,32,32,60,112,97,116,104,32,100,61,34,77,51,57,56,44,57,46,50,48,53,67,51,57,56,44,55,46,52,51,54,32,51,57,54,46,53,54,52,44,54,32, +51,57,52,46,55,57,53,44,54,76,50,52,46,50,48,53,44,54,67,50,50,46,52,51,54,44,54,32,50,49,44,55,46,52,51,54,32,50,49,44,57,46,50,48,53,76,50,49,44,50,57,46,55,57,53,67,50,49,44,51,49,46,53,54,52,32,50, +50,46,52,51,54,44,51,51,32,50,52,46,50,48,53,44,51,51,76,51,57,52,46,55,57,53,44,51,51,67,51,57,54,46,53,54,52,44,51,51,32,51,57,56,44,51,49,46,53,54,52,32,51,57,56,44,50,57,46,55,57,53,76,51,57,56,44, +57,46,50,48,53,90,34,32,115,116,121,108,101,61,34,115,116,114,111,107,101,58,114,103,98,40,49,50,49,44,49,50,49,44,49,50,49,41,59,115,116,114,111,107,101,45,119,105,100,116,104,58,49,112,120,59,34,47, +62,10,32,32,32,32,60,103,32,116,114,97,110,115,102,111,114,109,61,34,109,97,116,114,105,120,40,49,44,48,44,48,44,49,44,49,44,49,53,46,52,49,57,49,41,34,62,10,32,32,32,32,32,32,32,32,60,103,32,116,114, +97,110,115,102,111,114,109,61,34,109,97,116,114,105,120,40,51,54,44,48,44,48,44,51,54,44,52,48,54,46,54,50,49,44,49,55,46,50,54,52,53,41,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,112,97,116,104, +32,100,61,34,77,48,46,52,50,53,44,45,48,46,49,53,54,67,48,46,52,51,53,44,45,48,46,49,52,55,32,48,46,52,51,57,44,45,48,46,49,51,53,32,48,46,52,51,57,44,45,48,46,49,50,50,67,48,46,52,51,57,44,45,48,46,49, +48,57,32,48,46,52,51,53,44,45,48,46,48,57,55,32,48,46,52,50,53,44,45,48,46,48,56,56,67,48,46,52,49,53,44,45,48,46,48,55,56,32,48,46,52,48,52,44,45,48,46,48,55,51,32,48,46,51,57,49,44,45,48,46,48,55,51, +67,48,46,51,55,55,44,45,48,46,48,55,51,32,48,46,51,54,54,44,45,48,46,48,55,56,32,48,46,51,53,54,44,45,48,46,48,56,55,76,48,46,49,49,50,44,45,48,46,51,51,50,67,48,46,49,48,50,44,45,48,46,51,52,49,32,48, +46,48,57,56,44,45,48,46,51,53,51,32,48,46,48,57,56,44,45,48,46,51,54,54,67,48,46,48,57,56,44,45,48,46,51,56,32,48,46,49,48,51,44,45,48,46,51,57,49,32,48,46,49,49,50,44,45,48,46,52,48,49,76,48,46,51,53, +54,44,45,48,46,54,52,53,67,48,46,51,54,54,44,45,48,46,54,53,52,32,48,46,51,55,55,44,45,48,46,54,53,57,32,48,46,51,57,49,44,45,48,46,54,53,57,67,48,46,52,48,52,44,45,48,46,54,53,57,32,48,46,52,49,53,44, +45,48,46,54,53,52,32,48,46,52,50,53,44,45,48,46,54,52,53,67,48,46,52,51,53,44,45,48,46,54,51,53,32,48,46,52,51,57,44,45,48,46,54,50,52,32,48,46,52,51,57,44,45,48,46,54,49,67,48,46,52,51,57,44,45,48,46, +53,57,55,32,48,46,52,51,53,44,45,48,46,53,56,53,32,48,46,52,50,53,44,45,48,46,53,55,54,76,48,46,50,49,53,44,45,48,46,51,54,54,76,48,46,52,50,53,44,45,48,46,49,53,54,90,34,32,115,116,121,108,101,61,34, +102,105,108,108,58,114,103,98,40,49,50,49,44,49,50,49,44,49,50,49,41,59,102,105,108,108,45,114,117,108,101,58,110,111,110,122,101,114,111,59,34,47,62,10,32,32,32,32,32,32,32,32,60,47,103,62,10,32,32,32, +32,60,47,103,62,10,32,32,32,32,60,103,32,116,114,97,110,115,102,111,114,109,61,34,109,97,116,114,105,120,40,49,44,48,44,48,44,49,44,50,56,44,49,53,46,52,49,57,49,41,34,62,10,32,32,32,32,32,32,32,32,60, +103,32,116,114,97,110,115,102,111,114,109,61,34,109,97,116,114,105,120,40,51,54,44,48,44,48,44,51,54,44,52,48,54,46,54,50,49,44,49,55,46,50,54,52,53,41,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, +112,97,116,104,32,100,61,34,77,48,46,51,50,50,44,45,48,46,51,54,54,76,48,46,49,49,50,44,45,48,46,53,55,54,67,48,46,49,48,51,44,45,48,46,53,56,53,32,48,46,48,57,56,44,45,48,46,53,57,55,32,48,46,48,57,56, +44,45,48,46,54,49,67,48,46,48,57,56,44,45,48,46,54,50,52,32,48,46,49,48,50,44,45,48,46,54,51,53,32,48,46,49,49,50,44,45,48,46,54,52,53,67,48,46,49,50,50,44,45,48,46,54,53,52,32,48,46,49,51,51,44,45,48, +46,54,53,57,32,48,46,49,52,54,44,45,48,46,54,53,57,67,48,46,49,54,44,45,48,46,54,53,57,32,48,46,49,55,49,44,45,48,46,54,53,52,32,48,46,49,56,49,44,45,48,46,54,52,53,76,48,46,52,50,53,44,45,48,46,52,48, +49,67,48,46,52,51,53,44,45,48,46,51,57,49,32,48,46,52,51,57,44,45,48,46,51,56,32,48,46,52,51,57,44,45,48,46,51,54,54,67,48,46,52,51,57,44,45,48,46,51,53,51,32,48,46,52,51,53,44,45,48,46,51,52,49,32,48, +46,52,50,53,44,45,48,46,51,51,50,76,48,46,49,56,49,44,45,48,46,48,56,55,67,48,46,49,55,49,44,45,48,46,48,55,56,32,48,46,49,54,44,45,48,46,48,55,51,32,48,46,49,52,54,44,45,48,46,48,55,51,67,48,46,49,51, +51,44,45,48,46,48,55,51,32,48,46,49,50,50,44,45,48,46,48,55,56,32,48,46,49,49,50,44,45,48,46,48,56,56,67,48,46,49,48,50,44,45,48,46,48,57,55,32,48,46,48,57,56,44,45,48,46,49,48,57,32,48,46,48,57,56,44, +45,48,46,49,50,50,67,48,46,48,57,56,44,45,48,46,49,51,53,32,48,46,49,48,51,44,45,48,46,49,52,55,32,48,46,49,49,50,44,45,48,46,49,53,54,76,48,46,51,50,50,44,45,48,46,51,54,54,90,34,32,115,116,121,108,101, +61,34,102,105,108,108,58,114,103,98,40,49,50,49,44,49,50,49,44,49,50,49,41,59,102,105,108,108,45,114,117,108,101,58,110,111,110,122,101,114,111,59,34,47,62,10,32,32,32,32,32,32,32,32,60,47,103,62,10,32, +32,32,32,60,47,103,62,10,60,47,115,118,103,62,10,0,0}; const char* PresetBar::presetnavigation_svg = (const char*) resource_PresetBar_presetnavigation_svg; -const int PresetBar::presetnavigation_svgSize = 2220; +const int PresetBar::presetnavigation_svgSize = 2067; //[EndFile] You can add extra defines here... From 895f7caa201f40f5df4bb7886f22945ddd44b8d7 Mon Sep 17 00:00:00 2001 From: reales <13709183+reales@users.noreply.github.com> Date: Thu, 13 May 2021 10:54:00 +0200 Subject: [PATCH 11/21] SVG tweaks --- Source/Components/PresetBar.cpp | 46 +++++++++++++++--------------- Source/Images/presetnavigation.svg | 8 +++--- 2 files changed, 27 insertions(+), 27 deletions(-) diff --git a/Source/Components/PresetBar.cpp b/Source/Components/PresetBar.cpp index 5a901c9..354cb26 100644 --- a/Source/Components/PresetBar.cpp +++ b/Source/Components/PresetBar.cpp @@ -206,7 +206,7 @@ END_JUCER_METADATA //============================================================================== // Binary resources - be careful not to edit any of these sections! -// JUCER_RESOURCE: presetnavigation_svg, 2067, "../../../../GitHub/OB-Xd/Source/Images/presetnavigation.svg" +// JUCER_RESOURCE: presetnavigation_svg, 2078, "../../../../GitHub/OB-Xd/Source/Images/presetnavigation.svg" static const unsigned char resource_PresetBar_presetnavigation_svg[] = { 60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101,110,99,111,100,105,110,103,61,34,85,84,70,45,56,34,32, 115,116,97,110,100,97,108,111,110,101,61,34,110,111,34,63,62,10,60,33,68,79,67,84,89,80,69,32,115,118,103,32,80,85,66,76,73,67,32,34,45,47,47,87,51,67,47,47,68,84,68,32,83,86,71,32,49,46,49,47,47,69,78, 34,32,34,104,116,116,112,58,47,47,119,119,119,46,119,51,46,111,114,103,47,71,114,97,112,104,105,99,115,47,83,86,71,47,49,46,49,47,68,84,68,47,115,118,103,49,49,46,100,116,100,34,62,10,60,115,118,103,32, @@ -220,30 +220,30 @@ static const unsigned char resource_PresetBar_presetnavigation_svg[] = { 60,63,1 51,57,52,46,55,57,53,44,54,76,50,52,46,50,48,53,44,54,67,50,50,46,52,51,54,44,54,32,50,49,44,55,46,52,51,54,32,50,49,44,57,46,50,48,53,76,50,49,44,50,57,46,55,57,53,67,50,49,44,51,49,46,53,54,52,32,50, 50,46,52,51,54,44,51,51,32,50,52,46,50,48,53,44,51,51,76,51,57,52,46,55,57,53,44,51,51,67,51,57,54,46,53,54,52,44,51,51,32,51,57,56,44,51,49,46,53,54,52,32,51,57,56,44,50,57,46,55,57,53,76,51,57,56,44, 57,46,50,48,53,90,34,32,115,116,121,108,101,61,34,115,116,114,111,107,101,58,114,103,98,40,49,50,49,44,49,50,49,44,49,50,49,41,59,115,116,114,111,107,101,45,119,105,100,116,104,58,49,112,120,59,34,47, -62,10,32,32,32,32,60,103,32,116,114,97,110,115,102,111,114,109,61,34,109,97,116,114,105,120,40,49,44,48,44,48,44,49,44,49,44,49,53,46,52,49,57,49,41,34,62,10,32,32,32,32,32,32,32,32,60,103,32,116,114, -97,110,115,102,111,114,109,61,34,109,97,116,114,105,120,40,51,54,44,48,44,48,44,51,54,44,52,48,54,46,54,50,49,44,49,55,46,50,54,52,53,41,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,112,97,116,104, -32,100,61,34,77,48,46,52,50,53,44,45,48,46,49,53,54,67,48,46,52,51,53,44,45,48,46,49,52,55,32,48,46,52,51,57,44,45,48,46,49,51,53,32,48,46,52,51,57,44,45,48,46,49,50,50,67,48,46,52,51,57,44,45,48,46,49, -48,57,32,48,46,52,51,53,44,45,48,46,48,57,55,32,48,46,52,50,53,44,45,48,46,48,56,56,67,48,46,52,49,53,44,45,48,46,48,55,56,32,48,46,52,48,52,44,45,48,46,48,55,51,32,48,46,51,57,49,44,45,48,46,48,55,51, -67,48,46,51,55,55,44,45,48,46,48,55,51,32,48,46,51,54,54,44,45,48,46,48,55,56,32,48,46,51,53,54,44,45,48,46,48,56,55,76,48,46,49,49,50,44,45,48,46,51,51,50,67,48,46,49,48,50,44,45,48,46,51,52,49,32,48, -46,48,57,56,44,45,48,46,51,53,51,32,48,46,48,57,56,44,45,48,46,51,54,54,67,48,46,48,57,56,44,45,48,46,51,56,32,48,46,49,48,51,44,45,48,46,51,57,49,32,48,46,49,49,50,44,45,48,46,52,48,49,76,48,46,51,53, -54,44,45,48,46,54,52,53,67,48,46,51,54,54,44,45,48,46,54,53,52,32,48,46,51,55,55,44,45,48,46,54,53,57,32,48,46,51,57,49,44,45,48,46,54,53,57,67,48,46,52,48,52,44,45,48,46,54,53,57,32,48,46,52,49,53,44, -45,48,46,54,53,52,32,48,46,52,50,53,44,45,48,46,54,52,53,67,48,46,52,51,53,44,45,48,46,54,51,53,32,48,46,52,51,57,44,45,48,46,54,50,52,32,48,46,52,51,57,44,45,48,46,54,49,67,48,46,52,51,57,44,45,48,46, -53,57,55,32,48,46,52,51,53,44,45,48,46,53,56,53,32,48,46,52,50,53,44,45,48,46,53,55,54,76,48,46,50,49,53,44,45,48,46,51,54,54,76,48,46,52,50,53,44,45,48,46,49,53,54,90,34,32,115,116,121,108,101,61,34, -102,105,108,108,58,114,103,98,40,49,50,49,44,49,50,49,44,49,50,49,41,59,102,105,108,108,45,114,117,108,101,58,110,111,110,122,101,114,111,59,34,47,62,10,32,32,32,32,32,32,32,32,60,47,103,62,10,32,32,32, -32,60,47,103,62,10,32,32,32,32,60,103,32,116,114,97,110,115,102,111,114,109,61,34,109,97,116,114,105,120,40,49,44,48,44,48,44,49,44,50,56,44,49,53,46,52,49,57,49,41,34,62,10,32,32,32,32,32,32,32,32,60, -103,32,116,114,97,110,115,102,111,114,109,61,34,109,97,116,114,105,120,40,51,54,44,48,44,48,44,51,54,44,52,48,54,46,54,50,49,44,49,55,46,50,54,52,53,41,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, -112,97,116,104,32,100,61,34,77,48,46,51,50,50,44,45,48,46,51,54,54,76,48,46,49,49,50,44,45,48,46,53,55,54,67,48,46,49,48,51,44,45,48,46,53,56,53,32,48,46,48,57,56,44,45,48,46,53,57,55,32,48,46,48,57,56, -44,45,48,46,54,49,67,48,46,48,57,56,44,45,48,46,54,50,52,32,48,46,49,48,50,44,45,48,46,54,51,53,32,48,46,49,49,50,44,45,48,46,54,52,53,67,48,46,49,50,50,44,45,48,46,54,53,52,32,48,46,49,51,51,44,45,48, -46,54,53,57,32,48,46,49,52,54,44,45,48,46,54,53,57,67,48,46,49,54,44,45,48,46,54,53,57,32,48,46,49,55,49,44,45,48,46,54,53,52,32,48,46,49,56,49,44,45,48,46,54,52,53,76,48,46,52,50,53,44,45,48,46,52,48, -49,67,48,46,52,51,53,44,45,48,46,51,57,49,32,48,46,52,51,57,44,45,48,46,51,56,32,48,46,52,51,57,44,45,48,46,51,54,54,67,48,46,52,51,57,44,45,48,46,51,53,51,32,48,46,52,51,53,44,45,48,46,51,52,49,32,48, -46,52,50,53,44,45,48,46,51,51,50,76,48,46,49,56,49,44,45,48,46,48,56,55,67,48,46,49,55,49,44,45,48,46,48,55,56,32,48,46,49,54,44,45,48,46,48,55,51,32,48,46,49,52,54,44,45,48,46,48,55,51,67,48,46,49,51, -51,44,45,48,46,48,55,51,32,48,46,49,50,50,44,45,48,46,48,55,56,32,48,46,49,49,50,44,45,48,46,48,56,56,67,48,46,49,48,50,44,45,48,46,48,57,55,32,48,46,48,57,56,44,45,48,46,49,48,57,32,48,46,48,57,56,44, -45,48,46,49,50,50,67,48,46,48,57,56,44,45,48,46,49,51,53,32,48,46,49,48,51,44,45,48,46,49,52,55,32,48,46,49,49,50,44,45,48,46,49,53,54,76,48,46,51,50,50,44,45,48,46,51,54,54,90,34,32,115,116,121,108,101, -61,34,102,105,108,108,58,114,103,98,40,49,50,49,44,49,50,49,44,49,50,49,41,59,102,105,108,108,45,114,117,108,101,58,110,111,110,122,101,114,111,59,34,47,62,10,32,32,32,32,32,32,32,32,60,47,103,62,10,32, -32,32,32,60,47,103,62,10,60,47,115,118,103,62,10,0,0}; +62,10,32,32,32,32,60,103,32,116,114,97,110,115,102,111,114,109,61,34,109,97,116,114,105,120,40,49,44,48,44,48,44,49,44,52,46,50,50,50,54,54,44,49,49,46,48,50,52,53,41,34,62,10,32,32,32,32,32,32,32,32, +60,103,32,116,114,97,110,115,102,111,114,109,61,34,109,97,116,114,105,120,40,50,52,44,48,44,48,44,50,52,44,52,48,54,46,54,50,49,44,49,55,46,50,54,52,53,41,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +60,112,97,116,104,32,100,61,34,77,48,46,52,50,53,44,45,48,46,49,53,54,67,48,46,52,51,53,44,45,48,46,49,52,55,32,48,46,52,51,57,44,45,48,46,49,51,53,32,48,46,52,51,57,44,45,48,46,49,50,50,67,48,46,52,51, +57,44,45,48,46,49,48,57,32,48,46,52,51,53,44,45,48,46,48,57,55,32,48,46,52,50,53,44,45,48,46,48,56,56,67,48,46,52,49,53,44,45,48,46,48,55,56,32,48,46,52,48,52,44,45,48,46,48,55,51,32,48,46,51,57,49,44, +45,48,46,48,55,51,67,48,46,51,55,55,44,45,48,46,48,55,51,32,48,46,51,54,54,44,45,48,46,48,55,56,32,48,46,51,53,54,44,45,48,46,48,56,55,76,48,46,49,49,50,44,45,48,46,51,51,50,67,48,46,49,48,50,44,45,48, +46,51,52,49,32,48,46,48,57,56,44,45,48,46,51,53,51,32,48,46,48,57,56,44,45,48,46,51,54,54,67,48,46,48,57,56,44,45,48,46,51,56,32,48,46,49,48,51,44,45,48,46,51,57,49,32,48,46,49,49,50,44,45,48,46,52,48, +49,76,48,46,51,53,54,44,45,48,46,54,52,53,67,48,46,51,54,54,44,45,48,46,54,53,52,32,48,46,51,55,55,44,45,48,46,54,53,57,32,48,46,51,57,49,44,45,48,46,54,53,57,67,48,46,52,48,52,44,45,48,46,54,53,57,32, +48,46,52,49,53,44,45,48,46,54,53,52,32,48,46,52,50,53,44,45,48,46,54,52,53,67,48,46,52,51,53,44,45,48,46,54,51,53,32,48,46,52,51,57,44,45,48,46,54,50,52,32,48,46,52,51,57,44,45,48,46,54,49,67,48,46,52, +51,57,44,45,48,46,53,57,55,32,48,46,52,51,53,44,45,48,46,53,56,53,32,48,46,52,50,53,44,45,48,46,53,55,54,76,48,46,50,49,53,44,45,48,46,51,54,54,76,48,46,52,50,53,44,45,48,46,49,53,54,90,34,32,115,116, +121,108,101,61,34,102,105,108,108,58,114,103,98,40,49,50,49,44,49,50,49,44,49,50,49,41,59,102,105,108,108,45,114,117,108,101,58,110,111,110,122,101,114,111,59,34,47,62,10,32,32,32,32,32,32,32,32,60,47, +103,62,10,32,32,32,32,60,47,103,62,10,32,32,32,32,60,103,32,116,114,97,110,115,102,111,114,109,61,34,109,97,116,114,105,120,40,49,44,48,44,48,44,49,44,51,49,46,50,50,50,55,44,49,49,46,48,50,52,53,41,34, +62,10,32,32,32,32,32,32,32,32,60,103,32,116,114,97,110,115,102,111,114,109,61,34,109,97,116,114,105,120,40,50,52,44,48,44,48,44,50,52,44,52,48,54,46,54,50,49,44,49,55,46,50,54,52,53,41,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,60,112,97,116,104,32,100,61,34,77,48,46,51,50,50,44,45,48,46,51,54,54,76,48,46,49,49,50,44,45,48,46,53,55,54,67,48,46,49,48,51,44,45,48,46,53,56,53,32,48,46,48,57,56,44,45, +48,46,53,57,55,32,48,46,48,57,56,44,45,48,46,54,49,67,48,46,48,57,56,44,45,48,46,54,50,52,32,48,46,49,48,50,44,45,48,46,54,51,53,32,48,46,49,49,50,44,45,48,46,54,52,53,67,48,46,49,50,50,44,45,48,46,54, +53,52,32,48,46,49,51,51,44,45,48,46,54,53,57,32,48,46,49,52,54,44,45,48,46,54,53,57,67,48,46,49,54,44,45,48,46,54,53,57,32,48,46,49,55,49,44,45,48,46,54,53,52,32,48,46,49,56,49,44,45,48,46,54,52,53,76, +48,46,52,50,53,44,45,48,46,52,48,49,67,48,46,52,51,53,44,45,48,46,51,57,49,32,48,46,52,51,57,44,45,48,46,51,56,32,48,46,52,51,57,44,45,48,46,51,54,54,67,48,46,52,51,57,44,45,48,46,51,53,51,32,48,46,52, +51,53,44,45,48,46,51,52,49,32,48,46,52,50,53,44,45,48,46,51,51,50,76,48,46,49,56,49,44,45,48,46,48,56,55,67,48,46,49,55,49,44,45,48,46,48,55,56,32,48,46,49,54,44,45,48,46,48,55,51,32,48,46,49,52,54,44, +45,48,46,48,55,51,67,48,46,49,51,51,44,45,48,46,48,55,51,32,48,46,49,50,50,44,45,48,46,48,55,56,32,48,46,49,49,50,44,45,48,46,48,56,56,67,48,46,49,48,50,44,45,48,46,48,57,55,32,48,46,48,57,56,44,45,48, +46,49,48,57,32,48,46,48,57,56,44,45,48,46,49,50,50,67,48,46,48,57,56,44,45,48,46,49,51,53,32,48,46,49,48,51,44,45,48,46,49,52,55,32,48,46,49,49,50,44,45,48,46,49,53,54,76,48,46,51,50,50,44,45,48,46,51, +54,54,90,34,32,115,116,121,108,101,61,34,102,105,108,108,58,114,103,98,40,49,50,49,44,49,50,49,44,49,50,49,41,59,102,105,108,108,45,114,117,108,101,58,110,111,110,122,101,114,111,59,34,47,62,10,32,32, +32,32,32,32,32,32,60,47,103,62,10,32,32,32,32,60,47,103,62,10,60,47,115,118,103,62,10,0,0}; const char* PresetBar::presetnavigation_svg = (const char*) resource_PresetBar_presetnavigation_svg; -const int PresetBar::presetnavigation_svgSize = 2067; +const int PresetBar::presetnavigation_svgSize = 2078; //[EndFile] You can add extra defines here... diff --git a/Source/Images/presetnavigation.svg b/Source/Images/presetnavigation.svg index f3b3fde..244979f 100644 --- a/Source/Images/presetnavigation.svg +++ b/Source/Images/presetnavigation.svg @@ -3,13 +3,13 @@ - - + + - - + + From 0cc1b2a4b11034ef3fe013b1db64e7442dc8f8c8 Mon Sep 17 00:00:00 2001 From: George Reales Date: Thu, 13 May 2021 19:05:44 +0200 Subject: [PATCH 12/21] Update presetnavigation.svg --- Source/Images/presetnavigation.svg | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Source/Images/presetnavigation.svg b/Source/Images/presetnavigation.svg index f3b3fde..244979f 100644 --- a/Source/Images/presetnavigation.svg +++ b/Source/Images/presetnavigation.svg @@ -3,13 +3,13 @@ - - + + - - + + From 95e5c4395d717199afa6fe4cd1eba9d431a447d2 Mon Sep 17 00:00:00 2001 From: George Reales Date: Thu, 13 May 2021 19:05:50 +0200 Subject: [PATCH 13/21] Update juce_StandaloneFilterWindow.h --- .../Standalone/juce_StandaloneFilterWindow.h | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/Modules/juce_audio_plugin_client/Standalone/juce_StandaloneFilterWindow.h b/Modules/juce_audio_plugin_client/Standalone/juce_StandaloneFilterWindow.h index b5a7ef7..716c570 100644 --- a/Modules/juce_audio_plugin_client/Standalone/juce_StandaloneFilterWindow.h +++ b/Modules/juce_audio_plugin_client/Standalone/juce_StandaloneFilterWindow.h @@ -265,6 +265,13 @@ public: maxNumOutputs = jmax (0, bus->getDefaultLayout().size()); o.content.setOwned (new SettingsComponent (*this, deviceManager, maxNumInputs, maxNumOutputs)); + + LookAndFeel_V4 *lfv4 = dynamic_cast(&o.content->getLookAndFeel()); + + if (lfv4) { + lfv4->setColour(ResizableWindow::backgroundColourId, Colour::fromHSV (0.0f, 0.0f, 0.1f, 1.0f)); + } + o.content->setSize (500, 400); o.dialogTitle = TRANS("Audio/MIDI Settings"); @@ -407,7 +414,7 @@ private: int maxAudioOutputChannels) : owner (pluginHolder), deviceSelector (deviceManagerToUse, - 0, maxAudioInputChannels, + 0, 0, // maxAudioInputChannels, // force zero to fully disable input selection 0, maxAudioOutputChannels, true, (pluginHolder.processor.get() != nullptr && pluginHolder.processor->producesMidi()), @@ -429,6 +436,17 @@ private: shouldMuteLabel.attachToComponent (&shouldMuteButton, true); } + + for (int i =0; i < deviceSelector.getNumChildComponents(); i ++){ + + LookAndFeel_V4 *lfv4 = dynamic_cast(&deviceSelector.getChildComponent(i) ->getLookAndFeel()); + if (lfv4) { + lfv4->setColour(ComboBox::ColourIds::backgroundColourId, Colour::fromHSV (0.0f, 0.0f, 0.2f, 1.0f)); + lfv4->setColour(ListBox::ColourIds::backgroundColourId, Colour::fromHSV (0.0f, 0.0f, 0.2f, 1.0f)); + lfv4->setColour(TextButton::ColourIds::buttonColourId, Colour::fromHSV (0.0f, 0.0f, 0.1f, 1.0f)); + + } + } } void paint (Graphics& g) override From 839f492784150e646fa72dc14f53105a3e4bb494 Mon Sep 17 00:00:00 2001 From: George Reales Date: Sun, 16 May 2021 12:29:57 +0200 Subject: [PATCH 14/21] FXB/FXP drag and drop --- Source/PluginEditor.cpp | 58 +++++++++++++++++++++++++++++++++++++++++ Source/PluginEditor.h | 5 +++- 2 files changed, 62 insertions(+), 1 deletion(-) diff --git a/Source/PluginEditor.cpp b/Source/PluginEditor.cpp index 89c275a..c31a7af 100755 --- a/Source/PluginEditor.cpp +++ b/Source/PluginEditor.cpp @@ -878,6 +878,64 @@ void ObxdAudioProcessorEditor::paint(Graphics& g) } + +bool ObxdAudioProcessorEditor::isInterestedInFileDrag(const StringArray& files) +{ + StringArray extensions; + extensions.add(".fxp"); + extensions.add(".fxb"); + + if (files.size() == 1) { + File file = File(files[0]); + String ext = file.getFileExtension().toLowerCase(); + return file.existsAsFile() && extensions.contains(ext); + } else { + for (int q = 0; q < files.size(); q++) { + File file = File(files[q]); + String ext = file.getFileExtension().toLowerCase(); + + if (ext == ".fxb" || ext == ".fxp") { + return true; + } + } + } + return false; +} + +void ObxdAudioProcessorEditor::filesDropped(const StringArray& files, int x, int y) +{ + if (files.size() == 1) { + File file = File(files[0]); + String ext = file.getFileExtension().toLowerCase(); + + if (ext == ".fxp") { + processor.loadPreset(file); + createMenu(); + } else if (ext == ".fxb") { + auto name = file.getFileName().replace("%20", " "); + auto result = processor.getBanksFolder().getChildFile(name); + + if (file.copyFileTo(result)){ + processor.loadFromFXBFile(result); + processor.scanAndUpdateBanks(); + createMenu(); + } + } + } else { + int i = processor.getCurrentProgram(); + + for (int q = 0; q < files.size(); q++) { + File file = File(files[q]); + String ext = file.getFileExtension().toLowerCase(); + if (ext == ".fxp") { + processor.setCurrentProgram(i++); + processor.loadPreset(file); + } + } + processor.sendChangeMessage(); + createMenu(); + } +} /* bool ObxdAudioProcessorEditor::keyPressed(const KeyPress & press) { if (press.getKeyCode() == '+' || press.getKeyCode() == KeyPress::numberPadAdd) diff --git a/Source/PluginEditor.h b/Source/PluginEditor.h index fa1b9c5..a493a25 100755 --- a/Source/PluginEditor.h +++ b/Source/PluginEditor.h @@ -55,12 +55,15 @@ class ObxdAudioProcessorEditor : public AudioProcessorEditor // , public ComboBox::Listener , public ApplicationCommandTarget , public Timer + , public FileDragAndDropTarget { public: ObxdAudioProcessorEditor(ObxdAudioProcessor& ownerFilter); ~ObxdAudioProcessorEditor(); - + + bool isInterestedInFileDrag(const StringArray& files) override; + void filesDropped(const StringArray& files, int x, int y) override; void mouseUp (const MouseEvent& e) override; void paint (Graphics& g) override; From aa250fc799be73bef6b32bd075b1d07ee5a640fc Mon Sep 17 00:00:00 2001 From: George Reales Date: Sun, 16 May 2021 18:15:11 +0200 Subject: [PATCH 15/21] Enhanced MIDI CC --- Source/PluginProcessor.cpp | 39 +++++++++++++++++++++++++++++++++++--- Source/PluginProcessor.h | 4 ++-- 2 files changed, 38 insertions(+), 5 deletions(-) diff --git a/Source/PluginProcessor.cpp b/Source/PluginProcessor.cpp index e246672..964f95f 100755 --- a/Source/PluginProcessor.cpp +++ b/Source/PluginProcessor.cpp @@ -89,6 +89,7 @@ ObxdAudioProcessor::ObxdAudioProcessor() } apvtState.state = ValueTree (JucePlugin_Name); + initMidi(); } ObxdAudioProcessor::~ObxdAudioProcessor() @@ -271,11 +272,19 @@ inline void ObxdAudioProcessor::processMidiPerSample (MidiBuffer::Iterator* iter lastMovedController = midiMsg->getControllerNumber(); if (programs.currentProgramPtr->values[MIDILEARN] > 0.5f){ midiControlledParamSet = true; - bindings[lastMovedController] = lastUsedParameter; + //bindings[lastMovedController] = lastUsedParameter; + bindings.updateCC(lastMovedController, lastUsedParameter); + File midi_file = getDocumentFolder().getChildFile("Midi") + .getChildFile("Custom.xml"); + bindings.saveFile(midi_file); + currentMidiPath = midi_file.getFullPathName(); + setEngineParameterValue (MIDILEARN, 0, true); lastMovedController = 0; lastUsedParameter = 0; midiControlledParamSet = false; + + } if (bindings[lastMovedController] > 0) @@ -373,7 +382,7 @@ void ObxdAudioProcessor::getStateInformation(MemoryBlock& destData) xmlState.addChildElement(xprogs); - bindings.setXml(xmlState); + //bindings.setXml(xmlState); copyXmlToBinary(xmlState, destData); } @@ -430,7 +439,7 @@ void ObxdAudioProcessor::setStateInformation(const void* data, int sizeInBytes) } } - bindings.getXml(*xmlState); + //bindings.getXml(*xmlState); #if ! DEMOVERSION setCurrentProgram(xmlState->getIntAttribute(S("currentProgram"), 0)); @@ -1184,3 +1193,27 @@ AudioProcessor* JUCE_CALLTYPE createPluginFilter() { return new ObxdAudioProcessor(); } + + + +void ObxdAudioProcessor::initMidi(){ + //Documents > Obxd > MIDI > Default.xml + File default_file = getDocumentFolder().getChildFile("Midi") + .getChildFile("Default.xml"); + if (!default_file.exists()){ + bindings.saveFile(default_file); + } + + File midi_custom_file = getDocumentFolder().getChildFile("Midi") + .getChildFile("Custom.xml"); + + if (midi_custom_file.exists()) { + if (bindings.loadFile(midi_custom_file)){ + currentMidiPath = midi_custom_file.getFullPathName(); + } else { + if (bindings.loadFile(default_file)){ + currentMidiPath = default_file.getFullPathName(); + } + } + } +} diff --git a/Source/PluginProcessor.h b/Source/PluginProcessor.h index d24affe..b8fca73 100755 --- a/Source/PluginProcessor.h +++ b/Source/PluginProcessor.h @@ -138,7 +138,7 @@ public: //============================================================================== void initAllParams(); - + void initMidi(); const String getInputChannelName (int channelIndex) const override; // WATCH OUT! const String getOutputChannelName (int channelIndex) const override; // WATCH OUT! bool isInputChannelStereoPair (int index) const override; // WATCH OUT! @@ -234,7 +234,7 @@ public: File currentBankFile; void saveBank(); - + String currentMidiPath; String currentPreset; File currentPresetFile; void savePreset(); From 729890ef7e22ca5304e7fa636ad4e700a92c0e8d Mon Sep 17 00:00:00 2001 From: George Reales Date: Sun, 16 May 2021 18:39:23 +0200 Subject: [PATCH 16/21] Update midiMap.h --- Source/Engine/midiMap.h | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/Source/Engine/midiMap.h b/Source/Engine/midiMap.h index d17396b..5295422 100755 --- a/Source/Engine/midiMap.h +++ b/Source/Engine/midiMap.h @@ -316,4 +316,36 @@ public: } } + + bool loadFile(File& xml){ + reset(); + set_default(); + if (xml.existsAsFile()){ + XmlDocument xmlDoc (xml); + this->getXml(*xmlDoc.getDocumentElement()); + return true; + } + + return false; + } + + void updateCC(int idx_para, int midiCC) { + for (int i =0; i < 255; i++) { + if (controllers[i] == midiCC){ + controllers[i] = 0; + } + } + controllers[idx_para] = midiCC; + } + + void saveFile(File& xml){ + XmlElement ele("Data"); + this->setXml(ele); + ele.writeToFile(xml, String()); + } + + void clean(){ + reset(); + } + }; From 48849a96d814d41ee7a81ca8732e59ef8cbe163b Mon Sep 17 00:00:00 2001 From: George Reales Date: Mon, 17 May 2021 17:26:56 +0200 Subject: [PATCH 17/21] Additional MIDI CC and fixes --- Source/Engine/midiMap.h | 118 ++++++++++++++++++++++++++++++++----- Source/PluginEditor.cpp | 3 + Source/PluginProcessor.cpp | 7 ++- Source/PluginProcessor.h | 2 +- 4 files changed, 112 insertions(+), 18 deletions(-) diff --git a/Source/Engine/midiMap.h b/Source/Engine/midiMap.h index 5295422..972a30e 100755 --- a/Source/Engine/midiMap.h +++ b/Source/Engine/midiMap.h @@ -31,6 +31,8 @@ public: int controllers[255]; int controllers_default[255]; + std::map mapping; + bool loaded = false; MidiMap() { @@ -39,243 +41,320 @@ public: } void reset(){ for(int i = 0 ; i < 255;i++){ - controllers[i] = 0; - controllers_default[i] = 0; + controllers[i] = -1; + controllers_default[i] = -1; } } void set_default(){ int midicc = 71; controllers[midicc] = controllers_default[midicc] = VOLUME; + mapping["VOLUME"]=VOLUME; midicc = 15; controllers[midicc] = controllers_default[midicc] = VOICE_COUNT; + mapping["VOICE_COUNT"]=VOICE_COUNT; midicc = 33; controllers[midicc] = controllers_default[midicc] = TUNE; + mapping["TUNE"]=TUNE; + midicc = 17; controllers[midicc] = controllers_default[midicc] = OCTAVE; + mapping["OCTAVE"]=OCTAVE; midicc = 118; controllers[midicc] = controllers_default[midicc] = BENDRANGE; + mapping["BENDRANGE"]=BENDRANGE; midicc = 34; controllers[midicc] = controllers_default[midicc] = BENDOSC2; + mapping["BENDOSC2"]=BENDOSC2; midicc = 35; controllers[midicc] = controllers_default[midicc] = LEGATOMODE; + mapping["LEGATOMODE"]=LEGATOMODE; midicc = 75; controllers[midicc] = controllers_default[midicc] = BENDLFORATE; + mapping["BENDLFORATE"]=BENDLFORATE; midicc = 76; controllers[midicc] = controllers_default[midicc] = VFLTENV; + mapping["VFLTENV"]=VFLTENV; midicc = 20; controllers[midicc] = controllers_default[midicc] = VAMPENV; + mapping["VAMPENV"]=VAMPENV; midicc = 21; controllers[midicc] = controllers_default[midicc] = ASPLAYEDALLOCATION; + mapping["ASPLAYEDALLOCATION"]=ASPLAYEDALLOCATION; midicc = 23; controllers[midicc] = controllers_default[midicc] = PORTAMENTO; + mapping["PORTAMENTO"]=PORTAMENTO; midicc = 16; controllers[midicc] = controllers_default[midicc] = UNISON; + mapping["UNISON"]=UNISON; midicc = 24; controllers[midicc] = controllers_default[midicc] = UDET; + mapping["UDET"]=UDET; midicc = 43; controllers[midicc] = controllers_default[midicc] = OSC2_DET; + mapping["OSC2_DET"]=OSC2_DET; midicc = 19; controllers[midicc] = controllers_default[midicc] = LFOFREQ; + mapping["LFOFREQ"]=LFOFREQ; midicc = 44; controllers[midicc] = controllers_default[midicc] = LFOSINWAVE; + mapping["LFOSINWAVE"]=LFOSINWAVE; midicc = 45; controllers[midicc] = controllers_default[midicc] = LFOSQUAREWAVE; + mapping["LFOSQUAREWAVE"]=LFOSQUAREWAVE; midicc = 46; controllers[midicc] = controllers_default[midicc] = LFOSHWAVE; + mapping["LFOSHWAVE"]=LFOSHWAVE; midicc = 22; controllers[midicc] = controllers_default[midicc] = LFO1AMT; + mapping["LFO1AMT"]=LFO1AMT; midicc = 25; controllers[midicc] = controllers_default[midicc] = LFO2AMT; + mapping["LFO2AMT"]=LFO2AMT; midicc = 47; controllers[midicc] = controllers_default[midicc] = LFOOSC1; + mapping["LFOOSC1"]=LFOOSC1; midicc = 48; controllers[midicc] = controllers_default[midicc] = LFOOSC2; + mapping["LFOOSC2"]=LFOOSC2; midicc = 49; controllers[midicc] = controllers_default[midicc] = LFOFILTER; + mapping["LFOFILTER"]=LFOFILTER; midicc = 50; controllers[midicc] = controllers_default[midicc] = LFOPW1; + mapping["LFOPW1"]=LFOPW1; midicc = 51; controllers[midicc] = controllers_default[midicc] = LFOPW2; + mapping["LFOPW2"]=LFOPW2; midicc = 52; controllers[midicc] = controllers_default[midicc] = OSC2HS; + mapping["OSC2HS"]=OSC2HS; midicc = 53; controllers[midicc] = controllers_default[midicc] = XMOD; + mapping["XMOD"]=XMOD; midicc = 54; controllers[midicc] = controllers_default[midicc] = OSC1P; + mapping["OSC1P"]=OSC1P; midicc = 55; controllers[midicc] = controllers_default[midicc] = OSC2P; + mapping["OSC2P"]=OSC2P; midicc = 56; controllers[midicc] = controllers_default[midicc] = OSCQuantize; + mapping["OSCQuantize"]=OSCQuantize; midicc = 57; controllers[midicc] = controllers_default[midicc] = OSC1Saw; + mapping["OSC1Saw"]=OSC1Saw; midicc = 58; controllers[midicc] = controllers_default[midicc] = OSC1Pul; + mapping["OSC1Pul"]=OSC1Pul; midicc = 59; controllers[midicc] = controllers_default[midicc] = OSC2Saw; + mapping["OSC2Saw"]=OSC2Saw; midicc = 60; controllers[midicc] = controllers_default[midicc] = OSC2Pul; + mapping["OSC2Pul"]=OSC2Pul; midicc = 61; controllers[midicc] = controllers_default[midicc] = PW; + mapping["PW"]=PW; midicc = 62; controllers[midicc] = controllers_default[midicc] = BRIGHTNESS; + mapping["BRIGHTNESS"]=BRIGHTNESS; midicc = 63; controllers[midicc] = controllers_default[midicc] = ENVPITCH; + mapping["ENVPITCH"]=ENVPITCH; midicc = 77; controllers[midicc] = controllers_default[midicc] = OSC1MIX; - + mapping["OSC1MIX"]=OSC1MIX; + midicc = 78; controllers[midicc] = controllers_default[midicc] = OSC2MIX; + mapping["OSC2MIX"]=OSC2MIX; midicc = 102; controllers[midicc] = controllers_default[midicc] = NOISEMIX; + mapping["NOISEMIX"]=NOISEMIX; midicc = 103; controllers[midicc] = controllers_default[midicc] = FLT_KF; + mapping["FLT_KF"]=FLT_KF; midicc = 74; controllers[midicc] = controllers_default[midicc] = CUTOFF; + mapping["CUTOFF"]=CUTOFF; midicc = 42; controllers[midicc] = controllers_default[midicc] = RESONANCE; + mapping["RESONANCE"]=RESONANCE; midicc = 104; controllers[midicc] = controllers_default[midicc] = MULTIMODE; + mapping["MULTIMODE"]=MULTIMODE; midicc = 18; controllers[midicc] = controllers_default[midicc] = FILTER_WARM; + mapping["FILTER_WARM"]=FILTER_WARM; midicc = 105; controllers[midicc] = controllers_default[midicc] = BANDPASS; + mapping["BANDPASS"]=BANDPASS; midicc = 106; controllers[midicc] = controllers_default[midicc] = FOURPOLE; + mapping["FOURPOLE"]=FOURPOLE; midicc = 107; controllers[midicc] = controllers_default[midicc] = ENVELOPE_AMT; + mapping["ENVELOPE_AMT"]=ENVELOPE_AMT; midicc = 73; controllers[midicc] = controllers_default[midicc] = LATK; + mapping["LATK"]=LATK; midicc = 36; controllers[midicc] = controllers_default[midicc] = LDEC; + mapping["LDEC"]=LDEC; midicc = 37; controllers[midicc] = controllers_default[midicc] = LSUS; + mapping["LSUS"]=LSUS; midicc = 72; controllers[midicc] = controllers_default[midicc] = LREL; + mapping["LREL"]=LREL; midicc = 38; controllers[midicc] = controllers_default[midicc] = FATK; + mapping["FATK"]=FATK; midicc = 39; controllers[midicc] = controllers_default[midicc] = FDEC; + mapping["FDEC"]=FDEC; midicc = 40; controllers[midicc] = controllers_default[midicc] = FSUS; + mapping["FSUS"]=FSUS; midicc = 41; controllers[midicc] = controllers_default[midicc] = FREL; + mapping["FREL"]=FREL; midicc = 108; controllers[midicc] = controllers_default[midicc] = ENVDER; + mapping["ENVDER"]=ENVDER; midicc = 109; controllers[midicc] = controllers_default[midicc] = FILTERDER; + mapping["FILTERDER"]=FILTERDER; midicc = 110; controllers[midicc] = controllers_default[midicc] = PORTADER; + mapping["PORTADER"]=PORTADER; midicc = 81; controllers[midicc] = controllers_default[midicc] = PAN1; + mapping["PAN1"]=PAN1; midicc = 82; controllers[midicc] = controllers_default[midicc] = PAN2; + mapping["PAN2"]=PAN2; midicc = 83; controllers[midicc] = controllers_default[midicc] = PAN3; + mapping["PAN3"]=PAN3; midicc = 84; controllers[midicc] = controllers_default[midicc] = PAN4; + mapping["PAN4"]=PAN4; midicc = 85; controllers[midicc] = controllers_default[midicc] = PAN5; + mapping["PAN5"]=PAN5; midicc = 86; controllers[midicc] = controllers_default[midicc] = PAN6; + mapping["PAN6"]=PAN6; midicc = 87; controllers[midicc] = controllers_default[midicc] = PAN7; + mapping["PAN7"]=PAN7; midicc = 88; controllers[midicc] = controllers_default[midicc] = PAN8; + mapping["PAN8"]=PAN8; midicc = 111; controllers[midicc] = controllers_default[midicc] = ECONOMY_MODE; + mapping["ECONOMY_MODE"]=ECONOMY_MODE; //midicc = 112; //controllers[midicc] = controllers_default[midicc] = LFO_SYNC; midicc = 113; controllers[midicc] = controllers_default[midicc] = PW_ENV; + mapping["PW_ENV"]=PW_ENV; midicc = 114; controllers[midicc] = controllers_default[midicc] = PW_ENV_BOTH; + mapping["PW_ENV_BOTH"]=PW_ENV_BOTH; midicc = 115; controllers[midicc] = controllers_default[midicc] = ENV_PITCH_BOTH; + mapping["ENV_PITCH_BOTH"]=ENV_PITCH_BOTH; midicc = 116; controllers[midicc] = controllers_default[midicc] = FENV_INVERT; + mapping["FENV_INVERT"]=FENV_INVERT; midicc = 117; controllers[midicc] = controllers_default[midicc] = PW_OSC2_OFS; + mapping["PW_OSC2_OFS"]=PW_OSC2_OFS; midicc = 118; controllers[midicc] = controllers_default[midicc] = LEVEL_DIF; + mapping["LEVEL_DIF"]=LEVEL_DIF; midicc = 119; controllers[midicc] = controllers_default[midicc] = SELF_OSC_PUSH; - + mapping["SELF_OSC_PUSH"]=SELF_OSC_PUSH; + } @@ -290,19 +369,31 @@ public: void setXml( XmlElement &xml){ for (int i = 0; i < 255; ++i) { - xml.setAttribute("Val_" + String(i), controllers[i]); + if (controllers[i]!= -1){ + xml.setAttribute("MIDI_" +String(i), getTag(controllers[i])); + } } } + String getTag(int paraId){ + for (std::map::iterator it = this->mapping.begin(); it != this->mapping.end(); it ++){ + if (paraId == it->second){ + return it->first; + } + } + return "undefine"; + } + + int getParaId(String tagName){ + return mapping[tagName]; + } void getXml(XmlElement &xml){ for (int i = 0; i < 255; ++i) { - int tmp = xml.getIntAttribute("Val_" + String(i), controllers_default[i]); - if (tmp == 0){ - tmp = controllers_default[i]; + String tmp = xml.getStringAttribute("MIDI_" + String(i), "undefine"); + if (tmp != "undefine"){ + controllers[i] = getParaId(tmp); } - - controllers[i] = tmp; } // Backward keys @@ -316,7 +407,6 @@ public: } } - bool loadFile(File& xml){ reset(); set_default(); @@ -331,11 +421,11 @@ public: void updateCC(int idx_para, int midiCC) { for (int i =0; i < 255; i++) { - if (controllers[i] == midiCC){ - controllers[i] = 0; + if (controllers[i] == idx_para){ + controllers[i] = -1; } } - controllers[idx_para] = midiCC; + controllers[midiCC] = idx_para; } void saveFile(File& xml){ diff --git a/Source/PluginEditor.cpp b/Source/PluginEditor.cpp index c31a7af..69104ea 100755 --- a/Source/PluginEditor.cpp +++ b/Source/PluginEditor.cpp @@ -931,6 +931,9 @@ void ObxdAudioProcessorEditor::filesDropped(const StringArray& files, int x, int processor.setCurrentProgram(i++); processor.loadPreset(file); } + if (i >=processor.getNumPrograms()){ + i = 0; + } } processor.sendChangeMessage(); createMenu(); diff --git a/Source/PluginProcessor.cpp b/Source/PluginProcessor.cpp index 964f95f..8061888 100755 --- a/Source/PluginProcessor.cpp +++ b/Source/PluginProcessor.cpp @@ -273,7 +273,7 @@ inline void ObxdAudioProcessor::processMidiPerSample (MidiBuffer::Iterator* iter if (programs.currentProgramPtr->values[MIDILEARN] > 0.5f){ midiControlledParamSet = true; //bindings[lastMovedController] = lastUsedParameter; - bindings.updateCC(lastMovedController, lastUsedParameter); + bindings.updateCC(lastUsedParameter, lastMovedController); File midi_file = getDocumentFolder().getChildFile("Midi") .getChildFile("Custom.xml"); bindings.saveFile(midi_file); @@ -605,7 +605,7 @@ bool ObxdAudioProcessor::saveFXBFile(const File& fxbFile) { return true; } -bool ObxdAudioProcessor::loadFromFXBFile(const File& fxbFile) +bool ObxdAudioProcessor::loadFromFXBFile(const File& fxbFile, bool changeProgram) { MemoryBlock mb; if (! fxbFile.loadFileAsData(mb)) @@ -680,7 +680,8 @@ bool ObxdAudioProcessor::loadFromFXBFile(const File& fxbFile) return false; setStateInformation(cset->chunk, fxbSwap (cset->chunkSize)); - setCurrentProgram(0); // Set to first preset position + if (changeProgram) + setCurrentProgram(0); // Set to first preset position } else if (compareMagic (set->fxMagic, "FPCh")) { diff --git a/Source/PluginProcessor.h b/Source/PluginProcessor.h index b8fca73..bd9f097 100755 --- a/Source/PluginProcessor.h +++ b/Source/PluginProcessor.h @@ -175,7 +175,7 @@ public: void newPreset(const String &name); void deletePreset(); - bool loadFromFXBFile(const File& fxbFile); + bool loadFromFXBFile(const File& fxbFile, bool changeProgram=true); bool saveFXBFile(const File& fxbFile); bool saveFXPFile(const File& fxpFile); bool saveBank(const File& fxbFile); From f52aedeb7dc91933d72ffeb63294ca6f1c82a4f4 Mon Sep 17 00:00:00 2001 From: George Reales Date: Mon, 17 May 2021 19:52:09 +0200 Subject: [PATCH 18/21] Preset bar flicker fix --- Source/Components/PresetBar.cpp | 0 Source/PluginEditor.cpp | 48 +++++++++++++++++++++++---------- Source/PluginEditor.h | 2 +- Source/PluginProcessor.cpp | 2 ++ 4 files changed, 37 insertions(+), 15 deletions(-) mode change 100644 => 100755 Source/Components/PresetBar.cpp diff --git a/Source/Components/PresetBar.cpp b/Source/Components/PresetBar.cpp old mode 100644 new mode 100755 diff --git a/Source/PluginEditor.cpp b/Source/PluginEditor.cpp index 69104ea..0dcc269 100755 --- a/Source/PluginEditor.cpp +++ b/Source/PluginEditor.cpp @@ -105,9 +105,9 @@ void ObxdAudioProcessorEditor::loadSkin (ObxdAudioProcessor& ownerFilter) setSize (1440, 450); } else { - + int xScreen = getWidth(), yScreen = getHeight(); if (doc->getTagName() == "PROPERTIES"){ - + forEachXmlChildElementWithTagName(*doc, child, "VALUE"){ if (child->hasAttribute("NAME") && child->hasAttribute("x") && child->hasAttribute("y")) { String name = child->getStringAttribute("NAME"); @@ -117,7 +117,17 @@ void ObxdAudioProcessorEditor::loadSkin (ObxdAudioProcessor& ownerFilter) int w = child->getIntAttribute("w"); int h = child->getIntAttribute("h"); - if (name == "guisize"){ setSize (x, y); } + if (name == "guisize"){ + xScreen = x; + yScreen = y; + if (processor.getShowPresetBar()) { + setSize(xScreen, yScreen +40); + } + else { + setSize(xScreen, yScreen); + } + + } if (name == "resonanceKnob"){ resonanceKnob = addKnob (x, y, d, ownerFilter, RESONANCE, "Resonance", 0); } if (name == "cutoffKnob"){ cutoffKnob = addKnob (x, y, d, ownerFilter, CUTOFF, "Cutoff", 0.4); } @@ -241,6 +251,17 @@ void ObxdAudioProcessorEditor::loadSkin (ObxdAudioProcessor& ownerFilter) } } } + + + presetBar.reset(new PresetBar(*this)); + addAndMakeVisible(*presetBar); + presetBar->setVisible(processor.getShowPresetBar()); + + + presetBar->setBounds( + (xScreen - presetBar->getWidth()) / 2, yScreen, presetBar->getWidth(), presetBar->getHeight()); + + updatePresetBar(false); } // Prepare data @@ -269,12 +290,7 @@ void ObxdAudioProcessorEditor::loadSkin (ObxdAudioProcessor& ownerFilter) ownerFilter.addChangeListener (this); - presetBar.reset(new PresetBar(*this)); - addAndMakeVisible(*presetBar); - presetBar->setVisible(processor.getShowPresetBar()); - presetBar->setBounds( - (getWidth() - presetBar->getWidth())/2, getHeight(), presetBar->getWidth(), presetBar->getHeight()); - updatePresetBar(); + repaint(); } ObxdAudioProcessorEditor::~ObxdAudioProcessorEditor() @@ -565,17 +581,21 @@ void ObxdAudioProcessorEditor::resultFromMenu (const Point pos) } } -void ObxdAudioProcessorEditor::updatePresetBar(){ +void ObxdAudioProcessorEditor::updatePresetBar(bool resize){ DBG(" H: " << getHeight() <<" W:" <getWidth() << " CH" <getHeight() << " CX:" <getX() << " CY: " <getY()); - if (processor.getShowPresetBar()){ - this->setSize(this->getWidth(), this->getHeight() + 40); + + if (processor.getShowPresetBar()) { + if (resize) { + this->setSize(this->getWidth(), this->getHeight() + 40); + } presetBar->setVisible(true); } else if (presetBar->isVisible()) { - this->setSize(this->getWidth(), this->getHeight() - 40); + if (resize) { + this->setSize(this->getWidth(), this->getHeight() - 40); + } presetBar->setVisible(false); } - presetBar->update(); } diff --git a/Source/PluginEditor.h b/Source/PluginEditor.h index a493a25..f0f5082 100755 --- a/Source/PluginEditor.h +++ b/Source/PluginEditor.h @@ -72,7 +72,7 @@ public: String getCurrentProgramName(){ return processor.getProgramName(processor.getCurrentProgram()); } - void updatePresetBar(); + void updatePresetBar(bool resize=true); //============================================================================== void changeListenerCallback (ChangeBroadcaster* source) override; void buttonClicked (Button *) override; diff --git a/Source/PluginProcessor.cpp b/Source/PluginProcessor.cpp index 8061888..7113118 100755 --- a/Source/PluginProcessor.cpp +++ b/Source/PluginProcessor.cpp @@ -533,12 +533,14 @@ bool ObxdAudioProcessor::saveFXPFile(const File& fxpFile){ fxpFile.replaceWithData(memoryBlock.getData(), memoryBlock.getSize()); } + return true; } bool ObxdAudioProcessor::savePreset(const File& fxpFile) { saveFXPFile(fxpFile); currentPreset = fxpFile.getFileName(); currentPresetFile = fxpFile; + return true; } void ObxdAudioProcessor::changePresetName(const String &name){ From b5c671a8f94ab287c0a34017d9403ebba2012109 Mon Sep 17 00:00:00 2001 From: George Reales Date: Wed, 19 May 2021 20:09:59 +0200 Subject: [PATCH 19/21] MIDI learn menu --- Source/Components/PresetBar.cpp | 0 Source/PluginEditor.cpp | 62 +++++++++++++++++++++++++++++++++ Source/PluginEditor.h | 3 ++ Source/PluginProcessor.cpp | 44 ++++++++++++++++------- Source/PluginProcessor.h | 9 +++-- 5 files changed, 103 insertions(+), 15 deletions(-) mode change 100755 => 100644 Source/Components/PresetBar.cpp diff --git a/Source/Components/PresetBar.cpp b/Source/Components/PresetBar.cpp old mode 100755 new mode 100644 diff --git a/Source/PluginEditor.cpp b/Source/PluginEditor.cpp index 0dcc269..b859b1d 100755 --- a/Source/PluginEditor.cpp +++ b/Source/PluginEditor.cpp @@ -435,6 +435,7 @@ void ObxdAudioProcessorEditor::createMenu () PopupMenu skinMenu; PopupMenu fileMenu; PopupMenu viewMenu; + PopupMenu midiMenu; skins = processor.getSkinFiles(); banks = processor.getBankFiles(); { @@ -534,9 +535,57 @@ void ObxdAudioProcessorEditor::createMenu () } viewMenu.addItem(progStart + 1000, "Preset Bar", true, processor.showPresetBar); menu->addSubMenu ("View", viewMenu); + menuMidiNum = progStart +2000; + createMidi(menuMidiNum, midiMenu); + menu->addSubMenu ("MIDI", midiMenu); popupMenus.add (menu); } +void ObxdAudioProcessorEditor::createMidi(int menuNo, PopupMenu &menuMidi) { + File midi_dir = processor.getMidiFolder(); + File default_file = midi_dir.getChildFile("Default.xml"); + if(default_file.exists()){ + if (processor.currentMidiPath != default_file.getFullPathName()){ + menuMidi.addItem(menuNo++, default_file.getFileNameWithoutExtension(), true, false); + } else { + menuMidi.addItem(menuNo++, default_file.getFileNameWithoutExtension(), true, true); + } + midiFiles.add(default_file.getFullPathName()); + } + + File custom_file = midi_dir.getChildFile("Custom.xml"); + + if(custom_file.exists()){ + if (processor.currentMidiPath != custom_file.getFullPathName()){ + menuMidi.addItem(menuNo++, custom_file.getFileNameWithoutExtension(), true, false); + } else { + menuMidi.addItem(menuNo++, custom_file.getFileNameWithoutExtension(), true, true); + } + midiFiles.add(custom_file.getFullPathName()); + } + + DirectoryIterator iter (midi_dir, true, "*.xml"); + StringArray list; + while (iter.next()) + { + list.add(iter.getFile().getFullPathName()); + } + + list.sort(true); + + for (int i =0; i < list.size() ; i ++){ + File f (list[i]); + if (f.getFileNameWithoutExtension() != "Default" && f.getFileNameWithoutExtension() != "Custom" && f.getFileNameWithoutExtension() != "Config") { + if (processor.currentMidiPath != f.getFullPathName()){ + menuMidi.addItem(menuNo++, f.getFileNameWithoutExtension(), true, false); + } else { + menuMidi.addItem(menuNo++, f.getFileNameWithoutExtension(), true, true); + } + midiFiles.add(f.getFullPathName()); + } + } +} + void ObxdAudioProcessorEditor::resultFromMenu (const Point pos) { int result = popupMenus[0]->showAt (Rectangle (pos.getX(), pos.getY(), 1, 1)); @@ -579,6 +628,19 @@ void ObxdAudioProcessorEditor::resultFromMenu (const Point pos) createMenu(); updatePresetBar(); } + else if (result >= menuMidiNum){ + unsigned int selected_idx = result - menuMidiNum; + if (selected_idx >= 0 && selected_idx < midiFiles.size()){ + File f(midiFiles[selected_idx]); + if (f.exists()) { + processor.currentMidiPath = midiFiles[selected_idx]; + processor.bindings.loadFile(f); + processor.updateConfig(); + + createMenu(); + } + } + } } void ObxdAudioProcessorEditor::updatePresetBar(bool resize){ diff --git a/Source/PluginEditor.h b/Source/PluginEditor.h index f0f5082..1454f55 100755 --- a/Source/PluginEditor.h +++ b/Source/PluginEditor.h @@ -167,6 +167,7 @@ private: ButtonList* addList(int x, int y, int w, int h, ObxdAudioProcessor& filter, int parameter, String name, Image img); void addMenuButton (int x, int y, int d, const Image&); void createMenu (); + void createMidi(int, PopupMenu &); void resultFromMenu (const Point); void clean(); @@ -275,6 +276,8 @@ private: ApplicationCommandManager commandManager; int countTimer =0; bool needNotifytoHost = false; + Array midiFiles; + int menuMidiNum; }; #endif // PLUGINEDITOR_H_INCLUDED diff --git a/Source/PluginProcessor.cpp b/Source/PluginProcessor.cpp index 7113118..d1c8a20 100755 --- a/Source/PluginProcessor.cpp +++ b/Source/PluginProcessor.cpp @@ -274,8 +274,7 @@ inline void ObxdAudioProcessor::processMidiPerSample (MidiBuffer::Iterator* iter midiControlledParamSet = true; //bindings[lastMovedController] = lastUsedParameter; bindings.updateCC(lastUsedParameter, lastMovedController); - File midi_file = getDocumentFolder().getChildFile("Midi") - .getChildFile("Custom.xml"); + File midi_file = getMidiFolder().getChildFile("Custom.xml"); bindings.saveFile(midi_file); currentMidiPath = midi_file.getFullPathName(); @@ -791,6 +790,12 @@ File ObxdAudioProcessor::getBanksFolder() const return getDocumentFolder().getChildFile("Banks"); } +File ObxdAudioProcessor::getMidiFolder() const +{ + return getDocumentFolder().getChildFile("Midi"); +} + + File ObxdAudioProcessor::getPresetsFolder() const { return getDocumentFolder().getChildFile("Presets"); @@ -1201,22 +1206,37 @@ AudioProcessor* JUCE_CALLTYPE createPluginFilter() void ObxdAudioProcessor::initMidi(){ //Documents > Obxd > MIDI > Default.xml - File default_file = getDocumentFolder().getChildFile("Midi") - .getChildFile("Default.xml"); + File default_file = getMidiFolder().getChildFile("Default.xml"); if (!default_file.exists()){ bindings.saveFile(default_file); } - File midi_custom_file = getDocumentFolder().getChildFile("Midi") - .getChildFile("Custom.xml"); - - if (midi_custom_file.exists()) { - if (bindings.loadFile(midi_custom_file)){ - currentMidiPath = midi_custom_file.getFullPathName(); + File midi_config_file = getMidiFolder().getChildFile("Config.xml"); + XmlDocument xmlDoc (midi_config_file); + std::unique_ptr ele_file = xmlDoc.getDocumentElementIfTagMatches("File"); + + if (ele_file) { + String file_name = ele_file->getStringAttribute("name"); + // Midi cc loading + File midi_file = getMidiFolder().getChildFile(file_name); + if (bindings.loadFile(midi_file)){ + currentMidiPath = midi_file.getFullPathName(); } else { - if (bindings.loadFile(default_file)){ - currentMidiPath = default_file.getFullPathName(); + File midi_file = getMidiFolder().getChildFile("Default.xml"); + if (bindings.loadFile(midi_file)){ + currentMidiPath = midi_file.getFullPathName(); } } } } + +void ObxdAudioProcessor::updateConfig(){ + File midi_config_file = getMidiFolder().getChildFile("Config.xml"); + XmlDocument xmlDoc (midi_config_file); + std::unique_ptr ele_file = xmlDoc.getDocumentElementIfTagMatches("File"); + if (ele_file) { + File f(currentMidiPath); + ele_file->setAttribute("name", f.getFileName()); + ele_file->writeTo(midi_config_file.getFullPathName()); + } +} diff --git a/Source/PluginProcessor.h b/Source/PluginProcessor.h index bd9f097..005dc14 100755 --- a/Source/PluginProcessor.h +++ b/Source/PluginProcessor.h @@ -175,7 +175,7 @@ public: void newPreset(const String &name); void deletePreset(); - bool loadFromFXBFile(const File& fxbFile, bool changeProgram=true); + bool loadFromFXBFile(const File& fxbFile); bool saveFXBFile(const File& fxbFile); bool saveFXPFile(const File& fxpFile); bool saveBank(const File& fxbFile); @@ -191,6 +191,7 @@ public: File getSkinFolder() const; File getPresetsFolder() const; File getBanksFolder() const; + File getMidiFolder() const; File getCurrentSkinFolder() const; void setCurrentSkinFolder(const String& folderName); @@ -219,7 +220,7 @@ private: MidiMessage* nextMidi; MidiMessage* midiMsg; - MidiMap bindings; + bool midiControlledParamSet; bool hasMidiMessage; @@ -238,8 +239,10 @@ public: String currentPreset; File currentPresetFile; void savePreset(); - + MidiMap bindings; bool showPresetBar = false; + + void updateConfig(); private: Array bankFiles; Array skinFiles; From a1b851a4eb3e4feee811ea54d10446e67c3902dd Mon Sep 17 00:00:00 2001 From: George Reales Date: Thu, 20 May 2021 19:12:33 +0200 Subject: [PATCH 20/21] MIDI menu fixes --- Source/PluginEditor.cpp | 21 +++++++++++---------- Source/PluginProcessor.cpp | 5 ++--- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/Source/PluginEditor.cpp b/Source/PluginEditor.cpp index b859b1d..156e762 100755 --- a/Source/PluginEditor.cpp +++ b/Source/PluginEditor.cpp @@ -588,6 +588,7 @@ void ObxdAudioProcessorEditor::createMidi(int menuNo, PopupMenu &menuMidi) { void ObxdAudioProcessorEditor::resultFromMenu (const Point pos) { + createMenu(); int result = popupMenus[0]->showAt (Rectangle (pos.getX(), pos.getY(), 1, 1)); if (result >= (skinStart + 1) && result <= (skinStart + skins.size())) @@ -625,7 +626,7 @@ void ObxdAudioProcessorEditor::resultFromMenu (const Point pos) } else if (result == progStart + 1000){ processor.setShowPresetBar(!processor.getShowPresetBar()); - createMenu(); + //createMenu(); updatePresetBar(); } else if (result >= menuMidiNum){ @@ -637,7 +638,7 @@ void ObxdAudioProcessorEditor::resultFromMenu (const Point pos) processor.bindings.loadFile(f); processor.updateConfig(); - createMenu(); + //createMenu(); } } } @@ -677,7 +678,7 @@ void ObxdAudioProcessorEditor::MenuActionCallback(int action){ if (result == file || result.copyFileTo(file)){ processor.loadFromFXBFile(file); processor.scanAndUpdateBanks(); - createMenu(); + //createMenu(); } } }; @@ -733,7 +734,7 @@ void ObxdAudioProcessorEditor::MenuActionCallback(int action){ if (name.isNotEmpty()) { processor.newPreset(name); - createMenu(); + //createMenu(); } } @@ -762,7 +763,7 @@ void ObxdAudioProcessorEditor::MenuActionCallback(int action){ if (name.isNotEmpty()) { processor.changePresetName(name); - createMenu(); + //createMenu(); } } @@ -780,7 +781,7 @@ void ObxdAudioProcessorEditor::MenuActionCallback(int action){ { if(NativeMessageBox::showOkCancelBox(AlertWindow::NoIcon, "Delete Preset", "Delete current preset " + processor.currentPreset + "?")){ processor.deletePreset(); - createMenu(); + //createMenu(); } return; } @@ -798,7 +799,7 @@ void ObxdAudioProcessorEditor::MenuActionCallback(int action){ DBG("Import Preset: " << result.getFileName()); //if (result == file || result.copyFileTo(file)){ processor.loadPreset(result); - createMenu(); + //createMenu(); //} } }; @@ -992,7 +993,7 @@ void ObxdAudioProcessorEditor::filesDropped(const StringArray& files, int x, int if (ext == ".fxp") { processor.loadPreset(file); - createMenu(); + //createMenu(); } else if (ext == ".fxb") { auto name = file.getFileName().replace("%20", " "); auto result = processor.getBanksFolder().getChildFile(name); @@ -1000,7 +1001,7 @@ void ObxdAudioProcessorEditor::filesDropped(const StringArray& files, int x, int if (file.copyFileTo(result)){ processor.loadFromFXBFile(result); processor.scanAndUpdateBanks(); - createMenu(); + //createMenu(); } } } else { @@ -1018,7 +1019,7 @@ void ObxdAudioProcessorEditor::filesDropped(const StringArray& files, int x, int } } processor.sendChangeMessage(); - createMenu(); + //createMenu(); } } /* diff --git a/Source/PluginProcessor.cpp b/Source/PluginProcessor.cpp index d1c8a20..4547608 100755 --- a/Source/PluginProcessor.cpp +++ b/Source/PluginProcessor.cpp @@ -606,7 +606,7 @@ bool ObxdAudioProcessor::saveFXBFile(const File& fxbFile) { return true; } -bool ObxdAudioProcessor::loadFromFXBFile(const File& fxbFile, bool changeProgram) +bool ObxdAudioProcessor::loadFromFXBFile(const File& fxbFile) { MemoryBlock mb; if (! fxbFile.loadFileAsData(mb)) @@ -681,8 +681,7 @@ bool ObxdAudioProcessor::loadFromFXBFile(const File& fxbFile, bool changeProgram return false; setStateInformation(cset->chunk, fxbSwap (cset->chunkSize)); - if (changeProgram) - setCurrentProgram(0); // Set to first preset position + setCurrentProgram(0); // Set to first preset position } else if (compareMagic (set->fxMagic, "FPCh")) { From d283309d882fcc9a45ee685660e8ee927c64942b Mon Sep 17 00:00:00 2001 From: George Reales Date: Thu, 20 May 2021 19:34:21 +0200 Subject: [PATCH 21/21] MIDI clean fix --- Source/PluginEditor.cpp | 8 +++++--- Source/PluginEditor.h | 9 +++++++++ 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/Source/PluginEditor.cpp b/Source/PluginEditor.cpp index 156e762..3c4f454 100755 --- a/Source/PluginEditor.cpp +++ b/Source/PluginEditor.cpp @@ -877,6 +877,7 @@ void ObxdAudioProcessorEditor::buttonClicked (Button* b) auto toggleButton = dynamic_cast (b); if (toggleButton == midiUnlearnButton){ if (midiUnlearnButton->getToggleState()){ + countTimerForLed = 0; processor.getMidiMap().reset(); processor.getMidiMap().set_default(); processor.sendChangeMessage(); @@ -904,9 +905,10 @@ void ObxdAudioProcessorEditor::updateFromHost() { } // Set to unlearn to false - if ( midiUnlearnButton && midiUnlearnButton->getToggleState()) { - midiUnlearnButton->setToggleState(false, NotificationType:: sendNotification); - } + //if ( midiUnlearnButton && midiUnlearnButton->getToggleState()) { + // Thread::sleep(500); + // midiUnlearnButton->setToggleState(false, NotificationType:: sendNotification); + //} repaint(); } diff --git a/Source/PluginEditor.h b/Source/PluginEditor.h index 1454f55..e39564c 100755 --- a/Source/PluginEditor.h +++ b/Source/PluginEditor.h @@ -89,6 +89,12 @@ public: needNotifytoHost= false; processor.updateHostDisplay(); } + + countTimerForLed++; + if (midiUnlearnButton && midiUnlearnButton->getToggleState() && countTimerForLed > 3) { + midiUnlearnButton->setToggleState(false, NotificationType::sendNotification); + countTimerForLed = 0; + } } ApplicationCommandTarget* getNextCommandTarget() override { return nullptr; @@ -276,8 +282,11 @@ private: ApplicationCommandManager commandManager; int countTimer =0; bool needNotifytoHost = false; + Array midiFiles; int menuMidiNum; + int countTimerForLed = 0; + }; #endif // PLUGINEDITOR_H_INCLUDED