Skip to content

Commit d410df0

Browse files
committed
Refresh division views on timer.
1 parent 1412b48 commit d410df0

File tree

10 files changed

+31
-76
lines changed

10 files changed

+31
-76
lines changed

Source/PluginEditor.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,7 @@ void AeolusAudioProcessorEditor::populateDivisions()
217217
void AeolusAudioProcessorEditor::refresh()
218218
{
219219
updateMeters();
220+
updateDivisionViews();
220221
updateMidiKeyboardRange();
221222
}
222223

@@ -238,3 +239,9 @@ void AeolusAudioProcessorEditor::updateMidiKeyboardRange()
238239
else
239240
_midiKeyboard.setPlayableRange(range.getStart(), range.getEnd());
240241
}
242+
243+
void AeolusAudioProcessorEditor::updateDivisionViews()
244+
{
245+
for (auto* dv : _divisionViews)
246+
dv->update();
247+
}

Source/PluginEditor.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ class AeolusAudioProcessorEditor : public juce::AudioProcessorEditor,
5353

5454
void updateMeters();
5555
void updateMidiKeyboardRange();
56+
void updateDivisionViews();
5657

5758
AeolusAudioProcessor& _audioProcessor;
5859

Source/aeolus/division.cpp

Lines changed: 3 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,6 @@ Division::Division(Engine& engine, const String& name)
4646
, _activeVoices{}
4747
, _triggerFlag{}
4848
, _volumeLevel{}
49-
, _listeners{}
5049
{
5150
_swellFilterSpec.type = dsp::BiquadFilter::LowPass;
5251
_swellFilterSpec.sampleRate = SAMPLE_RATE;
@@ -208,17 +207,6 @@ void Division::setPersistentState(const juce::var& v)
208207
}
209208
}
210209

211-
void Division::addListener(Listener* listener)
212-
{
213-
jassert(listener != nullptr);
214-
_listeners.add(listener);
215-
}
216-
217-
void Division::removeListener(Listener* listener)
218-
{
219-
_listeners.remove(listener);
220-
}
221-
222210
void Division::populateLinkedDivisions()
223211
{
224212
_linkedDivisions.clear();
@@ -313,13 +301,7 @@ void Division::enableStop(int i, bool ena)
313301
{
314302
jassert(isPositiveAndBelow(i, _rankwaves.size()));
315303

316-
if (_rankwaves[i].enabled != ena) {
317-
_rankwaves[i].enabled = ena;
318-
319-
_listeners.call([i](Listener& listener) {
320-
listener.stopEnablementChanged(i);
321-
});
322-
}
304+
_rankwaves[i].enabled = ena;
323305
}
324306

325307
bool Division::isStopEnabled(int i) const
@@ -373,14 +355,8 @@ void Division::setTremulantEnabled(bool ena) noexcept
373355
if (!_hasTremulant)
374356
return;
375357

376-
if (_tremulantEnabled != ena) {
377-
_tremulantEnabled = ena;
378-
_tremulantTargetLevel = _tremulantEnabled ? _tremulantMaxLevel : 0.0f;
379-
380-
_listeners.call([](Listener& listener) {
381-
listener.tremulantEnablementChanged();
382-
});
383-
}
358+
_tremulantEnabled = ena;
359+
_tremulantTargetLevel = _tremulantEnabled ? _tremulantMaxLevel : 0.0f;
384360
}
385361

386362
float Division::getTremulantLevel(bool update)

Source/aeolus/division.h

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -84,15 +84,6 @@ class Division
8484
LevelMeter right;
8585
};
8686

87-
/// Listener for the division stop changes
88-
class Listener
89-
{
90-
public:
91-
virtual ~Listener() = default;
92-
virtual void stopEnablementChanged(int stopIndex) {};
93-
virtual void tremulantEnablementChanged() {};
94-
};
95-
9687
//--------------------------------------------------------------------------
9788

9889
Division(Engine& engine, const juce::String& name = juce::String());
@@ -112,9 +103,6 @@ class Division
112103
juce::String getName() const { return _name; }
113104
juce::String getMnemonic() const { return _mnemonic; }
114105

