Add Lua bindings to manage Groups
authorRobin Gareus <robin@gareus.org>
Mon, 5 Dec 2016 20:53:41 +0000 (21:53 +0100)
committerRobin Gareus <robin@gareus.org>
Mon, 5 Dec 2016 22:49:19 +0000 (23:49 +0100)
libs/ardour/ardour/session.h
libs/ardour/luabindings.cc
libs/ardour/session_state.cc

index b2409e3da669f0e0969a40c4f96ba707e82c4bad..924c7c86bb477c1b62769548742686a281b65277 100644 (file)
@@ -617,7 +617,9 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop
                        bool _reconfigure_on_delete;
        };
 
+       RouteGroup* new_route_group (const std::string&);
        void add_route_group (RouteGroup *);
+       void remove_route_group (RouteGroup* rg) { if (rg) remove_route_group (*rg); }
        void remove_route_group (RouteGroup&);
        void reorder_route_groups (std::list<RouteGroup*>);
 
index f7fdcf40852c1edd896e42ea0f593d0f78bd09d9..42184e3473e39f27a38caaaa558361801a3044c3 100644 (file)
@@ -825,7 +825,38 @@ LuaBindings::common (lua_State* L)
                .endClass ()
 
                .beginClass <RouteGroup> ("RouteGroup")
-               // stub RouteGroup* is needed for new_audio_track()
+               .addFunction ("is_active", &RouteGroup::is_active)
+               .addFunction ("is_relative", &RouteGroup::is_relative)
+               .addFunction ("is_hidden", &RouteGroup::is_hidden)
+               .addFunction ("is_gain", &RouteGroup::is_gain)
+               .addFunction ("is_mute", &RouteGroup::is_mute)
+               .addFunction ("is_solo", &RouteGroup::is_solo)
+               .addFunction ("is_recenable", &RouteGroup::is_recenable)
+               .addFunction ("is_select", &RouteGroup::is_select)
+               .addFunction ("is_route_active", &RouteGroup::is_route_active)
+               .addFunction ("is_color", &RouteGroup::is_color)
+               .addFunction ("is_monitoring", &RouteGroup::is_monitoring)
+               .addFunction ("group_master_number", &RouteGroup::group_master_number)
+               .addFunction ("empty", &RouteGroup::empty)
+               .addFunction ("size", &RouteGroup::size)
+               .addFunction ("set_active", &RouteGroup::set_active)
+               .addFunction ("set_relative", &RouteGroup::set_relative)
+               .addFunction ("set_hidden", &RouteGroup::set_hidden)
+               .addFunction ("set_gain", &RouteGroup::set_gain)
+               .addFunction ("set_mute", &RouteGroup::set_mute)
+               .addFunction ("set_solo", &RouteGroup::set_solo)
+               .addFunction ("set_recenable", &RouteGroup::set_recenable)
+               .addFunction ("set_select", &RouteGroup::set_select)
+               .addFunction ("set_route_active", &RouteGroup::set_route_active)
+               .addFunction ("set_color", &RouteGroup::set_color)
+               .addFunction ("set_monitoring", &RouteGroup::set_monitoring)
+               .addFunction ("add", &RouteGroup::add)
+               .addFunction ("remove", &RouteGroup::remove)
+               .addFunction ("clear", &RouteGroup::clear)
+               .addFunction ("has_subgroup", &RouteGroup::has_subgroup)
+               .addFunction ("make_subgroup", &RouteGroup::make_subgroup)
+               .addFunction ("destroy_subgroup", &RouteGroup::destroy_subgroup)
+               .addFunction ("route_list", &RouteGroup::route_list)
                .endClass ()
 
                .deriveClass <PresentationInfo, PBD::Stateful> ("PresentationInfo")
@@ -1342,6 +1373,10 @@ LuaBindings::common (lua_State* L)
                .beginConstStdList <boost::weak_ptr<Route> > ("WeakRouteList")
                .endClass ()
 
+               // RouteList == std::list<boost::shared_ptr<Route> >
+               .beginConstStdList <RouteGroup*> ("RouteGroupList")
+               .endClass ()
+
                // typedef std::vector<boost::shared_ptr<Source> > Region::SourceList
                .beginStdVector <boost::shared_ptr<Source> > ("SourceList")
                .endClass ()
@@ -1523,6 +1558,11 @@ LuaBindings::common (lua_State* L)
                .addConst ("MeterCustom", ARDOUR::MeterPoint(MeterCustom))
                .endNamespace ()
 
+               .beginNamespace ("Placement")
+               .addConst ("PreFader", ARDOUR::Placement(PreFader))
+               .addConst ("PostFader", ARDOUR::Placement(PostFader))
+               .endNamespace ()
+
                .beginNamespace ("NoteMode")
                .addConst ("Sustained", ARDOUR::NoteMode(Sustained))
                .addConst ("Percussive", ARDOUR::NoteMode(Percussive))
@@ -1758,6 +1798,9 @@ LuaBindings::common (lua_State* L)
                .addFunction ("worst_track_latency", &Session::worst_track_latency)
                .addFunction ("worst_playback_latency", &Session::worst_playback_latency)
                .addFunction ("cfg", &Session::cfg)
+               .addFunction ("route_groups", &Session::route_groups)
+               .addFunction ("new_route_group", &Session::new_route_group)
+               .addFunction ("remove_route_group", (void (Session::*)(RouteGroup*))&Session::remove_route_group)
                .endClass ()
 
                .beginClass <RegionFactory> ("RegionFactory")
index fbfefaec7e2ecfcb154ce571f5867c901bb5d1fd..f82212345d707aa11a7b43fd9be58f6d48ef771a 100644 (file)
@@ -2618,6 +2618,25 @@ Session::possible_states () const
        return possible_states(_path);
 }
 
+RouteGroup*
+Session::new_route_group (const std::string& name)
+{
+       RouteGroup* rg = NULL;
+
+       for (std::list<RouteGroup*>::const_iterator i = _route_groups.begin (); i != _route_groups.end (); ++i) {
+               if ((*i)->name () == name) {
+                       rg = *i;
+                       break;
+               }
+       }
+
+       if (!rg) {
+               rg = new RouteGroup (*this, name);
+               add_route_group (rg);
+       }
+       return (rg);
+}
+
 void
 Session::add_route_group (RouteGroup* g)
 {