* Added PBD::UUID

* uuid headers are needed for building!
* Export presets and format profiles use UUID
* Moved ExportPreset class away from ExportProfileManager
* Workaround for Gtk::NoteBook bug in ExportMainDialog


git-svn-id: svn://localhost/ardour2/branches/3.0@3762 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
Sakari Bergen 2008-09-19 16:56:01 +00:00
parent fa4bca989b
commit 68f04adec1
14 changed files with 367 additions and 227 deletions

View file

@ -35,6 +35,7 @@
#include <ardour/export_timespan.h>
#include <ardour/export_channel_configuration.h>
#include <ardour/export_filename.h>
#include <ardour/export_preset.h>
#include <ardour/export_handler.h>
#include <ardour/session.h>
@ -45,143 +46,6 @@ using namespace PBD;
namespace ARDOUR
{
ExportProfileManager::Preset::Preset (string filename, Session & s) :
_id (0), session (s), global (filename), local (0)
{
XMLNode * root;
if ((root = global.root())) {
XMLProperty * prop;
if ((prop = root->property ("id"))) {
set_id ((uint32_t) atoi (prop->value()));
}
if ((prop = root->property ("name"))) {
set_name (prop->value());
}
XMLNode * instant_xml = get_instant_xml ();
if (instant_xml) {
XMLNode * instant_copy = new XMLNode (*instant_xml);
set_local_state (*instant_copy);
}
}
}
ExportProfileManager::Preset::~Preset ()
{
if (local) {
delete local;
}
}
void
ExportProfileManager::Preset::set_name (string name)
{
_name = name;
XMLNode * node;
if ((node = global.root())) {
node->add_property ("name", name);
}
if (local) {
local->add_property ("name", name);
}
}
void
ExportProfileManager::Preset::set_id (uint32_t id)
{
_id = id;
XMLNode * node;
if ((node = global.root())) {
node->add_property ("id", id);
}
if (local) {
local->add_property ("id", id);
}
}
void
ExportProfileManager::Preset::set_global_state (XMLNode & state)
{
delete global.root ();
global.set_root (&state);
set_id (_id);
set_name (_name);
}
void
ExportProfileManager::Preset::set_local_state (XMLNode & state)
{
delete local;
local = &state;
set_id (_id);
set_name (_name);
}
void
ExportProfileManager::Preset::save () const
{
save_instant_xml ();
if (global.root()) {
global.write ();
}
}
void
ExportProfileManager::Preset::remove_local () const
{
remove_instant_xml ();
}
XMLNode *
ExportProfileManager::Preset::get_instant_xml () const
{
XMLNode * instant_xml;
if ((instant_xml = session.instant_xml ("ExportPresets"))) {
XMLNodeList children = instant_xml->children ("ExportPreset");
for (XMLNodeList::iterator it = children.begin(); it != children.end(); ++it) {
XMLProperty * prop;
if ((prop = (*it)->property ("id")) && _id == (uint32_t) atoi (prop->value())) {
return *it;
}
}
}
return 0;
}
void
ExportProfileManager::Preset::save_instant_xml () const
{
if (!local) { return; }
/* First remove old, then add new */
remove_instant_xml ();
XMLNode * instant_xml;
if ((instant_xml = session.instant_xml ("ExportPresets"))) {
instant_xml->add_child_copy (*local);
} else {
instant_xml = new XMLNode ("ExportPresets");
instant_xml->add_child_copy (*local);
session.add_instant_xml (*instant_xml, false);
}
}
void
ExportProfileManager::Preset::remove_instant_xml () const
{
XMLNode * instant_xml;
if ((instant_xml = session.instant_xml ("ExportPresets"))) {
instant_xml->remove_nodes_and_delete ("id", to_string (_id, std::dec));
}
}
ExportProfileManager::ExportProfileManager (Session & s) :
handler (s.get_export_handler()),
session (s),
@ -276,12 +140,10 @@ ExportProfileManager::load_preset (PresetPtr preset)
void
ExportProfileManager::load_presets ()
{
preset_id_counter = 0;
vector<sys::path> found = find_file ("*.preset");
for (vector<sys::path>::iterator it = found.begin(); it != found.end(); ++it) {
preset_id_counter = std::max (preset_id_counter, load_preset_from_disk (*it));
load_preset_from_disk (*it);
}
}
@ -289,11 +151,9 @@ ExportProfileManager::PresetPtr
ExportProfileManager::save_preset (string const & name)
{
if (!current_preset) {
++preset_id_counter;
string filename = export_config_dir.to_string() + "/" + to_string (preset_id_counter, std::dec) + ".preset";
current_preset.reset (new Preset (filename, session));
string filename = export_config_dir.to_string() + "/" + name + ".preset";
current_preset.reset (new ExportPreset (filename, session));
preset_list.push_back (current_preset);
current_preset->set_id (preset_id_counter);
}
XMLNode * global_preset = new XMLNode ("ExportPreset");
@ -333,18 +193,16 @@ ExportProfileManager::remove_preset ()
current_preset.reset();
}
uint32_t
void
ExportProfileManager::load_preset_from_disk (PBD::sys::path const & path)
{
PresetPtr preset (new Preset (path.to_string(), session));
PresetPtr preset (new ExportPreset (path.to_string(), session));
preset_list.push_back (preset);
/* Handle id to filename mapping */
FilePair pair (preset->id(), path);
preset_file_map.insert (pair);
return preset->id();
}
void
@ -731,10 +589,10 @@ ExportProfileManager::FormatStatePtr
ExportProfileManager::deserialize_format (XMLNode & root)
{
XMLProperty * prop;
uint32_t id = 0;
UUID id;
if ((prop = root.property ("id"))) {
id = atoi (prop->value());
id = prop->value();
}
for (FormatList::iterator it = format_list->begin(); it != format_list->end(); ++it) {
@ -751,7 +609,7 @@ ExportProfileManager::serialize_format (FormatStatePtr state)
{
XMLNode * root = new XMLNode ("ExportFormat");
string id = state->format ? to_string (state->format->id(), std::dec) : "0";
string id = state->format ? state->format->id().to_s() : "";
root->add_property ("id", id);
return *root;