From e1bf151ab0a5dd1d467ea2f43b0cd9c70caecfae Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Fri, 4 Apr 2014 15:26:44 -0400 Subject: after cloning a MIDI region, mark the source file as non-removable. Fixes reports about missing MIDI files on the forums and IRC --- libs/ardour/ardour/file_source.h | 3 ++- libs/ardour/ardour/smf_source.h | 2 ++ libs/ardour/midi_source.cc | 5 +++++ libs/ardour/smf_source.cc | 12 +++++++++++- 4 files changed, 20 insertions(+), 2 deletions(-) (limited to 'libs') diff --git a/libs/ardour/ardour/file_source.h b/libs/ardour/ardour/file_source.h index 3d9c8c623f..6991840beb 100644 --- a/libs/ardour/ardour/file_source.h +++ b/libs/ardour/ardour/file_source.h @@ -82,6 +82,8 @@ public: static PBD::Signal3 > AmbiguousFileName; + virtual void prevent_deletion (); + protected: FileSource (Session& session, DataType type, const std::string& path, @@ -103,7 +105,6 @@ protected: std::string _origin; bool _open; - void prevent_deletion (); }; } // namespace ARDOUR diff --git a/libs/ardour/ardour/smf_source.h b/libs/ardour/ardour/smf_source.h index ca337a62c2..e422d37f62 100644 --- a/libs/ardour/ardour/smf_source.h +++ b/libs/ardour/ardour/smf_source.h @@ -69,6 +69,8 @@ public: static bool safe_midi_file_extension (const std::string& path); + void prevent_deletion (); + protected: void set_path (const std::string& newpath); diff --git a/libs/ardour/midi_source.cc b/libs/ardour/midi_source.cc index 124d3f7c9b..79922571c1 100644 --- a/libs/ardour/midi_source.cc +++ b/libs/ardour/midi_source.cc @@ -39,6 +39,7 @@ #include "ardour/midi_model.h" #include "ardour/midi_state_tracker.h" #include "ardour/midi_source.h" +#include "ardour/file_source.h" #include "ardour/session.h" #include "ardour/session_directory.h" #include "ardour/source_factory.h" @@ -381,6 +382,10 @@ MidiSource::clone (const string& path, Evoral::MusicalTime begin, Evoral::Musica } else { newsrc->set_model (_model); } + + /* this file is not removable (but since it is MIDI, it is mutable) */ + + boost::dynamic_pointer_cast (newsrc)->prevent_deletion (); return newsrc; } diff --git a/libs/ardour/smf_source.cc b/libs/ardour/smf_source.cc index 52c950e76f..4167bea877 100644 --- a/libs/ardour/smf_source.cc +++ b/libs/ardour/smf_source.cc @@ -72,9 +72,10 @@ SMFSource::SMFSource (Session& s, const string& path, Source::Flag flags) return; } - if (open(_path)) { + if (open (_path)) { throw failed_constructor (); } + _open = true; } @@ -657,3 +658,12 @@ SMFSource::ensure_disk_file () } } +void +SMFSource::prevent_deletion () +{ + /* Unlike the audio case, the MIDI file remains mutable (because we can + edit MIDI data) + */ + + _flags = Flag (_flags & ~(Removable|RemovableIfEmpty|RemoveAtDestroy)); +} -- cgit v1.2.3