Fix show checkbuttons for mixer groups on startup (#3919). Also synchronise visible...
authorCarl Hetherington <carl@carlh.net>
Wed, 6 Apr 2011 00:36:36 +0000 (00:36 +0000)
committerCarl Hetherington <carl@carlh.net>
Wed, 6 Apr 2011 00:36:36 +0000 (00:36 +0000)
git-svn-id: svn://localhost/ardour2/branches/3.0@9297 d708f5d6-7413-0410-9779-e7cbd77b26cf

gtk2_ardour/editor_route_groups.cc
gtk2_ardour/editor_route_groups.h
gtk2_ardour/mixer_ui.cc
libs/ardour/route_group.cc

index 9ee0b503fc31e52c035226ef9d2501c154a56877..319c48735c21bb1814fc96dffbd47616cd65df41 100644 (file)
@@ -343,20 +343,6 @@ EditorRouteGroups::row_change (const Gtk::TreeModel::Path&, const Gtk::TreeModel
                return;
        }
 
-       if ((*iter)[_columns.is_visible]) {
-               for (TrackViewList::const_iterator j = _editor->get_track_views().begin(); j != _editor->get_track_views().end(); ++j) {
-                       if ((*j)->route_group() == group) {
-                               _editor->_routes->show_track_in_display (**j);
-                       }
-               }
-       } else {
-               for (TrackViewList::const_iterator j = _editor->get_track_views().begin(); j != _editor->get_track_views().end(); ++j) {
-                       if ((*j)->route_group() == group) {
-                               _editor->hide_track_in_display (*j);
-                       }
-               }
-       }
-
        PropertyList plist;
        bool val = (*iter)[_columns.gain];
        plist.add (Properties::gain, val);
@@ -404,7 +390,7 @@ EditorRouteGroups::add (RouteGroup* group)
                focus = true;
        }
 
-       group->PropertyChanged.connect (property_changed_connection, MISSING_INVALIDATOR, ui_bind (&EditorRouteGroups::property_changed, this, group, _1), gui_context());
+       group->PropertyChanged.connect (_property_changed_connections, MISSING_INVALIDATOR, ui_bind (&EditorRouteGroups::property_changed, this, group, _1), gui_context());
 
        if (focus) {
                TreeViewColumn* col = _display.get_column (0);
@@ -456,6 +442,16 @@ EditorRouteGroups::property_changed (RouteGroup* group, const PropertyChange& ch
        if (change.contains (Properties::name) || change.contains (Properties::active)) {
                _editor->_group_tabs->set_dirty ();
        }
+
+       for (TrackViewList::const_iterator i = _editor->get_track_views().begin(); i != _editor->get_track_views().end(); ++i) {
+               if ((*i)->route_group() == group) {
+                       if (group->is_hidden ()) {
+                               _editor->hide_track_in_display (*i);
+                       } else {
+                               _editor->_routes->show_track_in_display (**i);
+                       }
+               }
+       }
 }
 
 void
@@ -493,7 +489,7 @@ EditorRouteGroups::set_session (Session* s)
 
                RouteGroup& arg (_session->all_route_group());
                 
-               arg.PropertyChanged.connect (property_changed_connection, MISSING_INVALIDATOR, ui_bind (&EditorRouteGroups::all_group_changed, this, _1), gui_context());
+               arg.PropertyChanged.connect (all_route_groups_changed_connection, MISSING_INVALIDATOR, ui_bind (&EditorRouteGroups::all_group_changed, this, _1), gui_context());
 
                _session->route_group_added.connect (_session_connections, MISSING_INVALIDATOR, ui_bind (&EditorRouteGroups::add, this, _1), gui_context());
                _session->route_group_removed.connect (_session_connections, MISSING_INVALIDATOR, boost::bind (&EditorRouteGroups::groups_changed, this), gui_context());
index c5e4eda254e8d0e46b5490f9b0719d91e22cdab2..d881655467f4235897ce111199e2e09a38108011 100644 (file)
@@ -81,7 +81,8 @@ private:
        Gtk::VBox _display_packer;
         Gtk::ToggleButton _all_group_active_button;
        bool _in_row_change;
-       PBD::ScopedConnection property_changed_connection;
+       PBD::ScopedConnectionList _property_changed_connections;
+       PBD::ScopedConnection all_route_groups_changed_connection;
 };
 
 
index dc3aced9787d52bd0779f86ce34c97318a3e88bf..b7fa89cfe2007cd2da2da2b2f8bb6aafabab1c5e 100644 (file)
@@ -1188,6 +1188,16 @@ Mixer_UI::route_group_property_changed (RouteGroup* group, const PropertyChange&
        if (change.contains (Properties::name)) {
                _group_tabs->set_dirty ();
        }
+
+       for (list<MixerStrip*>::iterator j = strips.begin(); j != strips.end(); ++j) {
+               if ((*j)->route_group() == group) {
+                       if (group->is_hidden ()) {
+                               hide_strip (*j);
+                       } else {
+                               show_strip (*j);
+                       }
+               }
+       }
 }
 
 void
@@ -1221,26 +1231,17 @@ Mixer_UI::route_group_row_change (const Gtk::TreeModel::Path&, const Gtk::TreeMo
                return;
        }
 
-       if ((*iter)[group_columns.visible]) {
-               for (list<MixerStrip *>::iterator i = strips.begin(); i != strips.end(); ++i) {
-                       if ((*i)->route_group() == group) {
-                               show_strip (*i);
-                       }
-               }
-       } else {
-               for (list<MixerStrip *>::iterator i = strips.begin(); i != strips.end(); ++i) {
-                       if ((*i)->route_group() == group) {
-                               hide_strip (*i);
-                       }
-               }
-       }
-
        std::string name = (*iter)[group_columns.text];
 
        if (name != group->name()) {
                group->set_name (name);
        }
 
+       bool hidden = !(*iter)[group_columns.visible];
+
+       if (hidden != group->is_hidden ()) {
+               group->set_hidden (hidden, this);
+       }
 }
 
 void
@@ -1252,7 +1253,7 @@ Mixer_UI::add_route_group (RouteGroup* group)
        in_group_row_change = true;
 
        TreeModel::Row row = *(group_model->append());
-       row[group_columns.visible] = true;
+       row[group_columns.visible] = !group->is_hidden ();
        row[group_columns.group] = group;
        if (!group->name().empty()) {
                row[group_columns.text] = group->name();
index ce760563acef7b480ccd3eb85f60e77451b63e71..c64e5f77d14af6e1317fd504876f517c8ce687b4 100644 (file)
@@ -377,6 +377,7 @@ RouteGroup::set_hidden (bool yn, void* /*src*/)
        if (is_hidden() == yn) {
                return;
        }
+       
        if (yn) {
                _hidden = true;
                if (Config->get_hiding_groups_deactivates_groups()) {
@@ -388,6 +389,9 @@ RouteGroup::set_hidden (bool yn, void* /*src*/)
                        _active = true;
                }
        }
+
+       PropertyChanged (Properties::hidden); /* EMIT SIGNAL */
+       
        _session.set_dirty ();
 }