Fix visibility of MIDI controller automation tracks across saves.
Fix some inaccurate/misleading comments that led to said bug. Gracefully handle the "impossible" case where we can't figure out a state ID for an automation track, instead of crashing.
This commit is contained in:
parent
c91b691260
commit
85cf4b4dbd
@ -23,6 +23,7 @@
|
||||
#include <boost/algorithm/string.hpp>
|
||||
#include <boost/lexical_cast.hpp>
|
||||
|
||||
#include "pbd/error.h"
|
||||
#include "pbd/memento_command.h"
|
||||
#include "pbd/stacktrace.h"
|
||||
|
||||
@ -876,15 +877,17 @@ AutomationTimeAxisView::lines () const
|
||||
string
|
||||
AutomationTimeAxisView::state_id() const
|
||||
{
|
||||
if (_control) {
|
||||
if (_automatable != _route && _control) {
|
||||
return string_compose ("automation %1", _control->id().to_s());
|
||||
} else {
|
||||
assert (_parameter);
|
||||
} else if (_parameter) {
|
||||
return string_compose ("automation %1 %2/%3/%4",
|
||||
_route->id(),
|
||||
_parameter.type(),
|
||||
_parameter.id(),
|
||||
(int) _parameter.channel());
|
||||
} else {
|
||||
error << "Automation time axis has no state ID" << endmsg;
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -123,13 +123,17 @@ class AutomationTimeAxisView : public TimeAxisView {
|
||||
static void what_has_visible_automation (const boost::shared_ptr<ARDOUR::Automatable>& automatable, std::set<Evoral::Parameter>& visible);
|
||||
|
||||
protected:
|
||||
/* Note that for MIDI controller "automation" (in regions), all of these
|
||||
may be set. In this case, _automatable is likely _route so the
|
||||
controller will send immediate events out the route's MIDI port. */
|
||||
|
||||
/** parent route */
|
||||
boost::shared_ptr<ARDOUR::Route> _route;
|
||||
/** control; 0 if we are editing region-based automation */
|
||||
/** control */
|
||||
boost::shared_ptr<ARDOUR::AutomationControl> _control;
|
||||
/** control owner; may be _route, or 0 if we are editing region-based automation */
|
||||
/** control owner; may be _route, something else (e.g. a pan control), or NULL */
|
||||
boost::shared_ptr<ARDOUR::Automatable> _automatable;
|
||||
/** controller owner; 0 if we are editing region-based automation */
|
||||
/** controller owner */
|
||||
boost::shared_ptr<AutomationController> _controller;
|
||||
Evoral::Parameter _parameter;
|
||||
|
||||
|
@ -1303,7 +1303,9 @@ MidiTimeAxisView::create_automation_child (const Evoral::Parameter& param, bool
|
||||
* since it will have been set visible by default.
|
||||
*/
|
||||
|
||||
if (existing->second->set_marked_for_display (show) && !no_redraw) {
|
||||
existing->second->set_marked_for_display (show);
|
||||
|
||||
if (!no_redraw) {
|
||||
request_redraw ();
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user