@@ -481,23 +481,25 @@ void VrmlNodeTUIButton::render(Viewer *viewer)
481481void VrmlNodeTUIToggleButton::initFields (VrmlNodeTUIToggleButton *node, vrml::VrmlNodeType *t)
482482{
483483 VrmlNodeTUIElement::initFields (node, t);
484- initFieldsHelper (node, t,
485- exposedField (" choice" , node->d_choice , [node](auto f){
486- if (node->d_TUIElement != NULL )
487- {
488- coTUIToggleButton *tb = (coTUIToggleButton *)node->d_TUIElement ;
489- node->d_state .set (node->d_choice .get () >= 0 );
490- tb->setState (node->d_choice .get () >= 0 );
491- }
492- }),
493- exposedField (" state" , node->d_state , [node](auto f){
484+
485+ auto updateFunc = [](VrmlNodeTUIToggleButton *node,bool state){
494486 if (node->d_TUIElement != NULL )
495487 {
488+ node->d_choice .set (state ? 0 : -1 );
489+ node->d_state .set (state);
496490 coTUIToggleButton *tb = (coTUIToggleButton *)node->d_TUIElement ;
497491 tb->setState (node->d_state .get ());
498492 if (node->sharedState && node->d_shared .get ())
499- *node->sharedState = node-> d_state . get () ;
493+ *node->sharedState = state ;
500494 }
495+ };
496+
497+ initFieldsHelper (node, t,
498+ exposedField (" choice" , node->d_choice , [updateFunc, node](auto f){
499+ updateFunc (node, node->d_choice .get () >= 0 );
500+ }),
501+ exposedField (" state" , node->d_state , [updateFunc, node](auto f){
502+ updateFunc (node, node->d_state .get ());
501503 }));
502504}
503505
@@ -532,23 +534,25 @@ VrmlNodeTUIToggleButton::VrmlNodeTUIToggleButton(const VrmlNodeTUIToggleButton&
532534{
533535}
534536
535- void VrmlNodeTUIToggleButton::tabletEvent (coTUIElement * )
537+ void VrmlNodeTUIToggleButton::sendStateToVrml ( bool state )
536538{
539+ d_state.set (state);
540+ d_choice.set (state ? 0 : -1 );
541+
537542 double timeStamp = System::the->time ();
538- coTUIToggleButton *tb = (coTUIToggleButton *)d_TUIElement;
539- d_state.set (tb->getState ());
540543 eventOut (timeStamp, " state" , d_state);
544+ eventOut (timeStamp, " choice" , d_choice);
545+ }
541546
547+
548+ void VrmlNodeTUIToggleButton::tabletEvent (coTUIElement *)
549+ {
550+ coTUIToggleButton *tb = (coTUIToggleButton *)d_TUIElement;
542551
543552 if (sharedState)
544- {
545- *sharedState = tb->getState ();
546- }
547- if (tb->getState ())
548- d_choice.set (0 );
549- else
550- d_choice.set (-1 );
551- eventOut (timeStamp, " choice" , d_choice);
553+ *sharedState = tb->getState ();
554+
555+ sendStateToVrml (tb->getState ());
552556}
553557
554558void VrmlNodeTUIToggleButton::render (Viewer *viewer)
@@ -572,31 +576,15 @@ void VrmlNodeTUIToggleButton::render(Viewer *viewer)
572576 {
573577 coTUIToggleButton* tb = (coTUIToggleButton*)d_TUIElement;
574578 tb->setState (*sharedState);
575- d_state.set (tb->getState ());
576- double timeStamp = System::the->time ();
577- eventOut (timeStamp, " state" , d_state);
578- if (tb->getState ())
579- d_choice.set (0 );
580- else
581- d_choice.set (-1 );
582- eventOut (timeStamp, " choice" , d_choice);
579+ sendStateToVrml (tb->getState ());
583580 }
584581 });
585582 }
586583 }
587584 VrmlNodeTUIElement::render (viewer);
588585 coTUIToggleButton *tb = (coTUIToggleButton *)d_TUIElement;
589586 tb->setState (d_state.get ());
590-
591- double timeStamp = System::the->time ();
592- // create eventOuts for default values
593- d_state.set (tb->getState ());
594- eventOut (timeStamp, " state" , d_state);
595- if (tb->getState ())
596- d_choice.set (0 );
597- else
598- d_choice.set (-1 );
599- eventOut (timeStamp, " choice" , d_choice);
587+ sendStateToVrml (tb->getState ());
600588 clearModified ();
601589 }
602590 // the elements are created in subclasses
0 commit comments