summaryrefslogtreecommitdiff
path: root/libs/midi++2/midi++/midnam_patch.h
blob: d4f8dbf46602034d096cf969f9af52b5dbb95959 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
#ifndef MIDNAM_PATCH_H_
#define MIDNAM_PATCH_H_

#include "pbd/stateful.h"
#include "midi++/event.h"
#include "pbd/xml++.h"

#include <string>
#include <list>
#include <set>

namespace MIDI
{

namespace Name
{

class Patch : public PBD::Stateful
{
public:
	typedef std::list<Evoral::Event> PatchMidiCommands;

	Patch() {};
	Patch(string a_number, string a_name) : _number(a_number), _name(a_name) {};
	~Patch() {};

	const string& name() const               { return _name; }
	void set_name(const string a_name)       { _name = a_name; }

	const string& number() const             { return _number; }
	void set_number(const string a_number)   { _number = a_number; }

	const PatchMidiCommands& patch_midi_commands() const { return _patch_midi_commands; }

	XMLNode& get_state (void);
	int      set_state (const XMLNode& a_node);

private:
	string _number;
	string _name;
	PatchMidiCommands _patch_midi_commands;
};

class PatchBank : public PBD::Stateful
{
public:
	typedef std::list<Patch> PatchNameList;

	PatchBank() {};
	virtual ~PatchBank() {};
	PatchBank(string a_name) : _name(a_name) {};

	const string& name() const               { return _name; }
	void set_name(const string a_name)       { _name = a_name; }

	const PatchNameList& patch_name_list() const { return _patch_name_list; }

	XMLNode& get_state (void);
	int      set_state (const XMLNode& a_node);

private:
	string        _name;
	PatchNameList _patch_name_list;
};

class ChannelNameSet : public PBD::Stateful
{
public:
	typedef std::set<uint8_t>    AvailableForChannels;
	typedef std::list<PatchBank> PatchBanks;

	ChannelNameSet() {};
	virtual ~ChannelNameSet() {};
	ChannelNameSet(string a_name) : _name(a_name) {};

	const string& name() const               { return _name; }
	void set_name(const string a_name)       { _name = a_name; }

	const AvailableForChannels& available_for_channels() const { return _available_for_channels; }
	const PatchBanks&           patch_banks()            const { return _patch_banks; }

	XMLNode& get_state (void);
	int      set_state (const XMLNode& a_node);

private:
	string _name;
	AvailableForChannels _available_for_channels;
	PatchBanks           _patch_banks;
};

class MIDINameDocument : public PBD::Stateful
{
public:
	MIDINameDocument() {};
	virtual ~MIDINameDocument() {};

	XMLNode& get_state (void);
	int      set_state (const XMLNode& a_node);

private:
	string _author;

};

}

}
#endif /*MIDNAM_PATCH_H_*/