diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2014-01-11 15:19:18 -0500 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2014-01-11 15:19:18 -0500 |
commit | 59631acc5f41153a294c97ab820a4b41a886e24c (patch) | |
tree | 1e1b4fe2b2008eb790d1ffc0dcb5945c4b143c2f /gtk2_ardour | |
parent | 943bcc29cc05bc1d75df505cd259659a72dc56b1 (diff) | |
parent | 72d8ca89e2f4b2e194b2bbd99261deb5b2108a40 (diff) |
fix merge with master
Diffstat (limited to 'gtk2_ardour')
-rw-r--r-- | gtk2_ardour/automation_line.cc | 45 | ||||
-rw-r--r-- | gtk2_ardour/automation_line.h | 66 | ||||
-rw-r--r-- | gtk2_ardour/midi_automation_line.cc | 49 | ||||
-rw-r--r-- | gtk2_ardour/midi_automation_line.h | 10 |
4 files changed, 103 insertions, 67 deletions
diff --git a/gtk2_ardour/automation_line.cc b/gtk2_ardour/automation_line.cc index 9fe1e0fa19..a4d58cb531 100644 --- a/gtk2_ardour/automation_line.cc +++ b/gtk2_ardour/automation_line.cc @@ -70,8 +70,8 @@ using namespace Editing; * This will not be deleted by AutomationLine. */ AutomationLine::AutomationLine (const string& name, TimeAxisView& tv, ArdourCanvas::Group& parent, - boost::shared_ptr<AutomationList> al, - Evoral::TimeConverter<double, framepos_t>* converter) + boost::shared_ptr<AutomationList> al, + Evoral::TimeConverter<double, framepos_t>* converter) : trackview (tv) , _name (name) , alist (al) @@ -192,7 +192,7 @@ AutomationLine::control_point_box_size () { if (alist->interpolation() == AutomationList::Discrete) { return max((_height*4.0) / (double)(alist->parameter().max() - alist->parameter().min()), - 4.0); + 4.0); } if (_height > TimeAxisView::preset_height (HeightLarger)) { @@ -270,8 +270,7 @@ AutomationLine::modify_point_y (ControlPoint& cp, double y) trackview.editor().session()->begin_reversible_command (_("automation event move")); trackview.editor().session()->add_command ( - new MementoCommand<AutomationList> (memento_command_binder(), &get_state(), 0) - ); + new MementoCommand<AutomationList> (memento_command_binder(), &get_state(), 0)); cp.move_to (x, y, ControlPoint::Full); @@ -288,8 +287,7 @@ AutomationLine::modify_point_y (ControlPoint& cp, double y) update_pending = false; trackview.editor().session()->add_command ( - new MementoCommand<AutomationList> (memento_command_binder(), 0, &alist->get_state()) - ); + new MementoCommand<AutomationList> (memento_command_binder(), 0, &alist->get_state())); trackview.editor().session()->commit_reversible_command (); trackview.editor().session()->set_dirty (); @@ -453,8 +451,7 @@ AutomationLine::start_drag_single (ControlPoint* cp, double x, float fraction) { trackview.editor().session()->begin_reversible_command (_("automation event move")); trackview.editor().session()->add_command ( - new MementoCommand<AutomationList> (memento_command_binder(), &get_state(), 0) - ); + new MementoCommand<AutomationList> (memento_command_binder(), &get_state(), 0)); _drag_points.clear (); _drag_points.push_back (cp); @@ -480,8 +477,7 @@ AutomationLine::start_drag_line (uint32_t i1, uint32_t i2, float fraction) { trackview.editor().session()->begin_reversible_command (_("automation range move")); trackview.editor().session()->add_command ( - new MementoCommand<AutomationList> (memento_command_binder (), &get_state(), 0) - ); + new MementoCommand<AutomationList> (memento_command_binder (), &get_state(), 0)); _drag_points.clear (); @@ -501,8 +497,7 @@ AutomationLine::start_drag_multiple (list<ControlPoint*> cp, float fraction, XML { trackview.editor().session()->begin_reversible_command (_("automation range move")); trackview.editor().session()->add_command ( - new MementoCommand<AutomationList> (memento_command_binder(), state, 0) - ); + new MementoCommand<AutomationList> (memento_command_binder(), state, 0)); _drag_points = cp; start_drag_common (0, fraction); @@ -740,8 +735,7 @@ AutomationLine::end_drag (bool with_push, uint32_t final_index) update_pending = false; trackview.editor().session()->add_command ( - new MementoCommand<AutomationList>(memento_command_binder (), 0, &alist->get_state()) - ); + new MementoCommand<AutomationList>(memento_command_binder (), 0, &alist->get_state())); trackview.editor().session()->set_dirty (); did_push = false; @@ -845,8 +839,7 @@ AutomationLine::remove_point (ControlPoint& cp) alist->erase (cp.model()); trackview.editor().session()->add_command( - new MementoCommand<AutomationList> (memento_command_binder (), &before, &alist->get_state()) - ); + new MementoCommand<AutomationList> (memento_command_binder (), &before, &alist->get_state())); trackview.editor().session()->commit_reversible_command (); trackview.editor().session()->set_dirty (); @@ -958,7 +951,7 @@ AutomationLine::reset_callback (const Evoral::ControlList& events) if (isnan (tx) || isnan (ty)) { warning << string_compose (_("Ignoring illegal points on AutomationLine \"%1\""), - _name) << endmsg; + _name) << endmsg; continue; } @@ -1064,8 +1057,7 @@ AutomationLine::clear () alist->clear(); trackview.editor().session()->add_command ( - new MementoCommand<AutomationList> (memento_command_binder (), &before, &alist->get_state()) - ); + new MementoCommand<AutomationList> (memento_command_binder (), &before, &alist->get_state())); } void @@ -1161,8 +1153,8 @@ AutomationLine::view_to_model_coord_y (double& y) const y = max (0.0, y); y = min (2.0, y); } else if (alist->parameter().type() == PanAzimuthAutomation || - alist->parameter().type() == PanElevationAutomation || - alist->parameter().type() == PanWidthAutomation) { + alist->parameter().type() == PanElevationAutomation || + alist->parameter().type() == PanWidthAutomation) { y = 1.0 - y; } else if (alist->parameter().type() == PluginAutomation) { y = y * (double)(alist->get_max_y()- alist->get_min_y()) + alist->get_min_y(); @@ -1179,8 +1171,8 @@ AutomationLine::model_to_view_coord (double& x, double& y) const alist->parameter().type() == EnvelopeAutomation) { y = gain_to_slider_position_with_max (y, Config->get_max_gain()); } else if (alist->parameter().type() == PanAzimuthAutomation || - alist->parameter().type() == PanElevationAutomation || - alist->parameter().type() == PanWidthAutomation) { + alist->parameter().type() == PanElevationAutomation || + alist->parameter().type() == PanWidthAutomation) { // vertical coordinate axis reversal y = 1.0 - y; } else if (alist->parameter().type() == PluginAutomation) { @@ -1206,7 +1198,7 @@ AutomationLine::interpolation_changed (AutomationList::InterpolationStyle style) void AutomationLine::add_visible_control_point (uint32_t view_index, uint32_t pi, double tx, double ty, - AutomationList::iterator model, uint32_t npoints) + AutomationList::iterator model, uint32_t npoints) { ControlPoint::ShapeType shape; @@ -1259,8 +1251,7 @@ AutomationLine::connect_to_list () alist->StateChanged.connect (_list_connections, invalidator (*this), boost::bind (&AutomationLine::list_changed, this), gui_context()); alist->InterpolationChanged.connect ( - _list_connections, invalidator (*this), boost::bind (&AutomationLine::interpolation_changed, this, _1), gui_context() - ); + _list_connections, invalidator (*this), boost::bind (&AutomationLine::interpolation_changed, this, _1), gui_context()); } MementoCommandBinder<AutomationList>* diff --git a/gtk2_ardour/automation_line.h b/gtk2_ardour/automation_line.h index bb1e927ad5..3583ecdd71 100644 --- a/gtk2_ardour/automation_line.h +++ b/gtk2_ardour/automation_line.h @@ -52,7 +52,7 @@ class Selection; /** A GUI representation of an ARDOUR::AutomationList */ class AutomationLine : public sigc::trackable, public PBD::StatefulDestructible { - public: +public: enum VisibleAspects { Line = 0x1, ControlPoints = 0x2, @@ -60,8 +60,8 @@ class AutomationLine : public sigc::trackable, public PBD::StatefulDestructible }; AutomationLine (const std::string& name, TimeAxisView&, ArdourCanvas::Group&, - boost::shared_ptr<ARDOUR::AutomationList>, - Evoral::TimeConverter<double, ARDOUR::framepos_t>* converter = 0); + boost::shared_ptr<ARDOUR::AutomationList>, + Evoral::TimeConverter<double, ARDOUR::framepos_t>* converter = 0); virtual ~AutomationLine (); void queue_reset (); @@ -76,11 +76,11 @@ class AutomationLine : public sigc::trackable, public PBD::StatefulDestructible bool control_points_adjacent (double xval, uint32_t& before, uint32_t& after); /* dragging API */ - virtual void start_drag_single (ControlPoint*, double, float); - virtual void start_drag_line (uint32_t, uint32_t, float); - virtual void start_drag_multiple (std::list<ControlPoint*>, float, XMLNode *); - virtual std::pair<double, float> drag_motion (double, float, bool, bool with_push, uint32_t& final_index); - virtual void end_drag (bool with_push, uint32_t final_index); + virtual void start_drag_single (ControlPoint*, double, float); + virtual void start_drag_line (uint32_t, uint32_t, float); + virtual void start_drag_multiple (std::list<ControlPoint*>, float, XMLNode *); + virtual std::pair<double, float> drag_motion (double, float, bool, bool with_push, uint32_t& final_index); + virtual void end_drag (bool with_push, uint32_t final_index); ControlPoint* nth (uint32_t); ControlPoint const * nth (uint32_t) const; @@ -108,10 +108,10 @@ class AutomationLine : public sigc::trackable, public PBD::StatefulDestructible ArdourCanvas::Item& parent_group() const { return _parent_group; } ArdourCanvas::Item& grab_item() const { return *line; } - std::string get_verbose_cursor_string (double) const; - std::string get_verbose_cursor_relative_string (double, double) const; + virtual std::string get_verbose_cursor_string (double) const; + std::string get_verbose_cursor_relative_string (double, double) const; std::string fraction_to_string (double) const; - std::string fraction_to_relative_string (double, double) const; + std::string fraction_to_relative_string (double, double) const; double string_to_fraction (std::string const &) const; void view_to_model_coord (double& x, double& y) const; void view_to_model_coord_y (double &) const; @@ -141,7 +141,7 @@ class AutomationLine : public sigc::trackable, public PBD::StatefulDestructible std::pair<ARDOUR::framepos_t, ARDOUR::framepos_t> get_point_x_range () const; void set_maximum_time (ARDOUR::framecnt_t); - ARDOUR::framecnt_t maximum_time () const { + ARDOUR::framecnt_t maximum_time () const { return _maximum_time; } @@ -150,7 +150,7 @@ class AutomationLine : public sigc::trackable, public PBD::StatefulDestructible framepos_t session_position (ARDOUR::AutomationList::const_iterator) const; - protected: +protected: std::string _name; guint32 _height; @@ -163,12 +163,12 @@ class AutomationLine : public sigc::trackable, public PBD::StatefulDestructible VisibleAspects _visible; - bool _uses_gain_mapping; - bool terminal_points_can_slide; - bool update_pending; - bool have_timeout; - bool no_draw; - bool _is_boolean; + bool _uses_gain_mapping; + bool terminal_points_can_slide; + bool update_pending; + bool have_timeout; + bool no_draw; + bool _is_boolean; /** true if we did a push at any point during the current drag */ bool did_push; @@ -178,26 +178,26 @@ class AutomationLine : public sigc::trackable, public PBD::StatefulDestructible ArdourCanvas::Points line_points; /* coordinates for canvas line */ std::vector<ControlPoint*> control_points; /* visible control points */ - class ContiguousControlPoints : public std::list<ControlPoint*> { - public: - ContiguousControlPoints (AutomationLine& al); - double clamp_dx (double dx); - void move (double dx, double dy); - void compute_x_bounds (); - private: - AutomationLine& line; - double before_x; - double after_x; + class ContiguousControlPoints : public std::list<ControlPoint*> { +public: + ContiguousControlPoints (AutomationLine& al); + double clamp_dx (double dx); + void move (double dx, double dy); + void compute_x_bounds (); +private: + AutomationLine& line; + double before_x; + double after_x; }; - friend class ContiguousControlPoints; + friend class ContiguousControlPoints; typedef boost::shared_ptr<ContiguousControlPoints> CCP; - std::vector<CCP> contiguous_points; + std::vector<CCP> contiguous_points; void sync_model_with_view_point (ControlPoint&); void sync_model_with_view_points (std::list<ControlPoint*>); - void start_drag_common (double, float); + void start_drag_common (double, float); virtual void change_model (ARDOUR::AutomationList::iterator, double x, double y); @@ -206,7 +206,7 @@ class AutomationLine : public sigc::trackable, public PBD::StatefulDestructible virtual bool event_handler (GdkEvent*); - private: +private: std::list<ControlPoint*> _drag_points; ///< points we are dragging std::list<ControlPoint*> _push_points; ///< additional points we are dragging if "push" is enabled bool _drag_had_movement; ///< true if the drag has seen movement, otherwise false diff --git a/gtk2_ardour/midi_automation_line.cc b/gtk2_ardour/midi_automation_line.cc index 359c516485..971944266f 100644 --- a/gtk2_ardour/midi_automation_line.cc +++ b/gtk2_ardour/midi_automation_line.cc @@ -18,7 +18,11 @@ */ #include "ardour/midi_automation_list_binder.h" +#include "midi++/midnam_patch.h" #include "midi_automation_line.h" +#include "midi_time_axis.h" + +#include "i18n.h" using namespace std; @@ -30,9 +34,9 @@ MidiAutomationLine::MidiAutomationLine ( boost::shared_ptr<ARDOUR::MidiRegion> region, Evoral::Parameter parameter, Evoral::TimeConverter<double, ARDOUR::framepos_t>* converter) - : AutomationLine (name, tav, group, list, converter) - , _region (region) - , _parameter (parameter) + : AutomationLine (name, tav, group, list, converter) + , _region (region) + , _parameter (parameter) { } @@ -42,3 +46,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<MidiTimeAxisView*>(trackview.get_parent()); + if (!mtv) { + return AutomationLine::get_verbose_cursor_string(fraction); + } + + boost::shared_ptr<MasterDeviceNames> 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<const ValueNameList> 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<const Value> value = value_names->max_value_below(cc_value); + if (!value) { + return AutomationLine::get_verbose_cursor_string(fraction); + } + + return value->name(); +} + diff --git a/gtk2_ardour/midi_automation_line.h b/gtk2_ardour/midi_automation_line.h index aafe966028..df4db06c2c 100644 --- a/gtk2_ardour/midi_automation_line.h +++ b/gtk2_ardour/midi_automation_line.h @@ -27,13 +27,15 @@ class MidiAutomationLine : public AutomationLine { public: MidiAutomationLine (const std::string&, TimeAxisView&, ArdourCanvas::Group&, - boost::shared_ptr<ARDOUR::AutomationList>, - boost::shared_ptr<ARDOUR::MidiRegion>, - Evoral::Parameter, - Evoral::TimeConverter<double, ARDOUR::framepos_t>* converter = 0); + boost::shared_ptr<ARDOUR::AutomationList>, + boost::shared_ptr<ARDOUR::MidiRegion>, + Evoral::Parameter, + Evoral::TimeConverter<double, ARDOUR::framepos_t>* converter = 0); MementoCommandBinder<ARDOUR::AutomationList>* memento_command_binder (); + virtual std::string get_verbose_cursor_string (double) const; + private: boost::shared_ptr<ARDOUR::MidiRegion> _region; Evoral::Parameter _parameter; |