580{
581 void * value = NULL;
582
583 int i;
584 float v;
585 double dv;
586 float f[4];
589 unsigned int u;
590 unsigned char uc;
591 std::string s;
592
593
594 switch(type)
595 {
596 case TW_TYPE_BOOLCPP:
597 {
598 int ib;
599 if(sscanf(value_str," %d",&ib) == 1)
600 {
603 }else
604 {
605 printf("ERROR: Bad value format...\n");
606 return false;
607 }
608 break;
609 }
610 case TW_TYPE_QUAT4D:
611
612 {
613 if(sscanf(value_str," %lf %lf %lf %lf",&d[0],&d[1],&d[2],&d[3]) == 4)
614 {
616 }else
617 {
618 printf("ERROR: Bad value format...\n");
619 return false;
620 }
621 break;
622 }
623 case TW_TYPE_QUAT4F:
624 case TW_TYPE_COLOR4F:
625 {
626 if(sscanf(value_str," %f %f %f %f",&f[0],&f[1],&f[2],&f[3]) == 4)
627 {
628 value = &f;
629 }else
630 {
631 printf("ERROR: Bad value format...\n");
632 return false;
633 }
634 break;
635 }
636
637 case TW_TYPE_DIR3D:
638 {
639 if(sscanf(value_str," %lf %lf %lf",&d[0],&d[1],&d[2]) == 3)
640 {
642 }else
643 {
644 printf("ERROR: Bad value format...\n");
645 return false;
646 }
647 break;
648 }
649 case TW_TYPE_COLOR3F:
650 case TW_TYPE_DIR3F:
651 {
652 if(sscanf(value_str," %f %f %f",&f[0],&f[1],&f[2]) == 3)
653 {
654 value = &f;
655 }else
656 {
657 printf("ERROR: Bad value format...\n");
658 return false;
659 }
660 break;
661 }
662 case TW_TYPE_UINT8:
663 {
664 if(sscanf(value_str," %d",&i) == 1)
665 {
666
667 uc = (unsigned char) i;
668 value = &uc;
669 }else
670 {
671 printf("ERROR: Bad value format...\n");
672 return false;
673 }
674 break;
675 }
676 case TW_TYPE_BOOL32:
677 case TW_TYPE_INT32:
678 {
679 if(sscanf(value_str," %d",&i) == 1)
680 {
681 value = &i;
682 }else
683 {
684 printf("ERROR: Bad value format...\n");
685 return false;
686 }
687 break;
688 }
689 case TW_TYPE_UINT32:
690 {
691 if(sscanf(value_str," %u",&u) == 1)
692 {
693 value = &u;
694 }else
695 {
696 printf("ERROR: Bad value format...\n");
697 return false;
698 }
699 break;
700 }
701 case TW_TYPE_FLOAT:
702 {
703 if(sscanf(value_str," %f",&v) == 1)
704 {
705 value = &v;
706 }else
707 {
708 printf("ERROR: Bad value format...\n");
709 return false;
710 }
711 break;
712 }
713 case TW_TYPE_DOUBLE:
714 {
715 if(sscanf(value_str," %lf",&dv) == 1)
716 {
717 value = &dv;
718 }else
719 {
720 printf("ERROR: Bad value format...\n");
721 return false;
722 }
723 break;
724 }
725 case TW_TYPE_STDSTRING:
726 {
727 s = value_str;
728 value = &s;
729 break;
730 }
731 default:
732
733 std::map<TwType,std::pair<const char *,std::vector<TwEnumVal> > >::const_iterator iter =
736 {
737 std::vector<TwEnumVal>::const_iterator eit = (*iter).second.second.begin();
738 bool found = false;
739 for(;eit<(*iter).second.second.end();eit++)
740 {
741 if(strcmp(value_str,eit->Label) == 0)
742 {
743 i = eit->Value;
744 value = &i;
745 found = true;
746 break;
747 }
748 }
749 if(!found)
750 {
751 printf("ERROR_ENUM_VALUE_NOT_DEFINED");
752 }
753 }else
754 {
755 printf("ERROR_TYPE_NOT_SUPPORTED\n");
756 }
757
758 break;
759 }
760
761
762
763
764 bool item_found = false;
765 for(
766 std::vector<ReTwRWItem>::iterator it =
rw_items.begin();
768 it++)
769 {
771 {
772 void *
var = it->var;
773 switch(type)
774 {
775 case TW_TYPE_BOOLCPP:
776 {
777 bool * bvar =
static_cast<bool*
>(
var);
778 bool * bvalue = static_cast<bool*>(value);
779 *bvar = *bvalue;
780 break;
781 }
782 case TW_TYPE_QUAT4D:
783
784 {
785 double * dvar =
static_cast<double*
>(
var);
786 double * dvalue = static_cast<double*>(value);
787 dvar[0] = dvalue[0];
788 dvar[1] = dvalue[1];
789 dvar[2] = dvalue[2];
790 dvar[3] = dvalue[3];
791 break;
792 }
793 case TW_TYPE_QUAT4F:
794 case TW_TYPE_COLOR4F:
795 {
796 float * fvar =
static_cast<float*
>(
var);
797 float * fvalue = static_cast<float*>(value);
798 fvar[0] = fvalue[0];
799 fvar[1] = fvalue[1];
800 fvar[2] = fvalue[2];
801 fvar[3] = fvalue[3];
802 break;
803 }
804
805 case TW_TYPE_DIR3D:
806 {
807 double * dvar =
static_cast<double*
>(
var);
808 double * dvalue = static_cast<double*>(value);
809 dvar[0] = dvalue[0];
810 dvar[1] = dvalue[1];
811 dvar[2] = dvalue[2];
812 break;
813 }
814 case TW_TYPE_COLOR3F:
815 case TW_TYPE_DIR3F:
816 {
817 float * fvar =
static_cast<float*
>(
var);
818 float * fvalue = static_cast<float*>(value);
819 fvar[0] = fvalue[0];
820 fvar[1] = fvalue[1];
821 fvar[2] = fvalue[2];
822 break;
823 }
824 case TW_TYPE_UINT8:
825 {
826 unsigned char * ucvar =
static_cast<unsigned char*
>(
var);
827 unsigned char * ucvalue = static_cast<unsigned char*>(value);
828 *ucvar = *ucvalue;
829 break;
830 }
831 case TW_TYPE_BOOL32:
832 case TW_TYPE_INT32:
833 {
834 int * ivar =
static_cast<int*
>(
var);
835 int * ivalue = static_cast<int*>(value);
836 *ivar = *ivalue;
837 break;
838 }
839 case TW_TYPE_UINT32:
840 {
841 unsigned int * uvar =
static_cast<unsigned int*
>(
var);
842 unsigned int * uvalue = static_cast<unsigned int*>(value);
843 *uvar = *uvalue;
844 break;
845 }
846 case TW_TYPE_FLOAT:
847 {
848 float * fvar =
static_cast<float*
>(
var);
849 float * fvalue = static_cast<float*>(value);
850 *fvar = *fvalue;
851 break;
852 }
853 case TW_TYPE_DOUBLE:
854 {
855 double * dvar =
static_cast<double*
>(
var);
856 double * fvalue = static_cast<double*>(value);
857 *dvar = *fvalue;
858 break;
859 }
860 case TW_TYPE_STDSTRING:
861 {
862 std::string * svar =
static_cast<std::string*
>(
var);
863 std::string * svalue = static_cast<std::string*>(value);
864 *svar = *svalue;
865 break;
866 }
867 default:
868
869 std::map<TwType,std::pair<const char *,std::vector<TwEnumVal> > >::iterator iter =
872 {
873 int * ivar =
static_cast<int*
>(
var);
874 std::vector<TwEnumVal>::iterator eit = (*iter).second.second.begin();
875 bool found = false;
876 for(;eit<(*iter).second.second.end();eit++)
877 {
878 if(strcmp(value_str,eit->Label) == 0)
879 {
880 *ivar = eit->Value;
881 found = true;
882 break;
883 }
884 }
885 if(!found)
886 {
887 printf("ERROR_ENUM_VALUE_NOT_DEFINED");
888 }
889 }else
890 {
891 printf("ERROR_TYPE_NOT_SUPPORTED\n");
892 }
893 break;
894 }
895 item_found = true;
896 break;
897 }
898 }
899
900
901 if(!item_found)
902 {
903 for(
904 std::vector<ReTwCBItem>::iterator it =
cb_items.begin();
906 it++)
907 {
909 {
910 it->setCallback(value,it->clientData);
911 item_found = true;
912 break;
913 }
914 }
915 }
916
917 if(!item_found)
918 {
919 printf(
"ERROR: item '%s' not found\n",
name);
920 }
921 return true;
922}