Support a 'clear' operation on SGBinding.

Needed to bug-fix a problem with the menubar on Mac - post-3.0 I will
change the behaviour of SGBinding's destructor to avoid the property
copies in other use-cases.
This commit is contained in:
James Turner 2014-01-15 21:56:16 +00:00
parent 0428adff03
commit 7184828a58
2 changed files with 29 additions and 0 deletions

View File

@ -47,6 +47,14 @@ SGBinding::~SGBinding()
_arg->getParent()->removeChild(_arg->getName(), _arg->getIndex(), false); _arg->getParent()->removeChild(_arg->getName(), _arg->getIndex(), false);
} }
void
SGBinding::clear()
{
_command = NULL;
_arg.clear();
_setting.clear();
}
void void
SGBinding::read(const SGPropertyNode* node, SGPropertyNode* root) SGBinding::read(const SGPropertyNode* node, SGPropertyNode* root)
{ {
@ -149,3 +157,11 @@ SGBindingList readBindingList(const simgear::PropertyList& aNodes, SGPropertyNod
return result; return result;
} }
void clearBindingList(const SGBindingList& aBindings)
{
BOOST_FOREACH(SGBinding_ptr b, aBindings) {
b->clear();
}
}

View File

@ -59,6 +59,14 @@ public:
virtual ~SGBinding (); virtual ~SGBinding ();
/**
* clear internal state of the binding back to empty. This is useful
* if you don't want the 'remove on delete' behaviour of the
* destructor.
*/
void clear();
/** /**
* Get the command name. * Get the command name.
* *
@ -154,4 +162,9 @@ void fireBindingListWithOffset(const SGBindingList& aBindings, double offset, do
*/ */
SGBindingList readBindingList(const simgear::PropertyList& aNodes, SGPropertyNode* aRoot); SGBindingList readBindingList(const simgear::PropertyList& aNodes, SGPropertyNode* aRoot);
/**
* call clear() on every binding in a list
*/
void clearBindingList(const SGBindingList& aBindings);
#endif #endif