X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=simgear%2Fstructure%2FSGBinding.cxx;h=836d7abc1364201817df01803040deeb9437a566;hb=c82df0590dd46347e2f1d0dca4cc3712f67f3654;hp=acd91814c50ebec4cefcbf64b966f2bb51ddd194;hpb=2ea2f1b4f29afe7d74e0474ca02874387526e804;p=simgear.git diff --git a/simgear/structure/SGBinding.cxx b/simgear/structure/SGBinding.cxx index acd91814..836d7abc 100644 --- a/simgear/structure/SGBinding.cxx +++ b/simgear/structure/SGBinding.cxx @@ -7,9 +7,17 @@ * $Id$ */ +#ifdef HAVE_CONFIG_H +# include +#endif + #include #include "SGBinding.hxx" +#include + +#include + SGBinding::SGBinding() : _command(0), _arg(new SGPropertyNode), @@ -27,7 +35,8 @@ SGBinding::SGBinding(const SGPropertyNode* node, SGPropertyNode* root) SGBinding::~SGBinding() { - _arg->getParent()->removeChild(_arg->getName(), _arg->getIndex(), false); + if(_arg && _arg->getParent()) + _arg->getParent()->removeChild(_arg->getName(), _arg->getIndex(), false); } void @@ -41,7 +50,6 @@ SGBinding::read(const SGPropertyNode* node, SGPropertyNode* root) if (_command_name.empty()) { SG_LOG(SG_INPUT, SG_WARN, "No command supplied for binding."); _command = 0; - return; } _arg = const_cast(node); @@ -56,9 +64,17 @@ SGBinding::fire () const _command = SGCommandMgr::instance()->getCommand(_command_name); if (_command == 0) { SG_LOG(SG_INPUT, SG_WARN, "No command attached to binding"); - } else if (!(*_command)(_arg)) { - SG_LOG(SG_INPUT, SG_ALERT, "Failed to execute command " - << _command_name); + } else + { + try { + if (!(*_command)(_arg)) { + SG_LOG(SG_INPUT, SG_ALERT, "Failed to execute command " + << _command_name); + } + } catch (sg_exception& e) { + SG_LOG(SG_GENERAL, SG_ALERT, "command '" << _command_name << "' failed with exception\n" + << "\tmessage:" << e.getMessage() << " (from " << e.getOrigin() << ")"); + } } } }