fix invalid mapping detection
[ardour.git] / libs / ardour / luabindings.cc
index b202649229087a8112f66922181f399de276a800..8c5023cfd7a4676cbb68c946e269e849c7fec211 100644 (file)
@@ -29,6 +29,7 @@
 #include "ardour/chan_mapping.h"
 #include "ardour/dB.h"
 #include "ardour/dsp_filter.h"
+#include "ardour/lua_api.h"
 #include "ardour/luabindings.h"
 #include "ardour/meter.h"
 #include "ardour/midi_track.h"
@@ -71,38 +72,26 @@ LuaBindings::stddef (lua_State* L)
 {
        // std::list<std::string>
        luabridge::getGlobalNamespace (L)
-               .beginNamespace ("ARDOUR")
+               .beginNamespace ("C")
                .beginStdList <std::string> ("StringList")
                .endClass ()
-               .endNamespace ();
 
        // std::vector<std::string>
-       luabridge::getGlobalNamespace (L)
-               .beginNamespace ("ARDOUR")
                .beginStdVector <std::string> ("StringVector")
                .endClass ()
-               .endNamespace ();
 
        // register float array (float*)
-       luabridge::getGlobalNamespace (L)
-               .beginNamespace ("ARDOUR")
                .registerArray <float> ("FloatArray")
-               .endNamespace ();
 
        // register float array (int32_t*)
-       luabridge::getGlobalNamespace (L)
-               .beginNamespace ("ARDOUR")
                .registerArray <int32_t> ("IntArray")
-               .endNamespace ();
 
        // std::vector<std::string>
-       luabridge::getGlobalNamespace (L)
-               .beginNamespace ("ARDOUR")
                .beginStdVector <double> ("DoubleVector")
                .endClass ()
-               .endNamespace ();
 
        // TODO std::set
+               .endNamespace ();
 }
 
 void
@@ -115,11 +104,18 @@ LuaBindings::common (lua_State* L)
                .addFunction ("to_s", &PBD::ID::to_s) // TODO special case LUA __tostring ?
                .endClass ()
 
-               .beginWSPtrClass <PBD::Stateful> ("Stateful")
+               .beginClass <PBD::Stateful> ("Stateful")
+               .addFunction ("properties", &PBD::Stateful::properties)
+               .endClass ()
+
+               .deriveClass <PBD::StatefulDestructible, PBD::Stateful> ("StatefulDestructible")
+               .endClass ()
+
+               .beginWSPtrClass <PBD::Stateful> ("StatefulPtr")
                .addFunction ("properties", &PBD::Stateful::properties)
                .endClass ()
 
-               .deriveWSPtrClass <PBD::StatefulDestructible, PBD::Stateful> ("StatefulDestructible")
+               .deriveWSPtrClass <PBD::StatefulDestructible, PBD::Stateful> ("StatefulDestructiblePtr")
                .endClass ()
 
                .deriveWSPtrClass <PBD::Controllable, PBD::StatefulDestructible> ("Controllable")
@@ -132,21 +128,64 @@ LuaBindings::common (lua_State* L)
                .addConst ("UseGroup", PBD::Controllable::GroupControlDisposition(PBD::Controllable::UseGroup))
                .endNamespace ()
 
-               .endNamespace ();
+               .endNamespace (); // PBD
 
        luabridge::getGlobalNamespace (L)
-               .beginNamespace ("ARDOUR") // XXX really libtimecode
+               .beginNamespace ("Timecode")
                .beginClass <Timecode::BBT_Time> ("BBT_TIME")
                .addConstructor <void (*) (uint32_t, uint32_t, uint32_t)> ()
                .endClass ()
                .endNamespace ();
 
        luabridge::getGlobalNamespace (L)
