Fix up route group state signal handling. Make the PropertyList version
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
This commit is contained in:
parent
0fc44fc2f1
commit
b68256a8ff
|
@ -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 ();
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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 */
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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 ();
|
||||
|
||||
|
|
|
@ -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 ();
|
||||
}
|
||||
|
|
|
@ -220,6 +220,8 @@ Stateful::set_properties (const PropertyList& property_list)
|
|||
|
||||
post_set ();
|
||||
|
||||
send_change (c);
|
||||
|
||||
return c;
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user