diff options
Diffstat (limited to 'gtk2_ardour')
-rw-r--r-- | gtk2_ardour/automation_line.cc | 24 | ||||
-rw-r--r-- | gtk2_ardour/automation_line.h | 4 | ||||
-rw-r--r-- | gtk2_ardour/automation_time_axis.cc | 3 | ||||
-rw-r--r-- | gtk2_ardour/generic_pluginui.cc | 49 | ||||
-rw-r--r-- | gtk2_ardour/midi_automation_line.cc | 2 | ||||
-rw-r--r-- | gtk2_ardour/region_gain_line.cc | 2 |
6 files changed, 29 insertions, 55 deletions
diff --git a/gtk2_ardour/automation_line.cc b/gtk2_ardour/automation_line.cc index c1549ecab3..2e9f988bfa 100644 --- a/gtk2_ardour/automation_line.cc +++ b/gtk2_ardour/automation_line.cc @@ -58,6 +58,7 @@ #include "ardour/event_type_map.h" #include "ardour/session.h" +#include "ardour/value_as_string.h" #include "i18n.h" @@ -73,6 +74,7 @@ AutomationLine::AutomationLine (const string& name, TimeAxisView& tv, ArdourCanvas::Item& parent, boost::shared_ptr<AutomationList> al, + const ParameterDescriptor& desc, Evoral::TimeConverter<double, framepos_t>* converter) : trackview (tv) , _name (name) @@ -81,6 +83,7 @@ AutomationLine::AutomationLine (const string& name, , _parent_group (parent) , _offset (0) , _maximum_time (max_framepos) + , _desc (desc) { if (converter) { _our_time_converter = false; @@ -112,7 +115,8 @@ AutomationLine::AutomationLine (const string& name, trackview.session()->register_with_memento_command_factory(alist->id(), this); if (alist->parameter().type() == GainAutomation || - alist->parameter().type() == EnvelopeAutomation) { + alist->parameter().type() == EnvelopeAutomation || + desc.unit == ParameterDescriptor::DB) { set_uses_gain_mapping (true); } @@ -356,24 +360,20 @@ AutomationLine::get_verbose_cursor_relative_string (double original, double frac string AutomationLine::fraction_to_string (double fraction) const { - char buf[32]; - if (_uses_gain_mapping) { + char buf[32]; if (fraction == 0.0) { snprintf (buf, sizeof (buf), "-inf"); } else { snprintf (buf, sizeof (buf), "%.1f", accurate_coefficient_to_dB (slider_position_to_gain_with_max (fraction, Config->get_max_gain()))); } + return buf; } else { view_to_model_coord_y (fraction); - if (EventTypeMap::instance().is_integer (alist->parameter())) { - snprintf (buf, sizeof (buf), "%d", (int)fraction); - } else { - snprintf (buf, sizeof (buf), "%.2f", fraction); - } + return ARDOUR::value_as_string (_desc, fraction); } - return buf; + return ""; /*NOTREACHED*/ } /** @@ -406,11 +406,7 @@ AutomationLine::fraction_to_relative_string (double original, double fraction) c } else { view_to_model_coord_y (original); view_to_model_coord_y (fraction); - if (EventTypeMap::instance().is_integer (alist->parameter())) { - snprintf (buf, sizeof (buf), "%d", (int)fraction - (int)original); - } else { - snprintf (buf, sizeof (buf), "%.2f", fraction - original); - } + return ARDOUR::value_as_string (_desc, fraction - original); } return buf; diff --git a/gtk2_ardour/automation_line.h b/gtk2_ardour/automation_line.h index 02c67d0dcf..a18f93d9ae 100644 --- a/gtk2_ardour/automation_line.h +++ b/gtk2_ardour/automation_line.h @@ -34,6 +34,7 @@ #include "pbd/memento_command.h" #include "ardour/automation_list.h" +#include "ardour/parameter_descriptor.h" #include "ardour/types.h" #include "canvas/types.h" @@ -64,6 +65,7 @@ public: TimeAxisView& tv, ArdourCanvas::Item& parent, boost::shared_ptr<ARDOUR::AutomationList> al, + const ARDOUR::ParameterDescriptor& desc, Evoral::TimeConverter<double, ARDOUR::framepos_t>* converter = 0); virtual ~AutomationLine (); @@ -234,6 +236,8 @@ private: /** maximum time that a point on this line can be at, relative to the position of its region or start of its track */ ARDOUR::framecnt_t _maximum_time; + const ARDOUR::ParameterDescriptor _desc; + friend class AudioRegionGainLine; }; diff --git a/gtk2_ardour/automation_time_axis.cc b/gtk2_ardour/automation_time_axis.cc index a49bcf0086..3d2773b879 100644 --- a/gtk2_ardour/automation_time_axis.cc +++ b/gtk2_ardour/automation_time_axis.cc @@ -250,7 +250,8 @@ AutomationTimeAxisView::AutomationTimeAxisView ( ARDOUR::EventTypeMap::instance().to_symbol(_parameter), *this, *_canvas_display, - _control->alist() + _control->alist(), + _control->desc() ) ); diff --git a/gtk2_ardour/generic_pluginui.cc b/gtk2_ardour/generic_pluginui.cc index fb35882b34..a4de4fd75e 100644 --- a/gtk2_ardour/generic_pluginui.cc +++ b/gtk2_ardour/generic_pluginui.cc @@ -41,6 +41,7 @@ #include "ardour/plugin.h" #include "ardour/plugin_insert.h" #include "ardour/session.h" +#include "ardour/value_as_string.h" #include "ardour_ui.h" #include "prompter.h" @@ -504,51 +505,23 @@ GenericPluginUI::automation_state_changed (ControlUI* cui) } } - bool GenericPluginUI::integer_printer (char buf[32], Adjustment &adj, ControlUI* cui) { - float const v = adj.get_value (); - - if (cui->scale_points) { - ScalePoints::const_iterator i = cui->scale_points->begin (); - while (i != cui->scale_points->end() && i->second != v) { - ++i; - } - - if (i != cui->scale_points->end ()) { - snprintf (buf, 32, "%s", i->first.c_str()); - return true; - } - } - - snprintf (buf, 32, "%.0f", v); + float const v = cui->control->interface_to_internal(adj.get_value ()); + const std::string& str = ARDOUR::value_as_string(cui->control->desc(), Variant(v)); + const size_t len = str.copy(buf, 31); + buf[len] = '\0'; return true; } bool GenericPluginUI::midinote_printer (char buf[32], Adjustment &adj, ControlUI* cui) { - float const v = adj.get_value (); - - if (cui->scale_points) { - ScalePoints::const_iterator i = cui->scale_points->begin (); - while (i != cui->scale_points->end() && i->second != v) { - ++i; - } - - if (i != cui->scale_points->end ()) { - snprintf (buf, 32, "%s", i->first.c_str()); - return true; - } - } - if (v >= 0 && v <= 127) { - int mn = rint(v); - const char notename[12][3] = { "C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B" }; - snprintf (buf, 32, "%s %d", notename[mn%12], (mn/12)-2); - } else { - snprintf (buf, 32, "%.0f", v); - } + float const v = cui->control->interface_to_internal(adj.get_value ()); + const std::string& str = ARDOUR::value_as_string(cui->control->desc(), Variant(v)); + const size_t len = str.copy(buf, 31); + buf[len] = '\0'; return true; } @@ -687,9 +660,9 @@ GenericPluginUI::build_control_ui (const ParameterDescriptor& desc, Adjustment* adj = control_ui->controller->adjustment(); if (desc.integer_step) { - control_ui->clickbox = new ClickBox (adj, "PluginUIClickBox"); + control_ui->clickbox = new ClickBox (adj, "PluginUIClickBox", desc.enumeration); Gtkmm2ext::set_size_request_to_display_given_text (*control_ui->clickbox, "g9999999", 2, 2); - if (desc.midinote) { + if (desc.unit == ParameterDescriptor::MIDI_NOTE) { control_ui->clickbox->set_printer (sigc::bind (sigc::mem_fun (*this, &GenericPluginUI::midinote_printer), control_ui)); } else { control_ui->clickbox->set_printer (sigc::bind (sigc::mem_fun (*this, &GenericPluginUI::integer_printer), control_ui)); diff --git a/gtk2_ardour/midi_automation_line.cc b/gtk2_ardour/midi_automation_line.cc index e5f30493d7..30bb37c5b0 100644 --- a/gtk2_ardour/midi_automation_line.cc +++ b/gtk2_ardour/midi_automation_line.cc @@ -34,7 +34,7 @@ MidiAutomationLine::MidiAutomationLine ( boost::shared_ptr<ARDOUR::MidiRegion> region, Evoral::Parameter parameter, Evoral::TimeConverter<double, ARDOUR::framepos_t>* converter) - : AutomationLine (name, tav, parent, list, converter) + : AutomationLine (name, tav, parent, list, parameter, converter) , _region (region) , _parameter (parameter) { diff --git a/gtk2_ardour/region_gain_line.cc b/gtk2_ardour/region_gain_line.cc index 43cd0e5140..b010efc04c 100644 --- a/gtk2_ardour/region_gain_line.cc +++ b/gtk2_ardour/region_gain_line.cc @@ -38,7 +38,7 @@ using namespace ARDOUR; using namespace PBD; AudioRegionGainLine::AudioRegionGainLine (const string & name, AudioRegionView& r, ArdourCanvas::Container& parent, boost::shared_ptr<AutomationList> l) - : AutomationLine (name, r.get_time_axis_view(), parent, l) + : AutomationLine (name, r.get_time_axis_view(), parent, l, l->parameter()) , rv (r) { // If this isn't true something is horribly wrong, and we'll get catastrophic gain values |