diff options
-rwxr-xr-x | gtk2_ardour/midi_automation_line.cc | 42 | ||||
-rwxr-xr-x | gtk2_ardour/midi_automation_line.h | 40 | ||||
-rw-r--r-- | libs/ardour/ardour/midi_automation_list_binder.h | 45 | ||||
-rw-r--r-- | libs/ardour/midi_automation_list_binder.cc | 68 |
4 files changed, 195 insertions, 0 deletions
diff --git a/gtk2_ardour/midi_automation_line.cc b/gtk2_ardour/midi_automation_line.cc new file mode 100755 index 0000000000..c6bb8335aa --- /dev/null +++ b/gtk2_ardour/midi_automation_line.cc @@ -0,0 +1,42 @@ +/* + Copyright (C) 2010 Paul Davis + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#include "ardour/midi_automation_list_binder.h" +#include "midi_automation_line.h" + +using namespace std; + +MidiAutomationLine::MidiAutomationLine ( + const std::string& name, TimeAxisView& tav, ArdourCanvas::Group& group, + boost::shared_ptr<ARDOUR::AutomationList> list, + boost::shared_ptr<ARDOUR::MidiRegion> region, + Evoral::Parameter parameter, + const Evoral::TimeConverter<double, ARDOUR::sframes_t>* converter + ) : AutomationLine (name, tav, group, list, converter) + , _region (region) + , _parameter (parameter) +{ + +} + +MementoCommandBinder<ARDOUR::AutomationList>* +MidiAutomationLine::memento_command_binder () +{ + return new ARDOUR::MidiAutomationListBinder (_region->midi_source(), _parameter); +} diff --git a/gtk2_ardour/midi_automation_line.h b/gtk2_ardour/midi_automation_line.h new file mode 100755 index 0000000000..c632ddf25d --- /dev/null +++ b/gtk2_ardour/midi_automation_line.h @@ -0,0 +1,40 @@ +/* + Copyright (C) 2010 Paul Davis + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#include "ardour/midi_region.h" +#include "automation_line.h" + +/** Stub class so that lines for MIDI AutomationRegionViews can use the correct + * MementoCommandBinder. + */ +class MidiAutomationLine : public AutomationLine +{ +public: + MidiAutomationLine (const std::string&, TimeAxisView&, ArdourCanvas::Group&, + boost::shared_ptr<ARDOUR::AutomationList>, + boost::shared_ptr<ARDOUR::MidiRegion>, + Evoral::Parameter, + const Evoral::TimeConverter<double, ARDOUR::sframes_t>* converter = 0); + + MementoCommandBinder<ARDOUR::AutomationList>* memento_command_binder (); + +private: + boost::shared_ptr<ARDOUR::MidiRegion> _region; + Evoral::Parameter _parameter; +}; diff --git a/libs/ardour/ardour/midi_automation_list_binder.h b/libs/ardour/ardour/midi_automation_list_binder.h new file mode 100644 index 0000000000..dc92b75aa0 --- /dev/null +++ b/libs/ardour/ardour/midi_automation_list_binder.h @@ -0,0 +1,45 @@ +/* + Copyright (C) 2010 Paul Davis + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#include "pbd/memento_command.h" +#include "evoral/Parameter.hpp" +#include "ardour/session.h" + +namespace ARDOUR { + +class MidiSource; +class AutomationList; + +/** A class for late-binding a MidiSource and a Parameter to an AutomationList */ +class MidiAutomationListBinder : public MementoCommandBinder<ARDOUR::AutomationList> +{ +public: + MidiAutomationListBinder (boost::shared_ptr<ARDOUR::MidiSource>, Evoral::Parameter); + MidiAutomationListBinder (XMLNode *, ARDOUR::Session::SourceMap const &); + + ARDOUR::AutomationList* get (); + void add_state (XMLNode *); + +private: + boost::shared_ptr<ARDOUR::MidiSource> _source; + Evoral::Parameter _parameter; +}; + +} + diff --git a/libs/ardour/midi_automation_list_binder.cc b/libs/ardour/midi_automation_list_binder.cc new file mode 100644 index 0000000000..50ce307388 --- /dev/null +++ b/libs/ardour/midi_automation_list_binder.cc @@ -0,0 +1,68 @@ +/* + Copyright (C) 2010 Paul Davis + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#include "ardour/midi_automation_list_binder.h" +#include "ardour/automation_list.h" +#include "ardour/automation_control.h" +#include "ardour/midi_source.h" +#include "ardour/midi_model.h" + +using namespace ARDOUR; + +MidiAutomationListBinder::MidiAutomationListBinder (boost::shared_ptr<MidiSource> s, Evoral::Parameter p) + : _source (s) + , _parameter (p) +{ + +} + +MidiAutomationListBinder::MidiAutomationListBinder (XMLNode* node, Session::SourceMap const & sources) + : _parameter (0, 0, 0) +{ + XMLProperty* source = node->property ("source-id"); + assert (source); + + XMLProperty* parameter = node->property ("parameter"); + assert (parameter); + + Session::SourceMap::const_iterator i = sources.find (PBD::ID (source->value())); + assert (i != sources.end()); + _source = boost::dynamic_pointer_cast<MidiSource> (i->second); + + _parameter = EventTypeMap::instance().new_parameter (parameter->value()); +} + +AutomationList* +MidiAutomationListBinder::get () +{ + boost::shared_ptr<MidiModel> model = _source->model (); + assert (model); + + boost::shared_ptr<AutomationControl> control = model->automation_control (_parameter); + assert (control); + + return control->alist().get(); +} + +void +MidiAutomationListBinder::add_state (XMLNode* node) +{ + node->add_property ("source-id", _source->id().to_s()); + node->add_property ("parameter", EventTypeMap::instance().to_symbol (_parameter)); +} |