Fix up route group state signal handling. Make the PropertyList version
authorCarl Hetherington <carl@carlh.net>
Fri, 2 Apr 2010 00:21:08 +0000 (00:21 +0000)
committerCarl Hetherington <carl@carlh.net>
Fri, 2 Apr 2010 00:21:08 +0000 (00:21 +0000)
of Stateful::set_properties emit a changed signal after it has done its work.

git-svn-id: svn://localhost/ardour2/branches/3.0@6826 d708f5d6-7413-0410-9779-e7cbd77b26cf

gtk2_ardour/editor_group_tabs.cc
gtk2_ardour/editor_route_groups.cc
gtk2_ardour/editor_route_groups.h
gtk2_ardour/mixer_ui.cc
gtk2_ardour/mixer_ui.h
gtk2_ardour/route_group_dialog.cc
libs/ardour/ardour/route_group.h
libs/ardour/route_group.cc
libs/pbd/stateful.cc
libs/pbd/stateful_diff_command.cc

index 8e7e30339970731244cb34ecf1df924c27e78286..04f61aaeef42d6447dd8ec922d26883c335bf47a 100644 (file)
@@ -152,7 +152,7 @@ EditorGroupTabs::get_menu (RouteGroup *g)
        return _editor->_route_groups->menu (g);
 }
 
-ARDOUR::RouteGroup *
+RouteGroup *
 EditorGroupTabs::new_route_group () const
 {
        return _editor->_route_groups->new_route_group ();
index 6c1442356d54daa007baa78ce25963e6b371d9f9..1c7304fa60fb8c121ff71a844bf2b8fc20b3db9b 100644 (file)
@@ -586,7 +586,7 @@ EditorRouteGroups::add (RouteGroup* group)
                focus = true;
        }
 
-       group->FlagsChanged.connect (flags_connection, MISSING_INVALIDATOR, ui_bind (&EditorRouteGroups::flags_changed, this, _1, group), gui_context());
+       group->PropertyChanged.connect (property_changed_connection, MISSING_INVALIDATOR, ui_bind (&EditorRouteGroups::property_changed, this, group, _1), gui_context());
 
        if (focus) {
                TreeViewColumn* col = _display.get_column (0);
@@ -622,10 +622,8 @@ EditorRouteGroups::groups_changed ()
 }
 
 void
-EditorRouteGroups::flags_changed (void*, RouteGroup* group)
+EditorRouteGroups::property_changed (RouteGroup* group, const PropertyChange& change)
 {
-        ENSURE_GUI_THREAD (*this, &EditorRouteGroups::flags_changed, src, group)
-
        _in_row_change = true;
 
         Gtk::TreeModel::Children children = _model->children();
@@ -645,7 +643,9 @@ EditorRouteGroups::flags_changed (void*, RouteGroup* group)
 
        _in_row_change = false;
 
-       _editor->_group_tabs->set_dirty ();
+       if (change.contains (Properties::name) || change.contains (Properties::active)) {
+               _editor->_group_tabs->set_dirty ();
+       }
 }
 
 void
index cb0162d142070d50982caf5f554123741cf68832..bbc238e3af2c778c36d468392244cfb8031b2f59 100644 (file)
@@ -81,7 +81,7 @@ private:
        void add (ARDOUR::RouteGroup* group);
        void remove_route_group ();
        void groups_changed ();
-       void flags_changed (void*, ARDOUR::RouteGroup*);
+       void property_changed (ARDOUR::RouteGroup*, const PBD::PropertyChange &);
        void set_activation (ARDOUR::RouteGroup *, bool);
        void remove_selected ();
        void run_new_group_dialog (const ARDOUR::RouteList&);
@@ -93,7 +93,7 @@ private:
        Gtk::ScrolledWindow _scroller;
        Gtk::VBox* _display_packer;
        bool _in_row_change;
