diff options
-rw-r--r-- | libs/midi++2/midi++/midnam_patch.h | 44 | ||||
-rw-r--r-- | libs/midi++2/midnam_patch.cc | 47 |
2 files changed, 91 insertions, 0 deletions
diff --git a/libs/midi++2/midi++/midnam_patch.h b/libs/midi++2/midi++/midnam_patch.h index d4f8dbf466..775f46ec75 100644 --- a/libs/midi++2/midi++/midnam_patch.h +++ b/libs/midi++2/midi++/midnam_patch.h @@ -88,6 +88,50 @@ private: PatchBanks _patch_banks; }; +class CustomDeviceMode : public PBD::Stateful +{ +public: + CustomDeviceMode() {}; + virtual ~CustomDeviceMode() {}; + + const string& name() const { return _name; } + void set_name(const string a_name) { _name = a_name; } + + + XMLNode& get_state (void); + int set_state (const XMLNode& a_node); + +private: + /// array index = channel number + /// string contents = name of channel name set + string _name; + string _channel_name_set_assignments[16]; +}; + +class MasterDeviceNames : public PBD::Stateful +{ +public: + typedef std::list<ChannelNameSet> ChannelNameSets; + typedef std::list<std::string> Models; + + MasterDeviceNames() {}; + virtual ~MasterDeviceNames() {}; + + const string& manufacturer() const { return _manufacturer; } + void set_manufacturer(const string a_manufacturer) { _manufacturer = a_manufacturer; } + + const Models& models() const { return _models; } + void set_models(const Models some_models) { _models = some_models; } + + XMLNode& get_state (void); + int set_state (const XMLNode& a_node); + +private: + string _manufacturer; + Models _models; + ChannelNameSets _channel_name_sets; +}; + class MIDINameDocument : public PBD::Stateful { public: diff --git a/libs/midi++2/midnam_patch.cc b/libs/midi++2/midnam_patch.cc index d08911966b..624701bcde 100644 --- a/libs/midi++2/midnam_patch.cc +++ b/libs/midi++2/midnam_patch.cc @@ -132,6 +132,53 @@ ChannelNameSet::set_state (const XMLNode& node) } int +CustomDeviceMode::set_state(const XMLNode& a_node) +{ + assert(a_node.name() == "CustomDeviceNode"); + boost::shared_ptr<XMLSharedNodeList> channel_name_set_assignments = + a_node.find("//ChannelNameSetAssign"); + for(XMLSharedNodeList::const_iterator i = channel_name_set_assignments->begin(); + i != channel_name_set_assignments->end(); + ++i) { + int channel = atoi((*i)->property("Channel")->value().c_str()); + string name_set = (*i)->property("NameSet")->value(); + assert( 1 <= channel && channel <= 16 ); + _channel_name_set_assignments[channel -1] = name_set; + } + return 0; +} + +XMLNode& +CustomDeviceMode::get_state(void) +{ + XMLNode* custom_device_mode = new XMLNode("CustomDeviceMode"); + custom_device_mode->add_property("Name", _name); + XMLNode* channel_name_set_assignments = + custom_device_mode->add_child("ChannelNameSetAssignments"); + for (int i = 0; i < 15 && !_channel_name_set_assignments[i].empty(); i++) { + XMLNode* channel_name_set_assign = + channel_name_set_assignments->add_child("ChannelNameSetAssign"); + channel_name_set_assign->add_property("Channel", i + 1); + channel_name_set_assign->add_property("NameSet", _channel_name_set_assignments[i]); + } + + return *custom_device_mode; +} + +int +MasterDeviceNames::set_state(const XMLNode& a_node) +{ + return 0; +} + +XMLNode& +MasterDeviceNames::get_state(void) +{ + static XMLNode nothing("<nothing>"); + return nothing; +} + +int MIDINameDocument::set_state(const XMLNode& a_node) { return 0; |