1
1
/*
2
2
* Copyright 2006 Milan Digital Audio LLC
3
- * Copyright 2009-2024 GrandOrgue contributors (see AUTHORS)
3
+ * Copyright 2009-2025 GrandOrgue contributors (see AUTHORS)
4
4
* License GPL-2.0 or later
5
5
* (https://www.gnu.org/licenses/old-licenses/gpl-2.0.html).
6
6
*/
@@ -22,103 +22,114 @@ GOEnclosure::GOEnclosure(GOOrganModel &organModel)
22
22
m_midi(organModel, MIDI_RECV_ENCLOSURE),
23
23
m_sender(organModel, MIDI_SEND_ENCLOSURE),
24
24
m_shortcut(KEY_RECV_ENCLOSURE),
25
- m_AmpMinimumLevel(0 ),
26
- m_MIDIInputNumber(0 ),
27
- m_MIDIValue(0 ),
28
25
m_Name(),
26
+ m_DefaultAmpMinimumLevel(0 ),
27
+ m_MIDIInputNumber(0 ),
29
28
m_Displayed1(false ),
30
- m_Displayed2(false ) {
29
+ m_Displayed2(false ),
30
+ m_AmpMinimumLevel(0 ),
31
+ m_MIDIValue(0 ) {
31
32
organModel.RegisterEventHandler (this );
32
33
organModel.RegisterMidiConfigurator (this );
33
34
organModel.RegisterSoundStateHandler (this );
34
35
}
35
36
36
37
void GOEnclosure::Init (
37
- GOConfigReader &cfg, wxString group, wxString Name, unsigned def_value) {
38
+ GOConfigReader &cfg,
39
+ const wxString &group,
40
+ const wxString &name,
41
+ uint8_t defaultValue) {
38
42
r_OrganModel.RegisterSaveableObject (this );
39
43
m_group = group;
40
- m_Name = Name;
41
- Set (cfg.ReadInteger (
42
- CMBSetting, m_group, wxT (" Value" ), 0 , 127 , false , def_value));
44
+ m_Name = name;
45
+ m_DefaultAmpMinimumLevel = 0 ;
46
+ LoadFromCmb (cfg, defaultValue);
47
+ }
48
+
49
+ static const wxString WX_AMP_MINIMUM_LEVEL = wxT(" AmpMinimumLevel" );
50
+ static const wxString WX_VALUE = wxT(" Value" );
51
+
52
+ void GOEnclosure::LoadFromCmb (GOConfigReader &cfg, uint8_t defaultValue) {
43
53
m_midi.Load (cfg, m_group, r_MidiMap);
44
54
m_sender.Load (cfg, m_group, r_MidiMap);
45
55
m_shortcut.Load (cfg, m_group);
46
- m_AmpMinimumLevel = 0 ;
47
- }
48
-
49
- void GOEnclosure::Load (GOConfigReader &cfg, wxString group, int enclosure_nb) {
56
+ m_AmpMinimumLevel = cfg.ReadInteger (
57
+ CMBSetting,
58
+ m_group,
59
+ WX_AMP_MINIMUM_LEVEL,
60
+ 0 ,
61
+ 100 ,
62
+ false ,
63
+ m_DefaultAmpMinimumLevel);
64
+ SetMidiValue (cfg.ReadInteger (
65
+ CMBSetting, m_group, WX_VALUE, 0 , MAX_MIDI_VALUE, false , defaultValue));
66
+ }
67
+
68
+ void GOEnclosure::Load (
69
+ GOConfigReader &cfg, const wxString &group, int enclosure_nb) {
50
70
r_OrganModel.RegisterSaveableObject (this );
51
71
m_group = group;
52
72
m_Name = cfg.ReadStringNotEmpty (ODFSetting, m_group, wxT (" Name" ));
53
73
m_Displayed1
54
74
= cfg.ReadBoolean (ODFSetting, m_group, wxT (" Displayed" ), false , true );
55
75
m_Displayed2
56
76
= cfg.ReadBoolean (ODFSetting, m_group, wxT (" Displayed" ), false , false );
57
- m_AmpMinimumLevel
58
- = cfg.ReadInteger (ODFSetting, m_group, wxT ( " AmpMinimumLevel " ) , 0 , 100 );
77
+ m_DefaultAmpMinimumLevel
78
+ = cfg.ReadInteger (ODFSetting, m_group, WX_AMP_MINIMUM_LEVEL , 0 , 100 );
59
79
m_MIDIInputNumber = cfg.ReadInteger (
60
80
ODFSetting, m_group, wxT (" MIDIInputNumber" ), 0 , 200 , false , 0 );
61
- Set (cfg.ReadInteger (CMBSetting, m_group, wxT (" Value" ), 0 , 127 , false , 127 ));
62
81
m_midi.SetIndex (enclosure_nb);
63
- m_midi.Load (cfg, m_group, r_MidiMap);
64
- m_sender.Load (cfg, m_group, r_MidiMap);
65
- m_shortcut.Load (cfg, m_group);
82
+ LoadFromCmb (cfg, MAX_MIDI_VALUE);
66
83
}
67
84
68
85
void GOEnclosure::Save (GOConfigWriter &cfg) {
69
86
m_midi.Save (cfg, m_group, r_MidiMap);
70
87
m_sender.Save (cfg, m_group, r_MidiMap);
71
88
m_shortcut.Save (cfg, m_group);
72
- cfg.WriteInteger (m_group, wxT (" Value" ), m_MIDIValue);
89
+ cfg.WriteInteger (m_group, WX_AMP_MINIMUM_LEVEL, m_AmpMinimumLevel);
90
+ cfg.WriteInteger (m_group, WX_VALUE, m_MIDIValue);
73
91
}
74
92
75
- void GOEnclosure::Set (int n) {
76
- if (n < 0 )
77
- n = 0 ;
78
- if (n > 127 )
79
- n = 127 ;
93
+ void GOEnclosure::SetMidiValue (uint8_t n) {
80
94
if (n != m_MIDIValue) {
81
95
m_MIDIValue = n;
82
- m_sender.SetValue (m_MIDIValue );
96
+ m_sender.SetValue (n );
83
97
}
84
98
r_OrganModel.UpdateVolume ();
85
99
r_OrganModel.SendControlChanged (this );
86
100
}
87
101
88
- int GOEnclosure::GetMIDIInputNumber () { return m_MIDIInputNumber; }
89
-
90
102
float GOEnclosure::GetAttenuation () {
91
103
static const float scale = 1.0 / 12700.0 ;
92
104
return (float )(m_MIDIValue * (100 - m_AmpMinimumLevel) + 127 * m_AmpMinimumLevel)
93
105
* scale;
94
106
}
95
107
96
108
void GOEnclosure::Scroll (bool scroll_up) {
97
- Set (m_MIDIValue + (scroll_up ? 4 : -4 ));
109
+ SetIntMidiValue (m_MIDIValue + (scroll_up ? 4 : -4 ));
98
110
}
99
111
100
112
void GOEnclosure::ProcessMidi (const GOMidiEvent &event) {
101
113
int value;
114
+
102
115
if (m_midi.Match (event, value) == MIDI_MATCH_CHANGE)
103
- Set (value);
116
+ SetIntMidiValue (value);
104
117
}
105
118
106
119
void GOEnclosure::HandleKey (int key) {
107
120
switch (m_shortcut.Match (key)) {
108
121
case KEY_MATCH:
109
- Set (m_MIDIValue + 8 );
122
+ SetIntMidiValue (m_MIDIValue + 8 );
110
123
break ;
111
124
112
125
case KEY_MATCH_MINUS:
113
- Set (m_MIDIValue - 8 );
126
+ SetIntMidiValue (m_MIDIValue - 8 );
114
127
break ;
115
128
default :
116
129
break ;
117
130
}
118
131
}
119
132
120
- int GOEnclosure::GetValue () { return m_MIDIValue; }
121
-
122
133
bool GOEnclosure::IsDisplayed (bool new_format) {
123
134
if (new_format)
124
135
return m_Displayed2;
0 commit comments