-       PBD::ScopedConnection flags_connection;
+       PBD::ScopedConnection property_changed_connection;
 };
 
 
index 618d1bbe36b75a6caa0dc69a2457547e8e22e581..c1dc4aff9f00e3fad1fc7ed68a50bdbbc6596461 100644 (file)
@@ -1204,14 +1204,12 @@ Mixer_UI::remove_selected_route_group ()
 }
 
 void
-Mixer_UI::group_flags_changed (void* src, RouteGroup* group)
+Mixer_UI::route_group_property_changed (RouteGroup* group, const PropertyChange& change)
 {
        if (in_group_row_change) {
                return;
        }
 
-       ENSURE_GUI_THREAD (*this, &Mixer_UI::group_flags_changed, src, group)
-
        /* force an update of any mixer strips that are using this group,
           otherwise mix group names don't change in mixer strips
        */
@@ -1238,7 +1236,9 @@ Mixer_UI::group_flags_changed (void* src, RouteGroup* group)
 
        in_group_row_change = false;
 
-       _group_tabs->set_dirty ();
+       if (change.contains (Properties::name)) {
+               _group_tabs->set_dirty ();
+       }
 }
 
 void
@@ -1312,7 +1312,7 @@ Mixer_UI::add_route_group (RouteGroup* group)
                focus = true;
        }
 
-       group->FlagsChanged.connect (*this, invalidator (*this), ui_bind (&Mixer_UI::group_flags_changed, this, _1, group), gui_context());
+       group->PropertyChanged.connect (*this, invalidator (*this), ui_bind (&Mixer_UI::route_group_property_changed, this, group, _1), gui_context());
 
        if (focus) {
                TreeViewColumn* col = group_display.get_column (0);
index c8d3bacae00fce801ca0a0febe0f649c78e024a5..ba72ba2cba7b31cab15ab81c5b94b2349bf26baf 100644 (file)
@@ -200,8 +200,7 @@ class Mixer_UI : public Gtk::Window, public PBD::ScopedConnectionList, public AR
        PluginSelector    *_plugin_selector;
 
        void strip_property_changed (const PBD::PropertyChange&, MixerStrip *);
-
-       void group_flags_changed (void *src, ARDOUR::RouteGroup *);
+       void route_group_property_changed (ARDOUR::RouteGroup *, const PBD::PropertyChange &);
 
        /* various treeviews */
 
index 7b802ac6ecdc0f63c5656a367ad6dcf620ab0333..8dd204ea936a0f6e40354483ce71118a0a36392d 100644 (file)
@@ -141,7 +141,7 @@ RouteGroupDialog::do_run ()
                plist.add (Properties::relative, _relative.get_active());
                plist.add (Properties::active, _active.get_active());
                plist.add (Properties::name, string (_name.get_text()));
-               
+
                _group->set_properties (plist);
        }
 
index 7f3d25454acba1a08ad05bc00f6f8a13266cff40..c7616a746e6784b8e9c7106d785109c13bd0434d 100644 (file)
@@ -128,8 +128,8 @@ class RouteGroup : public SessionObject
 
        boost::shared_ptr<RouteList> route_list() { return routes; }
 
-       PBD::Signal0<void> changed;
-       PBD::Signal1<void,void*> FlagsChanged;
+       /** Emitted when a route has been added to or removed from this group */
+       PBD::Signal0<void> MembershipChanged;
 
        XMLNode& get_state ();
        
index 3e9ffe16d68c3803bf534979c384fe801ef6c9bd..f0a91257705a371100e3a5ecb2efe5e870db307c 100644 (file)
@@ -92,7 +92,7 @@ RouteGroup::RouteGroup (Session& s, const string &n)
        , routes (new RouteList)
        , ROUTE_GROUP_DEFAULT_PROPERTIES
 {
-       _xml_node_name = X_("RegionGroup");
+       _xml_node_name = X_("RouteGroup");
 
        add_property (_relative);
        add_property (_active);
@@ -135,7 +135,7 @@ RouteGroup::add (boost::shared_ptr<Route> r)
        r->DropReferences.connect_same_thread (*this, boost::bind (&RouteGroup::remove_when_going_away, this, boost::weak_ptr<Route> (r)));
        
        _session.set_dirty ();
-       changed (); /* EMIT SIGNAL */
+       MembershipChanged (); /* EMIT SIGNAL */
        return 0;
 }
 
