add/remove edit groups via buttons (still a bit of work left to do)

git-svn-id: svn://localhost/trunk/ardour2@364 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
Paul Davis
2006-03-08 23:26:28 +00:00
parent b4c1744333
commit 06ee54887d
9 changed files with 137 additions and 25 deletions

View File

@@ -127,9 +127,11 @@ class Route : public IO
bool phase_invert() const { return _phase_invert; }
void set_edit_group (RouteGroup *, void *);
void drop_edit_group (void *);
RouteGroup *edit_group () { return _edit_group; }
void set_mix_group (RouteGroup *, void *);
void drop_mix_group (void *);
RouteGroup *mix_group () { return _mix_group; }
virtual void set_meter_point (MeterPoint, void *src);

View File

@@ -69,9 +69,15 @@ class RouteGroup : public Stateful, public sigc::trackable {
int remove (Route *);
void apply (void (Route::*func)(void *), void *src) {
for (list<Route *>::iterator i = routes.begin(); i != routes.end(); i++) {
((*i)->*func)(src);
}
}
template<class T> void apply (void (Route::*func)(T, void *), T val, void *src) {
for (list<Route *>::iterator i = routes.begin(); i != routes.end(); i++) {
((*i)->*func)(val, this);
((*i)->*func)(val, src);
}
}

View File

@@ -505,11 +505,16 @@ class Session : public sigc::trackable, public Stateful
RouteGroup* add_edit_group (string);
RouteGroup* add_mix_group (string);
void remove_edit_group (RouteGroup&);
void remove_mix_group (RouteGroup&);
RouteGroup *mix_group_by_name (string);
RouteGroup *edit_group_by_name (string);
sigc::signal<void,RouteGroup*> edit_group_added;
sigc::signal<void,RouteGroup*> mix_group_added;
sigc::signal<void> edit_group_removed;
sigc::signal<void> mix_group_removed;
void foreach_edit_group (sigc::slot<void,RouteGroup*> sl) {
for (list<RouteGroup *>::iterator i = edit_groups.begin(); i != edit_groups.end(); i++) {

View File

@@ -1833,16 +1833,27 @@ void
Route::set_edit_group (RouteGroup *eg, void *src)
{
if (eg == _edit_group) {
return;
}
if (_edit_group) {
_edit_group->remove (this);
}
if ((_edit_group = eg)) {
if ((_edit_group = eg) != 0) {
_edit_group->add (this);
}
_session.set_dirty ();
edit_group_changed (src); /* EMIT SIGNAL */
}
void
Route::drop_edit_group (void *src)
{
_edit_group = 0;
_session.set_dirty ();
edit_group_changed (src); /* EMIT SIGNAL */
}
@@ -1850,16 +1861,27 @@ void
Route::set_mix_group (RouteGroup *mg, void *src)
{
if (mg == _mix_group) {
return;
}
if (_mix_group) {
_mix_group->remove (this);
}
if ((_mix_group = mg)) {
if ((_mix_group = mg) != 0) {
_mix_group->add (this);
}
_session.set_dirty ();
mix_group_changed (src); /* EMIT SIGNAL */
}
void
Route::drop_mix_group (void *src)
{
_mix_group = 0;
_session.set_dirty ();
mix_group_changed (src); /* EMIT SIGNAL */
}

View File

@@ -2415,6 +2415,34 @@ Session::add_mix_group (string name)
return rg;
}
void
Session::remove_edit_group (RouteGroup& rg)
{
list<RouteGroup*>::iterator i;
if ((i = find (edit_groups.begin(), edit_groups.end(), &rg)) != edit_groups.end()) {
(*i)->apply (&Route::drop_edit_group, this);
edit_groups.erase (i);
edit_group_removed (); /* EMIT SIGNAL */
}
delete &rg;
}
void
Session::remove_mix_group (RouteGroup& rg)
{
list<RouteGroup*>::iterator i;
if ((i = find (mix_groups.begin(), mix_groups.end(), &rg)) != mix_groups.end()) {
(*i)->apply (&Route::drop_mix_group, this);
mix_groups.erase (i);
mix_group_removed (); /* EMIT SIGNAL */
}
delete &rg;
}
RouteGroup *
Session::mix_group_by_name (string name)
{