Skip to content

Commit 5733351

Browse files
committed
Simplified passing MIDIInputNumber
1 parent b3d2d84 commit 5733351

15 files changed

+89
-106
lines changed

src/core/midi/GOMidiEventPatternList.h

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/*
22
* Copyright 2006 Milan Digital Audio LLC
3-
* Copyright 2009-2023 GrandOrgue contributors (see AUTHORS)
3+
* Copyright 2009-2025 GrandOrgue contributors (see AUTHORS)
44
* License GPL-2.0 or later
55
* (https://www.gnu.org/licenses/old-licenses/gpl-2.0.html).
66
*/
@@ -23,6 +23,8 @@ template <class MidiType, class MidiEventPattern> class GOMidiEventPatternList {
2323

2424
unsigned GetEventCount() const { return m_events.size(); }
2525

26+
bool IsMidiConfigured() const { return !m_events.empty(); }
27+
2628
const MidiEventPattern &GetEvent(unsigned index) const {
2729
return m_events[index];
2830
}

src/core/midi/GOMidiReceiverBase.cpp

-7
Original file line numberDiff line numberDiff line change
@@ -177,16 +177,9 @@ void GOMidiReceiverBase::Load(
177177
false,
178178
127));
179179
}
180-
} else {
181-
m_events.resize(0);
182-
Preconfigure(cfg, group);
183180
}
184181
}
185182