115-
void addListener(Listener* listener);
116-
void removeListener(Listener* listener);
117-
118106
/**
119107
* Populate linked divisions from the division names.
120108
* This method must be called by the engine when all the divisions
@@ -233,8 +221,6 @@ class Division
233221

234222
Level _volumeLevel;
235223

236-
juce::ListenerList<Listener> _listeners;
237-
238224
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(Division)
239225
};
240226

Source/ui/DivisionControlPanel.cpp

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -72,13 +72,11 @@ DivisionControlPanel::DivisionControlPanel(aeolus::Division* division)
7272

7373
_gainSlider.setSkewFactor(0.5f);
7474
addAndMakeVisible(_gainSlider);
75-
76-
_division->addListener(this);
7775
}
7876

79-
DivisionControlPanel::~DivisionControlPanel()
77+
void DivisionControlPanel::update()
8078
{
81-
_division->removeListener(this);
79+
_tremulantButton.setToggleState(_division->isTremulantEnabled(), juce::dontSendNotification);
8280
}
8381

8482
void DivisionControlPanel::resized()
@@ -108,12 +106,4 @@ void DivisionControlPanel::paint(juce::Graphics& g)
108106
g.fillRect(getLocalBounds());
109107
}
110108

111-
void DivisionControlPanel::tremulantEnablementChanged()
112-
{
113-
const bool ena = _division->isTremulantEnabled();
114-
if (_tremulantButton.getToggleState() != ena) {
115-
_tremulantButton.setToggleState(ena, juce::dontSendNotification);
116-
}
117-
}
118-
119109
} // namespace ui

Source/ui/DivisionControlPanel.h

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,20 +26,17 @@
2626

2727
namespace ui {
2828

29-
class DivisionControlPanel : public juce::Component,
30-
public aeolus::Division::Listener
29+
class DivisionControlPanel : public juce::Component
3130
{
3231
public:
3332
DivisionControlPanel(aeolus::Division* division = nullptr);
34-
~DivisionControlPanel();
33+
34+
void update();
3535

3636
// juce::Component
3737
void resized() override;
3838
void paint(juce::Graphics& g) override;
3939

40-
// aeolus::Division::Listener
41-
void tremulantEnablementChanged() override;
42-
4340
private:
4441

4542
aeolus::Division* _division;

Source/ui/DivisionView.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,14 @@ DivisionView::DivisionView(aeolus::Division* division)
5555
populateLinkButtons();
5656
}
5757

58+
void DivisionView::update()
59+
{
60+
_controlPanel.update();
61+
62+
for (auto* b : _stopButtons)
63+
b->update();
64+
}
65+
5866
void DivisionView::cancelAllStops()
5967
{
6068
jassert(_division != nullptr);

Source/ui/DivisionView.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ class DivisionView : public juce::Component
3333

3434
DivisionView(aeolus::Division* division = nullptr);
3535

36+
void update();
37+
3638
void cancelAllStops();
3739
void cancelAllLinks();
3840
void cancelTremulant();

Source/ui/StopButton.cpp

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -38,21 +38,11 @@ StopButton::StopButton(aeolus::Division& division, int stopIndex)
3838
this->onClick = [this]() {
3939
_division.enableStop(_stopIndex, getToggleState());
4040
};
41-
42-
_division.addListener(this);
4341
}
4442

45-
StopButton::~StopButton()
43+
void StopButton::update()
4644
{
47-
_division.removeListener(this);
48-
}
49-
50-
void StopButton::stopEnablementChanged(int stopIndex)
51-
{
52-
// Update button state to reflect the stop state.
53-
if (stopIndex == _stopIndex && getToggleState() != _stop.enabled) {
54-
setToggleState(_stop.enabled, juce::dontSendNotification);
55-
}
45+
setToggleState(_division.isStopEnabled(_stopIndex), juce::dontSendNotification);
5646
}
5747

5848
void StopButton::paintButton (Graphics& g, bool shouldDrawButtonAsHighlighted, bool shouldDrawButtonAsDown)

Source/ui/StopButton.h

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,16 +27,14 @@ namespace ui {
2727
/**
2828
* @brief Toggle button associated with a particular stop on a division.
2929
*/
30-
class StopButton final : public juce::Button,
31-
public aeolus::Division::Listener
30+
class StopButton final : public juce::Button
3231
{
3332
public:
3433
StopButton(aeolus::Division& division, int stopIndex);
35-
~StopButton();
34+
3635
void setMargin(int m) noexcept { _margin = m; }
3736

38-
// aeolus::Division::Listener
39-
void stopEnablementChanged(int stopIndex) override;
37+
void update();
4038

4139
protected:
4240
// juce::Button

0 commit comments

Comments
 (0)