+
+               .beginNamespace ("Evoral")
+               .beginClass <Evoral::Parameter> ("Parameter")
+               .addConstructor <void (*) (uint32_t, uint8_t, uint32_t)> ()
+               .addFunction ("type", &Evoral::Parameter::type)
+               .addFunction ("channel", &Evoral::Parameter::channel)
+               .addFunction ("id", &Evoral::Parameter::id)
+               .endClass ()
+
+               .beginWSPtrClass <Evoral::ControlList> ("ControlList")
+               .addFunction ("add", &Evoral::ControlList::add)
+               .endClass ()
+
+               .beginWSPtrClass <Evoral::ControlSet> ("ControlSet")
+               .endClass ()
+
+               .beginWSPtrClass <Evoral::Control> ("Control")
+               .addFunction ("list", (boost::shared_ptr<Evoral::ControlList>(Evoral::Control::*)())&Evoral::Control::list)
+               .endClass ()
+
+               .beginClass <Evoral::ParameterDescriptor> ("ParameterDescriptor")
+               .addVoidConstructor ()
+               .addData ("lower", &Evoral::ParameterDescriptor::lower)
+               .addData ("upper", &Evoral::ParameterDescriptor::upper)
+               .addData ("normal", &Evoral::ParameterDescriptor::normal)
+               .addData ("toggled", &Evoral::ParameterDescriptor::toggled)
+               .endClass ()
+
+               .endNamespace () // Evoral
+
                .beginNamespace ("ARDOUR")
                .beginWSPtrClass <PluginInfo> ("PluginInfo")
                .addVoidConstructor ()
                .endClass ()
 
+               .beginNamespace ("Route")
+               .beginClass <Route::ProcessorStreams> ("ProcessorStreams")
+               .addVoidConstructor ()
+               .endClass ()
+               .endNamespace ()
+
+               .beginClass <ChanMapping> ("ChanMapping")
+               .addVoidConstructor ()
+               .addFunction ("get", static_cast<uint32_t(ChanMapping::*)(DataType, uint32_t) const>(&ChanMapping::get))
+               .addFunction ("set", &ChanMapping::set)
+               .addConst ("Invalid", 4294967295) // UINT32_MAX
+               .endClass ()
+
                .beginNamespace ("Properties")
                // templated class definitions
                .beginClass <PBD::PropertyDescriptor<bool> > ("BoolProperty").endClass ()
@@ -176,6 +215,18 @@ LuaBindings::common (lua_State* L)
                .deriveClass <PBD::OwnedPropertyList, PBD::PropertyList> ("OwnedPropertyList")
                .endClass ()
 
+               .deriveClass <Location, PBD::StatefulDestructible> ("Location")
+               .addFunction ("locked", &Location::locked)
+               .addFunction ("lock", &Location::lock)
+               .addFunction ("start", &Location::start)
+               .addFunction ("end", &Location::end)
+               .addFunction ("length", &Location::length)
+               .addFunction ("set_start", &Location::set_start)
+               .addFunction ("set_end", &Location::set_end)
+               .addFunction ("set_length", &Location::set)
+               .addFunction ("move_to", &Location::move_to)
+               .endClass ()
+
                .deriveWSPtrClass <SessionObject, PBD::StatefulDestructible> ("SessionObject")
                .addFunction ("name", &SessionObject::name)
                .endClass ()
@@ -186,6 +237,16 @@ LuaBindings::common (lua_State* L)
                .addFunction ("active", &Route::active)
                .addFunction ("set_active", &Route::set_active)
                .addFunction ("nth_plugin", &Route::nth_plugin)
+               .addFunction ("add_processor_by_index", &Route::add_processor_by_index)
+               .addFunction ("remove_processor", &Route::remove_processor)
+               .addFunction ("replace_processor", &Route::replace_processor)
+               .addFunction ("n_inputs", &Route::n_inputs)
+               .addFunction ("n_outputs", &Route::n_outputs)
+               .addFunction ("set_comment", &Route::set_comment)
+               .addFunction ("strict_io", &Route::strict_io)
+               .addFunction ("set_strict_io", &Route::set_strict_io)
+               .addFunction ("reset_plugin_insert", &Route::reset_plugin_insert)
+               .addFunction ("customize_plugin_insert", &Route::customize_plugin_insert)
                .endClass ()
 
                .deriveWSPtrClass <Track, Route> ("Track")
