From e9be3beb2a694a16eb6a2cc5e99409664b8d1835 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Wed, 16 Aug 2023 16:33:17 -0600 Subject: [PATCH] add get/set state methods to TimeDomainProvider These are not used yet, because only the Session really acts as a Provider and it uses the Config::default_time_domain to serialize that state --- libs/temporal/domain.cc | 46 ++++++++++++++++++++++++ libs/temporal/temporal/domain_provider.h | 9 ++++- libs/temporal/wscript | 1 + 3 files changed, 55 insertions(+), 1 deletion(-) create mode 100644 libs/temporal/domain.cc diff --git a/libs/temporal/domain.cc b/libs/temporal/domain.cc new file mode 100644 index 0000000000..1c3f9a124b --- /dev/null +++ b/libs/temporal/domain.cc @@ -0,0 +1,46 @@ +/* + * Copyright (C) 2023 Paul Davis + * + * 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., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#include "temporal/domain_provider.h" +#include "temporal/types_convert.h" + +#include "pbd/i18n.h" + +using namespace Temporal; + +XMLNode& +TimeDomainProvider::get_state () const +{ + XMLNode* node = new XMLNode (X_("TimeDomainProvider")); + node->set_property (X_("has-own"), have_domain); + if (have_domain) { + node->set_property (X_("domain"), domain); + } + return *node; +} + +int +TimeDomainProvider::set_state (const XMLNode& node, int version) +{ + node.get_property (X_("has-own"), have_domain); + if (have_domain) { + node.get_property (X_("domain"), domain); + } + return 0; +} + diff --git a/libs/temporal/temporal/domain_provider.h b/libs/temporal/temporal/domain_provider.h index 0ed3ea4eef..b396165288 100644 --- a/libs/temporal/temporal/domain_provider.h +++ b/libs/temporal/temporal/domain_provider.h @@ -20,11 +20,13 @@ #define __temporal_domain_provider_h__ #include "pbd/signals.h" +#include "pbd/stateful.h" + #include "temporal/types.h" namespace Temporal { -class TimeDomainProvider { +class TimeDomainProvider { public: explicit TimeDomainProvider () : have_domain (false), parent (nullptr) {} explicit TimeDomainProvider (TimeDomain td) : have_domain (true), domain (td), parent (nullptr) {} @@ -38,6 +40,11 @@ class TimeDomainProvider { virtual ~TimeDomainProvider() {} + /* replicates part of Stateful API but we do not want inheritance */ + + XMLNode& get_state () const; + int set_state (const XMLNode&, int version); + TimeDomainProvider& operator= (TimeDomainProvider const & other) { if (this != &other) { parent_connection.disconnect (); diff --git a/libs/temporal/wscript b/libs/temporal/wscript index 8f3518ae4e..7a22e74e49 100644 --- a/libs/temporal/wscript +++ b/libs/temporal/wscript @@ -28,6 +28,7 @@ temporal_sources = [ 'debug.cc', 'bbt_time.cc', 'beats.cc', + 'domain.cc', 'enums.cc', 'range.cc', 'superclock.cc',