@@ -380,7 +380,14 @@ void f3d_interactor_add_command(f3d_interactor_t* interactor, const char* action
380380 callback (c_args.data (), static_cast <int >(c_args.size ()), user_data);
381381 };
382382
383- cpp_interactor->addCommand (action, cpp_callback);
383+ try
384+ {
385+ cpp_interactor->addCommand (action, cpp_callback);
386+ }
387+ catch (const f3d::interactor::already_exists_exception& ex)
388+ {
389+ f3d::log::error (ex.what ());
390+ }
384391}
385392
386393// ----------------------------------------------------------------------------
@@ -437,7 +444,15 @@ int f3d_interactor_trigger_command(
437444 }
438445
439446 f3d::interactor* cpp_interactor = reinterpret_cast <f3d::interactor*>(interactor);
440- return cpp_interactor->triggerCommand (command, keep_comments != 0 ) ? 1 : 0 ;
447+ try
448+ {
449+ return cpp_interactor->triggerCommand (command, keep_comments != 0 ) ? 1 : 0 ;
450+ }
451+ catch (const f3d::interactor::command_runtime_exception& ex)
452+ {
453+ f3d::log::error (ex.what ());
454+ return 0 ;
455+ }
441456}
442457
443458// ----------------------------------------------------------------------------
@@ -477,8 +492,15 @@ void f3d_interactor_add_binding(f3d_interactor_t* interactor, const f3d_interact
477492
478493 std::string cpp_group = group ? group : " " ;
479494
480- cpp_interactor->addBinding (cpp_bind, cpp_commands, cpp_group, nullptr ,
481- static_cast <f3d::interactor::BindingType>(type), notify != 0 );
495+ try
496+ {
497+ cpp_interactor->addBinding (cpp_bind, cpp_commands, cpp_group, nullptr ,
498+ static_cast <f3d::interactor::BindingType>(type), notify != 0 );
499+ }
500+ catch (const f3d::interactor::already_exists_exception& ex)
501+ {
502+ f3d::log::error (ex.what ());
503+ }
482504}
483505
484506// ----------------------------------------------------------------------------
@@ -542,24 +564,32 @@ f3d_interaction_bind_t* f3d_interactor_get_binds_for_group(
542564 }
543565
544566 const f3d::interactor* cpp_interactor = reinterpret_cast <f3d::interactor*>(interactor);
545- std::vector<f3d::interaction_bind_t > binds = cpp_interactor->getBindsForGroup (group);
546-
547- *count = static_cast <int >(binds.size ());
548- if (binds.empty ())
567+ try
549568 {
550- return nullptr ;
551- }
569+ std::vector<f3d::interaction_bind_t > binds = cpp_interactor->getBindsForGroup (group);
552570
553- f3d_interaction_bind_t * result = new f3d_interaction_bind_t [binds.size ()];
571+ *count = static_cast <int >(binds.size ());
572+ if (binds.empty ())
573+ {
574+ return nullptr ;
575+ }
554576
555- for (size_t i = 0 ; i < binds.size (); ++i)
577+ f3d_interaction_bind_t * result = new f3d_interaction_bind_t [binds.size ()];
578+
579+ for (size_t i = 0 ; i < binds.size (); ++i)
580+ {
581+ result[i].mod = static_cast <f3d_interaction_bind_modifier_keys_t >(binds[i].mod );
582+ std::strncpy (result[i].inter , binds[i].inter .c_str (), sizeof (result[i].inter ) - 1 );
583+ result[i].inter [sizeof (result[i].inter ) - 1 ] = ' \0 ' ;
584+ }
585+
586+ return result;
587+ }
588+ catch (const f3d::interactor::does_not_exists_exception& ex)
556589 {
557- result[i].mod = static_cast <f3d_interaction_bind_modifier_keys_t >(binds[i].mod );
558- std::strncpy (result[i].inter , binds[i].inter .c_str (), sizeof (result[i].inter ) - 1 );
559- result[i].inter [sizeof (result[i].inter ) - 1 ] = ' \0 ' ;
590+ f3d::log::error (ex.what ());
591+ return nullptr ;
560592 }
561-
562- return result;
563593}
564594
565595// ----------------------------------------------------------------------------
@@ -609,13 +639,20 @@ void f3d_interactor_get_binding_documentation(f3d_interactor_t* interactor,
609639 cpp_bind.mod = static_cast <f3d::interaction_bind_t ::ModifierKeys>(bind->mod );
610640 cpp_bind.inter = bind->inter ;
611641
612- auto [doc_str, value_str] = cpp_interactor->getBindingDocumentation (cpp_bind);
642+ try
643+ {
644+ auto [doc_str, value_str] = cpp_interactor->getBindingDocumentation (cpp_bind);
613645
614- std::strncpy (doc->doc , doc_str.c_str (), sizeof (doc->doc ) - 1 );
615- doc->doc [sizeof (doc->doc ) - 1 ] = ' \0 ' ;
646+ std::strncpy (doc->doc , doc_str.c_str (), sizeof (doc->doc ) - 1 );
647+ doc->doc [sizeof (doc->doc ) - 1 ] = ' \0 ' ;
616648
617- std::strncpy (doc->value , value_str.c_str (), sizeof (doc->value ) - 1 );
618- doc->value [sizeof (doc->value ) - 1 ] = ' \0 ' ;
649+ std::strncpy (doc->value , value_str.c_str (), sizeof (doc->value ) - 1 );
650+ doc->value [sizeof (doc->value ) - 1 ] = ' \0 ' ;
651+ }
652+ catch (const f3d::interactor::does_not_exists_exception& ex)
653+ {
654+ f3d::log::error (ex.what ());
655+ }
619656}
620657
621658// ----------------------------------------------------------------------------
@@ -631,8 +668,16 @@ f3d_interactor_binding_type_t f3d_interactor_get_binding_type(
631668 f3d::interaction_bind_t cpp_bind;
632669 cpp_bind.mod = static_cast <f3d::interaction_bind_t ::ModifierKeys>(bind->mod );
633670 cpp_bind.inter = bind->inter ;
634- f3d::interactor::BindingType cpp_type = cpp_interactor->getBindingType (cpp_bind);
635- return static_cast <f3d_interactor_binding_type_t >(cpp_type);
671+ try
672+ {
673+ f3d::interactor::BindingType cpp_type = cpp_interactor->getBindingType (cpp_bind);
674+ return static_cast <f3d_interactor_binding_type_t >(cpp_type);
675+ }
676+ catch (const f3d::interactor::does_not_exists_exception& ex)
677+ {
678+ f3d::log::error (ex.what ());
679+ return F3D_INTERACTOR_BINDING_OTHER ;
680+ }
636681}
637682
638683// ----------------------------------------------------------------------------
0 commit comments