The JUCE cross-platform C++ framework, with DISTRHO/KXStudio specific changes
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

105 lines
3.8KB

  1. /*
  2. ==============================================================================
  3. This file is part of the JUCE library.
  4. Copyright (c) 2017 - ROLI Ltd.
  5. JUCE is an open source library subject to commercial or open-source
  6. licensing.
  7. By using JUCE, you agree to the terms of both the JUCE 5 End-User License
  8. Agreement and JUCE 5 Privacy Policy (both updated and effective as of the
  9. 27th April 2017).
  10. End User License Agreement: www.juce.com/juce-5-licence
  11. Privacy Policy: www.juce.com/juce-5-privacy-policy
  12. Or: You may also use this code under the terms of the GPL v3 (see
  13. www.gnu.org/licenses).
  14. JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
  15. EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
  16. DISCLAIMED.
  17. ==============================================================================
  18. */
  19. #pragma once
  20. #include "../JuceLibraryCode/JuceHeader.h"
  21. #include "PluginProcessor.h"
  22. struct ParameterSlider : public Slider,
  23. public Timer
  24. {
  25. ParameterSlider (AudioProcessorParameter& p)
  26. : Slider (p.getName (256)), param (p)
  27. {
  28. setRange (0.0, 1.0, 0.0);
  29. startTimerHz (30);
  30. updateSliderPos();
  31. }
  32. void valueChanged() override
  33. {
  34. if (isMouseButtonDown())
  35. param.setValueNotifyingHost ((float) Slider::getValue());
  36. else
  37. param.setValue ((float) Slider::getValue());
  38. }
  39. void timerCallback() override { updateSliderPos(); }
  40. void startedDragging() override { param.beginChangeGesture(); }
  41. void stoppedDragging() override { param.endChangeGesture(); }
  42. double getValueFromText (const String& text) override { return param.getValueForText (text); }
  43. String getTextFromValue (double value) override { return param.getText ((float) value, 1024) + " " + param.getLabel(); }
  44. void updateSliderPos()
  45. {
  46. const float newValue = param.getValue();
  47. if (newValue != (float) Slider::getValue() && ! isMouseButtonDown())
  48. Slider::setValue (newValue);
  49. }
  50. AudioProcessorParameter& param;
  51. };
  52. //==============================================================================
  53. /**
  54. This is the editor component that will be displayed.
  55. */
  56. class DspModulePluginDemoAudioProcessorEditor : public AudioProcessorEditor,
  57. private ComboBox::Listener,
  58. private Button::Listener
  59. {
  60. public:
  61. DspModulePluginDemoAudioProcessorEditor (DspModulePluginDemoAudioProcessor&);
  62. ~DspModulePluginDemoAudioProcessorEditor();
  63. //==============================================================================
  64. void paint (Graphics&) override;
  65. void resized() override;
  66. private:
  67. //==============================================================================
  68. void comboBoxChanged (ComboBox*) override;
  69. void buttonClicked (Button*) override { processor.cabinetSimParam->operator= (cabinetSimButton.getToggleState()); }
  70. //==============================================================================
  71. DspModulePluginDemoAudioProcessor& processor;
  72. ScopedPointer<ParameterSlider> inputVolumeSlider, outputVolumeSlider,
  73. lowPassFilterFreqSlider, highPassFilterFreqSlider;
  74. ComboBox stereoBox, slopeBox, waveshaperBox, cabinetTypeBox;
  75. ToggleButton cabinetSimButton;
  76. Label inputVolumeLabel, outputVolumeLabel, lowPassFilterFreqLabel,
  77. highPassFilterFreqLabel, stereoLabel, slopeLabel, waveshaperLabel,
  78. cabinetTypeLabel;
  79. JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (DspModulePluginDemoAudioProcessorEditor)
  80. };