summaryrefslogtreecommitdiff
path: root/gtk2_ardour
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2020-02-28 02:25:57 +0100
committerRobin Gareus <robin@gareus.org>2020-02-28 02:25:57 +0100
commit1af5f37e4698c2e3c0edf195c23734834d426ea0 (patch)
treeeeef3bc527b487066a0314123cfe0b422cb71dd8 /gtk2_ardour
parent73c5bdd3cb08ad0888fafe2f4018c3f2a575340c (diff)
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).
Diffstat (limited to 'gtk2_ardour')
-rw-r--r--gtk2_ardour/axis_view.h12
-rw-r--r--gtk2_ardour/route_time_axis.cc16
2 files changed, 27 insertions, 1 deletions
diff --git a/gtk2_ardour/axis_view.h b/gtk2_ardour/axis_view.h
index 1a1686add9..e1db192b7e 100644
--- a/gtk2_ardour/axis_view.h
+++ b/gtk2_ardour/axis_view.h
@@ -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);
diff --git a/gtk2_ardour/route_time_axis.cc b/gtk2_ardour/route_time_axis.cc
index 8bd0b8f440..4a723ba16e 100644
--- a/gtk2_ardour/route_time_axis.cc
+++ b/gtk2_ardour/route_time_axis.cc
@@ -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);