Skip to content

Commit

Permalink
Simplified passing MIDIInputNumber
Browse files Browse the repository at this point in the history
  • Loading branch information
oleg68 committed Mar 1, 2025
1 parent 3473d25 commit e616202
Show file tree
Hide file tree
Showing 14 changed files with 86 additions and 104 deletions.
7 changes: 0 additions & 7 deletions src/core/midi/GOMidiReceiverBase.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -177,16 +177,9 @@ void GOMidiReceiverBase::Load(
false,
127));
}
} else {
m_events.resize(0);
Preconfigure(cfg, group);
}
}

void GOMidiReceiverBase::Preconfigure(GOConfigReader &cfg, wxString group) {}

int GOMidiReceiverBase::GetTranspose() { return 0; }

void GOMidiReceiverBase::Save(
GOConfigWriter &cfg, const wxString &group, GOMidiMap &map) {
if (!m_events.empty()) {
Expand Down
3 changes: 1 addition & 2 deletions src/core/midi/GOMidiReceiverBase.h
Original file line number Diff line number Diff line change
Expand Up @@ -43,8 +43,7 @@ class GOMidiReceiverBase : public GOMidiReceiverEventPatternList {
unsigned createInternal(unsigned device);

protected:
virtual void Preconfigure(GOConfigReader &cfg, wxString group);
virtual int GetTranspose();
virtual int GetTranspose() const { return 0; }

public:
GOMidiReceiverBase(GOMidiReceiverType type);
Expand Down
10 changes: 5 additions & 5 deletions src/grandorgue/GOMetronome.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -85,11 +85,11 @@ GOMetronome::GOMetronome(GOOrganController *organController)
m_StopID(0) {
CreateButtons(*m_OrganController, BUTTON_DEFS);

m_buttons[ID_METRONOME_ON]->SetInitialMidiIndex(25);
m_buttons[ID_METRONOME_MEASURE_P1]->SetInitialMidiIndex(28);
m_buttons[ID_METRONOME_MEASURE_M1]->SetInitialMidiIndex(29);
m_buttons[ID_METRONOME_BEAT_P1]->SetInitialMidiIndex(26);
m_buttons[ID_METRONOME_BEAT_M1]->SetInitialMidiIndex(27);
m_buttons[ID_METRONOME_ON]->SetMidiInputNumber(25);
m_buttons[ID_METRONOME_MEASURE_P1]->SetMidiInputNumber(28);
m_buttons[ID_METRONOME_MEASURE_M1]->SetMidiInputNumber(29);
m_buttons[ID_METRONOME_BEAT_P1]->SetMidiInputNumber(26);
m_buttons[ID_METRONOME_BEAT_M1]->SetMidiInputNumber(27);

m_OrganController->RegisterSoundStateHandler(this);
}
Expand Down
54 changes: 27 additions & 27 deletions src/grandorgue/combinations/GOSetter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -707,33 +707,33 @@ GOSetter::GOSetter(GOOrganController *organController)

m_CrescendoCtrl.SetContext(&MIDI_CONTEXT_CRESCENDOS);

m_buttons[ID_SETTER_PREV]->SetInitialMidiIndex(0);
m_buttons[ID_SETTER_NEXT]->SetInitialMidiIndex(1);
m_buttons[ID_SETTER_SET]->SetInitialMidiIndex(2);
m_buttons[ID_SETTER_CURRENT]->SetInitialMidiIndex(3);
m_buttons[ID_SETTER_GC]->SetInitialMidiIndex(4);
m_buttons[ID_SETTER_M10]->SetInitialMidiIndex(5);
m_buttons[ID_SETTER_P10]->SetInitialMidiIndex(6);
m_buttons[ID_SETTER_L0]->SetInitialMidiIndex(7);
m_buttons[ID_SETTER_L1]->SetInitialMidiIndex(8);
m_buttons[ID_SETTER_L2]->SetInitialMidiIndex(9);
m_buttons[ID_SETTER_L3]->SetInitialMidiIndex(10);
m_buttons[ID_SETTER_L4]->SetInitialMidiIndex(11);
m_buttons[ID_SETTER_L5]->SetInitialMidiIndex(12);
m_buttons[ID_SETTER_L6]->SetInitialMidiIndex(13);
m_buttons[ID_SETTER_L7]->SetInitialMidiIndex(14);
m_buttons[ID_SETTER_L8]->SetInitialMidiIndex(15);
m_buttons[ID_SETTER_L9]->SetInitialMidiIndex(16);
m_buttons[ID_SETTER_PITCH_M1]->SetInitialMidiIndex(17);
m_buttons[ID_SETTER_PITCH_P1]->SetInitialMidiIndex(18);
m_buttons[ID_SETTER_PITCH_M100]->SetInitialMidiIndex(19);
m_buttons[ID_SETTER_PITCH_P100]->SetInitialMidiIndex(20);
m_buttons[ID_SETTER_TEMPERAMENT_PREV]->SetInitialMidiIndex(21);
m_buttons[ID_SETTER_TEMPERAMENT_NEXT]->SetInitialMidiIndex(22);
m_buttons[ID_SETTER_TRANSPOSE_DOWN]->SetInitialMidiIndex(23);
m_buttons[ID_SETTER_TRANSPOSE_UP]->SetInitialMidiIndex(24);
m_buttons[ID_SETTER_AUDIO_PANIC]->SetInitialMidiIndex(25);
m_buttons[ID_SETTER_FILE_EXIT]->SetInitialMidiIndex(26);
m_buttons[ID_SETTER_PREV]->SetMidiInputNumber(0);
m_buttons[ID_SETTER_NEXT]->SetMidiInputNumber(1);
m_buttons[ID_SETTER_SET]->SetMidiInputNumber(2);
m_buttons[ID_SETTER_CURRENT]->SetMidiInputNumber(3);
m_buttons[ID_SETTER_GC]->SetMidiInputNumber(4);
m_buttons[ID_SETTER_M10]->SetMidiInputNumber(5);
m_buttons[ID_SETTER_P10]->SetMidiInputNumber(6);
m_buttons[ID_SETTER_L0]->SetMidiInputNumber(7);
m_buttons[ID_SETTER_L1]->SetMidiInputNumber(8);
m_buttons[ID_SETTER_L2]->SetMidiInputNumber(9);
m_buttons[ID_SETTER_L3]->SetMidiInputNumber(10);
m_buttons[ID_SETTER_L4]->SetMidiInputNumber(11);
m_buttons[ID_SETTER_L5]->SetMidiInputNumber(12);
m_buttons[ID_SETTER_L6]->SetMidiInputNumber(13);
m_buttons[ID_SETTER_L7]->SetMidiInputNumber(14);
m_buttons[ID_SETTER_L8]->SetMidiInputNumber(15);
m_buttons[ID_SETTER_L9]->SetMidiInputNumber(16);
m_buttons[ID_SETTER_PITCH_M1]->SetMidiInputNumber(17);
m_buttons[ID_SETTER_PITCH_P1]->SetMidiInputNumber(18);
m_buttons[ID_SETTER_PITCH_M100]->SetMidiInputNumber(19);
m_buttons[ID_SETTER_PITCH_P100]->SetMidiInputNumber(20);
m_buttons[ID_SETTER_TEMPERAMENT_PREV]->SetMidiInputNumber(21);
m_buttons[ID_SETTER_TEMPERAMENT_NEXT]->SetMidiInputNumber(22);
m_buttons[ID_SETTER_TRANSPOSE_DOWN]->SetMidiInputNumber(23);
m_buttons[ID_SETTER_TRANSPOSE_UP]->SetMidiInputNumber(24);
m_buttons[ID_SETTER_AUDIO_PANIC]->SetMidiInputNumber(25);
m_buttons[ID_SETTER_FILE_EXIT]->SetMidiInputNumber(26);

m_buttons[ID_SETTER_PREV]->SetShortcutKey(37);
m_buttons[ID_SETTER_NEXT]->SetShortcutKey(39);
Expand Down
3 changes: 3 additions & 0 deletions src/grandorgue/config/GOConfig.h
Original file line number Diff line number Diff line change
Expand Up @@ -173,6 +173,9 @@ class GOConfig : public GOSettingStore, public GOOrganList {
wxString GetEventGroup(unsigned index);
wxString GetEventTitle(unsigned index);
const GOMidiReceiverBase *GetMidiEvent(unsigned index) const;
unsigned GetEventInputNumber(unsigned index) const {
return m_MIDISettings[index].index;
}
const GOMidiReceiverBase *FindMidiEvent(
GOMidiReceiverType type, unsigned index) const;

Expand Down
44 changes: 12 additions & 32 deletions src/grandorgue/midi/GOMidiReceiver.cpp
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/*
* Copyright 2006 Milan Digital Audio LLC
* Copyright 2009-2023 GrandOrgue contributors (see AUTHORS)
* Copyright 2009-2025 GrandOrgue contributors (see AUTHORS)
* License GPL-2.0 or later
* (https://www.gnu.org/licenses/old-licenses/gpl-2.0.html).
*/
Expand All @@ -15,13 +15,13 @@

GOMidiReceiver::GOMidiReceiver(
GOOrganModel &organModel, GOMidiReceiverType type)
: GOMidiReceiverBase(type),
r_OrganModel(organModel),
r_config(organModel.GetConfig()),
m_Index(-1) {}
: GOMidiReceiverBase(type), r_config(organModel.GetConfig()) {}

void GOMidiReceiver::Load(
GOConfigReader &cfg, const wxString &group, GOMidiMap &map) {
GOConfigReader &cfg,
const wxString &group,
GOMidiMap &map,
int midiInputNumber) {
if (!r_config.ODFCheck()) {
/* Skip old style entries */
if (m_type == MIDI_RECV_DRAWSTOP)
Expand All @@ -32,33 +32,13 @@ void GOMidiReceiver::Load(
ODFSetting, group, wxT("MIDIProgramChangeNumber"), 0, 128, false);
}
GOMidiReceiverBase::Load(cfg, group, map);
}

void GOMidiReceiver::Preconfigure(GOConfigReader &cfg, wxString group) {
unsigned index = 0;

if (m_type == MIDI_RECV_SETTER) {
index = m_Index;
}
if (m_type == MIDI_RECV_MANUAL) {
if (m_Index == -1)
return;
if (!IsMidiConfigured() && midiInputNumber >= 0) {
const GOMidiReceiverBase *pInitialEvents
= r_config.FindMidiEvent(m_type, midiInputNumber);

index = r_OrganModel.GetManual(m_Index)->GetMIDIInputNumber();
if (pInitialEvents)
RenewFrom(*pInitialEvents);
}
if (m_type == MIDI_RECV_ENCLOSURE) {
if (m_Index == -1)
return;

index = r_OrganModel.GetEnclosureElement(m_Index)->GetMIDIInputNumber();
}
const GOMidiReceiverBase *recv = r_config.FindMidiEvent(m_type, index);

if (!recv)
return;

for (unsigned i = 0; i < recv->GetEventCount(); i++)
m_events.push_back(recv->GetEvent(i));
}

int GOMidiReceiver::GetTranspose() { return r_config.Transpose(); }
int GOMidiReceiver::GetTranspose() const { return r_config.Transpose(); }
15 changes: 7 additions & 8 deletions src/grandorgue/midi/GOMidiReceiver.h
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/*
* Copyright 2006 Milan Digital Audio LLC
* Copyright 2009-2024 GrandOrgue contributors (see AUTHORS)
* Copyright 2009-2025 GrandOrgue contributors (see AUTHORS)
* License GPL-2.0 or later
* (https://www.gnu.org/licenses/old-licenses/gpl-2.0.html).
*/
Expand All @@ -15,21 +15,20 @@ class GOOrganModel;

class GOMidiReceiver : public GOMidiReceiverBase {
private:
GOOrganModel &r_OrganModel;
const GOConfig &r_config;
int m_Index;

protected:
void Preconfigure(GOConfigReader &cfg, wxString group) override;
int GetTranspose() override;
int GetTranspose() const override;

public:
GOMidiReceiver(GOOrganModel &organModel, GOMidiReceiverType type);

using GOMidiReceiverBase::Load;
void Load(
GOConfigReader &cfg, const wxString &group, GOMidiMap &map) override;

void SetIndex(int index) { m_Index = index; }
GOConfigReader &cfg,
const wxString &group,
GOMidiMap &map,
int midiInputNumber = -1);
};

#endif
20 changes: 18 additions & 2 deletions src/grandorgue/midi/objects/GOMidiReceivingSendingObject.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@ GOMidiReceivingSendingObject::GOMidiReceivingSendingObject(
GOMidiReceiverType reveiverType)
: GOMidiSendingObject(organModel, midiTypeCode, midiTypeName, senderType),
m_receiver(organModel, reveiverType),
p_ReceiverKeyMap(nullptr) {
p_ReceiverKeyMap(nullptr),
m_MidiInputNumber(0) {
SetMidiReceiver(&m_receiver);
r_OrganModel.RegisterEventHandler(this);
}
Expand All @@ -27,11 +28,26 @@ GOMidiReceivingSendingObject::~GOMidiReceivingSendingObject() {
SetMidiReceiver(nullptr);
}

void GOMidiReceivingSendingObject::Init(
GOConfigReader &cfg, const wxString &group, const wxString &name) {
// using in Load for initial MIDI config
m_MidiInputNumber = 0;
GOMidiSendingObject::Init(cfg, group, name);
}

void GOMidiReceivingSendingObject::Load(
GOConfigReader &cfg, const wxString &group, const wxString &name) {
// using in Load for initial MIDI config
m_MidiInputNumber = cfg.ReadInteger(
ODFSetting, group, wxT("MIDIInputNumber"), 0, 200, false, 0);
GOMidiSendingObject::Load(cfg, group, name);
}

void GOMidiReceivingSendingObject::LoadMidiObject(
GOConfigReader &cfg, const wxString &group, GOMidiMap &midiMap) {
GOMidiSendingObject::LoadMidiObject(cfg, group, midiMap);
if (!IsReadOnly()) {
m_receiver.Load(cfg, group, midiMap);
m_receiver.Load(cfg, group, midiMap, m_MidiInputNumber);
}
}

Expand Down
11 changes: 10 additions & 1 deletion src/grandorgue/midi/objects/GOMidiReceivingSendingObject.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ class GOMidiReceivingSendingObject : public GOMidiSendingObject,
private:
GOMidiReceiver m_receiver;
const GOMidiReceiver::KeyMap *p_ReceiverKeyMap;
// used for load initial config
uint8_t m_MidiInputNumber;

protected:
GOMidiReceivingSendingObject(
Expand All @@ -36,11 +38,18 @@ class GOMidiReceivingSendingObject : public GOMidiSendingObject,

public:
// Should be used before Load()
void SetInitialMidiIndex(unsigned index) { m_receiver.SetIndex(index); }
int GetMidiInputNumber() const { return m_MidiInputNumber; }
void SetMidiInputNumber(int midiInputNumber) {
m_MidiInputNumber = midiInputNumber;
}

virtual void SetElementId(int id) override;

protected:
void Init(
GOConfigReader &cfg, const wxString &group, const wxString &name) override;
void Load(
GOConfigReader &cfg, const wxString &group, const wxString &name) override;
virtual void LoadMidiObject(
GOConfigReader &cfg, const wxString &group, GOMidiMap &midiMap) override;
virtual void SaveMidiObject(
Expand Down
8 changes: 1 addition & 7 deletions src/grandorgue/model/GOEnclosure.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@ GOEnclosure::GOEnclosure(GOOrganModel &organModel)
MIDI_RECV_ENCLOSURE,
GOMidiShortcutReceiver::KEY_RECV_ENCLOSURE),
m_DefaultAmpMinimumLevel(0),
m_MIDIInputNumber(0),
m_Displayed1(false),
m_Displayed2(false),
m_AmpMinimumLevel(0),
Expand All @@ -53,17 +52,12 @@ void GOEnclosure::Init(
const wxString &group,
const wxString &name,
uint8_t defaultValue) {
m_MIDIInputNumber = 0;
GOMidiReceivingSendingObject::Init(cfg, group, name);
m_DefaultAmpMinimumLevel = 0;
LoadFromCmb(cfg, defaultValue);
}

void GOEnclosure::Load(
GOConfigReader &cfg, const wxString &group, int enclosureNb) {
SetInitialMidiIndex(enclosureNb); // Used in LoadMidiObject
m_MIDIInputNumber = cfg.ReadInteger(
ODFSetting, group, wxT("MIDIInputNumber"), 0, 200, false, 0);
void GOEnclosure::Load(GOConfigReader &cfg, const wxString &group) {
GOMidiReceivingSendingObject::Load(
cfg, group, cfg.ReadStringNotEmpty(ODFSetting, group, wxT("Name")));
m_Displayed1
Expand Down
4 changes: 1 addition & 3 deletions src/grandorgue/model/GOEnclosure.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@ class GOOrganModel;
class GOEnclosure : public GOControl, public GOMidiObjectWithShortcut {
private:
uint8_t m_DefaultAmpMinimumLevel;
uint8_t m_MIDIInputNumber;
bool m_Displayed1;
bool m_Displayed2;

Expand Down Expand Up @@ -59,10 +58,9 @@ class GOEnclosure : public GOControl, public GOMidiObjectWithShortcut {
const wxString &name,
uint8_t defValue);
using GOMidiObject::Load; // for avoiding a warning
void Load(GOConfigReader &cfg, const wxString &group, int enclosureNb);
void Load(GOConfigReader &cfg, const wxString &group);
void SetEnclosureValue(uint8_t n);
int GetEnclosureValue() const { return m_MIDIValue; }
int GetMIDIInputNumber() const { return m_MIDIInputNumber; }
float GetAttenuation();

void Scroll(bool scroll_up);
Expand Down
7 changes: 0 additions & 7 deletions src/grandorgue/model/GOManual.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,6 @@ GOManual::GOManual(
m_first_accessible_key_midi_note_nb(0),
m_nb_accessible_keys(0),
m_UnisonOff(0),
m_MIDIInputNumber(0),
m_tremulant_ids(0),
m_GlobalSwitchIds(0),
m_stops(0),
Expand All @@ -67,7 +66,6 @@ GOManual::GOManual(
m_displayed(false),
m_DivisionalTemplate(organModel) {
SetContext(pParentContext);
SetInitialMidiIndex(manualNumber); // Used in LoadMidiObject
SetReceiverKeyMap(&m_MidiKeyMap);
m_InputCouplers.push_back(NULL);
r_OrganModel.RegisterCombinationButtonSet(this);
Expand Down Expand Up @@ -98,7 +96,6 @@ void GOManual::Init(
const wxString &group,
unsigned firstMidi,
unsigned keys) {
m_MIDIInputNumber = 0;
GOMidiReceivingSendingObject::Init(
cfg,
group,
Expand Down Expand Up @@ -130,8 +127,6 @@ void GOManual::Init(
}

void GOManual::Load(GOConfigReader &cfg, const wxString &group) {
m_MIDIInputNumber = cfg.ReadInteger(
ODFSetting, group, wxT("MIDIInputNumber"), 0, 200, false, 0);
GOMidiReceivingSendingObject::Load(
cfg, group, cfg.ReadStringNotEmpty(ODFSetting, group, wxT("Name")));
m_MidiContext.SetTitle(GetName());
Expand Down Expand Up @@ -347,8 +342,6 @@ void GOManual::SetUnisonOff(bool on) {
SetOutput(note, on ? m_RemoteVelocity[note] : m_Velocity[note]);
}

int GOManual::GetMIDIInputNumber() { return m_MIDIInputNumber; }

unsigned GOManual::GetLogicalKeyCount() { return m_nb_logical_keys; }

unsigned GOManual::GetNumberOfAccessibleKeys() { return m_nb_accessible_keys; }
Expand Down
2 changes: 0 additions & 2 deletions src/grandorgue/model/GOManual.h
Original file line number Diff line number Diff line change
Expand Up @@ -52,8 +52,6 @@ class GOManual : public GOControl,
unsigned m_nb_accessible_keys;
unsigned m_UnisonOff;

int m_MIDIInputNumber;

std::vector<unsigned> m_tremulant_ids;

// Global Switch Id is the number of switch in ODF started with 1
Expand Down
2 changes: 1 addition & 1 deletion src/grandorgue/model/GOOrganModel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ void GOOrganModel::Load(GOConfigReader &cfg) {
GOEnclosure *pEnclosure = new GOEnclosure(*this);

pEnclosure->SetContext(&MIDI_CONTEXT_ENCLOSURES);
pEnclosure->Load(cfg, wxString::Format(wxT("Enclosure%03u"), i + 1), i);
pEnclosure->Load(cfg, wxString::Format(wxT("Enclosure%03u"), i + 1));
m_enclosures.push_back(pEnclosure);
}

Expand Down

0 comments on commit e616202

Please sign in to comment.