@@ -158,7 +158,7 @@ RouteGroup::remove (boost::shared_ptr<Route> r)
                r->leave_route_group ();
                routes->erase (i);
                _session.set_dirty ();
-               changed (); /* EMIT SIGNAL */
+               MembershipChanged (); /* EMIT SIGNAL */
                return 0;
        }
 
@@ -339,7 +339,6 @@ RouteGroup::set_active (bool yn, void *src)
        }
        _active = yn;
        _session.set_dirty ();
-       FlagsChanged (src); /* EMIT SIGNAL */
 }
 
 void
@@ -351,7 +350,6 @@ RouteGroup::set_relative (bool yn, void *src)
        }
        _relative = yn;
        _session.set_dirty ();
-       FlagsChanged (src); /* EMIT SIGNAL */
 }
 
 void
@@ -372,7 +370,6 @@ RouteGroup::set_hidden (bool yn, void *src)
                }
        }
        _session.set_dirty ();
-       FlagsChanged (src); /* EMIT SIGNAL */
 }
 
 void
@@ -442,25 +439,10 @@ RouteGroup::destroy_subgroup ()
 bool
 RouteGroup::enabled_property (PBD::PropertyID prop)
 {
-       if (Properties::relative.property_id == prop) {
-               return is_relative();
-       } else if (Properties::active.property_id == prop) {
-               return is_active();
-       } else if (Properties::hidden.property_id == prop) {
-               return is_hidden();
-       } else if (Properties::gain.property_id == prop) {
-               return is_gain();
-       } else if (Properties::mute.property_id == prop) {
-               return is_mute();
-       } else if (Properties::solo.property_id == prop) {
-               return is_solo();
-       } else if (Properties::recenable.property_id == prop) {
-               return is_recenable();
-       } else if (Properties::select.property_id == prop) {
-               return is_select();
-       } else if (Properties::edit.property_id == prop) {
-               return is_edit();
+       OwnedPropertyList::iterator i = _properties->find (prop);
+       if (i == _properties->end()) {
+               return false;
        }
 
-       return false;
+       return dynamic_cast<const PropertyTemplate<bool>* > (i->second)->val ();
 }
index 79936c691f7edfcb01e2cd141f49d6b68277a6ea..b486319c4cff9c0d4a31a3db7bd272dd9a3ea52a 100644 (file)
@@ -220,6 +220,8 @@ Stateful::set_properties (const PropertyList& property_list)
        
        post_set ();
 
+       send_change (c);
+
        return c;
 }
 
index 0468ac3e8a21f47344ed6acfa4405ea59e896d08..635fe4829ab0f5e9d3f9abecb1ef90c62c8c39a1 100644 (file)
@@ -71,10 +71,7 @@ StatefulDiffCommand::operator() ()
        boost::shared_ptr<Stateful> s (_object.lock());
 
        if (s) {
-                PropertyChange changed = s->set_properties (*_redo);
-                if (!changed.empty()) {
-                        s->PropertyChanged (changed);
-                }
+                s->set_properties (*_redo);
        }
 }
 
@@ -85,11 +82,7 @@ StatefulDiffCommand::undo ()
 
        if (s) {
                 std::cerr << "Undoing a stateful diff command\n";
-                PropertyChange changed = s->set_properties (*_undo);
-                if (!changed.empty()) {
-                        std::cerr << "Sending changed\n";
-                        s->PropertyChanged (changed);
-                }
+                s->set_properties (*_undo);
        }
 }