From 5156998e6e2536c9c713974d3ae719a5d2ef5c7f Mon Sep 17 00:00:00 2001 From: David Robillard Date: Sat, 11 Aug 2007 06:17:42 +0000 Subject: Saving of edited MIDI data to disk (on session save). Seems to be a pretty random problem with note duration restoring though... git-svn-id: svn://localhost/ardour2/trunk@2290 d708f5d6-7413-0410-9779-e7cbd77b26cf --- libs/ardour/midi_source.cc | 42 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) (limited to 'libs/ardour/midi_source.cc') diff --git a/libs/ardour/midi_source.cc b/libs/ardour/midi_source.cc index e52e39e121..c6e3bd0a08 100644 --- a/libs/ardour/midi_source.cc +++ b/libs/ardour/midi_source.cc @@ -30,9 +30,13 @@ #include #include +#include #include #include +#include +#include +#include #include "i18n.h" @@ -44,6 +48,7 @@ sigc::signal MidiSource::MidiSourceCreated; MidiSource::MidiSource (Session& s, string name) : Source (s, name, DataType::MIDI) + , _timeline_position(0) , _model(new MidiModel(s)) , _model_loaded (false) , _writing (false) @@ -54,6 +59,7 @@ MidiSource::MidiSource (Session& s, string name) MidiSource::MidiSource (Session& s, const XMLNode& node) : Source (s, node) + , _timeline_position(0) , _model(new MidiModel(s)) , _model_loaded (false) , _writing (false) @@ -158,6 +164,40 @@ MidiSource::mark_streaming_write_completed () void MidiSource::session_saved() { - cerr << "MidiSource saving, name = " << _name << endl; + flush(); + + if (_model && _model_loaded && _model->edited()) { + string newname; + const string basename = PBD::basename_nosuffix(_name); + string::size_type last_dash = basename.find_last_of("-"); + if (last_dash == string::npos || last_dash == basename.find_first_of("-")) { + newname = basename + "-1"; + } else { + stringstream ss(basename.substr(last_dash+1)); + unsigned write_count = 0; + ss >> write_count; + cerr << "WRITE COUNT: " << write_count << endl; + ++write_count; // start at 1 + ss.clear(); + ss << basename.substr(0, last_dash) << "-" << write_count; + newname = ss.str(); + } + + string newpath = _session.session_directory().midi_path().to_string() +"/"+ newname + ".mid"; + + boost::shared_ptr newsrc = boost::dynamic_pointer_cast( + SourceFactory::createWritable(DataType::MIDI, _session, newpath, 1, 0, true)); + + newsrc->set_timeline_position(_timeline_position); + _model->write_to(newsrc); + + newsrc->set_model(_model); + _model.reset(); + _model_loaded = false; + + newsrc->flush(); + + Switched.emit(newsrc); + } } -- cgit v1.2.3