Stateful::Stateful ()
: _frozen (0)
- , _no_property_changes (false)
, _properties (new OwnedPropertyList)
{
_extra_xml = 0;
return 0;
}
-/** Forget about any old state for this object */
+/** Forget about any changes to this object's properties */
void
-Stateful::clear_history ()
+Stateful::clear_changes ()
{
for (OwnedPropertyList::iterator i = _properties->begin(); i != _properties->end(); ++i) {
- i->second->clear_history ();
+ i->second->clear_changes ();
}
}
-void
-Stateful::diff (PropertyList& before, PropertyList& after) const
+PropertyList *
+Stateful::get_changes_as_properties (Command* cmd) const
{
+ PropertyList* pl = new PropertyList;
+
for (OwnedPropertyList::const_iterator i = _properties->begin(); i != _properties->end(); ++i) {
- i->second->diff (before, after);
+ i->second->get_changes_as_properties (*pl, cmd);
}
+
+ return pl;
}
-/** Set state of some/all _properties from an XML node.
- * @param owner_state Node.
- * @return PropertyChanges made.
+/** Set our property values from an XML node.
+ * Derived types can call this from ::set_state() (or elsewhere)
+ * to get basic property setting done.
+ * @return IDs of properties that were changed.
*/
PropertyChange
-Stateful::set_properties (XMLNode const & owner_state)
+Stateful::set_values (XMLNode const & node)
{
PropertyChange c;
for (OwnedPropertyList::iterator i = _properties->begin(); i != _properties->end(); ++i) {
- if (i->second->set_state_from_owner_state (owner_state)) {
+ if (i->second->set_value (node)) {
c.add (i->first);
}
}
}
PropertyChange
-Stateful::set_properties (const PropertyList& property_list)
+Stateful::apply_changes (const PropertyList& property_list)
{
PropertyChange c;
PropertyList::const_iterator p;
for (PropertyList::const_iterator i = property_list.begin(); i != property_list.end(); ++i) {
if ((p = _properties->find (i->first)) != _properties->end()) {
- DEBUG_TRACE (DEBUG::Stateful, string_compose ("actually setting property %1\n", p->second->property_name()));
- if (set_property (*i->second)) {
+
+ DEBUG_TRACE (
+ DEBUG::Stateful,
+ string_compose ("actually setting property %1 using %2\n", p->second->property_name(), i->second->property_name())
+ );
+
+ if (apply_changes (*i->second)) {
c.add (i->first);
}
} else {
post_set ();
+ send_change (c);
+
return c;
}
Stateful::add_properties (XMLNode& owner_state)
{
for (OwnedPropertyList::iterator i = _properties->begin(); i != _properties->end(); ++i) {
- i->second->add_state_to_owner_state (owner_state);
+ i->second->get_value (owner_state);
}
}
}
bool
-Stateful::set_property (const PropertyBase& prop)
+Stateful::apply_changes (const PropertyBase& prop)
{
OwnedPropertyList::iterator i = _properties->find (prop.property_id());
if (i == _properties->end()) {
return false;
}
- i->second->set_state_from_property (&prop);
+ i->second->apply_changes (&prop);
return true;
}
+PropertyList*
+Stateful::property_factory (const XMLNode& history_node) const
+{
+ PropertyList* prop_list = new PropertyList;
+
+ for (OwnedPropertyList::const_iterator i = _properties->begin(); i != _properties->end(); ++i) {
+ PropertyBase* prop = i->second->clone_from_xml (history_node);
+
+ if (prop) {
+ prop_list->add (prop);
+ }
+ }
+
+ return prop_list;
+}
+
+void
+Stateful::rdiff (vector<Command*>& cmds) const
+{
+ for (OwnedPropertyList::const_iterator i = _properties->begin(); i != _properties->end(); ++i) {
+ i->second->rdiff (cmds);
+ }
+}
+
+void
+Stateful::clear_owned_changes ()
+{
+ for (OwnedPropertyList::iterator i = _properties->begin(); i != _properties->end(); ++i) {
+ i->second->clear_owned_changes ();
+ }
+}
+
+
} // namespace PBD