From 861181d7421012486e36327c464b957ec08e396b Mon Sep 17 00:00:00 2001 From: David Robillard Date: Sat, 11 Aug 2007 00:22:57 +0000 Subject: Fix MIDI file names on recording (don't write out a ton of useless empty .mid files). Preliminary hooks for writing model to file (still does nothing). git-svn-id: svn://localhost/ardour2/trunk@2289 d708f5d6-7413-0410-9779-e7cbd77b26cf --- libs/ardour/ardour/midi_model.h | 2 ++ libs/ardour/ardour/midi_source.h | 2 ++ libs/ardour/ardour/smf_source.h | 2 +- libs/ardour/ardour/source.h | 2 ++ libs/ardour/midi_diskstream.cc | 2 +- libs/ardour/midi_model.cc | 19 +++++++++++++++++++ libs/ardour/midi_source.cc | 6 ++++++ libs/ardour/session_state.cc | 11 ++++++++--- libs/ardour/smf_source.cc | 10 ++++++---- 9 files changed, 47 insertions(+), 9 deletions(-) diff --git a/libs/ardour/ardour/midi_model.h b/libs/ardour/ardour/midi_model.h index 2879514d5a..f1fcabfb1f 100644 --- a/libs/ardour/ardour/midi_model.h +++ b/libs/ardour/ardour/midi_model.h @@ -143,6 +143,8 @@ public: MidiModel::DeltaCommand* new_delta_command(const std::string name="midi edit"); void apply_command(Command* cmd); + bool write_new_source(const std::string& path); + sigc::signal ContentsChanged; private: diff --git a/libs/ardour/ardour/midi_source.h b/libs/ardour/ardour/midi_source.h index c812f465ea..2de31f879e 100644 --- a/libs/ardour/ardour/midi_source.h +++ b/libs/ardour/ardour/midi_source.h @@ -56,6 +56,8 @@ class MidiSource : public Source virtual void mark_streaming_midi_write_started (NoteMode mode); virtual void mark_streaming_write_started (); virtual void mark_streaming_write_completed (); + + virtual void session_saved(); string captured_for() const { return _captured_for; } void set_captured_for (string str) { _captured_for = str; } diff --git a/libs/ardour/ardour/smf_source.h b/libs/ardour/ardour/smf_source.h index f8e73c4ec3..fde91ed946 100644 --- a/libs/ardour/ardour/smf_source.h +++ b/libs/ardour/ardour/smf_source.h @@ -75,7 +75,7 @@ class SMFSource : public MidiSource { int move_to_trash (const string trash_dir_name); - static bool is_empty (string path); + bool is_empty () const; void mark_streaming_write_completed (); void mark_take (string); diff --git a/libs/ardour/ardour/source.h b/libs/ardour/ardour/source.h index e1843df75c..bbb7d798b2 100644 --- a/libs/ardour/ardour/source.h +++ b/libs/ardour/ardour/source.h @@ -57,6 +57,8 @@ class Source : public SessionObject virtual void mark_for_remove() = 0; virtual void mark_streaming_write_started () {} virtual void mark_streaming_write_completed () = 0; + + virtual void session_saved() {} XMLNode& get_state (); int set_state (const XMLNode&); diff --git a/libs/ardour/midi_diskstream.cc b/libs/ardour/midi_diskstream.cc index 7137772193..493a29f4ce 100644 --- a/libs/ardour/midi_diskstream.cc +++ b/libs/ardour/midi_diskstream.cc @@ -1361,7 +1361,7 @@ MidiDiskstream::use_new_write_source (uint32_t n) if (_write_source) { - if (SMFSource::is_empty (_write_source->path())) { + if (_write_source->is_empty ()) { _write_source->mark_for_remove (); _write_source.reset(); } else { diff --git a/libs/ardour/midi_model.cc b/libs/ardour/midi_model.cc index a10a663780..c68dcff6b6 100644 --- a/libs/ardour/midi_model.cc +++ b/libs/ardour/midi_model.cc @@ -424,3 +424,22 @@ MidiModel::DeltaCommand::undo() _model.ContentsChanged(); /* EMIT SIGNAL */ } + +bool +MidiModel::write_new_source(const std::string& path) +{ + cerr << "Writing model to " << path << endl; + +#if 0 + SourceFactory::createWritable (region->data_type(), session, path, false, session.frame_rate()); + + catch (failed_constructor& err) { + error << string_compose (_("filter: error creating new file %1 (%2)"), path, strerror (errno)) << endmsg; + return -1; + } + } +#endif + + return true; +} + diff --git a/libs/ardour/midi_source.cc b/libs/ardour/midi_source.cc index 59aeddf831..e52e39e121 100644 --- a/libs/ardour/midi_source.cc +++ b/libs/ardour/midi_source.cc @@ -155,3 +155,9 @@ MidiSource::mark_streaming_write_completed () _writing = false; } +void +MidiSource::session_saved() +{ + cerr << "MidiSource saving, name = " << _name << endl; +} + diff --git a/libs/ardour/session_state.cc b/libs/ardour/session_state.cc index 48fb932b30..9a994d3eca 100644 --- a/libs/ardour/session_state.cc +++ b/libs/ardour/session_state.cc @@ -560,6 +560,11 @@ Session::save_state (string snapshot_name, bool pending) return 1; } + /* tell sources we're saving first, in case they write out to a new file + * which should be saved with the state rather than the old one */ + for (SourceMap::const_iterator i = sources.begin(); i != sources.end(); ++i) + i->second->session_saved(); + tree.set_root (&get_state()); if (snapshot_name.empty()) { @@ -614,16 +619,16 @@ Session::save_state (string snapshot_name, bool pending) if (!pending) { - save_history (snapshot_name); + save_history (snapshot_name); bool was_dirty = dirty(); _state_of_the_state = StateOfTheState (_state_of_the_state & ~Dirty); - + if (was_dirty) { DirtyChanged (); /* EMIT SIGNAL */ } - + StateSaved (snapshot_name); /* EMIT SIGNAL */ } diff --git a/libs/ardour/smf_source.cc b/libs/ardour/smf_source.cc index 686fb96af3..92dfed3cec 100644 --- a/libs/ardour/smf_source.cc +++ b/libs/ardour/smf_source.cc @@ -113,7 +113,7 @@ bool SMFSource::removable () const { return (_flags & Removable) && ((_flags & RemoveAtDestroy) || - ((_flags & RemovableIfEmpty) && is_empty (_path))); + ((_flags & RemovableIfEmpty) && is_empty())); } int @@ -720,11 +720,13 @@ SMFSource::set_source_name (string newname, bool destructive) } bool -SMFSource::is_empty (string path) +SMFSource::is_empty () const { - /* XXX fix me */ + bool ret = (_track_size > 4); - return false; + cerr << name() << " IS EMPTY: " << ret << endl; + + return ret; } -- cgit v1.2.3