diff options
Diffstat (limited to 'libs/ardour')
-rw-r--r-- | libs/ardour/ardour/session.h | 4 | ||||
-rw-r--r-- | libs/ardour/ardour/session_configuration_vars.h | 2 | ||||
-rw-r--r-- | libs/ardour/ardour/session_metadata.h | 29 | ||||
-rw-r--r-- | libs/ardour/broadcast_info.cc | 5 | ||||
-rw-r--r-- | libs/ardour/rc_configuration.cc | 7 | ||||
-rw-r--r-- | libs/ardour/session.cc | 2 | ||||
-rw-r--r-- | libs/ardour/session_metadata.cc | 137 | ||||
-rw-r--r-- | libs/ardour/session_state.cc | 8 |
8 files changed, 167 insertions, 27 deletions
diff --git a/libs/ardour/ardour/session.h b/libs/ardour/ardour/session.h index 5becfd9a8f..6c7a9af844 100644 --- a/libs/ardour/ardour/session.h +++ b/libs/ardour/ardour/session.h @@ -777,8 +777,6 @@ class Session : public PBD::StatefulDestructible, public PBD::ScopedConnectionLi boost::shared_ptr<PBD::Controllable> solo_cut_control() const; - SessionMetadata & metadata () { return *_metadata; } - SessionConfiguration config; bool exporting () const { @@ -1466,8 +1464,6 @@ class Session : public PBD::StatefulDestructible, public PBD::ScopedConnectionLi static bool _disable_all_loaded_plugins; - SessionMetadata * _metadata; - mutable bool have_looped; ///< Used in ::audible_frame(*) void update_have_rec_enabled_track (); diff --git a/libs/ardour/ardour/session_configuration_vars.h b/libs/ardour/ardour/session_configuration_vars.h index 87b317d3e8..a6147f9140 100644 --- a/libs/ardour/ardour/session_configuration_vars.h +++ b/libs/ardour/ardour/session_configuration_vars.h @@ -45,8 +45,6 @@ CONFIG_VARIABLE (TimecodeFormat, timecode_format, "timecode-format", timecode_30 CONFIG_VARIABLE_SPECIAL(std::string, raid_path, "raid-path", "", path_expand) CONFIG_VARIABLE_SPECIAL(std::string, audio_search_path, "audio-search-path", "", search_path_expand) CONFIG_VARIABLE_SPECIAL(std::string, midi_search_path, "midi-search-path", "", search_path_expand) -CONFIG_VARIABLE (std::string, bwf_country_code, "bwf-country-code", "US") -CONFIG_VARIABLE (std::string, bwf_organization_code, "bwf-organization-code", "US") CONFIG_VARIABLE (std::string, auditioner_output_left, "auditioner-output-left", "default") CONFIG_VARIABLE (std::string, auditioner_output_right, "auditioner-output-right", "default") CONFIG_VARIABLE (bool, timecode_source_is_synced, "timecode-source-is-synced", true) diff --git a/libs/ardour/ardour/session_metadata.h b/libs/ardour/ardour/session_metadata.h index 296bf6243f..c4341dbc61 100644 --- a/libs/ardour/ardour/session_metadata.h +++ b/libs/ardour/ardour/session_metadata.h @@ -37,6 +37,9 @@ namespace ARDOUR { class SessionMetadata : public PBD::StatefulDestructible { public: + //singleton instance: + static SessionMetadata *Metadata() { if (_metadata == NULL) _metadata = new SessionMetadata(); return _metadata; } + SessionMetadata (); ~SessionMetadata (); @@ -72,6 +75,15 @@ class SessionMetadata : public PBD::StatefulDestructible std::string genre () const; + std::string instructor () const; + std::string course () const; + + std::string user_name () const; + std::string user_email () const; + std::string user_web () const; + std::string organization () const; + std::string country () const; + /*** Editing ***/ void set_comment (const std::string &); void set_copyright (const std::string &); @@ -104,15 +116,28 @@ class SessionMetadata : public PBD::StatefulDestructible void set_genre (const std::string &); + void set_instructor (const std::string &); + void set_course (const std::string &); + + void set_user_name (const std::string &); + void set_user_email (const std::string &); + void set_user_web (const std::string &); + void set_organization (const std::string &); + void set_country (const std::string &); + /*** Serialization ***/ - XMLNode & get_state (); - int set_state (const XMLNode &, int version); + XMLNode & get_state (); //serializes stuff in the map, to be stored in session file + XMLNode & get_user_state (); //serializes stuff in the user_map, to be stored in user's config file + int set_state (const XMLNode &, int version_num); private: + static SessionMetadata *_metadata; //singleton instance + typedef std::pair<std::string, std::string> Property; typedef std::map<std::string, std::string> PropertyMap; PropertyMap map; + PropertyMap user_map; XMLNode * get_xml (const std::string & name); diff --git a/libs/ardour/broadcast_info.cc b/libs/ardour/broadcast_info.cc index cdc63cae11..af760629ff 100644 --- a/libs/ardour/broadcast_info.cc +++ b/libs/ardour/broadcast_info.cc @@ -28,6 +28,7 @@ #include "ardour/svn_revision.h" #include "ardour/ardour.h" #include "ardour/session.h" +#include "ardour/session_metadata.h" #include "pbd/convert.h" @@ -94,8 +95,8 @@ BroadcastInfo::set_originator_ref_from_session (Session const & session) serial_number << "ARDOUR" << "r" << std::setfill('0') << std::right << std::setw(5) << svn_revision; snprintf_bounded_null_filled (info->originator_reference, sizeof (info->originator_reference), "%2s%3s%12s%02d%02d%02d%9d", - session.config.get_bwf_country_code().c_str(), - session.config.get_bwf_organization_code().c_str(), + SessionMetadata::Metadata()->country().c_str(), + SessionMetadata::Metadata()->organization().c_str(), serial_number.str().c_str(), _time.tm_hour, _time.tm_min, diff --git a/libs/ardour/rc_configuration.cc b/libs/ardour/rc_configuration.cc index 8c4650b2e6..d5bfc7a9a8 100644 --- a/libs/ardour/rc_configuration.cc +++ b/libs/ardour/rc_configuration.cc @@ -36,6 +36,7 @@ #include "ardour/audio_diskstream.h" #include "ardour/control_protocol_manager.h" #include "ardour/filesystem_paths.h" +#include "ardour/session_metadata.h" #include "i18n.h" @@ -208,6 +209,8 @@ RCConfiguration::get_state () root->add_child_nocopy (get_variables ()); + root->add_child_nocopy (SessionMetadata::Metadata()->get_user_state()); + if (_extra_xml) { root->add_child_copy (*_extra_xml); } @@ -239,7 +242,7 @@ RCConfiguration::get_variables () } int -RCConfiguration::set_state (const XMLNode& root, int /*version*/) +RCConfiguration::set_state (const XMLNode& root, int version) { if (root.name() != "Ardour") { return -1; @@ -263,6 +266,8 @@ RCConfiguration::set_state (const XMLNode& root, int /*version*/) if (node->name() == "Config") { set_variables (*node); + } else if (node->name() == "Metadata") { + SessionMetadata::Metadata()->set_state (*node, version); } else if (node->name() == ControlProtocolManager::state_node_name) { _control_protocol_state = new XMLNode (*node); } else if (node->name() == MIDI::Port::state_node_name) { diff --git a/libs/ardour/session.cc b/libs/ardour/session.cc index 152113aa83..a7fc6740c2 100644 --- a/libs/ardour/session.cc +++ b/libs/ardour/session.cc @@ -94,7 +94,6 @@ #include "ardour/session.h" #include "ardour/session_directory.h" #include "ardour/session_directory.h" -#include "ardour/session_metadata.h" #include "ardour/session_playlists.h" #include "ardour/slave.h" #include "ardour/smf_source.h" @@ -162,7 +161,6 @@ Session::Session (AudioEngine &eng, , click_data (0) , click_emphasis_data (0) , main_outs (0) - , _metadata (new SessionMetadata()) , _have_rec_enabled_track (false) , _suspend_timecode_transmission (0) { diff --git a/libs/ardour/session_metadata.cc b/libs/ardour/session_metadata.cc index 51dba7ceff..8e2a4ca057 100644 --- a/libs/ardour/session_metadata.cc +++ b/libs/ardour/session_metadata.cc @@ -26,6 +26,8 @@ using namespace std; using namespace Glib; using namespace ARDOUR; +SessionMetadata *SessionMetadata::_metadata = NULL; //singleton instance + SessionMetadata::SessionMetadata () { /*** General ***/ @@ -53,6 +55,10 @@ SessionMetadata::SessionMetadata () map.insert (Property ("mixer", "")); //map.insert (Property ("performers", "")); // Multiple values [instrument] + /*** Education... ***/ + map.insert (Property ("instructor", "")); + map.insert (Property ("course", "")); + /*** Album info ***/ map.insert (Property ("album", "")); map.insert (Property ("compilation", "")); @@ -79,7 +85,14 @@ SessionMetadata::SessionMetadata () //map.insert (Property ("album_sort", "")); //map.insert (Property ("album_artist_sort", "")); //map.insert (Property ("artist_sort", "")); - //map.insert (Property ("title_sort", "")); + //map.insert (Property ("title_sort", ""));\ + + /*** Globals ***/ + user_map.insert (Property ("user_name", "")); + user_map.insert (Property ("user_email", "")); + user_map.insert (Property ("user_web", "")); + user_map.insert (Property ("user_organization", "")); + user_map.insert (Property ("user_country", "")); } SessionMetadata::~SessionMetadata () @@ -107,9 +120,12 @@ SessionMetadata::get_value (const string & name) const { PropertyMap::const_iterator it = map.find (name); if (it == map.end()) { - // Should not be reached! - std::cerr << "Programming error in SessionMetadata::get_value" << std::endl; - return ""; + it = user_map.find (name); + if (it == user_map.end()) { + // Should not be reached! + std::cerr << "Programming error in SessionMetadata::get_value" << std::endl; + return ""; + } } return it->second; @@ -126,9 +142,12 @@ SessionMetadata::set_value (const string & name, const string & value) { PropertyMap::iterator it = map.find (name); if (it == map.end()) { - // Should not be reached! - std::cerr << "Programming error in SessionMetadata::set_value" << std::endl; - return; + it = user_map.find (name); + if (it == user_map.end()) { + // Should not be reached! + std::cerr << "Programming error in SessionMetadata::set_value" << std::endl; + return; + } } it->second = value; @@ -163,7 +182,7 @@ SessionMetadata::get_state () } int -SessionMetadata::set_state (const XMLNode & state, int /*version*/) +SessionMetadata::set_state (const XMLNode & state, int version_num) { const XMLNodeList & children = state.children(); string name; @@ -186,6 +205,22 @@ SessionMetadata::set_state (const XMLNode & state, int /*version*/) return 0; } + +XMLNode & +SessionMetadata::get_user_state () +{ + XMLNode * node = new XMLNode ("Metadata"); + XMLNode * prop; + + for (PropertyMap::const_iterator it = user_map.begin(); it != user_map.end(); ++it) { + if ((prop = get_xml (it->first))) { + node->add_child_nocopy (*prop); + } + } + + return *node; +} + /*** Accessing ***/ string SessionMetadata::comment () const @@ -343,6 +378,51 @@ SessionMetadata::genre () const return get_value("genre"); } +string +SessionMetadata::instructor () const +{ + return get_value("instructor"); +} + +string +SessionMetadata::course () const +{ + return get_value("course"); +} + + +string +SessionMetadata::user_name () const +{ + return get_value("user_name"); +} + +string +SessionMetadata::user_email () const +{ + return get_value("user_email"); +} + +string +SessionMetadata::user_web () const +{ + return get_value("user_web"); +} + +string +SessionMetadata::organization () const +{ + return get_value("user_organization"); +} + +string +SessionMetadata::country () const +{ + return get_value("user_country"); +} + + + /*** Editing ***/ void SessionMetadata::set_comment (const string & v) @@ -499,3 +579,44 @@ SessionMetadata::set_genre (const string & v) { set_value ("genre", v); } + +void +SessionMetadata::set_instructor (const string & v) +{ + set_value ("instructor", v); +} + +void +SessionMetadata::set_course (const string & v) +{ + set_value ("course", v); +} + +void +SessionMetadata::set_user_name (const string & v) +{ + set_value ("user_name", v); +} + +void +SessionMetadata::set_user_email (const string & v) +{ + set_value ("user_email", v); +} + +void +SessionMetadata::set_user_web (const string & v) +{ + set_value ("user_web", v); +} + +void +SessionMetadata::set_organization (const string & v) +{ + set_value ("user_organization", v); +} +void +SessionMetadata::set_country (const string & v) +{ + set_value ("user_country", v); +} diff --git a/libs/ardour/session_state.cc b/libs/ardour/session_state.cc index 218f70cd5b..efde3e2f4e 100644 --- a/libs/ardour/session_state.cc +++ b/libs/ardour/session_state.cc @@ -566,10 +566,6 @@ Session::create (const string& session_template, BusProfile* bus_profile) } - /* Instantiate metadata */ - - _metadata = new SessionMetadata (); - /* set initial start + end point */ _state_of_the_state = Clean; @@ -1058,7 +1054,7 @@ Session::state(bool full_state) node->add_child_nocopy (config.get_variables ()); - node->add_child_nocopy (_metadata->get_state()); + node->add_child_nocopy (ARDOUR::SessionMetadata::Metadata()->get_state()); child = node->add_child ("Sources"); @@ -1275,7 +1271,7 @@ Session::set_state (const XMLNode& node, int version) if (version >= 3000) { if ((child = find_named_node (node, "Metadata")) == 0) { warning << _("Session: XML state has no metadata section") << endmsg; - } else if (_metadata->set_state (*child, version)) { + } else if ( ARDOUR::SessionMetadata::Metadata()->set_state (*child, version) ) { goto out; } } |