mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-08 15:54:57 +01:00
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
3 changed files with 16 additions and 7 deletions
|
|
@ -23,6 +23,7 @@
|
||||||
#include <boost/algorithm/string.hpp>
|
#include <boost/algorithm/string.hpp>
|
||||||
#include <boost/lexical_cast.hpp>
|
#include <boost/lexical_cast.hpp>
|
||||||
|
|
||||||
|
#include "pbd/error.h"
|
||||||
#include "pbd/memento_command.h"
|
#include "pbd/memento_command.h"
|
||||||
#include "pbd/stacktrace.h"
|
#include "pbd/stacktrace.h"
|
||||||
|
|
||||||
|
|
@ -876,15 +877,17 @@ AutomationTimeAxisView::lines () const
|
||||||
string
|
string
|
||||||
AutomationTimeAxisView::state_id() const
|
AutomationTimeAxisView::state_id() const
|
||||||
{
|
{
|
||||||
if (_control) {
|
if (_automatable != _route && _control) {
|
||||||
return string_compose ("automation %1", _control->id().to_s());
|
return string_compose ("automation %1", _control->id().to_s());
|
||||||
} else {
|
} else if (_parameter) {
|
||||||
assert (_parameter);
|
|
||||||
return string_compose ("automation %1 %2/%3/%4",
|
return string_compose ("automation %1 %2/%3/%4",
|
||||||
_route->id(),
|
_route->id(),
|
||||||
_parameter.type(),
|
_parameter.type(),
|
||||||
_parameter.id(),
|
_parameter.id(),
|
||||||
(int) _parameter.channel());
|
(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);
|
static void what_has_visible_automation (const boost::shared_ptr<ARDOUR::Automatable>& automatable, std::set<Evoral::Parameter>& visible);
|
||||||
|
|
||||||
protected:
|
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 */
|
/** parent route */
|
||||||
boost::shared_ptr<ARDOUR::Route> _route;
|
boost::shared_ptr<ARDOUR::Route> _route;
|
||||||
/** control; 0 if we are editing region-based automation */
|
/** control */
|
||||||
boost::shared_ptr<ARDOUR::AutomationControl> _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;
|
boost::shared_ptr<ARDOUR::Automatable> _automatable;
|
||||||
/** controller owner; 0 if we are editing region-based automation */
|
/** controller owner */
|
||||||
boost::shared_ptr<AutomationController> _controller;
|
boost::shared_ptr<AutomationController> _controller;
|
||||||
Evoral::Parameter _parameter;
|
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.
|
* 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 ();
|
request_redraw ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue