mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-16 19:56:31 +01:00
Update route colours when they are added to / removed
from groups which share colour (more of #4064). git-svn-id: svn://localhost/ardour2/branches/3.0@10060 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
parent
174c0d6831
commit
932b0e9ec1
9 changed files with 112 additions and 19 deletions
|
|
@ -56,7 +56,16 @@ GroupTabs::set_session (Session* s)
|
||||||
SessionHandlePtr::set_session (s);
|
SessionHandlePtr::set_session (s);
|
||||||
|
|
||||||
if (_session) {
|
if (_session) {
|
||||||
_session->RouteGroupChanged.connect (_session_connections, invalidator (*this), boost::bind (&GroupTabs::set_dirty, this), gui_context());
|
_session->RouteGroupPropertyChanged.connect (
|
||||||
|
_session_connections, invalidator (*this), boost::bind (&GroupTabs::route_group_property_changed, this, _1), gui_context()
|
||||||
|
);
|
||||||
|
_session->RouteAddedToRouteGroup.connect (
|
||||||
|
_session_connections, invalidator (*this), boost::bind (&GroupTabs::route_added_to_route_group, this, _1, _2), gui_context()
|
||||||
|
);
|
||||||
|
_session->RouteRemovedFromRouteGroup.connect (
|
||||||
|
_session_connections, invalidator (*this), boost::bind (&GroupTabs::route_removed_from_route_group, this, _1, _2), gui_context()
|
||||||
|
);
|
||||||
|
|
||||||
_session->route_group_removed.connect (_session_connections, invalidator (*this), boost::bind (&GroupTabs::set_dirty, this), gui_context());
|
_session->route_group_removed.connect (_session_connections, invalidator (*this), boost::bind (&GroupTabs::set_dirty, this), gui_context());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -528,9 +537,7 @@ GroupTabs::set_group_color (RouteGroup* group, Gdk::Color color)
|
||||||
for our routes.
|
for our routes.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
for (RouteList::iterator i = group->route_list()->begin(); i != group->route_list()->end(); ++i) {
|
emit_gui_changed_for_members (group);
|
||||||
(*i)->gui_changed (X_("color"), 0);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @return the ID string to use for the GUI state of a route group */
|
/** @return the ID string to use for the GUI state of a route group */
|
||||||
|
|
@ -577,3 +584,49 @@ GroupTabs::group_color (RouteGroup* group)
|
||||||
return c;
|
return c;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
GroupTabs::route_group_property_changed (RouteGroup* rg)
|
||||||
|
{
|
||||||
|
/* This is a bit of a hack, but this might change
|
||||||
|
our route's effective color, so emit gui_changed
|
||||||
|
for our routes.
|
||||||
|
*/
|
||||||
|
|
||||||
|
emit_gui_changed_for_members (rg);
|
||||||
|
|
||||||
|
set_dirty ();
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
GroupTabs::route_added_to_route_group (RouteGroup* rg, boost::weak_ptr<Route> w)
|
||||||
|
{
|
||||||
|
/* Similarly-spirited hack as in route_group_property_changed */
|
||||||
|
|
||||||
|
boost::shared_ptr<Route> r = w.lock ();
|
||||||
|
if (!r) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
r->gui_changed (X_("color"), 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
GroupTabs::route_removed_from_route_group (RouteGroup* rg, boost::weak_ptr<Route> w)
|
||||||
|
{
|
||||||
|
/* Similarly-spirited hack as in route_group_property_changed */
|
||||||
|
|
||||||
|
boost::shared_ptr<Route> r = w.lock ();
|
||||||
|
if (!r) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
r->gui_changed (X_("color"), 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
GroupTabs::emit_gui_changed_for_members (RouteGroup* rg)
|
||||||
|
{
|
||||||
|
for (RouteList::iterator i = rg->route_list()->begin(); i != rg->route_list()->end(); ++i) {
|
||||||
|
(*i)->gui_changed (X_("color"), 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -30,6 +30,10 @@ class Editor;
|
||||||
|
|
||||||
/** Parent class for tabs which represent route groups as colored tabs;
|
/** Parent class for tabs which represent route groups as colored tabs;
|
||||||
* Currently used on the left-hand side of the editor and at the top of the mixer.
|
* Currently used on the left-hand side of the editor and at the top of the mixer.
|
||||||
|
*
|
||||||
|
* This class also contains a fair bit of code to handle changes to route
|
||||||
|
* group colours; it seems a bit out of place, but I could not really think
|
||||||
|
* of a better place to put it.
|
||||||
*/
|
*/
|
||||||
class GroupTabs : public CairoWidget, public ARDOUR::SessionHandlePtr
|
class GroupTabs : public CairoWidget, public ARDOUR::SessionHandlePtr
|
||||||
{
|
{
|
||||||
|
|
@ -62,6 +66,8 @@ protected:
|
||||||
};
|
};
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
static void emit_gui_changed_for_members (ARDOUR::RouteGroup *);
|
||||||
|
|
||||||
/** Compute all the tabs for this widget.
|
/** Compute all the tabs for this widget.
|
||||||
* @return Tabs.
|
* @return Tabs.
|
||||||
*/
|
*/
|
||||||
|
|
@ -110,6 +116,10 @@ private:
|
||||||
|
|
||||||
Tab * click_to_tab (double, std::list<Tab>::iterator *, std::list<Tab>::iterator *);
|
Tab * click_to_tab (double, std::list<Tab>::iterator *, std::list<Tab>::iterator *);
|
||||||
|
|
||||||
|
void route_group_property_changed (ARDOUR::RouteGroup *);
|
||||||
|
void route_added_to_route_group (ARDOUR::RouteGroup *, boost::weak_ptr<ARDOUR::Route>);
|
||||||
|
void route_removed_from_route_group (ARDOUR::RouteGroup *, boost::weak_ptr<ARDOUR::Route>);
|
||||||
|
|
||||||
Gtk::Menu* _menu;
|
Gtk::Menu* _menu;
|
||||||
std::list<Tab> _tabs; ///< current list of tabs
|
std::list<Tab> _tabs; ///< current list of tabs
|
||||||
Tab* _dragging; ///< tab being dragged, or 0
|
Tab* _dragging; ///< tab being dragged, or 0
|
||||||
|
|
|
||||||
|
|
@ -123,8 +123,10 @@ class RouteGroup : public SessionObject
|
||||||
|
|
||||||
boost::shared_ptr<RouteList> route_list() { return routes; }
|
boost::shared_ptr<RouteList> route_list() { return routes; }
|
||||||
|
|
||||||
/** Emitted when a route has been added to or removed from this group */
|
/** Emitted when a route has been added to this group */
|
||||||
PBD::Signal0<void> MembershipChanged;
|
PBD::Signal2<void, RouteGroup *, boost::weak_ptr<ARDOUR::Route> > RouteAdded;
|
||||||
|
/** Emitted when a route has been removed from this group */
|
||||||
|
PBD::Signal2<void, RouteGroup *, boost::weak_ptr<ARDOUR::Route> > RouteRemoved;
|
||||||
|
|
||||||
XMLNode& get_state ();
|
XMLNode& get_state ();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -34,7 +34,7 @@ class RouteGroupMember
|
||||||
RouteGroup* route_group () const { return _route_group; }
|
RouteGroup* route_group () const { return _route_group; }
|
||||||
|
|
||||||
/** Emitted when this member joins or leaves a route group */
|
/** Emitted when this member joins or leaves a route group */
|
||||||
PBD::Signal0<void> route_group_changed;
|
PBD::Signal1<void, RouteGroup *> route_group_changed;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
RouteGroup* _route_group;
|
RouteGroup* _route_group;
|
||||||
|
|
|
||||||
|
|
@ -289,8 +289,18 @@ class Session : public PBD::StatefulDestructible, public PBD::ScopedConnectionLi
|
||||||
PBD::Signal0<void> Located;
|
PBD::Signal0<void> Located;
|
||||||
|
|
||||||
PBD::Signal1<void,RouteList&> RouteAdded;
|
PBD::Signal1<void,RouteList&> RouteAdded;
|
||||||
/** Emitted when anything about any of our route groups changes */
|
/** Emitted when a property of one of our route groups changes.
|
||||||
PBD::Signal0<void> RouteGroupChanged;
|
* The parameter is the RouteGroup that has changed.
|
||||||
|
*/
|
||||||
|
PBD::Signal1<void, RouteGroup *> RouteGroupPropertyChanged;
|
||||||
|
/** Emitted when a route is added to one of our route groups.
|
||||||
|
* First parameter is the RouteGroup, second is the route.
|
||||||
|
*/
|
||||||
|
PBD::Signal2<void, RouteGroup *, boost::weak_ptr<Route> > RouteAddedToRouteGroup;
|
||||||
|
/** Emitted when a route is removed from one of our route groups.
|
||||||
|
* First parameter is the RouteGroup, second is the route.
|
||||||
|
*/
|
||||||
|
PBD::Signal2<void, RouteGroup *, boost::weak_ptr<Route> > RouteRemovedFromRouteGroup;
|
||||||
|
|
||||||
/* Step Editing status changed */
|
/* Step Editing status changed */
|
||||||
PBD::Signal1<void,bool> StepEditStatusChange;
|
PBD::Signal1<void,bool> StepEditStatusChange;
|
||||||
|
|
@ -1234,7 +1244,9 @@ class Session : public PBD::StatefulDestructible, public PBD::ScopedConnectionLi
|
||||||
int load_regions (const XMLNode& node);
|
int load_regions (const XMLNode& node);
|
||||||
int load_compounds (const XMLNode& node);
|
int load_compounds (const XMLNode& node);
|
||||||
|
|
||||||
void route_group_changed ();
|
void route_added_to_route_group (RouteGroup *, boost::weak_ptr<Route>);
|
||||||
|
void route_removed_from_route_group (RouteGroup *, boost::weak_ptr<Route>);
|
||||||
|
void route_group_property_changed (RouteGroup *);
|
||||||
|
|
||||||
/* SOURCES */
|
/* SOURCES */
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -144,7 +144,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)));
|
r->DropReferences.connect_same_thread (*this, boost::bind (&RouteGroup::remove_when_going_away, this, boost::weak_ptr<Route> (r)));
|
||||||
|
|
||||||
_session.set_dirty ();
|
_session.set_dirty ();
|
||||||
MembershipChanged (); /* EMIT SIGNAL */
|
RouteAdded (this, boost::weak_ptr<Route> (r)); /* EMIT SIGNAL */
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -167,7 +167,7 @@ RouteGroup::remove (boost::shared_ptr<Route> r)
|
||||||
r->leave_route_group ();
|
r->leave_route_group ();
|
||||||
routes->erase (i);
|
routes->erase (i);
|
||||||
_session.set_dirty ();
|
_session.set_dirty ();
|
||||||
MembershipChanged (); /* EMIT SIGNAL */
|
RouteRemoved (this, boost::weak_ptr<Route> (r)); /* EMIT SIGNAL */
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -31,13 +31,14 @@ RouteGroupMember::join_route_group (RouteGroup *rg)
|
||||||
}
|
}
|
||||||
|
|
||||||
_route_group = rg;
|
_route_group = rg;
|
||||||
route_group_changed (); /* EMIT SIGNAL */
|
route_group_changed (rg); /* EMIT SIGNAL */
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
RouteGroupMember::leave_route_group ()
|
RouteGroupMember::leave_route_group ()
|
||||||
{
|
{
|
||||||
|
RouteGroup* rg = _route_group;
|
||||||
_route_group = 0;
|
_route_group = 0;
|
||||||
route_group_changed (); /* EMIT SIGNAL */
|
route_group_changed (rg); /* EMIT SIGNAL */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4033,11 +4033,25 @@ Session::solo_control_mode_changed ()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Called when anything about any of our route groups changes (membership, state etc.) */
|
/** Called when a property of one of our route groups changes */
|
||||||
void
|
void
|
||||||
Session::route_group_changed ()
|
Session::route_group_property_changed (RouteGroup* rg)
|
||||||
{
|
{
|
||||||
RouteGroupChanged (); /* EMIT SIGNAL */
|
RouteGroupPropertyChanged (rg); /* EMIT SIGNAL */
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Called when a route is added to one of our route groups */
|
||||||
|
void
|
||||||
|
Session::route_added_to_route_group (RouteGroup* rg, boost::weak_ptr<Route> r)
|
||||||
|
{
|
||||||
|
RouteAddedToRouteGroup (rg, r);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Called when a route is removed from one of our route groups */
|
||||||
|
void
|
||||||
|
Session::route_removed_from_route_group (RouteGroup* rg, boost::weak_ptr<Route> r)
|
||||||
|
{
|
||||||
|
RouteRemovedFromRouteGroup (rg, r);
|
||||||
}
|
}
|
||||||
|
|
||||||
vector<SyncSource>
|
vector<SyncSource>
|
||||||
|
|
|
||||||
|
|
@ -2388,8 +2388,9 @@ Session::add_route_group (RouteGroup* g)
|
||||||
_route_groups.push_back (g);
|
_route_groups.push_back (g);
|
||||||
route_group_added (g); /* EMIT SIGNAL */
|
route_group_added (g); /* EMIT SIGNAL */
|
||||||
|
|
||||||
g->MembershipChanged.connect_same_thread (*this, boost::bind (&Session::route_group_changed, this));
|
g->RouteAdded.connect_same_thread (*this, boost::bind (&Session::route_added_to_route_group, this, _1, _2));
|
||||||
g->PropertyChanged.connect_same_thread (*this, boost::bind (&Session::route_group_changed, this));
|
g->RouteRemoved.connect_same_thread (*this, boost::bind (&Session::route_removed_from_route_group, this, _1, _2));
|
||||||
|
g->PropertyChanged.connect_same_thread (*this, boost::bind (&Session::route_group_property_changed, this, g));
|
||||||
|
|
||||||
set_dirty ();
|
set_dirty ();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue