From fc691cb3ba6c1a49b1b71f1169097bee0292f3cc 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 34e84c2428..e0db1d25b7 100644 --- a/libs/ardour/ardour/file_source.h +++ b/libs/ardour/ardour/file_source.h @@ -82,6 +82,8 @@ public: static PBD::Signal2 > 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 82e6252b45..6e69b7b2f3 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 1887b74302..8034634ba7 100644 --- a/libs/ardour/midi_source.cc +++ b/libs/ardour/midi_source.cc @@ -38,6 +38,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" @@ -380,6 +381,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 c504f50006..62ecab1397 100644 --- a/libs/ardour/smf_source.cc +++ b/libs/ardour/smf_source.cc @@ -73,9 +73,10 @@ SMFSource::SMFSource (Session& s, const string& path, Source::Flag flags) return; } - if (open(_path)) { + if (open (_path)) { throw failed_constructor (); } + _open = true; } @@ -658,3 +659,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