summaryrefslogtreecommitdiff
path: root/libs/ardour/export_preset.cc
diff options
context:
space:
mode:
authorSakari Bergen <sakari.bergen@beatwaves.net>2008-09-19 16:56:01 +0000
committerSakari Bergen <sakari.bergen@beatwaves.net>2008-09-19 16:56:01 +0000
commit68f04adec110a991e2b2c1657e67a7dc791decc1 (patch)
treee5a47603b50d0e17e69ffcfd904424ed06180ddf /libs/ardour/export_preset.cc
parentfa4bca989b18259456ec713b8f02e061ec8bc8e2 (diff)
* 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
Diffstat (limited to 'libs/ardour/export_preset.cc')
-rw-r--r--libs/ardour/export_preset.cc162
1 files changed, 162 insertions, 0 deletions
diff --git a/libs/ardour/export_preset.cc b/libs/ardour/export_preset.cc
new file mode 100644
index 0000000000..620daa0f7f
--- /dev/null
+++ b/libs/ardour/export_preset.cc
@@ -0,0 +1,162 @@
+/*
+ Copyright (C) 2008 Paul Davis
+ Author: Sakari Bergen
+
+ 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
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#include <ardour/export_preset.h>
+
+#include <ardour/session.h>
+
+using namespace ARDOUR;
+
+ExportPreset::ExportPreset (string filename, Session & s) :
+ session (s), global (filename), local (0)
+{
+ XMLNode * root;
+ if ((root = global.root())) {
+ XMLProperty * prop;
+ if ((prop = root->property ("id"))) {
+ set_id (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);
+ }
+ }
+}
+
+ExportPreset::~ExportPreset ()
+{
+ if (local) {
+ delete local;
+ }
+}
+
+void
+ExportPreset::set_name (string const & name)
+{
+ _name = name;
+
+ XMLNode * node;
+ if ((node = global.root())) {
+ node->add_property ("name", name);
+ }
+ if (local) {
+ local->add_property ("name", name);
+ }
+}
+
+void
+ExportPreset::set_id (string const & id)
+{
+ _id = id;
+
+ XMLNode * node;
+ if ((node = global.root())) {
+ node->add_property ("id", id);
+ }
+ if (local) {
+ local->add_property ("id", id);
+ }
+}
+
+void
+ExportPreset::set_global_state (XMLNode & state)
+{
+ delete global.root ();
+ global.set_root (&state);
+
+ set_id (_id.to_s());
+ set_name (_name);
+}
+
+void
+ExportPreset::set_local_state (XMLNode & state)
+{
+ delete local;
+ local = &state;
+
+ set_id (_id.to_s());
+ set_name (_name);
+}
+
+void
+ExportPreset::save () const
+{
+ save_instant_xml ();
+ if (global.root()) {
+ global.write ();
+ }
+}
+
+void
+ExportPreset::remove_local () const
+{
+ remove_instant_xml ();
+}
+
+XMLNode *
+ExportPreset::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 == PBD::UUID(prop->value())) {
+ return *it;
+ }
+ }
+ }
+
+ return 0;
+}
+
+void
+ExportPreset::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
+ExportPreset::remove_instant_xml () const
+{
+ XMLNode * instant_xml;
+ if ((instant_xml = session.instant_xml ("ExportPresets"))) {
+ instant_xml->remove_nodes_and_delete ("id", _id.to_s());
+ }
+}