@@ -204,41 +265,74 @@ LuaBindings::common (lua_State* L)
                .endClass ()
 
                .deriveWSPtrClass <Region, SessionObject> ("Region")
+               /* properties */
+               .addFunction ("position", &Region::position)
+               .addFunction ("start", &Region::start)
+               .addFunction ("length", &Region::length)
+               .addFunction ("layer", &Region::layer)
+               .addFunction ("data_type", &Region::data_type)
+               .addFunction ("stretch", &Region::stretch)
+               .addFunction ("shift", &Region::shift)
+               .addRefFunction ("sync_offset", &Region::sync_offset)
+               .addFunction ("sync_position", &Region::sync_position)
+               .addFunction ("hidden", &Region::hidden)
+               .addFunction ("muted", &Region::muted)
+               .addFunction ("opaque", &Region::opaque)
+               .addFunction ("locked", &Region::locked)
+               .addFunction ("position_locked", &Region::position_locked)
+               .addFunction ("video_locked", &Region::video_locked)
+               .addFunction ("valid_transients", &Region::valid_transients)
+               .addFunction ("automatic", &Region::automatic)
+               .addFunction ("whole_file", &Region::whole_file)
+               .addFunction ("captured", &Region::captured)
+               .addFunction ("can_move", &Region::can_move)
+               .addFunction ("sync_marked", &Region::sync_marked)
+               .addFunction ("external", &Region::external)
+               .addFunction ("import", &Region::import)
+               .addFunction ("covers", &Region::covers)
+               .addFunction ("at_natural_position", &Region::at_natural_position)
+               .addFunction ("is_compound", &Region::is_compound)
+               /* editing operations */
+               .addFunction ("set_length", &Region::set_length)
+               .addFunction ("set_start", &Region::set_start)
+               .addFunction ("set_position", &Region::set_position)
+               .addFunction ("set_initial_position", &Region::set_initial_position)
+               .addFunction ("nudge_position", &Region::nudge_position)
+               .addFunction ("move_to_natural_position", &Region::move_to_natural_position)
+               .addFunction ("move_start", &Region::move_start)
+               .addFunction ("trim_front", &Region::trim_front)
+               .addFunction ("trim_end", &Region::trim_end)
+               .addFunction ("trim_to", &Region::trim_to)
+               .addFunction ("cut_front", &Region::cut_front)
+               .addFunction ("cut_end", &Region::cut_end)
+               .addFunction ("raise", &Region::raise)
+               .addFunction ("lower", &Region::lower)
+               .addFunction ("raise_to_top", &Region::raise_to_top)
+               .addFunction ("lower_to_bottom", &Region::lower_to_bottom)
+               .addFunction ("set_sync_position", &Region::set_sync_position)
+               .addFunction ("clear_sync_position", &Region::clear_sync_position)
+               .addFunction ("set_hidden", &Region::set_hidden)
+               .addFunction ("set_muted", &Region::set_muted)
+               .addFunction ("set_opaque", &Region::set_opaque)
+               .addFunction ("set_locked", &Region::set_locked)
+               .addFunction ("set_video_locked", &Region::set_video_locked)
+               .addFunction ("set_position_locked", &Region::set_position_locked)
                .endClass ()
 
                .beginWSPtrClass <Source> ("Source")
                .endClass ()
 
