save/restore plugin-sidebar expanded items
authorRobin Gareus <robin@gareus.org>
Fri, 25 Dec 2015 23:43:59 +0000 (00:43 +0100)
committerRobin Gareus <robin@gareus.org>
Fri, 25 Dec 2015 23:43:59 +0000 (00:43 +0100)
gtk2_ardour/mixer_ui.cc
gtk2_ardour/mixer_ui.h

index a8e22c49769915f1f2707dc55249637c678e8a41..683df81dfdec6f91e5b9873d2f147ea1a1bd2dc6 100644 (file)
@@ -1662,7 +1662,6 @@ public:
                if (biter != _user.end()) {
                        return false;
                }
-               printf("BITTER\n");
                return ARDOUR::cmp_nocase((*a).name, (*b).name) == -1;
        }
 
@@ -1753,18 +1752,22 @@ Mixer_UI::set_state (const XMLNode& node)
                tact->set_active (yn);
        }
 
+
        XMLNode* plugin_order;
        if ((plugin_order = find_named_node (node, "PluginOrder")) != 0) {
+               store_current_favorite_order ();
                std::list<string> order;
                const XMLNodeList& kids = plugin_order->children("PluginInfo");
                XMLNodeConstIterator i;
                for (i = kids.begin(); i != kids.end(); ++i) {
                        if ((prop = (*i)->property ("unique-id"))) {
-                               order.push_back (prop->value());
+                               std::string unique_id = prop->value();
+                               order.push_back (unique_id);
+                               if ((prop = (*i)->property ("expanded"))) {
+                                       favorite_ui_state[unique_id] = string_is_affirmative (prop->value());
+                               }
                        }
                }
-
-               store_current_favorite_order ();
                PluginStateSorter cmp (order);
                favorite_order.sort (cmp);
                sync_treeview_from_favorite_order ();
@@ -1825,6 +1828,9 @@ Mixer_UI::get_state (void)
                        XMLNode* p = new XMLNode ("PluginInfo");
                        p->add_property ("sort", cnt);
                        p->add_property ("unique-id", (*i)->unique_id);
+                       try {
+                               p->add_property ("expanded", favorite_ui_state.at ((*i)->unique_id));
+                       } catch (const std::out_of_range&) { }
                        plugin_order->add_child_nocopy (*p);
                ;
        }
@@ -2234,6 +2240,7 @@ Mixer_UI::store_current_favorite_order ()
                ARDOUR::PluginPresetPtr ppp = row[favorite_plugins_columns.plugin];
                favorite_order.push_back (ppp->_pip);
                std::string name = row[favorite_plugins_columns.name];
+               favorite_ui_state[(*ppp->_pip).unique_id] = favorite_plugins_display.row_expanded (favorite_plugins_model->get_path(iter));
        }
 }
 
@@ -2323,6 +2330,11 @@ Mixer_UI::sync_treeview_from_favorite_order ()
                        child_row[favorite_plugins_columns.name] = (*j).label;
                        child_row[favorite_plugins_columns.plugin] = PluginPresetPtr (new PluginPreset(pip, &(*j)));
                }
+               try {
+                       if (favorite_ui_state.at (pip->unique_id)) {
+                               favorite_plugins_display.expand_row (favorite_plugins_model->get_path(newrow), true);
+                       }
+               } catch (const std::out_of_range&) { }
        }
 }
 
index 77b61e48120d390c6108e1f064b7ff845438a83b..97126491308371b6101106e01426299481b93ee5 100644 (file)
@@ -278,6 +278,7 @@ class Mixer_UI : public Gtk::Window, public PBD::ScopedConnectionList, public AR
        };
 
        ARDOUR::PluginInfoList favorite_order;
+       std::map<std::string, bool> favorite_ui_state;
 
        TrackDisplayModelColumns    track_columns;
        GroupDisplayModelColumns    group_columns;