From 4a085b91f5cdfd02155c7efd4891c69976a40a5c Mon Sep 17 00:00:00 2001 From: Nikolaus Gullotta Date: Wed, 14 Aug 2019 14:05:05 -0500 Subject: [PATCH] add PromotedSnapshot signal to manager, and subscribe to this this in the global MixerSnapshotList --- gtk2_ardour/mixer_snapshots.cc | 17 +++++++++++++++-- gtk2_ardour/mixer_snapshots.h | 1 + libs/ardour/ardour/mixer_snapshot_manager.h | 4 ++++ libs/ardour/mixer_snapshot_manager.cc | 1 + 4 files changed, 21 insertions(+), 2 deletions(-) diff --git a/gtk2_ardour/mixer_snapshots.cc b/gtk2_ardour/mixer_snapshots.cc index 2fb34f333c..e2a60bb264 100644 --- a/gtk2_ardour/mixer_snapshots.cc +++ b/gtk2_ardour/mixer_snapshots.cc @@ -149,8 +149,13 @@ void MixerSnapshotList::bootstrap_display_and_model() void MixerSnapshotList::set_session (Session* s) { - SessionHandlePtr::set_session (s); - redisplay (); + if(s) { + SessionHandlePtr::set_session(s); + redisplay (); + if(_global) { + s->snapshot_manager().PromotedSnapshot.connect(connections, invalidator(*this), boost::bind(&MixerSnapshotList::add_promoted_snapshot, this, _1), gui_context()); + } + } } void MixerSnapshotList::new_snapshot() { @@ -342,6 +347,14 @@ void MixerSnapshotList::substitution_dialog_response(int response, MixerSnapshot snapshot->set_route_states(clean); } +void MixerSnapshotList::add_promoted_snapshot(MixerSnapshot* snapshot) +{ + if(!snapshot) { + return; + } + redisplay(); +} + /* Pop up the snapshot display context menu. * @param button Button used to open the menu. diff --git a/gtk2_ardour/mixer_snapshots.h b/gtk2_ardour/mixer_snapshots.h index 55e27567b2..a6e4399a96 100644 --- a/gtk2_ardour/mixer_snapshots.h +++ b/gtk2_ardour/mixer_snapshots.h @@ -109,6 +109,7 @@ private: void promote_snapshot (Gtk::TreeModel::iterator&); Gtk::TreeModel::const_iterator get_row_by_name(const std::string&); bool remove_row(Gtk::TreeModel::const_iterator&); + void add_promoted_snapshot(ARDOUR::MixerSnapshot*); }; #endif // __gtk_ardour_mixer_snapshots_h__ diff --git a/libs/ardour/ardour/mixer_snapshot_manager.h b/libs/ardour/ardour/mixer_snapshot_manager.h index b3332bd18b..8d91c094d2 100644 --- a/libs/ardour/ardour/mixer_snapshot_manager.h +++ b/libs/ardour/ardour/mixer_snapshot_manager.h @@ -27,6 +27,8 @@ #include "ardour/mixer_snapshot.h" #include "ardour/session.h" +#include "pbd/signals.h" + namespace ARDOUR { typedef std::set SnapshotList; @@ -56,6 +58,8 @@ public: void refresh(); void clear() { _global_snapshots.clear(); _local_snapshots.clear(); }; + + PBD::Signal1 PromotedSnapshot; private: void ensure_snapshot_dir(bool global); std::string _global_path; diff --git a/libs/ardour/mixer_snapshot_manager.cc b/libs/ardour/mixer_snapshot_manager.cc index eb3463d851..2c8c42ac23 100644 --- a/libs/ardour/mixer_snapshot_manager.cc +++ b/libs/ardour/mixer_snapshot_manager.cc @@ -128,6 +128,7 @@ bool MixerSnapshotManager::promote(MixerSnapshot* snapshot) { //insert the new snapshot _global_snapshots.insert(new_snap); + PromotedSnapshot(new_snap); /* EMIT SIGNAL */ return true; } return false;