X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fmidi_automation_line.cc;h=9a40ebbac3bea154c23a414e98f458e817b382ee;hb=5db22a33c1ec13a14dd6654bf08b0ecd377ae67d;hp=359c516485b7f9e68cdb76ff54af057e00c2c34c;hpb=30968b854257cb5f9159ca59589f783c85615601;p=ardour.git diff --git a/gtk2_ardour/midi_automation_line.cc b/gtk2_ardour/midi_automation_line.cc index 359c516485..9a40ebbac3 100644 --- a/gtk2_ardour/midi_automation_line.cc +++ b/gtk2_ardour/midi_automation_line.cc @@ -18,21 +18,28 @@ */ #include "ardour/midi_automation_list_binder.h" +#include "ardour/midi_region.h" + +#include "midi++/midnam_patch.h" + #include "midi_automation_line.h" +#include "midi_time_axis.h" + +#include "pbd/i18n.h" using namespace std; MidiAutomationLine::MidiAutomationLine ( const std::string& name, TimeAxisView& tav, - ArdourCanvas::Group& group, + ArdourCanvas::Item& parent, boost::shared_ptr list, boost::shared_ptr region, Evoral::Parameter parameter, Evoral::TimeConverter* converter) - : AutomationLine (name, tav, group, list, converter) - , _region (region) - , _parameter (parameter) + : AutomationLine (name, tav, parent, list, parameter, converter) + , _region (region) + , _parameter (parameter) { } @@ -42,3 +49,42 @@ MidiAutomationLine::memento_command_binder () { return new ARDOUR::MidiAutomationListBinder (_region->midi_source(), _parameter); } + +string +MidiAutomationLine::get_verbose_cursor_string (double fraction) const +{ + using namespace MIDI::Name; + + if (_parameter.type() != ARDOUR::MidiCCAutomation) { + return AutomationLine::get_verbose_cursor_string(fraction); + } + + MidiTimeAxisView* const mtv = dynamic_cast(trackview.get_parent()); + if (!mtv) { + return AutomationLine::get_verbose_cursor_string(fraction); + } + + boost::shared_ptr device_names(mtv->get_device_names()); + if (!device_names) { + return AutomationLine::get_verbose_cursor_string(fraction); + } + + const std::string& device_mode = mtv->gui_property(X_("midnam-custom-device-mode")); + const uint8_t channel = mtv->get_channel_for_add(); + + boost::shared_ptr value_names = device_names->value_name_list_by_control( + device_mode, channel, _parameter.id()); + if (!value_names) { + return AutomationLine::get_verbose_cursor_string(fraction); + } + + const uint16_t cc_value = floor(std::max(std::min(fraction * 127.0, 127.0), 0.0)); + + boost::shared_ptr value = value_names->max_value_below(cc_value); + if (!value) { + return AutomationLine::get_verbose_cursor_string(fraction); + } + + return value->name(); +} +