-               .beginClass <Evoral::Parameter> ("EvoralParameter")
-               .addConstructor <void (*) (uint32_t, uint8_t, uint32_t)> ()
-               .addFunction ("type", &Evoral::Parameter::type)
-               .addFunction ("channel", &Evoral::Parameter::channel)
-               .addFunction ("id", &Evoral::Parameter::id)
-               .endClass ()
-
-               .beginWSPtrClass <Evoral::ControlList> ("EvoralControlList")
-               .addFunction ("add", &Evoral::ControlList::add)
-               .endClass ()
-
-               .beginWSPtrClass <Evoral::ControlSet> ("EvoralControlSet")
+               .beginClass <Plugin::PresetRecord> ("PresetRecord")
+               .addData ("uri", &Plugin::PresetRecord::uri, false)
+               .addData ("label", &Plugin::PresetRecord::label, false)
+               .addData ("user", &Plugin::PresetRecord::user, false)
+               .addData ("valid", &Plugin::PresetRecord::valid, false)
                .endClass ()
 
                .deriveWSPtrClass <Automatable, Evoral::ControlSet> ("Automatable")
                .addFunction ("automation_control", (boost::shared_ptr<AutomationControl>(Automatable::*)(const Evoral::Parameter&, bool))&Automatable::automation_control)
                .endClass ()
 
-               .beginWSPtrClass <Evoral::Control> ("EvoralControl")
-               .addFunction ("list", (boost::shared_ptr<Evoral::ControlList>(Evoral::Control::*)())&Evoral::Control::list)
-               .endClass ()
-
-               .beginClass <Evoral::ParameterDescriptor> ("EvoralParameterDescriptor")
-               .addVoidConstructor ()
-               .addData ("lower", &Evoral::ParameterDescriptor::lower)
-               .addData ("upper", &Evoral::ParameterDescriptor::upper)
-               .addData ("normal", &Evoral::ParameterDescriptor::normal)
-               .addData ("toggled", &Evoral::ParameterDescriptor::toggled)
-               .endClass ()
-
                .deriveClass <ParameterDescriptor, Evoral::ParameterDescriptor> ("ParameterDescriptor")
                .addVoidConstructor ()
                .addData ("label", &ParameterDescriptor::label)
@@ -259,12 +353,15 @@ LuaBindings::common (lua_State* L)
                .addFunction ("automation_control", (boost::shared_ptr<AutomationControl>(Automatable::*)(const Evoral::Parameter&, bool))&Automatable::automation_control)
                .endClass ()
 
-               .deriveWSPtrClass <Plugin, PBD::StatefulDestructible> ("PluginInsert")
+               .deriveWSPtrClass <Plugin, PBD::StatefulDestructible> ("Plugin")
                .addFunction ("label", &Plugin::label)
                .addFunction ("name", &Plugin::name)
                .addFunction ("maker", &Plugin::maker)
                .addFunction ("parameter_count", &Plugin::parameter_count)
-               .addFunction ("nth_parameter", &Plugin::nth_parameter)
+               .addRefFunction ("nth_parameter", &Plugin::nth_parameter)
+               .addFunction ("preset_by_label", &Plugin::preset_by_label)
+               .addFunction ("preset_by_uri", &Plugin::preset_by_uri)
+               .addFunction ("load_preset", &Plugin::load_preset)
                .addFunction ("parameter_is_input", &Plugin::parameter_is_input)
                .addFunction ("get_docs", &Plugin::get_docs)
                .addFunction ("get_parameter_docs", &Plugin::get_parameter_docs)
@@ -275,12 +372,16 @@ LuaBindings::common (lua_State* L)
                .addFunction ("plugin", &PluginInsert::plugin)
                .addFunction ("activate", &PluginInsert::activate)
                .addFunction ("deactivate", &PluginInsert::deactivate)
+               .addFunction ("strict_io_configured", &PluginInsert::strict_io_configured)
+               .addFunction ("input_map", (ARDOUR::ChanMapping (PluginInsert::*)(uint32_t) const)&PluginInsert::input_map)
+               .addFunction ("output_map", (ARDOUR::ChanMapping (PluginInsert::*)(uint32_t) const)&PluginInsert::output_map)
+               .addFunction ("set_input_map", &PluginInsert::set_input_map)
+               .addFunction ("set_output_map", &PluginInsert::set_output_map)
+
                .endClass ()
 
                .deriveWSPtrClass <AutomationControl, Evoral::Control> ("AutomationControl")
                .addFunction ("automation_state", &AutomationControl::automation_state)
