From ee7aec174223c96aa069b91f9b008c455e840e84 Mon Sep 17 00:00:00 2001 From: Oleg Samarin Date: Thu, 1 Feb 2024 10:32:55 +0300 Subject: [PATCH] Simplified code of GOPipeConfig and GOPipeConfigNode (#1782) --- .../model/pipe-config/GOPipeConfig.cpp | 113 ++------------ .../model/pipe-config/GOPipeConfig.h | 105 +++++++++---- .../model/pipe-config/GOPipeConfigNode.cpp | 145 ++++++------------ .../model/pipe-config/GOPipeConfigNode.h | 73 ++++++--- .../pipe-config/GOPipeConfigTreeNode.cpp | 10 -- .../model/pipe-config/GOPipeConfigTreeNode.h | 10 +- 6 files changed, 191 insertions(+), 265 deletions(-) diff --git a/src/grandorgue/model/pipe-config/GOPipeConfig.cpp b/src/grandorgue/model/pipe-config/GOPipeConfig.cpp index ae2823298..79d98257c 100644 --- a/src/grandorgue/model/pipe-config/GOPipeConfig.cpp +++ b/src/grandorgue/model/pipe-config/GOPipeConfig.cpp @@ -10,9 +10,6 @@ #include "config/GOConfigReader.h" #include "config/GOConfigWriter.h" -#include "GOPipeConfigListener.h" -#include "GOPipeUpdateCallback.h" - GOPipeConfig::GOPipeConfig( GOPipeConfigListener &listener, GOPipeUpdateCallback *callback) : r_listener(listener), @@ -20,24 +17,24 @@ GOPipeConfig::GOPipeConfig( m_Group(), m_NamePrefix(), m_AudioGroup(), - m_Amplitude(0), m_DefaultAmplitude(0), + m_Amplitude(0), m_DefaultGain(0), + m_Gain(0), m_PitchTuning(0), m_PitchCorrection(0), - m_Gain(0), m_ManualTuning(0), m_AutoTuningCorrection(0), - m_Delay(0), m_DefaultDelay(0), + m_Delay(0), + m_ReleaseTail(0), m_BitsPerSample(-1), - m_Compress(-1), m_Channels(-1), m_LoopLoad(-1), + m_Compress(-1), m_AttackLoad(-1), m_ReleaseLoad(-1), - m_IgnorePitch(-1), - m_ReleaseTail(0) {} + m_IgnorePitch(-1) {} static const wxString WX_TUNING = wxT("Tuning"); static const wxString WX_MANUAL_TUNING = wxT("ManualTuning"); @@ -214,96 +211,10 @@ void GOPipeConfig::Save(GOConfigWriter &cfg) { m_Group, m_NamePrefix + wxT("ReleaseTail"), (int)m_ReleaseTail); } -GOPipeUpdateCallback *GOPipeConfig::GetCallback() { return m_Callback; } - -void GOPipeConfig::SetAudioGroup(const wxString &str) { - m_AudioGroup = str; - m_Callback->UpdateAudioGroup(); - r_listener.NotifyPipeConfigModified(); -} - -float GOPipeConfig::GetAmplitude() { return m_Amplitude; } - -float GOPipeConfig::GetDefaultAmplitude() { return m_DefaultAmplitude; } - -void GOPipeConfig::SetAmplitude(float amp) { - m_Amplitude = amp; - m_Callback->UpdateAmplitude(); - r_listener.NotifyPipeConfigModified(); -} - -float GOPipeConfig::GetGain() { return m_Gain; } - -float GOPipeConfig::GetDefaultGain() { return m_DefaultGain; } - -void GOPipeConfig::SetGain(float gain) { - m_Gain = gain; - m_Callback->UpdateAmplitude(); - r_listener.NotifyPipeConfigModified(); -} - -void GOPipeConfig::SetManualTuning(float cent) { - if (cent < -1800) - cent = -1800; - if (cent > 1800) - cent = 1800; - m_ManualTuning = cent; - m_Callback->UpdateTuning(); - r_listener.NotifyPipeConfigModified(); -} - -void GOPipeConfig::SetAutoTuningCorrection(float cent) { - if (cent < -1800) - cent = -1800; - if (cent > 1800) - cent = 1800; - m_AutoTuningCorrection = cent; - m_Callback->UpdateTuning(); - r_listener.NotifyPipeConfigModified(); -} - -void GOPipeConfig::SetDelay(unsigned delay) { - m_Delay = delay; - r_listener.NotifyPipeConfigModified(); -} - -void GOPipeConfig::SetBitsPerSample(int value) { - m_BitsPerSample = value; - r_listener.NotifyPipeConfigModified(); -} - -void GOPipeConfig::SetCompress(int value) { - m_Compress = value; - r_listener.NotifyPipeConfigModified(); -} - -void GOPipeConfig::SetChannels(int value) { - m_Channels = value; - r_listener.NotifyPipeConfigModified(); -} - -void GOPipeConfig::SetLoopLoad(int value) { - m_LoopLoad = value; - r_listener.NotifyPipeConfigModified(); -} - -void GOPipeConfig::SetAttackLoad(int value) { - m_AttackLoad = value; - r_listener.NotifyPipeConfigModified(); -} - -void GOPipeConfig::SetReleaseLoad(int value) { - m_ReleaseLoad = value; - r_listener.NotifyPipeConfigModified(); -} - -void GOPipeConfig::SetIgnorePitch(int value) { - m_IgnorePitch = value; - r_listener.NotifyPipeConfigModified(); -} - -void GOPipeConfig::SetReleaseTail(unsigned releaseTail) { - m_ReleaseTail = releaseTail; - m_Callback->UpdateReleaseTail(); - r_listener.NotifyPipeConfigModified(); +void GOPipeConfig::SetPitchMember(float cents, float &member) { + if (cents < -1800) + cents = -1800; + if (cents > 1800) + cents = 1800; + SetSmallMember(cents, member, &GOPipeUpdateCallback::UpdateTuning); } diff --git a/src/grandorgue/model/pipe-config/GOPipeConfig.h b/src/grandorgue/model/pipe-config/GOPipeConfig.h index 8f374d9c4..701defbd6 100644 --- a/src/grandorgue/model/pipe-config/GOPipeConfig.h +++ b/src/grandorgue/model/pipe-config/GOPipeConfig.h @@ -10,10 +10,12 @@ #include +#include "GOPipeConfigListener.h" +#include "GOPipeUpdateCallback.h" + class GOConfigReader; class GOConfigWriter; class GOPipeConfigListener; -class GOPipeUpdateCallback; class GOPipeConfig { private: @@ -22,30 +24,57 @@ class GOPipeConfig { wxString m_Group; wxString m_NamePrefix; wxString m_AudioGroup; - float m_Amplitude; float m_DefaultAmplitude; + float m_Amplitude; float m_DefaultGain; + float m_Gain; // ODF pitch tuning offset for using withot auto-tuning float m_PitchTuning; // ODF pitch tuning offset for using with auto-tuning float m_PitchCorrection; - float m_Gain; float m_ManualTuning; float m_AutoTuningCorrection; - unsigned m_Delay; unsigned m_DefaultDelay; + unsigned m_Delay; + unsigned m_ReleaseTail; // the max release length in ms int m_BitsPerSample; - int m_Compress; int m_Channels; int m_LoopLoad; + int m_Compress; int m_AttackLoad; int m_ReleaseLoad; int m_IgnorePitch; - unsigned m_ReleaseTail; // the max release length in ms void ReadTuning( GOConfigReader &cfg, const wxString &group, const wxString &prefix); + /* two generic setters SetSmallMember and SetLargeMember differ only in + * passing values */ + +#define SET_MEMBER_BODY(value, member, callbackFun) \ + member = value; \ + if (callbackFun) \ + (m_Callback->*callbackFun)(); \ + r_listener.NotifyPipeConfigModified(); + + template + void SetSmallMember( + const T value, + T &member, + void (GOPipeUpdateCallback::*callbackFun)() = nullptr) { + SET_MEMBER_BODY(value, member, callbackFun) + } + + template + void SetLargeMember( + const T &value, + T &member, + void (GOPipeUpdateCallback::*callbackFun)() = nullptr) { + SET_MEMBER_BODY(value, member, callbackFun) + } + + void SetPitchMember(float cents, float &member); + public: GOPipeConfig(GOPipeConfigListener &listener, GOPipeUpdateCallback *callback); @@ -53,54 +82,66 @@ class GOPipeConfig { void Load(GOConfigReader &cfg, const wxString &group, const wxString &prefix); void Save(GOConfigWriter &cfg); - GOPipeUpdateCallback *GetCallback(); - - float GetAmplitude(); - float GetDefaultAmplitude(); - void SetAmplitude(float amp); + GOPipeUpdateCallback *GetCallback() const { return m_Callback; } - float GetGain(); - float GetDefaultGain(); - void SetGain(float gain); + const wxString &GetAudioGroup() const { return m_AudioGroup; } + void SetAudioGroup(const wxString &str) { + SetLargeMember(str, m_AudioGroup, &GOPipeUpdateCallback::UpdateAudioGroup); + } + + float GetDefaultAmplitude() const { return m_DefaultAmplitude; } + float GetAmplitude() const { return m_Amplitude; } + void SetAmplitude(float amp) { + SetSmallMember(amp, m_Amplitude, &GOPipeUpdateCallback::UpdateAmplitude); + } + + float GetDefaultGain() const { return m_DefaultGain; } + float GetGain() const { return m_Gain; } + void SetGain(float gain) { + SetSmallMember(gain, m_Gain, &GOPipeUpdateCallback::UpdateAmplitude); + } float GetPitchTuning() const { return m_PitchTuning; } float GetPitchCorrection() const { return m_PitchCorrection; } + float GetManualTuning() const { return m_ManualTuning; } - void SetManualTuning(float cent); + void SetManualTuning(float cents) { SetPitchMember(cents, m_ManualTuning); } + float GetAutoTuningCorrection() const { return m_AutoTuningCorrection; } - void SetAutoTuningCorrection(float cent); + void SetAutoTuningCorrection(float cents) { + SetPitchMember(cents, m_AutoTuningCorrection); + } unsigned GetDefaultDelay() const { return m_DefaultDelay; } - unsigned GetDelay() const { return m_Delay; } - void SetDelay(unsigned delay); + void SetDelay(unsigned delay) { SetSmallMember(delay, m_Delay); } - const wxString &GetAudioGroup() const { return m_AudioGroup; } - void SetAudioGroup(const wxString &str); + unsigned GetReleaseTail() const { return m_ReleaseTail; } + void SetReleaseTail(unsigned releaseTail) { + SetSmallMember( + releaseTail, m_ReleaseTail, &GOPipeUpdateCallback::UpdateReleaseTail); + } int GetBitsPerSample() const { return m_BitsPerSample; } - void SetBitsPerSample(int value); - - int GetCompress() const { return m_Compress; } - void SetCompress(int value); + void SetBitsPerSample(int value) { SetSmallMember(value, m_BitsPerSample); } int GetChannels() const { return m_Channels; } - void SetChannels(int value); + void SetChannels(int value) { SetSmallMember(value, m_Channels); } int GetLoopLoad() const { return m_LoopLoad; } - void SetLoopLoad(int value); + void SetLoopLoad(int value) { SetSmallMember(value, m_LoopLoad); } + + int GetCompress() const { return m_Compress; } + void SetCompress(int value) { SetSmallMember(value, m_Compress); } int GetAttackLoad() const { return m_AttackLoad; } - void SetAttackLoad(int value); + void SetAttackLoad(int value) { SetSmallMember(value, m_AttackLoad); } int GetReleaseLoad() const { return m_ReleaseLoad; } - void SetReleaseLoad(int value); + void SetReleaseLoad(int value) { SetSmallMember(value, m_ReleaseLoad); } int IsIgnorePitch() const { return m_IgnorePitch; } - void SetIgnorePitch(int value); - - unsigned GetReleaseTail() const { return m_ReleaseTail; } - void SetReleaseTail(unsigned releaseTail); + void SetIgnorePitch(int value) { SetSmallMember(value, m_IgnorePitch); } }; #endif diff --git a/src/grandorgue/model/pipe-config/GOPipeConfigNode.cpp b/src/grandorgue/model/pipe-config/GOPipeConfigNode.cpp index 8ac604ba3..de3db5ff6 100644 --- a/src/grandorgue/model/pipe-config/GOPipeConfigNode.cpp +++ b/src/grandorgue/model/pipe-config/GOPipeConfigNode.cpp @@ -28,44 +28,44 @@ GOPipeConfigNode::GOPipeConfigNode( m_parent->AddChild(this); } -GOPipeConfigNode::~GOPipeConfigNode() {} - void GOPipeConfigNode::SetParent(GOPipeConfigNode *parent) { m_parent = parent; if (m_parent) m_parent->AddChild(this); } -const wxString &GOPipeConfigNode::GetName() { return m_Name; } - -void GOPipeConfigNode::SetName(wxString name) { m_Name = name; } - void GOPipeConfigNode::Init( - GOConfigReader &cfg, wxString group, wxString prefix) { + GOConfigReader &cfg, const wxString &group, const wxString &prefix) { r_OrganModel.RegisterSaveableObject(this); m_PipeConfig.Init(cfg, group, prefix); } void GOPipeConfigNode::Load( - GOConfigReader &cfg, wxString group, wxString prefix) { + GOConfigReader &cfg, const wxString &group, const wxString &prefix) { r_OrganModel.RegisterSaveableObject(this); m_PipeConfig.Load(cfg, group, prefix); } -void GOPipeConfigNode::Save(GOConfigWriter &cfg) { m_PipeConfig.Save(cfg); } - -GOPipeConfig &GOPipeConfigNode::GetPipeConfig() { return m_PipeConfig; } +float GOPipeConfigNode::GetEffectiveFloatSum( + float (GOPipeConfig::*getFloat)() const, + float (GOPipeConfigNode::*getParentFloat)() const) const { + float value = (m_PipeConfig.*getFloat)(); -void GOPipeConfigNode::ModifyManualTuning(float diff) { - m_PipeConfig.SetManualTuning(m_PipeConfig.GetManualTuning() + diff); + if (m_parent) + value += (m_parent->*getParentFloat)(); + return value; } -void GOPipeConfigNode::ModifyAutoTuningCorrection(float diff) { - m_PipeConfig.SetAutoTuningCorrection( - m_PipeConfig.GetAutoTuningCorrection() + diff); +wxString GOPipeConfigNode::GetEffectiveAudioGroup() const { + if (m_PipeConfig.GetAudioGroup() != wxEmptyString) + return m_PipeConfig.GetAudioGroup(); + if (m_parent) + return m_parent->GetEffectiveAudioGroup(); + else + return wxEmptyString; } -float GOPipeConfigNode::GetEffectiveAmplitude() { +float GOPipeConfigNode::GetEffectiveAmplitude() const { if (m_parent) return m_PipeConfig.GetAmplitude() * m_parent->GetEffectiveAmplitude() / 100.0; @@ -73,45 +73,6 @@ float GOPipeConfigNode::GetEffectiveAmplitude() { return m_PipeConfig.GetAmplitude() / 100.0; } -float GOPipeConfigNode::GetEffectiveGain() { - if (m_parent) - return m_PipeConfig.GetGain() + m_parent->GetEffectiveGain(); - else - return m_PipeConfig.GetGain(); -} - -float GOPipeConfigNode::GetEffectivePitchTuning() const { - float pitchTuning = m_PipeConfig.GetPitchTuning(); - - if (m_parent) - pitchTuning += m_parent->GetEffectivePitchTuning(); - return pitchTuning; -} - -float GOPipeConfigNode::GetEffectivePitchCorrection() const { - float pitchCorrection = m_PipeConfig.GetPitchCorrection(); - - if (m_parent) - pitchCorrection += m_parent->GetEffectivePitchCorrection(); - return pitchCorrection; -} - -float GOPipeConfigNode::GetEffectiveManualTuning() const { - float cents = m_PipeConfig.GetManualTuning(); - - if (m_parent) - cents += m_parent->GetEffectiveManualTuning(); - return cents; -} - -float GOPipeConfigNode::GetEffectiveAutoTuningCorection() const { - float cents = m_PipeConfig.GetAutoTuningCorrection(); - - if (m_parent) - cents += m_parent->GetEffectiveAutoTuningCorection(); - return cents; -} - unsigned GOPipeConfigNode::GetEffectiveDelay() const { if (m_parent) return m_PipeConfig.GetDelay() + m_parent->GetEffectiveDelay(); @@ -119,13 +80,14 @@ unsigned GOPipeConfigNode::GetEffectiveDelay() const { return m_PipeConfig.GetDelay(); } -wxString GOPipeConfigNode::GetEffectiveAudioGroup() const { - if (m_PipeConfig.GetAudioGroup() != wxEmptyString) - return m_PipeConfig.GetAudioGroup(); - if (m_parent) - return m_parent->GetEffectiveAudioGroup(); - else - return wxEmptyString; +unsigned GOPipeConfigNode::GetEffectiveReleaseTail() const { + unsigned releaseTail = m_parent ? m_parent->GetEffectiveReleaseTail() : 0; + const unsigned thisReleaseTail = m_PipeConfig.GetReleaseTail(); + + // Set releaseTail as minimum between the parent release tail and this one + if (thisReleaseTail && (!releaseTail || thisReleaseTail < releaseTail)) + releaseTail = thisReleaseTail; + return releaseTail; } unsigned GOPipeConfigNode::GetEffectiveBitsPerSample() const { @@ -137,13 +99,13 @@ unsigned GOPipeConfigNode::GetEffectiveBitsPerSample() const { return m_config.BitsPerSample(); } -bool GOPipeConfigNode::GetEffectiveCompress() const { - if (m_PipeConfig.GetCompress() != -1) - return m_PipeConfig.GetCompress() ? true : false; +unsigned GOPipeConfigNode::GetEffectiveChannels() const { + if (m_PipeConfig.GetChannels() != -1) + return m_PipeConfig.GetChannels(); if (m_parent) - return m_parent->GetEffectiveCompress(); + return m_parent->GetEffectiveChannels(); else - return m_config.LosslessCompression(); + return m_config.LoadChannels(); } unsigned GOPipeConfigNode::GetEffectiveLoopLoad() const { @@ -155,6 +117,15 @@ unsigned GOPipeConfigNode::GetEffectiveLoopLoad() const { return m_config.LoopLoad(); } +bool GOPipeConfigNode::GetEffectiveCompress() const { + if (m_PipeConfig.GetCompress() != -1) + return m_PipeConfig.GetCompress() ? true : false; + if (m_parent) + return m_parent->GetEffectiveCompress(); + else + return m_config.LosslessCompression(); +} + bool GOPipeConfigNode::GetEffectiveAttackLoad() const { const int thisConfigValue = m_PipeConfig.GetAttackLoad(); @@ -171,21 +142,6 @@ bool GOPipeConfigNode::GetEffectiveReleaseLoad() const { : m_config.ReleaseLoad(); } -unsigned GOPipeConfigNode::GetEffectiveChannels() const { - if (m_PipeConfig.GetChannels() != -1) - return m_PipeConfig.GetChannels(); - if (m_parent) - return m_parent->GetEffectiveChannels(); - else - return m_config.LoadChannels(); -} - -GOSampleStatistic GOPipeConfigNode::GetStatistic() const { - if (m_StatisticCallback) - return m_StatisticCallback->GetStatistic(); - return GOSampleStatistic(); -} - bool GOPipeConfigNode::GetEffectiveIgnorePitch() const { const int thisConfigValue = m_PipeConfig.IsIgnorePitch(); @@ -194,18 +150,17 @@ bool GOPipeConfigNode::GetEffectiveIgnorePitch() const { : m_parent && m_parent->GetEffectiveIgnorePitch(); } -unsigned GOPipeConfigNode::GetEffectiveReleaseTail() const { - unsigned releaseTail = m_parent ? m_parent->GetEffectiveReleaseTail() : 0; - const unsigned thisReleaseTail = m_PipeConfig.GetReleaseTail(); - - // Set releaseTail as minimum between the parent release tail and this one - if (thisReleaseTail && (!releaseTail || thisReleaseTail < releaseTail)) - releaseTail = thisReleaseTail; - return releaseTail; +GOSampleStatistic GOPipeConfigNode::GetStatistic() const { + if (m_StatisticCallback) + return m_StatisticCallback->GetStatistic(); + return GOSampleStatistic(); } -unsigned GOPipeConfigNode::GetChildCount() { return 0; } - -GOPipeConfigNode *GOPipeConfigNode::GetChild(unsigned index) { return NULL; } +void GOPipeConfigNode::ModifyManualTuning(float diff) { + m_PipeConfig.SetManualTuning(m_PipeConfig.GetManualTuning() + diff); +} -void GOPipeConfigNode::AddChild(GOPipeConfigNode *node) {} +void GOPipeConfigNode::ModifyAutoTuningCorrection(float diff) { + m_PipeConfig.SetAutoTuningCorrection( + m_PipeConfig.GetAutoTuningCorrection() + diff); +} diff --git a/src/grandorgue/model/pipe-config/GOPipeConfigNode.h b/src/grandorgue/model/pipe-config/GOPipeConfigNode.h index 99129d9bc..17f7bb7d3 100644 --- a/src/grandorgue/model/pipe-config/GOPipeConfigNode.h +++ b/src/grandorgue/model/pipe-config/GOPipeConfigNode.h @@ -25,7 +25,11 @@ class GOPipeConfigNode : private GOSaveableObject { GOStatisticCallback *m_StatisticCallback; wxString m_Name; - void Save(GOConfigWriter &cfg); + void Save(GOConfigWriter &cfg) override { m_PipeConfig.Save(cfg); } + + float GetEffectiveFloatSum( + float (GOPipeConfig::*getFloat)() const, + float (GOPipeConfigNode::*getParentFloat)() const) const; public: GOPipeConfigNode( @@ -33,44 +37,67 @@ class GOPipeConfigNode : private GOSaveableObject { GOOrganModel &organModel, GOPipeUpdateCallback *callback, GOStatisticCallback *statistic); - virtual ~GOPipeConfigNode(); GOPipeConfigNode *GetParent() const { return m_parent; } void SetParent(GOPipeConfigNode *parent); - void Init(GOConfigReader &cfg, wxString group, wxString prefix); - void Load(GOConfigReader &cfg, wxString group, wxString prefix); + void Init(GOConfigReader &cfg, const wxString &group, const wxString &prefix); + void Load(GOConfigReader &cfg, const wxString &group, const wxString &prefix); - const wxString &GetName(); - void SetName(wxString name); + const wxString &GetName() const { return m_Name; } + void SetName(const wxString &name) { m_Name = name; } - GOPipeConfig &GetPipeConfig(); + GOPipeConfig &GetPipeConfig() { return m_PipeConfig; } - void ModifyManualTuning(float diff); - void ModifyAutoTuningCorrection(float diff); + wxString GetEffectiveAudioGroup() const; - float GetEffectiveAmplitude(); - float GetEffectiveGain(); - float GetEffectivePitchTuning() const; - float GetEffectivePitchCorrection() const; - float GetEffectiveManualTuning() const; - float GetEffectiveAutoTuningCorection() const; + float GetEffectiveAmplitude() const; - unsigned GetEffectiveDelay() const; - wxString GetEffectiveAudioGroup() const; + float GetEffectiveGain() const { + return GetEffectiveFloatSum( + &GOPipeConfig::GetGain, &GOPipeConfigNode::GetEffectiveGain); + } + + float GetEffectivePitchTuning() const { + return GetEffectiveFloatSum( + &GOPipeConfig::GetPitchTuning, + &GOPipeConfigNode::GetEffectivePitchTuning); + } + + float GetEffectivePitchCorrection() const { + return GetEffectiveFloatSum( + &GOPipeConfig::GetPitchCorrection, + &GOPipeConfigNode::GetEffectivePitchCorrection); + } + + float GetEffectiveManualTuning() const { + return GetEffectiveFloatSum( + &GOPipeConfig::GetManualTuning, + &GOPipeConfigNode::GetEffectiveManualTuning); + } + + float GetEffectiveAutoTuningCorection() const { + return GetEffectiveFloatSum( + &GOPipeConfig::GetAutoTuningCorrection, + &GOPipeConfigNode::GetEffectiveAutoTuningCorection); + } + unsigned GetEffectiveDelay() const; + unsigned GetEffectiveReleaseTail() const; unsigned GetEffectiveBitsPerSample() const; - bool GetEffectiveCompress() const; + unsigned GetEffectiveChannels() const; unsigned GetEffectiveLoopLoad() const; + bool GetEffectiveCompress() const; bool GetEffectiveAttackLoad() const; bool GetEffectiveReleaseLoad() const; - unsigned GetEffectiveChannels() const; bool GetEffectiveIgnorePitch() const; - unsigned GetEffectiveReleaseTail() const; - virtual void AddChild(GOPipeConfigNode *node); - virtual unsigned GetChildCount(); - virtual GOPipeConfigNode *GetChild(unsigned index); + virtual void AddChild(GOPipeConfigNode *node) {} + virtual unsigned GetChildCount() const { return 0; } + virtual GOPipeConfigNode *GetChild(unsigned index) const { return nullptr; } virtual GOSampleStatistic GetStatistic() const; + + void ModifyManualTuning(float diff); + void ModifyAutoTuningCorrection(float diff); }; #endif diff --git a/src/grandorgue/model/pipe-config/GOPipeConfigTreeNode.cpp b/src/grandorgue/model/pipe-config/GOPipeConfigTreeNode.cpp index 9dd855ca4..5961709bd 100644 --- a/src/grandorgue/model/pipe-config/GOPipeConfigTreeNode.cpp +++ b/src/grandorgue/model/pipe-config/GOPipeConfigTreeNode.cpp @@ -17,16 +17,6 @@ GOPipeConfigTreeNode::GOPipeConfigTreeNode( m_Childs(), m_Callback(callback) {} -void GOPipeConfigTreeNode::AddChild(GOPipeConfigNode *node) { - m_Childs.push_back(node); -} - -unsigned GOPipeConfigTreeNode::GetChildCount() { return m_Childs.size(); } - -GOPipeConfigNode *GOPipeConfigTreeNode::GetChild(unsigned index) { - return m_Childs[index]; -} - void GOPipeConfigTreeNode::UpdateAmplitude() { for (unsigned i = 0; i < m_Childs.size(); i++) m_Childs[i]->GetPipeConfig().GetCallback()->UpdateAmplitude(); diff --git a/src/grandorgue/model/pipe-config/GOPipeConfigTreeNode.h b/src/grandorgue/model/pipe-config/GOPipeConfigTreeNode.h index 69f173979..1bc5b422b 100644 --- a/src/grandorgue/model/pipe-config/GOPipeConfigTreeNode.h +++ b/src/grandorgue/model/pipe-config/GOPipeConfigTreeNode.h @@ -30,10 +30,12 @@ class GOPipeConfigTreeNode : public GOPipeConfigNode, GOOrganModel *organModel, GOPipeUpdateCallback *callback); - void AddChild(GOPipeConfigNode *node); - unsigned GetChildCount(); - GOPipeConfigNode *GetChild(unsigned index); - GOSampleStatistic GetStatistic() const; + void AddChild(GOPipeConfigNode *node) override { m_Childs.push_back(node); } + unsigned GetChildCount() const override { return m_Childs.size(); } + GOPipeConfigNode *GetChild(unsigned index) const override { + return m_Childs[index]; + } + GOSampleStatistic GetStatistic() const override; }; #endif