summaryrefslogtreecommitdiff
path: root/libs/ardour
diff options
context:
space:
mode:
authorBen Loftis <ben@glw.com>2012-04-18 17:46:29 +0000
committerBen Loftis <ben@glw.com>2012-04-18 17:46:29 +0000
commit45ac9c8861be4b4290fdf64f2bea8e300ab13e8f (patch)
treeedfef34a7500d6e8be05cc677b333f57f4f21be3 /libs/ardour
parentc7c9c1bd2622b86ca4494098c80463fe15afeca4 (diff)
add User metadata. user metadata is edited from the same dialog and read/writable using the same mechanism as session metadata, but it is stored in the ardour.rc file instead of with the session. Importing metadata from another session does not change user metadata. SessionMetadata is now a singleton that is available to the session object and the various config objects.
git-svn-id: svn://localhost/ardour2/branches/3.0@12014 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour')
-rw-r--r--libs/ardour/ardour/session.h4
-rw-r--r--libs/ardour/ardour/session_configuration_vars.h2
-rw-r--r--libs/ardour/ardour/session_metadata.h29
-rw-r--r--libs/ardour/broadcast_info.cc5
-rw-r--r--libs/ardour/rc_configuration.cc7
-rw-r--r--libs/ardour/session.cc2
-rw-r--r--libs/ardour/session_metadata.cc137
-rw-r--r--libs/ardour/session_state.cc8
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;
}
}