summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2016-01-10 00:00:07 +0100
committerRobin Gareus <robin@gareus.org>2016-01-10 00:28:00 +0100
commit28f8b7d5d6bd99e97b495d68af766d9d980f2021 (patch)
tree4aba96ae18159a14b0d49185cc5853bf21b4c92a
parent36fb8c44c1b079451fbb4ffb197404fd6f3e3bb3 (diff)
retain expansion-state when reordering plugins in the sidebar
-rw-r--r--gtk2_ardour/mixer_ui.cc31
-rw-r--r--gtk2_ardour/mixer_ui.h2
2 files changed, 33 insertions, 0 deletions
diff --git a/gtk2_ardour/mixer_ui.cc b/gtk2_ardour/mixer_ui.cc
index bf7bde1c60..470df1de08 100644
--- a/gtk2_ardour/mixer_ui.cc
+++ b/gtk2_ardour/mixer_ui.cc
@@ -208,6 +208,9 @@ Mixer_UI::Mixer_UI ()
favorite_plugins_display.signal_row_activated().connect (sigc::mem_fun (*this, &Mixer_UI::plugin_row_activated));
favorite_plugins_display.signal_button_press_event().connect (sigc::mem_fun (*this, &Mixer_UI::plugin_row_button_press), false);
favorite_plugins_display.signal_drop.connect (sigc::mem_fun (*this, &Mixer_UI::plugin_drop));
+ favorite_plugins_display.signal_row_expanded().connect (sigc::mem_fun (*this, &Mixer_UI::save_favorite_ui_state));
+ favorite_plugins_display.signal_row_collapsed().connect (sigc::mem_fun (*this, &Mixer_UI::save_favorite_ui_state));
+ favorite_plugins_model->signal_row_has_child_toggled().connect (sigc::mem_fun (*this, &Mixer_UI::sync_treeview_favorite_ui_state));
favorite_plugins_scroller.add (favorite_plugins_display);
favorite_plugins_scroller.set_policy (Gtk::POLICY_NEVER, Gtk::POLICY_AUTOMATIC);
@@ -2241,6 +2244,15 @@ Mixer_UI::store_current_favorite_order ()
}
void
+Mixer_UI::save_favorite_ui_state (const TreeModel::iterator& iter, const TreeModel::Path& path)
+{
+ Gtk::TreeModel::Row row = *iter;
+ ARDOUR::PluginPresetPtr ppp = row[favorite_plugins_columns.plugin];
+ assert (ppp);
+ favorite_ui_state[(*ppp->_pip).unique_id] = favorite_plugins_display.row_expanded (favorite_plugins_model->get_path(iter));
+}
+
+void
Mixer_UI::refiller (PluginInfoList& result, const PluginInfoList& plugs)
{
PluginManager& manager (PluginManager::instance());
@@ -2307,6 +2319,25 @@ Mixer_UI::refill_favorite_plugins ()
}
void
+Mixer_UI::sync_treeview_favorite_ui_state (const TreeModel::Path& path, const TreeModel::iterator&)
+{
+ TreeIter iter;
+ if (!(iter = favorite_plugins_model->get_iter (path))) {
+ return;
+ }
+ ARDOUR::PluginPresetPtr ppp = (*iter)[favorite_plugins_columns.plugin];
+ if (!ppp) {
+ return;
+ }
+ PluginInfoPtr pip = ppp->_pip;
+ if (favorite_ui_state.find (pip->unique_id) != favorite_ui_state.end ()) {
+ if (favorite_ui_state[pip->unique_id]) {
+ favorite_plugins_display.expand_row (path, true);
+ }
+ }
+}
+
+void
Mixer_UI::sync_treeview_from_favorite_order ()
{
favorite_plugins_model->clear ();
diff --git a/gtk2_ardour/mixer_ui.h b/gtk2_ardour/mixer_ui.h
index 915809620a..a909228b06 100644
--- a/gtk2_ardour/mixer_ui.h
+++ b/gtk2_ardour/mixer_ui.h
@@ -354,6 +354,8 @@ class Mixer_UI : public Gtk::Window, public PBD::ScopedConnectionList, public AR
void refiller (ARDOUR::PluginInfoList& result, const ARDOUR::PluginInfoList& plugs);
void refill_favorite_plugins ();
void sync_treeview_from_favorite_order ();
+ void sync_treeview_favorite_ui_state (const Gtk::TreeModel::Path&, const Gtk::TreeModel::iterator&);
+ void save_favorite_ui_state (const Gtk::TreeModel::iterator& iter, const Gtk::TreeModel::Path& path);
/// true if we are in fullscreen mode
bool _maximised;