186-
void GOMidiReceiverBase::Preconfigure(GOConfigReader &cfg, wxString group) {}
187-
188-
int GOMidiReceiverBase::GetTranspose() { return 0; }
189-
190183
void GOMidiReceiverBase::Save(
191184
GOConfigWriter &cfg, const wxString &group, GOMidiMap &map) {
192185
if (!m_events.empty()) {

src/core/midi/GOMidiReceiverBase.h

+1-2
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,7 @@ class GOMidiReceiverBase : public GOMidiReceiverEventPatternList {
4343
unsigned createInternal(unsigned device);
4444

4545
protected:
46-
virtual void Preconfigure(GOConfigReader &cfg, wxString group);
47-
virtual int GetTranspose();
46+
virtual int GetTranspose() const { return 0; }
4847

4948
public:
5049
GOMidiReceiverBase(GOMidiReceiverType type);

src/grandorgue/GOMetronome.cpp

+5-5
Original file line numberDiff line numberDiff line change
@@ -59,11 +59,11 @@ GOMetronome::GOMetronome(GOOrganController *organController)
5959
m_StopID(0) {
6060
CreateButtons(*m_OrganController);
6161

62-
m_buttons[ID_METRONOME_ON]->SetInitialMidiIndex(25);
63-
m_buttons[ID_METRONOME_MEASURE_P1]->SetInitialMidiIndex(28);
64-
m_buttons[ID_METRONOME_MEASURE_M1]->SetInitialMidiIndex(29);
65-
m_buttons[ID_METRONOME_BEAT_P1]->SetInitialMidiIndex(26);
66-
m_buttons[ID_METRONOME_BEAT_M1]->SetInitialMidiIndex(27);
62+
m_buttons[ID_METRONOME_ON]->SetMidiInputNumber(25);
63+
m_buttons[ID_METRONOME_MEASURE_P1]->SetMidiInputNumber(28);
64+
m_buttons[ID_METRONOME_MEASURE_M1]->SetMidiInputNumber(29);
65+
m_buttons[ID_METRONOME_BEAT_P1]->SetMidiInputNumber(26);
66+
m_buttons[ID_METRONOME_BEAT_M1]->SetMidiInputNumber(27);
6767

6868
m_OrganController->RegisterSoundStateHandler(this);
6969
}

src/grandorgue/combinations/GOSetter.cpp

+27-27
Original file line numberDiff line numberDiff line change
@@ -308,33 +308,33 @@ GOSetter::GOSetter(GOOrganController *organController)
308308
m_CrescendoCtrl(*organController) {
309309
CreateButtons(*m_OrganController);
310310

311-
m_buttons[ID_SETTER_PREV]->SetInitialMidiIndex(0);
312-
m_buttons[ID_SETTER_NEXT]->SetInitialMidiIndex(1);
313-
m_buttons[ID_SETTER_SET]->SetInitialMidiIndex(2);
314-
m_buttons[ID_SETTER_CURRENT]->SetInitialMidiIndex(3);
315-
m_buttons[ID_SETTER_GC]->SetInitialMidiIndex(4);
316-
m_buttons[ID_SETTER_M10]->SetInitialMidiIndex(5);
317-
m_buttons[ID_SETTER_P10]->SetInitialMidiIndex(6);
318-
m_buttons[ID_SETTER_L0]->SetInitialMidiIndex(7);
319-
m_buttons[ID_SETTER_L1]->SetInitialMidiIndex(8);
320-
m_buttons[ID_SETTER_L2]->SetInitialMidiIndex(9);
321-
m_buttons[ID_SETTER_L3]->SetInitialMidiIndex(10);
322-
m_buttons[ID_SETTER_L4]->SetInitialMidiIndex(11);
323-
m_buttons[ID_SETTER_L5]->SetInitialMidiIndex(12);
324-
m_buttons[ID_SETTER_L6]->SetInitialMidiIndex(13);
325-
m_buttons[ID_SETTER_L7]->SetInitialMidiIndex(14);
326-
m_buttons[ID_SETTER_L8]->SetInitialMidiIndex(15);
327-
m_buttons[ID_SETTER_L9]->SetInitialMidiIndex(16);
328-
m_buttons[ID_SETTER_PITCH_M1]->SetInitialMidiIndex(17);
329-
m_buttons[ID_SETTER_PITCH_P1]->SetInitialMidiIndex(18);
330-
m_buttons[ID_SETTER_PITCH_M100]->SetInitialMidiIndex(19);
331-
m_buttons[ID_SETTER_PITCH_P100]->SetInitialMidiIndex(20);
332-
m_buttons[ID_SETTER_TEMPERAMENT_PREV]->SetInitialMidiIndex(21);
333-
m_buttons[ID_SETTER_TEMPERAMENT_NEXT]->SetInitialMidiIndex(22);
334-
m_buttons[ID_SETTER_TRANSPOSE_DOWN]->SetInitialMidiIndex(23);
335-
m_buttons[ID_SETTER_TRANSPOSE_UP]->SetInitialMidiIndex(24);
336-
m_buttons[ID_SETTER_AUDIO_PANIC]->SetInitialMidiIndex(25);
337-
m_buttons[ID_SETTER_FILE_EXIT]->SetInitialMidiIndex(26);
311+
m_buttons[ID_SETTER_PREV]->SetMidiInputNumber(0);
312+
m_buttons[ID_SETTER_NEXT]->SetMidiInputNumber(1);
313+
m_buttons[ID_SETTER_SET]->SetMidiInputNumber(2);
314+
m_buttons[ID_SETTER_CURRENT]->SetMidiInputNumber(3);
315+
m_buttons[ID_SETTER_GC]->SetMidiInputNumber(4);
316+
m_buttons[ID_SETTER_M10]->SetMidiInputNumber(5);
317+
m_buttons[ID_SETTER_P10]->SetMidiInputNumber(6);
318+
m_buttons[ID_SETTER_L0]->SetMidiInputNumber(7);
319+
m_buttons[ID_SETTER_L1]->SetMidiInputNumber(8);
320+
m_buttons[ID_SETTER_L2]->SetMidiInputNumber(9);
321+
m_buttons[ID_SETTER_L3]->SetMidiInputNumber(10);
322+
m_buttons[ID_SETTER_L4]->SetMidiInputNumber(11);
323+
m_buttons[ID_SETTER_L5]->SetMidiInputNumber(12);
324+
m_buttons[ID_SETTER_L6]->SetMidiInputNumber(13);
325+
m_buttons[ID_SETTER_L7]->SetMidiInputNumber(14);
326+
m_buttons[ID_SETTER_L8]->SetMidiInputNumber(15);
327+
m_buttons[ID_SETTER_L9]->SetMidiInputNumber(16);
328+
m_buttons[ID_SETTER_PITCH_M1]->SetMidiInputNumber(17);
329+
m_buttons[ID_SETTER_PITCH_P1]->SetMidiInputNumber(18);
330+
m_buttons[ID_SETTER_PITCH_M100]->SetMidiInputNumber(19);
331+
m_buttons[ID_SETTER_PITCH_P100]->SetMidiInputNumber(20);
332+
m_buttons[ID_SETTER_TEMPERAMENT_PREV]->SetMidiInputNumber(21);
333+
m_buttons[ID_SETTER_TEMPERAMENT_NEXT]->SetMidiInputNumber(22);
334+
m_buttons[ID_SETTER_TRANSPOSE_DOWN]->SetMidiInputNumber(23);
335+
m_buttons[ID_SETTER_TRANSPOSE_UP]->SetMidiInputNumber(24);
336+
m_buttons[ID_SETTER_AUDIO_PANIC]->SetMidiInputNumber(25);
337+
m_buttons[ID_SETTER_FILE_EXIT]->SetMidiInputNumber(26);
338338

339339
m_buttons[ID_SETTER_PREV]->SetShortcutKey(37);
340340
m_buttons[ID_SETTER_NEXT]->SetShortcutKey(39);

src/grandorgue/config/GOConfig.h

+3
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,9 @@ class GOConfig : public GOSettingStore, public GOOrganList {
173173
wxString GetEventGroup(unsigned index);
174174
wxString GetEventTitle(unsigned index);
175175
const GOMidiReceiverBase *GetMidiEvent(unsigned index) const;
176+
unsigned GetEventInputNumber(unsigned index) const {
177+
return m_MIDISettings[index].index;
178+
}
176179
const GOMidiReceiverBase *FindMidiEvent(
177180
GOMidiReceiverType type, unsigned index) const;
178181

+12-32
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/*
22
* Copyright 2006 Milan Digital Audio LLC
3-
* Copyright 2009-2023 GrandOrgue contributors (see AUTHORS)
3+
* Copyright 2009-2025 GrandOrgue contributors (see AUTHORS)
44
* License GPL-2.0 or later
55
* (https://www.gnu.org/licenses/old-licenses/gpl-2.0.html).
66
*/
@@ -15,13 +15,13 @@
1515

1616
GOMidiReceiver::GOMidiReceiver(
1717
GOOrganModel &organModel, GOMidiReceiverType type)
18-
: GOMidiReceiverBase(type),
19-
r_OrganModel(organModel),
20-
r_config(organModel.GetConfig()),
21-
m_Index(-1) {}
18+
: GOMidiReceiverBase(type), r_config(organModel.GetConfig()) {}
2219

2320
void GOMidiReceiver::Load(
24-
GOConfigReader &cfg, const wxString &group, GOMidiMap &map) {
21+
GOConfigReader &cfg,
22+
const wxString &group,
23+
GOMidiMap &map,
24+
int midiInputNumber) {
2525
if (!r_config.ODFCheck()) {
2626
/* Skip old style entries */
2727
if (m_type == MIDI_RECV_DRAWSTOP)
@@ -32,33 +32,13 @@ void GOMidiReceiver::Load(
3232
ODFSetting, group, wxT("MIDIProgramChangeNumber"), 0, 128, false);
3333
}
3434
GOMidiReceiverBase::Load(cfg, group, map);
35-
}
36-
37-
void GOMidiReceiver::Preconfigure(GOConfigReader &cfg, wxString group) {
38-
unsigned index = 0;
39-
40-
if (m_type == MIDI_RECV_SETTER) {
41-
index = m_Index;
42-
}
43-
if (m_type == MIDI_RECV_MANUAL) {
44-
if (m_Index == -1)
45-
return;
35+
if (!IsMidiConfigured() && midiInputNumber >= 0) {
36+
const GOMidiReceiverBase *pInitialEvents
37+
= r_config.FindMidiEvent(m_type, midiInputNumber);
4638

47-
index = r_OrganModel.GetManual(m_Index)->GetMIDIInputNumber();
39+
if (pInitialEvents)
40+
RenewFrom(*pInitialEvents);
4841
}
49-
if (m_type == MIDI_RECV_ENCLOSURE) {
50-
if (m_Index == -1)
51-
return;
52-
53-
index = r_OrganModel.GetEnclosureElement(m_Index)->GetMIDIInputNumber();
54-
}
55-
const GOMidiReceiverBase *recv = r_config.FindMidiEvent(m_type, index);
56-
57-
if (!recv)
58-
return;
59-
60-
for (unsigned i = 0; i < recv->GetEventCount(); i++)
61-
m_events.push_back(recv->GetEvent(i));
6242
}
6343

64-
int GOMidiReceiver::GetTranspose() { return r_config.Transpose(); }
44+
int GOMidiReceiver::GetTranspose() const { return r_config.Transpose(); }

src/grandorgue/midi/GOMidiReceiver.h

+7-8
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/*
22
* Copyright 2006 Milan Digital Audio LLC
3-
* Copyright 2009-2024 GrandOrgue contributors (see AUTHORS)
3+
* Copyright 2009-2025 GrandOrgue contributors (see AUTHORS)
44
* License GPL-2.0 or later
55
* (https://www.gnu.org/licenses/old-licenses/gpl-2.0.html).
66
*/
@@ -15,21 +15,20 @@ class GOOrganModel;
1515

1616
class GOMidiReceiver : public GOMidiReceiverBase {
1717
private:
18-
GOOrganModel &r_OrganModel;
1918
const GOConfig &r_config;
20-
int m_Index;
2119

2220
protected:
23-
void Preconfigure(GOConfigReader &cfg, wxString group) override;
24-
int GetTranspose() override;
21+
int GetTranspose() const override;
2522

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

26+
using GOMidiReceiverBase::Load;
2927
void Load(
30-
GOConfigReader &cfg, const wxString &group, GOMidiMap &map) override;
31-
32-
void SetIndex(int index) { m_Index = index; }
28+
GOConfigReader &cfg,
29+
const wxString &group,
30+
GOMidiMap &map,
31+
int midiInputNumber = -1);
3332
};
3433

3534
#endif

src/grandorgue/midi/objects/GOMidiReceivingSendingObject.cpp

+18-2
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@ GOMidiReceivingSendingObject::GOMidiReceivingSendingObject(
1717
GOMidiReceiverType reveiverType)
1818
: GOMidiSendingObject(organModel, midiTypeCode, midiTypeName, senderType),
1919
m_receiver(organModel, reveiverType),
20-
p_ReceiverKeyMap(nullptr) {
20+
p_ReceiverKeyMap(nullptr),
21+
m_MidiInputNumber(0) {
2122
SetMidiReceiver(&m_receiver);
2223
r_OrganModel.RegisterEventHandler(this);
2324
}
@@ -27,11 +28,26 @@ GOMidiReceivingSendingObject::~GOMidiReceivingSendingObject() {
2728
SetMidiReceiver(nullptr);
2829
}
2930

31+
void GOMidiReceivingSendingObject::Init(
32+
GOConfigReader &cfg, const wxString &group, const wxString &name) {
33+
// using in Load for initial MIDI config
34+
m_MidiInputNumber = 0;
35+
GOMidiSendingObject::Init(cfg, group, name);
36+
}
37+
38+
void GOMidiReceivingSendingObject::Load(
39+
GOConfigReader &cfg, const wxString &group, const wxString &name) {
40+
// using in Load for initial MIDI config
41+
m_MidiInputNumber = cfg.ReadInteger(
42+
ODFSetting, group, wxT("MIDIInputNumber"), 0, 200, false, 0);
43+
GOMidiSendingObject::Load(cfg, group, name);
44+
}
45+
3046
void GOMidiReceivingSendingObject::LoadMidiObject(
3147
GOConfigReader &cfg, const wxString &group, GOMidiMap &midiMap) {
3248
GOMidiSendingObject::LoadMidiObject(cfg, group, midiMap);
3349
if (!IsReadOnly()) {
34-
m_receiver.Load(cfg, group, midiMap);
50+
m_receiver.Load(cfg, group, midiMap, m_MidiInputNumber);
3551
}
3652
}
3753

src/grandorgue/midi/objects/GOMidiReceivingSendingObject.h

+10-1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ class GOMidiReceivingSendingObject : public GOMidiSendingObject,
1818
private:
1919
GOMidiReceiver m_receiver;
2020
const GOMidiReceiver::KeyMap *p_ReceiverKeyMap;
21+
// used for load initial config
22+
uint8_t m_MidiInputNumber;
2123

2224
protected:
2325
GOMidiReceivingSendingObject(
@@ -36,11 +38,18 @@ class GOMidiReceivingSendingObject : public GOMidiSendingObject,
3638

3739
public:
3840
// Should be used before Load()
39-
void SetInitialMidiIndex(unsigned index) { m_receiver.SetIndex(index); }
41+
int GetMidiInputNumber() const { return m_MidiInputNumber; }
42+
void SetMidiInputNumber(int midiInputNumber) {
43+
m_MidiInputNumber = midiInputNumber;
44+
}
4045

4146
virtual void SetElementId(int id) override;
4247

4348
protected:
49+
void Init(
50+
GOConfigReader &cfg, const wxString &group, const wxString &name) override;
51+
void Load(
52+
GOConfigReader &cfg, const wxString &group, const wxString &name) override;
4453
virtual void LoadMidiObject(
4554
GOConfigReader &cfg, const wxString &group, GOMidiMap &midiMap) override;
4655
virtual void SaveMidiObject(

src/grandorgue/model/GOEnclosure.cpp

+1-7
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ GOEnclosure::GOEnclosure(GOOrganModel &organModel)
2626
MIDI_RECV_ENCLOSURE,
2727
GOMidiShortcutReceiver::KEY_RECV_ENCLOSURE),
2828
m_DefaultAmpMinimumLevel(0),
29-
m_MIDIInputNumber(0),
3029
m_Displayed1(false),
3130
m_Displayed2(false),
3231
m_AmpMinimumLevel(0),
@@ -53,17 +52,12 @@ void GOEnclosure::Init(
5352
const wxString &group,
5453
const wxString &name,
5554
uint8_t defaultValue) {
56-
m_MIDIInputNumber = 0;
5755
GOMidiReceivingSendingObject::Init(cfg, group, name);
5856
m_DefaultAmpMinimumLevel = 0;
5957
LoadFromCmb(cfg, defaultValue);
6058
}
6159

62-
void GOEnclosure::Load(
63-
GOConfigReader &cfg, const wxString &group, int enclosureNb) {
64-
SetInitialMidiIndex(enclosureNb); // Used in LoadMidiObject
65-
m_MIDIInputNumber = cfg.ReadInteger(
66-
ODFSetting, group, wxT("MIDIInputNumber"), 0, 200, false, 0);
60+
void GOEnclosure::Load(GOConfigReader &cfg, const wxString &group) {
6761
GOMidiReceivingSendingObject::Load(
6862
cfg, group, cfg.ReadStringNotEmpty(ODFSetting, group, wxT("Name")));
6963
m_Displayed1

src/grandorgue/model/GOEnclosure.h

+1-3
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ class GOOrganModel;
2323
class GOEnclosure : public GOControl, public GOMidiObjectWithShortcut {
2424
private:
2525
uint8_t m_DefaultAmpMinimumLevel;
26-
uint8_t m_MIDIInputNumber;
2726
bool m_Displayed1;
2827
bool m_Displayed2;
2928

@@ -59,10 +58,9 @@ class GOEnclosure : public GOControl, public GOMidiObjectWithShortcut {
5958
const wxString &name,
6059
uint8_t defValue);
6160
using GOMidiObject::Load; // for avoiding a warning
62-
void Load(GOConfigReader &cfg, const wxString &group, int enclosureNb);
61+
void Load(GOConfigReader &cfg, const wxString &group);
6362
void SetEnclosureValue(uint8_t n);
6463
int GetEnclosureValue() const { return m_MIDIValue; }
65-
int GetMIDIInputNumber() const { return m_MIDIInputNumber; }
6664
float GetAttenuation();
6765

6866
void Scroll(bool scroll_up);

src/grandorgue/model/GOManual.cpp

-7
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@ GOManual::GOManual(GOOrganModel &organModel)
4242
m_first_accessible_key_midi_note_nb(0),
4343
m_nb_accessible_keys(0),
4444
m_UnisonOff(0),
45-
m_MIDIInputNumber(0),
4645
m_tremulant_ids(0),
4746
m_GlobalSwitchIds(0),
4847
m_stops(0),
@@ -83,7 +82,6 @@ void GOManual::Init(
8382
unsigned firstMidi,
8483
unsigned keys) {
8584
m_manual_number = manualNumber;
86-
m_MIDIInputNumber = 0;
8785
GOMidiReceivingSendingObject::Init(
8886
cfg,
8987
group,
@@ -116,9 +114,6 @@ void GOManual::Init(
116114
void GOManual::Load(
117115
GOConfigReader &cfg, const wxString &group, int manualNumber) {
118116
m_manual_number = manualNumber;
119-
SetInitialMidiIndex(manualNumber); // Used in LoadMidiObject
120-
m_MIDIInputNumber = cfg.ReadInteger(
121-
ODFSetting, group, wxT("MIDIInputNumber"), 0, 200, false, 0);
122117
GOMidiReceivingSendingObject::Load(
123118
cfg, group, cfg.ReadStringNotEmpty(ODFSetting, group, wxT("Name")));
124119
m_nb_logical_keys
@@ -332,8 +327,6 @@ void GOManual::SetUnisonOff(bool on) {
332327
SetOutput(note, on ? m_RemoteVelocity[note] : m_Velocity[note]);
333328
}
334329

335-
int GOManual::GetMIDIInputNumber() { return m_MIDIInputNumber; }
336-
337330
unsigned GOManual::GetLogicalKeyCount() { return m_nb_logical_keys; }
338331

339332
unsigned GOManual::GetNumberOfAccessibleKeys() { return m_nb_accessible_keys; }

src/grandorgue/model/GOManual.h

-2
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,6 @@ class GOManual : public GOControl,
4545
unsigned m_nb_accessible_keys;
4646
unsigned m_UnisonOff;
4747

48-
int m_MIDIInputNumber;
49-
5048
std::vector<unsigned> m_tremulant_ids;
5149

5250
// Global Switch Id is the number of switch in ODF started with 1

0 commit comments

Comments
 (0)