new mix group interface, not yet finished and still to propagate to edit_group

git-svn-id: svn://localhost/trunk/ardour2@366 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
Paul Davis
2006-03-09 23:44:39 +00:00
parent 1511423e4e
commit 8ca43d57fe
12 changed files with 447 additions and 196 deletions

View File

@@ -36,6 +36,7 @@ namespace ARDOUR {
class Route;
class AudioTrack;
class Session;
class RouteGroup : public Stateful, public sigc::trackable {
public:
@@ -45,18 +46,19 @@ class RouteGroup : public Stateful, public sigc::trackable {
Hidden = 0x4,
};
RouteGroup(const string &n, Flag f = Flag(0)) : _name (n), _flags (f) {}
RouteGroup (Session& s, const string &n, Flag f = Flag(0));
const string& name() { return _name; }
void set_name (std::string str);
bool is_active () const { return _flags & Active; }
bool is_relative () const { return _flags & Relative; }
bool is_hidden () const { return _flags & Hidden; }
bool empty() const {return routes.empty();}
gain_t get_max_factor(gain_t factor);
gain_t get_min_factor(gain_t factor);
gain_t get_max_factor(gain_t factor);
gain_t get_min_factor(gain_t factor);
int size() { return routes.size();}
ARDOUR::Route * first () const { return *routes.begin();}
@@ -64,7 +66,6 @@ class RouteGroup : public Stateful, public sigc::trackable {
void set_relative (bool yn, void *src);
void set_hidden (bool yn, void *src);
int add (Route *);
int remove (Route *);
@@ -110,6 +111,7 @@ class RouteGroup : public Stateful, public sigc::trackable {
int set_state (const XMLNode&);
private:
Session& _session;
list<Route *> routes;
string _name;
uint32_t _flags;

View File

@@ -34,13 +34,28 @@
using namespace ARDOUR;
using namespace sigc;
using namespace std;
RouteGroup::RouteGroup (Session& s, const string &n, Flag f)
: _session (s), _name (n), _flags (f)
{
}
void
RouteGroup::set_name (string str)
{
_name = str;
_session.set_dirty ();
FlagsChanged (0); /* EMIT SIGNAL */
}
int
RouteGroup::add (Route *r)
{
routes.push_back (r);
r->GoingAway.connect (sigc::bind (mem_fun (*this, &RouteGroup::remove_when_going_away), r));
changed (); /* EMIT SIGNAL */
_session.set_dirty ();
changed (); /* EMIT SIGNAL */
return 0;
}
@@ -57,7 +72,8 @@ RouteGroup::remove (Route *r)
if ((i = find (routes.begin(), routes.end(), r)) != routes.end()) {
routes.erase (i);
changed (); /* EMIT SIGNAL */
_session.set_dirty ();
changed (); /* EMIT SIGNAL */
return 0;
}
return -1;
@@ -145,7 +161,8 @@ RouteGroup::set_active (bool yn, void *src)
} else {
_flags &= ~Active;
}
FlagsChanged (src); /* EMIT SIGNAL */
_session.set_dirty ();
FlagsChanged (src); /* EMIT SIGNAL */
}
void
@@ -160,7 +177,8 @@ RouteGroup::set_relative (bool yn, void *src)
} else {
_flags &= ~Relative;
}
FlagsChanged (src); /* EMIT SIGNAL */
_session.set_dirty ();
FlagsChanged (src); /* EMIT SIGNAL */
}
void
@@ -181,7 +199,8 @@ RouteGroup::set_hidden (bool yn, void *src)
_flags |= Active;
}
}
FlagsChanged (src); /* EMIT SIGNAL */
_session.set_dirty ();
FlagsChanged (src); /* EMIT SIGNAL */
}
void

View File

@@ -2398,7 +2398,7 @@ Session::auto_save()
RouteGroup *
Session::add_edit_group (string name)
{
RouteGroup* rg = new RouteGroup (name);
RouteGroup* rg = new RouteGroup (*this, name);
edit_groups.push_back (rg);
edit_group_added (rg); /* EMIT SIGNAL */
set_dirty();
@@ -2408,7 +2408,7 @@ Session::add_edit_group (string name)
RouteGroup *
Session::add_mix_group (string name)
{
RouteGroup* rg = new RouteGroup (name, RouteGroup::Relative);
RouteGroup* rg = new RouteGroup (*this, name, RouteGroup::Relative);
mix_groups.push_back (rg);
mix_group_added (rg); /* EMIT SIGNAL */
set_dirty();