13
0

Restore visible automation lanes (#7914)

On session re-load only automation lanes with events were displayed,
regardless of visibility state. This allowed for inconsistent
state (menu showed them as visible even if they were not).
This commit is contained in:
Robin Gareus 2020-02-28 02:25:57 +01:00
parent 73c5bdd3cb
commit 1af5f37e46
Signed by: rgareus
GPG Key ID: A090BCE02CF57F04
2 changed files with 27 additions and 1 deletions

View File

@ -83,6 +83,18 @@ public:
return false;
}
template <typename T>
bool get_gui_property (const std::string& state_id, const std::string& property_name, T& value) const
{
std::string str = gui_object_state().get_string (state_id, property_name);
if (!str.empty ()) {
return PBD::string_to<T>(str, value);
}
return false;
}
void set_gui_property (const std::string& property_name, const std::string& value);
void remove_gui_property (const std::string& property_name);

View File

@ -2045,9 +2045,23 @@ RouteTimeAxisView::add_existing_processor_automation_curves (boost::weak_ptr<Pro
}
set<Evoral::Parameter> existing;
processor->what_has_data (existing);
/* Also add explicitly visible */
const std::set<Evoral::Parameter>& automatable = processor->what_can_be_automated ();
for (std::set<Evoral::Parameter>::const_iterator i = automatable.begin(); i != automatable.end(); ++i) {
boost::shared_ptr<AutomationControl> control = boost::dynamic_pointer_cast<AutomationControl>(processor->control(*i, false));
if (!control) {
continue;
}
/* see also AutomationTimeAxisView::state_id() */
std::string ctrl_state_id = std::string("automation ") + control->id().to_s();
bool visible;
if (get_gui_property (ctrl_state_id, "visible", visible) && visible) {
existing.insert (*i);
}
}
for (set<Evoral::Parameter>::iterator i = existing.begin(); i != existing.end(); ++i) {
Evoral::Parameter param (*i);