-               .addFunction ("automation_style", &AutomationControl::automation_style)
-               .addFunction ("set_automation_state", &AutomationControl::set_automation_state)
                .addFunction ("set_automation_style", &AutomationControl::set_automation_style)
                .addFunction ("start_touch", &AutomationControl::start_touch)
                .addFunction ("stop_touch", &AutomationControl::stop_touch)
@@ -305,7 +406,11 @@ LuaBindings::common (lua_State* L)
                .beginStdList <boost::shared_ptr<MidiTrack> > ("MidiTrackList")
                .endClass ()
 
-       // RouteList ==  boost::shared_ptr<std::list<boost::shared_ptr<Route> > >
+       // RouteList == std::list<boost::shared_ptr<Route> >
+               .beginConstStdList <boost::shared_ptr<Route> > ("RouteList")
+               .endClass ()
+
+       // boost::shared_ptr<RouteList>
                .beginPtrStdList <boost::shared_ptr<Route> > ("RouteListPtr")
                .endClass ()
 
@@ -353,7 +458,13 @@ LuaBindings::common (lua_State* L)
                .endClass ()
 
                .beginClass <ChanCount> ("ChanCount")
+               .addConstructor <void (*) (DataType, uint32_t)> ()
+               .addFunction ("get", &ChanCount::get)
+               .addFunction ("set", &ChanCount::set)
                .addFunction ("n_audio", &ChanCount::n_audio)
+               .addFunction ("n_midi", &ChanCount::n_midi)
+               .addFunction ("n_total", &ChanCount::n_total)
+               .addFunction ("reset", &ChanCount::reset)
                .endClass()
 
                .beginClass <DataType> ("DataType")
@@ -361,9 +472,18 @@ LuaBindings::common (lua_State* L)
                .endClass()
 
                /* libardour enums */
-               .beginNamespace ("Autostyle")
-               .addConst ("Absolute", ARDOUR::AutoState(Absolute))
-               .addConst ("Trim", ARDOUR::AutoState(Trim))
+               .beginNamespace ("PluginType")
+               .addConst ("AudioUnit", ARDOUR::PluginType(AudioUnit))
+               .addConst ("LADSPA", ARDOUR::PluginType(LADSPA))
+               .addConst ("LV2", ARDOUR::PluginType(LV2))
+               .addConst ("Windows_VST", ARDOUR::PluginType(Windows_VST))
+               .addConst ("LXVST", ARDOUR::PluginType(LXVST))
+               .addConst ("Lua", ARDOUR::PluginType(Lua))
+               .endNamespace ()
+
+               .beginNamespace ("AutoStyle")
+               .addConst ("Absolute", ARDOUR::AutoStyle(Absolute))
+               .addConst ("Trim", ARDOUR::AutoStyle(Trim))
                .endNamespace ()
 
                .beginNamespace ("AutoState")
@@ -394,13 +514,11 @@ LuaBindings::common (lua_State* L)
                .endClass()
                .beginStdVector <const AudioBackendInfo*> ("BackendVector").endClass ()
 
-               .beginNamespace ("ARDOUR")
                .beginClass <AudioBackend::DeviceStatus> ("DeviceStatus")
                .addData ("name", &AudioBackend::DeviceStatus::name)
                .addData ("available", &AudioBackend::DeviceStatus::available)
                .endClass()
                .beginStdVector <AudioBackend::DeviceStatus> ("DeviceStatusVector").endClass ()
-               .endNamespace ()
 
                .beginWSPtrClass <AudioBackend> ("AudioBackend")
                .addFunction ("info", &AudioBackend::info)
@@ -501,6 +619,14 @@ LuaBindings::common (lua_State* L)
 
                .endNamespace () // END Session enums
 
