diff options
author | David Robillard <d@drobilla.net> | 2014-01-06 17:02:55 -0500 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2014-01-10 20:51:54 -0500 |
commit | 72d8ca89e2f4b2e194b2bbd99261deb5b2108a40 (patch) | |
tree | 4e187229cf6cad791d4b8f0896a265d0f3574662 /libs/midi++2/midi++/midnam_patch.h | |
parent | 0fe968a140cab6270b9480059cb173e7f7b33322 (diff) |
Support midnam controller value labels.
Diffstat (limited to 'libs/midi++2/midi++/midnam_patch.h')
-rw-r--r-- | libs/midi++2/midi++/midnam_patch.h | 66 |
1 files changed, 65 insertions, 1 deletions
diff --git a/libs/midi++2/midi++/midnam_patch.h b/libs/midi++2/midi++/midnam_patch.h index ddd62c2916..f3d766d7e3 100644 --- a/libs/midi++2/midi++/midnam_patch.h +++ b/libs/midi++2/midi++/midnam_patch.h @@ -262,6 +262,55 @@ private: Notes _notes; }; +class Value +{ +public: + Value() {} + Value(const uint16_t number, + const std::string& name) + : _number(number) + , _name(name) + {} + + uint16_t number() const { return _number; } + const std::string& name() const { return _name; } + + void set_number(uint16_t number) { _number = number; } + void set_name(const std::string& name) { _name = name; } + + XMLNode& get_state(void); + int set_state(const XMLTree&, const XMLNode&); + +private: + uint16_t _number; + std::string _name; +}; + +class ValueNameList +{ +public: + typedef std::map<uint16_t, boost::shared_ptr<Value> > Values; + + ValueNameList() {} + ValueNameList(const std::string& name) : _name(name) {} + + const std::string& name() const { return _name; } + + void set_name(const std::string& name) { _name = name; } + + boost::shared_ptr<const Value> value(uint16_t num) const; + boost::shared_ptr<const Value> max_value_below(uint16_t num) const; + + const Values& values() const { return _values; } + + XMLNode& get_state(void); + int set_state(const XMLTree&, const XMLNode&); + +private: + std::string _name; + Values _values; +}; + class Control { public: @@ -278,6 +327,9 @@ public: uint16_t number() const { return _number; } const std::string& name() const { return _name; } + const std::string& value_name_list_name() const { return _value_name_list_name; } + boost::shared_ptr<const ValueNameList> value_name_list() const { return _value_name_list; } + void set_type(const std::string& type) { _type = type; } void set_number(uint16_t number) { _number = number; } void set_name(const std::string& name) { _name = name; } @@ -289,6 +341,9 @@ private: std::string _type; uint16_t _number; std::string _name; + + std::string _value_name_list_name; ///< Global, UsesValueNameList + boost::shared_ptr<ValueNameList> _value_name_list; ///< Local, ValueNameList }; class ControlNameList @@ -352,6 +407,7 @@ public: typedef std::map<std::string, boost::shared_ptr<ChannelNameSet> > ChannelNameSets; typedef std::map<std::string, boost::shared_ptr<NoteNameList> > NoteNameLists; typedef std::map<std::string, boost::shared_ptr<ControlNameList> > ControlNameLists; + typedef std::map<std::string, boost::shared_ptr<ValueNameList> > ValueNameLists; typedef std::map<std::string, PatchNameList> PatchNameLists; MasterDeviceNames() {}; @@ -364,14 +420,21 @@ public: void set_models(const Models some_models) { _models = some_models; } const ControlNameLists& controls() const { return _control_name_lists; } + const ValueNameLists& values() const { return _value_name_lists; } + + boost::shared_ptr<const ValueNameList> value_name_list_by_control( + const std::string& mode, + uint8_t channel, + uint8_t number); const CustomDeviceModeNames& custom_device_mode_names() const { return _custom_device_mode_names; } boost::shared_ptr<CustomDeviceMode> custom_device_mode_by_name(const std::string& mode_name); - boost::shared_ptr<ChannelNameSet> channel_name_set_by_device_mode_and_channel(const std::string& mode, uint8_t channel); + boost::shared_ptr<ChannelNameSet> channel_name_set_by_channel(const std::string& mode, uint8_t channel); boost::shared_ptr<Patch> find_patch(const std::string& mode, uint8_t channel, const PatchPrimaryKey& key); boost::shared_ptr<ControlNameList> control_name_list(const std::string& name); + boost::shared_ptr<ValueNameList> value_name_list(const std::string& name); boost::shared_ptr<NoteNameList> note_name_list(const std::string& name); boost::shared_ptr<ChannelNameSet> channel_name_set(const std::string& name); @@ -393,6 +456,7 @@ private: NoteNameLists _note_name_lists; PatchNameLists _patch_name_lists; ControlNameLists _control_name_lists; + ValueNameLists _value_name_lists; }; class MIDINameDocument |