X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fardour%2Ffile_source.h;h=291b3a3d7617b4051d84bb93d1ee3f14e9c87f06;hb=184c7cedf9974ecce3445b2686a1ebb32703694c;hp=91a6988335448f7898fd9ad37b6d6766d03cd7fc;hpb=e0aaed6d65f160c328cb8b56d7c6552ee15d65e2;p=ardour.git diff --git a/libs/ardour/ardour/file_source.h b/libs/ardour/ardour/file_source.h index 91a6988335..291b3a3d76 100644 --- a/libs/ardour/ardour/file_source.h +++ b/libs/ardour/ardour/file_source.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2006-2009 Paul Davis + Copyright (C) 2006-2009 Paul Davis This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -17,64 +17,91 @@ */ -#ifndef __ardour_filesource_h__ +#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; - - int move_to_trash (const Glib::ustring& trash_dir_name); - void mark_take (const Glib::ustring& id); + virtual const std::string& path() const { return _path; } + + 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 (); - - const Glib::ustring& take_id () const { return _take_id; } - bool is_embedded () const { return _is_embedded; } - uint16_t channel() const { return _channel; } + void mark_nonremovable (); + + 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_state (const XMLNode&); + int set_source_name (const std::string& newname, bool destructive); - int set_source_name (const Glib::ustring& 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 bool find_2X (Session&, DataType type, const std::string& path, + bool must_exist, bool& is_new, uint16_t& chan, + std::string& found_path); + + void inc_use_count (); + bool removable () const; + + const std::string& origin() const { return _origin; } + + virtual void set_path (const std::string&); - static void set_search_path (DataType type, const Glib::ustring& path); + static PBD::Signal3 > AmbiguousFileName; protected: FileSource (Session& session, DataType type, - const Glib::ustring& path, bool embedded, - 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; } - - bool find (DataType type, const Glib::ustring& path, - bool must_exist, bool& is_new, uint16_t& chan); - - bool removable () const; - - Glib::ustring _path; - Glib::ustring _take_id; - bool _file_is_new; - uint16_t _channel; - bool _is_embedded; + void set_within_session_from_path (const std::string&); + + std::string _path; + std::string _take_id; + bool _file_is_new; + uint16_t _channel; + bool _within_session; + std::string _origin; + bool _open; - static map search_paths; + void prevent_deletion (); }; } // namespace ARDOUR