+               .beginNamespace ("LuaAPI")
+               .addFunction ("new_luaproc", ARDOUR::LuaAPI::new_luaproc)
+               .addFunction ("new_plugin_info", ARDOUR::LuaAPI::new_plugin_info)
+               .addFunction ("new_plugin", ARDOUR::LuaAPI::new_plugin)
+               .addFunction ("set_processor_param", ARDOUR::LuaAPI::set_processor_param)
+               .addFunction ("set_plugin_insert_param", ARDOUR::LuaAPI::set_plugin_insert_param)
+               .endNamespace ()
+
                .endNamespace ();// END ARDOUR
 }
 
@@ -526,12 +652,6 @@ LuaBindings::dsp (lua_State* L)
                .addFunction ("get_audio", static_cast<AudioBuffer&(BufferSet::*)(size_t)>(&BufferSet::get_audio))
                .addFunction ("count", static_cast<const ChanCount&(BufferSet::*)()const>(&BufferSet::count))
                .endClass()
-
-               .beginClass <ChanMapping> ("ChanMapping")
-               .addFunction ("get", static_cast<uint32_t(ChanMapping::*)(DataType, uint32_t)>(&ChanMapping::get))
-               .addFunction ("set", &ChanMapping::set)
-               .addConst ("Invalid", 4294967295) // UINT32_MAX
-               .endClass ()
                .endNamespace ();
 
        luabridge::getGlobalNamespace (L)
@@ -543,6 +663,10 @@ LuaBindings::dsp (lua_State* L)
                .addFunction ("buffer", (uint8_t*(Evoral::Event<framepos_t>::*)())&Evoral::Event<framepos_t>::buffer)
                .endClass ()
 
+               .beginClass <Evoral::Beats> ("Beats")
+               .addFunction ("to_double", &Evoral::Beats::to_double)
+               .endClass ()
+
                .deriveClass <Evoral::MIDIEvent<framepos_t>, Evoral::Event<framepos_t> > ("MidiEvent")
                // add Ctor?
                .addFunction ("type", &Evoral::MIDIEvent<framepos_t>::type)
@@ -593,6 +717,19 @@ LuaBindings::dsp (lua_State* L)
                .addFunction ("reset", &DSP::BiQuad::reset)
                .endClass ()
 
+               /* DSP enums */
+               .beginNamespace ("BiQuadType")
+               .addConst ("LowPass", ARDOUR::DSP::BiQuad::LowPass)
+               .addConst ("HighPass", ARDOUR::DSP::BiQuad::HighPass)
+               .addConst ("BandPassSkirt", ARDOUR::DSP::BiQuad::BandPassSkirt)
+               .addConst ("BandPass0dB", ARDOUR::DSP::BiQuad::BandPass0dB)
+               .addConst ("Notch", ARDOUR::DSP::BiQuad::Notch)
+               .addConst ("AllPass", ARDOUR::DSP::BiQuad::AllPass)
+               .addConst ("Peaking", ARDOUR::DSP::BiQuad::Peaking)
+               .addConst ("LowShelf", ARDOUR::DSP::BiQuad::LowShelf)
+               .addConst ("HighShelf", ARDOUR::DSP::BiQuad::HighShelf)
+               .endNamespace ()
+
                .beginClass <DSP::DspShm> ("DspShm")
                .addFunction ("allocate", &DSP::DspShm::allocate)
                .addFunction ("clear", &DSP::DspShm::clear)
@@ -625,6 +762,20 @@ LuaBindings::session (lua_State* L)
                .endNamespace (); // ARDOUR
 }
 
+void
+LuaBindings::osc (lua_State* L)
+{
+       luabridge::getGlobalNamespace (L)
+               .beginNamespace ("ARDOUR")
+               .beginNamespace ("LuaOSC")
+               .beginClass<LuaOSC::Address> ("Address")
+               .addConstructor<void (*) (std::string)> ()
+               .addCFunction ("send", &LuaOSC::Address::send)
+               .endClass ()
+               .endNamespace ()
+               .endNamespace ();
+}
+
 void
 LuaBindings::set_session (lua_State* L, Session *s)
 {