allow to load/save default session-properties

This commit is contained in:
Robin Gareus 2014-06-29 15:45:08 +02:00
parent cef26a4e1e
commit 8df35b35ba
5 changed files with 83 additions and 0 deletions

View File

@ -401,6 +401,7 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop
int rename (const std::string&);
bool get_nsm_state () const { return _under_nsm_control; }
void set_nsm_state (bool state) { _under_nsm_control = state; }
bool save_default_options ();
PBD::Signal1<void,std::string> StateSaved;
PBD::Signal0<void> StateReady;

View File

@ -35,6 +35,9 @@ public:
XMLNode& get_variables ();
void set_variables (XMLNode const &);
bool load_state ();
bool save_state ();
/* define accessor methods */
#undef CONFIG_VARIABLE

View File

@ -300,6 +300,9 @@ Session::Session (AudioEngine &eng,
throw failed_constructor ();
}
/* load default session properties - if any */
config.load_state();
} else {
if (load_state (_current_snapshot_name)) {

View File

@ -17,9 +17,15 @@
*/
#include <glib.h>
#include <glib/gstdio.h> /* for g_stat() */
#include <glibmm/miscutils.h> /* for build_filename() */
#include "pbd/file_utils.h"
#include "pbd/pathexpand.h"
#include "ardour/types.h"
#include "ardour/filesystem_paths.h"
#include "ardour/session_configuration.h"
#include "i18n.h"
@ -122,3 +128,67 @@ SessionConfiguration::map_parameters (boost::function<void (std::string)>& funct
#undef CONFIG_VARIABLE
#undef CONFIG_VARIABLE_SPECIAL
}
bool
SessionConfiguration::load_state ()
{
std::string rcfile;
GStatBuf statbuf;
if (find_file (ardour_config_search_path(), "session.rc", rcfile)) {
if (g_stat (rcfile.c_str(), &statbuf)) {
return false;
}
if (statbuf.st_size == 0) {
return false;
}
XMLTree tree;
if (!tree.read (rcfile.c_str())) {
error << string_compose(_("%1: cannot part default session options \"%2\""), PROGRAM_NAME, rcfile) << endmsg;
return false;
}
XMLNode& root (*tree.root());
if (root.name() != X_("SessionDefaults")) {
warning << _("Invalid session default XML Root.") << endmsg;
return false;
}
XMLNode* node;
if (((node = find_named_node (root, X_("Config"))) != 0)) {
LocaleGuard lg (X_("POSIX"));
set_variables(*node);
info << _("Loaded custom session defaults.") << endmsg;
} else {
warning << _("Found no session defaults in XML file.") << endmsg;
return false;
}
/* CUSTOM OVERRIDES */
set_audio_search_path("");
set_midi_search_path("");
set_raid_path("");
}
return true;
}
bool
SessionConfiguration::save_state ()
{
const std::string rcfile = Glib::build_filename (user_config_directory(), "session.rc");
if (rcfile.empty()) {
return false;
}
XMLTree tree;
XMLNode* root = new XMLNode(X_("SessionDefaults"));
root->add_child_nocopy (get_variables ());
tree.set_root (root);
if (!tree.write (rcfile.c_str())) {
error << _("Could not save session options") << endmsg;
return false;
}
return true;
}

View File

@ -879,6 +879,12 @@ Session::load_options (const XMLNode& node)
return 0;
}
bool
Session::save_default_options ()
{
return config.save_state();
}
XMLNode&
Session::get_state()
{