X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fardour%2Ffile_source.h;h=291b3a3d7617b4051d84bb93d1ee3f14e9c87f06;hb=03b57c455adeb7b9040d9f79a5b87c435a64814c;hp=76c3c57e36501fea37a37d7a1c8ff76442982c23;hpb=acdc88f279760443dc7397290e9c4752af5b23c9;p=ardour.git diff --git a/libs/ardour/ardour/file_source.h b/libs/ardour/ardour/file_source.h index 76c3c57e36..291b3a3d76 100644 --- a/libs/ardour/ardour/file_source.h +++ b/libs/ardour/ardour/file_source.h @@ -20,63 +20,88 @@ #ifndef __ardour_filesource_h__ #define __ardour_filesource_h__ +#include +#include #include #include #include "ardour/source.h" namespace ARDOUR { -class MissingSource : public std::exception { -public: +class MissingSource : public std::exception +{ + public: + MissingSource (const std::string& p, DataType t) throw () + : path (p), type (t) {} + ~MissingSource() throw() {} + virtual const char *what() const throw() { return "source file does not exist"; } + + std::string path; + DataType type; }; /** A source associated with a file on disk somewhere */ class FileSource : virtual public Source { public: - const Glib::ustring& path() const { return _path; } + virtual ~FileSource () {} - virtual bool safe_file_extension (const Glib::ustring& path) const = 0; + virtual const std::string& path() const { return _path; } - int move_to_trash (const Glib::ustring& trash_dir_name); - void mark_take (const Glib::ustring& id); + virtual bool safe_file_extension (const std::string& path) const = 0; + + int move_to_trash (const std::string& trash_dir_name); + void mark_take (const std::string& id); void mark_immutable (); + void mark_nonremovable (); - const Glib::ustring& take_id () const { return _take_id; } + const std::string& take_id () const { return _take_id; } bool within_session () const { return _within_session; } uint16_t channel() const { return _channel; } int set_state (const XMLNode&, int version); - int set_source_name (const Glib::ustring& newname, bool destructive); + int set_source_name (const std::string& newname, bool destructive); + + static bool find (Session&, DataType type, const std::string& path, + bool must_exist, bool& is_new, uint16_t& chan, + std::string& found_path); - static void set_search_path (DataType type, const Glib::ustring& path); + static bool find_2X (Session&, DataType type, const std::string& path, + bool must_exist, bool& is_new, uint16_t& chan, + std::string& found_path); - static bool find (DataType type, const Glib::ustring& path, - bool must_exist, bool& is_new, uint16_t& chan, - Glib::ustring& found_path); + void inc_use_count (); + bool removable () const; + + const std::string& origin() const { return _origin; } + + virtual void set_path (const std::string&); + + static PBD::Signal3 > AmbiguousFileName; protected: FileSource (Session& session, DataType type, - const Glib::ustring& path, - Source::Flag flags = Source::Flag(0)); + const std::string& path, + const std::string& origin, + Source::Flag flags = Source::Flag(0)); FileSource (Session& session, const XMLNode& node, bool must_exist); - virtual int init (const Glib::ustring& idstr, bool must_exist); + virtual int init (const std::string& idstr, bool must_exist); virtual int move_dependents_to_trash() { return 0; } void set_within_session_from_path (const std::string&); - bool removable () const; - - Glib::ustring _path; - Glib::ustring _take_id; - bool _file_is_new; - uint16_t _channel; - bool _within_session; + std::string _path; + std::string _take_id; + bool _file_is_new; + uint16_t _channel; + bool _within_session; + std::string _origin; + bool _open; - static std::map search_paths; + void prevent_deletion (); }; } // namespace ARDOUR