return _editor->_route_groups->menu (g);
}
-ARDOUR::RouteGroup *
+RouteGroup *
EditorGroupTabs::new_route_group () const
{
return _editor->_route_groups->new_route_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);
}
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();
_in_row_change = false;
- _editor->_group_tabs->set_dirty ();
+ if (change.contains (Properties::name) || change.contains (Properties::active)) {
+ _editor->_group_tabs->set_dirty ();
+ }
}
void
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&);
Gtk::ScrolledWindow _scroller;
Gtk::VBox* _display_packer;
bool _in_row_change;
- PBD::ScopedConnection flags_connection;
+ PBD::ScopedConnection property_changed_connection;
};
}
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
*/
in_group_row_change = false;
- _group_tabs->set_dirty ();
+ if (change.contains (Properties::name)) {
+ _group_tabs->set_dirty ();
+ }
}
void
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);
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 */
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);
}
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 ();
, routes (new RouteList)
, ROUTE_GROUP_DEFAULT_PROPERTIES
{
- _xml_node_name = X_("RegionGroup");
+ _xml_node_name = X_("RouteGroup");
add_property (_relative);
add_property (_active);
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;
}
r->leave_route_group ();
routes->erase (i);
_session.set_dirty ();
- changed (); /* EMIT SIGNAL */
+ MembershipChanged (); /* EMIT SIGNAL */
return 0;
}
}
_active = yn;
_session.set_dirty ();
- FlagsChanged (src); /* EMIT SIGNAL */
}
void
}
_relative = yn;
_session.set_dirty ();
- FlagsChanged (src); /* EMIT SIGNAL */
}
void
}
}
_session.set_dirty ();
- FlagsChanged (src); /* EMIT SIGNAL */
}
void
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 ();
}
post_set ();
+ send_change (c);
+
return c;
}
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);
}
}
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);
}
}