Skip to content

Commit

Permalink
Moved a common code to GOMidiObject
Browse files Browse the repository at this point in the history
  • Loading branch information
oleg68 committed Jan 13, 2025
1 parent ef023f3 commit 4fff0ee
Show file tree
Hide file tree
Showing 21 changed files with 205 additions and 178 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ GOGeneralButtonControl::GOGeneralButtonControl(
r_OrganModel(organModel),
m_combination(r_OrganModel, is_setter) {}

void GOGeneralButtonControl::Load(GOConfigReader &cfg, wxString group) {
void GOGeneralButtonControl::Load(GOConfigReader &cfg, const wxString &group) {
m_combination.Load(cfg, group);
GOPushbuttonControl::Load(cfg, group);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ class GOGeneralButtonControl : public GOPushbuttonControl {

public:
GOGeneralButtonControl(GOOrganModel &organModel, bool is_setter);
void Load(GOConfigReader &cfg, wxString group);
void Load(GOConfigReader &cfg, const wxString &group) override;
void Push() override;
GOGeneralCombination &GetCombination();
};
Expand Down
43 changes: 20 additions & 23 deletions src/grandorgue/control/GOButtonControl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -26,12 +26,10 @@ GOButtonControl::GOButtonControl(
organModel,
midiTypeCode,
midiTypeName,
m_Name,
&m_sender,
&m_midi,
&m_shortcut,
nullptr),
r_MidiMap(organModel.GetConfig().GetMidiMap()),
r_OrganModel(organModel),
m_midi(organModel, midi_type),
m_sender(organModel, MIDI_SEND_BUTTON),
Expand All @@ -50,41 +48,40 @@ GOButtonControl::~GOButtonControl() {
r_OrganModel.UnRegisterEventHandler(this);
}

void GOButtonControl::LoadMidiObject(
GOConfigReader &cfg, const wxString &group, GOMidiMap &midiMap) {
GOMidiObject::LoadMidiObject(cfg, group, midiMap);
if (!m_ReadOnly) {
m_midi.Load(cfg, group, midiMap);
m_shortcut.Load(cfg, group);
}
m_sender.Load(cfg, group, midiMap);
}

void GOButtonControl::Init(
GOConfigReader &cfg, const wxString &group, const wxString &name) {
r_OrganModel.RegisterSaveableObject(this);
m_group = group;
m_Name = name;
GOMidiObject::Init(cfg, group, name);
m_Displayed = false;
m_DisplayInInvertedState = false;
if (!m_ReadOnly) {
m_midi.Load(cfg, group, r_MidiMap);
m_shortcut.Load(cfg, group);
}
m_sender.Load(cfg, group, r_MidiMap);
}

void GOButtonControl::Load(GOConfigReader &cfg, const wxString &group) {
r_OrganModel.RegisterSaveableObject(this);
m_group = group;
m_Name = cfg.ReadStringNotEmpty(ODFSetting, group, wxT("Name"), true, m_Name);
GOMidiObject::Load(
cfg, group, cfg.ReadStringNotEmpty(ODFSetting, group, wxT("Name"), true));
m_Displayed
= cfg.ReadBoolean(ODFSetting, group, wxT("Displayed"), false, false);
m_DisplayInInvertedState = cfg.ReadBoolean(
ODFSetting, group, wxT("DisplayInInvertedState"), false, false);
if (!m_ReadOnly) {
m_midi.Load(cfg, group, r_MidiMap);
m_shortcut.Load(cfg, group);
}
m_sender.Load(cfg, group, r_MidiMap);
}

void GOButtonControl::Save(GOConfigWriter &cfg) {
void GOButtonControl::SaveMidiObject(
GOConfigWriter &cfg, const wxString &group, GOMidiMap &midiMap) {
GOMidiObject::SaveMidiObject(cfg, group, midiMap);
if (!m_ReadOnly) {
m_midi.Save(cfg, m_group, r_MidiMap);
m_shortcut.Save(cfg, m_group);
m_midi.Save(cfg, group, midiMap);
m_shortcut.Save(cfg, group);
}
m_sender.Save(cfg, m_group, r_MidiMap);
m_sender.Save(cfg, group, midiMap);
}

bool GOButtonControl::IsDisplayed() { return m_Displayed; }
Expand Down Expand Up @@ -117,7 +114,7 @@ void GOButtonControl::AbortPlayback() {

void GOButtonControl::PreparePlayback() {
m_midi.PreparePlayback();
m_sender.SetName(m_Name);
m_sender.SetName(GetName());
}

void GOButtonControl::PrepareRecording() { m_sender.SetDisplay(m_Engaged); }
Expand Down
16 changes: 8 additions & 8 deletions src/grandorgue/control/GOButtonControl.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,24 +28,24 @@ class GOOrganModel;

class GOButtonControl : public GOControl,
private GOEventHandler,
public GOSaveableObject,
public GOMidiObject {
private:
GOMidiMap &r_MidiMap;

protected:
GOOrganModel &r_OrganModel;
GOMidiReceiver m_midi;
GOMidiSender m_sender;
GOMidiShortcutReceiver m_shortcut;
bool m_Pushbutton;
bool m_Displayed;
wxString m_Name;
bool m_Engaged;
bool m_DisplayInInvertedState;
bool m_ReadOnly;
bool m_IsPiston;

void LoadMidiObject(
GOConfigReader &cfg, const wxString &group, GOMidiMap &midiMap) override;
void SaveMidiObject(
GOConfigWriter &cfg, const wxString &group, GOMidiMap &midiMap) override;

void ProcessMidi(const GOMidiEvent &event) override;
void HandleKey(int key) override;

Expand All @@ -64,12 +64,12 @@ class GOButtonControl : public GOControl,
bool pushbutton,
bool isPiston = false);
~GOButtonControl();
void Init(GOConfigReader &cfg, const wxString &group, const wxString &name);
void Load(GOConfigReader &cfg, const wxString &group);
void Init(
GOConfigReader &cfg, const wxString &group, const wxString &name) override;
virtual void Load(GOConfigReader &cfg, const wxString &group);
bool IsDisplayed();
void SetDisplayed(bool displayed) { m_Displayed = displayed; }
bool IsReadOnly() const override { return m_ReadOnly; }
const wxString &GetName() const { return m_Name; }
bool IsPiston() const { return m_IsPiston; }

virtual void Push();
Expand Down
29 changes: 9 additions & 20 deletions src/grandorgue/control/GOLabelControl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -21,34 +21,23 @@ GOLabelControl::GOLabelControl(GOOrganController *organController)
*organController,
WX_MIDI_TYPE_CODE,
WX_MIDI_TYPE_NAME,
m_Name,
&m_sender,
nullptr,
nullptr,
nullptr),
m_OrganController(organController),
m_sender(*organController, MIDI_SEND_LABEL) {}

GOLabelControl::~GOLabelControl() {
m_OrganController->UnregisterSaveableObject(this);
void GOLabelControl::LoadMidiObject(
GOConfigReader &cfg, const wxString &group, GOMidiMap &midiMap) {
GOMidiObject::LoadMidiObject(cfg, group, midiMap);
m_sender.Load(cfg, group, midiMap);
}

void GOLabelControl::Init(GOConfigReader &cfg, wxString group, wxString name) {
m_OrganController->RegisterSaveableObject(this);
m_group = group;
m_Name = name;
m_sender.Load(cfg, m_group, m_OrganController->GetSettings().GetMidiMap());
}

void GOLabelControl::Load(GOConfigReader &cfg, wxString group, wxString name) {
m_OrganController->RegisterSaveableObject(this);
m_group = group;
m_Name = name;
m_sender.Load(cfg, m_group, m_OrganController->GetSettings().GetMidiMap());
}

void GOLabelControl::Save(GOConfigWriter &cfg) {
m_sender.Save(cfg, m_group, m_OrganController->GetSettings().GetMidiMap());
void GOLabelControl::SaveMidiObject(
GOConfigWriter &cfg, const wxString &group, GOMidiMap &midiMap) {
GOMidiObject::SaveMidiObject(cfg, group, midiMap);
m_sender.Save(cfg, group, midiMap);
}

const wxString &GOLabelControl::GetContent() { return m_Content; }
Expand All @@ -64,7 +53,7 @@ void GOLabelControl::AbortPlayback() {
m_sender.SetName(wxEmptyString);
}

void GOLabelControl::PreparePlayback() { m_sender.SetName(m_Name); }
void GOLabelControl::PreparePlayback() { m_sender.SetName(GetName()); }

void GOLabelControl::PrepareRecording() { m_sender.SetLabel(m_Content); }

Expand Down
15 changes: 5 additions & 10 deletions src/grandorgue/control/GOLabelControl.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,28 +21,23 @@ class GOConfigReader;
class GOConfigWriter;
class GOOrganController;

class GOLabelControl : public GOControl,
private GOSaveableObject,
public GOMidiObject {
class GOLabelControl : public GOControl, public GOMidiObject {
protected:
wxString m_Name;
wxString m_Content;
wxString m_group;
GOOrganController *m_OrganController;
GOMidiSender m_sender;

void Save(GOConfigWriter &cfg) override;
void LoadMidiObject(
GOConfigReader &cfg, const wxString &group, GOMidiMap &midiMap) override;
void SaveMidiObject(
GOConfigWriter &cfg, const wxString &group, GOMidiMap &midiMap) override;

void AbortPlayback() override;
void PreparePlayback() override;
void PrepareRecording() override;

public:
GOLabelControl(GOOrganController *organController);
~GOLabelControl();
void Init(GOConfigReader &cfg, wxString group, wxString name);
void Load(GOConfigReader &cfg, wxString group, wxString name);
const wxString &GetName() const { return m_Name; }
const wxString &GetContent();
void SetContent(wxString name);

Expand Down
4 changes: 2 additions & 2 deletions src/grandorgue/gui/dialogs/GOMidiListDialog.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ GOMidiListDialog::GOMidiListDialog(

m_Objects->InsertItem(i, obj->GetMidiTypeName());
m_Objects->SetItemPtrData(i, (wxUIntPtr)obj);
m_Objects->SetItem(i, 1, obj->GetMidiName());
m_Objects->SetItem(i, 1, obj->GetName());
}

m_Objects->SetColumnWidth(0, wxLIST_AUTOSIZE);
Expand All @@ -98,7 +98,7 @@ void GOMidiListDialog::OnStatus(wxCommandEvent &event) {
wxString status = obj->GetElementStatus();
GOMessageBox(
wxString::Format(_("Status: %s"), status),
obj->GetMidiTypeName() + _(" ") + obj->GetMidiName(),
obj->GetMidiTypeName() + _(" ") + obj->GetName(),
wxOK);
}

Expand Down
18 changes: 13 additions & 5 deletions src/grandorgue/midi/objects/GOMidiObject.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,14 @@ GOMidiObject::GOMidiObject(
GOOrganModel &organModel,
const wxString &midiTypeCode,
const wxString &midiType,
const wxString &midiName,
GOMidiSender *pMidiSender,
GOMidiReceiverBase *pMidiReceiver,
GOMidiShortcutReceiver *pShortcutReceiver,
GOMidiSender *pDivisionSender)
: r_OrganModel(organModel),
r_MidiMap(organModel.GetConfig().GetMidiMap()),
r_MidiTypeCode(midiTypeCode),
r_MidiTypeName(midiType),
r_MidiName(midiName),
p_MidiSender(pMidiSender),
p_MidiReceiver(pMidiReceiver),
p_ShortcutReceiver(pShortcutReceiver),
Expand All @@ -33,16 +32,25 @@ GOMidiObject::GOMidiObject(
}

GOMidiObject::~GOMidiObject() {
r_OrganModel.UnregisterSaveableObject(this);
r_OrganModel.UnRegisterMidiObject(this);
r_OrganModel.UnRegisterSoundStateHandler(this);
}

void GOMidiObject::InitMidiObject(
GOConfigReader &cfg, const wxString &group, const wxString &name) {
SetGroup(group);
m_name = name;
r_OrganModel.RegisterSaveableObject(this);
LoadMidiObject(cfg, group, r_MidiMap);
}

void GOMidiObject::ShowConfigDialog() {
const bool isReadOnly = IsReadOnly();
const wxString title = wxString::Format(
_("Midi-Settings for %s - %s"), r_MidiTypeName, r_MidiName);
const wxString title
= wxString::Format(_("Midi-Settings for %s - %s"), r_MidiTypeName, m_name);
const wxString selector
= wxString::Format(wxT("%s.%s"), r_MidiTypeCode, r_MidiName);
= wxString::Format(wxT("%s.%s"), r_MidiTypeCode, m_name);

r_OrganModel.ShowMIDIEventDialog(
this,
Expand Down
40 changes: 35 additions & 5 deletions src/grandorgue/midi/objects/GOMidiObject.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,17 +14,22 @@

#include "sound/GOSoundStateHandler.h"

class GOMidiSender;
#include "GOSaveableObject.h"

class GOMidiMap;
class GOMidiReceiverBase;
class GOMidiSender;
class GOMidiShortcutReceiver;
class GOOrganModel;

class GOMidiObject : public GOSoundStateHandler {
class GOMidiObject : public GOSoundStateHandler, public GOSaveableObject {
private:
GOOrganModel &r_OrganModel;
GOMidiMap &r_MidiMap;
const wxString &r_MidiTypeCode;
const wxString &r_MidiTypeName;
const wxString &r_MidiName;

wxString m_name;

GOMidiSender *p_MidiSender;
GOMidiReceiverBase *p_MidiReceiver;
Expand All @@ -36,18 +41,43 @@ class GOMidiObject : public GOSoundStateHandler {
GOOrganModel &organModel,
const wxString &midiTypeCode,
const wxString &midiTypeName,
const wxString &midiName,
GOMidiSender *pMidiSender,
GOMidiReceiverBase *pMidiReceiver,
GOMidiShortcutReceiver *pShortcutReceiver,
GOMidiSender *pDivisionSender);

virtual ~GOMidiObject();

private:
void InitMidiObject(
GOConfigReader &cfg, const wxString &group, const wxString &name);

protected:
virtual void LoadMidiObject(
GOConfigReader &cfg, const wxString &group, GOMidiMap &midiMap) {}
virtual void SaveMidiObject(
GOConfigWriter &cfg, const wxString &group, GOMidiMap &midiMap) {}

public:
GOMidiMap &GetMidiMap() { return r_MidiMap; }
const wxString &GetMidiTypeCode() const { return r_MidiTypeCode; }
const wxString &GetMidiTypeName() const { return r_MidiTypeName; }
const wxString &GetMidiName() const { return r_MidiName; }
const wxString &GetName() const { return m_name; }
void SetName(const wxString &name) { m_name = name; }

virtual void Init(
GOConfigReader &cfg, const wxString &group, const wxString &name) {
InitMidiObject(cfg, group, name);
}

virtual void Load(
GOConfigReader &cfg, const wxString &group, const wxString &name) {
InitMidiObject(cfg, group, name);
}

virtual void Save(GOConfigWriter &cfg) {
SaveMidiObject(cfg, m_group, r_MidiMap);
}

virtual bool IsReadOnly() const { return false; }

Expand Down
4 changes: 2 additions & 2 deletions src/grandorgue/model/GOCoupler.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -87,8 +87,8 @@ const struct IniFileEnumEntry GOCoupler::m_coupler_types[] = {

void GOCoupler::Init(
GOConfigReader &cfg,
wxString group,
wxString name,
const wxString &group,
const wxString &name,
bool unison_off,
bool recursive,
int keyshift,
Expand Down
Loading

0 comments on commit 4fff0ee

Please sign in to comment.